diff --git a/alfa-client/apps/admin/project.json b/alfa-client/apps/admin/project.json
index a823b06f67d3c4bea4fa758699ea1583d1a00c68..9876b834e6f340fb8d71da344f75a75a9386f41b 100644
--- a/alfa-client/apps/admin/project.json
+++ b/alfa-client/apps/admin/project.json
@@ -7,7 +7,7 @@
   "tags": [],
   "targets": {
     "build": {
-      "executor": "@angular-devkit/build-angular:browser",
+      "executor": "@angular-devkit/build-angular:browser-esbuild",
       "outputs": ["{options.outputPath}"],
       "options": {
         "outputPath": "dist/apps/admin",
@@ -15,6 +15,10 @@
         "main": "apps/admin/src/main.ts",
         "polyfills": ["zone.js"],
         "tsConfig": "apps/admin/tsconfig.app.json",
+        "allowedCommonJsDependencies": [
+          "sanitize-filename-ts",
+          "jsrsasign"
+        ],
         "assets": [
           "apps/admin/src/assets",
           {
@@ -30,7 +34,8 @@
             "apps/alfa/src/styles/abstracts",
             "node_modules/@angular",
             "node_modules/include-media",
-            "node_modules/typeface-roboto"
+            "node_modules/typeface-roboto",
+            ""
           ]
         }
       },
diff --git a/alfa-client/apps/admin/src/app/app.component.ts b/alfa-client/apps/admin/src/app/app.component.ts
index 6dc6936abb0e6e2d7fef0c644a631c53cc87fa8a..11944356c6944e3fcd7faf4a6e1cbb030ddc90a0 100644
--- a/alfa-client/apps/admin/src/app/app.component.ts
+++ b/alfa-client/apps/admin/src/app/app.component.ts
@@ -22,17 +22,44 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared';
+import { BuildInfoComponent } from '@alfa-client/common';
 import { Environment, getEnvironmentFactory } from '@alfa-client/environment-shared';
-import { StateResource } from '@alfa-client/tech-shared';
+import { StateResource, TechSharedModule } from '@alfa-client/tech-shared';
+import { CommonModule } from '@angular/common';
 import { Component, OnInit } from '@angular/core';
-import { ActivatedRoute, Params, Router } from '@angular/router';
+import { ActivatedRoute, Params, Router, RouterOutlet } from '@angular/router';
+import {
+  AdminLogoIconComponent,
+  MailboxIconComponent,
+  NavbarComponent,
+  NavItemComponent,
+  OrgaUnitIconComponent,
+  UsersIconComponent,
+} from '@ods/system';
 import { AuthenticationService } from 'libs/authentication/src/lib/authentication.service';
 import { Observable } from 'rxjs';
+import { UserProfileButtonContainerComponent } from '../common/user-profile-button-container/user-profile.button-container.component';
+import { UnavailablePageComponent } from '../pages/unavailable/unavailable-page/unavailable-page.component';
 
 @Component({
   selector: 'app-root',
   templateUrl: './app.component.html',
   styleUrls: ['./app.component.scss'],
+  standalone: true,
+  imports: [
+    CommonModule,
+    NavbarComponent,
+    NavItemComponent,
+    UsersIconComponent,
+    UserProfileButtonContainerComponent,
+    AdminLogoIconComponent,
+    MailboxIconComponent,
+    OrgaUnitIconComponent,
+    RouterOutlet,
+    UnavailablePageComponent,
+    BuildInfoComponent,
+    TechSharedModule,
+  ],
 })
 export class AppComponent implements OnInit {
   readonly title = 'admin';
diff --git a/alfa-client/apps/admin/src/app/app.module.spec.ts b/alfa-client/apps/admin/src/app/app.module.spec.ts
deleted file mode 100644
index cd61915f6160b959604867735965d61efd33b655..0000000000000000000000000000000000000000
--- a/alfa-client/apps/admin/src/app/app.module.spec.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { TestBed } from '@angular/core/testing';
-import { AppModule } from './app.module';
-
-describe('AppModule', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [AppModule],
-    });
-  });
-
-  it('should create', () => {
-    expect(AppModule).toBeDefined();
-  });
-});
diff --git a/alfa-client/apps/admin/src/app/app.module.ts b/alfa-client/apps/admin/src/app/app.module.ts
deleted file mode 100644
index f0df559f8f336cb258f65bed98ca888bc79827a5..0000000000000000000000000000000000000000
--- a/alfa-client/apps/admin/src/app/app.module.ts
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { AdminSettingsModule } from '@admin-client/admin-settings';
-import { ApiRootModule } from '@alfa-client/api-root-shared';
-import { BuildInfoComponent } from '@alfa-client/common';
-import { EnvironmentModule } from '@alfa-client/environment-shared';
-import { TechSharedModule } from '@alfa-client/tech-shared';
-import { CommonModule, registerLocaleData } from '@angular/common';
-import { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
-import localeDe from '@angular/common/locales/de';
-import { NgModule } from '@angular/core';
-import { FormsModule, ReactiveFormsModule } from '@angular/forms';
-import { BrowserModule } from '@angular/platform-browser';
-import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
-import { RouterModule } from '@angular/router';
-import { EffectsModule } from '@ngrx/effects';
-import { StoreRouterConnectingModule } from '@ngrx/router-store';
-import { StoreModule } from '@ngrx/store';
-import { StoreDevtoolsModule } from '@ngrx/store-devtools';
-import {
-  AdminLogoIconComponent,
-  DropdownMenuButtonComponent,
-  DropdownMenuComponent,
-  LogoutIconComponent,
-  MailboxIconComponent,
-  NavItemComponent,
-  NavbarComponent,
-  OrgaUnitIconComponent,
-  UsersIconComponent,
-} from '@ods/system';
-import { OAuthModule } from 'angular-oauth2-oidc';
-import { HttpUnauthorizedInterceptor } from 'libs/authentication/src/lib/http-unauthorized.interceptor';
-import { UserProfileButtonContainerComponent } from '../common/user-profile-button-container/user-profile.button-container.component';
-import { environment } from '../environments/environment';
-import { OrganisationsEinheitFormPageComponent } from '../pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component';
-import { OrganisationsEinheitPageComponent } from '../pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component';
-import { PostfachPageComponent } from '../pages/postfach/postfach-page/postfach-page.component';
-import { UnavailablePageComponent } from '../pages/unavailable/unavailable-page/unavailable-page.component';
-import { UserAddPageComponent } from '../pages/users-roles/user-add-page/user-add-page.component';
-import { UserRolesPageComponent } from '../pages/users-roles/user-roles-page/user-roles-page.component';
-import { AppComponent } from './app.component';
-import { appRoutes } from './app.routes';
-
-registerLocaleData(localeDe);
-
-@NgModule({
-  declarations: [
-    AppComponent,
-    PostfachPageComponent,
-    UserRolesPageComponent,
-    OrganisationsEinheitPageComponent,
-    OrganisationsEinheitFormPageComponent,
-    UserProfileButtonContainerComponent,
-    UnavailablePageComponent,
-    UserAddPageComponent,
-  ],
-  imports: [
-    CommonModule,
-    AdminLogoIconComponent,
-    DropdownMenuComponent,
-    DropdownMenuButtonComponent,
-    NavItemComponent,
-    NavbarComponent,
-    OrgaUnitIconComponent,
-    LogoutIconComponent,
-    UsersIconComponent,
-    MailboxIconComponent,
-    RouterModule.forRoot(appRoutes),
-    BrowserModule,
-    BrowserAnimationsModule,
-    ApiRootModule,
-    EnvironmentModule,
-    environment.production ? [] : StoreDevtoolsModule.instrument({ connectInZone: true }),
-    StoreModule.forRoot({}),
-    EffectsModule.forRoot(),
-    StoreRouterConnectingModule.forRoot(),
-    FormsModule,
-    ReactiveFormsModule,
-    AdminSettingsModule,
-    OAuthModule.forRoot({
-      resourceServer: {
-        sendAccessToken: true,
-      },
-    }),
-    TechSharedModule,
-    BuildInfoComponent,
-  ],
-  providers: [
-    {
-      provide: HTTP_INTERCEPTORS,
-      useClass: HttpUnauthorizedInterceptor,
-      multi: true,
-    },
-    provideHttpClient(withInterceptorsFromDi()),
-  ],
-  bootstrap: [AppComponent],
-})
-export class AppModule {}
diff --git a/alfa-client/apps/admin/src/app/app.routes.ts b/alfa-client/apps/admin/src/app/app.routes.ts
index 8297695599e541328b3f70afe33501a5ea39e1f7..0886fc15cf87a9708f8939ce22e603b1bf312cf1 100644
--- a/alfa-client/apps/admin/src/app/app.routes.ts
+++ b/alfa-client/apps/admin/src/app/app.routes.ts
@@ -21,8 +21,8 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
+import { ROUTES } from '@admin-client/shared';
 import { Route } from '@angular/router';
-import { ROUTES } from 'libs/admin/shared';
 import { OrganisationsEinheitFormPageComponent } from '../pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component';
 import { OrganisationsEinheitPageComponent } from '../pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component';
 import { PostfachPageComponent } from '../pages/postfach/postfach-page/postfach-page.component';
diff --git a/alfa-client/apps/admin/src/common/user-profile-button-container/user-profile.button-container.component.ts b/alfa-client/apps/admin/src/common/user-profile-button-container/user-profile.button-container.component.ts
index 40858b8d4889c41146e5e1eca18183624135d129..958615ae7d7dbaf21cc5248d4be448b512085a74 100644
--- a/alfa-client/apps/admin/src/common/user-profile-button-container/user-profile.button-container.component.ts
+++ b/alfa-client/apps/admin/src/common/user-profile-button-container/user-profile.button-container.component.ts
@@ -22,11 +22,14 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { Component, OnInit } from '@angular/core';
-import { AuthenticationService } from 'libs/authentication/src/lib/authentication.service';
+import { DropdownMenuButtonComponent, DropdownMenuComponent, LogoutIconComponent } from '@ods/system';
+import { AuthenticationService } from 'authentication';
 
 @Component({
   selector: 'user-profile-button-container',
   templateUrl: './user-profile-button-container.component.html',
+  standalone: true,
+  imports: [DropdownMenuComponent, DropdownMenuButtonComponent, LogoutIconComponent],
 })
 export class UserProfileButtonContainerComponent implements OnInit {
   public currentUserInitials: string;
diff --git a/alfa-client/apps/admin/src/main.ts b/alfa-client/apps/admin/src/main.ts
index b4c156ce6d3d7e0a4e0b8a4cfaa7eda4b2a2203f..6d84faade1f163c40b471a12d75778e7aba687ca 100644
--- a/alfa-client/apps/admin/src/main.ts
+++ b/alfa-client/apps/admin/src/main.ts
@@ -21,13 +21,35 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { loadEnvironment } from '@alfa-client/environment-shared';
-import { enableProdMode } from '@angular/core';
-import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
+import { EnvironmentModule, loadEnvironment } from '@alfa-client/environment-shared';
+import { enableProdMode, importProvidersFrom } from '@angular/core';
 import { isNil } from 'lodash-es';
-import { AppModule } from './app/app.module';
+
+import { ApiRootModule } from '@alfa-client/api-root-shared';
+import { NavigationSharedModule } from '@alfa-client/navigation-shared';
+import { registerLocaleData } from '@angular/common';
+import { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
+import localeDe from '@angular/common/locales/de';
+import { BrowserModule, bootstrapApplication } from '@angular/platform-browser';
+import { provideAnimations } from '@angular/platform-browser/animations';
+import { provideRouter } from '@angular/router';
+import { EffectsModule } from '@ngrx/effects';
+import { StoreRouterConnectingModule } from '@ngrx/router-store';
+import { StoreModule } from '@ngrx/store';
+import { StoreDevtoolsModule } from '@ngrx/store-devtools';
+import { OAuthModule } from 'angular-oauth2-oidc';
+import { HttpUnauthorizedInterceptor } from 'authentication';
+import { ConfigurationsProviders } from 'libs/admin/configuration-shared/src/lib/configuration.providers';
+import { OrganisationEinheitProviders } from 'libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.providers';
+import { PostfachProviders } from 'libs/admin/postfach-shared/src/lib/postfach.providers';
+import { SettingsProviders } from 'libs/admin/settings-shared/src/lib/settings.providers';
+import { UserProviders } from 'libs/admin/user/src/lib/user.providers';
+import { AppComponent } from './app/app.component';
+import { appRoutes } from './app/app.routes';
 import { environment } from './environments/environment';
 
+registerLocaleData(localeDe);
+
 loadEnvironment(environment.environmentUrl).then((env) => {
   if (isNil(env?.production)) {
     console.error('Connection Error: environment is ', env);
@@ -37,7 +59,37 @@ loadEnvironment(environment.environmentUrl).then((env) => {
   if (env.production) {
     enableProdMode();
   }
-  platformBrowserDynamic()
-    .bootstrapModule(AppModule)
-    .catch((err) => console.log(err));
+
+  bootstrapApplication(AppComponent, {
+    providers: [
+      ConfigurationsProviders,
+      PostfachProviders,
+      SettingsProviders,
+      OrganisationEinheitProviders,
+      UserProviders,
+      importProvidersFrom(
+        NavigationSharedModule,
+        BrowserModule,
+        ApiRootModule,
+        EnvironmentModule,
+        environment.production ? [] : StoreDevtoolsModule.instrument({ connectInZone: true }),
+        StoreModule.forRoot({}),
+        EffectsModule.forRoot(),
+        StoreRouterConnectingModule.forRoot(),
+        OAuthModule.forRoot({
+          resourceServer: {
+            sendAccessToken: true,
+          },
+        }),
+      ),
+      {
+        provide: HTTP_INTERCEPTORS,
+        useClass: HttpUnauthorizedInterceptor,
+        multi: true,
+      },
+      provideHttpClient(withInterceptorsFromDi()),
+      provideRouter(appRoutes),
+      provideAnimations(),
+    ],
+  }).catch((err) => console.error(err));
 });
diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.html b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.html
index fca49823df0221f08cab813339b1d78c30e2e05c..cb9bf3ffd04a1caacde740c71fc98b9ead6a057e 100644
--- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.html
+++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.html
@@ -25,6 +25,6 @@
 -->
 <ng-container *ngIf="(apiRootStateResource$ | async)?.resource as apiRoot">
   @if (apiRoot | hasLink: apiRootLinkRel.ORGANISATIONS_EINHEIT) {
-    <admin-organisationseinheit-form-container data-test-id="organisations-einheit-form" />
+    <admin-organisations-einheit-form-container data-test-id="organisations-einheit-form" />
   }
-</ng-container>
+</ng-container>
\ No newline at end of file
diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.spec.ts b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.spec.ts
index e0d2d21f172de4baa71a6fcb48adadc57e2d4e6a..081e864d889b4390e5951d5ae3a757b687cde6ab 100644
--- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.spec.ts
+++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.spec.ts
@@ -21,10 +21,11 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { OrganisationsEinheitFormContainerComponent } from '@admin-client/admin-settings';
+import { OrganisationsEinheitFormContainerComponent } from '@admin-client/organisations-einheit';
 import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared';
 import { createStateResource, StateResource, TechSharedModule } from '@alfa-client/tech-shared';
 import { existsAsHtmlElement, mock, Mock, notExistsAsHtmlElement } from '@alfa-client/test-utils';
+import { CommonModule } from '@angular/common';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { createApiRootResource } from 'libs/api-root-shared/test/api-root';
 import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
@@ -45,7 +46,7 @@ describe('OrganisationsEinheitFormPageComponent', () => {
     apiRootService = mock(ApiRootService);
 
     await TestBed.configureTestingModule({
-      imports: [TechSharedModule],
+      imports: [CommonModule, TechSharedModule],
       declarations: [OrganisationsEinheitFormPageComponent, MockComponent(OrganisationsEinheitFormContainerComponent)],
       providers: [{ provide: ApiRootService, useValue: apiRootService }],
     }).compileComponents();
diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.ts b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.ts
index 3a62a7cfbb243c6432d189fc3e9d02f91084be4f..d92144b1e58138e50682790bfdede8198bb1ebbb 100644
--- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.ts
+++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.ts
@@ -21,14 +21,19 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
+import { OrganisationsEinheitFormContainerComponent } from '@admin-client/organisations-einheit';
 import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared';
 import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared';
+import { UiModule } from '@alfa-client/ui';
+import { CommonModule } from '@angular/common';
 import { Component, inject, OnInit } from '@angular/core';
 import { Observable, of } from 'rxjs';
 
 @Component({
   selector: 'organisationseinheit-form-page',
   templateUrl: './organisationseinheit-form-page.component.html',
+  standalone: true,
+  imports: [CommonModule, UiModule, OrganisationsEinheitFormContainerComponent],
 })
 export class OrganisationsEinheitFormPageComponent implements OnInit {
   private apiRootService = inject(ApiRootService);
diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.html b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.html
index c6b911fd2bd0dbec75e9fd4a62eb0ac2813c428e..f1c8abdc407045cf77eb1b673b22fe82c31ff1c7 100644
--- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.html
+++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.html
@@ -25,6 +25,6 @@
 -->
 <ng-container *ngIf="(apiRootStateResource$ | async)?.resource as apiRoot">
   @if (apiRoot | hasLink: apiRootLinkRel.ORGANISATIONS_EINHEIT) {
-    <admin-organisationseinheit-container data-test-id="organisations-einheit-container" />
+    <admin-organisations-einheit-container data-test-id="organisations-einheit-container" />
   }
 </ng-container>
diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.spec.ts b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.spec.ts
index fccde3c44eadce5a59c51bc5a5548597ff0f0a43..d6b708a413afe74806a4e040ec5c5affc7490678 100644
--- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.spec.ts
+++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.spec.ts
@@ -21,10 +21,11 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { OrganisationsEinheitContainerComponent } from '@admin-client/admin-settings';
+import { OrganisationsEinheitContainerComponent } from '@admin-client/organisations-einheit';
 import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared';
 import { createStateResource, StateResource, TechSharedModule } from '@alfa-client/tech-shared';
 import { existsAsHtmlElement, mock, Mock, notExistsAsHtmlElement } from '@alfa-client/test-utils';
+import { CommonModule } from '@angular/common';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { createApiRootResource } from 'libs/api-root-shared/test/api-root';
 import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
@@ -45,7 +46,7 @@ describe('OrganisationsEinheitPageComponent', () => {
     apiRootService = mock(ApiRootService);
 
     await TestBed.configureTestingModule({
-      imports: [TechSharedModule],
+      imports: [CommonModule, TechSharedModule],
       declarations: [OrganisationsEinheitPageComponent, MockComponent(OrganisationsEinheitContainerComponent)],
       providers: [{ provide: ApiRootService, useValue: apiRootService }],
     }).compileComponents();
diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.ts b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.ts
index e24994ae5e1fcafdf6e7cc153da2b40f0db2f218..031470f244f8776ca9d4448a1e55c1464a8ae2fe 100644
--- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.ts
+++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.ts
@@ -21,14 +21,19 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
+import { OrganisationsEinheitContainerComponent } from '@admin-client/organisations-einheit';
 import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared';
 import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared';
+import { UiModule } from '@alfa-client/ui';
+import { CommonModule } from '@angular/common';
 import { Component, inject, OnInit } from '@angular/core';
 import { Observable, of } from 'rxjs';
 
 @Component({
   selector: 'organisationseinheit-page',
   templateUrl: './organisationseinheit-page.component.html',
+  standalone: true,
+  imports: [CommonModule, OrganisationsEinheitContainerComponent, UiModule],
 })
 export class OrganisationsEinheitPageComponent implements OnInit {
   private apiRootService = inject(ApiRootService);
diff --git a/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.spec.ts b/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.spec.ts
index 5d000e0a2b734afc40086b414b0d5e8776bf4e85..1b1555bcacff75394b0aa8a882090913b38e84bf 100644
--- a/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.spec.ts
+++ b/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.spec.ts
@@ -21,7 +21,7 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { PostfachContainerComponent } from '@admin-client/admin-settings';
+import { PostfachContainerComponent } from '@admin-client/postfach';
 import { getEnvironmentFactory } from '@alfa-client/environment-shared';
 import { existsAsHtmlElement, notExistsAsHtmlElement } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
diff --git a/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.ts b/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.ts
index 888d44c066acb8c54b8d3c8f3f662bd0c783f404..c77fed5ff6e0e78283a2be7b408bf36db27dbab2 100644
--- a/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.ts
+++ b/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.ts
@@ -22,11 +22,14 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { Environment, getEnvironmentFactory } from '@alfa-client/environment-shared';
+import { PostfachContainerComponent } from '@admin-client/postfach';
 import { Component } from '@angular/core';
 
 @Component({
   selector: 'postfach-page',
   templateUrl: './postfach-page.component.html',
+  standalone: true,
+  imports: [PostfachContainerComponent],
 })
 export class PostfachPageComponent {
   public readonly environment: Environment = getEnvironmentFactory();
diff --git a/alfa-client/apps/admin/src/pages/unavailable/unavailable-page/unavailable-page.component.spec.ts b/alfa-client/apps/admin/src/pages/unavailable/unavailable-page/unavailable-page.component.spec.ts
index 30c1b96b7f3390c6e73a159ab93d096fcfdd536c..2776889e04ed44b051b5f9c6057585e28d1871ef 100644
--- a/alfa-client/apps/admin/src/pages/unavailable/unavailable-page/unavailable-page.component.spec.ts
+++ b/alfa-client/apps/admin/src/pages/unavailable/unavailable-page/unavailable-page.component.spec.ts
@@ -30,7 +30,7 @@ describe('UnavailablePageComponent', () => {
 
   beforeEach(async () => {
     await TestBed.configureTestingModule({
-      declarations: [UnavailablePageComponent],
+      imports: [UnavailablePageComponent],
     }).compileComponents();
 
     fixture = TestBed.createComponent(UnavailablePageComponent);
diff --git a/alfa-client/apps/admin/src/pages/unavailable/unavailable-page/unavailable-page.component.ts b/alfa-client/apps/admin/src/pages/unavailable/unavailable-page/unavailable-page.component.ts
index e0eda63a5e99558ca2d9355f6b11185089187c03..8c5888db1cec1eac188c903395a7875c1df5811f 100644
--- a/alfa-client/apps/admin/src/pages/unavailable/unavailable-page/unavailable-page.component.ts
+++ b/alfa-client/apps/admin/src/pages/unavailable/unavailable-page/unavailable-page.component.ts
@@ -24,8 +24,9 @@
 import { Component } from '@angular/core';
 
 @Component({
-  selector: 'unavailable-page',
-  templateUrl: './unavailable-page.component.html',
-  styles: [],
+    selector: 'unavailable-page',
+    templateUrl: './unavailable-page.component.html',
+    styles: [],
+    standalone: true,
 })
 export class UnavailablePageComponent {}
diff --git a/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.spec.ts b/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.spec.ts
index 13478e0f8f00dd03b6ef09b17b618c3d9e094388..facb1f6d4f1b2493b43c881222f3bfde83e90890 100644
--- a/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.spec.ts
+++ b/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.spec.ts
@@ -21,7 +21,7 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { UserAddFormComponent } from '@admin-client/admin-settings';
+import { UserAddFormComponent } from '@admin-client/user';
 import { getEnvironmentFactory } from '@alfa-client/environment-shared';
 import { existsAsHtmlElement, notExistsAsHtmlElement } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
diff --git a/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.ts b/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.ts
index 9b4ccbdfdc5cb58bf2afcbef09d2700aacdcca88..0e022f312b04c2f22d3432683d58d2f324261f94 100644
--- a/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.ts
+++ b/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.ts
@@ -22,11 +22,14 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { Environment, getEnvironmentFactory } from '@alfa-client/environment-shared';
+import { UserAddFormComponent } from '@admin-client/user';
 import { Component } from '@angular/core';
 
 @Component({
   selector: 'user-add-page',
   templateUrl: './user-add-page.component.html',
+  standalone: true,
+  imports: [UserAddFormComponent],
 })
 export class UserAddPageComponent {
   public readonly environment: Environment = getEnvironmentFactory();
diff --git a/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.spec.ts b/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.spec.ts
index d6e0ed998c333bdcdbde92edbed4abdff395f984..77b415071c8a7e4d5ce966bae33b30bd48d4f14c 100644
--- a/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.spec.ts
+++ b/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.spec.ts
@@ -21,7 +21,7 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { UsersRolesComponent } from '@admin-client/admin-settings';
+import { UsersRolesComponent } from '@admin-client/user';
 import { getEnvironmentFactory } from '@alfa-client/environment-shared';
 import { existsAsHtmlElement, notExistsAsHtmlElement } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
diff --git a/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.ts b/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.ts
index 8c059c1eb09245e2492f737233c3baa7c19e5a82..b19feb8a0d942320087afe30f32bfe5872fef661 100644
--- a/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.ts
+++ b/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.ts
@@ -22,11 +22,14 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { Environment, getEnvironmentFactory } from '@alfa-client/environment-shared';
+import { UsersRolesComponent } from '@admin-client/user';
 import { Component } from '@angular/core';
 
 @Component({
   selector: 'app-user-roles-page',
   templateUrl: './user-roles-page.component.html',
+  standalone: true,
+  imports: [UsersRolesComponent],
 })
 export class UserRolesPageComponent {
   public readonly environment: Environment = getEnvironmentFactory();
diff --git a/alfa-client/apps/admin/tsconfig.json b/alfa-client/apps/admin/tsconfig.json
index 3d14eb0f33fa0447b1ab6a871eacd616e044c6c7..7925e81752f248e59546c31d58f62da3abbe7704 100644
--- a/alfa-client/apps/admin/tsconfig.json
+++ b/alfa-client/apps/admin/tsconfig.json
@@ -1,14 +1,5 @@
 {
-  "compilerOptions": {
-    "target": "es2022",
-    "useDefineForClassFields": false
-    // "forceConsistentCasingInFileNames": true,
-    // "strict": true,
-    // "noImplicitOverride": true,
-    // "noPropertyAccessFromIndexSignature": true,
-    // "noImplicitReturns": true,
-    // "noFallthroughCasesInSwitch": true
-  },
+  "extends": "../../tsconfig.base.json",
   "files": [],
   "include": [],
   "references": [
@@ -22,11 +13,8 @@
       "path": "./tsconfig.editor.json"
     }
   ],
-  "extends": "../../tsconfig.base.json",
-  "angularCompilerOptions": {
-    // "enableI18nLegacyMessageIdFormat": false,
-    // "strictInjectionParameters": true,
-    // "strictInputAccessModifiers": true,
-    // "strictTemplates": true
+  "compilerOptions": {
+    "target": "es2022",
+    "useDefineForClassFields": false
   }
 }
diff --git a/alfa-client/libs/admin/configuration-shared/.eslintrc.json b/alfa-client/libs/admin/configuration-shared/.eslintrc.json
new file mode 100644
index 0000000000000000000000000000000000000000..7474579d583c598ae092a906b3e6cf1ad3c08a50
--- /dev/null
+++ b/alfa-client/libs/admin/configuration-shared/.eslintrc.json
@@ -0,0 +1,33 @@
+{
+  "extends": ["../../../.eslintrc.json"],
+  "ignorePatterns": ["!**/*"],
+  "overrides": [
+    {
+      "files": ["*.ts"],
+      "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"],
+      "rules": {
+        "@angular-eslint/directive-selector": [
+          "error",
+          {
+            "type": "attribute",
+            "prefix": "admin",
+            "style": "camelCase"
+          }
+        ],
+        "@angular-eslint/component-selector": [
+          "error",
+          {
+            "type": "element",
+            "prefix": "admin",
+            "style": "kebab-case"
+          }
+        ]
+      }
+    },
+    {
+      "files": ["*.html"],
+      "extends": ["plugin:@nx/angular-template"],
+      "rules": {}
+    }
+  ]
+}
diff --git a/alfa-client/libs/admin/configuration-shared/README.md b/alfa-client/libs/admin/configuration-shared/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..6f5030b70bcee5425a71ad582b478c8007bb6169
--- /dev/null
+++ b/alfa-client/libs/admin/configuration-shared/README.md
@@ -0,0 +1,7 @@
+# configuration
+
+This library was generated with [Nx](https://nx.dev).
+
+## Running unit tests
+
+Run `nx test configuration` to execute the unit tests.
diff --git a/alfa-client/libs/admin/configuration-shared/jest.config.ts b/alfa-client/libs/admin/configuration-shared/jest.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..62ec3a0768ca632eface9c5965a666571b6f526c
--- /dev/null
+++ b/alfa-client/libs/admin/configuration-shared/jest.config.ts
@@ -0,0 +1,21 @@
+export default {
+  displayName: 'admin-configuration',
+  preset: '../../../jest.preset.js',
+  setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
+  coverageDirectory: '../../../coverage/libs/admin/configuration-shared',
+  transform: {
+    '^.+\\.(ts|mjs|js|html)$': [
+      'jest-preset-angular',
+      {
+        tsconfig: '<rootDir>/tsconfig.spec.json',
+        stringifyContentPathRegex: '\\.(html|svg)$',
+      },
+    ],
+  },
+  transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'],
+  snapshotSerializers: [
+    'jest-preset-angular/build/serializers/no-ng-attributes',
+    'jest-preset-angular/build/serializers/ng-snapshot',
+    'jest-preset-angular/build/serializers/html-comment',
+  ],
+};
diff --git a/alfa-client/libs/admin/configuration-shared/project.json b/alfa-client/libs/admin/configuration-shared/project.json
new file mode 100644
index 0000000000000000000000000000000000000000..ce13ed7f5533688a16237678622655a7117a4c41
--- /dev/null
+++ b/alfa-client/libs/admin/configuration-shared/project.json
@@ -0,0 +1,22 @@
+{
+  "name": "admin-configuration",
+  "$schema": "../../../node_modules/nx/schemas/project-schema.json",
+  "sourceRoot": "libs/admin/configuration-shared/src",
+  "prefix": "admin",
+  "projectType": "library",
+  "tags": [],
+  "targets": {
+    "test": {
+      "executor": "@nx/jest:jest",
+      "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
+      "options": {
+        "tsConfig": "libs/admin/configuration-shared/tsconfig.spec.json",
+        "jestConfig": "libs/admin/configuration-shared/jest.config.ts"
+      }
+    },
+    "lint": {
+      "executor": "@nx/eslint:lint",
+      "outputs": ["{options.outputFile}"]
+    }
+  }
+}
diff --git a/alfa-client/libs/admin/configuration-shared/src/index.ts b/alfa-client/libs/admin/configuration-shared/src/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fa9624f0ddb7cb788ef5732ae12412f4bcb84138
--- /dev/null
+++ b/alfa-client/libs/admin/configuration-shared/src/index.ts
@@ -0,0 +1,4 @@
+export * from './lib/configuration-resource.service';
+export * from './lib/configuration.linkrel';
+export * from './lib/configuration.model';
+export * from './lib/configuration.service';
diff --git a/alfa-client/libs/admin/settings/src/lib/configuration/configuration-resource.service.ts b/alfa-client/libs/admin/configuration-shared/src/lib/configuration-resource.service.ts
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/configuration/configuration-resource.service.ts
rename to alfa-client/libs/admin/configuration-shared/src/lib/configuration-resource.service.ts
diff --git a/alfa-client/libs/admin/settings/src/lib/configuration/configuration.linkrel.ts b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.linkrel.ts
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/configuration/configuration.linkrel.ts
rename to alfa-client/libs/admin/configuration-shared/src/lib/configuration.linkrel.ts
diff --git a/alfa-client/libs/admin/settings/src/lib/configuration/configuration.model.ts b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.model.ts
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/configuration/configuration.model.ts
rename to alfa-client/libs/admin/configuration-shared/src/lib/configuration.model.ts
diff --git a/alfa-client/libs/admin/configuration-shared/src/lib/configuration.providers.ts b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.providers.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7a1cb35d734c58d0671b4a5ef41923f5f8dd2797
--- /dev/null
+++ b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.providers.ts
@@ -0,0 +1,16 @@
+import {
+  ConfigurationResourceService,
+  ConfigurationService,
+  createConfigurationResourceService,
+} from '@admin-client/configuration-shared';
+import { ApiRootService } from '@alfa-client/api-root-shared';
+import { ResourceRepository } from '@alfa-client/tech-shared';
+
+export const ConfigurationsProviders = [
+  ConfigurationService,
+  {
+    provide: ConfigurationResourceService,
+    useFactory: createConfigurationResourceService,
+    deps: [ResourceRepository, ApiRootService],
+  },
+];
diff --git a/alfa-client/libs/admin/settings/src/lib/configuration/configuration.service.spec.ts b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.service.spec.ts
similarity index 79%
rename from alfa-client/libs/admin/settings/src/lib/configuration/configuration.service.spec.ts
rename to alfa-client/libs/admin/configuration-shared/src/lib/configuration.service.spec.ts
index 175a9419c1d735bd36a5aa10ad17036298827923..0892339b5464476bdf01cf8383891b55e8554a1d 100644
--- a/alfa-client/libs/admin/settings/src/lib/configuration/configuration.service.spec.ts
+++ b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.service.spec.ts
@@ -22,10 +22,11 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { StateResource, createStateResource } from '@alfa-client/tech-shared';
-import { Mock, mock, useFromMock } from '@alfa-client/test-utils';
+import { Mock, mock } from '@alfa-client/test-utils';
+import { TestBed } from '@angular/core/testing';
 import { singleCold, singleHot } from 'libs/tech-shared/test/marbles';
 import { Observable } from 'rxjs';
-import { createConfigurationResource } from '../../../test/configuration/configuration';
+import { createConfigurationResource } from '../../test/configuration';
 import { ConfigurationResourceService } from './configuration-resource.service';
 import { ConfigurationResource } from './configuration.model';
 import { ConfigurationService } from './configuration.service';
@@ -37,7 +38,11 @@ describe('ConfigurationService', () => {
   beforeEach(() => {
     configurationResourceService = mock(ConfigurationResourceService);
 
-    service = new ConfigurationService(useFromMock(configurationResourceService));
+    TestBed.configureTestingModule({
+      providers: [ConfigurationService, { provide: ConfigurationResourceService, useValue: configurationResourceService }],
+    });
+
+    service = TestBed.inject(ConfigurationService);
   });
 
   it('should create', () => {
@@ -46,13 +51,10 @@ describe('ConfigurationService', () => {
 
   describe('get', () => {
     const configurationResource: ConfigurationResource = createConfigurationResource();
-    const configurationStateResource: StateResource<ConfigurationResource> =
-      createStateResource(configurationResource);
+    const configurationStateResource: StateResource<ConfigurationResource> = createStateResource(configurationResource);
 
     beforeEach(() => {
-      configurationResourceService.get = jest
-        .fn()
-        .mockReturnValue(singleHot(configurationStateResource));
+      configurationResourceService.get = jest.fn().mockReturnValue(singleHot(configurationStateResource));
     });
     it('should call resourceService', () => {
       configurationResourceService.get = jest.fn();
@@ -63,8 +65,7 @@ describe('ConfigurationService', () => {
     });
 
     it('should return value', () => {
-      const loadedConfigurationResource: Observable<StateResource<ConfigurationResource>> =
-        service.get();
+      const loadedConfigurationResource: Observable<StateResource<ConfigurationResource>> = service.get();
 
       expect(loadedConfigurationResource).toBeObservable(singleCold(configurationStateResource));
     });
diff --git a/alfa-client/libs/admin/settings/src/lib/configuration/configuration.service.ts b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.service.ts
similarity index 91%
rename from alfa-client/libs/admin/settings/src/lib/configuration/configuration.service.ts
rename to alfa-client/libs/admin/configuration-shared/src/lib/configuration.service.ts
index 8e3b7815446dd1d76f8e88cfa78f7e0d8566fbe4..1a1b763736644b12f4003820569d4e4bae65a679 100644
--- a/alfa-client/libs/admin/settings/src/lib/configuration/configuration.service.ts
+++ b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.service.ts
@@ -22,14 +22,14 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { StateResource } from '@alfa-client/tech-shared';
-import { Injectable } from '@angular/core';
+import { inject, Injectable } from '@angular/core';
 import { Observable } from 'rxjs';
 import { ConfigurationResourceService } from './configuration-resource.service';
 import { ConfigurationResource } from './configuration.model';
 
 @Injectable()
 export class ConfigurationService {
-  constructor(private configurationResourceService: ConfigurationResourceService) {}
+  private configurationResourceService = inject(ConfigurationResourceService);
 
   public get(): Observable<StateResource<ConfigurationResource>> {
     return this.configurationResourceService.get();
diff --git a/alfa-client/libs/admin/configuration-shared/src/test-setup.ts b/alfa-client/libs/admin/configuration-shared/src/test-setup.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c408668266d2fec3a9803c0ec044bc163fb987fe
--- /dev/null
+++ b/alfa-client/libs/admin/configuration-shared/src/test-setup.ts
@@ -0,0 +1,12 @@
+import '@testing-library/jest-dom';
+import 'jest-preset-angular/setup-jest';
+
+import { getTestBed } from '@angular/core/testing';
+import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
+
+getTestBed().resetTestEnvironment();
+getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), {
+  teardown: { destroyAfterEach: false },
+  errorOnUnknownProperties: true,
+  errorOnUnknownElements: true,
+});
diff --git a/alfa-client/libs/admin/configuration-shared/test/configuration.ts b/alfa-client/libs/admin/configuration-shared/test/configuration.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9b188cb1c2bd4bb8fec2db9dd4ba0d5830f09f41
--- /dev/null
+++ b/alfa-client/libs/admin/configuration-shared/test/configuration.ts
@@ -0,0 +1,6 @@
+import { ConfigurationLinkRel, ConfigurationResource } from '@admin-client/configuration-shared';
+import { toResource } from '../../../tech-shared/test/resource';
+
+export function createConfigurationResource(): ConfigurationResource {
+  return toResource({}, [ConfigurationLinkRel.SETTING]);
+}
diff --git a/alfa-client/libs/admin/settings/tsconfig.json b/alfa-client/libs/admin/configuration-shared/tsconfig.json
similarity index 100%
rename from alfa-client/libs/admin/settings/tsconfig.json
rename to alfa-client/libs/admin/configuration-shared/tsconfig.json
diff --git a/alfa-client/libs/admin/settings/tsconfig.lib.json b/alfa-client/libs/admin/configuration-shared/tsconfig.lib.json
similarity index 80%
rename from alfa-client/libs/admin/settings/tsconfig.lib.json
rename to alfa-client/libs/admin/configuration-shared/tsconfig.lib.json
index 17469f1e4af3ea771aaa29b1d48f9bb5bf62a020..8441346f6e5858b2ef4235cb3c3160eda256f94a 100644
--- a/alfa-client/libs/admin/settings/tsconfig.lib.json
+++ b/alfa-client/libs/admin/configuration-shared/tsconfig.lib.json
@@ -7,6 +7,6 @@
     "inlineSources": true,
     "types": []
   },
-  "exclude": ["src/test-setup.ts", "src/**/*.spec.ts", "jest.config.ts", "src/**/*.test.ts"],
+  "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"],
   "include": ["src/**/*.ts"]
 }
diff --git a/alfa-client/libs/admin/settings/tsconfig.spec.json b/alfa-client/libs/admin/configuration-shared/tsconfig.spec.json
similarity index 100%
rename from alfa-client/libs/admin/settings/tsconfig.spec.json
rename to alfa-client/libs/admin/configuration-shared/tsconfig.spec.json
diff --git a/alfa-client/libs/admin/organisations-einheit-shared/.eslintrc.json b/alfa-client/libs/admin/organisations-einheit-shared/.eslintrc.json
new file mode 100644
index 0000000000000000000000000000000000000000..7474579d583c598ae092a906b3e6cf1ad3c08a50
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit-shared/.eslintrc.json
@@ -0,0 +1,33 @@
+{
+  "extends": ["../../../.eslintrc.json"],
+  "ignorePatterns": ["!**/*"],
+  "overrides": [
+    {
+      "files": ["*.ts"],
+      "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"],
+      "rules": {
+        "@angular-eslint/directive-selector": [
+          "error",
+          {
+            "type": "attribute",
+            "prefix": "admin",
+            "style": "camelCase"
+          }
+        ],
+        "@angular-eslint/component-selector": [
+          "error",
+          {
+            "type": "element",
+            "prefix": "admin",
+            "style": "kebab-case"
+          }
+        ]
+      }
+    },
+    {
+      "files": ["*.html"],
+      "extends": ["plugin:@nx/angular-template"],
+      "rules": {}
+    }
+  ]
+}
diff --git a/alfa-client/libs/admin/organisations-einheit-shared/README.md b/alfa-client/libs/admin/organisations-einheit-shared/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..a5be82c2249514847db3cc868c6a6d902ad28358
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit-shared/README.md
@@ -0,0 +1,7 @@
+# admin-organisations-einheit-shared
+
+This library was generated with [Nx](https://nx.dev).
+
+## Running unit tests
+
+Run `nx test admin-organisations-einheit-shared` to execute the unit tests.
diff --git a/alfa-client/libs/admin/organisations-einheit-shared/jest.config.ts b/alfa-client/libs/admin/organisations-einheit-shared/jest.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..252ea166a7db0491a829bbaad260b606924ef8c2
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit-shared/jest.config.ts
@@ -0,0 +1,21 @@
+export default {
+  displayName: 'admin-organisations-einheit-shared',
+  preset: '../../../jest.preset.js',
+  setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
+  coverageDirectory: '../../../coverage/libs/admin/organisations-einheit-shared',
+  transform: {
+    '^.+\\.(ts|mjs|js|html)$': [
+      'jest-preset-angular',
+      {
+        tsconfig: '<rootDir>/tsconfig.spec.json',
+        stringifyContentPathRegex: '\\.(html|svg)$',
+      },
+    ],
+  },
+  transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'],
+  snapshotSerializers: [
+    'jest-preset-angular/build/serializers/no-ng-attributes',
+    'jest-preset-angular/build/serializers/ng-snapshot',
+    'jest-preset-angular/build/serializers/html-comment',
+  ],
+};
diff --git a/alfa-client/libs/admin/organisations-einheit-shared/project.json b/alfa-client/libs/admin/organisations-einheit-shared/project.json
new file mode 100644
index 0000000000000000000000000000000000000000..62237ee97b848fa0177621c828ebea341b338ad2
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit-shared/project.json
@@ -0,0 +1,22 @@
+{
+  "name": "admin-organisations-einheit-shared",
+  "$schema": "../../../node_modules/nx/schemas/project-schema.json",
+  "sourceRoot": "libs/admin/organisations-einheit-shared/src",
+  "prefix": "admin",
+  "projectType": "library",
+  "tags": [],
+  "targets": {
+    "test": {
+      "executor": "@nx/jest:jest",
+      "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
+      "options": {
+        "tsConfig": "libs/admin/organisations-einheit-shared/tsconfig.spec.json",
+        "jestConfig": "libs/admin/organisations-einheit-shared/jest.config.ts"
+      }
+    },
+    "lint": {
+      "executor": "@nx/eslint:lint",
+      "outputs": ["{options.outputFile}"]
+    }
+  }
+}
diff --git a/alfa-client/libs/admin/organisations-einheit-shared/src/index.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5135ad7a49fa3d4c1f354f020bb135bec2b468ca
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit-shared/src/index.ts
@@ -0,0 +1,3 @@
+export * from './lib/organisations-einheit.linkrel';
+export * from './lib/organisations-einheit.model';
+export * from './lib/organisations-einheit.service';
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-list-resource.service.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit-list-resource.service.ts
similarity index 92%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-list-resource.service.ts
rename to alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit-list-resource.service.ts
index d3b422cbbdca27c16673109e6e0317a64f600da4..4c7f294dbde21fb4425692fc8cc967e669ecf75d 100644
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-list-resource.service.ts
+++ b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit-list-resource.service.ts
@@ -21,11 +21,11 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { AdminOrganisationsEinheitItemResource, AdminOrganisationsEinheitListResource } from '@admin-client/admin-settings';
+import { ConfigurationResource } from '@admin-client/configuration-shared';
 import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared';
 import { ListResourceServiceConfig, ResourceListService, ResourceRepository } from '@alfa-client/tech-shared';
-import { ConfigurationResource } from 'libs/admin/settings/src/lib/configuration/configuration.model';
 import { OrganisationsEinheitListLinkRel } from './organisations-einheit.linkrel';
+import { AdminOrganisationsEinheitItemResource, AdminOrganisationsEinheitListResource } from './organisations-einheit.model';
 
 export class OrganisationsEinheitListResourceService extends ResourceListService<
   ApiRootResource,
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-resource.service.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit-resource.service.ts
similarity index 91%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-resource.service.ts
rename to alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit-resource.service.ts
index f14046d99e4bcf4c9e678b51aacc76aeb7919d9b..304671d285d6657bf817c2b504d7b0ce5979796f 100644
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-resource.service.ts
+++ b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit-resource.service.ts
@@ -21,11 +21,11 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { AdminOrganisationsEinheitResource } from '@admin-client/admin-settings';
+import { ConfigurationResource } from '@admin-client/configuration-shared';
 import { ApiResourceService, ResourceRepository, ResourceServiceConfig } from '@alfa-client/tech-shared';
-import { ConfigurationResource } from 'libs/admin/settings/src/lib/configuration/configuration.model';
 import { OrganisationsEinheitListResourceService } from './organisations-einheit-list-resource.service';
 import { OrganisationsEinheitLinkRel } from './organisations-einheit.linkrel';
+import { AdminOrganisationsEinheitResource } from './organisations-einheit.model';
 
 export class OrganisationsEinheitResourceService extends ApiResourceService<
   AdminOrganisationsEinheitResource,
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit.linkrel.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.linkrel.ts
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit.linkrel.ts
rename to alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.linkrel.ts
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit.model.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.model.ts
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit.model.ts
rename to alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.model.ts
diff --git a/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.providers.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.providers.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e3ffd49a2ab0b97cc65a941694ce8ac7d693fec4
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.providers.ts
@@ -0,0 +1,23 @@
+import { ApiRootService } from '@alfa-client/api-root-shared';
+import { ResourceRepository } from '@alfa-client/tech-shared';
+import {
+  createOrganisationsEinheitListResourceService,
+  OrganisationsEinheitListResourceService,
+} from './organisations-einheit-list-resource.service';
+import {
+  createOrganisationsEinheitResourceService,
+  OrganisationsEinheitResourceService,
+} from './organisations-einheit-resource.service';
+
+export const OrganisationEinheitProviders = [
+  {
+    provide: OrganisationsEinheitListResourceService,
+    useFactory: createOrganisationsEinheitListResourceService,
+    deps: [ResourceRepository, ApiRootService],
+  },
+  {
+    provide: OrganisationsEinheitResourceService,
+    useFactory: createOrganisationsEinheitResourceService,
+    deps: [ResourceRepository, OrganisationsEinheitListResourceService],
+  },
+];
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.spec.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.service.spec.ts
similarity index 88%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.spec.ts
rename to alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.service.spec.ts
index c528bb33eb34bf8c58b0c0f0d1fdc073502109c0..36f737d58574c8765ae7f91c8e555663e561627d 100644
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.spec.ts
+++ b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.service.spec.ts
@@ -21,25 +21,26 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { AdminOrganisationsEinheitListResource, AdminOrganisationsEinheitResource } from '@admin-client/admin-settings';
 import { NavigationService } from '@alfa-client/navigation-shared';
 import { StateResource, createStateResource } from '@alfa-client/tech-shared';
 import { Mock, mock, useFromMock } from '@alfa-client/test-utils';
 import { SnackBarService } from '@alfa-client/ui';
+import { TestBed } from '@angular/core/testing';
 import { singleColdCompleted } from 'libs/tech-shared/test/marbles';
 import { Observable, of } from 'rxjs';
 import {
   createAdminOrganisationsEinheitListResource,
   createAdminOrganisationsEinheitResource,
-} from '../../../test/organisations-einheit/organisations-einheit';
+} from '../test/organisations-einheit';
 import { OrganisationsEinheitListResourceService } from './organisations-einheit-list-resource.service';
 import { OrganisationsEinheitResourceService } from './organisations-einheit-resource.service';
-import { OrganisationsEinheitService } from './organisationseinheit.service';
+import { AdminOrganisationsEinheitListResource, AdminOrganisationsEinheitResource } from './organisations-einheit.model';
+import { OrganisationsEinheitService } from './organisations-einheit.service';
 
 jest.mock('./organisations-einheit-list-resource.service');
 jest.mock('./organisations-einheit-resource.service');
-jest.mock('../../../../../navigation-shared/src/lib/navigation.service');
-jest.mock('../../../../../ui/src/lib/snackbar/snackbar.service');
+jest.mock('libs/navigation-shared/src/lib/navigation.service');
+jest.mock('libs/ui/src/lib/snackbar/snackbar.service');
 
 describe('OrganisationsEinheitService', () => {
   let service: OrganisationsEinheitService;
@@ -56,12 +57,17 @@ describe('OrganisationsEinheitService', () => {
     navigationService.urlChanged.mockReturnValue(of({}));
 
     snackBarService = mock(SnackBarService);
-    service = new OrganisationsEinheitService(
-      useFromMock(listResourceService),
-      useFromMock(resourceService),
-      useFromMock(navigationService),
-      useFromMock(snackBarService),
-    );
+
+    TestBed.configureTestingModule({
+      providers: [
+        { provide: OrganisationsEinheitListResourceService, useValue: useFromMock(listResourceService) },
+        { provide: OrganisationsEinheitResourceService, useValue: useFromMock(resourceService) },
+        { provide: NavigationService, useValue: useFromMock(navigationService) },
+        { provide: SnackBarService, useValue: useFromMock(snackBarService) },
+      ],
+    });
+
+    service = TestBed.inject(OrganisationsEinheitService);
   });
 
   describe('onNavigation', () => {
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.service.ts
similarity index 90%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.ts
rename to alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.service.ts
index 7f48d377892fae7057fdb2d775a75dbae51f88c7..dd246b5c64f0dbba4a7105e668599eee32fe03d1 100644
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.ts
+++ b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.service.ts
@@ -21,36 +21,36 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import {
-  AdminOrganisationsEinheitListResource,
-  AdminOrganisationsEinheitResource,
-  AdminOrganisationsEinheitSettings,
-} from '@admin-client/admin-settings';
 import { NavigationService } from '@alfa-client/navigation-shared';
 import { StateResource, createEmptyStateResource, isNotUndefined } from '@alfa-client/tech-shared';
 import { SnackBarService } from '@alfa-client/ui';
-import { Injectable } from '@angular/core';
+import { Injectable, inject } from '@angular/core';
 import { Params } from '@angular/router';
 import { ResourceUri } from '@ngxp/rest';
 import { isNil } from 'lodash-es';
 import { Observable, Subscription, startWith, tap } from 'rxjs';
 import { OrganisationsEinheitListResourceService } from './organisations-einheit-list-resource.service';
 import { OrganisationsEinheitResourceService } from './organisations-einheit-resource.service';
+import {
+  AdminOrganisationsEinheitListResource,
+  AdminOrganisationsEinheitResource,
+  AdminOrganisationsEinheitSettings,
+} from './organisations-einheit.model';
 
 @Injectable({
   providedIn: 'root',
 })
 export class OrganisationsEinheitService {
+  private listResourceService = inject(OrganisationsEinheitListResourceService);
+  private resourceService = inject(OrganisationsEinheitResourceService);
+  private navigationService = inject(NavigationService);
+  private snackBarService = inject(SnackBarService);
+
   static ORGANISATIONS_EINHEIT_URL: string = 'organisationsEinheitUrl';
 
   private subscription: Subscription;
 
-  constructor(
-    private listResourceService: OrganisationsEinheitListResourceService,
-    private resourceService: OrganisationsEinheitResourceService,
-    private navigationService: NavigationService,
-    private snackBarService: SnackBarService,
-  ) {
+  constructor() {
     this.listenToNavigation();
   }
 
diff --git a/alfa-client/libs/admin/organisations-einheit-shared/src/test-setup.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/test-setup.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c408668266d2fec3a9803c0ec044bc163fb987fe
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit-shared/src/test-setup.ts
@@ -0,0 +1,12 @@
+import '@testing-library/jest-dom';
+import 'jest-preset-angular/setup-jest';
+
+import { getTestBed } from '@angular/core/testing';
+import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
+
+getTestBed().resetTestEnvironment();
+getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), {
+  teardown: { destroyAfterEach: false },
+  errorOnUnknownProperties: true,
+  errorOnUnknownElements: true,
+});
diff --git a/alfa-client/libs/admin/settings/test/organisations-einheit/organisations-einheit.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/test/organisations-einheit.ts
similarity index 91%
rename from alfa-client/libs/admin/settings/test/organisations-einheit/organisations-einheit.ts
rename to alfa-client/libs/admin/organisations-einheit-shared/src/test/organisations-einheit.ts
index ab26e7e4aca4f7bf41b047615adf99b1b77673dd..ca09b8a88d1a8988fb155ac9e7121731decd2d91 100644
--- a/alfa-client/libs/admin/settings/test/organisations-einheit/organisations-einheit.ts
+++ b/alfa-client/libs/admin/organisations-einheit-shared/src/test/organisations-einheit.ts
@@ -22,15 +22,15 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { faker } from '@faker-js/faker';
+import { toResource } from 'libs/tech-shared/test/resource';
 import { times } from 'lodash-es';
-import { toResource } from '../../../../tech-shared/test/resource';
+import { OrganisationsEinheitListLinkRel } from '../lib/organisations-einheit.linkrel';
 import {
   AdminOrganisationsEinheit,
   AdminOrganisationsEinheitListResource,
   AdminOrganisationsEinheitResource,
   AdminOrganisationsEinheitSyncResult,
-} from '../../src';
-import { OrganisationsEinheitListLinkRel } from '../../src/lib/organisationseinheit/organisations-einheit.linkrel';
+} from '../lib/organisations-einheit.model';
 
 export function createAdminOrganisationsEinheit(): AdminOrganisationsEinheit {
   return {
diff --git a/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.json b/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..8ca9ad312c2bd4dc364383853ddd91a2ed8f86fd
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.json
@@ -0,0 +1,16 @@
+{
+  "extends": "../../../tsconfig.base.json",
+  "files": [],
+  "include": [],
+  "references": [
+    {
+      "path": "./tsconfig.lib.json"
+    },
+    {
+      "path": "./tsconfig.spec.json"
+    }
+  ],
+  "compilerOptions": {
+    "target": "es2022"
+  }
+}
diff --git a/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.lib.json b/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.lib.json
new file mode 100644
index 0000000000000000000000000000000000000000..8441346f6e5858b2ef4235cb3c3160eda256f94a
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.lib.json
@@ -0,0 +1,12 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../../dist/out-tsc",
+    "declaration": true,
+    "declarationMap": true,
+    "inlineSources": true,
+    "types": []
+  },
+  "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"],
+  "include": ["src/**/*.ts"]
+}
diff --git a/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.spec.json b/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.spec.json
new file mode 100644
index 0000000000000000000000000000000000000000..723782fbd367969806c5992aea882773ab65af8b
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.spec.json
@@ -0,0 +1,12 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../../dist/out-tsc",
+    "module": "commonjs",
+    "types": ["jest", "node"],
+    "target": "ES2022",
+    "useDefineForClassFields": false
+  },
+  "files": ["src/test-setup.ts"],
+  "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "jest.config.ts"]
+}
diff --git a/alfa-client/libs/admin/organisations-einheit/.eslintrc.json b/alfa-client/libs/admin/organisations-einheit/.eslintrc.json
new file mode 100644
index 0000000000000000000000000000000000000000..7474579d583c598ae092a906b3e6cf1ad3c08a50
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit/.eslintrc.json
@@ -0,0 +1,33 @@
+{
+  "extends": ["../../../.eslintrc.json"],
+  "ignorePatterns": ["!**/*"],
+  "overrides": [
+    {
+      "files": ["*.ts"],
+      "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"],
+      "rules": {
+        "@angular-eslint/directive-selector": [
+          "error",
+          {
+            "type": "attribute",
+            "prefix": "admin",
+            "style": "camelCase"
+          }
+        ],
+        "@angular-eslint/component-selector": [
+          "error",
+          {
+            "type": "element",
+            "prefix": "admin",
+            "style": "kebab-case"
+          }
+        ]
+      }
+    },
+    {
+      "files": ["*.html"],
+      "extends": ["plugin:@nx/angular-template"],
+      "rules": {}
+    }
+  ]
+}
diff --git a/alfa-client/libs/admin/organisations-einheit/README.md b/alfa-client/libs/admin/organisations-einheit/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..b9448bd56f8ab68884bf1b91f12b11efbc3125b0
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit/README.md
@@ -0,0 +1,7 @@
+# organisations-einheit
+
+This library was generated with [Nx](https://nx.dev).
+
+## Running unit tests
+
+Run `nx test organisations-einheit` to execute the unit tests.
diff --git a/alfa-client/libs/admin/organisations-einheit/jest.config.ts b/alfa-client/libs/admin/organisations-einheit/jest.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c01b9ea15a0bf53b365f4b52ed6c61fab54ee67a
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit/jest.config.ts
@@ -0,0 +1,21 @@
+export default {
+  displayName: 'admin-organisations-einheit',
+  preset: '../../../jest.preset.js',
+  setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
+  coverageDirectory: '../../../coverage/libs/admin/organisations-einheit',
+  transform: {
+    '^.+\\.(ts|mjs|js|html)$': [
+      'jest-preset-angular',
+      {
+        tsconfig: '<rootDir>/tsconfig.spec.json',
+        stringifyContentPathRegex: '\\.(html|svg)$',
+      },
+    ],
+  },
+  transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'],
+  snapshotSerializers: [
+    'jest-preset-angular/build/serializers/no-ng-attributes',
+    'jest-preset-angular/build/serializers/ng-snapshot',
+    'jest-preset-angular/build/serializers/html-comment',
+  ],
+};
diff --git a/alfa-client/libs/admin/organisations-einheit/project.json b/alfa-client/libs/admin/organisations-einheit/project.json
new file mode 100644
index 0000000000000000000000000000000000000000..4e241535f764181483725e8eff197d5334606ff7
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit/project.json
@@ -0,0 +1,22 @@
+{
+  "name": "admin-organisations-einheit",
+  "$schema": "../../../node_modules/nx/schemas/project-schema.json",
+  "sourceRoot": "libs/admin/organisations-einheit/src",
+  "prefix": "admin",
+  "projectType": "library",
+  "tags": [],
+  "targets": {
+    "test": {
+      "executor": "@nx/jest:jest",
+      "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
+      "options": {
+        "jestConfig": "libs/admin/organisations-einheit/jest.config.ts",
+        "tsConfig": "libs/admin/organisations-einheit/tsconfig.spec.json"
+      }
+    },
+    "lint": {
+      "executor": "@nx/eslint:lint",
+      "outputs": ["{options.outputFile}"]
+    }
+  }
+}
diff --git a/alfa-client/libs/admin/organisations-einheit/src/index.ts b/alfa-client/libs/admin/organisations-einheit/src/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1260cc47d77fd460b92c9cf9043996f3101bc969
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit/src/index.ts
@@ -0,0 +1,2 @@
+export * from './lib/organisations-einheit-container/organisations-einheit-container.component';
+export * from './lib/organisations-einheit-form-container/organisations-einheit-form-container.component';
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.html b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.html
similarity index 97%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.html
rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.html
index b23de32eb9a525804abae87d7001d38200b46cae..c642a727050172686a8d4f719f2bd5b7963f4aed 100644
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.html
+++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.html
@@ -27,7 +27,7 @@
 
 <ng-container *ngIf="organisationsEinheitListStateResource$ | async as organisationsEinheitListStateResource">
   <ozgcloud-spinner [stateResource]="organisationsEinheitListStateResource">
-    <admin-organisationseinheit-list
+    <admin-organisations-einheit-list
       [organisationsEinheitResources]="organisationsEinheitListStateResource.resource | toEmbeddedResources: OrganisationsEinheitListLinkRel.LIST"
       data-test-id="organisations-einheit-list"
     />
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.spec.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.spec.ts
similarity index 81%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.spec.ts
rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.spec.ts
index e7075fab81ab218a45c879e0e3b6430d21e2471c..2760d6e214e65704bf2b8e0ae833cf46e79f8cdc 100644
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.spec.ts
+++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.spec.ts
@@ -21,19 +21,20 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { AdminOrganisationsEinheitListResource, OrganisationsEinheitContainerComponent } from '@admin-client/admin-settings';
+import { OrganisationsEinheitService } from '@admin-client/organisations-einheit-shared';
 import { StateResource, ToEmbeddedResourcesPipe, createStateResource } from '@alfa-client/tech-shared';
 import { Mock, existsAsHtmlElement, getMockComponent, mock } from '@alfa-client/test-utils';
-import { SpinnerComponent } from '@alfa-client/ui';
+import { UiModule } from '@alfa-client/ui';
 import { OrganisationsEinheitListResource } from '@alfa-client/zustaendige-stelle-shared';
+import { CommonModule } from '@angular/common';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { ButtonWithSpinnerComponent } from '@ods/component';
+import { AdminOrganisationsEinheitListResource } from 'libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.model';
+import { createAdminOrganisationsEinheitListResource } from 'libs/admin/organisations-einheit-shared/src/test/organisations-einheit';
+import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
 import { MockComponent } from 'ng-mocks';
 import { of } from 'rxjs';
-import { getDataTestIdOf } from '../../../../../../tech-shared/test/data-test';
-import { createAdminOrganisationsEinheitListResource } from '../../../../test/organisations-einheit/organisations-einheit';
-import { OrganisationsEinheitService } from '../organisationseinheit.service';
-import { OrganisationsEinheitListComponent } from './organisationseinheit-list/organisationseinheit-list.component';
+import { OrganisationsEinheitContainerComponent } from './organisations-einheit-container.component';
+import { OrganisationsEinheitListComponent } from './organisations-einheit-list/organisations-einheit-list.component';
 
 describe('OrganisationsEinheitContainerComponent', () => {
   let component: OrganisationsEinheitContainerComponent;
@@ -53,13 +54,8 @@ describe('OrganisationsEinheitContainerComponent', () => {
     };
 
     await TestBed.configureTestingModule({
-      declarations: [
-        OrganisationsEinheitContainerComponent,
-        MockComponent(OrganisationsEinheitListComponent),
-        MockComponent(SpinnerComponent),
-        ToEmbeddedResourcesPipe,
-      ],
-      imports: [ButtonWithSpinnerComponent],
+      declarations: [ToEmbeddedResourcesPipe],
+      imports: [CommonModule, UiModule, OrganisationsEinheitContainerComponent, MockComponent(OrganisationsEinheitListComponent)],
       providers: [{ provide: OrganisationsEinheitService, useValue: organisationsEinheitService }],
     }).compileComponents();
 
diff --git a/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..00c5715c6751932a76c8cdd4ed26824edb2c4fe5
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.ts
@@ -0,0 +1,29 @@
+import {
+  AdminOrganisationsEinheitListResource,
+  OrganisationsEinheitListLinkRel,
+  OrganisationsEinheitService,
+} from '@admin-client/organisations-einheit-shared';
+import { StateResource, TechSharedModule } from '@alfa-client/tech-shared';
+import { UiModule } from '@alfa-client/ui';
+import { CommonModule } from '@angular/common';
+import { Component, inject, OnInit } from '@angular/core';
+import { Observable } from 'rxjs';
+import { OrganisationsEinheitListComponent } from './organisations-einheit-list/organisations-einheit-list.component';
+
+@Component({
+  selector: 'admin-organisations-einheit-container',
+  templateUrl: './organisations-einheit-container.component.html',
+  standalone: true,
+  imports: [CommonModule, UiModule, OrganisationsEinheitListComponent, TechSharedModule],
+})
+export class OrganisationsEinheitContainerComponent implements OnInit {
+  private organisationsEinheitService = inject(OrganisationsEinheitService);
+
+  organisationsEinheitListStateResource$: Observable<StateResource<AdminOrganisationsEinheitListResource>>;
+
+  public readonly OrganisationsEinheitListLinkRel = OrganisationsEinheitListLinkRel;
+
+  ngOnInit(): void {
+    this.organisationsEinheitListStateResource$ = this.organisationsEinheitService.getList();
+  }
+}
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.html b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.html
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.html
rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.html
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.spec.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.spec.ts
similarity index 89%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.spec.ts
rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.spec.ts
index e27a57ffe45f2d297534e7fa975ac299d8d6df9f..f7ce733a741f7c9c8a2162bca39ece86ad04b76f 100644
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.spec.ts
+++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.spec.ts
@@ -21,8 +21,6 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { AdminOrganisationsEinheitResource, AdminOrganisationsEinheitSyncResult } from '@admin-client/admin-settings';
-import { ConvertForDataTestPipe, ToResourceUriPipe } from '@alfa-client/tech-shared';
 import {
   existsAsHtmlElement,
   getElementFromFixture,
@@ -31,14 +29,19 @@ import {
   mock,
   notExistsAsHtmlElement,
 } from '@alfa-client/test-utils';
+import { CommonModule } from '@angular/common';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { MatTooltipModule } from '@angular/material/tooltip';
 import { ActivatedRoute } from '@angular/router';
 import { ExclamationIconComponent, ListComponent, ListItemComponent } from '@ods/system';
+import {
+  AdminOrganisationsEinheitResource,
+  AdminOrganisationsEinheitSyncResult,
+} from 'libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.model';
+import { createAdminOrganisationsEinheitResource } from 'libs/admin/organisations-einheit-shared/src/test/organisations-einheit';
 import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
-import { MockModule } from 'ng-mocks';
-import { createAdminOrganisationsEinheitResource } from '../../../../../test/organisations-einheit/organisations-einheit';
-import { OrganisationsEinheitListComponent } from './organisationseinheit-list.component';
+import { MockComponent, MockModule } from 'ng-mocks';
+import { OrganisationsEinheitListComponent } from './organisations-einheit-list.component';
 
 describe('OrganisationsEinheitListComponent', () => {
   let component: OrganisationsEinheitListComponent;
@@ -62,8 +65,14 @@ describe('OrganisationsEinheitListComponent', () => {
           useValue: mock(ActivatedRoute),
         },
       ],
-      declarations: [OrganisationsEinheitListComponent, ConvertForDataTestPipe, ToResourceUriPipe, MockModule(MatTooltipModule)],
-      imports: [ListComponent, ListItemComponent, ExclamationIconComponent],
+      imports: [
+        CommonModule,
+        OrganisationsEinheitListComponent,
+        MockComponent(ListComponent),
+        MockComponent(ListItemComponent),
+        MockComponent(ExclamationIconComponent),
+        MockModule(MatTooltipModule),
+      ],
     }).compileComponents();
 
     fixture = TestBed.createComponent(OrganisationsEinheitListComponent);
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.ts
similarity index 76%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.ts
rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.ts
index da534519248b8216700a3a68300a8b79cb931afa..826556819ed09bee47196d4f0667a466d18fd3c0 100644
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.ts
+++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.ts
@@ -21,12 +21,21 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { AdminOrganisationsEinheitResource, AdminOrganisationsEinheitSyncResult } from '@admin-client/admin-settings';
+import {
+  AdminOrganisationsEinheitResource,
+  AdminOrganisationsEinheitSyncResult,
+} from '@admin-client/organisations-einheit-shared';
+import { TechSharedModule } from '@alfa-client/tech-shared';
+import { CommonModule } from '@angular/common';
 import { Component, Input } from '@angular/core';
+import { MatTooltip } from '@angular/material/tooltip';
+import { ExclamationIconComponent, ListComponent, ListItemComponent } from '@ods/system';
 
 @Component({
-  selector: 'admin-organisationseinheit-list',
-  templateUrl: './organisationseinheit-list.component.html',
+  selector: 'admin-organisations-einheit-list',
+  templateUrl: './organisations-einheit-list.component.html',
+  standalone: true,
+  imports: [CommonModule, ListComponent, ListItemComponent, ExclamationIconComponent, MatTooltip, TechSharedModule],
 })
 export class OrganisationsEinheitListComponent {
   private _organisationsEinheitResources: AdminOrganisationsEinheitResource[] = [];
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.html b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.html
similarity index 97%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.html
rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.html
index 896c27dc435d0c849209a39c5ee258ced3e5f52d..b7d7fddcc36559340f1389ae3a7cd8f3510860a9 100644
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.html
+++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.html
@@ -27,7 +27,7 @@
     <ozgcloud-spinner [stateResource]="organisationsEinheitStateResource">
         <h1 class="heading-1" data-test-id="organisations-form-container-headline">{{ organisationsEinheitStateResource.resource?.name }}</h1>
 
-        <admin-organisationseinheit-form
+        <admin-organisations-einheit-form
           [organisationsEinheitStateResource]="organisationsEinheitStateResource"
           data-test-id="organisations-form"
         />
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.spec.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.spec.ts
similarity index 85%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.spec.ts
rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.spec.ts
index 37250ba2bee5dd2be06a30dfae00795ead98f5a9..52ff5b34755d15192ffef6d9f8cf668706eea6e3 100644
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.spec.ts
+++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.spec.ts
@@ -21,17 +21,18 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { AdminOrganisationsEinheitResource, OrganisationsEinheitFormContainerComponent } from '@admin-client/admin-settings';
+import { OrganisationsEinheitFormContainerComponent } from '@admin-client/organisations-einheit';
+import { OrganisationsEinheitService } from '@admin-client/organisations-einheit-shared';
 import { StateResource, createStateResource } from '@alfa-client/tech-shared';
 import { Mock, existsAsHtmlElement, getElementFromFixture, getMockComponent, mock } from '@alfa-client/test-utils';
-import { SpinnerComponent } from '@alfa-client/ui';
+import { UiModule } from '@alfa-client/ui';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { AdminOrganisationsEinheitResource } from 'libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.model';
+import { createAdminOrganisationsEinheitResource } from 'libs/admin/organisations-einheit-shared/src/test/organisations-einheit';
+import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
 import { MockComponent } from 'ng-mocks';
 import { of } from 'rxjs';
-import { getDataTestIdOf } from '../../../../../../tech-shared/test/data-test';
-import { createAdminOrganisationsEinheitResource } from '../../../../test/organisations-einheit/organisations-einheit';
-import { OrganisationsEinheitService } from '../organisationseinheit.service';
-import { OrganisationsEinheitFormComponent } from './organisationseinheit-form/organisationseinheit-form.component';
+import { OrganisationsEinheitFormComponent } from './organisations-einheit-form/organisations-einheit-form.component';
 
 describe('OrganisationsEinheitFormContainerComponent', () => {
   let component: OrganisationsEinheitFormContainerComponent;
@@ -52,11 +53,7 @@ describe('OrganisationsEinheitFormContainerComponent', () => {
     };
 
     await TestBed.configureTestingModule({
-      declarations: [
-        OrganisationsEinheitFormContainerComponent,
-        MockComponent(OrganisationsEinheitFormComponent),
-        MockComponent(SpinnerComponent),
-      ],
+      imports: [UiModule, OrganisationsEinheitFormContainerComponent, MockComponent(OrganisationsEinheitFormComponent)],
       providers: [{ provide: OrganisationsEinheitService, useValue: organisationsEinheitService }],
     }).compileComponents();
 
diff --git a/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..348732f0834eef53cabecd03ff254b5e0a78b0a1
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.ts
@@ -0,0 +1,29 @@
+import {
+  AdminOrganisationsEinheitResource,
+  OrganisationsEinheitListLinkRel,
+  OrganisationsEinheitService,
+} from '@admin-client/organisations-einheit-shared';
+import { StateResource } from '@alfa-client/tech-shared';
+import { UiModule } from '@alfa-client/ui';
+import { CommonModule } from '@angular/common';
+import { Component, inject, OnInit } from '@angular/core';
+import { Observable } from 'rxjs';
+import { OrganisationsEinheitFormComponent } from './organisations-einheit-form/organisations-einheit-form.component';
+
+@Component({
+  selector: 'admin-organisations-einheit-form-container',
+  templateUrl: './organisations-einheit-form-container.component.html',
+  standalone: true,
+  imports: [CommonModule, UiModule, OrganisationsEinheitFormComponent],
+})
+export class OrganisationsEinheitFormContainerComponent implements OnInit {
+  private organisationsEinheitService = inject(OrganisationsEinheitService);
+
+  organisationsEinheitStateResource$: Observable<StateResource<AdminOrganisationsEinheitResource>>;
+
+  ngOnInit(): void {
+    this.organisationsEinheitStateResource$ = this.organisationsEinheitService.get();
+  }
+
+  protected readonly OrganisationsEinheitListLinkRel = OrganisationsEinheitListLinkRel;
+}
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.html b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.html
similarity index 92%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.html
rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.html
index 5c572e8047dc0c1a01751a4443bc981f39e35da4..caf5dc45970a1fa4ac2309d5b332d5b1412668e9 100644
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.html
+++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.html
@@ -24,7 +24,7 @@
 
 -->
 <form class="form flex-col" [formGroup]="formService.form">
-    <admin-organisationseinheit-signatur class="mb-6 block" data-test-id="organisations-einheit-signatur-component" />
+    <admin-organisations-einheit-signatur class="mb-6 block" data-test-id="organisations-einheit-signatur-component" />
 
     <ods-button-with-spinner
       data-test-id="save-button"
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.spec.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.spec.ts
similarity index 89%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.spec.ts
rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.spec.ts
index ec188efcf2a3f6cc0f6ed22deec711520f8c2218..b329e45f498f6602c7e98eabc78dbc10ef3ce18a 100644
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.spec.ts
+++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.spec.ts
@@ -21,21 +21,21 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { AdminOrganisationsEinheitResource } from '@admin-client/admin-settings';
+import { OrganisationsEinheitService } from '@admin-client/organisations-einheit-shared';
 import { createEmptyStateResource, createStateResource, ProblemDetail } from '@alfa-client/tech-shared';
 import { existsAsHtmlElement, Mock, mock, notExistsAsHtmlElement } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
 import { ButtonWithSpinnerComponent } from '@ods/component';
+import { AdminOrganisationsEinheitResource } from 'libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.model';
+import { createAdminOrganisationsEinheitResource } from 'libs/admin/organisations-einheit-shared/src/test/organisations-einheit';
 import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
+import { createInvalidParam, createProblemDetail } from 'libs/tech-shared/test/error';
 import { MockComponent } from 'ng-mocks';
 import { of } from 'rxjs';
-import { createInvalidParam, createProblemDetail } from '../../../../../../../tech-shared/test/error';
-import { createAdminOrganisationsEinheitResource } from '../../../../../test/organisations-einheit/organisations-einheit';
-import { OrganisationsEinheitService } from '../../organisationseinheit.service';
-import { OrganisationsEinheitFormComponent } from './organisationseinheit-form.component';
-import { OrganisationsEinheitSignaturComponent } from './organisationseinheit-signatur/organisationseinheit-signatur.component';
-import { OrganisationsEinheitFormService } from './organisationseinheit.formservice';
+import { OrganisationsEinheitFormComponent } from './organisations-einheit-form.component';
+import { OrganisationsEinheitSignaturComponent } from './organisations-einheit-signatur/organisations-einheit-signatur.component';
+import { OrganisationsEinheitFormService } from './organisations-einheit.formservice';
 
 describe('OrganisationsEinheitFormComponent', () => {
   let component: OrganisationsEinheitFormComponent;
@@ -51,12 +51,13 @@ describe('OrganisationsEinheitFormComponent', () => {
     organisationsEinheitService = mock(OrganisationsEinheitService);
 
     await TestBed.configureTestingModule({
-      declarations: [
+      imports: [
+        ReactiveFormsModule,
+        FormsModule,
         OrganisationsEinheitFormComponent,
         MockComponent(OrganisationsEinheitSignaturComponent),
         MockComponent(ButtonWithSpinnerComponent),
       ],
-      imports: [ReactiveFormsModule, FormsModule],
       providers: [{ provide: OrganisationsEinheitService, useValue: organisationsEinheitService }],
     }).compileComponents();
 
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.ts
similarity index 77%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.ts
rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.ts
index 257aca3ebd2ba3c9d2d1059e33288cfd5d8258a3..ac251ee802e66d5cb0894a34fd272129cc2ef66d 100644
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.ts
+++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.ts
@@ -21,17 +21,23 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { AdminOrganisationsEinheitResource } from '@admin-client/admin-settings';
+import { AdminOrganisationsEinheitResource } from '@admin-client/organisations-einheit-shared';
 import { StateResource, createEmptyStateResource, isNotNil } from '@alfa-client/tech-shared';
+import { CommonModule } from '@angular/common';
 import { Component, Input } from '@angular/core';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
 import { Resource } from '@ngxp/rest';
+import { ButtonWithSpinnerComponent } from '@ods/component';
 import { Observable, of } from 'rxjs';
-import { OrganisationsEinheitFormService } from './organisationseinheit.formservice';
+import { OrganisationsEinheitSignaturComponent } from './organisations-einheit-signatur/organisations-einheit-signatur.component';
+import { OrganisationsEinheitFormService } from './organisations-einheit.formservice';
 
 @Component({
-  selector: 'admin-organisationseinheit-form',
-  templateUrl: './organisationseinheit-form.component.html',
+  selector: 'admin-organisations-einheit-form',
+  templateUrl: './organisations-einheit-form.component.html',
   providers: [OrganisationsEinheitFormService],
+  standalone: true,
+  imports: [CommonModule, FormsModule, ReactiveFormsModule, OrganisationsEinheitSignaturComponent, ButtonWithSpinnerComponent],
 })
 export class OrganisationsEinheitFormComponent {
   submitInProgress$: Observable<StateResource<Resource>> = of(createEmptyStateResource<Resource>());
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.html b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-signatur/organisations-einheit-signatur.component.html
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.html
rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-signatur/organisations-einheit-signatur.component.html
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.spec.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-signatur/organisations-einheit-signatur.component.spec.ts
similarity index 83%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.spec.ts
rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-signatur/organisations-einheit-signatur.component.spec.ts
index 28c62098f15f5f1c45772914f67a605abc83724b..1c84dc8f28b65640d83b7e69082a91809a1af5c9 100644
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.spec.ts
+++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-signatur/organisations-einheit-signatur.component.spec.ts
@@ -28,11 +28,11 @@ import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
 import { EffectsModule } from '@ngrx/effects';
 import { StoreModule } from '@ngrx/store';
 import { TextareaEditorComponent } from '@ods/component';
-import { MockComponent } from 'ng-mocks';
-import { getDataTestIdOf } from '../../../../../../../../tech-shared/test/data-test';
-import { OrganisationsEinheitService } from '../../../organisationseinheit.service';
-import { OrganisationsEinheitFormService } from '../organisationseinheit.formservice';
-import { OrganisationsEinheitSignaturComponent } from './organisationseinheit-signatur.component';
+import { OrganisationsEinheitService } from 'libs/admin/organisations-einheit-shared/src';
+import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
+import { MockComponent, MockModule } from 'ng-mocks';
+import { OrganisationsEinheitFormService } from '../organisations-einheit.formservice';
+import { OrganisationsEinheitSignaturComponent } from './organisations-einheit-signatur.component';
 
 describe('OrganisationsEinheitSignaturComponent', () => {
   let component: OrganisationsEinheitSignaturComponent;
@@ -45,8 +45,14 @@ describe('OrganisationsEinheitSignaturComponent', () => {
     formService = new OrganisationsEinheitFormService(new FormBuilder(), useFromMock(mock(OrganisationsEinheitService)));
 
     await TestBed.configureTestingModule({
-      imports: [ReactiveFormsModule, NavigationSharedModule, StoreModule.forRoot({}), EffectsModule.forRoot([])],
-      declarations: [OrganisationsEinheitSignaturComponent, MockComponent(TextareaEditorComponent)],
+      imports: [
+        OrganisationsEinheitSignaturComponent,
+        StoreModule.forRoot({}),
+        EffectsModule.forRoot([]),
+        MockModule(ReactiveFormsModule),
+        MockModule(NavigationSharedModule),
+        MockComponent(TextareaEditorComponent),
+      ],
       providers: [
         {
           provide: OrganisationsEinheitFormService,
diff --git a/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-signatur/organisations-einheit-signatur.component.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-signatur/organisations-einheit-signatur.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9ce5eb1142b1291e6115e557610a206968c62894
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-signatur/organisations-einheit-signatur.component.ts
@@ -0,0 +1,16 @@
+import { Component } from '@angular/core';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { TextareaEditorComponent } from '@ods/component';
+import { OrganisationsEinheitFormService } from '../organisations-einheit.formservice';
+
+@Component({
+  selector: 'admin-organisations-einheit-signatur',
+  templateUrl: './organisations-einheit-signatur.component.html',
+  standalone: true,
+  imports: [FormsModule, ReactiveFormsModule, TextareaEditorComponent],
+})
+export class OrganisationsEinheitSignaturComponent {
+  public readonly formServiceClass = OrganisationsEinheitFormService;
+
+  constructor(public formService: OrganisationsEinheitFormService) {}
+}
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.spec.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit.formservice.spec.ts
similarity index 87%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.spec.ts
rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit.formservice.spec.ts
index 24e04b29960effb42997681578123bda5d10dcd3..d44e2084f08bb09746597c0630a1467eabf207e8 100644
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.spec.ts
+++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit.formservice.spec.ts
@@ -21,14 +21,14 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { AdminOrganisationsEinheitResource } from '@admin-client/admin-settings';
 import { StateResource, createStateResource } from '@alfa-client/tech-shared';
 import { Mock, mock, useFromMock } from '@alfa-client/test-utils';
 import { FormBuilder } from '@angular/forms';
+import { OrganisationsEinheitService } from 'libs/admin/organisations-einheit-shared/src';
+import { AdminOrganisationsEinheitResource } from 'libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.model';
+import { createAdminOrganisationsEinheitResource } from 'libs/admin/organisations-einheit-shared/src/test/organisations-einheit';
 import { of } from 'rxjs';
-import { createAdminOrganisationsEinheitResource } from '../../../../../test/organisations-einheit/organisations-einheit';
-import { OrganisationsEinheitService } from '../../organisationseinheit.service';
-import { OrganisationsEinheitFormService } from './organisationseinheit.formservice';
+import { OrganisationsEinheitFormService } from './organisations-einheit.formservice';
 
 describe('OrganisationsEinheitFormService', () => {
   let service: OrganisationsEinheitFormService;
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit.formservice.ts
similarity index 92%
rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.ts
rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit.formservice.ts
index 6e7650634e7a1ebdedf02c1681a85d971a10e156..0654a19ed8c4508e9dfaa74c6f28a02dfd10e1df 100644
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.ts
+++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit.formservice.ts
@@ -21,12 +21,11 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { AdminOrganisationsEinheitResource } from '@admin-client/admin-settings';
+import { AdminOrganisationsEinheitResource, OrganisationsEinheitService } from '@admin-client/organisations-einheit-shared';
 import { AbstractFormService, EMPTY_STRING, StateResource } from '@alfa-client/tech-shared';
 import { Injectable } from '@angular/core';
 import { FormControl, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
 import { Observable } from 'rxjs';
-import { OrganisationsEinheitService } from '../../organisationseinheit.service';
 
 @Injectable()
 export class OrganisationsEinheitFormService extends AbstractFormService {
diff --git a/alfa-client/libs/admin/organisations-einheit/src/test-setup.ts b/alfa-client/libs/admin/organisations-einheit/src/test-setup.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c408668266d2fec3a9803c0ec044bc163fb987fe
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit/src/test-setup.ts
@@ -0,0 +1,12 @@
+import '@testing-library/jest-dom';
+import 'jest-preset-angular/setup-jest';
+
+import { getTestBed } from '@angular/core/testing';
+import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
+
+getTestBed().resetTestEnvironment();
+getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), {
+  teardown: { destroyAfterEach: false },
+  errorOnUnknownProperties: true,
+  errorOnUnknownElements: true,
+});
diff --git a/alfa-client/libs/admin/organisations-einheit/tsconfig.json b/alfa-client/libs/admin/organisations-einheit/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..8ca9ad312c2bd4dc364383853ddd91a2ed8f86fd
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit/tsconfig.json
@@ -0,0 +1,16 @@
+{
+  "extends": "../../../tsconfig.base.json",
+  "files": [],
+  "include": [],
+  "references": [
+    {
+      "path": "./tsconfig.lib.json"
+    },
+    {
+      "path": "./tsconfig.spec.json"
+    }
+  ],
+  "compilerOptions": {
+    "target": "es2022"
+  }
+}
diff --git a/alfa-client/libs/admin/organisations-einheit/tsconfig.lib.json b/alfa-client/libs/admin/organisations-einheit/tsconfig.lib.json
new file mode 100644
index 0000000000000000000000000000000000000000..8441346f6e5858b2ef4235cb3c3160eda256f94a
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit/tsconfig.lib.json
@@ -0,0 +1,12 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../../dist/out-tsc",
+    "declaration": true,
+    "declarationMap": true,
+    "inlineSources": true,
+    "types": []
+  },
+  "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"],
+  "include": ["src/**/*.ts"]
+}
diff --git a/alfa-client/libs/admin/organisations-einheit/tsconfig.spec.json b/alfa-client/libs/admin/organisations-einheit/tsconfig.spec.json
new file mode 100644
index 0000000000000000000000000000000000000000..723782fbd367969806c5992aea882773ab65af8b
--- /dev/null
+++ b/alfa-client/libs/admin/organisations-einheit/tsconfig.spec.json
@@ -0,0 +1,12 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../../dist/out-tsc",
+    "module": "commonjs",
+    "types": ["jest", "node"],
+    "target": "ES2022",
+    "useDefineForClassFields": false
+  },
+  "files": ["src/test-setup.ts"],
+  "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "jest.config.ts"]
+}
diff --git a/alfa-client/libs/admin/postfach-shared/.eslintrc.json b/alfa-client/libs/admin/postfach-shared/.eslintrc.json
new file mode 100644
index 0000000000000000000000000000000000000000..7474579d583c598ae092a906b3e6cf1ad3c08a50
--- /dev/null
+++ b/alfa-client/libs/admin/postfach-shared/.eslintrc.json
@@ -0,0 +1,33 @@
+{
+  "extends": ["../../../.eslintrc.json"],
+  "ignorePatterns": ["!**/*"],
+  "overrides": [
+    {
+      "files": ["*.ts"],
+      "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"],
+      "rules": {
+        "@angular-eslint/directive-selector": [
+          "error",
+          {
+            "type": "attribute",
+            "prefix": "admin",
+            "style": "camelCase"
+          }
+        ],
+        "@angular-eslint/component-selector": [
+          "error",
+          {
+            "type": "element",
+            "prefix": "admin",
+            "style": "kebab-case"
+          }
+        ]
+      }
+    },
+    {
+      "files": ["*.html"],
+      "extends": ["plugin:@nx/angular-template"],
+      "rules": {}
+    }
+  ]
+}
diff --git a/alfa-client/libs/admin/postfach-shared/README.md b/alfa-client/libs/admin/postfach-shared/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..874583d490267251cb09a68b844e47c70fe9dd8f
--- /dev/null
+++ b/alfa-client/libs/admin/postfach-shared/README.md
@@ -0,0 +1,7 @@
+# admin-postfach-shared
+
+This library was generated with [Nx](https://nx.dev).
+
+## Running unit tests
+
+Run `nx test admin-postfach-shared` to execute the unit tests.
diff --git a/alfa-client/libs/admin/postfach-shared/jest.config.ts b/alfa-client/libs/admin/postfach-shared/jest.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b2e076949998d472951970fe19ca5c4fcca17f70
--- /dev/null
+++ b/alfa-client/libs/admin/postfach-shared/jest.config.ts
@@ -0,0 +1,21 @@
+export default {
+  displayName: 'admin-postfach-shared',
+  preset: '../../../jest.preset.js',
+  setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
+  coverageDirectory: '../../../coverage/libs/admin/postfach-shared',
+  transform: {
+    '^.+\\.(ts|mjs|js|html)$': [
+      'jest-preset-angular',
+      {
+        tsconfig: '<rootDir>/tsconfig.spec.json',
+        stringifyContentPathRegex: '\\.(html|svg)$',
+      },
+    ],
+  },
+  transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'],
+  snapshotSerializers: [
+    'jest-preset-angular/build/serializers/no-ng-attributes',
+    'jest-preset-angular/build/serializers/ng-snapshot',
+    'jest-preset-angular/build/serializers/html-comment',
+  ],
+};
diff --git a/alfa-client/libs/admin/postfach-shared/project.json b/alfa-client/libs/admin/postfach-shared/project.json
new file mode 100644
index 0000000000000000000000000000000000000000..6489dc23d02f10a0660d03ccd39ccebae8dadc5d
--- /dev/null
+++ b/alfa-client/libs/admin/postfach-shared/project.json
@@ -0,0 +1,22 @@
+{
+  "name": "admin-postfach-shared",
+  "$schema": "../../../node_modules/nx/schemas/project-schema.json",
+  "sourceRoot": "libs/admin/postfach-shared/src",
+  "prefix": "admin",
+  "projectType": "library",
+  "tags": [],
+  "targets": {
+    "test": {
+      "executor": "@nx/jest:jest",
+      "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
+      "options": {
+        "tsConfig": "libs/admin//postfach-shared/tsconfig.spec.json",
+        "jestConfig": "libs/admin/postfach-shared/jest.config.ts"
+      }
+    },
+    "lint": {
+      "executor": "@nx/eslint:lint",
+      "outputs": ["{options.outputFile}"]
+    }
+  }
+}
diff --git a/alfa-client/libs/admin/postfach-shared/src/index.ts b/alfa-client/libs/admin/postfach-shared/src/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d17f2cb9fe436032109d7c36c889cdb7f91652ae
--- /dev/null
+++ b/alfa-client/libs/admin/postfach-shared/src/index.ts
@@ -0,0 +1,2 @@
+export * from './lib/postfach.model';
+export * from './lib/postfach.service';
diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-resource.service.ts b/alfa-client/libs/admin/postfach-shared/src/lib/postfach-resource.service.ts
similarity index 81%
rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-resource.service.ts
rename to alfa-client/libs/admin/postfach-shared/src/lib/postfach-resource.service.ts
index e9e650383f1736a2813254a0c692a9c95acebf8f..48043163dea114eba85fa881d9047ec90f8ef24a 100644
--- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-resource.service.ts
+++ b/alfa-client/libs/admin/postfach-shared/src/lib/postfach-resource.service.ts
@@ -21,24 +21,14 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import {
-  ApiResourceService,
-  ResourceRepository,
-  ResourceServiceConfig,
-} from '@alfa-client/tech-shared';
-import { SettingsService } from '../admin-settings.service';
+import { SettingsService } from '@admin-client/settings-shared';
+import { ApiResourceService, ResourceRepository, ResourceServiceConfig } from '@alfa-client/tech-shared';
 import { PostfachLinkRel } from './postfach.linkrel';
 import { PostfachResource } from './postfach.model';
 
-export class PostfachResourceService extends ApiResourceService<
-  PostfachResource,
-  PostfachResource
-> {}
+export class PostfachResourceService extends ApiResourceService<PostfachResource, PostfachResource> {}
 
-export function createPostfachResourceService(
-  repository: ResourceRepository,
-  settingService: SettingsService,
-) {
+export function createPostfachResourceService(repository: ResourceRepository, settingService: SettingsService) {
   return new ApiResourceService(buildConfig(settingService), repository);
 }
 
diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach.linkrel.ts b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.linkrel.ts
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach.linkrel.ts
rename to alfa-client/libs/admin/postfach-shared/src/lib/postfach.linkrel.ts
diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach.model.ts b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.model.ts
similarity index 94%
rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach.model.ts
rename to alfa-client/libs/admin/postfach-shared/src/lib/postfach.model.ts
index 043e56c7addc20df940c6c799b8a92f67f1618d0..c592dec3e6621543ca69e9ee23abdeea1ec6f4ec 100644
--- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach.model.ts
+++ b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.model.ts
@@ -22,7 +22,7 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { Resource } from '@ngxp/rest';
-import { SettingName } from '../admin-settings.model';
+import { SettingName } from 'libs/admin/settings-shared/src/lib/settings.model';
 
 export interface Absender {
   name: string;
diff --git a/alfa-client/libs/admin/postfach-shared/src/lib/postfach.providers.ts b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.providers.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b998c7807b7a53ee04ac775eba70fff4c63b2003
--- /dev/null
+++ b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.providers.ts
@@ -0,0 +1,12 @@
+import { SettingsService } from '@admin-client/settings-shared';
+import { ResourceRepository } from '@alfa-client/tech-shared';
+import { createPostfachResourceService, PostfachResourceService } from './postfach-resource.service';
+
+export const PostfachProviders = [
+  SettingsService,
+  {
+    provide: PostfachResourceService,
+    useFactory: createPostfachResourceService,
+    deps: [ResourceRepository, SettingsService],
+  },
+];
diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach.service.spec.ts b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.service.spec.ts
similarity index 80%
rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach.service.spec.ts
rename to alfa-client/libs/admin/postfach-shared/src/lib/postfach.service.spec.ts
index 96381994e61c05c95474c5871ea0a132794f1937..d779cb50dc2173e7dee4dc929a7e11f5d259724d 100644
--- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach.service.spec.ts
+++ b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.service.spec.ts
@@ -21,19 +21,15 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import {
-  StateResource,
-  createEmptyStateResource,
-  createStateResource,
-} from '@alfa-client/tech-shared';
-import { Mock, mock, useFromMock } from '@alfa-client/test-utils';
+import { createEmptyStateResource, createStateResource, StateResource } from '@alfa-client/tech-shared';
+import { Mock, mock } from '@alfa-client/test-utils';
 import { SnackBarService } from '@alfa-client/ui';
 import { Type } from '@angular/core';
-import { fakeAsync, tick } from '@angular/core/testing';
+import { fakeAsync, TestBed, tick } from '@angular/core/testing';
 import { cold } from 'jest-marbles';
 import { singleCold, singleHot } from 'libs/tech-shared/test/marbles';
 import { Observable, of } from 'rxjs';
-import { createPostfachResource, createPostfachSettingItem } from '../../../test/postfach/postfach';
+import { createPostfachResource, createPostfachSettingItem } from '../test/postfach';
 import { PostfachResourceService } from './postfach-resource.service';
 import { PostfachResource, PostfachSettingsItem } from './postfach.model';
 import { PostfachService } from './postfach.service';
@@ -41,12 +37,21 @@ import { PostfachService } from './postfach.service';
 describe('PostfachService', () => {
   let service: PostfachService;
   let resourceService: Mock<PostfachResourceService>;
-  const snackbarService: Mock<SnackBarService> = mock(SnackBarService);
+  let snackbarService: Mock<SnackBarService>;
 
   beforeEach(() => {
     resourceService = mockResourceService(PostfachResourceService);
+    snackbarService = mock(SnackBarService);
+
+    TestBed.configureTestingModule({
+      providers: [
+        PostfachService,
+        { provide: PostfachResourceService, useValue: resourceService },
+        { provide: SnackBarService, useValue: snackbarService },
+      ],
+    });
 
-    service = new PostfachService(useFromMock(resourceService), useFromMock(snackbarService));
+    service = TestBed.inject(PostfachService);
   });
 
   it('should create', () => {
@@ -55,8 +60,7 @@ describe('PostfachService', () => {
 
   describe('get', () => {
     const postfachResource: PostfachResource = createPostfachResource();
-    const postfachStateResource: StateResource<PostfachResource> =
-      createStateResource(postfachResource);
+    const postfachStateResource: StateResource<PostfachResource> = createStateResource(postfachResource);
 
     it('should call resourceservice get', () => {
       service.get();
@@ -76,8 +80,7 @@ describe('PostfachService', () => {
   describe('save', () => {
     const postfachSettingsItem: PostfachSettingsItem = createPostfachSettingItem();
     const postfachResource: PostfachResource = createPostfachResource();
-    const postfachStateResource: StateResource<PostfachResource> =
-      createStateResource(postfachResource);
+    const postfachStateResource: StateResource<PostfachResource> = createStateResource(postfachResource);
 
     beforeEach(() => {});
 
@@ -92,9 +95,7 @@ describe('PostfachService', () => {
     it('should return saved value', () => {
       resourceService.save.mockReturnValue(singleCold(postfachStateResource, '-a'));
 
-      const savedPostfach: Observable<StateResource<PostfachResource>> = service.save(
-        postfachResource.settingBody,
-      );
+      const savedPostfach: Observable<StateResource<PostfachResource>> = service.save(postfachResource.settingBody);
 
       expect(savedPostfach).toBeObservable(
         cold('ab', {
@@ -106,16 +107,12 @@ describe('PostfachService', () => {
 
     it('should show message in snackbar', fakeAsync(() => {
       resourceService.save.mockReturnValue(of(postfachStateResource));
-      const savedPostfach: Observable<StateResource<PostfachResource>> = service.save(
-        postfachResource.settingBody,
-      );
+      const savedPostfach: Observable<StateResource<PostfachResource>> = service.save(postfachResource.settingBody);
 
       savedPostfach.subscribe();
       tick();
 
-      expect(snackbarService.showInfo).toHaveBeenCalledWith(
-        'Die Signatur wurde erfolgreich gespeichert.',
-      );
+      expect(snackbarService.showInfo).toHaveBeenCalledWith('Die Signatur wurde erfolgreich gespeichert.');
     }));
   });
 });
diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach.service.ts b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.service.ts
similarity index 85%
rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach.service.ts
rename to alfa-client/libs/admin/postfach-shared/src/lib/postfach.service.ts
index 9acda48961c44213c33ca600cf2535a042a97da5..a8fb7896e27e371c4a968238d92928c70d1370dc 100644
--- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach.service.ts
+++ b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.service.ts
@@ -21,20 +21,18 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
+import { SettingName } from '@admin-client/settings-shared';
 import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared';
 import { SnackBarService } from '@alfa-client/ui';
-import { Injectable } from '@angular/core';
+import { inject, Injectable } from '@angular/core';
 import { Observable, startWith, tap } from 'rxjs';
-import { SettingName } from '../admin-settings.model';
 import { PostfachResourceService } from './postfach-resource.service';
 import { Postfach, PostfachResource, PostfachSettingsItem } from './postfach.model';
 
 @Injectable()
 export class PostfachService {
-  constructor(
-    private postfachResourceService: PostfachResourceService,
-    private snackbarService: SnackBarService,
-  ) {}
+    private postfachResourceService = inject(PostfachResourceService)
+    private snackbarService = inject(SnackBarService)
 
   public get(): Observable<StateResource<PostfachResource>> {
     return this.postfachResourceService.get();
@@ -42,9 +40,7 @@ export class PostfachService {
 
   public save(postfach: Postfach): Observable<StateResource<PostfachResource>> {
     return this.postfachResourceService.save(this.buildPostfachSettingItem(postfach)).pipe(
-      tap((stateResource: StateResource<PostfachResource>) =>
-        this.showInfoAfterSave(stateResource),
-      ),
+      tap((stateResource: StateResource<PostfachResource>) => this.showInfoAfterSave(stateResource)),
       startWith(createEmptyStateResource<PostfachResource>(true)),
     );
   }
diff --git a/alfa-client/libs/admin/postfach-shared/src/test-setup.ts b/alfa-client/libs/admin/postfach-shared/src/test-setup.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c408668266d2fec3a9803c0ec044bc163fb987fe
--- /dev/null
+++ b/alfa-client/libs/admin/postfach-shared/src/test-setup.ts
@@ -0,0 +1,12 @@
+import '@testing-library/jest-dom';
+import 'jest-preset-angular/setup-jest';
+
+import { getTestBed } from '@angular/core/testing';
+import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
+
+getTestBed().resetTestEnvironment();
+getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), {
+  teardown: { destroyAfterEach: false },
+  errorOnUnknownProperties: true,
+  errorOnUnknownElements: true,
+});
diff --git a/alfa-client/libs/admin/settings/test/postfach/postfach.ts b/alfa-client/libs/admin/postfach-shared/src/test/postfach.ts
similarity index 90%
rename from alfa-client/libs/admin/settings/test/postfach/postfach.ts
rename to alfa-client/libs/admin/postfach-shared/src/test/postfach.ts
index 503e9ec37d277911c0ae4a8c51e760abde268a8d..93d7492c32b0e0b595a447757952ee358b0e1345 100644
--- a/alfa-client/libs/admin/settings/test/postfach/postfach.ts
+++ b/alfa-client/libs/admin/postfach-shared/src/test/postfach.ts
@@ -22,13 +22,9 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { faker } from '@faker-js/faker';
+import { SettingItemResource, SettingName } from 'libs/admin/settings-shared/src/lib/settings.model';
 import { toResource } from 'libs/tech-shared/test/resource';
-import { SettingItemResource, SettingName } from '../../src/lib/admin-settings.model';
-import {
-  Postfach,
-  PostfachResource,
-  PostfachSettingsItem,
-} from '../../src/lib/postfach/postfach.model';
+import { Postfach, PostfachResource, PostfachSettingsItem } from '../lib/postfach.model';
 
 export function createPostfach(): Postfach {
   return {
diff --git a/alfa-client/libs/admin/postfach-shared/tsconfig.json b/alfa-client/libs/admin/postfach-shared/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..8ca9ad312c2bd4dc364383853ddd91a2ed8f86fd
--- /dev/null
+++ b/alfa-client/libs/admin/postfach-shared/tsconfig.json
@@ -0,0 +1,16 @@
+{
+  "extends": "../../../tsconfig.base.json",
+  "files": [],
+  "include": [],
+  "references": [
+    {
+      "path": "./tsconfig.lib.json"
+    },
+    {
+      "path": "./tsconfig.spec.json"
+    }
+  ],
+  "compilerOptions": {
+    "target": "es2022"
+  }
+}
diff --git a/alfa-client/libs/admin/postfach-shared/tsconfig.lib.json b/alfa-client/libs/admin/postfach-shared/tsconfig.lib.json
new file mode 100644
index 0000000000000000000000000000000000000000..8441346f6e5858b2ef4235cb3c3160eda256f94a
--- /dev/null
+++ b/alfa-client/libs/admin/postfach-shared/tsconfig.lib.json
@@ -0,0 +1,12 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../../dist/out-tsc",
+    "declaration": true,
+    "declarationMap": true,
+    "inlineSources": true,
+    "types": []
+  },
+  "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"],
+  "include": ["src/**/*.ts"]
+}
diff --git a/alfa-client/libs/admin/postfach-shared/tsconfig.spec.json b/alfa-client/libs/admin/postfach-shared/tsconfig.spec.json
new file mode 100644
index 0000000000000000000000000000000000000000..723782fbd367969806c5992aea882773ab65af8b
--- /dev/null
+++ b/alfa-client/libs/admin/postfach-shared/tsconfig.spec.json
@@ -0,0 +1,12 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../../dist/out-tsc",
+    "module": "commonjs",
+    "types": ["jest", "node"],
+    "target": "ES2022",
+    "useDefineForClassFields": false
+  },
+  "files": ["src/test-setup.ts"],
+  "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "jest.config.ts"]
+}
diff --git a/alfa-client/libs/admin/postfach/.eslintrc.json b/alfa-client/libs/admin/postfach/.eslintrc.json
new file mode 100644
index 0000000000000000000000000000000000000000..7474579d583c598ae092a906b3e6cf1ad3c08a50
--- /dev/null
+++ b/alfa-client/libs/admin/postfach/.eslintrc.json
@@ -0,0 +1,33 @@
+{
+  "extends": ["../../../.eslintrc.json"],
+  "ignorePatterns": ["!**/*"],
+  "overrides": [
+    {
+      "files": ["*.ts"],
+      "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"],
+      "rules": {
+        "@angular-eslint/directive-selector": [
+          "error",
+          {
+            "type": "attribute",
+            "prefix": "admin",
+            "style": "camelCase"
+          }
+        ],
+        "@angular-eslint/component-selector": [
+          "error",
+          {
+            "type": "element",
+            "prefix": "admin",
+            "style": "kebab-case"
+          }
+        ]
+      }
+    },
+    {
+      "files": ["*.html"],
+      "extends": ["plugin:@nx/angular-template"],
+      "rules": {}
+    }
+  ]
+}
diff --git a/alfa-client/libs/admin/postfach/README.md b/alfa-client/libs/admin/postfach/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..b12df49b566013390d991563573397edcab2f3df
--- /dev/null
+++ b/alfa-client/libs/admin/postfach/README.md
@@ -0,0 +1,7 @@
+# postfach
+
+This library was generated with [Nx](https://nx.dev).
+
+## Running unit tests
+
+Run `nx test postfach` to execute the unit tests.
diff --git a/alfa-client/libs/admin/postfach/jest.config.ts b/alfa-client/libs/admin/postfach/jest.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..17564088672789bf1937421fc459159f663d0aff
--- /dev/null
+++ b/alfa-client/libs/admin/postfach/jest.config.ts
@@ -0,0 +1,21 @@
+export default {
+  displayName: 'admin-postfach',
+  preset: '../../../jest.preset.js',
+  setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
+  coverageDirectory: '../../../coverage/libs/admin/postfach',
+  transform: {
+    '^.+\\.(ts|mjs|js|html)$': [
+      'jest-preset-angular',
+      {
+        tsconfig: '<rootDir>/tsconfig.spec.json',
+        stringifyContentPathRegex: '\\.(html|svg)$',
+      },
+    ],
+  },
+  transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'],
+  snapshotSerializers: [
+    'jest-preset-angular/build/serializers/no-ng-attributes',
+    'jest-preset-angular/build/serializers/ng-snapshot',
+    'jest-preset-angular/build/serializers/html-comment',
+  ],
+};
diff --git a/alfa-client/libs/admin/postfach/project.json b/alfa-client/libs/admin/postfach/project.json
new file mode 100644
index 0000000000000000000000000000000000000000..d071f490b29c4a46bbc0c07779f5680aed9f1d3b
--- /dev/null
+++ b/alfa-client/libs/admin/postfach/project.json
@@ -0,0 +1,22 @@
+{
+  "name": "admin-postfach",
+  "$schema": "../../../node_modules/nx/schemas/project-schema.json",
+  "sourceRoot": "libs/admin/postfach/src",
+  "prefix": "admin",
+  "projectType": "library",
+  "tags": [],
+  "targets": {
+    "test": {
+      "executor": "@nx/jest:jest",
+      "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
+      "options": {
+        "tsConfig": "libs/admin/postfach/tsconfig.spec.json",
+        "jestConfig": "libs/admin/postfach/jest.config.ts"
+      }
+    },
+    "lint": {
+      "executor": "@nx/eslint:lint",
+      "outputs": ["{options.outputFile}"]
+    }
+  }
+}
diff --git a/alfa-client/libs/admin/postfach/src/index.ts b/alfa-client/libs/admin/postfach/src/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..691b628e2625a1716e38bc16f0346a68e5066e6a
--- /dev/null
+++ b/alfa-client/libs/admin/postfach/src/index.ts
@@ -0,0 +1 @@
+export * from './lib/postfach-container/postfach-container.component';
diff --git a/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.html b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..3e8e4b49ae09ba083768eb4a1ffa4155ab1bb49c
--- /dev/null
+++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.html
@@ -0,0 +1,2 @@
+<h1 class="heading-1">Postfach</h1>
+<admin-postfach-form [postfachStateResource]="postfachStateResource$ | async" />
diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.spec.ts b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.spec.ts
similarity index 77%
rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.spec.ts
rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.spec.ts
index 59ddabb40acfdb61b8f1f7d105b65304d9d665e1..7cf10044a062cd29edaff204e91432f302651c2b 100644
--- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.spec.ts
+++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.spec.ts
@@ -21,15 +21,15 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { StateResource, createStateResource } from '@alfa-client/tech-shared';
+import { createStateResource, StateResource } from '@alfa-client/tech-shared';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { ReactiveFormsModule } from '@angular/forms';
+import { PostfachResource } from 'libs/admin/postfach-shared/src/lib/postfach.model';
+import { PostfachService } from 'libs/admin/postfach-shared/src/lib/postfach.service';
+import { createPostfachResource } from 'libs/admin/postfach-shared/src/test/postfach';
 import { singleCold, singleHot } from 'libs/tech-shared/test/marbles';
 import { Mock, mock } from 'libs/test-utils/src/lib/mocking';
 import { MockComponent } from 'ng-mocks';
-import { createPostfachResource } from '../../../../test/postfach/postfach';
-import { PostfachResource } from '../postfach.model';
-import { PostfachService } from '../postfach.service';
 import { PostfachContainerComponent } from './postfach-container.component';
 import { PostfachFormComponent } from './postfach-form/postfach-form.component';
 
@@ -41,15 +41,19 @@ describe('PostfachContainerComponent', () => {
 
   beforeEach(async () => {
     await TestBed.configureTestingModule({
-      declarations: [PostfachContainerComponent, MockComponent(PostfachFormComponent)],
-      imports: [ReactiveFormsModule],
-      providers: [
-        {
-          provide: PostfachService,
-          useValue: postfachService,
+      imports: [PostfachContainerComponent, ReactiveFormsModule, MockComponent(PostfachFormComponent)],
+    })
+      .overrideComponent(PostfachContainerComponent, {
+        set: {
+          providers: [
+            {
+              provide: PostfachService,
+              useValue: postfachService,
+            },
+          ],
         },
-      ],
-    }).compileComponents();
+      })
+      .compileComponents();
   });
 
   beforeEach(() => {
@@ -71,8 +75,7 @@ describe('PostfachContainerComponent', () => {
     });
 
     it('should set postfach', () => {
-      const postfachStateResource: StateResource<PostfachResource> =
-        createStateResource(createPostfachResource());
+      const postfachStateResource: StateResource<PostfachResource> = createStateResource(createPostfachResource());
       postfachService.get.mockReturnValue(singleHot(postfachStateResource));
 
       component.ngOnInit();
diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.ts b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.ts
similarity index 76%
rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.ts
rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.ts
index ef4d587709fa59c348ca44a9fa3fa5d07e68d7ef..e514cab40d7f49234f2b382cac41a2fcd89cc0f5 100644
--- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.ts
+++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.ts
@@ -21,20 +21,24 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
+import { PostfachResource, PostfachService } from '@admin-client/postfach-shared';
 import { StateResource } from '@alfa-client/tech-shared';
-import { Component, OnInit } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { Component, inject, OnInit } from '@angular/core';
 import { Observable } from 'rxjs';
-import { PostfachResource } from '../postfach.model';
-import { PostfachService } from '../postfach.service';
+import { PostfachFormComponent } from './postfach-form/postfach-form.component';
 
 @Component({
   selector: 'admin-postfach-container',
   templateUrl: './postfach-container.component.html',
+  standalone: true,
+  imports: [CommonModule, PostfachFormComponent],
+  providers: [PostfachService],
 })
 export class PostfachContainerComponent implements OnInit {
-  postfachStateResource$: Observable<StateResource<PostfachResource>>;
+  private postfachService = inject(PostfachService);
 
-  constructor(private postfachService: PostfachService) {}
+  postfachStateResource$: Observable<StateResource<PostfachResource>>;
 
   ngOnInit(): void {
     this.postfachStateResource$ = this.postfachService.get();
diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.html b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.html
similarity index 90%
rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.html
rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.html
index 7e20b812003e255ed725fa2dd420c120ae919761..a71490c537ecf7e2a65448b8e1bd2b6aecd2128e 100644
--- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.html
+++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.html
@@ -59,8 +59,8 @@
     ></text-field>
   </div>
   <div class="h-20"></div>
--->
-  <postfach-signatur class="mb-6 block" />
+  -->
+  <admin-postfach-signatur class="mb-6 block" />
 
   <ods-button-with-spinner
     data-test-id="save-button"
@@ -69,11 +69,12 @@
     (clickEmitter)="submit()"
   ></ods-button-with-spinner>
 
-  <span
-    *ngIf="formService.isInvalid()"
-    data-test-id="invalid-empty-message-span"
-    class="m-2 text-red-500"
-  >
-    *Es müssen alle Felder ausgefüllt sein.
-  </span>
+  @if (formService.isInvalid()) {
+    <span
+      data-test-id="invalid-empty-message-span"
+      class="m-2 text-red-500"
+      >
+      *Es müssen alle Felder ausgefüllt sein.
+    </span>
+  }
 </form>
diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.spec.ts b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.spec.ts
similarity index 93%
rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.spec.ts
rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.spec.ts
index 267dd312e6379f190eba3de94c3385a64cb86137..c5458b54917f7428bb5917bc8dd9b3ca468491fa 100644
--- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.spec.ts
+++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.spec.ts
@@ -26,14 +26,14 @@ import { dispatchEventFromFixture, existsAsHtmlElement, Mock, mock, notExistsAsH
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
 import { ButtonWithSpinnerComponent } from '@ods/component';
+import { PostfachResource } from 'libs/admin/postfach-shared/src/lib/postfach.model';
+import { PostfachService } from 'libs/admin/postfach-shared/src/lib/postfach.service';
+import { createPostfachResource } from 'libs/admin/postfach-shared/src/test/postfach';
 import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
 import { createInvalidParam, createProblemDetail } from 'libs/tech-shared/test/error';
 import { singleCold } from 'libs/tech-shared/test/marbles';
 import { MockComponent } from 'ng-mocks';
 import { EMPTY } from 'rxjs';
-import { createPostfachResource } from '../../../../../test/postfach/postfach';
-import { PostfachResource } from '../../postfach.model';
-import { PostfachService } from '../../postfach.service';
 import { PostfachFormComponent } from './postfach-form.component';
 import { PostfachSignaturComponent } from './postfach-signatur/postfach-signatur.component';
 import { PostfachFormService } from './postfach.formservice';
@@ -50,8 +50,13 @@ describe('PostfachFormComponent', () => {
 
   beforeEach(async () => {
     await TestBed.configureTestingModule({
-      declarations: [PostfachFormComponent, MockComponent(PostfachSignaturComponent), MockComponent(ButtonWithSpinnerComponent)],
-      imports: [ReactiveFormsModule, FormsModule],
+      imports: [
+        PostfachFormComponent,
+        ReactiveFormsModule,
+        FormsModule,
+        MockComponent(PostfachSignaturComponent),
+        MockComponent(ButtonWithSpinnerComponent),
+      ],
       providers: [
         {
           provide: PostfachService,
diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.ts b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.ts
similarity index 75%
rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.ts
rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.ts
index 065afc8820a884e0956a1976ded218896639e4c5..b7f96b97a9b3d19c7a9aeb0a7fbf796f12370be6 100644
--- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.ts
+++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.ts
@@ -21,19 +21,27 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
+import { PostfachResource } from '@admin-client/postfach-shared';
 import { createEmptyStateResource, isNotNil, StateResource } from '@alfa-client/tech-shared';
-import { Component, Input } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { Component, inject, Input } from '@angular/core';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
 import { Resource } from '@ngxp/rest';
+import { ButtonWithSpinnerComponent } from '@ods/component';
 import { Observable, of } from 'rxjs';
-import { PostfachResource } from '../../postfach.model';
+import { PostfachSignaturComponent } from './postfach-signatur/postfach-signatur.component';
 import { PostfachFormService } from './postfach.formservice';
 
 @Component({
-  selector: 'postfach-form',
+  selector: 'admin-postfach-form',
   templateUrl: './postfach-form.component.html',
   providers: [PostfachFormService],
+  standalone: true,
+  imports: [CommonModule, FormsModule, ReactiveFormsModule, PostfachSignaturComponent, ButtonWithSpinnerComponent],
 })
 export class PostfachFormComponent {
+  public formService = inject(PostfachFormService);
+
   submitInProgress$: Observable<StateResource<Resource>> = of(createEmptyStateResource<Resource>());
 
   @Input() set postfachStateResource(stateResource: StateResource<PostfachResource>) {
@@ -48,8 +56,6 @@ export class PostfachFormComponent {
 
   protected readonly PostfachFormService = PostfachFormService;
 
-  constructor(public formService: PostfachFormService) {}
-
   public submit(): void {
     this.submitInProgress$ = this.formService.submit();
   }
diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.html b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.html
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.html
rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.html
diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.spec.ts b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.spec.ts
similarity index 80%
rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.spec.ts
rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.spec.ts
index 1d532c89621ce211cd75ebfec02dc109eb7cc6b8..ae1fc334273e19f27c93b4bb8eaa2b9fa145077b 100644
--- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.spec.ts
+++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.spec.ts
@@ -23,11 +23,11 @@
  */
 import { getElementFromFixture, mock, Mock } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { ReactiveFormsModule } from '@angular/forms';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
 import { TextareaEditorComponent } from '@ods/component';
+import { PostfachService } from 'libs/admin/postfach-shared/src/lib/postfach.service';
 import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
 import { MockComponent } from 'ng-mocks';
-import { PostfachService } from '../../../postfach.service';
 import { PostfachFormComponent } from '../postfach-form.component';
 import { PostfachFormService } from '../postfach.formservice';
 import { PostfachSignaturComponent } from './postfach-signatur.component';
@@ -36,29 +36,19 @@ describe('PostfachSignaturComponent', () => {
   let component: PostfachSignaturComponent;
   let fixture: ComponentFixture<PostfachSignaturComponent>;
 
-  let formService: Mock<PostfachFormService>;
   let postfachService: Mock<PostfachService>;
+
   const signaturTextarea = getDataTestIdOf('signatur-text');
 
   beforeEach(async () => {
-    formService = mock(PostfachFormService);
     postfachService = mock(PostfachService);
+
     await TestBed.configureTestingModule({
-      imports: [ReactiveFormsModule],
-      declarations: [PostfachFormComponent, MockComponent(TextareaEditorComponent)],
-      providers: [
-        {
-          provide: PostfachFormService,
-          useValue: formService,
-        },
-        {
-          provide: PostfachService,
-          useValue: postfachService,
-        },
-      ],
+      imports: [PostfachFormComponent, FormsModule, ReactiveFormsModule, MockComponent(TextareaEditorComponent)],
+      providers: [PostfachFormService, { provide: PostfachService, useValue: postfachService }],
     }).compileComponents();
+
     fixture = TestBed.createComponent(PostfachSignaturComponent);
-    TestBed.inject(PostfachService);
     component = fixture.componentInstance;
     fixture.detectChanges();
   });
diff --git a/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.ts b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..39c306caa8dcc429502fb285eec38e09d515a499
--- /dev/null
+++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.ts
@@ -0,0 +1,15 @@
+import { Component, inject } from '@angular/core';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { TextareaEditorComponent } from '@ods/component';
+import { PostfachFormService } from '../postfach.formservice';
+
+@Component({
+  selector: 'admin-postfach-signatur',
+  templateUrl: './postfach-signatur.component.html',
+  standalone: true,
+  imports: [FormsModule, ReactiveFormsModule, TextareaEditorComponent],
+})
+export class PostfachSignaturComponent {
+  public formService: PostfachFormService = inject(PostfachFormService);
+  protected readonly formServiceClass = PostfachFormService;
+}
diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.spec.ts b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach.formservice.spec.ts
similarity index 92%
rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.spec.ts
rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach.formservice.spec.ts
index c76965d3fc2d3ba9306f4fe161620dc3843868a9..d97f656d5f057b34705e13254d5634ee7173c4ae 100644
--- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.spec.ts
+++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach.formservice.spec.ts
@@ -25,10 +25,10 @@ import { createStateResource, StateResource } from '@alfa-client/tech-shared';
 import { mock, Mock } from '@alfa-client/test-utils';
 import { TestBed } from '@angular/core/testing';
 import { UntypedFormBuilder } from '@angular/forms';
+import { Postfach, PostfachResource } from 'libs/admin/postfach-shared/src/lib/postfach.model';
+import { PostfachService } from 'libs/admin/postfach-shared/src/lib/postfach.service';
+import { createPostfach, createPostfachResource } from 'libs/admin/postfach-shared/src/test/postfach';
 import { of } from 'rxjs';
-import { createPostfach, createPostfachResource } from '../../../../../test/postfach/postfach';
-import { Postfach, PostfachResource } from '../../postfach.model';
-import { PostfachService } from '../../postfach.service';
 import { PostfachFormService } from './postfach.formservice';
 
 describe('PostfachFormService', () => {
@@ -43,7 +43,6 @@ describe('PostfachFormService', () => {
     });
 
     formService = TestBed.inject(PostfachFormService);
-    TestBed.inject(PostfachService);
   });
 
   it('should create', () => {
@@ -76,7 +75,7 @@ describe('PostfachFormService', () => {
     });
 
     describe('with empty or null absender values', () => {
-      const formValueWithAbsender = {
+      const formValueWithAbsender: { [key: string]: any } = {
         [PostfachFormService.ASBSENDER_GROUP]: {
           [PostfachFormService.NAME_FIELD]: '',
           [PostfachFormService.ANSCHRIFT_FIELD]: null,
diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach.formservice.ts
similarity index 95%
rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts
rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach.formservice.ts
index 4dcc60242eda6583638de80d1cfcf50f97c11b30..7ee0899b4a08d35c7f5099ed495fdb1d473db504 100644
--- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts
+++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach.formservice.ts
@@ -21,13 +21,12 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
+import { Postfach, PostfachResource, PostfachService } from '@admin-client/postfach-shared';
 import { AbstractFormService, EMPTY_STRING, StateResource } from '@alfa-client/tech-shared';
 import { inject, Injectable } from '@angular/core';
 import { FormControl, UntypedFormGroup } from '@angular/forms';
 import { isNil } from 'lodash-es';
 import { Observable } from 'rxjs';
-import { Postfach, PostfachResource } from '../../postfach.model';
-import { PostfachService } from '../../postfach.service';
 
 @Injectable()
 export class PostfachFormService extends AbstractFormService {
diff --git a/alfa-client/libs/admin/postfach/src/test-setup.ts b/alfa-client/libs/admin/postfach/src/test-setup.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ef358fbdf02a6bfc0ca9a7c2f5c73766b01ef584
--- /dev/null
+++ b/alfa-client/libs/admin/postfach/src/test-setup.ts
@@ -0,0 +1,7 @@
+globalThis.ngJest = {
+  testEnvironmentOptions: {
+    errorOnUnknownElements: true,
+    errorOnUnknownProperties: true,
+  },
+};
+import 'jest-preset-angular/setup-jest';
diff --git a/alfa-client/libs/admin/postfach/tsconfig.json b/alfa-client/libs/admin/postfach/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..8ca9ad312c2bd4dc364383853ddd91a2ed8f86fd
--- /dev/null
+++ b/alfa-client/libs/admin/postfach/tsconfig.json
@@ -0,0 +1,16 @@
+{
+  "extends": "../../../tsconfig.base.json",
+  "files": [],
+  "include": [],
+  "references": [
+    {
+      "path": "./tsconfig.lib.json"
+    },
+    {
+      "path": "./tsconfig.spec.json"
+    }
+  ],
+  "compilerOptions": {
+    "target": "es2022"
+  }
+}
diff --git a/alfa-client/libs/admin/postfach/tsconfig.lib.json b/alfa-client/libs/admin/postfach/tsconfig.lib.json
new file mode 100644
index 0000000000000000000000000000000000000000..8441346f6e5858b2ef4235cb3c3160eda256f94a
--- /dev/null
+++ b/alfa-client/libs/admin/postfach/tsconfig.lib.json
@@ -0,0 +1,12 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../../dist/out-tsc",
+    "declaration": true,
+    "declarationMap": true,
+    "inlineSources": true,
+    "types": []
+  },
+  "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"],
+  "include": ["src/**/*.ts"]
+}
diff --git a/alfa-client/libs/admin/postfach/tsconfig.spec.json b/alfa-client/libs/admin/postfach/tsconfig.spec.json
new file mode 100644
index 0000000000000000000000000000000000000000..723782fbd367969806c5992aea882773ab65af8b
--- /dev/null
+++ b/alfa-client/libs/admin/postfach/tsconfig.spec.json
@@ -0,0 +1,12 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../../dist/out-tsc",
+    "module": "commonjs",
+    "types": ["jest", "node"],
+    "target": "ES2022",
+    "useDefineForClassFields": false
+  },
+  "files": ["src/test-setup.ts"],
+  "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "jest.config.ts"]
+}
diff --git a/alfa-client/libs/admin/settings-shared/.eslintrc.json b/alfa-client/libs/admin/settings-shared/.eslintrc.json
new file mode 100644
index 0000000000000000000000000000000000000000..7474579d583c598ae092a906b3e6cf1ad3c08a50
--- /dev/null
+++ b/alfa-client/libs/admin/settings-shared/.eslintrc.json
@@ -0,0 +1,33 @@
+{
+  "extends": ["../../../.eslintrc.json"],
+  "ignorePatterns": ["!**/*"],
+  "overrides": [
+    {
+      "files": ["*.ts"],
+      "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"],
+      "rules": {
+        "@angular-eslint/directive-selector": [
+          "error",
+          {
+            "type": "attribute",
+            "prefix": "admin",
+            "style": "camelCase"
+          }
+        ],
+        "@angular-eslint/component-selector": [
+          "error",
+          {
+            "type": "element",
+            "prefix": "admin",
+            "style": "kebab-case"
+          }
+        ]
+      }
+    },
+    {
+      "files": ["*.html"],
+      "extends": ["plugin:@nx/angular-template"],
+      "rules": {}
+    }
+  ]
+}
diff --git a/alfa-client/libs/admin/settings-shared/README.md b/alfa-client/libs/admin/settings-shared/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..f9766192c1c33458d8091f1171cc9ac47d136426
--- /dev/null
+++ b/alfa-client/libs/admin/settings-shared/README.md
@@ -0,0 +1,7 @@
+# settings
+
+This library was generated with [Nx](https://nx.dev).
+
+## Running unit tests
+
+Run `nx test settings` to execute the unit tests via [Jest](https://jestjs.io).
diff --git a/alfa-client/libs/admin/settings-shared/jest.config.ts b/alfa-client/libs/admin/settings-shared/jest.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f30b0a4203afa2cf00c910d85c105b1baa541508
--- /dev/null
+++ b/alfa-client/libs/admin/settings-shared/jest.config.ts
@@ -0,0 +1,22 @@
+export default {
+  displayName: 'admin-settings',
+  preset: '../../../jest.preset.js',
+  setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
+  globals: {},
+  coverageDirectory: '../../coverage/libs/admin/settings-shared',
+  transform: {
+    '^.+\\.(ts|mjs|js|html)$': [
+      'jest-preset-angular',
+      {
+        tsconfig: '<rootDir>/tsconfig.spec.json',
+        stringifyContentPathRegex: '\\.(html|svg)$',
+      },
+    ],
+  },
+  transformIgnorePatterns: [`node_modules/(?!.*\\.mjs$)`],
+  snapshotSerializers: [
+    'jest-preset-angular/build/serializers/no-ng-attributes',
+    'jest-preset-angular/build/serializers/ng-snapshot',
+    'jest-preset-angular/build/serializers/html-comment',
+  ],
+};
diff --git a/alfa-client/libs/admin/settings/project.json b/alfa-client/libs/admin/settings-shared/project.json
similarity index 69%
rename from alfa-client/libs/admin/settings/project.json
rename to alfa-client/libs/admin/settings-shared/project.json
index 2749cb93e4ed471d107b091fece1a677debe2edc..702a27446f83db42dc97ec9409c8f3d323dcbb65 100644
--- a/alfa-client/libs/admin/settings/project.json
+++ b/alfa-client/libs/admin/settings-shared/project.json
@@ -1,7 +1,7 @@
 {
   "name": "admin-settings",
   "$schema": "../../../node_modules/nx/schemas/project-schema.json",
-  "sourceRoot": "libs/admin/settings/src",
+  "sourceRoot": "libs/admin/settings-shared/src",
   "projectType": "library",
   "prefix": "admin",
   "tags": [],
@@ -14,8 +14,8 @@
       "executor": "@nx/jest:jest",
       "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
       "options": {
-        "tsConfig": "libs/admin/settings/tsconfig.spec.json",
-        "jestConfig": "libs/admin/settings/jest.config.ts"
+        "tsConfig": "libs/admin/settings-shared/tsconfig.spec.json",
+        "jestConfig": "libs/admin/settings-shared/jest.config.ts"
       }
     }
   }
diff --git a/alfa-client/libs/admin/settings-shared/src/index.ts b/alfa-client/libs/admin/settings-shared/src/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5bf279d2ee74379b049743c71d0b77be847085c1
--- /dev/null
+++ b/alfa-client/libs/admin/settings-shared/src/index.ts
@@ -0,0 +1,2 @@
+export * from './lib/settings.model';
+export * from './lib/settings.service';
diff --git a/alfa-client/libs/admin/settings-shared/src/lib/settings-resource.service.ts b/alfa-client/libs/admin/settings-shared/src/lib/settings-resource.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a75f91afec901a8c969c00ede9a8631766421f1f
--- /dev/null
+++ b/alfa-client/libs/admin/settings-shared/src/lib/settings-resource.service.ts
@@ -0,0 +1,19 @@
+import { ConfigurationLinkRel, ConfigurationResource, ConfigurationService } from '@admin-client/configuration-shared';
+import { ListResourceServiceConfig, ResourceListService, ResourceRepository } from '@alfa-client/tech-shared';
+import { Resource } from '@ngxp/rest';
+import { SettingListLinkRel } from './settings.linkrel';
+import { SettingItemResource, SettingListResource } from './settings.model';
+
+export class SettingListResourceService extends ResourceListService<Resource, SettingListResource, SettingItemResource> {}
+
+export function createSettingListResourceService(repository: ResourceRepository, configurationService: ConfigurationService) {
+  return new ResourceListService(buildConfig(configurationService), repository);
+}
+function buildConfig(configurationService: ConfigurationService): ListResourceServiceConfig<ConfigurationResource> {
+  return {
+    baseResource: configurationService.get(),
+    createLinkRel: SettingListLinkRel.CREATE,
+    listLinkRel: ConfigurationLinkRel.SETTING,
+    listResourceListLinkRel: SettingListLinkRel.LIST,
+  };
+}
diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.linkrel.ts b/alfa-client/libs/admin/settings-shared/src/lib/settings.linkrel.ts
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/admin-settings.linkrel.ts
rename to alfa-client/libs/admin/settings-shared/src/lib/settings.linkrel.ts
diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.model.ts b/alfa-client/libs/admin/settings-shared/src/lib/settings.model.ts
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/admin-settings.model.ts
rename to alfa-client/libs/admin/settings-shared/src/lib/settings.model.ts
diff --git a/alfa-client/libs/admin/settings-shared/src/lib/settings.providers.ts b/alfa-client/libs/admin/settings-shared/src/lib/settings.providers.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5a4c30541035d5349ebd494ded911eb24f4d9fb9
--- /dev/null
+++ b/alfa-client/libs/admin/settings-shared/src/lib/settings.providers.ts
@@ -0,0 +1,13 @@
+import { ConfigurationService } from '@admin-client/configuration-shared';
+import { SettingsService } from '@admin-client/settings-shared';
+import { ResourceRepository } from '@alfa-client/tech-shared';
+import { createSettingListResourceService, SettingListResourceService } from './settings-resource.service';
+
+export const SettingsProviders = [
+  SettingsService,
+  {
+    provide: SettingListResourceService,
+    useFactory: createSettingListResourceService,
+    deps: [ResourceRepository, ConfigurationService],
+  },
+];
diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.service.spec.ts b/alfa-client/libs/admin/settings-shared/src/lib/settings.service.spec.ts
similarity index 72%
rename from alfa-client/libs/admin/settings/src/lib/admin-settings.service.spec.ts
rename to alfa-client/libs/admin/settings-shared/src/lib/settings.service.spec.ts
index 0a206b56c318b9cdda41832ba6159c237a6cf4de..9b24d56767a9f5de93f738638d976333cfa93af7 100644
--- a/alfa-client/libs/admin/settings/src/lib/admin-settings.service.spec.ts
+++ b/alfa-client/libs/admin/settings-shared/src/lib/settings.service.spec.ts
@@ -21,20 +21,17 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import {
-  StateResource,
-  createEmptyStateResource,
-  createStateResource,
-} from '@alfa-client/tech-shared';
-import { Mock, mock, useFromMock } from '@alfa-client/test-utils';
+import { PostfachResource } from '@admin-client/postfach-shared';
+import { StateResource, createEmptyStateResource, createStateResource } from '@alfa-client/tech-shared';
+import { Mock, mock } from '@alfa-client/test-utils';
+import { TestBed } from '@angular/core/testing';
 import { singleCold } from 'libs/tech-shared/test/marbles';
 import { Observable, of } from 'rxjs';
-import { createSettingsListResource } from '../../test/admin-settings';
-import { createPostfachResource, createSettingItemResource } from '../../test/postfach/postfach';
-import { SettingListResourceService } from './admin-settings-resource.service';
-import { SettingListResource } from './admin-settings.model';
-import { SettingsService } from './admin-settings.service';
-import { PostfachResource } from './postfach/postfach.model';
+import { createPostfachResource, createSettingItemResource } from '../../../postfach-shared/src/test/postfach';
+import { createSettingsListResource } from '../../test/settings';
+import { SettingListResourceService } from './settings-resource.service';
+import { SettingListResource } from './settings.model';
+import { SettingsService } from './settings.service';
 
 describe('SettingsService', () => {
   let service: SettingsService;
@@ -43,7 +40,11 @@ describe('SettingsService', () => {
   beforeEach(() => {
     settingListResourceService = mock(SettingListResourceService);
 
-    service = new SettingsService(useFromMock(settingListResourceService));
+    TestBed.configureTestingModule({
+      providers: [SettingsService, { provide: SettingListResourceService, useValue: settingListResourceService }],
+    });
+
+    service = TestBed.inject(SettingsService);
   });
 
   it('should create', () => {
@@ -52,8 +53,7 @@ describe('SettingsService', () => {
 
   describe('get Postfach', () => {
     const postfachResource = createPostfachResource();
-    const postfachStateResource: StateResource<PostfachResource> =
-      createStateResource(postfachResource);
+    const postfachStateResource: StateResource<PostfachResource> = createStateResource(postfachResource);
     const settingsListResource: StateResource<SettingListResource> = createStateResource(
       createSettingsListResource([postfachResource]),
     );
@@ -73,18 +73,14 @@ describe('SettingsService', () => {
         createSettingsListResource([createSettingItemResource()]),
       );
 
-      settingListResourceService.getList = jest
-        .fn()
-        .mockReturnValue(singleCold(emptySettingsListResource));
+      settingListResourceService.getList = jest.fn().mockReturnValue(singleCold(emptySettingsListResource));
 
       const postfach: Observable<StateResource<PostfachResource>> = service.getPostfach();
       expect(postfach).toBeObservable(singleCold(createEmptyStateResource()));
     });
 
     it('should return item resource as postfach resource', () => {
-      settingListResourceService.getList = jest
-        .fn()
-        .mockReturnValue(singleCold(settingsListResource));
+      settingListResourceService.getList = jest.fn().mockReturnValue(singleCold(settingsListResource));
 
       const postfach: Observable<StateResource<PostfachResource>> = service.getPostfach();
 
diff --git a/alfa-client/libs/admin/settings-shared/src/lib/settings.service.ts b/alfa-client/libs/admin/settings-shared/src/lib/settings.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..51faa2be7ea9aa2a9f878de233ad56d32ec0f81c
--- /dev/null
+++ b/alfa-client/libs/admin/settings-shared/src/lib/settings.service.ts
@@ -0,0 +1,15 @@
+import { PostfachResource } from '@admin-client/postfach-shared';
+import { StateResource } from '@alfa-client/tech-shared';
+import { inject, Injectable } from '@angular/core';
+import { map, Observable } from 'rxjs';
+import { SettingListResourceService } from './settings-resource.service';
+import { getPostfachResource } from './settings.util';
+
+@Injectable()
+export class SettingsService {
+  private settingListResourceService = inject(SettingListResourceService);
+
+  public getPostfach(): Observable<StateResource<PostfachResource>> {
+    return this.settingListResourceService.getList().pipe(map(getPostfachResource));
+  }
+}
diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.util.spec.ts b/alfa-client/libs/admin/settings-shared/src/lib/settings.util.spec.ts
similarity index 73%
rename from alfa-client/libs/admin/settings/src/lib/admin-settings.util.spec.ts
rename to alfa-client/libs/admin/settings-shared/src/lib/settings.util.spec.ts
index 75256cb6394254d6d21c8409e3078a94b27aacb6..5b78df34aa506c8180878416054cd11bb4164d14 100644
--- a/alfa-client/libs/admin/settings/src/lib/admin-settings.util.spec.ts
+++ b/alfa-client/libs/admin/settings-shared/src/lib/settings.util.spec.ts
@@ -21,16 +21,12 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import {
-  createEmptyStateResource,
-  createStateResource,
-  StateResource,
-} from '@alfa-client/tech-shared';
-import { createFilledSettingsListResource } from '../../test/admin-settings';
-import { createPostfachResource } from '../../test/postfach/postfach';
-import { SettingListResource } from './admin-settings.model';
-import { getPostfachResource } from './admin-settings.util';
-import { PostfachResource } from './postfach/postfach.model';
+import { PostfachResource } from '@admin-client/postfach-shared';
+import { SettingListResource } from '@admin-client/settings-shared';
+import { createEmptyStateResource, createStateResource, StateResource } from '@alfa-client/tech-shared';
+import { createPostfachResource } from 'libs/admin/postfach-shared/src/test/postfach';
+import { createFilledSettingsListResource } from '../../test/settings';
+import { getPostfachResource } from './settings.util';
 
 describe('get postfach resource', () => {
   it('should return state resource with postfach resource if exists', () => {
@@ -39,19 +35,15 @@ describe('get postfach resource', () => {
       createFilledSettingsListResource([postfachResource]),
     );
 
-    const postfachStateResource: StateResource<PostfachResource> =
-      getPostfachResource(settingsListResource);
+    const postfachStateResource: StateResource<PostfachResource> = getPostfachResource(settingsListResource);
 
     expect(postfachStateResource.resource).toEqual(postfachResource);
   });
 
   it('should return empty state resource if postfach resource NOT exists', () => {
-    const settingsListResource: StateResource<SettingListResource> = createStateResource(
-      createFilledSettingsListResource([]),
-    );
+    const settingsListResource: StateResource<SettingListResource> = createStateResource(createFilledSettingsListResource([]));
 
-    const postfachStateResource: StateResource<PostfachResource> =
-      getPostfachResource(settingsListResource);
+    const postfachStateResource: StateResource<PostfachResource> = getPostfachResource(settingsListResource);
 
     expect(postfachStateResource).toEqual(createEmptyStateResource());
   });
diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.util.ts b/alfa-client/libs/admin/settings-shared/src/lib/settings.util.ts
similarity index 78%
rename from alfa-client/libs/admin/settings/src/lib/admin-settings.util.ts
rename to alfa-client/libs/admin/settings-shared/src/lib/settings.util.ts
index bbc68af25e5d32e9210549c221dbaf1185ef1490..d5cf7605cada028e253a26d1e3641eee5856e2c7 100644
--- a/alfa-client/libs/admin/settings/src/lib/admin-settings.util.ts
+++ b/alfa-client/libs/admin/settings-shared/src/lib/settings.util.ts
@@ -21,6 +21,7 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
+import { PostfachResource } from '@admin-client/postfach-shared';
 import {
   createEmptyStateResource,
   createStateResource,
@@ -28,17 +29,11 @@ import {
   isNotNil,
   StateResource,
 } from '@alfa-client/tech-shared';
-import { SettingListLinkRel } from './admin-settings.linkrel';
-import { SettingItemResource, SettingListResource, SettingName } from './admin-settings.model';
-import { PostfachResource } from './postfach/postfach.model';
+import { SettingListLinkRel } from './settings.linkrel';
+import { SettingItemResource, SettingListResource, SettingName } from './settings.model';
 
-export function getPostfachResource(
-  settingsListResource: StateResource<SettingListResource>,
-): StateResource<PostfachResource> {
-  const entries: SettingItemResource[] = getEmbeddedResources(
-    settingsListResource,
-    SettingListLinkRel.LIST,
-  );
+export function getPostfachResource(settingsListResource: StateResource<SettingListResource>): StateResource<PostfachResource> {
+  const entries: SettingItemResource[] = getEmbeddedResources(settingsListResource, SettingListLinkRel.LIST);
   const postfachSettingItemResource: SettingItemResource = entries.find(isPostfachSettingItem);
   return isNotNil(postfachSettingItemResource) ?
       createStateResource(postfachSettingItemResource as PostfachResource)
diff --git a/alfa-client/libs/admin/settings/src/test-setup.ts b/alfa-client/libs/admin/settings-shared/src/test-setup.ts
similarity index 100%
rename from alfa-client/libs/admin/settings/src/test-setup.ts
rename to alfa-client/libs/admin/settings-shared/src/test-setup.ts
diff --git a/alfa-client/libs/admin/settings-shared/test/settings.ts b/alfa-client/libs/admin/settings-shared/test/settings.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c3b9478ea57d373b18ad6315c0e5161fd7d9b008
--- /dev/null
+++ b/alfa-client/libs/admin/settings-shared/test/settings.ts
@@ -0,0 +1,16 @@
+import { Resource } from '@ngxp/rest';
+import { toResource } from 'libs/tech-shared/test/resource';
+import { SettingListLinkRel } from '../src/lib/settings.linkrel';
+import { SettingItemResource, SettingListResource } from '../src/lib/settings.model';
+
+export function createSettingsListResource(settingsItems: SettingItemResource[]): SettingListResource {
+  return toResource({}, [], {
+    settings: settingsItems,
+  });
+}
+
+export function createFilledSettingsListResource(resources: Resource[], linkRelations: string[] = []): SettingListResource {
+  return toResource({}, [...linkRelations], {
+    [SettingListLinkRel.LIST]: resources,
+  });
+}
diff --git a/alfa-client/libs/admin/settings-shared/tsconfig.json b/alfa-client/libs/admin/settings-shared/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..8ca9ad312c2bd4dc364383853ddd91a2ed8f86fd
--- /dev/null
+++ b/alfa-client/libs/admin/settings-shared/tsconfig.json
@@ -0,0 +1,16 @@
+{
+  "extends": "../../../tsconfig.base.json",
+  "files": [],
+  "include": [],
+  "references": [
+    {
+      "path": "./tsconfig.lib.json"
+    },
+    {
+      "path": "./tsconfig.spec.json"
+    }
+  ],
+  "compilerOptions": {
+    "target": "es2022"
+  }
+}
diff --git a/alfa-client/libs/admin/settings-shared/tsconfig.lib.json b/alfa-client/libs/admin/settings-shared/tsconfig.lib.json
new file mode 100644
index 0000000000000000000000000000000000000000..8441346f6e5858b2ef4235cb3c3160eda256f94a
--- /dev/null
+++ b/alfa-client/libs/admin/settings-shared/tsconfig.lib.json
@@ -0,0 +1,12 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../../dist/out-tsc",
+    "declaration": true,
+    "declarationMap": true,
+    "inlineSources": true,
+    "types": []
+  },
+  "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"],
+  "include": ["src/**/*.ts"]
+}
diff --git a/alfa-client/libs/admin/settings-shared/tsconfig.spec.json b/alfa-client/libs/admin/settings-shared/tsconfig.spec.json
new file mode 100644
index 0000000000000000000000000000000000000000..723782fbd367969806c5992aea882773ab65af8b
--- /dev/null
+++ b/alfa-client/libs/admin/settings-shared/tsconfig.spec.json
@@ -0,0 +1,12 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../../dist/out-tsc",
+    "module": "commonjs",
+    "types": ["jest", "node"],
+    "target": "ES2022",
+    "useDefineForClassFields": false
+  },
+  "files": ["src/test-setup.ts"],
+  "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "jest.config.ts"]
+}
diff --git a/alfa-client/libs/admin/settings/.eslintrc.json b/alfa-client/libs/admin/settings/.eslintrc.json
deleted file mode 100644
index 3230caf3d2f01580c97f01513e96c9c4727c91c9..0000000000000000000000000000000000000000
--- a/alfa-client/libs/admin/settings/.eslintrc.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-  "extends": ["../../../.eslintrc.json"],
-  "ignorePatterns": ["!**/*"],
-  "overrides": [
-    {
-      "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
-      "rules": {}
-    },
-    {
-      "files": ["*.ts", "*.tsx"],
-      "rules": {}
-    },
-    {
-      "files": ["*.js", "*.jsx"],
-      "rules": {}
-    },
-    {
-      "files": ["*.json"],
-      "parser": "jsonc-eslint-parser",
-      "rules": {
-        "@nx/dependency-checks": "error"
-      }
-    }
-  ]
-}
diff --git a/alfa-client/libs/admin/settings/README.md b/alfa-client/libs/admin/settings/README.md
deleted file mode 100644
index 01b723f8400c9c3dd0f79fe697c5b1be2441a3eb..0000000000000000000000000000000000000000
--- a/alfa-client/libs/admin/settings/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# admin-settings
-
-This library was generated with [Nx](https://nx.dev).
-
-## Running unit tests
-
-Run `nx test admin-settings` to execute the unit tests via [Jest](https://jestjs.io).
diff --git a/alfa-client/libs/admin/settings/src/index.ts b/alfa-client/libs/admin/settings/src/index.ts
deleted file mode 100644
index d835694e676c145a401c27a3f8c4f624ee43ea67..0000000000000000000000000000000000000000
--- a/alfa-client/libs/admin/settings/src/index.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-export * from './lib/admin-settings.module';
-export * from './lib/organisationseinheit/organisations-einheit.model';
-export * from './lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component';
-export * from './lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component';
-export * from './lib/postfach/postfach-container/postfach-container.component';
-export * from './lib/users-roles/user-add-form/user-add-form.component';
-export * from './lib/users-roles/users-roles.component';
diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings-resource.service.ts b/alfa-client/libs/admin/settings/src/lib/admin-settings-resource.service.ts
deleted file mode 100644
index 932dcb34f0a460a6684207f0773884cb51b80341..0000000000000000000000000000000000000000
--- a/alfa-client/libs/admin/settings/src/lib/admin-settings-resource.service.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import {
-  ListResourceServiceConfig,
-  ResourceListService,
-  ResourceRepository,
-} from '@alfa-client/tech-shared';
-import { Resource } from '@ngxp/rest';
-import { SettingListLinkRel } from './admin-settings.linkrel';
-import { SettingItemResource, SettingListResource } from './admin-settings.model';
-import { ConfigurationLinkRel } from './configuration/configuration.linkrel';
-import { ConfigurationResource } from './configuration/configuration.model';
-import { ConfigurationService } from './configuration/configuration.service';
-
-export class SettingListResourceService extends ResourceListService<
-  Resource,
-  SettingListResource,
-  SettingItemResource
-> {}
-
-export function createSettingListResourceService(
-  repository: ResourceRepository,
-  configurationService: ConfigurationService,
-) {
-  return new ResourceListService(buildConfig(configurationService), repository);
-}
-function buildConfig(
-  configurationService: ConfigurationService,
-): ListResourceServiceConfig<ConfigurationResource> {
-  return {
-    baseResource: configurationService.get(),
-    createLinkRel: SettingListLinkRel.CREATE,
-    listLinkRel: ConfigurationLinkRel.SETTING,
-    listResourceListLinkRel: SettingListLinkRel.LIST,
-  };
-}
diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.module.spec.ts b/alfa-client/libs/admin/settings/src/lib/admin-settings.module.spec.ts
deleted file mode 100644
index bebce1e10c22d2a4e582cfee24dcc99849783a8e..0000000000000000000000000000000000000000
--- a/alfa-client/libs/admin/settings/src/lib/admin-settings.module.spec.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { TestBed } from '@angular/core/testing';
-import { AdminSettingsModule } from './admin-settings.module';
-
-describe('AdminSettingsModule', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [AdminSettingsModule],
-    });
-  });
-
-  it('should create', () => {
-    expect(AdminSettingsModule).toBeDefined();
-  });
-});
diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.module.ts b/alfa-client/libs/admin/settings/src/lib/admin-settings.module.ts
deleted file mode 100644
index 6e3e350a875223b032c4144f0b13d997b5d16f66..0000000000000000000000000000000000000000
--- a/alfa-client/libs/admin/settings/src/lib/admin-settings.module.ts
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { ApiRootService } from '@alfa-client/api-root-shared';
-import { Environment, ENVIRONMENT_CONFIG } from '@alfa-client/environment-shared';
-import { NavigationSharedModule } from '@alfa-client/navigation-shared';
-import { ResourceRepository, TechSharedModule } from '@alfa-client/tech-shared';
-import { UiModule } from '@alfa-client/ui';
-import { CommonModule } from '@angular/common';
-import { NgModule } from '@angular/core';
-import { ReactiveFormsModule } from '@angular/forms';
-import { RouterModule } from '@angular/router';
-import KcAdminClient from '@keycloak/keycloak-admin-client';
-import {
-  ButtonWithSpinnerComponent,
-  CheckboxEditorComponent,
-  TextareaEditorComponent,
-  TextEditorComponent,
-} from '@ods/component';
-import {
-  ExclamationIconComponent,
-  ListComponent,
-  ListItemComponent,
-  MailboxIconComponent,
-  PersonIconComponent,
-  TextInputComponent,
-} from '@ods/system';
-import { createSettingListResourceService, SettingListResourceService } from './admin-settings-resource.service';
-import { SettingsService } from './admin-settings.service';
-import { ConfigurationResourceService, createConfigurationResourceService } from './configuration/configuration-resource.service';
-import { ConfigurationService } from './configuration/configuration.service';
-import {
-  createOrganisationsEinheitListResourceService,
-  OrganisationsEinheitListResourceService,
-} from './organisationseinheit/organisations-einheit-list-resource.service';
-import {
-  createOrganisationsEinheitResourceService,
-  OrganisationsEinheitResourceService,
-} from './organisationseinheit/organisations-einheit-resource.service';
-import { OrganisationsEinheitContainerComponent } from './organisationseinheit/organisationseinheit-container/organisationseinheit-container.component';
-import { OrganisationsEinheitListComponent } from './organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component';
-import { OrganisationsEinheitFormContainerComponent } from './organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component';
-import { OrganisationsEinheitFormComponent } from './organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component';
-import { OrganisationsEinheitSignaturComponent } from './organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component';
-import { PostfachContainerComponent } from './postfach/postfach-container/postfach-container.component';
-import { PostfachFormComponent } from './postfach/postfach-container/postfach-form/postfach-form.component';
-import { PostfachSignaturComponent } from './postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component';
-import { createPostfachResourceService, PostfachResourceService } from './postfach/postfach-resource.service';
-import { PostfachService } from './postfach/postfach.service';
-import { ToUserNamePipe } from './user/to-user-name.pipe';
-import { UserAddFormComponent } from './users-roles/user-add-form/user-add-form.component';
-import { UsersRolesComponent } from './users-roles/users-roles.component';
-
-@NgModule({
-  declarations: [
-    PostfachContainerComponent,
-    PostfachFormComponent,
-    PostfachSignaturComponent,
-    OrganisationsEinheitContainerComponent,
-    OrganisationsEinheitListComponent,
-    OrganisationsEinheitFormContainerComponent,
-    OrganisationsEinheitFormComponent,
-    OrganisationsEinheitSignaturComponent,
-    UsersRolesComponent,
-    UserAddFormComponent,
-  ],
-  imports: [
-    CommonModule,
-    TechSharedModule,
-    RouterModule,
-    ReactiveFormsModule,
-    TextInputComponent,
-    CheckboxEditorComponent,
-    ButtonWithSpinnerComponent,
-    TextareaEditorComponent,
-    MailboxIconComponent,
-    PersonIconComponent,
-    ToUserNamePipe,
-    ListComponent,
-    ListItemComponent,
-    ExclamationIconComponent,
-    UiModule,
-    NavigationSharedModule,
-    TextEditorComponent,
-  ],
-  exports: [
-    PostfachContainerComponent,
-    OrganisationsEinheitContainerComponent,
-    OrganisationsEinheitFormContainerComponent,
-    UsersRolesComponent,
-    UserAddFormComponent,
-  ],
-  providers: [
-    ConfigurationService,
-    SettingsService,
-    PostfachService,
-    {
-      provide: KcAdminClient,
-      useFactory: (env: Environment) =>
-        new KcAdminClient({
-          baseUrl: env.authServer,
-          realmName: env.realm,
-        }),
-      deps: [ENVIRONMENT_CONFIG],
-    },
-    {
-      provide: PostfachResourceService,
-      useFactory: createPostfachResourceService,
-      deps: [ResourceRepository, SettingsService],
-    },
-    {
-      provide: ConfigurationResourceService,
-      useFactory: createConfigurationResourceService,
-      deps: [ResourceRepository, ApiRootService],
-    },
-    {
-      provide: SettingListResourceService,
-      useFactory: createSettingListResourceService,
-      deps: [ResourceRepository, ConfigurationService],
-    },
-    {
-      provide: OrganisationsEinheitListResourceService,
-      useFactory: createOrganisationsEinheitListResourceService,
-      deps: [ResourceRepository, ApiRootService],
-    },
-    {
-      provide: OrganisationsEinheitResourceService,
-      useFactory: createOrganisationsEinheitResourceService,
-      deps: [ResourceRepository, OrganisationsEinheitListResourceService],
-    },
-  ],
-})
-export class AdminSettingsModule {}
diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.service.ts b/alfa-client/libs/admin/settings/src/lib/admin-settings.service.ts
deleted file mode 100644
index 172e8dd2dc5db11684dda94054b833618675f871..0000000000000000000000000000000000000000
--- a/alfa-client/libs/admin/settings/src/lib/admin-settings.service.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { StateResource } from '@alfa-client/tech-shared';
-import { Injectable } from '@angular/core';
-import { Observable, map } from 'rxjs';
-import { SettingListResourceService } from './admin-settings-resource.service';
-import { getPostfachResource } from './admin-settings.util';
-import { PostfachResource } from './postfach/postfach.model';
-
-@Injectable()
-export class SettingsService {
-  constructor(private settingListResourceService: SettingListResourceService) {}
-
-  public getPostfach(): Observable<StateResource<PostfachResource>> {
-    return this.settingListResourceService.getList().pipe(map(getPostfachResource));
-  }
-}
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.ts
deleted file mode 100644
index 1451d9f18fbb60184c5330493859612c7d16060b..0000000000000000000000000000000000000000
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { StateResource } from '@alfa-client/tech-shared';
-import { Component, OnInit } from '@angular/core';
-import { Observable } from 'rxjs';
-import { OrganisationsEinheitListLinkRel } from '../organisations-einheit.linkrel';
-import { AdminOrganisationsEinheitListResource } from '../organisations-einheit.model';
-import { OrganisationsEinheitService } from '../organisationseinheit.service';
-
-@Component({
-  selector: 'admin-organisationseinheit-container',
-  templateUrl: './organisationseinheit-container.component.html',
-})
-export class OrganisationsEinheitContainerComponent implements OnInit {
-  organisationsEinheitListStateResource$: Observable<StateResource<AdminOrganisationsEinheitListResource>>;
-
-  public readonly OrganisationsEinheitListLinkRel = OrganisationsEinheitListLinkRel;
-
-  constructor(private organisationsEinheitService: OrganisationsEinheitService) {}
-
-  ngOnInit(): void {
-    this.organisationsEinheitListStateResource$ = this.organisationsEinheitService.getList();
-  }
-}
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.ts
deleted file mode 100644
index dd503745968b49d01c2caea97f5ee09101208526..0000000000000000000000000000000000000000
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { StateResource } from '@alfa-client/tech-shared';
-import { Component, OnInit } from '@angular/core';
-import { Observable } from 'rxjs';
-import { OrganisationsEinheitListLinkRel } from '../organisations-einheit.linkrel';
-import { AdminOrganisationsEinheitResource } from '../organisations-einheit.model';
-import { OrganisationsEinheitService } from '../organisationseinheit.service';
-
-@Component({
-  selector: 'admin-organisationseinheit-form-container',
-  templateUrl: './organisationseinheit-form-container.component.html',
-})
-export class OrganisationsEinheitFormContainerComponent implements OnInit {
-  organisationsEinheitStateResource$: Observable<StateResource<AdminOrganisationsEinheitResource>>;
-
-  constructor(private organisationsEinheitService: OrganisationsEinheitService) {}
-
-  ngOnInit(): void {
-    this.organisationsEinheitStateResource$ = this.organisationsEinheitService.get();
-  }
-
-  protected readonly OrganisationsEinheitListLinkRel = OrganisationsEinheitListLinkRel;
-}
diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.ts
deleted file mode 100644
index b0a57e409b9f27665081db6ce18ada59dd310ef8..0000000000000000000000000000000000000000
--- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { Component } from '@angular/core';
-import { OrganisationsEinheitFormService } from '../organisationseinheit.formservice';
-
-@Component({
-  selector: 'admin-organisationseinheit-signatur',
-  templateUrl: './organisationseinheit-signatur.component.html',
-})
-export class OrganisationsEinheitSignaturComponent {
-  public readonly formServiceClass = OrganisationsEinheitFormService;
-
-  constructor(public formService: OrganisationsEinheitFormService) {}
-}
diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.html b/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.html
deleted file mode 100644
index 89ab00abf08981885d8c01535a369a8d4d8aea5a..0000000000000000000000000000000000000000
--- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<h1 class="heading-1">Postfach</h1>
-<postfach-form [postfachStateResource]="postfachStateResource$ | async"></postfach-form>
diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.ts b/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.ts
deleted file mode 100644
index f37ac2cea38a25d5e7080efff806c72bbd20ace4..0000000000000000000000000000000000000000
--- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { Component } from '@angular/core';
-import { PostfachFormService } from '../postfach.formservice';
-
-@Component({
-  selector: 'postfach-signatur',
-  templateUrl: './postfach-signatur.component.html',
-})
-export class PostfachSignaturComponent {
-  protected readonly formServiceClass = PostfachFormService;
-
-  constructor(public formService: PostfachFormService) {}
-}
diff --git a/alfa-client/libs/admin/settings/test/admin-settings.ts b/alfa-client/libs/admin/settings/test/admin-settings.ts
deleted file mode 100644
index c4848d7766709af8620b976b7a66d08d5780e802..0000000000000000000000000000000000000000
--- a/alfa-client/libs/admin/settings/test/admin-settings.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { Resource } from '@ngxp/rest';
-import { toResource } from '../../../tech-shared/test/resource';
-import { SettingListLinkRel } from '../src/lib/admin-settings.linkrel';
-import { SettingItemResource, SettingListResource } from '../src/lib/admin-settings.model';
-
-export function createSettingsListResource(
-  settingsItems: SettingItemResource[],
-): SettingListResource {
-  return toResource({}, [], {
-    settings: settingsItems,
-  });
-}
-
-export function createFilledSettingsListResource(
-  resources: Resource[],
-  linkRelations: string[] = [],
-): SettingListResource {
-  return toResource({}, [...linkRelations], {
-    [SettingListLinkRel.LIST]: resources,
-  });
-}
diff --git a/alfa-client/libs/admin/settings/test/configuration/configuration.ts b/alfa-client/libs/admin/settings/test/configuration/configuration.ts
deleted file mode 100644
index a9f71c8303fe9872c4bec2b8113032183fcb8643..0000000000000000000000000000000000000000
--- a/alfa-client/libs/admin/settings/test/configuration/configuration.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { toResource } from 'libs/tech-shared/test/resource';
-import { ConfigurationLinkRel } from '../../src/lib/configuration/configuration.linkrel';
-import { ConfigurationResource } from '../../src/lib/configuration/configuration.model';
-
-export function createConfigurationResource(): ConfigurationResource {
-  return toResource({}, [ConfigurationLinkRel.SETTING]);
-}
diff --git a/alfa-client/libs/admin/shared/.eslintrc.json b/alfa-client/libs/admin/shared/.eslintrc.json
new file mode 100644
index 0000000000000000000000000000000000000000..7474579d583c598ae092a906b3e6cf1ad3c08a50
--- /dev/null
+++ b/alfa-client/libs/admin/shared/.eslintrc.json
@@ -0,0 +1,33 @@
+{
+  "extends": ["../../../.eslintrc.json"],
+  "ignorePatterns": ["!**/*"],
+  "overrides": [
+    {
+      "files": ["*.ts"],
+      "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"],
+      "rules": {
+        "@angular-eslint/directive-selector": [
+          "error",
+          {
+            "type": "attribute",
+            "prefix": "admin",
+            "style": "camelCase"
+          }
+        ],
+        "@angular-eslint/component-selector": [
+          "error",
+          {
+            "type": "element",
+            "prefix": "admin",
+            "style": "kebab-case"
+          }
+        ]
+      }
+    },
+    {
+      "files": ["*.html"],
+      "extends": ["plugin:@nx/angular-template"],
+      "rules": {}
+    }
+  ]
+}
diff --git a/alfa-client/libs/admin/shared/README.md b/alfa-client/libs/admin/shared/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..0c35b5b818bea8bf169771020693b753b5c10b47
--- /dev/null
+++ b/alfa-client/libs/admin/shared/README.md
@@ -0,0 +1,7 @@
+# shared
+
+This library was generated with [Nx](https://nx.dev).
+
+## Running unit tests
+
+Run `nx test shared` to execute the unit tests.
diff --git a/alfa-client/libs/admin/shared/index.ts b/alfa-client/libs/admin/shared/index.ts
deleted file mode 100644
index 00a632ea7e5e7e455b302363e5436df0d18f814d..0000000000000000000000000000000000000000
--- a/alfa-client/libs/admin/shared/index.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-export * from './libs/routes';
diff --git a/alfa-client/libs/admin/shared/jest.config.ts b/alfa-client/libs/admin/shared/jest.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c04b4d29749677eb4cd5e418a57722d9f659b0ee
--- /dev/null
+++ b/alfa-client/libs/admin/shared/jest.config.ts
@@ -0,0 +1,21 @@
+export default {
+  displayName: 'shared',
+  preset: '../../../jest.preset.js',
+  setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
+  coverageDirectory: '../../../coverage/libs/admin/shared',
+  transform: {
+    '^.+\\.(ts|mjs|js|html)$': [
+      'jest-preset-angular',
+      {
+        tsconfig: '<rootDir>/tsconfig.spec.json',
+        stringifyContentPathRegex: '\\.(html|svg)$',
+      },
+    ],
+  },
+  transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'],
+  snapshotSerializers: [
+    'jest-preset-angular/build/serializers/no-ng-attributes',
+    'jest-preset-angular/build/serializers/ng-snapshot',
+    'jest-preset-angular/build/serializers/html-comment',
+  ],
+};
diff --git a/alfa-client/libs/admin/shared/project.json b/alfa-client/libs/admin/shared/project.json
new file mode 100644
index 0000000000000000000000000000000000000000..a2e9e40a7ec2e50df4bf02831f559aced291d240
--- /dev/null
+++ b/alfa-client/libs/admin/shared/project.json
@@ -0,0 +1,22 @@
+{
+  "name": "admin-shared",
+  "$schema": "../../../node_modules/nx/schemas/project-schema.json",
+  "sourceRoot": "libs/admin/shared/src",
+  "projectType": "library",
+  "prefix": "admin",
+  "tags": [],
+  "targets": {
+    "lint": {
+      "executor": "@nx/eslint:lint",
+      "outputs": ["{options.outputFile}"]
+    },
+    "test": {
+      "executor": "@nx/jest:jest",
+      "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
+      "options": {
+        "tsConfig": "libs/admin/shared/tsconfig.spec.json",
+        "jestConfig": "libs/admin/shared/jest.config.ts"
+      }
+    }
+  }
+}
diff --git a/alfa-client/libs/admin/shared/src/index.ts b/alfa-client/libs/admin/shared/src/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ece2c025dc3e05d4b26ad131fc7e419331e301d2
--- /dev/null
+++ b/alfa-client/libs/admin/shared/src/index.ts
@@ -0,0 +1 @@
+export * from './lib/routes';
diff --git a/alfa-client/libs/admin/shared/libs/routes.ts b/alfa-client/libs/admin/shared/src/lib/routes.ts
similarity index 100%
rename from alfa-client/libs/admin/shared/libs/routes.ts
rename to alfa-client/libs/admin/shared/src/lib/routes.ts
diff --git a/alfa-client/libs/admin/shared/src/test-setup.ts b/alfa-client/libs/admin/shared/src/test-setup.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c408668266d2fec3a9803c0ec044bc163fb987fe
--- /dev/null
+++ b/alfa-client/libs/admin/shared/src/test-setup.ts
@@ -0,0 +1,12 @@
+import '@testing-library/jest-dom';
+import 'jest-preset-angular/setup-jest';
+
+import { getTestBed } from '@angular/core/testing';
+import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
+
+getTestBed().resetTestEnvironment();
+getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), {
+  teardown: { destroyAfterEach: false },
+  errorOnUnknownProperties: true,
+  errorOnUnknownElements: true,
+});
diff --git a/alfa-client/libs/admin/shared/tsconfig.json b/alfa-client/libs/admin/shared/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..8ca9ad312c2bd4dc364383853ddd91a2ed8f86fd
--- /dev/null
+++ b/alfa-client/libs/admin/shared/tsconfig.json
@@ -0,0 +1,16 @@
+{
+  "extends": "../../../tsconfig.base.json",
+  "files": [],
+  "include": [],
+  "references": [
+    {
+      "path": "./tsconfig.lib.json"
+    },
+    {
+      "path": "./tsconfig.spec.json"
+    }
+  ],
+  "compilerOptions": {
+    "target": "es2022"
+  }
+}
diff --git a/alfa-client/libs/admin/shared/tsconfig.lib.json b/alfa-client/libs/admin/shared/tsconfig.lib.json
new file mode 100644
index 0000000000000000000000000000000000000000..8441346f6e5858b2ef4235cb3c3160eda256f94a
--- /dev/null
+++ b/alfa-client/libs/admin/shared/tsconfig.lib.json
@@ -0,0 +1,12 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../../dist/out-tsc",
+    "declaration": true,
+    "declarationMap": true,
+    "inlineSources": true,
+    "types": []
+  },
+  "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"],
+  "include": ["src/**/*.ts"]
+}
diff --git a/alfa-client/libs/admin/shared/tsconfig.spec.json b/alfa-client/libs/admin/shared/tsconfig.spec.json
new file mode 100644
index 0000000000000000000000000000000000000000..a7c5b716b91f2c6ee74b31ea622a8535816217ba
--- /dev/null
+++ b/alfa-client/libs/admin/shared/tsconfig.spec.json
@@ -0,0 +1,12 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../../dist/out-tsc",
+    "module": "commonjs",
+    "types": ["jest", "node"],
+    "target": "ES2022",
+    "useDefineForClassFields": false
+  },
+  "files": ["src/test-setup.ts"],
+  "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"]
+}
diff --git a/alfa-client/libs/admin/user-shared/.eslintrc.json b/alfa-client/libs/admin/user-shared/.eslintrc.json
new file mode 100644
index 0000000000000000000000000000000000000000..7474579d583c598ae092a906b3e6cf1ad3c08a50
--- /dev/null
+++ b/alfa-client/libs/admin/user-shared/.eslintrc.json
@@ -0,0 +1,33 @@
+{
+  "extends": ["../../../.eslintrc.json"],
+  "ignorePatterns": ["!**/*"],
+  "overrides": [
+    {
+      "files": ["*.ts"],
+      "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"],
+      "rules": {
+        "@angular-eslint/directive-selector": [
+          "error",
+          {
+            "type": "attribute",
+            "prefix": "admin",
+            "style": "camelCase"
+          }
+        ],
+        "@angular-eslint/component-selector": [
+          "error",
+          {
+            "type": "element",
+            "prefix": "admin",
+            "style": "kebab-case"
+          }
+        ]
+      }
+    },
+    {
+      "files": ["*.html"],
+      "extends": ["plugin:@nx/angular-template"],
+      "rules": {}
+    }
+  ]
+}
diff --git a/alfa-client/libs/admin/user-shared/README.md b/alfa-client/libs/admin/user-shared/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..b62dcee762ac67cefa958923ca0d121999ae5639
--- /dev/null
+++ b/alfa-client/libs/admin/user-shared/README.md
@@ -0,0 +1,7 @@
+# admin-user-shared
+
+This library was generated with [Nx](https://nx.dev).
+
+## Running unit tests
+
+Run `nx test admin-user-shared` to execute the unit tests.
diff --git a/alfa-client/libs/admin/settings/jest.config.ts b/alfa-client/libs/admin/user-shared/jest.config.ts
similarity index 94%
rename from alfa-client/libs/admin/settings/jest.config.ts
rename to alfa-client/libs/admin/user-shared/jest.config.ts
index 622fe206065359af51d061b0dcac562e5501a5cd..7ad606d0054b4ec341f70407c99031f4e122cee1 100644
--- a/alfa-client/libs/admin/settings/jest.config.ts
+++ b/alfa-client/libs/admin/user-shared/jest.config.ts
@@ -25,11 +25,10 @@
 
 const esModules = ['@keycloak/keycloak-admin-client', 'url-join', 'url-template', 'camelize-ts'];
 export default {
-  displayName: 'admin-settings',
+  displayName: 'admin-user-shared',
   preset: '../../../jest.preset.js',
   setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
-  globals: {},
-  coverageDirectory: '../../coverage/libs/admin/settings',
+  coverageDirectory: '../../../coverage/libs/admin/user-shared',
   transform: {
     '^.+\\.(ts|mjs|js|html)$': [
       'jest-preset-angular',
diff --git a/alfa-client/libs/admin/user-shared/project.json b/alfa-client/libs/admin/user-shared/project.json
new file mode 100644
index 0000000000000000000000000000000000000000..65579267d387b598affcb6d94c05ab6adc496cd6
--- /dev/null
+++ b/alfa-client/libs/admin/user-shared/project.json
@@ -0,0 +1,22 @@
+{
+  "name": "admin-user-shared",
+  "$schema": "../../../node_modules/nx/schemas/project-schema.json",
+  "sourceRoot": "libs/admin/user-shared/src",
+  "prefix": "admin",
+  "projectType": "library",
+  "tags": [],
+  "targets": {
+    "test": {
+      "executor": "@nx/jest:jest",
+      "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
+      "options": {
+        "jestConfig": "libs/admin/user-shared/jest.config.ts",
+        "tsConfig": "libs/admin/user-shared/tsconfig.spec.json"
+      }
+    },
+    "lint": {
+      "executor": "@nx/eslint:lint",
+      "outputs": ["{options.outputFile}"]
+    }
+  }
+}
diff --git a/alfa-client/libs/admin/user-shared/src/index.ts b/alfa-client/libs/admin/user-shared/src/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..68d4aaf50b5a1c67e1863d432b5abf2d9d8f1bbb
--- /dev/null
+++ b/alfa-client/libs/admin/user-shared/src/index.ts
@@ -0,0 +1,3 @@
+export * from './lib/to-user-name.pipe';
+export * from './lib/user.model';
+export * from './lib/user.service';
diff --git a/alfa-client/libs/admin/settings/src/lib/user/keycloak.resource.service.spec.ts b/alfa-client/libs/admin/user-shared/src/lib/keycloak.resource.service.spec.ts
similarity index 96%
rename from alfa-client/libs/admin/settings/src/lib/user/keycloak.resource.service.spec.ts
rename to alfa-client/libs/admin/user-shared/src/lib/keycloak.resource.service.spec.ts
index 8dac4c1c0cee314cba8403dfe03cc326c2e31607..228f1b0cfaec928f6c70ec566b92d5ae3250eb25 100644
--- a/alfa-client/libs/admin/settings/src/lib/user/keycloak.resource.service.spec.ts
+++ b/alfa-client/libs/admin/user-shared/src/lib/keycloak.resource.service.spec.ts
@@ -21,14 +21,14 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { fakeAsync, tick } from '@angular/core/testing';
+import { TestBed, fakeAsync, tick } from '@angular/core/testing';
 import { faker } from '@faker-js/faker';
 import { cold } from 'jest-marbles';
+import * as resourceUtil from 'libs/tech-shared/src/lib/resource/resource.util';
 import { StateResource, createEmptyStateResource } from 'libs/tech-shared/src/lib/resource/resource.util';
 import { Dummy, createDummy } from 'libs/tech-shared/test/dummy';
 import { singleCold } from 'libs/tech-shared/test/marbles';
 import { Observable, of } from 'rxjs';
-import * as resourceUtil from '../../../../../tech-shared/src/lib/resource/resource.util';
 import { KeycloakResourceService } from './keycloak.resource.service';
 
 describe('KeycloakResourceService', () => {
@@ -40,7 +40,11 @@ describe('KeycloakResourceService', () => {
   const dummyAction: Observable<Dummy> = of(dummyObject);
 
   beforeEach(() => {
-    service = new TestResourceService();
+    TestBed.configureTestingModule({
+      providers: [TestResourceService],
+    });
+
+    service = TestBed.inject(TestResourceService);
   });
 
   describe('get', () => {
diff --git a/alfa-client/libs/admin/settings/src/lib/user/keycloak.resource.service.ts b/alfa-client/libs/admin/user-shared/src/lib/keycloak.resource.service.ts
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/user/keycloak.resource.service.ts
rename to alfa-client/libs/admin/user-shared/src/lib/keycloak.resource.service.ts
diff --git a/alfa-client/libs/admin/settings/src/lib/user/to-user-name.pipe.spec.ts b/alfa-client/libs/admin/user-shared/src/lib/to-user-name.pipe.spec.ts
similarity index 96%
rename from alfa-client/libs/admin/settings/src/lib/user/to-user-name.pipe.spec.ts
rename to alfa-client/libs/admin/user-shared/src/lib/to-user-name.pipe.spec.ts
index 799b337e15b3b6f0fcc19ded6591997786770d4d..6b7a91ae4d511cfb4d41cd29aaab6cf23a212d87 100644
--- a/alfa-client/libs/admin/settings/src/lib/user/to-user-name.pipe.spec.ts
+++ b/alfa-client/libs/admin/user-shared/src/lib/to-user-name.pipe.spec.ts
@@ -21,7 +21,7 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { createUser } from '../../../test/user/user';
+import { createUser } from '../../test/user';
 import { ToUserNamePipe } from './to-user-name.pipe';
 import { User } from './user.model';
 
diff --git a/alfa-client/libs/admin/settings/src/lib/user/to-user-name.pipe.ts b/alfa-client/libs/admin/user-shared/src/lib/to-user-name.pipe.ts
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/user/to-user-name.pipe.ts
rename to alfa-client/libs/admin/user-shared/src/lib/to-user-name.pipe.ts
diff --git a/alfa-client/libs/admin/settings/src/lib/user/user.model.ts b/alfa-client/libs/admin/user-shared/src/lib/user.model.ts
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/user/user.model.ts
rename to alfa-client/libs/admin/user-shared/src/lib/user.model.ts
diff --git a/alfa-client/libs/admin/settings/src/lib/user/user.repository.service.ts b/alfa-client/libs/admin/user-shared/src/lib/user.repository.service.ts
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/user/user.repository.service.ts
rename to alfa-client/libs/admin/user-shared/src/lib/user.repository.service.ts
diff --git a/alfa-client/libs/admin/settings/src/lib/user/user.repository.spec.ts b/alfa-client/libs/admin/user-shared/src/lib/user.repository.spec.ts
similarity index 98%
rename from alfa-client/libs/admin/settings/src/lib/user/user.repository.spec.ts
rename to alfa-client/libs/admin/user-shared/src/lib/user.repository.spec.ts
index 2638d39c766f70824339223eca9b63a9e637203d..35173f88cd008f41212d12306dcf3ac1f834a27d 100644
--- a/alfa-client/libs/admin/settings/src/lib/user/user.repository.spec.ts
+++ b/alfa-client/libs/admin/user-shared/src/lib/user.repository.spec.ts
@@ -29,7 +29,7 @@ import { TokenProvider } from '@keycloak/keycloak-admin-client/lib/client';
 import GroupRepresentation from '@keycloak/keycloak-admin-client/lib/defs/groupRepresentation';
 import MappingsRepresentation from '@keycloak/keycloak-admin-client/lib/defs/mappingsRepresentation';
 import { OAuthService } from 'angular-oauth2-oidc';
-import { createUser } from '../../../test/user/user';
+import { createUser } from '../../test/user';
 import { User } from './user.model';
 import { UserRepository } from './user.repository.service';
 
diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user.service.spec.ts b/alfa-client/libs/admin/user-shared/src/lib/user.service.spec.ts
similarity index 90%
rename from alfa-client/libs/admin/settings/src/lib/users-roles/user.service.spec.ts
rename to alfa-client/libs/admin/user-shared/src/lib/user.service.spec.ts
index 07159381722197aa92c4d32b8fc815685d16ae43..f0067611db8651f2b00ecdd8faec239f37807086 100644
--- a/alfa-client/libs/admin/settings/src/lib/users-roles/user.service.spec.ts
+++ b/alfa-client/libs/admin/user-shared/src/lib/user.service.spec.ts
@@ -24,11 +24,11 @@
 import { mock, Mock, useFromMock } from '@alfa-client/test-utils';
 import { fakeAsync, tick } from '@angular/core/testing';
 import { of } from 'rxjs';
-import { createUser } from '../../../test/user/user';
-import { User } from '../user/user.model';
-import { UserRepository } from '../user/user.repository.service';
-import * as UserUtil from '../user/user.util';
+import { createUser } from '../../test/user';
+import { User } from './user.model';
+import { UserRepository } from './user.repository.service';
 import { UserService } from './user.service';
+import * as UserUtil from './user.util';
 
 describe('UserService', () => {
   let service: UserService;
diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user.service.ts b/alfa-client/libs/admin/user-shared/src/lib/user.service.ts
similarity index 87%
rename from alfa-client/libs/admin/settings/src/lib/users-roles/user.service.ts
rename to alfa-client/libs/admin/user-shared/src/lib/user.service.ts
index b09c42bf1e685eac5ed912a4a18a822eff4941dc..8b4b5dbfba75332786ad7bf395b972f54a9c3af0 100644
--- a/alfa-client/libs/admin/settings/src/lib/users-roles/user.service.ts
+++ b/alfa-client/libs/admin/user-shared/src/lib/user.service.ts
@@ -23,10 +23,10 @@
  */
 import { Injectable } from '@angular/core';
 import { map, Observable } from 'rxjs';
-import { KeycloakResourceService } from '../user/keycloak.resource.service';
-import { User } from '../user/user.model';
-import { UserRepository } from '../user/user.repository.service';
-import { sortUsersByLastName } from '../user/user.util';
+import { KeycloakResourceService } from './keycloak.resource.service';
+import { User } from './user.model';
+import { UserRepository } from './user.repository.service';
+import { sortUsersByLastName } from './user.util';
 
 @Injectable({
   providedIn: 'root',
diff --git a/alfa-client/libs/admin/settings/src/lib/user/user.util.spec.ts b/alfa-client/libs/admin/user-shared/src/lib/user.util.spec.ts
similarity index 96%
rename from alfa-client/libs/admin/settings/src/lib/user/user.util.spec.ts
rename to alfa-client/libs/admin/user-shared/src/lib/user.util.spec.ts
index f53eb0ef92781e87e8dacd25a6fd11f2adc102b7..78afbd546e6bd7f5113452e5611f7c305e1fa228 100644
--- a/alfa-client/libs/admin/settings/src/lib/user/user.util.spec.ts
+++ b/alfa-client/libs/admin/user-shared/src/lib/user.util.spec.ts
@@ -21,7 +21,7 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { createUser } from '../../../test/user/user';
+import { createUser } from '../../test/user';
 import { User } from './user.model';
 import { sortUsersByLastName } from './user.util';
 
diff --git a/alfa-client/libs/admin/settings/src/lib/user/user.util.ts b/alfa-client/libs/admin/user-shared/src/lib/user.util.ts
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/user/user.util.ts
rename to alfa-client/libs/admin/user-shared/src/lib/user.util.ts
diff --git a/alfa-client/libs/admin/user-shared/src/test-setup.ts b/alfa-client/libs/admin/user-shared/src/test-setup.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c408668266d2fec3a9803c0ec044bc163fb987fe
--- /dev/null
+++ b/alfa-client/libs/admin/user-shared/src/test-setup.ts
@@ -0,0 +1,12 @@
+import '@testing-library/jest-dom';
+import 'jest-preset-angular/setup-jest';
+
+import { getTestBed } from '@angular/core/testing';
+import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
+
+getTestBed().resetTestEnvironment();
+getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), {
+  teardown: { destroyAfterEach: false },
+  errorOnUnknownProperties: true,
+  errorOnUnknownElements: true,
+});
diff --git a/alfa-client/libs/admin/settings/test/user/user.ts b/alfa-client/libs/admin/user-shared/test/user.ts
similarity index 95%
rename from alfa-client/libs/admin/settings/test/user/user.ts
rename to alfa-client/libs/admin/user-shared/test/user.ts
index 9537f1a6477cb54ea8e1358d4388ca19bad098d0..511f24510c38a12b07cd73b74a4a4a895df023c7 100644
--- a/alfa-client/libs/admin/settings/test/user/user.ts
+++ b/alfa-client/libs/admin/user-shared/test/user.ts
@@ -22,7 +22,7 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { faker } from '@faker-js/faker';
-import { User } from '../../src/lib/user/user.model';
+import { User } from '../src/lib/user.model';
 
 export function createUser(): User {
   return {
diff --git a/alfa-client/libs/admin/user-shared/tsconfig.json b/alfa-client/libs/admin/user-shared/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..8ca9ad312c2bd4dc364383853ddd91a2ed8f86fd
--- /dev/null
+++ b/alfa-client/libs/admin/user-shared/tsconfig.json
@@ -0,0 +1,16 @@
+{
+  "extends": "../../../tsconfig.base.json",
+  "files": [],
+  "include": [],
+  "references": [
+    {
+      "path": "./tsconfig.lib.json"
+    },
+    {
+      "path": "./tsconfig.spec.json"
+    }
+  ],
+  "compilerOptions": {
+    "target": "es2022"
+  }
+}
diff --git a/alfa-client/libs/admin/user-shared/tsconfig.lib.json b/alfa-client/libs/admin/user-shared/tsconfig.lib.json
new file mode 100644
index 0000000000000000000000000000000000000000..8441346f6e5858b2ef4235cb3c3160eda256f94a
--- /dev/null
+++ b/alfa-client/libs/admin/user-shared/tsconfig.lib.json
@@ -0,0 +1,12 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../../dist/out-tsc",
+    "declaration": true,
+    "declarationMap": true,
+    "inlineSources": true,
+    "types": []
+  },
+  "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"],
+  "include": ["src/**/*.ts"]
+}
diff --git a/alfa-client/libs/admin/user-shared/tsconfig.spec.json b/alfa-client/libs/admin/user-shared/tsconfig.spec.json
new file mode 100644
index 0000000000000000000000000000000000000000..723782fbd367969806c5992aea882773ab65af8b
--- /dev/null
+++ b/alfa-client/libs/admin/user-shared/tsconfig.spec.json
@@ -0,0 +1,12 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../../dist/out-tsc",
+    "module": "commonjs",
+    "types": ["jest", "node"],
+    "target": "ES2022",
+    "useDefineForClassFields": false
+  },
+  "files": ["src/test-setup.ts"],
+  "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "jest.config.ts"]
+}
diff --git a/alfa-client/libs/admin/user/.eslintrc.json b/alfa-client/libs/admin/user/.eslintrc.json
new file mode 100644
index 0000000000000000000000000000000000000000..fde86a84ddbd26aad5cede7be4ad4a3890fd76b3
--- /dev/null
+++ b/alfa-client/libs/admin/user/.eslintrc.json
@@ -0,0 +1,34 @@
+{
+  "extends": ["../../../.eslintrc.json"],
+  "ignorePatterns": ["!**/*"],
+  "overrides": [
+    {
+      "files": ["*.ts"],
+      "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"],
+      "rules": {
+        "@angular-eslint/directive-selector": [
+          "error",
+          {
+            "type": "attribute",
+            "prefix": "admin",
+            "style": "camelCase"
+          }
+        ],
+        "@angular-eslint/component-selector": [
+          "error",
+          {
+            "type": "element",
+            "prefix": "admin",
+            "style": "kebab-case"
+          }
+        ]
+      }
+    },
+    {
+      "files": ["*.html"],
+      "extends": ["plugin:@nx/angular-template"],
+      "rules": {}
+    }
+  ]
+}
+
diff --git a/alfa-client/libs/admin/user/README.md b/alfa-client/libs/admin/user/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..17504529dbe6f966697e245b6a53ddcb597b1bda
--- /dev/null
+++ b/alfa-client/libs/admin/user/README.md
@@ -0,0 +1,7 @@
+# user
+
+This library was generated with [Nx](https://nx.dev).
+
+## Running unit tests
+
+Run `nx test user` to execute the unit tests.
diff --git a/alfa-client/libs/admin/user/jest.config.ts b/alfa-client/libs/admin/user/jest.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f3d44acd574b48b05ac2acd515e2ceef998650c6
--- /dev/null
+++ b/alfa-client/libs/admin/user/jest.config.ts
@@ -0,0 +1,22 @@
+const esModules = ['@keycloak/keycloak-admin-client', 'url-join', 'url-template', 'camelize-ts'];
+export default {
+  displayName: 'admin-user',
+  preset: '../../../jest.preset.js',
+  setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
+  coverageDirectory: '../../../coverage/libs/admin/user',
+  transform: {
+    '^.+\\.(ts|mjs|js|html)$': [
+      'jest-preset-angular',
+      {
+        tsconfig: '<rootDir>/tsconfig.spec.json',
+        stringifyContentPathRegex: '\\.(html|svg)$',
+      },
+    ],
+  },
+  transformIgnorePatterns: [`node_modules/(?!.*\\.mjs$|${esModules.join('|')})`],
+  snapshotSerializers: [
+    'jest-preset-angular/build/serializers/no-ng-attributes',
+    'jest-preset-angular/build/serializers/ng-snapshot',
+    'jest-preset-angular/build/serializers/html-comment',
+  ],
+};
diff --git a/alfa-client/libs/admin/user/project.json b/alfa-client/libs/admin/user/project.json
new file mode 100644
index 0000000000000000000000000000000000000000..000d7263a98e42b5843d72c76ab95389ed836e06
--- /dev/null
+++ b/alfa-client/libs/admin/user/project.json
@@ -0,0 +1,22 @@
+{
+  "name": "admin-user",
+  "$schema": "../../../node_modules/nx/schemas/project-schema.json",
+  "sourceRoot": "libs/admin/user/src",
+  "prefix": "admin",
+  "projectType": "library",
+  "tags": [],
+  "targets": {
+    "lint": {
+      "executor": "@nx/eslint:lint",
+      "outputs": ["{options.outputFile}"]
+    },
+    "test": {
+      "executor": "@nx/jest:jest",
+      "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
+      "options": {
+        "tsConfig": "libs/admin/user/tsconfig.spec.json",
+        "jestConfig": "libs/admin/user/jest.config.ts"
+      }
+    }
+  }
+}
diff --git a/alfa-client/libs/admin/user/src/index.ts b/alfa-client/libs/admin/user/src/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..756b163e45acdd8eeb7dca2b01d792cdfadadd2c
--- /dev/null
+++ b/alfa-client/libs/admin/user/src/index.ts
@@ -0,0 +1,2 @@
+export * from './lib/users-roles/user-add-form/user-add-form.component';
+export * from './lib/users-roles/users-roles.component';
diff --git a/alfa-client/libs/admin/user/src/lib/user.providers.ts b/alfa-client/libs/admin/user/src/lib/user.providers.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6b5ce929c521b4c7939226434358ab77184e4717
--- /dev/null
+++ b/alfa-client/libs/admin/user/src/lib/user.providers.ts
@@ -0,0 +1,14 @@
+import { Environment, ENVIRONMENT_CONFIG } from '@alfa-client/environment-shared';
+import KcAdminClient from '@keycloak/keycloak-admin-client';
+
+export const UserProviders = [
+  {
+    provide: KcAdminClient,
+    useFactory: (env: Environment) =>
+      new KcAdminClient({
+        baseUrl: env.authServer,
+        realmName: env.realm,
+      }),
+    deps: [ENVIRONMENT_CONFIG],
+  },
+];
diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.html b/alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.component.html
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.html
rename to alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.component.html
diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.spec.ts b/alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.component.spec.ts
similarity index 85%
rename from alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.spec.ts
rename to alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.component.spec.ts
index 576257546d4d83ccd09c58131e025a640f1422d8..9e6abab7af6c7ad7633633967240034746c226cb 100644
--- a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.spec.ts
+++ b/alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.component.spec.ts
@@ -25,6 +25,7 @@ import { CommonModule } from '@angular/common';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { ReactiveFormsModule } from '@angular/forms';
 import { ButtonWithSpinnerComponent, CheckboxEditorComponent, TextEditorComponent } from '@ods/component';
+import { MockComponent } from 'ng-mocks';
 import { UserAddFormComponent } from './user-add-form.component';
 
 describe('UserAddFormComponent', () => {
@@ -33,8 +34,14 @@ describe('UserAddFormComponent', () => {
 
   beforeEach(async () => {
     await TestBed.configureTestingModule({
-      declarations: [UserAddFormComponent],
-      imports: [CommonModule, ButtonWithSpinnerComponent, ReactiveFormsModule, TextEditorComponent, CheckboxEditorComponent],
+      imports: [
+        UserAddFormComponent,
+        CommonModule,
+        ReactiveFormsModule,
+        MockComponent(ButtonWithSpinnerComponent),
+        MockComponent(TextEditorComponent),
+        MockComponent(CheckboxEditorComponent),
+      ],
     }).compileComponents();
 
     fixture = TestBed.createComponent(UserAddFormComponent);
diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.ts b/alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.component.ts
similarity index 81%
rename from alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.ts
rename to alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.component.ts
index 4537f3a1c07e2c9dddd0be24dc20ea31b21f4aea..e62729b8f391032dc1e2cc27675251702a794d91 100644
--- a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.ts
+++ b/alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.component.ts
@@ -22,12 +22,16 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { Component, inject } from '@angular/core';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { ButtonWithSpinnerComponent, CheckboxEditorComponent, TextEditorComponent } from '@ods/component';
 import { UserAddFormService } from './user-add-form.service';
 
 @Component({
   selector: 'admin-user-add-form',
   providers: [UserAddFormService],
   templateUrl: './user-add-form.component.html',
+  standalone: true,
+  imports: [FormsModule, ReactiveFormsModule, TextEditorComponent, ButtonWithSpinnerComponent, CheckboxEditorComponent],
 })
 export class UserAddFormComponent {
   formService = inject(UserAddFormService);
diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.service.ts b/alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.service.ts
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.service.ts
rename to alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.service.ts
diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-formservice.spec.ts b/alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-formservice.spec.ts
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-formservice.spec.ts
rename to alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-formservice.spec.ts
diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.html b/alfa-client/libs/admin/user/src/lib/users-roles/users-roles.component.html
similarity index 100%
rename from alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.html
rename to alfa-client/libs/admin/user/src/lib/users-roles/users-roles.component.html
diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.spec.ts b/alfa-client/libs/admin/user/src/lib/users-roles/users-roles.component.spec.ts
similarity index 91%
rename from alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.spec.ts
rename to alfa-client/libs/admin/user/src/lib/users-roles/users-roles.component.spec.ts
index 0b63c1607bc8f6fae7bb0afb00eb094e572617b6..4f8219c95ede01238172d6191c53b42a587a78c5 100644
--- a/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.spec.ts
+++ b/alfa-client/libs/admin/user/src/lib/users-roles/users-roles.component.spec.ts
@@ -21,17 +21,17 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
+import { ROUTES } from '@admin-client/shared';
 import { createStateResource } from '@alfa-client/tech-shared';
 import { Mock, mock } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { Router } from '@angular/router';
 import { ButtonWithSpinnerComponent } from '@ods/component';
 import { MailboxIconComponent, PersonIconComponent } from '@ods/system';
+import { ToUserNamePipe } from 'libs/admin/user-shared/src/lib/to-user-name.pipe';
+import { UserService } from 'libs/admin/user-shared/src/lib/user.service';
+import { createUser } from 'libs/admin/user-shared/test/user';
 import { MockComponent, MockPipe } from 'ng-mocks';
-import { ROUTES } from '../../../../shared';
-import { createUser } from '../../../test/user/user';
-import { ToUserNamePipe } from '../user/to-user-name.pipe';
-import { UserService } from './user.service';
 import { UsersRolesComponent } from './users-roles.component';
 
 describe('UsersRolesComponent', () => {
@@ -46,13 +46,13 @@ describe('UsersRolesComponent', () => {
 
   beforeEach(async () => {
     await TestBed.configureTestingModule({
-      declarations: [UsersRolesComponent],
       providers: [{ provide: UserService, useValue: userService }],
       imports: [
         MockComponent(ButtonWithSpinnerComponent),
         MockComponent(MailboxIconComponent),
         MockComponent(PersonIconComponent),
         MockPipe(ToUserNamePipe),
+        UsersRolesComponent,
       ],
     }).compileComponents();
 
diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.ts b/alfa-client/libs/admin/user/src/lib/users-roles/users-roles.component.ts
similarity index 75%
rename from alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.ts
rename to alfa-client/libs/admin/user/src/lib/users-roles/users-roles.component.ts
index 3be1adc9543d891a6bd794d0615894189821f0f9..16e5dad34bd2ab5fb2af1dfa5d0bae9ddff7cc04 100644
--- a/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.ts
+++ b/alfa-client/libs/admin/user/src/lib/users-roles/users-roles.component.ts
@@ -21,17 +21,29 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
+import { ROUTES } from '@admin-client/shared';
+import { ToUserNamePipe, User, UserService } from '@admin-client/user-shared';
 import { StateResource } from '@alfa-client/tech-shared';
+import { CommonModule } from '@angular/common';
 import { Component, inject, OnInit } from '@angular/core';
 import { Router } from '@angular/router';
+import { ButtonWithSpinnerComponent } from '@ods/component';
+import { ListComponent, ListItemComponent, MailboxIconComponent, PersonIconComponent } from '@ods/system';
 import { Observable } from 'rxjs';
-import { ROUTES } from '../../../../shared/libs/routes';
-import { User } from '../user/user.model';
-import { UserService } from './user.service';
 
 @Component({
   selector: 'admin-users-roles',
   templateUrl: './users-roles.component.html',
+  standalone: true,
+  imports: [
+    CommonModule,
+    ButtonWithSpinnerComponent,
+    ListComponent,
+    ListItemComponent,
+    MailboxIconComponent,
+    PersonIconComponent,
+    ToUserNamePipe,
+  ],
 })
 export class UsersRolesComponent implements OnInit {
   private router = inject(Router);
diff --git a/alfa-client/libs/admin/user/src/test-setup.ts b/alfa-client/libs/admin/user/src/test-setup.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c408668266d2fec3a9803c0ec044bc163fb987fe
--- /dev/null
+++ b/alfa-client/libs/admin/user/src/test-setup.ts
@@ -0,0 +1,12 @@
+import '@testing-library/jest-dom';
+import 'jest-preset-angular/setup-jest';
+
+import { getTestBed } from '@angular/core/testing';
+import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
+
+getTestBed().resetTestEnvironment();
+getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), {
+  teardown: { destroyAfterEach: false },
+  errorOnUnknownProperties: true,
+  errorOnUnknownElements: true,
+});
diff --git a/alfa-client/libs/admin/user/tsconfig.json b/alfa-client/libs/admin/user/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..8ca9ad312c2bd4dc364383853ddd91a2ed8f86fd
--- /dev/null
+++ b/alfa-client/libs/admin/user/tsconfig.json
@@ -0,0 +1,16 @@
+{
+  "extends": "../../../tsconfig.base.json",
+  "files": [],
+  "include": [],
+  "references": [
+    {
+      "path": "./tsconfig.lib.json"
+    },
+    {
+      "path": "./tsconfig.spec.json"
+    }
+  ],
+  "compilerOptions": {
+    "target": "es2022"
+  }
+}
diff --git a/alfa-client/libs/admin/user/tsconfig.lib.json b/alfa-client/libs/admin/user/tsconfig.lib.json
new file mode 100644
index 0000000000000000000000000000000000000000..464f01e6b2b218c0f70e15ac25dd8580bdc38f6e
--- /dev/null
+++ b/alfa-client/libs/admin/user/tsconfig.lib.json
@@ -0,0 +1,19 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../dist/out-tsc",
+    "target": "es2015",
+    "declaration": true,
+    "declarationMap": true,
+    "inlineSources": true,
+    "types": [],
+    "lib": ["dom", "es2018"]
+  },
+  "angularCompilerOptions": {
+    "skipTemplateCodegen": true,
+    "strictMetadataEmit": true,
+    "enableResourceInlining": true
+  },
+  "exclude": ["src/test-setup.ts", "**/*.spec.ts", "jest.config.ts"],
+  "include": ["**/*.ts"]
+}
diff --git a/alfa-client/libs/admin/user/tsconfig.spec.json b/alfa-client/libs/admin/user/tsconfig.spec.json
new file mode 100644
index 0000000000000000000000000000000000000000..e637bf83b59243f9ebc9b37842cfbf3f159bba47
--- /dev/null
+++ b/alfa-client/libs/admin/user/tsconfig.spec.json
@@ -0,0 +1,11 @@
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../../../dist/out-tsc",
+    "module": "commonjs",
+    "target": "es2016",
+    "types": ["jest", "node"]
+  },
+  "files": ["src/test-setup.ts"],
+  "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"]
+}
diff --git a/alfa-client/libs/authentication/src/index.ts b/alfa-client/libs/authentication/src/index.ts
index 1bc3bf0e46f9de1143d8940228f47bfec3cb5a66..66e83d4533b0b6a78c2d5d54cb276421de60237b 100644
--- a/alfa-client/libs/authentication/src/index.ts
+++ b/alfa-client/libs/authentication/src/index.ts
@@ -23,3 +23,4 @@
  */
 export * from './lib/authentication.module';
 export * from './lib/authentication.service';
+export * from './lib/http-unauthorized.interceptor';
diff --git a/alfa-client/tsconfig.base.json b/alfa-client/tsconfig.base.json
index 31d83c1b32d909a18934ccd5695464f05b160782..f6e9e575c23782986c485ac2912154cf9ed224a7 100644
--- a/alfa-client/tsconfig.base.json
+++ b/alfa-client/tsconfig.base.json
@@ -16,7 +16,15 @@
     "skipDefaultLibCheck": true,
     "baseUrl": ".",
     "paths": {
-      "@admin-client/admin-settings": ["libs/admin/settings/src/index.ts"],
+      "@admin-client/configuration-shared": ["libs/admin/configuration-shared/src/index.ts"],
+      "@admin-client/organisations-einheit": ["libs/admin/organisations-einheit/src/index.ts"],
+      "@admin-client/organisations-einheit-shared": ["libs/admin/organisations-einheit-shared/src/index.ts"],
+      "@admin-client/postfach": ["libs/admin/postfach/src/index.ts"],
+      "@admin-client/postfach-shared": ["libs/admin/postfach-shared/src/index.ts"],
+      "@admin-client/settings-shared": ["libs/admin/settings-shared/src/index.ts"],
+      "@admin-client/shared": ["libs/admin/shared/src/index.ts"],
+      "@admin-client/user": ["libs/admin/user/src/index.ts"],
+      "@admin-client/user-shared": ["libs/admin/user-shared/src/index.ts"],
       "@alfa-client/api-root-shared": ["libs/api-root-shared/src/index.ts"],
       "@alfa-client/app-shared": ["libs/app-shared/src/index.ts"],
       "@alfa-client/bescheid": ["libs/bescheid/src/index.ts"],