diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/common/ReadZipException.java b/common/src/main/java/de/ozgcloud/eingang/common/zip/ReadZipException.java
similarity index 82%
rename from semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/common/ReadZipException.java
rename to common/src/main/java/de/ozgcloud/eingang/common/zip/ReadZipException.java
index c3fcc85a910df48282884211d68617f4095248df..2a50bc6bc844a3d0a3f2aec157d1e93f1004f338 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/common/ReadZipException.java
+++ b/common/src/main/java/de/ozgcloud/eingang/common/zip/ReadZipException.java
@@ -1,4 +1,4 @@
-package de.ozgcloud.eingang.semantik.common;
+package de.ozgcloud.eingang.common.zip;
 
 public class ReadZipException extends RuntimeException {
 
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/common/ZipAttachmentReader.java b/common/src/main/java/de/ozgcloud/eingang/common/zip/ZipAttachmentReader.java
similarity index 92%
rename from semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/common/ZipAttachmentReader.java
rename to common/src/main/java/de/ozgcloud/eingang/common/zip/ZipAttachmentReader.java
index 02b4e95012b0343aa44ebd79f6f0305135ad9234..b205c7e48052942ce401c52565c628857383977b 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/common/ZipAttachmentReader.java
+++ b/common/src/main/java/de/ozgcloud/eingang/common/zip/ZipAttachmentReader.java
@@ -21,11 +21,10 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-package de.ozgcloud.eingang.semantik.common;
+package de.ozgcloud.eingang.common.zip;
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -43,7 +42,6 @@ import java.util.zip.ZipInputStream;
 import org.springframework.util.MimeTypeUtils;
 
 import de.ozgcloud.eingang.common.errorhandling.TechnicalException;
-import de.ozgcloud.eingang.common.formdata.DeleteOnCloseInputStream;
 import de.ozgcloud.eingang.common.formdata.IncomingFile;
 import lombok.Getter;
 import lombok.extern.log4j.Log4j2;
@@ -214,27 +212,10 @@ public class ZipAttachmentReader {
 				.build();
 	}
 
-	@Deprecated
-	public InputStream getSourceZipAsStream() {
-		try {
-			return new DeleteOnCloseInputStream(sourceZipFile);
-		} catch (FileNotFoundException e) {
-			throw new TechnicalException("Original ZIP was deleted", e);
-		}
-	}
-
 	public File getSourceZip() {
 		return sourceZipFile;
 	}
 
-	public long getSourceFileSize() {
-		try {
-			return Files.size(sourceZipFile.toPath());
-		} catch (IOException e) {
-			throw new TechnicalException("Cannot get size of source ZIP.", e);
-		}
-	}
-
 	String getContentType(String name) {
 		Objects.requireNonNull(name);
 		return Objects.requireNonNullElse(URLConnection.guessContentTypeFromName(name), MimeTypeUtils.APPLICATION_OCTET_STREAM_VALUE);
diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/common/ZipAttachmentReaderTest.java b/common/src/test/java/de/ozgcloud/eingang/common/zip/ZipAttachmentReaderTest.java
similarity index 82%
rename from semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/common/ZipAttachmentReaderTest.java
rename to common/src/test/java/de/ozgcloud/eingang/common/zip/ZipAttachmentReaderTest.java
index f6e1fa7e07c716a5b00a059ea8e46c1c35d16116..d5c4bea2a9581247067a875ca94ac6cac28482b4 100644
--- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/common/ZipAttachmentReaderTest.java
+++ b/common/src/test/java/de/ozgcloud/eingang/common/zip/ZipAttachmentReaderTest.java
@@ -21,7 +21,7 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-package de.ozgcloud.eingang.semantik.common;
+package de.ozgcloud.eingang.common.zip;
 
 import static org.assertj.core.api.Assertions.*;
 import static org.junit.jupiter.api.Assertions.*;
@@ -33,9 +33,11 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.List;
 import java.util.function.Predicate;
+import java.util.stream.Stream;
 import java.util.zip.ZipException;
 import java.util.zip.ZipInputStream;
 
+import de.ozgcloud.eingang.common.formdata.DeleteOnCloseInputStream;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.Pair;
 import org.junit.jupiter.api.Assertions;
@@ -47,8 +49,6 @@ import org.springframework.util.MimeTypeUtils;
 
 import de.ozgcloud.common.test.TestUtils;
 import de.ozgcloud.eingang.common.formdata.IncomingFile;
-import de.ozgcloud.eingang.semantik.common.ReadZipException;
-import de.ozgcloud.eingang.semantik.common.ZipAttachmentReader;
 import lombok.SneakyThrows;
 
 class ZipAttachmentReaderTest {
@@ -75,20 +75,11 @@ class ZipAttachmentReaderTest {
 
 		@SneakyThrows
 		private void verifySourceFileSavedInTmpDirectory() {
-			List<Path> foundFiles = Files.find(Path.of(getTmpDirectoryPath()), 1,
-					((path, basicFileAttributes) -> path.getFileName().toString().startsWith(ZipAttachmentReader.SOURCE_ZIP_PREFIX)))
-					.toList();
-			assertThat(foundFiles).hasSize(1).first();
-		}
-
-		@Test
-		@DisplayName("should return readable input stream for source zip file")
-		void shouldReturnSourceStream() {
-			var expectedContent = TestUtils.loadFile(ZIP_1_FILE_NAME);
-
-			var sourceZipAsStream = createZipAttachment(ZIP_1_FILE_NAME).getSourceZipAsStream();
-
-			assertThat(sourceZipAsStream).hasSameContentAs(expectedContent);
+			try(Stream<Path> paths = Files.find(Path.of(getTmpDirectoryPath()), 1,
+					((path, basicFileAttributes) -> path.getFileName().toString().startsWith(ZipAttachmentReader.SOURCE_ZIP_PREFIX)))) {
+				List<Path> foundFiles = paths.toList();
+				assertThat(foundFiles).hasSize(1);
+			}
 		}
 
 		@Test
@@ -96,7 +87,7 @@ class ZipAttachmentReaderTest {
 		void shouldFailSilentByEncryptedZip() {
 			var zipAttachment = createZipAttachment(ZIP_ENCRYPTED);
 
-			assertThrows(ReadZipException.class, () -> zipAttachment.readContent());
+			assertThrows(ReadZipException.class, zipAttachment::readContent);
 		}
 
 		private static ZipAttachmentReader createZipAttachment(String fileName) {
@@ -137,7 +128,7 @@ class ZipAttachmentReaderTest {
 			var attachmentContentList = new ZipAttachmentReader().readContent(loadZip(ZIP_1_FILE_NAME));
 
 			assertThat(attachmentContentList).hasSize(1);
-			var contentEntry = attachmentContentList.get(0);
+			var contentEntry = attachmentContentList.getFirst();
 			assertThat(contentEntry.getName()).isEqualTo(content_file_0_name);
 			assertThat(contentEntry.getSize()).isEqualTo(content_file_0_size);
 			assertThat(contentEntry.getContentStream()).hasSameContentAs(TestUtils.loadFile(content_file_0_name));
@@ -171,6 +162,7 @@ class ZipAttachmentReaderTest {
 			entry.getContentStreamForFinalRead().close();
 		}
 
+		@SneakyThrows
 		@Test
 		@DisplayName("should return readable input stream for source zip if cannot extract content")
 		void shouldReturnSourceStreamByError() {
@@ -179,7 +171,7 @@ class ZipAttachmentReaderTest {
 
 			assertThrows(ReadZipException.class, attachment::readContent);
 
-			assertThat(attachment.getSourceZipAsStream()).hasSameContentAs(new ByteArrayInputStream(attachmentContent));
+			assertThat(new DeleteOnCloseInputStream(attachment.getSourceZip())).hasSameContentAs(new ByteArrayInputStream(attachmentContent));
 		}
 
 		@Test
@@ -189,7 +181,7 @@ class ZipAttachmentReaderTest {
 
 			var zipAttachment = ZipAttachmentReader.from(invalidZip, "invalid");
 
-			assertThrows(ReadZipException.class, () -> zipAttachment.readContent());
+			assertThrows(ReadZipException.class, zipAttachment::readContent);
 		}
 
 		@Test
@@ -212,30 +204,35 @@ class ZipAttachmentReaderTest {
 		private static final String ZIP_BOMB_WITH_MANY_FILES = "zipbombs/filewithmanyfiles.dat.zip";
 
 		@Test
+		@SneakyThrows
 		void shouldFailOnExtremCompressionRatio() {
-			var zip = loadZip(ZIP_BOMB_WITH_BIG_NULL_FILE_CONTENT);
+			try(var zip = loadZip(ZIP_BOMB_WITH_BIG_NULL_FILE_CONTENT)) {
 
-			ReadZipException exception = assertThrows(ReadZipException.class, () -> reader.readContent(zip));
+				ReadZipException exception = assertThrows(ReadZipException.class, () -> reader.readContent(zip));
 
-			assertThat(exception.getMessage()).contains("Ratio between compressed and uncompressed data is highly suspicious");
+				assertThat(exception.getMessage()).contains("Ratio between compressed and uncompressed data is highly suspicious");
+			}
 		}
 
 		@Test
 		@SneakyThrows
 		void shouldFailOnTotalExtractedSize() {
-			var zip = loadZip(ZIP_1_FILE_NAME);
-			reader.readContent(zip);
+			try(var zip = loadZip(ZIP_1_FILE_NAME)) {
+				reader.readContent(zip);
 
-			verify(reader).checkTotalExtractedSize(157);
+				verify(reader).checkTotalExtractedSize(157);
+			}
 		}
 
 		@Test
+		@SneakyThrows
 		void shouldFailOnTotalZipEntries() {
-			var zip = loadZip(ZIP_BOMB_WITH_MANY_FILES);
+			try(var zip = loadZip(ZIP_BOMB_WITH_MANY_FILES)) {
 
-			ReadZipException exception = assertThrows(ReadZipException.class, () -> reader.readContent(zip));
+				ReadZipException exception = assertThrows(ReadZipException.class, () -> reader.readContent(zip));
 
-			assertThat(exception.getMessage()).contains("Total entries in zip file exceeded");
+				assertThat(exception.getMessage()).contains("Total entries in zip file exceeded");
+			}
 		}
 	}
 
@@ -302,12 +299,16 @@ class ZipAttachmentReaderTest {
 
 	@SneakyThrows
 	private static void cleanupTempFiles() {
-		Files.walk(Path.of(TMP_DIRECTORY_PATH), 1).filter(hasNameSuffix).map(Path::toFile).forEach(File::delete);
+		try(Stream<Path> paths = Files.walk(Path.of(TMP_DIRECTORY_PATH), 1)) {
+			paths.filter(hasNameSuffix).map(Path::toFile).forEach(File::delete);
+		}
 	}
 
 	@SneakyThrows
 	private static boolean noFilesWithSuffixInTempDirectory() {
-		return Files.walk(Path.of(TMP_DIRECTORY_PATH), 1).noneMatch(hasNameSuffix);
+		try(Stream<Path> paths = Files.walk(Path.of(TMP_DIRECTORY_PATH), 1)) {
+			return paths.noneMatch(hasNameSuffix);
+		}
 	}
 
 	@SneakyThrows
diff --git a/semantik-adapter/src/test/resources/attachment-1file.zip b/common/src/test/resources/attachment-1file.zip
similarity index 100%
rename from semantik-adapter/src/test/resources/attachment-1file.zip
rename to common/src/test/resources/attachment-1file.zip
diff --git a/semantik-adapter/src/test/resources/attachment-2files.zip b/common/src/test/resources/attachment-2files.zip
similarity index 100%
rename from semantik-adapter/src/test/resources/attachment-2files.zip
rename to common/src/test/resources/attachment-2files.zip
diff --git a/semantik-adapter/src/test/resources/attachment-empty.zip b/common/src/test/resources/attachment-empty.zip
similarity index 100%
rename from semantik-adapter/src/test/resources/attachment-empty.zip
rename to common/src/test/resources/attachment-empty.zip
diff --git a/semantik-adapter/src/test/resources/attachment-encrypted.zip b/common/src/test/resources/attachment-encrypted.zip
similarity index 100%
rename from semantik-adapter/src/test/resources/attachment-encrypted.zip
rename to common/src/test/resources/attachment-encrypted.zip
diff --git a/semantik-adapter/src/test/resources/zip-file-0.txt b/common/src/test/resources/zip-file-0.txt
similarity index 100%
rename from semantik-adapter/src/test/resources/zip-file-0.txt
rename to common/src/test/resources/zip-file-0.txt
diff --git a/semantik-adapter/src/test/resources/zip-file-1.txt b/common/src/test/resources/zip-file-1.txt
similarity index 100%
rename from semantik-adapter/src/test/resources/zip-file-1.txt
rename to common/src/test/resources/zip-file-1.txt
diff --git a/semantik-adapter/src/test/resources/zipbombs/filewithmanyfiles.dat.zip b/common/src/test/resources/zipbombs/filewithmanyfiles.dat.zip
similarity index 100%
rename from semantik-adapter/src/test/resources/zipbombs/filewithmanyfiles.dat.zip
rename to common/src/test/resources/zipbombs/filewithmanyfiles.dat.zip
diff --git a/semantik-adapter/src/test/resources/zipbombs/filewithnulls.dat.zip b/common/src/test/resources/zipbombs/filewithnulls.dat.zip
similarity index 100%
rename from semantik-adapter/src/test/resources/zipbombs/filewithnulls.dat.zip
rename to common/src/test/resources/zipbombs/filewithnulls.dat.zip
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsFilesMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsFilesMapper.java
index f4e91092747456556d75874ee1a8cddc12c5dfc2..d63b1e4f5a502a5efce7f280b107422e0ee83a64 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsFilesMapper.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsFilesMapper.java
@@ -33,7 +33,7 @@ import org.springframework.stereotype.Component;
 import de.ozgcloud.eingang.common.formdata.FormData;
 import de.ozgcloud.eingang.common.formdata.IncomingFile;
 import de.ozgcloud.eingang.common.formdata.IncomingFileGroup;
-import de.ozgcloud.eingang.semantik.common.ZipAttachmentReader;
+import de.ozgcloud.eingang.common.zip.ZipAttachmentReader;
 import de.ozgcloud.eingang.semantik.enginebased.FilesMapperHelper;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/xta/XtaEngineBasedAdapter.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/xta/XtaEngineBasedAdapter.java
index a74ff267bd5984e068abd0fc00a9bd6c2469e05d..4d63028f1527aff9f19e37bae5f0e047ca6301b8 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/xta/XtaEngineBasedAdapter.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/xta/XtaEngineBasedAdapter.java
@@ -1,26 +1,13 @@
 package de.ozgcloud.eingang.semantik.enginebased.xta;
 
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-
 import de.ozgcloud.eingang.common.formdata.FormData;
 import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter;
 
 public class XtaEngineBasedAdapter implements EngineBasedSemantikAdapter {
 
-	@Autowired
-	private List<XtaEngineBasedMapper> mappers;
-
 	@Override
 	public FormData parseFormData(FormData formData) {
-		var processed = formData;
-
-		for (var mapper : mappers) {
-			processed = mapper.parseFormData(processed);
-		}
-
-		return processed;
+		return formData;
 	}
 
 }
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/xta/XtaEngineBasedMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/xta/XtaEngineBasedMapper.java
deleted file mode 100644
index 085f7f230d0b65cd06215654e1554c31cce7baeb..0000000000000000000000000000000000000000
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/xta/XtaEngineBasedMapper.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package de.ozgcloud.eingang.semantik.enginebased.xta;
-
-import de.ozgcloud.eingang.semantik.enginebased.EngineBasedMapper;
-
-public interface XtaEngineBasedMapper extends EngineBasedMapper {
-
-}
diff --git a/xta-adapter/pom.xml b/xta-adapter/pom.xml
index 49348c3407d54b4c553eee7753a18e15d4775872..4edb48cfc8aaa8cbade56f0b083beccc15d08d74 100644
--- a/xta-adapter/pom.xml
+++ b/xta-adapter/pom.xml
@@ -95,6 +95,13 @@
 			<version>${mockwebserver.version}</version>
 			<scope>test</scope>
 		</dependency>
+		<!-- Test -->
+		<dependency>
+			<groupId>de.ozgcloud.eingang</groupId>
+			<artifactId>common</artifactId>
+			<type>test-jar</type>
+			<scope>test</scope>
+		</dependency>
 	</dependencies>
 	
 	<build>
diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/WsHeaderAddingInterceptor.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/WsHeaderAddingInterceptor.java
index a685b0a20bfc5a93b90dcd606cebb2dea31e8187..6f936847d3c5f66dfd55c05b35cf9062d725a44c 100644
--- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/WsHeaderAddingInterceptor.java
+++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/WsHeaderAddingInterceptor.java
@@ -1,6 +1,6 @@
 package de.ozgcloud.eingang.xta;
 
-import org.springframework.beans.factory.annotation.Autowired;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Component;
 import org.springframework.ws.client.WebServiceClientException;
 import org.springframework.ws.client.support.interceptor.ClientInterceptor;
@@ -8,7 +8,6 @@ import org.springframework.ws.context.MessageContext;
 import org.springframework.ws.soap.SoapMessage;
 
 import de.ozgcloud.eingang.common.errorhandling.TechnicalException;
-import eu.osci.ws._2014._10.transport.OriginatorsType;
 import eu.osci.ws._2014._10.transport.PartyIdentifierType;
 import eu.osci.ws._2014._10.transport.PartyType;
 import jakarta.validation.Valid;
@@ -17,11 +16,11 @@ import jakarta.xml.bind.JAXBElement;
 import jakarta.xml.bind.JAXBException;
 
 @Component
+@RequiredArgsConstructor
 class WsHeaderAddingInterceptor implements ClientInterceptor {
 
-	@Autowired
 	@Valid
-	private XtaProperties properties;
+	private final XtaProperties properties;
 
 	@Override
 	public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException {
@@ -47,9 +46,6 @@ class WsHeaderAddingInterceptor implements ClientInterceptor {
 		identifier.setValue(properties.getIdentifier());
 		partyType.setIdentifier(identifier);
 
-		var origin = new OriginatorsType();
-		origin.setAuthor(partyType);
-
 		return objectFactory.createAuthor(partyType);
 	}
 
diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java
index f2e05fc7684fe33d1db3dd42ae46f1f044f23ef8..d051b2ad41ec47e054eb530118efc865036af643 100644
--- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java
+++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java
@@ -9,7 +9,10 @@ import de.ozgcloud.eingang.common.formdata.FormData;
 import de.ozgcloud.eingang.common.formdata.FormHeader;
 import de.ozgcloud.eingang.common.formdata.IncomingFile;
 
-@Mapper
+@Mapper(
+		/*uses = XtaZipRepresentationsMapper.class,
+		injectionStrategy = InjectionStrategy.CONSTRUCTOR*/
+)
 interface XtaMessageMapper {
 
 	@Mapping(target = "antragsteller", ignore = true)
diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRemoteService.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRemoteService.java
index 5da39aab1d30059a0e4577686a7427bc860f6278..b543be4a74e03d1f6f453f3071ad51a872c71495 100644
--- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRemoteService.java
+++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRemoteService.java
@@ -10,7 +10,6 @@ import java.util.Iterator;
 import java.util.stream.Stream;
 
 import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
 
 import org.apache.commons.io.IOUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -104,19 +103,16 @@ class XtaRemoteService {
 	}
 
 	WebServiceMessageCallback buildMarshalCallBack(Object jaxbElement, ActionCallback callback) {
-		return new WebServiceMessageCallback() {
-			@Override
-			public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException {
-				MarshallingUtils.marshal(osciMarshaller, jaxbElement, message);
-				callback.doWithMessage(message);
-			}
+		return message -> {
+			MarshallingUtils.marshal(osciMarshaller, jaxbElement, message);
+			callback.doWithMessage(message);
 		};
 	}
 
 	WebServiceMessageExtractor<MsgStatusListTypeAndHeaderResponse> buildHeaderExtractor() {
-		return new WebServiceMessageExtractor<MsgStatusListTypeAndHeaderResponse>() {
+		return new WebServiceMessageExtractor<>() {
 			@Override
-			public MsgStatusListTypeAndHeaderResponse extractData(WebServiceMessage message) throws IOException, TransformerException {
+			public MsgStatusListTypeAndHeaderResponse extractData(WebServiceMessage message) throws IOException {
 
 				MsgBoxResponseType header = extractHeader(message);
 
@@ -277,7 +273,7 @@ class XtaRemoteService {
 		@SuppressWarnings("unchecked")
 		ExceptionType exceptionType = ((JAXBElement<ExceptionType>) xoevMarshaller.unmarshal(soapfaultdetailelement1.getSource())).getValue();
 
-		return DETAIL_LOG_TEMPLATE.formatted(exceptionType.getErrorCode().getCode(), exceptionType.getErrorCode().getName().toString());
+		return DETAIL_LOG_TEMPLATE.formatted(exceptionType.getErrorCode().getCode(), exceptionType.getErrorCode().getName());
 
 	}
 
diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRemoteServiceConfiguration.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRemoteServiceConfiguration.java
index 8668263d9b0914c6458296220db651e6b26552c7..10fad61ff239daa3ce420d95feaa2373b513dfc6 100644
--- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRemoteServiceConfiguration.java
+++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRemoteServiceConfiguration.java
@@ -11,7 +11,7 @@ import java.security.cert.CertificateException;
 
 import javax.net.ssl.KeyManagerFactory;
 
-import org.springframework.beans.factory.annotation.Autowired;
+import lombok.RequiredArgsConstructor;
 import org.springframework.boot.webservices.client.WebServiceTemplateCustomizer;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -28,12 +28,12 @@ import lombok.extern.log4j.Log4j2;
 
 @Log4j2
 @Configuration
+@RequiredArgsConstructor
 public class XtaRemoteServiceConfiguration {
 
 	static final String URI_TEMPLATE = "%s://%s/MB_XTA-WS/XTA210msgBoxPort.svc";
 
-	@Autowired
-	private XtaProperties properties;
+	private final XtaProperties properties;
 
 	@Bean
 	Jaxb2Marshaller osciTransportMarshaller() {
diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRunner.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRunner.java
index 0c497d51f85560d84085d663c2bc32aaf46a408e..5f580e13f68ed182ac9886601b9ff519edb94782 100644
--- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRunner.java
+++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRunner.java
@@ -1,6 +1,6 @@
 package de.ozgcloud.eingang.xta;
 
-import org.springframework.beans.factory.annotation.Autowired;
+import lombok.RequiredArgsConstructor;
 import org.springframework.context.ApplicationListener;
 import org.springframework.context.annotation.Profile;
 import org.springframework.context.event.ContextRefreshedEvent;
@@ -11,15 +11,15 @@ import de.ozgcloud.eingang.semantik.SemantikAdapter;
 import lombok.NonNull;
 import lombok.extern.log4j.Log4j2;
 
+
 @Profile("!itcase")
 @Log4j2
 @Component
+@RequiredArgsConstructor
 class XtaRunner implements ApplicationListener<ContextRefreshedEvent> {
 
-	@Autowired
-	private XtaService service;
-	@Autowired
-	private SemantikAdapter semantikAdapter;
+	private final XtaService service;
+	private final SemantikAdapter semantikAdapter;
 
 	@Override
 	public void onApplicationEvent(ContextRefreshedEvent event) {
diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java
index 9e60b84b7ac4ba0dafc491ae1d80742a4d002d58..ffbd98129eb61cda6171ff740b54084fb17e5e0d 100644
--- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java
+++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java
@@ -4,8 +4,8 @@ import java.util.Spliterators;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import de.ozgcloud.eingang.common.formdata.FormData;
@@ -16,17 +16,16 @@ import lombok.extern.log4j.Log4j2;
 
 @Service
 @Log4j2
+@RequiredArgsConstructor
 class XtaService {
 
 	static final String DFOERDERMITTELANTRAG_MESSAGE_TYPE = "Geschaeftsgang.Geschaeftsgang.0201";
 	static final int VORGANG_NUMMER_SUFFIX_LENGTH = 4;
 
-	@Autowired
-	private XtaRemoteService remoteService;
-	@Autowired
-	private XtaMessageMapper mapper;
-	@Autowired
-	private VorgangNummerSupplier vorgangNummerSupplier;
+	private final XtaRemoteService remoteService;
+	private final XtaMessageMapper mapper;
+	private final XtaZipRepresentationsMapper zipMapper;
+	private final VorgangNummerSupplier vorgangNummerSupplier;
 
 	public Stream<FormData> getMessages() {
 		return createXtaMessageStream().filter(this::filterByMessageType).map(this::getFormData);
@@ -51,6 +50,7 @@ class XtaService {
 	public FormData getFormData(@NonNull XtaMessageMetaData metaData) {
 		var msg = remoteService.getMessage(metaData.getMessageId());
 		var formData = mapper.toFormData(msg.toBuilder().metaData(metaData).build());
+		formData = zipMapper.extractZipToRepresentations(formData);
 		return updateHeader(formData);
 	}
 
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/xta/XtaZipRepresentationsMapper.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaZipRepresentationsMapper.java
similarity index 81%
rename from semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/xta/XtaZipRepresentationsMapper.java
rename to xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaZipRepresentationsMapper.java
index 9a0814f1efa9b86843d27db360a53986091b2dd2..d404967e1c19fdb94ce93316fd0163f837ebb5e6 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/xta/XtaZipRepresentationsMapper.java
+++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaZipRepresentationsMapper.java
@@ -1,26 +1,24 @@
-package de.ozgcloud.eingang.semantik.enginebased.xta;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.function.Predicate;
-
-import org.springframework.stereotype.Component;
+package de.ozgcloud.eingang.xta;
 
 import de.ozgcloud.eingang.common.formdata.FormData;
 import de.ozgcloud.eingang.common.formdata.IncomingFile;
-import de.ozgcloud.eingang.semantik.common.ZipAttachmentReader;
+import de.ozgcloud.eingang.common.zip.ZipAttachmentReader;
 import lombok.extern.log4j.Log4j2;
+import org.springframework.stereotype.Component;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.function.Predicate;
 
-@Component
 @Log4j2
-public class XtaZipRepresentationsMapper implements XtaEngineBasedMapper {
+@Component
+public class XtaZipRepresentationsMapper {
 
 	public static final String ZIP_CONTENT_TYPE = "application/zip";
 
 	static final Predicate<IncomingFile> IS_ZIP_FILE = contentType -> ZIP_CONTENT_TYPE.equals(contentType.getContentType());
 
-	@Override
-	public FormData parseFormData(FormData srcFormData) {
+	public FormData extractZipToRepresentations(FormData srcFormData) {
 
 		List<IncomingFile> extractedFiles = srcFormData.getRepresentations().stream()
 				.filter(IS_ZIP_FILE)
diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaApplicationTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaApplicationTest.java
index 59bddcf63df7c9135a753a6ee4aab49a375bd087..2038131bb388f729bbf5b48f4d39e9729557bddc 100644
--- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaApplicationTest.java
+++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaApplicationTest.java
@@ -1,8 +1,8 @@
 package de.ozgcloud.eingang.xta;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.*;
 
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -22,7 +22,7 @@ class XtaApplicationTest {
 	@Test
 	void startup() {
 		// should start without exception;
-		assertTrue(true);
+		Assertions.assertTrue(true);
 	}
 
 	@Test
diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java
index beb10f64917e4923553562d5ffa19298e4a58db8..e1229a00cb142dfb4b4fdd97dd03a3d419fd923d 100644
--- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java
+++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java
@@ -5,14 +5,18 @@ import static org.assertj.core.api.InstanceOfAssertFactories.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
+import de.ozgcloud.eingang.semantik.SemantikAdapter;
+import lombok.RequiredArgsConstructor;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Captor;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootContextLoader;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
 import org.springframework.test.context.ActiveProfiles;
 
 import de.ozgcloud.common.test.TestUtils;
@@ -110,9 +114,12 @@ class XtaITCase {
 
 }
 
+@RequiredArgsConstructor
 class ActivateXTARunnerConfig {
+	private final XtaService service;
+	private final SemantikAdapter semantikAdapter;
 	@Bean
 	XtaRunner xtaRunner() {
-		return new XtaRunner();
+		return new XtaRunner(service, semantikAdapter);
 	}
-}
\ No newline at end of file
+}
diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaRemoteServiceConfigurationTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaRemoteServiceConfigurationTest.java
index cb5c3f846497e9e8d9c2e39dc1fb58e4f14144da..59d354ecb7c21690e7656712e51c7c5bc56428a3 100644
--- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaRemoteServiceConfigurationTest.java
+++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaRemoteServiceConfigurationTest.java
@@ -3,11 +3,13 @@ package de.ozgcloud.eingang.xta;
 import static org.assertj.core.api.Assertions.*;
 
 import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
 import org.mockito.Spy;
 
 class XtaRemoteServiceConfigurationTest {
 
 	@Spy
+	@InjectMocks
 	XtaRemoteServiceConfiguration configuration;
 
 	@Test
diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java
index d1fc3de86803ba5fc9c49a574011b41adf8e3be0..2352d4386a225626f4272d6a87031139326cddbd 100644
--- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java
+++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java
@@ -32,14 +32,15 @@ class XtaServiceTest {
 	@Mock
 	private XtaMessageMapper mapper;
 	@Mock
+	private XtaZipRepresentationsMapper zipMapper;
+	@Mock
 	private VorgangNummerSupplier vorgangNummerSupplier;
 
 	@Nested
 	class TestGetMessagesAsFormData {
 
-		private XtaMessageMetaDatasAndHeader metaData = XtaMessageMetaDatasAndHeaderTestFactory.create();
-		private XtaMessageMetaData messageMetaData = XtaMessageMetaDataTestFactory.create();
-		private XtaMessage message = XtaMessageTestFactory.create();
+		private final XtaMessageMetaData messageMetaData = XtaMessageMetaDataTestFactory.create();
+		private final XtaMessage message = XtaMessageTestFactory.create();
 
 		@BeforeEach
 		void setup() {
@@ -55,8 +56,7 @@ class XtaServiceTest {
 
 		@Test
 		void shouldCallFilterByMessageType() {
-			when(mapper.toFormData(any())).thenReturn(FormDataTestFactory.create());
-			when(remoteService.getMessage(any(XtaMessageId.class))).thenReturn(message);
+			setupMocks();
 
 			service.getMessages().toList();
 
@@ -65,8 +65,7 @@ class XtaServiceTest {
 
 		@Test
 		void shouldCallGetFormData() {
-			when(mapper.toFormData(any())).thenReturn(FormDataTestFactory.create());
-			when(remoteService.getMessage(any(XtaMessageId.class))).thenReturn(message);
+			setupMocks();
 			doReturn(true).when(service).filterByMessageType(messageMetaData);
 
 			service.getMessages().toList();
@@ -82,6 +81,13 @@ class XtaServiceTest {
 
 			verify(service, never()).getFormData(any());
 		}
+
+		private void setupMocks(){
+			var testFormData = FormDataTestFactory.create();
+			when(mapper.toFormData(any())).thenReturn(testFormData);
+			when(zipMapper.extractZipToRepresentations(testFormData)).thenReturn(testFormData);
+			when(remoteService.getMessage(any(XtaMessageId.class))).thenReturn(message);
+		}
 	}
 
 	@Nested
@@ -105,7 +111,7 @@ class XtaServiceTest {
 	@Nested
 	class TestGetFormData {
 
-		private XtaMessage message = XtaMessageTestFactory.create();
+		private final XtaMessage message = XtaMessageTestFactory.create();
 
 		@Captor
 		private ArgumentCaptor<XtaMessage> messageCaptor;
@@ -133,6 +139,7 @@ class XtaServiceTest {
 			service.getFormData(XtaMessageMetaDataTestFactory.create());
 
 			verify(mapper).toFormData(any());
+			verify(zipMapper).extractZipToRepresentations(any());
 		}
 
 		@Test
diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/xta/XtaZipRepresentationsMapperTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaZipRepresentationsMapperTest.java
similarity index 77%
rename from semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/xta/XtaZipRepresentationsMapperTest.java
rename to xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaZipRepresentationsMapperTest.java
index 56b515e083af42c3b22fc050990df4765832a277..9c247bdd8363aefea78f7b436535abe7b95ffc53 100644
--- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/xta/XtaZipRepresentationsMapperTest.java
+++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaZipRepresentationsMapperTest.java
@@ -1,25 +1,27 @@
-package de.ozgcloud.eingang.semantik.enginebased.xta;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import java.io.InputStream;
-import java.util.List;
-import java.util.stream.IntStream;
+package de.ozgcloud.eingang.xta;
 
+import de.ozgcloud.eingang.common.formdata.FormData;
+import de.ozgcloud.eingang.common.formdata.IncomingFile;
+import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory;
+import de.ozgcloud.eingang.common.zip.ZipAttachmentReader;
+import lombok.SneakyThrows;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.MockedStatic;
 import org.mockito.Mockito;
 import org.mockito.Spy;
+import org.springframework.stereotype.Component;
 
-import de.ozgcloud.eingang.common.formdata.FormData;
-import de.ozgcloud.eingang.common.formdata.IncomingFile;
-import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory;
-import de.ozgcloud.eingang.semantik.common.ZipAttachmentReader;
-import lombok.SneakyThrows;
+import java.io.InputStream;
+import java.util.List;
+import java.util.stream.IntStream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
+@Component
 class XtaZipRepresentationsMapperTest {
 
 	private static final String ZIP_CONTENT_TYPE = "application/zip";
@@ -28,14 +30,14 @@ class XtaZipRepresentationsMapperTest {
 	private final XtaZipRepresentationsMapper mapper = new XtaZipRepresentationsMapper();
 
 	@Nested
-	class TestExtractZipFileEctract {
+	class TestExtractZipFile {
 
 		@Test
 		void shouldExtractZipFiles() {
 			try (var zipAttachment = Mockito.mockStatic(ZipAttachmentReader.class)) {
 				initZipRepresentationMocks(zipAttachment);
 
-				var formData = mapper.parseFormData(createTestFormDataWithZipRepresentation());
+				var formData = mapper.extractZipToRepresentations(createTestFormDataWithZipRepresentation());
 
 				assertThat(formData.getRepresentations()).hasSize(3);
 			}
@@ -56,7 +58,7 @@ class XtaZipRepresentationsMapperTest {
 			try (var zipAttachment = Mockito.mockStatic(ZipAttachmentReader.class)) {
 				initZipRepresentationMocks(zipAttachment);
 
-				var formData = mapper.parseFormData(createTestFormDataWithZipRepresentation());
+				var formData = mapper.extractZipToRepresentations(createTestFormDataWithZipRepresentation());
 
 				assertThat(formData.getNumberOfRepresentations()).isEqualTo(3);
 			}
@@ -66,7 +68,7 @@ class XtaZipRepresentationsMapperTest {
 		void shouldIgnoreNonZipFiles() {
 			try (var zipAttachment = Mockito.mockStatic(ZipAttachmentReader.class)) {
 
-				var formData = mapper.parseFormData(createTestFormDataWithoutZipRepresentation());
+				var formData = mapper.extractZipToRepresentations(createTestFormDataWithoutZipRepresentation());
 
 				assertThat(formData.getNumberOfRepresentations()).isEqualTo(1);
 			}
@@ -83,7 +85,7 @@ class XtaZipRepresentationsMapperTest {
 			try (var zipAttachment = Mockito.mockStatic(ZipAttachmentReader.class)) {
 				initZipRepresentationMocks(zipAttachment);
 
-				var formData = mapper.parseFormData(createTestFormDataWithZipRepresentation());
+				var formData = mapper.extractZipToRepresentations(createTestFormDataWithZipRepresentation());
 
 				assertThat(formData.getRepresentations()).map(IncomingFile::getContentType)
 						.filteredOn(e -> e.equals(XtaZipRepresentationsMapper.ZIP_CONTENT_TYPE)).hasSize(1);
@@ -94,7 +96,7 @@ class XtaZipRepresentationsMapperTest {
 		void shouldDoNothingOnEmptyRepresentations() {
 			try (var zipAttachment = Mockito.mockStatic(ZipAttachmentReader.class)) {
 
-				var formData = mapper.parseFormData(createTestFormDataWithoutRepresentation());
+				var formData = mapper.extractZipToRepresentations(createTestFormDataWithoutRepresentation());
 
 				assertThat(formData.getRepresentations()).isEmpty();
 			}
@@ -108,7 +110,7 @@ class XtaZipRepresentationsMapperTest {
 	@Test
 	void testIsZipFilePredicate() {
 
-		assertThat(XtaZipRepresentationsMapper.IS_ZIP_FILE.test(IncomingFileTestFactory.create())).isFalse();
+		assertThat(de.ozgcloud.eingang.xta.XtaZipRepresentationsMapper.IS_ZIP_FILE.test(IncomingFileTestFactory.create())).isFalse();
 		assertThat(XtaZipRepresentationsMapper.IS_ZIP_FILE.test(IncomingFileTestFactory.createBuilder().contentType(ZIP_CONTENT_TYPE).build()))
 				.isTrue();
 	}