diff --git a/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java b/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java
index 616293d82d85a57a14e32296f415019571370782..9644711cdffdb539fb59487ac2e8e2a8a92f049e 100644
--- a/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java
+++ b/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java
@@ -79,7 +79,7 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema
 	}
 
 	FormData processFachnachricht(FormData formData) {
-		return pipe(
+		return chainWithCaughtRuntimeException(
 				Stream.of(
 						this::addFormName,
 						this::addFormEngineName,
@@ -90,9 +90,18 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema
 		).apply(formData);
 	}
 
-	private UnaryOperator<FormData> pipe(Stream<UnaryOperator<FormData>> functions) {
-		return (formData) -> functions
-				.reduce(formData, (acc, f) -> f.apply(acc), (a, b) -> a);
+	private UnaryOperator<FormData> chainWithCaughtRuntimeException(Stream<UnaryOperator<FormData>> functions) {
+		return formData -> functions
+				.reduce(formData, this::applyWithCaughtRuntimeException, (a, b) -> a);
+	}
+
+	private FormData applyWithCaughtRuntimeException(FormData oldFormData, UnaryOperator<FormData> function) {
+		try {
+			return function.apply(oldFormData);
+		} catch (RuntimeException e) {
+			LOG.error("Error in processing Fachnachricht", e);
+			return oldFormData;
+		}
 	}
 
 	FormData addFormId(FormData formData) {
diff --git a/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapterTest.java b/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapterTest.java
index 1ef26cff3a5579542e25035d85184a371feab718..6dc92dd64e09abb15b9e2d73807ed544586d2c2f 100644
--- a/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapterTest.java
+++ b/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapterTest.java
@@ -180,20 +180,98 @@ class DFoerdermittelEngineBasedSemantikAdapterTest {
 		@Mock
 		FormData formData5;
 
-		@BeforeEach
-		void mock() {
-			doReturn(formData1).when(adapter).addFormName(formData0);
-			doReturn(formData2).when(adapter).addFormEngineName(formData1);
-			doReturn(formData3).when(adapter).addServiceKonto(formData2);
-			doReturn(formData4).when(adapter).addOrganisationsEinheitId(formData3);
-			doReturn(formData5).when(adapter).addFormId(formData4);
+		@DisplayName("without exception")
+		@Nested
+		class TestWithoutException {
+
+			@BeforeEach
+			void mock() {
+				doReturn(formData1).when(adapter).addFormName(any());
+				doReturn(formData2).when(adapter).addFormEngineName(any());
+				doReturn(formData3).when(adapter).addServiceKonto(any());
+				doReturn(formData4).when(adapter).addOrganisationsEinheitId(any());
+				doReturn(formData5).when(adapter).addFormId(any());
+			}
+
+			@DisplayName("should call addFromName")
+			@Test
+			void shouldCallAddFromName() {
+				processFachnachricht();
+
+				verify(adapter).addFormName(formData0);
+			}
+
+			@DisplayName("should call addFormEngineName")
+			@Test
+			void shouldCallAddFormEngineName() {
+				processFachnachricht();
+
+				verify(adapter).addFormEngineName(formData1);
+			}
+
+			@DisplayName("should call addServiceKonto")
+			@Test
+			void shouldCallAddServiceKonto() {
+				processFachnachricht();
+
+				verify(adapter).addServiceKonto(formData2);
+			}
+
+			@DisplayName("should call addOrganisationsEinheitId")
+			@Test
+			void shouldCallAddOrganisationsEinheitId() {
+				processFachnachricht();
+
+				verify(adapter).addOrganisationsEinheitId(formData3);
+			}
+
+			@DisplayName("should call addFormId")
+			@Test
+			void shouldCallAddFormId() {
+				processFachnachricht();
+
+				verify(adapter).addFormId(formData4);
+			}
+
+			@Test
+			void shouldReturn() {
+				var processedFormData = processFachnachricht();
+
+				assertThat(processedFormData).isEqualTo(formData5);
+			}
 		}
 
-		@Test
-		void shouldReturn() {
-			var processedFormData = adapter.processFachnachricht(formData0);
+		@DisplayName("with exception")
+		@Nested
+		class TestWithException {
+
+			@BeforeEach
+			void mock() {
+				doThrow(new RuntimeException()).when(adapter).addFormName(any());
+				doThrow(new RuntimeException()).when(adapter).addFormEngineName(any());
+				doThrow(new RuntimeException()).when(adapter).addServiceKonto(any());
+				doReturn(formData3).when(adapter).addOrganisationsEinheitId(any());
+				doThrow(new RuntimeException()).when(adapter).addFormId(any());
+			}
+
+			@DisplayName("should call addOrganisationsEinheitId")
+			@Test
+			void shouldCallAddOrganisationsEinheitId() {
+				processFachnachricht();
+
+				verify(adapter).addOrganisationsEinheitId(formData0);
+			}
+
+			@Test
+			void shouldReturn() {
+				var processedFormData = processFachnachricht();
+
+				assertThat(processedFormData).isEqualTo(formData3);
+			}
+		}
 
-			assertThat(processedFormData).isEqualTo(formData5);
+		FormData processFachnachricht() {
+			return adapter.processFachnachricht(formData0);
 		}
 	}