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 9653974555be411a25df47d6870f6658d3f5cfb3..65e83929afd92af06611f0e987c3e8805de9805b 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
@@ -34,6 +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.common.formdata.ServiceKonto;
 import de.ozgcloud.eingang.semantik.enginebased.ServiceKontoBuildHelper;
 
 @Component
@@ -73,24 +74,36 @@ class AfmHeaderMapper implements AfmEngineBasedMapper {
 				.formEngineName(AFM_FORMENGINE_NAME)
 				.build();
 
-		Optional.ofNullable(getNameId(formData))
-				.map(nameId -> serviceKontoBuildHelper.buildOsiServiceKonto(nameId, formData))
-				.ifPresent(formHeaderBuilder::setServiceKonto);
+		createBayernIdServiceKonto(formData).or(() -> createOsiServiceKonto(formData)).ifPresent(formHeaderBuilder::setServiceKonto);
 
 		return formHeaderBuilder;
 	}
 
+	private ZonedDateTime getCreatedAt(Map<String, Object> headerDataMap) {
+		return ZonedDateTime.parse((String) headerDataMap.get(TIMESTAMP), DateTimeFormatter.ISO_OFFSET_DATE_TIME);
+	}
+
+	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);
+	}
+
 	@SuppressWarnings("unchecked")
-	private Map<String, Object> getHeaderMap(FormData formData) {
+	Map<String, Object> getHeaderMap(FormData formData) {
 		return (Map<String, Object>) formData.getFormData().get(HEADER_FIELD);
 	}
 
-	private ZonedDateTime getCreatedAt(Map<String, Object> headerDataMap) {
-		return ZonedDateTime.parse((String) headerDataMap.get(TIMESTAMP), DateTimeFormatter.ISO_OFFSET_DATE_TIME);
+	Optional<ServiceKonto> createOsiServiceKonto(FormData formData) {
+		return getNameId(formData).map(nameId -> serviceKontoBuildHelper.buildOsiServiceKonto(nameId, formData));
 	}
 
-	private String getNameId(FormData formData) {
-		return (String) formData.getFormData().get(POSTFACH_NAME_ID);
+	private Optional<String> getNameId(FormData formData) {
+		return Optional.of(formData.getFormData()).map(formDataMap -> formDataMap.get(POSTFACH_NAME_ID)).map(String.class::cast);
 	}
 
 	private FormData removeMappedData(FormData 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 9eb5bac5995dfd209f42fd4481603c3a6cbdbee4..fd483d22da19b2da3f52bfec46715afdcde8a652 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,6 +27,9 @@ 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;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
@@ -36,13 +39,14 @@ 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;
 
 class AfmHeaderMapperTest {
 
 	@Spy
 	@InjectMocks
-	private final AfmHeaderMapper mapper = new AfmHeaderMapper();
+	private AfmHeaderMapper mapper;
 	@Mock
 	private ServiceKontoBuildHelper serviceKontoBuildHelper;
 
@@ -106,18 +110,60 @@ class AfmHeaderMapperTest {
 				@Nested
 				class TestServiceKonto {
 
-					@Test
-					void shouldCallBuildServiceKontoIfPresent() {
-						parseFormData();
+					@DisplayName("OSI")
+					@Nested
+					class TestOsiServiceKonto {
+						@Test
+						void shouldCallBuildServiceKontoIfPresent() {
+							parseFormData();
+
+							verify(serviceKontoBuildHelper).buildOsiServiceKonto(any(), eq(FORM_DATA));
+						}
+
+						@Test
+						void shouldNotCallBuildServiceKontoIfNotExists() {
+							mapper.parseFormData(FormDataUtils.from(FORM_DATA).remove(AfmHeaderMapper.POSTFACH_NAME_ID).build());
 
-						verify(serviceKontoBuildHelper).buildOsiServiceKonto(any(), eq(FORM_DATA));
+							verify(serviceKontoBuildHelper, never()).buildOsiServiceKonto(any(), any());
+						}
 					}
 
-					@Test
-					void shouldNotCallBuildServiceKontoIfNotExists() {
-						mapper.parseFormData(FormDataUtils.from(FORM_DATA).remove(AfmHeaderMapper.POSTFACH_NAME_ID).build());
+					@DisplayName("BayernID")
+					@Nested
+					class TestBayernId {
+
+						@Mock
+						private FormData formData;
+						@Mock
+						private ServiceKonto serviceKonto;
+
+						@Test
+						void shouldCallCreateBayernIdServiceKonto() {
+							var formData = FormData.builder().formData(AfmHeaderTestFactory.createFormDataMapWithExtendedHeaders()).build();
+
+							mapper.parseFormData(formData);
+
+							verify(mapper).createBayernIdServiceKonto(formData);
+						}
+
+						@Test
+						void shouldReturnServiceKonto() {
+							doReturn(Optional.of("id")).when(mapper).getPostfachId(any());
+							when(serviceKontoBuildHelper.buildBayernIdServiceKonto(any())).thenReturn(serviceKonto);
+
+							var parsedFormData = mapper.createBayernIdServiceKonto(formData);
+
+							assertThat(parsedFormData).isPresent().get().isEqualTo(serviceKonto);
+						}
+
+						@Test
+						void shouldNotCallServiceKontoBuildHelper() {
+							doReturn(Optional.empty()).when(mapper).getPostfachId(any());
+
+							mapper.createBayernIdServiceKonto(formData);
 
-						verify(serviceKontoBuildHelper, never()).buildOsiServiceKonto(any(), any());
+							verify(serviceKontoBuildHelper, never()).buildBayernIdServiceKonto(any());
+						}
 					}
 				}
 
@@ -152,4 +198,29 @@ 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 28e807688770910087b28d5ec2a228c4f90789dd..4cdd6b5f7ed887dbd9841e0d844b5389b25bb366 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
@@ -62,6 +62,13 @@ public class AfmHeaderTestFactory {
 		return map;
 	}
 
+	@SuppressWarnings("unchecked")
+	public static Map<String, Object> createFormDataMapWithExtendedHeaders() {
+		var map = new HashMap<>(createFormDataMap());
+		((Map<String, Object>) map.get(AfmHeaderMapper.HEADER_FIELD)).putAll(createCustomHeaderMap());
+		return map;
+	}
+
 	public static Map<String, Object> createHeaderMap() {
 		var map = new HashMap<String, Object>();
 		map.put(AfmHeaderMapper.ID, ID);
@@ -69,7 +76,6 @@ public class AfmHeaderTestFactory {
 		map.put(AfmHeaderMapper.FORM_ID, FORM_ID);
 		map.put(AfmHeaderMapper.FORM, FORM);
 		map.put(AfmHeaderMapper.SENDER, SENDER);
-		map.putAll(createCustomHeaderMap());
 		return map;
 	}