diff --git a/alfa-server/src/main/resources/application.yml b/alfa-server/src/main/resources/application.yml
index 3396df96aa0b06fd2c95d525f353fd88795cdd64..ac930de36a83c9b7d962e72dca5ef29eae2fdd57 100644
--- a/alfa-server/src/main/resources/application.yml
+++ b/alfa-server/src/main/resources/application.yml
@@ -96,13 +96,3 @@ ozgcloud:
     behoerdenschluessel:
     behoerdenschluessel-uri:
     behoerdenschluessel-version:
-    codeliste:
-      - uri: urn:de:bund:destatis:bevoelkerungsstatistik:schluessel:kreis
-        version: 2021-07-31
-        pattern: \d{5}
-      - uri: urn:de:bund:destatis:bevoelkerungsstatistik:schluessel:ags
-        version: 2024-06-30
-        pattern: \d{8}
-      - uri: urn:de:bund:destatis:bevoelkerungsstatistik:schluessel:rs
-        version: 2024-06-30
-        pattern: \d{12}
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/AmbiguousCodelistePatternException.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/AmbiguousCodelistePatternException.java
deleted file mode 100644
index 9defafcd5659d2adc634aad9271a207fc26e7b40..0000000000000000000000000000000000000000
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/AmbiguousCodelistePatternException.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package de.ozgcloud.alfa.export;
-
-import lombok.Getter;
-
-@Getter
-public class AmbiguousCodelistePatternException extends RuntimeException {
-
-	private final String behoerdenschluessel;
-
-	public AmbiguousCodelistePatternException(String behoerdenschluessel) {
-		super("Multiple Codelisten match Behördenschlüssel " + behoerdenschluessel);
-		this.behoerdenschluessel = behoerdenschluessel;
-	}
-}
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/BehoerdenschluesselProperties.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/BehoerdenschluesselProperties.java
deleted file mode 100644
index ac1fa1350809c5689566affddfd3f67db368b1b3..0000000000000000000000000000000000000000
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/BehoerdenschluesselProperties.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package de.ozgcloud.alfa.export;
-
-import java.util.List;
-import java.util.Optional;
-
-import org.apache.commons.lang3.StringUtils;
-
-import de.ozgcloud.alfa.export.XdomeaProperties.Codeliste;
-import lombok.RequiredArgsConstructor;
-
-@RequiredArgsConstructor
-public class BehoerdenschluesselProperties {
-
-	private final XdomeaProperties xdomeaProperties;
-
-	public Optional<String> getBehoerdenschluessel() {
-		return ofNullableOrBlank(xdomeaProperties.getBehoerdenschluessel());
-	}
-
-	public Optional<String> getBehoerdenschluesselUri() {
-		return ofNullableOrBlank(xdomeaProperties.getBehoerdenschluesselUri()).or(this::getDefaultBehoerdenschluesselUri);
-	}
-
-	Optional<String> getDefaultBehoerdenschluesselUri() {
-		return getCodeliste().map(Codeliste::getUri);
-	}
-
-	public Optional<String> getBehoerdenschluesselVersion() {
-		return ofNullableOrBlank(xdomeaProperties.getBehoerdenschluesselVersion()).or(this::getDefaultBehoerdenschluesselVersion);
-	}
-
-	Optional<String> getDefaultBehoerdenschluesselVersion() {
-		return getCodeliste().map(Codeliste::getVersion);
-	}
-
-	Optional<Codeliste> getCodeliste() {
-		return ofNullableOrBlank(xdomeaProperties.getBehoerdenschluessel()).flatMap(this::getCodeliste);
-	}
-
-	private Optional<Codeliste> getCodeliste(String behoerdenschluessel) {
-		var matchingCodelisten = getCodelistenMatchingBehoerdenschluessel(behoerdenschluessel);
-		if (matchingCodelisten.size() > 1) {
-			throw new AmbiguousCodelistePatternException(behoerdenschluessel);
-		}
-		return matchingCodelisten.size() == 1 ? Optional.of(matchingCodelisten.getFirst()) : Optional.empty();
-	}
-
-	private List<Codeliste> getCodelistenMatchingBehoerdenschluessel(String behoerdenschluessel) {
-		return xdomeaProperties.getCodeliste().stream()
-				.filter(codeliste -> codelisteMatchesBehoerdenschluessel(codeliste, behoerdenschluessel))
-				.toList();
-	}
-
-	private boolean codelisteMatchesBehoerdenschluessel(Codeliste codeliste, String behoerdenschluessel) {
-		return codeliste.getPattern().matcher(behoerdenschluessel).matches();
-	}
-
-	private static Optional<String> ofNullableOrBlank(String value) {
-		return Optional.ofNullable(value).filter(StringUtils::isNotBlank);
-	}
-}
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/BehoerdenschluesselPropertiesValidator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/BehoerdenschluesselPropertiesValidator.java
index 54568a6f8c7c537f9da3053ef8a402ee6a9a65e0..1789c74036f8171291dd229dd70396f8a31c6948 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/BehoerdenschluesselPropertiesValidator.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/BehoerdenschluesselPropertiesValidator.java
@@ -1,11 +1,12 @@
 package de.ozgcloud.alfa.export;
 
-import java.util.Optional;
-import java.util.function.Supplier;
-
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.validation.Errors;
 import org.springframework.validation.Validator;
 
