diff --git a/alfa-client/apps/alfa-e2e/src/components/attachment/attachment.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/attachment/attachment.e2e.component.ts
index c7988c3ce98a476aa50c0a28b1341331a790d4e4..7e7207e39038dfd923b4b1560bdda6864496a0f2 100644
--- a/alfa-client/apps/alfa-e2e/src/components/attachment/attachment.e2e.component.ts
+++ b/alfa-client/apps/alfa-e2e/src/components/attachment/attachment.e2e.component.ts
@@ -48,6 +48,10 @@ export class AttachmentListE2EComponent {
     return new AttachmentE2EItem(fileName);
   }
 
+  public getLoadingOrErrorItem(fileName: string): LoadingErrorAttachmentE2EItem {
+    return new LoadingErrorAttachmentE2EItem(fileName);
+  }
+
   public getDownloadAttachmentsButton(): Cypress.Chainable<JQuery<HTMLElement>> {
     return this.getRoot().findTestElementWithClass(this.downloadAttachmentsButton);
   }
@@ -79,3 +83,16 @@ class AttachmentE2EItem {
     return this.getRoot().findTestElementWithClass(this.locatorDownloadButton);
   }
 }
+
+class LoadingErrorAttachmentE2EItem {
+  private readonly root: string;
+  private readonly attachmentSuffix: string = '-file-upload-list-item-attachment-upload';
+
+  constructor(private fileName: string) {
+    this.root = convertToDataTestId(this.fileName) + this.attachmentSuffix;
+  }
+
+  public getRoot() {
+    return cy.getTestElement(this.root);
+  }
+}
diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/wiedervorlage-attachment/wiedervorlage-attachment.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/wiedervorlage-attachment/wiedervorlage-attachment.cy.ts
index 753c03ac4bec195c51eef3dffe2de7058e58ccb1..a32737f51ba4be5eb46a092f211db36236f239cf 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/wiedervorlage-attachment/wiedervorlage-attachment.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/wiedervorlage-attachment/wiedervorlage-attachment.cy.ts
@@ -21,47 +21,26 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import {
-  AttachmentContainerE2EComponent,
-  AttachmentListE2EComponent,
-} from 'apps/alfa-e2e/src/components/attachment/attachment.e2e.component';
+import { AttachmentContainerE2EComponent, AttachmentListE2EComponent, } from 'apps/alfa-e2e/src/components/attachment/attachment.e2e.component';
 import { WiedervorlageSubnavigationE2EComponent } from 'apps/alfa-e2e/src/components/wiedervorlage/wiedervorlage-subnavigation';
-import { BinaryFileSnackbarMessageE2E } from 'apps/alfa-e2e/src/model/binary-file';
 import { WiedervorlageE2E } from 'apps/alfa-e2e/src/model/wiedervorlage';
-import {
-  dropCollections,
-  readFileFromDownloads,
-  wait,
-} from 'apps/alfa-e2e/src/support/cypress-helper';
+import { dropCollections, readFileFromDownloads, wait } from 'apps/alfa-e2e/src/support/cypress-helper';
 import { initVorgangAttachedItem } from 'apps/alfa-e2e/src/support/vorgang-attached-item-util';
 import { SnackBarE2EComponent } from '../../../components/ui/snackbar.e2e.component';
 import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-list.e2e.component';
 import { WiedervorlageInVorgangE2EComponent } from '../../../components/wiedervorlage/wiedervorlage-in-vorgang.e2e.component';
 import { WiedervorlageE2EComponent } from '../../../components/wiedervorlage/wiedervorlage-page.e2e.component';
+import { BinaryFileSnackbarMessageE2E } from '../../../model/binary-file';
 import { VorgangE2E } from '../../../model/vorgang';
 import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main.po';
 import { VorgangPage } from '../../../page-objects/vorgang.po';
 import { WiedervorlagePage } from '../../../page-objects/wiedervorlage.po';
-import {
-  containClass,
-  contains,
-  exist,
-  haveLength,
-  notContainClass,
-  notExist,
-} from '../../../support/cypress.util';
-import {
-  TEST_FILE_WITHOUT_CONTENT,
-  TEST_FILE_WITH_CONTENT,
-  TEST_FILE_WITH_CONTENT_46MB,
-} from '../../../support/data.util';
+import { containClass, contains, exist, haveLength, notContainClass, notExist } from '../../../support/cypress.util';
+import { TEST_FILE_WITH_CONTENT, TEST_FILE_WITH_CONTENT_46MB, TEST_FILE_WITHOUT_CONTENT } from '../../../support/data.util';
 import { uploadEmptyFile, uploadFile } from '../../../support/file-upload';
 import { loginAsSabine } from '../../../support/user-util';
 import { createVorgang, initVorgang, objectIds } from '../../../support/vorgang-util';
