diff --git a/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmEngineBasedAdapter.java b/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmEngineBasedAdapter.java
index c25ae97f986b9b6df4cb5af015866f30fa465194..757a25646d93ce77cfdeb838f004a64bb7fa2439 100644
--- a/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmEngineBasedAdapter.java
+++ b/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmEngineBasedAdapter.java
@@ -32,7 +32,9 @@ import de.ozgcloud.eingang.common.formdata.FormData;
 import de.ozgcloud.eingang.common.formdata.FormDataUtils;
 import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter;
 import de.ozgcloud.eingang.semantik.enginebased.afm.intelliform.IntelliFormRepresentationAdapter;
+import lombok.extern.log4j.Log4j2;
 
+@Log4j2
 @Component
 @RequiredArgsConstructor
 public class AfmEngineBasedAdapter implements EngineBasedSemantikAdapter {
@@ -46,14 +48,23 @@ public class AfmEngineBasedAdapter implements EngineBasedSemantikAdapter {
 		var processedFormData = intelliFormRepresentationAdapter.adaptByRepresentations(formData);
 
 		for (var mapper : mappers) {
-			processedFormData = mapper.parseFormData(processedFormData);
+			processedFormData = applyFormDataMapperAndCatchException(mapper, processedFormData);
 		}
 
 		return removeProcessedData(processedFormData);
 	}
 
+	private FormData applyFormDataMapperAndCatchException(AfmEngineBasedMapper mapper, FormData formData) {
+		try {
+			return mapper.parseFormData(formData);
+		} catch (RuntimeException e) {
+			LOG.error("Error while parsing form data with mapper {}", mapper.getClass().getSimpleName(), e);
+			return formData;
+		}
+	}
+
 
-	private FormData removeProcessedData(FormData formData) {
+	FormData removeProcessedData(FormData formData) {
 		return FormDataUtils.from(formData)
 				.remove(AfmAntragstellerMapper.POSTFACH_ID)
 				.build();
diff --git a/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmEngineBasedAdapterTest.java b/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmEngineBasedAdapterTest.java
index 1fb230e0c5c556598cc7dc774268979aeab20aac..2763d9fa1198e0b884a88afcf9350408a4e9bfbf 100644
--- a/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmEngineBasedAdapterTest.java
+++ b/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmEngineBasedAdapterTest.java
@@ -26,7 +26,7 @@ package de.ozgcloud.eingang.semantik.enginebased.afm;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
-import java.util.Collections;
+import java.util.List;
 import java.util.Map;
 
 import org.junit.jupiter.api.BeforeEach;
@@ -39,7 +39,7 @@ import org.mockito.Spy;
 import org.springframework.test.util.ReflectionTestUtils;
 
 import de.ozgcloud.eingang.common.formdata.FormData;
-import de.ozgcloud.eingang.common.formdata.FormHeader;
+import de.ozgcloud.eingang.common.formdata.FormDataTestFactory;
 import de.ozgcloud.eingang.semantik.enginebased.afm.intelliform.IntelliFormRepresentationAdapter;
 
 class AfmEngineBasedAdapterTest {
@@ -47,8 +47,6 @@ class AfmEngineBasedAdapterTest {
 	@Spy
 	@InjectMocks
 	private AfmEngineBasedAdapter adapter;
-	@Mock
-	private AfmEngineBasedMapper mapper;
 
 	@Mock
 	private IntelliFormRepresentationAdapter intelliFormRepresentationAdapters;
@@ -56,50 +54,144 @@ class AfmEngineBasedAdapterTest {
 	@DisplayName("Parse form data")
 	@Nested
 	class TestParseFromData {
-		private static final String VORGANG_NUMMER = "AAAA-1234";
-
-		private final Map<String, Object> formDataMap = Map.of(AfmAntragstellerMapper.POSTFACH_ID, "postfachIdValue");
-		private final FormData formData = FormData.builder()
-				.header(FormHeader.builder()
-						.vorgangNummer(VORGANG_NUMMER)
-						.build()
-				)
-				.formData(formDataMap)
-				.build();
+		@Mock
+		private AfmEngineBasedMapper mapper0;
+
+		@Mock
+		private AfmEngineBasedMapper mapper1;
+
+		@Mock
+		private FormData formData0;
+
+		@Mock
+		private FormData formData1;
+
+		@Mock
+		private FormData formData2;
+
+		@Mock
+		private FormData formData3;
+
+		@Mock
+		private FormData formData4;
+
+		@DisplayName("without exception")
+		@Nested
+		class TestWithoutException {
+
 
-		private final FormData processedFormData = FormData.builder()
-				.formData(formDataMap)
-				.build();
 
 		@BeforeEach
 		void mock() {
-			ReflectionTestUtils.setField(adapter, "mappers", Collections.singletonList(mapper));
+			ReflectionTestUtils.setField(adapter, "mappers", List.of(mapper0, mapper1));
 
-			when(mapper.parseFormData(processedFormData)).thenReturn(processedFormData);
-			when(intelliFormRepresentationAdapters.adaptByRepresentations(formData)).thenReturn(processedFormData);
+			when(intelliFormRepresentationAdapters.adaptByRepresentations(any())).thenReturn(formData1);
+			when(mapper0.parseFormData(any())).thenReturn(formData2);
+			when(mapper1.parseFormData(any())).thenReturn(formData3);
+			doReturn(formData4).when(adapter).removeProcessedData(any());
 		}
 
+		@DisplayName("should call adaptByRepresentations")
 		@Test
-		void shouldCallRepresentationAdapter() {
-			adapter.parseFormData(formData);
+		void shouldCallAdaptByRepresentations() {
+			parseFormData();
 
-			verify(intelliFormRepresentationAdapters).adaptByRepresentations(formData);
+			verify(intelliFormRepresentationAdapters).adaptByRepresentations(formData0);
 		}
 
+		@DisplayName("should call first mapper")
 		@Test
-		void shouldCallMappers() {
-			adapter.parseFormData(formData);
+		void shouldCallFirstMapper() {
+			parseFormData();
 
-			verify(mapper).parseFormData(processedFormData);
+			verify(mapper0).parseFormData(formData1);
 		}
 
+		@DisplayName("should call second mapper")
 		@Test
-		void shouldRemovePostfachId() {
-			var mappedFormData = adapter.parseFormData(formData);
+		void shouldCallSecondMapper() {
+			parseFormData();
 
-			assertThat(mappedFormData.getFormData()).doesNotContainKey(AfmAntragstellerMapper.POSTFACH_ID);
+			verify(mapper1).parseFormData(formData2);
 		}
 
+		@DisplayName("should call removeProcessedData")
+		@Test
+		void shouldCallRemoveProcessedData() {
+			parseFormData();
+
+			verify(adapter).removeProcessedData(formData3);
+		}
+
+		@DisplayName("should return")
+		@Test
+		void shouldReturn() {
+			var result = parseFormData();
+
+			assertThat(result).isEqualTo(formData4);
+		}
+
+		}
+
+		@DisplayName("with exception")
+		@Nested
+		class TestWithException {
+			@BeforeEach
+			void mock() {
+				ReflectionTestUtils.setField(adapter, "mappers", List.of(mapper0, mapper1));
+
+				when(intelliFormRepresentationAdapters.adaptByRepresentations(any())).thenReturn(formData1);
+				when(mapper0.parseFormData(any())).thenReturn(formData2);
+				when(mapper1.parseFormData(any())).thenThrow(new RuntimeException());
+				doReturn(formData4).when(adapter).removeProcessedData(any());
+			}
+
+			@DisplayName("should call removeProcessedData with old formData")
+			@Test
+			void shouldCallRemoveProcessedDataWithOldFormData() {
+				parseFormData();
+
+				verify(adapter).removeProcessedData(formData2);
+			}
+
+			@DisplayName("should return")
+			@Test
+			void shouldReturn() {
+				var result = parseFormData();
+
+				assertThat(result).isEqualTo(formData4);
+			}
+		}
+
+		FormData parseFormData() {
+			return adapter.parseFormData(formData0);
+		}
+	}
+
+	@DisplayName("remove processed data")
+	@Nested
+	class TestRemoveProcessedData {
+
+		private final FormData formData = FormDataTestFactory.createBuilder()
+				.formData(Map.of(
+						AfmAntragstellerMapper.POSTFACH_ID, "postfachIdValue",
+						"key", "value"
+				))
+				.build();
+
+		private final FormData outputFormData = FormDataTestFactory.createBuilder()
+				.formData(Map.of(
+						"key", "value"
+				))
+				.build();
+
+		@DisplayName("should return without postfachId")
+		@Test
+		void shouldReturnWithoutPostfachId() {
+			var mappedFormData = adapter.removeProcessedData(formData);
+
+			assertThat(mappedFormData).usingRecursiveComparison().isEqualTo(outputFormData);
+		}
 	}
 
 }