diff --git a/common/src/main/java/de/ozgcloud/eingang/common/formdata/ServiceKonto.java b/common/src/main/java/de/ozgcloud/eingang/common/formdata/ServiceKonto.java
index ab2f7588d424a1358a4d8bcd01d360e705917e86..6cce21a27b16bcf67062209a83427366ba35b583 100644
--- a/common/src/main/java/de/ozgcloud/eingang/common/formdata/ServiceKonto.java
+++ b/common/src/main/java/de/ozgcloud/eingang/common/formdata/ServiceKonto.java
@@ -1,9 +1,14 @@
 package de.ozgcloud.eingang.common.formdata;
 
+import java.util.EnumSet;
 import java.util.List;
 
+import org.apache.commons.lang3.StringUtils;
+
+import lombok.AccessLevel;
 import lombok.Builder;
 import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 import lombok.Singular;
 
 @Getter
@@ -22,4 +27,23 @@ public class ServiceKonto {
 		private String version;
 		private PostfachAddressIdentifier identifier;
 	}
+
+	@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
+	public enum TrustLevel {
+
+		LEVEL_1("STORK-QAA-Level-1"),
+		LEVEL_2("STORK-QAA-Level-2"),
+		LEVEL_3("STORK-QAA-Level-3"),
+		LEVEL_4("STORK-QAA-Level-4");
+
+		private final String value;
+
+		public static boolean exists(String trustLevelValue) {
+			if (StringUtils.isBlank(trustLevelValue)) {
+				return false;
+			}
+			return EnumSet.allOf(TrustLevel.class).stream().map(trustLevel -> trustLevel.value).anyMatch(trustLevelValue::equalsIgnoreCase);
+		}
+	}
+
 }
\ No newline at end of file
diff --git a/common/src/test/java/de/ozgcloud/eingang/common/formdata/TrustLevelTest.java b/common/src/test/java/de/ozgcloud/eingang/common/formdata/TrustLevelTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..93c12966a7e2b57ae3053bb583e585d6683025d9
--- /dev/null
+++ b/common/src/test/java/de/ozgcloud/eingang/common/formdata/TrustLevelTest.java
@@ -0,0 +1,32 @@
+package de.ozgcloud.eingang.common.formdata;
+
+import static org.assertj.core.api.Assertions.*;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.NullAndEmptySource;
+import org.junit.jupiter.params.provider.ValueSource;
+
+import de.ozgcloud.eingang.common.formdata.ServiceKonto.TrustLevel;
+
+class TrustLevelTest {
+
+	@DisplayName("should return true when")
+	@ParameterizedTest(name = "trust level is {0}")
+	@ValueSource(strings = {"STORK-QAA-Level-1", "STORK-QAA-Level-2", "STORK-QAA-Level-3", "STORK-QAA-Level-4"})
+	void shouldReturnTrue(String trustLevel) {
+		var isValid = TrustLevel.exists(trustLevel);
+
+		assertThat(isValid).isTrue();
+	}
+
+	@DisplayName("should return false when")
+	@ParameterizedTest(name = "trust level is \"{0}\"")
+	@NullAndEmptySource
+	@ValueSource(strings = {"STORK-QAA-Level-0", "unexpected"})
+	void shouldReturnFalse(String trustLevel) {
+		var isValid = TrustLevel.exists(trustLevel);
+
+		assertThat(isValid).isFalse();
+	}
+}
\ No newline at end of file
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/ServiceKontoBuildHelper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactory.java
similarity index 71%
rename from semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/ServiceKontoBuildHelper.java
rename to semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactory.java
index 1ec87a0e456865b00b7edbddf0834dad0f8e9948..0b7320fbe23a0a9820ccebfa9c82fd78347798f4 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/ServiceKontoBuildHelper.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactory.java
@@ -1,4 +1,4 @@
-package de.ozgcloud.eingang.semantik.enginebased;
+package de.ozgcloud.eingang.semantik.common;
 
 import java.util.Collections;
 import java.util.List;
@@ -6,21 +6,27 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 
+import org.apache.commons.collections.MapUtils;
 import org.springframework.stereotype.Component;
 
 import de.ozgcloud.eingang.common.formdata.FormData;
 import de.ozgcloud.eingang.common.formdata.PostfachAddressIdentifier;
 import de.ozgcloud.eingang.common.formdata.ServiceKonto;
-import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier;
 import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress;
+import de.ozgcloud.eingang.common.formdata.ServiceKonto.TrustLevel;
+import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier;
+import lombok.extern.log4j.Log4j2;
 
 @Component
