diff --git a/common/src/test/java/de/ozgcloud/eingang/common/formdata/AntragstellerTestFactory.java b/common/src/test/java/de/ozgcloud/eingang/common/formdata/AntragstellerTestFactory.java
index 4418a4fc7c3c59a0ee27516a4ad6f536a77bf22a..acb3f7384ec445591ad3da3f63f43aef9d6659f1 100644
--- a/common/src/test/java/de/ozgcloud/eingang/common/formdata/AntragstellerTestFactory.java
+++ b/common/src/test/java/de/ozgcloud/eingang/common/formdata/AntragstellerTestFactory.java
@@ -38,6 +38,9 @@ public class AntragstellerTestFactory {
 	public static final String SUB_VERBOTENE_VEREINIGUNG_KEY = "MitgliedschaftInVerboternerVereinigung";
 	public static final String SUB_VERBOTENE_VEREINIGUNG_VALUE = "true";
 
+	public static final Map<String, Object> DATA = Map.of(GEBIET_BEZEICHNUNG_KEY, GEBIET_BEZEICHNUNG_VALUE,
+			SUB_PERSOENLICHE_EIGNUNG, Map.of(SUB_VERBOTENE_VEREINIGUNG_KEY, SUB_VERBOTENE_VEREINIGUNG_VALUE));
+
 	public static final String VORNAME = "Theo";
 	public static final String NACHNAME = "Test";
 	public static final String GEBURTSNAME = "Toast";
@@ -82,8 +85,6 @@ public class AntragstellerTestFactory {
 				.plz(PLZ)
 				.ort(ORT)
 				.postfachId(POSTFACH_ID)
-				.data(Map.of(GEBIET_BEZEICHNUNG_KEY, GEBIET_BEZEICHNUNG_VALUE,
-						SUB_PERSOENLICHE_EIGNUNG,
-						Map.of(SUB_VERBOTENE_VEREINIGUNG_KEY, SUB_VERBOTENE_VEREINIGUNG_VALUE)));
+				.data(DATA);
 	}
 }
diff --git a/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormDataTestFactory.java b/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormDataTestFactory.java
index 1c5ceaddf1b27323ff33316cb7328533eb904a96..94f756da0ce48a1286e5483afaec6928bb0ca43c 100644
--- a/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormDataTestFactory.java
+++ b/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormDataTestFactory.java
@@ -28,6 +28,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 
 import de.ozgcloud.eingang.common.formdata.FormData.FormDataControl;
 import lombok.AccessLevel;
