diff --git a/goofy-server/pom.xml b/goofy-server/pom.xml
index d253cdbe8a37e82238e1e250e04b9e67de543aa6..a7842ff9ed4cf22b68878f7815e1bd881fd5ea5c 100644
--- a/goofy-server/pom.xml
+++ b/goofy-server/pom.xml
@@ -137,6 +137,13 @@
 			<artifactId>spring-security-test</artifactId>
 			<scope>test</scope>
 		</dependency>
+		<dependency>
+			<groupId>de.itvsh.ozg.pluto</groupId>
+			<artifactId>pluto-utils</artifactId>
+			<type>test-jar</type>
+			<scope>test</scope>
+			<version>${pluto.version}</version>
+		</dependency>
 
 		<dependency>
 			<groupId>com.thedeanda</groupId>
diff --git a/goofy-server/src/main/java/de/itvsh/goofy/common/errorhandling/ExceptionController.java b/goofy-server/src/main/java/de/itvsh/goofy/common/errorhandling/ExceptionController.java
index da124a4d08d4d35fc37f223d149ab30f8ff3f11f..f961d9559de516b9ebb62f585a5388250a8b3ee6 100644
--- a/goofy-server/src/main/java/de/itvsh/goofy/common/errorhandling/ExceptionController.java
+++ b/goofy-server/src/main/java/de/itvsh/goofy/common/errorhandling/ExceptionController.java
@@ -136,8 +136,8 @@ public class ExceptionController {
 	}
 
 	private Optional<DynamicViolationParameter> getDynamicPayload(ConstraintViolation<?> violation) {
-		var hibernateViolation = violation.unwrap(HibernateConstraintViolation.class);
-		return Optional.ofNullable((DynamicViolationParameter) hibernateViolation.getDynamicPayload(DynamicViolationParameter.class));
+		HibernateConstraintViolation<?> hibernateViolation = violation.unwrap(HibernateConstraintViolation.class);
+		return Optional.ofNullable(hibernateViolation.getDynamicPayload(DynamicViolationParameter.class));
 	}
 
 	@ExceptionHandler(TechnicalException.class)
diff --git a/goofy-server/src/main/java/de/itvsh/goofy/vorgang/AntragstellerMapper.java b/goofy-server/src/main/java/de/itvsh/goofy/vorgang/AntragstellerMapper.java
index f9c2fcce3639def1c4c9ef973e20af9b2065de4a..ffb2d4a3dad6fbbd1542ec9c64438ac05296eeab 100644
--- a/goofy-server/src/main/java/de/itvsh/goofy/vorgang/AntragstellerMapper.java
+++ b/goofy-server/src/main/java/de/itvsh/goofy/vorgang/AntragstellerMapper.java
@@ -4,6 +4,7 @@ import org.mapstruct.Mapper;
 import org.mapstruct.NullValueCheckStrategy;
 import org.mapstruct.NullValuePropertyMappingStrategy;
 
