diff --git a/alfa-client/libs/kommentar-shared/src/lib/kommentar.service.spec.ts b/alfa-client/libs/kommentar-shared/src/lib/kommentar.service.spec.ts
index 329ac2f142356ce68c2d841605541322ac458dbb..94221419346a617893eb3e1b33d9f8541f081134 100644
--- a/alfa-client/libs/kommentar-shared/src/lib/kommentar.service.spec.ts
+++ b/alfa-client/libs/kommentar-shared/src/lib/kommentar.service.spec.ts
@@ -22,32 +22,20 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { BinaryFileService } from '@alfa-client/binary-file-shared';
-import {
-  CommandOrder,
-  CommandResource,
-  CommandService,
-  CreateCommand,
-} from '@alfa-client/command-shared';
+import { CommandOrder, CommandResource, CommandService, CreateCommand } from '@alfa-client/command-shared';
 import { NavigationService } from '@alfa-client/navigation-shared';
-import {
-  StateResource,
-  createEmptyStateResource,
-  createStateResource,
-} from '@alfa-client/tech-shared';
+import { createEmptyStateResource, createStateResource, StateResource } from '@alfa-client/tech-shared';
 import { Mock, mock, useFromMock } from '@alfa-client/test-utils';
 import { VorgangService, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
+import { expect } from '@jest/globals';
 import { cold, hot } from 'jest-marbles';
 import { CommandLinkRel } from 'libs/command-shared/src/lib/command.linkrel';
 import { createCommandResource } from 'libs/command-shared/test/command';
-import {
-  createKommentar,
-  createKommentarListResource,
-  createKommentarResource,
-} from 'libs/kommentar-shared/test/kommentar';
+import { createKommentar, createKommentarListResource, createKommentarResource } from 'libs/kommentar-shared/test/kommentar';
 import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang';
 import { of } from 'rxjs';
 import { KommentarLinkRel, KommentarListLinkRel } from './kommentar.linkrel';
-import { Kommentar, KommentarListResource, KommentarResource } from './kommentar.model';
+import { Kommentar, KOMMENTAR_UPLOADED_ATTACHMENTS, KommentarListResource, KommentarResource } from './kommentar.model';
 import { KommentarRepository } from './kommentar.repository';
 import { KommentarService } from './kommentar.service';
 
@@ -120,9 +108,7 @@ describe('KommentarService', () => {
       it('should be return', () => {
         const result = service.createKommentar(kommentar);
 
-        expect(result).toBeObservable(
-          cold('ab', { a: createEmptyStateResource(true), b: commandStateResource }),
-        );
+        expect(result).toBeObservable(cold('ab', { a: createEmptyStateResource(true), b: commandStateResource }));
       });
     });
 
@@ -174,9 +160,7 @@ describe('KommentarService', () => {
       it('should be return', () => {
         const result = service.editKommentar(kommentarResource, kommentar);
 
-        expect(result).toBeObservable(
-          cold('ab', { a: createEmptyStateResource(true), b: commandStateResource }),
-        );
+        expect(result).toBeObservable(cold('ab', { a: createEmptyStateResource(true), b: commandStateResource }));
       });
     });
 
@@ -298,10 +282,7 @@ describe('KommentarService', () => {
       const kommentarResource = createKommentarResource([KommentarLinkRel.ATTACHMENTS]);
       service.getAttachments(kommentarResource);
 
-      expect(binaryFileService.getFiles).toHaveBeenCalledWith(
-        kommentarResource,
-        KommentarLinkRel.ATTACHMENTS,
-      );
+      expect(binaryFileService.getFiles).toHaveBeenCalledWith(kommentarResource, KommentarLinkRel.ATTACHMENTS);
     });
 
     it('should not be loaded if no link available', () => {
@@ -315,9 +296,7 @@ describe('KommentarService', () => {
     it('should create new Kommentare', () => {
       const canCreateNewKommentar$ = cold('a', { a: true });
 
-      const observable = service.canCreateNewKommentar(
-        createKommentarListResource([KommentarListLinkRel.CREATE_KOMMENTAR]),
-      );
+      const observable = service.canCreateNewKommentar(createKommentarListResource([KommentarListLinkRel.CREATE_KOMMENTAR]));
 
       expect(observable).toBeObservable(canCreateNewKommentar$);
     });
@@ -326,9 +305,7 @@ describe('KommentarService', () => {
       const canCreateNewKommentar$ = cold('a', { a: false });
       service.formularVisibility$.next(true);
 
-      const observable = service.canCreateNewKommentar(
-        createKommentarListResource([KommentarListLinkRel.CREATE_KOMMENTAR]),
-      );
+      const observable = service.canCreateNewKommentar(createKommentarListResource([KommentarListLinkRel.CREATE_KOMMENTAR]));
 
       expect(observable).toBeObservable(canCreateNewKommentar$);
     });
@@ -342,4 +319,12 @@ describe('KommentarService', () => {
       expect(observable).toBeObservable(canCreateNewKommentar$);
     });
   });
+
+  describe('clearUploadedFiles', () => {
+    it('should call binary file service', () => {
+      service.clearUploadedFiles(KOMMENTAR_UPLOADED_ATTACHMENTS);
+
+      expect(binaryFileService.clearUploadedFiles).toHaveBeenCalledWith(KOMMENTAR_UPLOADED_ATTACHMENTS);
+    });
+  });
 });
diff --git a/alfa-client/libs/kommentar-shared/src/lib/kommentar.service.ts b/alfa-client/libs/kommentar-shared/src/lib/kommentar.service.ts
index 1fd80c539fcdbb6c58223c3969a18e577f88d7e1..424e2c7929d9870d6513e2920afcd0510158a761 100644
--- a/alfa-client/libs/kommentar-shared/src/lib/kommentar.service.ts
+++ b/alfa-client/libs/kommentar-shared/src/lib/kommentar.service.ts
@@ -21,27 +21,16 @@
  * 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 { BinaryFileListResource, BinaryFileService, FileUploadType } 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,
-  doIfLoadingRequired,
-} from '@alfa-client/tech-shared';
+import { createEmptyStateResource, createStateResource, doIfLoadingRequired, StateResource } from '@alfa-client/tech-shared';
 import { VorgangResource, VorgangService } from '@alfa-client/vorgang-shared';
 import { Injectable } from '@angular/core';
 import { Params } from '@angular/router';
