diff --git a/alfa-client/libs/bescheid-shared/src/index.ts b/alfa-client/libs/bescheid-shared/src/index.ts
index 16fde03966472be2f75f8d5f4a47fa8a21d4aa44..8a8af5864bd07257774992c864fd03fc821143b8 100644
--- a/alfa-client/libs/bescheid-shared/src/index.ts
+++ b/alfa-client/libs/bescheid-shared/src/index.ts
@@ -2,3 +2,4 @@ export * from './lib/bescheid-shared.module';
 export * from './lib/bescheid.linkrel';
 export * from './lib/bescheid.model';
 export * from './lib/bescheid.service';
+export * from './lib/document.model';
diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid.linkrel.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid.linkrel.ts
index d10b73f178585ebb0fa151c3deaed33317cdc87b..e964530ec152d458c7c979b460358c81476df685 100644
--- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.linkrel.ts
+++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.linkrel.ts
@@ -3,7 +3,8 @@ export enum BescheidLinkRel {
   UPLOAD_BESCHEID_FILE = 'uploadBescheidFile',
   UPLOAD_ATTACHMENT = 'uploadAttachment',
   UPDATE = 'update',
-  CREATE_BESCHEID_DOCUMENT = 'createBescheidDocument',
+  CREATE_DOCUMENT = 'createDocument',
+  CREATE_DOCUMENT_FROM_FILE = 'createDocumentFromFile',
   ATTACHMENTS = 'attachments',
   BESCHEID_DOCUMENT = 'bescheidDocument',
   SEND = 'send',
diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts
index 36017a1d4c3902340caa53f61d7f472a1605b781..da86ebb7e3c336964c3fd85aed986db3f8662a54 100644
--- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts
+++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts
@@ -21,6 +21,7 @@ import {
 import { Mock, mock, useFromMock } from '@alfa-client/test-utils';
 import {
   VorgangCommandService,
+  VorgangHeaderLinkRel,
   VorgangService,
   VorgangWithEingangLinkRel,
   VorgangWithEingangResource,
@@ -257,7 +258,8 @@ describe('BescheidService', () => {
     });
 
     it('should emit state resources', () => {
-      const bescheid$ = service.getBescheidDraftIfExists();
+      const bescheid$: Observable<StateResource<BescheidResource>> =
+        service.getBescheidDraftIfExists();
 
       expect(bescheid$).toBeObservable(
         cold('(ab|)', { a: createEmptyStateResource(), b: bescheidStateResource }),
@@ -561,7 +563,7 @@ describe('BescheidService', () => {
     });
 
     it('should return embedded resources', () => {
-      const attachments$ = service.getAttachments();
+      const attachments$: Observable<BinaryFileResource[]> = service.getAttachments();
 
       expect(attachments$).toBeObservable(singleColdCompleted([binaryFileResource]));
     });
@@ -589,7 +591,7 @@ describe('BescheidService', () => {
         createStateResource(binaryFile);
       service.bescheidDocumentFile$.next(binaryFileStateResource);
 
-      service.getBescheidDocumentFile().subscribe((result) => {
+      service.getBescheidDocumentFile().subscribe((result: StateResource<BinaryFileResource>) => {
         expect(result).toBe(binaryFileStateResource);
         done();
       });
@@ -1025,10 +1027,10 @@ describe('BescheidService', () => {
     });
 
     it('should return command', () => {
-      const command = createCommandStateResource();
+      const command: StateResource<CommandResource> = createCommandStateResource();
       service.deleteBescheid = jest.fn().mockReturnValue(singleCold(command));
 
-      const command$ = service.bescheidVerwerfen();
+      const command$: Observable<StateResource<CommandResource>> = service.bescheidVerwerfen();
 
       expect(command$).toBeObservable(singleCold(command));
     });
@@ -1066,4 +1068,61 @@ describe('BescheidService', () => {
       expect(service.createBescheidDocumentInProgress$.value.loading).toBeFalsy();
     });
   });
+
+  describe('getBescheidDocument', () => {
+    it('should return bescheid document', () => {
+      const documentStateResource: StateResource<DocumentResource> =
+        createStateResource(createDocumentResource());
+      service.bescheidDocument$.next(documentStateResource);
+
+      const bescheidDocument$: Observable<StateResource<DocumentResource>> =
+        service.getBescheidDocument();
+
+      expect(bescheidDocument$).toBeObservable(singleCold(documentStateResource));
+    });
+  });
+
+  describe('getEmpfaenger', () => {
+    it('should return Empfänger', () => {
+      const vorgangWithEingangResource: VorgangWithEingangResource =
+        createVorgangWithEingangResource();
+      const vorgangWithEingangStateResource: StateResource<VorgangWithEingangResource> =
+        createStateResource(vorgangWithEingangResource);
+      vorgangService.getVorgangWithEingang.mockReturnValue(of(vorgangWithEingangStateResource));
+
+      const empfaenger$: Observable<string> = service.getEmpfaenger();
+
+      expect(empfaenger$).toBeObservable(
+        singleColdCompleted(
+          `${vorgangWithEingangResource.eingang.antragsteller.vorname} ${vorgangWithEingangResource.eingang.antragsteller.nachname}`,
+        ),
+      );
+    });
+  });
+
+  describe('isPostfachConfigured', () => {
+    it('should return true', () => {
+      vorgangService.getVorgangWithEingang.mockReturnValue(
+        of(
+          createStateResource(
+            createVorgangWithEingangResource([VorgangHeaderLinkRel.POSTFACH_MAILS]),
+          ),
+        ),
+      );
+
+      const isPostfachConfigured$: Observable<boolean> = service.isPostfachConfigured();
+
+      expect(isPostfachConfigured$).toBeObservable(singleColdCompleted(true));
+    });
+
+    it('should return false', () => {
+      vorgangService.getVorgangWithEingang.mockReturnValue(
+        of(createStateResource(createVorgangWithEingangResource())),
+      );
+
+      const isPostfachConfigured$: Observable<boolean> = service.isPostfachConfigured();
+
+      expect(isPostfachConfigured$).toBeObservable(singleColdCompleted(false));
+    });
+  });
 });
diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts
index 87398ad33d8859581f6b62c41c0150233fa3ba49..2474203852ea6c55a58eb19c3844b6ce1bf43c3b 100644
--- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts
+++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts
@@ -23,10 +23,12 @@ import {
 } from '@alfa-client/tech-shared';
 import {
   VorgangCommandService,
+  VorgangHeaderLinkRel,
   VorgangService,
   VorgangWithEingangLinkRel,
   VorgangWithEingangResource,
 } from '@alfa-client/vorgang-shared';
+import { getEmpfaenger } from '@alfa-client/vorgang-shared-ui';
 import { Injectable } from '@angular/core';
 import { ResourceUri, getUrl, hasLink } from '@ngxp/rest';
 import {
@@ -236,6 +238,10 @@ export class BescheidService {
     return this.bescheidDocumentFile$.asObservable();
   }
 
+  public getBescheidDocument(): Observable<StateResource<DocumentResource>> {
+    return this.bescheidDocument$.asObservable();
+  }
+
   public loadBescheidDocument(resourceUri: ResourceUri): void {
     this.setBescheidDocumentFileLoading();
     this.loadBescheidDocumentSubscription = this.repository
@@ -403,4 +409,19 @@ export class BescheidService {
   public reloadCurrentVorgang(): void {
     this.vorgangService.reloadCurrentVorgang();
   }
+
+  public getEmpfaenger(): Observable<string> {
+    return this.vorgangService.getVorgangWithEingang().pipe(
+      filter(isLoaded),
+      map((stateResource) => stateResource.resource),
+      map(getEmpfaenger),
+    );
+  }
+
+  public isPostfachConfigured(): Observable<boolean> {
+    return this.vorgangService.getVorgangWithEingang().pipe(
+      filter(isLoaded),
+      map((stateResource) => hasLink(stateResource.resource, VorgangHeaderLinkRel.POSTFACH_MAILS)),
+    );
+  }
 }
diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid.util.spec.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid.util.spec.ts
index 755f071d49ee06d084e0f352723b14e585ba6756..a6ba05191512ec2c4ad936eb85d756dd2836dd51 100644
--- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.util.spec.ts
+++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.util.spec.ts
@@ -66,7 +66,7 @@ describe('BescheidUtil', () => {
         binaryFileResource,
       );
 
-      expect(props.linkRel).toBe(BescheidLinkRel.CREATE_BESCHEID_DOCUMENT);
+      expect(props.linkRel).toBe(BescheidLinkRel.CREATE_DOCUMENT_FROM_FILE);
     });
 
     describe('command', () => {
@@ -195,7 +195,7 @@ describe('BescheidUtil', () => {
     it('should have linkRel', () => {
       const props: CreateCommandProps = buildCreateBescheidDocumentCommandProps(bescheidResource);
 
-      expect(props.linkRel).toBe(BescheidLinkRel.CREATE_BESCHEID_DOCUMENT);
+      expect(props.linkRel).toBe(BescheidLinkRel.CREATE_DOCUMENT);
     });
 
     describe('command', () => {
diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid.util.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid.util.ts
index e3cd07a88f6b2be5932030f5ee0057fc3aec537f..ee496fe13667e8281da29458f5a698391bfc0497 100644
--- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.util.ts
+++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.util.ts
@@ -28,7 +28,7 @@ export function buildCreateBescheidDocumentFromFileProps(
 ): CreateCommandProps {
   return {
     resource: bescheid,
-    linkRel: BescheidLinkRel.CREATE_BESCHEID_DOCUMENT,
+    linkRel: BescheidLinkRel.CREATE_DOCUMENT_FROM_FILE,
     command: buildCreateBescheidDocumentFromFileCommand(binaryFile),
     snackBarMessage: EMPTY_STRING,
   };
@@ -67,7 +67,7 @@ export function buildCreateBescheidDocumentCommandProps(
 ): CreateCommandProps {
   return {
     resource,
-    linkRel: BescheidLinkRel.CREATE_BESCHEID_DOCUMENT,
+    linkRel: BescheidLinkRel.CREATE_DOCUMENT,
     command: {
       order: CommandOrder.CREATE_BESCHEID_DOCUMENT,
       body: null,
diff --git a/alfa-client/libs/bescheid-shared/src/test/document.ts b/alfa-client/libs/bescheid-shared/src/test/document.ts
index 1c88004f87bcc6b198a9ac3a453a3c9839326e1e..38fa7d022856d8c7ad33c9a5ba88ba4f0b4a3737 100644
--- a/alfa-client/libs/bescheid-shared/src/test/document.ts
+++ b/alfa-client/libs/bescheid-shared/src/test/document.ts
@@ -1,6 +1,16 @@
+import faker from '@faker-js/faker';
 import { toResource } from 'libs/tech-shared/test/resource';
-import { DocumentResource } from '../lib/document.model';
+import { Document, DocumentResource } from '../lib/document.model';
+
+export function createDocument(): Document {
+  return {
+    type: 'Bescheid',
+    fileId: faker.internet.url(),
+    nachrichtSubject: faker.datatype.string(10),
+    nachrichtText: faker.lorem.text(),
+  };
+}
 
 export function createDocumentResource(linkRel: string[] = []): DocumentResource {
-  return toResource({}, linkRel);
+  return toResource(createDocument(), linkRel);
 }
diff --git a/alfa-client/libs/postfach/src/lib/postfach-mail-button-container/postfach-mail-button-container.component.spec.ts b/alfa-client/libs/postfach/src/lib/postfach-mail-button-container/postfach-mail-button-container.component.spec.ts
index 81dbf91bfdc2657a53bbcdbc6e10089f0ffa4f24..ff10996f5a08bcb16c51b9fafc0a0b5ec736e549 100644
--- a/alfa-client/libs/postfach/src/lib/postfach-mail-button-container/postfach-mail-button-container.component.spec.ts
+++ b/alfa-client/libs/postfach/src/lib/postfach-mail-button-container/postfach-mail-button-container.component.spec.ts
@@ -21,8 +21,12 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { PostfachMailListResource, PostfachService } from '@alfa-client/postfach-shared';
+import { PostfachMailFormComponent } from '@alfa-client/postfach';
+import {
+  PostfachMailFormDialogData,
+  PostfachMailListResource,
+  PostfachService,
+} from '@alfa-client/postfach-shared';
 import {
   HasLinkPipe,
   StateResource,
@@ -32,6 +36,9 @@ import {
 import { mock } from '@alfa-client/test-utils';
 import { DialogService } from '@alfa-client/ui';
 import { VorgangHeaderLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
+import { getEmpfaenger } from '@alfa-client/vorgang-shared-ui';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import faker from '@faker-js/faker';
 import { createCommandResource } from 'libs/command-shared/test/command';
 import { createPostfachMailListResource } from 'libs/postfach-shared/test/postfach';
 import { createApiError } from 'libs/tech-shared/test/error';
@@ -41,6 +48,9 @@ import { of } from 'rxjs';
 import { PostfachMailButtonContainerComponent } from './postfach-mail-button-container.component';
 import { PostfachMailButtonComponent } from './postfach-mail-button/postfach-mail-button.component';
 
+jest.mock('@alfa-client/vorgang-shared-ui');
+const getEmpfaengerMock = getEmpfaenger as jest.Mock;
+
 describe('PostfachMailButtonContainerComponent', () => {
   let component: PostfachMailButtonContainerComponent;
   let fixture: ComponentFixture<PostfachMailButtonContainerComponent>;
@@ -173,13 +183,45 @@ describe('PostfachMailButtonContainerComponent', () => {
     });
   });
 
-  describe('getEmpfaenger', () => {
-    it('should return antragsteller name', () => {
-      const antragsteller = component.getEmpfaenger();
+  describe('buildDialogData', () => {
+    const postfachMailListStateResource: StateResource<PostfachMailListResource> =
+      createStateResource(createPostfachMailListResource());
 
-      expect(antragsteller).toEqual(
-        `${vorgang.eingang.antragsteller.vorname} ${vorgang.eingang.antragsteller.nachname}`,
+    it('should get empfänger', () => {
+      component.buildDialogData(postfachMailListStateResource);
+
+      expect(getEmpfaengerMock).toHaveBeenCalled();
+    });
+
+    it('should set empfänger', () => {
+      const empfanger: string = faker.name.firstName();
+      getEmpfaengerMock.mockReturnValue(empfanger);
+
+      const dialogData: PostfachMailFormDialogData = component.buildDialogData(
+        postfachMailListStateResource,
       );
+
+      expect(dialogData.empfaenger).toEqual(empfanger);
+    });
+
+    it('should set component', () => {
+      const dialogData = component.buildDialogData(postfachMailListStateResource);
+
+      expect(dialogData.component).toBe(PostfachMailFormComponent);
+    });
+
+    it('should set title', () => {
+      const dialogData: PostfachMailFormDialogData = component.buildDialogData(
+        postfachMailListStateResource,
+      );
+
+      expect(dialogData.title).toEqual(PostfachMailButtonContainerComponent.TITLE);
+    });
+
+    it('should set state resource', () => {
+      const dialogData = component.buildDialogData(postfachMailListStateResource);
+
+      expect(dialogData.postfachMailListStateResource).toEqual(postfachMailListStateResource);
     });
   });
 });
diff --git a/alfa-client/libs/postfach/src/lib/postfach-mail-button-container/postfach-mail-button-container.component.ts b/alfa-client/libs/postfach/src/lib/postfach-mail-button-container/postfach-mail-button-container.component.ts
index dde104c79cf00b344d836312072bf0963f96bbf1..6a4d16d49caa38d8901b8f352fded1be89bd7b59 100644
--- a/alfa-client/libs/postfach/src/lib/postfach-mail-button-container/postfach-mail-button-container.component.ts
+++ b/alfa-client/libs/postfach/src/lib/postfach-mail-button-container/postfach-mail-button-container.component.ts
@@ -21,8 +21,6 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { Component, Input } from '@angular/core';
-import { MatDialogRef } from '@angular/material/dialog';
 import { CommandResource } from '@alfa-client/command-shared';
 import {
   PostfachMailFormDialogData,
@@ -30,15 +28,12 @@ import {
   PostfachMailListResource,
   PostfachService,
 } from '@alfa-client/postfach-shared';
-import {
-  EMPTY_STRING,
-  StateResource,
-  hasError,
-  isNotNull,
-  isNotUndefined,
-} from '@alfa-client/tech-shared';
+import { StateResource, hasError, isNotNull, isNotUndefined } from '@alfa-client/tech-shared';
 import { DialogService, FixedDialogComponent } from '@alfa-client/ui';
 import { VorgangHeaderLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
+import { getEmpfaenger } from '@alfa-client/vorgang-shared-ui';
+import { Component, Input } from '@angular/core';
+import { MatDialogRef } from '@angular/material/dialog';
 import { hasLink } from '@ngxp/rest';
 import { Observable } from 'rxjs';
 import { tap } from 'rxjs/operators';
@@ -50,6 +45,8 @@ import { PostfachMailFormComponent } from '../postfach-mail-form/postfach-mail-f
   styleUrls: ['./postfach-mail-button-container.component.scss'],
 })
 export class PostfachMailButtonContainerComponent {
+  static readonly TITLE = 'Neue Nachricht';
+
   private _vorgang: VorgangWithEingangResource;
   public get vorgang(): VorgangWithEingangResource {
     return this._vorgang;
@@ -108,24 +105,14 @@ export class PostfachMailButtonContainerComponent {
     );
   }
 
-  private buildDialogData(
+  buildDialogData(
     postfachMailListStateResource: StateResource<PostfachMailListResource>,
   ): PostfachMailFormDialogData {
     return {
       component: PostfachMailFormComponent,
-      title: 'Neue Nachricht',
-      empfaenger: this.getEmpfaenger(),
+      title: PostfachMailButtonContainerComponent.TITLE,
+      empfaenger: getEmpfaenger(this.vorgang),
       postfachMailListStateResource: postfachMailListStateResource,
     };
   }
-
-  getEmpfaenger(): string {
-    return this.existsAntragsteller() ?
-        `${this.vorgang.eingang.antragsteller.vorname} ${this.vorgang.eingang.antragsteller.nachname}`
-      : EMPTY_STRING;
-  }
-
-  private existsAntragsteller(): boolean {
-    return !!this.vorgang.eingang.antragsteller;
-  }
 }
diff --git a/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/outgoing-mail/outgoing-mail.component.ts b/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/outgoing-mail/outgoing-mail.component.ts
index 9eb44a2c48f63bd3a8779a830445df2369eb1725..68f51e677db01f0005da3029089197ba2e37f4a6 100644
--- a/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/outgoing-mail/outgoing-mail.component.ts
+++ b/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/outgoing-mail/outgoing-mail.component.ts
@@ -21,10 +21,10 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { Component, Inject, Input } from '@angular/core';
 import { ON_PAGE, PostfachMailLinkRel, PostfachMailResource } from '@alfa-client/postfach-shared';
 import { StateResource } from '@alfa-client/tech-shared';
-import { VorgangResource } from '@alfa-client/vorgang-shared';
+import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
+import { Component, Inject, Input } from '@angular/core';
 
 @Component({
   selector: 'alfa-outgoing-mail',
@@ -33,7 +33,7 @@ import { VorgangResource } from '@alfa-client/vorgang-shared';
 })
 export class OutgoingMailComponent {
   @Input() postfachMail: PostfachMailResource;
-  @Input() vorgangStateResource: StateResource<VorgangResource>;
+  @Input() vorgangStateResource: StateResource<VorgangWithEingangResource>;
 
   readonly postfachNachrichtLinkRel = PostfachMailLinkRel;
 
diff --git a/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/outgoing-mail/postfach-nachricht-edit-button-container/postfach-nachricht-edit-button-container.component.spec.ts b/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/outgoing-mail/postfach-nachricht-edit-button-container/postfach-nachricht-edit-button-container.component.spec.ts
index 58fb157e90d1021e84023f057cf096017b11d4b4..a7eaeaab39408e2db221bf4156d3b812cbcfd8b6 100644
--- a/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/outgoing-mail/postfach-nachricht-edit-button-container/postfach-nachricht-edit-button-container.component.spec.ts
+++ b/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/outgoing-mail/postfach-nachricht-edit-button-container/postfach-nachricht-edit-button-container.component.spec.ts
@@ -1,20 +1,20 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { PostfachMailFormDialogData, PostfachMailResource } from '@alfa-client/postfach-shared';
-import { EMPTY_STRING, createStateResource } from '@alfa-client/tech-shared';
+import { createStateResource } from '@alfa-client/tech-shared';
 import { Mock, dispatchEventFromFixture, getMockComponent, mock } from '@alfa-client/test-utils';
 import { DialogService, OzgcloudIconComponent } from '@alfa-client/ui';
-import { Antragsteller, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
+import { getEmpfaenger } from '@alfa-client/vorgang-shared-ui';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import faker from '@faker-js/faker';
 import { createPostfachMailResource } from 'libs/postfach-shared/test/postfach';
 import { PostfachMailFormComponent } from 'libs/postfach/src/lib/postfach-mail-form/postfach-mail-form.component';
 import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
-import {
-  createAntragsteller,
-  createEingang,
-  createVorgangWithEingangResource,
-} from 'libs/vorgang-shared/test/vorgang';
+import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang';
 import { MockComponent } from 'ng-mocks';
 import { PostfachNachrichtEditButtonContainerComponent } from './postfach-nachricht-edit-button-container.component';
 
+jest.mock('@alfa-client/vorgang-shared-ui');
+const getEmpfaengerMock = getEmpfaenger as jest.Mock;
+
 describe('PostfachNachrichtEditButtonContainerComponent', () => {
   let component: PostfachNachrichtEditButtonContainerComponent;
   let fixture: ComponentFixture<PostfachNachrichtEditButtonContainerComponent>;
@@ -96,63 +96,19 @@ describe('PostfachNachrichtEditButtonContainerComponent', () => {
       expect(dialogData.postfachNachricht).toBe(postfachNachricht);
     });
 
-    it('should get Empfaenger', () => {
-      component.getEmpfaenger = jest.fn();
-
+    it('should get empfänger', () => {
       component.buildDialogData();
 
-      expect(component.getEmpfaenger).toHaveBeenCalled();
-    });
-  });
-
-  describe('getEmpfaenger', () => {
-    it('should return nachname only if exists', () => {
-      const antragsteller: Antragsteller = { ...createAntragsteller(), vorname: undefined };
-      component.vorgangStateResource = createStateResource(createWithAntragsteller(antragsteller));
-
-      const empfaenger: string = component.getEmpfaenger();
-
-      expect(empfaenger).toEqual(antragsteller.nachname);
-    });
-
-    it('should return vorname only if exists', () => {
-      const antragsteller: Antragsteller = { ...createAntragsteller(), nachname: undefined };
-      component.vorgangStateResource = createStateResource(createWithAntragsteller(antragsteller));
-
-      const empfaenger: string = component.getEmpfaenger();
-
-      expect(empfaenger).toEqual(antragsteller.vorname);
-    });
-
-    it('should return name and vorname if exists', () => {
-      const vorgangWithEingang: VorgangWithEingangResource = createVorgangWithEingangResource();
-      component.vorgangStateResource = createStateResource(vorgangWithEingang);
-
-      const empfaenger: string = component.getEmpfaenger();
-
-      expect(empfaenger).toEqual(
-        `${vorgangWithEingang.eingang.antragsteller.vorname} ${vorgangWithEingang.eingang.antragsteller.nachname}`,
-      );
+      expect(getEmpfaengerMock).toHaveBeenCalled();
     });
 
-    it('should return empty string if none exists', () => {
-      const antragsteller: Antragsteller = {
-        ...createAntragsteller(),
-        nachname: undefined,
-        vorname: undefined,
-      };
-      component.vorgangStateResource = createStateResource(createWithAntragsteller(antragsteller));
+    it('should set empfänger', () => {
+      const empfanger: string = faker.name.firstName();
+      getEmpfaengerMock.mockReturnValue(empfanger);
 
-      const empfaenger: string = component.getEmpfaenger();
+      const dialogData: PostfachMailFormDialogData = component.buildDialogData();
 
-      expect(empfaenger).toEqual(EMPTY_STRING);
+      expect(dialogData.empfaenger).toEqual(empfanger);
     });
-
-    function createWithAntragsteller(antragsteller: Antragsteller): VorgangWithEingangResource {
-      return {
-        ...createVorgangWithEingangResource(),
-        eingang: { ...createEingang(), antragsteller },
-      };
-    }
   });
 });
diff --git a/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/outgoing-mail/postfach-nachricht-edit-button-container/postfach-nachricht-edit-button-container.component.ts b/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/outgoing-mail/postfach-nachricht-edit-button-container/postfach-nachricht-edit-button-container.component.ts
index 7d1aad74943eb34874ef94577135ba5a7dd8a13c..a7ee3b38e083aa4d9a800a7420a6e7e9dfed393d 100644
--- a/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/outgoing-mail/postfach-nachricht-edit-button-container/postfach-nachricht-edit-button-container.component.ts
+++ b/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/outgoing-mail/postfach-nachricht-edit-button-container/postfach-nachricht-edit-button-container.component.ts
@@ -1,7 +1,8 @@
 import { PostfachMailFormDialogData, PostfachMailResource } from '@alfa-client/postfach-shared';
-import { EMPTY_STRING, StateResource, isNotNil } from '@alfa-client/tech-shared';
+import { StateResource } from '@alfa-client/tech-shared';
 import { DialogService } from '@alfa-client/ui';
-import { Antragsteller, VorgangWithEingang } from '@alfa-client/vorgang-shared';
+import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
+import { getEmpfaenger } from '@alfa-client/vorgang-shared-ui';
 import { Component, Input } from '@angular/core';
 import { PostfachMailFormComponent } from '../../../../../postfach-mail-form/postfach-mail-form.component';
 
@@ -12,7 +13,7 @@ import { PostfachMailFormComponent } from '../../../../../postfach-mail-form/pos
 })
 export class PostfachNachrichtEditButtonContainerComponent {
   @Input() postfachNachricht: PostfachMailResource;
-  @Input() vorgangStateResource: StateResource<VorgangWithEingang>;
+  @Input() vorgangStateResource: StateResource<VorgangWithEingangResource>;
 
   constructor(private dialogService: DialogService) {}
 
@@ -25,27 +26,7 @@ export class PostfachNachrichtEditButtonContainerComponent {
       title: 'Nachricht bearbeiten',
       component: PostfachMailFormComponent,
       postfachNachricht: this.postfachNachricht,
-      empfaenger: this.getEmpfaenger(),
+      empfaenger: getEmpfaenger(this.vorgangStateResource.resource),
     };
   }
-
-  getEmpfaenger(): string {
-    return `${this.getVorname()} ${this.getNachname()}`.trim();
-  }
-
-  private getVorname(): string {
-    return isNotNil(this.getAntragsteller()?.vorname) ?
-        this.getAntragsteller().vorname
-      : EMPTY_STRING;
-  }
-
-  private getNachname(): string {
-    return isNotNil(this.getAntragsteller()?.nachname) ?
-        this.getAntragsteller().nachname
-      : EMPTY_STRING;
-  }
-
-  private getAntragsteller(): Antragsteller {
-    return this.vorgangStateResource.resource.eingang.antragsteller;
-  }
 }
diff --git a/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/postfach-mail.component.ts b/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/postfach-mail.component.ts
index 41f9e4879ce3133551800f72fc1eabc05d7966a4..51b14d26cd1aaca7c3b93a4ed8e1bbda2d482d16 100644
--- a/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/postfach-mail.component.ts
+++ b/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/postfach-mail.component.ts
@@ -21,7 +21,6 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { Component, Inject, Input } from '@angular/core';
 import {
   ON_PAGE,
   PostfachMailLinkRel,
@@ -29,7 +28,8 @@ import {
   isIncomingMail,
 } from '@alfa-client/postfach-shared';
 import { StateResource } from '@alfa-client/tech-shared';
-import { VorgangResource } from '@alfa-client/vorgang-shared';
+import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
+import { Component, Inject, Input } from '@angular/core';
 
 @Component({
   selector: 'alfa-postfach-mail',
@@ -38,7 +38,7 @@ import { VorgangResource } from '@alfa-client/vorgang-shared';
 })
 export class PostfachMailComponent {
   @Input() postfachMail: PostfachMailResource;
-  @Input() vorgangStateResource: StateResource<VorgangResource>;
+  @Input() vorgangStateResource: StateResource<VorgangWithEingangResource>;
 
   readonly postfachNachrichtLinkRel = PostfachMailLinkRel;
 
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.spec.ts
index 0b1990b314cf37d4afefdeed405b889a38b456a2..5b082c9a1a664ffc1aa4c5e37979a2834b24f520 100644
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.spec.ts
+++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.spec.ts
@@ -4,22 +4,31 @@ import {
   BescheidResource,
   BescheidSendBy,
   BescheidService,
+  DocumentResource,
 } from '@alfa-client/bescheid-shared';
+import { BinaryFileResource } from '@alfa-client/binary-file-shared';
 import { CommandResource } from '@alfa-client/command-shared';
-import { StateResource, createStateResource, formatForDatabase } from '@alfa-client/tech-shared';
+import {
+  EMPTY_STRING,
+  StateResource,
+  createStateResource,
+  formatForDatabase,
+} from '@alfa-client/tech-shared';
 import { Mock, mock, useFromMock } from '@alfa-client/test-utils';
+import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
 import { registerLocaleData } from '@angular/common';
 import localeDe from '@angular/common/locales/de';
 import { fakeAsync, tick } from '@angular/core/testing';
 import { UntypedFormBuilder } from '@angular/forms';
 import faker from '@faker-js/faker';
-import { Resource } from '@ngxp/rest';
+import { Resource, ResourceUri } from '@ngxp/rest';
 import { cold } from 'jest-marbles';
 import { CommandLinkRel } from 'libs/command-shared/src/lib/command.linkrel';
 import { createCommandResource } from 'libs/command-shared/test/command';
 import { toResource } from 'libs/tech-shared/test/resource';
 import { of } from 'rxjs';
 import { createBescheidResource } from '../../../../../bescheid-shared/src/test/bescheid';
+import { createDocumentResource } from '../../../../../bescheid-shared/src/test/document';
 import { createBinaryFileResource } from '../../../../../binary-file-shared/test/binary-file';
 import { singleCold } from '../../../../../tech-shared/src/lib/resource/marbles';
 import { createVorgangWithEingangResource } from '../../../../../vorgang-shared/test/vorgang';
@@ -30,7 +39,7 @@ registerLocaleData(localeDe);
 describe('BescheidenFormService', () => {
   let service: BescheidenFormService;
   let bescheidService: Mock<BescheidService>;
-  const now = new Date();
+  const now: Date = new Date();
   Date.now = jest.fn().mockReturnValue(now);
 
   beforeEach(() => {
@@ -82,6 +91,8 @@ describe('BescheidenFormService', () => {
             attachments: [],
             bescheidDocument: null,
             sendBy: BescheidSendBy.NACHRICHT,
+            nachrichtSubject: '',
+            nachrichtText: '',
           },
         }),
       );
@@ -89,7 +100,7 @@ describe('BescheidenFormService', () => {
   });
 
   describe('getValue', () => {
-    let getFormValue;
+    let getFormValue: jest.Mock;
 
     beforeEach(() => {
       getFormValue = service.getFormValue = jest.fn();
@@ -103,7 +114,7 @@ describe('BescheidenFormService', () => {
     });
 
     it('should return bescheid', () => {
-      const value = service.getValue();
+      const value: Bescheid = service.getValue();
 
       expect(value).toEqual({ bewilligt: true, beschiedenAm: formatForDatabase(now) } as Bescheid);
     });
@@ -118,6 +129,8 @@ describe('BescheidenFormService', () => {
           attachments: [],
           bescheidDocument: null,
           sendBy: BescheidSendBy.NACHRICHT,
+          nachrichtSubject: '',
+          nachrichtText: '',
         }),
       );
     });
@@ -144,7 +157,7 @@ describe('BescheidenFormService', () => {
     });
 
     it('should call patch with undefined sendBy', () => {
-      const bescheidDocumentUri = faker.internet.url();
+      const bescheidDocumentUri: ResourceUri = faker.internet.url();
       service.patchValues({
         ...bescheidResource,
         sendBy: undefined,
@@ -159,6 +172,8 @@ describe('BescheidenFormService', () => {
         [BescheidenFormService.FIELD_BEWILLIGT]: String(bescheidResource.bewilligt),
         [BescheidenFormService.FIELD_SEND_BY]: BescheidSendBy.NACHRICHT,
         [BescheidenFormService.FIELD_BESCHEID_DOCUMENT]: bescheidDocumentUri,
+        [BescheidenFormService.FIELD_NACHRICHT_SUBJECT]: bescheidResource.nachrichtSubject,
+        [BescheidenFormService.FIELD_NACHRICHT_TEXT]: bescheidResource.nachrichtSubject,
       });
     });
 
@@ -242,7 +257,8 @@ describe('BescheidenFormService', () => {
 
   describe('setVorgangWithEingangResource', () => {
     it('should set vorgangWithEingangResource', () => {
-      const vorgangWithEingangResource = createVorgangWithEingangResource();
+      const vorgangWithEingangResource: VorgangWithEingangResource =
+        createVorgangWithEingangResource();
 
       service.setVorgangWithEingangResource(vorgangWithEingangResource);
 
@@ -252,10 +268,11 @@ describe('BescheidenFormService', () => {
 
   describe('getVorgangWithEingangResource', () => {
     it('should reutrn vorgangWithEingangResource', () => {
-      const vorgangWithEingangResource = createVorgangWithEingangResource();
+      const vorgangWithEingangResource: VorgangWithEingangResource =
+        createVorgangWithEingangResource();
       service.vorgangWithEingangResource = vorgangWithEingangResource;
 
-      const vorang = service.getVorgangWithEingangResource();
+      const vorang: VorgangWithEingangResource = service.getVorgangWithEingangResource();
 
       expect(vorang).toBe(vorgangWithEingangResource);
     });
@@ -263,9 +280,9 @@ describe('BescheidenFormService', () => {
 
   describe('deleteFile', () => {
     it('should emit binary file resource', (done) => {
-      const file = createBinaryFileResource();
+      const file: BinaryFileResource = createBinaryFileResource();
 
-      service.getFileDelete().subscribe((deletedFile) => {
+      service.getFileDelete().subscribe((deletedFile: BinaryFileResource) => {
         expect(deletedFile).toEqual(file);
         done();
       });
@@ -273,4 +290,35 @@ describe('BescheidenFormService', () => {
       service.deleteFile(file);
     });
   });
+
+  describe('setActiveStep', () => {
+    it('should emit step', () => {
+      service.setActiveStep(3);
+
+      expect(service.getActiveStep()).toBeObservable(singleCold(3));
+    });
+  });
+
+  describe('patchNachricht', () => {
+    it('should patch values', () => {
+      const documentResource: DocumentResource = createDocumentResource();
+
+      service.patchNachricht(documentResource);
+
+      expect(service.getValue().nachrichtSubject).toEqual(documentResource.nachrichtSubject);
+      expect(service.getValue().nachrichtText).toEqual(documentResource.nachrichtText);
+    });
+  });
+
+  describe('clearNachricht', () => {
+    it('should patch values', () => {
+      const documentResource: DocumentResource = createDocumentResource();
+
+      service.patchNachricht(documentResource);
+      service.clearNachricht();
+
+      expect(service.getValue().nachrichtSubject).toEqual(EMPTY_STRING);
+      expect(service.getValue().nachrichtText).toEqual(EMPTY_STRING);
+    });
+  });
 });
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.ts
index b044ee37f0ebced6f2c78b77780118210f1bb481..4780976bf07b0e69ee852dc317b19f6c785c1b7e 100644
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.ts
+++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.ts
@@ -4,11 +4,13 @@ import {
   BescheidResource,
   BescheidSendBy,
   BescheidService,
+  DocumentResource,
 } from '@alfa-client/bescheid-shared';
 import { BinaryFileResource } from '@alfa-client/binary-file-shared';
 import { tapOnCommandSuccessfullyDone } from '@alfa-client/command-shared';
 import {
   AbstractFormService,
+  EMPTY_STRING,
   HttpError,
   StateResource,
   asBoolean,
@@ -36,15 +38,17 @@ export class BescheidenFormService extends AbstractFormService implements OnDest
   static readonly FIELD_BESCHEID_DOCUMENT = 'bescheidDocument';
   static readonly FIELD_ATTACHMENTS = 'attachments';
   public static readonly FIELD_SEND_BY = 'sendBy';
+  static readonly FIELD_NACHRICHT_SUBJECT = 'nachrichtSubject';
+  static readonly FIELD_NACHRICHT_TEXT = 'nachrichtText';
 
   static readonly FIELD_PATH_PREFIX = 'command.body';
 
   private readonly bescheidChanges$: BehaviorSubject<Bescheid>;
-  private attachmentUpload$: Subject<StateResource<BinaryFileResource>>;
+  private attachmentUpload$: BehaviorSubject<StateResource<BinaryFileResource>>;
   private bescheidFileUpload$: Observable<StateResource<BinaryFileResource>>;
   private readonly fileDelete$: Subject<BinaryFileResource>;
 
-  private readonly activeStep: BehaviorSubject<number> = new BehaviorSubject(1);
+  private readonly activeStep$: BehaviorSubject<number> = new BehaviorSubject(1);
   readonly sendByManual: BehaviorSubject<boolean> = new BehaviorSubject(false);
 
   vorgangWithEingangResource: VorgangWithEingangResource;
@@ -67,7 +71,9 @@ export class BescheidenFormService extends AbstractFormService implements OnDest
   init(): void {
     this.formControlSubscriptions = this.subscribeToSendBy();
     this.bescheidFileUpload$ = of(createEmptyStateResource<BinaryFileResource>());
-    this.attachmentUpload$ = new Subject<StateResource<BinaryFileResource>>();
+    this.attachmentUpload$ = new BehaviorSubject<StateResource<BinaryFileResource>>(
+      createEmptyStateResource(),
+    );
     this.initializeFormChanges();
   }
 
@@ -116,6 +122,8 @@ export class BescheidenFormService extends AbstractFormService implements OnDest
       [BescheidenFormService.FIELD_BESCHEID_DOCUMENT]: bescheidDocumentUri,
       [BescheidenFormService.FIELD_SEND_BY]:
         isUndefined(bescheid.sendBy) ? BescheidSendBy.NACHRICHT : bescheid.sendBy,
+      [BescheidenFormService.FIELD_NACHRICHT_SUBJECT]: bescheid.nachrichtSubject,
+      [BescheidenFormService.FIELD_NACHRICHT_TEXT]: bescheid.nachrichtText,
     });
     bescheid.attachments.forEach((attachmentLink) =>
       (this.form.controls[BescheidenFormService.FIELD_ATTACHMENTS] as UntypedFormArray).push(
@@ -138,6 +146,8 @@ export class BescheidenFormService extends AbstractFormService implements OnDest
       [BescheidenFormService.FIELD_SEND_BY]: new UntypedFormControl(BescheidSendBy.NACHRICHT),
       [BescheidenFormService.FIELD_BESCHEID_DOCUMENT]: new UntypedFormControl(null),
       [BescheidenFormService.FIELD_ATTACHMENTS]: new UntypedFormArray([]),
+      [BescheidenFormService.FIELD_NACHRICHT_SUBJECT]: new UntypedFormControl(''),
+      [BescheidenFormService.FIELD_NACHRICHT_TEXT]: new UntypedFormControl(''),
     });
   }
 
@@ -208,11 +218,11 @@ export class BescheidenFormService extends AbstractFormService implements OnDest
   }
 
   public setActiveStep(step: number) {
-    this.activeStep.next(step);
+    this.activeStep$.next(step);
   }
 
   public getActiveStep(): Observable<number> {
-    return this.activeStep.asObservable();
+    return this.activeStep$.asObservable();
   }
 
   public clearBescheidDocumentFile(): void {
@@ -230,4 +240,21 @@ export class BescheidenFormService extends AbstractFormService implements OnDest
   public isSendByManual(): Observable<boolean> {
     return this.sendByManual.asObservable();
   }
+
+  public patchNachricht(documentResource: DocumentResource): void {
+    this.setNachrichtSubject(documentResource.nachrichtSubject);
+    this.setNachrichtText(documentResource.nachrichtText);
+  }
+
+  public clearNachricht(): void {
+    this.setNachrichtSubject(EMPTY_STRING);
+    this.setNachrichtText(EMPTY_STRING);
+  }
+
+  private setNachrichtSubject(value: string): void {
+    this.form.controls[BescheidenFormService.FIELD_NACHRICHT_SUBJECT].patchValue(value);
+  }
+  private setNachrichtText(value: string): void {
+    this.form.controls[BescheidenFormService.FIELD_NACHRICHT_TEXT].patchValue(value);
+  }
 }
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component.spec.ts
index 7f2dfcf065308069b95c77fd4a2a8dc1164482cf..ba48a240982fb6f74a545cdf7b799a4c439277da 100644
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component.spec.ts
+++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component.spec.ts
@@ -126,6 +126,14 @@ describe('VorgangDetailBescheidenResultAttachmentsComponent', () => {
 
       expect(component.existingAttachments).toEqual([attachment]);
     });
+
+    it('should reset uploaded attachments', () => {
+      component.uploadedAttachments = [createStateResource(createBinaryFileResource())];
+
+      component.loadExistingAttachments();
+
+      expect(component.uploadedAttachments).toEqual([]);
+    });
   });
 
   describe('subscribeToAttachmentUpload', () => {
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component.ts
index f4a2d246c43ae2a45efcdf5e5d21ffca38793f72..4fb7941eaf9e917d802f20e051e51194e8a88001 100644
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component.ts
+++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component.ts
@@ -43,7 +43,10 @@ export class VorgangDetailBescheidenResultAttachmentsComponent implements OnDest
     this.bescheidService
       .getAttachments()
       .pipe(first())
-      .subscribe((attachments) => (this.existingAttachments = attachments));
+      .subscribe((attachments) => {
+        this.uploadedAttachments = [];
+        this.existingAttachments = attachments;
+      });
   }
 
   subscribeToAttachmentUpload() {
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..44cf270aac5fb6dbb0e7fcef8505e1af8c43a68d
--- /dev/null
+++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.html
@@ -0,0 +1,20 @@
+<h1>Neue Nachricht</h1>
+<p *ngIf="empfaenger$ | async as empfaenger" data-test-id="bescheid-nachricht-empfaenger">
+  An: {{ empfaenger }}
+</p>
+<div [formGroup]="form">
+  <!-- TODO: neue Komponente oder stylen? -->
+  <ozgcloud-text-editor
+    [formControlName]="formServiceClass.FIELD_NACHRICHT_SUBJECT"
+    label="Betreff"
+  >
+  </ozgcloud-text-editor>
+
+  <!-- TODO: neue Komponente oder stylen? -->
+  <ozgcloud-textarea-editor
+    [formControlName]="formServiceClass.FIELD_NACHRICHT_TEXT"
+    label="Text"
+    class="message-editor"
+  >
+  </ozgcloud-textarea-editor>
+</div>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1f6e11aa735e90c470e1f8e7a0a334ffe1f7e464
--- /dev/null
+++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.spec.ts
@@ -0,0 +1,135 @@
+import { BescheidService, DocumentResource } from '@alfa-client/bescheid-shared';
+import {
+  createEmptyStateResource,
+  createErrorStateResource,
+  createStateResource,
+  StateResource,
+} from '@alfa-client/tech-shared';
+import { getElementFromFixture } from '@alfa-client/test-utils';
+import { TextAreaEditorComponent, TextEditorComponent } from '@alfa-client/ui';
+import { registerLocaleData } from '@angular/common';
+import localeDe from '@angular/common/locales/de';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms';
+import { MatIcon } from '@angular/material/icon';
+import { MatIconTestingModule } from '@angular/material/icon/testing';
+import faker from '@faker-js/faker';
+import { Mock, mock, useFromMock } from 'libs/test-utils/src/lib/mocking';
+import { OzgcloudSvgIconComponent } from 'libs/ui/src/lib/ui/ozgcloud-svgicon/ozgcloud-svgicon.component';
+import { MockComponent } from 'ng-mocks';
+import { EMPTY, of } from 'rxjs';
+import { createDocumentResource } from '../../../../../../../bescheid-shared/src/test/document';
+import { singleColdCompleted } from '../../../../../../../tech-shared/src/lib/resource/marbles';
+import { getDataTestIdOf } from '../../../../../../../tech-shared/test/data-test';
+import { createApiError } from '../../../../../../../tech-shared/test/error';
+import { BescheidenFormService } from '../../bescheiden.formservice';
+import { VorgangDetailBescheidenResultNachrichtComponent } from './vorgang-detail-bescheiden-result-nachricht.component';
+
+registerLocaleData(localeDe);
+
+describe('VorgangDetailBescheidenResultNachrichtComponent', () => {
+  let component: VorgangDetailBescheidenResultNachrichtComponent;
+  let fixture: ComponentFixture<VorgangDetailBescheidenResultNachrichtComponent>;
+
+  let bescheidService: Mock<BescheidService>;
+  let formService: BescheidenFormService;
+
+  const bescheidNachrichtEmpfaengerElement: string = getDataTestIdOf(
+    'bescheid-nachricht-empfaenger',
+  );
+
+  beforeEach(async () => {
+    bescheidService = mock(BescheidService);
+    formService = new BescheidenFormService(new UntypedFormBuilder(), useFromMock(bescheidService));
+
+    await TestBed.configureTestingModule({
+      imports: [ReactiveFormsModule, MatIconTestingModule],
+      declarations: [
+        VorgangDetailBescheidenResultNachrichtComponent,
+        MatIcon,
+        MockComponent(OzgcloudSvgIconComponent),
+        MockComponent(TextEditorComponent),
+        MockComponent(TextAreaEditorComponent),
+      ],
+      providers: [
+        {
+          provide: BescheidService,
+          useValue: bescheidService,
+        },
+        {
+          provide: BescheidenFormService,
+          useValue: formService,
+        },
+      ],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(VorgangDetailBescheidenResultNachrichtComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+
+  describe('render', () => {
+    it('should render Nachrichtenempfänger', () => {
+      const empfaenger: string = `${faker.name.firstName()} ${faker.name.lastName()}`;
+      bescheidService.getEmpfaenger.mockReturnValue(of(empfaenger));
+      component.ngOnInit();
+
+      fixture.detectChanges();
+
+      const element = getElementFromFixture(fixture, bescheidNachrichtEmpfaengerElement);
+      expect(element).toBeInstanceOf(HTMLElement);
+    });
+
+    it('should not render Nachrichtenempfänger', () => {
+      bescheidService.getEmpfaenger.mockReturnValue(EMPTY);
+      component.ngOnInit();
+
+      fixture.detectChanges();
+
+      const element = getElementFromFixture(fixture, bescheidNachrichtEmpfaengerElement);
+      expect(element).not.toBeInstanceOf(HTMLElement);
+    });
+  });
+
+  describe('ngOnInit', () => {
+    it('should set Nachrichtenempfänger', () => {
+      const empfaenger: string = `${faker.name.firstName()} ${faker.name.lastName()}`;
+      bescheidService.getEmpfaenger.mockReturnValue(of(empfaenger));
+
+      component.ngOnInit();
+
+      expect(component.empfaenger$).toBeObservable(singleColdCompleted(empfaenger));
+    });
+  });
+
+  describe('set bescheidDocumentStateResource', () => {
+    beforeEach(() => {
+      formService.patchNachricht = jest.fn();
+    });
+
+    it('should patch form', () => {
+      const documentStateResource: StateResource<DocumentResource> =
+        createStateResource(createDocumentResource());
+
+      component.bescheidDocumentStateResource = documentStateResource;
+
+      expect(formService.patchNachricht).toHaveBeenCalledWith(documentStateResource.resource);
+    });
+
+    it('should not patch form if document not loaded', () => {
+      component.bescheidDocumentStateResource = createEmptyStateResource();
+
+      expect(formService.patchNachricht).not.toHaveBeenCalled();
+    });
+
+    it('should not patch form if document loaded with error', () => {
+      component.bescheidDocumentStateResource = createErrorStateResource(createApiError());
+
+      expect(formService.patchNachricht).not.toHaveBeenCalled();
+    });
+  });
+});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cddc36969c17d7bf279a4fbc21a329184f6697a1
--- /dev/null
+++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.ts
@@ -0,0 +1,33 @@
+import { BescheidService, DocumentResource } from '@alfa-client/bescheid-shared';
+import { StateResource } from '@alfa-client/tech-shared';
+import { Component, Input, OnInit } from '@angular/core';
+import { FormGroup } from '@angular/forms';
+import { Observable } from 'rxjs';
+import { BescheidenFormService } from '../../bescheiden.formservice';
+
+@Component({
+  selector: 'alfa-vorgang-detail-bescheiden-result-nachricht',
+  templateUrl: './vorgang-detail-bescheiden-result-nachricht.component.html',
+})
+export class VorgangDetailBescheidenResultNachrichtComponent implements OnInit {
+  @Input() set bescheidDocumentStateResource(stateResource: StateResource<DocumentResource>) {
+    if (stateResource.loaded && !stateResource.error) {
+      this.formService.patchNachricht(stateResource.resource);
+    }
+  }
+
+  empfaenger$: Observable<string>;
+  form: FormGroup;
+
+  readonly formServiceClass = BescheidenFormService;
+
+  constructor(
+    private readonly bescheidService: BescheidService,
+    private readonly formService: BescheidenFormService,
+  ) {}
+
+  ngOnInit(): void {
+    this.empfaenger$ = this.bescheidService.getEmpfaenger();
+    this.form = this.formService.form;
+  }
+}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.html
index 37eba57a64494c02f0e535b7869af0c558a7b6ad..73a4f5ecf28582a26586bed9eb2f36928ad14635 100644
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.html
+++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.html
@@ -1,6 +1,10 @@
 <section
   class="w-full overflow-auto rounded-xl bg-background-100"
-  *ngIf="{ activeStep: activeStep$ | async, sendByManual: sendByManual$ | async } as wizardData"
+  *ngIf="{
+    activeStep: activeStep$ | async,
+    sendByManual: sendByManual$ | async,
+    isPostfachConfigured: isPostfachConfigured$ | async
+  } as wizardData"
 >
   <div class="p-4 text-base font-bold text-primary-600">Bescheid</div>
   <div class="p-4" data-test-id="bescheid-status-text">
@@ -13,10 +17,22 @@
     ></alfa-vorgang-detail-bescheiden-result-status>
   </div>
 
+  <div class="p-4">
+    <alfa-vorgang-detail-bescheiden-result-nachricht
+      *ngIf="
+        !wizardData.sendByManual && wizardData.activeStep === 3 && wizardData.isPostfachConfigured
+      "
+      [bescheidDocumentStateResource]="bescheidDocument$ | async"
+      data-test-id="bescheid-nachricht-an-antragsteller"
+    ></alfa-vorgang-detail-bescheiden-result-nachricht>
+  </div>
+
   <div class="p-4" data-test-id="bescheid-status-dokument">
     <alfa-vorgang-detail-bescheiden-result-dokument
       *ngIf="
-        wizardData.activeStep === 2 || (wizardData.activeStep === 3 && wizardData.sendByManual)
+        wizardData.activeStep === 2 ||
+        (wizardData.activeStep === 3 &&
+          (wizardData.sendByManual || wizardData.isPostfachConfigured))
       "
       data-test-id="bescheid-document"
       [bescheidDraftStateResource]="bescheidDraftStateResource$ | async"
@@ -30,7 +46,9 @@
   <div class="p-4" data-test-id="bescheid-status-attachments">
     <alfa-vorgang-detail-bescheiden-result-attachments
       *ngIf="
-        wizardData.activeStep === 2 || (wizardData.activeStep === 3 && wizardData.sendByManual)
+        wizardData.activeStep === 2 ||
+        (wizardData.activeStep === 3 &&
+          (wizardData.sendByManual || wizardData.isPostfachConfigured))
       "
       data-test-id="bescheid-attachments"
     ></alfa-vorgang-detail-bescheiden-result-attachments>
@@ -45,9 +63,23 @@
         data-test-id="save-and-send-button"
         [stateResource]="saveAndSendInProgress$ | async"
         text="Antrag bescheiden und speichern"
-        (clickEmitter)="saveAndSend(bescheidDraftStateResource.resource)"
+        (clickEmitter)="saveAndSendManually(bescheidDraftStateResource.resource)"
       ></ozgcloud-button-with-spinner>
     </ng-container>
     <!-- -->
   </div>
+  <ng-container
+    *ngIf="
+      wizardData.activeStep === 3 && !wizardData.sendByManual && wizardData.isPostfachConfigured
+    "
+  >
+    <ng-container *ngIf="bescheidDraftStateResource$ | async as bescheidDraftStateResource">
+      <ozgcloud-button-with-spinner
+        data-test-id="send-button"
+        [stateResource]="saveAndSendInProgress$ | async"
+        text="Bescheid senden"
+        (clickEmitter)="saveAndSendWithNachricht(bescheidDraftStateResource.resource)"
+      ></ozgcloud-button-with-spinner>
+    </ng-container>
+  </ng-container>
 </section>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.spec.ts
index dbeb408f302266d9b445bf55313a5bab97fe6772..22134382ba9806adda95c4d3bc65ba2950519dac 100644
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.spec.ts
+++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.spec.ts
@@ -4,6 +4,8 @@ import { StateResource, createStateResource } from '@alfa-client/tech-shared';
 import {
   Mock,
   dispatchEventFromFixture,
+  existsAsHtmlElement,
+  getElementFromFixture,
   mock,
   notExistsAsHtmlElement,
 } from '@alfa-client/test-utils';
@@ -18,6 +20,7 @@ import { BehaviorSubject, first, of } from 'rxjs';
 import { BescheidenFormService } from '../bescheiden.formservice';
 import { VorgangDetailBescheidenResultAttachmentsComponent } from './vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component';
 import { VorgangDetailBescheidenResultDokumentComponent } from './vorgang-detail-bescheiden-result-dokument/vorgang-detail-bescheiden-result-dokument.component';
+import { VorgangDetailBescheidenResultNachrichtComponent } from './vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component';
 import { VorgangDetailBescheidenResultStatusComponent } from './vorgang-detail-bescheiden-result-status/vorgang-detail-bescheiden-result-status.component';
 import { VorgangDetailBescheidenResultComponent } from './vorgang-detail-bescheiden-result.component';
 
@@ -32,6 +35,8 @@ describe('VorgangDetailBescheidenResultComponent', () => {
   const bescheidDocument: string = getDataTestIdOf('bescheid-document');
   const bescheidAttachments: string = getDataTestIdOf('bescheid-attachments');
   const saveAndSendButton: string = getDataTestIdOf('save-and-send-button');
+  const sendButton: string = getDataTestIdOf('send-button');
+  const nachrichtAntragstellerComponent = getDataTestIdOf('bescheid-nachricht-an-antragsteller');
 
   beforeEach(async () => {
     bescheidService = mock(BescheidService);
@@ -46,6 +51,7 @@ describe('VorgangDetailBescheidenResultComponent', () => {
         MockComponent(VorgangDetailBescheidenResultDokumentComponent),
         MockComponent(VorgangDetailBescheidenResultAttachmentsComponent),
         MockComponent(OzgcloudButtonWithSpinnerComponent),
+        MockComponent(VorgangDetailBescheidenResultNachrichtComponent),
       ],
       providers: [
         {
@@ -68,6 +74,109 @@ describe('VorgangDetailBescheidenResultComponent', () => {
     expect(component).toBeTruthy();
   });
 
+  describe('render Nachricht component', () => {
+    it('should render', () => {
+      formService.getActiveStep.mockReturnValue(of(3));
+      formService.isSendByManual.mockReturnValue(of(false));
+      bescheidService.isPostfachConfigured.mockReturnValue(of(true));
+      component.ngOnInit();
+      fixture.detectChanges();
+
+      const element = getElementFromFixture(fixture, nachrichtAntragstellerComponent);
+
+      expect(element).toBeInstanceOf(HTMLElement);
+    });
+
+    it.each([1, 2])('should not render in step %d', (step) => {
+      formService.getActiveStep.mockReturnValue(of(step));
+      formService.isSendByManual.mockReturnValue(of(false));
+      bescheidService.isPostfachConfigured.mockReturnValue(of(true));
+      component.ngOnInit();
+      fixture.detectChanges();
+
+      const element = getElementFromFixture(fixture, nachrichtAntragstellerComponent);
+
+      expect(element).not.toBeInstanceOf(HTMLElement);
+    });
+
+    it('should not render if send by manual', () => {
+      formService.getActiveStep.mockReturnValue(of(3));
+      formService.isSendByManual.mockReturnValue(of(true));
+      bescheidService.isPostfachConfigured.mockReturnValue(of(true));
+      component.ngOnInit();
+      fixture.detectChanges();
+
+      const element = getElementFromFixture(fixture, nachrichtAntragstellerComponent);
+
+      expect(element).not.toBeInstanceOf(HTMLElement);
+    });
+
+    it('should not render if postfach not configured', () => {
+      formService.getActiveStep.mockReturnValue(of(3));
+      formService.isSendByManual.mockReturnValue(of(false));
+      bescheidService.isPostfachConfigured.mockReturnValue(of(false));
+      component.ngOnInit();
+      fixture.detectChanges();
+
+      const element = getElementFromFixture(fixture, nachrichtAntragstellerComponent);
+
+      expect(element).not.toBeInstanceOf(HTMLElement);
+    });
+  });
+
+  describe('render send button', () => {
+    it('should render', () => {
+      formService.getActiveStep.mockReturnValue(of(3));
+      formService.isSendByManual.mockReturnValue(of(false));
+      bescheidService.isPostfachConfigured.mockReturnValue(of(true));
+      bescheidService.getBescheidDraft.mockReturnValue(
+        of(createStateResource(createBescheidResource())),
+      );
+      component.ngOnInit();
+      fixture.detectChanges();
+
+      const element = getElementFromFixture(fixture, sendButton);
+
+      expect(element).toBeInstanceOf(HTMLElement);
+    });
+
+    it.each([1, 2])('should not render in step %d', (step) => {
+      formService.getActiveStep.mockReturnValue(of(step));
+      formService.isSendByManual.mockReturnValue(of(false));
+      bescheidService.isPostfachConfigured.mockReturnValue(of(true));
+      component.ngOnInit();
+      fixture.detectChanges();
+
+      const element = getElementFromFixture(fixture, sendButton);
+
+      expect(element).not.toBeInstanceOf(HTMLElement);
+    });
+
+    it('should not render if send by manual', () => {
+      formService.getActiveStep.mockReturnValue(of(3));
+      formService.isSendByManual.mockReturnValue(of(true));
+      bescheidService.isPostfachConfigured.mockReturnValue(of(true));
+      component.ngOnInit();
+      fixture.detectChanges();
+
+      const element = getElementFromFixture(fixture, sendButton);
+
+      expect(element).not.toBeInstanceOf(HTMLElement);
+    });
+
+    it('should not render if postfach not configured', () => {
+      formService.getActiveStep.mockReturnValue(of(3));
+      formService.isSendByManual.mockReturnValue(of(false));
+      bescheidService.isPostfachConfigured.mockReturnValue(of(false));
+      component.ngOnInit();
+      fixture.detectChanges();
+
+      const element = getElementFromFixture(fixture, sendButton);
+
+      expect(element).not.toBeInstanceOf(HTMLElement);
+    });
+  });
+
   describe('ngOnInit', () => {
     it('should call service to get bescheid document file', () => {
       component.ngOnInit();
@@ -81,6 +190,12 @@ describe('VorgangDetailBescheidenResultComponent', () => {
       expect(bescheidService.getBescheidDraft).toHaveBeenCalled();
     });
 
+    it('should call service to get bescheid document', () => {
+      component.ngOnInit();
+
+      expect(bescheidService.getBescheidDocument).toHaveBeenCalled();
+    });
+
     it('should call formservice to get active step', () => {
       component.ngOnInit();
 
@@ -110,6 +225,12 @@ describe('VorgangDetailBescheidenResultComponent', () => {
 
       expect(bescheidService.getCreateBescheidDocumentInProgress).toHaveBeenCalled();
     });
+
+    it('should should call service to check if postfach is configured', () => {
+      component.ngOnInit();
+
+      expect(bescheidService.isPostfachConfigured).toHaveBeenCalled();
+    });
   });
 
   describe('deleteBescheidDocument', () => {
@@ -120,7 +241,7 @@ describe('VorgangDetailBescheidenResultComponent', () => {
     });
   });
 
-  describe('save and send', () => {
+  describe('save and send manually', () => {
     const bescheidDraft: BescheidResource = createBescheidResource();
     const bescheidStateResource: StateResource<BescheidResource> =
       createStateResource(bescheidDraft);
@@ -131,20 +252,48 @@ describe('VorgangDetailBescheidenResultComponent', () => {
       component.activeStep$ = of(3);
     });
 
+    it('should clear nachricht', () => {
+      component.doSaveAndSend = jest.fn();
+
+      component.saveAndSendManually(bescheidDraft);
+
+      expect(formService.clearNachricht).toHaveBeenCalled();
+    });
+
     it('should call component on event dispatch', () => {
-      component.saveAndSend = jest.fn();
+      component.saveAndSendManually = jest.fn();
 
       fixture.detectChanges();
 
       dispatchEventFromFixture(fixture, saveAndSendButton, 'clickEmitter');
 
-      expect(component.saveAndSend).toHaveBeenCalledWith(bescheidDraft);
+      expect(component.saveAndSendManually).toHaveBeenCalledWith(bescheidDraft);
     });
 
     it('should call do save and send', () => {
       component.doSaveAndSend = jest.fn();
 
-      component.saveAndSend(bescheidDraft);
+      component.saveAndSendManually(bescheidDraft);
+
+      expect(component.doSaveAndSend).toHaveBeenCalled();
+    });
+  });
+
+  describe('save and send with Nachricht', () => {
+    const bescheidDraft: BescheidResource = createBescheidResource();
+    const bescheidStateResource: StateResource<BescheidResource> =
+      createStateResource(bescheidDraft);
+
+    beforeEach(() => {
+      component.bescheidDraftStateResource$ = of(bescheidStateResource);
+      component.sendByManual$ = of(true);
+      component.activeStep$ = of(3);
+    });
+
+    it('should call do save and send', () => {
+      component.doSaveAndSend = jest.fn();
+
+      component.saveAndSendWithNachricht(bescheidDraft);
 
       expect(component.doSaveAndSend).toHaveBeenCalled();
     });
@@ -236,6 +385,16 @@ describe('VorgangDetailBescheidenResultComponent', () => {
 
       notExistsAsHtmlElement(fixture, bescheidDocument);
     });
+
+    it('should be visible in step 3 when postfach is configured', () => {
+      component.sendByManual$ = of(false);
+      component.activeStep$ = of(3);
+      component.isPostfachConfigured$ = of(true);
+
+      fixture.detectChanges();
+
+      existsAsHtmlElement(fixture, bescheidDocument);
+    });
   });
 
   describe('bescheid attachments', () => {
@@ -264,6 +423,16 @@ describe('VorgangDetailBescheidenResultComponent', () => {
 
       notExistsAsHtmlElement(fixture, bescheidAttachments);
     });
+
+    it('should be visible in step 3 when postfach is configured', () => {
+      component.sendByManual$ = of(false);
+      component.activeStep$ = of(3);
+      component.isPostfachConfigured$ = of(true);
+
+      fixture.detectChanges();
+
+      existsAsHtmlElement(fixture, bescheidAttachments);
+    });
   });
 
   describe('update and bescheiden', () => {
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.ts
index 9833b6c7e244803f50b9234a4f94d51fbb3c749d..fdc71f20a21b61d3a14f5942f3eebca547b02214 100644
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.ts
+++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.ts
@@ -1,8 +1,8 @@
 import {
   Bescheid,
   BescheidResource,
-  BescheidSendBy,
   BescheidService,
+  DocumentResource,
   UploadFileInProgress,
 } from '@alfa-client/bescheid-shared';
 import { BinaryFileResource } from '@alfa-client/binary-file-shared';
@@ -34,6 +34,10 @@ export class VorgangDetailBescheidenResultComponent implements OnInit {
   public bescheidDocumentFile$: Observable<StateResource<BinaryFileResource>> = of(
     createEmptyStateResource<BinaryFileResource>(),
   );
+  public bescheidDocument$: Observable<StateResource<DocumentResource>> = of(
+    createEmptyStateResource<DocumentResource>(),
+  );
+  public isPostfachConfigured$: Observable<boolean>;
 
   public saveAndSendInProgress$: Observable<StateResource<CommandResource>> = of(
     createEmptyStateResource<CommandResource>(),
@@ -47,8 +51,6 @@ export class VorgangDetailBescheidenResultComponent implements OnInit {
     loading: false,
   });
 
-  public readonly bescheidSendBy = BescheidSendBy;
-
   constructor(
     private bescheidService: BescheidService,
     public formService: BescheidenFormService,
@@ -61,6 +63,8 @@ export class VorgangDetailBescheidenResultComponent implements OnInit {
       this.bescheidService.getUploadBescheidDocumentInProgress();
     this.createBescheidDocumentInProgress$ =
       this.bescheidService.getCreateBescheidDocumentInProgress();
+    this.bescheidDocument$ = this.bescheidService.getBescheidDocument();
+    this.isPostfachConfigured$ = this.bescheidService.isPostfachConfigured();
 
     this.activeStep$ = this.formService.getActiveStep();
     this.bescheid$ = this.formService.getBescheidChanges();
@@ -71,7 +75,12 @@ export class VorgangDetailBescheidenResultComponent implements OnInit {
     this.bescheidService.deleteBescheidDocument();
   }
 
-  public saveAndSend(bescheidDraft: BescheidResource): void {
+  public saveAndSendManually(bescheidDraft: BescheidResource): void {
+    this.formService.clearNachricht();
+    this.saveAndSendInProgress$ = this.doSaveAndSend(bescheidDraft);
+  }
+
+  public saveAndSendWithNachricht(bescheidDraft: BescheidResource): void {
     this.saveAndSendInProgress$ = this.doSaveAndSend(bescheidDraft);
   }
 
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.html
index e8490d92e2cbda9e40ae3f6bc21fc9cf588bb012..0755d974036beed033db585e4fd65985ee013ce9 100644
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.html
+++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.html
@@ -1,7 +1,7 @@
 <ng-container *ngIf="bescheidDraftStateResource.resource as bescheidDraft">
   <div class="mt-4">
     <ods-button
-      *ngIf="bescheidDraft | hasLink: bescheidLinkRel.CREATE_BESCHEID_DOCUMENT"
+      *ngIf="bescheidDraft | hasLink: bescheidLinkRel.CREATE_DOCUMENT"
       class="w-72"
       [isLoading]="(createBescheidDocumentInProgress$ | async).loading"
       (click)="createBescheidDocument()"
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.spec.ts
index b94bbe86ca5a3901bc1e93e27b15a82fee5743a8..d0d6bb3254e4c5129d251bd0033eaca8980ea505 100644
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.spec.ts
+++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.spec.ts
@@ -60,7 +60,7 @@ describe('VorgangDetailBescheidenBescheidAutomatischErstellenComponent', () => {
   describe('create bescheid document button', () => {
     beforeEach(() => {
       component.bescheidDraftStateResource = createStateResource(
-        createBescheidResource([BescheidLinkRel.CREATE_BESCHEID_DOCUMENT]),
+        createBescheidResource([BescheidLinkRel.CREATE_DOCUMENT]),
       );
 
       fixture.detectChanges();
@@ -81,7 +81,7 @@ describe('VorgangDetailBescheidenBescheidAutomatischErstellenComponent', () => {
 
     it('should be visible if link is present', () => {
       component.bescheidDraftStateResource = createStateResource(
-        createBescheidResource([BescheidLinkRel.CREATE_BESCHEID_DOCUMENT]),
+        createBescheidResource([BescheidLinkRel.CREATE_DOCUMENT]),
       );
       fixture.detectChanges();
 
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail.module.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail.module.ts
index 603b542986bb209433147bf5f1842ae454dc2a38..cc4c4cd8027dd41689d7937837fa7992023ab248 100644
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail.module.ts
+++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail.module.ts
@@ -77,6 +77,7 @@ import { VorgangDetailBackButtonComponent } from './vorgang-detail-page/vorgang-
 import { VorgangDetailBescheidenFormErrorComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-form-error/vorgang-detail-bescheiden-form-error.component';
 import { VorgangDetailBescheidenResultAttachmentsComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component';
 import { VorgangDetailBescheidenResultDokumentComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-dokument/vorgang-detail-bescheiden-result-dokument.component';
+import { VorgangDetailBescheidenResultNachrichtComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component';
 import { VorgangDetailBescheidenResultStatusComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-status/vorgang-detail-bescheiden-result-status.component';
 import { VorgangDetailBescheidenResultComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component';
 import { VorgangDetailBescheidenStepButtonComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-button/vorgang-detail-bescheiden-step-button.component';
@@ -190,6 +191,7 @@ const routes: Routes = [
     VorgangDetailBescheidenResultAttachmentsComponent,
     VorgangDetailBescheidenFormErrorComponent,
     VorgangDetailBescheidenBescheidVersendenComponent,
+    VorgangDetailBescheidenResultNachrichtComponent,
   ],
   exports: [
     VorgangDetailAntragstellerComponent,
diff --git a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-util.spec.ts b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-util.spec.ts
index 4501f9dd24a6281055e309eb04f5c211161f2e8e..41d1e94862b57a486bf7129415a25a1906781dc3 100644
--- a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-util.spec.ts
+++ b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-util.spec.ts
@@ -21,9 +21,19 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { Vorgang } from '@alfa-client/vorgang-shared';
-import { createVorgangResource } from 'libs/vorgang-shared/test/vorgang';
-import { getAktenzeichenText, VORGANG_KEIN_AKTENZEICHEN_ZUGEWIESEN } from './vorgang-util';
+import { EMPTY_STRING } from '@alfa-client/tech-shared';
+import { Antragsteller, Vorgang, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
+import {
+  createAntragsteller,
+  createEingang,
+  createVorgangResource,
+  createVorgangWithEingangResource,
+} from 'libs/vorgang-shared/test/vorgang';
+import {
+  VORGANG_KEIN_AKTENZEICHEN_ZUGEWIESEN,
+  getAktenzeichenText,
+  getEmpfaenger,
+} from './vorgang-util';
 
 describe('Vorgang Util', () => {
   describe('getAktenzeichenText', () => {
@@ -43,4 +53,58 @@ describe('Vorgang Util', () => {
       expect(result).toEqual(VORGANG_KEIN_AKTENZEICHEN_ZUGEWIESEN);
     });
   });
+
+  describe('getEmpfaenger', () => {
+    it('should return nachname only if exists', () => {
+      const antragsteller: Antragsteller = { ...createAntragsteller(), vorname: undefined };
+      const vorgangWithEingangResource: VorgangWithEingangResource =
+        createWithAntragsteller(antragsteller);
+
+      const empfaenger: string = getEmpfaenger(vorgangWithEingangResource);
+
+      expect(empfaenger).toEqual(antragsteller.nachname);
+    });
+
+    it('should return vorname only if exists', () => {
+      const antragsteller: Antragsteller = { ...createAntragsteller(), nachname: undefined };
+      const vorgangWithEingangResource: VorgangWithEingangResource =
+        createWithAntragsteller(antragsteller);
+
+      const empfaenger: string = getEmpfaenger(vorgangWithEingangResource);
+
+      expect(empfaenger).toEqual(antragsteller.vorname);
+    });
+
+    it('should return name and vorname if exists', () => {
+      const vorgangWithEingangResource: VorgangWithEingangResource =
+        createVorgangWithEingangResource();
+
+      const empfaenger: string = getEmpfaenger(vorgangWithEingangResource);
+
+      expect(empfaenger).toEqual(
+        `${vorgangWithEingangResource.eingang.antragsteller.vorname} ${vorgangWithEingangResource.eingang.antragsteller.nachname}`,
+      );
+    });
+
+    it('should return empty string if none exists', () => {
+      const antragsteller: Antragsteller = {
+        ...createAntragsteller(),
+        nachname: undefined,
+        vorname: undefined,
+      };
+      const vorgangWithEingangResource: VorgangWithEingangResource =
+        createWithAntragsteller(antragsteller);
+
+      const empfaenger: string = getEmpfaenger(vorgangWithEingangResource);
+
+      expect(empfaenger).toEqual(EMPTY_STRING);
+    });
+
+    function createWithAntragsteller(antragsteller: Antragsteller): VorgangWithEingangResource {
+      return {
+        ...createVorgangWithEingangResource(),
+        eingang: { ...createEingang(), antragsteller },
+      };
+    }
+  });
 });
diff --git a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-util.ts b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-util.ts
index 97b7913c19a9f5b76b209c105dcb9934a797ff52..5d90f07fe9a46e9c19ab44294aab7ffb32f7138b 100644
--- a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-util.ts
+++ b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-util.ts
@@ -21,10 +21,23 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { Vorgang } from '@alfa-client/vorgang-shared';
+import { EMPTY_STRING } from '@alfa-client/tech-shared';
+import { Vorgang, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
 
 export const VORGANG_KEIN_AKTENZEICHEN_ZUGEWIESEN = 'kein Aktenzeichen';
 
 export function getAktenzeichenText(vorgang: Vorgang): string {
   return vorgang.aktenzeichen || VORGANG_KEIN_AKTENZEICHEN_ZUGEWIESEN;
 }
+
+export function getEmpfaenger(vorgangWithEingangResource: VorgangWithEingangResource): string {
+  return `${getVorname(vorgangWithEingangResource)} ${getNachname(vorgangWithEingangResource)}`.trim();
+}
+
+function getVorname(vorgangWithEingangResource: VorgangWithEingangResource): string {
+  return vorgangWithEingangResource.eingang.antragsteller?.vorname ?? EMPTY_STRING;
+}
+
+function getNachname(vorgangWithEingangResource: VorgangWithEingangResource): string {
+  return vorgangWithEingangResource.eingang.antragsteller?.nachname ?? EMPTY_STRING;
+}
diff --git a/alfa-server/src/main/resources/application-local.yml b/alfa-server/src/main/resources/application-local.yml
index 6e08f1833de6c4fa25055aaa545745fb6a1a46bb..961e14d6fa3f44e0a1382e4b26c924e1fe0fd2d2 100644
--- a/alfa-server/src/main/resources/application-local.yml
+++ b/alfa-server/src/main/resources/application-local.yml
@@ -26,6 +26,10 @@ ozgcloud:
     url: http://localhost:9092
     profile-template: /api/userProfiles/%s
     search-template: /api/userProfiles/?searchBy={searchBy}
+  xdomea:
+    behoerdenschluessel: "behoerdenschluesselWirdÜberHelmGesetzt"
+    behoerdenschluesselUri: "behoerdenschluesselUriWirdÜberHelmGesetzt"
+    behoerdenschluesselVersion: "behoerdenschluesselVersionWirdÜberHelmGesetzt"
 
 keycloak:
   auth-server-url: http://localhost:8088
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java
index 365d7e268306e05d8025a8a9e7c6937186804d53..8ebf3d388dd200bb2d9ee9a5d57f817ab4a3817a 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java
@@ -23,12 +23,15 @@ public class BescheidModelAssembler implements RepresentationModelAssembler<Besc
 	static final String REL_UPLOAD_ATTACHMENT = "uploadAttachment";
 	static final String REL_ATTACHMENTS = "attachments";
 	static final String REL_UPDATE = "update";
-	static final String REL_CREATE_BESCHEID_DOCUMENT = "createBescheidDocument";
+	static final String REL_CREATE_DOCUMENT = "createDocument";
+	static final String REL_CREATE_DOCUMENT_FROM_FILE = "createDocumentFromFile";
 	static final String REL_BESCHEID_DOCUMENT = "bescheidDocument";
 	static final String REL_SEND = "send";
 
 	private static final Predicate<Bescheid> HAS_ATTACHMENTS = bescheid -> !bescheid.getAttachments().isEmpty();
 
+	private final BescheidService bescheidService;
+
 	@Override
 	public EntityModel<Bescheid> toModel(Bescheid bescheid) {
 		var selfLink = linkTo(methodOn(BescheidController.class).getDraft(bescheid.getVorgangId()));
@@ -49,7 +52,9 @@ public class BescheidModelAssembler implements RepresentationModelAssembler<Besc
 				.ifMatch(HAS_ATTACHMENTS)
 				.addLink(attachmentsLink.withRel(REL_ATTACHMENTS))
 				.addLink(createCommandLink.withRel(REL_UPDATE))
-				.addLink(createCommandLink.withRel(REL_CREATE_BESCHEID_DOCUMENT))
+				.ifMatch(bescheidService::canCreateBescheidDocumentAutomatically)
+				.addLink(createCommandLink.withRel(REL_CREATE_DOCUMENT))
+				.addLink(createCommandLink.withRel(REL_CREATE_DOCUMENT_FROM_FILE))
 				.addLink(createCommandLink.withRel(REL_SEND))
 				.buildModel();
 	}
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java
index c68d00855d06ecfe745b0d0d63f6c0435eea804d..52a882303b0466a417fa37894702a4a49bf655e8 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java
@@ -8,6 +8,7 @@ import org.springframework.stereotype.Service;
 import de.ozgcloud.alfa.common.GrpcUtil;
 import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub;
 import de.ozgcloud.bescheid.GrpcBescheid;
+import de.ozgcloud.bescheid.GrpcBescheidManagerConfigRequest;
 import de.ozgcloud.bescheid.GrpcGetBescheidDraftRequest;
 import de.ozgcloud.bescheid.GrpcGetBescheidDraftResponse;
 import net.devh.boot.grpc.client.inject.GrpcClient;
@@ -35,4 +36,9 @@ class BescheidRemoteService {
 	Optional<GrpcBescheid> getBescheidFromResponse(GrpcGetBescheidDraftResponse response) {
 		return response.hasBescheid() ? Optional.of(response.getBescheid()) : Optional.empty();
 	}
+
+	public boolean canCreateBescheidDocument() {
+		var response = bescheidServiceStub.getConfig(GrpcBescheidManagerConfigRequest.newBuilder().build());
+		return response.hasFeatures() && response.getFeatures().getCanCreateBescheidDocument();
+	}
 }
\ No newline at end of file
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java
index 67bef19968599583c09c5ab5ecde6b241aed3a4d..5d8bbe22a333e181203dd2b445c5d38a0f51da2a 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java
@@ -15,4 +15,8 @@ public class BescheidService {
 	public Optional<Bescheid> getBescheidDraft(String vorgangId) {
 		return remoteService.getBescheidDraft(vorgangId);
 	}
+
+	public boolean canCreateBescheidDocumentAutomatically() {
+		return remoteService.canCreateBescheidDocument();
+	}
 }
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java
index 78d288a3afb3324f1a9c60a9cc9ab07608f5e4df..450d840af3c37898c155029886b6241e1220f679 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java
@@ -2,6 +2,7 @@ package de.ozgcloud.alfa.bescheid;
 
 import static de.ozgcloud.alfa.bescheid.BescheidModelAssembler.*;
 import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
 
 import java.util.Collections;
 
@@ -9,11 +10,12 @@ import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.NullAndEmptySource;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
 import org.mockito.Spy;
 import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.IanaLinkRelations;
 import org.springframework.hateoas.Link;
-import org.springframework.hateoas.LinkRelation;
 import org.springframework.web.util.UriTemplate;
 
 import de.ozgcloud.alfa.common.command.CommandController;
@@ -22,8 +24,12 @@ import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
 class BescheidModelAssemblerTest {
 
 	@Spy
+	@InjectMocks
 	private BescheidModelAssembler assembler;
 
+	@Mock
+	private BescheidService bescheidService;
+
 	@Nested
 	class TestToModel {
 
@@ -88,10 +94,29 @@ class BescheidModelAssemblerTest {
 		}
 
 		@Test
-		void shouldHaveCreateBescheidDocumentLink() {
+		void shouldHaveCreateDocumentLink() {
+			when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(true);
+
 			var model = callToModel();
 
-			assertThat(model.getLink(REL_CREATE_BESCHEID_DOCUMENT)).isPresent().get().extracting(Link::getHref)
+			assertThat(model.getLink(REL_CREATE_DOCUMENT)).isPresent().get().extracting(Link::getHref)
+					.isEqualTo(createCommandLink());
+		}
+
+		@Test
+		void shoulNotdHaveCreateDocumentLink() {
+			when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(false);
+
+			var model = callToModel();
+
+			assertThat(model.getLink(REL_CREATE_DOCUMENT)).isEmpty();
+		}
+
+		@Test
+		void shouldHaveCreateDocumentFromFileLink() {
+			var model = callToModel();
+
+			assertThat(model.getLink(REL_CREATE_DOCUMENT_FROM_FILE)).isPresent().get().extracting(Link::getHref)
 					.isEqualTo(createCommandLink());
 		}
 
@@ -111,16 +136,6 @@ class BescheidModelAssemblerTest {
 					.isEqualTo(String.format("%s/%s", DocumentController.PATH, BescheidTestFactory.BESCHEID_DOCUMENT));
 		}
 
-		@Test
-		void shouldHaveOnlyExpectedLinks() {
-			var model = callToModel();
-
-			assertThat(model.getLinks()).extracting(Link::getRel).containsExactlyInAnyOrder(
-					IanaLinkRelations.SELF, LinkRelation.of(REL_DELETE), LinkRelation.of(REL_UPLOAD_BESCHEID_FILE),
-					LinkRelation.of(REL_UPLOAD_ATTACHMENT), LinkRelation.of(REL_ATTACHMENTS), LinkRelation.of(REL_UPDATE),
-					LinkRelation.of(REL_CREATE_BESCHEID_DOCUMENT), LinkRelation.of(REL_BESCHEID_DOCUMENT), LinkRelation.of(REL_SEND));
-		}
-
 		@Test
 		void shouldHaveSendLink() {
 			var model = callToModel();
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java
index 8c06cc6275761009a474a91a10488a3aa9ac6143..1a60e85c321546fc174228b0be968448b882e74e 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java
@@ -14,6 +14,8 @@ import org.mockito.Spy;
 
 import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
 import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub;
+import de.ozgcloud.bescheid.GrpcBescheidManagerConfigRequest;
+import de.ozgcloud.bescheid.GrpcBescheidManagerConfigResponse;
 import de.ozgcloud.bescheid.GrpcGetBescheidDraftRequest;
 import de.ozgcloud.bescheid.GrpcGetBescheidDraftResponse;
 
@@ -119,4 +121,53 @@ class BescheidRemoteServiceTest {
 		}
 	}
 
+	@Nested
+	class TestCanCreateBescheidDocument {
+
+		private final GrpcBescheidManagerConfigRequest request = GrpcBescheidManagerConfigRequestTestFactory.create();
+		private final GrpcBescheidManagerConfigResponse respone = GrpcBescheidManagerConfigResponseTestFactory.create();
+
+		@BeforeEach
+		void setUp() {
+			when(bescheidServiceStub.getConfig(request)).thenReturn(respone);
+		}
+
+		@Test
+		void shouldCallRemoteService() {
+			service.canCreateBescheidDocument();
+
+			verify(bescheidServiceStub).getConfig(request);
+		}
+
+		@Test
+		void shouldReturnTrue() {
+			var canCreate = service.canCreateBescheidDocument();
+
+			assertThat(canCreate).isTrue();
+		}
+
+		@Test
+		void shouldReturnFalseIfNoFeaturesAvailable() {
+			when(bescheidServiceStub.getConfig(request)).thenReturn(GrpcBescheidManagerConfigResponse.newBuilder().build());
+
+			var canCreate = service.canCreateBescheidDocument();
+
+			assertThat(canCreate).isFalse();
+		}
+
+		@Test
+		void shouldReturnFalseIfFeatureDisabled() {
+			var respones = GrpcBescheidManagerConfigResponseTestFactory.createBuilder()
+					.setFeatures(GrpcBescheidManagerFeaturesTestFactory.createBuilder()
+							.setCanCreateBescheidDocument(false)
+							.build())
+					.build();
+			when(bescheidServiceStub.getConfig(request)).thenReturn(respones);
+
+			var canCreate = service.canCreateBescheidDocument();
+
+			assertThat(canCreate).isFalse();
+		}
+	}
+
 }
\ No newline at end of file
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java
index 6241bdce4c6a7c514c9e6273a7235d11736156ba..53b89afb965f0068dc6559753069634a0bac69ee 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java
@@ -7,6 +7,8 @@ import java.util.Optional;
 
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
@@ -41,4 +43,25 @@ class BescheidServiceTest {
 			assertThat(result).isEqualTo(remoteServiceResult);
 		}
 	}
+
+	@Nested
+	class TestCanCreateBescheidDocumentAutomatically {
+
+		@Test
+		void shouldCallRemoteService() {
+			service.canCreateBescheidDocumentAutomatically();
+
+			verify(remoteService).canCreateBescheidDocument();
+		}
+
+		@ParameterizedTest
+		@ValueSource(booleans = { true, false })
+		void shouldRetrun(boolean canCreateBescheidDocument) {
+			when(remoteService.canCreateBescheidDocument()).thenReturn(canCreateBescheidDocument);
+
+			var canCreateAutomatically = service.canCreateBescheidDocumentAutomatically();
+
+			assertThat(canCreateAutomatically).isEqualTo(canCreateBescheidDocument);
+		}
+	}
 }
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigRequestTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..b3b7518632401a74dadba71ea91a0da1b09bfd61
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigRequestTestFactory.java
@@ -0,0 +1,14 @@
+package de.ozgcloud.alfa.bescheid;
+
+import de.ozgcloud.bescheid.GrpcBescheidManagerConfigRequest;
+
+public class GrpcBescheidManagerConfigRequestTestFactory {
+
+	public static GrpcBescheidManagerConfigRequest create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcBescheidManagerConfigRequest.Builder createBuilder() {
+		return GrpcBescheidManagerConfigRequest.newBuilder();
+	}
+}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..72a9bcb5fe4267782c78acf48703c9f580e66a5c
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java
@@ -0,0 +1,14 @@
+package de.ozgcloud.alfa.bescheid;
+
+import de.ozgcloud.bescheid.GrpcBescheidManagerConfigResponse;
+
+public class GrpcBescheidManagerConfigResponseTestFactory {
+
+	public static GrpcBescheidManagerConfigResponse create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcBescheidManagerConfigResponse.Builder createBuilder() {
+		return GrpcBescheidManagerConfigResponse.newBuilder().setFeatures(GrpcBescheidManagerFeaturesTestFactory.create());
+	}
+}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerFeaturesTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerFeaturesTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..fc745ca20b8507af338b860735958df1e828640a
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerFeaturesTestFactory.java
@@ -0,0 +1,16 @@
+package de.ozgcloud.alfa.bescheid;
+
+import de.ozgcloud.bescheid.GrpcBescheidManagerFeatures;
+
+public class GrpcBescheidManagerFeaturesTestFactory {
+
+	public static final boolean CAN_CREATE_BESCHEID = true;
+
+	public static GrpcBescheidManagerFeatures create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcBescheidManagerFeatures.Builder createBuilder() {
+		return GrpcBescheidManagerFeatures.newBuilder().setCanCreateBescheidDocument(CAN_CREATE_BESCHEID);
+	}
+}
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/VersionTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/VersionTypeBuilder.java
index 6e6924f1e9c77d72a6dc8e18aed2bdea3d604a07..3937b36d4eb85deb773eac2dcd0d1cad63a098c7 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/VersionTypeBuilder.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/VersionTypeBuilder.java
@@ -13,7 +13,7 @@ import de.xoev.xdomea.VersionType;
 public class VersionTypeBuilder {
 	public static final String VERSION_NUMMER = "1";
 	public static final String DATEI_FORMAT_LIST_URI = "urn:xoev-de:xdomea:codeliste:dateiformat";
-	public static final String LIST_VERSION_ID = "vCBzR";
+	public static final String LIST_VERSION_ID = "2.0";
 	private OzgFile ozgFile;
 	private ZonedDateTime createdAt;
 	private String ersteller;
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java
index 63ace13435d4cdd1a6fbbc0abbbbb77d398668a0..ae734f35808d7cff6c55d85f30070b136539630f 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java
@@ -72,18 +72,7 @@ class XdomeaNachrichtBuilder {
 	public AbgabeAbgabe0401 build() {
 		addVorgangDokumente();
 		addVorgangChangeHistory();
-
-		var abgabeType = new AbgabeAbgabe0401();
-		abgabeType.setKopf(kopf);
-		abgabeType.getSchriftgutobjekt().add(createSchriftgutobjekt());
-		return abgabeType;
-	}
-
-	private Schriftgutobjekt createSchriftgutobjekt() {
-		var schriftgutobjekt = new Schriftgutobjekt();
-		schriftgutobjekt.setVorgang(vorgang);
-		schriftgutobjekt.setAkte(aktenzeichen);
-		return schriftgutobjekt;
+		return createAbgabeType();
 	}
 
 	void addVorgangDokumente() {
@@ -96,4 +85,24 @@ class XdomeaNachrichtBuilder {
 	void addVorgangChangeHistory() {
 		historie.forEach(vorgang.getHistorienProtokollInformation()::add);
 	}
+
+	AbgabeAbgabe0401 createAbgabeType() {
+		var abgabeType = new AbgabeAbgabe0401();
+		abgabeType.setKopf(kopf);
+		abgabeType.getSchriftgutobjekt().add(createSchriftgutobjektVorgang());
+		abgabeType.getSchriftgutobjekt().add(createSchriftgutobjektAkte());
+		return abgabeType;
+	}
+
+	private Schriftgutobjekt createSchriftgutobjektVorgang() {
+		var schriftgutobjekt = new Schriftgutobjekt();
+		schriftgutobjekt.setVorgang(vorgang);
+		return schriftgutobjekt;
+	}
+
+	private Schriftgutobjekt createSchriftgutobjektAkte() {
+		var schriftgutobjekt = new Schriftgutobjekt();
+		schriftgutobjekt.setAkte(aktenzeichen);
+		return schriftgutobjekt;
+	}
 }
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaProperties.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaProperties.java
index c2f59b1d50bca5d9902a5bc6defec49015edc1a3..b6b91bf3b14188ba000c8e797374e7753b0d5740 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaProperties.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaProperties.java
@@ -1,5 +1,7 @@
 package de.ozgcloud.alfa.export;
 
+import jakarta.validation.constraints.NotNull;
+
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Configuration;
 
@@ -15,5 +17,10 @@ public class XdomeaProperties {
 	/**
 	 * xdomea Behoerdenschluessel.
 	 */
+	@NotNull
 	private String behoerdenschluessel;
+	@NotNull
+	private String behoerdenschluesselUri;
+	@NotNull
+	private String behoerdenschluesselVersion;
 }
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/kommentar/DokumentTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/kommentar/DokumentTypeBuilder.java
index 2e36dd77eb1da1e8f721b66d5e2d74c86484ee2a..26ca34e45be143fbd7aa2d46c5cd21f223416835 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/kommentar/DokumentTypeBuilder.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/kommentar/DokumentTypeBuilder.java
@@ -1,26 +1,17 @@
 package de.ozgcloud.alfa.kommentar;
 
-import de.ozgcloud.alfa.common.DateConverter;
-import de.ozgcloud.alfa.common.PrimaerdokumentTypeBuilder;
-import de.ozgcloud.alfa.common.UUIDConverter;
 import java.util.Collections;
 import java.util.List;
 
 import de.ozgcloud.alfa.common.AnlageDokumentTypeBuilder;
+import de.ozgcloud.alfa.common.DateConverter;
 import de.ozgcloud.alfa.common.IdentifikationObjektTypeBuilder;
 import de.ozgcloud.alfa.common.file.OzgFile;
 import de.xoev.xdomea.AnlageDokumentType;
 import de.xoev.xdomea.DokumentType;
-import de.xoev.xdomea.FormatType;
 import de.xoev.xdomea.HistorienProtokollInformationType;
-import de.xoev.xdomea.IdentifikationObjektType;
-import de.xoev.xdomea.VersionType;
-import java.util.Collections;
-import java.util.List;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.lang3.StringUtils;
 
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 class DokumentTypeBuilder {
@@ -85,5 +76,4 @@ class DokumentTypeBuilder {
 		return this.authorFullName + "; " + this.organisationseinheitenID;
 	}
 
-
 }
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KopfCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KopfCreator.java
index a31903a23072ed69eac7f8537ea16171d052e36a..e5c2cddfa66a67517f7cc0f24d7c384be37dac22 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KopfCreator.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KopfCreator.java
@@ -20,9 +20,6 @@ import lombok.RequiredArgsConstructor;
 @Component
 class KopfCreator {
 
-	static final String BEHOERDENSCHLUSSEL_LIST_URI = "urn:de:bund:destatis:bevoelkerungsstatistik:schluessel:rs";
-	static final String BEHOERDENSCHLUSSEL_LIST_VERSION_ID = "2023-11-30";
-
 	static final String NACHRICHTENTYP_CODE_TYPE_LIST_URI = "urn:xoev-de:xdomea:codeliste:nachrichtentyp";
 	static final String NACHRICHTENTYP_CODE_TYPE_LIST_VERSION_ID = "2.0";
 	static final String NACHRICHTENTYP_ABGABE_ABGABE_TYPE_CODE = "0401";
@@ -78,8 +75,8 @@ class KopfCreator {
 	Code createBehoerdenschlussen() {
 		var behoerdenschlussel = new Code();
 		behoerdenschlussel.setCode(xDomeaProperties.getBehoerdenschluessel());
-		behoerdenschlussel.setListURI(BEHOERDENSCHLUSSEL_LIST_URI);
-		behoerdenschlussel.setListVersionID(BEHOERDENSCHLUSSEL_LIST_VERSION_ID);
+		behoerdenschlussel.setListURI(xDomeaProperties.getBehoerdenschluesselUri());
+		behoerdenschlussel.setListVersionID(xDomeaProperties.getBehoerdenschluesselVersion());
 		return behoerdenschlussel;
 	}
 
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/VersionTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/VersionTypeBuilderTest.java
index cfa67b0f0f45dff3c9881a3a64a7b05876d69a37..219cca4fdeb0a561cf52a66fd6af6414fcc2fd3f 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/VersionTypeBuilderTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/VersionTypeBuilderTest.java
@@ -173,6 +173,13 @@ class VersionTypeBuilderTest {
 			assertThat(dateiformatCode.getListURI()).isEqualTo(VersionTypeBuilder.DATEI_FORMAT_LIST_URI);
 		}
 
+		@Test
+		void shouldHaveListVersionID() {
+			var dateiformatCode = builder.createDateiformatCodeType();
+
+			assertThat(dateiformatCode.getListVersionID()).isEqualTo(VersionTypeBuilder.LIST_VERSION_ID);
+		}
+
 		@Test
 		void shouldGetXdomeaCode() {
 			builder.createDateiformatCodeType();
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilderTest.java
index f7fda37ca90273d24630868b4b1a940ec32b9e31..5e7b4ea241d987d8713cab382e833fde766882cb 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilderTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilderTest.java
@@ -1,13 +1,19 @@
 package de.ozgcloud.alfa.export;
 
 import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
 
 import java.util.List;
 
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
+import org.mockito.Spy;
 
 import de.ozgcloud.alfa.common.HistorienProtokollInformationTypeTestFactory;
 import de.ozgcloud.alfa.vorgang.VorgangTypeTestFactory;
+import de.xoev.xdomea.AbgabeAbgabe0401;
+import de.xoev.xdomea.AkteType;
 import de.xoev.xdomea.DokumentType;
 import de.xoev.xdomea.HistorienProtokollInformationType;
 import de.xoev.xdomea.NkAbgabeType;
@@ -15,76 +21,139 @@ import de.xoev.xdomea.VorgangType;
 
 class XdomeaNachrichtBuilderTest {
 
-	private final NkAbgabeType kopfType = NkAbgabeTypeTestFactory.create();
 	private final VorgangType vorgangType = VorgangTypeTestFactory.create();
-	private final List<DokumentType> representations = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create());
-	private final List<DokumentType> attachments = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create());
-	private final List<HistorienProtokollInformationType> historie = List.of(HistorienProtokollInformationTypeTestFactory.create(),
-			HistorienProtokollInformationTypeTestFactory.create());
-	private final List<DokumentType> kommentare = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create());
-	private final List<DokumentType> postfachMails = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create());
+	@Spy
 	private final XdomeaNachrichtBuilder builder = XdomeaNachrichtBuilder.builder().withVorgang(vorgangType);
 
-	@Test
-	void shoulAddOneSchriftgutobjekt() {
-		var abgabeType = builder.build();
+	@Nested
+	class TestBuild {
+		private final AbgabeAbgabe0401 expectedAbgabe = AbgabeAbgabe0401TestFactory.create();
 
-		assertThat(abgabeType.getSchriftgutobjekt()).size().isEqualTo(1);
-	}
+		@BeforeEach
+		void setUpMock() {
+			doReturn(expectedAbgabe).when(builder).createAbgabeType();
+		}
 
-	@Test
-	void shouldSetVorgang() {
-		var abgabeType = builder.build();
+		@Test
+		void shouldCallAddVorgangDokumente() {
+			builder.build();
 
-		assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang()).isEqualTo(vorgangType);
-	}
+			verify(builder).addVorgangDokumente();
+		}
 
-	@Test
-	void shouldSetKopf() {
-		var abgabeType = builder.withKopf(kopfType).build();
+		@Test
+		void shouldCallAddVorgangChangeHistory() {
+			builder.build();
 
-		assertThat(abgabeType.getKopf()).isEqualTo(kopfType);
-	}
+			verify(builder).addVorgangChangeHistory();
+		}
 
-	@Test
-	void shouldAddRepresentations() {
-		var abgabeType = builder.withRepresentations(representations).build();
+		@Test
+		void shouldCallCreateAbgabeType() {
+			builder.build();
 
-		assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang().getDokument()).isEqualTo(representations);
-	}
+			verify(builder).createAbgabeType();
+		}
 
-	@Test
-	void shouldAddAttachments() {
-		var abgabeType = builder.withAttachments(attachments).build();
+		@Test
+		void shouldReturnAbgabeType() {
+			var abgabeType = builder.build();
 
-		assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang().getDokument()).isEqualTo(attachments);
+			assertThat(abgabeType).isEqualTo(expectedAbgabe);
+		}
 	}
 
-	@Test
-	void shouldAddHistorie() {
-		var abgabeType = builder.withHistorie(historie).build();
+	@Nested
+	class TestCreateAbgabeType {
+		private final NkAbgabeType kopfType = NkAbgabeTypeTestFactory.create();
+		private final AkteType akte = AkteTypeTestFactory.create();
 
-		assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang().getHistorienProtokollInformation()).isEqualTo(historie);
-	}
+		@Test
+		void shouldHaveKopf() {
+			var abgabeType = builder.withKopf(kopfType).createAbgabeType();
+
+			assertThat(abgabeType.getKopf()).isEqualTo(kopfType);
+		}
 
-	@Test
-	void shouldNotAddHistorie() {
-		var abgabeType = builder.build();
+		@Test
+		void shoulAddTwoSchriftgutobjekt() {
+			var abgabeType = builder.withAktenzeichen(akte).createAbgabeType();
+
+			assertThat(abgabeType.getSchriftgutobjekt()).size().isEqualTo(2);
+		}
+
+		@Test
+		void shouldHaveVorgangSchriftgutObjekt() {
+			var abgabeType = builder.createAbgabeType();
+
+			assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang()).isEqualTo(vorgangType);
+		}
+
+		@Test
+		void shouldHaveAkteSchriftgutObjekt() {
+			var abgabeType = builder.withAktenzeichen(akte).createAbgabeType();
+
+			assertThat(abgabeType.getSchriftgutobjekt().get(1).getAkte()).isEqualTo(akte);
+		}
 
-		assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang().getHistorienProtokollInformation()).isEmpty();
 	}
 
-	@Test
-	void shouldAddKommentare() {
-		var abgabeType = builder.withKommentare(kommentare).build();
+	@Nested
+	class TestAddVorgangDokumente {
+		private final List<DokumentType> representations = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create());
+		private final List<DokumentType> attachments = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create());
+		private final List<DokumentType> kommentare = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create());
+		private final List<DokumentType> postfachMails = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create());
+
+		@Test
+		void shouldAddRepresentations() {
+			builder.withRepresentations(representations).addVorgangDokumente();
+
+			assertThat(vorgangType.getDokument()).isEqualTo(representations);
+		}
+
+		@Test
+		void shouldAddAttachments() {
+			builder.withAttachments(attachments).addVorgangDokumente();
+
+			assertThat(vorgangType.getDokument()).isEqualTo(attachments);
+		}
+
+		@Test
+		void shouldAddKommentare() {
+			builder.withKommentare(kommentare).addVorgangDokumente();
+
+			assertThat(vorgangType.getDokument()).isEqualTo(kommentare);
+		}
+
+		@Test
+		void shouldAddPostfachMails() {
+			builder.withPostfachMails(postfachMails).addVorgangDokumente();
+
+			assertThat(vorgangType.getDokument()).isEqualTo(postfachMails);
+		}
 
-		assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang().getDokument()).isEqualTo(kommentare);
 	}
 
-	@Test
-	void shouldAddPostfachMails() {
-		var abgabeType = builder.withPostfachMails(postfachMails).build();
+	@Nested
+	class TestAddVorgangChangeHistory {
+
+		private final List<HistorienProtokollInformationType> historie = List.of(HistorienProtokollInformationTypeTestFactory.create(),
+				HistorienProtokollInformationTypeTestFactory.create());
+
+		@Test
+		void shouldAddHistorie() {
+			builder.withHistorie(historie).addVorgangChangeHistory();
 
-		assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang().getDokument()).isEqualTo(postfachMails);
+			assertThat(vorgangType.getHistorienProtokollInformation()).isEqualTo(historie);
+		}
+
+		@Test
+		void shouldNotAddHistorie() {
+			builder.addVorgangChangeHistory();
+
+			assertThat(vorgangType.getHistorienProtokollInformation()).isEmpty();
+		}
 	}
+
 }
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KopfCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KopfCreatorTest.java
index 1bce187cf0a5b5374f18273a56d90000bff3a931..b602ccaf432568741a7f089b2ebccbb8fb1f1791 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KopfCreatorTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KopfCreatorTest.java
@@ -1,6 +1,7 @@
 package de.ozgcloud.alfa.vorgang;
 
 import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
 import java.time.ZoneOffset;
@@ -14,6 +15,8 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
 
+import com.thedeanda.lorem.LoremIpsum;
+
 import de.ozgcloud.alfa.common.DateConverter;
 import de.ozgcloud.alfa.export.XdomeaProperties;
 import de.xoev.xdomea.BehoerdenkennungType;
@@ -214,7 +217,7 @@ class KopfCreatorTest {
 
 		@Test
 		void shouldSetCode() {
-			var expectedBehoerdenschluessel = "123456789";
+			var expectedBehoerdenschluessel = LoremIpsum.getInstance().getWords(1);
 			when(xDomeaProperties.getBehoerdenschluessel()).thenReturn(expectedBehoerdenschluessel);
 
 			var behoerdenschlussel = creator.createBehoerdenschlussen();
@@ -224,16 +227,22 @@ class KopfCreatorTest {
 
 		@Test
 		void shouldSetListURI() {
+			var expectedBehoerdenschluesselUri = LoremIpsum.getInstance().getUrl();
+			when(xDomeaProperties.getBehoerdenschluesselUri()).thenReturn(expectedBehoerdenschluesselUri);
+
 			var behoerdenschlussel = creator.createBehoerdenschlussen();
 
-			assertThat(behoerdenschlussel.getListURI()).isEqualTo(KopfCreator.BEHOERDENSCHLUSSEL_LIST_URI);
+			assertThat(behoerdenschlussel.getListURI()).isEqualTo(expectedBehoerdenschluesselUri);
 		}
 
 		@Test
 		void shouldSetListVersionID() {
+			var expectedBehoerdenschluesselVersion = LoremIpsum.getInstance().getWords(1);
+			when(xDomeaProperties.getBehoerdenschluesselVersion()).thenReturn(expectedBehoerdenschluesselVersion);
+
 			var behoerdenschlussel = creator.createBehoerdenschlussen();
 
-			assertThat(behoerdenschlussel.getListVersionID()).isEqualTo(KopfCreator.BEHOERDENSCHLUSSEL_LIST_VERSION_ID);
+			assertThat(behoerdenschlussel.getListVersionID()).isEqualTo(expectedBehoerdenschluesselVersion);
 		}
 	}
 
diff --git a/pom.xml b/pom.xml
index b061f02e10eb46999380c84b53b3fcc1aedeb8ba..7986fc9ca35ec07cbd7a20e207f108f2cec4274e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,7 +50,7 @@
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 
-		<vorgang-manager.version>2.6.0</vorgang-manager.version>
+		<vorgang-manager.version>2.7.0-SNAPSHOT</vorgang-manager.version>
 		<ozgcloud-common-pdf.version>3.0.1</ozgcloud-common-pdf.version>
 		<user-manager.version>2.2.0</user-manager.version>
 
diff --git a/src/main/helm/templates/deployment.yaml b/src/main/helm/templates/deployment.yaml
index b101df46569ff6e1c9432472921bfc8bf7fc1423..1aabf05903d1c0b2e15f6b686e9945f5c943f757 100644
--- a/src/main/helm/templates/deployment.yaml
+++ b/src/main/helm/templates/deployment.yaml
@@ -101,6 +101,12 @@ spec:
           value: {{ $bescheid.formEngineName }}
         {{- end }}
         {{- end}}
+        - name: ozgcloud_xdomea_behoerdenschluessel
+          value: {{ required "ozgcloud.xdomea.behoerdenschluessel muss angegeben sein" ((.Values.ozgcloud).xdomea).behoerdenschluessel | quote }}
+        - name: ozgcloud_xdomea_behoerdenschluesselUri
+          value: {{ required "ozgcloud.xdomea.behoerdenschluesselUri muss angegeben sein" ((.Values.ozgcloud).xdomea).behoerdenschluesselUri}}
+        - name: ozgcloud_xdomea_behoerdenschluesselVersion
+          value: {{ required "ozgcloud.xdomea.behoerdenschluesselVersion muss angegeben sein" ((.Values.ozgcloud).xdomea).behoerdenschluesselVersion | quote }}
 
         image: "{{ .Values.image.repo }}/{{ .Values.image.name }}:{{ coalesce (.Values.image).tag "latest" }}"
         imagePullPolicy: Always
diff --git a/src/test/helm-linter-values.yaml b/src/test/helm-linter-values.yaml
index 73536126680ed22d458c77db4f0e36a4ad07f262..7eb04a7cbd54b8dbc684a2801d67bf86f48beab6 100644
--- a/src/test/helm-linter-values.yaml
+++ b/src/test/helm-linter-values.yaml
@@ -28,6 +28,10 @@ ozgcloud:
   bundesland: sh
   bezeichner: helm
   environment: test
+  xdomea:
+    behoerdenschluessel: "123456"
+    behoerdenschluesselUri: uri.uri:uri
+    behoerdenschluesselVersion: "Version 1"
 
 networkPolicy:
   ssoPublicIp: 51.89.117.53/32
@@ -36,4 +40,4 @@ networkPolicy:
 sso:
   serverUrl: https://sso.company.local
 
-imagePullSecret: image-pull-secret
\ No newline at end of file
+imagePullSecret: image-pull-secret
diff --git a/src/test/helm/deployment_63_char_test.yaml b/src/test/helm/deployment_63_char_test.yaml
index 829ab69eac2a57630c55691468e1a4e31d2619a7..56f935559c21ba44f1d895bdccc6f614649be9c5 100644
--- a/src/test/helm/deployment_63_char_test.yaml
+++ b/src/test/helm/deployment_63_char_test.yaml
@@ -26,7 +26,7 @@ suite: test deyploment less than 63 chars
 release:
   name: alfa
   namespace: sh-helm-test
-  
+
 chart:
   name: alfa
 
@@ -37,6 +37,10 @@ set:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   baseUrl: test.company.local
@@ -60,4 +64,4 @@ tests:
           errorMessage: .Chart.Name-.Chart.Version alfa-1.0-test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 ist zu lang (max. 63 Zeichen)
   - it: should not fail on .Chart.Name-.Chart.Version length less than 63 characters
     asserts:
-      - notFailedTemplate: {}
\ No newline at end of file
+      - notFailedTemplate: {}
diff --git a/src/test/helm/deployment_bindings_test.yaml b/src/test/helm/deployment_bindings_test.yaml
index fc77e8acfcca27bbbe6b9f482b81f1e5cb0e84a3..a42e08b93f1e55ace76e0f928514ac4744d5a32a 100644
--- a/src/test/helm/deployment_bindings_test.yaml
+++ b/src/test/helm/deployment_bindings_test.yaml
@@ -33,14 +33,18 @@ set:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   baseUrl: test.company.local
   imagePullSecret: image-pull-secret
 tests:
   - it: should have volumes
-    set: 
-       usermanagerName: user-manager
+    set:
+      usermanagerName: user-manager
     asserts:
       - contains:
           path: spec.template.spec.containers[0].volumeMounts
@@ -69,21 +73,21 @@ tests:
             subPath: ca.crt
             readOnly: true
   - it: should have volume mounts
-    set: 
-       usermanagerName: user-manager
+    set:
+      usermanagerName: user-manager
     asserts:
       - contains:
-           path: spec.template.spec.volumes
-           content:
-              name: bindings
-              configMap:
-                 name: alfa-bindings-type
+          path: spec.template.spec.volumes
+          content:
+            name: bindings
+            configMap:
+              name: alfa-bindings-type
       - contains:
-           path: spec.template.spec.volumes
-           content:
-              name: user-manager-tls-certificate
-              secret:
-                 secretName: user-manager-tls-cert
+          path: spec.template.spec.volumes
+          content:
+            name: user-manager-tls-certificate
+            secret:
+              secretName: user-manager-tls-cert
       - contains:
           path: spec.template.spec.volumes
           content:
@@ -94,9 +98,9 @@ tests:
           content:
             name: sso-tls-certificate
   - it: should have sso tls cert mount
-    set: 
-       usermanagerName: user-manager
-       sso:
+    set:
+      usermanagerName: user-manager
+      sso:
         tlsCertName: sso-tls-cert
         serverUrl: https://sso.company.local
     asserts:
@@ -130,4 +134,4 @@ tests:
           path: spec.template.spec.volumes
           content:
             name: user-manager-tls-certificate
-          any: true
\ No newline at end of file
+          any: true
diff --git a/src/test/helm/deployment_customList_env_test.yaml b/src/test/helm/deployment_customList_env_test.yaml
index 7ed06f83209a96790e36ab6cd35d31608a44fff1..688ff738fed603778050d6875fbac57b72d0a039 100644
--- a/src/test/helm/deployment_customList_env_test.yaml
+++ b/src/test/helm/deployment_customList_env_test.yaml
@@ -22,15 +22,19 @@
 # unter der Lizenz sind dem Lizenztext zu entnehmen.
 #
 
-suite: test environments customList 
+suite: test environments customList
 templates:
   - templates/deployment.yaml
-set:  
+set:
   baseUrl: test.company.local
   ozgcloud:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   imagePullSecret: image-pull-secret
diff --git a/src/test/helm/deployment_defaults_affinity_test.yaml b/src/test/helm/deployment_defaults_affinity_test.yaml
index 10518783e34f874d4b9f40270b9795d6ce7f8ce0..30d186a2b5f90146d41b4d9268db11399a6e82b3 100644
--- a/src/test/helm/deployment_defaults_affinity_test.yaml
+++ b/src/test/helm/deployment_defaults_affinity_test.yaml
@@ -33,6 +33,10 @@ set:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   baseUrl: test.company.local
diff --git a/src/test/helm/deployment_defaults_env_test.yaml b/src/test/helm/deployment_defaults_env_test.yaml
index 46fa731257e72bf9a8769bcb8376624c801a8a53..2e5e68b5275e27c9c755cc71cc6a80366834ed51 100644
--- a/src/test/helm/deployment_defaults_env_test.yaml
+++ b/src/test/helm/deployment_defaults_env_test.yaml
@@ -34,13 +34,17 @@ set:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   imagePullSecret: image-pull-secret
 tests:
   - it: check default values
-    set: 
-       usermanagerName: user-manager
+    set:
+      usermanagerName: user-manager
     asserts:
       - isKind:
           of: Deployment
@@ -55,14 +59,13 @@ tests:
             name: grpc_client_user-manager_address
             value: user-manager.sh-helm-test:9000
 
-
   - it: should have service binding root
-    set: 
-       usermanagerName: user-manager
+    set:
+      usermanagerName: user-manager
     asserts:
       - contains:
-         path: spec.template.spec.containers[0].env
-         content:
+          path: spec.template.spec.containers[0].env
+          content:
             name: SERVICE_BINDING_ROOT
             value: "/bindings"
 
@@ -132,4 +135,4 @@ tests:
           path: spec.template.spec.containers[0].env
           content:
             name: grpc_client_user-manager_negotiationType
-            value: TLS
\ No newline at end of file
+            value: TLS
diff --git a/src/test/helm/deployment_defaults_labels_test.yaml b/src/test/helm/deployment_defaults_labels_test.yaml
index 1bbcef91e098fabe4cc2467529972884294eb0b3..93e3dc85202ef0dd11f8465f13de5a9ac322833a 100644
--- a/src/test/helm/deployment_defaults_labels_test.yaml
+++ b/src/test/helm/deployment_defaults_labels_test.yaml
@@ -28,13 +28,17 @@ release:
   namespace: sh-helm-test
 templates:
   - templates/deployment.yaml
- 
+
 set:
   baseUrl: test.company.local
   ozgcloud:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   imagePullSecret: image-pull-secret
@@ -43,11 +47,11 @@ tests:
     asserts:
       - equal:
           path: metadata.labels
-          value: 
+          value:
             app.kubernetes.io/instance: alfa
             app.kubernetes.io/managed-by: Helm
             app.kubernetes.io/name: alfa
             app.kubernetes.io/namespace: sh-helm-test
             app.kubernetes.io/part-of: ozgcloud
             app.kubernetes.io/version: 0.0.0-MANAGED-BY-JENKINS
-            helm.sh/chart: alfa-0.0.0-MANAGED-BY-JENKINS
\ No newline at end of file
+            helm.sh/chart: alfa-0.0.0-MANAGED-BY-JENKINS
diff --git a/src/test/helm/deployment_defaults_spec_containers_health_test.yaml b/src/test/helm/deployment_defaults_spec_containers_health_test.yaml
index 5748514857cb81f4e4d03befc9a1a122ea5d9945..a216743645f6f9b105815166fd2fff59b9837db7 100644
--- a/src/test/helm/deployment_defaults_spec_containers_health_test.yaml
+++ b/src/test/helm/deployment_defaults_spec_containers_health_test.yaml
@@ -24,65 +24,68 @@
 
 suite: test deployment health check
 release:
-  name: alfa
-  namespace: sh-helm-test
+    name: alfa
+    namespace: sh-helm-test
 templates:
-  - templates/deployment.yaml
+    - templates/deployment.yaml
 set:
-  baseUrl: test.company.local
-  ozgcloud:
-    environment: test
-    bundesland: sh
-    bezeichner: helm
-  sso:
-    serverUrl: https://sso.company.local
-  imagePullSecret: image-pull-secret
+    baseUrl: test.company.local
+    ozgcloud:
+        environment: test
+        bundesland: sh
+        bezeichner: helm
+        xdomea:
+            behoerdenschluessel: "123456"
+            behoerdenschluesselUri: uri.uri:uri
+            behoerdenschluesselVersion: "Version 1"
+    sso:
+        serverUrl: https://sso.company.local
+    imagePullSecret: image-pull-secret
 tests:
-  - it: should have correct valaues for health check
-    asserts:
-      - equal:
-          path: spec.template.spec.containers[0].readinessProbe.failureThreshold
-          value: 3
-      - equal:
-          path: spec.template.spec.containers[0].readinessProbe.httpGet.path
-          value: /actuator/health/readiness
-      - equal:
-          path: spec.template.spec.containers[0].readinessProbe.httpGet.port
-          value: 8081
-      - equal:
-          path: spec.template.spec.containers[0].readinessProbe.httpGet.scheme
-          value: HTTP
-      - equal:
-          path: spec.template.spec.containers[0].readinessProbe.periodSeconds
-          value: 10
-      - equal:
-          path: spec.template.spec.containers[0].readinessProbe.successThreshold
-          value: 1
-      - equal:
-          path: spec.template.spec.containers[0].readinessProbe.timeoutSeconds
-          value: 3  
-      - equal:
-          path: spec.template.spec.containers[0].startupProbe.failureThreshold
-          value: 10
-      - equal:
-          path: spec.template.spec.containers[0].startupProbe.httpGet.path
-          value: /actuator/health/readiness
-      - equal:
-          path: spec.template.spec.containers[0].startupProbe.httpGet.port
-          value: 8081
-      - equal:
-          path: spec.template.spec.containers[0].startupProbe.httpGet.scheme
-          value: HTTP
-      - equal:
-          path: spec.template.spec.containers[0].startupProbe.initialDelaySeconds
-          value: 30
-      - equal:
-          path: spec.template.spec.containers[0].startupProbe.periodSeconds
-          value: 5
-      - equal:
-          path: spec.template.spec.containers[0].startupProbe.successThreshold
-          value: 1
-      - equal:
-          path: spec.template.spec.containers[0].startupProbe.timeoutSeconds
-          value: 5
-      
\ No newline at end of file
+    - it: should have correct valaues for health check
+      asserts:
+          - equal:
+                path: spec.template.spec.containers[0].readinessProbe.failureThreshold
+                value: 3
+          - equal:
+                path: spec.template.spec.containers[0].readinessProbe.httpGet.path
+                value: /actuator/health/readiness
+          - equal:
+                path: spec.template.spec.containers[0].readinessProbe.httpGet.port
+                value: 8081
+          - equal:
+                path: spec.template.spec.containers[0].readinessProbe.httpGet.scheme
+                value: HTTP
+          - equal:
+                path: spec.template.spec.containers[0].readinessProbe.periodSeconds
+                value: 10
+          - equal:
+                path: spec.template.spec.containers[0].readinessProbe.successThreshold
+                value: 1
+          - equal:
+                path: spec.template.spec.containers[0].readinessProbe.timeoutSeconds
+                value: 3
+          - equal:
+                path: spec.template.spec.containers[0].startupProbe.failureThreshold
+                value: 10
+          - equal:
+                path: spec.template.spec.containers[0].startupProbe.httpGet.path
+                value: /actuator/health/readiness
+          - equal:
+                path: spec.template.spec.containers[0].startupProbe.httpGet.port
+                value: 8081
+          - equal:
+                path: spec.template.spec.containers[0].startupProbe.httpGet.scheme
+                value: HTTP
+          - equal:
+                path: spec.template.spec.containers[0].startupProbe.initialDelaySeconds
+                value: 30
+          - equal:
+                path: spec.template.spec.containers[0].startupProbe.periodSeconds
+                value: 5
+          - equal:
+                path: spec.template.spec.containers[0].startupProbe.successThreshold
+                value: 1
+          - equal:
+                path: spec.template.spec.containers[0].startupProbe.timeoutSeconds
+                value: 5
diff --git a/src/test/helm/deployment_defaults_spec_containers_securityContext_test.yaml b/src/test/helm/deployment_defaults_spec_containers_securityContext_test.yaml
index be7c9a27dd4b584c17247abe363db669a3e349fc..db495d1e81c7f9b105260ba621c1241b23365437 100644
--- a/src/test/helm/deployment_defaults_spec_containers_securityContext_test.yaml
+++ b/src/test/helm/deployment_defaults_spec_containers_securityContext_test.yaml
@@ -34,6 +34,10 @@ set:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   imagePullSecret: image-pull-secret
@@ -92,4 +96,4 @@ tests:
           path: spec.template.spec.containers[0].securityContext.capabilities
           value:
             drop:
-              - ALL
\ No newline at end of file
+              - ALL
diff --git a/src/test/helm/deployment_defaults_spec_containers_test.yaml b/src/test/helm/deployment_defaults_spec_containers_test.yaml
index cf97d4e2ea8b3526b6e0f57616fdb6d02822e215..d6fa262f48d0e455f791bdd3c559c512813379f6 100644
--- a/src/test/helm/deployment_defaults_spec_containers_test.yaml
+++ b/src/test/helm/deployment_defaults_spec_containers_test.yaml
@@ -28,12 +28,16 @@ release:
   namespace: sh-helm-test
 templates:
   - templates/deployment.yaml
-set:  
+set:
   baseUrl: test.company.local
   ozgcloud:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   imagePullSecret: image-pull-secret
@@ -78,4 +82,4 @@ tests:
           value: metrics
       - equal:
           path: spec.template.spec.containers[0].ports[1].protocol
-          value: TCP
\ No newline at end of file
+          value: TCP
diff --git a/src/test/helm/deployment_defaults_sso_env_test.yaml b/src/test/helm/deployment_defaults_sso_env_test.yaml
index d3bb35a1793e67a0a45089df6b2bc4e3d3bc50dd..0b8017066f12fb6fa88c5a5bf930df8979df054b 100644
--- a/src/test/helm/deployment_defaults_sso_env_test.yaml
+++ b/src/test/helm/deployment_defaults_sso_env_test.yaml
@@ -28,12 +28,16 @@ release:
   namespace: sh-helm-test
 templates:
   - templates/deployment.yaml
-set:  
+set:
   baseUrl: test.company.local
   ozgcloud:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   imagePullSecret: image-pull-secret
@@ -83,4 +87,4 @@ tests:
           path: spec.template.spec.containers[0].env
           content:
             name: keycloak_resource
-            value: different-client
\ No newline at end of file
+            value: different-client
diff --git a/src/test/helm/deployment_defaults_topologySpreadConstraints_test.yaml b/src/test/helm/deployment_defaults_topologySpreadConstraints_test.yaml
index 7bb4be03499b6a5a87c307773eacdd2e9833c64b..a319bba88c827ee006de7735576d16dd74152e78 100644
--- a/src/test/helm/deployment_defaults_topologySpreadConstraints_test.yaml
+++ b/src/test/helm/deployment_defaults_topologySpreadConstraints_test.yaml
@@ -28,12 +28,16 @@ release:
   namespace: sh-helm-test
 templates:
   - templates/deployment.yaml
-set:  
+set:
   baseUrl: test.company.local
   ozgcloud:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   imagePullSecret: image-pull-secret
@@ -51,4 +55,4 @@ tests:
           value: ScheduleAnyway
       - equal:
           path: spec.template.spec.topologySpreadConstraints[0].labelSelector.matchLabels["app.kubernetes.io/name"]
-          value: alfa
\ No newline at end of file
+          value: alfa
diff --git a/src/test/helm/deployment_host_aliases_test.yaml b/src/test/helm/deployment_host_aliases_test.yaml
index 6e631160b32aa36bd2e3edc30bd8106f91b004ff..579000d7c63681b7bd4f4d772183693e5e54062c 100644
--- a/src/test/helm/deployment_host_aliases_test.yaml
+++ b/src/test/helm/deployment_host_aliases_test.yaml
@@ -28,12 +28,16 @@ release:
   namespace: sh-helm-test
 templates:
   - templates/deployment.yaml
-set:  
+set:
   baseUrl: test.company.local
   ozgcloud:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   imagePullSecret: image-pull-secret
@@ -47,13 +51,13 @@ tests:
       hostAliases:
         - ip: "127.0.0.1"
           hostname:
-          - "eins"
-          - "zwei"
+            - "eins"
+            - "zwei"
     asserts:
       - contains:
           path: spec.template.spec.hostAliases
           content:
             ip: "127.0.0.1"
             hostname:
-            - "eins"
-            - "zwei"
+              - "eins"
+              - "zwei"
diff --git a/src/test/helm/deployment_imageTag_test.yaml b/src/test/helm/deployment_imageTag_test.yaml
index 6183e22152abbf377cc00fba756eddacdc3f1c92..e3973e264491fed4a3b0e6970a0585a27ef56907 100644
--- a/src/test/helm/deployment_imageTag_test.yaml
+++ b/src/test/helm/deployment_imageTag_test.yaml
@@ -28,12 +28,16 @@ release:
   namespace: sh-helm-test
 templates:
   - templates/deployment.yaml
-set:  
+set:
   baseUrl: test.company.local
   ozgcloud:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   imagePullSecret: image-pull-secret
@@ -44,4 +48,4 @@ tests:
     asserts:
       - equal:
           path: spec.template.spec.containers[0].image
-          value: docker.ozg-sh.de/alfa:latest
\ No newline at end of file
+          value: docker.ozg-sh.de/alfa:latest
diff --git a/src/test/helm/deployment_imagepull_secret_test.yaml b/src/test/helm/deployment_imagepull_secret_test.yaml
index f7bd1f34172e0b0fb27bb65c65e449c4022dc2aa..e0fbf9fe891c1402f864c965e4cf4d6e2eb87da1 100644
--- a/src/test/helm/deployment_imagepull_secret_test.yaml
+++ b/src/test/helm/deployment_imagepull_secret_test.yaml
@@ -28,12 +28,16 @@ release:
   namespace: sh-helm-test
 templates:
   - templates/deployment.yaml
-set:  
+set:
   baseUrl: test.company.local
   ozgcloud:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
 tests:
@@ -47,4 +51,4 @@ tests:
   - it: should fail template if imagepullsecret not set
     asserts:
       - failedTemplate:
-          errormessage: imagePullSecret must be set
\ No newline at end of file
+          errormessage: imagePullSecret must be set
diff --git a/src/test/helm/deployment_liveness_probe_test.yaml b/src/test/helm/deployment_liveness_probe_test.yaml
index 0c0fde464c0a336863ea1fbca809e96ff2f045f9..688d7362586c481e7fd64b16ebd7a28cc729580a 100644
--- a/src/test/helm/deployment_liveness_probe_test.yaml
+++ b/src/test/helm/deployment_liveness_probe_test.yaml
@@ -34,6 +34,10 @@ set:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   imagePullSecret: image-pull-secret
@@ -62,4 +66,4 @@ tests:
   - it: not enable livenessProbe by default
     asserts:
       - isNull:
-          path: spec.template.spec.containers[0].livenessProbe
\ No newline at end of file
+          path: spec.template.spec.containers[0].livenessProbe
diff --git a/src/test/helm/deployment_pod_default_spec_values_test.yaml b/src/test/helm/deployment_pod_default_spec_values_test.yaml
index aab286ae8900126630d6c293cf79b5e82005d6bd..fe479d789bf85d6d7196fde97b17b77371adf3b3 100644
--- a/src/test/helm/deployment_pod_default_spec_values_test.yaml
+++ b/src/test/helm/deployment_pod_default_spec_values_test.yaml
@@ -1,4 +1,4 @@
- #
+#
 # Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
 # Ministerpräsidenten des Landes Schleswig-Holstein
 # Staatskanzlei
@@ -34,12 +34,16 @@ set:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   imagePullSecret: image-pull-secret
 tests:
- - it: should have correct pod template values
-   asserts:
+  - it: should have correct pod template values
+    asserts:
       - isEmpty:
           path: spec.template.spec.dnsConfig
       - equal:
@@ -53,4 +57,4 @@ tests:
           value: "default-scheduler"
       - equal:
           path: spec.template.spec.terminationGracePeriodSeconds
-          value: 30
\ No newline at end of file
+          value: 30
diff --git a/src/test/helm/deployment_resources_test.yaml b/src/test/helm/deployment_resources_test.yaml
index ee5785c522f4c35288c78ef4dc10eb6b959bb057..ae938d402582e9a87963775eeab6a0077d1b277a 100644
--- a/src/test/helm/deployment_resources_test.yaml
+++ b/src/test/helm/deployment_resources_test.yaml
@@ -27,12 +27,16 @@ release:
   name: alfa
 templates:
   - templates/deployment.yaml
-set:  
+set:
   baseUrl: test.company.local
   ozgcloud:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   imagePullSecret: image-pull-secret
@@ -62,4 +66,4 @@ tests:
   - it: test empty resources
     asserts:
       - isEmpty:
-          path: spec.template.spec.containers[0].resources
\ No newline at end of file
+          path: spec.template.spec.containers[0].resources
diff --git a/src/test/helm/deployment_service_account_test.yaml b/src/test/helm/deployment_service_account_test.yaml
index 7e5a49ca0e13dffb4588f6855fe9cd25e88db9fa..a57bc628ff6b7c1cd4f290efb45740b24a22bb18 100644
--- a/src/test/helm/deployment_service_account_test.yaml
+++ b/src/test/helm/deployment_service_account_test.yaml
@@ -28,12 +28,16 @@ release:
   namespace: sh-helm-test
 templates:
   - templates/deployment.yaml
-set:  
+set:
   baseUrl: test.company.local
   ozgcloud:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   imagePullSecret: image-pull-secret
@@ -58,4 +62,4 @@ tests:
   - it: should use default service account
     asserts:
       - isNull:
-          path: spec.template.spec.serviceAccountName
\ No newline at end of file
+          path: spec.template.spec.serviceAccountName
diff --git a/src/test/helm/deployment_springProfile_env_test.yaml b/src/test/helm/deployment_springProfile_env_test.yaml
index 73a7188c0ec0dbba5c1ae45480c4fffc1471d197..c9507240396ac72e74db4dd34147d3d4df8b9825 100644
--- a/src/test/helm/deployment_springProfile_env_test.yaml
+++ b/src/test/helm/deployment_springProfile_env_test.yaml
@@ -28,12 +28,16 @@ release:
   namespace: sh-helm-test
 templates:
   - templates/deployment.yaml
-set:  
+set:
   baseUrl: test.company.local
   ozgcloud:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   imagePullSecret: image-pull-secret
@@ -53,4 +57,4 @@ tests:
           path: spec.template.spec.containers[0].env
           content:
             name: spring_profiles_active
-            value: oc, test
\ No newline at end of file
+            value: oc, test
diff --git a/src/test/helm/deployment_usermanager_address_env_test.yaml b/src/test/helm/deployment_usermanager_address_env_test.yaml
index 028e532557a65b3874420f6447a806f67dd4508a..58c7cb58e5b4c4c4223c0451fc64728724abcc20 100644
--- a/src/test/helm/deployment_usermanager_address_env_test.yaml
+++ b/src/test/helm/deployment_usermanager_address_env_test.yaml
@@ -34,6 +34,10 @@ set:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   imagePullSecret: image-pull-secret
diff --git a/src/test/helm/deployment_vorgang_manager_address_env_test.yaml b/src/test/helm/deployment_vorgang_manager_address_env_test.yaml
index 6c71f04812469eb3d0d06e2abaaedc1ff79d83b4..5ad441a04a40b50098c7567829e2010d3853e38f 100644
--- a/src/test/helm/deployment_vorgang_manager_address_env_test.yaml
+++ b/src/test/helm/deployment_vorgang_manager_address_env_test.yaml
@@ -28,12 +28,16 @@ release:
   namespace: sh-helm-test
 templates:
   - templates/deployment.yaml
-set:  
+set:
   baseUrl: test.company.local
   ozgcloud:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   imagePullSecret: image-pull-secret
diff --git a/src/test/helm/deployment_xdomea_env_test.yaml b/src/test/helm/deployment_xdomea_env_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..7656d2d0ea2d8a7295222ed701c908f6cfdc1760
--- /dev/null
+++ b/src/test/helm/deployment_xdomea_env_test.yaml
@@ -0,0 +1,82 @@
+suite: deployment xdomea env
+release:
+  name: alfa
+  namespace: sh-helm-test
+templates:
+  - templates/deployment.yaml
+set:
+  baseUrl: test.company.local
+  ozgcloud:
+    environment: test
+    bundesland: sh
+    bezeichner: helm
+  sso:
+    serverUrl: https://sso.company.local
+  imagePullSecret: image-pull-secret
+tests:
+  - it: should fail on missing behoerdenschlüssel
+    set:
+      ozgcloud:
+        xdomea:
+          behoerdenschluesselUri: "uri.uri:uri"
+          behoerdenschluesselVersion: "version 1"
+    asserts:
+      - failedTemplate:
+          errorMessage: "ozgcloud.xdomea.behoerdenschluessel muss angegeben sein"
+  - it: should set behoerdenschlüssel
+    set:
+      ozgcloud:
+        xdomea:
+          behoerdenschluessel: "123456"
+          behoerdenschluesselUri: "uri.uri:uri"
+          behoerdenschluesselVersion: "version 1"
+    asserts:
+      - contains:
+          path: spec.template.spec.containers[0].env
+          content:
+            name: ozgcloud_xdomea_behoerdenschluessel
+            value: "123456"
+  - it: should fail on missing behoerdenschlüsselUri
+    set:
+      ozgcloud:
+        xdomea:
+          behoerdenschluessel: "123456"
+          behoerdenschluesselVersion: "version 1"
+    asserts:
+      - failedTemplate:
+          errorMessage: "ozgcloud.xdomea.behoerdenschluesselUri muss angegeben sein"
+  - it: should set behoerdenschlüsselUri
+    set:
+      ozgcloud:
+        xdomea:
+          behoerdenschluessel: "123456"
+          behoerdenschluesselUri: "uri.uri:uri"
+          behoerdenschluesselVersion: "version 1"
+    asserts:
+      - contains:
+          path: spec.template.spec.containers[0].env
+          content:
+            name: ozgcloud_xdomea_behoerdenschluesselUri
+            value: "uri.uri:uri"
+  - it: should fail on missing behoerdenschlüsselVersion
+    set:
+      ozgcloud:
+        xdomea:
+          behoerdenschluessel: "123456"
+          behoerdenschluesselUri: "uri.uri:uri"
+    asserts:
+      - failedTemplate:
+          errorMessage: "ozgcloud.xdomea.behoerdenschluesselVersion muss angegeben sein"
+  - it: should set behoerdenschlüsselVersion
+    set:
+      ozgcloud:
+        xdomea:
+          behoerdenschluessel: "123456"
+          behoerdenschluesselUri: "uri.uri:uri"
+          behoerdenschluesselVersion: "version 1"
+    asserts:
+      - contains:
+          path: spec.template.spec.containers[0].env
+          content:
+            name: ozgcloud_xdomea_behoerdenschluesselVersion
+            value: "version 1"
diff --git a/src/test/helm/deyploment_general_value_and_default_spec_test.yaml b/src/test/helm/deyploment_general_value_and_default_spec_test.yaml
index edbcc4123f4322e758e45653c99d92b4a078519c..37001633477f2064777c9ceede85bbe9af9dfff5 100644
--- a/src/test/helm/deyploment_general_value_and_default_spec_test.yaml
+++ b/src/test/helm/deyploment_general_value_and_default_spec_test.yaml
@@ -34,6 +34,10 @@ set:
     environment: test
     bundesland: sh
     bezeichner: helm
+    xdomea:
+      behoerdenschluessel: "123456"
+      behoerdenschluesselUri: uri.uri:uri
+      behoerdenschluesselVersion: "Version 1"
   sso:
     serverUrl: https://sso.company.local
   imagePullSecret: image-pull-secret
@@ -44,18 +48,17 @@ tests:
       - isKind:
           of: Deployment
       - isAPIVersion:
-           of: "apps/v1"
-      
-  - it: should have correct deployment metadata 
-    asserts: 
+          of: "apps/v1"
+
+  - it: should have correct deployment metadata
+    asserts:
       - equal:
           path: metadata.name
           value: alfa
-      - equal: 
+      - equal:
           path: metadata.namespace
           value: sh-helm-test
 
-
   - it: should have correct deyployment general spec values
     asserts:
       - equal:
@@ -69,12 +72,10 @@ tests:
           value: 10
   - it: should have correct deployment spec strategy values
     asserts:
-      - equal: 
+      - equal:
           path: spec.strategy
-          value: 
+          value:
             rollingUpdate:
               maxSurge: 1
               maxUnavailable: 0
             type: RollingUpdate
-          
-