+import de.itvsh.kop.pluto.common.grpc.GrpcFormDataMapper;
 import de.itvsh.ozg.pluto.vorgang.GrpcAntragsteller;
 
 @Mapper(uses = { GrpcFormDataMapper.class }, //
diff --git a/goofy-server/src/main/java/de/itvsh/goofy/vorgang/EingangMapper.java b/goofy-server/src/main/java/de/itvsh/goofy/vorgang/EingangMapper.java
index 2e0bcf3aab26c18e26fafcc477e3e6ce5f08c31a..f2e1c169e1c26668128d402135696cef18d21cb1 100644
--- a/goofy-server/src/main/java/de/itvsh/goofy/vorgang/EingangMapper.java
+++ b/goofy-server/src/main/java/de/itvsh/goofy/vorgang/EingangMapper.java
@@ -1,113 +1,18 @@
 package de.itvsh.goofy.vorgang;
 
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Objects;
-
-import org.apache.commons.lang3.tuple.Pair;
 import org.mapstruct.CollectionMappingStrategy;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
 
+import de.itvsh.kop.pluto.common.grpc.GrpcFormDataMapper;
 import de.itvsh.ozg.pluto.vorgang.GrpcEingang;
-import de.itvsh.ozg.pluto.vorgang.GrpcFormData;
-import de.itvsh.ozg.pluto.vorgang.GrpcFormField;
-import de.itvsh.ozg.pluto.vorgang.GrpcSubForm;
 
 @Mapper(uses = { AntragstellerMapper.class,
-		EingangHeaderMapper.class, ZustaendigeStelleMapper.class }, collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED)
+		EingangHeaderMapper.class, ZustaendigeStelleMapper.class,
+		GrpcFormDataMapper.class }, collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED)
 interface EingangMapper {
 
 	@Mapping(source = "formData", target = "formData")
 	Eingang fromGrpc(GrpcEingang eingang);
 
-	default Map<String, Object> mapFormData(GrpcFormData formData) {
-		Map<String, Object> result = new HashMap<>();
-		result.putAll(mapSubFormFields(formData.getFieldList()));
-		result.putAll(mapFormData(formData.getFormList()));
-		return result;
-	}
-
-	default Map<String, Object> mapFormData(List<GrpcSubForm> subForms) {
-		return subForms.stream().map(subForm -> Pair.of(subForm.getTitle(), mapSubForm(subForm)))
-				.collect(HashMap<String, Object>::new, this::pairAccumulator, this::combiner);
-	}
-
-	private Map<String, Object> pairAccumulator(Map<String, Object> map, Pair<String, Map<String, Object>> pair) {
-		return addToMap(map, pair.getLeft(), pair.getRight());
-	}
-
-	default Map<String, Object> mapSubForm(GrpcSubForm subForm) {
-		Map<String, Object> result = new HashMap<>();
-		result.putAll(mapSubFormFields(subForm.getFieldList()));
-		result.putAll(mapFormData(subForm.getSubFormList()));
-		return result;
-	}
-
-	default Map<String, Object> mapSubFormFields(List<GrpcFormField> fields) {
-		return fields.stream().collect(HashMap<String, Object>::new, this::accumulator, this::combiner);
-	}
-
-	private Map<String, Object> accumulator(Map<String, Object> map, GrpcFormField field) {
-		return addToMap(map, field.getName(), field.getValue());
-	}
-
-	default Map<String, Object> combiner(Map<String, Object> map1, Map<String, Object> map2) {
-		for (Entry<String, Object> entry : map2.entrySet()) {
-			addToMap(map1, entry.getKey(), entry.getValue());
-		}
-
-		return map1;
-	}
-
-	@SuppressWarnings("unchecked")
-	private Map<String, Object> addToMap(Map<String, Object> map, String name, Object value) {
-		var valueInMap = map.get(name);
-		if (Objects.isNull(valueInMap)) {
-			map.put(name, value);
-		} else {
-			if (value instanceof Collection) {
-				addCollectionValue(map, name, (Collection<Object>) value);
-			} else {
-				addNonCollectionValue(map, name, value);
-			}
-		}
-
-		return map;
-	}
-
-	@SuppressWarnings("unchecked")
-	private Map<String, Object> addCollectionValue(Map<String, Object> map, String name, Collection<Object> value) {
-		var valueInMap = map.get(name);
-
-		var newList = new LinkedList<Object>();
-		if (valueInMap instanceof Collection) {
-			newList.addAll((Collection<? extends Object>) valueInMap);
-			newList.addAll(value);
-		} else {
-			newList.add(valueInMap);
-			newList.addAll(value);
-		}
-		map.put(name, newList);
-		return map;
-	}
-
-	@SuppressWarnings("unchecked")
-	private Map<String, Object> addNonCollectionValue(Map<String, Object> map, String name, Object value) {
-		var valueInMap = map.get(name);
-
-		if (valueInMap instanceof Collection) {
-			var newList = new LinkedList<>((Collection<Object>) valueInMap);
-			newList.add(value);
-			map.put(name, newList);
-		} else {
-			map.put(name, new LinkedList<>(List.of(valueInMap, value)));
-		}
-
-		return map;
-	}
 }
