diff --git a/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/DepositDataMapper.java b/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/DepositDataMapper.java
index 7bfe66759840ae03293a1d35dcd0b0b35a400c60..dd8a74b7d1f5b0c4065c745b5be3c66fb9217f70 100644
--- a/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/DepositDataMapper.java
+++ b/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/DepositDataMapper.java
@@ -50,36 +50,63 @@ import lombok.RequiredArgsConstructor;
 class DepositDataMapper {
 
 	public FormData mapToFormData(DepositData depositData) {
-		// Transform deposit data attachments to incoming files
-		Map<String, IncomingFile> incomingFileMap = depositData.getAttachments()
+		Map<String, IncomingFile> incomingFileMap = mapDepositAttachmentsToIncomingFiles(depositData);
+		Document document = parsePrimaryXmlRepresentation(depositData, incomingFileMap);
+		List<String> attachmentFileIds = findAttachmentFileIds(document);
+		var attachments = getAttachmentFileGroups(attachmentFileIds, incomingFileMap);
+		var representations = getRepresentations(incomingFileMap, attachmentFileIds);
+		return FormData.builder()
+				.attachments(attachments)
+				.numberOfAttachments(attachments.size())
+				.representations(representations)
+				.numberOfRepresentations(representations.size())
+				.build();
+	}
+
+	private Map<String, IncomingFile> mapDepositAttachmentsToIncomingFiles(DepositData depositData) {
+		return depositData.getAttachments()
 				.stream()
 				.collect(
 						Collectors.toMap(Attachment::getId, this::mapAttachmentToIncomingFile)
 				);
+	}
+
+	IncomingFile mapAttachmentToIncomingFile(Attachment attachment) {
+		var file = TempFileUtils.writeTmpFile(attachment.content);
+		return IncomingFile.builder()
+				.id(UUID.randomUUID().toString())
+				.vendorId(attachment.id)
+				.name(attachment.name)
+				.contentType(attachment.contentType)
+				.size(file.length())
+				.file(file)
+				.build();
+	}
 
-		// Parse the primary <myForm> xml representation
-		Document document = XMLHelper.parseDocument(
-				// Expect that the <primaryDataAttachmentId> refers to the XML file (and the <primaryFormAttachmentId> to the PDF file)
+	private Document parsePrimaryXmlRepresentation(DepositData depositData, Map<String, IncomingFile> incomingFileMap) {
+		// Expect that the <primaryDataAttachmentId> refers to the XML file
+		return XMLHelper.parseDocument(
 				getIncomingFileById(depositData.getPrimaryDataAttachmentId(), incomingFileMap)
 		);
+	}
+
+	private List<String> findAttachmentFileIds(Document document) {
+		return streamElements(document.getElementsByTagName("file"))
+				.map(element -> element.getAttribute("id"))
+				.toList();
+	}
 
-		// Find ids of <file> attachments
-		var attachmentFileIds = findAttachmentIds(document);
-		var attachments = attachmentFileIds.stream()
+	private List<IncomingFileGroup> getAttachmentFileGroups(List<String> attachmentFileIds, Map<String, IncomingFile> incomingFileMap) {
+		return attachmentFileIds.stream()
 				.map(id -> getIncomingFileById(id, incomingFileMap))
 				.map(this::createSingularFileGroup)
 				.toList();
-		var representations = getNamesWithout(incomingFileMap.keySet(), attachmentFileIds).stream()
+	}
+
+	private List<IncomingFile> getRepresentations(Map<String, IncomingFile> incomingFileMap, List<String> attachmentFileIds) {
+		return getNamesWithout(incomingFileMap.keySet(), attachmentFileIds).stream()
 				.map(id -> getIncomingFileById(id, incomingFileMap))
 				.toList();
-		return FormData.builder()
-				// Put each <file> attachment in a separate file group
-				.attachments(attachments)
-				.numberOfAttachments(attachments.size())
-				// If a deposit attachment is not referenced by <file> it is interpreted as a representation
-				.representations(representations)
-				.numberOfRepresentations(representations.size())
-				.build();
 	}
 
 	private IncomingFile getIncomingFileById(String id, Map<String, IncomingFile> incomingFileMap) {
@@ -98,27 +125,9 @@ class DepositDataMapper {
 		return names.stream().filter(name -> !excludedStringsSet.contains(name)).toList();
 	}
 
-	private List<String> findAttachmentIds(Document document) {
-		return streamElements(document.getElementsByTagName("file"))
-				.map(element -> element.getAttribute("id"))
-				.toList();
-	}
-
 	private Stream<Element> streamElements(NodeList nodeList) {
 		return IntStream.range(0, nodeList.getLength())
 				.mapToObj(nodeList::item)
 				.map(Element.class::cast);
 	}
-
-	IncomingFile mapAttachmentToIncomingFile(Attachment attachment) {
-		var file = TempFileUtils.writeTmpFile(attachment.content);
-		return IncomingFile.builder()
-				.id(UUID.randomUUID().toString())
-				.vendorId(attachment.id)
-				.name(attachment.name)
-				.contentType(attachment.contentType)
-				.size(file.length())
-				.file(file)
-				.build();
-	}
 }
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java
index c42fc60a26aeb1e12dcc51249d086181fe677b96..7641a94284e519298304f8702cc5f467cde30090 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java
@@ -33,7 +33,6 @@ import de.ozgcloud.eingang.common.formdata.FormData;
 import de.ozgcloud.eingang.router.VorgangService;
 import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter;
 import de.ozgcloud.eingang.semantik.formbased.FormBasedSemantikAdapter;
-import lombok.RequiredArgsConstructor;
 
 @Service
 public class SemantikAdapter {
@@ -65,6 +64,6 @@ public class SemantikAdapter {
 	}
 
 	private FormData parseByFormAdapter(FormData formData) {
-		return formBasedAdapter.adaptFormData(formData);
+		return formBasedAdapter.parseFormData(formData);
 	}
 }
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapper.java
index 8ca005996ebcd86ce4b59b03f9cc087ac3c3569a..9486e4838258234346c22e7165179c5641943919 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapper.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapper.java
@@ -81,7 +81,7 @@ class AfmAntragstellerMapper implements AfmEngineBasedMapper {
 		return (String) formDataMap.get(POSTFACH_ID);
 	}
 
-	private Optional<LinkedHashMap<String, Object>> getAntragstellerMap(Map<String, Object> formDataMap) {
+	private Optional<Map<String, Object>> getAntragstellerMap(Map<String, Object> formDataMap) {
 		return Optional.ofNullable(formDataMap.get(ANTRAGSTELLER))
 				.or(() -> Optional.ofNullable(formDataMap.get(ANTRAGSTELLER_UPPERCASE)))
 				.map(Map.class::cast)
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java
index 1bb43a80e2f70556be226637d2d63ad78de41efe..aedb47f05d7d39b109d67b5ba214ac90b3e1d8f7 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java
@@ -23,7 +23,6 @@ import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle;
 import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter;
 import de.ozgcloud.eingang.semantik.enginebased.ServiceKontoBuildHelper;
 import lombok.NonNull;
-import lombok.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
 
 @Log4j2
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/FormBasedMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/FormBasedMapper.java
index 64a5c44af69caffef810a2b4c8a8de077f6d44ac..47e053f919675dbbf0f1ab139117ceb65b210193 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/FormBasedMapper.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/FormBasedMapper.java
@@ -25,9 +25,9 @@ package de.ozgcloud.eingang.semantik.formbased;
 
 import de.ozgcloud.eingang.common.formdata.FormData;
 
-interface FormBasedMapper {
+public interface FormBasedMapper {
 
-	FormData adaptFormData(FormData formData);
+	FormData parseFormData(FormData formData);
 
 	boolean isResponsible(FormData formData);
 }
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/FormBasedSemantikAdapter.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/FormBasedSemantikAdapter.java
index a5121e8d8295c20eac12701362e33522d390fedf..39a9a030a2749cb3c0d7affce5e5956491697c84 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/FormBasedSemantikAdapter.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/FormBasedSemantikAdapter.java
@@ -36,11 +36,12 @@ public class FormBasedSemantikAdapter {
 
 	private final List<FormBasedMapper> mappers;
 
-	public FormData adaptFormData(FormData formData) {
-		return mappers.stream()
-				.filter(mapper -> mapper.isResponsible(formData))
-				.findFirst()
-				.map(mapper -> mapper.adaptFormData(formData))
-				.orElse(formData);
+	public FormData parseFormData(FormData formData) {
+		for(var mapper: mappers) {
+			if (mapper.isResponsible(formData)) {
+				formData = mapper.parseFormData(formData);
+			}
+		}
+		return formData;
 	}
 }
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/MantelantragFormBasedMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragFormBasedMapper.java
similarity index 95%
rename from semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/MantelantragFormBasedMapper.java
rename to semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragFormBasedMapper.java
index d6e7196a5e2e471cebf54f5891fd5de2f91405ae..27fb3cd14b452d3892cbe8023c9c57c4133a2001 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/MantelantragFormBasedMapper.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragFormBasedMapper.java
@@ -1,10 +1,11 @@
-package de.ozgcloud.eingang.semantik.formbased;
+package de.ozgcloud.eingang.semantik.formbased.mantelantrag;
 
 import java.util.Map;
 import java.util.Optional;
 import java.util.function.UnaryOperator;
 import java.util.stream.IntStream;
 
+import de.ozgcloud.eingang.semantik.formbased.FormBasedMapper;
 import org.apache.commons.collections.MapUtils;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Component;
@@ -19,13 +20,8 @@ import lombok.extern.log4j.Log4j2;
 @RequiredArgsConstructor
 @Log4j2
 public class MantelantragFormBasedMapper implements FormBasedMapper {
-
-	private final Environment environment;
-
 	static final String MANTELANTRAG_FORM_ID = "maa_mantelantrag/maa_mantelantrag_pvog";
-
 	static final String ZUSTELLUNG_NACHRICHTENBROKER_FIELD = "zustellung_nachrichtenbroker";
-
 	static final String ORGANISATIONSEINHEIT_ID_FIELD = "kontaktsystem_oeid";
 	static final String BEZEICHNUNG_FIELD = "OrganisationseinheitenBEZEICHNUNG";
 	static final String EMAIL_FIELD = "zust_emailadresse";
@@ -34,6 +30,8 @@ public class MantelantragFormBasedMapper implements FormBasedMapper {
 	static final String HAUSANSCHRIFT_ORT_FIELD = "zust_ort";
 	static final String TELEFON_FIELD = "telefon";
 
+	private final Environment environment;
+
 	@Override
 	public boolean isResponsible(FormData formData) {
 		return formData
@@ -43,7 +41,7 @@ public class MantelantragFormBasedMapper implements FormBasedMapper {
 	}
 
 	@Override
-	public FormData adaptFormData(FormData formData) {
+	public FormData parseFormData(FormData formData) {
 		try {
 			return adaptFormDataWithPossibleException(formData);
 		} catch (TechnicalException exception) {
diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/SemantikAdapterTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/SemantikAdapterTest.java
index 0e230d638419df50c78544db57ac0735994ce13a..dbe206cafc115bf08a30839bab78afbc1933fdb3 100644
--- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/SemantikAdapterTest.java
+++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/SemantikAdapterTest.java
@@ -107,7 +107,7 @@ class SemantikAdapterTest {
 		void mockEngineAdapter() {
 			doReturn(Optional.of(engineAdapter)).when(adapter).findResponsibleEngineAdapter(formData);
 			when(engineAdapter.parseFormData(any())).thenReturn(engineAdapterResponse);
-			when(formAdapter.adaptFormData(any())).thenReturn(formAdapterResponse);
+			when(formAdapter.parseFormData(any())).thenReturn(formAdapterResponse);
 		}
 
 		@Test
@@ -128,7 +128,7 @@ class SemantikAdapterTest {
 		void shouldCallFormAdapter() {
 			adapter.processFormData(formData);
 
-			verify(formAdapter).adaptFormData(engineAdapterResponse);
+			verify(formAdapter).parseFormData(engineAdapterResponse);
 		}
 
 		@Test
diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/FormBasedSemantikAdapterTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/FormBasedSemantikAdapterTest.java
index c68c9c3848ab36f3fdcb7a4e2ccdcef6eb611566..7cb39b39ea3e1a7be01f3e256eb8a607724118f6 100644
--- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/FormBasedSemantikAdapterTest.java
+++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/FormBasedSemantikAdapterTest.java
@@ -63,16 +63,16 @@ class FormBasedSemantikAdapterTest {
 
 		@Test
 		void shouldCallMapperIfResponsible() {
-			adapter.adaptFormData(formData);
+			adapter.parseFormData(formData);
 
-			verify(mapper).adaptFormData(formData);
+			verify(mapper).parseFormData(formData);
 		}
 
 		@Test
 		void shouldNotCallMapperIfNotResponsible() {
 			when(mapper.isResponsible(any())).thenReturn(false);
 
-			adapter.adaptFormData(formData);
+			adapter.parseFormData(formData);
 
 			verifyNoMoreInteractions(mapper);
 		}
@@ -80,9 +80,9 @@ class FormBasedSemantikAdapterTest {
 		@Test
 		void shouldReturnMappingResult() {
 			var expected = FormDataTestFactory.create();
-			when(mapper.adaptFormData(any())).thenReturn(expected);
+			when(mapper.parseFormData(any())).thenReturn(expected);
 
-			var result = adapter.adaptFormData(formData);
+			var result = adapter.parseFormData(formData);
 
 			assertThat(result).isSameAs(expected);
 		}
diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/MantelantragFormBasedMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragFormBasedMapperTest.java
similarity index 96%
rename from semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/MantelantragFormBasedMapperTest.java
rename to semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragFormBasedMapperTest.java
index 8c019e946e13b43882cbcda8d41f599cbe5d7d18..5bc55d0d97d695f85273fcba3f0353615b0d4b3d 100644
--- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/MantelantragFormBasedMapperTest.java
+++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragFormBasedMapperTest.java
@@ -1,6 +1,6 @@
-package de.ozgcloud.eingang.semantik.formbased;
+package de.ozgcloud.eingang.semantik.formbased.mantelantrag;
 
-import static de.ozgcloud.eingang.semantik.formbased.MantelantragFormBasedMapper.*;
+import static de.ozgcloud.eingang.semantik.formbased.mantelantrag.MantelantragFormBasedMapper.*;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
@@ -87,7 +87,7 @@ class MantelantragFormBasedMapperTest {
 		void shouldReturnAdaptedValue() {
 			doReturn(formData2).when(mapper).adaptFormDataWithPossibleException(formData);
 
-			var resultFormData = mapper.adaptFormData(formData);
+			var resultFormData = mapper.parseFormData(formData);
 
 			assertThat(resultFormData).isEqualTo(formData2);
 		}
@@ -97,7 +97,7 @@ class MantelantragFormBasedMapperTest {
 		void shouldReturnOriginalValueWithException() {
 			doThrow(new TechnicalException("some error")).when(mapper).adaptFormDataWithPossibleException(formData);
 
-			var resultFormData = mapper.adaptFormData(formData);
+			var resultFormData = mapper.parseFormData(formData);
 
 			assertThat(resultFormData).isEqualTo(formData);
 		}
@@ -128,7 +128,7 @@ class MantelantragFormBasedMapperTest {
 		void shouldKeepFormDataExceptZustaendigestelle() {
 			doReturn(10).when(mapper).findSlotIndex(fieldMap);
 
-			var resultFormData = mapper.adaptFormData(formData);
+			var resultFormData = mapper.parseFormData(formData);
 
 			assertThat(resultFormData.getId()).isEqualTo(formData.getId());
 			assertThat(resultFormData.getHeader()).isEqualTo(formData.getHeader());
diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java
index 48fab4d367f5eaa16cd4426de0c1189bc5b7bd9c..b4e3f19f94a151b974a720e229fa4db5f2a856f8 100644
--- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java
+++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java
@@ -193,20 +193,18 @@ class XtaITCase {
 
 			runner.runGetXtaMessages();
 
-			var vorgangNummer = captureEingang()
-					.getHeader()
-					.getVorgangNummer();
+			var vorgangNummer = captureEingang().getHeader().getVorgangNummer();
 			assertThat(vorgangNummer).hasSize(9);
 		}
 
 		private GrpcEingang captureEingang() {
 			return capturedRequestsFor(
-					calledMethod(VorgangServiceGrpc.getStartCreationMethod())
+				calledMethod(VorgangServiceGrpc.getStartCreationMethod())
 			)
-					.getFirst()
-					.requests()
-					.getFirst()
-					.getEingang();
+				.getFirst()
+				.requests()
+				.getFirst()
+				.getEingang();
 		}
 	}