diff --git a/tests/automatic/asapo_fabric/parallel_data_transfer.cpp b/tests/automatic/asapo_fabric/parallel_data_transfer.cpp
index fc99295efc270c7b364c28946a1b19363bf1f2ef..aa8b34547c820b42c93150703815f16e3dcb3673 100644
--- a/tests/automatic/asapo_fabric/parallel_data_transfer.cpp
+++ b/tests/automatic/asapo_fabric/parallel_data_transfer.cpp
@@ -30,7 +30,11 @@ void ServerChildThread(FabricServer* server, std::atomic<int>* serverTotalReques
 
         FabricAddress clientAddress;
         FabricMessageId messageId;
-        server->RecvAny(&clientAddress, &messageId, &request, sizeof(request), &err);
+        // In order to run the tests more stable. Otherwise a timeout could occurred with valgrind
+        int tries = 0;
+        do {
+            server->RecvAny(&clientAddress, &messageId, &request, sizeof(request), &err);
+        } while (err == IOErrorTemplates::kTimeout && tries++ < 2);
         M_AssertEq(nullptr, err, "server->RecvAny");
         M_AssertEq("Hello World", request.message);
         M_AssertEq(messageId / kEachInstanceRuns, request.data_id); // is client index
diff --git a/tests/automatic/asapo_fabric/simple_data_transfer.cpp b/tests/automatic/asapo_fabric/simple_data_transfer.cpp
index 5c35f5a2cadc7a021e20a606906c288698ed0871..d5e4d9bda4bddb6d0a39e4d212ac46649bc7b9f6 100644
--- a/tests/automatic/asapo_fabric/simple_data_transfer.cpp
+++ b/tests/automatic/asapo_fabric/simple_data_transfer.cpp
@@ -35,7 +35,11 @@ void ServerMasterThread(const std::string& hostname, uint16_t port, char* expect
 
                 FabricAddress clientAddress;
                 FabricMessageId messageId;
-                server->RecvAny(&clientAddress, &messageId, &request, sizeof(request), &err);
+                // In order to run the tests more stable. Otherwise a timeout could occurred with valgrind
+                int tries = 0;
+                do {
+                    server->RecvAny(&clientAddress, &messageId, &request, sizeof(request), &err);
+                } while (err == IOErrorTemplates::kTimeout && tries++ < 2);
                 M_AssertEq(nullptr, err, "server->RecvAny");
                 M_AssertEq(123 + instanceRuns, messageId);
                 M_AssertEq("Hello World", request.message);
diff --git a/tests/automatic/asapo_fabric/timeout_test.cpp b/tests/automatic/asapo_fabric/timeout_test.cpp
index 0e2ab643b2e3f4935b7ccf1543eba21930eae00e..d71ea1c3a0ed3cd5fa0bad902a3a85bf4f6395b6 100644
--- a/tests/automatic/asapo_fabric/timeout_test.cpp
+++ b/tests/automatic/asapo_fabric/timeout_test.cpp
@@ -29,7 +29,12 @@ void ServerMasterThread(const std::string& hostname, uint16_t port) {
         int dummyBuffer;
         FabricAddress clientAddress;
         FabricMessageId messageId;
-        server->RecvAny(&clientAddress, &messageId, &dummyBuffer, sizeof(dummyBuffer), &err);
+
+        // In order to run the tests more stable. Otherwise a timeout could occurred with valgrind
+        int tries = 0;
+        do {
+            server->RecvAny(&clientAddress, &messageId, &dummyBuffer, sizeof(dummyBuffer), &err);
+        } while (err == IOErrorTemplates::kTimeout && tries++ < 2);
         M_AssertEq(nullptr, err, "server->RecvAny");
 
         server->Send(clientAddress, messageId, &dummyBuffer, sizeof(dummyBuffer), &err);
diff --git a/tests/automatic/asapo_fabric/wrong_memory_info.cpp b/tests/automatic/asapo_fabric/wrong_memory_info.cpp
index f94fc6c658136570b9eba5d650facfd10f4d5886..76988ddc42322edd0a74550536b0ae86203ed393 100644
--- a/tests/automatic/asapo_fabric/wrong_memory_info.cpp
+++ b/tests/automatic/asapo_fabric/wrong_memory_info.cpp
@@ -47,7 +47,10 @@ void ServerMasterThread(const std::string& hostname, uint16_t port) {
     M_AssertEq(nullptr, err, "server->Send(1)");
 
     // Simulate correct memory details
-    server->RecvAny(&clientAddress, &messageId, &request, sizeof(request), &err);
+    int tries = 0;
+    do {
+        server->RecvAny(&clientAddress, &messageId, &request, sizeof(request), &err);
+    } while (err == IOErrorTemplates::kTimeout && tries++ < 2);
     M_AssertEq(nullptr, err, "server->RecvAny(2)");
     M_AssertEq(2, messageId);
     server->RdmaWrite(clientAddress, (MemoryRegionDetails*)&request.substream, rdmaBuffer.get(), kRdmaSize, &err);
@@ -57,7 +60,10 @@ void ServerMasterThread(const std::string& hostname, uint16_t port) {
 
     // Simulate old (unregistered) memory details
     GenericRequestHeader request2{};
-    server->RecvAny(&clientAddress, &messageId, &request2, sizeof(request2), &err);
+    tries = 0;
+    do {
+        server->RecvAny(&clientAddress, &messageId, &request2, sizeof(request2), &err);
+    } while (err == IOErrorTemplates::kTimeout && tries++ < 2);
     M_AssertEq(nullptr, err, "server->RecvAny(3)");
     M_AssertEq(3, messageId);
     server->RdmaWrite(clientAddress, (MemoryRegionDetails*)&request.substream, rdmaBuffer.get(), kRdmaSize, &err);