-public class ServiceKontoBuildHelper {
+@Log4j2
+public class ServiceKontoFactory {
 
 	public static final int POSTFACH_ADDRESS_DEFAULT = 1;
 	public static final String POSTFACH_TYPE_OSI = "OSI";
 	public static final String POSTFACH_TYPE_BAYERN_ID = "BayernID";
 	public static final String POSTFACH_VERSION = "1.0";
+	public static final String KEY_BAYERN_ID_POSTFACH_ID = "u:saml_legacypostkorbhandle";
+	public static final String KEY_BAYERN_ID_TRUST_LEVEL = "u:saml_eid_citizen_qaa_level";
 
 	public static final String REST_RESPONSE_NAME = "rest_response_name";
 	public static final String REST_RESPONSE_NAME_MEMBER_SCOPE = "memberscope";
@@ -85,8 +91,27 @@ public class ServiceKontoBuildHelper {
 		return ((List<Map<String, Object>>) restResponseName.get(REST_RESPONSE_NAME_MEMBER_SCOPE)).get(0);
 	}
 
-	public ServiceKonto buildBayernIdServiceKonto(String postfachId) {
-		return ServiceKonto.builder().type(POSTFACH_TYPE_BAYERN_ID).postfachAddress(buildPostfachAddress(postfachId)).build();
+	public Optional<ServiceKonto> createBayernIdServiceKonto(Map<String, Object> formDataHeaders) {
+		if (Objects.isNull(formDataHeaders) || !formDataHeaders.containsKey(KEY_BAYERN_ID_POSTFACH_ID)) {
+			return Optional.empty();
+		}
+		if (isValidTrustLevel(formDataHeaders)) {
+			return Optional.of(buildBayernIdServiceKonto(formDataHeaders));
+		}
+		LOG.error("TrustLevel has an unexpected value '{}'. BayernID user account is not connected", getTrustLevel(formDataHeaders));
+		return Optional.empty();
+	}
+
+	boolean isValidTrustLevel(Map<String, Object> formDataHeader) {
+		return TrustLevel.exists(getTrustLevel(formDataHeader));
+	}
+
+	ServiceKonto buildBayernIdServiceKonto(Map<String, Object> formDataHeaders) {
+		return ServiceKonto.builder()
+				.type(POSTFACH_TYPE_BAYERN_ID)
+				.postfachAddress(buildPostfachAddress(MapUtils.getString(formDataHeaders, KEY_BAYERN_ID_POSTFACH_ID)))
+				.trustLevel(getTrustLevel(formDataHeaders))
+				.build();
 	}
 
 	PostfachAddress buildPostfachAddress(String postkorbHandle) {
@@ -101,4 +126,8 @@ public class ServiceKontoBuildHelper {
 		return StringBasedIdentifier.builder().postfachId(postfachId).build();
 	}
 
+	String getTrustLevel(Map<String, Object> formDataHeaders) {
+		return MapUtils.getString(formDataHeaders, KEY_BAYERN_ID_TRUST_LEVEL);
+	}
+
 }
\ No newline at end of file
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerHeaderMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerHeaderMapper.java
index 3171846b129f4f676a7392d2f857e0f72714705c..df134be93dbf148d8cc9f2009d9f2ad6ec6d581d 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerHeaderMapper.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerHeaderMapper.java
@@ -6,16 +6,17 @@ import static org.apache.commons.lang3.StringUtils.*;
 import java.util.Collections;
 import java.util.Map;
 
+import org.apache.commons.collections.MapUtils;
 import org.springframework.stereotype.Component;
 
 import de.ozgcloud.eingang.common.errorhandling.TechnicalException;
 import de.ozgcloud.eingang.common.formdata.Antragsteller;
 import de.ozgcloud.eingang.common.formdata.FormData;
+import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory;
 
 @Component
 public class AfmAntragstellerHeaderMapper {
 
-	static final String KEY_POSTFACH_ID = "u:saml_legacypostkorbhandle";
 	static final String KEY_VORNAME = "u:saml_givenname";
 	static final String KEY_NACHNAME = "u:saml_surname";
 	static final String KEY_GEBURTSORT = "u:saml_placeofbirth";
@@ -32,22 +33,23 @@ public class AfmAntragstellerHeaderMapper {
 
 	Antragsteller buildAntragsteller(Map<String, Object> headers) {
 		return Antragsteller.builder()
-				.postfachId((String) headers.get(KEY_POSTFACH_ID))
-				.vorname((String) headers.get(KEY_VORNAME))
-				.nachname((String) headers.get(KEY_NACHNAME))
-				.geburtsname((String) headers.get(KEY_GEBURTSNAME))
-				.geburtsort((String) headers.get(KEY_GEBURTSORT))
-				.email((String) headers.get(KEY_EMAIL))
-				.telefon((String) headers.get(KEY_TELEFON))
-				.strasse((String) headers.get(KEY_STRASSE))
-				.plz((String) headers.get(KEY_PLZ))
-				.ort((String) headers.get(KEY_ORT))
+				.postfachId(MapUtils.getString(headers, ServiceKontoFactory.KEY_BAYERN_ID_POSTFACH_ID))
+				.vorname(MapUtils.getString(headers, KEY_VORNAME))
+				.nachname(MapUtils.getString(headers, KEY_NACHNAME))
+				.geburtsname(MapUtils.getString(headers, KEY_GEBURTSNAME))
+				.geburtsort(MapUtils.getString(headers, KEY_GEBURTSORT))
+				.email(MapUtils.getString(headers, KEY_EMAIL))
+				.telefon(MapUtils.getString(headers, KEY_TELEFON))
+				.strasse(MapUtils.getString(headers, KEY_STRASSE))
+				.plz(MapUtils.getString(headers, KEY_PLZ))
+				.ort(MapUtils.getString(headers, KEY_ORT))
 				.build();
 	}
 
 	public boolean isResponsible(FormData formData) {
 		var headers = getHeaders(formData);
-		return headers.containsKey(KEY_POSTFACH_ID) && isPostfachIdNotBlank(headers.get(KEY_POSTFACH_ID));
+		return headers.containsKey(ServiceKontoFactory.KEY_BAYERN_ID_POSTFACH_ID)
+				&& isPostfachIdNotBlank(headers.get(ServiceKontoFactory.KEY_BAYERN_ID_POSTFACH_ID));
 	}
 
 	@SuppressWarnings("unchecked")
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmHeaderMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmHeaderMapper.java
index 2984f9a6d257eeae0e1c6e2d361383b37d6a2dbb..0f63ef3686963482d332dd1d844e75ae4d2ec865 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmHeaderMapper.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmHeaderMapper.java
@@ -35,7 +35,7 @@ import de.ozgcloud.eingang.common.formdata.FormData;
 import de.ozgcloud.eingang.common.formdata.FormDataUtils;
 import de.ozgcloud.eingang.common.formdata.FormHeader;
 import de.ozgcloud.eingang.common.formdata.ServiceKonto;
-import de.ozgcloud.eingang.semantik.enginebased.ServiceKontoBuildHelper;
+import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory;
 
 @Component
 class AfmHeaderMapper implements AfmEngineBasedMapper {
@@ -53,7 +53,7 @@ class AfmHeaderMapper implements AfmEngineBasedMapper {
 	static final String SENDER = "t:sender";
 
 	@Autowired
-	private ServiceKontoBuildHelper serviceKontoBuildHelper;
+	private ServiceKontoFactory serviceKontoFactory;
 
 	@Override
 	public FormData parseFormData(FormData formData) {
@@ -84,13 +84,7 @@ class AfmHeaderMapper implements AfmEngineBasedMapper {
 	}
 
 	Optional<ServiceKonto> createBayernIdServiceKonto(FormData formData) {
-		var postfachId1 = getPostfachId(formData);
-		return postfachId1.map(postfachId -> serviceKontoBuildHelper.buildBayernIdServiceKonto(postfachId));
-	}
-
-	Optional<String> getPostfachId(FormData formData) {
-		return Optional.ofNullable(getHeaderMap(formData)).map(headers -> headers.get(AfmAntragstellerHeaderMapper.KEY_POSTFACH_ID))
-				.map(String.class::cast);
+		return serviceKontoFactory.createBayernIdServiceKonto(getHeaderMap(formData));
 	}
 
 	@SuppressWarnings("unchecked")
@@ -99,7 +93,7 @@ class AfmHeaderMapper implements AfmEngineBasedMapper {
 	}
 
 	Optional<ServiceKonto> createOsiServiceKonto(FormData formData) {
-		return getNameId(formData).map(nameId -> serviceKontoBuildHelper.buildOsiServiceKonto(nameId, formData));
+		return getNameId(formData).map(nameId -> serviceKontoFactory.buildOsiServiceKonto(nameId, formData));
 	}
 
 	private Optional<String> getNameId(FormData formData) {
@@ -108,7 +102,7 @@ class AfmHeaderMapper implements AfmEngineBasedMapper {
 
 	private FormData removeMappedData(FormData formData) {
 		return FormDataUtils.from(formData)
-				.remove(ServiceKontoBuildHelper.REST_RESPONSE_NAME)
+				.remove(ServiceKontoFactory.REST_RESPONSE_NAME)
 				.build();
 	}
 }
\ No newline at end of file
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java
index aedb47f05d7d39b109d67b5ba214ac90b3e1d8f7..b3e75f0cd900dd24d9095c7953939ae450d5db5c 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java
@@ -21,7 +21,7 @@ import de.ozgcloud.eingang.common.formdata.IncomingFile;
 import de.ozgcloud.eingang.common.formdata.ServiceKonto;
 import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle;
 import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter;
-import de.ozgcloud.eingang.semantik.enginebased.ServiceKontoBuildHelper;
+import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory;
 import lombok.NonNull;
 import lombok.extern.log4j.Log4j2;
 
@@ -37,7 +37,7 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema
 	private static final String KEY_ORGANISATIONS_EINHEIT_ID = "MetaText1";
 
 	@Autowired
-	private ServiceKontoBuildHelper serviceKontoHelper;
+	private ServiceKontoFactory serviceKontoFactory;
 
 	@Override
 	public FormData parseFormData(FormData formData) {
@@ -109,7 +109,7 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema
 	}
 
 	private ServiceKonto createServiceKonto(String postfachId) {
-		return serviceKontoHelper.buildOsiServiceKonto(postfachId);
+		return serviceKontoFactory.buildOsiServiceKonto(postfachId);
 	}
 
 	FormData parseFachnachricht(FormData formData, IncomingFile fachnachrichtFile) {
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsHeaderMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsHeaderMapper.java
index 0c8bc2d63bcbf51bdfba7f6963cac424c773c7e8..c2b0de118717b7bb54f0af27ef37e123788f3368 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsHeaderMapper.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsHeaderMapper.java
@@ -34,7 +34,7 @@ import org.springframework.stereotype.Component;
 import de.ozgcloud.eingang.common.formdata.FormData;
 import de.ozgcloud.eingang.common.formdata.FormDataUtils;
 import de.ozgcloud.eingang.common.formdata.FormHeader;
-import de.ozgcloud.eingang.semantik.enginebased.ServiceKontoBuildHelper;
+import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory;
 
 @Component
 class FormSolutionsHeaderMapper implements FormSolutionsEngineBasedMapper {
@@ -48,7 +48,7 @@ class FormSolutionsHeaderMapper implements FormSolutionsEngineBasedMapper {
 	public static final String POSTKORBHANDLE = "postkorbhandle";
 
 	@Autowired
-	private ServiceKontoBuildHelper serviceKontoBuildHelper;
+	private ServiceKontoFactory serviceKontoFactory;
 
 	@Override
 	public FormData parseFormData(FormData formData) {
@@ -66,7 +66,7 @@ class FormSolutionsHeaderMapper implements FormSolutionsEngineBasedMapper {
 				.requestId(getRequestId(formData))
 				.formEngineName(FORM_ENGINE_NAME);
 
-		Optional.ofNullable(getPostkorbhandle(formData)).map(serviceKontoBuildHelper::buildOsiServiceKonto).ifPresent(formHeaderBuilder::serviceKonto);
+		Optional.ofNullable(getPostkorbhandle(formData)).map(serviceKontoFactory::buildOsiServiceKonto).ifPresent(formHeaderBuilder::serviceKonto);
 
 		return formHeaderBuilder.build();
 	}
diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactoryTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactoryTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..66d9d3e302806e9b4aab54e4bba79627488e92fe
--- /dev/null
+++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactoryTest.java
@@ -0,0 +1,303 @@
+package de.ozgcloud.eingang.semantik.common;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+import java.util.List;
+import java.util.Map;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Spy;
+
+import de.ozgcloud.eingang.common.formdata.FormData;
+import de.ozgcloud.eingang.common.formdata.FormDataUtils;
+import de.ozgcloud.eingang.common.formdata.PostfachAddressTestFactory;
+import de.ozgcloud.eingang.common.formdata.ServiceKonto;
+import de.ozgcloud.eingang.common.formdata.ServiceKonto.TrustLevel;
+import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory;
+import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier;
+import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress;
+import de.ozgcloud.eingang.semantik.enginebased.afm.AfmHeaderTestFactory;
+
+class ServiceKontoFactoryTest {
+
+	@Spy
+	@InjectMocks
+	private ServiceKontoFactory factory;
+
+	@DisplayName("OSI service konto")
+	@Nested
+	class TestOsiServiceKonto {
+
+		private static final FormData FORM_DATA = FormData.builder().formData(AfmHeaderTestFactory.createFormDataMap()).build();
+
+		@DisplayName("with configured postfach")
+		@Nested
+		class TestWithConfiguredPostfach {
+
+			private static final PostfachAddress POSTFACH_ADDRESS = PostfachAddressTestFactory.create();
+
+			@BeforeEach
+			void mockBuildPostfachAddresses() {
+				doReturn(List.of(POSTFACH_ADDRESS)).when(factory).buildPostfachAddresses(any(), any());
+			}
+
+			@Test
+			void shouldContainsType() {
+				var serviceKonto = getServiceKonto(FORM_DATA);
+
+				assertThat(serviceKonto.getType()).isEqualTo(ServiceKontoFactory.POSTFACH_TYPE_OSI);
+			}
+
+			@Test
+			void shouldContainsPostfachAddresses() {
+				var serviceKonto = getServiceKonto(FORM_DATA);
+
+				assertThat(serviceKonto.getPostfachAddresses()).hasSize(1);
+				assertThat(serviceKonto.getPostfachAddresses().get(0)).isEqualTo(POSTFACH_ADDRESS);
+			}
+
+			@Test
+			void shouldBuildPostfachAddresses() {
+				getServiceKonto(FORM_DATA);
+
+				verify(factory).buildPostfachAddresses(any(), any());
+			}
+		}
+
+		private ServiceKonto getServiceKonto(FormData formData) {
+			return factory.buildOsiServiceKonto(AfmHeaderTestFactory.POSTFACH_NAME_ID, formData);
+		}
+
+		@DisplayName("postfach addresses")
+		@Nested
+		class TestBuildPostfachAddresses {
+
+			@DisplayName("with rest_response_name")
+			@Nested
+			class TestWithRestResponseName {
+
+				@Test
+				void shouldCallBuildAddresses() {
+					getPostfachAddresses();
+
+					verify(factory).buildOsiPostfachV1Address(any(), anyInt());
+				}
+
+				@Test
+				void shouldReturnPostfachAddresses() {
+					var addresses = getPostfachAddresses();
+
+					assertThat(addresses).hasSize(1);
+					assertThat(addresses.get(0).getIdentifier()).isInstanceOf(StringBasedIdentifier.class);
+					assertThat(((StringBasedIdentifier) addresses.get(0).getIdentifier()).getPostfachId())
+							.isEqualTo(AfmHeaderTestFactory.POSTFACH_NAME_ID);
+					assertThat(addresses.get(0).getVersion()).isEqualTo(ServiceKontoFactory.POSTFACH_VERSION);
+					assertThat(addresses.get(0).getType()).isEqualTo(PostfachAddressTestFactory.POSTFACH_ADDRESS_TYPE);
+				}
+
+				private List<PostfachAddress> getPostfachAddresses() {
+					return buildServiceKonto(FORM_DATA).getPostfachAddresses();
+				}
+			}
+
+			@DisplayName("without rest_response_name")
+			@Nested
+			class TestWithoutRestResponseName {
+
+				private static final FormData FORM_DATA_WITHOUT_REST_RESPONSE_NAME = FormDataUtils.from(FORM_DATA)
+						.remove(ServiceKontoFactory.REST_RESPONSE_NAME).build();
+
+				@Test
+				void shouldBuildDefault() {
+					getPostfachAddresses();
+
+					verify(factory).buildDefault(AfmHeaderTestFactory.POSTFACH_NAME_ID);
+				}
+
+				@Test
+				void shouldReturnPostfachAddresses() {
+					var addresses = getPostfachAddresses();
+
+					assertThat(addresses).hasSize(1);
+
+					assertThat(addresses.get(0).getIdentifier()).isInstanceOf(StringBasedIdentifier.class);
+
+					assertThat(((StringBasedIdentifier) addresses.get(0).getIdentifier()).getPostfachId())
+							.isEqualTo(AfmHeaderTestFactory.POSTFACH_NAME_ID);
+					assertThat(addresses.get(0).getVersion()).isEqualTo(ServiceKontoFactory.POSTFACH_VERSION);
+					assertThat(addresses.get(0).getType()).isEqualTo(1);
+				}
+
+				private List<PostfachAddress> getPostfachAddresses() {
+					return buildServiceKonto(FORM_DATA_WITHOUT_REST_RESPONSE_NAME).getPostfachAddresses();
+				}
+			}
+
+			private ServiceKonto buildServiceKonto(FormData formData) {
+				return factory.buildOsiServiceKonto(AfmHeaderTestFactory.POSTFACH_NAME_ID, formData);
+			}
+		}
+	}
+
+	@Nested
+	class TestCreateBayernIdServicekonto {
+
+		private final Map<String, Object> formDataHeaders = Map.of(
+				ServiceKontoFactory.KEY_BAYERN_ID_POSTFACH_ID, PostfachAddressTestFactory.POSTFACH_ID,
+				ServiceKontoFactory.KEY_BAYERN_ID_TRUST_LEVEL, ServiceKontoTestFactory.TRUST_LEVEL
+		);
+
+		@DisplayName("should return empty when headers map is null")
+		@Test
+		void shouldReturnEmptyWhenNull() {
+			var serviceKonto = factory.createBayernIdServiceKonto(null);
+
+			assertThat(serviceKonto).isEmpty();
+		}
+
+		@DisplayName("should return empty when postfach id is missing")
+		@Test
+		void shouldReturnEmptyWhenPostfachIdIsMissing() {
+			var serviceKonto = factory.createBayernIdServiceKonto(Map.of());
+
+			assertThat(serviceKonto).isEmpty();
+		}
+
+		@Test
+		void shouldCallIsValidTrustLevel() {
+			factory.createBayernIdServiceKonto(formDataHeaders);
+
+			verify(factory).isValidTrustLevel(formDataHeaders);
+		}
+
+		@Test
+		void shouldCallBuildBayernIdServiceKonto() {
+			factory.createBayernIdServiceKonto(formDataHeaders);
+
+			verify(factory).buildBayernIdServiceKonto(formDataHeaders);
+		}
+
+		@Test
+		void shouldReturnServiceKonto() {
+			var serviceKonto = ServiceKonto.builder().build();
+			doReturn(serviceKonto).when(factory).buildBayernIdServiceKonto(any());
+
+			var result = factory.createBayernIdServiceKonto(formDataHeaders);
+
+			assertThat(result).contains(serviceKonto);
+		}
+
+		@DisplayName("should return empty when trust level has unexpected value")
+		@Test
+		void shouldReturnEmptyWhenTrustLevelCorrupted() {
+			doReturn(false).when(factory).isValidTrustLevel(any());
+
+			var serviceKonto = factory.createBayernIdServiceKonto(formDataHeaders);
+
+			assertThat(serviceKonto).isEmpty();
+		}
+	}
+
+	@Nested
+	class TestIsValidTrustLevel {
+
+		@Test
+		void shouldCallExists() {
+			try (var trustLevelMock = mockStatic(TrustLevel.class)) {
+				isValidTrustLevel();
+
+				trustLevelMock.verify(() -> TrustLevel.exists(ServiceKontoTestFactory.TRUST_LEVEL));
+			}
+		}
+
+		@Test
+		void shouldReturnValue() {
+			try (var trustLevelMock = mockStatic(TrustLevel.class)) {
+				trustLevelMock.when(() -> TrustLevel.exists(any())).thenReturn(true);
+
+				var result = isValidTrustLevel();
+
+				assertThat(result).isTrue();
+			}
+		}
+
+		private boolean isValidTrustLevel() {
+			return factory.isValidTrustLevel(Map.of(ServiceKontoFactory.KEY_BAYERN_ID_TRUST_LEVEL, ServiceKontoTestFactory.TRUST_LEVEL));
+		}
+	}
+
+	@Nested
+	class TestBuildBayernIdServiceKonto {
+
+		private static final String POSTFACH_ID = "postfach-id";
+		private static final PostfachAddress POSTFACH_ADDRESS = PostfachAddressTestFactory.create();
+		private static final String TRUST_LEVEL = "STORK-QAA-Level-2";
+
+		private final Map<String, Object> formDataHeaders = Map.of(
+				ServiceKontoFactory.KEY_BAYERN_ID_POSTFACH_ID, POSTFACH_ID,
+				ServiceKontoFactory.KEY_BAYERN_ID_TRUST_LEVEL, TRUST_LEVEL);
+
+		@Test
+		void shouldSetType() {
+			var serviceKonto = buildBayernIdServiceKonto();
+
+			assertThat(serviceKonto.getType()).isEqualTo(ServiceKontoFactory.POSTFACH_TYPE_BAYERN_ID);
+		}
+
+		@Test
+		void shouldCallBuildPostfachAddress() {
+			buildBayernIdServiceKonto();
+
+			verify(factory).buildPostfachAddress(POSTFACH_ID);
+		}
+
+		@Test
+		void shouldSetPostfachAddress() {
+			doReturn(POSTFACH_ADDRESS).when(factory).buildPostfachAddress(any());
+
+			var serviceKonto = buildBayernIdServiceKonto();
+
+			assertThat(serviceKonto.getPostfachAddresses()).containsOnly(POSTFACH_ADDRESS);
+		}
+
+		@Test
+		void shouldCallGetTrustLevel() {
+			buildBayernIdServiceKonto();
+
+			verify(factory).getTrustLevel(formDataHeaders);
+		}
+
+		@Test
+		void shouldSetTrustLevel() {
+			var serviceKonto = buildBayernIdServiceKonto();
+
+			assertThat(serviceKonto.getTrustLevel()).isEqualTo(TRUST_LEVEL);
+		}
+
+		private ServiceKonto buildBayernIdServiceKonto() {
+			return factory.buildBayernIdServiceKonto(formDataHeaders);
+		}
+	}
+
+	@Nested
+	class TestGetTrustLevel {
+
+		private final Map<String, Object> formDataHeaders = Map.of(ServiceKontoFactory.KEY_BAYERN_ID_TRUST_LEVEL,
+				ServiceKontoTestFactory.TRUST_LEVEL);
+
+		@Test
+		void shouldReturnTrustLevel() {
+			var trustLevel = factory.getTrustLevel(formDataHeaders);
+
+			assertThat(trustLevel).isEqualTo(ServiceKontoTestFactory.TRUST_LEVEL);
+		}
+
+	}
+
+}
\ No newline at end of file
diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/ServiceKontoBuildHelperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/ServiceKontoBuildHelperTest.java
deleted file mode 100644
index 8d49520d80e2d2ef27042b0dc2399202e44466c9..0000000000000000000000000000000000000000
--- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/ServiceKontoBuildHelperTest.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package de.ozgcloud.eingang.semantik.enginebased;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import java.util.List;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Spy;
-
-import de.ozgcloud.eingang.common.formdata.FormData;
-import de.ozgcloud.eingang.common.formdata.FormDataUtils;
-import de.ozgcloud.eingang.common.formdata.PostfachAddressTestFactory;
-import de.ozgcloud.eingang.common.formdata.ServiceKonto;
-import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier;
-import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress;
-import de.ozgcloud.eingang.semantik.enginebased.afm.AfmHeaderTestFactory;
-
-class ServiceKontoBuildHelperTest {
-
-	@Spy
-	@InjectMocks
-	private ServiceKontoBuildHelper helper;
-
-	@DisplayName("OSI service konto")
-	@Nested
-	class TestOsiServiceKonto {
-
-		private static final FormData FORM_DATA = FormData.builder().formData(AfmHeaderTestFactory.createFormDataMap()).build();
-
-		@DisplayName("with configured postfach")
-		@Nested
-		class TestWithConfiguredPostfach {
-
-			private static final PostfachAddress POSTFACH_ADDRESS = PostfachAddressTestFactory.create();
-
-			@BeforeEach
-			void mockBuildPostfachAddresses() {
-				doReturn(List.of(POSTFACH_ADDRESS)).when(helper).buildPostfachAddresses(any(), any());
-			}
-
-			@Test
-			void shouldContainsType() {
-				var serviceKonto = getServiceKonto(FORM_DATA);
-
-				assertThat(serviceKonto.getType()).isEqualTo(ServiceKontoBuildHelper.POSTFACH_TYPE_OSI);
-			}
-
-			@Test
-			void shouldContainsPostfachAddresses() {
-				var serviceKonto = getServiceKonto(FORM_DATA);
-
-				assertThat(serviceKonto.getPostfachAddresses()).hasSize(1);
-				assertThat(serviceKonto.getPostfachAddresses().get(0)).isEqualTo(POSTFACH_ADDRESS);
-			}
-
-			@Test
-			void shouldBuildPostfachAddresses() {
-				getServiceKonto(FORM_DATA);
-
-				verify(helper).buildPostfachAddresses(any(), any());
-			}
-		}
-
-		private ServiceKonto getServiceKonto(FormData formData) {
-			return helper.buildOsiServiceKonto(AfmHeaderTestFactory.POSTFACH_NAME_ID, formData);
-		}
-
-		@DisplayName("postfach addresses")
-		@Nested
-		class TestBuildPostfachAddresses {
-
-			@DisplayName("with rest_response_name")
-			@Nested
-			class TestWithRestResponseName {
-
-				@Test
-				void shouldCallBuildAddresses() {
-					getPostfachAddresses();
-
-					verify(helper).buildOsiPostfachV1Address(any(), anyInt());
-				}
-
-				@Test
-				void shouldReturnPostfachAddresses() {
-					var addresses = getPostfachAddresses();
-
-					assertThat(addresses).hasSize(1);
-					assertThat(addresses.get(0).getIdentifier()).isInstanceOf(StringBasedIdentifier.class);
-					assertThat(((StringBasedIdentifier) addresses.get(0).getIdentifier()).getPostfachId())
-							.isEqualTo(AfmHeaderTestFactory.POSTFACH_NAME_ID);
-					assertThat(addresses.get(0).getVersion()).isEqualTo(ServiceKontoBuildHelper.POSTFACH_VERSION);
-					assertThat(addresses.get(0).getType()).isEqualTo(PostfachAddressTestFactory.POSTFACH_ADDRESS_TYPE);
-				}
-
-				private List<PostfachAddress> getPostfachAddresses() {
-					return buildServiceKonto(FORM_DATA).getPostfachAddresses();
-				}
-			}
-
-			@DisplayName("without rest_response_name")
-			@Nested
-			class TestWithoutRestResponseName {
-
-				private static final FormData FORM_DATA_WITHOUT_REST_RESPONSE_NAME = FormDataUtils.from(FORM_DATA)
-						.remove(ServiceKontoBuildHelper.REST_RESPONSE_NAME).build();
-
-				@Test
-				void shouldBuildDefault() {
-					getPostfachAddresses();
-
-					verify(helper).buildDefault(AfmHeaderTestFactory.POSTFACH_NAME_ID);
-				}
-
-				@Test
-				void shouldReturnPostfachAddresses() {
-					var addresses = getPostfachAddresses();
-
-					assertThat(addresses).hasSize(1);
-
-					assertThat(addresses.get(0).getIdentifier()).isInstanceOf(StringBasedIdentifier.class);
-
-					assertThat(((StringBasedIdentifier) addresses.get(0).getIdentifier()).getPostfachId())
-							.isEqualTo(AfmHeaderTestFactory.POSTFACH_NAME_ID);
-					assertThat(addresses.get(0).getVersion()).isEqualTo(ServiceKontoBuildHelper.POSTFACH_VERSION);
-					assertThat(addresses.get(0).getType()).isEqualTo(1);
-				}
-
-				private List<PostfachAddress> getPostfachAddresses() {
-					return buildServiceKonto(FORM_DATA_WITHOUT_REST_RESPONSE_NAME).getPostfachAddresses();
-				}
-			}
-
-			private ServiceKonto buildServiceKonto(FormData formData) {
-				return helper.buildOsiServiceKonto(AfmHeaderTestFactory.POSTFACH_NAME_ID, formData);
-			}
-		}
-	}
-
-	@Nested
-	class TestBayernIdServiceKonto {
-
-		private static final String POSTFACH_ID = "postfach-id";
-		private static final PostfachAddress POSTFACH_ADDRESS = PostfachAddressTestFactory.create();
-
-		@Test
-		void shouldSetType() {
-			var serviceKonto = buildBayernIdServiceKonto();
-
-			assertThat(serviceKonto.getType()).isEqualTo(ServiceKontoBuildHelper.POSTFACH_TYPE_BAYERN_ID);
-		}
-
-		@Test
-		void shouldSetPostfachAddress() {
-			doReturn(POSTFACH_ADDRESS).when(helper).buildPostfachAddress(any());
-
-			var serviceKonto = buildBayernIdServiceKonto();
-
-			assertThat(serviceKonto.getPostfachAddresses()).containsOnly(POSTFACH_ADDRESS);
-		}
-
-		ServiceKonto buildBayernIdServiceKonto() {
-			return helper.buildBayernIdServiceKonto(POSTFACH_ID);
-		}
-	}
-}
\ No newline at end of file
diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerHeaderMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerHeaderMapperTest.java
index 953ff17d4427885712c3d95f1b9524b0b1dc1bc1..c5c99d30268b7e40f00ef05af208d0a346052bd0 100644
--- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerHeaderMapperTest.java
+++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerHeaderMapperTest.java
@@ -20,6 +20,7 @@ import org.mockito.Spy;
 import de.ozgcloud.eingang.common.errorhandling.TechnicalException;
 import de.ozgcloud.eingang.common.formdata.AntragstellerTestFactory;
 import de.ozgcloud.eingang.common.formdata.FormData;
+import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory;
 
 class AfmAntragstellerHeaderMapperTest {
 
@@ -145,7 +146,7 @@ class AfmAntragstellerHeaderMapperTest {
 		@Test
 		void shouldApproveResponsibility() {
 			doReturn(true).when(mapper).isPostfachIdNotBlank(any());
-			doReturn(createHeaders(AfmAntragstellerHeaderMapper.KEY_POSTFACH_ID, "123")).when(mapper).getHeaders(any());
+			doReturn(createHeaders(ServiceKontoFactory.KEY_BAYERN_ID_POSTFACH_ID, "123")).when(mapper).getHeaders(any());
 
 			var isResponsible = mapper.isResponsible(formData);
 
@@ -173,8 +174,9 @@ class AfmAntragstellerHeaderMapperTest {
 				assertFalse(isResponsible);
 			}
 
+			@Test
 			void shouldDenyWhenPostfachIdIsBlank() {
-				doReturn(createHeaders(AfmAntragstellerHeaderMapper.KEY_POSTFACH_ID, null)).when(mapper).getHeaders(any());
+				doReturn(createHeaders(ServiceKontoFactory.KEY_BAYERN_ID_POSTFACH_ID, null)).when(mapper).getHeaders(any());
 				doReturn(false).when(mapper).isPostfachIdNotBlank(any());
 
 				var isResponsible = mapper.isResponsible(formData);
@@ -215,7 +217,7 @@ class AfmAntragstellerHeaderMapperTest {
 
 		@Test
 		void shouldReturnHeaders() {
-			var headers = createHeaders(AfmAntragstellerHeaderMapper.KEY_POSTFACH_ID, "123");
+			var headers = createHeaders(ServiceKontoFactory.KEY_BAYERN_ID_POSTFACH_ID, "123");
 			var formData =  FormData.builder().formData(createHeaders(AfmHeaderMapper.HEADER_FIELD, headers)).build();
 
 			var result = mapper.getHeaders(formData);
diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmHeaderMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmHeaderMapperTest.java
index 93ddc2f4f3e24d4dd2b4c045e6a4d8e39a23086c..7af0dcd5c208e6c3989c0e8be54948e382c45ac6 100644
--- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmHeaderMapperTest.java
+++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmHeaderMapperTest.java
@@ -27,7 +27,6 @@ import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
-import java.util.Map;
 import java.util.Optional;
 
 import org.junit.jupiter.api.DisplayName;
@@ -40,7 +39,7 @@ import org.mockito.Spy;
 import de.ozgcloud.eingang.common.formdata.FormData;
 import de.ozgcloud.eingang.common.formdata.FormDataUtils;
 import de.ozgcloud.eingang.common.formdata.ServiceKonto;
-import de.ozgcloud.eingang.semantik.enginebased.ServiceKontoBuildHelper;
+import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory;
 
 class AfmHeaderMapperTest {
 
@@ -48,7 +47,7 @@ class AfmHeaderMapperTest {
 	@InjectMocks
 	private AfmHeaderMapper mapper;
 	@Mock
-	private ServiceKontoBuildHelper serviceKontoBuildHelper;
+	private ServiceKontoFactory serviceKontoFactory;
 
 	@DisplayName("Parse form data")
 	@Nested
@@ -124,14 +123,14 @@ class AfmHeaderMapperTest {
 						void shouldCallBuildServiceKontoIfPresent() {
 							parseFormData();
 
-							verify(serviceKontoBuildHelper).buildOsiServiceKonto(any(), eq(FORM_DATA));
+							verify(serviceKontoFactory).buildOsiServiceKonto(any(), eq(FORM_DATA));
 						}
 
 						@Test
 						void shouldNotCallBuildServiceKontoIfNotExists() {
 							mapper.parseFormData(FormDataUtils.from(FORM_DATA).remove(AfmHeaderMapper.POSTFACH_NAME_ID).build());
 
-							verify(serviceKontoBuildHelper, never()).buildOsiServiceKonto(any(), any());
+							verify(serviceKontoFactory, never()).buildOsiServiceKonto(any(), any());
 						}
 					}
 
@@ -155,22 +154,13 @@ class AfmHeaderMapperTest {
 
 						@Test
 						void shouldReturnServiceKonto() {
-							doReturn(Optional.of("id")).when(mapper).getPostfachId(any());
-							when(serviceKontoBuildHelper.buildBayernIdServiceKonto(any())).thenReturn(serviceKonto);
+							when(serviceKontoFactory.createBayernIdServiceKonto(any())).thenReturn(Optional.of(serviceKonto));
 
 							var parsedFormData = mapper.createBayernIdServiceKonto(formData);
 
-							assertThat(parsedFormData).isPresent().get().isEqualTo(serviceKonto);
+							assertThat(parsedFormData).contains(serviceKonto);
 						}
 
-						@Test
-						void shouldNotCallServiceKontoBuildHelper() {
-							doReturn(Optional.empty()).when(mapper).getPostfachId(any());
-
-							mapper.createBayernIdServiceKonto(formData);
-
-							verify(serviceKontoBuildHelper, never()).buildBayernIdServiceKonto(any());
-						}
 					}
 				}
 			}
@@ -190,7 +180,7 @@ class AfmHeaderMapperTest {
 			void shouldRemoveRestResponseName() {
 				var parsedFormData = parseFormData();
 
-				assertThat(parsedFormData.getFormData().get(ServiceKontoBuildHelper.REST_RESPONSE_NAME)).isNull();
+				assertThat(parsedFormData.getFormData().get(ServiceKontoFactory.REST_RESPONSE_NAME)).isNull();
 			}
 
 			private FormData parseFormData() {
@@ -199,28 +189,4 @@ class AfmHeaderMapperTest {
 		}
 	}
 
-	@Nested
-	class TestGetPostfachId {
-
-		@Mock
-		private FormData formData;
-
-		@Test
-		void shouldReturnPostfachId() {
-			doReturn(Map.of(AfmAntragstellerHeaderMapper.KEY_POSTFACH_ID, AfmAntragstellerTestFactory.POSTFACH_ID)).when(mapper).getHeaderMap(any());
-
-			var postfachId = mapper.getPostfachId(formData);
-
-			assertThat(postfachId).isPresent().get().isEqualTo(AfmAntragstellerTestFactory.POSTFACH_ID);
-		}
-
-		@Test
-		void shouldReturnEmpty() {
-			doReturn(null).when(mapper).getHeaderMap(any());
-
-			var postfachId = mapper.getPostfachId(formData);
-
-			assertThat(postfachId).isEmpty();
-		}
-	}
 }
\ No newline at end of file
diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmHeaderTestFactory.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmHeaderTestFactory.java
index 4cdd6b5f7ed887dbd9841e0d844b5389b25bb366..ff8b85d511d22fd84c3a3302d29c2fe58b31eb78 100644
--- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmHeaderTestFactory.java
+++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmHeaderTestFactory.java
@@ -28,7 +28,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
-import de.ozgcloud.eingang.semantik.enginebased.ServiceKontoBuildHelper;
+import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory;
 
 public class AfmHeaderTestFactory {
 
@@ -57,7 +57,7 @@ public class AfmHeaderTestFactory {
 		var map = new HashMap<String, Object>();
 		map.put(AfmHeaderMapper.HEADER_FIELD, createHeaderMap());
 		map.put(AfmHeaderMapper.POSTFACH_NAME_ID, POSTFACH_NAME_ID);
-		map.put(ServiceKontoBuildHelper.REST_RESPONSE_NAME, List.of(createRestResponseNameMap()));
+		map.put(ServiceKontoFactory.REST_RESPONSE_NAME, List.of(createRestResponseNameMap()));
 
 		return map;
 	}
@@ -81,7 +81,7 @@ public class AfmHeaderTestFactory {
 
 	public static Map<String, Object> createCustomHeaderMap() {
 		var map = new HashMap<String, Object>();
-		map.put(AfmAntragstellerHeaderMapper.KEY_POSTFACH_ID, CUSTOM_POSTFACH_ID);
+		map.put(ServiceKontoFactory.KEY_BAYERN_ID_POSTFACH_ID, CUSTOM_POSTFACH_ID);
 		map.put(AfmAntragstellerHeaderMapper.KEY_VORNAME, CUSTOM_VORNAME);
 		map.put(AfmAntragstellerHeaderMapper.KEY_NACHNAME, CUSTOM_NACHNAME);
 		map.put(AfmAntragstellerHeaderMapper.KEY_GEBURTSNAME, CUSTOM_GEBURTSNAME);
@@ -95,10 +95,10 @@ public class AfmHeaderTestFactory {
 	}
 
 	public static Map<String, Object> createRestResponseNameMap() {
-		return Map.of(ServiceKontoBuildHelper.REST_RESPONSE_NAME_MEMBER_SCOPE, List.of(createRestResponseNameMemberScopeMap()));
+		return Map.of(ServiceKontoFactory.REST_RESPONSE_NAME_MEMBER_SCOPE, List.of(createRestResponseNameMemberScopeMap()));
 	}
 
 	private static Map<String, Object> createRestResponseNameMemberScopeMap() {
-		return Map.of(ServiceKontoBuildHelper.REST_RESPONSE_NAME_MEMBER_SCOPE_MAILBOX_TYPE, REST_RESPONSE_NAME_MEMBER_SCOPE_MAILBOX_TYPE_VALUE);
+		return Map.of(ServiceKontoFactory.REST_RESPONSE_NAME_MEMBER_SCOPE_MAILBOX_TYPE, REST_RESPONSE_NAME_MEMBER_SCOPE_MAILBOX_TYPE_VALUE);
 	}
 }
\ No newline at end of file
diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapterTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapterTest.java
index cccd254d34afde615debd689c4c5f73fd1c7dd5d..05473793842bc54d734988d7cf1ad872d5789b7a 100644
--- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapterTest.java
+++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapterTest.java
@@ -24,7 +24,7 @@ import de.ozgcloud.eingang.common.formdata.PostfachAddressTestFactory;
 import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory;
 import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier;
 import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle;
-import de.ozgcloud.eingang.semantik.enginebased.ServiceKontoBuildHelper;
+import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory;
 
 class DFoerdermittelEngineBasedSemantikAdapterTest {
 
@@ -33,7 +33,7 @@ class DFoerdermittelEngineBasedSemantikAdapterTest {
 	private DFoerdermittelEngineBasedSemantikAdapter adapter;
 
 	@Mock
-	private ServiceKontoBuildHelper serviceKontoHelper;
+	private ServiceKontoFactory serviceKontoFactory;
 
 	@Nested
 	class TestIsResponsible {
@@ -174,7 +174,7 @@ class DFoerdermittelEngineBasedSemantikAdapterTest {
 
 		@BeforeEach
 		void init() {
-			when(serviceKontoHelper.buildOsiServiceKonto(any())).thenReturn(ServiceKontoTestFactory.create());
+			when(serviceKontoFactory.buildOsiServiceKonto(any())).thenReturn(ServiceKontoTestFactory.create());
 		}
 
 		@Test
@@ -191,7 +191,7 @@ class DFoerdermittelEngineBasedSemantikAdapterTest {
 		void shouldRemovePrefix() {
 			adapter.addServiceKonto(DFoerdermittelFormDataTestFactory.create(), DFoerdermittelFormDataTestFactory.createFachnachrichtMap());
 
-			verify(serviceKontoHelper).buildOsiServiceKonto(DFoerdermittelFormDataTestFactory.POSTFACH_ID);
+			verify(serviceKontoFactory).buildOsiServiceKonto(DFoerdermittelFormDataTestFactory.POSTFACH_ID);
 		}
 	}
 
diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsHeaderMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsHeaderMapperTest.java
index 89c782671e7e568ffebc70299df1fc8431499a71..56df1f639ff2bac7f59b24ba6d36bf387227ee59 100644
--- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsHeaderMapperTest.java
+++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsHeaderMapperTest.java
@@ -38,7 +38,7 @@ import org.mockito.Spy;
 import de.ozgcloud.eingang.common.formdata.FormData;
 import de.ozgcloud.eingang.common.formdata.FormDataUtils;
 import de.ozgcloud.eingang.common.formdata.FormHeader;
-import de.ozgcloud.eingang.semantik.enginebased.ServiceKontoBuildHelper;
+import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory;
 
 class FormSolutionsHeaderMapperTest {
 
@@ -46,7 +46,7 @@ class FormSolutionsHeaderMapperTest {
 	@InjectMocks
 	private final FormSolutionsHeaderMapper mapper = new FormSolutionsHeaderMapper();
 	@Mock
-	private ServiceKontoBuildHelper serviceKontoBuildHelper;
+	private ServiceKontoFactory serviceKontoFactory;
 
 	@DisplayName("Parse formData")
 	@Nested
@@ -119,7 +119,7 @@ class FormSolutionsHeaderMapperTest {
 				void shouldCallServiceKontoBuildHelper() {
 					buildFormHeader();
 
-					verify(serviceKontoBuildHelper).buildOsiServiceKonto(any());
+					verify(serviceKontoFactory).buildOsiServiceKonto(any());
 				}
 
 				@Test
@@ -128,7 +128,7 @@ class FormSolutionsHeaderMapperTest {
 
 					mapper.buildFormHeader(formDataWithoutPostkorbHandle);
 
-					verify(serviceKontoBuildHelper, never()).buildOsiServiceKonto(any());
+					verify(serviceKontoFactory, never()).buildOsiServiceKonto(any());
 				}
 
 			}