diff --git a/goofy-server/src/main/java/de/itvsh/goofy/vorgang/GrpcFormDataMapper.java b/goofy-server/src/main/java/de/itvsh/goofy/vorgang/GrpcFormDataMapper.java
deleted file mode 100644
index 16082e3c29ccb56105bc0ea4ac2e7b5eb492e0a6..0000000000000000000000000000000000000000
--- a/goofy-server/src/main/java/de/itvsh/goofy/vorgang/GrpcFormDataMapper.java
+++ /dev/null
@@ -1,183 +0,0 @@
-package de.itvsh.goofy.vorgang;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-import org.apache.commons.lang3.tuple.Pair;
-import org.mapstruct.CollectionMappingStrategy;
-import org.mapstruct.Mapper;
-import org.mapstruct.NullValueCheckStrategy;
-import org.mapstruct.NullValuePropertyMappingStrategy;
-import org.mapstruct.ReportingPolicy;
-
-import de.itvsh.ozg.pluto.vorgang.GrpcFormData;
-import de.itvsh.ozg.pluto.vorgang.GrpcFormField;
-import de.itvsh.ozg.pluto.vorgang.GrpcSubForm;
-
-@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN, //
-		unmappedSourcePolicy = ReportingPolicy.WARN, //
-		nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, //
-		nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, //
-		collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED)
-interface GrpcFormDataMapper {
-
-	default GrpcFormData mapToFormData(Map<String, Object> formData) {
-		return GrpcFormData.newBuilder()
-				.addAllField(mapToAllFields(formData))
-				.addAllForm(mapToSubForms(formData))
-				.addAllField(mapStringListsToFields(formData))
-				.addAllForm(mapObjectListsToFields(formData)).build();
-	}
-
-	default List<GrpcFormField> mapToAllFields(Map<String, Object> formData) {
-		return formData.entrySet().stream().filter(entry -> entry.getValue() instanceof String)//
-				.map(entry -> mapToField(entry.getKey(), entry.getValue().toString()))//
-				.collect(Collectors.toList());
-	}
-
-	default List<GrpcFormField> mapStringListsToFields(Map<String, Object> formData) {
-		return formData.entrySet().stream()
-				.filter(entry -> entry.getValue() instanceof List)
-				.map(this::mapListStringElementsToFormFields)
-				.flatMap(List::stream)
-				.collect(Collectors.toList());
-	}
-
-	@SuppressWarnings("unchecked")
-	private List<GrpcFormField> mapListStringElementsToFormFields(Entry<String, Object> entry) {
-		return ((List<Object>) entry.getValue()).stream()
-				.filter(String.class::isInstance)
-				.map(String.class::cast)
-				.map(e -> mapToField(entry.getKey(), e))
-				.collect(Collectors.toList());
-	}
-
-	default List<GrpcSubForm> mapObjectListsToFields(Map<String, Object> formData) {
-		return formData.entrySet().stream()
-				.filter(entry -> entry.getValue() instanceof List)
-				.map(this::mapListObjectElementsToFormFields)
-				.flatMap(List::stream)
-				.collect(Collectors.toList());
-	}
-
-	@SuppressWarnings("unchecked")
-	private List<GrpcSubForm> mapListObjectElementsToFormFields(Entry<String, Object> entry) {
-		return ((List<Object>) entry.getValue()).stream()
-				.filter(Map.class::isInstance)
-				.map(Map.class::cast)
-				.map(e -> buildSubForm(entry.getKey(), e))
-				.collect(Collectors.toList());
-	}
-
-	@SuppressWarnings("unchecked")
-	default List<GrpcSubForm> mapToSubForms(Map<String, Object> formData) {
-		return formData.entrySet().stream()
-				.filter(entry -> entry.getValue() instanceof Map)
-				.map(entry -> buildSubForm(entry.getKey(), (Map<String, Object>) entry.getValue()))
-				.collect(Collectors.toList());
-	}
-
-	default GrpcSubForm buildSubForm(String name, Map<String, Object> map) {
-		return GrpcSubForm.newBuilder().setTitle(name)
-				.addAllField(mapToAllFields(map))
-				.addAllSubForm(mapToSubForms(map))
-				.addAllField(mapStringListsToFields(map))
-				.addAllSubForm(mapObjectListsToFields(map)).build();
-	}
-
-	default GrpcFormField mapToField(String name, String value) {
-		return GrpcFormField.newBuilder().setName(name).setValue(value).build();
-	}
-
-	default Map<String, Object> mapFromFormData(GrpcFormData formData) {
-		Map<String, Object> result = new HashMap<>();
-		result.putAll(mapSubFormFields(formData.getFieldList()));
-		result.putAll(mapFormData(formData.getFormList()));
-		return result;
-	}
-
-	default Map<String, Object> mapFormData(List<GrpcSubForm> subForms) {
-		return subForms.stream().map(subForm -> Pair.of(subForm.getTitle(), mapSubForm(subForm)))
-				.collect(HashMap<String, Object>::new, this::pairAccumulator, this::combiner);
-	}
-
-	private Map<String, Object> pairAccumulator(Map<String, Object> map, Pair<String, Map<String, Object>> pair) {
-		return addToMap(map, pair.getLeft(), pair.getRight());
-	}
-
-	default Map<String, Object> mapSubForm(GrpcSubForm subForm) {
-		Map<String, Object> result = new HashMap<>();
-		result.putAll(mapSubFormFields(subForm.getFieldList()));
-		result.putAll(mapFormData(subForm.getSubFormList()));
-		return result;
-	}
-
-	default Map<String, Object> mapSubFormFields(List<GrpcFormField> fields) {
-		return fields.stream().collect(HashMap<String, Object>::new, this::accumulator, this::combiner);
-	}
-
-	private Map<String, Object> accumulator(Map<String, Object> map, GrpcFormField field) {
-		return addToMap(map, field.getName(), field.getValue());
-	}
-
-	default Map<String, Object> combiner(Map<String, Object> map1, Map<String, Object> map2) {
-		for (Entry<String, Object> entry : map2.entrySet()) {
-			addToMap(map1, entry.getKey(), entry.getValue());
-		}
-
-		return map1;
-	}
-
-	@SuppressWarnings("unchecked")
-	private Map<String, Object> addToMap(Map<String, Object> map, String name, Object value) {
-		var valueInMap = map.get(name);
-		if (Objects.isNull(valueInMap)) {
-			map.put(name, value);
-		} else {
-			if (value instanceof Collection) {
-				addCollectionValue(map, name, (Collection<Object>) value);
-			} else {
-				addNonCollectionValue(map, name, value);
-			}
-		}
-
-		return map;
-	}
-
-	@SuppressWarnings("unchecked")
-	private Map<String, Object> addCollectionValue(Map<String, Object> map, String name, Collection<Object> value) {
-		var valueInMap = map.get(name);
-
-		var newList = new LinkedList<Object>();
-		if (valueInMap instanceof Collection) {
-			newList.addAll((Collection<? extends Object>) valueInMap);
-			newList.addAll(value);
-		} else {
-			newList.add(valueInMap);
-			newList.addAll(value);
-		}
-		map.put(name, newList);
-		return map;
-	}
-
-	@SuppressWarnings("unchecked")
-	private Map<String, Object> addNonCollectionValue(Map<String, Object> map, String name, Object value) {
-		var valueInMap = map.get(name);
-
-		if (valueInMap instanceof Collection) {
-			var newList = new LinkedList<>((Collection<Object>) valueInMap);
-			newList.add(value);
-			map.put(name, newList);
-		} else {
-			map.put(name, new LinkedList<>(List.of(valueInMap, value)));
-		}
-
-		return map;
-	}
-}
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandBodyMapperTest.java b/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandBodyMapperTest.java
index 9b45b69a4d0dca4b81f831e3912a029508d20dd4..89c4004a925bfbe95f29bce96367f38fb174c470 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandBodyMapperTest.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/common/command/CommandBodyMapperTest.java
@@ -202,6 +202,7 @@ class CommandBodyMapperTest {
 					assertThat(mappedItemMap).contains(attachmentsEntry);
 				}
 
