diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/FeatureToggleProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/FeatureToggleProperties.java
index 01e930e0cdfee68c2ce4c5eb3dab4813100e13b6..30cb6d5e030a9de48c1ecac7e53fdff1e7c32606 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/FeatureToggleProperties.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/FeatureToggleProperties.java
@@ -13,7 +13,7 @@ import lombok.Setter;
 public class FeatureToggleProperties {
 
 	/**
-	 * Enable vorgang export(XDomea) feature.
+	 * Enable vorgang export(xdomea) feature.
 	 */
 	private boolean vorgangExport = false;
 
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateConverter.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateConverter.java
index d2058d91426c4c70004aae05f9dd5f47fc3bee41..af27e007db7a9f7cf6e530ab0be9442a0af1f6fd 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateConverter.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateConverter.java
@@ -13,18 +13,18 @@ import javax.xml.datatype.DatatypeConfigurationException;
 import javax.xml.datatype.DatatypeFactory;
 import javax.xml.datatype.XMLGregorianCalendar;
 
-import org.springframework.stereotype.Component;
-
 import de.ozgcloud.common.errorhandling.TechnicalException;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
 import lombok.extern.log4j.Log4j2;
 
-@Component
 @Log4j2
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class DateConverter {
 
 	private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy", Locale.GERMAN);
 
-	public Optional<XMLGregorianCalendar> convertGermanFormatToISO(String dateStr) {
+	public static Optional<XMLGregorianCalendar> convertGermanFormatToISO(String dateStr) {
 		try {
 			if (nonNull(dateStr)) {
 				return Optional.of(createDatatypeFactory().newXMLGregorianCalendar(LocalDate.parse(dateStr, DATE_TIME_FORMATTER).toString()));
@@ -35,7 +35,7 @@ public class DateConverter {
 		return Optional.empty();
 	}
 
-	public XMLGregorianCalendar toXmlGregorianCalendar(ZonedDateTime date) {
+	public static XMLGregorianCalendar toXmlGregorianCalendar(ZonedDateTime date) {
 		try {
 			if (nonNull(date)) {
 				return createDatatypeFactory().newXMLGregorianCalendar(GregorianCalendar.from(date));
@@ -46,7 +46,7 @@ public class DateConverter {
 		return null;
 	}
 
-	DatatypeFactory createDatatypeFactory() {
+	static DatatypeFactory createDatatypeFactory() {
 		try {
 			return DatatypeFactory.newInstance();
 		} catch (DatatypeConfigurationException e) {
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DateiformatCode.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateiformatCode.java
similarity index 72%
rename from alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DateiformatCode.java
rename to alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateiformatCode.java
index 5042e73ea5b7578281de666e1e1e2c92e532cf70..b68bc80926cd283240a9f08a60ecfcfab2e8f285 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DateiformatCode.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateiformatCode.java
@@ -1,19 +1,18 @@
-package de.ozgcloud.alfa.file;
+package de.ozgcloud.alfa.common;
 
 import de.xoev.xdomea.DateiformatCodeType;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 
-enum DateiformatCode {
+@RequiredArgsConstructor
+@Getter
+public enum DateiformatCode {
 	PDF("vCBzR", "018");
 
 	static final String LIST_URI = "urn:xoev-de:xdomea:codeliste:dateiformat";
 	final String listVersionID;
 	final String code;
 
-	DateiformatCode(String listVersionID, String code) {
-		this.listVersionID = listVersionID;
-		this.code = code;
-	}
-
 	public DateiformatCodeType createDateiformatCodeType() {
 		var dateiformatCode = new DateiformatCodeType();
 		dateiformatCode.setCode(code);
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/ExportFilenameGenerator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/ExportFilenameGenerator.java
index 498d74d5aeb964da5e994d149075503aa181ff1c..069f37f3027879d431531ef82ed09efec33a473d 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/ExportFilenameGenerator.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/ExportFilenameGenerator.java
@@ -1,17 +1,13 @@
 package de.ozgcloud.alfa.common;
 
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
 import de.ozgcloud.alfa.common.file.OzgFile;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
 
-@Component
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class ExportFilenameGenerator {
 
-	@Autowired
-	private UUIDConverter uuidConverter;
-
-	public String generateExportFilename(OzgFile ozgFile) {
-		return String.format("%s_%s", uuidConverter.fromObjectId(ozgFile.getId().toString()), ozgFile.getName());
+	public static String generateExportFilename(OzgFile ozgFile) {
+		return String.format("%s_%s", UUIDConverter.fromObjectId(ozgFile.getId().toString()), ozgFile.getName());
 	}
 }
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac48de62dda65cb160e37d62a03be7583ff7ab37
--- /dev/null
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilder.java
@@ -0,0 +1,45 @@
+package de.ozgcloud.alfa.common;
+
+import java.time.ZonedDateTime;
+
+import de.ozgcloud.alfa.common.file.OzgFile;
+import de.xoev.xdomea.PrimaerdokumentType;
+
+public class PrimaerdokumentTypeBuilder {
+
+	private OzgFile ozgFile;
+	private String ersteller;
+	private ZonedDateTime createdAt;
+
+	public static PrimaerdokumentTypeBuilder builder() {
+		return new PrimaerdokumentTypeBuilder();
+	}
+
+	public PrimaerdokumentTypeBuilder withOzgFile(OzgFile ozgFile) {
+		this.ozgFile = ozgFile;
+		return this;
+	}
+
+	public PrimaerdokumentTypeBuilder withErsteller(String ersteller) {
+		this.ersteller = ersteller;
+		return this;
+	}
+
+	public PrimaerdokumentTypeBuilder withCreatedAt(ZonedDateTime createdAt) {
+		this.createdAt = createdAt;
+		return this;
+	}
+
+	public PrimaerdokumentType build() {
+		if (ozgFile == null) {
+			throw new IllegalStateException("Can not build Primaerdokument when ozg file is null");
+		}
+
+		var primaerdokumentType = new PrimaerdokumentType();
+		primaerdokumentType.setDateiname(ExportFilenameGenerator.generateExportFilename(ozgFile));
+		primaerdokumentType.setDateinameOriginal(ozgFile.getName());
+		primaerdokumentType.setErsteller(ersteller);
+		primaerdokumentType.setDatumUhrzeit(DateConverter.toXmlGregorianCalendar(createdAt));
+		return primaerdokumentType;
+	}
+}
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/UUIDConverter.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/UUIDConverter.java
index 0261329e9b724af6c396ace0a453f57fc7288042..85c84b421c0cf3d916e3ba2c70a372abd268d5d5 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/UUIDConverter.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/UUIDConverter.java
@@ -3,15 +3,17 @@ package de.ozgcloud.alfa.common;
 import java.util.regex.Pattern;
 
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.stereotype.Component;
 
-@Component
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class UUIDConverter {
 
 	private static final Pattern UUID_SPLIT_PATTERN = Pattern.compile(
 			"^([a-fA-F0-9]{8})([a-fA-F0-9]{4})([a-fA-F0-9]{4})([a-fA-F0-9]{4})([a-fA-F0-9]+)$");
 
-	public String fromObjectId(String objectId) {
+	public static String fromObjectId(String objectId) {
 		var matcher = UUID_SPLIT_PATTERN.matcher(objectId);
 		if (matcher.find()) {
 			var lastGroup = StringUtils.leftPad(matcher.group(5), 12, "0");
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/AbgabeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/AbgabeCreator.java
deleted file mode 100644
index 3f7b8db4492f288ad2b9bceb2c7dc0ab496294f2..0000000000000000000000000000000000000000
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/AbgabeCreator.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package de.ozgcloud.alfa.export;
-
-import java.util.stream.Stream;
-
-import de.xoev.xdomea.AbgabeAbgabe0401;
-import de.xoev.xdomea.AkteType;
-import de.xoev.xdomea.DokumentType;
-import de.xoev.xdomea.NkAbgabeType;
-import de.xoev.xdomea.VorgangType;
-
-class AbgabeCreator {
-
-	private AbgabeAbgabe0401 abgabeType;
-
-	private AbgabeCreator() {
-		abgabeType = new AbgabeAbgabe0401();
-	}
-
-	public AbgabeCreator withKopf(NkAbgabeType kopfType) {
-		abgabeType.setKopf(kopfType);
-		return this;
-	}
-
-	public AbgabeCreator withVorgang(VorgangType vorgangType) {
-		getSchriftgutobjekt().setVorgang(vorgangType);
-		return this;
-	}
-
-	public AbgabeCreator withDokumentTypes(Stream<DokumentType> dokumentTypes) {
-		var vorgang = getVorgang();
-		if (vorgang == null) {
-			throw new IllegalStateException("Cannot set documentTypes because Vorgang is null");
-		}
-		dokumentTypes.forEach(vorgang.getDokument()::add);
-		return this;
-	}
-
-	public AbgabeCreator withAkteType(AkteType akteType) {
-		getSchriftgutobjekt().setAkte(akteType);
-		return this;
-	}
-
-	public AbgabeAbgabe0401 create() {
-		return abgabeType;
-	}
-
-	private AbgabeAbgabe0401.Schriftgutobjekt getSchriftgutobjekt() {
-		if (abgabeType.getSchriftgutobjekt().isEmpty()) {
-			abgabeType.getSchriftgutobjekt().add(new AbgabeAbgabe0401.Schriftgutobjekt());
-		}
-		return abgabeType.getSchriftgutobjekt().get(0);
-	}
-
-	private VorgangType getVorgang() {
-		return getSchriftgutobjekt().getVorgang();
-	}
-
-	static AbgabeCreator createAbgabeCreator() {
-		return new AbgabeCreator();
-	}
-}
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java
index a31bf073b13e5293927f8c708e974215baafe495..8840c0ac344b8d8d84fde3d7d48a96ec76794267 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java
@@ -3,13 +3,15 @@ package de.ozgcloud.alfa.export;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.springframework.beans.factory.annotation.Autowired;
+import jakarta.xml.bind.Marshaller;
+
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.oxm.jaxb.Jaxb2Marshaller;
 
-import jakarta.xml.bind.Marshaller;
+import lombok.RequiredArgsConstructor;
 
+@RequiredArgsConstructor
 @Configuration
 class ExportConfiguration {
 
@@ -17,8 +19,7 @@ class ExportConfiguration {
 	static final String PROPERTY_NAMESPACE_PREFIX_MAPPER = "org.glassfish.jaxb.namespacePrefixMapper";
 	static final String CONTEXT_PATH = "de.xoev.xdomea";
 
-	@Autowired
-	private XDomeaNamespacePrefixMapper prefixMapper;
+	private final XdomeaNamespacePrefixMapper prefixMapper;
 
 	@Bean
 	Jaxb2Marshaller marshaller() {
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportData.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportData.java
index 1d23b29d2200e28b0b6863243b31721ca8345db4..e241271bba7b6ef3c375866639eda13f7d369ab7 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportData.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportData.java
@@ -1,6 +1,6 @@
 package de.ozgcloud.alfa.export;
 
-import java.util.stream.Stream;
+import java.util.List;
 
 import de.ozgcloud.alfa.common.file.OzgFile;
 import de.xoev.xdomea.AbgabeAbgabe0401;
@@ -16,6 +16,6 @@ class ExportData {
 
 	private String exportFilename;
 	private AbgabeAbgabe0401 abgabe;
-	private Stream<OzgFile> exportFiles;
+	private List<OzgFile> exportFiles;
 
 }
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java
index 7f63a5a48685328ddd6f41ca86d2f1bd52df6e2b..efc201e0be72099cfa5f53361e6cfa038b41875f 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java
@@ -6,38 +6,38 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.Optional;
 import java.util.stream.Stream;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
 import de.ozgcloud.alfa.common.ExportFilenameGenerator;
 import de.ozgcloud.alfa.common.file.OzgFile;
 import de.ozgcloud.alfa.file.ExportFileService;
+import de.ozgcloud.alfa.vorgang.Eingang;
+import de.ozgcloud.alfa.vorgang.EingangHeader;
 import de.ozgcloud.alfa.vorgang.ExportVorgangService;
+import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
 import de.ozgcloud.common.binaryfile.TempFileUtils;
 import de.ozgcloud.common.errorhandling.TechnicalException;
 import de.xoev.xdomea.AbgabeAbgabe0401;
+import lombok.RequiredArgsConstructor;
 
+@RequiredArgsConstructor
 @Service
 class ExportService {
 
 	static final String EXPORT_FILENAME_SUFFIX = "_Abgabe.Abgabe.0401.xml";
 	private static final String EXPORT_FILENAME_TEMPLATE = "%s" + EXPORT_FILENAME_SUFFIX;
 
-	@Autowired
-	private XDomeaXmlMarshaller xDomeaXmlMarshaller;
+	private final XdomeaXmlMarshaller xDomeaXmlMarshaller;
 
-	@Autowired
-	private ExportFileService exportFileService;
-
-	@Autowired
-	private ExportVorgangService exportVorgangService;
-
-	@Autowired
-	private ExportFilenameGenerator exportFilenameGenerator;
+	private final ExportFileService exportFileService;
+	private final ExportVorgangService exportVorgangService;
 
 	public void writeExport(String vorgangId, String filenameId, OutputStream out) {
 		var exportData = collectExportData(vorgangId, filenameId);
@@ -46,16 +46,25 @@ class ExportService {
 	}
 
 	ExportData collectExportData(String vorgangId, String filenameId) {
-		var vorgangWithEingang = exportVorgangService.getVorgang(vorgangId);
-		var ozgFiles = exportFileService.getAllPdfs(vorgangWithEingang.getEingang().getId());
-		var abgabe = AbgabeCreator.createAbgabeCreator()
-				.withKopf(exportVorgangService.createKopf(vorgangWithEingang))
-				.withVorgang(exportVorgangService.createVorgangType(vorgangWithEingang))
-				.withAkteType(exportVorgangService.createAkteType(vorgangWithEingang))
-				.withDokumentTypes(
-						exportFileService.createDokumentTypes(ozgFiles.stream(), vorgangWithEingang.getEingang().getHeader().getFormEngineName()))
-				.create();
-		return ExportData.builder().abgabe(abgabe).exportFilename(buildXmlFilename(filenameId)).exportFiles(ozgFiles.stream()).build();
+		var vorgang = exportVorgangService.getVorgang(vorgangId);
+		var representations = exportFileService.getRepresentations(vorgang).toList();
+		var attachments = exportFileService.getAttachments(vorgang).toList();
+		var formEngineName = getFormEngineName(vorgang);
+		var abgabe = XdomeaNachrichtBuilder.builder()
+				.withKopf(exportVorgangService.createKopf(vorgang))
+				.withVorgang(exportVorgangService.createVorgangType(vorgang))
+				.withAktenzeichen(exportVorgangService.createAkteType(vorgang))
+				.withRepresentations(exportFileService.createDokumentTypes(representations, formEngineName).toList())
+				.withAttachments(exportFileService.createDokumentTypes(attachments, formEngineName).toList())
+				.build();
+		var exportFiles = Stream.concat(representations.stream(), attachments.stream()).toList();
+		return ExportData.builder().abgabe(abgabe).exportFilename(buildXmlFilename(filenameId)).exportFiles(exportFiles).build();
+	}
+
+	String getFormEngineName(VorgangWithEingang vorgang) {
+		return Optional.ofNullable(vorgang.getEingang())
+				.map(Eingang::getHeader)
+				.map(EingangHeader::getFormEngineName).orElse(StringUtils.EMPTY);
 	}
 
 	String buildXmlFilename(String filenameId) {
@@ -73,7 +82,7 @@ class ExportService {
 			putFilesIntoZip(exportData.getExportFiles(), zipOutputStream);
 			return file;
 		} catch (Exception e) {
-			throw new TechnicalException("Error creating XDomea zip file", e);
+			throw new TechnicalException("Error creating xdomea zip file", e);
 		}
 	}
 
@@ -84,13 +93,13 @@ class ExportService {
 		zipOutputStream.closeEntry();
 	}
 
-	private void putFilesIntoZip(Stream<OzgFile> ozgFiles, ZipOutputStream zipOutputStream) {
+	private void putFilesIntoZip(List<OzgFile> ozgFiles, ZipOutputStream zipOutputStream) {
 		ozgFiles.forEach(ozgFile -> putOzgFileIntoZip(ozgFile, zipOutputStream));
 	}
 
 	void putOzgFileIntoZip(OzgFile ozgFile, ZipOutputStream zipOutputStream) {
 		try {
-			var entry = new ZipEntry(exportFilenameGenerator.generateExportFilename(ozgFile));
+			var entry = new ZipEntry(ExportFilenameGenerator.generateExportFilename(ozgFile));
 			zipOutputStream.putNextEntry(entry);
 			exportFileService.writeOzgFile(ozgFile.getId(), zipOutputStream);
 			zipOutputStream.closeEntry();
@@ -103,7 +112,7 @@ class ExportService {
 		try (var fileInputStream = new FileInputStream(file)) {
 			fileInputStream.transferTo(outputStream);
 		} catch (Exception e) {
-			throw new TechnicalException("Error writing XDomea zip file to output stream", e);
+			throw new TechnicalException("Error writing xdomea zip file to output stream", e);
 		}
 	}
 }
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangController.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangController.java
index 8dc8154f42b755de40f1c9b7addf1316e6dc15db..052b36cd92c182aad9838aefe8f108b358af4e65 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangController.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangController.java
@@ -2,7 +2,6 @@ package de.ozgcloud.alfa.export;
 
 import java.util.UUID;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
@@ -12,6 +11,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
 
+import lombok.RequiredArgsConstructor;
+
+@RequiredArgsConstructor
 @RestController
 @RequestMapping(ExportVorgangController.PATH)
 public class ExportVorgangController {
@@ -20,8 +22,7 @@ public class ExportVorgangController {
 
 	private static final String EXPORT_FILENAME_TEMPLATE = "%s_Abgabe.Abgabe.0401.xdomea";
 
-	@Autowired
-	private ExportService xDomeaService;
+	private final ExportService xDomeaService;
 
 	@GetMapping(value = "{vorgangId}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
 	public ResponseEntity<StreamingResponseBody> exportToXdomea(@PathVariable String vorgangId) {
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java
index 7d23f894644d0325cf32ad4af81c25536503cb5b..28184ab2ecfec34797cee5261605f1cde264d7b4 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java
@@ -4,7 +4,6 @@ import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
 
 import java.util.Objects;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.LinkRelation;
 import org.springframework.hateoas.server.RepresentationModelProcessor;
@@ -13,14 +12,15 @@ import org.springframework.stereotype.Component;
 import de.ozgcloud.alfa.common.FeatureToggleProperties;
 import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
+import lombok.RequiredArgsConstructor;
 
+@RequiredArgsConstructor
 @Component
 class ExportVorgangProcessor implements RepresentationModelProcessor<EntityModel<VorgangWithEingang>> {
 
 	static final LinkRelation REL_EXPORT = LinkRelation.of("export");
 
-	@Autowired
-	private FeatureToggleProperties featureToggleProperties;
+	private final FeatureToggleProperties featureToggleProperties;
 
 	@Override
 	public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) {
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaMedienart.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaMedienart.java
similarity index 74%
rename from alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaMedienart.java
rename to alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaMedienart.java
index 12c1500798df429f6d2619c35c16a4bce54e532d..42338a5e6befc601a62735b18d700dfee7fcc795 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaMedienart.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaMedienart.java
@@ -1,12 +1,12 @@
 package de.ozgcloud.alfa.export;
 
-enum XDomeaMedienart {
+enum XdomeaMedienart {
 
 	ELEKTRONISCHES_DOKUMENT("001");
 
 	private String code;
 
-	XDomeaMedienart(String code) {
+	XdomeaMedienart(String code) {
 		this.code = code;
 	}
 
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..50adf69cc56c4f60726e072cdd6ac09e278f473e
--- /dev/null
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java
@@ -0,0 +1,74 @@
+package de.ozgcloud.alfa.export;
+
+import java.util.List;
+
+import de.xoev.xdomea.AbgabeAbgabe0401;
+import de.xoev.xdomea.AbgabeAbgabe0401.Schriftgutobjekt;
+import de.xoev.xdomea.AkteType;
+import de.xoev.xdomea.DokumentType;
+import de.xoev.xdomea.NkAbgabeType;
+import de.xoev.xdomea.VorgangType;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+class XdomeaNachrichtBuilder {
+
+	private VorgangType vorgang;
+	private NkAbgabeType kopf;
+	private List<DokumentType> representations = List.of();
+	private List<DokumentType> attachments = List.of();
+	private AkteType aktenzeichen;
+
+	public static XdomeaNachrichtBuilder builder() {
+		return new XdomeaNachrichtBuilder();
+	}
+
+	public XdomeaNachrichtBuilder withKopf(NkAbgabeType kopf) {
+		this.kopf = kopf;
+		return this;
+	}
+
+	public XdomeaNachrichtBuilder withVorgang(VorgangType vorgangType) {
+		this.vorgang = vorgangType;
+		return this;
+	}
+
+	public XdomeaNachrichtBuilder withAktenzeichen(AkteType akteType) {
+		this.aktenzeichen = akteType;
+		return this;
+	}
+
+	public XdomeaNachrichtBuilder withRepresentations(List<DokumentType> representations) {
+		this.representations = representations;
+		return this;
+	}
+
+	public XdomeaNachrichtBuilder withAttachments(List<DokumentType> attachments) {
+		this.attachments = attachments;
+		return this;
+	}
+
+	public AbgabeAbgabe0401 build() {
+		var schriftgutobjekt = createSchriftgutobjekt();
+		addVorgangDokumente();
+
+		var abgabeType = new AbgabeAbgabe0401();
+		abgabeType.setKopf(kopf);
+		abgabeType.getSchriftgutobjekt().add(schriftgutobjekt);
+		return abgabeType;
+	}
+
+	private Schriftgutobjekt createSchriftgutobjekt() {
+		var schriftgutobjekt = new Schriftgutobjekt();
+		schriftgutobjekt.setVorgang(vorgang);
+		schriftgutobjekt.setAkte(aktenzeichen);
+		return schriftgutobjekt;
+	}
+
+	void addVorgangDokumente() {
+		representations.forEach(vorgang.getDokument()::add);
+		attachments.forEach(vorgang.getDokument()::add);
+	}
+
+}
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaNamespacePrefixMapper.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNamespacePrefixMapper.java
similarity index 96%
rename from alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaNamespacePrefixMapper.java
rename to alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNamespacePrefixMapper.java
index 81bb3fd6a3188265b05f3d731bd096a6a78ae8b8..08894a2387b574d9616faebb9eac3d15603f772c 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaNamespacePrefixMapper.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNamespacePrefixMapper.java
@@ -6,7 +6,7 @@ import org.glassfish.jaxb.runtime.marshaller.NamespacePrefixMapper;
 import org.springframework.stereotype.Component;
 
 @Component
-class XDomeaNamespacePrefixMapper extends NamespacePrefixMapper {
+class XdomeaNamespacePrefixMapper extends NamespacePrefixMapper {
 
 	static final String XDOMEA_NAMESPACE_URI = "urn:xoev-de:xdomea:schema:3.0.0";
 	static final String XDOMEA_NAMESPACE_PREFIX = "xdomea";
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaProperties.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaProperties.java
similarity index 84%
rename from alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaProperties.java
rename to alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaProperties.java
index fa2898bed501872596eca02a1d45a3c822fc256a..c2f59b1d50bca5d9902a5bc6defec49015edc1a3 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaProperties.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaProperties.java
@@ -10,10 +10,10 @@ import lombok.Setter;
 @Setter
 @Configuration
 @ConfigurationProperties("ozgcloud.xdomea")
-public class XDomeaProperties {
+public class XdomeaProperties {
 
 	/**
-	 * XDomea Behoerdenschluessel.
+	 * xdomea Behoerdenschluessel.
 	 */
 	private String behoerdenschluessel;
 }
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaXmlMarshaller.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaXmlMarshaller.java
similarity index 75%
rename from alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaXmlMarshaller.java
rename to alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaXmlMarshaller.java
index 746c2d540de9a78c1d99e2c2458161b8510c154f..441bd579380934ebdfe3d26a587d92afe4f711b5 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaXmlMarshaller.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaXmlMarshaller.java
@@ -4,17 +4,17 @@ import java.io.StringWriter;
 
 import javax.xml.transform.stream.StreamResult;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.oxm.jaxb.Jaxb2Marshaller;
 import org.springframework.stereotype.Component;
 
 import de.xoev.xdomea.AbgabeAbgabe0401;
+import lombok.RequiredArgsConstructor;
 
+@RequiredArgsConstructor
 @Component
-public class XDomeaXmlMarshaller {
+public class XdomeaXmlMarshaller {
 
-	@Autowired
-	private Jaxb2Marshaller marshaller;
+	private final Jaxb2Marshaller marshaller;
 
 	public String marshal(AbgabeAbgabe0401 abgabe) {
 		var stringWriter = new StringWriter();
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..625313a85d2365950b6e7d0295bc8bb520b9ff72
--- /dev/null
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeBuilder.java
@@ -0,0 +1,100 @@
+package de.ozgcloud.alfa.file;
+
+import org.apache.commons.lang3.StringUtils;
+
+import de.ozgcloud.alfa.common.DateiformatCode;
+import de.ozgcloud.alfa.common.PrimaerdokumentTypeBuilder;
+import de.ozgcloud.alfa.common.UUIDConverter;
+import de.ozgcloud.alfa.common.file.OzgFile;
+import de.xoev.xdomea.AllgemeineMetadatenType;
+import de.xoev.xdomea.DokumentType;
+import de.xoev.xdomea.FormatType;
+import de.xoev.xdomea.IdentifikationObjektType;
+import de.xoev.xdomea.MediumCodeType;
+import de.xoev.xdomea.PrimaerdokumentType;
+import de.xoev.xdomea.VersionType;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class DokumentTypeBuilder {
+
+	static final String VERSION_NUMMER = "1";
+	static final String ALLGEMEINE_METADATEN_MEDIUM_CODE = "001";
+
+	private Long ordinalNumber;
+	private String formEngineName;
+	private OzgFile ozgFile;
+
+	public static DokumentTypeBuilder builder() {
+		return new DokumentTypeBuilder();
+	}
+
+	public DokumentTypeBuilder withOrdinalNumber(Long ordinalNumber) {
+		this.ordinalNumber = ordinalNumber;
+		return this;
+	}
+
+	public DokumentTypeBuilder withFormEngineName(String formEngineName) {
+		this.formEngineName = formEngineName;
+		return this;
+	}
+
+	public DokumentTypeBuilder withOzgFile(OzgFile ozgFile) {
+		this.ozgFile = ozgFile;
+		return this;
+	}
+
+	public DokumentType build() {
+		var dokumentType = new DokumentType();
+		dokumentType.setIdentifikation(createIdentifikation());
+		dokumentType.setAllgemeineMetadaten(createAllgemeineMetadaten());
+		dokumentType.getVersion().add(createVersionType());
+		dokumentType.getVersion().get(0).getFormat().get(0).setPrimaerdokument(createPrimaerdokument());
+		return dokumentType;
+	}
+
+	VersionType createVersionType() {
+		var versionType = new VersionType();
+		versionType.setNummer(VERSION_NUMMER);
+		versionType.getFormat().add(createFormatType());
+		return versionType;
+	}
+
+	FormatType createFormatType() {
+		var formatType = new FormatType();
+		formatType.setName(DateiformatCode.PDF.createDateiformatCodeType());
+		formatType.setSonstigerName(StringUtils.EMPTY);
+		formatType.setVersion(StringUtils.EMPTY);
+		return formatType;
+	}
+
+	IdentifikationObjektType createIdentifikation() {
+		var identifikation = new IdentifikationObjektType();
+		identifikation.setID(UUIDConverter.fromObjectId(ozgFile.getId().toString()));
+		identifikation.setNummerImUebergeordnetenContainer(ordinalNumber);
+		return identifikation;
+	}
+
+	AllgemeineMetadatenType createAllgemeineMetadaten() {
+		var allgemeineMetadaten = new AllgemeineMetadatenType();
+		allgemeineMetadaten.setBetreff(ozgFile.getName());
+		allgemeineMetadaten.setKennzeichen(StringUtils.EMPTY);
+		allgemeineMetadaten.setBemerkung(StringUtils.EMPTY);
+		allgemeineMetadaten.setMedium(createMediumCode());
+		return allgemeineMetadaten;
+	}
+
+	private MediumCodeType createMediumCode() {
+		var mediumCode = new MediumCodeType();
+		mediumCode.setCode(ALLGEMEINE_METADATEN_MEDIUM_CODE);
+		return mediumCode;
+	}
+
+	PrimaerdokumentType createPrimaerdokument() {
+		return PrimaerdokumentTypeBuilder.builder()
+				.withOzgFile(ozgFile)
+				.withErsteller(formEngineName)
+				.build();
+	}
+}
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeCreator.java
deleted file mode 100644
index f86626bb5f5c4499c9d813b01686c0f50f7c17ce..0000000000000000000000000000000000000000
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeCreator.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package de.ozgcloud.alfa.file;
-
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.stream.Stream;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import de.ozgcloud.alfa.common.ExportFilenameGenerator;
-import de.ozgcloud.alfa.common.UUIDConverter;
-import de.ozgcloud.alfa.common.file.OzgFile;
-import de.xoev.xdomea.AllgemeineMetadatenType;
-import de.xoev.xdomea.DokumentType;
-import de.xoev.xdomea.FormatType;
-import de.xoev.xdomea.IdentifikationObjektType;
-import de.xoev.xdomea.MediumCodeType;
-import de.xoev.xdomea.PrimaerdokumentType;
-import de.xoev.xdomea.VersionType;
-
-@Component
-class DokumentTypeCreator {
-
-	static final String VERSION_NUMMER = "1";
-	static final String ALLGEMEINE_METADATEN_MEDIUM_CODE = "001";
-
-	@Autowired
-	private UUIDConverter uuidConverter;
-
-	@Autowired
-	private ExportFilenameGenerator exportFilenameGenerator;
-
-	public Stream<DokumentType> create(Stream<OzgFile> ozgFiles, String formEngineName) {
-		final var ordinalNumberGenerator = new AtomicInteger(1);
-		return ozgFiles.map(ozgFile -> createDokumentType(new MappingData(ozgFile, ordinalNumberGenerator.getAndIncrement(), formEngineName)));
-	}
-
-	DokumentType createDokumentType(MappingData mappingData) {
-		var dokumentType = new DokumentType();
-		dokumentType.setIdentifikation(createIdentifikation(mappingData));
-		dokumentType.setAllgemeineMetadaten(createAllgemeineMetadaten(mappingData));
-
-		var versionType = createVersionType();
-		dokumentType.getVersion().add(versionType);
-
-		var formatType = createFormatType();
-		versionType.getFormat().add(formatType);
-
-		var primaerdokumentType = createPrimaerdokumentType(mappingData);
-		formatType.setPrimaerdokument(primaerdokumentType);
-
-		return dokumentType;
-	}
-
-	IdentifikationObjektType createIdentifikation(MappingData mappingData) {
-		var identifikation = new IdentifikationObjektType();
-		identifikation.setID(uuidConverter.fromObjectId(mappingData.ozgFile().getId().toString()));
-		identifikation.setNummerImUebergeordnetenContainer(Long.valueOf(mappingData.dokumentOrdinalNumber()));
-		return identifikation;
-	}
-
-	AllgemeineMetadatenType createAllgemeineMetadaten(MappingData mappingData) {
-		var allgemeineMetadaten = new AllgemeineMetadatenType();
-		allgemeineMetadaten.setBetreff(mappingData.ozgFile().getName());
-		allgemeineMetadaten.setKennzeichen(StringUtils.EMPTY);
-		allgemeineMetadaten.setBemerkung(StringUtils.EMPTY);
-		allgemeineMetadaten.setMedium(createMediumCode());
-		return allgemeineMetadaten;
-	}
-
-	private MediumCodeType createMediumCode() {
-		var mediumCode = new MediumCodeType();
-		mediumCode.setCode(ALLGEMEINE_METADATEN_MEDIUM_CODE);
-		return mediumCode;
-	}
-
-	private VersionType createVersionType() {
-		var versionType = new VersionType();
-		versionType.setNummer(VERSION_NUMMER);
-		return versionType;
-	}
-
-	private FormatType createFormatType() {
-		var formatType = new FormatType();
-		formatType.setName(DateiformatCode.PDF.createDateiformatCodeType());
-		formatType.setSonstigerName(StringUtils.EMPTY);
-		formatType.setVersion(StringUtils.EMPTY);
-		return formatType;
-	}
-
-	private PrimaerdokumentType createPrimaerdokumentType(MappingData mappingData) {
-		var primaerdokumentType = new PrimaerdokumentType();
-		primaerdokumentType.setDateiname(exportFilenameGenerator.generateExportFilename(mappingData.ozgFile()));
-		primaerdokumentType.setDateinameOriginal(mappingData.ozgFile().getName());
-		primaerdokumentType.setErsteller(mappingData.formEngineName());
-		return primaerdokumentType;
-	}
-
-	record MappingData (OzgFile ozgFile, int dokumentOrdinalNumber, String formEngineName) {}
-}
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/ExportFileService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/ExportFileService.java
index c196597c3074a43243b137b08a25d2165832fcf9..a468860b4f11ee63ad9296d4c0037b5bc6552bd5 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/ExportFileService.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/ExportFileService.java
@@ -2,10 +2,11 @@ package de.ozgcloud.alfa.file;
 
 import java.io.OutputStream;
 import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.atomic.AtomicLong;
 import java.util.function.Predicate;
 import java.util.stream.Stream;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.stereotype.Service;
 
@@ -13,30 +14,41 @@ import de.ozgcloud.alfa.common.binaryfile.BinaryFileService;
 import de.ozgcloud.alfa.common.binaryfile.FileId;
 import de.ozgcloud.alfa.common.file.OzgFile;
 import de.ozgcloud.alfa.common.file.OzgFileService;
+import de.ozgcloud.alfa.vorgang.Eingang;
+import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
 import de.xoev.xdomea.DokumentType;
+import lombok.RequiredArgsConstructor;
 
+@RequiredArgsConstructor
 @Service
 public class ExportFileService {
 
 	private static final Predicate<OzgFile> IS_PDF_FILE = file -> MediaType.APPLICATION_PDF_VALUE.equals(file.getContentType());
 
-	@Autowired
-	private OzgFileService ozgFileService;
+	private final OzgFileService ozgFileService;
+	private final BinaryFileService binaryFileService;
 
-	@Autowired
-	private BinaryFileService binaryFileService;
-
-	@Autowired
-	private DokumentTypeCreator dokumentTypeCreator;
+	public Stream<OzgFile> getRepresentations(VorgangWithEingang vorgang) {
+		return Optional.ofNullable(vorgang.getEingang())
+				.map(Eingang::getId).stream()
+				.flatMap(ozgFileService::getRepresentationsByEingang)
+				.filter(IS_PDF_FILE);
+	}
 
-	public List<OzgFile> getAllPdfs(String eingangId) {
-		var representations = ozgFileService.getRepresentationsByEingang(eingangId);
-		var attachments = ozgFileService.getAttachmentsByEingang(eingangId);
-		return Stream.concat(representations, attachments).filter(IS_PDF_FILE).toList();
+	public Stream<OzgFile> getAttachments(VorgangWithEingang vorgang) {
+		return Optional.ofNullable(vorgang.getEingang())
+				.map(Eingang::getId).stream()
+				.flatMap(ozgFileService::getAttachmentsByEingang)
+				.filter(IS_PDF_FILE);
 	}
 
-	public Stream<DokumentType> createDokumentTypes(Stream<OzgFile> ozgFileStream, String formEngineName) {
-		return dokumentTypeCreator.create(ozgFileStream, formEngineName);
+	public Stream<DokumentType> createDokumentTypes(List<OzgFile> ozgFiles, String formEngineName) {
+		var ordinalNumberGenerator = new AtomicLong(1);
+		return ozgFiles.stream().map(ozgFile -> DokumentTypeBuilder.builder()
+				.withOrdinalNumber(ordinalNumberGenerator.getAndIncrement())
+				.withFormEngineName(formEngineName)
+				.withOzgFile(ozgFile)
+				.build());
 	}
 
 	public void writeOzgFile(FileId fileId, OutputStream outputStream) {
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/historie/ExportHistorieService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/historie/ExportHistorieService.java
new file mode 100644
index 0000000000000000000000000000000000000000..547d58ab0e021d411c1c9e16af3db8096906febe
--- /dev/null
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/historie/ExportHistorieService.java
@@ -0,0 +1,10 @@
+package de.ozgcloud.alfa.historie;
+
+import org.springframework.stereotype.Service;
+
+import lombok.RequiredArgsConstructor;
+
+@RequiredArgsConstructor
+@Service
+public class ExportHistorieService {
+}
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungTypeCreator.java
index f300fcfa08105ab88e30e3c0f1d31dab44e219cc..05b2f17709d3e4c2a8c26d1fbce3c7315a20b078 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungTypeCreator.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungTypeCreator.java
@@ -2,19 +2,19 @@ package de.ozgcloud.alfa.vorgang;
 
 import java.util.Collections;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import de.xoev.xdomea.AnwendungsspezifischeErweiterungType;
+import lombok.RequiredArgsConstructor;
 
+@RequiredArgsConstructor
 @Component
 class AnwendungsspezifischeErweiterungTypeCreator {
 
 	static final String KENNUNG = "IDOZGCloud1234567";
 	static final String NAME = "Anwendungsspezifische Erweiterung OZGCloud Basis";
 
-	@Autowired
-	private FeldGruppeTypeCreator feldGruppeTypeCreator;
+	private final FeldGruppeTypeCreator feldGruppeTypeCreator;
 
 	public AnwendungsspezifischeErweiterungType create(VorgangWithEingang vorgang) {
 		var ozgcloudErweiterungType = new AnwendungsspezifischeErweiterungType();
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungXMLTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungXMLTypeCreator.java
index ed8527d1309fa29b33767e88ba6cb819d49d2c14..2af8e7cd35c3b5eac78704fa035c3a9aece954e6 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungXMLTypeCreator.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungXMLTypeCreator.java
@@ -1,15 +1,15 @@
 package de.ozgcloud.alfa.vorgang;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import de.xoev.xdomea.AnwendungsspezifischeErweiterungXMLType;
+import lombok.RequiredArgsConstructor;
 
+@RequiredArgsConstructor
 @Component
 public class AnwendungsspezifischeErweiterungXMLTypeCreator {
 
-	@Autowired
-	private FormDataMapper formDataMapper;
+	private final FormDataMapper formDataMapper;
 
 	public AnwendungsspezifischeErweiterungXMLType create(VorgangWithEingang vorgang) {
 		var erweiterungXmlType = new AnwendungsspezifischeErweiterungXMLType();
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/ExportVorgangService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/ExportVorgangService.java
index 086a3097893f17956ec76a0e291a2bf5ad99d207..49ae46dc6950161c2121bb7fc395a07cf96317ae 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/ExportVorgangService.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/ExportVorgangService.java
@@ -4,7 +4,6 @@ import java.util.Optional;
 import java.util.UUID;
 
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import de.xoev.xdomea.AkteType;
@@ -12,18 +11,16 @@ import de.xoev.xdomea.AllgemeineMetadatenType;
 import de.xoev.xdomea.IdentifikationObjektType;
 import de.xoev.xdomea.NkAbgabeType;
 import de.xoev.xdomea.VorgangType;
+import lombok.RequiredArgsConstructor;
 
+@RequiredArgsConstructor
 @Service
 public class ExportVorgangService {
 
-	@Autowired
-	private VorgangService vorgangService;
+	private final VorgangService vorgangService;
 
-	@Autowired
-	private VorgangTypeCreator vorgangTypeCreator;
-
-	@Autowired
-	private KopfCreator kopfCreator;
+	private final VorgangTypeCreator vorgangTypeCreator;
+	private final KopfCreator kopfCreator;
 
 	public VorgangWithEingang getVorgang(String vorgangId) {
 		return vorgangService.findVorgangWithEingang(vorgangId);
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java
index 04e32a6a67bb855d1d29a621748a4698df013cdd..b5b8a45e9e650bc8e193de707b082ec057e8758f 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java
@@ -9,7 +9,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import de.ozgcloud.alfa.common.DateConverter;
@@ -19,17 +18,15 @@ import de.xoev.xdomea.AntragsdatenItemType;
 import de.xoev.xdomea.AntragsdatenMultiValueFieldType;
 import de.xoev.xdomea.AntragsdatenSingleValueFieldType;
 import de.xoev.xdomea.DatatypeType;
-import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
 
+@RequiredArgsConstructor
 @Component
 class FormDataMapper {
 
-	@Autowired
-	private DatatypeMapper datatypeMapper;
-	@Autowired
-	private DateConverter dateConverter;
+	private final DatatypeMapper datatypeMapper;
 
-	public Antragsdaten toAntragsdaten(@NotNull VorgangWithEingang vorgang) {
+	public Antragsdaten toAntragsdaten(VorgangWithEingang vorgang) {
 		var antragsdaten = new Antragsdaten();
 		antragsdaten.getItem().addAll(mapFormData(vorgang));
 		antragsdaten.getItem().addAll(mapOtherData(vorgang));
@@ -97,7 +94,7 @@ class FormDataMapper {
 	Object formatValue(DatatypeType datatype, Object value) {
 		return switch (datatype) {
 			case STRING -> String.valueOf(value);
-			case DATETIME -> dateConverter.toXmlGregorianCalendar((ZonedDateTime) value);
+			case DATETIME -> DateConverter.toXmlGregorianCalendar((ZonedDateTime) value);
 			default -> value;
 		};
 	}
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreator.java
index 8521f74b3b600a85b4e19c85813c0caebb7f011f..6b305598131217a6727b21dbf2cd2e514471d806 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreator.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreator.java
@@ -6,13 +6,14 @@ import java.util.function.Predicate;
 import javax.xml.datatype.XMLGregorianCalendar;
 
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import de.ozgcloud.alfa.common.DateConverter;
 import de.xoev.xdomea.GeburtType;
 import de.xoev.xdomea.KontaktType;
+import lombok.RequiredArgsConstructor;
 
+@RequiredArgsConstructor
 @Component
 class KontaktTypeCreator {
 
@@ -20,11 +21,7 @@ class KontaktTypeCreator {
 	private static final Predicate<Antragsteller> HAS_NACHNAME = antragsteller -> StringUtils.isNotBlank(antragsteller.getNachname());
 	private static final Predicate<Antragsteller> HAS_ANREDE = antragsteller -> StringUtils.isNotBlank(antragsteller.getAnrede());
 
-	@Autowired
-	private NameNatuerlichePersonTypeCreator nameNatuerlichePersonTypeCreator;
-
-	@Autowired
-	private DateConverter dateConverter;
+	private final NameNatuerlichePersonTypeCreator nameNatuerlichePersonTypeCreator;
 
 	public Optional<KontaktType> create(VorgangWithEingang vorgang) {
 		return getAntragstellerIfHasRequiredData(vorgang).map(this::toKontaktType);
@@ -38,7 +35,7 @@ class KontaktTypeCreator {
 	KontaktType toKontaktType(Antragsteller antragsteller) {
 		var kontakt = new KontaktType();
 		kontakt.setName(nameNatuerlichePersonTypeCreator.create(antragsteller));
-		var geburtsdatumIso = dateConverter.convertGermanFormatToISO(antragsteller.getGeburtsdatum());
+		var geburtsdatumIso = DateConverter.convertGermanFormatToISO(antragsteller.getGeburtsdatum());
 		kontakt.setGeburt(createGeburtType(geburtsdatumIso));
 		return kontakt;
 	}
@@ -54,7 +51,7 @@ class KontaktTypeCreator {
 	}
 
 	private boolean hasValidGeburtsdatum(Antragsteller antragsteller) {
-		return dateConverter.convertGermanFormatToISO(antragsteller.getGeburtsdatum()).isPresent();
+		return DateConverter.convertGermanFormatToISO(antragsteller.getGeburtsdatum()).isPresent();
 	}
 
 }
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KopfCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KopfCreator.java
index 9ca24c46586dd757ea0b258476e5c6d36119c200..a31903a23072ed69eac7f8537ea16171d052e36a 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KopfCreator.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KopfCreator.java
@@ -3,11 +3,10 @@ package de.ozgcloud.alfa.vorgang;
 import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import de.ozgcloud.alfa.common.DateConverter;
-import de.ozgcloud.alfa.export.XDomeaProperties;
+import de.ozgcloud.alfa.export.XdomeaProperties;
 import de.xoev.xdomea.BehoerdenkennungType;
 import de.xoev.xdomea.Code;
 import de.xoev.xdomea.KontaktType;
@@ -15,7 +14,9 @@ import de.xoev.xdomea.NachrichtentypCodeType;
 import de.xoev.xdomea.NkAbgabeType;
 import de.xoev.xdomea.OrganisationseinheitType;
 import de.xoev.xdomea.SystemType;
+import lombok.RequiredArgsConstructor;
 
+@RequiredArgsConstructor
 @Component
 class KopfCreator {
 
@@ -27,16 +28,13 @@ class KopfCreator {
 	static final String NACHRICHTENTYP_ABGABE_ABGABE_TYPE_CODE = "0401";
 	static final String PRODUKT_NAME = "OZG-Cloud";
 
-	@Autowired
-	private XDomeaProperties xDomeaProperties;
-	@Autowired
-	private DateConverter dateConverter;
+	private final XdomeaProperties xDomeaProperties;
 
 	public NkAbgabeType createKopf(VorgangWithEingang vorgang) {
 		var nkAbgabeType = new NkAbgabeType();
 		nkAbgabeType.setProzessID(vorgang.getId());
 		nkAbgabeType.setNachrichtentyp(createNachrichtentyp());
-		nkAbgabeType.setErstellungszeitpunkt(dateConverter.toXmlGregorianCalendar(ZonedDateTime.now(ZoneOffset.UTC)));
+		nkAbgabeType.setErstellungszeitpunkt(DateConverter.toXmlGregorianCalendar(ZonedDateTime.now(ZoneOffset.UTC)));
 		nkAbgabeType.setAbsender(createAbsender(vorgang.getEingang().getZustaendigeStelle().getOrganisationseinheitenId()));
 		nkAbgabeType.setEmpfaenger(createKontaktType());
 		nkAbgabeType.setSendendesSystem(creeateSendendesSystem());
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/VorgangTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/VorgangTypeCreator.java
index 8a07a45db170d28ac7ccdc593daf143c845b284a..11b5a0502926d5b23aa29665cd47b64cf93c5c37 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/VorgangTypeCreator.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/VorgangTypeCreator.java
@@ -3,28 +3,24 @@ package de.ozgcloud.alfa.vorgang;
 import java.util.UUID;
 
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import de.xoev.xdomea.AllgemeineMetadatenType;
 import de.xoev.xdomea.IdentifikationObjektType;
 import de.xoev.xdomea.MediumCodeType;
 import de.xoev.xdomea.VorgangType;
+import lombok.RequiredArgsConstructor;
 
+@RequiredArgsConstructor
 @Component
 class VorgangTypeCreator {
 
 	static final Long NUMMER_IM_UEBERGEORDNETEN_CONTAINER = 1L;
 	static final String ALLGEMEINE_METADATEN_MEDIUM_CODE = "001";
 
-	@Autowired
-	private AnwendungsspezifischeErweiterungTypeCreator anwendungsspezifischeErweiterungTypeCreator;
-
-	@Autowired
-	private AnwendungsspezifischeErweiterungXMLTypeCreator anwendungsspezifischeErweiterungXMLTypeCreator;
-
-	@Autowired
-	private KontaktTypeCreator kontaktTypeCreator;
+	private final AnwendungsspezifischeErweiterungTypeCreator anwendungsspezifischeErweiterungTypeCreator;
+	private final AnwendungsspezifischeErweiterungXMLTypeCreator anwendungsspezifischeErweiterungXMLTypeCreator;
+	private final KontaktTypeCreator kontaktTypeCreator;
 
 	public VorgangType create(VorgangWithEingang vorgangWithEingang) {
 		var vorgang = new VorgangType();
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateConverterTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateConverterTest.java
index 0c924375c0e67c38aee383b9f69d8479553c18cb..d6673fc2325d7ef87fed22b5d7c920812308d5b0 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateConverterTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateConverterTest.java
@@ -13,7 +13,6 @@ import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
-import org.mockito.InjectMocks;
 import org.mockito.MockedStatic;
 import org.mockito.Mockito;
 
@@ -21,9 +20,6 @@ import de.ozgcloud.common.errorhandling.TechnicalException;
 
 class DateConverterTest {
 
-	@InjectMocks
-	private DateConverter converter;
-
 	@Nested
 	class TestConvertGermanFormatToISO {
 
@@ -57,7 +53,7 @@ class DateConverterTest {
 		}
 
 		private Optional<XMLGregorianCalendar> callConverter(String dateStr) {
-			return converter.convertGermanFormatToISO(dateStr);
+			return DateConverter.convertGermanFormatToISO(dateStr);
 		}
 	}
 
@@ -69,7 +65,7 @@ class DateConverterTest {
 			try (MockedStatic<DatatypeFactory> datatypeFactory = Mockito.mockStatic(DatatypeFactory.class)) {
 				datatypeFactory.when(DatatypeFactory::newInstance).thenThrow(DatatypeConfigurationException.class);
 
-				assertThatThrownBy(() -> converter.createDatatypeFactory()).isInstanceOf(TechnicalException.class);
+				assertThatThrownBy(() -> DateConverter.createDatatypeFactory()).isInstanceOf(TechnicalException.class);
 			}
 		}
 	}
@@ -81,7 +77,7 @@ class DateConverterTest {
 		void shouldConvertZonedDateTime() {
 			var date = ZonedDateTime.now();
 
-			var xmlGregorianCalendar = converter.toXmlGregorianCalendar(date);
+			var xmlGregorianCalendar = DateConverter.toXmlGregorianCalendar(date);
 
 			assertThat(xmlGregorianCalendar.getYear()).isEqualTo(date.getYear());
 			assertThat(xmlGregorianCalendar.getMonth()).isEqualTo(date.getMonthValue());
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DateiformatCodeTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateiformatCodeTest.java
similarity index 96%
rename from alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DateiformatCodeTest.java
rename to alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateiformatCodeTest.java
index 2bc5492714bb1ee3a0e19d9e237624ec16d382c8..1046b0606bee88d99e2d7856ae8df31aa37534d1 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DateiformatCodeTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateiformatCodeTest.java
@@ -1,4 +1,4 @@
-package de.ozgcloud.alfa.file;
+package de.ozgcloud.alfa.common;
 
 import static org.assertj.core.api.Assertions.*;
 
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/FormaTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/FormTypeTestFactory.java
similarity index 60%
rename from alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/FormaTypeTestFactory.java
rename to alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/FormTypeTestFactory.java
index fb1e2746723ac3384c94845b1fe1f4abc362c744..da7e15a4d08aa00085d957dc7b4b24a80568014f 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/FormaTypeTestFactory.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/FormTypeTestFactory.java
@@ -1,8 +1,8 @@
-package de.ozgcloud.alfa.file;
+package de.ozgcloud.alfa.common;
 
 import de.xoev.xdomea.FormatType;
 
-public class FormaTypeTestFactory {
+public class FormTypeTestFactory {
 
 	public static FormatType create() {
 		return new FormatType();
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilderTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..51447d711d95bd24c947899d9339d36b03e548c1
--- /dev/null
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilderTest.java
@@ -0,0 +1,104 @@
+package de.ozgcloud.alfa.common;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+import java.time.ZonedDateTime;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.MockedStatic;
+
+import de.ozgcloud.alfa.common.file.OzgFile;
+import de.ozgcloud.alfa.common.file.OzgFileTestFactory;
+
+class PrimaerdokumentTypeBuilderTest {
+
+	private final PrimaerdokumentTypeBuilder builder = PrimaerdokumentTypeBuilder.builder().withOzgFile(OzgFileTestFactory.create());
+
+	@Nested
+	class TestBuild {
+
+		private MockedStatic<ExportFilenameGenerator> exportFilenameGeneratorMockedStatic;
+
+		private static final String ERSTELLER = "Ersteller";
+		private static final String GENERATED_FILE_NAME = "file_name";
+		private static final ZonedDateTime CREATED_AT = ZonedDateTime.now();
+		private final OzgFile ozgFile = OzgFileTestFactory.create();
+
+		@BeforeEach
+		void setUp() {
+			exportFilenameGeneratorMockedStatic = mockStatic(ExportFilenameGenerator.class);
+			exportFilenameGeneratorMockedStatic.when(() -> ExportFilenameGenerator.generateExportFilename(ozgFile)).thenReturn(GENERATED_FILE_NAME);
+		}
+
+		@AfterEach
+		void tearDown() {
+			exportFilenameGeneratorMockedStatic.close();
+		}
+
+		@Test
+		void shouldGenerateExportFilename() {
+			builder.withOzgFile(ozgFile).build();
+
+			exportFilenameGeneratorMockedStatic.verify(() -> ExportFilenameGenerator.generateExportFilename(ozgFile));
+		}
+
+		@Test
+		void shouldHaveDateiname() {
+			var primaerdokumentType = builder.withOzgFile(ozgFile).build();
+
+			assertThat(primaerdokumentType.getDateiname()).isEqualTo(GENERATED_FILE_NAME);
+		}
+
+		@Test
+		void shouldNotHaveDateiname() {
+			var primaerdokumentType = builder.build();
+
+			assertThat(primaerdokumentType.getDateiname()).isNull();
+		}
+
+		@Test
+		void shouldHaveDateinameOriginal() {
+			var primaerdokumentType = builder.withOzgFile(ozgFile).build();
+
+			assertThat(primaerdokumentType.getDateinameOriginal()).isEqualTo(OzgFileTestFactory.NAME);
+		}
+
+		@Test
+		void shouldHaveErsteller() {
+			var primaerdokumentType = builder.withErsteller(ERSTELLER).build();
+
+			assertThat(primaerdokumentType.getErsteller()).isEqualTo(ERSTELLER);
+		}
+
+		@Test
+		void shouldNotHaveErsteller() {
+			var primaerdokumentType = builder.build();
+
+			assertThat(primaerdokumentType.getErsteller()).isNull();
+		}
+
+		@Test
+		void shouldHaveDatumUhrzeit() {
+			var primaerdokumentType = builder.withCreatedAt(CREATED_AT).build();
+
+			assertThat(primaerdokumentType.getDatumUhrzeit()).isEqualTo(DateConverter.toXmlGregorianCalendar(CREATED_AT));
+		}
+
+		@Test
+		void shouldNotHaveDatumUhrzeit() {
+			var primaerdokumentType = builder.build();
+
+			assertThat(primaerdokumentType.getDatumUhrzeit()).isNull();
+		}
+
+		@Test
+		void shouldThrowIllegalgStateException() {
+			assertThatThrownBy(() -> builder.withOzgFile(null).build()).isInstanceOf(IllegalStateException.class);
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/PrimaerdokumentTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeTestFactory.java
similarity index 62%
rename from alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/PrimaerdokumentTypeTestFactory.java
rename to alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeTestFactory.java
index 10ab0639a2dfe6302a3ea5cde212430d3855d717..9ea20bb8172b6528091a928726a3e4beff46448c 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/PrimaerdokumentTypeTestFactory.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeTestFactory.java
@@ -1,8 +1,8 @@
-package de.ozgcloud.alfa.file;
+package de.ozgcloud.alfa.common;
 
 import de.xoev.xdomea.PrimaerdokumentType;
 
-class PrimaerdokumentTypeTestFactory {
+public class PrimaerdokumentTypeTestFactory {
 
 	public static PrimaerdokumentType create() {
 		return new PrimaerdokumentType();
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/TestUtils.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/TestUtils.java
index 1e1bb167e2a1aad5dc12b6be510028361f083e50..098eb70e6f0fa46f2fff02c0cd9ab19f95ba0d17 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/TestUtils.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/TestUtils.java
@@ -1,5 +1,11 @@
 package de.ozgcloud.alfa.common;
 
+import static org.mockito.Mockito.*;
+
+import java.util.List;
+import java.util.function.Consumer;
+import java.util.stream.Stream;
+
 public class TestUtils {
 
 	public static final String UUID_REGEX = "[0-9a-f]{8,8}-[0-9a-f]{4,4}-[0-9a-f]{4,4}-[0-9a-f]{4,4}-[0-9a-f]{12,12}";
@@ -8,4 +14,9 @@ public class TestUtils {
 		return String.format("^%s%s$", UUID_REGEX, suffix);
 	}
 
+	public static <T> void mockStreamToList(List<T> list, Consumer<Stream<T>> mock) {
+		var mockStream = mock(Stream.class);
+		when(mockStream.toList()).thenReturn(list);
+		mock.accept(mockStream);
+	}
 }
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/VersionTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/VersionTypeTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..8baf8b26e6691208b3c292c1189a4d04a34bab87
--- /dev/null
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/VersionTypeTestFactory.java
@@ -0,0 +1,12 @@
+package de.ozgcloud.alfa.common;
+
+import de.xoev.xdomea.VersionType;
+
+public class VersionTypeTestFactory {
+
+	public static VersionType create() {
+		var versionType = new VersionType();
+		versionType.getFormat().add(FormTypeTestFactory.create());
+		return versionType;
+	}
+}
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AbgabeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AbgabeCreatorTest.java
deleted file mode 100644
index 7efbe6cbcca7da55609df8d49d136d518d106134..0000000000000000000000000000000000000000
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AbgabeCreatorTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package de.ozgcloud.alfa.export;
-
-import static org.assertj.core.api.Assertions.*;
-
-import java.util.List;
-
-import org.junit.jupiter.api.Test;
-
-import de.xoev.xdomea.AkteType;
-import de.xoev.xdomea.DokumentType;
-import de.xoev.xdomea.NkAbgabeType;
-import de.xoev.xdomea.VorgangType;
-
-public class AbgabeCreatorTest {
-
-	private final AbgabeCreator abgabeCreator = AbgabeCreator.createAbgabeCreator();
-	private final NkAbgabeType kopfType = new NkAbgabeType();
-	private final VorgangType vorgangType = new VorgangType();
-	private final List<DokumentType> dokumentTypes = List.of(new DokumentType(), new DokumentType());
-
-	@Test
-	void shouldSetKopf() {
-		var abgabeType = abgabeCreator.withKopf(kopfType).create();
-
-		assertThat(abgabeType.getKopf()).isEqualTo(kopfType);
-	}
-
-	@Test
-	void shoulAddOneSchriftgutobjekt() {
-		var abgabeType = abgabeCreator.withVorgang(vorgangType).create();
-
-		assertThat(abgabeType.getSchriftgutobjekt()).size().isEqualTo(1);
-	}
-
-	@Test
-	void shouldAddOnlyOneSchriftgutobjekt() {
-		var abgabeType = abgabeCreator.withVorgang(vorgangType).withVorgang(vorgangType).create();
-
-		assertThat(abgabeType.getSchriftgutobjekt()).size().isEqualTo(1);
-	}
-
-	@Test
-	void shouldSetVorgang() {
-		var abgabeType = abgabeCreator.withVorgang(vorgangType).create();
-
-		assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang()).isEqualTo(vorgangType);
-	}
-
-	@Test
-	void shouldAddDokumentTypes() {
-		var abgabeType = abgabeCreator.withVorgang(vorgangType).withDokumentTypes(dokumentTypes.stream()).create();
-
-		assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang().getDokument()).isEqualTo(dokumentTypes);
-	}
-
-	@Test
-	void shouldThrowExceptionIfVorgangNotSet() {
-		assertThatThrownBy(() -> abgabeCreator.withDokumentTypes(dokumentTypes.stream())).isExactlyInstanceOf(IllegalStateException.class);
-	}
-
-	@Test
-	void shouldSetAkteType() {
-		var akteType = new AkteType();
-
-		var abgabeType = abgabeCreator.withAkteType(akteType).create();
-
-		assertThat(abgabeType.getSchriftgutobjekt().get(0).getAkte()).isEqualTo(akteType);
-	}
-}
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AkteTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AkteTypeTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..a13852e5a7eb4ad6cf42af49f7cf983d81a0e8a1
--- /dev/null
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AkteTypeTestFactory.java
@@ -0,0 +1,10 @@
+package de.ozgcloud.alfa.export;
+
+import de.xoev.xdomea.AkteType;
+
+public class AkteTypeTestFactory {
+
+	public static AkteType create() {
+		return new AkteType();
+	}
+}
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportConfigurationTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportConfigurationTest.java
index ea207d98c6d2ef4494aaf13ed8766a35124bf780..4dc62c958303b3a467bd9c32a432df417fcdab87 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportConfigurationTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportConfigurationTest.java
@@ -5,6 +5,8 @@ import static org.mockito.Mockito.*;
 
 import java.util.Map;
 
+import jakarta.xml.bind.Marshaller;
+
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
@@ -13,8 +15,6 @@ import org.mockito.Mock;
 import org.mockito.Spy;
 import org.springframework.oxm.jaxb.Jaxb2Marshaller;
 
-import jakarta.xml.bind.Marshaller;
-
 class ExportConfigurationTest {
 
 	@Spy
@@ -22,7 +22,7 @@ class ExportConfigurationTest {
 	private ExportConfiguration configuration;
 
 	@Mock
-	private XDomeaNamespacePrefixMapper prefixMapper;
+	private XdomeaNamespacePrefixMapper prefixMapper;
 
 	@Nested
 	class TestCreateMarshallerProperties {
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportDataTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportDataTestFactory.java
index 4843d830ed6dc1f31db0b27359c2352c9bcf6d90..b6b8549770ace6c03514451fc6a5ab115af2b50f 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportDataTestFactory.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportDataTestFactory.java
@@ -1,6 +1,6 @@
 package de.ozgcloud.alfa.export;
 
-import java.util.stream.Stream;
+import java.util.List;
 
 import de.ozgcloud.alfa.common.file.OzgFile;
 import de.ozgcloud.alfa.common.file.OzgFileTestFactory;
@@ -20,6 +20,6 @@ class ExportDataTestFactory {
 		return ExportData.builder()
 				.exportFilename(EXPORT_FILENAME)
 				.abgabe(ABGABE)
-				.exportFiles(Stream.of(OZG_FILE));
+				.exportFiles(List.of(OZG_FILE));
 	}
 }
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportFilenameGeneratorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportFilenameGeneratorTest.java
index 229903bef4f56342d5e68f432ac0d03814aa6055..1b85ad584d8f2bea60f283e6f20be763731173de 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportFilenameGeneratorTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportFilenameGeneratorTest.java
@@ -3,11 +3,11 @@ package de.ozgcloud.alfa.export;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
+import org.mockito.MockedStatic;
 
 import de.ozgcloud.alfa.common.ExportFilenameGenerator;
 import de.ozgcloud.alfa.common.TestUtils;
@@ -17,11 +17,7 @@ import de.ozgcloud.alfa.common.file.OzgFileTestFactory;
 
 class ExportFilenameGeneratorTest {
 
-	@InjectMocks
-	private ExportFilenameGenerator generator;
-
-	@Mock
-	private UUIDConverter uuidConverter;
+	private MockedStatic<UUIDConverter> uuidConverter;
 
 	@Nested
 	class TestGenerateExportFilename {
@@ -32,14 +28,20 @@ class ExportFilenameGeneratorTest {
 
 		@BeforeEach
 		void init() {
-			when(uuidConverter.fromObjectId(ozgFile.getId().toString())).thenReturn(UUID);
+			uuidConverter = mockStatic(UUIDConverter.class);
+			uuidConverter.when(() -> UUIDConverter.fromObjectId(ozgFile.getId().toString())).thenReturn(UUID);
+		}
+
+		@AfterEach
+		void cleanup() {
+			uuidConverter.close();
 		}
 
 		@Test
 		void shouldConvertObjectId() {
 			callGenerator();
 
-			verify(uuidConverter).fromObjectId(ozgFile.getId().toString());
+			uuidConverter.verify(() -> UUIDConverter.fromObjectId(ozgFile.getId().toString()));
 		}
 
 		@Test
@@ -50,7 +52,7 @@ class ExportFilenameGeneratorTest {
 		}
 
 		private String callGenerator() {
-			return generator.generateExportFilename(ozgFile);
+			return ExportFilenameGenerator.generateExportFilename(ozgFile);
 		}
 	}
 
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceITCase.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceITCase.java
index 7f5909d46e0d2f6570859326f88c4d9990a8d869..de5eb64ef80434dd12d08b42bae0f0e8008c9bb9 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceITCase.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceITCase.java
@@ -6,8 +6,8 @@ import static org.mockito.Mockito.*;
 import java.io.ByteArrayOutputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.HexFormat;
-import java.util.List;
 import java.util.UUID;
+import java.util.stream.Stream;
 
 import org.apache.commons.lang3.RandomStringUtils;
 import org.junit.jupiter.api.BeforeEach;
@@ -21,6 +21,8 @@ import de.ozgcloud.alfa.common.file.OzgFile;
 import de.ozgcloud.alfa.common.file.OzgFileTestFactory;
 import de.ozgcloud.alfa.file.ExportFileService;
 import de.ozgcloud.alfa.vorgang.ExportVorgangService;
+import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
+import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
 import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory;
 import de.ozgcloud.common.test.ITCase;
 
@@ -37,16 +39,20 @@ class ExportServiceITCase {
 	@Nested
 	class TestWriteExport {
 
+		private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create();
+
 		@BeforeEach
 		void setup() {
-			doReturn(VorgangWithEingangTestFactory.create()).when(exportVorgangService).getVorgang(anyString());
-			doReturn(List.of(createOzgFile())).when(exportFileService).getAllPdfs(anyString());
+			doReturn(vorgang).when(exportVorgangService).getVorgang(VorgangHeaderTestFactory.ID);
+			doReturn(Stream.of(createOzgFile())).when(exportFileService).getRepresentations(vorgang);
+			doReturn(Stream.of(createOzgFile())).when(exportFileService).getAttachments(vorgang);
 			doNothing().when(exportFileService).writeOzgFile(any(), any());
 		}
 
 		@Test
 		void shouldNotThrowException() {
-			assertDoesNotThrow(() -> exportService.writeExport(UUID.randomUUID().toString(), UUID.randomUUID().toString(), new ByteArrayOutputStream()));
+			assertDoesNotThrow(
+					() -> exportService.writeExport(VorgangHeaderTestFactory.ID, UUID.randomUUID().toString(), new ByteArrayOutputStream()));
 		}
 	}
 
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java
index 5cb5123e7fb35b8ec94ae9a8a4c42a634e4e80c8..d1e6e41a4bc5354cd9891f94900baef47c35d54d 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java
@@ -1,7 +1,7 @@
 package de.ozgcloud.alfa.export;
 
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static de.ozgcloud.alfa.common.TestUtils.*;
+import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
@@ -11,7 +11,6 @@ import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.UUID;
-import java.util.stream.Stream;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
@@ -36,6 +35,7 @@ import de.ozgcloud.alfa.vorgang.EingangHeaderTestFactory;
 import de.ozgcloud.alfa.vorgang.EingangTestFactory;
 import de.ozgcloud.alfa.vorgang.ExportVorgangService;
 import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
+import de.ozgcloud.alfa.vorgang.VorgangTypeTestFactory;
 import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
 import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory;
 import de.ozgcloud.common.errorhandling.TechnicalException;
@@ -53,7 +53,7 @@ class ExportServiceTest {
 	private ExportService service;
 
 	@Mock
-	private XDomeaXmlMarshaller XDomeaXmlMarshaller;
+	private XdomeaXmlMarshaller xdomeaXmlMarshaller;
 
 	@Mock
 	private ExportFileService exportFileService;
@@ -61,9 +61,6 @@ class ExportServiceTest {
 	@Mock
 	private ExportVorgangService exportVorgangService;
 
-	@Mock
-	private ExportFilenameGenerator exportFilenameGenerator;
-
 	@DisplayName("Write exportToXdomea")
 	@Nested
 	class TestWriteExport {
@@ -111,38 +108,66 @@ class ExportServiceTest {
 	@Nested
 	class TestCollectExportData {
 
+		private MockedStatic<XdomeaNachrichtBuilder> xdomeaNachrichtBuilderMockedStatic;
+
 		private static final String FILENAME_ID = UUID.randomUUID().toString();
 		private static final String FILE_NAME = "file.zip";
 		private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create();
-		private final VorgangType vorgangType = new VorgangType();
-		private final NkAbgabeType kopfType = new NkAbgabeType();
-		private final Stream<OzgFile> ozgFiles = Stream.of(OzgFileTestFactory.create());
-		private final Stream<DokumentType> dokumentTypes = Stream.of(DokumentTypeTestFactory.create());
-		private final AbgabeAbgabe0401 abgabeAbgabe0401 = AbgabeAbgabe0401TestFactory.create();
-
-		private MockedStatic<AbgabeCreator> abgabeCreatorStatic;
+		private final VorgangType vorgangType = VorgangTypeTestFactory.create();
+		private final NkAbgabeType kopfType = NkAbgabeTypeTestFactory.create();
+		private final AbgabeAbgabe0401 abgabe = AbgabeAbgabe0401TestFactory.create();
+		private final AkteType akteType = AkteTypeTestFactory.create();
+		private final List<OzgFile> representations = List.of(OzgFileTestFactory.create());
+		private final List<OzgFile> attachments = List.of(OzgFileTestFactory.create());
+		private final List<DokumentType> representationsDokumentTypes = List.of(DokumentTypeTestFactory.create());
+		private final List<DokumentType> attachmentsDokumentTypes = List.of(DokumentTypeTestFactory.create());
 
-		@Spy
-		private AbgabeCreator abgabeCreator;
+		@Mock
+		private XdomeaNachrichtBuilder xdomeaNachrichtBuilder;
 
 		@BeforeEach
 		void setUp() {
-			when(exportVorgangService.getVorgang(any())).thenReturn(vorgang);
-			when(exportVorgangService.createVorgangType(any())).thenReturn(vorgangType);
-			when(exportVorgangService.createKopf(any())).thenReturn(kopfType);
-			List<OzgFile> ozgFileList = mock(List.class);
-			when(ozgFileList.stream()).thenReturn(ozgFiles);
-			when(exportFileService.getAllPdfs(any())).thenReturn(ozgFileList);
-			when(exportFileService.createDokumentTypes(any(), any())).thenReturn(dokumentTypes);
-			doReturn(FILE_NAME).when(service).buildXmlFilename(any());
-			abgabeCreatorStatic = mockStatic(AbgabeCreator.class);
-			abgabeCreatorStatic.when(AbgabeCreator::createAbgabeCreator).thenReturn(abgabeCreator);
-			doReturn(abgabeAbgabe0401).when(abgabeCreator).create();
+			setUpVorgangService();
+			setUpXdomeaNachrichtBuilder();
+			setUpExportFileService();
+
+			doReturn(FILE_NAME).when(service).buildXmlFilename(FILENAME_ID);
+			doReturn(EingangHeaderTestFactory.FORM_ENGINE_NAME).when(service).getFormEngineName(vorgang);
+
+		}
+
+		private void setUpVorgangService() {
+			when(exportVorgangService.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang);
+			when(exportVorgangService.createVorgangType(vorgang)).thenReturn(vorgangType);
+			when(exportVorgangService.createKopf(vorgang)).thenReturn(kopfType);
+			when(exportVorgangService.createAkteType(vorgang)).thenReturn(akteType);
+		}
+
+		private void setUpXdomeaNachrichtBuilder() {
+			xdomeaNachrichtBuilderMockedStatic = mockStatic(XdomeaNachrichtBuilder.class);
+			when(xdomeaNachrichtBuilder.withKopf(kopfType)).thenReturn(xdomeaNachrichtBuilder);
+			when(xdomeaNachrichtBuilder.withVorgang(vorgangType)).thenReturn(xdomeaNachrichtBuilder);
+			when(xdomeaNachrichtBuilder.withAktenzeichen(akteType)).thenReturn(xdomeaNachrichtBuilder);
+			when(xdomeaNachrichtBuilder.withRepresentations(representationsDokumentTypes)).thenReturn(xdomeaNachrichtBuilder);
+			when(xdomeaNachrichtBuilder.withAttachments(attachmentsDokumentTypes)).thenReturn(xdomeaNachrichtBuilder);
+			xdomeaNachrichtBuilderMockedStatic.when(XdomeaNachrichtBuilder::builder).thenReturn(xdomeaNachrichtBuilder);
+			when(xdomeaNachrichtBuilder.build()).thenReturn(abgabe);
+		}
+
+		private void setUpExportFileService() {
+			mockStreamToList(representations, stream -> when(exportFileService.getRepresentations(vorgang)).thenReturn(stream));
+			mockStreamToList(attachments, stream -> when(exportFileService.getAttachments(vorgang)).thenReturn(stream));
+			mockStreamToList(representationsDokumentTypes,
+					stream ->
+							when(exportFileService.createDokumentTypes(representations, EingangHeaderTestFactory.FORM_ENGINE_NAME))
+									.thenReturn(stream));
+			mockStreamToList(attachmentsDokumentTypes, stream ->
+					when(exportFileService.createDokumentTypes(attachments, EingangHeaderTestFactory.FORM_ENGINE_NAME)).thenReturn(stream));
 		}
 
 		@AfterEach
-		void cleanup() {
-			abgabeCreatorStatic.close();
+		void tearDown() {
+			xdomeaNachrichtBuilderMockedStatic.close();
 		}
 
 		@Test
@@ -160,10 +185,17 @@ class ExportServiceTest {
 		}
 
 		@Test
-		void shouldGetPdfFiles() {
+		void shouldGetRepresentations() {
 			callService();
 
-			verify(exportFileService).getAllPdfs(EingangTestFactory.ID);
+			verify(exportFileService).getRepresentations(vorgang);
+		}
+
+		@Test
+		void shouldGetAttachments() {
+			callService();
+
+			verify(exportFileService).getAttachments(vorgang);
 		}
 
 		@Test
@@ -181,10 +213,17 @@ class ExportServiceTest {
 		}
 
 		@Test
-		void shouldCreateDokumentTypes() {
+		void shouldCreateRepresentationsDokumentTypes() {
 			callService();
 
-			verify(exportFileService).createDokumentTypes(ozgFiles, EingangHeaderTestFactory.FORM_ENGINE_NAME);
+			verify(exportFileService).createDokumentTypes(representations, EingangHeaderTestFactory.FORM_ENGINE_NAME);
+		}
+
+		@Test
+		void shouldCreateAttachmentsDokumentTypes() {
+			callService();
+
+			verify(exportFileService).createDokumentTypes(attachments, EingangHeaderTestFactory.FORM_ENGINE_NAME);
 		}
 
 		@Test
@@ -198,45 +237,49 @@ class ExportServiceTest {
 		void shouldSetKopf() {
 			callService();
 
-			verify(abgabeCreator).withKopf(kopfType);
+			verify(xdomeaNachrichtBuilder).withKopf(kopfType);
 		}
 
 		@Test
 		void shouldSetVorgang() {
 			callService();
 
-			verify(abgabeCreator).withVorgang(vorgangType);
+			verify(xdomeaNachrichtBuilder).withVorgang(vorgangType);
 		}
 
 		@Test
-		void shouldSetDokumentTypes() {
+		void shouldSetRepresentations() {
 			callService();
 
-			verify(abgabeCreator).withDokumentTypes(dokumentTypes);
+			verify(xdomeaNachrichtBuilder).withRepresentations(representationsDokumentTypes);
 		}
 
 		@Test
-		void shouldSetAkteType() {
-			var akteType = new AkteType();
-			when(exportVorgangService.createAkteType(vorgang)).thenReturn(akteType);
+		void shouldSetAttachments() {
+			callService();
 
+			verify(xdomeaNachrichtBuilder).withAttachments(attachmentsDokumentTypes);
+		}
+
+		@Test
+		void shouldSetAktenzeichen() {
 			callService();
 
-			verify(abgabeCreator).withAkteType(akteType);
+			verify(xdomeaNachrichtBuilder).withAktenzeichen(akteType);
 		}
 
 		@Test
 		void shouldCreateAbgabe() {
 			callService();
 
-			verify(abgabeCreator).create();
+			verify(xdomeaNachrichtBuilder).build();
 		}
 
 		@Test
 		void shouldContainAbgabe() {
 			var exportData = callService();
 
-			assertThat(exportData.getAbgabe()).isEqualTo(abgabeAbgabe0401);
+			assertThat(exportData.getAbgabe()).isEqualTo(abgabe);
 		}
 
 		@Test
@@ -250,13 +293,16 @@ class ExportServiceTest {
 		void shouldContainExportExportFiles() {
 			var exportData = callService();
 
-			assertThat(exportData.getExportFiles()).isEqualTo(ozgFiles);
+			assertThat(exportData.getExportFiles())
+					.hasSize(2)
+					.containsAll(representations)
+					.containsAll(attachments);
+
 		}
 
 		private ExportData callService() {
 			return service.collectExportData(VorgangHeaderTestFactory.ID, FILENAME_ID);
 		}
-
 	}
 
 	@DisplayName("Build xml Filename")
@@ -279,14 +325,14 @@ class ExportServiceTest {
 
 		@BeforeEach
 		void init() {
-			when(XDomeaXmlMarshaller.marshal(any())).thenReturn(XML_STRING);
+			when(xdomeaXmlMarshaller.marshal(any())).thenReturn(XML_STRING);
 		}
 
 		@Test
 		void shouldCallXmlMarshaller() {
 			callService();
 
-			verify(XDomeaXmlMarshaller).marshal(ExportDataTestFactory.ABGABE);
+			verify(xdomeaXmlMarshaller).marshal(ExportDataTestFactory.ABGABE);
 		}
 
 		@Test
@@ -420,6 +466,8 @@ class ExportServiceTest {
 	@Nested
 	class TestPutOzgFileIntoZip {
 
+		private MockedStatic<ExportFilenameGenerator> exportFilenameGenerator;
+
 		@Mock
 		private ZipOutputStream zipOutputStream;
 
@@ -430,14 +478,20 @@ class ExportServiceTest {
 
 		@BeforeEach
 		void setUp() {
-			when(exportFilenameGenerator.generateExportFilename(ozgFile)).thenReturn(OzgFileTestFactory.NAME);
+			exportFilenameGenerator = mockStatic(ExportFilenameGenerator.class);
+			exportFilenameGenerator.when(() -> ExportFilenameGenerator.generateExportFilename(ozgFile)).thenReturn(OzgFileTestFactory.NAME);
+		}
+
+		@AfterEach
+		void cleanUp() {
+			exportFilenameGenerator.close();
 		}
 
 		@Test
 		void shouldGenerateExportFilename() {
 			callService();
 
-			verify(exportFilenameGenerator).generateExportFilename(ozgFile);
+			exportFilenameGenerator.verify(() -> ExportFilenameGenerator.generateExportFilename(ozgFile));
 		}
 
 		@SneakyThrows
@@ -470,4 +524,35 @@ class ExportServiceTest {
 		}
 
 	}
+
+	@Nested
+	class TestGetFormEngineName {
+
+		@Test
+		void shouldReturnEmptyStringOnNullEingang() {
+			var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(null).build();
+
+			var formEngineName = service.getFormEngineName(vorgang);
+
+			assertThat(formEngineName).isEmpty();
+		}
+
+		@Test
+		void shouldReturnEmptyStringOnNullEingangHeader() {
+			var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().header(null).build()).build();
+
+			var formEngineName = service.getFormEngineName(vorgang);
+
+			assertThat(formEngineName).isEmpty();
+		}
+
+		@Test
+		void shouldReturnFormEngineName() {
+			VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create();
+
+			var formEngineName = service.getFormEngineName(vorgang);
+
+			assertThat(formEngineName).isEqualTo(EingangHeaderTestFactory.FORM_ENGINE_NAME);
+		}
+	}
 }
\ No newline at end of file
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangControllerTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangControllerTest.java
index 23b527f9e770d1eb366469f71889ac5ac4a2e6e5..61ee1269d53784bb31df5c85fdc192c667cdf338 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangControllerTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangControllerTest.java
@@ -70,7 +70,7 @@ class ExportVorgangControllerTest {
 		}
 
 		@Test
-		void shouldCallXDomeaService() throws Exception {
+		void shouldCallXdomeaService() throws Exception {
 			doRequest();
 
 			verify(xDomeaService).writeExport(eq(VorgangHeaderTestFactory.ID), filenameIdArgumentCaptor.capture(), any());
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NamespacePrefixMapperTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NamespacePrefixMapperTest.java
index 9a57bd3ac67e6c24087658c88e978b2de2bfc757..1261762b14a1ae7278b4489016faef0187f53374 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NamespacePrefixMapperTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NamespacePrefixMapperTest.java
@@ -9,17 +9,17 @@ import org.junit.jupiter.api.Test;
 
 class NamespacePrefixMapperTest {
 
-	private XDomeaNamespacePrefixMapper prefixMapper = new XDomeaNamespacePrefixMapper();
+	private XdomeaNamespacePrefixMapper prefixMapper = new XdomeaNamespacePrefixMapper();
 
 	@DisplayName("Get preferred prefix")
 	@Nested
 	class TestGetPreferredPrefix {
 
 		@Test
-		void shouldReturnXDomeaPrefix() {
-			var prefix = prefixMapper.getPreferredPrefix(XDomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_URI, StringUtils.EMPTY, false);
+		void shouldReturnXdomeaPrefix() {
+			var prefix = prefixMapper.getPreferredPrefix(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_URI, StringUtils.EMPTY, false);
 
-			assertThat(prefix).isEqualTo(XDomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_PREFIX);
+			assertThat(prefix).isEqualTo(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_PREFIX);
 		}
 
 		@Test
@@ -45,28 +45,28 @@ class NamespacePrefixMapperTest {
 		void shouldContainsDinspec() {
 			var uris = prefixMapper.getPreDeclaredNamespaceUris();
 
-			assertThat(uris).contains(XDomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_DINSPEC_URI);
+			assertThat(uris).contains(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_DINSPEC_URI);
 		}
 
 		@Test
 		void shouldContainsGml() {
 			var uris = prefixMapper.getPreDeclaredNamespaceUris();
 
-			assertThat(uris).contains(XDomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_GML_URI);
+			assertThat(uris).contains(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_GML_URI);
 		}
 
 		@Test
 		void shouldContainsXoevCode() {
 			var uris = prefixMapper.getPreDeclaredNamespaceUris();
 
-			assertThat(uris).contains(XDomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_XOEV_CODE_URI);
+			assertThat(uris).contains(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_XOEV_CODE_URI);
 		}
 
 		@Test
 		void shouldContainsXoevLx() {
 			var uris = prefixMapper.getPreDeclaredNamespaceUris();
 
-			assertThat(uris).contains(XDomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_XOEV_LC_URI);
+			assertThat(uris).contains(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_XOEV_LC_URI);
 		}
 	}
 }
\ No newline at end of file
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NkAbgabeTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NkAbgabeTypeTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..e93a73419cc57dd0da460c220fe2e5fcaa7d3fa9
--- /dev/null
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NkAbgabeTypeTestFactory.java
@@ -0,0 +1,11 @@
+package de.ozgcloud.alfa.export;
+
+import de.xoev.xdomea.NkAbgabeType;
+
+public class NkAbgabeTypeTestFactory {
+
+	public static NkAbgabeType create() {
+		return new NkAbgabeType();
+	}
+
+}
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/UUIDConverterTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/UUIDConverterTest.java
index 27a76cf3903e7932b0e713159ad1a14730f891fe..f3da0c5f65cf046199af868553c39e19c413ce03 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/UUIDConverterTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/UUIDConverterTest.java
@@ -4,29 +4,25 @@ import static org.assertj.core.api.Assertions.*;
 
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
 
 import de.ozgcloud.alfa.common.TestUtils;
 import de.ozgcloud.alfa.common.UUIDConverter;
 
 class UUIDConverterTest {
 
-	@InjectMocks
-	private UUIDConverter converter;
-
 	@Nested
 	class TestFromObjectId {
 
 		@Test
 		void shouldReturnUUID() {
-			var result = converter.fromObjectId("64a820d36285172ac02826d0");
+			var result = UUIDConverter.fromObjectId("64a820d36285172ac02826d0");
 
 			assertThat(result).isEqualTo("64a820d3-6285-172a-c028-0000000026d0").matches(TestUtils.UUID_REGEX);
 		}
 
 		@Test
 		void shouldThrowIllegalArgumentException() {
-			assertThatThrownBy(() -> converter.fromObjectId("abc")).isInstanceOf(IllegalArgumentException.class);
+			assertThatThrownBy(() -> UUIDConverter.fromObjectId("abc")).isInstanceOf(IllegalArgumentException.class);
 		}
 	}
 
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilderTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..e68698cd40f973d31472f1388373e50c531a3b52
--- /dev/null
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilderTest.java
@@ -0,0 +1,56 @@
+package de.ozgcloud.alfa.export;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.util.List;
+
+import org.junit.jupiter.api.Test;
+
+import de.ozgcloud.alfa.vorgang.VorgangTypeTestFactory;
+import de.xoev.xdomea.DokumentType;
+import de.xoev.xdomea.NkAbgabeType;
+import de.xoev.xdomea.VorgangType;
+
+class XdomeaNachrichtBuilderTest {
+
+	private final NkAbgabeType kopfType = NkAbgabeTypeTestFactory.create();
+	private final VorgangType vorgangType = VorgangTypeTestFactory.create();
+	private final List<DokumentType> representations = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create());
+	private final List<DokumentType> attachments = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create());
+	private final XdomeaNachrichtBuilder builder = XdomeaNachrichtBuilder.builder().withVorgang(vorgangType);
+
+	@Test
+	void shoulAddOneSchriftgutobjekt() {
+		var abgabeType = builder.build();
+
+		assertThat(abgabeType.getSchriftgutobjekt()).size().isEqualTo(1);
+	}
+
+	@Test
+	void shouldSetVorgang() {
+		var abgabeType = builder.build();
+
+		assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang()).isEqualTo(vorgangType);
+	}
+
+	@Test
+	void shouldSetKopf() {
+		var abgabeType = builder.withKopf(kopfType).build();
+
+		assertThat(abgabeType.getKopf()).isEqualTo(kopfType);
+	}
+
+	@Test
+	void shouldAddRepresentations() {
+		var abgabeType = builder.withRepresentations(representations).build();
+
+		assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang().getDokument()).isEqualTo(representations);
+	}
+
+	@Test
+	void shouldAddAttachments() {
+		var abgabeType = builder.withAttachments(attachments).build();
+
+		assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang().getDokument()).isEqualTo(attachments);
+	}
+}
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XmlMarshallerTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XmlMarshallerTest.java
index ee8e68383fa4ee146e1d4136a17e7c965f484581..47e3c97c8f8bb27670b5bcde0b25a82700cb1148 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XmlMarshallerTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XmlMarshallerTest.java
@@ -23,7 +23,7 @@ class XmlMarshallerTest {
 
 	@Spy
 	@InjectMocks
-	private XDomeaXmlMarshaller XDomeaXmlMarshaller;
+	private XdomeaXmlMarshaller xdomeaXmlMarshaller;
 
 	@Mock
 	private Jaxb2Marshaller marshaller;
@@ -38,7 +38,7 @@ class XmlMarshallerTest {
 
 		@Test
 		void shouldMarshal() {
-			XDomeaXmlMarshaller.marshal(abgabe);
+			xdomeaXmlMarshaller.marshal(abgabe);
 
 			verify(marshaller).marshal(eq(abgabe), streamResultArgumentCaptor.capture());
 			assertThat(streamResultArgumentCaptor.getValue().getWriter()).isInstanceOf(StringWriter.class);
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..332cfc515421594b8613b79ce54b31effcf7ec04
--- /dev/null
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderTest.java
@@ -0,0 +1,304 @@
+package de.ozgcloud.alfa.file;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+import org.apache.commons.lang3.RandomUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+import org.mockito.MockedStatic;
+
+import de.ozgcloud.alfa.common.DateiformatCode;
+import de.ozgcloud.alfa.common.FormTypeTestFactory;
+import de.ozgcloud.alfa.common.PrimaerdokumentTypeBuilder;
+import de.ozgcloud.alfa.common.PrimaerdokumentTypeTestFactory;
+import de.ozgcloud.alfa.common.TestUtils;
+import de.ozgcloud.alfa.common.UUIDConverter;
+import de.ozgcloud.alfa.common.VersionTypeTestFactory;
+import de.ozgcloud.alfa.common.file.OzgFile;
+import de.ozgcloud.alfa.common.file.OzgFileTestFactory;
+import de.ozgcloud.alfa.export.AllgemeineMetadatenTypeTestFactory;
+import de.ozgcloud.alfa.export.IdentifikationObjektTypeTestFactory;
+import de.xoev.xdomea.AllgemeineMetadatenType;
+import de.xoev.xdomea.FormatType;
+import de.xoev.xdomea.IdentifikationObjektType;
+import de.xoev.xdomea.PrimaerdokumentType;
+import de.xoev.xdomea.VersionType;
+
+class DokumentTypeBuilderTest {
+
+	private static final Long DOKUMENT_ORDINAL_NUMBER = RandomUtils.nextLong();
+	private static final String FORM_ENGINE_NAME = "DUMMY_NAME";
+	private final OzgFile ozgFile = OzgFileTestFactory.create();
+
+	private final DokumentTypeBuilder builder = spy(DokumentTypeBuilder.builder()
+			.withOzgFile(ozgFile)
+			.withFormEngineName(FORM_ENGINE_NAME)
+			.withOrdinalNumber(DOKUMENT_ORDINAL_NUMBER));
+
+	private MockedStatic<UUIDConverter> uuidConverter;
+
+	@BeforeEach
+	void init() {
+		uuidConverter = mockStatic(UUIDConverter.class);
+	}
+
+	@AfterEach
+	void cleanup() {
+		uuidConverter.close();
+	}
+
+	@Nested
+	class TestBuild {
+
+		private final IdentifikationObjektType identifikationObjekt = IdentifikationObjektTypeTestFactory.create();
+		private final AllgemeineMetadatenType allgemeineMetadaten = AllgemeineMetadatenTypeTestFactory.create();
+		private final VersionType versionType = VersionTypeTestFactory.create();
+		private final PrimaerdokumentType primaerdokument = PrimaerdokumentTypeTestFactory.create();
+
+		@BeforeEach
+		void setUp() {
+			doReturn(identifikationObjekt).when(builder).createIdentifikation();
+			doReturn(versionType).when(builder).createVersionType();
+			doReturn(allgemeineMetadaten).when(builder).createAllgemeineMetadaten();
+			doReturn(primaerdokument).when(builder).createPrimaerdokument();
+		}
+
+		@Test
+		void shouldCreateIdentifikation() {
+			builder.build();
+
+			verify(builder).createIdentifikation();
+		}
+
+		@Test
+		void shouldHaveIdentifikation() {
+			var dokument = builder.build();
+
+			assertThat(dokument.getIdentifikation()).isEqualTo(identifikationObjekt);
+		}
+
+		@Test
+		void shouldCreateAllgemeineMetadaten() {
+			builder.build();
+
+			verify(builder).createAllgemeineMetadaten();
+		}
+
+		@Test
+		void shouldHaveAllgemeineMetadaten() {
+			var dokument = builder.build();
+
+			assertThat(dokument.getAllgemeineMetadaten()).isEqualTo(allgemeineMetadaten);
+		}
+
+		@Test
+		void shouldCreateVersion() {
+			builder.build();
+
+			verify(builder).createVersionType();
+		}
+
+		@Test
+		void shouldHaveVersion() {
+			var dokumentType = builder.build();
+
+			assertThat(dokumentType.getVersion()).containsExactly(versionType);
+		}
+
+		@Test
+		void shouldCreatePrimaerdokument() {
+			builder.build();
+
+			verify(builder).createPrimaerdokument();
+		}
+
+		@Test
+		void shouldHavePrimaerdokument() {
+			var dokument = builder.build();
+
+			assertThat(dokument.getVersion().get(0).getFormat().get(0).getPrimaerdokument()).isEqualTo(primaerdokument);
+		}
+
+	}
+
+	@Nested
+	class TestCreateIdentifikation {
+
+		private final String FILE_UUID = "64a820d3-6285-172a-c028-0000000026d0";
+
+		@BeforeEach
+		void init() {
+			uuidConverter.when(() -> UUIDConverter.fromObjectId(OzgFileTestFactory.ID.toString())).thenReturn(FILE_UUID);
+		}
+
+		@Test
+		void shouldConvertObjectId() {
+			builder.createIdentifikation();
+
+			uuidConverter.verify(() -> UUIDConverter.fromObjectId(OzgFileTestFactory.ID.toString()));
+		}
+
+		@Test
+		void shouldHaveId() {
+			var identifikation = builder.createIdentifikation();
+
+			assertThat(identifikation.getID()).matches(TestUtils.UUID_REGEX).isEqualTo(FILE_UUID);
+		}
+
+		@Test
+		void shouldHaveNummerImUebergeordnetenContainer() {
+			var identifikation = builder.createIdentifikation();
+
+			assertThat(identifikation.getNummerImUebergeordnetenContainer()).isEqualTo(DOKUMENT_ORDINAL_NUMBER);
+		}
+	}
+
+	@Nested
+	class TestCreateAllgemeineMetadaten {
+
+		@Test
+		void shouldHaveBetreff() {
+			var allgemeineMetadaten = builder.createAllgemeineMetadaten();
+
+			assertThat(allgemeineMetadaten.getBetreff()).isEqualTo(OzgFileTestFactory.NAME);
+		}
+
+		@Test
+		void shouldHaveEmptyKennzeichen() {
+			var allgemeineMetadaten = builder.createAllgemeineMetadaten();
+
+			assertThat(allgemeineMetadaten.getKennzeichen()).isEmpty();
+		}
+
+		@Test
+		void shouldHaveEmptyBemerkung() {
+			var allgemeineMetadaten = builder.createAllgemeineMetadaten();
+
+			assertThat(allgemeineMetadaten.getBemerkung()).isEmpty();
+		}
+
+		@Test
+		void shouldHaveMedium() {
+			var allgemeineMetadaten = builder.createAllgemeineMetadaten();
+
+			assertThat(allgemeineMetadaten.getMedium().getCode()).isEqualTo(DokumentTypeBuilder.ALLGEMEINE_METADATEN_MEDIUM_CODE);
+		}
+
+	}
+
+	@Nested
+	class TestCreateFormatType {
+
+		@Test
+		void shouldHaveName() {
+			var formatType = builder.createFormatType();
+
+			assertThat(formatType.getName().getCode()).isEqualTo(DateiformatCode.PDF.getCode());
+		}
+
+		@Test
+		void shouldHaveSonstinerNameEmptyString() {
+			var formatType = builder.createFormatType();
+
+			assertThat(formatType.getSonstigerName()).isEqualTo(StringUtils.EMPTY);
+		}
+
+		@Test
+		void shouldHaveVersionEmptyString() {
+			var formatType = builder.createFormatType();
+
+			assertThat(formatType.getVersion()).isEqualTo(StringUtils.EMPTY);
+		}
+
+	}
+
+	@Nested
+	class CreateVersionType {
+
+		private final FormatType formatType = FormTypeTestFactory.create();
+
+		@BeforeEach
+		void setUp() {
+			doReturn(formatType).when(builder).createFormatType();
+		}
+
+		@Test
+		void shouldHaveNummer() {
+			var versionType = builder.createVersionType();
+
+			assertThat(versionType.getNummer()).isEqualTo(DokumentTypeBuilder.VERSION_NUMMER);
+		}
+
+		@Test
+		void shouldCreateFormatType() {
+			builder.createVersionType();
+
+			verify(builder).createFormatType();
+		}
+
+		@Test
+		void shouldHaveFormat() {
+			var versionType = builder.createVersionType();
+
+			assertThat(versionType.getFormat()).first().isEqualTo(formatType);
+		}
+	}
+
+	@Nested
+	class TestCreatePrimaerdokument {
+
+		private MockedStatic<PrimaerdokumentTypeBuilder> primaerdokumentTypeBuilderMockedStatic;
+		@Mock
+		private PrimaerdokumentTypeBuilder primaerdokumentTypeBuilder;
+
+		private final PrimaerdokumentType primaerdokumentType = PrimaerdokumentTypeTestFactory.create();
+
+		@BeforeEach
+		void setUp() {
+			primaerdokumentTypeBuilderMockedStatic = mockStatic(PrimaerdokumentTypeBuilder.class);
+			primaerdokumentTypeBuilderMockedStatic.when(PrimaerdokumentTypeBuilder::builder).thenReturn(primaerdokumentTypeBuilder);
+			when(primaerdokumentTypeBuilder.withOzgFile(ozgFile)).thenReturn(primaerdokumentTypeBuilder);
+			when(primaerdokumentTypeBuilder.withErsteller(FORM_ENGINE_NAME)).thenReturn(primaerdokumentTypeBuilder);
+			when(primaerdokumentTypeBuilder.build()).thenReturn(primaerdokumentType);
+		}
+
+		@AfterEach
+		void tearDown() {
+			primaerdokumentTypeBuilderMockedStatic.close();
+		}
+
+		@Test
+		void shouldCreatePrimaerdokumentWithOzgFile() {
+			builder.createPrimaerdokument();
+
+			verify(primaerdokumentTypeBuilder).withOzgFile(ozgFile);
+		}
+
+		@Test
+		void shouldCreatePrimaerdokumentWithErsteller() {
+			builder.createPrimaerdokument();
+
+			verify(primaerdokumentTypeBuilder).withErsteller(FORM_ENGINE_NAME);
+		}
+
+		@Test
+		void shouldBuildPrimaerdokument() {
+			builder.createPrimaerdokument();
+
+			verify(primaerdokumentTypeBuilder).build();
+		}
+
+		@Test
+		void shouldReturnBuildPrimaerdokument() {
+			var primaerdokument = builder.createPrimaerdokument();
+
+			assertThat(primaerdokument).isEqualTo(primaerdokument);
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeCreatorTest.java
deleted file mode 100644
index c2061791699c876777ec156f2958653611478847..0000000000000000000000000000000000000000
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeCreatorTest.java
+++ /dev/null
@@ -1,286 +0,0 @@
-package de.ozgcloud.alfa.file;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import java.util.List;
-import java.util.stream.Stream;
-
-import org.junit.jupiter.api.BeforeEach;
-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.alfa.common.ExportFilenameGenerator;
-import de.ozgcloud.alfa.common.TestUtils;
-import de.ozgcloud.alfa.common.UUIDConverter;
-import de.ozgcloud.alfa.common.file.OzgFile;
-import de.ozgcloud.alfa.common.file.OzgFileTestFactory;
-import de.ozgcloud.alfa.export.AllgemeineMetadatenTypeTestFactory;
-import de.ozgcloud.alfa.export.IdentifikationObjektTypeTestFactory;
-import de.xoev.xdomea.AllgemeineMetadatenType;
-import de.xoev.xdomea.DokumentType;
-import de.xoev.xdomea.FormatType;
-import de.xoev.xdomea.IdentifikationObjektType;
-import de.xoev.xdomea.PrimaerdokumentType;
-import de.xoev.xdomea.VersionType;
-
-class DokumentTypeCreatorTest {
-
-	private static final int DOKUMENT_ORDINAL_NUMBER = 1;
-	private static final String FORM_ENGINE_NAME = "DUMMY_NAME";
-
-	private final OzgFile ozgFile = OzgFileTestFactory.create();
-	private final DokumentTypeCreator.MappingData mappingData = new DokumentTypeCreator.MappingData(ozgFile, DOKUMENT_ORDINAL_NUMBER, FORM_ENGINE_NAME);
-
-	@Spy
-	@InjectMocks
-	private DokumentTypeCreator creator;
-
-	@Mock
-	private UUIDConverter uuidConverter;
-
-	@Mock
-	private ExportFilenameGenerator exportFilenameGenerator;
-
-	@Nested
-	class TestCreate {
-
-		private final OzgFile ozgFile1 = OzgFileTestFactory.create();
-		private final OzgFile ozgFile2 = OzgFileTestFactory.create();
-		private final List<OzgFile> ozgFiles = List.of(ozgFile1, ozgFile2);
-		private final DokumentType dokumentType1 = new DokumentType();
-		private final DokumentType dokumentType2 = new DokumentType();
-
-		@BeforeEach
-		void init() {
-			doReturn(dokumentType1, dokumentType2).when(creator).createDokumentType(any());
-		}
-
-		@Test
-		void shouldCallCreateDokumentType() {
-			create().toList(); // call toList() to finalize stream
-
-			verify(creator).createDokumentType(new DokumentTypeCreator.MappingData(ozgFile1, 1, FORM_ENGINE_NAME));
-			verify(creator).createDokumentType(new DokumentTypeCreator.MappingData(ozgFile2, 2, FORM_ENGINE_NAME));
-		}
-
-		@Test
-		void shouldReturnDocumentTypes() {
-			var dokumentTypes = create().toList();
-
-			assertThat(dokumentTypes.get(0)).isEqualTo(dokumentType1);
-			assertThat(dokumentTypes.get(1)).isEqualTo(dokumentType2);
-		}
-
-		private Stream<DokumentType> create() {
-			return creator.create(ozgFiles.stream(), FORM_ENGINE_NAME);
-		}
-	}
-
-	@Nested
-	class TestCreateDokumentType {
-
-		private final IdentifikationObjektType identifikationObjekt = IdentifikationObjektTypeTestFactory.create();
-		private final AllgemeineMetadatenType allgemeineMetadaten = AllgemeineMetadatenTypeTestFactory.create();
-
-		@BeforeEach
-		void init() {
-			doReturn(identifikationObjekt).when(creator).createIdentifikation(mappingData);
-			doReturn(allgemeineMetadaten).when(creator).createAllgemeineMetadaten(mappingData);
-		}
-
-		@Test
-		void shouldCreateIdentifikation() {
-			create();
-
-			verify(creator).createIdentifikation(mappingData);
-		}
-
-		@Test
-		void shouldHaveIdentifikation() {
-			var dokument = create();
-
-			assertThat(dokument.getIdentifikation()).isEqualTo(identifikationObjekt);
-		}
-
-		@Test
-		void shouldCreateAllgemeineMetadaten() {
-			create();
-
-			verify(creator).createAllgemeineMetadaten(mappingData);
-		}
-
-		@Test
-		void shouldHaveAllgemeineMetadaten() {
-			var dokument = create();
-
-			assertThat(dokument.getAllgemeineMetadaten()).isEqualTo(allgemeineMetadaten);
-		}
-
-		@Test
-		void shouldHaveVersion() {
-			var dokumentType = create();
-
-			assertThat(dokumentType.getVersion()).size().isEqualTo(1);
-		}
-
-		@Nested
-		class TestVersion {
-
-			@Test
-			void shouldHaveNummer() {
-				assertThat(getVersion().getNummer()).isEqualTo(DokumentTypeCreator.VERSION_NUMMER);
-			}
-
-			@Test
-			void shouldHaveFormat() {
-				assertThat(getVersion().getFormat()).size().isEqualTo(1);
-			}
-		}
-
-		@Nested
-		class TestFormat {
-
-			@Test
-			void shouldHaveName() {
-				assertThat(getFormat().getName()).usingRecursiveComparison().isEqualTo(DateiformatCode.PDF.createDateiformatCodeType());
-			}
-
-			@Test
-			void shouldHaveSonstigerName() {
-				assertThat(getFormat().getSonstigerName()).isEmpty();
-			}
-
-			@Test
-			void shouldHaveVersion() {
-				assertThat(getFormat().getVersion()).isEmpty();
-			}
-
-			@Test
-			void shouldHavePrimaerdokument() {
-				assertThat(getPrimaerdokument()).isNotNull();
-			}
-		}
-
-		@Nested
-		class TestPrimaerdokument {
-
-			@BeforeEach
-			void init() {
-				when(exportFilenameGenerator.generateExportFilename(ozgFile)).thenReturn(ozgFile.getName());
-			}
-
-			@Test
-			void shouldGenerateExportFilename() {
-				create();
-
-				verify(exportFilenameGenerator).generateExportFilename(ozgFile);
-			}
-
-			@Test
-			void shouldHaveDateiname() {
-				assertThat(getPrimaerdokument().getDateiname()).isEqualTo(ozgFile.getName());
-			}
-
-			@Test
-			void shouldHaveDateinameOriginal() {
-				assertThat(getPrimaerdokument().getDateinameOriginal()).isEqualTo(ozgFile.getName());
-			}
-
-			@Test
-			void shouldHaveErsteller() {
-				assertThat(getPrimaerdokument().getErsteller()).isEqualTo(FORM_ENGINE_NAME);
-			}
-
-		}
-
-		private VersionType getVersion() {
-			return create().getVersion().get(0);
-		}
-
-		private FormatType getFormat() {
-			return getVersion().getFormat().get(0);
-		}
-
-		private PrimaerdokumentType getPrimaerdokument() {
-			return getFormat().getPrimaerdokument();
-		}
-
-		private DokumentType create() {
-			return creator.createDokumentType(mappingData);
-		}
-	}
-
-	@Nested
-	class TestCreateIdentifikation {
-
-		private final String FILE_UUID = "64a820d3-6285-172a-c028-0000000026d0";
-
-		@BeforeEach
-		void init() {
-			when(uuidConverter.fromObjectId(OzgFileTestFactory.ID.toString())).thenReturn(FILE_UUID);
-		}
-
-		@Test
-		void shouldConvertObjectId() {
-			create();
-
-			verify(uuidConverter).fromObjectId(OzgFileTestFactory.ID.toString());
-		}
-
-		@Test
-		void shouldHaveId() {
-			var identifikation = create();
-
-			assertThat(identifikation.getID()).matches(TestUtils.UUID_REGEX).isEqualTo(FILE_UUID);
-		}
-
-		@Test
-		void shouldHaveNummerImUebergeordnetenContainer() {
-			var identifikation = create();
-
-			assertThat(identifikation.getNummerImUebergeordnetenContainer()).isEqualTo(DOKUMENT_ORDINAL_NUMBER);
-		}
-
-		private IdentifikationObjektType create() {
-			return creator.createIdentifikation(mappingData);
-		}
-	}
-
-	@Nested
-	class TestCreateAllgemeineMetadaten {
-
-		@Test
-		void shouldHaveBetreff() {
-			var allgemeineMetadaten = creator.createAllgemeineMetadaten(mappingData);
-
-			assertThat(allgemeineMetadaten.getBetreff()).isEqualTo(OzgFileTestFactory.NAME);
-		}
-
-		@Test
-		void shouldHaveKennzeichen() {
-			var allgemeineMetadaten = creator.createAllgemeineMetadaten(mappingData);
-
-			assertThat(allgemeineMetadaten.getKennzeichen()).isEmpty();
-		}
-
-		@Test
-		void shouldHaveBemerkung() {
-			var allgemeineMetadaten = creator.createAllgemeineMetadaten(mappingData);
-
-			assertThat(allgemeineMetadaten.getBemerkung()).isEmpty();
-		}
-
-		@Test
-		void shouldHaveMedium() {
-			var allgemeineMetadaten = creator.createAllgemeineMetadaten(mappingData);
-
-			assertThat(allgemeineMetadaten.getMedium().getCode()).isEqualTo(DokumentTypeCreator.ALLGEMEINE_METADATEN_MEDIUM_CODE);
-		}
-
-	}
-
-}
\ No newline at end of file
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/ExportFileServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/ExportFileServiceTest.java
index 4a9ad191a63a1dc143bece4ce2caf39bbaf08e25..50f934dbbf5baa61a6c341138be5981111d54d32 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/ExportFileServiceTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/ExportFileServiceTest.java
@@ -4,13 +4,16 @@ import static org.assertj.core.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
 import java.io.OutputStream;
+import java.util.List;
 import java.util.stream.Stream;
 
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.MockedStatic;
 import org.springframework.http.MediaType;
 
 import de.ozgcloud.alfa.common.binaryfile.BinaryFileService;
@@ -18,7 +21,11 @@ import de.ozgcloud.alfa.common.binaryfile.FileId;
 import de.ozgcloud.alfa.common.file.OzgFile;
 import de.ozgcloud.alfa.common.file.OzgFileService;
 import de.ozgcloud.alfa.common.file.OzgFileTestFactory;
+import de.ozgcloud.alfa.export.DokumentTypeTestFactory;
+import de.ozgcloud.alfa.vorgang.EingangHeaderTestFactory;
 import de.ozgcloud.alfa.vorgang.EingangTestFactory;
+import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory;
+import de.xoev.xdomea.DokumentType;
 
 class ExportFileServiceTest {
 
@@ -32,39 +39,108 @@ class ExportFileServiceTest {
 	private BinaryFileService binaryFileService;
 
 	@Nested
-	class TestGetAllPdfs {
+	class TestGetRepresentations {
 
 		private final OzgFile representationPdfFile = OzgFileTestFactory.createBuilder().contentType(MediaType.APPLICATION_PDF_VALUE).build();
 		private final OzgFile representationXmlFile = OzgFileTestFactory.createBuilder().contentType(MediaType.TEXT_XML_VALUE).build();
-		private final OzgFile attachmentPdfFile = OzgFileTestFactory.createBuilder().contentType(MediaType.APPLICATION_PDF_VALUE).build();
-		private final OzgFile attachmentXmlFile = OzgFileTestFactory.createBuilder().contentType(MediaType.TEXT_XML_VALUE).build();
 
-		@BeforeEach
-		void init() {
-			when(ozgFileService.getRepresentationsByEingang(EingangTestFactory.ID)).thenReturn(
-					Stream.of(representationPdfFile, representationXmlFile));
-			when(ozgFileService.getAttachmentsByEingang(EingangTestFactory.ID)).thenReturn(Stream.of(attachmentXmlFile, attachmentPdfFile));
+		@Nested
+		class OnAvailableVorgangData {
+
+			@BeforeEach
+			void init() {
+				when(ozgFileService.getRepresentationsByEingang(EingangTestFactory.ID)).thenReturn(
+						Stream.of(representationPdfFile, representationXmlFile));
+			}
+
+			@Test
+			void shouldLoadRepresentations() {
+				service.getRepresentations(VorgangWithEingangTestFactory.create()).toList();
+
+				verify(ozgFileService).getRepresentationsByEingang(EingangTestFactory.ID);
+			}
+
+			@Test
+			void shouldReturnPdfs() {
+				var representations = service.getRepresentations(VorgangWithEingangTestFactory.create());
+
+				assertThat(representations).hasSize(1).containsExactlyInAnyOrder(representationPdfFile);
+			}
 		}
 
-		@Test
-		void shouldLoadRepresentations() {
-			service.getAllPdfs(EingangTestFactory.ID);
+		@Nested
+		class OnMissingVorgangData {
+
+			@Test
+			void shouldReturnEmptyOnMissingEingang() {
+				var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(null).build();
+
+				var representations = service.getRepresentations(vorgang);
+
+				assertThat(representations).isEmpty();
+			}
+
+			@Test
+			void shouldReturnEmptyOnMissingEingangId() {
+				var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().id(null).build()).build();
+
+				var representations = service.getRepresentations(vorgang);
+
+				assertThat(representations).isEmpty();
+			}
 
-			verify(ozgFileService).getRepresentationsByEingang(EingangTestFactory.ID);
 		}
 
-		@Test
-		void shouldLoadAttachments() {
-			service.getAllPdfs(EingangTestFactory.ID);
+	}
+
+	@Nested
+	class TestGetAttachments {
+
+		private final OzgFile attachmentPdfFile = OzgFileTestFactory.createBuilder().contentType(MediaType.APPLICATION_PDF_VALUE).build();
+		private final OzgFile attachmentXmlFile = OzgFileTestFactory.createBuilder().contentType(MediaType.TEXT_XML_VALUE).build();
+
+		@Nested
+		class OnAvailableVorgangData {
+
+			@BeforeEach
+			void init() {
+				when(ozgFileService.getAttachmentsByEingang(EingangTestFactory.ID)).thenReturn(Stream.of(attachmentXmlFile, attachmentPdfFile));
+			}
 
-			verify(ozgFileService).getAttachmentsByEingang(EingangTestFactory.ID);
+			@Test
+			void shouldLoadAttachments() {
+				service.getAttachments(VorgangWithEingangTestFactory.create()).toList();
+
+				verify(ozgFileService).getAttachmentsByEingang(EingangTestFactory.ID);
+			}
+
+			@Test
+			void shouldReturnPdfs() {
+				var ozgFiles = service.getAttachments(VorgangWithEingangTestFactory.create());
+
+				assertThat(ozgFiles).hasSize(1).containsExactlyInAnyOrder(attachmentPdfFile);
+			}
 		}
 
-		@Test
-		void shouldReturnPdfs() {
-			var ozgFiles = service.getAllPdfs(EingangTestFactory.ID);
+		@Nested
+		class OnMissingVorgangData {
+			@Test
+			void shouldReturnEmptyOnMissingEingang() {
+				var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(null).build();
+
+				var attachments = service.getAttachments(vorgang);
+
+				assertThat(attachments).isEmpty();
+			}
+
+			@Test
+			void shouldReturnEmptyOnMissingEingangId() {
+				var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().id(null).build()).build();
+
+				var attachments = service.getAttachments(vorgang);
 
-			assertThat(ozgFiles).hasSize(2).containsExactlyInAnyOrder(attachmentPdfFile, representationPdfFile);
+				assertThat(attachments).isEmpty();
+			}
 		}
 	}
 
@@ -84,4 +160,67 @@ class ExportFileServiceTest {
 		}
 	}
 
+	@Nested
+	class TestCreateDokumentType {
+
+		private MockedStatic<DokumentTypeBuilder> dokumentTypeBuilderMockedStatic;
+
+		@Mock
+		private DokumentTypeBuilder dokumentTypeBuilder;
+
+		private final OzgFile ozgFile = OzgFileTestFactory.create();
+		private final DokumentType dokumentType = DokumentTypeTestFactory.create();
+
+		@BeforeEach
+		void setUp() {
+			dokumentTypeBuilderMockedStatic = mockStatic(DokumentTypeBuilder.class);
+			dokumentTypeBuilderMockedStatic.when(DokumentTypeBuilder::builder).thenReturn(dokumentTypeBuilder);
+
+			when(dokumentTypeBuilder.withOzgFile(ozgFile)).thenReturn(dokumentTypeBuilder);
+			when(dokumentTypeBuilder.withOrdinalNumber(1L)).thenReturn(dokumentTypeBuilder);
+			when(dokumentTypeBuilder.withFormEngineName(EingangHeaderTestFactory.FORM_ENGINE_NAME)).thenReturn(dokumentTypeBuilder);
+			when(dokumentTypeBuilder.build()).thenReturn(dokumentType);
+		}
+
+		@AfterEach
+		void tearDown() {
+			dokumentTypeBuilderMockedStatic.close();
+		}
+
+		@Test
+		void shouldBuild() {
+			service.createDokumentTypes(List.of(ozgFile), EingangHeaderTestFactory.FORM_ENGINE_NAME).toList();
+
+			verify(dokumentTypeBuilder).build();
+		}
+
+		@Test
+		void shouldSetOzgFile() {
+			service.createDokumentTypes(List.of(ozgFile), EingangHeaderTestFactory.FORM_ENGINE_NAME).toList();
+
+			verify(dokumentTypeBuilder).withOzgFile(ozgFile);
+		}
+
+		@Test
+		void shouldSetOrdinalNumber() {
+			service.createDokumentTypes(List.of(ozgFile), EingangHeaderTestFactory.FORM_ENGINE_NAME).toList();
+
+			verify(dokumentTypeBuilder).withOrdinalNumber(1L);
+		}
+
+		@Test
+		void shouldSetFormEngineName() {
+			service.createDokumentTypes(List.of(ozgFile), EingangHeaderTestFactory.FORM_ENGINE_NAME).toList();
+
+			verify(dokumentTypeBuilder).withFormEngineName(EingangHeaderTestFactory.FORM_ENGINE_NAME);
+		}
+
+		@Test
+		void shouldReturnDokumentTypes() {
+			var dokumentTypes = service.createDokumentTypes(List.of(ozgFile), EingangHeaderTestFactory.FORM_ENGINE_NAME);
+
+			assertThat(dokumentTypes).containsExactly(dokumentType);
+		}
+	}
+
 }
\ No newline at end of file
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/VersionTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/VersionTypeTestFactory.java
deleted file mode 100644
index 66ab10bf99d38d853a0d6ccb6716fcd45ad3d9e0..0000000000000000000000000000000000000000
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/VersionTypeTestFactory.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package de.ozgcloud.alfa.file;
-
-import de.xoev.xdomea.VersionType;
-
-class VersionTypeTestFactory {
-
-	public static VersionType create() {
-		return new VersionType();
-	}
-}
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java
index de427e7c0ae4f5de644f8f737f2dbcb0fbd4dc49..637eabe623a23b20161a6acf1cd103839c1bb3f1 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java
@@ -35,8 +35,6 @@ class FormDataMapperTest {
 
 	@Mock
 	private DatatypeMapper datatypeMapper;
-	@Mock
-	private DateConverter dateConverter;
 
 	@Nested
 	class TestToAntragsdaten {
@@ -451,11 +449,13 @@ class FormDataMapperTest {
 
 		@Test
 		void shouldFormatDateTimeType() {
-			var dateTime = ZonedDateTime.now();
+			try (var dateConverter = mockStatic(DateConverter.class)) {
+				var dateTime = ZonedDateTime.now();
 
-			formDataMapper.formatValue(DatatypeType.DATETIME, dateTime);
+				formDataMapper.formatValue(DatatypeType.DATETIME, dateTime);
 
-			verify(dateConverter).toXmlGregorianCalendar(dateTime);
+				dateConverter.verify(() -> DateConverter.toXmlGregorianCalendar(dateTime));
+			}
 		}
 
 		@Test
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreatorTest.java
index c232ce356b7fd6f9ee86d0ad17b05cf7d3349e4b..f049b71e5ebbd7159c692ed3a945ca033b8b29d8 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreatorTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreatorTest.java
@@ -1,16 +1,19 @@
 package de.ozgcloud.alfa.vorgang;
 
 import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
 
 import java.util.Optional;
 
 import javax.xml.datatype.XMLGregorianCalendar;
 
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.MockedStatic;
 import org.mockito.Mockito;
 import org.mockito.Spy;
 
@@ -28,9 +31,6 @@ class KontaktTypeCreatorTest {
 	@Mock
 	private NameNatuerlichePersonTypeCreator nameNatuerlichePersonTypeCreator;
 
-	@Mock
-	private DateConverter dateConverter;
-
 	@Nested
 	class TestCreate {
 
@@ -42,8 +42,8 @@ class KontaktTypeCreatorTest {
 
 			@BeforeEach
 			void setUp() {
-				Mockito.doReturn(Optional.of(vorgang.getEingang().getAntragsteller())).when(creator).getAntragstellerIfHasRequiredData(vorgang);
-				Mockito.doReturn(kontaktType).when(creator).toKontaktType(vorgang.getEingang().getAntragsteller());
+				doReturn(Optional.of(vorgang.getEingang().getAntragsteller())).when(creator).getAntragstellerIfHasRequiredData(vorgang);
+				doReturn(kontaktType).when(creator).toKontaktType(vorgang.getEingang().getAntragsteller());
 			}
 
 			@Test
@@ -77,7 +77,7 @@ class KontaktTypeCreatorTest {
 
 			@BeforeEach
 			void setUp() {
-				Mockito.doReturn(Optional.empty()).when(creator).getAntragstellerIfHasRequiredData(vorgang);
+				doReturn(Optional.empty()).when(creator).getAntragstellerIfHasRequiredData(vorgang);
 			}
 
 			@Test
@@ -98,6 +98,7 @@ class KontaktTypeCreatorTest {
 
 		@Mock
 		private XMLGregorianCalendar geburtsdatum;
+		private MockedStatic<DateConverter> dateConverter;
 
 		private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create();
 		private final NameNatuerlichePersonType nameNatuerlichePerson = NameNatuerlichePersonTypeTestFactory.create();
@@ -105,9 +106,20 @@ class KontaktTypeCreatorTest {
 
 		@BeforeEach
 		void setUp() {
-			Mockito.when(nameNatuerlichePersonTypeCreator.create(vorgang.getEingang().getAntragsteller())).thenReturn(nameNatuerlichePerson);
-			Mockito.when(dateConverter.convertGermanFormatToISO(AntragstellerTestFactory.GEBURTSDATUM_STR)).thenReturn(Optional.of(geburtsdatum));
-			Mockito.doReturn(geburtType).when(creator).createGeburtType(Optional.of(geburtsdatum));
+			when(nameNatuerlichePersonTypeCreator.create(vorgang.getEingang().getAntragsteller())).thenReturn(nameNatuerlichePerson);
+			doReturn(geburtType).when(creator).createGeburtType(Optional.of(geburtsdatum));
+			setUpDateConverter();
+		}
+
+		void setUpDateConverter() {
+			dateConverter = mockStatic(DateConverter.class);
+			dateConverter.when(() -> DateConverter.convertGermanFormatToISO(AntragstellerTestFactory.GEBURTSDATUM_STR))
+					.thenReturn(Optional.of(geburtsdatum));
+		}
+
+		@AfterEach
+		void cleanUp() {
+			dateConverter.close();
 		}
 
 		@Test
@@ -128,7 +140,7 @@ class KontaktTypeCreatorTest {
 		void shouldCallDateConverter() {
 			callCreator(vorgang);
 
-			Mockito.verify(dateConverter).convertGermanFormatToISO(AntragstellerTestFactory.GEBURTSDATUM_STR);
+			dateConverter.verify(() -> DateConverter.convertGermanFormatToISO(AntragstellerTestFactory.GEBURTSDATUM_STR));
 		}
 
 		@Test
@@ -190,11 +202,13 @@ class KontaktTypeCreatorTest {
 
 		@Test
 		void shouldBeEmptyIfNoneOfRequiredDataExists() {
-			Mockito.when(dateConverter.convertGermanFormatToISO(null)).thenReturn(Optional.empty());
+			try (var dateConverter = mockStatic(DateConverter.class)) {
+				dateConverter.when(() -> DateConverter.convertGermanFormatToISO(null)).thenReturn(Optional.empty());
 
-			var antragsteller = callCreator(buildVorgang(Antragsteller.builder().build()));
+				var antragsteller = callCreator(buildVorgang(Antragsteller.builder().build()));
 
-			assertThat(antragsteller).isEmpty();
+				assertThat(antragsteller).isEmpty();
+			}
 		}
 
 		@Test
@@ -220,11 +234,15 @@ class KontaktTypeCreatorTest {
 
 		@Test
 		void shouldNotBeEmptyIfHasGeburtsdatum() {
-			Mockito.when(dateConverter.convertGermanFormatToISO(AntragstellerTestFactory.GEBURTSDATUM_STR)).thenReturn(Optional.of(geburtsdatum));
+			try (var dateConverter = mockStatic(DateConverter.class)) {
+				dateConverter.when(() -> DateConverter.convertGermanFormatToISO(AntragstellerTestFactory.GEBURTSDATUM_STR))
+						.thenReturn(Optional.of(geburtsdatum));
 
-			var antragsteller = callCreator(buildVorgang(Antragsteller.builder().geburtsdatum(AntragstellerTestFactory.GEBURTSDATUM_STR).build()));
+				var antragsteller = callCreator(
+						buildVorgang(Antragsteller.builder().geburtsdatum(AntragstellerTestFactory.GEBURTSDATUM_STR).build()));
 
-			assertThat(antragsteller).isNotEmpty();
+				assertThat(antragsteller).isNotEmpty();
+			}
 		}
 
 		private Optional<Antragsteller> callCreator(VorgangWithEingang vorgang) {
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KopfCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KopfCreatorTest.java
index fab8514b0e509308e40b725fcab69545433c904b..1bce187cf0a5b5374f18273a56d90000bff3a931 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KopfCreatorTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KopfCreatorTest.java
@@ -12,11 +12,10 @@ import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 import org.mockito.Spy;
 
 import de.ozgcloud.alfa.common.DateConverter;
-import de.ozgcloud.alfa.export.XDomeaProperties;
+import de.ozgcloud.alfa.export.XdomeaProperties;
 import de.xoev.xdomea.BehoerdenkennungType;
 import de.xoev.xdomea.Code;
 import de.xoev.xdomea.KontaktType;
@@ -32,7 +31,7 @@ class KopfCreatorTest {
 	private KopfCreator creator;
 
 	@Mock
-	private XDomeaProperties xDomeaProperties;
+	private XdomeaProperties xDomeaProperties;
 	@Mock
 	private DateConverter dateConverter;
 
@@ -60,11 +59,11 @@ class KopfCreatorTest {
 
 		@Test
 		void shouldSetErstellungszeitpunkt() {
-			try (var zonedDateTime = Mockito.mockStatic(ZonedDateTime.class)) {
+			try (var zonedDateTime = mockStatic(ZonedDateTime.class); var dateConverter = mockStatic(DateConverter.class)) {
 				zonedDateTime.when(() -> ZonedDateTime.now(ZoneOffset.UTC)).thenReturn(CREATION_TIME);
 
 				var expectedValue = mock(XMLGregorianCalendar.class);
-				when(dateConverter.toXmlGregorianCalendar(CREATION_TIME)).thenReturn(expectedValue);
+				dateConverter.when(() -> DateConverter.toXmlGregorianCalendar(CREATION_TIME)).thenReturn(expectedValue);
 
 				var kopf = createKopf();