diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/AntragstellerMapper.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/AntragstellerMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..755692329b83d31074fbdbebbfcfbf50f24e120b
--- /dev/null
+++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/AntragstellerMapper.java
@@ -0,0 +1,47 @@
+package de.ozgcloud.eingang.fim;
+
+import java.util.Map;
+
+import org.springframework.stereotype.Component;
+
+import de.ozgcloud.eingang.common.formdata.Antragsteller;
+import de.ozgcloud.eingang.common.formdata.FormData;
+
+@Component
+class AntragstellerMapper {
+
+	static final String ANTRAGSTELLER_KEY = "G17002112";
+
+	static final String ANSCHRIFT_KEY = "G60000086";
+
+	static final String VORNAME_KEY = "F60000228";
+	static final String NACHNAME_KEY = "F60000227";
+	static final String EMAIL_KEY = "F60000242";
+	static final String STRASSE_KEY = "F60000243";
+	static final String HAUSNUMMER_KEY = "F60000244";
+	static final String PLZ_KEY = "F60000246";
+	static final String ORT_KEY = "F60000247";
+
+	public Antragsteller map(FormData formData) {
+		var antragsteller = getAntragsteller(formData);
+		var anschrift = getAnschrift(antragsteller);
+
+		return Antragsteller.builder()
+				.vorname(FimDataUtil.getValue(antragsteller, VORNAME_KEY).orElse(null))
+				.nachname(FimDataUtil.getValue(antragsteller, NACHNAME_KEY).orElse(null))
+				.email(FimDataUtil.getValue(antragsteller, EMAIL_KEY).orElse(null))
+				.strasse(FimDataUtil.getValue(anschrift, STRASSE_KEY).orElse(null))
+				.hausnummer(FimDataUtil.getValue(anschrift, HAUSNUMMER_KEY).orElse(null))
+				.plz(FimDataUtil.getValue(anschrift, PLZ_KEY).orElse(null))
+				.ort(FimDataUtil.getValue(anschrift, ORT_KEY).orElse(null))
+				.build();
+	}
+
+	private Map<String, Object> getAntragsteller(FormData formData) {
+		return FimDataUtil.getSubmap(formData.getFormData(), ANTRAGSTELLER_KEY);
+	}
+
+	private Map<String, Object> getAnschrift(Map<String, Object> antragsteller) {
+		return FimDataUtil.getSubmap(antragsteller, ANSCHRIFT_KEY);
+	}
+}
\ No newline at end of file
diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimBasedAdapter.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimBasedAdapter.java
index 6a6a8ce22f230439482be03567c495388c3a8915..6af43c73ff3f545deb00f7624d90d7a49a113d17 100644
--- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimBasedAdapter.java
+++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimBasedAdapter.java
@@ -5,7 +5,6 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
@@ -18,6 +17,7 @@ import de.ozgcloud.eingang.common.formdata.FormData;
 import de.ozgcloud.eingang.common.formdata.FormData.FormDataControl;
 import de.ozgcloud.eingang.common.formdata.FormData.Representations;
 import de.ozgcloud.eingang.common.formdata.IncomingFile;
+import de.ozgcloud.eingang.fim.common.errorhandling.FimException;
 import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter;
 import lombok.NonNull;
 import lombok.extern.log4j.Log4j2;
@@ -88,9 +88,7 @@ public class FimBasedAdapter implements EngineBasedSemantikAdapter {
 				});
 	}
 
-	private Document loadDocument(final IncomingFile incomingFile) throws ParserConfigurationException, IOException, SAXException {
-		final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
-		return builder.parse(incomingFile.getContentStream());
+	private Document loadDocument(IncomingFile incomingFile) throws ParserConfigurationException, IOException, SAXException {
+		return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(incomingFile.getContentStream());
 	}
-
 }
diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataUtil.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataUtil.java
index ca6e3716e8bd54ab9676c7aed71205e0fd294bc1..06bbb98cec5de6c6bf94c13720693059a42ec76f 100644
--- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataUtil.java
+++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataUtil.java
@@ -1,8 +1,10 @@
 package de.ozgcloud.eingang.fim;
 
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 
+import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.ArrayUtils;
 
 import lombok.AccessLevel;