-import { Resource, hasLink } from '@ngxp/rest';
+import { hasLink, Resource } from '@ngxp/rest';
 import { isNil } from 'lodash-es';
-import { BehaviorSubject, Observable, Subscription, of } from 'rxjs';
+import { BehaviorSubject, Observable, of, Subscription } from 'rxjs';
 import { map, startWith, tap } from 'rxjs/operators';
 import { KommentarLinkRel, KommentarListLinkRel } from './kommentar.linkrel';
 import { Kommentar, KommentarListResource, KommentarResource } from './kommentar.model';
@@ -49,8 +38,9 @@ import { KommentarRepository } from './kommentar.repository';
 
 @Injectable({ providedIn: 'root' })
 export class KommentarService {
-  readonly kommentarList$: BehaviorSubject<StateResource<KommentarListResource>> =
-    new BehaviorSubject(createEmptyStateResource<KommentarListResource>());
+  readonly kommentarList$: BehaviorSubject<StateResource<KommentarListResource>> = new BehaviorSubject(
+    createEmptyStateResource<KommentarListResource>(),
+  );
   readonly formularVisibility$: BehaviorSubject<boolean> = new BehaviorSubject(false);
 
   private navigationSub: Subscription;
@@ -67,9 +57,7 @@ export class KommentarService {
 
   private listenToNavigation(): void {
     this.unsubscribe();
-    this.navigationSub = this.navigationService
-      .urlChanged()
-      .subscribe((params: Params) => this.onNavigation(params));
+    this.navigationSub = this.navigationService.urlChanged().subscribe((params: Params) => this.onNavigation(params));
   }
 
   private unsubscribe(): void {
@@ -89,9 +77,7 @@ export class KommentarService {
     this.kommentarList$.next({ ...this.kommentarList$.value, reload: true });
   }
 
-  public getKommentareByVorgang(
-    vorgang: VorgangResource,
-  ): Observable<StateResource<KommentarListResource>> {
+  public getKommentareByVorgang(vorgang: VorgangResource): Observable<StateResource<KommentarListResource>> {
     doIfLoadingRequired(this.kommentarList$.value, () => this.loadKommentare(vorgang));
     return this.kommentarList$.asObservable();
   }
@@ -99,12 +85,10 @@ export class KommentarService {
   private loadKommentare(vorgang: VorgangResource): void {
     this.setListLoadingTrue();
 
-    const sub: Subscription = this.repository
-      .findKommentare(vorgang)
-      .subscribe((kommentarList: KommentarListResource) => {
-        this.setKommentarList(kommentarList);
-        sub.unsubscribe();
-      });
+    const sub: Subscription = this.repository.findKommentare(vorgang).subscribe((kommentarList: KommentarListResource) => {
+      this.setKommentarList(kommentarList);
+      sub.unsubscribe();
+    });
   }
 
   setListLoadingTrue(): void {
@@ -125,11 +109,7 @@ export class KommentarService {
 
   public canCreateNewKommentar(kommentareListResource: KommentarListResource): Observable<boolean> {
     return this.formularVisibility$.pipe(
-      map(
-        (formularVisibility) =>
-          !formularVisibility &&
-          hasLink(kommentareListResource, KommentarListLinkRel.CREATE_KOMMENTAR),
-      ),
+      map((formularVisibility) => !formularVisibility && hasLink(kommentareListResource, KommentarListLinkRel.CREATE_KOMMENTAR)),
     );
   }
 
@@ -153,15 +133,8 @@ export class KommentarService {
     return { order: CommandOrder.CREATE_KOMMENTAR, body: kommentar };
   }
 
-  public editKommentar(
-    kommentar: KommentarResource,
-    toPatch: Kommentar,
-  ): Observable<StateResource<CommandResource>> {
-    return this.createKommentarCommand(
-      kommentar,
-      KommentarLinkRel.EDIT,
-      this.createEditKommentarCommand(toPatch),
-    );
+  public editKommentar(kommentar: KommentarResource, toPatch: Kommentar): Observable<StateResource<CommandResource>> {
+    return this.createKommentarCommand(kommentar, KommentarLinkRel.EDIT, this.createEditKommentarCommand(toPatch));
   }
 
   createEditKommentarCommand(kommentar: Kommentar): CreateCommand {
@@ -174,9 +147,7 @@ export class KommentarService {
     command: CreateCommand,
   ): Observable<StateResource<CommandResource>> {
     return this.commandService.createCommand(resource, linkRel, command).pipe(
-      tap((createdCommand: StateResource<CommandResource>) =>
-        this.afterCreateOrEditKommentar(createdCommand),
-      ),
+      tap((createdCommand: StateResource<CommandResource>) => this.afterCreateOrEditKommentar(createdCommand)),
       startWith(createEmptyStateResource<CommandResource>(true)),
     );
   }
@@ -195,4 +166,8 @@ export class KommentarService {
     }
     return of(createEmptyStateResource<BinaryFileListResource>());
   }
+
+  public clearUploadedFiles(type: FileUploadType): void {
+    this.binaryFileService.clearUploadedFiles(type);
+  }
 }
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 18cb63b7f3129d4f586aebfa5ddefeb347c6f1e9..deb3a09319af5d00d7d9df1985963b71afd12cd2 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
@@ -30,11 +30,13 @@
   <ods-multi-file-upload-list-container
     [parentFormArrayName]="formServiceClass.FIELD_ATTACHMENTS"
     [fileUploadType]="KOMMENTAR_UPLOADED_ATTACHMENTS"
+    data-test-id="kommentar-multi-file-upload-list"
   ></ods-multi-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>
 
   <div class="buttons">
@@ -54,7 +56,7 @@
       icon="clear"
       color=""
       class="cancel-button"
-      (clickEmitter)="cancel.emit()"
+      (clickEmitter)="onCancel()"
     >
     </ozgcloud-stroked-button-with-spinner>
   </div>
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 a8af3d1f1dc2208e0502f3fef2dfa759083fc1ed..6915da935f00539e0ca1d45809e892b17ff3201a 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,21 +21,26 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
+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 { createEmptyStateResource, createErrorStateResource, createStateResource, StateResource } from '@alfa-client/tech-shared';
+import { existsAsHtmlElement, getElementComponentFromFixtureByCss, Mock, mock, triggerEvent, useFromMock, } from '@alfa-client/test-utils';
+import { OzgcloudStrokedButtonWithSpinnerComponent, TextAreaEditorComponent } from '@alfa-client/ui';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { ReactiveFormsModule } from '@angular/forms';
+import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
 import { MatFormFieldModule } from '@angular/material/form-field';
-import { BinaryFileAttachmentContainerComponent } from '@alfa-client/binary-file';
-import { KommentarLinkRel, KommentarService } from '@alfa-client/kommentar-shared';
-import { createStateResource } from '@alfa-client/tech-shared';
-import { mock } from '@alfa-client/test-utils';
-import {
-  OzgcloudStrokedButtonWithSpinnerComponent,
-  TextAreaEditorComponent,
-} from '@alfa-client/ui';
+import { expect } from '@jest/globals';
 import { MockComponent } from 'ng-mocks';
-import { of } from 'rxjs';
+import { EMPTY, of } from 'rxjs';
 import { createBinaryFileListResource } from '../../../../../binary-file-shared/test/binary-file';
-import { createKommentarResource } from '../../../../../kommentar-shared/test/kommentar';
+import { createSuccessfullyDoneCommandStateResource } from '../../../../../command-shared/test/command';
+import { MultiFileUploadEditorComponent } from '../../../../../design-component/src/lib/form/multi-file-upload-editor/multi-file-upload-editor.component';
+import { MultiFileUploadListContainerComponent } from '../../../../../design-component/src/lib/form/multi-file-upload-list-container/multi-file-upload-list-container.component';
+import { createKommentarListResource, createKommentarResource } from '../../../../../kommentar-shared/test/kommentar';
+import { getDataTestIdOf } from '../../../../../tech-shared/test/data-test';
+import { createProblemDetail } from '../../../../../tech-shared/test/error';
+import { singleColdCompleted } from '../../../../../tech-shared/test/marbles';
 import { KommentarFormComponent } from './kommentar-form.component';
 import { KommentarFormService } from './kommentar.formservice';
 
@@ -43,23 +48,43 @@ describe('KommentarFormComponent', () => {
   let component: KommentarFormComponent;
   let fixture: ComponentFixture<KommentarFormComponent>;
 
-  const formService = mock(KommentarFormService);
-  const kommentarService = mock(KommentarService);
+  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());
+
+  let kommentarService: Mock<KommentarService>;
+  let formService: KommentarFormService;
+
+  beforeEach(() => {
+    formService = new KommentarFormService(new FormBuilder(), useFromMock(kommentarService));
+    kommentarService = mock(KommentarService);
+  });
 
   beforeEach(async () => {
+    TestBed.overrideComponent(KommentarFormComponent, {
+      set: {
+        providers: [
+          {
+            provide: KommentarFormService,
+            useValue: formService,
+          },
+        ],
+      },
+    });
+
     await TestBed.configureTestingModule({
       declarations: [
         KommentarFormComponent,
         MockComponent(TextAreaEditorComponent),
         MockComponent(OzgcloudStrokedButtonWithSpinnerComponent),
         MockComponent(BinaryFileAttachmentContainerComponent),
+        MockComponent(MultiFileUploadListContainerComponent),
+        MockComponent(MultiFileUploadEditorComponent),
       ],
       imports: [MatFormFieldModule, ReactiveFormsModule],
       providers: [
-        {
-          provide: KommentarFormService,
-          useValue: formService,
-        },
         {
           provide: KommentarService,
           useValue: kommentarService,
@@ -71,6 +96,7 @@ describe('KommentarFormComponent', () => {
   beforeEach(() => {
     fixture = TestBed.createComponent(KommentarFormComponent);
     component = fixture.componentInstance;
+    component.kommentarListStateResource = kommentarListStateResource;
     fixture.detectChanges();
   });
 
@@ -82,9 +108,7 @@ describe('KommentarFormComponent', () => {
     const patchSpy = jest.spyOn(KommentarFormService.prototype, 'patch').mockImplementation();
     const kommentarResource = createKommentarResource([KommentarLinkRel.ATTACHMENTS]);
     component.kommentar = kommentarResource;
-    kommentarService.getAttachments.mockReturnValue(
-      of(createStateResource(createBinaryFileListResource())),
-    );
+    kommentarService.getAttachments.mockReturnValue(of(createStateResource(createBinaryFileListResource())));
 
     component.ngOnChanges();
 
@@ -93,9 +117,7 @@ describe('KommentarFormComponent', () => {
 
   it('should load attachments', (done) => {
     component.kommentar = createKommentarResource([KommentarLinkRel.ATTACHMENTS]);
-    kommentarService.getAttachments.mockReturnValue(
-      of(createStateResource(createBinaryFileListResource())),
-    );
+    kommentarService.getAttachments.mockReturnValue(of(createStateResource(createBinaryFileListResource())));
 
     component.ngOnChanges();
 
@@ -108,12 +130,131 @@ describe('KommentarFormComponent', () => {
   it('should call kommentarService', () => {
     const kommentarResource = createKommentarResource([KommentarLinkRel.ATTACHMENTS]);
     component.kommentar = kommentarResource;
-    kommentarService.getAttachments.mockReturnValue(
-      of(createStateResource(createBinaryFileListResource())),
-    );
+    kommentarService.getAttachments.mockReturnValue(of(createStateResource(createBinaryFileListResource())));
 
     component.ngOnChanges();
 
     expect(kommentarService.getAttachments).toHaveBeenCalledWith(kommentarResource);
   });
+
+  describe('submit', () => {
+    it('should submit form', () => {
+      formService.submit = jest.fn().mockReturnValue(EMPTY);
+
+      component.submit();
+
+      expect(formService.submit).toHaveBeenCalled();
+    });
+
+    it('should set submit in progress', () => {
+      const command: StateResource<CommandResource> = createSuccessfullyDoneCommandStateResource();
+      formService.submit = jest.fn().mockReturnValue(of(command));
+
+      component.submit();
+
+      expect(component.submitInProgress$).toBeObservable(singleColdCompleted(command));
+    });
+
+    it('should clear uploaded attachments', () => {
+      formService.submit = jest.fn().mockReturnValue(of(createSuccessfullyDoneCommandStateResource()));
+
+      component.submit();
+      component.submitInProgress$.subscribe();
+
+      expect(kommentarService.clearUploadedFiles).toHaveBeenCalledWith(KOMMENTAR_UPLOADED_ATTACHMENTS);
+    });
+
+    it('should NOT clear uploaded attachments on loading', () => {
+      formService.submit = jest.fn().mockReturnValue(of(createEmptyStateResource(true)));
+
+      component.submit();
+      component.submitInProgress$.subscribe();
+
+      expect(kommentarService.clearUploadedFiles).not.toHaveBeenCalled();
+    });
+
+    it('should NOT clear uploaded attachments on error', () => {
+      formService.submit = jest.fn().mockReturnValue(of(createErrorStateResource(createProblemDetail())));
+
+      component.submit();
+      component.submitInProgress$.subscribe();
+
+      expect(kommentarService.clearUploadedFiles).not.toHaveBeenCalled();
+    });
+  });
+
+  describe('onCancel', () => {
+    beforeEach(() => {
+      component.cancel.emit = jest.fn();
+    });
+
+    it('should clear uploaded attachments', () => {
+      component.onCancel();
+
+      expect(kommentarService.clearUploadedFiles).toHaveBeenCalledWith(KOMMENTAR_UPLOADED_ATTACHMENTS);
+    });
+
+    it('should emit', () => {
+      component.onCancel();
+
+      expect(component.cancel.emit).toHaveBeenCalled();
+    });
+  });
+
+  describe('template', () => {
+    describe('file upload list', () => {
+      it('should exists', () => {
+        existsAsHtmlElement(fixture, fileUploadListTestId);
+      });
+
+      it('should have inputs', () => {
+        fixture.detectChanges();
+
+        const fileUploadListComponent: MultiFileUploadListContainerComponent = 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);
+      });
+
+      describe('output', () => {
+        describe('clickEmitter', () => {
+          it('should call handler', () => {
+            component.onCancel = jest.fn();
+
+            triggerEvent({ fixture, elementSelector: cancelButtonTestId, name: 'clickEmitter' });
+
+            expect(component.onCancel).toHaveBeenCalled();
+          });
+        });
+      });
+    });
+  });
 });
diff --git a/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.ts b/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.ts
index 750e7a42caa8701ee60436a903826f2f3f6eb162..000e320589b6424620dee6ef62fb12c11b96f0cc 100644
--- a/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.ts
+++ b/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.ts
@@ -22,14 +22,13 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { BinaryFileListLinkRel, BinaryFileResource } from '@alfa-client/binary-file-shared';
-import { CommandResource } from '@alfa-client/command-shared';
+import { CommandResource, tapOnCommandSuccessfullyDone } from '@alfa-client/command-shared';
 import { KOMMENTAR_UPLOADED_ATTACHMENTS, KommentarListLinkRel, KommentarListResource, KommentarResource, KommentarService, } from '@alfa-client/kommentar-shared';
 import { createEmptyStateResource, getEmbeddedResources, StateResource } from '@alfa-client/tech-shared';
 import { Component, EventEmitter, Input, OnChanges, Output } from '@angular/core';
 import { isNil } from 'lodash-es';
 import { Observable, of } from 'rxjs';
 import { map } from 'rxjs/operators';
-import { MultiFileUploadListOrientation } from '../../../../../design-component/src/lib/form/multi-file-upload-list-container/multi-file-upload-list-container.component';
 import { KommentarFormService } from './kommentar.formservice';
 
 @Component({
@@ -74,9 +73,16 @@ export class KommentarFormComponent implements OnChanges {
     this.formService.patch(this.kommentar);
   }
 
-  submit(): void {
-    this.submitInProgress$ = <Observable<StateResource<CommandResource>>>this.formService.submit();
+  public submit(): void {
+    this.submitInProgress$ = <Observable<StateResource<CommandResource>>>(
+      this.formService
+        .submit()
+        .pipe(tapOnCommandSuccessfullyDone(() => this.kommentarService.clearUploadedFiles(KOMMENTAR_UPLOADED_ATTACHMENTS)))
+    );
   }
 
-  protected readonly ListOrientation = MultiFileUploadListOrientation;
+  public onCancel(): void {
+    this.kommentarService.clearUploadedFiles(KOMMENTAR_UPLOADED_ATTACHMENTS);
+    this.cancel.emit();
+  }
 }