diff --git a/tests/executables_src/testPropagateDataFaultFlag.cc b/tests/executables_src/testPropagateDataFaultFlag.cc
index d038bfab3436e051b3ac8ebaa04ecb9acb140998..8289cfd5cf70d0ba0ef8f51c7acf072a2ff343fe 100644
--- a/tests/executables_src/testPropagateDataFaultFlag.cc
+++ b/tests/executables_src/testPropagateDataFaultFlag.cc
@@ -18,21 +18,11 @@
 #include "TestFacility.h"
 #include "ExceptionDevice.h"
 #include "ModuleGroup.h"
+#include "check_timeout.h"
 
 using namespace boost::unit_test_framework;
 namespace ctk = ChimeraTK;
 
-#define CHECK_TIMEOUT(condition, maxMilliseconds)                                                                      \
-  {                                                                                                                    \
-    std::chrono::steady_clock::time_point t0 = std::chrono::steady_clock::now();                                       \
-    while(!(condition)) {                                                                                              \
-      bool timeout_reached = (std::chrono::steady_clock::now() - t0) > std::chrono::milliseconds(maxMilliseconds);     \
-      BOOST_CHECK(!timeout_reached);                                                                                   \
-      if(timeout_reached) break;                                                                                       \
-      usleep(1000);                                                                                                    \
-    }                                                                                                                  \
-  }
-
 /* dummy application */
 
 struct TestModule1 : ctk::ApplicationModule {
@@ -508,13 +498,72 @@ BOOST_AUTO_TEST_CASE(testThreadedFanout) {
   BOOST_CHECK(m2_result.dataValidity()== ctk::DataValidity::ok);
 }
 
-BOOST_AUTO_TEST_CASE(testDeviceReadFailure){
 
-}
-BOOST_AUTO_TEST_CASE(testConsumingFanout){
+
+BOOST_AUTO_TEST_CASE(testConsumingFanout){ 
 
 }
 
 BOOST_AUTO_TEST_CASE(testTrigger){}
 
 BOOST_AUTO_TEST_SUITE_END()
+
+struct Fixture_noTestFacility {
+  Fixture_noTestFacility()
+      : device1(boost::dynamic_pointer_cast<ExceptionDummy>(
+            ChimeraTK::BackendFactory::getInstance().createBackend(
+                TestApplication3::ExceptionDummyCDD1))),
+        device2(boost::dynamic_pointer_cast<ExceptionDummy>(
+            ChimeraTK::BackendFactory::getInstance().createBackend(
+                TestApplication3::ExceptionDummyCDD2))) {
+    device1->open();
+    device2->open();
+  }
+  boost::shared_ptr<ExceptionDummy> device1;
+  boost::shared_ptr<ExceptionDummy> device2;
+  TestApplication3 app;
+  ctk::TestFacility test{ false };
+};
+
+BOOST_FIXTURE_TEST_SUITE(data_validity_propagation_noTestFacility, Fixture_noTestFacility)
+
+BOOST_AUTO_TEST_CASE(testDeviceReadFailure) {
+  auto consumingFanoutSource = device1->getRawAccessor("m1", "i1");
+  auto pollRegister = device2->getRawAccessor("m1", "i2");
+
+  auto threadedFanoutInput = test.getScalar<int>("m1/o1");
+  auto result = test.getScalar<int>("m1/Module1_result");
+
+  threadedFanoutInput = 10000;
+  consumingFanoutSource = 1000;
+  pollRegister = 1;
+
+  // -------------------------------------------------------------//
+  // without errors
+  app.run();
+  threadedFanoutInput.write();
+
+  CHECK_TIMEOUT(result.readLatest(), 10000);
+  BOOST_CHECK_EQUAL(result, 11001);
+  BOOST_CHECK(result.dataValidity() == ctk::DataValidity::ok);
+
+  // -------------------------------------------------------------//
+  // device module exception
+  pollRegister = 0;
+
+  device2->throwExceptionRead = true;
+
+  threadedFanoutInput.write();
+  CHECK_TIMEOUT(result.readLatest(), 10000);
+  BOOST_CHECK_EQUAL(result, 11001);
+  BOOST_CHECK(result.dataValidity() == ctk::DataValidity::faulty);
+
+  // -------------------------------------------------------------//
+  // recovery from device module exception
+  device2->throwExceptionRead = false;
+
+  CHECK_TIMEOUT(result.readLatest(), 10000);
+  BOOST_CHECK_EQUAL(result, 11000);
+  BOOST_CHECK(result.dataValidity() == ctk::DataValidity::ok);
+}
+BOOST_AUTO_TEST_SUITE_END()