-import {
-  createWiedervorlageAttachedItem,
-  createWiedervorlageItem,
-} from '../../../support/wiedervorlage-util';
+import { createWiedervorlageAttachedItem, createWiedervorlageItem } from '../../../support/wiedervorlage-util';
 
 describe('Wiedervorlage attachments', () => {
   const mainPage: MainPage = new MainPage();
@@ -74,13 +53,10 @@ describe('Wiedervorlage attachments', () => {
   const wiedervorlageContainerInVorgang = vorgangPage.getWiedervorlagenContainer();
 
   const wiedervorlagePage: WiedervorlagePage = new WiedervorlagePage();
-  const wiedervorlageContainer: WiedervorlageE2EComponent =
-    wiedervorlagePage.getWiedervorlageContainer();
-  const attachmentContainer: AttachmentContainerE2EComponent =
-    wiedervorlageContainer.getAttachmentContainer();
+  const wiedervorlageContainer: WiedervorlageE2EComponent = wiedervorlagePage.getWiedervorlageContainer();
+  const attachmentContainer: AttachmentContainerE2EComponent = wiedervorlageContainer.getAttachmentContainer();
   const attachmentList: AttachmentListE2EComponent = attachmentContainer.getList();
-  const subnavigation: WiedervorlageSubnavigationE2EComponent =
-    wiedervorlagePage.getSubnavigation();
+  const subnavigation: WiedervorlageSubnavigationE2EComponent = wiedervorlagePage.getSubnavigation();
 
   const snackbar: SnackBarE2EComponent = mainPage.getSnackBar();
 
@@ -140,23 +116,17 @@ describe('Wiedervorlage attachments', () => {
       exist(attachmentList.getItem(TEST_FILE_WITH_CONTENT).getRoot());
     });
 
-    it('should error snackbar after upload to large file', { defaultCommandTimeout: 30000 }, () => {
+    it('should show failed upload', { defaultCommandTimeout: 30000 }, () => {
       uploadFile(attachmentContainer.getUploadInput(), TEST_FILE_WITH_CONTENT_46MB);
       waitForSpinnerToDisappear();
 
-      exist(snackbar.getMessage());
+      exist(attachmentList.getLoadingOrErrorItem(TEST_FILE_WITH_CONTENT_46MB).getRoot());
       contains(
-        snackbar.getMessage(),
+        attachmentList.getLoadingOrErrorItem(TEST_FILE_WITH_CONTENT_46MB).getRoot(),
         BinaryFileSnackbarMessageE2E.ATTACHMENT_NOT_ADDED.replace('{size}', '40MB'),
       );
     });
 
-    it('should close snackbar on close button', () => {
-      snackbar.getCloseButton().click();
-
-      notExist(snackbar.getMessage());
-    });
-
     it('should download attachment on click', () => {
       attachmentList.getItem(TEST_FILE_WITH_CONTENT).getDownloadButton().click();
       waitForSpinnerToDisappear();
@@ -169,10 +139,7 @@ describe('Wiedervorlage attachments', () => {
       wiedervorlageContainer.getSpeichernButton().click();
 
       exist(snackbar.getMessage());
-      contains(
-        snackbar.getMessage(),
-        'Die Wiedervorlage "' + WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF + '" wurde angelegt',
-      );
+      contains(snackbar.getMessage(), 'Die Wiedervorlage "' + WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF + '" wurde angelegt');
       exist(snackbar.getCloseButton());
     });
 
@@ -183,9 +150,7 @@ describe('Wiedervorlage attachments', () => {
     });
 
     it('should show attachments on wiedervorlage in vorgang-detail after save ', () => {
-      wiedervorlageContainerInVorgang
-        .getWiedervorlage(WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF)
-        .expandItem();
+      wiedervorlageContainerInVorgang.getWiedervorlage(WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF).expandItem();
 
       exist(
         wiedervorlageContainerInVorgang
@@ -203,6 +168,14 @@ describe('Wiedervorlage attachments', () => {
           .getItem(TEST_FILE_WITH_CONTENT)
           .getRoot(),
       );
+      notExist(
+        wiedervorlageContainerInVorgang
+          .getWiedervorlage(WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF)
+          .getAttachmentContainer()
+          .getList()
+          .getLoadingOrErrorItem(TEST_FILE_WITH_CONTENT_46MB)
+          .getRoot(),
+      );
     });
 
     it('should download empty attachment on click in list', () => {
@@ -233,8 +206,9 @@ describe('Wiedervorlage attachments', () => {
   });
 
   describe('Delete attachment', () => {
-    const wiedervorlageComp: WiedervorlageInVorgangE2EComponent =
-      wiedervorlageContainerInVorgang.getWiedervorlage(WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF);
+    const wiedervorlageComp: WiedervorlageInVorgangE2EComponent = wiedervorlageContainerInVorgang.getWiedervorlage(
+      WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF,
+    );
 
     it('should open wiedervorlage page', () => {
       wiedervorlageComp.getLink().click();
@@ -256,66 +230,41 @@ describe('Wiedervorlage attachments', () => {
       wiedervorlageContainer.getSpeichernButton().click();
 
       exist(snackbar.getMessage());
-      contains(
-        snackbar.getMessage(),
-        `Die Wiedervorlage "${WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF}" wurde gespeichert`,
-      );
+      contains(snackbar.getMessage(), `Die Wiedervorlage "${WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF}" wurde gespeichert`);
       snackbar.getCloseButton().click();
     });
 
-    it('(Skip reason in OZG-4658) check attachments in wiedervorlage list', () => {
+    it('check attachments in wiedervorlage list', () => {
       waitForSpinnerToDisappear();
 
       wiedervorlageComp.getExpandButton();
       wiedervorlageComp.expandItem();
 
-      notExist(
-        wiedervorlageComp
-          .getAttachmentContainer()
-          .getList()
-          .getItem(TEST_FILE_WITHOUT_CONTENT)
-          .getRoot(),
-      );
-      exist(
-        wiedervorlageComp
-          .getAttachmentContainer()
-          .getList()
-          .getItem(TEST_FILE_WITH_CONTENT)
-          .getRoot(),
-      );
+      notExist(wiedervorlageComp.getAttachmentContainer().getList().getItem(TEST_FILE_WITHOUT_CONTENT).getRoot());
+      exist(wiedervorlageComp.getAttachmentContainer().getList().getItem(TEST_FILE_WITH_CONTENT).getRoot());
     });
   });
 
   describe('switch to wiedervorlage without attachments', () => {
-    const wiedervorlageComp: WiedervorlageInVorgangE2EComponent =
-      wiedervorlageContainerInVorgang.getWiedervorlage(wiedervorlage.betreff);
+    const wiedervorlageComp: WiedervorlageInVorgangE2EComponent = wiedervorlageContainerInVorgang.getWiedervorlage(
+      wiedervorlage.betreff,
+    );
 
     it('should not show any attachments', () => {
       wiedervorlageComp.getLink().click();
       waitForSpinnerToDisappear();
 
-      notExist(
-        wiedervorlageComp
-          .getAttachmentContainer()
-          .getList()
-          .getItem(TEST_FILE_WITHOUT_CONTENT)
-          .getRoot(),
-      );
-      notExist(
-        wiedervorlageComp
-          .getAttachmentContainer()
-          .getList()
-          .getItem(TEST_FILE_WITH_CONTENT)
-          .getRoot(),
-      );
+      notExist(wiedervorlageComp.getAttachmentContainer().getList().getItem(TEST_FILE_WITHOUT_CONTENT).getRoot());
+      notExist(wiedervorlageComp.getAttachmentContainer().getList().getItem(TEST_FILE_WITH_CONTENT).getRoot());
 
       wiedervorlagePage.getSubnavigation().navigateBack();
     });
   });
 
   describe('Same number of attachments after status change', () => {
-    const wiedervorlageComp: WiedervorlageInVorgangE2EComponent =
-      wiedervorlageContainerInVorgang.getWiedervorlage(WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF);
+    const wiedervorlageComp: WiedervorlageInVorgangE2EComponent = wiedervorlageContainerInVorgang.getWiedervorlage(
+      WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF,
+    );
 
     it('should open wiedervorlage page', () => {
       wait(500);
@@ -332,10 +281,7 @@ describe('Wiedervorlage attachments', () => {
       waitForSpinnerToDisappear();
 
       containClass(wiedervorlageContainer.getStatusDot(), 'erledigt');
-      contains(
-        snackBar.getMessage(),
-        `Die Wiedervorlage ${WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF} wurde erledigt`,
-      );
+      contains(snackBar.getMessage(), `Die Wiedervorlage ${WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF} wurde erledigt`);
     });
 
     it('should close snackBar on close', () => {
@@ -350,10 +296,7 @@ describe('Wiedervorlage attachments', () => {
       waitForSpinnerToDisappear();
 
       notContainClass(wiedervorlageContainer.getStatusDot(), 'erledigt');
-      contains(
-        snackBar.getMessage(),
-        `Die Wiedervorlage ${WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF} wurde wiedereröffnet`,
-      );
+      contains(snackBar.getMessage(), `Die Wiedervorlage ${WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF} wurde wiedereröffnet`);
     });
 
     it('should close snackBar on close', () => {
@@ -385,10 +328,7 @@ describe('Wiedervorlage attachments', () => {
       waitForSpinnerToDisappear();
 
       exist(snackbar.getMessage());
-      contains(
-        snackbar.getMessage(),
-        `Die Wiedervorlage "${WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF}" wurde gespeichert`,
-      );
+      contains(snackbar.getMessage(), `Die Wiedervorlage "${WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF}" wurde gespeichert`);
     });
 
     it('should close snackBar on close', () => {
@@ -398,26 +338,15 @@ describe('Wiedervorlage attachments', () => {
     });
 
     it('(Skip reason in OZG-4658) should have no attachments after save', () => {
-      const wiedervorlageComp: WiedervorlageInVorgangE2EComponent =
-        wiedervorlageContainerInVorgang.getWiedervorlage(WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF);
+      const wiedervorlageComp: WiedervorlageInVorgangE2EComponent = wiedervorlageContainerInVorgang.getWiedervorlage(
+        WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF,
+      );
 
       wiedervorlageComp.getExpandButton();
       wiedervorlageComp.expandItem();
 
-      notExist(
-        wiedervorlageComp
-          .getAttachmentContainer()
-          .getList()
-          .getItem(TEST_FILE_WITHOUT_CONTENT)
-          .getRoot(),
-      );
-      notExist(
-        wiedervorlageComp
-          .getAttachmentContainer()
-          .getList()
-          .getItem(TEST_FILE_WITH_CONTENT)
-          .getRoot(),
-      );
+      notExist(wiedervorlageComp.getAttachmentContainer().getList().getItem(TEST_FILE_WITHOUT_CONTENT).getRoot());
+      notExist(wiedervorlageComp.getAttachmentContainer().getList().getItem(TEST_FILE_WITH_CONTENT).getRoot());
     });
   });
 });
diff --git a/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-container.component.spec.ts b/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-container.component.spec.ts
index 379778effd26148200f2700038bb76a38fa23bb7..ccf5fe67622d5cfa056b44b26d29ceed6f4f09ef 100644
--- a/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-container.component.spec.ts
+++ b/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-container.component.spec.ts
@@ -4,6 +4,7 @@ import { mock, Mock } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { faker } from '@faker-js/faker';
 import { expect } from '@jest/globals';
+import { Resource } from '@ngxp/rest';
 import { cold } from 'jest-marbles';
 import { MockComponent } from 'ng-mocks';
 import { EMPTY, of } from 'rxjs';
@@ -37,41 +38,64 @@ describe('FileUploadListContainerComponent', () => {
     fixture.detectChanges();
   });
 
-  describe('component', () => {
-    it('should create', () => {
-      expect(component).toBeTruthy();
-    });
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
 
+  describe('component', () => {
     it('should have default value', () => {
       expect(component.listOrientation).toEqual(BinaryFileListOrientation.HORIZONTAL);
     });
 
-    describe('ngOnInit', () => {
+    describe('set files resource', () => {
+      beforeEach(() => {
+        component._initFileList = jest.fn();
+      });
+
+      it('should set value', () => {
+        const resource: Resource = createDummyResource();
+
+        component.filesResource = resource;
+
+        expect(component._filesResource).toEqual(resource);
+      });
+
+      it('should init file list', () => {
+        component.filesResource = createDummyResource();
+
+        expect(component._initFileList).toHaveBeenCalled();
+      });
+    });
+
+    describe('_initFileList', () => {
       beforeEach(() => {
         binaryFileService.getFiles.mockReturnValue(EMPTY);
       });
 
       describe('on existing files', () => {
+        const filesLinkRel = DummyLinkRel.DUMMY;
+        const filesResource: Resource = createDummyResource([filesLinkRel]);
+
         beforeEach(() => {
-          component.filesResource = createDummyResource([DummyLinkRel.DUMMY]);
-          component.filesLinkRel = DummyLinkRel.DUMMY;
+          component.filesResource = filesResource;
+          component.filesLinkRel = filesLinkRel;
           component.fileUploadType = faker.word.noun();
         });
 
         it('should load existing files', () => {
-          component.filesResource = createDummyResource([DummyLinkRel.DUMMY]);
-          component.filesLinkRel = DummyLinkRel.DUMMY;
+          component.filesResource = filesResource;
+          component.filesLinkRel = filesLinkRel;
 
-          component.ngOnInit();
+          component._initFileList();
 
-          expect(binaryFileService.getFiles).toHaveBeenCalledWith(component.filesResource, component.filesLinkRel);
+          expect(binaryFileService.getFiles).toHaveBeenCalledWith(filesResource, filesLinkRel);
         });
 
         it('should add loaded files', () => {
           const stateResource: StateResource<BinaryFileListResource> = createStateResource(createBinaryFileListResource());
           binaryFileService.getFiles.mockReturnValue(of(stateResource));
 
-          component.ngOnInit();
+          component._initFileList();
           component.uploadedFiles$.subscribe();
 
           expect(binaryFileService.addFiles).toHaveBeenCalledWith(
@@ -84,7 +108,7 @@ describe('FileUploadListContainerComponent', () => {
           const stateResource: StateResource<BinaryFileListResource> = createStateResource(createBinaryFileListResource());
           binaryFileService.getFiles.mockReturnValue(of(stateResource));
 
-          component.ngOnInit();
+          component._initFileList();
           component.uploadedFiles$.subscribe();
 
           expect(binaryFileService.getUploadedFiles).toHaveBeenCalledWith(component.fileUploadType);
@@ -96,26 +120,28 @@ describe('FileUploadListContainerComponent', () => {
           const uploadedFiles: UploadFile[] = [createUploadFile()];
           binaryFileService.getUploadedFiles.mockReturnValue(cold('-a', { a: uploadedFiles }));
 
-          component.ngOnInit();
+          component._initFileList();
 
           expect(component.uploadedFiles$).toBeObservable(cold('a-b', { a: {}, b: uploadedFiles }));
         });
       });
 
       describe('on none existing files', () => {
+        const filesResource: Resource = createDummyResource();
+
         beforeEach(() => {
-          component.filesResource = createDummyResource();
+          component.filesResource = filesResource;
           component.filesLinkRel = DummyLinkRel.DUMMY;
         });
 
         it('should NOT load existing files', () => {
-          component.ngOnInit();
+          component._initFileList();
 
           expect(binaryFileService.getFiles).not.toHaveBeenCalled();
         });
 
         it('should get uploaded files', () => {
-          component.ngOnInit();
+          component._initFileList();
 
           expect(binaryFileService.getUploadedFiles).toHaveBeenCalledWith(component.fileUploadType);
         });
@@ -124,7 +150,7 @@ describe('FileUploadListContainerComponent', () => {
           const uploadFile: UploadFile = createUploadFile();
           binaryFileService.getUploadedFiles = jest.fn().mockReturnValue(singleColdCompleted(uploadFile));
 
-          component.ngOnInit();
+          component._initFileList();
 
           expect(component.uploadedFiles$).toBeObservable(singleColdCompleted(uploadFile));
         });
diff --git a/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-container.component.ts b/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-container.component.ts
index b469cf13efa570da4d4e4ca4374d4a75043592fb..406726ee4de247d678fe64489969016d1f1ed878 100644
--- a/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-container.component.ts
+++ b/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-container.component.ts
@@ -7,7 +7,7 @@ import {
 } from '@alfa-client/binary-file-shared';
 import { getEmbeddedResources, isLoaded, StateResource } from '@alfa-client/tech-shared';
 import { AsyncPipe } from '@angular/common';
-import { Component, inject, Input, OnInit } from '@angular/core';
+import { Component, inject, Input } from '@angular/core';
 import { hasLink, Resource } from '@ngxp/rest';
 import { filter, map, Observable, startWith, switchMap } from 'rxjs';
 import { tap } from 'rxjs/operators';
@@ -20,19 +20,30 @@ import { FileUploadListComponent } from './file-upload-list/file-upload-list.com
   templateUrl: './file-upload-list-container.component.html',
   imports: [FileUploadListComponent, AsyncPipe],
 })
-export class FileUploadListContainerComponent implements OnInit {
+export class FileUploadListContainerComponent {
   @Input() fileUploadType: string;
   @Input() parentFormArrayName: string;
   @Input() listOrientation: BinaryFileListOrientation = BinaryFileListOrientation.HORIZONTAL;
-  @Input() filesResource: Resource;
-  @Input() filesLinkRel: string;
+
+  @Input() set filesResource(value: Resource) {
+    this._filesResource = value;
+    this._initFileList();
+  }
+
+  @Input() set filesLinkRel(value: string) {
+    this._filesLinkRel = value;
+    this._initFileList();
+  }
+
   private readonly binaryFileService: BinaryFileService = inject(BinaryFileService);
 
   public uploadedFiles$: Observable<UploadFileByIdentifier>;
+  _filesResource: Resource;
+  _filesLinkRel: string;
 
-  ngOnInit(): void {
-    if (hasLink(this.filesResource, this.filesLinkRel)) {
-      this.uploadedFiles$ = this.binaryFileService.getFiles(this.filesResource, this.filesLinkRel).pipe(
+  _initFileList(): void {
+    if (hasLink(this._filesResource, this._filesLinkRel)) {
+      this.uploadedFiles$ = this.binaryFileService.getFiles(this._filesResource, this._filesLinkRel).pipe(
         filter(isLoaded),
         map((files: StateResource<BinaryFileListResource>) => getEmbeddedResources(files, BinaryFileListLinkRel.FILE_LIST)),
         tap((binaryFileResources: BinaryFileResource[]) =>
diff --git a/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-item/file-upload-list-item.component.html b/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-item/file-upload-list-item.component.html
index edb77f9c7dc133422248b79b4f99f1204900a46c..c6e0aa4b1713a6ba70cd5fa9ae98d8d5265c1f5d 100644
--- a/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-item/file-upload-list-item.component.html
+++ b/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-item/file-upload-list-item.component.html
@@ -5,7 +5,7 @@
     [errorMessages]="uploadFile.uploadedFile.error | convertProblemDetailToErrorMessages"
     description="Anhang wird hochgeladen"
     [isLoading]="uploadFile.uploadedFile.loading"
-    data-test-id="file-upload-list-item-attachment-upload"
+    [attr.data-test-id]="(uploadFile.fileToUpload.name | convertForDataTest) + '-file-upload-list-item-attachment-upload'"
   ></ods-attachment>
 } @else if (uploadFile.uploadedFile.resource) {
   <ods-attachment-wrapper>
@@ -13,7 +13,7 @@
       [file]="uploadFile.uploadedFile.resource"
       [deletable]="true"
       (startDelete)="delete.emit({ key, binaryFileResource: $event })"
-      data-test-id="file-upload-list-item-uploaded"
+      [attr.data-test-id]="(uploadFile.uploadedFile.resource.name | convertForDataTest) + '-file-upload-list-item-uploaded'"
     >
     </alfa-binary-file2-container>
   </ods-attachment-wrapper>
diff --git a/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-item/file-upload-list-item.component.spec.ts b/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-item/file-upload-list-item.component.spec.ts
index f60c72fda9d26b37343f543116eee01113fc394b..8b1321620c75ccdb5cfeba566b46abdaead8fb95 100644
--- a/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-item/file-upload-list-item.component.spec.ts
+++ b/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-item/file-upload-list-item.component.spec.ts
@@ -1,6 +1,8 @@
 import { BinaryFile2ContainerComponent, BinaryFileModule } from '@alfa-client/binary-file';
 import { BinaryFileResource } from '@alfa-client/binary-file-shared';
 import {
+  convertForDataTest,
+  ConvertForDataTestPipe,
   ConvertProblemDetailToErrorMessagesPipe,
   createEmptyStateResource,
   createErrorStateResource,
@@ -29,12 +31,16 @@ describe('FileUploadListItemComponent', () => {
   let component: FileUploadListItemComponent;
   let fixture: ComponentFixture<FileUploadListItemComponent>;
 
-  const attachmentTestId: string = getDataTestIdOf('file-upload-list-item-attachment-upload');
-  const binaryFileContainerTestId: string = getDataTestIdOf('file-upload-list-item-uploaded');
+  const file: File = createFile();
+  const binaryFileResource: BinaryFileResource = createBinaryFileResource();
+  const attachmentTestId: string = getDataTestIdOf(convertForDataTest(file.name) + '-file-upload-list-item-attachment-upload');
+  const binaryFileContainerTestId: string = getDataTestIdOf(
+    convertForDataTest(binaryFileResource.name) + '-file-upload-list-item-uploaded',
+  );
 
   beforeEach(async () => {
     await TestBed.configureTestingModule({
-      imports: [FileUploadListItemComponent, ConvertProblemDetailToErrorMessagesPipe],
+      imports: [FileUploadListItemComponent, ConvertProblemDetailToErrorMessagesPipe, ConvertForDataTestPipe],
       declarations: [MockModule(BinaryFileModule), MockComponent(BinaryFile2ContainerComponent)],
     }).compileComponents();
 
@@ -50,8 +56,6 @@ describe('FileUploadListItemComponent', () => {
     });
 
     describe('template', () => {
-      const file: File = createFile();
-
       beforeEach(() => {
         component.uploadFile.fileToUpload = file;
       });
@@ -74,7 +78,7 @@ describe('FileUploadListItemComponent', () => {
         });
 
         it('should NOT exists on loaded', () => {
-          component.uploadFile.uploadedFile = createStateResource(createBinaryFileResource());
+          component.uploadFile.uploadedFile = createStateResource(binaryFileResource);
 
           fixture.detectChanges();
 
@@ -82,7 +86,7 @@ describe('FileUploadListItemComponent', () => {
         });
 
         it('should have inputs', () => {
-          component.uploadFile.fileToUpload = createFile();
+          component.uploadFile.fileToUpload = file;
           component.uploadFile.uploadedFile = createEmptyStateResource(true);
 
           fixture.detectChanges();
@@ -97,7 +101,7 @@ describe('FileUploadListItemComponent', () => {
 
       describe('uploaded file', () => {
         it('should exists', () => {
-          component.uploadFile.uploadedFile = createStateResource(createBinaryFileResource());
+          component.uploadFile.uploadedFile = createStateResource(binaryFileResource);
 
           fixture.detectChanges();
 
@@ -113,7 +117,7 @@ describe('FileUploadListItemComponent', () => {
         });
 
         it('should have inputs', () => {
-          component.uploadFile.uploadedFile = createStateResource(createBinaryFileResource());
+          component.uploadFile.uploadedFile = createStateResource(binaryFileResource);
 
           fixture.detectChanges();
 
@@ -131,7 +135,6 @@ describe('FileUploadListItemComponent', () => {
             it('should emit', () => {
               component.delete.emit = jest.fn();
               component.key = 'test';
-              const binaryFileResource: BinaryFileResource = createBinaryFileResource();
               component.uploadFile.uploadedFile = createStateResource(binaryFileResource);
 
               fixture.detectChanges();
diff --git a/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-item/file-upload-list-item.component.ts b/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-item/file-upload-list-item.component.ts
index 25527119bdaa6e87a88335557e8bf8e13054127d..854f6f0466ac5d5f8589c244f751ce2493e82f76 100644
--- a/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-item/file-upload-list-item.component.ts
+++ b/alfa-client/libs/binary-file/src/lib/file-upload-list-container/file-upload-list-item/file-upload-list-item.component.ts
@@ -1,6 +1,6 @@
 import { BinaryFileModule } from '@alfa-client/binary-file';
 import { FileToDelete, UploadFile } from '@alfa-client/binary-file-shared';
-import { ConvertProblemDetailToErrorMessagesPipe } from '@alfa-client/tech-shared';
+import { ConvertForDataTestPipe, ConvertProblemDetailToErrorMessagesPipe } from '@alfa-client/tech-shared';
 import { Component, EventEmitter, Input, Output } from '@angular/core';
 import { AttachmentComponent, AttachmentWrapperComponent } from '@ods/system';
 
@@ -8,7 +8,13 @@ import { AttachmentComponent, AttachmentWrapperComponent } from '@ods/system';
   selector: 'ods-file-upload-list-item',
   standalone: true,
   templateUrl: './file-upload-list-item.component.html',
-  imports: [AttachmentComponent, AttachmentWrapperComponent, BinaryFileModule, ConvertProblemDetailToErrorMessagesPipe],
+  imports: [
+    AttachmentComponent,
+    AttachmentWrapperComponent,
+    BinaryFileModule,
+    ConvertProblemDetailToErrorMessagesPipe,
+    ConvertForDataTestPipe,
+  ],
 })
 export class FileUploadListItemComponent {
   @Input() key: string;
diff --git a/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.spec.ts b/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.spec.ts
index 0620a5f50612f4eeb3243f599d57fc9e1d1e3353..dc42e69a0f52518ba01f5f3ddf2009ef04e344e9 100644
--- a/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.spec.ts
+++ b/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.spec.ts
@@ -1,7 +1,8 @@
-import { BinaryFileService, ToUploadFile } from '@alfa-client/binary-file-shared';
+import { BinaryFileService, FileUploadType, ToUploadFile } from '@alfa-client/binary-file-shared';
 import { ConvertForDataTestPipe } from '@alfa-client/tech-shared';
 import { existsAsHtmlElement, getElementComponentFromFixtureByCss, mock, Mock } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { faker } from '@faker-js/faker/.';
 import { expect } from '@jest/globals';
 import { getUrl, Resource } from '@ngxp/rest';
 import { FileUploadButtonComponent, SpinnerIconComponent } from '@ods/system';
@@ -17,7 +18,8 @@ describe('MultiFileUploadEditorComponent', () => {
   let component: MultiFileUploadEditorComponent;
   let fixture: ComponentFixture<MultiFileUploadEditorComponent>;
 
-  const uploadLinkRel: string = 'upload';
+  const fileUploadType: FileUploadType = faker.word.noun();
+  const uploadLinkRel: string = faker.word.noun();
   const uploadResource: Resource = createDummyResource([uploadLinkRel]);
 
   const buttonTestId: string = getDataTestIdOf('Ein_Label-file-upload-button');
@@ -58,6 +60,14 @@ describe('MultiFileUploadEditorComponent', () => {
 
   describe('component', () => {
     describe('ngOnInit', () => {
+      it('should get upload in progress', () => {
+        component.fileUploadType = fileUploadType;
+
+        component.ngOnInit();
+
+        expect(binaryFileService.isUploadInProgress).toHaveBeenCalledWith(fileUploadType);
+      });
+
       it('should set upload in progress', () => {
         binaryFileService.isUploadInProgress = jest.fn().mockReturnValue(of(true));
 
diff --git a/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.ts b/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.ts
index f69f78656a70336abe6b7a9cd72d8c12051177f4..4c057b3f3d7b52b25dc63164e62f06bb054b83c8 100644
--- a/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.ts
+++ b/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.ts
@@ -1,6 +1,5 @@
 import { BinaryFileModule } from '@alfa-client/binary-file';
 import { BinaryFileService, FileUploadType } from '@alfa-client/binary-file-shared';
-import { KOMMENTAR_UPLOADED_ATTACHMENTS } from '@alfa-client/kommentar-shared';
 import { ConvertForDataTestPipe } from '@alfa-client/tech-shared';
 import { AsyncPipe } from '@angular/common';
 import { Component, HostListener, inject, Input, OnInit } from '@angular/core';
@@ -39,7 +38,7 @@ export class MultiFileUploadEditorComponent implements OnInit {
   public readonly uploadButtonId: string = uniqueId();
 
   ngOnInit(): void {
-    this.isUploadInProgress$ = this.binaryFileService.isUploadInProgress(KOMMENTAR_UPLOADED_ATTACHMENTS);
+    this.isUploadInProgress$ = this.binaryFileService.isUploadInProgress(this.fileUploadType);
   }
 
   @HostListener('change', ['$event.target.files'])
diff --git a/alfa-client/libs/binary-file/src/lib/multi-file-upload/multi-file-upload.component.html b/alfa-client/libs/binary-file/src/lib/multi-file-upload/multi-file-upload.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..184ac868f9f594da443f6f89b969ce1cc85b1dfc
--- /dev/null
+++ b/alfa-client/libs/binary-file/src/lib/multi-file-upload/multi-file-upload.component.html
@@ -0,0 +1,13 @@
+<ods-file-upload-list-container
+  [parentFormArrayName]="filesFormFieldName"
+  [fileUploadType]="fileUploadType"
+  [filesResource]="filesResource"
+  [filesLinkRel]="filesLinkRelation"
+  data-test-id="file-list"
+></ods-file-upload-list-container>
+<ods-multi-file-upload-editor
+  [fileUploadType]="fileUploadType"
+  [uploadResource]="uploadResource"
+  [uploadLinkRelation]="uploadLinkRelation"
+  data-test-id="multi-file-upload-editor"
+></ods-multi-file-upload-editor>
\ No newline at end of file
diff --git a/alfa-client/libs/binary-file/src/lib/multi-file-upload/multi-file-upload.component.spec.ts b/alfa-client/libs/binary-file/src/lib/multi-file-upload/multi-file-upload.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..70679e7411aabf14b7d08d7bf855a40edc41242b
--- /dev/null
+++ b/alfa-client/libs/binary-file/src/lib/multi-file-upload/multi-file-upload.component.spec.ts
@@ -0,0 +1,92 @@
+import { FileUploadListContainerComponent, MultiFileUploadEditorComponent } from '@alfa-client/binary-file';
+import { FileUploadType } from '@alfa-client/binary-file-shared';
+import { existsAsHtmlElement, getElementComponentFromFixtureByCss } from '@alfa-client/test-utils';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { faker } from '@faker-js/faker/.';
+import { expect } from '@jest/globals';
+import { Resource } from '@ngxp/rest';
+import { MockComponent } from 'ng-mocks';
+import { getDataTestIdOf } from '../../../../tech-shared/test/data-test';
+import { DummyLinkRel } from '../../../../tech-shared/test/dummy';
+import { createDummyResource } from '../../../../tech-shared/test/resource';
+import { MultiFileUploadComponent } from './multi-file-upload.component';
+
+describe('MultiFileUploadComponent', () => {
+  let component: MultiFileUploadComponent;
+  let fixture: ComponentFixture<MultiFileUploadComponent>;
+
+  const fileUploadListTestId: string = getDataTestIdOf('file-list');
+  const fileUploadEditorTestId: string = getDataTestIdOf('multi-file-upload-editor');
+
+  const fileUploadType: FileUploadType = faker.word.noun();
+  const uploadLinkRel: string = DummyLinkRel.DUMMY;
+  const uploadResource: Resource = createDummyResource();
+  const filesLinkRel: string = DummyLinkRel.DUMMY;
+  const filesResource: Resource = createDummyResource();
+  const formFieldsName: string = faker.word.noun();
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [MultiFileUploadComponent],
+      declarations: [MockComponent(MultiFileUploadEditorComponent), MockComponent(FileUploadListContainerComponent)],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(MultiFileUploadComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+
+  describe('template', () => {
+    beforeEach(() => {
+      component.filesFormFieldName = formFieldsName;
+      component.fileUploadType = fileUploadType;
+      component.uploadResource = uploadResource;
+      component.uploadLinkRelation = uploadLinkRel;
+      component.filesResource = filesResource;
+      component.filesLinkRelation = filesLinkRel;
+    });
+
+    describe('file upload list', () => {
+      it('should exists', () => {
+        existsAsHtmlElement(fixture, fileUploadListTestId);
+      });
+
+      it('should have inputs', () => {
+        fixture.detectChanges();
+
+        const fileUploadListComponent: FileUploadListContainerComponent = getElementComponentFromFixtureByCss(
+          fixture,
+          fileUploadListTestId,
+        );
+
+        expect(fileUploadListComponent.parentFormArrayName).toEqual(formFieldsName);
+        expect(fileUploadListComponent.fileUploadType).toEqual(fileUploadType);
+        expect(fileUploadListComponent.filesResource).toEqual(filesResource);
+        expect(fileUploadListComponent.filesLinkRel).toEqual(filesLinkRel);
+      });
+    });
+
+    describe('file upload editor', () => {
+      it('should exists', () => {
+        existsAsHtmlElement(fixture, fileUploadEditorTestId);
+      });
+
+      it('should have inputs', () => {
+        fixture.detectChanges();
+
+        const fileUploadEditorComponent: MultiFileUploadEditorComponent = getElementComponentFromFixtureByCss(
+          fixture,
+          fileUploadEditorTestId,
+        );
+
+        expect(fileUploadEditorComponent.fileUploadType).toEqual(fileUploadType);
+        expect(fileUploadEditorComponent.uploadResource).toEqual(uploadResource);
+        expect(fileUploadEditorComponent.uploadLinkRelation).toEqual(uploadLinkRel);
+      });
+    });
+  });
+});
diff --git a/alfa-client/libs/binary-file/src/lib/multi-file-upload/multi-file-upload.component.ts b/alfa-client/libs/binary-file/src/lib/multi-file-upload/multi-file-upload.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..56234cb550a4fdcaf31529f5a0af54457eb94623
--- /dev/null
+++ b/alfa-client/libs/binary-file/src/lib/multi-file-upload/multi-file-upload.component.ts
@@ -0,0 +1,22 @@
+import { FileUploadType } from '@alfa-client/binary-file-shared';
+import { Component, Input } from '@angular/core';
+import { Resource } from '@ngxp/rest';
+import { BinaryFileListOrientation } from '../directive/binary-file-list-orientation/binary-file-list-orientation.directive';
+import { FileUploadListContainerComponent } from '../file-upload-list-container/file-upload-list-container.component';
+import { MultiFileUploadEditorComponent } from '../multi-file-upload-editor/multi-file-upload-editor.component';
+
+@Component({
+  selector: 'ods-multi-file-upload',
+  standalone: true,
+  templateUrl: './multi-file-upload.component.html',
+  imports: [FileUploadListContainerComponent, MultiFileUploadEditorComponent],
+})
+export class MultiFileUploadComponent {
+  @Input({ required: true }) filesFormFieldName: string;
+  @Input({ required: true }) fileUploadType: FileUploadType;
+  @Input({ required: true }) uploadResource: Resource;
+  @Input({ required: true }) uploadLinkRelation: string;
+  @Input({ required: true }) filesResource: Resource;
+  @Input({ required: true }) filesLinkRelation: string;
+  @Input() listOrientation: BinaryFileListOrientation = BinaryFileListOrientation.HORIZONTAL;
+}
diff --git a/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.html b/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.html
index 8a5168bf1dc59de260e7e7a5ece9c9a6167153c1..ccb901c94fa17fc98518b6abfdd9e202058c2e8a 100644
--- a/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.html
+++ b/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.html
@@ -27,19 +27,14 @@
   <ozgcloud-textarea-editor [formControlName]="formServiceClass.TEXT" label="Kommentar" [required]="true">
   </ozgcloud-textarea-editor>
 
-  <ods-file-upload-list-container
-    [parentFormArrayName]="formServiceClass.FIELD_ATTACHMENTS"
-    [fileUploadType]="KOMMENTAR_UPLOADED_ATTACHMENTS"
-    [filesResource]="kommentar"
-    [filesLinkRel]="KommentarLinkRel.ATTACHMENTS"
-    data-test-id="kommentar-multi-file-upload-list"
-  ></ods-file-upload-list-container>
-  <ods-multi-file-upload-editor
-    [fileUploadType]="KOMMENTAR_UPLOADED_ATTACHMENTS"
-    [uploadResource]="kommentarListStateResource.resource"
-    [uploadLinkRelation]="kommentarListLinkRel.UPLOAD_FILE"
-    data-test-id="kommentar-multi-file-upload-editor"
-  ></ods-multi-file-upload-editor>
+  <ods-multi-file-upload
+      [filesFormFieldName]="formServiceClass.FIELD_ATTACHMENTS"
+      [fileUploadType]="KOMMENTAR_UPLOADED_ATTACHMENTS"
+      [uploadResource]="kommentarListStateResource.resource"
+      [uploadLinkRelation]="kommentarListLinkRel.UPLOAD_FILE"
+      [filesResource]="kommentar"
+      [filesLinkRelation]="KommentarLinkRel.ATTACHMENTS"
+  ></ods-multi-file-upload>
 
   <div class="buttons">
     <ozgcloud-stroked-button-with-spinner
diff --git a/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.spec.ts b/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.spec.ts
index 15d300ef0ad665960ee7349b31d2678d60ac7c30..9753cc7fa2dafde144f13618d84c55a24b1bc1a3 100644
--- a/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.spec.ts
+++ b/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.spec.ts
@@ -21,11 +21,11 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { BinaryFileAttachmentContainerComponent, FileUploadListContainerComponent, MultiFileUploadEditorComponent, } from '@alfa-client/binary-file';
+import { BinaryFileAttachmentContainerComponent } from '@alfa-client/binary-file';
 import { CommandResource } from '@alfa-client/command-shared';
-import { KOMMENTAR_UPLOADED_ATTACHMENTS, KommentarLinkRel, KommentarListLinkRel, KommentarListResource, KommentarService, } from '@alfa-client/kommentar-shared';
+import { KommentarLinkRel, KommentarListResource, KommentarService } from '@alfa-client/kommentar-shared';
 import { createEmptyStateResource, createErrorStateResource, createStateResource, StateResource } from '@alfa-client/tech-shared';
-import { existsAsHtmlElement, getElementComponentFromFixtureByCss, Mock, mock, triggerEvent, useFromMock, } from '@alfa-client/test-utils';
+import { existsAsHtmlElement, Mock, mock, triggerEvent, useFromMock } from '@alfa-client/test-utils';
 import { OzgcloudStrokedButtonWithSpinnerComponent, TextAreaEditorComponent } from '@alfa-client/ui';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
@@ -34,6 +34,7 @@ import { expect } from '@jest/globals';
 import { MockComponent } from 'ng-mocks';
 import { EMPTY, of } from 'rxjs';
 import { createBinaryFileListResource } from '../../../../../binary-file-shared/test/binary-file';
+import { MultiFileUploadComponent } from '../../../../../binary-file/src/lib/multi-file-upload/multi-file-upload.component';
 import { createSuccessfullyDoneCommandStateResource } from '../../../../../command-shared/test/command';
 import { createKommentarListResource, createKommentarResource } from '../../../../../kommentar-shared/test/kommentar';
 import { getDataTestIdOf } from '../../../../../tech-shared/test/data-test';
@@ -47,8 +48,6 @@ describe('KommentarFormComponent', () => {
   let fixture: ComponentFixture<KommentarFormComponent>;
 
   const cancelButtonTestId: string = getDataTestIdOf('cancel-button');
-  const fileUploadListTestId: string = getDataTestIdOf('kommentar-multi-file-upload-list');
-  const fileUploadEditorTestId: string = getDataTestIdOf('kommentar-multi-file-upload-editor');
 
   const kommentarListStateResource: StateResource<KommentarListResource> = createStateResource(createKommentarListResource());
 
@@ -67,8 +66,7 @@ describe('KommentarFormComponent', () => {
         MockComponent(TextAreaEditorComponent),
         MockComponent(OzgcloudStrokedButtonWithSpinnerComponent),
         MockComponent(BinaryFileAttachmentContainerComponent),
-        MockComponent(FileUploadListContainerComponent),
-        MockComponent(MultiFileUploadEditorComponent),
+        MockComponent(MultiFileUploadComponent),
       ],
       imports: [MatFormFieldModule, ReactiveFormsModule],
       providers: [
@@ -198,43 +196,6 @@ describe('KommentarFormComponent', () => {
   });
 
   describe('template', () => {
-    describe('file upload list', () => {
-      it('should exists', () => {
-        existsAsHtmlElement(fixture, fileUploadListTestId);
-      });
-
-      it('should have inputs', () => {
-        fixture.detectChanges();
-
-        const fileUploadListComponent: FileUploadListContainerComponent = getElementComponentFromFixtureByCss(
-          fixture,
-          fileUploadListTestId,
-        );
-
-        expect(fileUploadListComponent.parentFormArrayName).toEqual(KommentarFormService.FIELD_ATTACHMENTS);
-        expect(fileUploadListComponent.fileUploadType).toEqual(KOMMENTAR_UPLOADED_ATTACHMENTS);
-      });
-    });
-
-    describe('file upload editor', () => {
-      it('should exists', () => {
-        existsAsHtmlElement(fixture, fileUploadEditorTestId);
-      });
-
-      it('should have inputs', () => {
-        fixture.detectChanges();
-
-        const fileUploadEditorComponent: MultiFileUploadEditorComponent = getElementComponentFromFixtureByCss(
-          fixture,
-          fileUploadEditorTestId,
-        );
-
-        expect(fileUploadEditorComponent.fileUploadType).toEqual(KOMMENTAR_UPLOADED_ATTACHMENTS);
-        expect(fileUploadEditorComponent.uploadResource).toEqual(component.kommentarListStateResource.resource);
-        expect(fileUploadEditorComponent.uploadLinkRelation).toEqual(KommentarListLinkRel.UPLOAD_FILE);
-      });
-    });
-
     describe('cancel button', () => {
       it('should exists', () => {
         existsAsHtmlElement(fixture, cancelButtonTestId);
diff --git a/alfa-client/libs/kommentar/src/lib/kommentar.module.ts b/alfa-client/libs/kommentar/src/lib/kommentar.module.ts
index 3a8e4dd40a4a53552567b81b69fad3af2c230312..70d991da2a329dee09ccc3758fe80305d0347434 100644
--- a/alfa-client/libs/kommentar/src/lib/kommentar.module.ts
+++ b/alfa-client/libs/kommentar/src/lib/kommentar.module.ts
@@ -32,6 +32,7 @@ import { NgModule } from '@angular/core';
 import { ReactiveFormsModule } from '@angular/forms';
 import { FileUploadListContainerComponent } from '../../../binary-file/src/lib/file-upload-list-container/file-upload-list-container.component';
 import { MultiFileUploadEditorComponent } from '../../../binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component';
+import { MultiFileUploadComponent } from '../../../binary-file/src/lib/multi-file-upload/multi-file-upload.component';
 import { KommentarFormComponent } from './kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component';
 import { KommentarListInVorgangContainerComponent } from './kommentar-list-in-vorgang-container/kommentar-list-in-vorgang-container.component';
 import { KommentarListInVorgangComponent } from './kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-in-vorgang.component';
@@ -46,6 +47,7 @@ import { KommentarListItemInVorgangComponent } from './kommentar-list-in-vorgang
     BinaryFileModule,
     MultiFileUploadEditorComponent,
     FileUploadListContainerComponent,
+    MultiFileUploadComponent,
     ReactiveFormsModule,
     TextAreaEditorComponent,
     OzgcloudStrokedButtonWithSpinnerComponent,
diff --git a/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.model.ts b/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.model.ts
index 2da311b309c80898da51eca6ee5aa04714b8bfff..a9fbef74f589c2a26460d6e0b600a09d01f9f8d7 100644
--- a/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.model.ts
+++ b/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.model.ts
@@ -36,8 +36,11 @@ export interface Wiedervorlage {
 }
 
 export interface WiedervorlageResource extends Wiedervorlage, Resource {}
+
 export interface WiedervorlageListResource extends ListResource {}
 
 export interface BinaryFileListByWiedervorlageUri {
   [uri: ResourceUri]: BehaviorSubject<StateResource<BinaryFileListResource>>;
 }
+
+export const WIEDERVORLAGE_UPLOADED_ATTACHMENTS = 'wiedervorlage_uploaded_attachments';
diff --git a/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.spec.ts b/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.spec.ts
index b9cc7466f7eeb8425289ce68dc5e5fa0745a74bb..3b37f2ba12ba7a1fe70501e190a918d95d8d1430 100644
--- a/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.spec.ts
+++ b/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.spec.ts
@@ -21,49 +21,28 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { BinaryFileListResource, BinaryFileService } from '@alfa-client/binary-file-shared';
+import { BinaryFileService } from '@alfa-client/binary-file-shared';
 import { CommandOrder, CommandResource, CommandService } from '@alfa-client/command-shared';
 import { NavigationService } from '@alfa-client/navigation-shared';
-import {
-  StateResource,
-  createEmptyStateResource,
-  createStateResource,
-  decodeUrlFromEmbedding,
-} from '@alfa-client/tech-shared';
+import * as TechShared from '@alfa-client/tech-shared';
+import { createEmptyStateResource, createStateResource, decodeUrlFromEmbedding, StateResource } from '@alfa-client/tech-shared';
 import { Mock, mock, useFromMock } from '@alfa-client/test-utils';
 import { SnackBarService } from '@alfa-client/ui';
-import {
-  VorgangResource,
-  VorgangService,
-  VorgangWithEingangResource,
-} from '@alfa-client/vorgang-shared';
+import { VorgangResource, VorgangService, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
+import { expect } from '@jest/globals';
 import { getUrl } from '@ngxp/rest';
 import { cold, hot } from 'jest-marbles';
-import { createBinaryFileListResource } from 'libs/binary-file-shared/test/binary-file';
 import { CommandLinkRel } from 'libs/command-shared/src/lib/command.linkrel';
 import { createCommandResource } from 'libs/command-shared/test/command';
-import {
-  createVorgangResource,
-  createVorgangWithEingangResource,
-} from 'libs/vorgang-shared/test/vorgang';
-import {
-  createWiedervorlage,
-  createWiedervorlageListResource,
-  createWiedervorlageResource,
-} from 'libs/wiedervorlage-shared/test/wiedervorlage';
+import { createVorgangResource, createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang';
+import { createWiedervorlage, createWiedervorlageListResource, createWiedervorlageResource, } from 'libs/wiedervorlage-shared/test/wiedervorlage';
 import { of } from 'rxjs';
 import { WiedervorlageLinkRel, WiedervorlageListLinkRel } from './wiedervorlage.linkrel';
 import { WiedervorlageMessages } from './wiedervorlage.message';
-import {
-  Wiedervorlage,
-  WiedervorlageListResource,
-  WiedervorlageResource,
-} from './wiedervorlage.model';
+import { Wiedervorlage, WIEDERVORLAGE_UPLOADED_ATTACHMENTS, WiedervorlageListResource, WiedervorlageResource, } from './wiedervorlage.model';
 import { WiedervorlageRepository } from './wiedervorlage.repository';
 import { WiedervorlageService } from './wiedervorlage.service';
 
-import * as TechShared from '@alfa-client/tech-shared';
-
 jest.mock('@alfa-client/tech-shared', () => mockAsEsModule('@alfa-client/tech-shared'));
 
 function mockAsEsModule(module: string) {
@@ -86,9 +65,7 @@ describe('WiedervorlageService', () => {
   const wiedervorlageResource: WiedervorlageResource = createWiedervorlageResource();
   const wiedervorlage: Wiedervorlage = createWiedervorlage();
   const commandResource: CommandResource = createCommandResource();
-  const commandResourceWithEffectedResourceLink: CommandResource = createCommandResource([
-    CommandLinkRel.EFFECTED_RESOURCE,
-  ]);
+  const commandResourceWithEffectedResourceLink: CommandResource = createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]);
 
   beforeEach(() => {
     repository = mock(WiedervorlageRepository);
@@ -112,11 +89,9 @@ describe('WiedervorlageService', () => {
 
   describe('getWiedervorlageList', () => {
     const wiedervorlageList: WiedervorlageListResource = createWiedervorlageListResource();
-    const wiedervorlageListStateResource: StateResource<WiedervorlageListResource> =
-      createStateResource(wiedervorlageList);
+    const wiedervorlageListStateResource: StateResource<WiedervorlageListResource> = createStateResource(wiedervorlageList);
 
-    const vorgangWithEingangStateResource: StateResource<VorgangWithEingangResource> =
-      createStateResource(vorgangResource);
+    const vorgangWithEingangStateResource: StateResource<VorgangWithEingangResource> = createStateResource(vorgangResource);
 
     beforeEach(() => {
       vorgangService.getVorgangWithEingang.mockReturnValue(of(vorgangWithEingangStateResource));
@@ -129,18 +104,12 @@ describe('WiedervorlageService', () => {
     });
 
     it('should return values', () => {
-      vorgangService.getVorgangWithEingang.mockReturnValue(
-        hot('-a', { a: vorgangWithEingangStateResource }),
-      );
-      service.wiedervorlageList$.asObservable = jest
-        .fn()
-        .mockReturnValue(hot('-a', { a: wiedervorlageListStateResource }));
+      vorgangService.getVorgangWithEingang.mockReturnValue(hot('-a', { a: vorgangWithEingangStateResource }));
+      service.wiedervorlageList$.asObservable = jest.fn().mockReturnValue(hot('-a', { a: wiedervorlageListStateResource }));
 
       const result = service.getWiedervorlageList();
 
-      expect(result).toBeObservable(
-        cold('ab', { a: createEmptyStateResource(true), b: wiedervorlageListStateResource }),
-      );
+      expect(result).toBeObservable(cold('ab', { a: createEmptyStateResource(true), b: wiedervorlageListStateResource }));
     });
 
     it.skip('should call loadWiedervorlagenByVorgang if required', (done) => {
@@ -159,9 +128,7 @@ describe('WiedervorlageService', () => {
 
     it('should NOT call loadWiedervorlagenByVorgang if already loaded', () => {
       service.loadWiedervorlagenByVorgang = jest.fn();
-      service.wiedervorlageList$.asObservable = jest
-        .fn()
-        .mockReturnValue(of(wiedervorlageListStateResource));
+      service.wiedervorlageList$.asObservable = jest.fn().mockReturnValue(of(wiedervorlageListStateResource));
 
       service.getWiedervorlageList();
 
@@ -176,9 +143,7 @@ describe('WiedervorlageService', () => {
       createStateResource(wiedervorlageListResource);
 
     it('should return initial value', () => {
-      service.wiedervorlageList$.asObservable = jest
-        .fn()
-        .mockReturnValue(hot('-a', { a: wiedervorlageListResource }));
+      service.wiedervorlageList$.asObservable = jest.fn().mockReturnValue(hot('-a', { a: wiedervorlageListResource }));
 
       const result = service.getWiedervorlageListByGivenVorgang(vorgang);
 
@@ -206,8 +171,7 @@ describe('WiedervorlageService', () => {
 
   describe('getWiedervorlage', () => {
     const wiedervorlage: WiedervorlageResource = createWiedervorlageResource();
-    const wiedervorlageStateResource: StateResource<WiedervorlageResource> =
-      createStateResource(wiedervorlage);
+    const wiedervorlageStateResource: StateResource<WiedervorlageResource> = createStateResource(wiedervorlage);
 
     beforeEach(() => {
       navigationService.getDecodedParam.mockReturnValue(getUrl(wiedervorlageResource));
@@ -215,15 +179,11 @@ describe('WiedervorlageService', () => {
     });
 
     it('should return initial values', () => {
-      service.wiedervorlage$.asObservable = jest
-        .fn()
-        .mockReturnValue(hot('-a', { a: wiedervorlageStateResource }));
+      service.wiedervorlage$.asObservable = jest.fn().mockReturnValue(hot('-a', { a: wiedervorlageStateResource }));
 
       const result = service.getWiedervorlage();
 
-      expect(result).toBeObservable(
-        cold('ab', { a: createEmptyStateResource(true), b: wiedervorlageStateResource }),
-      );
+      expect(result).toBeObservable(cold('ab', { a: createEmptyStateResource(true), b: wiedervorlageStateResource }));
     });
 
     it('should set loading to true', () => {
@@ -237,9 +197,7 @@ describe('WiedervorlageService', () => {
     it('should call navigationService', () => {
       service.getWiedervorlage().subscribe();
 
-      expect(navigationService.getDecodedParam).toHaveBeenCalledWith(
-        WiedervorlageService.encodedWiedervorlageUriParam,
-      );
+      expect(navigationService.getDecodedParam).toHaveBeenCalledWith(WiedervorlageService.encodedWiedervorlageUriParam);
     });
 
     it('should call repository', () => {
@@ -257,9 +215,7 @@ describe('WiedervorlageService', () => {
 
   describe('saveWiedervorlage', () => {
     beforeEach(() => {
-      commandService.createCommand.mockReturnValue(
-        of(createStateResource(commandResourceWithEffectedResourceLink)),
-      );
+      commandService.createCommand.mockReturnValue(of(createStateResource(commandResourceWithEffectedResourceLink)));
     });
 
     it('should return initial value and mapped value', () => {
@@ -280,11 +236,10 @@ describe('WiedervorlageService', () => {
     it('should call command service', () => {
       service.saveWiedervorlage(wiedervorlageResource, wiedervorlage).subscribe();
 
-      expect(commandService.createCommand).toHaveBeenCalledWith(
-        wiedervorlageResource,
-        WiedervorlageLinkRel.EDIT,
-        { order: CommandOrder.EDIT_WIEDERVORLAGE, body: wiedervorlage },
-      );
+      expect(commandService.createCommand).toHaveBeenCalledWith(wiedervorlageResource, WiedervorlageLinkRel.EDIT, {
+        order: CommandOrder.EDIT_WIEDERVORLAGE,
+        body: wiedervorlage,
+      });
     });
 
     it('should set submit-in-progress on loading', () => {
@@ -300,10 +255,7 @@ describe('WiedervorlageService', () => {
 
       service.saveWiedervorlage(wiedervorlageResource, wiedervorlage).subscribe();
 
-      const expectedMessage = WiedervorlageMessages.SAVED.replace(
-        '{betreff}',
-        wiedervorlage.betreff,
-      );
+      const expectedMessage = WiedervorlageMessages.SAVED.replace('{betreff}', wiedervorlage.betreff);
       expect(service.proceedAfterReceiveCommand).toHaveBeenCalledWith(
         createStateResource(commandResourceWithEffectedResourceLink),
         expectedMessage,
@@ -317,15 +269,11 @@ describe('WiedervorlageService', () => {
     });
 
     it('should return intitial value and mapped value', () => {
-      commandService.createCommand.mockReturnValue(
-        hot('-a', { a: createStateResource(commandResource) }),
-      );
+      commandService.createCommand.mockReturnValue(hot('-a', { a: createStateResource(commandResource) }));
 
       const result = service.createWiedervorlage(wiedervorlage);
 
-      expect(result).toBeObservable(
-        cold('ab', { a: createEmptyStateResource(true), b: createStateResource(commandResource) }),
-      );
+      expect(result).toBeObservable(cold('ab', { a: createEmptyStateResource(true), b: createStateResource(commandResource) }));
     });
 
     it('should set submit-in-progress on loading', () => {
@@ -352,23 +300,18 @@ describe('WiedervorlageService', () => {
 
       service.createWiedervorlage(wiedervorlage).subscribe();
 
-      const expectedMessage = WiedervorlageMessages.CREATED.replace(
-        '{betreff}',
-        wiedervorlage.betreff,
-      );
-      expect(service.proceedAfterReceiveCommand).toHaveBeenCalledWith(
-        createStateResource(commandResource),
-        expectedMessage,
-      );
+      const expectedMessage = WiedervorlageMessages.CREATED.replace('{betreff}', wiedervorlage.betreff);
+      expect(service.proceedAfterReceiveCommand).toHaveBeenCalledWith(createStateResource(commandResource), expectedMessage);
     });
   });
 
   describe('proceedAfterRecieveCommand', () => {
+    beforeEach(() => {
+      service.clearUploadedFiles = jest.fn();
+    });
+
     it('should set reload on wiedervorlageList', () => {
-      service.proceedAfterReceiveCommand(
-        createStateResource(commandResourceWithEffectedResourceLink),
-        null,
-      );
+      service.proceedAfterReceiveCommand(createStateResource(commandResourceWithEffectedResourceLink), null);
 
       expect(service.wiedervorlageList$.value.reload).toBe(true);
     });
@@ -383,15 +326,15 @@ describe('WiedervorlageService', () => {
       snackbarService.show = jest.fn();
       const snackbarMessage: string = 'XX wurde XX';
 
-      service.proceedAfterReceiveCommand(
-        createStateResource(commandResourceWithEffectedResourceLink),
-        snackbarMessage,
-      );
+      service.proceedAfterReceiveCommand(createStateResource(commandResourceWithEffectedResourceLink), snackbarMessage);
 
-      expect(snackbarService.show).toHaveBeenCalledWith(
-        commandResourceWithEffectedResourceLink,
-        snackbarMessage,
-      );
+      expect(snackbarService.show).toHaveBeenCalledWith(commandResourceWithEffectedResourceLink, snackbarMessage);
+    });
+
+    it('should clear uploaded files', () => {
+      service.proceedAfterReceiveCommand(createStateResource(commandResourceWithEffectedResourceLink), null);
+
+      expect(service.clearUploadedFiles).toHaveBeenCalled();
     });
   });
 
@@ -399,24 +342,22 @@ describe('WiedervorlageService', () => {
     const wiedervorlageResource: WiedervorlageResource = createWiedervorlageResource();
 
     beforeEach(() => {
-      commandService.createCommand.mockReturnValue(
-        of(createStateResource(commandResourceWithEffectedResourceLink)),
-      );
+      commandService.createCommand.mockReturnValue(of(createStateResource(commandResourceWithEffectedResourceLink)));
       (<any>service).reloadWiedervorlageList = jest.fn();
       (<any>service).loadAndSetWiedervorlageByUrl = jest.fn();
 
       service.wiedervorlage$.next(createStateResource(wiedervorlageResource));
+      service.clearUploadedFiles = jest.fn();
     });
 
     describe('wiedervorlage erledigen', () => {
       it('should call commandService', () => {
         service.erledigen();
 
-        expect(commandService.createCommand).toHaveBeenCalledWith(
-          wiedervorlageResource,
-          WiedervorlageLinkRel.ERLEDIGEN,
-          { order: CommandOrder.WIEDERVORLAGE_ERLEDIGEN, body: null },
-        );
+        expect(commandService.createCommand).toHaveBeenCalledWith(wiedervorlageResource, WiedervorlageLinkRel.ERLEDIGEN, {
+          order: CommandOrder.WIEDERVORLAGE_ERLEDIGEN,
+          body: null,
+        });
       });
 
       it('should reload wiedervorlage', () => {
@@ -433,17 +374,22 @@ describe('WiedervorlageService', () => {
           `Die Wiedervorlage ${wiedervorlageResource.betreff} wurde erledigt`,
         );
       });
+
+      it('should clear uploaded files', () => {
+        service.erledigen();
+
+        expect(service.clearUploadedFiles).toHaveBeenCalled();
+      });
     });
 
     describe('wiedervorlage wiedereroeffnen', () => {
       it('should call commandService', () => {
         service.wiedereroeffnen();
 
-        expect(commandService.createCommand).toHaveBeenCalledWith(
-          wiedervorlageResource,
-          WiedervorlageLinkRel.WIEDEREROEFFNEN,
-          { order: CommandOrder.WIEDERVORLAGE_WIEDEREROEFFNEN, body: null },
-        );
+        expect(commandService.createCommand).toHaveBeenCalledWith(wiedervorlageResource, WiedervorlageLinkRel.WIEDEREROEFFNEN, {
+          order: CommandOrder.WIEDERVORLAGE_WIEDEREROEFFNEN,
+          body: null,
+        });
       });
 
       it('should reload wiedervorlage', () => {
@@ -460,6 +406,12 @@ describe('WiedervorlageService', () => {
           `Die Wiedervorlage ${wiedervorlageResource.betreff} wurde wiedereröffnet`,
         );
       });
+
+      it('should clear uploaded files', () => {
+        service.wiedereroeffnen();
+
+        expect(service.clearUploadedFiles).toHaveBeenCalled();
+      });
     });
   });
 
@@ -467,9 +419,7 @@ describe('WiedervorlageService', () => {
     const message: string = 'SnackbarMessage';
 
     it('should call service if command is done', () => {
-      const commandResource: CommandResource = createCommandResource([
-        CommandLinkRel.EFFECTED_RESOURCE,
-      ]);
+      const commandResource: CommandResource = createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]);
 
       service.showSnackBar(commandResource, message);
 
@@ -491,7 +441,6 @@ describe('WiedervorlageService', () => {
 
       service.setWiedervorlageListReload = jest.fn();
       (<any>service).forceWiedervorlageReload = jest.fn();
-      service.clearAttachmentList = jest.fn();
       service.clearWiedervorlagenList = jest.fn();
     });
 
@@ -511,12 +460,6 @@ describe('WiedervorlageService', () => {
 
         expect((<any>service).forceWiedervorlageReload).toHaveBeenCalled();
       });
-
-      it('should clear attachments', () => {
-        service.onNavigation({});
-
-        expect(service.clearAttachmentList).toHaveBeenCalled();
-      });
     });
 
     describe('to vorgang list', () => {
@@ -525,48 +468,6 @@ describe('WiedervorlageService', () => {
 
         expect(service.clearWiedervorlagenList).toHaveBeenCalled();
       });
-
-      it('should clear attachments', () => {
-        service.onNavigation({});
-
-        expect(service.clearAttachmentList).toHaveBeenCalled();
-      });
-    });
-  });
-
-  describe('load attachments', () => {
-    const binaryFileListResource: BinaryFileListResource = createBinaryFileListResource();
-    const binaryFileStateResource: StateResource<BinaryFileListResource> =
-      createStateResource(binaryFileListResource);
-
-    beforeEach(() => {
-      binaryFileService.getFiles.mockReturnValue(of(binaryFileStateResource));
-      service.setAttachmentLoading = jest.fn();
-    });
-
-    it('should set attachment state resource on loading', () => {
-      service.loadAttachments(wiedervorlageResource);
-
-      expect(service.setAttachmentLoading).toHaveBeenCalledWith(wiedervorlageResource);
-    });
-
-    it('should call file service', () => {
-      service.loadAttachments(wiedervorlageResource);
-
-      expect(binaryFileService.getFiles).toHaveBeenCalledWith(
-        wiedervorlageResource,
-        WiedervorlageLinkRel.ATTACHMENTS,
-      );
-    });
-
-    it('should set loaded resource into state resource', () => {
-      service.loadAttachments(wiedervorlageResource);
-
-      service.getAttachmentList(wiedervorlageResource);
-      const result: StateResource<BinaryFileListResource> =
-        service.attachmentListByWiedervorlage[getUrl(wiedervorlageResource)].value;
-
-      expect(result).toEqual(binaryFileStateResource);
     });
   });
 
@@ -618,4 +519,12 @@ describe('WiedervorlageService', () => {
       expect(repository.getWiedervorlage).toHaveBeenCalledWith(decodedUrl);
     });
   });
+
+  describe('clearUploadedFiles', () => {
+    it('should call binary file service', () => {
+      service.clearUploadedFiles();
+
+      expect(binaryFileService.clearUploadedFiles).toHaveBeenCalledWith(WIEDERVORLAGE_UPLOADED_ATTACHMENTS);
+    });
+  });
 });
diff --git a/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts b/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts
index 691da275eaed51ea51269561b8c979daa388153a..38a7b041ad76c71ef06a78f5f7184a0260fd31f0 100644
--- a/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts
+++ b/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts
@@ -21,42 +21,21 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { BinaryFileListResource, BinaryFileService } from '@alfa-client/binary-file-shared';
-import {
-  CommandOrder,
-  CommandResource,
-  CommandService,
-  CreateCommand,
-  isDone,
-} from '@alfa-client/command-shared';
+import { BinaryFileService } from '@alfa-client/binary-file-shared';
+import { CommandOrder, CommandResource, CommandService, CreateCommand, isDone } from '@alfa-client/command-shared';
 import { NavigationService } from '@alfa-client/navigation-shared';
-import {
-  StateResource,
-  createEmptyStateResource,
-  createStateResource,
-  decodeUrlFromEmbedding,
-  doIfLoadingRequired,
-  hasStateResourceError,
-  isNotNull,
-  isNotUndefined,
-  replacePlaceholder,
-} from '@alfa-client/tech-shared';
+import { createEmptyStateResource, createStateResource, decodeUrlFromEmbedding, doIfLoadingRequired, hasStateResourceError, isNotNull, isNotUndefined, replacePlaceholder, StateResource, } from '@alfa-client/tech-shared';
 import { SnackBarService } from '@alfa-client/ui';
 import { VorgangHeaderLinkRel, VorgangResource, VorgangService } from '@alfa-client/vorgang-shared';
 import { Injectable, OnDestroy } from '@angular/core';
 import { Params } from '@angular/router';
-import { ResourceUri, getUrl, hasLink } from '@ngxp/rest';
+import { hasLink, ResourceUri } from '@ngxp/rest';
 import { isEqual, isNil, isNull, isUndefined } from 'lodash-es';
-import { BehaviorSubject, Observable, Subscription, combineLatest } from 'rxjs';
+import { BehaviorSubject, combineLatest, Observable, Subscription } from 'rxjs';
 import { filter, map, startWith, tap } from 'rxjs/operators';
 import { WiedervorlageLinkRel, WiedervorlageListLinkRel } from './wiedervorlage.linkrel';
 import { WiedervorlageMessages } from './wiedervorlage.message';
-import {
-  BinaryFileListByWiedervorlageUri,
-  Wiedervorlage,
-  WiedervorlageListResource,
-  WiedervorlageResource,
-} from './wiedervorlage.model';
+import { Wiedervorlage, WIEDERVORLAGE_UPLOADED_ATTACHMENTS, WiedervorlageListResource, WiedervorlageResource, } from './wiedervorlage.model';
 import { WiedervorlageRepository } from './wiedervorlage.repository';
 import { WiedervorlageRoutes } from './wiedervorlage.route';
 import { createErledigenCommand, createWiedereroeffnenCommand } from './wiedervorlage.util';
@@ -65,14 +44,12 @@ import { createErledigenCommand, createWiedereroeffnenCommand } from './wiedervo
 export class WiedervorlageService implements OnDestroy {
   static encodedWiedervorlageUriParam: string = 'wiedervorlageUrl';
 
-  readonly wiedervorlageList$: BehaviorSubject<StateResource<WiedervorlageListResource>> =
-    new BehaviorSubject<StateResource<WiedervorlageListResource>>(
-      createEmptyStateResource<WiedervorlageListResource>(),
-    );
-  readonly wiedervorlage$: BehaviorSubject<StateResource<WiedervorlageResource>> =
-    new BehaviorSubject<StateResource<WiedervorlageResource>>(
-      createEmptyStateResource<WiedervorlageResource>(),
-    );
+  readonly wiedervorlageList$: BehaviorSubject<StateResource<WiedervorlageListResource>> = new BehaviorSubject<
+    StateResource<WiedervorlageListResource>
+  >(createEmptyStateResource<WiedervorlageListResource>());
+  readonly wiedervorlage$: BehaviorSubject<StateResource<WiedervorlageResource>> = new BehaviorSubject<
+    StateResource<WiedervorlageResource>
+  >(createEmptyStateResource<WiedervorlageResource>());
 
   readonly submitInProgress$: BehaviorSubject<StateResource<CommandResource>> = new BehaviorSubject<
     StateResource<CommandResource>
@@ -81,15 +58,11 @@ export class WiedervorlageService implements OnDestroy {
   readonly erledigenCommand$: BehaviorSubject<StateResource<CommandResource>> = new BehaviorSubject<
     StateResource<CommandResource>
   >(createEmptyStateResource<CommandResource>());
-  readonly wiedereroeffnenCommand$: BehaviorSubject<StateResource<CommandResource>> =
-    new BehaviorSubject<StateResource<CommandResource>>(
-      createEmptyStateResource<CommandResource>(),
-    );
-
-  attachmentListByWiedervorlage = <BinaryFileListByWiedervorlageUri>{};
+  readonly wiedereroeffnenCommand$: BehaviorSubject<StateResource<CommandResource>> = new BehaviorSubject<
+    StateResource<CommandResource>
+  >(createEmptyStateResource<CommandResource>());
 
   private subscription: Subscription;
-  private attachmentSubscription: Subscription;
 
   constructor(
     private repository: WiedervorlageRepository,
@@ -103,15 +76,10 @@ export class WiedervorlageService implements OnDestroy {
   }
 
   public getWiedervorlageList(): Observable<StateResource<WiedervorlageListResource>> {
-    return combineLatest([
-      this.wiedervorlageList$.asObservable(),
-      this.vorgangService.getVorgangWithEingang(),
-    ]).pipe(
+    return combineLatest([this.wiedervorlageList$.asObservable(), this.vorgangService.getVorgangWithEingang()]).pipe(
       tap(([wiedervorlageList, vorgangResource]) => {
         if (isNotNull(vorgangResource.resource)) {
-          doIfLoadingRequired(wiedervorlageList, () =>
-            this.loadWiedervorlagenByVorgang(vorgangResource.resource),
-          );
+          doIfLoadingRequired(wiedervorlageList, () => this.loadWiedervorlagenByVorgang(vorgangResource.resource));
         }
       }),
       map(([wiedervorlageList]) => wiedervorlageList),
@@ -122,22 +90,18 @@ export class WiedervorlageService implements OnDestroy {
   public getWiedervorlageListByGivenVorgang(
     vorgangResource: VorgangResource,
   ): Observable<StateResource<WiedervorlageListResource>> {
-    doIfLoadingRequired(this.wiedervorlageList$.value, () =>
-      this.loadWiedervorlagenByVorgang(vorgangResource),
-    );
+    doIfLoadingRequired(this.wiedervorlageList$.value, () => this.loadWiedervorlagenByVorgang(vorgangResource));
     return this.wiedervorlageList$.asObservable();
   }
 
   loadWiedervorlagenByVorgang(vorgangResource: VorgangResource): void {
     if (hasLink(vorgangResource, VorgangHeaderLinkRel.WIEDERVORLAGEN)) {
-      const subscription: Subscription = this.repository
-        .getWiedervorlageList(vorgangResource)
-        .subscribe((wiedervorlagenList) => {
-          if (!isNull(wiedervorlagenList)) {
-            this.setWiedervorlagenList(wiedervorlagenList);
-            subscription.unsubscribe();
-          }
-        });
+      const subscription: Subscription = this.repository.getWiedervorlageList(vorgangResource).subscribe((wiedervorlagenList) => {
+        if (!isNull(wiedervorlagenList)) {
+          this.setWiedervorlagenList(wiedervorlagenList);
+          subscription.unsubscribe();
+        }
+      });
     } else {
       this.clearWiedervorlagenList();
     }
@@ -152,10 +116,6 @@ export class WiedervorlageService implements OnDestroy {
     );
   }
 
-  setWiedervorlageListLoading(): void {
-    this.wiedervorlageList$.next({ ...this.wiedervorlageList$.value, loading: true });
-  }
-
   setWiedervorlagenList(wiedervorlagenList: WiedervorlageListResource): void {
     this.wiedervorlageList$.next(createStateResource(wiedervorlagenList));
   }
@@ -176,26 +136,19 @@ export class WiedervorlageService implements OnDestroy {
   private loadAndSetWiedervorlageByUrl(url: ResourceUri): void {
     this.setWiedervorlageLoading();
 
-    const subscription: Subscription = this.repository
-      .getWiedervorlage(url)
-      .subscribe((wiedervorlage) => {
-        this.wiedervorlage$.next(createStateResource(wiedervorlage));
-        subscription.unsubscribe();
-      });
+    const subscription: Subscription = this.repository.getWiedervorlage(url).subscribe((wiedervorlage) => {
+      this.wiedervorlage$.next(createStateResource(wiedervorlage));
+      subscription.unsubscribe();
+    });
   }
 
   public isNewWiedervorlage(): boolean {
-    return isEqual(
-      this.navigationService.getParam(WiedervorlageService.encodedWiedervorlageUriParam),
-      WiedervorlageRoutes.NEW,
-    );
+    return isEqual(this.navigationService.getParam(WiedervorlageService.encodedWiedervorlageUriParam), WiedervorlageRoutes.NEW);
   }
 
   private listenToNavigation(): void {
     this.unsubscribe();
-    this.subscription = this.navigationService
-      .urlChanged()
-      .subscribe((params) => this.onNavigation(params));
+    this.subscription = this.navigationService.urlChanged().subscribe((params) => this.onNavigation(params));
   }
 
   onNavigation(params: Params): void {
@@ -203,19 +156,13 @@ export class WiedervorlageService implements OnDestroy {
       this.setWiedervorlageListReload();
       this.forceWiedervorlageReload();
       this.submitInProgress$.next(createEmptyStateResource<CommandResource>());
-      this.clearAttachmentList();
     }
     if (NavigationService.isVorgangListPage(params)) {
       this.clearWiedervorlagenList();
       this.submitInProgress$.next(createEmptyStateResource<CommandResource>());
-      this.clearAttachmentList();
     }
   }
 
-  clearAttachmentList(): void {
-    this.attachmentListByWiedervorlage = <BinaryFileListByWiedervorlageUri>{};
-  }
-
   clearWiedervorlagenList(): void {
     this.wiedervorlageList$.next(createEmptyStateResource<WiedervorlageListResource>());
   }
@@ -232,30 +179,20 @@ export class WiedervorlageService implements OnDestroy {
   }
 
   private getWiedervorlageUri(): ResourceUri {
-    return this.navigationService.getDecodedParam(
-      WiedervorlageService.encodedWiedervorlageUriParam,
-    );
+    return this.navigationService.getDecodedParam(WiedervorlageService.encodedWiedervorlageUriParam);
   }
 
   setWiedervorlageLoading(): void {
     this.wiedervorlage$.next({ ...this.wiedervorlage$.value, loading: true });
   }
 
-  public createWiedervorlage(
-    wiedervorlage: Wiedervorlage,
-  ): Observable<StateResource<CommandResource>> {
+  public createWiedervorlage(wiedervorlage: Wiedervorlage): Observable<StateResource<CommandResource>> {
     this.setSubmitInProgressLoading();
 
-    return this.createCreateWiedervorlageCommand(
-      this.wiedervorlageList$.value.resource,
-      wiedervorlage,
-    ).pipe(
+    return this.createCreateWiedervorlageCommand(this.wiedervorlageList$.value.resource, wiedervorlage).pipe(
       filter((commandStateResource) => !commandStateResource.loading),
       tap((commandStateResource) =>
-        this.proceedAfterReceiveCommand(
-          commandStateResource,
-          this.buildMessage(WiedervorlageMessages.CREATED, wiedervorlage),
-        ),
+        this.proceedAfterReceiveCommand(commandStateResource, this.buildMessage(WiedervorlageMessages.CREATED, wiedervorlage)),
       ),
       startWith(createEmptyStateResource<CommandResource>(true)),
     );
@@ -285,10 +222,7 @@ export class WiedervorlageService implements OnDestroy {
     return this.createSaveWiedervorlageCommand(wiedervorlageResource, wiedervorlage).pipe(
       filter((commandStateResource) => !commandStateResource.loading),
       tap((commandStateResource) =>
-        this.proceedAfterReceiveCommand(
-          commandStateResource,
-          this.buildMessage(WiedervorlageMessages.SAVED, wiedervorlage),
-        ),
+        this.proceedAfterReceiveCommand(commandStateResource, this.buildMessage(WiedervorlageMessages.SAVED, wiedervorlage)),
       ),
       startWith(createEmptyStateResource<CommandResource>(true)),
     );
@@ -313,10 +247,7 @@ export class WiedervorlageService implements OnDestroy {
     return { order: CommandOrder.EDIT_WIEDERVORLAGE, body: wiedervorlage };
   }
 
-  proceedAfterReceiveCommand(
-    commandStateResource: StateResource<CommandResource>,
-    message: string,
-  ): void {
+  proceedAfterReceiveCommand(commandStateResource: StateResource<CommandResource>, message: string): void {
     this.submitInProgress$.next({
       ...this.submitInProgress$.value,
       resource: commandStateResource.resource,
@@ -325,6 +256,7 @@ export class WiedervorlageService implements OnDestroy {
       this.submitInProgress$.next(createStateResource(commandStateResource.resource));
       this.snackbarService.show(commandStateResource.resource, message);
       this.setWiedervorlageListReload();
+      this.clearUploadedFiles();
     } else if (hasStateResourceError(commandStateResource)) {
       this.submitInProgress$.next(createStateResource(commandStateResource.resource));
     }
@@ -370,6 +302,7 @@ export class WiedervorlageService implements OnDestroy {
             this.buildMessage(snackBarMessage, this.wiedervorlage$.value.resource),
           );
           commandStateSubj.next(commandStateResource);
+          this.clearUploadedFiles();
           commandSubscription.unsubscribe();
         }
       });
@@ -393,45 +326,6 @@ export class WiedervorlageService implements OnDestroy {
     }
   }
 
-  public getAttachmentList(
-    wiedervorlage: WiedervorlageResource,
-  ): Observable<StateResource<BinaryFileListResource>> {
-    const uri: ResourceUri = getUrl(wiedervorlage);
-
-    if (isNil(this.attachmentListByWiedervorlage[uri])) {
-      this.attachmentListByWiedervorlage[uri] = new BehaviorSubject(
-        createEmptyStateResource<any>(),
-      );
-    } else {
-      this.attachmentListByWiedervorlage[uri].next(createEmptyStateResource<any>());
-    }
-
-    doIfLoadingRequired(this.attachmentListByWiedervorlage[uri].value, () =>
-      this.loadAttachments(wiedervorlage),
-    );
-
-    return this.attachmentListByWiedervorlage[uri].asObservable();
-  }
-
-  loadAttachments(wiedervorlage: WiedervorlageResource): void {
-    this.setAttachmentLoading(wiedervorlage);
-    if (!isNil(this.attachmentSubscription)) this.attachmentSubscription.unsubscribe();
-    this.attachmentSubscription = this.binaryFileService
-      .getFiles(wiedervorlage, WiedervorlageLinkRel.ATTACHMENTS)
-      .subscribe((fileList) => {
-        if (fileList.loaded) {
-          this.attachmentListByWiedervorlage[getUrl(wiedervorlage)].next(fileList);
-        }
-      });
-  }
-
-  setAttachmentLoading(wiedervorlage: WiedervorlageResource): void {
-    this.attachmentListByWiedervorlage[getUrl(wiedervorlage)].next({
-      ...this.attachmentListByWiedervorlage[getUrl(wiedervorlage)].value,
-      loading: true,
-    });
-  }
-
   public getSubmitInProgress(): Observable<StateResource<CommandResource>> {
     return this.submitInProgress$.asObservable();
   }
@@ -451,4 +345,8 @@ export class WiedervorlageService implements OnDestroy {
       .getWiedervorlage(decodedUrl)
       .pipe(map((wiedervorlage) => hasLink(wiedervorlage, WiedervorlageLinkRel.EDIT)));
   }
+
+  public clearUploadedFiles(): void {
+    this.binaryFileService.clearUploadedFiles(WIEDERVORLAGE_UPLOADED_ATTACHMENTS);
+  }
 }
diff --git a/alfa-client/libs/wiedervorlage/src/lib/submit-wiedervorlage-button/submit-wiedervorlage-button.component.spec.ts b/alfa-client/libs/wiedervorlage/src/lib/submit-wiedervorlage-button/submit-wiedervorlage-button.component.spec.ts
index 5dfb7fa67a2f94ba32302be9866c2c8c5d0af972..e5090f94ee1d5a9a24dd5e603e10f726e03ef5e0 100644
--- a/alfa-client/libs/wiedervorlage/src/lib/submit-wiedervorlage-button/submit-wiedervorlage-button.component.spec.ts
+++ b/alfa-client/libs/wiedervorlage/src/lib/submit-wiedervorlage-button/submit-wiedervorlage-button.component.spec.ts
@@ -23,7 +23,7 @@
  */
 import { CommandResource } from '@alfa-client/command-shared';
 import { NavigationService } from '@alfa-client/navigation-shared';
-import { StateResource, createStateResource } from '@alfa-client/tech-shared';
+import { createStateResource, StateResource } from '@alfa-client/tech-shared';
 import { mock } from '@alfa-client/test-utils';
 import { OzgcloudStrokedButtonWithSpinnerComponent } from '@alfa-client/ui';
 import { WiedervorlageService } from '@alfa-client/wiedervorlage-shared';
@@ -89,15 +89,15 @@ describe('SubmitWiedervorlageButtonComponent', () => {
     expect(component).toBeTruthy();
   });
 
-  describe('navigateIfCommandIsDone', () => {
+  describe('navigate if command is done', () => {
     it('should navigate on success', () => {
-      component.navigateIfCommandIsDone(commandWithError);
+      component._navigateIfCommandIsDone(commandWithError);
 
       expect(navigationService.navigateRelativeTo).toHaveBeenCalled();
     });
 
     it('should NOT navigate on loading', () => {
-      component.navigateIfCommandIsDone({ ...commandWithError, loading: true });
+      component._navigateIfCommandIsDone({ ...commandWithError, loading: true });
 
       expect(navigationService.navigateRelativeTo).toHaveBeenCalledWith('../../', activatedRoute);
     });
diff --git a/alfa-client/libs/wiedervorlage/src/lib/submit-wiedervorlage-button/submit-wiedervorlage-button.component.ts b/alfa-client/libs/wiedervorlage/src/lib/submit-wiedervorlage-button/submit-wiedervorlage-button.component.ts
index 788e3229c23f99a1fe11f4d0b2c257e0bde00350..2aa76ca8705a9c54fc601aea707527e5e1a3f04e 100644
--- a/alfa-client/libs/wiedervorlage/src/lib/submit-wiedervorlage-button/submit-wiedervorlage-button.component.ts
+++ b/alfa-client/libs/wiedervorlage/src/lib/submit-wiedervorlage-button/submit-wiedervorlage-button.component.ts
@@ -52,11 +52,11 @@ export class SubmitWiedervorlageButtonComponent {
   submit(): void {
     this.submitInProgress$ = this.formService.submit().pipe(
       filter((command) => !command.loading),
-      tap((commandWithError) => this.navigateIfCommandIsDone(commandWithError)),
+      tap((commandWithError) => this._navigateIfCommandIsDone(commandWithError)),
     );
   }
 
-  navigateIfCommandIsDone(command: StateResource<CommandResource>): void {
+  _navigateIfCommandIsDone(command: StateResource<CommandResource>): void {
     if (!command.loading && isDone(command.resource)) {
       this.navigateToVorgangDetailPage();
     }
diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.html b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.html
deleted file mode 100644
index 8687a058f25e38cf8042c87506b1e181a4f43e76..0000000000000000000000000000000000000000
--- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!--
-
-    Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<alfa-vertical-binary-file-list
-  [binaryFileListStateResource]="attachments$ | async"
-  [deletable]="false"
-  data-test-id="wiedervorlage-attachment-list"
->
-</alfa-vertical-binary-file-list>
diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.scss b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.scss
deleted file mode 100644
index 7648e3a3481646fbc80529a3a7b59e980b88eb1c..0000000000000000000000000000000000000000
--- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.scss
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-:host {
-  display: flex;
-  margin: 0 -4px;
-}
-
-.attachments {
-  display: flex;
-  flex-wrap: wrap;
-}
diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.spec.ts b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.spec.ts
deleted file mode 100644
index a462e5aa51ac4cddeebe82a611ece3bc0ae6ef3c..0000000000000000000000000000000000000000
--- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.spec.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { ToEmbeddedResourcesPipe } from '@alfa-client/tech-shared';
-import { mock } from '@alfa-client/test-utils';
-import { WiedervorlageService } from '@alfa-client/wiedervorlage-shared';
-import { MockComponent } from 'ng-mocks';
-import { of } from 'rxjs';
-import { WiedervorlageAttachmentListContainerComponent } from './wiedervorlage-attachment-list-container.component';
-import { VerticalBinaryFileListComponent } from '@alfa-client/binary-file';
-
-describe('WiedervorlageAttachmentListContainerComponent', () => {
-  let component: WiedervorlageAttachmentListContainerComponent;
-  let fixture: ComponentFixture<WiedervorlageAttachmentListContainerComponent>;
-
-  const wiedervorlageService = { ...mock(WiedervorlageService), getAttachmentList: () => of(null) };
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [
-        WiedervorlageAttachmentListContainerComponent,
-        ToEmbeddedResourcesPipe,
-        MockComponent(VerticalBinaryFileListComponent),
-      ],
-      providers: [
-        {
-          provide: WiedervorlageService,
-          useValue: wiedervorlageService,
-        },
-      ],
-    });
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(WiedervorlageAttachmentListContainerComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.ts b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.ts
deleted file mode 100644
index 93f9f0e59fb650f7074b4fe4223cecbf08a86292..0000000000000000000000000000000000000000
--- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
-import { BinaryFileListResource } from '@alfa-client/binary-file-shared';
-import { StateResource } from '@alfa-client/tech-shared';
-import { WiedervorlageResource, WiedervorlageService } from '@alfa-client/wiedervorlage-shared';
-import { Observable } from 'rxjs';
-
-@Component({
-  selector: 'alfa-wiedervorlage-attachment-list-container',
-  templateUrl: './wiedervorlage-attachment-list-container.component.html',
-  styleUrls: ['./wiedervorlage-attachment-list-container.component.scss'],
-})
-export class WiedervorlageAttachmentListContainerComponent implements OnChanges {
-  @Input() wiedervorlage: WiedervorlageResource;
-
-  attachments$: Observable<StateResource<BinaryFileListResource>>;
-
-  constructor(public service: WiedervorlageService) {}
-
-  ngOnChanges(changes: SimpleChanges): void {
-    if (changes.wiedervorlage) {
-      this.loadAttachments();
-    }
-  }
-
-  loadAttachments(): void {
-    this.attachments$ = this.service.getAttachmentList(this.wiedervorlage);
-  }
-}
diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.html b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.html
index bdef88d210bb2d4b5e240b70f638a0efeb10c9e3..ee68f8fe3530ede164cfbc82544a053121a95cc8 100644
--- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.html
+++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.html
@@ -23,10 +23,7 @@
     unter der Lizenz sind dem Lizenztext zu entnehmen.
 
 -->
-<div
-  [attr.data-test-id]="wiedervorlageResource.betreff | convertForDataTest"
-  class="container text-sm"
->
+<div [attr.data-test-id]="wiedervorlageResource.betreff | convertForDataTest" class="container text-sm">
   <div class="row">
     <alfa-wiedervorlage-status
       data-test-class="status"
@@ -36,20 +33,18 @@
     </alfa-wiedervorlage-status>
 
     <alfa-link-with-user-name-tooltip-container
-      *ngIf="wiedervorlageResource | hasLink: linkRel.EDIT; else content"
+      *ngIf="wiedervorlageResource | hasLink: WiedervorlageLinkRel.EDIT; else content"
       routerLinkString="wiedervorlage/{{ wiedervorlageResource | toResourceUri }}"
       [tooltipTemplate]="tooltip"
       [resource]="wiedervorlageResource"
-      [linkRel]="linkRel.CREATED_BY"
+      [linkRel]="WiedervorlageLinkRel.CREATED_BY"
       data-test-class="link"
     >
       <ng-container *ngTemplateOutlet="content"></ng-container>
     </alfa-link-with-user-name-tooltip-container>
 
     <ng-template #content>
-      <span class="date" data-test-class="frist">{{
-        wiedervorlageResource.frist | formatToPrettyDate
-      }}</span>
+      <span class="date" data-test-class="frist">{{ wiedervorlageResource.frist | formatToPrettyDate }}</span>
       <span class="name" data-test-class="betreff">{{ wiedervorlageResource.betreff }}</span>
     </ng-template>
 
@@ -67,16 +62,17 @@
       [tooltipTemplate]="tooltip"
       [text]="wiedervorlageResource.beschreibung"
       [resource]="wiedervorlageResource"
-      [linkRel]="linkRel.CREATED_BY"
+      [linkRel]="WiedervorlageLinkRel.CREATED_BY"
     >
     </alfa-text-with-user-name-tooltip-container>
 
-    <alfa-wiedervorlage-attachment-list-container
-      *ngIf="wiedervorlageResource | hasLink: linkRel.ATTACHMENTS"
-      data-test-id="wiedervorlage-attachment-list-in-vorgang"
-      [wiedervorlage]="wiedervorlageResource"
-      class="attachments"
-    >
-    </alfa-wiedervorlage-attachment-list-container>
+    @if (wiedervorlageResource | hasLink: WiedervorlageLinkRel.ATTACHMENTS) {
+      <alfa-binary-file-list-container
+        [resource]="wiedervorlageResource"
+        [linkRel]="WiedervorlageLinkRel.ATTACHMENTS"
+        [listOrientation]="BinaryFileListOrientation.VERTICAL"
+        data-test-id="wiedervorlage-attachment-list-in-vorgang"
+      ></alfa-binary-file-list-container>
+    }
   </div>
 </div>
diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.spec.ts b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.spec.ts
index 6673dc39b36123bb4d9bdd8bbb3e06e1e1dc2dc1..f4be1ef8b0b40d801398a057032c8b44020f97c4 100644
--- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.spec.ts
+++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.spec.ts
@@ -21,20 +21,10 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import {
-  ConvertForDataTestPipe,
-  FormatToPrettyDatePipe,
-  HasLinkPipe,
-  ToResourceUriPipe,
-  ToTrafficLightTooltipPipe,
-  formatFullDate,
-} from '@alfa-client/tech-shared';
+import { ConvertForDataTestPipe, formatFullDate, FormatToPrettyDatePipe, HasLinkPipe, ToResourceUriPipe, ToTrafficLightTooltipPipe, } from '@alfa-client/tech-shared';
 import { dispatchEventFromFixture } from '@alfa-client/test-utils';
 import { ExpansionPanelComponent } from '@alfa-client/ui';
-import {
-  LinkWithUserNameTooltipContainerComponent,
-  TextWithUserNameTooltipContainerComponent,
-} from '@alfa-client/user-profile';
+import { LinkWithUserNameTooltipContainerComponent, TextWithUserNameTooltipContainerComponent } from '@alfa-client/user-profile';
 import { WiedervorlageResource } from '@alfa-client/wiedervorlage-shared';
 import { registerLocaleData } from '@angular/common';
 import localeDe from '@angular/common/locales/de';
@@ -48,7 +38,6 @@ import { TooltipDirective } from '@ods/system';
 import { createWiedervorlageResource } from 'libs/wiedervorlage-shared/test/wiedervorlage';
 import { MockComponent, MockDirective } from 'ng-mocks';
 import { WiedervorlageStatusComponent } from '../../../wiedervorlage-status/wiedervorlage-status.component';
-import { WiedervorlageAttachmentListContainerComponent } from './wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component';
 import { WiedervorlageInVorgangExpandButtonComponent } from './wiedervorlage-in-vorgang-expand-button/wiedervorlage-in-vorgang-expand-button.component';
 import { WiedervorlageInVorgangComponent } from './wiedervorlage-in-vorgang.component';
 
@@ -74,7 +63,6 @@ describe('WiedervorlageInVorgangComponent', () => {
         HasLinkPipe,
         MockComponent(ExpansionPanelComponent),
         MockComponent(WiedervorlageStatusComponent),
-        MockComponent(WiedervorlageAttachmentListContainerComponent),
         MockComponent(WiedervorlageInVorgangExpandButtonComponent),
         MockComponent(LinkWithUserNameTooltipContainerComponent),
         MockComponent(TextWithUserNameTooltipContainerComponent),
diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.ts b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.ts
index ee5f2a95c847513473d46821392820ff39650081..727acc5acd01ca8aac2eacb639f4780ecf5db9b3 100644
--- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.ts
+++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component.ts
@@ -21,13 +21,10 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { Component, Input, OnInit } from '@angular/core';
 import { formatFullDate, replacePlaceholders } from '@alfa-client/tech-shared';
-import {
-  WiedervorlageLinkRel,
-  WiedervorlageMessages,
-  WiedervorlageResource,
-} from '@alfa-client/wiedervorlage-shared';
+import { WiedervorlageLinkRel, WiedervorlageMessages, WiedervorlageResource } from '@alfa-client/wiedervorlage-shared';
+import { Component, Input, OnInit } from '@angular/core';
+import { BinaryFileListOrientation } from '../../../../../../binary-file/src/lib/directive/binary-file-list-orientation/binary-file-list-orientation.directive';
 
 @Component({
   selector: 'alfa-wiedervorlage-in-vorgang',
@@ -40,7 +37,8 @@ export class WiedervorlageInVorgangComponent implements OnInit {
   tooltip: string;
   expanded: boolean;
 
-  readonly linkRel = WiedervorlageLinkRel;
+  public readonly WiedervorlageLinkRel = WiedervorlageLinkRel;
+  public readonly BinaryFileListOrientation = BinaryFileListOrientation;
 
   ngOnInit(): void {
     this.tooltip = this.formatTooltip();
diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.html b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.html
index 014b5ba17d0289e7b339f6409cf0e32acb7b1194..d7c191e5c0ceca89a1123b107fa04c210d4a4938 100644
--- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.html
+++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.html
@@ -45,14 +45,14 @@
   >
   </ozgcloud-date-editor>
 
-  <alfa-binary-file-attachment-container
-    data-test-id="wiedervorlage-attachment-list"
-    [existFiles]="attachments$ | async"
-    [formArrayName]="formServiceClass.FIELD_ATTACHMENTS"
-    [uploadStateResource]="wiedervorlageListStateResource"
-    [linkRelUploadAttachment]="wiedervorlageListLinkrel.UPLOAD_FILE"
-  >
-  </alfa-binary-file-attachment-container>
+  <ods-multi-file-upload
+    [filesFormFieldName]="formServiceClass.FIELD_ATTACHMENTS"
+    [fileUploadType]="WIEDERVORLAGE_UPLOADED_ATTACHMENTS"
+    [uploadResource]="wiedervorlageListStateResource.resource"
+    [uploadLinkRelation]="WiedervorlageListLinkRel.UPLOAD_FILE"
+    [filesResource]="wiedervorlage"
+    [filesLinkRelation]="WiedervorlageLinkRel.ATTACHMENTS"
+  ></ods-multi-file-upload>
 
   <alfa-submit-wiedervorlage-button class="submit-button"></alfa-submit-wiedervorlage-button>
 </form>
diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.spec.ts b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.spec.ts
index f7dfb80e9b4ab4478fc2063574cda7411e15498d..014466c7f15afb5a0ca42498b5f7f4db16f7f36e 100644
--- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.spec.ts
+++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.spec.ts
@@ -22,17 +22,16 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { BinaryFileAttachmentContainerComponent } from '@alfa-client/binary-file';
-import { BinaryFileListResource } from '@alfa-client/binary-file-shared';
+import { createStateResource, StateResource } from '@alfa-client/tech-shared';
 import { Mock, mock, useFromMock } from '@alfa-client/test-utils';
 import { DateEditorComponent, OzgcloudTextEditorComponent, TextAreaEditorComponent } from '@alfa-client/ui';
-import { WiedervorlageLinkRel, WiedervorlageResource, WiedervorlageService } from '@alfa-client/wiedervorlage-shared';
+import { WiedervorlageListResource, WiedervorlageResource, WiedervorlageService } from '@alfa-client/wiedervorlage-shared';
 import { SimpleChanges } from '@angular/core';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms';
-import { createBinaryFileListResource } from 'libs/binary-file-shared/test/binary-file';
-import { createWiedervorlageResource } from 'libs/wiedervorlage-shared/test/wiedervorlage';
+import { createWiedervorlageListResource, createWiedervorlageResource } from 'libs/wiedervorlage-shared/test/wiedervorlage';
 import { MockComponent } from 'ng-mocks';
-import { of } from 'rxjs';
+import { MultiFileUploadComponent } from '../../../../../../binary-file/src/lib/multi-file-upload/multi-file-upload.component';
 import { SubmitWiedervorlageButtonComponent } from '../../../submit-wiedervorlage-button/submit-wiedervorlage-button.component';
 import { WiedervorlageFormComponent } from './wiedervorlage-form.component';
 import { WiedervorlageFormService } from './wiedervorlage.formservice';
@@ -44,6 +43,9 @@ describe('WiedervorlageFormComponent', () => {
   const formService = new WiedervorlageFormService(new UntypedFormBuilder(), useFromMock(mock(WiedervorlageService)));
   const wiedervorlageService: Mock<WiedervorlageService> = mock(WiedervorlageService);
   const wiedervorlage: WiedervorlageResource = createWiedervorlageResource();
+  const wiedervorlaeListStateResource: StateResource<WiedervorlageListResource> = createStateResource(
+    createWiedervorlageListResource(),
+  );
 
   beforeEach(async () => {
     await TestBed.configureTestingModule({
@@ -54,6 +56,7 @@ describe('WiedervorlageFormComponent', () => {
         MockComponent(TextAreaEditorComponent),
         MockComponent(BinaryFileAttachmentContainerComponent),
         MockComponent(SubmitWiedervorlageButtonComponent),
+        MockComponent(MultiFileUploadComponent),
       ],
       imports: [ReactiveFormsModule],
       providers: [
@@ -74,6 +77,7 @@ describe('WiedervorlageFormComponent', () => {
 
     fixture = TestBed.createComponent(WiedervorlageFormComponent);
     component = fixture.componentInstance;
+    component.wiedervorlageListStateResource = wiedervorlaeListStateResource;
     fixture.detectChanges();
   });
 
@@ -87,7 +91,6 @@ describe('WiedervorlageFormComponent', () => {
     beforeEach(() => {
       component.wiedervorlage = wiedervorlage;
       component.patchWiedervorlage = jest.fn();
-      component.updateAttachments = jest.fn();
     });
 
     it('should call patchWiedervorlage', () => {
@@ -95,37 +98,6 @@ describe('WiedervorlageFormComponent', () => {
 
       expect(component.patchWiedervorlage).toHaveBeenCalled();
     });
-
-    it('should call updateAttachments', () => {
-      component.ngOnChanges(simpleChanges);
-
-      expect(component.updateAttachments).toHaveBeenCalled();
-    });
-  });
-
-  describe('updateAttachments', () => {
-    const binaryFileListResource: BinaryFileListResource = createBinaryFileListResource();
-
-    beforeEach(() => {
-      wiedervorlageService.getAttachmentList.mockReturnValue(of(binaryFileListResource));
-    });
-
-    it('should call wiedervorlage service to get attachments if links exists', () => {
-      const wiedervorlageWithAttachments: WiedervorlageResource = createWiedervorlageResource([WiedervorlageLinkRel.ATTACHMENTS]);
-      component.wiedervorlage = wiedervorlageWithAttachments;
-
-      component.updateAttachments();
-
-      expect(wiedervorlageService.getAttachmentList).toHaveBeenCalledWith(wiedervorlageWithAttachments);
-    });
-
-    it('should NOT call wiedervorlage service if link is not present', () => {
-      component.wiedervorlage = wiedervorlage;
-
-      component.updateAttachments();
-
-      expect(wiedervorlageService.getAttachmentList).not.toHaveBeenCalledWith(wiedervorlage);
-    });
   });
 
   describe('patch wiedervorlage', () => {
diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.ts b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.ts
index 06cc5576e632fbde55113894af5e653247ac1780..24f0d1af790e44119b13eb4fd6d5a4d9acb58f0d 100644
--- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.ts
+++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.ts
@@ -21,20 +21,10 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
-import { BinaryFileListLinkRel, BinaryFileResource } from '@alfa-client/binary-file-shared';
-import { StateResource, getEmbeddedResources, isNotNil } from '@alfa-client/tech-shared';
-import {
-  WiedervorlageLinkRel,
-  WiedervorlageListLinkRel,
-  WiedervorlageListResource,
-  WiedervorlageResource,
-  WiedervorlageService,
-} from '@alfa-client/wiedervorlage-shared';
-import { hasLink } from '@ngxp/rest';
+import { isNotNil, StateResource } from '@alfa-client/tech-shared';
+import { WIEDERVORLAGE_UPLOADED_ATTACHMENTS, WiedervorlageLinkRel, WiedervorlageListLinkRel, WiedervorlageListResource, WiedervorlageResource, } from '@alfa-client/wiedervorlage-shared';
+import { Component, inject, Input, OnChanges, SimpleChanges } from '@angular/core';
 import { isNull } from 'lodash-es';
-import { Observable, of } from 'rxjs';
-import { map } from 'rxjs/operators';
 import { WiedervorlageFormService } from './wiedervorlage.formservice';
 
 //TODO Container Component zwischenschalten
@@ -47,39 +37,19 @@ export class WiedervorlageFormComponent implements OnChanges {
   @Input() wiedervorlageListStateResource: StateResource<WiedervorlageListResource>;
   @Input() wiedervorlage: WiedervorlageResource;
 
-  attachments$: Observable<BinaryFileResource[]> = of([]);
+  public readonly formService = inject(WiedervorlageFormService);
 
-  readonly formServiceClass = WiedervorlageFormService;
-  readonly wiedervorlageListLinkrel = WiedervorlageListLinkRel;
-
-  constructor(
-    public formService: WiedervorlageFormService,
-    private wiedervorlageService: WiedervorlageService,
-  ) {}
+  public readonly formServiceClass = WiedervorlageFormService;
+  public readonly WiedervorlageListLinkRel = WiedervorlageListLinkRel;
+  public readonly WiedervorlageLinkRel = WiedervorlageLinkRel;
+  public readonly WIEDERVORLAGE_UPLOADED_ATTACHMENTS = WIEDERVORLAGE_UPLOADED_ATTACHMENTS;
 
   ngOnChanges(changes: SimpleChanges): void {
     if (changes.wiedervorlage && isNotNil(this.wiedervorlage)) {
-      this.updateAttachments();
       this.patchWiedervorlage();
     }
   }
 
-  updateAttachments(): void {
-    if (hasLink(this.wiedervorlage, WiedervorlageLinkRel.ATTACHMENTS)) {
-      this.attachments$ = this.wiedervorlageService
-        .getAttachmentList(this.wiedervorlage)
-        .pipe(
-          map((attachmentList) =>
-            getEmbeddedResources<BinaryFileResource>(
-              attachmentList,
-              BinaryFileListLinkRel.FILE_LIST,
-            ),
-          ),
-        );
-    } else {
-      this.attachments$ = of([]);
-    }
-  }
   patchWiedervorlage(): void {
     if (!isNull(this.wiedervorlage)) {
       this.formService.patch(this.wiedervorlage);
diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage.module.ts b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage.module.ts
index 2057849d9d85c3365877c9d58fd022a8137029dc..7fe2f1babb5a64816093254a75dd52cfe1b6fb3e 100644
--- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage.module.ts
+++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage.module.ts
@@ -22,26 +22,8 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { BinaryFileModule } from '@alfa-client/binary-file';
-import {
-  ConvertForDataTestPipe,
-  FormatToPrettyDatePipe,
-  HasLinkPipe,
-  ToEmbeddedResourcesPipe,
-  ToResourceUriPipe,
-  ToTrafficLightPipe,
-  ToTrafficLightTooltipPipe,
-} from '@alfa-client/tech-shared';
-import {
-  BackButtonComponent,
-  DateEditorComponent,
-  ExpansionPanelComponent,
-  IconButtonWithSpinnerComponent,
-  OzgcloudStrokedButtonWithSpinnerComponent,
-  OzgcloudTextEditorComponent,
-  SpinnerComponent,
-  SubnavigationComponent,
-  TextAreaEditorComponent,
-} from '@alfa-client/ui';
+import { ConvertForDataTestPipe, FormatToPrettyDatePipe, HasLinkPipe, ToEmbeddedResourcesPipe, ToResourceUriPipe, ToTrafficLightPipe, ToTrafficLightTooltipPipe, } from '@alfa-client/tech-shared';
+import { BackButtonComponent, DateEditorComponent, ExpansionPanelComponent, IconButtonWithSpinnerComponent, OzgcloudStrokedButtonWithSpinnerComponent, OzgcloudTextEditorComponent, SpinnerComponent, SubnavigationComponent, TextAreaEditorComponent, } from '@alfa-client/ui';
 import { UserProfileModule } from '@alfa-client/user-profile';
 import { VorgangSharedModule } from '@alfa-client/vorgang-shared';
 import { VorgangSharedUiModule } from '@alfa-client/vorgang-shared-ui';
@@ -52,20 +34,14 @@ import { MatIcon } from '@angular/material/icon';
 import { MatTooltip } from '@angular/material/tooltip';
 import { RouterModule, Routes } from '@angular/router';
 import { ButtonWithSpinnerComponent } from '@ods/component';
-import {
-  CheckCircleIconComponent,
-  PlusIconComponent,
-  SaveIconComponent,
-  TooltipDirective,
-  UpdateIconComponent,
-} from '@ods/system';
+import { CheckCircleIconComponent, PlusIconComponent, SaveIconComponent, TooltipDirective, UpdateIconComponent, } from '@ods/system';
+import { MultiFileUploadComponent } from '../../../binary-file/src/lib/multi-file-upload/multi-file-upload.component';
 import { CreateWiedervorlageButtonContainerComponent } from './create-wiedervorlage-button-container/create-wiedervorlage-button-container.component';
 import { ErledigenButtonContainerComponent } from './erledigen-button-container/erledigen-button-container.component';
 import { SubmitWiedervorlageButtonComponent } from './submit-wiedervorlage-button/submit-wiedervorlage-button.component';
 import { WiedereroeffnenButtonContainerComponent } from './wiedereroeffnen-button-container/wiedereroeffnen-button-container.component';
 import { WiedervorlageListInVorgangContainerComponent } from './wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang-container.component';
 import { WiedervorlageCreateButtonComponent } from './wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-create-button/wiedervorlage-create-button.component';
-import { WiedervorlageAttachmentListContainerComponent } from './wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-attachment-list-container/wiedervorlage-attachment-list-container.component';
 import { WiedervorlageInVorgangExpandButtonComponent } from './wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang-expand-button/wiedervorlage-in-vorgang-expand-button.component';
 import { WiedervorlageInVorgangComponent } from './wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-in-vorgang/wiedervorlage-in-vorgang.component';
 import { WiedervorlageListInVorgangComponent } from './wiedervorlage-list-in-vorgang-container/wiedervorlage-list-in-vorgang/wiedervorlage-list-in-vorgang.component';
@@ -121,6 +97,7 @@ const routes: Routes = [
     PlusIconComponent,
     CheckCircleIconComponent,
     SaveIconComponent,
+    MultiFileUploadComponent,
   ],
   declarations: [
     WiedervorlagePageComponent,
@@ -138,7 +115,6 @@ const routes: Routes = [
     WiedereroeffnenButtonContainerComponent,
     ErledigenButtonContainerComponent,
     CreateWiedervorlageButtonContainerComponent,
-    WiedervorlageAttachmentListContainerComponent,
     WiedervorlageBreadcrumbContainerComponent,
     WiedervorlageInVorgangExpandButtonComponent,
   ],