diff --git a/alfa-server/src/main/resources/application-dev.yml b/alfa-server/src/main/resources/application-dev.yml
index 942555d4746e7ec791959ee5b1e41b6995d8f3a6..70ae53c6c499ef254dd591b6ef9a668022e741e9 100644
--- a/alfa-server/src/main/resources/application-dev.yml
+++ b/alfa-server/src/main/resources/application-dev.yml
@@ -9,7 +9,6 @@ server:
 
 ozgcloud:
   feature:
-    vorgang-export: true
     reply-always-allowed: true
     bescheid-wizard: true
   production: false
diff --git a/alfa-server/src/main/resources/application-e2e.yml b/alfa-server/src/main/resources/application-e2e.yml
index f5e0b466e36f33f9b60e43fde82de864247fe092..d91ee9e7f3874a0799b8c92bcdb28dab13dcb9ad 100644
--- a/alfa-server/src/main/resources/application-e2e.yml
+++ b/alfa-server/src/main/resources/application-e2e.yml
@@ -8,7 +8,6 @@ keycloak:
 
 ozgcloud:
   feature:
-    vorgang-export: true
     createBescheid: true
     reply-always-allowed: true
     bescheid-wizard: true
diff --git a/alfa-server/src/main/resources/application-local.yml b/alfa-server/src/main/resources/application-local.yml
index a0ed2b50fa6eb31acfb21af7156aa2c0590a7cc9..55480e664c9e5159bc787f902bd7c1d8e77eda1a 100644
--- a/alfa-server/src/main/resources/application-local.yml
+++ b/alfa-server/src/main/resources/application-local.yml
@@ -17,7 +17,6 @@ grpc:
 
 ozgcloud:
   feature:
-    vorgang-export: true
     reply-always-allowed: true
     bescheid-wizard: true
   production: false
@@ -28,10 +27,6 @@ ozgcloud:
     url: http://localhost:9092
     profile-template: /api/userProfiles/%s
     search-template: /api/userProfiles/?searchBy={searchBy}
-  xdomea:
-    behoerdenschluessel: "behoerdenschluesselWirdÜberHelmGesetzt"
-    behoerdenschluesselUri: "behoerdenschluesselUriWirdÜberHelmGesetzt"
-    behoerdenschluesselVersion: "behoerdenschluesselVersionWirdÜberHelmGesetzt"
 
 keycloak:
   auth-server-url: http://localhost:8088
diff --git a/alfa-server/src/main/resources/application.yml b/alfa-server/src/main/resources/application.yml
index 8e17178fea49083f2e1a5035d0b27d50c6670e50..ac930de36a83c9b7d962e72dca5ef29eae2fdd57 100644
--- a/alfa-server/src/main/resources/application.yml
+++ b/alfa-server/src/main/resources/application.yml
@@ -91,4 +91,8 @@ ozgcloud:
         - image/jpeg
   user-manager:
     profile-template: /api/userProfiles/%s