+				@SuppressWarnings("unchecked")
 				private Map<String, Object> getMappedItemEntry() {
 					return (Map<String, Object>) mapToBodyMap().get(CommandBodyMapper.ITEM_PROPERTY);
 				}
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/common/errorhandling/ExceptionTestFactory.java b/goofy-server/src/test/java/de/itvsh/goofy/common/errorhandling/ExceptionTestFactory.java
index c9edc8e51cc342c12dc863579db74da7f36fc0f0..2df1fb5fa6e6421d349e0bc9342552b6e87fcf04 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/common/errorhandling/ExceptionTestFactory.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/common/errorhandling/ExceptionTestFactory.java
@@ -33,10 +33,12 @@ public class ExceptionTestFactory {
 		return ExceptionTestFactory.buildMockedConstraintViolationWithDynamicPayload(null);
 	}
 
-	public static ConstraintViolation<?> buildMockedConstraintViolationWithDynamicPayload(DynamicViolationParameter dynamicViolationParameter) {
-		var violation = mock(ConstraintViolation.class);
-		var hibernateViolation = mock(HibernateConstraintViolation.class);
-		var constraintDescriptor = mock(ConstraintDescriptor.class);
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public static <T> ConstraintViolation<T> buildMockedConstraintViolationWithDynamicPayload(DynamicViolationParameter dynamicViolationParameter) {
+		ConstraintViolation violation = mock(ConstraintViolation.class);
+		HibernateConstraintViolation hibernateViolation = mock(HibernateConstraintViolation.class);
+		ConstraintDescriptor constraintDescriptor = mock(ConstraintDescriptor.class);
+
 		var path = mock(Path.class);
 		when(path.toString()).thenReturn(PATH);
 		when(violation.getPropertyPath()).thenReturn(path);
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/vorgang/AntragstellerMapperTest.java b/goofy-server/src/test/java/de/itvsh/goofy/vorgang/AntragstellerMapperTest.java
index 1610237f884055bd2ec283f071d14ee58ab026d8..b27a1632c0ebb14879b2093c7f6cd1e9c8789c76 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/vorgang/AntragstellerMapperTest.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/vorgang/AntragstellerMapperTest.java
@@ -8,6 +8,8 @@ import org.mapstruct.factory.Mappers;
 import org.mockito.InjectMocks;
 import org.mockito.Spy;
 
+import de.itvsh.kop.pluto.common.grpc.GrpcFormDataMapper;
+
 class AntragstellerMapperTest {
 
 	@InjectMocks
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/vorgang/EingangMapperTest.java b/goofy-server/src/test/java/de/itvsh/goofy/vorgang/EingangMapperTest.java
index 7c905c7ce765e4143d7659423ad6c586d7b6e94c..a8dadc9100802b666f056743b986a486977d92b5 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/vorgang/EingangMapperTest.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/vorgang/EingangMapperTest.java
@@ -1,25 +1,19 @@
 package de.itvsh.goofy.vorgang;
 
-import static de.itvsh.goofy.vorgang.GrpcSubFormTestFactory.*;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 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;
+import org.mockito.Spy;
 
+import de.itvsh.kop.pluto.common.grpc.GrpcFormDataMapper;
 import de.itvsh.ozg.pluto.vorgang.GrpcEingang;
-import de.itvsh.ozg.pluto.vorgang.GrpcFormData;
-import de.itvsh.ozg.pluto.vorgang.GrpcSubForm;
 
 class EingangMapperTest {
 
@@ -30,6 +24,8 @@ class EingangMapperTest {
 	private AntragstellerMapper antragstellerMapper;
 	@Mock
 	private EingangHeaderMapper eingangHeaderMapper;
+	@Spy
+	private GrpcFormDataMapper formDataMapper = Mappers.getMapper(GrpcFormDataMapper.class);
 
 	@Nested
 	class TestGrpcEingangToEingang {
@@ -79,184 +75,5 @@ class EingangMapperTest {
 			assertThat(eingang.getAntragsteller()).isNull();
 			assertThat(eingang.getHeader()).isNull();
 		}
-
-		@DisplayName("Mapped SubFormField")
-		@Nested
-		class TestSubFormFieldMapping {
-
-			private final GrpcSubForm subForm = GrpcSubFormTestFactory.create();
-
-			@Test
-			void shouldContainField() {
-				var mapped = mapper.mapSubFormFields(subForm.getFieldList());
-
-				assertThat(mapped).containsKey(FIELD_NAME);
-			}
-
-			@Test
-			void shouldContainValue() {
-				var mapped = mapper.mapSubFormFields(subForm.getFieldList());
-
-				assertThat(mapped).containsEntry(FIELD_NAME, FIELD_VALUE);
-			}
-
-			@Nested
-			class TestCombiner {
-				@Test
-				void missingInMap2ShouldContainValue() {
-					Map<String, Object> map1 = Map.of("TEST", "VALUE1");
-					Map<String, Object> map2 = Map.of();
-
-					var combined = mapper.combiner(map1, map2);
-
-					assertThat(combined).containsEntry("TEST", "VALUE1");
-				}
-
-				@Test
-				void missingInMap1ShouldContainValue() {
-					Map<String, Object> map1 = new HashMap<>();
-					Map<String, Object> map2 = Map.of("TEST", "VALUE1");
-
-					var combined = mapper.combiner(map1, map2);
-
-					assertThat(combined).containsEntry("TEST", "VALUE1");
-				}
-
-				@Test
-				void inBothMapShouldCombineToList() {
-					Map<String, Object> map1 = new HashMap<>(Map.of("TEST", "VALUE1"));
-					Map<String, Object> map2 = Map.of("TEST", "VALUE2");
-
-					var combined = mapper.combiner(map1, map2);
-
-					assertThat(combined).containsEntry("TEST", List.of("VALUE1", "VALUE2"));
-				}
-
-				@Test
-				void listInMap2ShouldStayAList() {
-					Map<String, Object> map1 = Map.of("TEST", List.of("VALUE1", "VALUE2"));
-					Map<String, Object> map2 = Map.of();
-
-					var combined = mapper.combiner(map1, map2);
-
-					assertThat(combined).containsEntry("TEST", List.of("VALUE1", "VALUE2"));
-				}
-
-				@Test
-				void valueInMap1ShouldBeAddedToList() {
-					Map<String, Object> map1 = new HashMap<>(Map.of("TEST", "VALUE1"));
-					Map<String, Object> map2 = Map.of("TEST", List.of("VALUE2", "VALUE3"));
-
-					var combined = mapper.combiner(map1, map2);
-
-					assertThat(combined).containsEntry("TEST", List.of("VALUE1", "VALUE2", "VALUE3"));
-				}
-
-				@Test
-				void valueInMap2ShouldBeAddedToList() {
-					Map<String, Object> map1 = new HashMap<>(Map.of("TEST", List.of("VALUE1", "VALUE2")));
-					Map<String, Object> map2 = Map.of("TEST", "VALUE3");
-
-					var combined = mapper.combiner(map1, map2);
-
-					assertThat(combined).containsEntry("TEST", List.of("VALUE1", "VALUE2", "VALUE3"));
-				}
-
-				@Test
-				void listInMap1ShouldStayAList() {
-					Map<String, Object> map1 = new HashMap<>();
-					Map<String, Object> map2 = Map.of("TEST", List.of("VALUE1", "VALUE2"));
-
-					var combined = mapper.combiner(map1, map2);
-
-					assertThat(combined).containsEntry("TEST", List.of("VALUE1", "VALUE2"));
-				}
-
-				@Test
-				void listInBothMapsShouldByCombined() {
-					Map<String, Object> map1 = new HashMap<>(Map.of("TEST", List.of("VALUE1", "VALUE2")));
-					Map<String, Object> map2 = Map.of("TEST", List.of("VALUE3", "VALUE4"));
-
-					var combined = mapper.combiner(map1, map2);
-
-					assertThat(combined).containsEntry("TEST", List.of("VALUE1", "VALUE2", "VALUE3", "VALUE4"));
-				}
-			}
-		}
-
-		@DisplayName("Mapped FormData")
-		@Nested
-		class TestMapGrpcSubFormToSubForm {
-
-			@Test
-			void shouldNotBeEmpty() {
-				GrpcEingang grpcEingang = GrpcEingangTestFactory.create();
-
-				var eingang = mapper.fromGrpc(grpcEingang);
-
-				assertThat(eingang.getFormData()).isNotEmpty();
-			}
-
-			@Test
-			void shouldHaveMappedSubForm() {
-				GrpcEingang grpcEingang = GrpcEingangTestFactory.create();
-
-				var eingang = mapper.fromGrpc(grpcEingang);
-
-				assertThat(eingang.getFormData()).containsKey(TITLE);
-			}
-
-			@DisplayName("mapped FormData should contain fields")
-			@Test
-			void fieldsInSubForm() {
-				GrpcEingang grpcEingang = GrpcEingangTestFactory.create();
-
-				var eingang = mapper.fromGrpc(grpcEingang);
-				@SuppressWarnings("unchecked")
-				Map<String, Object> formData = (Map<String, Object>) eingang.getFormData().get(TITLE);
-
-				assertThat(formData).containsEntry(FIELD_NAME, FIELD_VALUE);
-			}
-
-			@DisplayName("mapped FormData should contains subForm")
-			@Test
-			void shouldHaveMappedSubFormWithSubForm() {
-				GrpcEingang grpcEingang = GrpcEingangTestFactory.create();
-
-				var eingang = mapper.fromGrpc(grpcEingang);
-				@SuppressWarnings("unchecked")
-				Map<String, Object> formData = (Map<String, Object>) eingang.getFormData().get(TITLE);
-
-				assertThat(formData).containsKey(GrpcSubFormTestFactory.SUBFORM_NAME);
-			}
-
-			@DisplayName("mapped SubForm should contain List of SubForms")
-			@Test
-			void shouldHaveMappedListOfSubForms() {
-				GrpcEingang grpcEingang = GrpcEingangTestFactory.createBuilder().setFormData(GrpcFormData.newBuilder()
-						.addForm(GrpcSubFormTestFactory.create())
-						.addForm(GrpcSubFormTestFactory.create())
-						.build()).build();
-
-				var eingang = mapper.fromGrpc(grpcEingang);
-				@SuppressWarnings("unchecked")
-				var formData = (List<Map<String, Object>>) eingang.getFormData().get(TITLE);
-
-				assertThat(formData).contains(EingangTestFactory.AS_MAP, EingangTestFactory.AS_MAP);
-			}
-
-			@DisplayName("mapped SubForm should contain field")
-			@Test
-			void subFormShouldContainField() {
-				GrpcEingang grpcEingang = GrpcEingangTestFactory.create();
-
-				var eingang = mapper.fromGrpc(grpcEingang);
-				@SuppressWarnings("unchecked")
-				Map<String, Object> subForm = (Map<String, Object>) ((Map<String, Object>) eingang.getFormData().get(TITLE)).get(SUBFORM_NAME);
-
-				assertThat(subForm).containsEntry(SUBFORM_FIELD_NAME, SUBFORM_FIELD_VALUE);
-			}
-
-		}
 	}
 }
\ No newline at end of file
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/vorgang/GrpcFormDataMapperTest.java b/goofy-server/src/test/java/de/itvsh/goofy/vorgang/GrpcFormDataMapperTest.java
index 4be9a08c5e4d6f98a932241bf75a0eaa218986ad..e2b435a87eec79ed87fca5615b0a64b0f6b4bc1d 100644
--- a/goofy-server/src/test/java/de/itvsh/goofy/vorgang/GrpcFormDataMapperTest.java
+++ b/goofy-server/src/test/java/de/itvsh/goofy/vorgang/GrpcFormDataMapperTest.java
@@ -15,6 +15,7 @@ import org.mapstruct.factory.Mappers;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 
+import de.itvsh.kop.pluto.common.grpc.GrpcFormDataMapper;
 import de.itvsh.ozg.pluto.vorgang.GrpcFormData;
 import de.itvsh.ozg.pluto.vorgang.GrpcFormField;
 import de.itvsh.ozg.pluto.vorgang.GrpcSubForm;