diff --git a/alfa-client/libs/admin/keycloak-shared/src/lib/keycloak-formservice.spec.ts b/alfa-client/libs/admin/keycloak-shared/src/lib/keycloak-formservice.spec.ts
index f6dfce08e009d031361edc19c27e3ac73f97b353..94f9f9636df31314f05d76cf815b5707d032be1c 100644
--- a/alfa-client/libs/admin/keycloak-shared/src/lib/keycloak-formservice.spec.ts
+++ b/alfa-client/libs/admin/keycloak-shared/src/lib/keycloak-formservice.spec.ts
@@ -30,7 +30,7 @@ import {
   StateResource,
 } from '@alfa-client/tech-shared';
 import { Injectable } from '@angular/core';
-import { fakeAsync, flush, TestBed, tick } from '@angular/core/testing';
+import { fakeAsync, TestBed, tick } from '@angular/core/testing';
 import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
 import { ActivatedRoute, UrlSegment } from '@angular/router';
 import { faker } from '@faker-js/faker/.';
@@ -225,24 +225,16 @@ describe('KeycloakFormService', () => {
     });
 
     describe('on client validation error', () => {
-      it('should return empty state resource with loading first', () => {
-        service.form.setErrors({ dummy: 'dummy error' });
-
-        service.submit().subscribe((stateResource: StateResource<Dummy>) => {
-          expect(stateResource).toEqual(createEmptyStateResource(true));
-        });
-      });
-
       it('should return empty state resource withouth loading after delay', fakeAsync(() => {
         service.form.setErrors({ dummy: 'dummy error' });
 
-        tick(200);
-
-        service.submit().subscribe((stateResource: StateResource<Dummy>) => {
-          expect(stateResource).toEqual(createEmptyStateResource());
+        const results: StateResource<unknown>[] = [];
+        service.submit().subscribe((value: StateResource<unknown>) => {
+          results.push(value);
         });
+        tick(200);
 
-        flush();
+        expect(results).toEqual([createEmptyStateResource(true), createEmptyStateResource()]);
       }));
     });
 
diff --git a/alfa-client/libs/admin/keycloak-shared/src/lib/keycloak-formservice.ts b/alfa-client/libs/admin/keycloak-shared/src/lib/keycloak-formservice.ts
index 28fd9f9cf9a415eded091ede9c85449e9be57824..c36e8fa65e00598ec42c2f5b86a6e92b7fbc04b6 100644
--- a/alfa-client/libs/admin/keycloak-shared/src/lib/keycloak-formservice.ts
+++ b/alfa-client/libs/admin/keycloak-shared/src/lib/keycloak-formservice.ts
@@ -22,6 +22,7 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import {
+  creatDelayedEmptyStateResource,
   createEmptyStateResource,
   InvalidParam,
   isLoaded,
@@ -31,7 +32,7 @@ import {
 import { inject, Injectable } from '@angular/core';
 import { FormBuilder, FormGroup } from '@angular/forms';
 import { ActivatedRoute, UrlSegment } from '@angular/router';
-import { catchError, delay, first, Observable, of, startWith, tap } from 'rxjs';
+import { catchError, first, Observable, of, tap } from 'rxjs';
 import { ValidationMessageCode } from '../../../../tech-shared/src/lib/validation/tech.validation.messages';
 import * as FormUtil from './form.util';
 import { ErrorRepresentation, KeycloakErrorMessage, KeycloakFieldName, KeycloakHttpErrorResponse } from './keycloak-error.model';
@@ -79,17 +80,13 @@ export abstract class KeycloakFormService<T> {
 
   public submit(): Observable<StateResource<T>> {
     if (this.form.invalid) {
-      return this.creatDelayedEmptyStateResource();
+      return creatDelayedEmptyStateResource();
     }
     return this._doSubmit().pipe(
       catchError((keycloakError: KeycloakHttpErrorResponse) => this._processResponseValidationErrors(keycloakError)),
     );
   }
 
-  private creatDelayedEmptyStateResource(): Observable<StateResource<T>> {
-    return of(createEmptyStateResource<T>()).pipe(delay(200), startWith(createEmptyStateResource<T>(true)));
-  }
-
   _processResponseValidationErrors(keycloakError: KeycloakHttpErrorResponse): Observable<StateResource<T>> {
     try {
       this._setValidationErrorsOnControls(
diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.util.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.util.ts
index 201e8100c1682cafdeb57d86521d0b60b99a7b36..40f4dabc86ec168497e92529e23a1800d1649179 100644
--- a/alfa-client/libs/tech-shared/src/lib/resource/resource.util.ts
+++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.util.ts
@@ -23,6 +23,7 @@
  */
 import { getEmbeddedResource, getUrl, hasLink, Resource, ResourceUri } from '@ngxp/rest';
 import { isEqual, isNil, isNull } from 'lodash-es';
+import { delay, Observable, of, startWith } from 'rxjs';
 import { HttpError } from '../tech.model';
 import { encodeUrlForEmbedding, isNotNull } from '../tech.util';
 
@@ -54,6 +55,10 @@ export function createErrorStateResource<T>(error: HttpError): StateResource<any
   return { ...createEmptyStateResource<T>(), error, loaded: true };
 }
 
+export function creatDelayedEmptyStateResource<T>(): Observable<StateResource<T>> {
+  return of(createEmptyStateResource<T>()).pipe(delay(200), startWith(createEmptyStateResource<T>(true)));
+}
+
 export function doIfLoadingRequired(stateResource: StateResource<any>, runable: () => void): boolean {
   if (isLoadingRequired(stateResource)) {
     runable();