diff --git a/src/app/deposit/deposit.action.ts b/src/app/deposit/deposit.action.ts
index f0c23b371f5fb593429eae2e572a1646439433e6..f1352acfe4f8c6039ba29ba686ec4a2fa48228c9 100644
--- a/src/app/deposit/deposit.action.ts
+++ b/src/app/deposit/deposit.action.ts
@@ -5,24 +5,21 @@ import {CrudNameSpace} from "@app/shared/crud.namespace";
 import {TypeCrudAction} from "@app/shared/decorators/type-crud-action.decorator";
 import {ApiResourceNameEnum} from "@app/shared/enums/api-resource-name.enum";
 import {StateEnum} from "@app/shared/enums/state.enum";
-import {CollectionTypedModel} from "@app/shared/models/collection-typed.model";
-import {QueryParametersModel} from "@app/shared/models/query-parameters.model";
 import {StringUtil} from "@app/shared/utils/string.util";
 
 const state = StateEnum.deposit;
 
 export namespace DepositAction {
-
+  @TypeCrudAction(state)
   export class LoadResource extends CrudAction.LoadResource {
-    static readonly type = StringUtil.format(CrudAction.LoadResource.type, state);
   }
 
+  @TypeCrudAction(state)
   export class LoadResourceSuccess extends CrudAction.LoadResourceSuccess {
-    static readonly type = StringUtil.format(CrudAction.LoadResourceSuccess.type, state);
   }
 
+  @TypeCrudAction(state)
   export class LoadResourceFail extends CrudAction.LoadResourceFail {
-    static readonly type = StringUtil.format(CrudAction.LoadResourceFail.type, state);
   }
 
   @TypeCrudAction(state)
@@ -30,7 +27,8 @@ export namespace DepositAction {
   }
 
   @TypeCrudAction(state)
-  export class GetAll extends CrudAction.GetAll {}
+  export class GetAll extends CrudAction.GetAll {
+  }
 
   @TypeCrudAction(state)
   export class GetAllSuccess extends CrudAction.GetAllSuccess<DepositsModel> {
diff --git a/src/app/deposit/deposit.state.ts b/src/app/deposit/deposit.state.ts
index 71b022a1915d65b5c205d0f5e8af74cd07f949f1..f66bfd90b95431dab9e69073200461d9f646ce6a 100644
--- a/src/app/deposit/deposit.state.ts
+++ b/src/app/deposit/deposit.state.ts
@@ -3,8 +3,8 @@ import {DepositAction, depositActionNameSpace} from "@app/deposit/deposit.action
 import {DepositDataFileModel} from "@app/deposit/models/deposit-data-file.model";
 import {UploadFileStatusModel} from "@app/deposit/models/upload-file-status.model";
 import {DepositsModel} from "@app/generated-api";
+import {CrudNameSpace} from "@app/shared/crud.namespace";
 import {CrudState, CrudStateModel} from "@app/shared/crud.state";
-import {OverrideCrudAction} from "@app/shared/decorators/crud.decorator";
 import {ApiActionEnum} from "@app/shared/enums/api-action.enum";
 import {ApiResourceNameEnum} from "@app/shared/enums/api-resource-name.enum";
 import {PreIngestResourceApiEnum, ResourceApiEnum} from "@app/shared/enums/api.enum";
@@ -48,14 +48,16 @@ export class DepositState extends CrudState<DepositsModel> {
               protected store: Store,
               protected notificationService: NotificationService) {
     super(apiService, store, notificationService);
-    this.initState(depositActionNameSpace);
-    console.log(this);
   }
 
   defineUrlResource(): ResourceApiEnum {
     return PreIngestResourceApiEnum.deposits;
   }
 
+  defineCrudNameSpace(): CrudNameSpace {
+    return depositActionNameSpace;
+  }
+
   defineState(): StateEnum {
     return StateEnum.deposit;
   }
@@ -64,12 +66,6 @@ export class DepositState extends CrudState<DepositsModel> {
     return [];
   }
 
-  @OverrideCrudAction()
-  @Action(DepositAction.GetAll)
-  getAll(ctx: StateContext<CrudStateModel<DepositsModel>>, action: DepositAction.GetAll): Observable<CollectionTypedModel<DepositsModel>> {
-    return super.getAll(ctx, action);
-  }
-
   @Action(DepositAction.LoadResource)
   loadResource(ctx: StateContext<DepositStateModel>, action: DepositAction.LoadResource): void {
     ctx.patchState({
diff --git a/src/app/deposit/dialogs/delete/delete.dialog.ts b/src/app/deposit/dialogs/delete/delete.dialog.ts
index 43c8cafcce389162f14e0401d4fa6149ade652dc..8cbf4e5c492e85342dcbf44629e4b9a893ac7372 100644
--- a/src/app/deposit/dialogs/delete/delete.dialog.ts
+++ b/src/app/deposit/dialogs/delete/delete.dialog.ts
@@ -1,5 +1,6 @@
 import {ChangeDetectionStrategy, Component, Inject} from "@angular/core";
 import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material";
+import {depositActionNameSpace} from "@app/deposit/deposit.action";
 import {DepositStateModel} from "@app/deposit/deposit.state";
 import {DepositsModel} from "@app/generated-api";
 import {AbstractDeleteDialog} from "@app/shared/dialogs/abstract-delete/abstract-delete.dialog";
@@ -24,7 +25,7 @@ export class DeleteDialog extends AbstractDeleteDialog<DepositsModel, DepositSta
               protected dialogRef: MatDialogRef<DeleteDialog>,
               @Inject(MAT_DIALOG_DATA) public data: DeleteDialogModel,
   ) {
-    super(store, dialogRef, data, StateEnum.deposit);
+    super(store, dialogRef, data, StateEnum.deposit, depositActionNameSpace);
   }
 
 }
diff --git a/src/app/deposit/views/create/create.view.ts b/src/app/deposit/views/create/create.view.ts
index b46430034f4763fcda27132504853978a5658dec..bec52015a44474e56b88b51b14b5ebf314569ea9 100644
--- a/src/app/deposit/views/create/create.view.ts
+++ b/src/app/deposit/views/create/create.view.ts
@@ -1,5 +1,5 @@
 import {ChangeDetectionStrategy, Component, OnInit} from "@angular/core";
-import {DepositAction} from "@app/deposit/deposit.action";
+import {DepositAction, depositActionNameSpace} from "@app/deposit/deposit.action";
 import {DepositStateModel} from "@app/deposit/deposit.state";
 import {DepositsModel, LanguagesModel, LicensesModel, PreservationPoliciesModel, SubmissionPoliciesModel} from "@app/generated-api";
 import {OrganizationalUnitModule} from "@app/organizational-unit/organizational-unit.module";
@@ -29,7 +29,7 @@ export class CreateView extends AbstractCreateView<DepositsModel, DepositStateMo
   @Select((state) => (state[StateEnum.organizationalUnit] as OrganizationalUnitStateModel).list) organizationalUnits$: Observable<OrganizationalUnitModule[]>;
 
   constructor(protected store: Store) {
-    super(store, StateEnum.deposit);
+    super(store, StateEnum.deposit, depositActionNameSpace);
   }
 
   ngOnInit() {
diff --git a/src/app/deposit/views/detail/detail.view.ts b/src/app/deposit/views/detail/detail.view.ts
index 6ee60b4baaa897cfeb3c595db283c14f5026836e..2bcf74db41499d6f4e77974fbb5f17f92daf98b3 100644
--- a/src/app/deposit/views/detail/detail.view.ts
+++ b/src/app/deposit/views/detail/detail.view.ts
@@ -1,7 +1,7 @@
 import {ChangeDetectionStrategy, Component, OnInit} from "@angular/core";
 import {MatDialog} from "@angular/material";
 import {ActivatedRoute} from "@angular/router";
-import {DepositAction} from "@app/deposit/deposit.action";
+import {DepositAction, depositActionNameSpace} from "@app/deposit/deposit.action";
 import {DepositStateModel} from "@app/deposit/deposit.state";
 import {DepositDataFileModel} from "@app/deposit/models/deposit-data-file.model";
 import {DepositsModel, LanguagesModel, LicensesModel, PreservationPoliciesModel, SubmissionPoliciesModel} from "@app/generated-api";
@@ -40,7 +40,7 @@ export class DetailView extends AbstractDetailView<DepositsModel, DepositStateMo
   constructor(protected store: Store,
               protected route: ActivatedRoute,
               public dialog: MatDialog) {
-    super(store, route, dialog, StateEnum.deposit);
+    super(store, route, dialog, StateEnum.deposit, depositActionNameSpace);
   }
 
   ngOnInit() {
diff --git a/src/app/deposit/views/edit/edit.view.ts b/src/app/deposit/views/edit/edit.view.ts
index 06bb940775a6636489764c21af6d143d1cd962cf..ff02571b00575cd7812a44756e52cb7b2550df16 100644
--- a/src/app/deposit/views/edit/edit.view.ts
+++ b/src/app/deposit/views/edit/edit.view.ts
@@ -32,7 +32,7 @@ export class EditView extends AbstractEditView<DepositsModel, DepositStateModel>
 
   constructor(protected store: Store,
               protected route: ActivatedRoute) {
-    super(store, route, StateEnum.deposit);
+    super(store, route, StateEnum.deposit, depositActionNameSpace);
   }
 
   ngOnInit() {
diff --git a/src/app/organizational-unit/dialogs/delete/delete.dialog.ts b/src/app/organizational-unit/dialogs/delete/delete.dialog.ts
index 4f69389b4e2b4979dfd427e579a71d48e5bf3c5a..ebf8557239a22d2995225dd45476c98903ef27da 100644
--- a/src/app/organizational-unit/dialogs/delete/delete.dialog.ts
+++ b/src/app/organizational-unit/dialogs/delete/delete.dialog.ts
@@ -1,10 +1,11 @@
 import {ChangeDetectionStrategy, Component, Inject} from "@angular/core";
 import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material";
 import {OrganizationalUnitsModel} from "@app/generated-api";
-import {OrganizationalUnitStateModel} from "@app/shared/organizational-unit.state";
 import {AbstractDeleteDialog} from "@app/shared/dialogs/abstract-delete/abstract-delete.dialog";
 import {StateEnum} from "@app/shared/enums/state.enum";
 import {DeleteDialogModel} from "@app/shared/models/delete-dialog.model";
+import {orgUnitActionNameSpace} from "@app/shared/organizational-unit.action";
+import {OrganizationalUnitStateModel} from "@app/shared/organizational-unit.state";
 import {TRANSLATE} from "@app/shared/utils/translate.util";
 import {Store} from "@ngxs/store";
 
@@ -24,7 +25,7 @@ export class DeleteDialog extends AbstractDeleteDialog<OrganizationalUnitsModel,
               protected dialogRef: MatDialogRef<DeleteDialog>,
               @Inject(MAT_DIALOG_DATA) public data: DeleteDialogModel,
   ) {
-    super(store, dialogRef, data, StateEnum.organizationalUnit);
+    super(store, dialogRef, data, StateEnum.organizationalUnit, orgUnitActionNameSpace);
   }
 
 }
diff --git a/src/app/organizational-unit/views/create/create.view.ts b/src/app/organizational-unit/views/create/create.view.ts
index db111601b6169e81e777bd5743db2335bee9862a..396c10c4da2aff0ea3fb2aa583fdc8ed13502a51 100644
--- a/src/app/organizational-unit/views/create/create.view.ts
+++ b/src/app/organizational-unit/views/create/create.view.ts
@@ -1,6 +1,7 @@
 import {ChangeDetectionStrategy, Component, OnInit} from "@angular/core";
 import {OrganizationalUnitsModel, PreservationPoliciesModel, SubmissionPoliciesModel} from "@app/generated-api";
 import {StateEnum} from "@app/shared/enums/state.enum";
+import {orgUnitActionNameSpace} from "@app/shared/organizational-unit.action";
 import {OrganizationalUnitStateModel} from "@app/shared/organizational-unit.state";
 import {PreservationPolicyStateModel} from "@app/shared/preservation-policy.state";
 import {SharedStateModel} from "@app/shared/shared.state";
@@ -20,7 +21,7 @@ export class CreateView extends AbstractCreateView<OrganizationalUnitsModel, Org
   @Select((state) => ((state[StateEnum.shared] as SharedStateModel).preservationPolicy as PreservationPolicyStateModel).list) listPreservationPolicies$: Observable<PreservationPoliciesModel[]>;
 
   constructor(protected store: Store) {
-    super(store, StateEnum.organizationalUnit);
+    super(store, StateEnum.organizationalUnit, orgUnitActionNameSpace);
   }
 
   ngOnInit(): void {
diff --git a/src/app/organizational-unit/views/detail/detail.view.ts b/src/app/organizational-unit/views/detail/detail.view.ts
index 0e10da7e6d6082628cc130a25617eb87c82e9693..1a4efd0d75e5ee1bf06589a852481d41a36c1b52 100644
--- a/src/app/organizational-unit/views/detail/detail.view.ts
+++ b/src/app/organizational-unit/views/detail/detail.view.ts
@@ -3,7 +3,7 @@ import {MatDialog} from "@angular/material";
 import {ActivatedRoute} from "@angular/router";
 import {OrganizationalUnitsModel, PreservationPoliciesModel, SubmissionPoliciesModel} from "@app/generated-api";
 import {StateEnum} from "@app/shared/enums/state.enum";
-import {OrgUnitAction} from "@app/shared/organizational-unit.action";
+import {OrgUnitAction, orgUnitActionNameSpace} from "@app/shared/organizational-unit.action";
 import {OrganizationalUnitStateModel} from "@app/shared/organizational-unit.state";
 import {PreservationPolicyStateModel} from "@app/shared/preservation-policy.state";
 import {SharedStateModel} from "@app/shared/shared.state";
@@ -32,7 +32,7 @@ export class DetailView extends AbstractDetailView<OrganizationalUnitsModel, Org
   constructor(protected store: Store,
               protected route: ActivatedRoute,
               public dialog: MatDialog) {
-    super(store, route, dialog, StateEnum.organizationalUnit);
+    super(store, route, dialog, StateEnum.organizationalUnit, orgUnitActionNameSpace);
   }
 
   getSubResourceWithParentId(id: string): void {
diff --git a/src/app/organizational-unit/views/edit/edit.view.ts b/src/app/organizational-unit/views/edit/edit.view.ts
index 33864745e41903208c0e051395406688452cbe72..433eb7b193d03fad733fe977f1673d0ebbc2600f 100644
--- a/src/app/organizational-unit/views/edit/edit.view.ts
+++ b/src/app/organizational-unit/views/edit/edit.view.ts
@@ -2,7 +2,7 @@ import {ChangeDetectionStrategy, Component, OnInit} from "@angular/core";
 import {ActivatedRoute} from "@angular/router";
 import {OrganizationalUnitsModel, PreservationPoliciesModel, SubmissionPoliciesModel} from "@app/generated-api";
 import {StateEnum} from "@app/shared/enums/state.enum";
-import {OrgUnitAction} from "@app/shared/organizational-unit.action";
+import {OrgUnitAction, orgUnitActionNameSpace} from "@app/shared/organizational-unit.action";
 import {OrganizationalUnitStateModel} from "@app/shared/organizational-unit.state";
 import {PreservationPolicyStateModel} from "@app/shared/preservation-policy.state";
 import {SharedStateModel} from "@app/shared/shared.state";
@@ -25,7 +25,7 @@ export class EditView extends AbstractEditView<OrganizationalUnitsModel, Organiz
 
   constructor(protected store: Store,
               protected route: ActivatedRoute) {
-    super(store, route, StateEnum.organizationalUnit);
+    super(store, route, StateEnum.organizationalUnit, orgUnitActionNameSpace);
   }
 
   getSubResourceWithParentId(id: string): void {
diff --git a/src/app/shared/crud.state.ts b/src/app/shared/crud.state.ts
index 7300cbf40189684c8249034f471000ee324a6e1b..57018824bf5484bc6a12736e0093b445eef05d72 100644
--- a/src/app/shared/crud.state.ts
+++ b/src/app/shared/crud.state.ts
@@ -32,6 +32,7 @@ export interface CrudStateModel<T> extends BaseStateModel {
 
 export abstract class CrudState<T> {
   protected readonly state: StateEnum;
+  protected readonly crudNameSpace: CrudNameSpace;
   protected readonly urlResource: ResourceApiEnum;
   private readonly subResource: ApiResourceNameEnum[];
 
@@ -40,13 +41,17 @@ export abstract class CrudState<T> {
                         protected notificationService: NotificationService) {
     this.urlResource = this.defineUrlResource();
     this.state = this.defineState();
+    this.crudNameSpace = this.defineCrudNameSpace();
     this.subResource = this.defineSubResource();
+    this.initState(this.crudNameSpace);
   }
 
   abstract defineUrlResource(): ResourceApiEnum;
 
   abstract defineState(): StateEnum;
 
+  abstract defineCrudNameSpace(): CrudNameSpace;
+
   abstract defineSubResource(): ApiResourceNameEnum[];
 
   protected initState(crudNameSpace: CrudNameSpace): void {
@@ -85,7 +90,7 @@ export abstract class CrudState<T> {
     ctx.patchState({
       queryParameters: action.queryParameters,
     });
-    ctx.dispatch(CrudActionUtil.getAll(this.state));
+    ctx.dispatch(CrudActionUtil.getAll(this.crudNameSpace));
   }
 
   @RegisterCrudAction((crudNameSpace: CrudNameSpace) => crudNameSpace.GetAll, {cancelUncompleted: true})
@@ -101,10 +106,10 @@ export abstract class CrudState<T> {
     return this.apiService.get<T>(this.urlResource, queryParameters)
       .pipe(
         tap((collection: CollectionTypedModel<T>) => {
-          ctx.dispatch(CrudActionUtil.getAllSuccess<T>(this.state, collection));
+          ctx.dispatch(CrudActionUtil.getAllSuccess<T>(this.crudNameSpace, collection));
         }),
         catchError(error => {
-          ctx.dispatch(CrudActionUtil.getAllFail(this.state));
+          ctx.dispatch(CrudActionUtil.getAllFail(this.crudNameSpace));
           throw error;
         }),
       );
@@ -139,10 +144,10 @@ export abstract class CrudState<T> {
     return this.apiService.getById<T>(this.urlResource, action.id)
       .pipe(
         tap((model: T) => {
-          ctx.dispatch(CrudActionUtil.getByIdSuccess(this.state, model));
+          ctx.dispatch(CrudActionUtil.getByIdSuccess(this.crudNameSpace, model));
         }),
         catchError(error => {
-          ctx.dispatch(CrudActionUtil.getByIdFail(this.state));
+          ctx.dispatch(CrudActionUtil.getByIdFail(this.crudNameSpace));
           throw error;
         }),
       );
@@ -172,10 +177,10 @@ export abstract class CrudState<T> {
     return this.apiService.post<T>(this.urlResource, action.model)
       .pipe(
         tap(() => {
-          ctx.dispatch(CrudActionUtil.createSuccess(this.state));
+          ctx.dispatch(CrudActionUtil.createSuccess(this.crudNameSpace));
         }),
         catchError(error => {
-          ctx.dispatch(CrudActionUtil.createFail(this.state));
+          ctx.dispatch(CrudActionUtil.createFail(this.crudNameSpace));
           throw error;
         }),
       );
@@ -208,10 +213,10 @@ export abstract class CrudState<T> {
     return this.apiService.patchById<T>(this.urlResource, action.model[ModelAttributeEnum.resId], action.model)
       .pipe(
         tap(() => {
-          ctx.dispatch(CrudActionUtil.updateSuccess(this.state));
+          ctx.dispatch(CrudActionUtil.updateSuccess(this.crudNameSpace));
         }),
         catchError(error => {
-          ctx.dispatch(CrudActionUtil.updateFail(this.state));
+          ctx.dispatch(CrudActionUtil.updateFail(this.crudNameSpace));
           throw error;
         }),
       );
@@ -244,10 +249,10 @@ export abstract class CrudState<T> {
     return this.apiService.deleteById<T>(this.urlResource, action.resId)
       .pipe(
         tap(() => {
-          ctx.dispatch(CrudActionUtil.deleteSuccess(this.state));
+          ctx.dispatch(CrudActionUtil.deleteSuccess(this.crudNameSpace));
         }),
         catchError(error => {
-          ctx.dispatch(CrudActionUtil.deleteFail(this.state));
+          ctx.dispatch(CrudActionUtil.deleteFail(this.crudNameSpace));
           throw error;
         }),
       );
diff --git a/src/app/shared/dialogs/abstract-delete/abstract-delete.dialog.ts b/src/app/shared/dialogs/abstract-delete/abstract-delete.dialog.ts
index 6fe56a03f9f28aad673fcfd80dfdeb1d4029a556..c9dc92fab54673e5f4f122785d18521eb37dba27 100644
--- a/src/app/shared/dialogs/abstract-delete/abstract-delete.dialog.ts
+++ b/src/app/shared/dialogs/abstract-delete/abstract-delete.dialog.ts
@@ -1,8 +1,10 @@
 import {Inject, OnInit} from "@angular/core";
 import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material";
 import {CrudAction} from "@app/shared/crud.action";
+import {CrudNameSpace} from "@app/shared/crud.namespace";
 import {CrudStateModel} from "@app/shared/crud.state";
 import {BaseDirective} from "@app/shared/directives/base.directive";
+import {StateEnum} from "@app/shared/enums/state.enum";
 import {DeleteDialogModel} from "@app/shared/models/delete-dialog.model";
 import {CrudActionUtil} from "@app/shared/utils/crud-action.util";
 import {Store} from "@ngxs/store";
@@ -18,7 +20,8 @@ export abstract class AbstractDeleteDialog<T, U extends CrudStateModel<T>> exten
   protected constructor(protected store: Store,
                         protected dialogRef: MatDialogRef<AbstractDeleteDialog<T, U>>,
                         @Inject(MAT_DIALOG_DATA) public data: DeleteDialogModel,
-                        protected state) {
+                        protected state: StateEnum,
+                        private crudActionNameSpace: CrudNameSpace) {
     super();
   }
 
@@ -27,7 +30,7 @@ export abstract class AbstractDeleteDialog<T, U extends CrudStateModel<T>> exten
   }
 
   confirm() {
-    this.store.dispatch(CrudActionUtil.delete(this.state, this.data.resId));
+    this.store.dispatch(CrudActionUtil.delete(this.crudActionNameSpace, this.data.resId));
     this.dialogRef.close();
   }
 }
diff --git a/src/app/shared/language.action.ts b/src/app/shared/language.action.ts
index 506452e6151311f6cb4c8a7e24ca2d20b0b91aba..f072ceb1592be5439f12b055ca71487468525fe4 100644
--- a/src/app/shared/language.action.ts
+++ b/src/app/shared/language.action.ts
@@ -1,138 +1,90 @@
-import {LanguagesModel} from "@app/generated-api";
+import {DepositsModel, LanguagesModel} from "@app/generated-api";
 import {CrudAction} from "@app/shared/crud.action";
+import {CrudNameSpace} from "@app/shared/crud.namespace";
+import {TypeCrudAction} from "@app/shared/decorators/type-crud-action.decorator";
 import {StateEnum} from "@app/shared/enums/state.enum";
 import {CollectionTypedModel} from "@app/shared/models/collection-typed.model";
 import {QueryParametersModel} from "@app/shared/models/query-parameters.model";
+import {OrgUnitAction} from "@app/shared/organizational-unit.action";
 import {StringUtil} from "@app/shared/utils/string.util";
 
 const state = StateEnum.language;
 
 export namespace LanguageAction {
-  export class ChangeQueryParameters extends CrudAction.ChangeQueryParameters {
-    static readonly type = StringUtil.format(CrudAction.ChangeQueryParameters.type, state);
+  @TypeCrudAction(state)
+  export class LoadResource extends CrudAction.LoadResource {
+  }
 
-    constructor(public queryParameters: QueryParametersModel) {
-      super(queryParameters);
-    }
+  @TypeCrudAction(state)
+  export class LoadResourceSuccess extends CrudAction.LoadResourceSuccess {
   }
 
-  export class GetAll extends CrudAction.GetAll {
-    static readonly type = StringUtil.format(CrudAction.GetAll.type, state);
+  @TypeCrudAction(state)
+  export class LoadResourceFail extends CrudAction.LoadResourceFail {
+  }
 
-    constructor(public queryParameters?: QueryParametersModel) {
-      super(queryParameters);
-    }
+  @TypeCrudAction(state)
+  export class ChangeQueryParameters extends CrudAction.ChangeQueryParameters {
   }
 
-  export class GetAllSuccess extends CrudAction.GetAllSuccess<LanguagesModel> {
-    static readonly type = StringUtil.format(CrudAction.GetAllSuccess.type, state);
+  @TypeCrudAction(state)
+  export class GetAll extends CrudAction.GetAll {}
 
-    constructor(public list: CollectionTypedModel<LanguagesModel>) {
-      super(list);
-    }
+  @TypeCrudAction(state)
+  export class GetAllSuccess extends CrudAction.GetAllSuccess<DepositsModel> {
   }
 
+  @TypeCrudAction(state)
   export class GetAllFail extends CrudAction.GetAllFail {
-    static readonly type = StringUtil.format(CrudAction.GetAllFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class GetById extends CrudAction.GetById {
-    static readonly type = StringUtil.format(CrudAction.GetById.type, state);
-
-    constructor(public id: string) {
-      super(id);
-    }
   }
 
-  export class GetByIdSuccess extends CrudAction.GetByIdSuccess<LanguagesModel> {
-    static readonly type = StringUtil.format(CrudAction.GetByIdSuccess.type, state);
-
-    constructor(public model: LanguagesModel) {
-      super(model);
-    }
+  @TypeCrudAction(state)
+  export class GetByIdSuccess extends CrudAction.GetByIdSuccess<DepositsModel> {
   }
 
+  @TypeCrudAction(state)
   export class GetByIdFail extends CrudAction.GetByIdFail {
-    static readonly type = StringUtil.format(CrudAction.GetByIdFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
-  export class Create extends CrudAction.Create<LanguagesModel> {
-    static readonly type = StringUtil.format(CrudAction.Create.type, state);
-
-    constructor(public model: LanguagesModel) {
-      super(model);
-    }
+  @TypeCrudAction(state)
+  export class Create extends CrudAction.Create<DepositsModel> {
   }
 
+  @TypeCrudAction(state)
   export class CreateSuccess extends CrudAction.CreateSuccess {
-    static readonly type = StringUtil.format(CrudAction.CreateSuccess.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class CreateFail extends CrudAction.CreateFail {
-    static readonly type = StringUtil.format(CrudAction.CreateFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
-  export class Update extends CrudAction.Update<LanguagesModel> {
-    static readonly type = StringUtil.format(CrudAction.Update.type, state);
-
-    constructor(public model: LanguagesModel) {
-      super(model);
-    }
+  @TypeCrudAction(state)
+  export class Update extends CrudAction.Update<DepositsModel> {
   }
 
+  @TypeCrudAction(state)
   export class UpdateSuccess extends CrudAction.UpdateSuccess {
-    static readonly type = StringUtil.format(CrudAction.UpdateSuccess.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class UpdateFail extends CrudAction.UpdateFail {
-    static readonly type = StringUtil.format(CrudAction.UpdateFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class Delete extends CrudAction.Delete {
-    static readonly type = StringUtil.format(CrudAction.Delete.type, state);
-
-    constructor(public resId: string) {
-      super(resId);
-    }
   }
 
+  @TypeCrudAction(state)
   export class DeleteSuccess extends CrudAction.DeleteSuccess {
-    static readonly type = StringUtil.format(CrudAction.DeleteSuccess.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class DeleteFail extends CrudAction.DeleteFail {
-    static readonly type = StringUtil.format(CrudAction.DeleteFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 }
+
+export const languageActionNameSpace: CrudNameSpace = LanguageAction;
diff --git a/src/app/shared/language.state.ts b/src/app/shared/language.state.ts
index 91e8ea98638ab326fc74be022dcf899fb537be3e..0b8a0106ae8e33cc893029a92df6f5d663bcbadf 100644
--- a/src/app/shared/language.state.ts
+++ b/src/app/shared/language.state.ts
@@ -1,9 +1,10 @@
 import {LanguagesModel} from "@app/generated-api";
+import {CrudNameSpace} from "@app/shared/crud.namespace";
 import {CrudState, CrudStateModel} from "@app/shared/crud.state";
 import {ApiResourceNameEnum} from "@app/shared/enums/api-resource-name.enum";
 import {AdminResourceApiEnum, ResourceApiEnum} from "@app/shared/enums/api.enum";
 import {StateEnum} from "@app/shared/enums/state.enum";
-import {LanguageAction} from "@app/shared/language.action";
+import {LanguageAction, languageActionNameSpace} from "@app/shared/language.action";
 import {QueryParametersModel} from "@app/shared/models/query-parameters.model";
 import {ApiService} from "@app/core/http/api.service";
 import {NotificationService} from "@app/core/notification.service";
@@ -34,6 +35,10 @@ export class LanguageState extends CrudState<LanguagesModel> {
     return StateEnum.language;
   }
 
+  defineCrudNameSpace(): CrudNameSpace {
+    return languageActionNameSpace;
+  }
+
   defineSubResource(): ApiResourceNameEnum[] {
     return [];
   }
diff --git a/src/app/shared/license.action.ts b/src/app/shared/license.action.ts
index 2683b72b1a814ba7cc4daa126242d6451e949f35..e5b2ce7ed3310e19ee86fb2407b8dc8c1c401931 100644
--- a/src/app/shared/license.action.ts
+++ b/src/app/shared/license.action.ts
@@ -1,138 +1,91 @@
-import {LicensesModel} from "@app/generated-api";
+import {DepositsModel, LicensesModel} from "@app/generated-api";
 import {CrudAction} from "@app/shared/crud.action";
+import {CrudNameSpace} from "@app/shared/crud.namespace";
+import {TypeCrudAction} from "@app/shared/decorators/type-crud-action.decorator";
 import {StateEnum} from "@app/shared/enums/state.enum";
 import {CollectionTypedModel} from "@app/shared/models/collection-typed.model";
 import {QueryParametersModel} from "@app/shared/models/query-parameters.model";
+import {OrgUnitAction} from "@app/shared/organizational-unit.action";
 import {StringUtil} from "@app/shared/utils/string.util";
 
 const state = StateEnum.license;
 
 export namespace LicenseAction {
-  export class ChangeQueryParameters extends CrudAction.ChangeQueryParameters {
-    static readonly type = StringUtil.format(CrudAction.ChangeQueryParameters.type, state);
+  @TypeCrudAction(state)
+  export class LoadResource extends CrudAction.LoadResource {
+  }
 
-    constructor(public queryParameters: QueryParametersModel) {
-      super(queryParameters);
-    }
+  @TypeCrudAction(state)
+  export class LoadResourceSuccess extends CrudAction.LoadResourceSuccess {
   }
 
-  export class GetAll extends CrudAction.GetAll {
-    static readonly type = StringUtil.format(CrudAction.GetAll.type, state);
+  @TypeCrudAction(state)
+  export class LoadResourceFail extends CrudAction.LoadResourceFail {
+  }
 
-    constructor(public queryParameters?: QueryParametersModel) {
-      super(queryParameters);
-    }
+  @TypeCrudAction(state)
+  export class ChangeQueryParameters extends CrudAction.ChangeQueryParameters {
   }
 
-  export class GetAllSuccess extends CrudAction.GetAllSuccess<LicensesModel> {
-    static readonly type = StringUtil.format(CrudAction.GetAllSuccess.type, state);
+  @TypeCrudAction(state)
+  export class GetAll extends CrudAction.GetAll {}
 
-    constructor(public list: CollectionTypedModel<LicensesModel>) {
-      super(list);
-    }
+  @TypeCrudAction(state)
+  export class GetAllSuccess extends CrudAction.GetAllSuccess<DepositsModel> {
   }
 
+  @TypeCrudAction(state)
   export class GetAllFail extends CrudAction.GetAllFail {
-    static readonly type = StringUtil.format(CrudAction.GetAllFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class GetById extends CrudAction.GetById {
-    static readonly type = StringUtil.format(CrudAction.GetById.type, state);
-
-    constructor(public id: string) {
-      super(id);
-    }
   }
 
-  export class GetByIdSuccess extends CrudAction.GetByIdSuccess<LicensesModel> {
-    static readonly type = StringUtil.format(CrudAction.GetByIdSuccess.type, state);
-
-    constructor(public model: LicensesModel) {
-      super(model);
-    }
+  @TypeCrudAction(state)
+  export class GetByIdSuccess extends CrudAction.GetByIdSuccess<DepositsModel> {
   }
 
+  @TypeCrudAction(state)
   export class GetByIdFail extends CrudAction.GetByIdFail {
-    static readonly type = StringUtil.format(CrudAction.GetByIdFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
-  export class Create extends CrudAction.Create<LicensesModel> {
-    static readonly type = StringUtil.format(CrudAction.Create.type, state);
-
-    constructor(public model: LicensesModel) {
-      super(model);
-    }
+  @TypeCrudAction(state)
+  export class Create extends CrudAction.Create<DepositsModel> {
   }
 
+  @TypeCrudAction(state)
   export class CreateSuccess extends CrudAction.CreateSuccess {
-    static readonly type = StringUtil.format(CrudAction.CreateSuccess.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class CreateFail extends CrudAction.CreateFail {
-    static readonly type = StringUtil.format(CrudAction.CreateFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
-  export class Update extends CrudAction.Update<LicensesModel> {
-    static readonly type = StringUtil.format(CrudAction.Update.type, state);
-
-    constructor(public model: LicensesModel) {
-      super(model);
-    }
+  @TypeCrudAction(state)
+  export class Update extends CrudAction.Update<DepositsModel> {
   }
 
+  @TypeCrudAction(state)
   export class UpdateSuccess extends CrudAction.UpdateSuccess {
-    static readonly type = StringUtil.format(CrudAction.UpdateSuccess.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class UpdateFail extends CrudAction.UpdateFail {
-    static readonly type = StringUtil.format(CrudAction.UpdateFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class Delete extends CrudAction.Delete {
-    static readonly type = StringUtil.format(CrudAction.Delete.type, state);
-
-    constructor(public resId: string) {
-      super(resId);
-    }
   }
 
+  @TypeCrudAction(state)
   export class DeleteSuccess extends CrudAction.DeleteSuccess {
-    static readonly type = StringUtil.format(CrudAction.DeleteSuccess.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class DeleteFail extends CrudAction.DeleteFail {
-    static readonly type = StringUtil.format(CrudAction.DeleteFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 }
+
+
+export const licenseActionNameSpace: CrudNameSpace = LicenseAction;
diff --git a/src/app/shared/license.state.ts b/src/app/shared/license.state.ts
index 04685d81272eaab8ef6e441eed6dc689c7151942..bb21053e9779ff6d90c44c6d70a1f59ad668ecd0 100644
--- a/src/app/shared/license.state.ts
+++ b/src/app/shared/license.state.ts
@@ -1,9 +1,10 @@
 import {LicensesModel} from "@app/generated-api";
+import {CrudNameSpace} from "@app/shared/crud.namespace";
 import {CrudState, CrudStateModel} from "@app/shared/crud.state";
 import {ApiResourceNameEnum} from "@app/shared/enums/api-resource-name.enum";
 import {AdminResourceApiEnum, ResourceApiEnum} from "@app/shared/enums/api.enum";
 import {StateEnum} from "@app/shared/enums/state.enum";
-import {LicenseAction} from "@app/shared/license.action";
+import {LicenseAction, licenseActionNameSpace} from "@app/shared/license.action";
 import {QueryParametersModel} from "@app/shared/models/query-parameters.model";
 import {ApiService} from "@app/core/http/api.service";
 import {NotificationService} from "@app/core/notification.service";
@@ -34,6 +35,10 @@ export class LicenseState extends CrudState<LicensesModel> {
     return StateEnum.license;
   }
 
+  defineCrudNameSpace(): CrudNameSpace {
+    return licenseActionNameSpace;
+  }
+
   defineSubResource(): ApiResourceNameEnum[] {
     return [];
   }
@@ -41,84 +46,4 @@ export class LicenseState extends CrudState<LicensesModel> {
   defineUrlResource(): ResourceApiEnum {
     return AdminResourceApiEnum.licenses;
   }
-
-  @Action(LicenseAction.ChangeQueryParameters)
-  changeQueryParameters(ctx: StateContext<LicenseStateModel>, action: LicenseAction.ChangeQueryParameters): void {
-    super.changeQueryParameters(ctx, action);
-  }
-
-  @Action(LicenseAction.GetAll, {cancelUncompleted: true})
-  getAll(ctx: StateContext<LicenseStateModel>, action: LicenseAction.GetAll) {
-    return super.getAll(ctx, action);
-  }
-
-  @Action(LicenseAction.GetAllSuccess)
-  getAllSuccess(ctx: StateContext<LicenseStateModel>, action: LicenseAction.GetAllSuccess): void {
-    super.getAllSuccess(ctx, action);
-  }
-
-  @Action(LicenseAction.GetAllFail)
-  getAllFail(ctx: StateContext<LicenseStateModel>, action: LicenseAction.GetAllFail): void {
-    super.getAllFail(ctx, action);
-  }
-
-  @Action(LicenseAction.GetById, {cancelUncompleted: true})
-  getById(ctx: StateContext<LicenseStateModel>, action: LicenseAction.GetById): Observable<LicensesModel> {
-    return super.getById(ctx, action);
-  }
-
-  @Action(LicenseAction.GetByIdSuccess)
-  getByIdSuccess(ctx: StateContext<LicenseStateModel>, action: LicenseAction.GetByIdSuccess): void {
-    super.getByIdSuccess(ctx, action);
-  }
-
-  @Action(LicenseAction.GetByIdFail)
-  getByIdFail(ctx: StateContext<LicenseStateModel>, action: LicenseAction.GetByIdFail): void {
-    super.getByIdFail(ctx, action);
-  }
-
-  @Action(LicenseAction.Create, {cancelUncompleted: true})
-  create(ctx: StateContext<LicenseStateModel>, action: LicenseAction.Create): Observable<LicensesModel> {
-    return super.create(ctx, action);
-  }
-
-  @Action(LicenseAction.CreateSuccess)
-  createSuccess(ctx: StateContext<LicenseStateModel>, action: LicenseAction.CreateSuccess): void {
-    super.createSuccess(ctx, action);
-  }
-
-  @Action(LicenseAction.CreateFail)
-  createFail(ctx: StateContext<LicenseStateModel>, action: LicenseAction.CreateFail): void {
-    super.createFail(ctx, action);
-  }
-
-  @Action(LicenseAction.Update, {cancelUncompleted: true})
-  update(ctx: StateContext<LicenseStateModel>, action: LicenseAction.Update): Observable<LicensesModel> {
-    return super.update(ctx, action);
-  }
-
-  @Action(LicenseAction.UpdateSuccess)
-  updateSuccess(ctx: StateContext<LicenseStateModel>, action: LicenseAction.UpdateSuccess): void {
-    super.updateSuccess(ctx, action);
-  }
-
-  @Action(LicenseAction.UpdateFail)
-  updateFail(ctx: StateContext<LicenseStateModel>, action: LicenseAction.UpdateFail): void {
-    super.updateFail(ctx, action);
-  }
-
-  @Action(LicenseAction.Delete, {cancelUncompleted: true})
-  delete(ctx: StateContext<LicenseStateModel>, action: LicenseAction.Delete): Observable<LicensesModel> {
-    return super.delete(ctx, action);
-  }
-
-  @Action(LicenseAction.DeleteSuccess)
-  deleteSuccess(ctx: StateContext<LicenseStateModel>, action: LicenseAction.DeleteSuccess): void {
-    super.deleteSuccess(ctx, action);
-  }
-
-  @Action(LicenseAction.DeleteFail)
-  deleteFail(ctx: StateContext<LicenseStateModel>, action: LicenseAction.DeleteFail): void {
-    super.deleteFail(ctx, action);
-  }
 }
diff --git a/src/app/shared/organizational-unit.action.ts b/src/app/shared/organizational-unit.action.ts
index 053b3dd09600957ee49990f96a3e122f1f1e6dd8..85f82f4498aa36b3fa6bc39951e7ff836625b8d0 100644
--- a/src/app/shared/organizational-unit.action.ts
+++ b/src/app/shared/organizational-unit.action.ts
@@ -11,28 +11,16 @@ import {StringUtil} from "@app/shared/utils/string.util";
 const state = StateEnum.organizationalUnit;
 
 export namespace OrgUnitAction {
+  @TypeCrudAction(state)
   export class LoadResource extends CrudAction.LoadResource {
-    static readonly type = StringUtil.format(CrudAction.LoadResource.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class LoadResourceSuccess extends CrudAction.LoadResourceSuccess {
-    static readonly type = StringUtil.format(CrudAction.LoadResourceSuccess.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class LoadResourceFail extends CrudAction.LoadResourceFail {
-    static readonly type = StringUtil.format(CrudAction.LoadResourceFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
   @TypeCrudAction(state)
diff --git a/src/app/shared/organizational-unit.state.ts b/src/app/shared/organizational-unit.state.ts
index 29e3b0f40ac272287bec43b7608ca69115c6995e..c03aeaad6d87657f622f87da4d9a7497ad094f41 100644
--- a/src/app/shared/organizational-unit.state.ts
+++ b/src/app/shared/organizational-unit.state.ts
@@ -1,14 +1,17 @@
 import {AppStateModel} from "@app/app.state";
 import {DepositStateModel} from "@app/deposit/deposit.state";
 import {OrganizationalUnitsModel, SubmissionPoliciesModel} from "@app/generated-api";
+import {CrudNameSpace} from "@app/shared/crud.namespace";
 import {CrudState, CrudStateModel} from "@app/shared/crud.state";
+import {OverrideCrudAction} from "@app/shared/decorators/crud.decorator";
 import {ApiResourceNameEnum} from "@app/shared/enums/api-resource-name.enum";
 import {AccessResourceApiEnum, AdminResourceApiEnum, ResourceApiEnum} from "@app/shared/enums/api.enum";
 import {ModelAttributeEnum} from "@app/shared/enums/model-attribute.enum";
 import {StateEnum} from "@app/shared/enums/state.enum";
+import {languageActionNameSpace} from "@app/shared/language.action";
 import {CollectionTypedModel} from "@app/shared/models/collection-typed.model";
 import {QueryParametersModel} from "@app/shared/models/query-parameters.model";
-import {OrgUnitAction} from "@app/shared/organizational-unit.action";
+import {OrgUnitAction, orgUnitActionNameSpace} from "@app/shared/organizational-unit.action";
 import {PreservationPolicyAction} from "@app/shared/preservation-policy.action";
 
 import {ApiService} from "@app/core/http/api.service";
@@ -67,6 +70,10 @@ export class OrganizationalUnitState extends CrudState<OrganizationalUnitsModel>
     return AccessResourceApiEnum.organizationalUnits;
   }
 
+  defineCrudNameSpace(): CrudNameSpace {
+    return orgUnitActionNameSpace;
+  }
+
   defineState(): StateEnum {
     return StateEnum.organizationalUnit;
   }
@@ -92,56 +99,7 @@ export class OrganizationalUnitState extends CrudState<OrganizationalUnitsModel>
     ]);
   }
 
-  @Action(OrgUnitAction.ChangeQueryParameters)
-  changeQueryParameters(ctx: StateContext<OrganizationalUnitStateModel>, action: OrgUnitAction.ChangeQueryParameters): void {
-    super.changeQueryParameters(ctx, action);
-  }
-
-  @Action(OrgUnitAction.GetAll, {cancelUncompleted: true})
-  getAll(ctx: StateContext<OrganizationalUnitStateModel>, action: OrgUnitAction.GetAll): Observable<CollectionTypedModel<OrganizationalUnitsModel>> {
-    return super.getAll(ctx, action);
-  }
-
-  @Action(OrgUnitAction.GetAllSuccess)
-  getAllSuccess(ctx: StateContext<OrganizationalUnitStateModel>, action: OrgUnitAction.GetAllSuccess): void {
-    super.getAllSuccess(ctx, action);
-  }
-
-  @Action(OrgUnitAction.GetAllFail)
-  getAllFail(ctx: StateContext<OrganizationalUnitStateModel>, action: OrgUnitAction.GetAllFail): void {
-    super.getAllFail(ctx, action);
-  }
-
-  @Action(OrgUnitAction.GetById, {cancelUncompleted: true})
-  getById(ctx: StateContext<OrganizationalUnitStateModel>, action: OrgUnitAction.GetById): Observable<OrganizationalUnitsModel> {
-    return super.getById(ctx, action);
-  }
-
-  @Action(OrgUnitAction.GetByIdSuccess)
-  getByIdSuccess(ctx: StateContext<OrganizationalUnitStateModel>, action: OrgUnitAction.GetByIdSuccess): void {
-    super.getByIdSuccess(ctx, action);
-  }
-
-  @Action(OrgUnitAction.GetByIdFail)
-  getByIdFail(ctx: StateContext<OrganizationalUnitStateModel>, action: OrgUnitAction.GetByIdFail): void {
-    super.getByIdFail(ctx, action);
-  }
-
-  @Action(OrgUnitAction.Create, {cancelUncompleted: true})
-  create(ctx: StateContext<OrganizationalUnitStateModel>, action: OrgUnitAction.Create): Observable<OrganizationalUnitsModel> {
-    return super.create(ctx, action);
-  }
-
-  @Action(OrgUnitAction.CreateSuccess)
-  createSuccess(ctx: StateContext<OrganizationalUnitStateModel>, action: OrgUnitAction.CreateSuccess): void {
-    super.createSuccess(ctx, action);
-  }
-
-  @Action(OrgUnitAction.CreateFail)
-  createFail(ctx: StateContext<OrganizationalUnitStateModel>, action: OrgUnitAction.CreateFail): void {
-    super.createFail(ctx, action);
-  }
-
+  @OverrideCrudAction()
   @Action(OrgUnitAction.Update, {cancelUncompleted: true})
   update(ctx: StateContext<OrganizationalUnitStateModel>, action: OrgUnitAction.Update): Observable<OrganizationalUnitsModel> {
     return super.update(ctx, action)
@@ -154,31 +112,6 @@ export class OrganizationalUnitState extends CrudState<OrganizationalUnitsModel>
       );
   }
 
-  @Action(OrgUnitAction.UpdateSuccess)
-  updateSuccess(ctx: StateContext<OrganizationalUnitStateModel>, action: OrgUnitAction.UpdateSuccess): void {
-    super.updateSuccess(ctx, action);
-  }
-
-  @Action(OrgUnitAction.UpdateFail)
-  updateFail(ctx: StateContext<OrganizationalUnitStateModel>, action: OrgUnitAction.UpdateFail): void {
-    super.updateFail(ctx, action);
-  }
-
-  @Action(OrgUnitAction.Delete, {cancelUncompleted: true})
-  delete(ctx: StateContext<OrganizationalUnitStateModel>, action: OrgUnitAction.Delete): Observable<OrganizationalUnitsModel> {
-    return super.delete(ctx, action);
-  }
-
-  @Action(OrgUnitAction.DeleteSuccess)
-  deleteSuccess(ctx: StateContext<OrganizationalUnitStateModel>, action: OrgUnitAction.DeleteSuccess): void {
-    super.deleteSuccess(ctx, action);
-  }
-
-  @Action(OrgUnitAction.DeleteFail)
-  deleteFail(ctx: StateContext<OrganizationalUnitStateModel>, action: OrgUnitAction.DeleteFail): void {
-    super.deleteFail(ctx, action);
-  }
-
   @Action(OrgUnitAction.UpdateSubResourceSubmissionPolicies, {cancelUncompleted: true})
   updateSubmissionPolicy(ctx: StateContext<OrganizationalUnitStateModel>, action: OrgUnitAction.UpdateSubResourceSubmissionPolicies): void {
     ctx.patchState({
diff --git a/src/app/shared/preservation-policy.action.ts b/src/app/shared/preservation-policy.action.ts
index 034e2b329bacaf8a320fda4bc278cf34a57e085c..2ff0e7480994eb6fa4cf98e605520a28b81c1a89 100644
--- a/src/app/shared/preservation-policy.action.ts
+++ b/src/app/shared/preservation-policy.action.ts
@@ -1,138 +1,90 @@
-import {PreservationPoliciesModel} from "@app/generated-api";
+import {DepositsModel, PreservationPoliciesModel} from "@app/generated-api";
 import {CrudAction} from "@app/shared/crud.action";
+import {CrudNameSpace} from "@app/shared/crud.namespace";
+import {TypeCrudAction} from "@app/shared/decorators/type-crud-action.decorator";
 import {StateEnum} from "@app/shared/enums/state.enum";
 import {CollectionTypedModel} from "@app/shared/models/collection-typed.model";
 import {QueryParametersModel} from "@app/shared/models/query-parameters.model";
+import {OrgUnitAction} from "@app/shared/organizational-unit.action";
 import {StringUtil} from "@app/shared/utils/string.util";
 
 const state = StateEnum.preservationPolicy;
 
 export namespace PreservationPolicyAction {
-  export class ChangeQueryParameters extends CrudAction.ChangeQueryParameters {
-    static readonly type = StringUtil.format(CrudAction.ChangeQueryParameters.type, state);
+  @TypeCrudAction(state)
+  export class LoadResource extends CrudAction.LoadResource {
+  }
 
-    constructor(public queryParameters: QueryParametersModel) {
-      super(queryParameters);
-    }
+  @TypeCrudAction(state)
+  export class LoadResourceSuccess extends CrudAction.LoadResourceSuccess {
   }
 
-  export class GetAll extends CrudAction.GetAll {
-    static readonly type = StringUtil.format(CrudAction.GetAll.type, state);
+  @TypeCrudAction(state)
+  export class LoadResourceFail extends CrudAction.LoadResourceFail {
+  }
 
-    constructor(public queryParameters?: QueryParametersModel) {
-      super(queryParameters);
-    }
+  @TypeCrudAction(state)
+  export class ChangeQueryParameters extends CrudAction.ChangeQueryParameters {
   }
 
-  export class GetAllSuccess extends CrudAction.GetAllSuccess<PreservationPoliciesModel> {
-    static readonly type = StringUtil.format(CrudAction.GetAllSuccess.type, state);
+  @TypeCrudAction(state)
+  export class GetAll extends CrudAction.GetAll {}
 
-    constructor(public list: CollectionTypedModel<PreservationPoliciesModel>) {
-      super(list);
-    }
+  @TypeCrudAction(state)
+  export class GetAllSuccess extends CrudAction.GetAllSuccess<DepositsModel> {
   }
 
+  @TypeCrudAction(state)
   export class GetAllFail extends CrudAction.GetAllFail {
-    static readonly type = StringUtil.format(CrudAction.GetAllFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class GetById extends CrudAction.GetById {
-    static readonly type = StringUtil.format(CrudAction.GetById.type, state);
-
-    constructor(public id: string) {
-      super(id);
-    }
   }
 
-  export class GetByIdSuccess extends CrudAction.GetByIdSuccess<PreservationPoliciesModel> {
-    static readonly type = StringUtil.format(CrudAction.GetByIdSuccess.type, state);
-
-    constructor(public model: PreservationPoliciesModel) {
-      super(model);
-    }
+  @TypeCrudAction(state)
+  export class GetByIdSuccess extends CrudAction.GetByIdSuccess<DepositsModel> {
   }
 
+  @TypeCrudAction(state)
   export class GetByIdFail extends CrudAction.GetByIdFail {
-    static readonly type = StringUtil.format(CrudAction.GetByIdFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
-  export class Create extends CrudAction.Create<PreservationPoliciesModel> {
-    static readonly type = StringUtil.format(CrudAction.Create.type, state);
-
-    constructor(public model: PreservationPoliciesModel) {
-      super(model);
-    }
+  @TypeCrudAction(state)
+  export class Create extends CrudAction.Create<DepositsModel> {
   }
 
+  @TypeCrudAction(state)
   export class CreateSuccess extends CrudAction.CreateSuccess {
-    static readonly type = StringUtil.format(CrudAction.CreateSuccess.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class CreateFail extends CrudAction.CreateFail {
-    static readonly type = StringUtil.format(CrudAction.CreateFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
-  export class Update extends CrudAction.Update<PreservationPoliciesModel> {
-    static readonly type = StringUtil.format(CrudAction.Update.type, state);
-
-    constructor(public model: PreservationPoliciesModel) {
-      super(model);
-    }
+  @TypeCrudAction(state)
+  export class Update extends CrudAction.Update<DepositsModel> {
   }
 
+  @TypeCrudAction(state)
   export class UpdateSuccess extends CrudAction.UpdateSuccess {
-    static readonly type = StringUtil.format(CrudAction.UpdateSuccess.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class UpdateFail extends CrudAction.UpdateFail {
-    static readonly type = StringUtil.format(CrudAction.UpdateFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class Delete extends CrudAction.Delete {
-    static readonly type = StringUtil.format(CrudAction.Delete.type, state);
-
-    constructor(public resId: string) {
-      super(resId);
-    }
   }
 
+  @TypeCrudAction(state)
   export class DeleteSuccess extends CrudAction.DeleteSuccess {
-    static readonly type = StringUtil.format(CrudAction.DeleteSuccess.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class DeleteFail extends CrudAction.DeleteFail {
-    static readonly type = StringUtil.format(CrudAction.DeleteFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 }
+
+export const preservationPolicyActionNameSpace: CrudNameSpace = PreservationPolicyAction;
diff --git a/src/app/shared/preservation-policy.state.ts b/src/app/shared/preservation-policy.state.ts
index 80ce913de35b2fe47599366c55bd25514ca6408b..0618b6b2eb363de66d028bfe88cab30e54b4ba26 100644
--- a/src/app/shared/preservation-policy.state.ts
+++ b/src/app/shared/preservation-policy.state.ts
@@ -1,14 +1,14 @@
 import {PreservationPoliciesModel} from "@app/generated-api";
+import {CrudNameSpace} from "@app/shared/crud.namespace";
 import {CrudState, CrudStateModel} from "@app/shared/crud.state";
 import {ApiResourceNameEnum} from "@app/shared/enums/api-resource-name.enum";
 import {AdminResourceApiEnum, ResourceApiEnum} from "@app/shared/enums/api.enum";
 import {StateEnum} from "@app/shared/enums/state.enum";
 import {QueryParametersModel} from "@app/shared/models/query-parameters.model";
-import {PreservationPolicyAction} from "@app/shared/preservation-policy.action";
+import {preservationPolicyActionNameSpace} from "@app/shared/preservation-policy.action";
 import {ApiService} from "@app/core/http/api.service";
 import {NotificationService} from "@app/core/notification.service";
-import {Action, State, StateContext, Store} from "@ngxs/store";
-import {Observable} from "rxjs";
+import {State, Store} from "@ngxs/store";
 
 export interface PreservationPolicyStateModel extends CrudStateModel<PreservationPoliciesModel> {
 }
@@ -34,6 +34,10 @@ export class PreservationPolicyState extends CrudState<PreservationPoliciesModel
     return StateEnum.preservationPolicy;
   }
 
+  defineCrudNameSpace(): CrudNameSpace {
+    return preservationPolicyActionNameSpace;
+  }
+
   defineSubResource(): ApiResourceNameEnum[] {
     return [];
   }
@@ -41,84 +45,4 @@ export class PreservationPolicyState extends CrudState<PreservationPoliciesModel
   defineUrlResource(): ResourceApiEnum {
     return AdminResourceApiEnum.preservationPolicies;
   }
-
-  @Action(PreservationPolicyAction.ChangeQueryParameters)
-  changeQueryParameters(ctx: StateContext<PreservationPolicyStateModel>, action: PreservationPolicyAction.ChangeQueryParameters): void {
-    super.changeQueryParameters(ctx, action);
-  }
-
-  @Action(PreservationPolicyAction.GetAll, {cancelUncompleted: true})
-  getAll(ctx: StateContext<PreservationPolicyStateModel>, action: PreservationPolicyAction.GetAll) {
-    return super.getAll(ctx, action);
-  }
-
-  @Action(PreservationPolicyAction.GetAllSuccess)
-  getAllSuccess(ctx: StateContext<PreservationPolicyStateModel>, action: PreservationPolicyAction.GetAllSuccess): void {
-    super.getAllSuccess(ctx, action);
-  }
-
-  @Action(PreservationPolicyAction.GetAllFail)
-  getAllFail(ctx: StateContext<PreservationPolicyStateModel>, action: PreservationPolicyAction.GetAllFail): void {
-    super.getAllFail(ctx, action);
-  }
-
-  @Action(PreservationPolicyAction.GetById, {cancelUncompleted: true})
-  getById(ctx: StateContext<PreservationPolicyStateModel>, action: PreservationPolicyAction.GetById): Observable<PreservationPoliciesModel> {
-    return super.getById(ctx, action);
-  }
-
-  @Action(PreservationPolicyAction.GetByIdSuccess)
-  getByIdSuccess(ctx: StateContext<PreservationPolicyStateModel>, action: PreservationPolicyAction.GetByIdSuccess): void {
-    super.getByIdSuccess(ctx, action);
-  }
-
-  @Action(PreservationPolicyAction.GetByIdFail)
-  getByIdFail(ctx: StateContext<PreservationPolicyStateModel>, action: PreservationPolicyAction.GetByIdFail): void {
-    super.getByIdFail(ctx, action);
-  }
-
-  @Action(PreservationPolicyAction.Create, {cancelUncompleted: true})
-  create(ctx: StateContext<PreservationPolicyStateModel>, action: PreservationPolicyAction.Create): Observable<PreservationPoliciesModel> {
-    return super.create(ctx, action);
-  }
-
-  @Action(PreservationPolicyAction.CreateSuccess)
-  createSuccess(ctx: StateContext<PreservationPolicyStateModel>, action: PreservationPolicyAction.CreateSuccess): void {
-    super.createSuccess(ctx, action);
-  }
-
-  @Action(PreservationPolicyAction.CreateFail)
-  createFail(ctx: StateContext<PreservationPolicyStateModel>, action: PreservationPolicyAction.CreateFail): void {
-    super.createFail(ctx, action);
-  }
-
-  @Action(PreservationPolicyAction.Update, {cancelUncompleted: true})
-  update(ctx: StateContext<PreservationPolicyStateModel>, action: PreservationPolicyAction.Update): Observable<PreservationPoliciesModel> {
-    return super.update(ctx, action);
-  }
-
-  @Action(PreservationPolicyAction.UpdateSuccess)
-  updateSuccess(ctx: StateContext<PreservationPolicyStateModel>, action: PreservationPolicyAction.UpdateSuccess): void {
-    super.updateSuccess(ctx, action);
-  }
-
-  @Action(PreservationPolicyAction.UpdateFail)
-  updateFail(ctx: StateContext<PreservationPolicyStateModel>, action: PreservationPolicyAction.UpdateFail): void {
-    super.updateFail(ctx, action);
-  }
-
-  @Action(PreservationPolicyAction.Delete, {cancelUncompleted: true})
-  delete(ctx: StateContext<PreservationPolicyStateModel>, action: PreservationPolicyAction.Delete): Observable<PreservationPoliciesModel> {
-    return super.delete(ctx, action);
-  }
-
-  @Action(PreservationPolicyAction.DeleteSuccess)
-  deleteSuccess(ctx: StateContext<PreservationPolicyStateModel>, action: PreservationPolicyAction.DeleteSuccess): void {
-    super.deleteSuccess(ctx, action);
-  }
-
-  @Action(PreservationPolicyAction.DeleteFail)
-  deleteFail(ctx: StateContext<PreservationPolicyStateModel>, action: PreservationPolicyAction.DeleteFail): void {
-    super.deleteFail(ctx, action);
-  }
 }
diff --git a/src/app/shared/submission-policy.action.ts b/src/app/shared/submission-policy.action.ts
index e79e8efc285dac5dc53453e44313e96be15e1033..9a0ce4db6e396ec421e6f55dd9f5959753f74359 100644
--- a/src/app/shared/submission-policy.action.ts
+++ b/src/app/shared/submission-policy.action.ts
@@ -1,138 +1,90 @@
-import {SubmissionPoliciesModel} from "@app/generated-api";
+import {DepositsModel, SubmissionPoliciesModel} from "@app/generated-api";
 import {CrudAction} from "@app/shared/crud.action";
+import {CrudNameSpace} from "@app/shared/crud.namespace";
+import {TypeCrudAction} from "@app/shared/decorators/type-crud-action.decorator";
 import {StateEnum} from "@app/shared/enums/state.enum";
 import {CollectionTypedModel} from "@app/shared/models/collection-typed.model";
 import {QueryParametersModel} from "@app/shared/models/query-parameters.model";
+import {OrgUnitAction} from "@app/shared/organizational-unit.action";
 import {StringUtil} from "@app/shared/utils/string.util";
 
 const state = StateEnum.submissionPolicy;
 
 export namespace SubmissionPolicyAction {
-  export class ChangeQueryParameters extends CrudAction.ChangeQueryParameters {
-    static readonly type = StringUtil.format(CrudAction.ChangeQueryParameters.type, state);
+  @TypeCrudAction(state)
+  export class LoadResource extends CrudAction.LoadResource {
+  }
 
-    constructor(public queryParameters: QueryParametersModel) {
-      super(queryParameters);
-    }
+  @TypeCrudAction(state)
+  export class LoadResourceSuccess extends CrudAction.LoadResourceSuccess {
   }
 
-  export class GetAll extends CrudAction.GetAll {
-    static readonly type = StringUtil.format(CrudAction.GetAll.type, state);
+  @TypeCrudAction(state)
+  export class LoadResourceFail extends CrudAction.LoadResourceFail {
+  }
 
-    constructor(public queryParameters?: QueryParametersModel) {
-      super(queryParameters);
-    }
+  @TypeCrudAction(state)
+  export class ChangeQueryParameters extends CrudAction.ChangeQueryParameters {
   }
 
-  export class GetAllSuccess extends CrudAction.GetAllSuccess<SubmissionPoliciesModel> {
-    static readonly type = StringUtil.format(CrudAction.GetAllSuccess.type, state);
+  @TypeCrudAction(state)
+  export class GetAll extends CrudAction.GetAll {}
 
-    constructor(public list: CollectionTypedModel<SubmissionPoliciesModel>) {
-      super(list);
-    }
+  @TypeCrudAction(state)
+  export class GetAllSuccess extends CrudAction.GetAllSuccess<DepositsModel> {
   }
 
+  @TypeCrudAction(state)
   export class GetAllFail extends CrudAction.GetAllFail {
-    static readonly type = StringUtil.format(CrudAction.GetAllFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class GetById extends CrudAction.GetById {
-    static readonly type = StringUtil.format(CrudAction.GetById.type, state);
-
-    constructor(public id: string) {
-      super(id);
-    }
   }
 
-  export class GetByIdSuccess extends CrudAction.GetByIdSuccess<SubmissionPoliciesModel> {
-    static readonly type = StringUtil.format(CrudAction.GetByIdSuccess.type, state);
-
-    constructor(public model: SubmissionPoliciesModel) {
-      super(model);
-    }
+  @TypeCrudAction(state)
+  export class GetByIdSuccess extends CrudAction.GetByIdSuccess<DepositsModel> {
   }
 
+  @TypeCrudAction(state)
   export class GetByIdFail extends CrudAction.GetByIdFail {
-    static readonly type = StringUtil.format(CrudAction.GetByIdFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
-  export class Create extends CrudAction.Create<SubmissionPoliciesModel> {
-    static readonly type = StringUtil.format(CrudAction.Create.type, state);
-
-    constructor(public model: SubmissionPoliciesModel) {
-      super(model);
-    }
+  @TypeCrudAction(state)
+  export class Create extends CrudAction.Create<DepositsModel> {
   }
 
+  @TypeCrudAction(state)
   export class CreateSuccess extends CrudAction.CreateSuccess {
-    static readonly type = StringUtil.format(CrudAction.CreateSuccess.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class CreateFail extends CrudAction.CreateFail {
-    static readonly type = StringUtil.format(CrudAction.CreateFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
-  export class Update extends CrudAction.Update<SubmissionPoliciesModel> {
-    static readonly type = StringUtil.format(CrudAction.Update.type, state);
-
-    constructor(public model: SubmissionPoliciesModel) {
-      super(model);
-    }
+  @TypeCrudAction(state)
+  export class Update extends CrudAction.Update<DepositsModel> {
   }
 
+  @TypeCrudAction(state)
   export class UpdateSuccess extends CrudAction.UpdateSuccess {
-    static readonly type = StringUtil.format(CrudAction.UpdateSuccess.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class UpdateFail extends CrudAction.UpdateFail {
-    static readonly type = StringUtil.format(CrudAction.UpdateFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class Delete extends CrudAction.Delete {
-    static readonly type = StringUtil.format(CrudAction.Delete.type, state);
-
-    constructor(public resId: string) {
-      super(resId);
-    }
   }
 
+  @TypeCrudAction(state)
   export class DeleteSuccess extends CrudAction.DeleteSuccess {
-    static readonly type = StringUtil.format(CrudAction.DeleteSuccess.type, state);
-
-    constructor() {
-      super();
-    }
   }
 
+  @TypeCrudAction(state)
   export class DeleteFail extends CrudAction.DeleteFail {
-    static readonly type = StringUtil.format(CrudAction.DeleteFail.type, state);
-
-    constructor() {
-      super();
-    }
   }
 }
+
+export const submissionPolicyActionNameSpace: CrudNameSpace = SubmissionPolicyAction;
diff --git a/src/app/shared/submission-policy.state.ts b/src/app/shared/submission-policy.state.ts
index a5944001eb59069c4321dacb4fe9425a3ba6b25d..dc5b9a1fe575ea0a53bbe260f59976fa48fdcc5a 100644
--- a/src/app/shared/submission-policy.state.ts
+++ b/src/app/shared/submission-policy.state.ts
@@ -1,12 +1,14 @@
 import {SubmissionPoliciesModel} from "@app/generated-api";
+import {CrudNameSpace} from "@app/shared/crud.namespace";
 import {CrudState, CrudStateModel} from "@app/shared/crud.state";
 import {ApiResourceNameEnum} from "@app/shared/enums/api-resource-name.enum";
 import {AdminResourceApiEnum, ResourceApiEnum} from "@app/shared/enums/api.enum";
 import {StateEnum} from "@app/shared/enums/state.enum";
+import {languageActionNameSpace} from "@app/shared/language.action";
 import {QueryParametersModel} from "@app/shared/models/query-parameters.model";
 import {ApiService} from "@app/core/http/api.service";
 import {NotificationService} from "@app/core/notification.service";
-import {SubmissionPolicyAction} from "@app/shared/submission-policy.action";
+import {SubmissionPolicyAction, submissionPolicyActionNameSpace} from "@app/shared/submission-policy.action";
 import {Action, State, StateContext, Store} from "@ngxs/store";
 import {Observable} from "rxjs";
 
@@ -38,87 +40,11 @@ export class SubmissionPolicyState extends CrudState<SubmissionPoliciesModel> {
     return StateEnum.submissionPolicy;
   }
 
-  defineSubResource(): ApiResourceNameEnum[] {
-    return [];
-  }
-
-  @Action(SubmissionPolicyAction.ChangeQueryParameters)
-  changeQueryParameters(ctx: StateContext<SubmissionPolicyStateModel>, action: SubmissionPolicyAction.ChangeQueryParameters): void {
-    super.changeQueryParameters(ctx, action);
-  }
-
-  @Action(SubmissionPolicyAction.GetAll, {cancelUncompleted: true})
-  getAll(ctx: StateContext<SubmissionPolicyStateModel>, action: SubmissionPolicyAction.GetAll) {
-    return super.getAll(ctx, action);
-  }
-
-  @Action(SubmissionPolicyAction.GetAllSuccess)
-  getAllSuccess(ctx: StateContext<SubmissionPolicyStateModel>, action: SubmissionPolicyAction.GetAllSuccess): void {
-    super.getAllSuccess(ctx, action);
-  }
-
-  @Action(SubmissionPolicyAction.GetAllFail)
-  getAllFail(ctx: StateContext<SubmissionPolicyStateModel>, action: SubmissionPolicyAction.GetAllFail): void {
-    super.getAllFail(ctx, action);
-  }
-
-  @Action(SubmissionPolicyAction.GetById, {cancelUncompleted: true})
-  getById(ctx: StateContext<SubmissionPolicyStateModel>, action: SubmissionPolicyAction.GetById): Observable<SubmissionPoliciesModel> {
-    return super.getById(ctx, action);
-  }
-
-  @Action(SubmissionPolicyAction.GetByIdSuccess)
-  getByIdSuccess(ctx: StateContext<SubmissionPolicyStateModel>, action: SubmissionPolicyAction.GetByIdSuccess): void {
-    super.getByIdSuccess(ctx, action);
-  }
-
-  @Action(SubmissionPolicyAction.GetByIdFail)
-  getByIdFail(ctx: StateContext<SubmissionPolicyStateModel>, action: SubmissionPolicyAction.GetByIdFail): void {
-    super.getByIdFail(ctx, action);
-  }
-
-  @Action(SubmissionPolicyAction.Create, {cancelUncompleted: true})
-  create(ctx: StateContext<SubmissionPolicyStateModel>, action: SubmissionPolicyAction.Create): Observable<SubmissionPoliciesModel> {
-    return super.create(ctx, action);
-  }
-
-  @Action(SubmissionPolicyAction.CreateSuccess)
-  createSuccess(ctx: StateContext<SubmissionPolicyStateModel>, action: SubmissionPolicyAction.CreateSuccess): void {
-    super.createSuccess(ctx, action);
-  }
-
-  @Action(SubmissionPolicyAction.CreateFail)
-  createFail(ctx: StateContext<SubmissionPolicyStateModel>, action: SubmissionPolicyAction.CreateFail): void {
-    super.createFail(ctx, action);
-  }
-
-  @Action(SubmissionPolicyAction.Update, {cancelUncompleted: true})
-  update(ctx: StateContext<SubmissionPolicyStateModel>, action: SubmissionPolicyAction.Update): Observable<SubmissionPoliciesModel> {
-    return super.update(ctx, action);
-  }
-
-  @Action(SubmissionPolicyAction.UpdateSuccess)
-  updateSuccess(ctx: StateContext<SubmissionPolicyStateModel>, action: SubmissionPolicyAction.UpdateSuccess): void {
-    super.updateSuccess(ctx, action);
+  defineCrudNameSpace(): CrudNameSpace {
+    return submissionPolicyActionNameSpace;
   }
 
-  @Action(SubmissionPolicyAction.UpdateFail)
-  updateFail(ctx: StateContext<SubmissionPolicyStateModel>, action: SubmissionPolicyAction.UpdateFail): void {
-    super.updateFail(ctx, action);
-  }
-
-  @Action(SubmissionPolicyAction.Delete, {cancelUncompleted: true})
-  delete(ctx: StateContext<SubmissionPolicyStateModel>, action: SubmissionPolicyAction.Delete): Observable<SubmissionPoliciesModel> {
-    return super.delete(ctx, action);
-  }
-
-  @Action(SubmissionPolicyAction.DeleteSuccess)
-  deleteSuccess(ctx: StateContext<SubmissionPolicyStateModel>, action: SubmissionPolicyAction.DeleteSuccess): void {
-    super.deleteSuccess(ctx, action);
-  }
-
-  @Action(SubmissionPolicyAction.DeleteFail)
-  deleteFail(ctx: StateContext<SubmissionPolicyStateModel>, action: SubmissionPolicyAction.DeleteFail): void {
-    super.deleteFail(ctx, action);
+  defineSubResource(): ApiResourceNameEnum[] {
+    return [];
   }
 }
diff --git a/src/app/shared/utils/crud-action.util.ts b/src/app/shared/utils/crud-action.util.ts
index c926bed29def3b0a0444292e6f498246b649ca50..7e07290c63d8a6d45dcb3d6f8a798af394e5b24c 100644
--- a/src/app/shared/utils/crud-action.util.ts
+++ b/src/app/shared/utils/crud-action.util.ts
@@ -1,7 +1,6 @@
-import {Type} from "@angular/core";
 import {DepositAction} from "@app/deposit/deposit.action";
 import {CrudAction} from "@app/shared/crud.action";
-import {CrudActionClass, CrudNameSpace} from "@app/shared/crud.namespace";
+import {CrudNameSpace} from "@app/shared/crud.namespace";
 import {ApiResourceNameEnum} from "@app/shared/enums/api-resource-name.enum";
 import {StateEnum} from "@app/shared/enums/state.enum";
 import {LanguageAction} from "@app/shared/language.action";
@@ -50,86 +49,80 @@ export class CrudActionUtil {
     }
   }
 
-  // TODO Find a way to not redeclare parameters (risk of mistake). If this methods go to CrudAction we get circular dependancy because of action namespace use (see getNamespace)
-
-  static loadResource(state: StateEnum): CrudAction.LoadResource {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.LoadResource.className);
+  static loadResource(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.LoadResource>): CrudAction.LoadResource {
+    return new crudNameSpace.LoadResource(...args);
   }
 
-  static loadResourceSuccess(state: StateEnum): CrudAction.LoadResourceSuccess {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.LoadResourceSuccess.className);
+  static loadResourceSuccess(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.LoadResourceSuccess>): CrudAction.LoadResourceSuccess {
+    return new crudNameSpace.LoadResourceSuccess(...args);
   }
 
-  static loadResourceFail(state: StateEnum): CrudAction.LoadResourceFail {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.LoadResourceFail.className);
+  static loadResourceFail(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.LoadResourceFail>): CrudAction.LoadResourceFail {
+    return new crudNameSpace.LoadResourceFail(...args);
   }
 
-  static changeQueryParametersBis(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.ChangeQueryParameters>): CrudAction.ChangeQueryParameters {
+  static changeQueryParameters(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.ChangeQueryParameters>): CrudAction.ChangeQueryParameters {
     return new crudNameSpace.ChangeQueryParameters(...args);
   }
 
-  static changeQueryParameters(state: StateEnum, queryParameters: QueryParametersModel): CrudAction.ChangeQueryParameters {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.ChangeQueryParameters.className, queryParameters);
-  }
-
-  static getAll(state: StateEnum, queryParameters?: QueryParametersModel): CrudAction.GetAll {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.GetAll.className, queryParameters);
+  static getAll(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.GetAll>): CrudAction.GetAll {
+    return new crudNameSpace.GetAll(...args);
   }
 
-  static getAllSuccess<T>(state: StateEnum, list: CollectionTypedModel<T>): CrudAction.GetAllSuccess<T> {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.GetAllSuccess.className, list);
+  static getAllSuccess<T>(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.GetAllSuccess>): CrudAction.GetAllSuccess<T> {
+    return new crudNameSpace.GetAllSuccess(...args);
   }
 
-  static getAllFail(state: StateEnum): CrudAction.GetAllFail {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.GetAllFail.className);
+  static getAllFail(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.GetAllFail>): CrudAction.GetAllFail {
+    return new crudNameSpace.GetAllFail(...args);
   }
 
-  static getById(state: StateEnum, id: string): CrudAction.GetById {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.GetById.className, id);
+  static getById(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.GetById>): CrudAction.GetById {
+    return new crudNameSpace.GetById(...args);
   }
 
-  static getByIdSuccess<T>(state: StateEnum, model: T): CrudAction.GetByIdSuccess<T> {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.GetByIdSuccess.className, model);
+  static getByIdSuccess<T>(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.GetByIdSuccess>): CrudAction.GetByIdSuccess<T> {
+    return new crudNameSpace.GetByIdSuccess(...args);
   }
 
-  static getByIdFail(state: StateEnum): CrudAction.GetByIdFail {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.GetByIdFail.className);
+  static getByIdFail(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.GetByIdFail>): CrudAction.GetByIdFail {
+    return new crudNameSpace.GetByIdFail(...args);
   }
 
-  static create<T>(state: StateEnum, model: T): CrudAction.Create<T> {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.Create.className, model);
+  static create<T>(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.Create>): CrudAction.Create<T> {
+    return new crudNameSpace.Create(...args);
   }
 
-  static createSuccess(state: StateEnum): CrudAction.CreateSuccess {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.CreateSuccess.className);
+  static createSuccess(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.CreateSuccess>): CrudAction.CreateSuccess {
+    return new crudNameSpace.CreateSuccess(...args);
   }
 
-  static createFail(state: StateEnum): CrudAction.CreateFail {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.CreateFail.className);
+  static createFail(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.CreateFail>): CrudAction.CreateFail {
+    return new crudNameSpace.CreateFail(...args);
   }
 
-  static update<T>(state: StateEnum, model: T): CrudAction.Update<T> {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.Update.className, model);
+  static update<T>(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.Update>): CrudAction.Update<T> {
+    return new crudNameSpace.Update(...args);
   }
 
-  static updateSuccess(state: StateEnum): CrudAction.UpdateSuccess {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.UpdateSuccess.className);
+  static updateSuccess(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.UpdateSuccess>): CrudAction.UpdateSuccess {
+    return new crudNameSpace.UpdateSuccess(...args);
   }
 
-  static updateFail(state: StateEnum): CrudAction.UpdateFail {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.UpdateFail.className);
+  static updateFail(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.UpdateFail>): CrudAction.UpdateFail {
+    return new crudNameSpace.UpdateFail(...args);
   }
 
-  static delete(state: StateEnum, resId: string): CrudAction.Delete {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.Delete.className, resId);
+  static delete(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.Delete>): CrudAction.Delete {
+    return new crudNameSpace.Delete(...args);
   }
 
-  static deleteSuccess(state: StateEnum): CrudAction.DeleteSuccess {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.DeleteSuccess.className);
+  static deleteSuccess(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.DeleteSuccess>): CrudAction.DeleteSuccess {
+    return new crudNameSpace.DeleteSuccess(...args);
   }
 
-  static deleteFail(state: StateEnum): CrudAction.DeleteFail {
-    return CrudActionUtil.getInstanceInternal(state, CrudAction.DeleteFail.name);
+  static deleteFail(crudNameSpace: CrudNameSpace, ...args: ConstructorParameters<typeof CrudAction.DeleteFail>): CrudAction.DeleteFail {
+    return new crudNameSpace.DeleteFail(...args);
   }
 
   static getAllSubResource(state: StateEnum, subResource: ApiResourceNameEnum, parentId: string, queryParameters?: QueryParametersModel): CrudAction.GetAllSubResource {
diff --git a/src/app/shared/views/abstract-create/abstract-create.view.ts b/src/app/shared/views/abstract-create/abstract-create.view.ts
index 8c5b96a54346f308ec90b33c91fa184e84e80764..6633bbf2b26b6c7d390876b4728cc212ff81f3b4 100644
--- a/src/app/shared/views/abstract-create/abstract-create.view.ts
+++ b/src/app/shared/views/abstract-create/abstract-create.view.ts
@@ -1,4 +1,5 @@
 import {OnInit} from "@angular/core";
+import {CrudNameSpace} from "@app/shared/crud.namespace";
 import {CrudStateModel} from "@app/shared/crud.state";
 import {BaseDirective} from "@app/shared/directives/base.directive";
 import {StateEnum} from "@app/shared/enums/state.enum";
@@ -6,15 +7,17 @@ import {CrudActionUtil} from "@app/shared/utils/crud-action.util";
 import {Store} from "@ngxs/store";
 
 export abstract class AbstractCreateView<T, U extends CrudStateModel<T>> extends BaseDirective implements OnInit {
-  protected constructor(protected store: Store, private state: StateEnum) {
+  protected constructor(protected store: Store,
+                        private state: StateEnum,
+                        private crudActionNameSpace: CrudNameSpace) {
     super();
   }
 
   create(model: T) {
-    this.store.dispatch(CrudActionUtil.create(this.state, model));
+    this.store.dispatch(CrudActionUtil.create(this.crudActionNameSpace, model));
   }
 
   ngOnInit(): void {
-    this.store.dispatch(CrudActionUtil.loadResource(this.state));
+    this.store.dispatch(CrudActionUtil.loadResource(this.crudActionNameSpace));
   }
 }
diff --git a/src/app/shared/views/abstract-detail/abstract-detail.view.ts b/src/app/shared/views/abstract-detail/abstract-detail.view.ts
index a2a51330f85c797195163c9cb00848095523d706..8f5573699c299164bf72ec26e395649a8af75963 100644
--- a/src/app/shared/views/abstract-detail/abstract-detail.view.ts
+++ b/src/app/shared/views/abstract-detail/abstract-detail.view.ts
@@ -2,6 +2,7 @@ import {ComponentType} from "@angular/cdk/portal";
 import {OnInit} from "@angular/core";
 import {MatDialog} from "@angular/material";
 import {ActivatedRoute} from "@angular/router";
+import {CrudNameSpace} from "@app/shared/crud.namespace";
 import {CrudStateModel} from "@app/shared/crud.state";
 import {AbstractDeleteDialog} from "@app/shared/dialogs/abstract-delete/abstract-delete.dialog";
 import {BaseDirective} from "@app/shared/directives/base.directive";
@@ -30,14 +31,15 @@ export abstract class AbstractDetailView<T, U extends CrudStateModel<T>> extends
   protected constructor(protected store: Store,
                         protected route: ActivatedRoute,
                         public dialog: MatDialog,
-                        private state: StateEnum) {
+                        private state: StateEnum,
+                        private crudActionNameSpace: CrudNameSpace) {
     super();
     this.isLoading$ = this.store.select(s => (s[state] as U).isLoading);
     this.current$ = this.store.select(s => (s[state] as U).current);
   }
 
   ngOnInit(): void {
-    this.store.dispatch(CrudActionUtil.loadResource(this.state));
+    this.store.dispatch(CrudActionUtil.loadResource(this.crudActionNameSpace));
     this.retreiveCurrentModelWithUrl();
   }
 
@@ -47,7 +49,7 @@ export abstract class AbstractDetailView<T, U extends CrudStateModel<T>> extends
   }
 
   private getById(id: string) {
-    this.store.dispatch(CrudActionUtil.getById(this.state, id));
+    this.store.dispatch(CrudActionUtil.getById(this.crudActionNameSpace, id));
     this.getSubResourceWithParentId(id);
   }
 
diff --git a/src/app/shared/views/abstract-edit/abstract-edit.view.ts b/src/app/shared/views/abstract-edit/abstract-edit.view.ts
index 4ef2ed1603ef4dde6d681e5f8e3d7dd713838ca2..7be8fc6e6a6b55285d9183720a95bbf53ca9ba98 100644
--- a/src/app/shared/views/abstract-edit/abstract-edit.view.ts
+++ b/src/app/shared/views/abstract-edit/abstract-edit.view.ts
@@ -1,5 +1,6 @@
 import {OnInit} from "@angular/core";
 import {ActivatedRoute} from "@angular/router";
+import {CrudNameSpace} from "@app/shared/crud.namespace";
 import {CrudStateModel} from "@app/shared/crud.state";
 import {BaseDirective} from "@app/shared/directives/base.directive";
 import {StateEnum} from "@app/shared/enums/state.enum";
@@ -15,14 +16,15 @@ export abstract class AbstractEditView<T, U extends CrudStateModel<T>> extends B
 
   protected constructor(protected store: Store,
                         protected route: ActivatedRoute,
-                        private state: StateEnum) {
+                        private state: StateEnum,
+                        private crudActionNameSpace: CrudNameSpace) {
     super();
     this.isLoading$ = this.store.select(s => (s[state] as U).isLoading);
     this.current$ = this.store.select(s => (s[state] as U).current);
   }
 
   ngOnInit(): void {
-    this.store.dispatch(CrudActionUtil.loadResource(this.state));
+    this.store.dispatch(CrudActionUtil.loadResource(this.crudActionNameSpace));
     this.getCurrentModel();
   }
 
@@ -32,7 +34,7 @@ export abstract class AbstractEditView<T, U extends CrudStateModel<T>> extends B
   }
 
   private getById(id: string) {
-    this.store.dispatch(CrudActionUtil.getById(this.state, id));
+    this.store.dispatch(CrudActionUtil.getById(this.crudActionNameSpace, id));
     this.getSubResourceWithParentId(id);
   }
 
@@ -43,6 +45,6 @@ export abstract class AbstractEditView<T, U extends CrudStateModel<T>> extends B
   }
 
   update(model: T) {
-    this.store.dispatch(CrudActionUtil.update<T>(this.state, model));
+    this.store.dispatch(CrudActionUtil.update<T>(this.crudActionNameSpace, model));
   }
 }
diff --git a/src/app/shared/views/abstract-list/abstract-list.view.ts b/src/app/shared/views/abstract-list/abstract-list.view.ts
index 23439a3902b6be4a8dab033fa84adfcbd509a59b..dae45a17aac2b8158a839717f83ca9ff16306f9a 100644
--- a/src/app/shared/views/abstract-list/abstract-list.view.ts
+++ b/src/app/shared/views/abstract-list/abstract-list.view.ts
@@ -42,14 +42,14 @@ export abstract class AbstractListView<T, U extends CrudStateModel<T>> extends B
   }
 
   getAll(queryParameters?: QueryParametersModel) {
-    this.store.dispatch(CrudActionUtil.getAll(this.state, queryParameters));
+    this.store.dispatch(CrudActionUtil.getAll(this.crudActionNameSpace, queryParameters));
   }
 
   showDetail(model: T) {
     this.store.dispatch(new Navigate([CrudRouteUtil.getDetailRoute(this.state), model[ModelAttributeEnum.resId]]));
   }
 
-  onQueryParametersEvent($event: QueryParametersModel) {
-    this.store.dispatch(CrudActionUtil.changeQueryParametersBis(this.crudActionNameSpace, $event));
+  onQueryParametersEvent(queryParameters: QueryParametersModel) {
+    this.store.dispatch(CrudActionUtil.changeQueryParameters(this.crudActionNameSpace, queryParameters));
   }
 }