-    search-template: /api/userProfiles/?searchBy={searchBy}
\ No newline at end of file
+    search-template: /api/userProfiles/?searchBy={searchBy}
+  xdomea:
+    behoerdenschluessel:
+    behoerdenschluessel-uri:
+    behoerdenschluessel-version:
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 4ed36c554b2ec08ee7691c284a18bff95967332f..2e8d93a5e51a15f05418aac4952d926c64717300 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
@@ -12,11 +12,6 @@ import lombok.Setter;
 @ConfigurationProperties(prefix = "ozgcloud.feature")
 public class FeatureToggleProperties {
 
-	/**
-	 * Enable vorgang export(xdomea) feature.
-	 */
-	private boolean vorgangExport = false;
-
 	/**
 	 * Enable/Disable bescheid creation feature.
 	 */
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/DefaultXdomeaProperties.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/DefaultXdomeaProperties.java
deleted file mode 100644
index 32861d97bc2c68ae07e572d05b8316b526aaec90..0000000000000000000000000000000000000000
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/DefaultXdomeaProperties.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package de.ozgcloud.alfa.export;
-
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-@ConditionalOnProperty(value = "ozgcloud.feature.vorgang-export", havingValue = "false", matchIfMissing = true)
-public class DefaultXdomeaProperties implements XdomeaProperties {
-
-	private static final String EXCEPTION_MESSAGE = "The feature vorgang-export must be active to access this property.";
-
-	@Override
-	public String getBehoerdenschluessel() {
-		throw new UnsupportedOperationException(EXCEPTION_MESSAGE);
-	}
-
-	@Override
-	public String getBehoerdenschluesselUri() {
-		throw new UnsupportedOperationException(EXCEPTION_MESSAGE);
-	}
-
-	@Override
-	public String getBehoerdenschluesselVersion() {
-		throw new UnsupportedOperationException(EXCEPTION_MESSAGE);
-	}
-}
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 8840c0ac344b8d8d84fde3d7d48a96ec76794267..1ad1ea37461edf34756e2f478e3b56cc74e2bd88 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,12 +3,12 @@ package de.ozgcloud.alfa.export;
 import java.util.HashMap;
 import java.util.Map;
 
-import jakarta.xml.bind.Marshaller;
-
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.oxm.jaxb.Jaxb2Marshaller;
+import org.springframework.validation.Validator;
 
+import jakarta.xml.bind.Marshaller;
 import lombok.RequiredArgsConstructor;
 
 @RequiredArgsConstructor
@@ -21,6 +21,11 @@ class ExportConfiguration {
 
 	private final XdomeaNamespacePrefixMapper prefixMapper;
 
+	@Bean
+	static Validator configurationPropertiesValidator() {
+		return new XdomeaPropertiesValidator();
+	}
+
 	@Bean
 	Jaxb2Marshaller marshaller() {
 		var marshaller = new Jaxb2Marshaller();
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 cd93a4d4c15df7e7f57bcc02668076f4c2efdd15..b7621e342cb52f19593b07ee03384b25285feb6e 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
@@ -10,7 +10,6 @@ import org.springframework.hateoas.LinkRelation;
 import org.springframework.hateoas.server.RepresentationModelProcessor;
 import org.springframework.stereotype.Component;
 
-import de.ozgcloud.alfa.common.FeatureToggleProperties;
 import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus;
 import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
@@ -20,13 +19,10 @@ import lombok.RequiredArgsConstructor;
 @Component
 class ExportVorgangProcessor implements RepresentationModelProcessor<EntityModel<VorgangWithEingang>> {
 
-	private final Predicate<VorgangWithEingang> isExportEnabled = vorgang -> isExportEnabled();
 	private static final Predicate<VorgangWithEingang> IS_VORGANG_ABGESCHLOSSEN = vorgang -> vorgang.getStatus() == VorgangStatus.ABGESCHLOSSEN;
 
 	static final LinkRelation REL_EXPORT = LinkRelation.of("export");
 
-	private final FeatureToggleProperties featureToggleProperties;
-
 	@Override
 	public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) {
 		var vorgang = model.getContent();
@@ -36,12 +32,8 @@ class ExportVorgangProcessor implements RepresentationModelProcessor<EntityModel
 		}
 
 		return ModelBuilder.fromModel(model)
-				.ifMatch(isExportEnabled.and(IS_VORGANG_ABGESCHLOSSEN))
+				.ifMatch(IS_VORGANG_ABGESCHLOSSEN)
 				.addLink(linkTo(methodOn(ExportVorgangController.class).exportToXdomea(vorgang.getId())).withRel(REL_EXPORT))
 				.buildModel();
 	}
-
-	private boolean isExportEnabled() {
-		return featureToggleProperties.isVorgangExport();
-	}
 }
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExternalXdomeaProperties.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExternalXdomeaProperties.java
deleted file mode 100644
index 924bc8c28890c805e728af255a10a80b0c2cc575..0000000000000000000000000000000000000000
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExternalXdomeaProperties.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package de.ozgcloud.alfa.export;
-
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-
-import jakarta.validation.constraints.NotNull;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Configuration
-@ConfigurationProperties("ozgcloud.xdomea")
-@ConditionalOnProperty(value = "ozgcloud.feature.vorgang-export", havingValue = "true")
-public class ExternalXdomeaProperties implements XdomeaProperties {
-
-	@NotNull
-	private String behoerdenschluessel;
-	@NotNull
-	private String behoerdenschluesselUri;
-	@NotNull
-	private String behoerdenschluesselVersion;
-}
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 bedb3877aeafe1401e8ca5a8e82727e2da1e963a..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,10 +1,26 @@
 package de.ozgcloud.alfa.export;
 
-public interface XdomeaProperties {
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.validation.annotation.Validated;
 
-	String getBehoerdenschluessel();
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
 
-	String getBehoerdenschluesselUri();
+@Configuration
+@ConfigurationProperties("ozgcloud.xdomea")
+@Validated
+@Builder
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+public class XdomeaProperties {
 
-	String getBehoerdenschluesselVersion();
+	private String behoerdenschluessel;
+	private String behoerdenschluesselUri;
+	private String behoerdenschluesselVersion;
 }
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidator.java
new file mode 100644
index 0000000000000000000000000000000000000000..8cc320ecb6346fbc79bd42a2826b08bec38aaff3
--- /dev/null
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidator.java
@@ -0,0 +1,44 @@
+package de.ozgcloud.alfa.export;
+
+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 XdomeaPropertiesValidator implements Validator {
+
+	@Override
+	public boolean supports(Class<?> clazz) {
+		return XdomeaProperties.class.isAssignableFrom(clazz);
+	}
+
+	@Override
+	public void validate(Object target, Errors errors) {
+		var properties = (XdomeaProperties) target;
+		validateBehoerdenschluesselProperties(errors, properties);
+	}
+
+	private void validateBehoerdenschluesselProperties(Errors errors, XdomeaProperties properties) {
+		if (StringUtils.isNotBlank(properties.getBehoerdenschluessel())) {
+			validateNotBlank("behoerdenschluesselUri", properties, errors);
+			validateNotBlank("behoerdenschluesselVersion", properties, errors);
+		}
+	}
+
+	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 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/vorgang/KopfCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KopfCreator.java
index f23b06bdff34f335838f388ca0da9e389af0eedc..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
@@ -15,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
@@ -26,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();
@@ -57,7 +58,9 @@ class KopfCreator {
 
 	KontaktType createKontaktType() {
 		var kontakt = new KontaktType();
-		kontakt.setBehoerdenkennung(createBehoerdenkennung());
+		if (StringUtils.isNotBlank(xdomeaProperties.getBehoerdenschluessel())) {
+			kontakt.setBehoerdenkennung(createBehoerdenkennung());
+		}
 		return kontakt;
 	}
 
@@ -75,9 +78,9 @@ class KopfCreator {
 
 	Code createBehoerdenschluessel() {
 		var behoerdenschluessel = new Code();
-		behoerdenschluessel.setCode(xDomeaProperties.getBehoerdenschluessel());
-		behoerdenschluessel.setListURI(xDomeaProperties.getBehoerdenschluesselUri());
-		behoerdenschluessel.setListVersionID(xDomeaProperties.getBehoerdenschluesselVersion());
+		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/ExportVorgangProcessorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangProcessorTest.java
index 27ed62377f845026eb3265b2a23f0694188c2579..1443f94482daadc8ab02a10a9ebeaa17a3045457 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangProcessorTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangProcessorTest.java
@@ -2,7 +2,6 @@ package de.ozgcloud.alfa.export;
 
 import static de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory.*;
 import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
@@ -11,11 +10,9 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.EnumSource;
 import org.mockito.InjectMocks;
-import org.mockito.Mock;
 import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.Link;
 
-import de.ozgcloud.alfa.common.FeatureToggleProperties;
 import de.ozgcloud.alfa.common.UserProfileUrlProvider;
 import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus;
 import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
@@ -27,9 +24,6 @@ class ExportVorgangProcessorTest {
 	@InjectMocks
 	private ExportVorgangProcessor processor;
 
-	@Mock
-	private FeatureToggleProperties featureToggleProperties;
-
 	private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider();
 
 	@Nested
@@ -45,8 +39,7 @@ class ExportVorgangProcessorTest {
 			}
 
 			@Test
-			void shouldAddLinkWhenExportIsEnabledAndVorgangIsAbgeschlossen() {
-				when(featureToggleProperties.isVorgangExport()).thenReturn(true);
+			void shouldAddLinkWhenVorgangIsAbgeschlossen() {
 				var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN);
 
 				var model = processor.process(EntityModel.of(vorgang));
@@ -58,7 +51,6 @@ class ExportVorgangProcessorTest {
 			@ParameterizedTest
 			@EnumSource(mode = EnumSource.Mode.EXCLUDE, names = "ABGESCHLOSSEN")
 			void shouldNotAddLinkWhenVorgangIsNotAbgeschlossen(VorgangStatus status) {
-				when(featureToggleProperties.isVorgangExport()).thenReturn(true);
 				var vorgang = vorgangInStatus(status);
 
 				var model = processor.process(EntityModel.of(vorgang));
@@ -66,16 +58,6 @@ class ExportVorgangProcessorTest {
 				assertThat(model.getLink(ExportVorgangProcessor.REL_EXPORT)).isEmpty();
 			}
 
-			@Test
-			void shouldNotAddLinkWhenExportIsDisabled() {
-				when(featureToggleProperties.isVorgangExport()).thenReturn(false);
-				var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN);
-
-				var model = processor.process(EntityModel.of(vorgang));
-
-				assertThat(model.getLink(ExportVorgangProcessor.REL_EXPORT)).isEmpty();
-			}
-
 			private VorgangWithEingang vorgangInStatus(VorgangStatus status) {
 				return VorgangWithEingangTestFactory.createBuilder().status(status).build();
 			}
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 e44fadad0ec3d14b3d261b45fe5b8dc30cbb7669..0000000000000000000000000000000000000000
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package de.ozgcloud.alfa.export;
-
-import static org.assertj.core.api.AssertionsForClassTypes.*;
-
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.ActiveProfiles;
-import org.springframework.test.context.TestPropertySource;
-
-public class XdomeaPropertiesTest {
-
-	@Nested
-	@SpringBootTest(properties = {"ozgcloud.feature.vorgang-export=false"})
-	class OnMissingVorgangExportFeature {
-
-		@Autowired
-		XdomeaProperties xdomeaProperties;
-
-		@Test
-		void shouldPropertiesBeOfTypeDefault(){
-			assertThat(xdomeaProperties).isInstanceOf(DefaultXdomeaProperties.class);
-		}
-
-		@Test
-		void shouldBehoerdenschluesselThrowException(){
-			assertThatThrownBy(() -> xdomeaProperties.getBehoerdenschluessel()).isInstanceOf(UnsupportedOperationException.class);
-		}
-
-		@Test
-		void shouldBehoerdenschluesselUriThrowException(){
-			assertThatThrownBy(() -> xdomeaProperties.getBehoerdenschluesselUri()).isInstanceOf(UnsupportedOperationException.class);
-		}
-
-		@Test
-		void shouldBehoerdenschluesselVersionThrowException(){
-			assertThatThrownBy(() -> xdomeaProperties.getBehoerdenschluesselVersion()).isInstanceOf(UnsupportedOperationException.class);
-		}
-	}
-
-	@Nested
-	@SpringBootTest
-	@ActiveProfiles({"itcase"})
-	class OnActiveVorgangExportFeature {
-
-		@Autowired
-		XdomeaProperties xdomeaProperties;
-
-		@Test
-		void shouldPropertiesBeOfTypeConfig(){
-			assertThat(xdomeaProperties).isInstanceOf(ExternalXdomeaProperties.class);
-		}
-
-		@Test
-		void shouldBehoerdenschluesselBeSet(){
-			assertThat(xdomeaProperties.getBehoerdenschluessel()).isEqualTo("ABC");
-		}
-
-		@Test
-		void shouldBehoerdenschluesselUriBeSet(){
-			assertThat(xdomeaProperties.getBehoerdenschluesselUri()).isEqualTo("http://meine.behoer.de");
-		}
-
-		@Test
-		void shouldBehoerdenschluesselVersionBeSet(){
-			assertThat(xdomeaProperties.getBehoerdenschluesselVersion()).isEqualTo("1.0.15b");
-		}
-	}
-}
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
new file mode 100644
index 0000000000000000000000000000000000000000..78d786011aeedec05d51b6407305c2fb3769a626
--- /dev/null
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesTestFactory.java
@@ -0,0 +1,23 @@
+package de.ozgcloud.alfa.export;
+
+import com.thedeanda.lorem.LoremIpsum;
+
+import de.ozgcloud.alfa.export.XdomeaProperties.XdomeaPropertiesBuilder;
+
+public class XdomeaPropertiesTestFactory {
+
+	public static final String BEHOERDENSCHLUESSEL = LoremIpsum.getInstance().getWords(1);
+	public static final String BEHOERDENSCHLUESSEL_URI = LoremIpsum.getInstance().getUrl();
+	public static final String BEHOERDENSCHLUESSEL_VERSION =  LoremIpsum.getInstance().getWords(1);
+
+	public static XdomeaProperties create() {
+		return createBuilder().build();
+	}
+
+	public static XdomeaPropertiesBuilder createBuilder() {
+		return new XdomeaPropertiesBuilder()
+				.behoerdenschluessel(BEHOERDENSCHLUESSEL)
+				.behoerdenschluesselUri(BEHOERDENSCHLUESSEL_URI)
+				.behoerdenschluesselVersion(BEHOERDENSCHLUESSEL_VERSION);
+	}
+}
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidatorITCase.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidatorITCase.java
new file mode 100644
index 0000000000000000000000000000000000000000..451d2c7c49059af03d5e26034ad45f7bc6929998
--- /dev/null
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidatorITCase.java
@@ -0,0 +1,17 @@
+package de.ozgcloud.alfa.export;
+
+import static org.assertj.core.api.Assertions.*;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.context.ApplicationContext;
+
+import de.ozgcloud.common.test.ITCase;
+
+@ITCase
+class XdomeaPropertiesValidatorITCase {
+
+	@Test
+	void shouldExistInApplicationContext(ApplicationContext context) {
+		assertThat(context.getBean("configurationPropertiesValidator")).isNotNull().isInstanceOf(XdomeaPropertiesValidator.class);
+	}
+}
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidatorTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..cd6cf19672ab8118254ded34a4b2444d921f8f55
--- /dev/null
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaPropertiesValidatorTest.java
@@ -0,0 +1,138 @@
+package de.ozgcloud.alfa.export;
+
+import static org.assertj.core.api.Assertions.*;
+
+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.Spy;
+import org.springframework.validation.Errors;
+
+class XdomeaPropertiesValidatorTest {
+
+	@Spy
+	private XdomeaPropertiesValidator validator;
+
+	@Nested
+	class TestSupports {
+
+		@Test
+		void shouldSupportXdomeaProperties() {
+			var supports = validator.supports(XdomeaProperties.class);
+
+			assertThat(supports).isTrue();
+		}
+	}
+
+	@Nested
+	class TestValidate {
+
+		@Test
+		void shouldBeValidIfAllBehoerdenschluesselPropertiesAreSet() {
+			var properties = XdomeaPropertiesTestFactory.create();
+
+			var errors = validate(properties);
+
+			assertThat(errors.hasErrors()).isFalse();
+		}
+
+		@ParameterizedTest
+		@NullAndEmptySource
+		void shouldBeValidIfBehoerdenschluesselIsNotSet(String behoerdenschluessel) {
+			var properties = XdomeaPropertiesTestFactory.createBuilder().behoerdenschluessel(behoerdenschluessel).build();
+
+			var errors = validate(properties);
+
+			assertThat(errors.hasErrors()).isFalse();
+		}
+
+		@Nested
+		class OnUriNotSet {
+
+			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";
+
+			@ParameterizedTest
+			@NullAndEmptySource
+			void shouldHaveFieldErrors(String uri) {
+				var properties = withBehoerdenschluesselUri(uri);
+
+				var errors = validate(properties);
+
+				assertThat(errors.hasFieldErrors(PROPERTY_NAME)).isTrue();
+			}
+
+			@ParameterizedTest
+			@NullAndEmptySource
+			void shouldHaveMeaningfulErrorMessage(String uri) {
+				var properties = withBehoerdenschluesselUri(uri);
+
+				var errors = validate(properties);
+
+				assertThat(errors.getFieldError(PROPERTY_NAME).getDefaultMessage()).contains(PROPERTY_NAME);
+			}
+
+			@ParameterizedTest
+			@NullAndEmptySource
+			void shouldHaveErrorCode(String uri) {
+				var properties = withBehoerdenschluesselUri(uri);
+
+				var errors = validate(properties);
+
+				assertThat(errors.getFieldError(PROPERTY_NAME).getCode()).isEqualTo(ERROR_CODE);
+			}
+
+			private XdomeaProperties withBehoerdenschluesselUri(String uri) {
+				return XdomeaPropertiesTestFactory.createBuilder().behoerdenschluesselUri(uri).build();
+			}
+		}
+
+		@Nested
+		class OnVersionNotSet {
+
+			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";
+
+			@ParameterizedTest
+			@NullAndEmptySource
+			void shouldHaveFieldErrors(String version) {
+				var properties = withBehoerdenschluesselVersion(version);
+
+				var errors = validate(properties);
+
+				assertThat(errors.hasFieldErrors(PROPERTY_NAME)).isTrue();
+			}
+
+			@ParameterizedTest
+			@NullAndEmptySource
+			void shouldHaveMeaningfulErrorMessage(String version) {
+				var properties = withBehoerdenschluesselVersion(version);
+
+				var errors = validate(properties);
+
+				assertThat(errors.getFieldError(PROPERTY_NAME).getDefaultMessage()).contains(PROPERTY_NAME);
+			}
+
+			@ParameterizedTest
+			@NullAndEmptySource
+			void shouldHaveErrorCode(String version) {
+				var properties = withBehoerdenschluesselVersion(version);
+
+				var errors = validate(properties);
+
+				assertThat(errors.getFieldError(PROPERTY_NAME).getCode()).isEqualTo(ERROR_CODE);
+			}
+
+			private XdomeaProperties withBehoerdenschluesselVersion(String version) {
+				return XdomeaPropertiesTestFactory.createBuilder().behoerdenschluesselVersion(version).build();
+			}
+		}
+
+		private Errors validate(XdomeaProperties properties) {
+			return validator.validateObject(properties);
+		}
+	}
+}
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 0c72b5ad9ff5d21840af73074a8f244c3899b0ab..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,5 +1,6 @@
 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.*;
@@ -13,6 +14,8 @@ 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;
@@ -38,9 +41,7 @@ class KopfCreatorTest {
 	private KopfCreator creator;
 
 	@Mock
-	private XdomeaProperties xDomeaProperties;
-	@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,15 +192,54 @@ class KopfCreatorTest {
 	@Nested
 	class TestCreateKontaktType {
 
-		@Test
-		void shouldSetBehoerdenkennungType() {
-			var expectedValue = new BehoerdenkennungType();
-			doReturn(expectedValue).when(creator).createBehoerdenkennung();
+		@Nested
+		class OnBehoerdenschluesselNotSet {
+
+			@ParameterizedTest
+			@NullAndEmptySource
+			void shouldNotCreateBehoerdenkennung(String behoerdenschluessel) {
+				when(xdomeaProperties.getBehoerdenschluessel()).thenReturn(behoerdenschluessel);
+
+				creator.createKontaktType();
+
+				verify(creator, never()).createBehoerdenkennung();
+			}
+
+			@ParameterizedTest
+			@NullAndEmptySource
+			void shouldNotSetBehoerdenkennung(String behoerdenschluessel) {
+				when(xdomeaProperties.getBehoerdenschluessel()).thenReturn(behoerdenschluessel);
+
+				var kontaktType = creator.createKontaktType();
 
-			var kontaktType = creator.createAbsender(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID);
+				assertThat(kontaktType.getBehoerdenkennung()).isNull();
+			}
+		}
+
+		@Nested
+		class OnBehoerdenschluesselSet {
+
+			private static final BehoerdenkennungType expectedValue = new BehoerdenkennungType();
+
+			@BeforeEach
+			void init() {
+				when(xdomeaProperties.getBehoerdenschluessel()).thenReturn(BEHOERDENSCHLUESSEL);
+				doReturn(expectedValue).when(creator).createBehoerdenkennung();
+			}
+
+			@Test
+			void shouldCreateBehoerdenkennung() {
+				creator.createKontaktType();
+
+				verify(creator).createBehoerdenkennung();
+			}
 
-			assertThat(kontaktType.getBehoerdenkennung()).isEqualTo(expectedValue);
+			@Test
+			void shouldSetBehoerdenkennung() {
+				var kontaktType = creator.createKontaktType();
 
+				assertThat(kontaktType.getBehoerdenkennung()).isEqualTo(expectedValue);
+			}
 		}
 	}
 
@@ -220,11 +257,22 @@ class KopfCreatorTest {
 	@Nested
 	class TestCreateBehoerdenkennung {
 
-		@Test
-		void shouldSetBehoerdenschluessel() {
-			var expectedBehoerdenschluessel = new Code();
+		private final Code expectedBehoerdenschluessel = new Code();
+
+		@BeforeEach
+		void init() {
 			doReturn(expectedBehoerdenschluessel).when(creator).createBehoerdenschluessel();
+		}
+
+		@Test
+		void shouldcreateBehoerdenschluessel() {
+			creator.createBehoerdenkennung();
+
+			verify(creator).createBehoerdenschluessel();
+		}
 
+		@Test
+		void shouldSetBehoerdenschluessel() {
 			var behoerdenkennungType = creator.createBehoerdenkennung();
 
 			assertThat(behoerdenkennungType.getBehoerdenschluessel()).isEqualTo(expectedBehoerdenschluessel);
@@ -234,34 +282,32 @@ class KopfCreatorTest {
 	@Nested
 	class TestCreateBehoerdenschlussel {
 
+		@BeforeEach
+		void init() {
+			when(xdomeaProperties.getBehoerdenschluessel()).thenReturn(BEHOERDENSCHLUESSEL);
+			when(xdomeaProperties.getBehoerdenschluesselUri()).thenReturn(BEHOERDENSCHLUESSEL_URI);
+			when(xdomeaProperties.getBehoerdenschluesselVersion()).thenReturn(BEHOERDENSCHLUESSEL_VERSION);
+		}
+
 		@Test
 		void shouldSetCode() {
-			var expectedBehoerdenschluessel = LoremIpsum.getInstance().getWords(1);
-			when(xDomeaProperties.getBehoerdenschluessel()).thenReturn(expectedBehoerdenschluessel);
-
 			var behoerdenschlussel = creator.createBehoerdenschluessel();
 
-			assertThat(behoerdenschlussel.getCode()).isEqualTo(expectedBehoerdenschluessel);
+			assertThat(behoerdenschlussel.getCode()).isEqualTo(BEHOERDENSCHLUESSEL);
 		}
 
 		@Test
 		void shouldSetListURI() {
-			var expectedBehoerdenschluesselUri = LoremIpsum.getInstance().getUrl();
-			when(xDomeaProperties.getBehoerdenschluesselUri()).thenReturn(expectedBehoerdenschluesselUri);
-
 			var behoerdenschlussel = creator.createBehoerdenschluessel();
 
-			assertThat(behoerdenschlussel.getListURI()).isEqualTo(expectedBehoerdenschluesselUri);
+			assertThat(behoerdenschlussel.getListURI()).isEqualTo(BEHOERDENSCHLUESSEL_URI);
 		}
 
 		@Test
 		void shouldSetListVersionID() {
-			var expectedBehoerdenschluesselVersion = LoremIpsum.getInstance().getWords(1);
-			when(xDomeaProperties.getBehoerdenschluesselVersion()).thenReturn(expectedBehoerdenschluesselVersion);
-
 			var behoerdenschlussel = creator.createBehoerdenschluessel();
 
-			assertThat(behoerdenschlussel.getListVersionID()).isEqualTo(expectedBehoerdenschluesselVersion);
+			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 8637dea80e839d9c9b817da9756bf1e394ac958d..c6f85b1e94d61d1ee6c5992b97cbac70b7260e24 100644
--- a/alfa-xdomea/src/test/resources/application-itcase.yaml
+++ b/alfa-xdomea/src/test/resources/application-itcase.yaml
@@ -1,6 +1,4 @@
 ozgcloud:
-  feature:
-    vorgang-export: true
   xdomea:
     behoerdenschluessel: ABC
     behoerdenschluesselUri: http://meine.behoer.de