diff --git a/common/src/main/java/de/ozgcloud/eingang/common/formdata/Antragsteller.java b/common/src/main/java/de/ozgcloud/eingang/common/formdata/Antragsteller.java
index d5f6c9ef528895e290290279889cb2fbb464c3e0..81826cff9dccf04d8b16040f00f1d8c4f967e8a0 100644
--- a/common/src/main/java/de/ozgcloud/eingang/common/formdata/Antragsteller.java
+++ b/common/src/main/java/de/ozgcloud/eingang/common/formdata/Antragsteller.java
@@ -33,6 +33,7 @@ import lombok.Getter;
 public class Antragsteller {
 
 	private String anrede;
+	private String firmaName;
 	private String vorname;
 	private String nachname;
 	private String geburtsname;
diff --git a/common/src/test/java/de/ozgcloud/eingang/common/formdata/AntragstellerTestFactory.java b/common/src/test/java/de/ozgcloud/eingang/common/formdata/AntragstellerTestFactory.java
index e4a8eef66057c9131e5250dc8c723c88cb68288d..b14de31089f4ccebf47c253821ce0a67856e84eb 100644
--- a/common/src/test/java/de/ozgcloud/eingang/common/formdata/AntragstellerTestFactory.java
+++ b/common/src/test/java/de/ozgcloud/eingang/common/formdata/AntragstellerTestFactory.java
@@ -30,6 +30,7 @@ public class AntragstellerTestFactory {
 
 	public static final String ANREDE = "Herr";
 
+	public static final String FIRMA_NAME = "Firma X";
 	public static final String GEBIET_BEZEICHNUNG_KEY = "GebietBEZEICHNUNG";
 	public static final String GEBIET_BEZEICHNUNG_VALUE = "Schleswig";
 
@@ -54,6 +55,18 @@ public class AntragstellerTestFactory {
 		return createBuilder().build();
 	}
 
+	public static Antragsteller createFirm() {
+		return createFirmBuilder().build();
+	}
+
+	public static Antragsteller.AntragstellerBuilder createFirmBuilder() {
+		return createBuilder()
+				.firmaName(FIRMA_NAME)
+				.geburtsname(null)
+				.geburtsdatum(null)
+				.geburtsort(null);
+	}
+
 	public static Antragsteller.AntragstellerBuilder createBuilder() {
 		return Antragsteller.builder()
 				.anrede(ANREDE)
diff --git a/pom.xml b/pom.xml
index 8db513a1133cb989ce56cc64a10d04355165acc7..98b1ecff1c0d8418ad4c151bfe8f68edf624549c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -54,7 +54,7 @@
 	</modules>
 
 	<properties>
-		<vorgang-manager.version>2.6.0</vorgang-manager.version>
+		<vorgang-manager.version>2.7.0-SNAPSHOT</vorgang-manager.version>
 
 		<jsoup.version>1.14.3</jsoup.version>
 		<xmlschema.version>2.3.0</xmlschema.version>
diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java
index b0348cc39fa405d1b7ea467d6d99e2a5ee5db4f0..3909125566b6f297d16633590aa4dcc05644611b 100644
--- a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java
+++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java
@@ -69,6 +69,13 @@ class GrpcEingangMapperTest {
 
 		}
 
+		@Test
+		void shouldMapFirmaName() {
+			var mapped = mapper.toAntragsteller(AntragstellerTestFactory.createFirm());
+
+			assertThat(mapped.getFirmaName()).isEqualTo(AntragstellerTestFactory.FIRMA_NAME);
+		}
+
 		private GrpcAntragsteller toAntragsteller() {
 			return mapper.toAntragsteller(AntragstellerTestFactory.create());
 		}
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapper.java
index 9486e4838258234346c22e7165179c5641943919..52365312ec979e24d37560740ce9fca8c02db523 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapper.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapper.java
@@ -27,10 +27,12 @@ import static java.util.Objects.*;
 
 import java.util.Collections;
 import java.util.LinkedHashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
 
+import org.apache.commons.collections.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -57,6 +59,15 @@ class AfmAntragstellerMapper implements AfmEngineBasedMapper {
 	static final String PLZ = "sh_plz";
 	static final String ORT = "ort";
 
+	static final String FIELD_FIRMA_NAME = "firma_name";
+	static final String FIELD_FIRMA_STRASSE = "firma_strasse";
+	static final String FIELD_FIRMA_HAUSNUMMER = "firma_hausnummer";
+	static final String FIELD_FIRMA_PLZ = "firma_plz";
+	static final String FIELD_FIRMA_STADT = "firma_stadt";
+	static final String FIELD_ANSPRECHPARTNER_ANREDE = "firma_ansprechpartner_anrede";
+	static final String FIELD_ANSPRECHPARTNER_VORNAME = "firma_ansprechpartner_vorname";
+	static final String FIELD_ANSPRECHPARTNER_NACHNAME = "firma_ansprechpartner_nachname";
+
 	@Autowired
 	private AfmAntragstellerHeaderMapper antragstellerHeaderMapper;
 
@@ -90,6 +101,13 @@ class AfmAntragstellerMapper implements AfmEngineBasedMapper {
 
 	private Antragsteller.AntragstellerBuilder addAntragstellerData(Antragsteller.AntragstellerBuilder builder,
 			Map<String, Object> antragstellerMap) {
+		return isNull(antragstellerMap.get(FIELD_FIRMA_NAME))
+				? addPrivateAntragstellerData(builder, antragstellerMap)
+				: addFirmAntragstellerData(builder, antragstellerMap);
+	}
+
+	private Antragsteller.AntragstellerBuilder addPrivateAntragstellerData(Antragsteller.AntragstellerBuilder builder,
+			Map<String, Object> antragstellerMap) {
 		return builder //
 				.anrede((String) antragstellerMap.get(ANREDE)) //
 				.vorname((String) antragstellerMap.get(VORNAME)) //
@@ -103,17 +121,37 @@ class AfmAntragstellerMapper implements AfmEngineBasedMapper {
 				.hausnummer((String) antragstellerMap.get(HAUSNUMMER)) //
 				.plz((String) antragstellerMap.get(PLZ)) //
 				.ort((String) antragstellerMap.get(ORT)) //
-				.data(getNotMappedData(antragstellerMap));
+				.data(getNotMappedData(antragstellerMap, getPrivateFields()));
+	}
+
+	Antragsteller.AntragstellerBuilder addFirmAntragstellerData(Antragsteller.AntragstellerBuilder builder,
+			Map<String, Object> antragstellerMap) {
+		return builder
+				.firmaName(MapUtils.getString(antragstellerMap, FIELD_FIRMA_NAME))
+				.strasse(MapUtils.getString(antragstellerMap, FIELD_FIRMA_STRASSE))
+				.hausnummer(MapUtils.getString(antragstellerMap, FIELD_FIRMA_HAUSNUMMER))
+				.plz(MapUtils.getString(antragstellerMap, FIELD_FIRMA_PLZ))
+				.ort(MapUtils.getString(antragstellerMap, FIELD_FIRMA_STADT))
+				.anrede(MapUtils.getString(antragstellerMap, FIELD_ANSPRECHPARTNER_ANREDE))
+				.vorname(MapUtils.getString(antragstellerMap, FIELD_ANSPRECHPARTNER_VORNAME))
+				.nachname(MapUtils.getString(antragstellerMap, FIELD_ANSPRECHPARTNER_NACHNAME))
+				.telefon(MapUtils.getString(antragstellerMap, TELEFON))
+				.email(MapUtils.getString(antragstellerMap, EMAIL))
+				.data(getNotMappedData(antragstellerMap, getFirmaFields()));
+	}
+
+	private Map<String, Object> getNotMappedData(Map<String, Object> antragstellerMap, Set<String> mappedFields) {
+		return antragstellerMap.entrySet().stream().filter(entry -> !mappedFields.contains(entry.getKey()))
+				.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (key1, key2) -> key1, LinkedHashMap::new));
 	}
 
-	private Map<String, Object> getNotMappedData(Map<String, Object> antragstellerMap) {
-		var map = new LinkedHashMap<>(antragstellerMap);
-		getFields().forEach(map::remove);
-		return map;
+	private Set<String> getPrivateFields() {
+		return Set.of(ANREDE, VORNAME, NACHNAME, GEBURTSNAME, GEBURTSDATUM, GEBURTSORT, EMAIL, TELEFON, STRASSE, HAUSNUMMER, PLZ, ORT);
 	}
 
-	private List<String> getFields() {
-		return List.of(ANREDE, VORNAME, NACHNAME, GEBURTSNAME, GEBURTSDATUM, GEBURTSORT, EMAIL, TELEFON, STRASSE, HAUSNUMMER, PLZ, ORT);
+	private Set<String> getFirmaFields() {
+		return Set.of(FIELD_FIRMA_NAME, FIELD_FIRMA_STRASSE, FIELD_FIRMA_HAUSNUMMER, FIELD_FIRMA_PLZ, FIELD_FIRMA_STADT,
+				FIELD_ANSPRECHPARTNER_ANREDE, FIELD_ANSPRECHPARTNER_VORNAME, FIELD_ANSPRECHPARTNER_NACHNAME, TELEFON, EMAIL);
 	}
 
 	private Map<String, Object> removeMappedData(Map<String, Object> formDataMap) {
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapper.java
index a8d133be63359eca9db5d610c01f4bfd144f1a96..ab351eb8f849b811373de9c7e4f2b95e0d080086 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapper.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapper.java
@@ -1,5 +1,7 @@
 package de.ozgcloud.eingang.semantik.enginebased.formcycle;
 
+import static org.apache.commons.lang3.StringUtils.*;
+
 import java.util.Map;
 import java.util.Optional;
 
@@ -25,6 +27,7 @@ public class FormcycleAntragstellerMapper implements FormcycleEngineBasedMapper
 	static final String KEY_ADDRESS = "tfAntragstellerAdresse";
 	static final String KEY_PLZ = "tfAntragstellerPLZ";
 	static final String KEY_ORT = "tfAntragstellerOrt";
+	static final String KEY_FIRMA_NAME = "tfOrgName";
 
 	@Override
 	public FormData parseFormData(final FormData formData) {
@@ -41,19 +44,26 @@ public class FormcycleAntragstellerMapper implements FormcycleEngineBasedMapper
 	}
 
 	Antragsteller buildAntragsteller(Map<String, Object> antragstellerData) {
-		return Antragsteller.builder()
+		var firmaName = getValue(antragstellerData, KEY_FIRMA_NAME);
+		var antragstellerBuilder = Antragsteller.builder()
+				.firmaName(firmaName)
 				.anrede(getValue(antragstellerData, KEY_ANREDE))
 				.vorname(getValue(antragstellerData, KEY_VORNAME))
 				.nachname(getValue(antragstellerData, KEY_NACHNAME))
-				.geburtsname(getValue(antragstellerData, KEY_GEBURTSNAME))
-				.geburtsdatum(getValue(antragstellerData, KEY_GEBURTSDATUM))
-				.geburtsort(getValue(antragstellerData, KEY_GEBURTSORT))
 				.email(getValue(antragstellerData, KEY_EMAIL))
 				.telefon(getValue(antragstellerData, KEY_TELEFON))
 				.strasse(getValue(antragstellerData, KEY_ADDRESS))
 				.plz(getValue(antragstellerData, KEY_PLZ))
-				.ort(getValue(antragstellerData, KEY_ORT))
-				.build();
+				.ort(getValue(antragstellerData, KEY_ORT));
+		if (isBlank(firmaName)) {
+			antragstellerBuilder
+					.geburtsname(getValue(antragstellerData, KEY_GEBURTSNAME))
+					.geburtsdatum(getValue(antragstellerData, KEY_GEBURTSDATUM))
+					.geburtsort(getValue(antragstellerData, KEY_GEBURTSORT));
+		}else {
+			antragstellerBuilder.firmaName(firmaName);
+		}
+		return antragstellerBuilder.build();
 	}
 
 	String getValue(Map<String, Object> formDataMap, String key) {
diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapperTest.java
index e40b13db45356729cd68b0fec172931b999c4c17..f68df9df3da7a3905ef9a4dc0fdd9a96c112c890 100644
--- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapperTest.java
+++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapperTest.java
@@ -37,11 +37,9 @@ import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 
 import de.ozgcloud.eingang.common.formdata.Antragsteller;
 import de.ozgcloud.eingang.common.formdata.FormData;
-import de.ozgcloud.eingang.semantik.enginebased.afm.AfmAntragstellerMapper;
 
 class AfmAntragstellerMapperTest {
 
@@ -52,7 +50,7 @@ class AfmAntragstellerMapperTest {
 	private AfmAntragstellerHeaderMapper antragstellerHeaderMapper;
 
 	private FormData formData = FormData.builder().formData(AfmAntragstellerTestFactory.createFormDataMap()).build();
-	
+
 	@DisplayName("Parse form data")
 	@Nested
 	class TestParseFormData {
@@ -88,7 +86,8 @@ class AfmAntragstellerMapperTest {
 		@Test
 		@DisplayName("should map antragsteller when key starts with an uppercase letter")
 		void shouldMapAntragstellerUppercase() {
-			formData = FormData.builder().formData(AfmAntragstellerTestFactory.createFormDataMap(AfmAntragstellerMapper.ANTRAGSTELLER_UPPERCASE)).build();
+			formData = FormData.builder().formData(AfmAntragstellerTestFactory.createFormDataMap(AfmAntragstellerMapper.ANTRAGSTELLER_UPPERCASE))
+					.build();
 
 			var parsedFormData = parseFormData(formData);
 
@@ -99,7 +98,8 @@ class AfmAntragstellerMapperTest {
 		@Test
 		@DisplayName("should map only antragsteller key when both present")
 		void shouldMapOnlyOneKey() {
-			var expectedAntragsteller = AfmAntragstellerTestFactory.createBuilder().anrede("anrede").vorname("firstName").nachname("lastName").build();
+			var expectedAntragsteller = AfmAntragstellerTestFactory.createBuilder().anrede("anrede").vorname("firstName").nachname("lastName")
+					.build();
 
 			var parsedFormData = parseFormData(createFormData(expectedAntragsteller));
 
@@ -109,7 +109,7 @@ class AfmAntragstellerMapperTest {
 
 		private FormData createFormData(Antragsteller antragsteller) {
 			var formDataMap = AfmAntragstellerTestFactory.createMutableFormDataMap(AfmAntragstellerMapper.ANTRAGSTELLER_UPPERCASE);
-			var antragstelleMap = AfmAntragstellerTestFactory.createAntragstelleMap(
+			var antragstelleMap = AfmAntragstellerTestFactory.createPrivateAntragstelleMap(
 					MapEntry.entry(AfmAntragstellerMapper.ANREDE, antragsteller.getAnrede()),
 					MapEntry.entry(AfmAntragstellerMapper.VORNAME, antragsteller.getVorname()),
 					MapEntry.entry(AfmAntragstellerMapper.NACHNAME, antragsteller.getNachname())
@@ -118,9 +118,9 @@ class AfmAntragstellerMapperTest {
 			return FormData.builder().formData(formDataMap).build();
 		}
 
-		@DisplayName("map antragsteller data")
+		@DisplayName("map private antragsteller data")
 		@Nested
-		class TestMapAntragstellerData {
+		class TestMapPrivateAntragstellerData {
 
 			@Test
 			void shouldMapPostfachId() {
@@ -140,7 +140,8 @@ class AfmAntragstellerMapperTest {
 
 				@BeforeEach
 				void buildFormData() {
-					var antragstellerMap = AfmAntragstellerTestFactory.createAntragstelleMap(MapEntry.entry(NOT_MAPPED_FIELD, NOT_MAPPED_VALUE));
+					var antragstellerMap = AfmAntragstellerTestFactory.createPrivateAntragstelleMap(
+							MapEntry.entry(NOT_MAPPED_FIELD, NOT_MAPPED_VALUE));
 
 					var formDataMap = new HashMap<String, Object>();
 					formDataMap.put(AfmAntragstellerMapper.ANTRAGSTELLER, antragstellerMap);
@@ -176,9 +177,9 @@ class AfmAntragstellerMapperTest {
 			}
 		}
 
-		@DisplayName("remove fields")
+		@DisplayName("remove private fields")
 		@Nested
-		class TestRemoveFields {
+		class TestRemovePrivateFields {
 
 			@Test
 			void shouldRemoveAntragsteller() {
@@ -190,7 +191,8 @@ class AfmAntragstellerMapperTest {
 			@Test
 			@DisplayName("should remove Antragsteller when key starts with an uppercase latter")
 			void shouldRemoveAntragstellerUppercase() {
-				formData = FormData.builder().formData(AfmAntragstellerTestFactory.createFormDataMap(AfmAntragstellerMapper.ANTRAGSTELLER_UPPERCASE)).build();
+				formData = FormData.builder().formData(AfmAntragstellerTestFactory.createFormDataMap(AfmAntragstellerMapper.ANTRAGSTELLER_UPPERCASE))
+						.build();
 
 				var parsedFormData = parseFormData(formData);
 
@@ -207,12 +209,31 @@ class AfmAntragstellerMapperTest {
 
 			private FormData createFormData() {
 				var formDataMap = AfmAntragstellerTestFactory.createMutableFormDataMap(AfmAntragstellerMapper.ANTRAGSTELLER_UPPERCASE);
-				formDataMap.put(AfmAntragstellerMapper.ANTRAGSTELLER, AfmAntragstellerTestFactory.createAntragstelleMap());
+				formDataMap.put(AfmAntragstellerMapper.ANTRAGSTELLER, AfmAntragstellerTestFactory.createPrivateAntragstelleMap());
 				return FormData.builder().formData(formDataMap).build();
 			}
 		}
 	}
 
+	@Nested
+	class TestMapFirmAntragstellerData {
+
+		@Test
+		void shouldMapFirmAntragstellerData() {
+			var parsedFormData = parseFormData(createFormData());
+
+			assertThat(parsedFormData.getAntragsteller()).usingRecursiveComparison()
+					.ignoringFields("data")
+					.isEqualTo(AfmAntragstellerTestFactory.createFirm());
+		}
+
+		private FormData createFormData() {
+			var formDataMap = AfmAntragstellerTestFactory.createFormDataMap();
+			formDataMap.put(AfmAntragstellerMapper.ANTRAGSTELLER, AfmAntragstellerTestFactory.createFirmAntragstelleMap());
+			return FormData.builder().formData(formDataMap).build();
+		}
+	}
+
 	private FormData parseFormData(FormData formData) {
 		return mapper.parseFormData(formData);
 	}
diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerTestFactory.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerTestFactory.java
index b127c5a0d30be66e723c7b1744378b5b613e3043..bcdf3985f30f88c7fe5d1a0d47f669aca86942b6 100644
--- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerTestFactory.java
+++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerTestFactory.java
@@ -32,11 +32,11 @@ import java.util.UUID;
 import org.assertj.core.data.MapEntry;
 
 import de.ozgcloud.eingang.common.formdata.Antragsteller;
-import de.ozgcloud.eingang.semantik.enginebased.afm.AfmAntragstellerMapper;
 
 public class AfmAntragstellerTestFactory {
 
 	public static final String ANREDE = "Herr";
+	public static final String FIRMA_NAME = "Firma X";
 	public static final String VORNAME = "Max";
 	public static final String NACHNAME = "Mustermann";
 	public static final String GEBURTSNAME = "Maxi";
@@ -55,6 +55,15 @@ public class AfmAntragstellerTestFactory {
 		return createBuilder().build();
 	}
 
+	public static Antragsteller createFirm() {
+		return createBuilder()
+				.firmaName(FIRMA_NAME)
+				.geburtsname(null)
+				.geburtsdatum(null)
+				.geburtsort(null)
+				.build();
+	}
+
 	public static Antragsteller.AntragstellerBuilder createBuilder() {
 		return Antragsteller.builder()
 				.anrede(ANREDE)
@@ -77,18 +86,18 @@ public class AfmAntragstellerTestFactory {
 	}
 
 	public static Map<String, Object> createFormDataMap(String antragstellerKey) {
-		return Collections.unmodifiableMap(createMutableFormDataMap(antragstellerKey));
+		return createMutableFormDataMap(antragstellerKey);
 	}
 
 	public static Map<String, Object> createMutableFormDataMap(String antragstellerKey) {
 		var map = new HashMap<String, Object>();
-		map.put(antragstellerKey, createAntragstelleMap());
+		map.put(antragstellerKey, createPrivateAntragstelleMap());
 		map.put(AfmAntragstellerMapper.POSTFACH_ID, POSTFACH_ID);
 		return map;
 	}
 
 	@SafeVarargs
-	public static Map<String, Object> createAntragstelleMap(MapEntry<String, Object>... additionalEntries) {
+	public static Map<String, Object> createPrivateAntragstelleMap(MapEntry<String, Object>... additionalEntries) {
 		var map = new HashMap<String, Object>();
 		map.put(AfmAntragstellerMapper.ANREDE, ANREDE);
 		map.put(AfmAntragstellerMapper.VORNAME, VORNAME);
@@ -107,4 +116,23 @@ public class AfmAntragstellerTestFactory {
 
 		return Collections.unmodifiableMap(map);
 	}
+
+	@SafeVarargs
+	public static Map<String, Object> createFirmAntragstelleMap(MapEntry<String, Object>... additionalEntries) {
+		var map = new HashMap<String, Object>();
+		map.put(AfmAntragstellerMapper.FIELD_FIRMA_NAME, FIRMA_NAME);
+		map.put(AfmAntragstellerMapper.FIELD_ANSPRECHPARTNER_ANREDE, ANREDE);
+		map.put(AfmAntragstellerMapper.FIELD_ANSPRECHPARTNER_VORNAME, VORNAME);
+		map.put(AfmAntragstellerMapper.FIELD_ANSPRECHPARTNER_NACHNAME, NACHNAME);
+		map.put(AfmAntragstellerMapper.EMAIL, EMAIL);
+		map.put(AfmAntragstellerMapper.TELEFON, TELEFON);
+		map.put(AfmAntragstellerMapper.FIELD_FIRMA_STRASSE, STRASSE);
+		map.put(AfmAntragstellerMapper.FIELD_FIRMA_HAUSNUMMER, HAUSNUMMER);
+		map.put(AfmAntragstellerMapper.FIELD_FIRMA_PLZ, PLZ);
+		map.put(AfmAntragstellerMapper.FIELD_FIRMA_STADT, ORT);
+
+		Arrays.stream(additionalEntries).forEach(entry -> map.put(entry.getKey(), entry.getValue()));
+
+		return Collections.unmodifiableMap(map);
+	}
 }
\ No newline at end of file
diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapperTest.java
index ecce809dfc165ebda375212fcc659021b9f8ea76..4bcbc1cba5239aeffb34b319eb5d0d81b54bc5a7 100644
--- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapperTest.java
+++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapperTest.java
@@ -7,8 +7,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
 
-import org.assertj.core.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
@@ -28,23 +27,9 @@ class FormcycleAntragstellerMapperTest {
 
 	private static final String VALUE_KEY = "value";
 	private static final String LABEL_KEY = "label";
-	private static final Map<String, Object> ANTRAGSTELLER_DATA = new HashMap<>();
-	private static final Map<String, Object> ANTRAGSTELLER_MAP = Map.of("fsBKAllDaten", Map.of(VALUE_KEY, ANTRAGSTELLER_DATA));
-
-	@BeforeAll
-	static void fillAntragstellerData() {
-		ANTRAGSTELLER_DATA.put("tfAntragstellerAnrede", Map.of(VALUE_KEY, AntragstellerTestFactory.ANREDE, LABEL_KEY, "Anrede"));
-		ANTRAGSTELLER_DATA.put("tfAntragstellerVorname", Map.of(LABEL_KEY, "Vorname", VALUE_KEY, AntragstellerTestFactory.VORNAME));
-		ANTRAGSTELLER_DATA.put("tfAntragstellerName", Map.of(VALUE_KEY, AntragstellerTestFactory.NACHNAME, LABEL_KEY, "Nachname"));
-		ANTRAGSTELLER_DATA.put("tfAntragstellerGeburtsname", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSNAME, LABEL_KEY, "Geburtsname"));
-		ANTRAGSTELLER_DATA.put("tfAntragstellerGeburtsdatum", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSDATUM, LABEL_KEY, "Geburtsdatum"));
-		ANTRAGSTELLER_DATA.put("tfAntragstellerGeburtsort", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSORT, LABEL_KEY, "Geburtsort"));
-		ANTRAGSTELLER_DATA.put("tfAntragstellerEmail", Map.of(VALUE_KEY, AntragstellerTestFactory.EMAIL, LABEL_KEY, "E-Mail"));
-		ANTRAGSTELLER_DATA.put("tfAntragstellerTelefon", Map.of(VALUE_KEY, AntragstellerTestFactory.TELEFON, LABEL_KEY, "Telefon"));
-		ANTRAGSTELLER_DATA.put("tfAntragstellerAdresse", Map.of(LABEL_KEY, "Adresse", VALUE_KEY, AntragstellerTestFactory.STRASSE + " " + AntragstellerTestFactory.HAUSNUMMER));
-		ANTRAGSTELLER_DATA.put("tfAntragstellerPLZ", Map.of(LABEL_KEY, "PLZ", VALUE_KEY, AntragstellerTestFactory.PLZ));
-		ANTRAGSTELLER_DATA.put("tfAntragstellerOrt", Map.of(LABEL_KEY, "Ort", VALUE_KEY, AntragstellerTestFactory.ORT));
-	}
+
+	private Map<String, Object> antragstellerData = new HashMap<>();
+	private Map<String, Object> antragstellerMap = Map.of("fsBKAllDaten", Map.of(VALUE_KEY, antragstellerData));
 
 	@Nested
 	class TestParseFormData {
@@ -56,16 +41,16 @@ class FormcycleAntragstellerMapperTest {
 		void shouldCallGetAntragsteller() {
 			mapper.parseFormData(buildFormData());
 
-			verify(mapper).getAntragstellerData(ANTRAGSTELLER_MAP);
+			verify(mapper).getAntragstellerData(antragstellerMap);
 		}
 
 		@Test
 		void shouldCallBuildAntragsteller() {
-			doReturn(Optional.of(ANTRAGSTELLER_DATA)).when(mapper).getAntragstellerData(anyMap());
+			doReturn(Optional.of(antragstellerData)).when(mapper).getAntragstellerData(anyMap());
 
 			mapper.parseFormData(buildFormData());
 
-			verify(mapper).buildAntragsteller(ANTRAGSTELLER_DATA);
+			verify(mapper).buildAntragsteller(antragstellerData);
 		}
 
 		@Test
@@ -87,7 +72,7 @@ class FormcycleAntragstellerMapperTest {
 		}
 
 		FormData buildFormData() {
-			return FormData.builder().formData(ANTRAGSTELLER_MAP).build();
+			return FormData.builder().formData(antragstellerMap).build();
 		}
 	}
 
@@ -105,9 +90,9 @@ class FormcycleAntragstellerMapperTest {
 
 		@Test
 		void shouldReturnAntragstellerData() {
-			var result = mapper.getAntragstellerData(ANTRAGSTELLER_MAP);
+			var result = mapper.getAntragstellerData(antragstellerMap);
 
-			assertThat(result).contains(ANTRAGSTELLER_DATA);
+			assertThat(result).contains(antragstellerData);
 		}
 	}
 
@@ -116,6 +101,8 @@ class FormcycleAntragstellerMapperTest {
 
 		@Test
 		void shouldSetAnrede() {
+			antragstellerData.put("tfAntragstellerAnrede", Map.of(VALUE_KEY, AntragstellerTestFactory.ANREDE, LABEL_KEY, "Anrede"));
+
 			var result = buildAntragsteller();
 
 			assertThat(result.getAnrede()).isEqualTo(AntragstellerTestFactory.ANREDE);
@@ -123,6 +110,8 @@ class FormcycleAntragstellerMapperTest {
 
 		@Test
 		void shouldSetVorname() {
+			antragstellerData.put("tfAntragstellerVorname", Map.of(LABEL_KEY, "Vorname", VALUE_KEY, AntragstellerTestFactory.VORNAME));
+
 			var result = buildAntragsteller();
 
 			assertThat(result.getVorname()).isEqualTo(AntragstellerTestFactory.VORNAME);
@@ -130,6 +119,8 @@ class FormcycleAntragstellerMapperTest {
 
 		@Test
 		void shouldSetNachname() {
+			antragstellerData.put("tfAntragstellerName", Map.of(VALUE_KEY, AntragstellerTestFactory.NACHNAME, LABEL_KEY, "Nachname"));
+
 			var result = buildAntragsteller();
 
 			assertThat(result.getNachname()).isEqualTo(AntragstellerTestFactory.NACHNAME);
@@ -137,6 +128,8 @@ class FormcycleAntragstellerMapperTest {
 
 		@Test
 		void shouldSetGeburtsname() {
+			antragstellerData.put("tfAntragstellerGeburtsname", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSNAME, LABEL_KEY, "Geburtsname"));
+
 			var result = buildAntragsteller();
 
 			assertThat(result.getGeburtsname()).isEqualTo(AntragstellerTestFactory.GEBURTSNAME);
@@ -144,6 +137,8 @@ class FormcycleAntragstellerMapperTest {
 
 		@Test
 		void shouldSetGeburtsdatum() {
+			antragstellerData.put("tfAntragstellerGeburtsdatum", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSDATUM, LABEL_KEY, "Geburtsdatum"));
+
 			var result = buildAntragsteller();
 
 			assertThat(result.getGeburtsdatum()).isEqualTo(AntragstellerTestFactory.GEBURTSDATUM);
@@ -151,6 +146,8 @@ class FormcycleAntragstellerMapperTest {
 
 		@Test
 		void shouldSetGeburtsort() {
+			antragstellerData.put("tfAntragstellerGeburtsort", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSORT, LABEL_KEY, "Geburtsort"));
+
 			var result = buildAntragsteller();
 
 			assertThat(result.getGeburtsort()).isEqualTo(AntragstellerTestFactory.GEBURTSORT);
@@ -158,6 +155,8 @@ class FormcycleAntragstellerMapperTest {
 
 		@Test
 		void shouldSetEmail() {
+			antragstellerData.put("tfAntragstellerEmail", Map.of(VALUE_KEY, AntragstellerTestFactory.EMAIL, LABEL_KEY, "E-Mail"));
+
 			var result = buildAntragsteller();
 
 			assertThat(result.getEmail()).isEqualTo(AntragstellerTestFactory.EMAIL);
@@ -165,6 +164,8 @@ class FormcycleAntragstellerMapperTest {
 
 		@Test
 		void shouldSetTelefon() {
+			antragstellerData.put("tfAntragstellerTelefon", Map.of(VALUE_KEY, AntragstellerTestFactory.TELEFON, LABEL_KEY, "Telefon"));
+
 			var result = buildAntragsteller();
 
 			assertThat(result.getTelefon()).isEqualTo(AntragstellerTestFactory.TELEFON);
@@ -172,6 +173,9 @@ class FormcycleAntragstellerMapperTest {
 
 		@Test
 		void shouldSetAdresse() {
+			antragstellerData.put("tfAntragstellerAdresse",
+					Map.of(LABEL_KEY, "Adresse", VALUE_KEY, AntragstellerTestFactory.STRASSE + " " + AntragstellerTestFactory.HAUSNUMMER));
+
 			var result = buildAntragsteller();
 
 			assertThat(result.getStrasse()).isEqualTo(AntragstellerTestFactory.STRASSE + " " + AntragstellerTestFactory.HAUSNUMMER);
@@ -179,6 +183,8 @@ class FormcycleAntragstellerMapperTest {
 
 		@Test
 		void shouldSetPlz() {
+			antragstellerData.put("tfAntragstellerPLZ", Map.of(LABEL_KEY, "PLZ", VALUE_KEY, AntragstellerTestFactory.PLZ));
+
 			var result = buildAntragsteller();
 
 			assertThat(result.getPlz()).isEqualTo(AntragstellerTestFactory.PLZ);
@@ -186,13 +192,48 @@ class FormcycleAntragstellerMapperTest {
 
 		@Test
 		void shouldSetOrt() {
+			antragstellerData.put("tfAntragstellerOrt", Map.of(LABEL_KEY, "Ort", VALUE_KEY, AntragstellerTestFactory.ORT));
+
 			var result = buildAntragsteller();
 
 			assertThat(result.getOrt()).isEqualTo(AntragstellerTestFactory.ORT);
 		}
 
 		Antragsteller buildAntragsteller() {
-			return mapper.buildAntragsteller(ANTRAGSTELLER_DATA);
+			return mapper.buildAntragsteller(antragstellerData);
+		}
+	}
+
+	@Nested
+	class TestBuildFirmaAntragsteller {
+
+		@BeforeEach
+		void fillAntragstellerData() {
+			antragstellerData.put("tfOrgName", Map.of(VALUE_KEY, AntragstellerTestFactory.FIRMA_NAME, LABEL_KEY, "Firmenname"));
+			antragstellerData.put("tfAntragstellerAnrede", Map.of(VALUE_KEY, AntragstellerTestFactory.ANREDE, LABEL_KEY, "Anrede"));
+			antragstellerData.put("tfAntragstellerVorname", Map.of(LABEL_KEY, "Vorname", VALUE_KEY, AntragstellerTestFactory.VORNAME));
+			antragstellerData.put("tfAntragstellerName", Map.of(VALUE_KEY, AntragstellerTestFactory.NACHNAME, LABEL_KEY, "Nachname"));
+			antragstellerData.put("tfAntragstellerGeburtsname", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSNAME, LABEL_KEY, "Geburtsname"));
+			antragstellerData.put("tfAntragstellerGeburtsdatum", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSDATUM, LABEL_KEY, "Geburtsdatum"));
+			antragstellerData.put("tfAntragstellerGeburtsort", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSORT, LABEL_KEY, "Geburtsort"));
+			antragstellerData.put("tfAntragstellerEmail", Map.of(VALUE_KEY, AntragstellerTestFactory.EMAIL, LABEL_KEY, "E-Mail"));
+			antragstellerData.put("tfAntragstellerTelefon", Map.of(VALUE_KEY, AntragstellerTestFactory.TELEFON, LABEL_KEY, "Telefon"));
+			antragstellerData.put("tfAntragstellerAdresse",
+					Map.of(LABEL_KEY, "Adresse", VALUE_KEY, AntragstellerTestFactory.STRASSE + " " + AntragstellerTestFactory.HAUSNUMMER));
+			antragstellerData.put("tfAntragstellerPLZ", Map.of(LABEL_KEY, "PLZ", VALUE_KEY, AntragstellerTestFactory.PLZ));
+			antragstellerData.put("tfAntragstellerOrt", Map.of(LABEL_KEY, "Ort", VALUE_KEY, AntragstellerTestFactory.ORT));
 		}
+
+		@Test
+		void shouldMapFirmaData() {
+			var expectedAntragsteller = AntragstellerTestFactory.createFirmBuilder()
+					.strasse("%s %s".formatted(AntragstellerTestFactory.STRASSE, AntragstellerTestFactory.HAUSNUMMER))
+					.hausnummer(null).postfachId(null).data(null).build();
+
+			var result = mapper.buildAntragsteller(antragstellerData);
+
+			assertThat(result).usingRecursiveComparison().isEqualTo(expectedAntragsteller);
+		}
+
 	}
 }
\ No newline at end of file
diff --git a/src/main/helm/README.md b/src/main/helm/README.md
index a7d492581da2e82281cec70ff9843a7dd10c84d5..2de2b441e29ccb265bc1114b5e12dfcc4efa825f 100644
--- a/src/main/helm/README.md
+++ b/src/main/helm/README.md
@@ -91,3 +91,10 @@ env:
     - name: ...
       value: ...
 ```
+
+```yaml
+env:
+  customList:
+    key_1: value_1
+    key_2: value_2
+```
\ No newline at end of file
diff --git a/src/main/helm/templates/_helpers.tpl b/src/main/helm/templates/_helpers.tpl
index e0ff7ea44b451f802f623ad7b1f1e3cd47f829ce..a66961e50f3068d6dbd68be3bc801d1860195c3a 100644
--- a/src/main/helm/templates/_helpers.tpl
+++ b/src/main/helm/templates/_helpers.tpl
@@ -88,4 +88,22 @@ app.kubernetes.io/namespace: {{ include "app.namespace" . }}
 {{- else if eq (.Values.image).name "enterprise-adapter" }}
 {{- printf "enterprise-adapter-service-account" }}
 {{- end }}
+{{- end -}}
+
+{{- define "app.getCustomList" -}}
+{{- with (.Values.env).customList -}}
+{{- if kindIs "map" . -}}
+{{ include "app.dictToList" . }}
+{{- else if kindIs "slice" . -}}
+{{ . | toYaml }}
+{{- end -}}
+{{- end -}}
+{{- end -}}
+
+{{- define "app.dictToList" -}}
+{{- $customList := list -}}
+{{- range $key, $value := . -}}
+{{- $customList = append $customList (dict "name" $key "value" $value) }}
+{{- end -}}
+{{- $customList | toYaml -}}
 {{- end -}}
\ No newline at end of file
diff --git a/src/main/helm/templates/deployment.yaml b/src/main/helm/templates/deployment.yaml
index 89c0a9277df86d7042b64ea75e4c2213e8a21331..c7e9bcd8833a52f0e9f1bd7d747ccaadcaf971f3 100644
--- a/src/main/helm/templates/deployment.yaml
+++ b/src/main/helm/templates/deployment.yaml
@@ -81,8 +81,8 @@ spec:
         - name: grpc_client_vorgang-manager-{{ (.Values.routing).targetVorgangManagerName}}_negotiationType
           value: {{ (.Values.routing).negotiationType | default "PLAINTEXT" }}
         {{- end }}
-        {{- with (.Values.env).customList }}
-{{ toYaml . | indent 8 }}
+        {{- with include "app.getCustomList" . }}
+{{ . | indent 8 }}
         {{- end }}
         image: "{{ .Values.image.repo }}/{{ .Values.image.name }}:{{ coalesce (.Values.image).tag "latest" }}"
         imagePullPolicy: Always
diff --git a/src/main/helm/values.yaml b/src/main/helm/values.yaml
index 11fdeb4ae386e81f51da0db2f35833333c0079f8..118009532b1262af86efb421e2108e41dae7775c 100644
--- a/src/main/helm/values.yaml
+++ b/src/main/helm/values.yaml
@@ -29,18 +29,6 @@ image:
   name: intelliform-adapter # [default: intelliform-adapter]
   tag: latest # [default: latest]
 
-# env:
-#   overrideSpringProfiles: "oc,prod"
-  # customList: # add name value pair for additional environments
-  #   - name: Dinge
-  #     value: true
-#resources:
-#  limits:
-#    cpu: 1 # [default: 1]
-#    memory: 1200Mi # [default: 1200Mi]
-#  requests:
-#    cpu: 100m # [default: 100m]
-#    memory: 250Mi # [default: 250Mi]
 
 ingress:
   enabled: true
diff --git a/src/test/helm/deployment_env_customList_test.yaml b/src/test/helm/deployment_env_customList_test.yaml
index 16022898f61af3474411ceff275c470d1feed81a..32e81b53357cbab961e85421719a7cb5b274e5e0 100644
--- a/src/test/helm/deployment_env_customList_test.yaml
+++ b/src/test/helm/deployment_env_customList_test.yaml
@@ -29,17 +29,40 @@ set:
   ozgcloud.environment: test
   imagePullSecret: image-pull-secret
 tests:
-  - it: check customList
+  - it: check customList as list
     set:
       env.customList:
         - name: my_test_environment_name
           value: "A test value"
+        - name: test_environment
+          value: "B test value"
     asserts:
       - contains:
           path: spec.template.spec.containers[0].env
           content:
             name: my_test_environment_name
             value: "A test value"
+      - contains:
+          path: spec.template.spec.containers[0].env
+          content:
+            name: test_environment
+            value: "B test value"
+  - it: check customList as dict
+    set:
+      env.customList:
+        my_test_environment_name: "A test value"
+        test_environment: "B test value"
+    asserts:
+      - contains:
+          path: spec.template.spec.containers[0].env
+          content:
+            name: my_test_environment_name
+            value: "A test value"
+      - contains:
+          path: spec.template.spec.containers[0].env
+          content:
+            name: test_environment
+            value: "B test value"
   - it: check customList test value is not set by default
     asserts:
       - notContains:
diff --git a/xta-adapter/src/main/helm/templates/network_policy.yaml b/xta-adapter/src/main/helm/templates/network_policy.yaml
index f8261b0885fd73688689a3f6fb873025e1ba0bde..b65e30f07ac0bc4277370f0879bc71c2c9c8adb5 100644
--- a/xta-adapter/src/main/helm/templates/network_policy.yaml
+++ b/xta-adapter/src/main/helm/templates/network_policy.yaml
@@ -66,7 +66,10 @@ spec:
         protocol: TCP
       - port: 9000
         protocol: TCP
-{{- with (.Values.networkPolicy).additionalEgressConfig }}
+{{- with (.Values.networkPolicy).additionalEgressConfigLocal }}
+{{ toYaml . | indent 2 }}
+{{- end }}
+{{- with (.Values.networkPolicy).additionalEgressConfigGlobal }}
 {{ toYaml . | indent 2 }}
 {{- end }}
 
diff --git a/xta-adapter/src/test/helm/network_policy_test.yaml b/xta-adapter/src/test/helm/network_policy_test.yaml
index 62eac6b1ad08aca179db7207cfd4071d92bc219e..7e725ee8a94e63b8a7156aa15cfad027b7d45575 100644
--- a/xta-adapter/src/test/helm/network_policy_test.yaml
+++ b/xta-adapter/src/test/helm/network_policy_test.yaml
@@ -89,12 +89,28 @@ tests:
                 - port: 9000
                   protocol: TCP
 
-  - it: add egress rules by values
+  - it: add egress rules by values local
     set:
       networkPolicy:
         ssoPublicIp: 51.89.117.53/32
         dnsServerNamespace: test-dns-namespace
-        additionalEgressConfig:
+        additionalEgressConfigLocal:
+        - to:
+          - ipBlock:
+              cidr: 1.2.3.4/32
+    asserts:
+    - contains:
+        path: spec.egress
+        content:
+          to:
+          - ipBlock:
+              cidr: 1.2.3.4/32
+  - it: add egress rules by values global
+    set:
+      networkPolicy:
+        ssoPublicIp: 51.89.117.53/32
+        dnsServerNamespace: test-dns-namespace
+        additionalEgressConfigGlobal:
         - to:
           - ipBlock:
               cidr: 1.2.3.4/32