diff --git a/common/src/test/java/de/itvsh/kop/eingangsadapter/common/formdata/FormSolutionsTestFactory.java b/common/src/test/java/de/itvsh/kop/eingangsadapter/common/formdata/FormSolutionsTestFactory.java
index d372f1a0d86b24281c14dc744074d9c79d9fbbe5..f14139f0c99ecc8e93fe50487b3ac5ab9cdc3af0 100644
--- a/common/src/test/java/de/itvsh/kop/eingangsadapter/common/formdata/FormSolutionsTestFactory.java
+++ b/common/src/test/java/de/itvsh/kop/eingangsadapter/common/formdata/FormSolutionsTestFactory.java
@@ -45,6 +45,7 @@ public class FormSolutionsTestFactory {
 	public static final String ZUSTAENDIGE_STELLE_VALUE = "zustaendigeStelle";
 	public static final String POSTFACH_ID_STELLE = "51522620-03d2-4507-b1f0-08d86920efed";
 	public static final String FORM_ID_VALUE = "KFAS_KOP_TEST-yCkgCdqG";
+	// TODO vereinfachen und in Datei(en acken
 	public static final String SIMPLE_JSON_DATA = "{\"assistant\": "
 			+ "{\"identifier\":\"" + IDENTIFIER_VALUE + "\",\n"
 			+ "\"panels\": [{\"identifier\":\"" + PANEL_ID + "\",\n"
diff --git a/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsFileMapper.java b/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsFileMapper.java
index 2f8aed6556d98f947481a6eac311288457b0aa5d..5639a6000256bcbffa897c137be62ac6323a033b 100644
--- a/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsFileMapper.java
+++ b/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsFileMapper.java
@@ -28,6 +28,7 @@ import java.util.UUID;
 import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFile;
 
 interface FormSolutionsFileMapper {
+	// TODO auf utils Klasse umstellen - interface abschaffen
 	default IncomingFile mapFile(byte[] data, String contentType, String fileName) {
 		return IncomingFile.builder()
 				.content(data)
diff --git a/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRequestMapper.java b/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRequestMapper.java
index 5a38b0661eece1053f78247321e1489364769121..870f47e40b3dfc7f19484f87634fb863cd96177d 100644
--- a/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRequestMapper.java
+++ b/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRequestMapper.java
@@ -23,10 +23,6 @@
  */
 package de.itvsh.kop.eingangsadapter.formsolutions;
 
-import static de.itvsh.kop.eingangsadapter.formsolutions.FormSolutionsAttachmentsMapper.*;
-import static de.itvsh.kop.eingangsadapter.formsolutions.FormSolutionsRepresentationsMapper.*;
-import static de.itvsh.kop.eingangsadapter.semantik.enginebased.AbstractFileMapper.*;
-
 import java.util.Map;
 import java.util.Optional;
 
@@ -39,9 +35,14 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 
 import de.itvsh.kop.common.errorhandling.TechnicalException;
 import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
+import de.itvsh.kop.eingangsadapter.semantik.FormDataUtils;
+import de.itvsh.kop.eingangsadapter.semantik.enginebased.AbstractFileMapper;
 
 @Component
 class FormSolutionsRequestMapper {
+	static final TypeReference<Map<String, Object>> VALUE_TYPE_REF = new TypeReference<Map<String, Object>>() {
+	};
+
 	@Autowired
 	private FormSolutionsAttachmentsMapper attachmentMapper;
 
@@ -53,31 +54,39 @@ class FormSolutionsRequestMapper {
 
 	public FormData map(String json) {
 		var formData = mapRequestJson(json);
+		return mapFiles(formData, json);
 
-		formData.getFormData().put(MAPPED_FILES, Map.of(
-				ATTACHMENTS, attachmentMapper.mapAttachments(formData.getFormData()),
-				REPRESENTATIONS, representationMapper.mapRepresentations(formData.getFormData(), Optional.of(json))));
-
-		return removeProcessedData(formData);
 	}
 
 	private FormData mapRequestJson(String json) {
+
+		return FormData.builder()
+				.formData(mapFormData(json))
+				.build();
+
+	}
+
+	Map<String, Object> mapFormData(String json) {
 		try {
-			return FormData.builder().formData(objectMapper.readValue(json, new TypeReference<Map<String, Object>>() {
-			})).build();
+			return objectMapper.readValue(json, VALUE_TYPE_REF);
 		} catch (JsonProcessingException e) {
 			throw new TechnicalException("Error parsing JSON from FormSolutions-Server", e);
 		}
 	}
 
-//TEST
-	private FormData removeProcessedData(FormData formData) {
-		Map<String, Object> data = formData.getFormData();
-//TODO immutable berucksichtigen
-		data.remove(ZIP);
-		data.remove(PDF);
-		data.remove(JSON);
+	FormData mapFiles(FormData formData, String json) {
+		return FormDataUtils.from(formData)
+				.put(AbstractFileMapper.FIELD_NAME_MAPPED_FILES, buildMappedFiles(formData, json))
+				.remove(FormSolutionsAttachmentsMapper.ZIP)
+				.remove(FormSolutionsRepresentationsMapper.PDF)
+				.build();
 
-		return formData.toBuilder().formData(data).build();
 	}
+
+	private Map<String, Object> buildMappedFiles(FormData formData, String json) {
+		return Map.of(
+				AbstractFileMapper.ATTACHMENTS, attachmentMapper.mapAttachments(formData.getFormData()),
+				AbstractFileMapper.REPRESENTATIONS, representationMapper.mapRepresentations(formData.getFormData(), Optional.of(json)));
+	}
+
 }
\ No newline at end of file
diff --git a/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRequestMapperTest.java b/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRequestMapperTest.java
index 6f4fb6b1e263ba23912017ded35a96db0128d3a4..d2237c4c57206153f731020d975568033bdf39e4 100644
--- a/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRequestMapperTest.java
+++ b/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRequestMapperTest.java
@@ -34,11 +34,14 @@ import static org.mockito.Mockito.*;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
+import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.Mockito;
 import org.mockito.Spy;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -47,7 +50,8 @@ import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import de.itvsh.kop.common.errorhandling.TechnicalException;
-import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
+import de.itvsh.kop.eingangsadapter.common.formdata.FormDataTestFactory;
+import de.itvsh.kop.eingangsadapter.semantik.enginebased.AbstractFileMapper;
 import de.itvsh.kop.eingangsadapter.semantik.enginebased.FormSolutionsPanelMapper;
 
 class FormSolutionsRequestMapperTest {
@@ -56,10 +60,10 @@ class FormSolutionsRequestMapperTest {
 
 	@Spy
 	@InjectMocks
-	private FormSolutionsRequestMapper mapper = new FormSolutionsRequestMapper();
+	private FormSolutionsRequestMapper mapper;
 
 	@Mock
-	private FormSolutionsAttachmentsMapper attachmentsMapper;
+	private FormSolutionsAttachmentsMapper attachmentMapper;
 	@Mock
 	private FormSolutionsRepresentationsMapper representationsMapper;
 
@@ -70,153 +74,179 @@ class FormSolutionsRequestMapperTest {
 	class TestJsonToMapMapping {
 		@Test
 		void shouldMap() {
-			var dataMap = mapper.map(SIMPLE_JSON_DATA);
+			var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
 
 			assertThat(dataMap).isNotNull();
 		}
 
-		@Test
-		void shouldNotFillSemantikFields() {
-			var dataMap = mapper.map(SIMPLE_JSON_DATA);
-
-			assertThat(dataMap.getZustaendigeStelle()).isNull();
-			assertThat(dataMap.getAntragsteller()).isNull();
-			assertThat(dataMap.getHeader()).isNull();
-		}
-
 		@Test
 		void shouldContainZustaendigeStelle() {
-			var dataMap = mapper.map(SIMPLE_JSON_DATA);
+			var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
 
-			assertThat((String) dataMap.getFormData().get(ZUSTAENDIGE_STELLE)).isEqualTo(ORGANISATIONSEINHEITEN_ID);
+			assertThat((String) dataMap.get(ZUSTAENDIGE_STELLE)).isEqualTo(ORGANISATIONSEINHEITEN_ID);
 		}
 
 		@Test
 		void shouldContainAnsprechpartner() {
-			var dataMap = mapper.map(SIMPLE_JSON_DATA);
+			var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
 
-			assertThat((String) dataMap.getFormData().get(POSTKORBHANDLE)).isEqualTo(POSTFACH_ID);
+			assertThat((String) dataMap.get(POSTKORBHANDLE)).isEqualTo(POSTFACH_ID);
 		}
 
 		@Test
 		void shouldContainRequestId() {
-			var dataMap = mapper.map(SIMPLE_JSON_DATA);
+			var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
 
-			assertThat((String) dataMap.getFormData().get(TRANSACTION_ID)).isEqualTo(FORM_ID_VALUE);
+			assertThat((String) dataMap.get(TRANSACTION_ID)).isEqualTo(FORM_ID_VALUE);
 		}
 
 		@Test
 		void shouldContainAssitant() {
-			var dataMap = mapper.map(SIMPLE_JSON_DATA);
+			var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
 
-			assertThat(dataMap.getFormData().get(ASSISTANT)).isNotNull();
+			assertThat(dataMap.get(ASSISTANT)).isNotNull();
 		}
 
-		@SuppressWarnings("unchecked")
 		@Test
 		void shouldHandleJsonException() throws JsonMappingException, JsonProcessingException {
-			doThrow(JsonProcessingException.class).when(objectMapper).readValue(anyString(), any(TypeReference.class));
+			doThrow(JsonProcessingException.class).when(objectMapper).readValue(anyString(), Mockito.<TypeReference<Map<String, Object>>>any());
 
-			assertThatThrownBy(() -> mapper.map(SIMPLE_JSON_DATA)).isInstanceOf(TechnicalException.class);
+			assertThatThrownBy(() -> mapper.mapFormData(SIMPLE_JSON_DATA)).isInstanceOf(TechnicalException.class);
 		}
 
 		@Test
 		@SuppressWarnings("unchecked")
 		void shouldContainFormIdentifier() {
-			var dataMap = mapper.map(SIMPLE_JSON_DATA);
+			var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
 
-			assertThat((String) ((Map<String, Object>) dataMap.getFormData().get(ASSISTANT))
+			assertThat((String) ((Map<String, Object>) dataMap.get(ASSISTANT))
 					.get(IDENTIFIER))
 							.isEqualTo(IDENTIFIER_VALUE);
 		}
 
-		@Test
-		void shouldRemoveZip() {
-			var dataMap = mapper.map(ATTACHMENTS_JSON);
+		@Nested
+		class TestPanels {
+			@Test
+			void shouldContainPanels() {
+				var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
 
-			assertThat(dataMap.getFormData().get(FormSolutionsAttachmentsMapper.ZIP)).isNull();
-		}
+				assertThat(getPanels(dataMap)).isNotNull();
+			}
 
-		@Test
-		void shouldRemovePdf() {
-			var dataMap = mapper.map(ATTACHMENTS_JSON);
+			@Test
+			void shouldContainPanelIdentifier() {
+				var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
 
-			assertThat(dataMap.getFormData().get(FormSolutionsRepresentationsMapper.PDF)).isNull();
-		}
+				assertThat(getPanels(dataMap).get(0)).containsEntry(IDENTIFIER, PANEL_ID);
+			}
 
-	}
+			@Test
+			void shouldContainPanelComponets() {
+				var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
 
-	@Nested
-	class TestPanels {
-		@Test
-		void shouldContainPanels() {
-			var dataMap = mapper.map(SIMPLE_JSON_DATA);
+				assertThat(getPanels(dataMap).get(0).get(FormSolutionsPanelMapper.COMPONENTS)).isNotNull();
+			}
 
-			assertThat(getPanels(dataMap)).isNotNull();
-		}
+			@Test
+			void shouldContainTextComponets() {
+				var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
 
-		@Test
-		void shouldContainPanelIdentifier() {
-			var dataMap = mapper.map(SIMPLE_JSON_DATA);
+				assertThat(getComponents(dataMap).get(0))
+						.containsEntry(IDENTIFIER, COMPONENT_ID)
+						.containsEntry(STRING_VALUE, COMPONENT_VALUE);
+			}
 
-			assertThat(getPanels(dataMap).get(0)).containsEntry(IDENTIFIER, PANEL_ID);
-		}
+			@Test
+			void shouldContainDateComponets() {
+				var dataMap = mapper.mapFormData(SIMPLE_JSON_DATA);
 
-		@Test
-		void shouldContainPanelComponets() {
-			var dataMap = mapper.map(SIMPLE_JSON_DATA);
+				assertThat(getComponents(dataMap).get(1))
+						.containsEntry(IDENTIFIER, DATE_COMPONENT_ID)
+						.containsEntry(STRING_VALUE, DATE_COMPONENT_VALUE);
+			}
 
-			assertThat(getPanels(dataMap).get(0).get(FormSolutionsPanelMapper.COMPONENTS)).isNotNull();
-		}
+			@Nested
+			class TestNestedPanels {
+				@Test
+				void shouldContainGroup() {
+					var dataMap = mapper.mapFormData(NESTED_COMPONENTS_JSON);
 
-		@Test
-		void shouldContainTextComponets() {
-			var dataMap = mapper.map(SIMPLE_JSON_DATA);
+					assertThat(getComponents(dataMap).get(0)).containsEntry(IDENTIFIER, OBJEKTGRUPPE_0);
+				}
 
-			assertThat(getComponents(dataMap).get(0)).containsEntry(IDENTIFIER, COMPONENT_ID);
-			assertThat(getComponents(dataMap).get(0)).containsEntry(STRING_VALUE, COMPONENT_VALUE);
+				@Test
+				void shouldContainDateField() {
+					var dataMap = mapper.mapFormData(NESTED_COMPONENTS_JSON);
+
+					assertThat(getNestedComponents(dataMap).get(0))
+							.containsEntry(IDENTIFIER, DATE_COMPONENT_ID)
+							.containsEntry(STRING_VALUE, DATE_COMPONENT_VALUE);
+				}
+			}
 		}
 
-		@Test
-		void shouldContainDateComponets() {
-			var dataMap = mapper.map(SIMPLE_JSON_DATA);
+		@SuppressWarnings("unchecked")
+		private List<Map<String, Object>> getComponents(Map<String, Object> dataMap) {
+			return (List<Map<String, Object>>) getPanels(dataMap).get(0).get(COMPONENTS);
+		}
 
-			assertThat(getComponents(dataMap).get(1)).containsEntry(IDENTIFIER, DATE_COMPONENT_ID);
-			assertThat(getComponents(dataMap).get(1)).containsEntry(STRING_VALUE, DATE_COMPONENT_VALUE);
+		@SuppressWarnings("unchecked")
+		private List<Map<String, Object>> getNestedComponents(Map<String, Object> dataMap) {
+			return (List<Map<String, Object>>) ((List<Map<String, Object>>) getPanels(dataMap).get(0).get(COMPONENTS)).get(0).get(COMPONENTS);
 		}
 
+		@SuppressWarnings("unchecked")
+		private List<Map<String, Object>> getPanels(Map<String, Object> dataMap) {
+			return (List<Map<String, Object>>) ((Map<String, Object>) dataMap.get(ASSISTANT)).get(PANELS);
+		}
+	}
+
+	@Nested
+	class TestFileMapping {
+
 		@Nested
-		class TestNestedPanels {
+		class TestMapFiles {
 			@Test
-			void shouldContainGroup() {
-				var dataMap = mapper.map(NESTED_COMPONENTS_JSON);
+			void shouldCallAttachmentMappers() {
+				mapper.mapFiles(FormDataTestFactory.create(), ATTACHMENTS_JSON);
 
-				assertThat(getComponents(dataMap).get(0)).containsEntry(IDENTIFIER, OBJEKTGRUPPE_0);
+				verify(attachmentMapper).mapAttachments(Mockito.<Map<String, Object>>any());
 			}
 
+			@DisplayName("result should have mapped files field")
 			@Test
-			void shouldContainDateField() {
-				var dataMap = mapper.map(NESTED_COMPONENTS_JSON);
+			void shouldHaveMappedFilesField() {
+				var result = mapper.mapFiles(FormDataTestFactory.create(), ATTACHMENTS_JSON);
 
-				assertThat(getNestedComponents(dataMap).get(0)).containsEntry(IDENTIFIER, DATE_COMPONENT_ID);
-				assertThat(getNestedComponents(dataMap).get(0)).containsEntry(STRING_VALUE, DATE_COMPONENT_VALUE);
+				assertThat(result.getFormData()).containsKey(AbstractFileMapper.FIELD_NAME_MAPPED_FILES);
 			}
-		}
-	}
 
-	@SuppressWarnings("unchecked")
-	private List<Map<String, Object>> getPanels(FormData dataMap) {
-		return (List<Map<String, Object>>) ((Map<String, Object>) dataMap.getFormData().get(ASSISTANT)).get(PANELS);
-	}
+			@Test
+			void shouldCallRepresentationMapper() {
+				mapper.mapFiles(FormDataTestFactory.create(), ATTACHMENTS_JSON);
 
-	@SuppressWarnings("unchecked")
-	private List<Map<String, Object>> getComponents(FormData dataMap) {
-		return (List<Map<String, Object>>) getPanels(dataMap).get(0).get(COMPONENTS);
-	}
+				verify(representationsMapper).mapRepresentations(Mockito.<Map<String, Object>>any(), eq(Optional.of(ATTACHMENTS_JSON)));
+			}
+
+			@Test
+			void shouldRemoveZip() {
+				var formData = FormDataTestFactory.withFormDataMaps(Map.of(FormSolutionsAttachmentsMapper.ZIP, "test"));
+
+				var dataMap = mapper.mapFiles(formData, ATTACHMENTS_JSON);
+
+				assertThat(dataMap.getFormData()).doesNotContainKey(FormSolutionsAttachmentsMapper.ZIP);
+			}
+
+			@Test
+			void shouldRemovePdf() {
+				var formData = FormDataTestFactory.withFormDataMaps(Map.of(FormSolutionsRepresentationsMapper.PDF, "test"));
+
+				var dataMap = mapper.mapFiles(formData, ATTACHMENTS_JSON);
+
+				assertThat(dataMap.getFormData()).doesNotContainKey(FormSolutionsRepresentationsMapper.PDF);
+			}
+		}
 
-	@SuppressWarnings("unchecked")
-	private List<Map<String, Object>> getNestedComponents(FormData dataMap) {
-		return (List<Map<String, Object>>) ((List<Map<String, Object>>) getPanels(dataMap).get(0).get(COMPONENTS)).get(0).get(COMPONENTS);
 	}
 
 }
diff --git a/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/SendFormEndpointITCase.java b/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/SendFormEndpointITCase.java
index 0272bbf580cffe9b032b6d1ba4677ea9ee473214..6f0083b92edca24db4f01333c735b79f9119986a 100644
--- a/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/SendFormEndpointITCase.java
+++ b/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/SendFormEndpointITCase.java
@@ -158,7 +158,7 @@ class SendFormEndpointITCase {
 
 		@SuppressWarnings("unchecked")
 		private IncomingFile getRepresentation(Map<String, Object> data) {
-			return ((List<IncomingFile>) ((Map<String, Object>) data.get(MAPPED_FILES)).get(PARSED_REPRESENTATIONS)).get(0);
+			return ((List<IncomingFile>) ((Map<String, Object>) data.get(FIELD_NAME_MAPPED_FILES)).get(PARSED_REPRESENTATIONS)).get(0);
 		}
 	}
 
@@ -189,6 +189,6 @@ class SendFormEndpointITCase {
 
 	@SuppressWarnings("unchecked")
 	private Map<String, Object> getFiles(Map<String, Object> data) {
-		return (Map<String, Object>) data.get(MAPPED_FILES);
+		return (Map<String, Object>) data.get(FIELD_NAME_MAPPED_FILES);
 	}
 }
diff --git a/intelliform-adapter/src/main/java/de/itvsh/kop/eingangsadapter/intelliform/SemantikFormDataMapper.java b/intelliform-adapter/src/main/java/de/itvsh/kop/eingangsadapter/intelliform/SemantikFormDataMapper.java
index caad9cd7a5e65a2630d04585ea69c42d1b4774ba..49dcf058b6e371e51a312302ff1b1128006f3557 100644
--- a/intelliform-adapter/src/main/java/de/itvsh/kop/eingangsadapter/intelliform/SemantikFormDataMapper.java
+++ b/intelliform-adapter/src/main/java/de/itvsh/kop/eingangsadapter/intelliform/SemantikFormDataMapper.java
@@ -111,7 +111,7 @@ class SemantikFormDataMapper {
 
 		List<IncomingFile> representations = incomingFilesService.calculateRepresentations(attachments, depositRequestFiles);
 
-		formDataMap.put(MAPPED_FILES, Map.of(
+		formDataMap.put(FIELD_NAME_MAPPED_FILES, Map.of(
 				ATTACHMENTS, attachments,
 				REPRESENTATIONS, representations));
 
diff --git a/intelliform-adapter/src/test/java/de/itvsh/kop/eingangsadapter/intelliform/SemantikFormDataMapperTest.java b/intelliform-adapter/src/test/java/de/itvsh/kop/eingangsadapter/intelliform/SemantikFormDataMapperTest.java
index 42603a449d1ab72777faaa0dd9133aa4d0682a68..e5d9c911d84d54057399985b6619cb1b9bffeab7 100644
--- a/intelliform-adapter/src/test/java/de/itvsh/kop/eingangsadapter/intelliform/SemantikFormDataMapperTest.java
+++ b/intelliform-adapter/src/test/java/de/itvsh/kop/eingangsadapter/intelliform/SemantikFormDataMapperTest.java
@@ -112,7 +112,7 @@ class SemantikFormDataMapperTest {
 
 			@SuppressWarnings("unchecked")
 			private List<IncomingFile> getRepresentations(FormData formData) {
-				return (List<IncomingFile>) ((Map<String, Object>) formData.getFormData().get(AbstractFileMapper.MAPPED_FILES))
+				return (List<IncomingFile>) ((Map<String, Object>) formData.getFormData().get(AbstractFileMapper.FIELD_NAME_MAPPED_FILES))
 						.get(AbstractFileMapper.REPRESENTATIONS);
 			}
 		}
diff --git a/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/FormDataUtils.java b/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/FormDataUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..6b241a059d4cce531fcf213fbd5e4f3369b9d0a1
--- /dev/null
+++ b/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/FormDataUtils.java
@@ -0,0 +1,42 @@
+package de.itvsh.kop.eingangsadapter.semantik;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
+import lombok.NonNull;
+
+public class FormDataUtils {
+
+	final FormData baseFormData;
+	final Map<String, Object> modifieableData;
+
+	private FormDataUtils(FormData formData) {
+		baseFormData = formData;
+		modifieableData = new HashMap<>(formData.getFormData());
+	}
+
+	public static FormDataUtils from(FormData formData) {
+		return new FormDataUtils(formData);
+	}
+
+	public FormDataUtils remove(String key) {
+		modifieableData.remove(key);
+		return this;
+	}
+
+	public FormDataUtils put(@NonNull String key, Object value) {
+		modifieableData.put(key, value);
+		return this;
+	}
+
+	public FormData build() {
+		return baseFormData.toBuilder().formData(Collections.unmodifiableMap(modifieableData)).build();
+	}
+
+	@SuppressWarnings("unchecked")
+	public static Map<String, Object> getSubMap(FormData formData, String key) {
+		return (Map<String, Object>) formData.getFormData().get(key);
+	}
+}
diff --git a/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AbstractFileMapper.java b/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AbstractFileMapper.java
index ab255ec57a6abe56148f27786967e175dbb9b380..c2f36ae6a94d90e9b0e9cab6fe9438302f171307 100644
--- a/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AbstractFileMapper.java
+++ b/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AbstractFileMapper.java
@@ -23,8 +23,6 @@
  */
 package de.itvsh.kop.eingangsadapter.semantik.enginebased;
 
-import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -32,11 +30,13 @@ import java.util.Optional;
 import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
 import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFile;
 import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFileGroup;
+import de.itvsh.kop.eingangsadapter.semantik.FormDataUtils;
 
+//TODO Vererbung ausbauen und durch Utils ersetzen
 public abstract class AbstractFileMapper implements EngineBasedMapper {
 	public static final String ATTACHMENTS = "parsedAttachments";
 	public static final String REPRESENTATIONS = "parsedRepresentations";
-	public static final String MAPPED_FILES = "mappedFiles";
+	public static final String FIELD_NAME_MAPPED_FILES = "mappedFiles";
 
 	@Override
 	public FormData parseFormData(FormData formData) {
@@ -77,16 +77,12 @@ public abstract class AbstractFileMapper implements EngineBasedMapper {
 		return builder;
 	}
 
-	@SuppressWarnings("unchecked")
 	protected Map<String, Object> getMappedFiles(FormData formData) {
-		return (Map<String, Object>) formData.getFormData().get(MAPPED_FILES);
+		return FormDataUtils.getSubMap(formData, FIELD_NAME_MAPPED_FILES);
 	}
 
 	protected FormData removeProcessedData(FormData formData) {
-		var cleanedFormData = new HashMap<String, Object>(formData.getFormData());
-		cleanedFormData.remove(MAPPED_FILES);
-		// TODO copyOf erlaubt keine null values -daher ausbauen
+		return FormDataUtils.from(formData).remove(FIELD_NAME_MAPPED_FILES).build();
 
-		return formData.toBuilder().formData(Collections.unmodifiableMap(cleanedFormData)).build();
 	}
 }
\ No newline at end of file
diff --git a/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmFilesMapperTest.java b/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmFilesMapperTest.java
index 6134fe90f49e14a3046a27ce185d13f1c127374a..f2ab3e95d9ffaeb76fb16434079aebdbded5175b 100644
--- a/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmFilesMapperTest.java
+++ b/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AfmFilesMapperTest.java
@@ -52,7 +52,7 @@ class AfmFilesMapperTest {
 
 	private FormData formData = FormDataTestFactory.createBuilder()
 			.clearAttachments()
-			.formData(Map.of(AbstractFileMapper.MAPPED_FILES,
+			.formData(Map.of(AbstractFileMapper.FIELD_NAME_MAPPED_FILES,
 					Map.of(AbstractFileMapper.ATTACHMENTS, List.of(IncomingFileGroupTestFactory.create(), attachmentWithMultipleFiles))))
 			.build();
 
@@ -93,7 +93,7 @@ class AfmFilesMapperTest {
 		void shouldRemoveFilesFromMap() {
 			var parsedFormData = parseFormData();
 
-			assertThat(parsedFormData.getFormData().get(AbstractFileMapper.MAPPED_FILES)).isNull();
+			assertThat(parsedFormData.getFormData().get(AbstractFileMapper.FIELD_NAME_MAPPED_FILES)).isNull();
 		}
 
 		private FormData parseFormData() {
diff --git a/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AttachmentsTestFactory.java b/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AttachmentsTestFactory.java
index 4b2821e48dac810a5cb5b155d89b9a38a25245bf..824c4bc084de21aebc3fa7022a8cc3c8064689af 100644
--- a/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AttachmentsTestFactory.java
+++ b/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/AttachmentsTestFactory.java
@@ -98,12 +98,12 @@ public class AttachmentsTestFactory {
 			createAttachments(List.of(
 					createFile(FILE_NAME_ZIP_ATTACHMENT, ZIP_ENCRYPTED_DECODED, ZIP_CONTENT_TYPE)), FILE_GROUP_ZIP_NAME));
 
-	public static final Map<String, Object> FORMDATA_WITH_AFM_FILES = Map.of(MAPPED_FILES,
+	public static final Map<String, Object> FORMDATA_WITH_AFM_FILES = Map.of(FIELD_NAME_MAPPED_FILES,
 			Map.of(
 					ATTACHMENTS, AFM_ATTACHMMENTS,
 					REPRESENTATIONS, AFM_REPRESENTATIONS));
 
-	public static final Map<String, Object> FORMDATA_WITH_NO_ATTACHMENTS = Map.of(MAPPED_FILES,
+	public static final Map<String, Object> FORMDATA_WITH_NO_ATTACHMENTS = Map.of(FIELD_NAME_MAPPED_FILES,
 			Map.of(
 					ATTACHMENTS, List.of(),
 					REPRESENTATIONS, FORMSOLUTIONS_REPRESENTATIONS));
diff --git a/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsEngineBasedAdapterITCase.java b/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsEngineBasedAdapterITCase.java
index 64bfd77f31ae347f8ae828cf4b53e973649dc702..6ef28c2dc30a107c33fefdd9b9f7a0e01ede4353 100644
--- a/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsEngineBasedAdapterITCase.java
+++ b/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsEngineBasedAdapterITCase.java
@@ -262,7 +262,7 @@ public class FormSolutionsEngineBasedAdapterITCase {
 				createFile(FILE_NAME_ZIP_ATTACHMENT, ZIP_DECODED, ZIP_CONTENT_TYPE)), FILE_GROUP_ZIP_NAME);
 
 		Map<String, Object> plainMap = getTestDataFromFile();
-		plainMap.put(MAPPED_FILES, Map.of(
+		plainMap.put(FIELD_NAME_MAPPED_FILES, Map.of(
 				ATTACHMENTS, formsolutionsAttachments, REPRESENTATIONS, FORMSOLUTIONS_REPRESENTATIONS));
 
 		return FormData.builder().formData(plainMap).build();
diff --git a/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsFilesMapperTest.java b/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsFilesMapperTest.java
index 09f0f4587d9ae87b5b13cb947df4ec0454d77cb3..4686f8d329f78055e89514cbd47b4d40cb80999b 100644
--- a/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsFilesMapperTest.java
+++ b/semantik-adapter/src/test/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/FormSolutionsFilesMapperTest.java
@@ -60,7 +60,7 @@ class FormSolutionsFilesMapperTest {
 								IncomingFileTestFactory.create()))
 						.build());
 
-		private final FormData formData = AttachmentsTestFactory.createBuilder().formData(Map.of(MAPPED_FILES,
+		private final FormData formData = AttachmentsTestFactory.createBuilder().formData(Map.of(FIELD_NAME_MAPPED_FILES,
 				Map.of(
 						ATTACHMENTS, attachments,
 						REPRESENTATIONS, FORMSOLUTIONS_REPRESENTATIONS)))
@@ -123,7 +123,7 @@ class FormSolutionsFilesMapperTest {
 	@Nested
 	class TestEncryptedAttachments {
 
-		private final FormData formData = FormData.builder().formData(Map.of(MAPPED_FILES, FORMDATA_WITH_FORMSOLUTIONS_ATTACHMMENTS_ENCRYPTED))
+		private final FormData formData = FormData.builder().formData(Map.of(FIELD_NAME_MAPPED_FILES, FORMDATA_WITH_FORMSOLUTIONS_ATTACHMMENTS_ENCRYPTED))
 				.build();
 
 		@Test