diff --git a/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormDataControlTestFactory.java b/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormDataControlTestFactory.java
index e95c1e0fccf66519d23c26008a3a145bf562a2ff..17b840b213a6124b4a8ed4247b777f8facc8f529 100644
--- a/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormDataControlTestFactory.java
+++ b/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormDataControlTestFactory.java
@@ -7,7 +7,7 @@ import de.ozgcloud.eingang.common.formdata.FormData.Representations;
 
 public class FormDataControlTestFactory {
 
-	public static String PRIMARY_FORM_DATA_REPRESENTATION = "Antrag.xml";
+	public static final String PRIMARY_FORM_DATA_REPRESENTATION = "Antrag.xml";
 
 	public static FormDataControl create() {
 		return createBuilder().build();
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 100eefcfe1c6629650fcaaca896ccdabc973a84c..0ad23b9e4e08d54aa7e356c3ea2cde213d0fc7f4 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
@@ -29,6 +29,10 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class FormDataTestFactory {
 
 	public static final String SIMPLE_VALUE_KEY = "kontaktsystemtypid";
@@ -57,6 +61,12 @@ public class FormDataTestFactory {
 			IncomingFileGroupTestFactory.createBuilder().name(ATTACHMENT_GROUP_2).build());
 	public static final List<IncomingFile> REPRESENTATIONS = List.of(IncomingFileTestFactory.create());
 
+	public static final Map<String, Object> FORM_DATA = Map.of(
+			SIMPLE_VALUE_KEY, SIMPLE_VALUE,
+			SUBFORM_KEY, SUBFORM_VALUE,
+			NESTED_LIST_WITH_STRINGS_KEY, NESTED_LIST_WITH_STRINGS,
+			NESTED_LIST_WITH_OBJECTS_KEY, NESTED_LIST_WITH_OBJECTS);
+
 	public static FormData create() {
 		return createBuilder().build();
 	}
@@ -67,11 +77,7 @@ public class FormDataTestFactory {
 				.antragsteller(AntragstellerTestFactory.create())
 				.zustaendigeStelle(ZustaendigeStelleTestFactory.create())
 				.control(FormDataControlTestFactory.create())
-				.formData(Map.of(
-						SIMPLE_VALUE_KEY, SIMPLE_VALUE,
-						SUBFORM_KEY, SUBFORM_VALUE,
-						NESTED_LIST_WITH_STRINGS_KEY, NESTED_LIST_WITH_STRINGS,
-						NESTED_LIST_WITH_OBJECTS_KEY, NESTED_LIST_WITH_OBJECTS))
+				.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
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
index 17653d91cb1dbdb75c8dc4533e8075ce005faef0..f64fee934e5fd263903ce5a0143a05b80f4b051b 100644
--- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/AntragstellerMapper.java
+++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/AntragstellerMapper.java
@@ -5,9 +5,10 @@ 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 {
+class AntragstellerMapper implements FimEngineBasedMapper {
 
 	static final String ANTRAGSTELLER_KEY = "G17002112";
 
@@ -21,7 +22,14 @@ class AntragstellerMapper {
 	static final String PLZ_KEY = "F60000246";
 	static final String ORT_KEY = "F60000247";
 
-	public Antragsteller map(Map<String, Object> formData) {
+	@Override
+	public FormData parseFormData(FormData formData) {
+		return formData.toBuilder()
+				.antragsteller(mapAntragsteller(formData.getFormData()))
+				.build();
+	}
+
+	Antragsteller mapAntragsteller(Map<String, Object> formData) {
 		var antragsteller = getAntragsteller(formData);
 		var anschrift = getAnschrift(antragsteller);
 
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 6af43c73ff3f545deb00f7624d90d7a49a113d17..75487f4b3eba8ddd41ae2856bc557be292ac67ae 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
@@ -1,62 +1,32 @@
 package de.ozgcloud.eingang.fim;
 
-import java.io.IOException;
-import java.util.Collections;
 import java.util.List;
-import java.util.Optional;
 
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
-import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
 
 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.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
 
 @Log4j2
+@RequiredArgsConstructor
 @Component
 public class FimBasedAdapter implements EngineBasedSemantikAdapter {
 
 	static final String FIM_FORM_ENGINE_NAME = "FIM";
 
-	static final String DEFAULT_FORMDATA_REPRESENTATION_NAME = "Antrag.xml";
-
-	@Autowired
-	private FimService fimService;
-
-	@Autowired(required = false)
-	private List<FimEngineBasedMapper> mappers = Collections.emptyList();
+	private final List<FimEngineBasedMapper> mappers;
+	private final FimService service;
 
 	@Override
-	public boolean isResponsible(final FormData formData) {
-		final String formEngineName = formData.getHeader().getFormEngineName();
-		return FIM_FORM_ENGINE_NAME.equals(formEngineName);
+	public boolean isResponsible(FormData formData) {
+		return FIM_FORM_ENGINE_NAME.equals(formData.getHeader().getFormEngineName());
 	}
 
 	@Override
-	public FormData parseFormData(final FormData initialFormData) {
-		var mapped = useMappers(initialFormData);
-		LOG.info("FIM Mapper running to map formData");
-
-		return findFile(initialFormData, getEntryPoint(initialFormData.getControl()))
-				.map(primaryRepresentation -> doParsing(mapped, primaryRepresentation))
-				.orElseGet(() -> {
-					LOG.error("Entry point file not found for fim data mapping");
-					return mapped;
-				});
-	}
-
-	private FormData useMappers(FormData inFormData) {
-		var processedFormData = inFormData;
+	public FormData parseFormData(FormData formData) {
+		var processedFormData = addFormDataDataMap(formData);
 
 		for (var mapper : mappers) {
 			processedFormData = mapper.parseFormData(processedFormData);
@@ -65,30 +35,7 @@ public class FimBasedAdapter implements EngineBasedSemantikAdapter {
 		return processedFormData;
 	}
 
-	private Optional<IncomingFile> findFile(final FormData formData, final String name) {
-		return formData.getRepresentations().stream()
-				.filter(file -> file.getName().endsWith(name))
-				.findFirst();
-	}
-
-	private FormData doParsing(@NonNull FormData formData, @NonNull IncomingFile formDataPrimaryRepresentation) {
-		try {
-			return fimService.transformDocument(loadDocument(formDataPrimaryRepresentation), formData);
-		} catch (ParserConfigurationException | SAXException | IOException | FimException e) {
-			LOG.error("Can't transform document into fim formdata.", e);
-			return formData;
-		}
-	}
-
-	String getEntryPoint(FormDataControl formDataControl) {
-		return formDataControl.getRepresentations().map(Representations::getPrimaryFormDataRepresentation)
-				.orElseGet(() -> {
-					LOG.error("No entry point found in metadata file for fim data mapping. Trying default.");
-					return DEFAULT_FORMDATA_REPRESENTATION_NAME;
-				});
-	}
-
-	private Document loadDocument(IncomingFile incomingFile) throws ParserConfigurationException, IOException, SAXException {
-		return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(incomingFile.getContentStream());
+	FormData addFormDataDataMap(FormData formData) {
+		return formData.toBuilder().formData(service.parseRequestData(formData)).build();
 	}
-}
+}
\ No newline at end of file
diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataMapper.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataMapper.java
index 8b91a29fa41c3489fa8a304423a36d10e1c6194d..b027412baa094ca2e8074eb58b45225cbd772d85 100644
--- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataMapper.java
+++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataMapper.java
@@ -2,26 +2,25 @@ package de.ozgcloud.eingang.fim;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.function.BiFunction;
 
-import org.apache.commons.lang3.function.TriFunction;
 import org.springframework.stereotype.Service;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.Text;
 
-import de.ozgcloud.eingang.common.formdata.FormData;
 import lombok.extern.log4j.Log4j2;
 
 @Log4j2
 @Service
-class FimDataMapper implements TriFunction<Document, FimScheme, FormData, Map<String, Object>> {
+class FimDataMapper implements BiFunction<Document, FimScheme, Map<String, Object>> {
 
 	private static final String LABEL_KEY = "label";
 	private static final String VALUE_KEY = "value";
 
 	@Override
-	public Map<String, Object> apply(Document document, FimScheme fimScheme, FormData initialFormData) {
+	public Map<String, Object> apply(Document document, FimScheme fimScheme) {
 		return extractDocumentData(document.getDocumentElement(), fimScheme);
 	}
 
diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimProperties.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimProperties.java
index df67ec1a3468ca2e96a0a63e8edaa27d1f7ba24c..08014480a4c855b4345d1ef338438e39b08b3a88 100644
--- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimProperties.java
+++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimProperties.java
@@ -1,25 +1,26 @@
 package de.ozgcloud.eingang.fim;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Configuration;
-import lombok.Getter;
-import org.springframework.validation.annotation.Validated;
 
-import java.util.ArrayList;
-import java.util.List;
+import lombok.Getter;
 
-@Validated
+@Getter
 @Configuration
 @ConfigurationProperties(prefix = FimProperties.PROPERTIES_PREFIX)
-@Getter
 public class FimProperties {
-    static final String PROPERTIES_PREFIX = "fim";
+	static final String PROPERTIES_PREFIX = "ozgcloud.eingang.fim";
 
-    /**
-     * List of paths to fim scheme files which should be processed by the fim-adapter.
-     *
-     * Only fim data that is in the namespace and versions of these files will be mapped by the fim-adapter.
-     * All other fim data will be left untouched by the mapper.
-     */
-    private final List<String> schemeLocations = new ArrayList<>();
+	/**
+	 * List of paths to fim scheme files which should be processed by the
+	 * fim-adapter.
+	 *
+	 * Only fim data that is in the namespace and versions of these files will be
+	 * mapped by the fim-adapter. All other fim data will be left untouched by the
+	 * mapper.
+	 */
+	private final List<String> schemeLocations = new ArrayList<>();
 }
diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimScheme.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimScheme.java
index e38bd99ba4f4d4ab5586b1d4ae436f533017ecc0..5e7e6ca6e1ceb4ad714be35a289c11fe02333419 100644
--- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimScheme.java
+++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimScheme.java
@@ -1,42 +1,42 @@
 package de.ozgcloud.eingang.fim;
 
-import lombok.Getter;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import org.w3c.dom.NodeList;
-
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Optional;
 
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import lombok.Getter;
+
 class FimScheme {
 
-    private final Document doc;
-    @Getter
-    private final FimSchemeIdentifier identifier;
-
-    @Getter
-    private final FimSchemeAdapter schemeAdapter;
-    private final Map<String, Element> fieldIndex = new LinkedHashMap<>();
-
-    FimScheme(final Document doc, final FimSchemeIdentifier identifier, final FimSchemeAdapter schemeAdapter) {
-        this.doc = doc;
-        this.identifier = identifier;
-        this.schemeAdapter = schemeAdapter;
-
-        buildFieldIndex();
-    }
-    private void buildFieldIndex() {
-        final NodeList groupList = doc.getElementsByTagName("xs:element");
-        for (int i = 0; i < groupList.getLength();i++) {
-            final Element group = (Element) groupList.item(i);
-            final String groupName = group.getAttribute("name");
-            fieldIndex.put(groupName, group);
-        }
-    }
-
-    Optional<String> getFieldName(final String fieldName) {
-        return schemeAdapter.getFieldName(fieldIndex, fieldName);
-    }
+	private final Document doc;
+	@Getter
+	private final FimSchemeIdentifier identifier;
+
+	@Getter
+	private final FimSchemeAdapter schemeAdapter;
+	private final Map<String, Element> fieldIndex = new LinkedHashMap<>();
+
+	public FimScheme(Document doc, FimSchemeIdentifier identifier, FimSchemeAdapter schemeAdapter) {
+		this.doc = doc;
+		this.identifier = identifier;
+		this.schemeAdapter = schemeAdapter;
+
+		buildFieldIndex();
+	}
+
+	private void buildFieldIndex() {
+		var groupList = doc.getElementsByTagName("xs:element");
+		for (int i = 0; i < groupList.getLength(); i++) {
+			var group = (Element) groupList.item(i);
+			var groupName = group.getAttribute("name");
+			fieldIndex.put(groupName, group);
+		}
+	}
+
+	Optional<String> getFieldName(final String fieldName) {
+		return schemeAdapter.getFieldName(fieldIndex, fieldName);
+	}
 }
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 bdf965588c5e53b1da6ce0c81ca10852482d7828..580a3d9a4c70950c200e9f6cccfd40d789221ae2 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
@@ -45,7 +45,7 @@ class FimSchemeCatalogue extends LinkedHashMap<FimSchemeIdentifier, FimScheme> {
 
 			initUnknownScheme();
 		} catch (ParserConfigurationException | IOException | SAXException e) {
-			throw new TechnicalException("Error on initalising FimSchemes.", e);
+			throw new TechnicalException("Error on initialising FimSchemes.", e);
 		}
 	}
 
@@ -60,7 +60,7 @@ class FimSchemeCatalogue extends LinkedHashMap<FimSchemeIdentifier, FimScheme> {
 	}
 
 	private FimScheme loadFimScheme(String path) throws ParserConfigurationException, IOException, SAXException {
-		LOG.debug("Load FIM schema: " + path);
+		LOG.debug(() -> "Load FIM schema: " + path);
 		var doc = createDocumentBuilder().parse(getFile(path));
 		return createScheme(doc, getTargetNamespace(doc));
 	}
diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeHelper.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeHelper.java
index 116f35040eec4edf768399357e93314f0fc736df..054589340915925e6aa49ca9da20c88858eb377b 100644
--- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeHelper.java
+++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeHelper.java
@@ -1,7 +1,6 @@
 package de.ozgcloud.eingang.fim;
 
 import java.util.List;
-import java.util.Objects;
 
 import jakarta.annotation.PostConstruct;
 
@@ -29,9 +28,8 @@ class FimSchemeHelper {
 
 	private void initSchemeAdapterCatalogue() {
 		schemeAdapterCatalogue = new FimSchemeAdapterCatalogue();
-		if (Objects.nonNull(fimSchemeAdapters)) {
-			fimSchemeAdapters.forEach(adapter -> schemeAdapterCatalogue.put(adapter.getIdentifier(), adapter));
-		}
+
+		fimSchemeAdapters.forEach(adapter -> schemeAdapterCatalogue.put(adapter.getIdentifier(), adapter));
 	}
 
 	private void initSchemeCatalogue() {
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 f6b4bbb019ecd8807209cca4952cb63082f0e2da..689bfae8147f7b103c53fca26eb5d1bfa271d404 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,5 +1,6 @@
 package de.ozgcloud.eingang.fim;
 
+import java.util.Collections;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
@@ -9,8 +10,11 @@ import org.springframework.stereotype.Service;
 import org.w3c.dom.Document;
 
 import de.ozgcloud.eingang.common.formdata.FormData;
-import de.ozgcloud.eingang.common.formdata.FormHeader;
+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.fim.common.xml.DocumentHelper;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
 
@@ -19,35 +23,45 @@ import lombok.extern.log4j.Log4j2;
 @Service
 public class FimService {
 
+	static final String DEFAULT_FORMDATA_REPRESENTATION_NAME = "Antrag.xml";
+
 	private final FimDataMapper fimDataMapper;
-	private final AntragstellerMapper antragstellerMapper;
 	private final FimSchemeHelper schemeHelper;
+	private final DocumentHelper documentHelper;
 
-	public FormData transformDocument(Document document, FormData formData) {
-		var formDataMap = getFormDataMap(document, formData);
-		return formData.toBuilder()
-				.formData(formDataMap)
-				.antragsteller(antragstellerMapper.map(formDataMap))
-				.header(buildFormHeader(formData, formDataMap))
-				.build();
+	public Map<String, Object> parseRequestData(FormData formData) {
+		return findRequestFile(formData).map(this::doParse).orElseGet(Collections::emptyMap);
 	}
 
-	private Map<String, Object> getFormDataMap(Document document, FormData formData) {
-		return fimDataMapper.apply(document, getSchemeForIdentifier(getSchemeName(document)), formData);
+	Map<String, Object> doParse(IncomingFile file) {
+		try {
+			var content = documentHelper.parse(file);
+			var schemeIdentifier = getSchemeForIdentifier(getSchemeName(content));
+			return fimDataMapper.apply(content, schemeIdentifier);
+		} catch (Exception e) {
+			return Collections.<String, Object>emptyMap();
+		}
 	}
 
-	String getSchemeName(Document doc) {
-		var schemeName = extractSchemeName(doc);
-		if (StringUtils.isEmpty(schemeName)) {
-			throw new FimException("XML Document does not provide a scheme.");
-		}
-		return schemeName;
+	Optional<IncomingFile> findRequestFile(FormData formData) {
+		var primaryFormDataRepresentationName = getPrimaryRepresentationName(formData.getControl());
+		return formData.getRepresentations().stream()
+				.filter(file -> file.getName().endsWith(primaryFormDataRepresentationName))
+				.findFirst();
 	}
 
-	String extractSchemeName(Document doc) {
-		var tagParts = doc.getDocumentElement().getTagName().split(":");
-		var namespacePrefix = tagParts.length < 2 ? "" : (":" + tagParts[0]);
-		return doc.getDocumentElement().getAttribute("xmlns" + namespacePrefix);
+	String getPrimaryRepresentationName(FormDataControl formDataControl) {
+		return formDataControl.getRepresentations().map(Representations::getPrimaryFormDataRepresentation)
+				.orElseGet(() -> {
+					LOG.warn("No entry point found in metadata file for fim data mapping. Trying default.");
+					return DEFAULT_FORMDATA_REPRESENTATION_NAME;
+				});
+	}
+
+	String getSchemeName(Document doc) {
+		return Optional.of(documentHelper.extractSchemeName(doc))
+				.filter(StringUtils::isNotEmpty)
+				.orElseThrow(() -> new FimException("XML Document does not provide a scheme."));
 	}
 
 	FimScheme getSchemeForIdentifier(String fimSchemaName) {
@@ -59,14 +73,4 @@ public class FimService {
 		}
 		return fimScheme;
 	}
-
-	FormHeader buildFormHeader(FormData formData, Map<String, Object> formDataMap) {
-		return formData.getHeader().toBuilder()
-				.formName(getVorgangsName(formDataMap).orElse(null))
-				.build();
-	}
-
-	Optional<String> getVorgangsName(Map<String, Object> formData) {
-		return FimDataUtil.getValue(formData, "G17003529", "G05001479", "G05001480", "F05002753");
-	}
 }
\ No newline at end of file
diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/HeaderMapper.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/HeaderMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..31e45366490cf6bcd1c54fcba2e81b45ccd8355e
--- /dev/null
+++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/HeaderMapper.java
@@ -0,0 +1,34 @@
+package de.ozgcloud.eingang.fim;
+
+import java.util.Map;
+import java.util.Optional;
+
+import org.springframework.stereotype.Component;
+
+import de.ozgcloud.eingang.common.formdata.FormData;
+import de.ozgcloud.eingang.common.formdata.FormHeader;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.log4j.Log4j2;
+
+@Log4j2
+@RequiredArgsConstructor
+@Component
+class HeaderMapper implements FimEngineBasedMapper {
+
+	@Override
+	public FormData parseFormData(FormData formData) {
+		return formData.toBuilder()
+				.header(buildHeader(formData))
+				.build();
+	}
+
+	FormHeader buildHeader(FormData formData) {
+		return formData.getHeader().toBuilder()
+				.formName(getFormName(formData.getFormData()).orElse(null))
+				.build();
+	}
+
+	Optional<String> getFormName(Map<String, Object> formData) {
+		return FimDataUtil.getValue(formData, "G17003529", "G05001479", "G05001480", "F05002753");
+	}
+}
\ No newline at end of file
diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/ZustaendigeStelleMapper.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/ZustaendigeStelleMapper.java
index 72146cb778999343ef393a5d78365c1801893a0d..14804c92f35056b153c42e5a72202eafb3f4dac3 100644
--- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/ZustaendigeStelleMapper.java
+++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/ZustaendigeStelleMapper.java
@@ -22,19 +22,19 @@ class ZustaendigeStelleMapper implements FimEngineBasedMapper {
 		return formData.getControl().getMetaData()
 				.map(metaData -> metaData.getEntry(XTA_IDENTIFIER_ENTRY_NAME))
 				.filter(Objects::nonNull)
-				.map(oeId -> setOrganisationsEinheitId(formData.getZustaendigeStelles(), oeId))
+				.map(id -> setOrganisationEinheitId(formData.getZustaendigeStelles(), id))
 				.map(zustStelle -> formData.toBuilder().zustaendigeStelle(zustStelle).build())
 				.orElse(formData);
 	}
 
-	private ZustaendigeStelle setOrganisationsEinheitId(List<ZustaendigeStelle> stelles, @NonNull String oeid) {
-		var builder = stelles.isEmpty() ? ZustaendigeStelle.builder() : stelles.getFirst().toBuilder();
+	private ZustaendigeStelle setOrganisationEinheitId(List<ZustaendigeStelle> stellen, @NonNull String organisationEinheitId) {
+		var builder = stellen.isEmpty() ? ZustaendigeStelle.builder() : stellen.getFirst().toBuilder();
 
-		extractOrganisationsEinheitId(oeid).ifPresent(builder::organisationseinheitenId);
+		extractOrganisationEinheitId(organisationEinheitId).ifPresent(builder::organisationseinheitenId);
 		return builder.build();
 	}
 
-	Optional<String> extractOrganisationsEinheitId(@NonNull String xtaIdentifier) {
+	Optional<String> extractOrganisationEinheitId(@NonNull String xtaIdentifier) {
 		var idx = xtaIdentifier.indexOf(":");
 		if (idx < 0) {
 			return Optional.empty();
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
index 56b6c09343ebdd2783ab7854745a77a87746e1ba..68be9eb443298ed45cafcbe646f73b85de9c6519 100644
--- 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
@@ -6,7 +6,7 @@ public class FimException extends TechnicalException {
 
 	private static final long serialVersionUID = 1L;
 
-	public FimException(final String ex) {
-		super(ex);
+	public FimException(String message) {
+		super(message);
 	}
 }
diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/common/xml/DocumentHelper.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/common/xml/DocumentHelper.java
new file mode 100644
index 0000000000000000000000000000000000000000..6b31ebfc85afe8082d52a47b433235410adfa50e
--- /dev/null
+++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/common/xml/DocumentHelper.java
@@ -0,0 +1,26 @@
+package de.ozgcloud.eingang.fim.common.xml;
+
+import java.io.IOException;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.springframework.stereotype.Component;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+import de.ozgcloud.eingang.common.formdata.IncomingFile;
+
+@Component
+public class DocumentHelper {
+
+	public Document parse(IncomingFile incomingFile) throws ParserConfigurationException, IOException, SAXException {
+		return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(incomingFile.getContentStream());
+	}
+
+	public String extractSchemeName(Document doc) {
+		var tagParts = doc.getDocumentElement().getTagName().split(":");
+		var namespacePrefix = tagParts.length < 2 ? "" : (":" + tagParts[0]);
+		return doc.getDocumentElement().getAttribute("xmlns" + namespacePrefix);
+	}
+}
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
index 142f8c2a5f701c9196b42fd1e90728d0f8877847..fe829d0ef1416d982a3644476b46cd3965a1bca2 100644
--- a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/AntragstellerMapperTest.java
+++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/AntragstellerMapperTest.java
@@ -1,32 +1,65 @@
 package de.ozgcloud.eingang.fim;
 
 import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
 
 import java.util.Collections;
 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.mockito.InjectMocks;
+import org.mockito.Spy;
 
 import de.ozgcloud.eingang.common.formdata.Antragsteller;
+import de.ozgcloud.eingang.common.formdata.FormData;
+import de.ozgcloud.eingang.common.formdata.FormDataTestFactory;
 
 class AntragstellerMapperTest {
 
+	@Spy
 	@InjectMocks
 	private AntragstellerMapper mapper;
 
-	@DisplayName("Map")
+	@DisplayName("Parse formData")
 	@Nested
-	class TestMap {
+	class TestParseFormData {
+
+		private final FormData formData = FormDataTestFactory.createBuilder().antragsteller(null).build();
+
+		@BeforeEach
+		void mock() {
+			doReturn(AntragstellerTestFactory.create()).when(mapper).mapAntragsteller(any());
+		}
+
+		@Test
+		void shouldCallMapAntragsteller() {
+			mapper.parseFormData(formData);
+
+			verify(mapper).mapAntragsteller(FormDataTestFactory.FORM_DATA);
+		}
+
+		@Test
+		void shouldReturnFormDataWithAntragsteller() {
+			var mappedFormData = mapper.parseFormData(formData);
+
+			assertThat(mappedFormData.getAntragsteller()).isNotNull();
+		}
+	}
+
+	@DisplayName("Map antragsteller")
+	@Nested
+	class TestMapAntragsteller {
 
 		@Test
 		void shouldMap() {
 			var antragstellerMap = AntragstellerTestFactory.createAntragstellerAsFimMap();
 			var formData = Map.<String, Object>of(AntragstellerMapper.ANTRAGSTELLER_KEY, antragstellerMap);
 
-			var antragsteller = mapper.map(formData);
+			var antragsteller = mapper.mapAntragsteller(formData);
 
 			assertThat(antragsteller).usingRecursiveComparison().isEqualTo(AntragstellerTestFactory.create());
 		}
@@ -35,7 +68,7 @@ class AntragstellerMapperTest {
 		void shouldMapEmpty() {
 			var formData = Collections.<String, Object>emptyMap();
 
-			var antragsteller = mapper.map(formData);
+			var antragsteller = mapper.mapAntragsteller(formData);
 
 			assertThat(antragsteller).usingRecursiveComparison().isEqualTo(Antragsteller.builder().build());
 		}
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
index e3e3e8cd45a3eb196ca21e80a4189c8e0ba025dc..2dc6ad5a0c7493e50cb4a5e2e02a363b94adfbbc 100644
--- a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/AntragstellerTestFactory.java
+++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/AntragstellerTestFactory.java
@@ -6,7 +6,10 @@ import java.util.Map;
 import com.thedeanda.lorem.LoremIpsum;
 
 import de.ozgcloud.eingang.common.formdata.Antragsteller;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
 
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class AntragstellerTestFactory {
 
 	public static final String VORNAME = LoremIpsum.getInstance().getWords(1);
diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimBaseAdapterTest.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimBaseAdapterTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..4d228a09a8129974a542414e66b7158c231ae9a0
--- /dev/null
+++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimBaseAdapterTest.java
@@ -0,0 +1,113 @@
+package de.ozgcloud.eingang.fim;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+import java.util.List;
+
+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.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
+
+import de.ozgcloud.common.test.ReflectionTestUtils;
+import de.ozgcloud.eingang.common.formdata.FormData;
+import de.ozgcloud.eingang.common.formdata.FormDataTestFactory;
+import de.ozgcloud.eingang.common.formdata.FormHeaderTestFactory;
+
+class FimBaseAdapterTest {
+
+	@Spy
+	@InjectMocks
+	private FimBasedAdapter adapter;
+	@Mock
+	private FimEngineBasedMapper mapper;
+	@Mock
+	private FimService service;
+
+	@DisplayName("Is responsible")
+	@Nested
+	class TestIsResponsible {
+
+		@Test
+		void shouldReturnTrueOnFimFormEngineName() {
+			var formData = FormData.builder()
+					.header(FormHeaderTestFactory.createBuilder()
+							.formEngineName(FimBasedAdapter.FIM_FORM_ENGINE_NAME)
+							.build())
+					.build();
+
+			var isResponsible = adapter.isResponsible(formData);
+
+			assertThat(isResponsible).isTrue();
+		}
+	}
+
+	@DisplayName("Parse formData")
+	@Nested
+	class TestParseFormData {
+
+		private final FormData formData = FormDataTestFactory.create();
+		private final FormData mappedFormData = FormDataTestFactory.create();
+
+		@BeforeEach
+		void mock() {
+			doReturn(formData).when(adapter).addFormDataDataMap(any());
+
+			ReflectionTestUtils.setField(adapter, "mappers", List.of(mapper));
+
+			when(mapper.parseFormData(any())).thenReturn(mappedFormData);
+		}
+
+		@Test
+		void shouldCallAddFormDataDataMap() {
+			adapter.parseFormData(formData);
+
+			verify(adapter).addFormDataDataMap(formData);
+		}
+
+		@Test
+		void shouldCallMapper() {
+			adapter.parseFormData(formData);
+
+			verify(mapper).parseFormData(formData);
+		}
+
+		@Test
+		void shouldReturnFormData() {
+			var parsedFormData = adapter.parseFormData(formData);
+
+			assertThat(parsedFormData).isEqualTo(mappedFormData);
+		}
+	}
+
+	@DisplayName("Add formData dataMap")
+	@Nested
+	class TestAddFormDataDataMap {
+
+		private final FormData formData = FormDataTestFactory.createBuilder().formData(null).build();
+
+		@BeforeEach
+		void mock() {
+			when(service.parseRequestData(any())).thenReturn(FormDataTestFactory.FORM_DATA);
+		}
+
+		@Test
+		void shouldCallService() {
+			adapter.addFormDataDataMap(formData);
+
+			verify(service).parseRequestData(formData);
+		}
+
+		@Test
+		void shouldReturnFormDataWithDataMap() {
+			var enrichedFormData = adapter.addFormDataDataMap(formData);
+
+			assertThat(enrichedFormData.getFormData()).isNotNull().isEqualTo(FormDataTestFactory.FORM_DATA);
+		}
+	}
+}
diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimBasedAdapterITCase.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimBasedAdapterITCase.java
index 348acd4003c8f0cfd9cd6d2b5c766451df4e7cf1..683abc75602b2c494f016ad5508eab40cfcdc9de 100644
--- a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimBasedAdapterITCase.java
+++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimBasedAdapterITCase.java
@@ -5,7 +5,10 @@ import static org.assertj.core.api.Assertions.*;
 import java.io.File;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
@@ -13,7 +16,10 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
 
 import de.ozgcloud.common.test.ITCase;
+import de.ozgcloud.eingang.common.formdata.Antragsteller;
 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.FormHeader;
 import de.ozgcloud.eingang.common.formdata.IncomingFile;
 
@@ -23,59 +29,111 @@ import de.ozgcloud.eingang.common.formdata.IncomingFile;
 @SpringBootTest(classes = FimTestConfig.class)
 class FimBasedAdapterITCase {
 
-	@Autowired
+	@Autowired // NOSONAR
 	private FimBasedAdapter fimBasedAdapter;
 
-	@Test
-	void shouldFallbackUnknownScheme() {
-		var incomingFile = IncomingFile.builder().name("src/test/resources/test3/Antrag.xml").file(new File("src/test/resources/test3/Antrag.xml"))
-				.build();
-		var incomingFile2 = IncomingFile.builder().name("src/test/resources/test3/fim_xtaMetadata.xml").build();
-		var initialFormData = FormData.builder()
-				.header(FormHeader.builder().channel("XTA").formEngineName("FIM").build())
-				.representations(List.of(incomingFile, incomingFile2)).build();
+	@Nested
+	class TestFallback {
+
+		@Test
+		void shouldWithFallbackUnknownScheme() {
+			var incomingFile = IncomingFile.builder().name("src/test/resources/test3/Antrag.xml")
+					.file(new File("src/test/resources/test3/Antrag.xml"))
+					.build();
+			var incomingFile2 = IncomingFile.builder().name("src/test/resources/test3/fim_xtaMetadata.xml").build();
+			var initialFormData = FormData.builder()
+					.header(FormHeader.builder().channel("XTA").formEngineName("FIM").build())
+					.representations(List.of(incomingFile, incomingFile2)).build();
+
+			var formData = fimBasedAdapter.parseFormData(initialFormData);
 
-		var formData = fimBasedAdapter.parseFormData(initialFormData);
+			assertThat(formData).isNotNull();
+			assertThat(formData.getFormData()).isEqualTo(getParsedDocumentMap());
+		}
 
-		assertThat(formData).isNotNull();
-		assertThat(formData.getFormData()).isEqualTo(getParsedDocumentMap());
+		private Map<String, Object> getParsedDocumentMap() {
+			return Map.of(
+					"G17003529", Map.of(
+							"label", "G17003529",
+							"value", Map.of(
+									"G05001479", Map.of(
+											"label", "G05001479",
+											"value", Map.of(
+													"G05001480", Map.of(
+															"label", "G05001480",
+															"value", Map.of(
+																	"F05002750",
+																	Map.of("label", "F05002750", "value", "d447e43a-5723-4821-a170-cb44d2dbf143"),
+																	"F05002751", Map.of("label", "F05002751", "value", "2022-08-15T09:30:47"),
+																	"F05002752",
+																	Map.of("label", "F05002752", "value", "fim.S17000652.17000652001004"),
+																	"F05002753",
+																	Map.of("label", "F05002753", "value", "urn:fim:Versammlungsanzeige:1.4"))),
+													"G05001481", Map.of(
+															"label", "G05001481",
+															"value", Map.of(
+																	"F05002754", Map.of("label", "F05002754", "value", "Celle"),
+																	"F05002755", Map.of("label", "F05002755", "value", "vbe:010550120100"),
+																	"F05002756", Map.of("label", "F05002756", "value", "Versammlungsbehörde"))),
+													"G05001482", Map.of(
+															"label", "G05001482",
+															"value", Map.of(
+																	"F05002754",
+																	Map.of("label", "F05002754", "value",
+																			"OSI-Onlinedienst Niedersachsen Versammlungsanzeige"),
+																	"F05002755", Map.of("label", "F05002755", "value", "vbe:010550120100"),
+																	"F05002756",
+																	Map.of("label", "F05002756", "value", "Engagement- und Hobbyportal"))))),
+									"F17005454", Map.of("label", "F17005454", "value", "true"),
+									"F17005455", Map.of("label", "F17005455", "value", "true"),
+									"F17005533", Map.of("label", "F17005533", "value", "String"))),
+					"F17009191", Map.of("label", "F17009191", "value", "true"),
+					"F17003371", Map.of("label", "F17003371", "value", "String"));
+		}
 	}
 
-	private Map<String, Object> getParsedDocumentMap() {
-		return Map.of(
-				"G17003529", Map.of(
-						"label", "G17003529",
-						"value", Map.of(
-								"G05001479", Map.of(
-										"label", "G05001479",
-										"value", Map.of(
-												"G05001480", Map.of(
-														"label", "G05001480",
-														"value", Map.of(
-																"F05002750",
-																Map.of("label", "F05002750", "value", "d447e43a-5723-4821-a170-cb44d2dbf143"),
-																"F05002751", Map.of("label", "F05002751", "value", "2022-08-15T09:30:47"),
-																"F05002752", Map.of("label", "F05002752", "value", "fim.S17000652.17000652001004"),
-																"F05002753",
-																Map.of("label", "F05002753", "value", "urn:fim:Versammlungsanzeige:1.4"))),
-												"G05001481", Map.of(
-														"label", "G05001481",
-														"value", Map.of(
-																"F05002754", Map.of("label", "F05002754", "value", "Celle"),
-																"F05002755", Map.of("label", "F05002755", "value", "vbe:010550120100"),
-																"F05002756", Map.of("label", "F05002756", "value", "Versammlungsbehörde"))),
-												"G05001482", Map.of(
-														"label", "G05001482",
-														"value", Map.of(
-																"F05002754",
-																Map.of("label", "F05002754", "value",
-																		"OSI-Onlinedienst Niedersachsen Versammlungsanzeige"),
-																"F05002755", Map.of("label", "F05002755", "value", "vbe:010550120100"),
-																"F05002756", Map.of("label", "F05002756", "value", "Engagement- und Hobbyportal"))))),
-								"F17005454", Map.of("label", "F17005454", "value", "true"),
-								"F17005455", Map.of("label", "F17005455", "value", "true"),
-								"F17005533", Map.of("label", "F17005533", "value", "String"))),
-				"F17009191", Map.of("label", "F17009191", "value", "true"),
-				"F17003371", Map.of("label", "F17003371", "value", "String"));
+	@DisplayName("Parse formData")
+	@Nested
+	class TestParseFormData {
+
+		private final String fileName = "antrag.xml";
+		private final FormData emptyFormData = FormData.builder()
+				.control(FormDataControl.builder()
+						.representations(Optional.of(Representations.builder()
+								.primaryFormDataRepresentation(fileName)
+								.build()))
+						.build())
+				.representation(IncomingFile.builder()
+						.name(fileName)
+						.file(new File("src/test/resources/" + fileName))
+						.build())
+				.build();
+
+		@Test
+		void shouldHaveHeaderFormName() {
+			var formData = fimBasedAdapter.parseFormData(emptyFormData);
+
+			assertThat(formData).isNotNull();
+			assertThat(formData.getHeader().getFormName()).isEqualTo("urn:fim:Versammlungsanzeige:1.4");
+		}
+
+		@Test
+		void shouldHaveAntragsteller() {
+			var formData = fimBasedAdapter.parseFormData(emptyFormData);
+
+			assertThat(formData).isNotNull();
+			assertThat(formData.getAntragsteller()).usingRecursiveComparison().isEqualTo(createExpectedAntragsteller());
+		}
+
+		private Antragsteller createExpectedAntragsteller() {
+			return Antragsteller.builder()
+					.vorname("Jörg").nachname("Bolay")
+					.email("joerg.bolay@dataport.de")
+					.strasse("Muster")
+					.hausnummer("1")
+					.plz("12345")
+					.ort("Muster")
+					.build();
+		}
 	}
 }
\ No newline at end of file
diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimBasedAdapterTest.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimBasedAdapterTest.java
index 1a09b6a2ef3428543a3981d71f8aa8d38aaf5235..07b9477b9d469b8392cc5b7eceac6bde9e98cb5c 100644
--- a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimBasedAdapterTest.java
+++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimBasedAdapterTest.java
@@ -2,45 +2,36 @@ package de.ozgcloud.eingang.fim;
 
 import static org.assertj.core.api.Assertions.*;
 
-import java.util.Optional;
-
+import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
+import org.mockito.Mock;
 
-import de.ozgcloud.eingang.common.formdata.FormData.Representations;
-import de.ozgcloud.eingang.common.formdata.FormDataControlTestFactory;
+import de.ozgcloud.eingang.common.formdata.FormDataTestFactory;
+import de.ozgcloud.eingang.common.formdata.FormHeaderTestFactory;
 
 class FimBasedAdapterTest {
 
 	@InjectMocks
 	private FimBasedAdapter adapter;
+	@Mock
+	private FimService service;
+	@Mock
+	private FimEngineBasedMapper mapper;
 
+	@DisplayName("Is responsible")
 	@Nested
-	class TestGetEntryPoint {
-
-		@Test
-		void shouldReturnPrimaryRepresentation() {
-			var result = adapter.getEntryPoint(FormDataControlTestFactory.create());
-
-			assertThat(result).isEqualTo(FormDataControlTestFactory.PRIMARY_FORM_DATA_REPRESENTATION);
-		}
+	class TestIsResponsible {
 
 		@Test
-		void shouldReturnDefaultOnMissingRepresentations() {
-			var result = adapter.getEntryPoint(FormDataControlTestFactory.createBuilder().representations(Optional.empty()).build());
+		void shouldBeTrueOnFimFormEngine() {
+			var formData = FormDataTestFactory.createBuilder()
+					.header(FormHeaderTestFactory.createBuilder().formEngineName(FimBasedAdapter.FIM_FORM_ENGINE_NAME).build()).build();
 
-			assertThat(result).isEqualTo(FimBasedAdapter.DEFAULT_FORMDATA_REPRESENTATION_NAME);
-		}
-
-		@Test
-		void shouldReturnDefaultOnMissingPrimary() {
-			var control = FormDataControlTestFactory.createBuilder().representations(Optional.of(Representations.builder().build())).build();
+			var isResponsible = adapter.isResponsible(formData);
 
-			var result = adapter.getEntryPoint(control);
-
-			assertThat(result).isEqualTo(FimBasedAdapter.DEFAULT_FORMDATA_REPRESENTATION_NAME);
+			assertThat(isResponsible).isTrue();
 		}
 	}
-
 }
diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimDataMapperTest.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimDataMapperTest.java
index 0ea6ec2b100bdc89d16f78b8b253e4fe17639090..9ca64413f8399857126bbbc64e590968a2acdf57 100644
--- a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimDataMapperTest.java
+++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimDataMapperTest.java
@@ -62,7 +62,7 @@ class FimDataMapperTest {
 		}
 
 		private Map<String, Object> apply() {
-			return mapper.apply(document, fimScheme, formData);
+			return mapper.apply(document, fimScheme);
 		}
 	}
 
diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimSchemeHelperTest.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimSchemeHelperTest.java
index 9978e286bb6205d6bc7d1662a93a5ee5667e7fbe..7553fefb39eecae195f94a9fa79706efad3d5d52 100644
--- a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimSchemeHelperTest.java
+++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimSchemeHelperTest.java
@@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
+import java.util.Collections;
 import java.util.List;
 
 import org.junit.jupiter.api.BeforeEach;
@@ -29,6 +30,11 @@ class FimSchemeHelperTest {
 	@Nested
 	class TestInit {
 
+		@BeforeEach
+		void initMocks() {
+			setFimSchemeAdapter(Collections.emptyList());
+		}
+
 		@DisplayName("scheme adapter catalogue")
 		@Nested
 		class TestInitSchemeAdapterCatalogue {
@@ -38,7 +44,7 @@ class FimSchemeHelperTest {
 
 			@Test
 			void shouldInitByAdapter() {
-				setFimSchemeAdapter();
+				setFimSchemeAdapter(List.of(adapter));
 
 				helper.init();
 
@@ -52,15 +58,15 @@ class FimSchemeHelperTest {
 				assertThat(getSchemeAdapterCatalogue()).isNotNull().isEmpty();
 			}
 
-			private void setFimSchemeAdapter() {
-				ReflectionTestUtils.setField(helper, "fimSchemeAdapters", List.of(adapter));
-			}
-
 			private FimSchemeAdapterCatalogue getSchemeAdapterCatalogue() {
 				return ReflectionTestUtils.getField(helper, "schemeAdapterCatalogue", FimSchemeAdapterCatalogue.class);
 			}
 		}
 
+		private void setFimSchemeAdapter(List<FimSchemeAdapter> adapterList) {
+			ReflectionTestUtils.setField(helper, "fimSchemeAdapters", adapterList);
+		}
+
 		@Test
 		void shouldInitSchemeCatalogue() {
 			helper.init();
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 45526808759630241f1b178221947fbe44982093..1830c32f8e77c4c928b51c4aedcf899a72c815d1 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
@@ -2,20 +2,18 @@ package de.ozgcloud.eingang.fim;
 
 import static org.assertj.core.api.Assertions.*;
 
-import java.io.IOException;
-
-import javax.xml.parsers.ParserConfigurationException;
+import java.io.File;
 
+import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
-import org.xml.sax.SAXException;
 
 import de.ozgcloud.common.test.ITCase;
-import de.ozgcloud.eingang.common.formdata.FormData;
-import de.ozgcloud.eingang.fim.common.errorhandling.FimException;
+import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory;
+import lombok.SneakyThrows;
 
 @ITCase
 @ActiveProfiles({ "itcase", "test" })
@@ -23,89 +21,65 @@ import de.ozgcloud.eingang.fim.common.errorhandling.FimException;
 @SpringBootTest(classes = FimTestConfig.class)
 class FimServiceITCase {
 
-	@Autowired
-	private FimService fimService;
-
-	private final FormData emptyFormData = FormData.builder().build();
-
-	@Test
-	void shouldFailOnEmptyScheme() throws ParserConfigurationException, IOException, SAXException {
-		var document = FimDocumentTestHelper.getTest1Document();
-		var formData = emptyFormData;
+	@Autowired // NOSONAR
+	private FimService service;
 
-		assertThatThrownBy(() -> fimService.transformDocument(document, formData)).isInstanceOf(FimException.class)
-				.hasMessage("XML Document does not provide a scheme.");
-	}
+	@Nested
+	class TestGetSchemeForIdentifier {
 
-	@Test
-	void shouldNoFindInvalidScheme() {
-		var scheme = fimService.getSchemeForIdentifier("test");
+		@Test
+		void shouldNoFindInvalidScheme() {
+			var scheme = service.getSchemeForIdentifier("test");
 
-		assertThat(FimSchemeIdentifier.fromString("unknown")).isEqualTo(scheme.getIdentifier());
-	}
+			assertThat(scheme.getIdentifier()).isEqualTo(FimSchemeIdentifier.fromString("unknown"));
+		}
 
-	@Test
-	void shouldFindVersammlungsScheme() {
-		var scheme = fimService.getSchemeForIdentifier("urn:xoev-de:xfall:standard:fim-s17000652_1.4");
+		@Test
+		void shouldFindVersammlungsScheme() {
+			var scheme = service.getSchemeForIdentifier("urn:xoev-de:xfall:standard:fim-s17000652_1.4");
 
-		assertThat(scheme).isNotNull();
-	}
+			assertThat(scheme).isNotNull();
+		}
 
-	@Test
-	void shouldFindTest2Scheme() {
-		var scheme = fimService.getSchemeForIdentifier("test2");
+		@Test
+		void shouldFindTest2Scheme() {
+			var scheme = service.getSchemeForIdentifier("test2");
 
-		assertThat(scheme).isNotNull();
+			assertThat(scheme).isNotNull();
+		}
 	}
 
-	@Test
-	void shouldTransformSimpleDocument() throws ParserConfigurationException, IOException, SAXException {
-		var formData = fimService.transformDocument(FimDocumentTestHelper.getTest2Document(), emptyFormData);
+	@Nested
+	class TestDoParse {
 
-		assertThat(FimDocumentTestHelper.getTest2AsMap()).isEqualTo(formData.getFormData());
-	}
-
-	@Test
-	void shouldTransformSimpleDocumentWithoutNamespace() throws ParserConfigurationException, IOException, SAXException {
-		var formData = fimService.transformDocument(FimDocumentTestHelper.getTest3Document(), emptyFormData);
+		@SneakyThrows
+		@Test
+		void shouldTransformSimpleDocument() {
+			var file = IncomingFileTestFactory.createBuilder().file(new File("src/test/resources/test2.xml")).build();
 
-		assertThat(FimDocumentTestHelper.getTest3AsMap()).isEqualTo(formData.getFormData());
-	}
+			var formData = service.doParse(file);
 
-	@Test
-	void shouldTransformDocument() throws ParserConfigurationException, IOException, SAXException {
-		var formData = fimService.transformDocument(FimDocumentTestHelper.getVersammlungsAnzeigeDocument(), emptyFormData);
+			assertThat(formData).isEqualTo(FimDocumentTestHelper.getTest2AsMap());
+		}
 
-		assertThat(formData).isNotNull();
-		assertThat(formData.getFormData()).isEqualTo(FimDocumentTestHelper.getVersammlungsAnzeigeAsMap());
-	}
+		@SneakyThrows
+		@Test
+		void shouldTransformSimpleDocumentWithoutNamespace() {
+			var file = IncomingFileTestFactory.createBuilder().file(new File("src/test/resources/test3.xml")).build();
 
-	@Test
-	void shouldHaveNameInHeader() throws ParserConfigurationException, IOException, SAXException {
-		var formData = fimService.transformDocument(FimDocumentTestHelper.getAntragDocument(), emptyFormData);
+			var formData = service.doParse(file);
 
-		assertThat(formData).isNotNull();
-		assertThat(formData.getHeader().getFormName()).isEqualTo("urn:fim:Versammlungsanzeige:1.4");
-	}
+			assertThat(formData).isEqualTo(FimDocumentTestHelper.getTest3AsMap());
+		}
 
-	@Test
-	void shouldHaveAntragsteller() throws ParserConfigurationException, IOException, SAXException {
-		var formData = fimService.transformDocument(FimDocumentTestHelper.getAntragDocument(), emptyFormData);
+		@SneakyThrows
+		@Test
+		void shouldTransformDocument() {
+			var file = IncomingFileTestFactory.createBuilder().file(new File("src/test/resources/S17000652V1.4_test01.xml")).build();
 
-		assertThat(formData).isNotNull();
-		assertThat(formData.getAntragsteller()).isNotNull();
-	}
+			var formData = service.doParse(file);
 
-	@Test
-	void shouldHaveAntragstellerAntragstellerData() throws ParserConfigurationException, IOException, SAXException {
-		var formData = fimService.transformDocument(FimDocumentTestHelper.getAntragDocument(), emptyFormData);
-
-		assertThat(formData).isNotNull();
-		assertThat(formData.getAntragsteller().getVorname()).isEqualTo("Jörg");
-		assertThat(formData.getAntragsteller().getNachname()).isEqualTo("Bolay");
-		assertThat(formData.getAntragsteller().getStrasse()).isEqualTo("Muster");
-		assertThat(formData.getAntragsteller().getHausnummer()).isEqualTo("1");
-		assertThat(formData.getAntragsteller().getPlz()).isEqualTo("12345");
-		assertThat(formData.getAntragsteller().getOrt()).isEqualTo("Muster");
+			assertThat(formData).isNotEmpty().isEqualTo(FimDocumentTestHelper.getVersammlungsAnzeigeAsMap());
+		}
 	}
 }
\ No newline at end of file
diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceTest.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceTest.java
index 1c4cb152a7e4e117bea59eda5fcf700029bbb51c..f94ad5635e9066f8b899aa622310fe651202415b 100644
--- a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceTest.java
+++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceTest.java
@@ -4,8 +4,6 @@ import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
-import java.util.Collections;
-import java.util.Map;
 import java.util.Optional;
 
 import org.apache.commons.lang3.StringUtils;
@@ -15,111 +13,53 @@ import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
-import org.mockito.Spy;
 import org.w3c.dom.Document;
 
 import com.thedeanda.lorem.LoremIpsum;
 
-import de.ozgcloud.eingang.common.formdata.FormData;
-import de.ozgcloud.eingang.common.formdata.FormDataTestFactory;
-import de.ozgcloud.eingang.common.formdata.FormHeader;
-import de.ozgcloud.eingang.common.formdata.FormHeaderTestFactory;
+import de.ozgcloud.eingang.common.formdata.FormData.Representations;
+import de.ozgcloud.eingang.common.formdata.FormDataControlTestFactory;
 import de.ozgcloud.eingang.fim.common.errorhandling.FimException;
+import de.ozgcloud.eingang.fim.common.xml.DocumentHelper;
 
 class FimServiceTest {
 
-	@Spy
 	@InjectMocks
 	private FimService service;
 	@Mock
-	private FimDataMapper mapper;
-	@Mock
-	private AntragstellerMapper antragstellerMapper;
-	@Mock
 	private FimSchemeHelper schemeHelper;
+	@Mock
+	private DocumentHelper documentHelper;
 
-	@DisplayName("Transform document")
+	@DisplayName("Get entry point")
 	@Nested
-	class TestTransformDocument {
-
-		@Mock
-		private Document doc;
-		@Mock
-		private FimScheme fimScheme;
-
-		private final FormData formData = FormDataTestFactory.create();
-		private final String schemeName = LoremIpsum.getInstance().getName();
-		private final Map<String, Object> formDataMap = Collections.emptyMap();
-		private final FormHeader formHeader = FormHeaderTestFactory.create();
-
-		@BeforeEach
-		void mock() {
-			doReturn(schemeName).when(service).getSchemeName(any());
-			doReturn(fimScheme).when(service).getSchemeForIdentifier(any());
-			doReturn(formHeader).when(service).buildFormHeader(any(), any());
-
-			when(mapper.apply(any(), any(), any())).thenReturn(formDataMap);
-			when(antragstellerMapper.map(any())).thenReturn(AntragstellerTestFactory.create());
-		}
+	class TestGetEntryPoint {
 
 		@Test
-		void shouldCallGetSchemeName() {
-			transformDocument();
+		void shouldReturnPrimaryRepresentationName() {
+			var result = service.getPrimaryRepresentationName(FormDataControlTestFactory.create());
 
-			verify(service).getSchemeName(doc);
+			assertThat(result).isEqualTo(FormDataControlTestFactory.PRIMARY_FORM_DATA_REPRESENTATION);
 		}
 
 		@Test
-		void shouldCallGetSchemeForIdentifier() {
-			transformDocument();
+		void shouldReturnDefaultNameOnMissingRepresentations() {
+			var formDataControl = FormDataControlTestFactory.createBuilder().representations(Optional.empty()).build();
 
-			verify(service).getSchemeForIdentifier(schemeName);
-		}
+			var result = service.getPrimaryRepresentationName(formDataControl);
 
-		@Test
-		void shouldCallFimDataMapper() {
-			transformDocument();
-
-			verify(mapper).apply(doc, fimScheme, formData);
+			assertThat(result).isEqualTo(FimService.DEFAULT_FORMDATA_REPRESENTATION_NAME);
 		}
 
 		@Test
-		void shouldCallAntragstellerMapper() {
-			transformDocument();
-
-			verify(antragstellerMapper).map(formDataMap);
-		}
-
-		@Test
-		void shouldCallBuildFormHeader() {
-			transformDocument();
-
-			verify(service).buildFormHeader(formData, formDataMap);
-		}
-
-		@DisplayName("should return formdata contains")
-		@Nested
-		class TestShouldReturn {
-
-			@DisplayName("antragsteller")
-			@Test
-			void shouldReturnAntragsteller() {
-				var transformedFormData = transformDocument();
-
-				assertThat(transformedFormData.getAntragsteller()).usingRecursiveComparison().isEqualTo(AntragstellerTestFactory.create());
-			}
-
-			@DisplayName("form header")
-			@Test
-			void shouldReturnFormHeader() {
-				var transformedFormData = transformDocument();
+		void shouldReturnDefaultOnMissingPrimaryRepresentation() {
+			var formDataControl = FormDataControlTestFactory.createBuilder()
+					.representations(Optional.of(Representations.builder().build()))
+					.build();
 
-				assertThat(transformedFormData.getHeader()).isEqualTo(formHeader);
-			}
-		}
+			var result = service.getPrimaryRepresentationName(formDataControl);
 
-		private FormData transformDocument() {
-			return service.transformDocument(doc, formData);
+			assertThat(result).isEqualTo(FimService.DEFAULT_FORMDATA_REPRESENTATION_NAME);
 		}
 	}
 
@@ -134,27 +74,27 @@ class FimServiceTest {
 
 		@Test
 		void shouldCallExtractSchemeName() {
-			doReturn(schemeName).when(service).extractSchemeName(any());
+			doReturn(schemeName).when(documentHelper).extractSchemeName(any());
 
 			service.getSchemeName(doc);
 
-			verify(service).extractSchemeName(doc);
+			verify(documentHelper).extractSchemeName(doc);
 		}
 
 		@Test
 		void shouldThrowExceptionOnEmptyName() {
-			doReturn(StringUtils.EMPTY).when(service).extractSchemeName(any());
+			doReturn(StringUtils.EMPTY).when(documentHelper).extractSchemeName(any());
 
 			assertThatThrownBy(() -> service.getSchemeName(doc)).isInstanceOf(FimException.class);
 		}
 
 		@Test
 		void shouldReturnValue() {
-			doReturn(schemeName).when(service).extractSchemeName(any());
+			doReturn(schemeName).when(documentHelper).extractSchemeName(any());
 
-			var name = service.getSchemeName(doc);
+			var schemeName = service.getSchemeName(doc);
 
-			assertThat(name).isEqualTo(schemeName);
+			assertThat(schemeName).isEqualTo(schemeName);
 		}
 	}
 
@@ -216,52 +156,4 @@ class FimServiceTest {
 			}
 		}
 	}
-
-	@DisplayName("Build form header")
-	@Nested
-	class TestBuildFormHeader {
-
-		private final Map<String, Object> formDataMap = Collections.emptyMap();
-		private final FormData formData = FormDataTestFactory.createBuilder()
-				.header(FormHeaderTestFactory.createBuilder().formName(null).build())
-				.build();
-		private final String vorgangName = LoremIpsum.getInstance().getName();
-
-		@Test
-		void shouldCallGetVorgangName() {
-			service.buildFormHeader(formData, formDataMap);
-
-			verify(service).getVorgangsName(formDataMap);
-		}
-
-		@DisplayName("form name")
-		@Nested
-		class TestFormName {
-
-			@Test
-			void shouldSetIfVorgangNameExists() {
-				doReturn(Optional.of(vorgangName)).when(service).getVorgangsName(any());
-
-				var formHeader = service.buildFormHeader(formData, formDataMap);
-
-				assertThat(formHeader.getFormName()).isEqualTo(vorgangName);
-			}
-
-			@Test
-			void shouldBeNullIfVorgangNameNotExist() {
-				doReturn(Optional.empty()).when(service).getVorgangsName(any());
-
-				var formHeader = service.buildFormHeader(formData, formDataMap);
-
-				assertThat(formHeader.getFormName()).isNull();
-			}
-		}
-
-		@Test
-		void shouldReturnValue() {
-			var formHeader = service.buildFormHeader(formData, formDataMap);
-
-			assertThat(formHeader).usingRecursiveComparison().isEqualTo(formData.getHeader());
-		}
-	}
 }
\ No newline at end of file
diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/ZustaendigeStelleMapperTest.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/ZustaendigeStelleMapperTest.java
index 23fa26757fccee0f45863f256e9f34522ccae81c..871e7010f31af9bb23bd4b9b8b8c74871f9ec54e 100644
--- a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/ZustaendigeStelleMapperTest.java
+++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/ZustaendigeStelleMapperTest.java
@@ -21,7 +21,7 @@ class ZustaendigeStelleMapperTest {
 		assertThat(parsed.getZustaendigeStelles()).hasSize(1).first().extracting(ZustaendigeStelle::getOrganisationseinheitenId)
 				.isEqualTo(FormMetaDataTestFactory.OE_ID);
 
-//		assertThat(parsed.getZustaendigeStelle().getOrganisationseinheitenId()).isEqualTo(FormMetaDataTestFactory.OE_ID);
+		assertThat(parsed.getZustaendigeStelles().get(0).getOrganisationseinheitenId()).isEqualTo(FormMetaDataTestFactory.OE_ID);
 	}
 
 	@Test
@@ -31,12 +31,12 @@ class ZustaendigeStelleMapperTest {
 		assertThat(parsed.getZustaendigeStelles()).hasSize(1).first().extracting(ZustaendigeStelle::getOrganisationseinheitenId)
 				.isNotNull();
 
-//		assertThat(parsed.getZustaendigeStelle()).isNotNull();
+		assertThat(parsed.getZustaendigeStelles().get(0)).isNotNull();
 	}
 
 	@Test
 	void shouldIgnoreMalformedDestinationId() {
-		var oeid = mapper.extractOrganisationsEinheitId("quatsch");
+		var oeid = mapper.extractOrganisationEinheitId("quatsch");
 
 		assertThat(oeid).isEmpty();
 	}
diff --git a/fim-adapter/src/test/resources/application-test.yml b/fim-adapter/src/test/resources/application-test.yml
index 148c1af75dbdac7d1dff1c5632d01cf06dae9a83..48cef7b0de1443abb0fe6f7b59d660c95704dae8 100644
--- a/fim-adapter/src/test/resources/application-test.yml
+++ b/fim-adapter/src/test/resources/application-test.yml
@@ -1,4 +1,6 @@
-fim:
-  schemeLocations:
-    - fim-s17000652_1.4/S17000652V1.4_xfall.xsd
-    - test2/test2.xsd
\ No newline at end of file
+ozgcloud:
+  eingang:
+    fim:
+      schemeLocations:
+        - fim-s17000652_1.4/S17000652V1.4_xfall.xsd
+        - test2/test2.xsd
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 065dc6a05b19957b9f766f2a823c33875e5df10e..ac4581018bf79d08f27a2c220b20419480ca2c25 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
 	<parent>
 		<groupId>de.ozgcloud.common</groupId>
 		<artifactId>ozgcloud-common-parent</artifactId>
-		<version>4.7.0</version>
+		<version>4.9.0-SNAPSHOT</version>
 		<relativePath/> <!-- lookup parent from repository -->
 	</parent>
 
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/intelliform/IntelliFormRepresentationAdapter.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/intelliform/IntelliFormRepresentationAdapter.java
index d96052447475590512a9ac5cd2280ebe22d0715f..092e2a631b3da1cd8394e2ffbe3228cd53e7ea8b 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/intelliform/IntelliFormRepresentationAdapter.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/intelliform/IntelliFormRepresentationAdapter.java
@@ -5,6 +5,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
+import java.util.function.Predicate;
 import java.util.stream.Collector;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -26,6 +27,8 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class IntelliFormRepresentationAdapter {
 
+	private static final Predicate<IncomingFile> HAS_XML_CONTENT_TYPE = file -> file.getContentType().contains("xml");
+
 	static final String INTELLIFORM_TYPENAME = "http://xmlns.cit.de/intelliform/transaction";
 
 	static final String FILE = "file";
@@ -41,8 +44,7 @@ public class IntelliFormRepresentationAdapter {
 			"t:customer",
 			"t:customer-id",
 			"t:client",
-			"t:client-id"
-	);
+			"t:client-id");
 	public static final List<String> CUSTOM_HEADER_ATTRIBUTE_NAMES = List.of(
 			"u:saml_legacypostkorbhandle",
 			"u:saml_givenname",
@@ -54,15 +56,13 @@ public class IntelliFormRepresentationAdapter {
 			"u:saml_postaladdress",
 			"u:saml_postalcode",
 			"u:saml_localityname",
-			ServiceKontoFactory.KEY_BAYERN_ID_TRUST_LEVEL
-	);
+			ServiceKontoFactory.KEY_BAYERN_ID_TRUST_LEVEL);
 
 	private static final Collector<Map.Entry<String, ?>, ?, Map<String, Object>> ORDERED_MAP_ENTRY_COLLECTOR = Collectors.toMap(
 			Map.Entry::getKey,
 			Map.Entry::getValue,
 			(u, v) -> v,
-			LinkedHashMap::new
-	);
+			LinkedHashMap::new);
 
 	private final XmlToJavaMapsMapper xmlToJavaMapsMapper;
 
@@ -72,25 +72,23 @@ public class IntelliFormRepresentationAdapter {
 	}
 
 	Optional<Document> findIntelliFormXMLRepresentation(FormData formData) {
-		return streamXMLDocumentsFromRepresentations(formData)
-				.filter(document -> {
-					var element = document.getDocumentElement();
-					var attribute = element.getAttribute("xmlns:t");
-					return attribute.equals(INTELLIFORM_TYPENAME);
-				})
-				.findFirst();
+		return streamXMLDocumentsFromRepresentations(formData).filter(this::isIntelliFormDocument).findFirst();
+	}
+
+	private boolean isIntelliFormDocument(Document document) {
+		return document.getDocumentElement().getAttribute("xmlns:t").equals(INTELLIFORM_TYPENAME);
 	}
 
 	Stream<Document> streamXMLDocumentsFromRepresentations(FormData formData) {
-		return formData.getRepresentations().stream()
-				.filter(representation -> representation.getContentType().contains("xml"))
-				.flatMap(xmlRepresentation -> {
-					try {
-						return Stream.of(xmlToJavaMapsMapper.parseAsW3cDocument(xmlRepresentation.getContentStream()));
-					} catch (TechnicalException exception) {
-						return Stream.empty();
-					}
-				});
+		return formData.getRepresentations().stream().filter(HAS_XML_CONTENT_TYPE).flatMap(this::parseDocument);
+	}
+
+	private Stream<Document> parseDocument(IncomingFile xmlRepresentation) {
+		try {
+			return Stream.of(xmlToJavaMapsMapper.parseAsW3cDocument(xmlRepresentation.getContentStream()));
+		} catch (TechnicalException exception) {
+			return Stream.empty();
+		}
 	}
 
 	public FormData adaptByRepresentations(FormData formData) {
@@ -102,10 +100,8 @@ public class IntelliFormRepresentationAdapter {
 				.attachments(formData.getAttachments())
 				.formData(Stream.concat(
 						getFormDataEntriesFromDocument(document, formData.getAttachments()),
-						Map.of(
-								HEADER_FIELD, createHeaderMap(document)
-						).entrySet().stream()
-				).collect(ORDERED_MAP_ENTRY_COLLECTOR))
+						Map.of(HEADER_FIELD, createHeaderMap(document)).entrySet().stream())
+						.collect(ORDERED_MAP_ENTRY_COLLECTOR))
 				.build();
 	}
 
@@ -115,8 +111,7 @@ public class IntelliFormRepresentationAdapter {
 				.map(IncomingFile::getVendorId)
 				.collect(Collectors.toSet());
 
-		return xmlToJavaMapsMapper.mapXmlToJavaMaps(document).entrySet()
-				.stream()
+		return xmlToJavaMapsMapper.mapXmlToJavaMaps(document).entrySet().stream()
 				.filter(entry -> !isUploadElementWhichRefersToAttachment(entry.getValue(), attachmentVendorIds));
 	}