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 b12dfc7a99548a5868891da6608dab10242e64d2..f4b42d22220e907979e96ccdc21b684084ef0ac7 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
@@ -71,8 +71,8 @@ class DepositDataMapper {
 	}
 
 	public FormData mapToFormData(DepositData depositData) {
-		Map<String, IncomingFile> incomingFileMap = mapDepositAttachmentsToIncomingFiles(depositData);
-		Document document = parsePrimaryXmlRepresentation(depositData, incomingFileMap);
+		var incomingFileMap = mapDepositAttachmentsToSortedIncomingFiles(depositData);
+		var document = parsePrimaryXmlRepresentation(depositData, incomingFileMap);
 		var attachmentGroups = findAttachmentGroups(document);
 
 		return mapToFormDataWithRepresentationsAndAttachments(
@@ -99,7 +99,14 @@ class DepositDataMapper {
 				.build();
 	}
 
-	Map<String, IncomingFile> mapDepositAttachmentsToIncomingFiles(DepositData depositData) {
+	Map<String, IncomingFile> mapDepositAttachmentsToSortedIncomingFiles(DepositData depositData) {
+		var incomingFilesMap = mapDepositAttachmentsToIncomingFiles(depositData);
+		var primaryId = depositData.getPrimaryDataAttachmentId();
+		incomingFilesMap.putFirst(primaryId, getIncomingFileById(primaryId, incomingFilesMap));
+		return incomingFilesMap;
+	}
+
+	private LinkedHashMap<String, IncomingFile> mapDepositAttachmentsToIncomingFiles(DepositData depositData) {
 		return depositData.getAttachments()
 				.stream()
 				.collect(Collectors.toMap(
diff --git a/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/AttachmentTestFactory.java b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/AttachmentTestFactory.java
index 0bc63fd67c648f3a51d7a57942cd5414a3293262..a2157603218be1f371cd3d516e93640ba2bb5703 100644
--- a/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/AttachmentTestFactory.java
+++ b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/AttachmentTestFactory.java
@@ -54,6 +54,8 @@ public class AttachmentTestFactory {
 			    </myForm>""";
 	public static final String XML_CONTENT = XML_CONTENT_STRING;
 	public static final String XML_ATTACHMENT_ID = "myForm-xml";
+	public static final String XML_ROHFORM_ATTACHMENT_ID = "myForm-xml-rohform";
+	public static final String XML_ORIGINALFORM_ATTACHMENT_ID = "myForm-xml-originalform";
 	public static final String XML_NAME = "XML-Daten.xml";
 
 	public static final String PDF_ATTACHMENT_CONTENT_TYPE = "application/pdf";
@@ -114,7 +116,7 @@ public class AttachmentTestFactory {
 				.build());
 	}
 
-	private static Attachment createAttachment(MetaAttachment metaAttachment) {
+	public static Attachment createAttachment(MetaAttachment metaAttachment) {
 		var attachment = new Attachment();
 		attachment.getAttributes().add(createAttributesEntry());
 		attachment.setContent(metaAttachment.content.getBytes());
@@ -147,7 +149,22 @@ public class AttachmentTestFactory {
 		);
 
 		return Stream.concat(
-				Stream.of(createXmlDatenWithContent(xmlFormString)),
+				Stream.of(
+						createAttachment(MetaAttachment.builder()
+								.id(XML_ROHFORM_ATTACHMENT_ID)
+								.name("XML-Daten (Rohform).xml")
+								.contentType(XML_CONTENT_TYPE)
+								.content(xmlFormString)
+								.build()
+						),
+						createAttachment(MetaAttachment.builder()
+								.id(XML_ORIGINALFORM_ATTACHMENT_ID)
+								.name("XML-Daten (Originalform).xml")
+								.contentType(XML_CONTENT_TYPE)
+								.content(xmlFormString)
+								.build()
+						),
+						createXmlDatenWithContent(xmlFormString)),
 				metaAttachments.stream().map(AttachmentTestFactory::createAttachment)
 		).toList();
 	}
@@ -163,7 +180,7 @@ public class AttachmentTestFactory {
 	}
 
 	@Builder
-	private record MetaAttachment(String id, String name, String contentType, String content, String templateId) {
+	public record MetaAttachment(String id, String name, String contentType, String content, String templateId) {
 	}
 
 	private static List<MetaAttachment> arrayToMetaAttachments(String[] array) {
diff --git a/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/DepositDataMapperTest.java b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/DepositDataMapperTest.java
index 53aa6003c9e0595b8df9e4f534ca82c2f0e91b6e..14e6051660099f272547fd68a7ec71fe265422e5 100644
--- a/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/DepositDataMapperTest.java
+++ b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/DepositDataMapperTest.java
@@ -25,13 +25,13 @@ package de.ozgcloud.eingang.intelliform;
 
 import static de.ozgcloud.eingang.intelliform.AttachmentTestFactory.*;
 import static de.ozgcloud.eingang.intelliform.DepositDataTestFactory.*;
+import static java.util.Collections.*;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
 import java.io.IOException;
 import java.io.StringReader;
 import java.nio.charset.Charset;
-import java.util.Collections;
 import java.util.List;
 
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -208,7 +208,11 @@ class DepositDataMapperTest {
 				var incomingFileIds = formData.getRepresentations().stream()
 						.map(IncomingFile::getVendorId)
 						.toList();
-				assertThat(incomingFileIds).containsExactly(XML_ATTACHMENT_ID);
+				assertThat(incomingFileIds).containsExactly(
+						XML_ATTACHMENT_ID,
+						XML_ROHFORM_ATTACHMENT_ID,
+						XML_ORIGINALFORM_ATTACHMENT_ID
+				);
 			}
 
 			@DisplayName("should return with attachment groups")
@@ -244,7 +248,7 @@ class DepositDataMapperTest {
 			@DisplayName("should throw technical exception")
 			@Test
 			void shouldThrowTechnicalException() {
-				depositData = DepositDataTestFactory.create(Collections.emptyList());
+				depositData = DepositDataTestFactory.create(emptyList());
 
 				assertThatThrownBy(TestMapToFormData.this::doMapping)
 						.isInstanceOf(TechnicalException.class);
@@ -257,20 +261,53 @@ class DepositDataMapperTest {
 
 	}
 
-	@DisplayName("map deposit attachments to incoming files")
+	@DisplayName("map deposit attachments to sorted incoming files")
 	@Nested
-	class TestMapDepositAttachmentsToIncomingFiles {
+	class TestMapDepositAttachmentsToSortedIncomingFiles {
+
+		@DisplayName("should fail without primaryDataAttachmentId attachment")
+		@Test
+		void shouldFailWithoutPrimaryDataAttachmentIdAttachment() {
+			var depositData = DepositDataTestFactory.create(emptyList());
+
+			assertThatThrownBy(() -> mapper.mapDepositAttachmentsToSortedIncomingFiles(depositData))
+					.isInstanceOf(TechnicalException.class);
+		}
+
 		@DisplayName("should keep entry order")
 		@Test
 		void shouldKeepEntryOrder() {
 			var depositData = DepositDataTestFactory.create(ATTACHMENTS);
 
-			var incomingFileMap = mapper.mapDepositAttachmentsToIncomingFiles(depositData);
+			var incomingFileMap = mapper.mapDepositAttachmentsToSortedIncomingFiles(depositData);
 
 			var keys = incomingFileMap.keySet().stream().toList();
 			assertThat(keys).containsExactly(XML_ATTACHMENT_ID, PDF_ATTACHMENT_ID, PNG_ATTACHMENT_ID);
 		}
 
+		@DisplayName("should move primary attachment id to first position")
+		@Test
+		void shouldMovePrimaryAttachmentIdToFirstPosition() {
+			var rohformId = "XML-daten-rohform";
+			var depositData = DepositDataTestFactory.create(List.of(
+					AttachmentTestFactory.createAttachment(MetaAttachment.builder()
+							.id(rohformId)
+							.name("XML-Daten (Rohform).xml")
+							.contentType(XML_CONTENT_TYPE)
+							.content("abc")
+							.build()
+					),
+					AttachmentTestFactory.createPdf(),
+					AttachmentTestFactory.createXmlDaten(),
+					AttachmentTestFactory.createPng()
+			));
+
+			var incomingFileMap = mapper.mapDepositAttachmentsToSortedIncomingFiles(depositData);
+
+			var keys = incomingFileMap.keySet().stream().toList();
+			assertThat(keys).containsExactly(XML_ATTACHMENT_ID, rohformId, PDF_ATTACHMENT_ID, PNG_ATTACHMENT_ID);
+		}
+
 		@DisplayName("should keep last entry for duplicate key")
 		@Test
 		void shouldKeepLastEntryForDuplicateKey() {
@@ -280,7 +317,7 @@ class DepositDataMapperTest {
 					AttachmentTestFactory.createXmlDaten()
 			));
 
-			var incomingFileMap = mapper.mapDepositAttachmentsToIncomingFiles(depositData);
+			var incomingFileMap = mapper.mapDepositAttachmentsToSortedIncomingFiles(depositData);
 
 			var keys = incomingFileMap.keySet().stream().toList();
 			assertThat(keys).containsExactly(XML_ATTACHMENT_ID, PDF_ATTACHMENT_ID);
diff --git a/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/FormDataEndpointITCase.java b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/FormDataEndpointITCase.java
index 524f388ca41061d7abcfe8b535d4f78853df2081..17c560fb68e7670a05e0dd8feb2102cbc15fd609 100644
--- a/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/FormDataEndpointITCase.java
+++ b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/FormDataEndpointITCase.java
@@ -142,16 +142,20 @@ class FormDataEndpointITCase {
 			return grpcEingangCaptor.getValue().getAntragsteller();
 		}
 
-		@DisplayName("should have one representation")
+		@DisplayName("should have representations")
 		@Test
-		void shouldHaveOneRepresentation() {
+		void shouldHaveRepresentations() {
 			sendDepositAndCaptureCreateVorgang();
 
 			var eingang = grpcEingangCaptor.getValue();
 			var representationVendorIds = eingang.getRepresentationsList().stream()
 					.map(GrpcIncomingFile::getVendorId)
 					.toList();
-			assertThat(representationVendorIds).containsExactly(XML_ATTACHMENT_ID);
+			assertThat(representationVendorIds).containsExactly(
+					XML_ATTACHMENT_ID,
+					XML_ROHFORM_ATTACHMENT_ID,
+					XML_ORIGINALFORM_ATTACHMENT_ID
+			);
 		}
 
 		@DisplayName("should have attachments")