@@ -36,6 +37,7 @@ import lombok.NoArgsConstructor;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class FormDataTestFactory {
 
+	public static final String ID = UUID.randomUUID().toString();
 	public static final String SIMPLE_VALUE_KEY = "kontaktsystemtypid";
 	public static final String SIMPLE_VALUE = "233034600";
 
@@ -54,12 +56,9 @@ public class FormDataTestFactory {
 	public static final Map<String, Object> NESTED_LIST_OBJECTS_ELEMENT_2 = Map.of("o3", "o4");
 	public static final List<Map<String, Object>> NESTED_LIST_WITH_OBJECTS = List.of(NESTED_LIST_OBJECTS_ELEMENT_1, NESTED_LIST_OBJECTS_ELEMENT_2);
 
-	public static final String ATTACHMENT_GROUP_2 = "FileGroup2";
-
 	public static final String VORGANG_ID = "vorgangId";
 
-	public static final List<IncomingFileGroup> ATTACHMENTS = List.of(IncomingFileGroupTestFactory.create(),
-			IncomingFileGroupTestFactory.createBuilder().name(ATTACHMENT_GROUP_2).build());
+	public static final List<IncomingFileGroup> ATTACHMENTS = List.of(IncomingFileGroupTestFactory.create());
 	public static final List<IncomingFile> REPRESENTATIONS = List.of(IncomingFileTestFactory.create());
 
 	public static final FormDataControl FORM_DATA_CONTROL = FormDataControlTestFactory.create();
@@ -76,17 +75,15 @@ public class FormDataTestFactory {
 
 	public static FormData.FormDataBuilder createBuilder() {
 		return FormData.builder()
+				.id(ID)
 				.header(FormHeaderTestFactory.create())
 				.antragsteller(AntragstellerTestFactory.create())
 				.zustaendigeStelle(ZustaendigeStelleTestFactory.create())
 				.control(FORM_DATA_CONTROL)
 				.formData(FORM_DATA)
-				// TODO nach entfernen des zweiten Attachments den Wert auf 1 setzen
-				.numberOfAttachments(2)
-				// TODO zweites Attachment aus der TestFactory entfernen und die entsprechenden
-				// Tests anpassen
+				.numberOfAttachments(ATTACHMENTS.size())
 				.attachments(ATTACHMENTS)
-				.numberOfRepresentations(1)
+				.numberOfRepresentations(REPRESENTATIONS.size())
 				.representations(REPRESENTATIONS);
 	}
 
diff --git a/common/src/test/java/de/ozgcloud/eingang/common/formdata/PostfachAddressTestFactory.java b/common/src/test/java/de/ozgcloud/eingang/common/formdata/PostfachAddressTestFactory.java
index 0e3e2a2816168331b48355740403339c9ffe72ec..a7d2fa3ceaa6c4dc68888be3ec6f5450135b22e4 100644
--- a/common/src/test/java/de/ozgcloud/eingang/common/formdata/PostfachAddressTestFactory.java
+++ b/common/src/test/java/de/ozgcloud/eingang/common/formdata/PostfachAddressTestFactory.java
@@ -25,11 +25,13 @@ package de.ozgcloud.eingang.common.formdata;
 
 import java.util.UUID;
 
+import org.apache.commons.lang3.RandomUtils;
+
 import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress;
 
 public class PostfachAddressTestFactory {
 
-	public static final int POSTFACH_ADDRESS_TYPE = 1;
+	public static final int POSTFACH_ADDRESS_TYPE = RandomUtils.insecure().randomInt();
 	public static final String VERSION = "1.0";
 	public static final String POSTFACH_ID = UUID.randomUUID().toString();
 
diff --git a/common/src/test/java/de/ozgcloud/eingang/common/formdata/ZustaendigeStelleTestFactory.java b/common/src/test/java/de/ozgcloud/eingang/common/formdata/ZustaendigeStelleTestFactory.java
index 5b14fe2d568bb8af1acdd96dbbf2972fac3aa101..34adca8f00a4b850f5b0907ded56566c58d34056 100644
--- a/common/src/test/java/de/ozgcloud/eingang/common/formdata/ZustaendigeStelleTestFactory.java
+++ b/common/src/test/java/de/ozgcloud/eingang/common/formdata/ZustaendigeStelleTestFactory.java
@@ -23,6 +23,8 @@
  */
 package de.ozgcloud.eingang.common.formdata;
 
+import com.thedeanda.lorem.LoremIpsum;
+
 public class ZustaendigeStelleTestFactory {
 
 	public static final String ORGANISATIONSEINHEIT_ID = "08150815";
@@ -33,6 +35,7 @@ public class ZustaendigeStelleTestFactory {
 	public static final String HAUSANSCHRIFT_PLZ = "12345";
 	public static final String HAUSANSCHRIFT_ORT = "Musterort";
 	public static final String TELEFON = "0123456789";
+	public static final String BEZEICHNUNG = LoremIpsum.getInstance().getWords(5);
 
 	public static ZustaendigeStelle create() {
 		return createBuilder().build();
@@ -42,6 +45,7 @@ public class ZustaendigeStelleTestFactory {
 		return ZustaendigeStelle.builder() //
 				.organisationseinheitenId(ORGANISATIONSEINHEIT_ID)
 				.email(EMAIL)
+				.bezeichnung(BEZEICHNUNG)
 				.gemeindeSchluessel(GEMEINDE_SCHLUESSEL)
 				.amtlicherRegionalSchluessel(AMTLICHER_REGIONAL_SCHLUESSEL)
 				.hausanschriftStrasse(HAUSANSCHRIFT_STRASSE)
diff --git a/router/src/main/java/de/ozgcloud/eingang/router/GrpcEingangMapper.java b/router/src/main/java/de/ozgcloud/eingang/router/GrpcEingangMapper.java
index eb5d7c414ef8361bfcc348e1f2544a563ce853a5..382c5975200356670f943920df8f6a191fcb8a3b 100644
--- a/router/src/main/java/de/ozgcloud/eingang/router/GrpcEingangMapper.java
+++ b/router/src/main/java/de/ozgcloud/eingang/router/GrpcEingangMapper.java
@@ -44,7 +44,6 @@ import de.ozgcloud.vorgang.vorgang.GrpcIncomingFileGroup;
 import de.ozgcloud.vorgang.vorgang.GrpcZustaendigeStelle;
 
 @Mapper(unmappedTargetPolicy = ReportingPolicy.WARN, //
-		unmappedSourcePolicy = ReportingPolicy.WARN, //
 		nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, //
 		nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, //
 		collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, //
@@ -59,8 +58,8 @@ public interface GrpcEingangMapper {
 
 	default ZustaendigeStelle getZustaendigeStelle(FormData formData, Optional<String> organisationsEinheitenId) {
 		return organisationsEinheitenId.flatMap(oeId -> formData.getZustaendigeStelles().stream()
-						.filter(zustaendigeStelle -> zustaendigeStelle.getOrganisationseinheitenId().equals(oeId))
-						.findFirst())
+				.filter(zustaendigeStelle -> zustaendigeStelle.getOrganisationseinheitenId().equals(oeId))
+				.findFirst())
 				.orElseGet(() -> ZustaendigeStelle.builder().build());
 	}
 
@@ -84,13 +83,16 @@ public interface GrpcEingangMapper {
 		return id.toString();
 	}
 
-	// FIXME map representations and attachments
 	@Mapping(target = "attachment", ignore = true)
-	@Mapping(target = "attachments", ignore = true)
 	@Mapping(target = "representation", ignore = true)
-	@Mapping(target = "representations", ignore = true)
-	// TOASK: Wird aktuell nicht gebraucht, trotzdem implementiern?
-	@Mapping(target = "header.serviceKonto", ignore = true)
+	@Mapping(target = "zustaendigeStelles", ignore = true)
+	@Mapping(target = "control", ignore = true)
+	@Mapping(target = "attachments", source = "attachmentsList")
+	@Mapping(target = "representations", source = "representationsList")
+	@Mapping(target = "antragsteller.data", source = "antragsteller.otherData")
 	FormData toFormData(GrpcEingang eingang);
 
+	@Mapping(target = "files", source = "filesList")
+	@Mapping(target = "file", ignore = true)
+	IncomingFileGroup mapFileGroupFromGrpc(GrpcIncomingFileGroup fileGroup);
 }
diff --git a/router/src/main/java/de/ozgcloud/eingang/router/ServiceKontoMapper.java b/router/src/main/java/de/ozgcloud/eingang/router/ServiceKontoMapper.java
index 7986140e79963d3d4183146800211926678fb748..85b8a16857fe3cda1c21ec411888572c6d1e4287 100644
--- a/router/src/main/java/de/ozgcloud/eingang/router/ServiceKontoMapper.java
+++ b/router/src/main/java/de/ozgcloud/eingang/router/ServiceKontoMapper.java
@@ -23,55 +23,67 @@
  */
 package de.ozgcloud.eingang.router;
 
-import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.mapstruct.CollectionMappingStrategy;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.Named;
+import org.mapstruct.NullValueCheckStrategy;
+import org.mapstruct.NullValuePropertyMappingStrategy;
+import org.mapstruct.ReportingPolicy;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
 
 import de.ozgcloud.eingang.common.formdata.PostfachAddressIdentifier;
 import de.ozgcloud.eingang.common.formdata.ServiceKonto;
 import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier;
-import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress;
 import de.ozgcloud.vorgang.common.GrpcObject;
 import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper;
-import de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress;
 import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto;
 
-@Component
-class ServiceKontoMapper {
+@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN, //
+		nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, //
+		nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, //
+		collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, //
+		uses = { GrpcObjectMapper.class })
+abstract class ServiceKontoMapper {
 
 	static final String DEFAULT_TRUST_LEVEL = "STORK-QAA-Level-1";
 
 	@Autowired
 	private GrpcObjectMapper grpcObjectMapper;
 
-	public GrpcServiceKonto toServiceKonto(ServiceKonto serviceKonto) {
-		return GrpcServiceKonto.newBuilder()
-				.setType(serviceKonto.getType())
-				.addAllPostfachAddresses(getPostfachAddresses(serviceKonto))
-				.setTrustLevel(Optional.ofNullable(serviceKonto.getTrustLevel()).orElse(DEFAULT_TRUST_LEVEL))
-				.build();
-	}
+	@Mapping(target = "postfachAddressesList", source = "postfachAddresses")
+	@Mapping(target = "trustLevel", source = "trustLevel", defaultValue = DEFAULT_TRUST_LEVEL)
+	abstract GrpcServiceKonto toGrpc(ServiceKonto serviceKonto);
 
-	private List<GrpcPostfachAddress> getPostfachAddresses(ServiceKonto serviceKonto) {
-		return serviceKonto.getPostfachAddresses().stream().map(this::fromPostfachAddress).toList();
+	GrpcObject mapFromIdentifier(PostfachAddressIdentifier identifier) {
+		return grpcObjectMapper.fromMap(Map.of(StringBasedIdentifier.POSTFACH_ID_FIELD,
+				getStringBasedValue(identifier)));
 	}
 
-	private GrpcPostfachAddress fromPostfachAddress(PostfachAddress postfachAddress) {
-		return GrpcPostfachAddress.newBuilder()
-				.setVersion(postfachAddress.getVersion())
-				.setType(postfachAddress.getType())
-				.setIdentifier(mapFromIdentifier(postfachAddress.getIdentifier()))
-				.build();
+	String getStringBasedValue(PostfachAddressIdentifier identifier) {
+		return ((StringBasedIdentifier) identifier).getPostfachId();
 	}
 
-	GrpcObject mapFromIdentifier(PostfachAddressIdentifier identifier) {
-		return grpcObjectMapper.fromMap(Map.of(StringBasedIdentifier.POSTFACH_ID_FIELD, getStringBasedValue(identifier)));
+	@Mapping(target = "postfachAddresses", source = "postfachAddressesList")
+	@Mapping(target = "trustLevel", source = "trustLevel", qualifiedByName = "mapTrustLevel")
+	@Mapping(target = "postfachAddress", ignore = true)
+	abstract ServiceKonto fromGrpc(GrpcServiceKonto serviceKonto);
+
+	PostfachAddressIdentifier mapToIdentifier(GrpcObject identifier) {
+		var stringIdentifier = MapUtils.getString(grpcObjectMapper.mapFromGrpc(identifier), StringBasedIdentifier.POSTFACH_ID_FIELD);
+		return StringBasedIdentifier.builder().postfachId(stringIdentifier).build();
 	}
 
-	private String getStringBasedValue(PostfachAddressIdentifier identifier) {
-		return ((StringBasedIdentifier) identifier).getPostfachId();
+	@Named("mapTrustLevel")
+	String mapTrustLevel(String trustLevel) {
+		if (StringUtils.isEmpty(trustLevel)) {
+			return DEFAULT_TRUST_LEVEL;
+		}
+		return trustLevel;
 	}
+
 }
\ No newline at end of file
diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcAntragstellerTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcAntragstellerTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..61893f6a7d44353cab89db99eaee1368c8c595ef
--- /dev/null
+++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcAntragstellerTestFactory.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2025 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.
+ */
+package de.ozgcloud.eingang.router;
+
+import de.ozgcloud.eingang.common.formdata.AntragstellerTestFactory;
+import de.ozgcloud.vorgang.vorgang.GrpcAntragsteller;
+import de.ozgcloud.vorgang.vorgang.GrpcFormData;
+import de.ozgcloud.vorgang.vorgang.GrpcFormField;
+import de.ozgcloud.vorgang.vorgang.GrpcSubForm;
+
+public class GrpcAntragstellerTestFactory {
+
+	public static final String ANREDE = AntragstellerTestFactory.ANREDE;
+	public static final String NACHNAME = AntragstellerTestFactory.NACHNAME;
+	public static final String VORNAME = AntragstellerTestFactory.VORNAME;
+	public static final String GEBURTSDATUM = AntragstellerTestFactory.GEBURTSDATUM;
+	public static final String GEBURTSORT = AntragstellerTestFactory.GEBURTSORT;
+	public static final String GEBURTSNAME = AntragstellerTestFactory.GEBURTSNAME;
+	public static final String EMAIL = AntragstellerTestFactory.EMAIL;
+	public static final String TELEFON = AntragstellerTestFactory.TELEFON;
+	public static final String STRASSE = AntragstellerTestFactory.STRASSE;
+	public static final String HAUSNUMMER = AntragstellerTestFactory.HAUSNUMMER;
+	public static final String PLZ = AntragstellerTestFactory.PLZ;
+	public static final String ORT = AntragstellerTestFactory.ORT;
+
+	public static final String POSTFACH_ID = AntragstellerTestFactory.POSTFACH_ID;
+	public static final GrpcFormData OTHER_DATA = GrpcFormData.newBuilder()
+			.addField(GrpcFormField.newBuilder()
+					.setName(AntragstellerTestFactory.GEBIET_BEZEICHNUNG_KEY)
+					.setValue(AntragstellerTestFactory.GEBIET_BEZEICHNUNG_VALUE).build())
+			.addForm(GrpcSubForm.newBuilder().setTitle(AntragstellerTestFactory.SUB_PERSOENLICHE_EIGNUNG)
+					.addField(GrpcFormField.newBuilder()
+							.setName(AntragstellerTestFactory.SUB_VERBOTENE_VEREINIGUNG_KEY)
+							.setValue(AntragstellerTestFactory.SUB_VERBOTENE_VEREINIGUNG_VALUE).build())
+					.build())
+			.build();
+
+	public static GrpcAntragsteller create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcAntragsteller.Builder createBuilder() {
+		return GrpcAntragsteller.newBuilder()
+				.setAnrede(ANREDE)
+				.setFirmaName(AntragstellerTestFactory.FIRMA_NAME)
+				.setGeburtsdatum(GEBURTSDATUM)
+				.setNachname(NACHNAME)
+				.setVorname(VORNAME)
+				.setGeburtsname(GEBURTSNAME)
+				.setGeburtsort(GEBURTSORT)
+				.setEmail(EMAIL)
+				.setTelefon(TELEFON)
+				.setStrasse(STRASSE)
+				.setHausnummer(HAUSNUMMER)
+				.setPlz(PLZ)
+				.setOrt(ORT)
+				.setPostfachId(POSTFACH_ID)
+				.setOtherData(OTHER_DATA);
+	}
+}
\ No newline at end of file
diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangHeaderTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangHeaderTestFactory.java
index e7fbc2a6de22ef4cd73d3719433326f517ac0e6a..1c2f14b48549cbf74fa2c97f2a1e2a5890dbde26 100644
--- a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangHeaderTestFactory.java
+++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangHeaderTestFactory.java
@@ -30,6 +30,8 @@ import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto;
 
 public class GrpcEingangHeaderTestFactory {
 
+	public static final GrpcServiceKonto SERVICE_KONTO = GrpcServiceKontoTestFactory.create();
+
 	public static GrpcEingangHeader create() {
 		return createBuilder().build();
 	}
@@ -42,7 +44,7 @@ public class GrpcEingangHeaderTestFactory {
 				.setFormEngineName(FORM_ENGINE_NAME)
 				.setFormName(FORM_NAME)
 				.setSender(SENDER)
-				.setServiceKonto(GrpcServiceKonto.newBuilder().build())
+				.setServiceKonto(SERVICE_KONTO)
 				.setVorgangNummer(VORGANG_NUMMER);
 	}
 }
diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java
index 15ee7c6b776beb4fb5a8ff3074b562b44fbf55fd..a262e8c7ace2c54106f613717d21d5f49258574e 100644
--- a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java
+++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java
@@ -40,12 +40,12 @@ import org.mockito.Mock;
 import de.ozgcloud.eingang.common.formdata.AntragstellerTestFactory;
 import de.ozgcloud.eingang.common.formdata.FormDataTestFactory;
 import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory;
+import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory;
 import de.ozgcloud.eingang.common.formdata.ZustaendigeStelleTestFactory;
 import de.ozgcloud.vorgang.common.grpc.GrpcFormDataMapper;
 import de.ozgcloud.vorgang.vorgang.GrpcAntragsteller;
 import de.ozgcloud.vorgang.vorgang.GrpcEingang;
 import de.ozgcloud.vorgang.vorgang.GrpcFormData;
-import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto;
 import de.ozgcloud.vorgang.vorgang.GrpcZustaendigeStelle;
 
 class GrpcEingangMapperTest {
@@ -109,7 +109,7 @@ class GrpcEingangMapperTest {
 		void mockMapperReturnValues() {
 			when(grpcFormDataMapper.mapToFormData(anyMap()))
 					.thenReturn(GrpcFormData.newBuilder().addField(GrpcFormFieldTestFactory.create()).build());
-			when(serviceKontoMapper.toServiceKonto(any())).thenReturn(GrpcServiceKonto.newBuilder().build());
+			when(serviceKontoMapper.toGrpc(any())).thenReturn(GrpcServiceKontoTestFactory.create());
 		}
 
 		@Nested
@@ -134,14 +134,14 @@ class GrpcEingangMapperTest {
 			void validateNumberOfAttachments() {
 				var eingang = toEingang();
 
-				assertThat(eingang.getNumberOfAttachments()).isEqualTo(2);
+				assertThat(eingang.getNumberOfAttachments()).isEqualTo(FormDataTestFactory.ATTACHMENTS.size());
 			}
 
 			@Test
 			void validateNumberOfAttachmentGroups() {
 				var eingang = toEingang();
 
-				assertThat(eingang.getAttachmentsCount()).isEqualTo(2);
+				assertThat(eingang.getAttachmentsCount()).isEqualTo(FormDataTestFactory.ATTACHMENTS.size());
 			}
 
 			@Test
@@ -162,25 +162,6 @@ class GrpcEingangMapperTest {
 				assertThat(attachment.getContentType()).isEqualTo(IncomingFileTestFactory.CONTENT_TYPE);
 				assertThat(attachment.getContent()).isEmpty();
 			}
-
-			@Test
-			void validateGroup2AttachmentCount() {
-				var eingang = toEingang();
-
-				assertThat(eingang.getAttachmentsList().get(1).getFilesCount()).isEqualTo(1);
-			}
-
-			@Test
-			void validateGroup2Attachment() {
-				var eingang = toEingang();
-
-				var attachment = eingang.getAttachmentsList().get(1).getFilesList().get(0);
-				assertThat(attachment.getId()).isEqualTo(IncomingFileTestFactory.ID);
-				assertThat(attachment.getVendorId()).isEqualTo(IncomingFileTestFactory.VENDOR_ID);
-				assertThat(attachment.getName()).isEqualTo(IncomingFileTestFactory.NAME);
-				assertThat(attachment.getContentType()).isEqualTo(IncomingFileTestFactory.CONTENT_TYPE);
-				assertThat(attachment.getContent()).isEmpty();
-			}
 		}
 
 		@Nested
@@ -217,4 +198,87 @@ class GrpcEingangMapperTest {
 			return mapper.toEingang(FormDataTestFactory.create(), Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID));
 		}
 	}
+
+	@Nested
+	class TestToFormData {
+
+		private final GrpcEingang eingang = GrpcEingangTestFactory.create();
+
+		@BeforeEach
+		void mock() {
+			when(serviceKontoMapper.fromGrpc(any())).thenReturn(ServiceKontoTestFactory.create());
+			when(grpcFormDataMapper.mapFromFormData(GrpcAntragstellerTestFactory.OTHER_DATA)).thenReturn(AntragstellerTestFactory.DATA);
+			when(grpcFormDataMapper.mapFromFormData(GrpcEingangTestFactory.FORM_DATA)).thenReturn(FormDataTestFactory.FORM_DATA);
+		}
+
+		@Test
+		void shouldCallServiceKontoMapper() {
+			mapper.toFormData(eingang);
+
+			verify(serviceKontoMapper).fromGrpc(GrpcEingangHeaderTestFactory.SERVICE_KONTO);
+		}
+
+		@Test
+		void shouldCallFormDataMapperWithAntragstellerData() {
+			mapper.toFormData(eingang);
+
+			verify(grpcFormDataMapper).mapFromFormData(GrpcAntragstellerTestFactory.OTHER_DATA);
+		}
+
+		@Test
+		void shouldCallFormDataMapperWithFormData() {
+			mapper.toFormData(eingang);
+
+			verify(grpcFormDataMapper).mapFromFormData(GrpcEingangTestFactory.FORM_DATA);
+		}
+
+		@Test
+		void shouldMapToFormData() {
+			var expectedFormData = FormDataTestFactory.createBuilder()
+					.numberOfAttachments(GrpcEingangTestFactory.NUMBER_OF_ATTACHMENTS)
+					.numberOfRepresentations(GrpcEingangTestFactory.NUMBER_OF_REPRESENTATIONS)
+					.build();
+
+			var formData = mapper.toFormData(eingang);
+
+			assertThat(formData).usingRecursiveComparison()
+					.ignoringFields("antragsteller.firmaName", "control", "attachments", "representations", "zustaendigeStelles")
+					.isEqualTo(expectedFormData);
+		}
+
+		@Nested
+		class TestZustaendigestelles {
+
+			@Test
+			void shouldMapZustaendigeStelles() {
+				var zustaendigeStelles = mapper.toFormData(eingang).getZustaendigeStelles();
+
+				assertThat(zustaendigeStelles).usingRecursiveFieldByFieldElementComparator().containsExactly(ZustaendigeStelleTestFactory.create());
+			}
+		}
+
+		@Nested
+		class TestAttachments {
+
+			@Test
+			void shouldMapAttachments() {
+				var attachments = mapper.toFormData(eingang).getAttachments();
+
+				assertThat(attachments).usingRecursiveFieldByFieldElementComparatorIgnoringFields("files.file")
+						.containsExactly(FormDataTestFactory.ATTACHMENTS.get(0));
+			}
+		}
+
+		@Nested
+		class TestRepresentations {
+
+			@Test
+			void shouldMapRepresentations() {
+				var representations = mapper.toFormData(eingang).getRepresentations();
+
+				assertThat(representations).usingRecursiveFieldByFieldElementComparatorIgnoringFields("file")
+						.containsExactly(FormDataTestFactory.REPRESENTATIONS.get(0));
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..8e15b541a6356f7faa757387391f11ac4c5f42a2
--- /dev/null
+++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangTestFactory.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2025 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.
+ */
+package de.ozgcloud.eingang.router;
+
+import de.ozgcloud.eingang.common.formdata.FormDataTestFactory;
+import de.ozgcloud.vorgang.common.grpc.GrpcFormDataTestFactory;
+import de.ozgcloud.vorgang.common.grpc.GrpcSubFormTestFactory;
+import de.ozgcloud.vorgang.vorgang.GrpcEingang;
+import de.ozgcloud.vorgang.vorgang.GrpcFormData;
+import de.ozgcloud.vorgang.vorgang.GrpcSubForm;
+
+public class GrpcEingangTestFactory {
+
+	public static final GrpcFormData FORM_DATA = GrpcFormDataTestFactory.create();
+	public static final int NUMBER_OF_REPRESENTATIONS = 5;
+	public static final int NUMBER_OF_ATTACHMENTS = 4;
+	public static final String ID = FormDataTestFactory.ID;
+	public static final GrpcSubForm SUB_FORM = GrpcSubFormTestFactory.create();
+
+	public static GrpcEingang create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcEingang.Builder createBuilder() {
+		return GrpcEingang.newBuilder()
+				.setId(ID)
+				.setHeader(GrpcEingangHeaderTestFactory.create())
+				.setAntragsteller(GrpcAntragstellerTestFactory.create())
+				.setZustaendigeStelle(GrpcZustaendigeStelleTestFactory.create())
+				.setFormData(FORM_DATA)
+				.addAttachments(GrpcIncomingFileGroupTestFactory.create())
+				.setNumberOfAttachments(NUMBER_OF_ATTACHMENTS)
+				.addRepresentations(GrpcIncomingFileTestFactory.create())
+				.setNumberOfRepresentations(NUMBER_OF_REPRESENTATIONS);
+	}
+}
\ No newline at end of file
diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcIncomingFileGroupTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcIncomingFileGroupTestFactory.java
index 8ffea979664c5c311d1130f87208667986df15e9..e8082ab9164a882cbcd9e7c2546424699925addc 100644
--- a/router/src/test/java/de/ozgcloud/eingang/router/GrpcIncomingFileGroupTestFactory.java
+++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcIncomingFileGroupTestFactory.java
@@ -23,12 +23,13 @@
  */
 package de.ozgcloud.eingang.router;
 
+import de.ozgcloud.eingang.common.formdata.IncomingFileGroupTestFactory;
 import de.ozgcloud.vorgang.vorgang.GrpcIncomingFile;
 import de.ozgcloud.vorgang.vorgang.GrpcIncomingFileGroup;
 
 public class GrpcIncomingFileGroupTestFactory {
 
-	public static final String NAME = "FileGroup1";
+	public static final String NAME = IncomingFileGroupTestFactory.NAME;
 	public static final GrpcIncomingFile FILE = GrpcIncomingFileTestFactory.create();
 
 	public static GrpcIncomingFileGroup create() {
diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcIncomingFileTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcIncomingFileTestFactory.java
index dc5899c75627723337f54ec388396f35d9fa9abe..f72d588d6a437fa106b73f166c667bc6c76b75a7 100644
--- a/router/src/test/java/de/ozgcloud/eingang/router/GrpcIncomingFileTestFactory.java
+++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcIncomingFileTestFactory.java
@@ -30,7 +30,7 @@ import de.ozgcloud.vorgang.vorgang.GrpcIncomingFile;
 
 public class GrpcIncomingFileTestFactory {
 
-	public static final String ID = IncomingFileTestFactory.ID.toString();
+	public static final String ID = IncomingFileTestFactory.ID;
 	public static final String VENDOR_ID = IncomingFileTestFactory.VENDOR_ID;
 	public static final String NAME = IncomingFileTestFactory.NAME;
 	public static final String CONTENT_TYPE = IncomingFileTestFactory.CONTENT_TYPE;
diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcPostfachAddressTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcPostfachAddressTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..f8ba6cd4b2f7bdff2b15ded3ff3455028f2a2cdb
--- /dev/null
+++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcPostfachAddressTestFactory.java
@@ -0,0 +1,33 @@
+package de.ozgcloud.eingang.router;
+
+import de.ozgcloud.eingang.common.formdata.PostfachAddressTestFactory;
+import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier;
+import de.ozgcloud.vorgang.common.GrpcObject;
+import de.ozgcloud.vorgang.common.GrpcProperty;
+import de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress;
+import de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress.Builder;
+
+public class GrpcPostfachAddressTestFactory {
+
+	public static final String VERSION = PostfachAddressTestFactory.VERSION;
+	public static final int TYPE = PostfachAddressTestFactory.POSTFACH_ADDRESS_TYPE;
+	public static final GrpcProperty IDENTIFIER_PROPERTY = GrpcProperty.newBuilder()
+			.setName(StringBasedIdentifier.POSTFACH_ID_FIELD)
+			.addValue(PostfachAddressTestFactory.POSTFACH_ID)
+			.build();
+	public static final GrpcObject IDENTIFIER = GrpcObject.newBuilder()
+			.addProperty(IDENTIFIER_PROPERTY)
+			.build();
+
+	public static GrpcPostfachAddress create() {
+		return createBuilder().build();
+	}
+
+	private static Builder createBuilder() {
+		return GrpcPostfachAddress.newBuilder()
+				.setVersion(VERSION)
+				.setType(TYPE)
+				.setIdentifier(IDENTIFIER);
+	}
+
+}
diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcServiceKontoTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcServiceKontoTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..1995e8123c2911f28d0960144feddb75d3794621
--- /dev/null
+++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcServiceKontoTestFactory.java
@@ -0,0 +1,25 @@
+package de.ozgcloud.eingang.router;
+
+import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory;
+import de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress;
+import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto;
+import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto.Builder;
+
+public class GrpcServiceKontoTestFactory {
+
+	public static final GrpcPostfachAddress POSTFACH_ADDRESS = GrpcPostfachAddressTestFactory.create();
+	public static final String TRUST_LEVEL = ServiceKontoTestFactory.TRUST_LEVEL;
+	public static final String TYPE = ServiceKontoTestFactory.TYPE;
+
+	public static GrpcServiceKonto create() {
+		return createBuilder().build();
+	}
+
+	public static Builder createBuilder() {
+		return GrpcServiceKonto.newBuilder()
+				.setType(TYPE)
+				.setTrustLevel(TRUST_LEVEL)
+				.addPostfachAddresses(POSTFACH_ADDRESS);
+	}
+
+}
diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcZustaendigeStelleTestFactory.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcZustaendigeStelleTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..d964038376c73c7a20233b5d264227d31beffc89
--- /dev/null
+++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcZustaendigeStelleTestFactory.java
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ */
+package de.ozgcloud.eingang.router;
+
+import de.ozgcloud.eingang.common.formdata.ZustaendigeStelleTestFactory;
+import de.ozgcloud.vorgang.vorgang.GrpcZustaendigeStelle;
+
+public class GrpcZustaendigeStelleTestFactory {
+
+	public static final String ORGANISATIONSEINHEIT_ID = ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID;
+	public static final String EMAIL = ZustaendigeStelleTestFactory.EMAIL;
+	public static final String GEMEINDE_SCHLUESSEL = ZustaendigeStelleTestFactory.GEMEINDE_SCHLUESSEL;
+	public static final String AMTLICHER_REGIONAL_SCHLUESSEL = ZustaendigeStelleTestFactory.AMTLICHER_REGIONAL_SCHLUESSEL;
+	public static final String HAUSANSCHRIFT_STRASSE = ZustaendigeStelleTestFactory.HAUSANSCHRIFT_STRASSE;
+	public static final String HAUSANSCHRIFT_PLZ = ZustaendigeStelleTestFactory.HAUSANSCHRIFT_PLZ;
+	public static final String HAUSANSCHRIFT_ORT = ZustaendigeStelleTestFactory.HAUSANSCHRIFT_ORT;
+	public static final String TELEFON = ZustaendigeStelleTestFactory.TELEFON;
+	public static final String BEZEICHNUNG = ZustaendigeStelleTestFactory.BEZEICHNUNG;
+
+	public static GrpcZustaendigeStelle create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcZustaendigeStelle.Builder createBuilder() {
+		return GrpcZustaendigeStelle.newBuilder()
+				.setOrganisationseinheitenId(ORGANISATIONSEINHEIT_ID)
+				.setEmail(EMAIL)
+				.setBezeichnung(BEZEICHNUNG)
+				.setGemeindeSchluessel(GEMEINDE_SCHLUESSEL)
+				.setAmtlicherRegionalSchluessel(AMTLICHER_REGIONAL_SCHLUESSEL)
+				.setHausanschriftStrasse(HAUSANSCHRIFT_STRASSE)
+				.setHausanschriftPlz(HAUSANSCHRIFT_PLZ)
+				.setHausanschriftOrt(HAUSANSCHRIFT_ORT)
+				.setTelefon(TELEFON);
+	}
+}
\ No newline at end of file
diff --git a/router/src/test/java/de/ozgcloud/eingang/router/ServiceKontoMapperTest.java b/router/src/test/java/de/ozgcloud/eingang/router/ServiceKontoMapperTest.java
index 34cc0776f020dcf4d9d1a578b8b587d2d2b3c42c..f6389906f7b4f1dc95fd744ba75c341faba0d82a 100644
--- a/router/src/test/java/de/ozgcloud/eingang/router/ServiceKontoMapperTest.java
+++ b/router/src/test/java/de/ozgcloud/eingang/router/ServiceKontoMapperTest.java
@@ -27,10 +27,14 @@ import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
+import org.mapstruct.factory.Mappers;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 
@@ -45,13 +49,12 @@ import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto;
 class ServiceKontoMapperTest {
 
 	@InjectMocks
-	private ServiceKontoMapper mapper;
+	private final ServiceKontoMapper mapper = Mappers.getMapper(ServiceKontoMapper.class);
 	@Mock
 	private GrpcObjectMapper grpcObjectMapper;
 
 	@Nested
-	@DisplayName("To servicekonto")
-	class TestMapServiceKonto {
+	class TestToGrpc {
 
 		private final GrpcProperty grpcProperty = GrpcProperty.newBuilder()
 				.setName(StringBasedIdentifier.POSTFACH_ID_FIELD)
@@ -89,7 +92,7 @@ class ServiceKontoMapperTest {
 
 		@Test
 		void shouldContainsDefaultTrustLevel() {
-			var serviceKonto = mapper.toServiceKonto(ServiceKontoTestFactory.createBuilder().trustLevel(null).build());
+			var serviceKonto = mapper.toGrpc(ServiceKontoTestFactory.createBuilder().trustLevel(null).build());
 
 			assertThat(serviceKonto.getTrustLevel()).isEqualTo(ServiceKontoMapper.DEFAULT_TRUST_LEVEL);
 		}
@@ -139,7 +142,38 @@ class ServiceKontoMapperTest {
 		}
 
 		private GrpcServiceKonto getServiceKontoFromMappedEingang() {
-			return mapper.toServiceKonto(ServiceKontoTestFactory.create());
+			return mapper.toGrpc(ServiceKontoTestFactory.create());
+		}
+	}
+
+	@Nested
+	class TestFromGrpc {
+
+		@BeforeEach
+		void mockGrpcObjectMapper() {
+			when(grpcObjectMapper.mapFromGrpc(any()))
+					.thenReturn(Map.of(StringBasedIdentifier.POSTFACH_ID_FIELD, PostfachAddressTestFactory.POSTFACH_ID));
+		}
+
+		@Test
+		void shouldCallGrpcMapper() {
+			mapper.fromGrpc(GrpcServiceKontoTestFactory.create());
+
+			verify(grpcObjectMapper).mapFromGrpc(GrpcPostfachAddressTestFactory.IDENTIFIER);
+		}
+
+		@Test
+		void shouldMapToGrpc() {
+			var serviceKonto = mapper.fromGrpc(GrpcServiceKontoTestFactory.create());
+
+			assertThat(serviceKonto).usingRecursiveComparison().isEqualTo(ServiceKontoTestFactory.create());
+		}
+
+		@Test
+		void shouldSetDefaultTrustLevel() {
+			var serviceKonto = mapper.fromGrpc(GrpcServiceKontoTestFactory.createBuilder().setTrustLevel(StringUtils.EMPTY).build());
+
+			assertThat(serviceKonto.getTrustLevel()).isEqualTo(ServiceKontoMapper.DEFAULT_TRUST_LEVEL);
 		}
 	}
 }
\ No newline at end of file