@@ -11,30 +13,42 @@ import lombok.NoArgsConstructor;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 class FimDataUtil {
 
+	static final String VALUE_KEY = "value";
+
+	public static Optional<String> getValue(Map<String, Object> data, String... path) {
+		var current = FimDataUtil.getSubmap(data, ArrayUtils.subarray(path, 0, path.length - 1));
+		if (Objects.isNull(current)) {
+			return Optional.empty();
+		}
+		var map = FimDataUtil.castToMap(MapUtils.getMap(current, path[path.length - 1]));
+		return Optional.ofNullable(FimDataUtil.getValueAsString(map));
+	}
+
 	public static Map<String, Object> getSubmap(Map<String, Object> data, String... path) {
 		var current = data;
-		for (final String step : path) {
-			current = map(current, step);
+		for (var step : path) {
+			current = FimDataUtil.getValueMapByKey(current, step);
 		}
 		return current;
 	}
 
-	public static Optional<String> getValue(final Map<String, Object> data, String... path) {
-		var current = getSubmap(data, ArrayUtils.subarray(path, 0, path.length - 1));
-		if (current == null) {
-			return Optional.empty();
-		}
-		return Optional.ofNullable((String) ((Map<String, Object>) current.get(path[path.length - 1])).get("value"));
+	static Map<String, Object> getValueMapByKey(Map<String, Object> obj, String key) {
+		return Optional.ofNullable(MapUtils.getMap(obj, key))
+				.map(FimDataUtil::castToMap)
+				.map(FimDataUtil::getValueAsMap)
+				.orElse(null);
 	}
 
-	private static Map<String, Object> map(Map<String, Object> obj, String key) {
-		if (obj == null) {
-			return null;
-		}
-		var data = obj.get(key);
-		if (!(data instanceof Map)) {
-			return null;
-		}
-		return (Map<String, Object>) ((Map<String, Object>) data).get("value");
+	@SuppressWarnings("unchecked")
+	private static Map<String, Object> castToMap(Map<?, ?> obj) {
+		return (Map<String, Object>) obj;
+	}
+
+	private static Map<String, Object> getValueAsMap(Map<String, Object> map) {
+		return FimDataUtil.castToMap(MapUtils.getMap(map, VALUE_KEY));
+	}
+
+	private static String getValueAsString(Map<String, Object> map) {
+		return (String) map.get(VALUE_KEY);
 	}
-}
+}
\ No newline at end of file
diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimEngineBasedMapper.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimEngineBasedMapper.java
index f01ac99cc7eebb80f297041f7edba27bf91b2c23..e754c6eddc5f6c8eea1b5389f6f93861605a2c73 100644
--- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimEngineBasedMapper.java
+++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimEngineBasedMapper.java
@@ -2,6 +2,5 @@ package de.ozgcloud.eingang.fim;
 
 import de.ozgcloud.eingang.semantik.enginebased.EngineBasedMapper;
 
-public interface FimEngineBasedMapper extends EngineBasedMapper {
-
-}
+interface FimEngineBasedMapper extends EngineBasedMapper {
+}
\ No newline at end of file
diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimException.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimException.java
deleted file mode 100644
index ec25fcb3101f859b275fc917516449e1a422e95c..0000000000000000000000000000000000000000
--- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimException.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package de.ozgcloud.eingang.fim;
-
-import de.ozgcloud.eingang.common.errorhandling.TechnicalException;
-
-public class FimException extends TechnicalException {
-    public FimException(final String ex) {
-        super(ex);
-    }
-}
diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeAdapterCatalogue.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeAdapterCatalogue.java
index 934f3f8af3c717e76bbf894362316ad6b13cc2df..f33502b8735eb94f5cfb06906c3707381620fe78 100644
--- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeAdapterCatalogue.java
+++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeAdapterCatalogue.java
@@ -1,5 +1,8 @@
 package de.ozgcloud.eingang.fim;
 
 import java.util.LinkedHashMap;
+
 class FimSchemeAdapterCatalogue extends LinkedHashMap<FimSchemeIdentifier, FimSchemeAdapter> {
+
+	private static final long serialVersionUID = 1L;
 }
diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeCatalogue.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeCatalogue.java
index 5c53c1ae7ce88a6389ad60bff758df73a9ddd8ce..e6dab27a01114ec9e70d4bff1bd9d3e7037da9c9 100644
--- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeCatalogue.java
+++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeCatalogue.java
@@ -3,4 +3,6 @@ package de.ozgcloud.eingang.fim;
 import java.util.LinkedHashMap;
 
 class FimSchemeCatalogue extends LinkedHashMap<FimSchemeIdentifier, FimScheme> {
+
+	private static final long serialVersionUID = 1L;
 }
diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeIdentifier.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeIdentifier.java
index 3f2222a484a57be97508f53d78b6f6bd9c074381..b0c2a5db8f5b5b698aea4f722001f9d504723696 100644
--- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeIdentifier.java
+++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeIdentifier.java
@@ -3,15 +3,15 @@ package de.ozgcloud.eingang.fim;
 import lombok.EqualsAndHashCode;
 
 @EqualsAndHashCode
-public class FimSchemeIdentifier {
+class FimSchemeIdentifier {
 
-    private final String schemeId;
+	private final String schemeId;
 
-    FimSchemeIdentifier(String schemeId) {
-        this.schemeId = schemeId;
-    }
+	FimSchemeIdentifier(String schemeId) {
+		this.schemeId = schemeId;
+	}
 
-    public static FimSchemeIdentifier fromString(final String s) {
-        return new FimSchemeIdentifier(s);
-    }
+	public static FimSchemeIdentifier fromString(String schemeId) {
+		return new FimSchemeIdentifier(schemeId);
+	}
 }
diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimService.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimService.java
index fc33e27a48a8438d1674b10d258e169f66e4b998..da5ad07ca9c864efcd3fae2d4a48eef7ac354482 100644
--- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimService.java
+++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimService.java
@@ -1,9 +1,10 @@
 package de.ozgcloud.eingang.fim;
 
+import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 
 import javax.xml.parsers.DocumentBuilder;
@@ -18,9 +19,9 @@ import org.springframework.stereotype.Service;
 import org.w3c.dom.Document;
 import org.xml.sax.SAXException;
 
-import de.ozgcloud.eingang.common.formdata.Antragsteller;
 import de.ozgcloud.eingang.common.formdata.FormData;
 import de.ozgcloud.eingang.common.formdata.FormHeader;
+import de.ozgcloud.eingang.fim.common.errorhandling.FimException;
 import io.micrometer.common.util.StringUtils;
 import lombok.extern.log4j.Log4j2;
 
@@ -37,6 +38,8 @@ public class FimService {
 
 	@Autowired
 	private ResourceLoader resourceLoader;
+	@Autowired
+	private AntragstellerMapper antragstellerMapper;
 
 	@Autowired
 	private final List<FimSchemeAdapter> fimSchemeAdapters = new ArrayList<>();
@@ -53,84 +56,91 @@ public class FimService {
 
 	@PostConstruct
 	private void postConstruct() throws ParserConfigurationException, IOException, SAXException {
-		for (final FimSchemeAdapter fimSchemeAdapter : fimSchemeAdapters) {
-			fimSchemeAdapterCatalogue.put(fimSchemeAdapter.getIdentifier(), fimSchemeAdapter);
-		}
-		for (final String fimSchemaLocation : fimProperties.getSchemeLocations()) {
-			final FimScheme fimScheme = loadFimScheme(fimSchemaLocation.trim());
+		initFimSchemeAdapterCatalogue();
+		initFimSchemeCatalogue();
+
+		initUnknownScheme();
+	}
+
+	private void initFimSchemeAdapterCatalogue() {
+		fimSchemeAdapters.forEach(adapter -> fimSchemeAdapterCatalogue.put(adapter.getIdentifier(), adapter));
+	}
+
+	private void initFimSchemeCatalogue() throws ParserConfigurationException, IOException, SAXException {
+		for (var fimSchemaLocation : fimProperties.getSchemeLocations()) {
+			var fimScheme = loadFimScheme(fimSchemaLocation.trim());
 			fimSchemeCatalogue.put(fimScheme.getIdentifier(), fimScheme);
 		}
-		final FimScheme unknownScheme = buildUnknownScheme();
+	}
+
+	private void initUnknownScheme() throws ParserConfigurationException {
+		var unknownScheme = createScheme(createDocumentBuilder().newDocument(), UNKNOWN_SCHEME_NAME);
 		fimSchemeCatalogue.put(unknownScheme.getIdentifier(), unknownScheme);
 	}
 
 	private FimScheme loadFimScheme(final String path) throws ParserConfigurationException, IOException, SAXException {
 		LOG.debug("Load FIM schema: " + path);
-		final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
-		final Document doc = builder.parse(resourceLoader.getResource("classpath:" + path).getFile());
-		final String targetNamespace = doc.getDocumentElement().getAttribute("targetNamespace");
-		final FimSchemeIdentifier fimSchemeIdentifier = FimSchemeIdentifier.fromString(targetNamespace);
-		final FimSchemeAdapter fimSchemeAdapter = fimSchemeAdapterCatalogue.getOrDefault(fimSchemeIdentifier, DEFAULT_FIM_SCHEME_ADAPTER);
-		return new FimScheme(doc, fimSchemeIdentifier, fimSchemeAdapter);
+		var doc = createDocumentBuilder().parse(getFile(path));
+		return createScheme(doc, getTargetNamespace(doc));
+	}
+
+	private DocumentBuilder createDocumentBuilder() throws ParserConfigurationException {
+		return DocumentBuilderFactory.newInstance().newDocumentBuilder();
+	}
+
+	private File getFile(String path) throws IOException {
+		return resourceLoader.getResource("classpath:" + path).getFile();
 	}
 
-	private FimScheme buildUnknownScheme() throws ParserConfigurationException {
-		final Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
-		final FimSchemeIdentifier unknownFimSchemeIdentifier = FimSchemeIdentifier.fromString(UNKNOWN_SCHEME_NAME);
-		final FimSchemeAdapter fimSchemeAdapter = fimSchemeAdapterCatalogue.get(unknownFimSchemeIdentifier);
-		return new FimScheme(doc, unknownFimSchemeIdentifier, fimSchemeAdapter);
+	private String getTargetNamespace(Document doc) {
+		return doc.getDocumentElement().getAttribute("targetNamespace");
+	}
+
+	private FimScheme createScheme(Document doc, String identifierName) {
+		var identifier = getIdentifierFromString(identifierName);
+		var adapter = getFimSchemeAdapter(identifier);
+		return new FimScheme(doc, identifier, adapter);
+	}
+
+	private FimSchemeIdentifier getIdentifierFromString(String name) {
+		return FimSchemeIdentifier.fromString(name);
 	}
 
 	public FormData transformDocument(final Document document, final FormData initialFormData) {
-		final String[] tagParts = document.getDocumentElement().getTagName().split(":");
-		final String namespacePrefix = tagParts.length < 2 ? "" : (":" + tagParts[0]);
-		final String schemeName = document.getDocumentElement().getAttribute("xmlns" + namespacePrefix);
+		var schemeName = getSchemeName(document);
 		if (StringUtils.isEmpty(schemeName)) {
 			throw new FimException("XML Document does not provide a scheme");
 		}
-		final FimScheme scheme = getSchemeForIdentifier(schemeName);
-		var formData = fimDataMapper.apply(document, scheme, initialFormData);
-
+		var formData = fimDataMapper.apply(document, getSchemeForIdentifier(schemeName), initialFormData);
 		return formData.toBuilder()
 				.header(initialFormData.getHeader())
-				.antragsteller(buildAntragsteller(formData))
+				.antragsteller(antragstellerMapper.map(formData))
 				.header(buildFormHeader(formData))
 				.build();
 	}
 
+	private String getSchemeName(Document doc) {
+		var tagParts = doc.getDocumentElement().getTagName().split(":");
+		var namespacePrefix = tagParts.length < 2 ? "" : (":" + tagParts[0]);
+		return doc.getDocumentElement().getAttribute("xmlns" + namespacePrefix);
+	}
+
 	FimScheme getSchemeForIdentifier(String fimSchemaName) {
-		final FimSchemeIdentifier fimSchemeIdentifier = FimSchemeIdentifier.fromString(fimSchemaName);
-		final FimScheme fimScheme = fimSchemeCatalogue.get(fimSchemeIdentifier);
-		if (fimScheme == null) {
+		var fimScheme = getFimScheme(FimSchemeIdentifier.fromString(fimSchemaName));
+
+		if (Objects.isNull(fimScheme)) {
 			LOG.error("Cannot find schema for: " + fimSchemaName);
-			return fimSchemeCatalogue.get(FimSchemeIdentifier.fromString(UNKNOWN_SCHEME_NAME));
+			return getFimScheme(FimSchemeIdentifier.fromString(UNKNOWN_SCHEME_NAME));
 		}
 		return fimScheme;
 	}
 
-	// THINKME In Mapper auslagern
-	private Antragsteller buildAntragsteller(FormData formData) {
-		var anzeigenErsteller = getAnzeigenErsteller(formData);
-		var anschrift = getAnschrift(anzeigenErsteller);
-
-		return Antragsteller.builder()
-				.vorname(FimDataUtil.getValue(anzeigenErsteller, "F60000228").orElse(null))
-				.nachname(FimDataUtil.getValue(anzeigenErsteller, "F60000227").orElse(null))
-				.email(FimDataUtil.getValue(anzeigenErsteller, "F60000242").orElse(null))
-				.strasse(FimDataUtil.getValue(anschrift, "F60000243").orElse(null))
-				.hausnummer(FimDataUtil.getValue(anschrift, "F60000244").orElse(null))
-				.plz(FimDataUtil.getValue(anschrift, "F60000246").orElse(null))
-				.ort(FimDataUtil.getValue(anschrift, "F60000247").orElse(null))
-				.build();
-	}
-
-	// ASKME AnzeigenErsteller ?!
-	private Map<String, Object> getAnzeigenErsteller(FormData formData) {
-		return FimDataUtil.getSubmap(formData.getFormData(), "G17002112");
+	private FimScheme getFimScheme(FimSchemeIdentifier identifier) {
+		return fimSchemeCatalogue.get(identifier);
 	}
 
-	private Map<String, Object> getAnschrift(Map<String, Object> anzeigenErsteller) {
-		return FimDataUtil.getSubmap(anzeigenErsteller, "G60000086");
+	private FimSchemeAdapter getFimSchemeAdapter(FimSchemeIdentifier identifier) {
+		return fimSchemeAdapterCatalogue.getOrDefault(identifier, DEFAULT_FIM_SCHEME_ADAPTER);
 	}
 
 	private FormHeader buildFormHeader(FormData formData) {
diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/common/errorhandling/FimException.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/common/errorhandling/FimException.java
new file mode 100644
index 0000000000000000000000000000000000000000..56b6c09343ebdd2783ab7854745a77a87746e1ba
--- /dev/null
+++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/common/errorhandling/FimException.java
@@ -0,0 +1,12 @@
+package de.ozgcloud.eingang.fim.common.errorhandling;
+
+import de.ozgcloud.eingang.common.errorhandling.TechnicalException;
+
+public class FimException extends TechnicalException {
+
+	private static final long serialVersionUID = 1L;
+
+	public FimException(final String ex) {
+		super(ex);
+	}
+}
diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/AntragstellerMapperTest.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/AntragstellerMapperTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..80a4c0b6bb4f59a072b29dcff7375e3ceb252e8f
--- /dev/null
+++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/AntragstellerMapperTest.java
@@ -0,0 +1,44 @@
+package de.ozgcloud.eingang.fim;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+
+import de.ozgcloud.eingang.common.formdata.Antragsteller;
+import de.ozgcloud.eingang.common.formdata.FormData;
+
+class AntragstellerMapperTest {
+
+	@InjectMocks
+	private AntragstellerMapper mapper;
+
+	@DisplayName("Map")
+	@Nested
+	class TestMap {
+
+		@Test
+		void shouldMap() {
+			var antragstellerMap = AntragstellerTestFactory.createAntragstellerAsFimMap();
+			var formData = FormData.builder().formData(Map.of(AntragstellerMapper.ANTRAGSTELLER_KEY, antragstellerMap)).build();
+
+			var antragsteller = mapper.map(formData);
+
+			assertThat(antragsteller).usingRecursiveComparison().isEqualTo(AntragstellerTestFactory.create());
+		}
+
+		@Test
+		void shouldMapEmpty() {
+			var formData = FormData.builder().formData(Collections.emptyMap()).build();
+
+			var antragsteller = mapper.map(formData);
+
+			assertThat(antragsteller).usingRecursiveComparison().isEqualTo(Antragsteller.builder().build());
+		}
+	}
+}
\ No newline at end of file
diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/AntragstellerTestFactory.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/AntragstellerTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..e3e3e8cd45a3eb196ca21e80a4189c8e0ba025dc
--- /dev/null
+++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/AntragstellerTestFactory.java
@@ -0,0 +1,54 @@
+package de.ozgcloud.eingang.fim;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.thedeanda.lorem.LoremIpsum;
+
+import de.ozgcloud.eingang.common.formdata.Antragsteller;
+
+public class AntragstellerTestFactory {
+
+	public static final String VORNAME = LoremIpsum.getInstance().getWords(1);
+	public static final String NACHNAME = LoremIpsum.getInstance().getWords(1);
+	public static final String EMAIL = LoremIpsum.getInstance().getEmail();
+	public static final String STRASSE = LoremIpsum.getInstance().getName();
+	public static final String HAUSNUMMER = "4a";
+	public static final String PLZ = LoremIpsum.getInstance().getZipCode();
+	public static final String ORT = LoremIpsum.getInstance().getCity();
+
+	public static Antragsteller create() {
+		return createBuilder().build();
+	}
+
+	public static Antragsteller.AntragstellerBuilder createBuilder() {
+		return Antragsteller.builder()
+				.vorname(VORNAME)
+				.nachname(NACHNAME)
+				.email(EMAIL)
+				.strasse(STRASSE)
+				.hausnummer(HAUSNUMMER)
+				.plz(PLZ)
+				.ort(ORT);
+	}
+
+	public static Map<String, Object> createAntragstellerAsFimMap() {
+		var antragsteller = new HashMap<String, Object>();
+		antragsteller.put(FimDataUtil.VALUE_KEY, Map.of(
+				AntragstellerMapper.VORNAME_KEY, Map.of(FimDataUtil.VALUE_KEY, VORNAME),
+				AntragstellerMapper.NACHNAME_KEY, Map.of(FimDataUtil.VALUE_KEY, NACHNAME),
+				AntragstellerMapper.EMAIL_KEY, Map.of(FimDataUtil.VALUE_KEY, EMAIL),
+				AntragstellerMapper.ANSCHRIFT_KEY, createAnschriftAsFimMap()));
+		return antragsteller;
+	}
+
+	private static Map<String, Object> createAnschriftAsFimMap() {
+		var anschrift = new HashMap<String, Object>();
+		anschrift.put(FimDataUtil.VALUE_KEY, Map.of(
+				AntragstellerMapper.STRASSE_KEY, Map.of(FimDataUtil.VALUE_KEY, STRASSE),
+				AntragstellerMapper.HAUSNUMMER_KEY, Map.of(FimDataUtil.VALUE_KEY, HAUSNUMMER),
+				AntragstellerMapper.PLZ_KEY, Map.of(FimDataUtil.VALUE_KEY, PLZ),
+				AntragstellerMapper.ORT_KEY, Map.of(FimDataUtil.VALUE_KEY, ORT)));
+		return anschrift;
+	}
+}
\ No newline at end of file
diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimDataUtilTest.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimDataUtilTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb48785bcad73409f81fb3606a8f4e260b745445
--- /dev/null
+++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimDataUtilTest.java
@@ -0,0 +1,45 @@
+package de.ozgcloud.eingang.fim;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+class FimDataUtilTest {
+
+	@DisplayName("Get value as key")
+	@Nested
+	class TestGetValueAsKey {
+
+		private final String fieldKey = "fieldKey";
+
+		private final Map<String, Object> valueDataMap = Collections.singletonMap("valueDataKey", "valueDataValue");
+		private final Map<String, Object> valueMap = Collections.singletonMap(FimDataUtil.VALUE_KEY, valueDataMap);
+		private final Map<String, Object> fieldMap = Collections.singletonMap(fieldKey, valueMap);
+
+		@Test
+		void shouldReturNullOnNullMap() {
+			var map = FimDataUtil.getValueMapByKey(null, fieldKey);
+
+			assertThat(map).isNull();
+		}
+
+		@Test
+		void shouldReturnNullOnNullKeyValue() {
+			var map = FimDataUtil.getValueMapByKey(fieldMap, null);
+
+			assertThat(map).isNull();
+		}
+
+		@Test
+		void shouldReturnValueMapEntry() {
+			var map = FimDataUtil.getValueMapByKey(fieldMap, fieldKey);
+
+			assertThat(map).isEqualTo(valueDataMap);
+		}
+	}
+}
\ No newline at end of file
diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceITCase.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceITCase.java
index 38075e210282b91976041e1365b61603eadc2a3d..80267f923f9517aa620f5d9a93e1f0131394286d 100644
--- a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceITCase.java
+++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceITCase.java
@@ -24,12 +24,13 @@ import de.ozgcloud.common.test.ITCase;
 import de.ozgcloud.eingang.common.formdata.FormData;
 import de.ozgcloud.eingang.common.formdata.FormHeader;
 import de.ozgcloud.eingang.common.formdata.IncomingFile;
+import de.ozgcloud.eingang.fim.common.errorhandling.FimException;
 
 @ITCase
 @ActiveProfiles({ "itcase", "test" })
 @ImportAutoConfiguration
 @SpringBootTest(classes = FimTestConfig.class)
-public class FimServiceITCase {
+class FimServiceITCase {
 
 	@Autowired
 	private FimService fimService;