+import de.ozgcloud.common.errorhandling.TechnicalException;
+
 public class BehoerdenschluesselPropertiesValidator implements Validator {
 
 	@Override
@@ -15,33 +16,25 @@ public class BehoerdenschluesselPropertiesValidator implements Validator {
 
 	@Override
 	public void validate(Object target, Errors errors) {
-		var properties = getBehoerdenschluesselProperties((XdomeaProperties) target);
-		if (properties.getBehoerdenschluessel().isPresent()) {
-			validateProperties(properties, errors);
+		var properties = (XdomeaProperties) target;
+		if (StringUtils.isNotBlank(properties.getBehoerdenschluessel())) {
+			validateNotBlank("behoerdenschluesselUri", properties, errors);
+			validateNotBlank("behoerdenschluesselVersion", properties, errors);
 		}
 	}
 
-	BehoerdenschluesselProperties getBehoerdenschluesselProperties(XdomeaProperties xdomeaProperties) {
-		return new BehoerdenschluesselProperties(xdomeaProperties);
-	}
-
-	private void validateProperties(BehoerdenschluesselProperties props, Errors errors) {
-		try {
-			validateNotEmpty(props, errors);
-		} catch (AmbiguousCodelistePatternException e) {
-			errors.reject("ozgcloud.xdomea.codeliste.pattern.ambiguous", e.getMessage());
+	private void validateNotBlank(String propertyName, XdomeaProperties properties, Errors errors) {
+		getPropertyValue(propertyName, properties);
+		if (StringUtils.isBlank(getPropertyValue(propertyName, properties))) {
+			errors.rejectValue(propertyName, String.format("ozgcloud.xdomea.%s.empty", propertyName), String.format("%s must be set", propertyName));
 		}
 	}
 
-	private void validateNotEmpty(BehoerdenschluesselProperties props, Errors errors) {
-		validateNotEmpty(props::getBehoerdenschluesselUri, "behoerdenschluesselUri", "behoerdenschluessel-uri", errors);
-		validateNotEmpty(props::getBehoerdenschluesselVersion, "behoerdenschluesselVersion", "behoerdenschluessel-version", errors);
-	}
-
-	private <T> void validateNotEmpty(Supplier<Optional<T>> propertyAccessor, String fieldName, String propertyName, Errors errors) {
-		var propertyValue = propertyAccessor.get();
-		if (propertyValue.isEmpty()) {
-			errors.rejectValue(fieldName, String.format("ozgcloud.xdomea.%s.empty", propertyName), String.format("%s must be set", propertyName));
+	private static String getPropertyValue(String fieldName, XdomeaProperties properties) {
+		try {
+			return BeanUtils.getSimpleProperty(properties, fieldName);
+		} catch (Exception e) {
+			throw new TechnicalException("Property does not exist", e);
 		}
 	}
 }
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
index 6c88c117f5b3003a11949bf55b84674c4dedf873..2d2157c690d1b1c354875b477ec6163752cc1234 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
@@ -1,16 +1,9 @@
 package de.ozgcloud.alfa.export;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Pattern;
-
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.validation.annotation.Validated;
 
-import jakarta.validation.Valid;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Getter;
@@ -30,20 +23,4 @@ public class XdomeaProperties {
 	private String behoerdenschluessel;
 	private String behoerdenschluesselUri;
 	private String behoerdenschluesselVersion;
-
-	@Valid
-	private List<Codeliste> codeliste = new ArrayList<>();
-
-	@Builder
-	@Setter
-	@Getter
-	public static class Codeliste {
-
-		@NotBlank
-		private String uri;
-		@NotBlank
-		private String version;
-		@NotNull
-		private Pattern pattern;
-	}
 }
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 192c03e3dace1b94ee197f8070092133e0eacb01..5305519177c60d83ac4de118977b4fbd4c549fa2 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
@@ -7,7 +7,6 @@ import org.springframework.stereotype.Component;
 
 import de.ozgcloud.alfa.common.DateConverter;
 import de.ozgcloud.alfa.common.UUIDConverter;
-import de.ozgcloud.alfa.export.BehoerdenschluesselProperties;
 import de.ozgcloud.alfa.export.XdomeaProperties;
 import de.xoev.xdomea.BehoerdenkennungType;
 import de.xoev.xdomea.Code;
@@ -16,6 +15,7 @@ import de.xoev.xdomea.NachrichtentypCodeType;
 import de.xoev.xdomea.NkAbgabeType;
 import de.xoev.xdomea.OrganisationseinheitType;
 import de.xoev.xdomea.SystemType;
+import io.micrometer.common.util.StringUtils;
 import lombok.RequiredArgsConstructor;
 
 @RequiredArgsConstructor
@@ -27,7 +27,7 @@ class KopfCreator {
 	static final String NACHRICHTENTYP_ABGABE_ABGABE_TYPE_CODE = "0401";
 	static final String PRODUKT_NAME = "OZG-Cloud";
 
-	private final XdomeaProperties xDomeaProperties;
+	private final XdomeaProperties xdomeaProperties;
 
 	public NkAbgabeType createKopf(VorgangWithEingang vorgang) {
 		var nkAbgabeType = new NkAbgabeType();
@@ -58,34 +58,29 @@ class KopfCreator {
 
 	KontaktType createKontaktType() {
 		var kontakt = new KontaktType();
-		var behoerdenschluesselProperties = getBehoerdenschluesselProperties(xDomeaProperties);
-		if (behoerdenschluesselProperties.getBehoerdenschluessel().isPresent()) {
-			kontakt.setBehoerdenkennung(createBehoerdenkennung(behoerdenschluesselProperties));
+		if (StringUtils.isNotBlank(xdomeaProperties.getBehoerdenschluessel())) {
+			kontakt.setBehoerdenkennung(createBehoerdenkennung());
 		}
 		return kontakt;
 	}
 
-	BehoerdenschluesselProperties getBehoerdenschluesselProperties(XdomeaProperties xdomeaProperties) {
-		return new BehoerdenschluesselProperties(xdomeaProperties);
-	}
-
 	OrganisationseinheitType createOrganisationseinheitType(String organisationseinheitId) {
 		var organisationseinheit = new OrganisationseinheitType();
 		organisationseinheit.setName(organisationseinheitId);
 		return organisationseinheit;
 	}
 
-	BehoerdenkennungType createBehoerdenkennung(BehoerdenschluesselProperties behoerdenschluesselProperties) {
+	BehoerdenkennungType createBehoerdenkennung() {
 		var behoerdenkennungType = new BehoerdenkennungType();
-		behoerdenkennungType.setBehoerdenschluessel(createBehoerdenschluessel(behoerdenschluesselProperties));
+		behoerdenkennungType.setBehoerdenschluessel(createBehoerdenschluessel());
 		return behoerdenkennungType;
 	}
 
-	Code createBehoerdenschluessel(BehoerdenschluesselProperties behoerdenschluesselProperties) {
+	Code createBehoerdenschluessel() {
 		var behoerdenschluessel = new Code();
-		behoerdenschluessel.setCode(behoerdenschluesselProperties.getBehoerdenschluessel().orElseThrow());
-		behoerdenschluessel.setListURI(behoerdenschluesselProperties.getBehoerdenschluesselUri().orElseThrow());
-		behoerdenschluessel.setListVersionID(behoerdenschluesselProperties.getBehoerdenschluesselVersion().orElseThrow());
+		behoerdenschluessel.setCode(xdomeaProperties.getBehoerdenschluessel());
+		behoerdenschluessel.setListURI(xdomeaProperties.getBehoerdenschluesselUri());
+		behoerdenschluessel.setListVersionID(xdomeaProperties.getBehoerdenschluesselVersion());
 		return behoerdenschluessel;
 	}
 
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/BehoerdenschluesselPropertiesITCase.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/BehoerdenschluesselPropertiesITCase.java
deleted file mode 100644
index 8e2b4758a60598760e0c428244afa0c5de3a213d..0000000000000000000000000000000000000000
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/BehoerdenschluesselPropertiesITCase.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package de.ozgcloud.alfa.export;
-
-import static org.assertj.core.api.Assertions.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import de.ozgcloud.common.test.ITCase;
-
-@ITCase
-class BehoerdenschluesselPropertiesITCase {
-
-	@Autowired
-	private XdomeaProperties xdomeaProperties;
-
-	private BehoerdenschluesselProperties behoerdenschluesselProperties;
-
-	@BeforeEach
-	void init() {
-		behoerdenschluesselProperties = new BehoerdenschluesselProperties(xdomeaProperties);
-	}
-
-	@Test
-	void shouldHaveBehoerdenschluessel() {
-		assertThat(behoerdenschluesselProperties.getBehoerdenschluessel()).isPresent().get().isEqualTo("12345678");
-	}
-
-	@Test
-	void shouldHaveBehoerdenschluesselUri() {
-		assertThat(behoerdenschluesselProperties.getBehoerdenschluesselUri()).isPresent().get().isEqualTo("urn:de:bund:destatis:bevoelkerungsstatistik:schluessel:ags");
-	}
-
-	@Test
-	void shouldHaveBehoerdenschluesselVersion() {
-		assertThat(behoerdenschluesselProperties.getBehoerdenschluesselVersion()).isPresent().get().isEqualTo("2024-06-30");
-	}
-}
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/BehoerdenschluesselPropertiesTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/BehoerdenschluesselPropertiesTest.java
deleted file mode 100644
index 3830c5b9701a47e148156cfaecf0803263fa0bce..0000000000000000000000000000000000000000
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/BehoerdenschluesselPropertiesTest.java
+++ /dev/null
@@ -1,293 +0,0 @@
-package de.ozgcloud.alfa.export;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import java.util.List;
-import java.util.Optional;
-import java.util.UUID;
-import java.util.stream.Stream;
-
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
-import org.junit.jupiter.params.provider.NullAndEmptySource;
-import org.mockito.Spy;
-
-import de.ozgcloud.alfa.export.XdomeaProperties.Codeliste;
-import de.ozgcloud.alfa.export.XdomeaProperties.XdomeaPropertiesBuilder;
-import lombok.RequiredArgsConstructor;
-
-class BehoerdenschluesselPropertiesTest {
-
-	@Nested
-	class TestGetBehoerdenschluessel {
-
-		@Test
-		void shouldReturnBehoerdenschluessel() {
-			var xdomeaProps = XdomeaPropertiesTestFactory.create();
-			var bsProps = new BehoerdenschluesselProperties(xdomeaProps);
-
-			assertThat(bsProps.getBehoerdenschluessel()).isPresent().get().isEqualTo(XdomeaPropertiesTestFactory.BEHOERDENSCHLUESSEL);
-		}
-
-		@ParameterizedTest
-		@NullAndEmptySource
-		void shouldReturnEmptyIfBehoerdenschluesselIsNotSet(String bs) {
-			var xdomeaProps = XdomeaPropertiesTestFactory.createBuilder().behoerdenschluessel(bs).build();
-			var bsProps = new BehoerdenschluesselProperties(xdomeaProps);
-
-			assertThat(bsProps.getBehoerdenschluessel()).isNotPresent();
-		}
-	}
-
-	@Nested
-	class TestGetBehoerdenschluesselUri extends TestGetPropertyValue {
-
-		@Override
-		protected void verifyDefaultPropertyValueAccessorWasCalled(BehoerdenschluesselProperties bsProps) {
-			verify(bsProps).getDefaultBehoerdenschluesselUri();
-		}
-
-		@Override
-		protected String getPropertyValue(XdomeaProperties props) {
-			return props.getBehoerdenschluesselUri();
-		}
-
-		@Override
-		protected Optional<String> getPropertyValue(BehoerdenschluesselProperties bsProps) {
-			return bsProps.getBehoerdenschluesselUri();
-		}
-
-		@Override
-		protected XdomeaPropertiesBuilder withPropertyValue(String value, XdomeaPropertiesBuilder propertiesBuilder) {
-			return propertiesBuilder.behoerdenschluesselUri(value);
-		}
-
-		@Override
-		protected void mockPropertyDefaultValue(Optional<String> defaultValue, BehoerdenschluesselProperties bsProps) {
-			doReturn(defaultValue).when(bsProps).getDefaultBehoerdenschluesselUri();
-		}
-	}
-
-	@Nested
-	class TestGetBehoerdenschluesselVersion extends TestGetPropertyValue {
-
-		@Override
-		protected void verifyDefaultPropertyValueAccessorWasCalled(BehoerdenschluesselProperties bsProps) {
-			verify(bsProps).getDefaultBehoerdenschluesselVersion();
-		}
-
-		@Override
-		protected String getPropertyValue(XdomeaProperties props) {
-			return props.getBehoerdenschluesselVersion();
-		}
-
-		@Override
-		protected Optional<String> getPropertyValue(BehoerdenschluesselProperties bsProps) {
-			return bsProps.getBehoerdenschluesselVersion();
-		}
-
-		@Override
-		protected XdomeaPropertiesBuilder withPropertyValue(String value, XdomeaPropertiesBuilder propertiesBuilder) {
-			return propertiesBuilder.behoerdenschluesselVersion(value);
-		}
-
-		@Override
-		protected void mockPropertyDefaultValue(Optional<String> defaultValue, BehoerdenschluesselProperties bsProps) {
-			doReturn(defaultValue).when(bsProps).getDefaultBehoerdenschluesselVersion();
-		}
-	}
-
-	@RequiredArgsConstructor
-	private abstract static class TestGetPropertyValue {
-
-		@Test
-		@SuppressWarnings("unused")
-		void shouldReturnPropertyValue() {
-			var xdomeaProps = XdomeaPropertiesTestFactory.create();
-			var bsProps = new BehoerdenschluesselProperties(xdomeaProps);
-
-			var value = getPropertyValue(bsProps);
-
-			assertThat(value).isPresent().get().isEqualTo(getPropertyValue(xdomeaProps));
-		}
-
-		@ParameterizedTest
-		@NullAndEmptySource
-		@SuppressWarnings("unused")
-		void shouldGetDefaultPropertyValue(String bs) {
-			var xdomeaProps = withPropertyValue(null, XdomeaPropertiesTestFactory.createBuilder().behoerdenschluessel(bs)).build();
-			var bsProps = spy(new BehoerdenschluesselProperties(xdomeaProps));
-			mockPropertyDefaultValue(Optional.of(UUID.randomUUID().toString()), bsProps);
-
-			getPropertyValue(bsProps);
-
-			verifyDefaultPropertyValueAccessorWasCalled(bsProps);
-		}
-
-		@ParameterizedTest
-		@NullAndEmptySource
-		@SuppressWarnings("unused")
-		void shouldReturnDefaultPropertyValue(String bs) {
-			final String DEFAULT_VALUE = UUID.randomUUID().toString();
-			var xdomeaProps = withPropertyValue(null, XdomeaPropertiesTestFactory.createBuilder().behoerdenschluessel(bs)).build();
-			var bsProps = spy(new BehoerdenschluesselProperties(xdomeaProps));
-			mockPropertyDefaultValue(Optional.of(DEFAULT_VALUE), bsProps);
-
-			var value = getPropertyValue(bsProps);
-
-			assertThat(value).isPresent().get().isEqualTo(DEFAULT_VALUE);
-		}
-
-		@ParameterizedTest
-		@NullAndEmptySource
-		@SuppressWarnings("unused")
-		void shouldReturnEmptyIfDefaultPropertyValueIsEmpty(String bs) {
-			var xdomeaProps = withPropertyValue(null, XdomeaPropertiesTestFactory.createBuilder().behoerdenschluessel(bs)).build();
-			var bsProps = spy(new BehoerdenschluesselProperties(xdomeaProps));
-			mockPropertyDefaultValue(Optional.empty(), bsProps);
-
-			var value = getPropertyValue(bsProps);
-
-			assertThat(value).isEmpty();
-		}
-
-		protected abstract void verifyDefaultPropertyValueAccessorWasCalled(BehoerdenschluesselProperties bsProps);
-
-		protected abstract String getPropertyValue(XdomeaProperties props);
-
-		protected abstract Optional<String> getPropertyValue(BehoerdenschluesselProperties bsProps);
-
-		protected abstract XdomeaPropertiesBuilder withPropertyValue(String value, XdomeaPropertiesBuilder propertiesBuilder);
-
-		protected abstract void mockPropertyDefaultValue(Optional<String> defaultValue, BehoerdenschluesselProperties bsProps);
-	}
-
-	@Nested
-	class TestGetDefaultBehoerdenschluesselUri extends TestGetPropertyDefaultValue {
-
-		@Override
-		protected Optional<String> getPropertyDefaultValue(BehoerdenschluesselProperties bsProps) {
-			return bsProps.getDefaultBehoerdenschluesselUri();
-		}
-
-		@Override
-		protected String getPropertyDefaultValueFromCodeliste(Codeliste codeliste) {
-			return codeliste.getUri();
-		}
-	}
-
-	@Nested
-	class TestGetDefaultBehoerdenschluesselVersion extends TestGetPropertyDefaultValue {
-
-		@Override
-		protected Optional<String> getPropertyDefaultValue(BehoerdenschluesselProperties bsProps) {
-			return bsProps.getDefaultBehoerdenschluesselVersion();
-		}
-
-		@Override
-		protected String getPropertyDefaultValueFromCodeliste(Codeliste codeliste) {
-			return codeliste.getVersion();
-		}
-	}
-
-	@RequiredArgsConstructor
-	private abstract static class TestGetPropertyDefaultValue {
-
-		@Spy
-		private BehoerdenschluesselProperties bsProps = new BehoerdenschluesselProperties(XdomeaPropertiesTestFactory.create());
-
-		@Test
-		@SuppressWarnings("unused")
-		void shouldGetCodeliste() {
-			doReturn(Optional.of(XdomeaPropertiesTestFactory.createCodeliste1())).when(bsProps).getCodeliste();
-
-			getPropertyDefaultValue();
-
-			verify(bsProps).getCodeliste();
-		}
-
-		@Test
-		@SuppressWarnings("unused")
-		void shouldReturnEmptyIfCodelisteIsEmpty() {
-			doReturn(Optional.empty()).when(bsProps).getCodeliste();
-
-			var defaultValue = getPropertyDefaultValue();
-
-			assertThat(defaultValue).isEmpty();
-		}
-
-		@Test
-		void shouldReturnDefaultValueFromCodeliste() {
-			doReturn(Optional.of(XdomeaPropertiesTestFactory.createCodeliste1())).when(bsProps).getCodeliste();
-
-			var defaultValue = getPropertyDefaultValue();
-
-			assertThat(defaultValue).isPresent().get().isEqualTo(getPropertyDefaultValueFromCodeliste(XdomeaPropertiesTestFactory.createCodeliste1()));
-		}
-
-		private Optional<String> getPropertyDefaultValue() {
-			return getPropertyDefaultValue(bsProps);
-		}
-
-		protected abstract Optional<String> getPropertyDefaultValue(BehoerdenschluesselProperties bsProps);
-
-		protected abstract String getPropertyDefaultValueFromCodeliste(Codeliste codeliste);
-	}
-
-	@Nested
-	class TestGetCodeliste {
-
-		@ParameterizedTest
-		@NullAndEmptySource
-		void shouldReturnEmtpyIfBehoerdenschluesselIsNotSet(String bs) {
-			var bsProps = new BehoerdenschluesselProperties(XdomeaPropertiesTestFactory.createBuilder().behoerdenschluessel(bs).build());
-
-			var codeliste = bsProps.getCodeliste();
-
-			assertThat(codeliste).isEmpty();
-		}
-
-		@Test
-		void shouldReturnEmptyIfNoCodelisteMatchesBehoerdenschluessel() {
-			var bsProps = new BehoerdenschluesselProperties(XdomeaPropertiesTestFactory.create());
-
-			var codeliste = bsProps.getCodeliste();
-
-			assertThat(codeliste).isEmpty();
-		}
-
-		@ParameterizedTest
-		@MethodSource("provideData")
-		void shouldReturnCodelisteMatchingBehoerdenschluessel(String bs, Codeliste expectedCodeliste) {
-			var bsProps = new BehoerdenschluesselProperties(XdomeaPropertiesTestFactory.createBuilder().behoerdenschluessel(bs).build());
-
-			var codeliste = bsProps.getCodeliste();
-
-			assertThat(codeliste).isPresent().get().usingRecursiveComparison().isEqualTo(expectedCodeliste);
-		}
-
-		@Test
-		void shouldThrowExceptionIfMatchIsAmbiguous() {
-			var props = XdomeaPropertiesTestFactory.createBuilder()
-					.behoerdenschluessel(XdomeaPropertiesTestFactory.CODELISTE_1_VALID_BEHOERDENSCHLUESSEL)
-					.codeliste(List.of(XdomeaPropertiesTestFactory.createCodeliste1(), XdomeaPropertiesTestFactory.createCodeliste1()))
-					.build();
-			var bsProps = new BehoerdenschluesselProperties(props);
-
-			assertThatThrownBy(bsProps::getCodeliste).isInstanceOf(AmbiguousCodelistePatternException.class)
-					.hasFieldOrPropertyWithValue("behoerdenschluessel", props.getBehoerdenschluessel())
-					.hasMessageContaining(props.getBehoerdenschluessel());
-		}
-
-		private static Stream<Arguments> provideData() {
-			return Stream.of(
-					Arguments.of(XdomeaPropertiesTestFactory.CODELISTE_1_VALID_BEHOERDENSCHLUESSEL, XdomeaPropertiesTestFactory.createCodeliste1()),
-					Arguments.of(XdomeaPropertiesTestFactory.CODELISTE_2_VALID_BEHOERDENSCHLUESSEL, XdomeaPropertiesTestFactory.createCodeliste2())
-			);
-		}
-	}
-}
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/BehoerdenschluesselPropertiesValidatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/BehoerdenschluesselPropertiesValidatorTest.java
index 4e9c3db40af5cdf4ba1334b0dd6cdffd8461a822..eb81f121bc6a7ae12c425c9825f7e1ec02d38bd3 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/BehoerdenschluesselPropertiesValidatorTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/BehoerdenschluesselPropertiesValidatorTest.java
@@ -1,25 +1,16 @@
 package de.ozgcloud.alfa.export;
 
-import static de.ozgcloud.alfa.export.XdomeaPropertiesTestFactory.*;
 import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
 
-import java.util.Optional;
-
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
-import org.mockito.Mock;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.NullAndEmptySource;
 import org.mockito.Spy;
 import org.springframework.validation.Errors;
-import org.springframework.validation.SimpleErrors;
 
 class BehoerdenschluesselPropertiesValidatorTest {
 
-	private final XdomeaProperties properties = XdomeaPropertiesTestFactory.create();
-	private final Errors errors = new SimpleErrors(properties);
-	@Mock
-	private BehoerdenschluesselProperties behoerdenschluesselProperties;
 	@Spy
 	private BehoerdenschluesselPropertiesValidator validator;
 
@@ -37,32 +28,21 @@ class BehoerdenschluesselPropertiesValidatorTest {
 	@Nested
 	class TestValidate {
 
-		@BeforeEach
-		void init() {
-			doReturn(behoerdenschluesselProperties).when(validator).getBehoerdenschluesselProperties(properties);
-		}
-
-		@Test
-		void shouldGetBehoerdenschluesselProperties() {
-			validate();
-
-			verify(validator).getBehoerdenschluesselProperties(properties);
-		}
-
 		@Test
 		void shouldBeValidIfAllBehoerdenschluesselPropertiesAreSet() {
-			givenProperties(BEHOERDENSCHLUESSEL, BEHOERDENSCHLUESSEL_URI, BEHOERDENSCHLUESSEL_VERSION);
+			var properties = XdomeaPropertiesTestFactory.create();
 
-			validate();
+			var errors = validate(properties);
 
 			assertThat(errors.hasErrors()).isFalse();
 		}
 
-		@Test
-		void shouldBeValidIfBehoerdenschluesselIsNotSet() {
-			when(behoerdenschluesselProperties.getBehoerdenschluessel()).thenReturn(Optional.empty());
+		@ParameterizedTest
+		@NullAndEmptySource
+		void shouldBeValidIfBehoerdenschluesselIsNotSet(String behoerdenschluessel) {
+			var properties = XdomeaPropertiesTestFactory.createBuilder().behoerdenschluessel(behoerdenschluessel).build();
 
-			validate();
+			var errors = validate(properties);
 
 			assertThat(errors.hasErrors()).isFalse();
 		}
@@ -70,149 +50,89 @@ class BehoerdenschluesselPropertiesValidatorTest {
 		@Nested
 		class OnUriNotSet {
 
-			private static final String FIELD = "behoerdenschluesselUri";
-			public static final String PROPERTY_NAME = "behoerdenschluessel-uri";
+			private static final String PROPERTY_NAME = "behoerdenschluesselUri";
 			public static final String PROPERTY_PATH = "ozgcloud.xdomea." + PROPERTY_NAME;
 			public static final String ERROR_CODE = PROPERTY_PATH + ".empty";
 
-			@BeforeEach
-			void init() {
-				givenUriNotSet();
-			}
+			@ParameterizedTest
+			@NullAndEmptySource
+			void shouldHaveFieldErrors(String uri) {
+				var properties = havingBehoerdenschluesselUri(uri);
 
-			@Test
-			void shouldHaveFieldErrors() {
-				validate();
+				var errors = validate(properties);
 
-				assertThat(errors.hasFieldErrors(FIELD)).isTrue();
+				assertThat(errors.hasFieldErrors(PROPERTY_NAME)).isTrue();
 			}
 
-			@Test
-			void shouldHaveMeaningfulErrorMessage() {
-				validate();
+			@ParameterizedTest
+			@NullAndEmptySource
+			void shouldHaveMeaningfulErrorMessage(String uri) {
+				var properties = havingBehoerdenschluesselUri(uri);
 
-				assertThat(errors.getFieldError(FIELD).getDefaultMessage()).contains(PROPERTY_NAME);
+				var errors = validate(properties);
+
+				assertThat(errors.getFieldError(PROPERTY_NAME).getDefaultMessage()).contains(PROPERTY_NAME);
 			}
 
-			@Test
-			void shouldHaveErrorCode() {
-				validate();
+			@ParameterizedTest
+			@NullAndEmptySource
+			void shouldHaveErrorCode(String uri) {
+				var properties = havingBehoerdenschluesselUri(uri);
+
+				var errors = validate(properties);
 
-				assertThat(errors.getFieldError(FIELD).getCode()).isEqualTo(ERROR_CODE);
+				assertThat(errors.getFieldError(PROPERTY_NAME).getCode()).isEqualTo(ERROR_CODE);
 			}
 
-			private void givenUriNotSet() {
-				givenProperties(BEHOERDENSCHLUESSEL, null, BEHOERDENSCHLUESSEL_VERSION);
+			private XdomeaProperties havingBehoerdenschluesselUri(String uri) {
+				return XdomeaPropertiesTestFactory.createBuilder().behoerdenschluesselUri(uri).build();
 			}
 		}
 
 		@Nested
 		class OnVersionNotSet {
 
-			private static final String FIELD = "behoerdenschluesselVersion";
-			public static final String PROPERTY_NAME = "behoerdenschluessel-version";
+			public static final String PROPERTY_NAME = "behoerdenschluesselVersion";
 			public static final String PROPERTY_PATH = "ozgcloud.xdomea." + PROPERTY_NAME;
 			public static final String ERROR_CODE = PROPERTY_PATH + ".empty";
 
-			@BeforeEach
-			void init() {
-				givenVersionNotSet();
-			}
-
-			@Test
-			void shouldHaveFieldErrors() {
-				validate();
-
-				assertThat(errors.hasFieldErrors(FIELD)).isTrue();
-			}
-
-			@Test
-			void shouldHaveMeaningfulErrorMessage() {
-				validate();
-
-				assertThat(errors.getFieldError(FIELD).getDefaultMessage()).contains(PROPERTY_NAME);
-			}
-
-			@Test
-			void shouldHaveErrorCode() {
-				validate();
-
-				assertThat(errors.getFieldError(FIELD).getCode()).isEqualTo(ERROR_CODE);
-			}
-
-			private void givenVersionNotSet() {
-				givenProperties(BEHOERDENSCHLUESSEL, BEHOERDENSCHLUESSEL_URI, null);
-			}
-		}
-
-		@Nested
-		class OnAmbiguousCodelistePattern {
-
-			public static final String PROPERTY_PATH = "ozgcloud.xdomea.codeliste.pattern";
-			public static final String ERROR_CODE = PROPERTY_PATH + ".ambiguous";
+			@ParameterizedTest
+			@NullAndEmptySource
+			void shouldHaveFieldErrors(String version) {
+				var properties = havingBehoerdenschluesselVersion(version);
 
-			private final AmbiguousCodelistePatternException exception = new AmbiguousCodelistePatternException(BEHOERDENSCHLUESSEL);
+				var errors = validate(properties);
 
-			@BeforeEach
-			void init() {
-				givenAmbiguousCodelistePattern();
+				assertThat(errors.hasFieldErrors(PROPERTY_NAME)).isTrue();
 			}
 
-			@Test
-			void shouldHaveGlobalError() {
-				validate();
+			@ParameterizedTest
+			@NullAndEmptySource
+			void shouldHaveMeaningfulErrorMessage(String version) {
+				var properties = havingBehoerdenschluesselVersion(version);
 
-				assertThat(errors.hasGlobalErrors()).isTrue();
-			}
-
-			@Test
-			void shouldHaveErrorMessageOfException() {
-				validate();
+				var errors = validate(properties);
 
-				assertThat(errors.getGlobalError().getDefaultMessage()).isEqualTo(exception.getMessage());
+				assertThat(errors.getFieldError(PROPERTY_NAME).getDefaultMessage()).contains(PROPERTY_NAME);
 			}
 
-			@Test
-			void shouldHaveErrorCode() {
-				validate();
+			@ParameterizedTest
+			@NullAndEmptySource
+			void shouldHaveErrorCode(String version) {
+				var properties = havingBehoerdenschluesselVersion(version);
 
-				assertThat(errors.getGlobalError().getCode()).isEqualTo(ERROR_CODE);
-			}
+				var errors = validate(properties);
 
-			private void givenAmbiguousCodelistePattern() {
-				when(behoerdenschluesselProperties.getBehoerdenschluessel()).thenReturn(Optional.of(BEHOERDENSCHLUESSEL));
-				when(behoerdenschluesselProperties.getBehoerdenschluesselUri()).thenThrow(exception);
+				assertThat(errors.getFieldError(PROPERTY_NAME).getCode()).isEqualTo(ERROR_CODE);
 			}
-		}
 
-		private void givenProperties(String bs, String bsUri, String bsVersion) {
-			when(behoerdenschluesselProperties.getBehoerdenschluessel()).thenReturn(Optional.ofNullable(bs));
-			when(behoerdenschluesselProperties.getBehoerdenschluesselUri()).thenReturn(Optional.ofNullable(bsUri));
-			when(behoerdenschluesselProperties.getBehoerdenschluesselVersion()).thenReturn(Optional.ofNullable(bsVersion));
-		}
-
-		private void validate() {
-			validator.validate(properties, errors);
-		}
-	}
-
-	@Nested
-	class TestGetBehoerdenschluesselProperties {
-
-		@Test
-		void shouldCreateBehoerdenschluesselProperties() {
-			try (var mockBehoerdenschluesselProperties = mockConstruction(BehoerdenschluesselProperties.class)) {
-				validator.getBehoerdenschluesselProperties(XdomeaPropertiesTestFactory.create());
-
-				assertThat(mockBehoerdenschluesselProperties.constructed()).hasSize(1);
+			private XdomeaProperties havingBehoerdenschluesselVersion(String version) {
+				return XdomeaPropertiesTestFactory.createBuilder().behoerdenschluesselVersion(version).build();
 			}
 		}
 
-		@Test
-		void shouldReturnBehoerdenschluesselProperties() {
-			var behoerdenschluesselProperties = validator.getBehoerdenschluesselProperties(XdomeaPropertiesTestFactory.create());
-
-			assertThat(behoerdenschluesselProperties).isNotNull();
+		private Errors validate(XdomeaProperties properties) {
+			return validator.validateObject(properties);
 		}
 	}
 }
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesTest.java
deleted file mode 100644
index 36b7a2e053922c14a4bf0d13df50691f9582360a..0000000000000000000000000000000000000000
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesTest.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package de.ozgcloud.alfa.export;
-
-import static org.assertj.core.api.Assertions.*;
-
-import org.assertj.core.api.*;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.NullAndEmptySource;
-
-import jakarta.validation.ConstraintViolation;
-import jakarta.validation.Validation;
-import jakarta.validation.Validator;
-import jakarta.validation.ValidatorFactory;
-
-class XdomeaPropertiesTest {
-
-	private static ValidatorFactory validatorFactory;
-	private static Validator validator;
-
-	private static final ThrowingConsumer<ConstraintViolation<XdomeaProperties>> comesFromNotBlankValidationContraint = violation -> assertThat(
-			violation.getMessageTemplate()).contains("NotBlank");
-	private static final ThrowingConsumer<ConstraintViolation<XdomeaProperties>> comesFromNotNullValidationContraint = violation -> assertThat(
-			violation.getMessageTemplate()).contains("NotNull");
-
-	@BeforeAll
-	static void init() {
-		validatorFactory = Validation.buildDefaultValidatorFactory();
-		validator = validatorFactory.getValidator();
-	}
-
-	@AfterAll
-	static void cleanup() {
-		validatorFactory.close();
-	}
-
-	@ParameterizedTest
-	@NullAndEmptySource
-	void shouldCodelisteUriBeNotBlank(String uri) {
-		var properties = XdomeaPropertiesTestFactory.create();
-		properties.getCodeliste().getFirst().setUri(uri);
-
-		var violations = validator.validate(properties);
-
-		var hasExpectedPropertyPath = getHasPropertyPathAssertion("codeliste[0].uri");
-		assertThat(violations).hasSize(1).first().satisfies(
-				hasExpectedPropertyPath, comesFromNotBlankValidationContraint);
-	}
-
-	@ParameterizedTest
-	@NullAndEmptySource
-	void shouldCodelisteVersionBeNotBlank(String version) {
-		var properties = XdomeaPropertiesTestFactory.create();
-		properties.getCodeliste().getFirst().setVersion(version);
-
-		var violations = validator.validate(properties);
-
-		var hasExpectedPropertyPath = getHasPropertyPathAssertion("codeliste[0].version");
-		assertThat(violations).hasSize(1).first().satisfies(
-				hasExpectedPropertyPath, comesFromNotBlankValidationContraint);
-	}
-
-	@Test
-	void shouldCodelistePatternBeNotNull() {
-		var properties = XdomeaPropertiesTestFactory.create();
-		properties.getCodeliste().getFirst().setPattern(null);
-
-		var violations = validator.validate(properties);
-
-		var hasExpectedPropertyPath = getHasPropertyPathAssertion("codeliste[0].pattern");
-		assertThat(violations).hasSize(1).first().satisfies(
-				hasExpectedPropertyPath, comesFromNotNullValidationContraint);
-	}
-
-	@Test
-	void shouldPassValidation() {
-		var violations = validator.validate(XdomeaPropertiesTestFactory.create());
-
-		assertThat(violations).isEmpty();
-	}
-
-	private ThrowingConsumer<ConstraintViolation<XdomeaProperties>> getHasPropertyPathAssertion(String propertyPath) {
-		return violation -> assertThat(violation.getPropertyPath()).hasToString(propertyPath);
-	}
-}
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesTestFactory.java
index 4440933c7ac0a23fe0be6d2cc8aefaa986f4440e..78d786011aeedec05d51b6407305c2fb3769a626 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesTestFactory.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesTestFactory.java
@@ -1,11 +1,7 @@
 package de.ozgcloud.alfa.export;
 
-import java.util.List;
-import java.util.regex.Pattern;
-
 import com.thedeanda.lorem.LoremIpsum;
 
-import de.ozgcloud.alfa.export.XdomeaProperties.Codeliste;
 import de.ozgcloud.alfa.export.XdomeaProperties.XdomeaPropertiesBuilder;
 
 public class XdomeaPropertiesTestFactory {
@@ -14,16 +10,6 @@ public class XdomeaPropertiesTestFactory {
 	public static final String BEHOERDENSCHLUESSEL_URI = LoremIpsum.getInstance().getUrl();
 	public static final String BEHOERDENSCHLUESSEL_VERSION =  LoremIpsum.getInstance().getWords(1);
 
-	public static final String CODELISTE_1_URI = LoremIpsum.getInstance().getUrl();
-	public static final String CODELISTE_1_VERSION =  LoremIpsum.getInstance().getWords(1);
-	public static final Pattern CODELISTE_1_PATTERN = Pattern.compile("\\d{3}");
-	public static final String CODELISTE_1_VALID_BEHOERDENSCHLUESSEL = "123";
-
-	public static final String CODELISTE_2_URI = LoremIpsum.getInstance().getUrl();
-	public static final String CODELISTE_2_VERSION =  LoremIpsum.getInstance().getWords(1);
-	public static final Pattern CODELISTE_2_PATTERN = Pattern.compile("\\d{7}");
-	public static final String CODELISTE_2_VALID_BEHOERDENSCHLUESSEL = "1234567";
-
 	public static XdomeaProperties create() {
 		return createBuilder().build();
 	}
@@ -32,15 +18,6 @@ public class XdomeaPropertiesTestFactory {
 		return new XdomeaPropertiesBuilder()
 				.behoerdenschluessel(BEHOERDENSCHLUESSEL)
 				.behoerdenschluesselUri(BEHOERDENSCHLUESSEL_URI)
-				.behoerdenschluesselVersion(BEHOERDENSCHLUESSEL_VERSION)
-				.codeliste(List.of(createCodeliste1(), createCodeliste2()));
-	}
-
-	public static Codeliste createCodeliste1() {
-		return Codeliste.builder().uri(CODELISTE_1_URI).version(CODELISTE_1_VERSION).pattern(CODELISTE_1_PATTERN).build();
-	}
-
-	public static Codeliste createCodeliste2() {
-		return Codeliste.builder().uri(CODELISTE_2_URI).version(CODELISTE_2_VERSION).pattern(CODELISTE_2_PATTERN).build();
+				.behoerdenschluesselVersion(BEHOERDENSCHLUESSEL_VERSION);
 	}
 }
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 bd0658f74bebe29c54d6eaf1b1b8bea78899b5e0..ad2a07d492a41a25956fe6032f940df5b82c0f9e 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
@@ -1,13 +1,12 @@
 package de.ozgcloud.alfa.vorgang;
 
+import static de.ozgcloud.alfa.export.XdomeaPropertiesTestFactory.*;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
 import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
-import java.util.Optional;
-import java.util.UUID;
 
 import javax.xml.datatype.XMLGregorianCalendar;
 
@@ -15,6 +14,9 @@ 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.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.NullAndEmptySource;
+import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.MockedStatic;
 import org.mockito.Spy;
@@ -23,9 +25,7 @@ import com.thedeanda.lorem.LoremIpsum;
 
 import de.ozgcloud.alfa.common.DateConverter;
 import de.ozgcloud.alfa.common.UUIDConverter;
-import de.ozgcloud.alfa.export.BehoerdenschluesselProperties;
 import de.ozgcloud.alfa.export.XdomeaProperties;
-import de.ozgcloud.alfa.export.XdomeaPropertiesTestFactory;
 import de.xoev.xdomea.BehoerdenkennungType;
 import de.xoev.xdomea.Code;
 import de.xoev.xdomea.KontaktType;
@@ -36,11 +36,12 @@ import de.xoev.xdomea.SystemType;
 
 class KopfCreatorTest {
 
-	private final XdomeaProperties xDomeaProperties = XdomeaPropertiesTestFactory.create();
 	@Spy
-	private KopfCreator creator = new KopfCreator(xDomeaProperties);
+	@InjectMocks
+	private KopfCreator creator;
+
 	@Mock
-	private DateConverter dateConverter;
+	private XdomeaProperties xdomeaProperties;
 
 	@Nested
 	class TestCreateKopf {
@@ -170,9 +171,6 @@ class KopfCreatorTest {
 	@Nested
 	class TestCreateAbsender {
 
-		@Mock
-		private BehoerdenkennungType behoerdenkennungType;
-
 		@Test
 		void shouldCallCreateKontaktType() {
 			creator.createAbsender(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID);
@@ -194,45 +192,24 @@ class KopfCreatorTest {
 	@Nested
 	class TestCreateKontaktType {
 
-		@Mock
-		private BehoerdenschluesselProperties behoerdenschluesselProperties;
-
-		@BeforeEach
-		void init() {
-			doReturn(behoerdenschluesselProperties).when(creator).getBehoerdenschluesselProperties(xDomeaProperties);
-		}
-
-		@Test
-		void shouldGetBehoerdenschluesselProperties() {
-			creator.createKontaktType();
-
-			verify(creator).getBehoerdenschluesselProperties(xDomeaProperties);
-		}
-
-		@Test
-		void shouldGetBehoerdenschluessel() {
-			creator.createKontaktType();
-
-			verify(behoerdenschluesselProperties).getBehoerdenschluessel();
-		}
-
 		@Nested
 		class OnBehoerdenschluesselNotSet {
 
-			@BeforeEach
-			void init() {
-				when(behoerdenschluesselProperties.getBehoerdenschluessel()).thenReturn(Optional.empty());
-			}
+			@ParameterizedTest
+			@NullAndEmptySource
+			void shouldNotCreateBehoerdenkennung(String behoerdenschluessel) {
+				when(xdomeaProperties.getBehoerdenschluessel()).thenReturn(behoerdenschluessel);
 
-			@Test
-			void shouldNotCreateBehoerdenkennung() {
 				creator.createKontaktType();
 
-				verify(creator, never()).createBehoerdenkennung(behoerdenschluesselProperties);
+				verify(creator, never()).createBehoerdenkennung();
 			}
 
-			@Test
-			void shouldNotSetBehoerdenkennung() {
+			@ParameterizedTest
+			@NullAndEmptySource
+			void shouldNotSetBehoerdenkennung(String behoerdenschluessel) {
+				when(xdomeaProperties.getBehoerdenschluessel()).thenReturn(behoerdenschluessel);
+
 				var kontaktType = creator.createKontaktType();
 
 				assertThat(kontaktType.getBehoerdenkennung()).isNull();
@@ -242,21 +219,19 @@ class KopfCreatorTest {
 		@Nested
 		class OnBehoerdenschluesselSet {
 
-			private static final String BEHOERDENSCHLUESSEL = UUID.randomUUID().toString();
-
 			private static final BehoerdenkennungType expectedValue = new BehoerdenkennungType();
 
 			@BeforeEach
 			void init() {
-				when(behoerdenschluesselProperties.getBehoerdenschluessel()).thenReturn(Optional.of(BEHOERDENSCHLUESSEL));
-				doReturn(expectedValue).when(creator).createBehoerdenkennung(behoerdenschluesselProperties);
+				when(xdomeaProperties.getBehoerdenschluessel()).thenReturn(BEHOERDENSCHLUESSEL);
+				doReturn(expectedValue).when(creator).createBehoerdenkennung();
 			}
 
 			@Test
 			void shouldCreateBehoerdenkennung() {
 				creator.createKontaktType();
 
-				verify(creator).createBehoerdenkennung(behoerdenschluesselProperties);
+				verify(creator).createBehoerdenkennung();
 			}
 
 			@Test
@@ -268,26 +243,6 @@ class KopfCreatorTest {
 		}
 	}
 
-	@Nested
-	class TestGetBehoerdenschluesselProperties {
-
-		@Test
-		void shouldCreateBehoerdenschluesselProperties() {
-			try (var mockBehoerdenschluesselProperties = mockConstruction(BehoerdenschluesselProperties.class)) {
-				creator.getBehoerdenschluesselProperties(XdomeaPropertiesTestFactory.create());
-
-				assertThat(mockBehoerdenschluesselProperties.constructed()).hasSize(1);
-			}
-		}
-
-		@Test
-		void shouldReturnBehoerdenschluesselProperties() {
-			var behoerdenschluesselProperties = creator.getBehoerdenschluesselProperties(XdomeaPropertiesTestFactory.create());
-
-			assertThat(behoerdenschluesselProperties).isNotNull();
-		}
-	}
-
 	@Nested
 	class TestCreateOrganisationseinheitType {
 
@@ -303,24 +258,22 @@ class KopfCreatorTest {
 	class TestCreateBehoerdenkennung {
 
 		private final Code expectedBehoerdenschluessel = new Code();
-		@Mock
-		private BehoerdenschluesselProperties behoerdenschluesselProperties;
 
 		@BeforeEach
 		void init() {
-			doReturn(expectedBehoerdenschluessel).when(creator).createBehoerdenschluessel(behoerdenschluesselProperties);
+			doReturn(expectedBehoerdenschluessel).when(creator).createBehoerdenschluessel();
 		}
 
 		@Test
 		void shouldcreateBehoerdenschluessel() {
-			creator.createBehoerdenkennung(behoerdenschluesselProperties);
+			creator.createBehoerdenkennung();
 
-			verify(creator).createBehoerdenschluessel(behoerdenschluesselProperties);
+			verify(creator).createBehoerdenschluessel();
 		}
 
 		@Test
 		void shouldSetBehoerdenschluessel() {
-			var behoerdenkennungType = creator.createBehoerdenkennung(behoerdenschluesselProperties);
+			var behoerdenkennungType = creator.createBehoerdenkennung();
 
 			assertThat(behoerdenkennungType.getBehoerdenschluessel()).isEqualTo(expectedBehoerdenschluessel);
 		}
@@ -329,37 +282,30 @@ class KopfCreatorTest {
 	@Nested
 	class TestCreateBehoerdenschlussel {
 
-		private static final String BEHOERDENSCHLUESSEL = LoremIpsum.getInstance().getWords(1);
-		private static final String BEHOERDENSCHLUESSEL_URI = LoremIpsum.getInstance().getUrl();
-		private static final String BEHOERDENSCHLUESSEL_VERSION =  LoremIpsum.getInstance().getWords(1);
-
-		@Mock
-		private BehoerdenschluesselProperties behoerdenschluesselProperties;
-
 		@BeforeEach
 		void init() {
-			when(behoerdenschluesselProperties.getBehoerdenschluessel()).thenReturn(Optional.of(BEHOERDENSCHLUESSEL));
-			when(behoerdenschluesselProperties.getBehoerdenschluesselUri()).thenReturn(Optional.of(BEHOERDENSCHLUESSEL_URI));
-			when(behoerdenschluesselProperties.getBehoerdenschluesselVersion()).thenReturn(Optional.of(BEHOERDENSCHLUESSEL_VERSION));
+			when(xdomeaProperties.getBehoerdenschluessel()).thenReturn(BEHOERDENSCHLUESSEL);
+			when(xdomeaProperties.getBehoerdenschluesselUri()).thenReturn(BEHOERDENSCHLUESSEL_URI);
+			when(xdomeaProperties.getBehoerdenschluesselVersion()).thenReturn(BEHOERDENSCHLUESSEL_VERSION);
 		}
 
 		@Test
 		void shouldSetCode() {
-			var behoerdenschlussel = creator.createBehoerdenschluessel(behoerdenschluesselProperties);
+			var behoerdenschlussel = creator.createBehoerdenschluessel();
 
 			assertThat(behoerdenschlussel.getCode()).isEqualTo(BEHOERDENSCHLUESSEL);
 		}
 
 		@Test
 		void shouldSetListURI() {
-			var behoerdenschlussel = creator.createBehoerdenschluessel(behoerdenschluesselProperties);
+			var behoerdenschlussel = creator.createBehoerdenschluessel();
 
 			assertThat(behoerdenschlussel.getListURI()).isEqualTo(BEHOERDENSCHLUESSEL_URI);
 		}
 
 		@Test
 		void shouldSetListVersionID() {
-			var behoerdenschlussel = creator.createBehoerdenschluessel(behoerdenschluesselProperties);
+			var behoerdenschlussel = creator.createBehoerdenschluessel();
 
 			assertThat(behoerdenschlussel.getListVersionID()).isEqualTo(BEHOERDENSCHLUESSEL_VERSION);
 		}
diff --git a/alfa-xdomea/src/test/resources/application-itcase.yaml b/alfa-xdomea/src/test/resources/application-itcase.yaml
index aaabd1166c0a4921519a69a2a278982c50b0b2e8..c6f85b1e94d61d1ee6c5992b97cbac70b7260e24 100644
--- a/alfa-xdomea/src/test/resources/application-itcase.yaml
+++ b/alfa-xdomea/src/test/resources/application-itcase.yaml
@@ -1,15 +1,5 @@
 ozgcloud:
   xdomea:
-    behoerdenschluessel: 12345678
-    behoerdenschluessel-uri:
-    behoerdenschluessel-version:
-    codeliste:
-      - uri: urn:de:bund:destatis:bevoelkerungsstatistik:schluessel:kreis
-        version: 2021-07-31
-        pattern: \d{5}
-      - uri: urn:de:bund:destatis:bevoelkerungsstatistik:schluessel:ags
-        version: 2024-06-30
-        pattern: \d{8}
-      - uri: urn:de:bund:destatis:bevoelkerungsstatistik:schluessel:rs
-        version: 2024-06-30
-        pattern: \d{12}
\ No newline at end of file
+    behoerdenschluessel: ABC
+    behoerdenschluesselUri: http://meine.behoer.de
+    behoerdenschluesselVersion: 1.0.15b
\ No newline at end of file