diff --git a/alfa-client/libs/admin-settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts b/alfa-client/libs/admin-settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts
index c6d801bdd90f6f27101dd9d621c497083c57f6ac..b77eab038c5245a3a22fe459a20916d5fb72693b 100644
--- a/alfa-client/libs/admin-settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts
+++ b/alfa-client/libs/admin-settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts
@@ -1,10 +1,4 @@
-import {
-  AbstractFormService,
-  EMPTY_STRING,
-  HttpError,
-  ProblemDetail,
-  StateResource,
-} from '@alfa-client/tech-shared';
+import { AbstractFormService, EMPTY_STRING, StateResource } from '@alfa-client/tech-shared';
 import { Injectable } from '@angular/core';
 import { FormControl, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
 import { isNil } from 'lodash-es';
@@ -43,7 +37,7 @@ export class PostfachFormService extends AbstractFormService {
     });
   }
 
-  protected doSubmit(): Observable<StateResource<PostfachResource | HttpError>> {
+  protected doSubmit(): Observable<StateResource<PostfachResource>> {
     const value: Postfach = this.getFormValue();
     if (this.shouldSkipAbsender(value)) {
       delete value.absender;
@@ -68,9 +62,7 @@ export class PostfachFormService extends AbstractFormService {
 
   public submitWithProgress(): Observable<boolean> {
     return this.submit().pipe(
-      map(
-        (stateResource: StateResource<PostfachResource | ProblemDetail>) => stateResource.loading,
-      ),
+      map((stateResource: StateResource<PostfachResource>) => stateResource.loading),
     );
   }
 }
diff --git a/alfa-client/libs/admin-settings/src/lib/postfach/postfach.service.ts b/alfa-client/libs/admin-settings/src/lib/postfach/postfach.service.ts
index 24eb2f3b5b2ad34101a7ba4cfe920a709949e88c..f2de8ffd4b04558662b127232879dd1fd8cb9c92 100644
--- a/alfa-client/libs/admin-settings/src/lib/postfach/postfach.service.ts
+++ b/alfa-client/libs/admin-settings/src/lib/postfach/postfach.service.ts
@@ -1,4 +1,4 @@
-import { HttpError, StateResource } from '@alfa-client/tech-shared';
+import { StateResource } from '@alfa-client/tech-shared';
 import { Injectable } from '@angular/core';
 import { Observable } from 'rxjs';
 import { SettingName } from '../admin-settings.model';
@@ -13,7 +13,7 @@ export class PostfachService {
     return this.postfachResourceService.get();
   }
 
-  public save(postfach: Postfach): Observable<StateResource<PostfachResource | HttpError>> {
+  public save(postfach: Postfach): Observable<StateResource<PostfachResource>> {
     return this.postfachResourceService.save(this.buildPostfachSettingItem(postfach));
   }
 
diff --git a/alfa-client/libs/tech-shared/src/lib/ngrx/api-state-service.executer.ts b/alfa-client/libs/tech-shared/src/lib/ngrx/api-state-service.executer.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6a479a664283131ccf07b77d44d637315a0db2c6
--- /dev/null
+++ b/alfa-client/libs/tech-shared/src/lib/ngrx/api-state-service.executer.ts
@@ -0,0 +1,41 @@
+import { Resource } from '@ngxp/rest';
+import { Observable, map, withLatestFrom } from 'rxjs';
+import { StateResource } from '../resource/resource.util';
+import { ApiSingleResourceStateService } from './state.service';
+
+export class ApiStateServiceExecuter<B extends Resource, T extends Resource> {
+  private stateService: ApiSingleResourceStateService<B, T>;
+  private baseResource: Observable<StateResource<T>>;
+  shouldExecute: boolean;
+
+  public static init<B extends Resource, T extends Resource>(
+    stateService: ApiSingleResourceStateService<B, T>,
+  ): ApiStateServiceExecuter<B, T> {
+    return new ApiStateServiceExecuter<B, T>(stateService);
+  }
+
+  constructor(stateService: ApiSingleResourceStateService<B, T>) {
+    this.stateService = stateService;
+
+    this.shouldExecute = true;
+  }
+
+  public withBaseResource(baseResource: Observable<StateResource<T>>): this {
+    this.baseResource = baseResource;
+    return this;
+  }
+
+  public execute(runnable: (resource: T) => void): Observable<StateResource<T>> {
+    return this.baseResource.pipe(
+      withLatestFrom(this.stateService.selectResource()),
+      map(([baseStateResource, stateResource]) => {
+        if (this.shouldExecute && !baseStateResource.loading) {
+          runnable(stateResource.resource);
+          this.shouldExecute = false;
+          return { ...baseStateResource, loading: true };
+        }
+        return baseStateResource;
+      }),
+    );
+  }
+}
diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.loader.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.loader.ts
index 5c38968831a043ebffeab3de3bc78f1136757321..f65fc2011cb9f37d9950a758e564ae3ebdcd423c 100644
--- a/alfa-client/libs/tech-shared/src/lib/resource/resource.loader.ts
+++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.loader.ts
@@ -18,7 +18,7 @@ export class ResourceLoader<B extends Resource, T extends Resource> {
 
   constructor(
     private config: ServiceConfig<B>,
-    private resourceStateService: ResourceStateService<T>,
+    private resourceStateService: ResourceStateService<B, T>,
   ) {}
 
   public get(): Observable<StateResource<T>> {
diff --git a/alfa-client/libs/tech-shared/src/lib/service/formservice.abstract.ts b/alfa-client/libs/tech-shared/src/lib/service/formservice.abstract.ts
index a02d2bab0a0eadcc998270d2d06adc277961d236..6d18542c1d8367665f74157f90ba0d284af4d465 100644
--- a/alfa-client/libs/tech-shared/src/lib/service/formservice.abstract.ts
+++ b/alfa-client/libs/tech-shared/src/lib/service/formservice.abstract.ts
@@ -48,13 +48,13 @@ export abstract class AbstractFormService {
 
   protected abstract initForm(): UntypedFormGroup;
 
-  public submit(): Observable<StateResource<Resource | HttpError>> {
+  public submit(): Observable<StateResource<Resource>> {
     return this.doSubmit().pipe(map((result) => this.handleResponse(result)));
   }
 
-  protected abstract doSubmit(): Observable<StateResource<Resource | HttpError>>;
+  protected abstract doSubmit(): Observable<StateResource<Resource>>;
 
-  handleResponse(result: StateResource<Resource | HttpError>): StateResource<Resource | HttpError> {
+  handleResponse(result: StateResource<Resource>): StateResource<Resource> {
     if (result.loading) return result;
     if (hasStateResourceError(result)) {
       this.handleError(result.error);