diff --git a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp b/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp
index 36cedd63677f13bb82bfd8d8f49b2656c324ce9b..ed4470e79e913502bf219e649b4cc08ad6734113 100644
--- a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp
+++ b/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp
@@ -3,6 +3,7 @@
 #include <filesystem>
 
 #include "ExchangeData27.h"
+#include "gpu/VirtualFluids_GPU/LBM/LB.h"
 
 #include <basics/config/ConfigurationFile.h>
 
@@ -30,7 +31,10 @@ protected:
     int level    = 0;
     int numNodes = 10;
     std::vector<real> recvFs;
-    
+    std::vector<real> sendFs;    
+    std::vector<ProcessNeighbor27> sendProcessNeighborHost;
+    std::vector<ProcessNeighbor27> recvProcessNeighborHost;
+
     void SetUp() override
     {
         para = initParameterClass();
@@ -43,35 +47,64 @@ protected:
         para->getParH(level)->edgeNodesXtoZ.emplace_back(0, 7, 0, 8);
         para->getParH(level)->edgeNodesXtoZ.emplace_back(0, 7, 0, 8);
         para->getParH(level)->edgeNodesXtoZ.emplace_back(0, 7, 0, 8);
+
     }
 
-    SPtr<std::vector<ProcessNeighbor27>> setUpRecvProcessNeighbors(int numberOfNodesInRecv){
-        SPtr<std::vector<ProcessNeighbor27>>recvProcessNeighborHost=std::make_shared<std::vector<ProcessNeighbor27>>(1);
+   void setUpRecvProcessNeighbors(int numberOfNodesInRecv)
+    {
         recvFs.resize(numberOfNodesInRecv);
         std::fill(recvFs.begin(), recvFs.end(), 0.5); // 0.5s should not be copied
         for (LBMSimulationParameter::EdgeNodePositions edgeNode : para->getParH(level)->edgeNodesXtoZ) {
+            if(edgeNode.indexInRecvBuffer>numberOfNodesInRecv){
+                continue;
+            }
             recvFs[edgeNode.indexInRecvBuffer] = 0.1; // 0.1s should be copied
         }
         setUpFsByCopyingF0(recvFs, numberOfNodesInRecv);
-        (*recvProcessNeighborHost)[0].f[0]          = recvFs.data();
-        (*recvProcessNeighborHost)[0].numberOfNodes = numberOfNodesInRecv;
-        return recvProcessNeighborHost;
-    }   
 
+        recvProcessNeighborHost.resize(1);
+        recvProcessNeighborHost[0].f[0]          = recvFs.data();
+        recvProcessNeighborHost[0].numberOfNodes = numberOfNodesInRecv;
+    }
+
+    void setUpSendProcessNeighbors(int numberOfNodesInSend)
+    {
+        sendFs.resize(27 * numberOfNodesInSend);
+        std::fill(sendFs.begin(), sendFs.end(), 0.0);
+
+        sendProcessNeighborHost.resize(1);
+        sendProcessNeighborHost[0].f[0]          = sendFs.data();
+        sendProcessNeighborHost[0].numberOfNodes = numberOfNodesInSend;
+    }
 };
 
 TEST_F(ExchangeData27Test_CopyEdgeNodesXZTest, copyEdgeNodes_XZ_CommunicationAfterFtoC_recvVectorFullSize)
 {
     int numNodesAfterFtoC = 5; // indexInSend < 5 --> mode is in AfterFToC
+    setUpRecvProcessNeighbors(numNodes);
+    setUpSendProcessNeighbors(numNodesAfterFtoC);
 
-    // recvProcessNeighborHost
-    SPtr<std::vector<ProcessNeighbor27>>recvProcessNeighborHost = setUpRecvProcessNeighbors(numNodes);
+    // expected
+    std::vector<real> expectedFs(numNodesAfterFtoC, 0.0);
+    expectedFs[1] = 0.1;
+    expectedFs[3] = 0.1;
+    setUpFsByCopyingF0(expectedFs, numNodesAfterFtoC);
 
-    // sendProcessNeighborHost
-    std::vector<ProcessNeighbor27> sendProcessNeighborHost(1);
-    std::vector<real> sendFs(27 * numNodesAfterFtoC, 0.0);
-    sendProcessNeighborHost[0].f[0]          = sendFs.data();
-    sendProcessNeighborHost[0].numberOfNodes = numNodesAfterFtoC;
+    // act
+    copyEdgeNodes(para->getParH(level)->edgeNodesXtoZ, recvProcessNeighborHost, sendProcessNeighborHost);
+
+    // convert result to std::vector
+    std::vector<real> result;
+    result.assign(sendProcessNeighborHost[0].f[0], sendProcessNeighborHost[0].f[0] + 27 * numNodesAfterFtoC);
+
+    EXPECT_THAT(result, testing::Eq(expectedFs));
+}
+
+TEST_F(ExchangeData27Test_CopyEdgeNodesXZTest, copyEdgeNodes_XZ_CommunicationAfterFtoC_recvVectorShort)
+{
+    int numNodesAfterFtoC = 5; // indexInSend < 5 --> mode is in AfterFToC
+    setUpRecvProcessNeighbors(numNodesAfterFtoC);
+    setUpSendProcessNeighbors(numNodesAfterFtoC);
 
     // expected
     std::vector<real> expectedFs(numNodesAfterFtoC, 0.0);
@@ -80,7 +113,7 @@ TEST_F(ExchangeData27Test_CopyEdgeNodesXZTest, copyEdgeNodes_XZ_CommunicationAft
     setUpFsByCopyingF0(expectedFs, numNodesAfterFtoC);
 
     // act
-    copyEdgeNodes(para->getParH(level)->edgeNodesXtoZ, *recvProcessNeighborHost, sendProcessNeighborHost);
+    copyEdgeNodes(para->getParH(level)->edgeNodesXtoZ, recvProcessNeighborHost, sendProcessNeighborHost);
 
     // convert result to std::vector
     std::vector<real> result;
@@ -91,14 +124,8 @@ TEST_F(ExchangeData27Test_CopyEdgeNodesXZTest, copyEdgeNodes_XZ_CommunicationAft
 
 TEST_F(ExchangeData27Test_CopyEdgeNodesXZTest, copyEdgeNodes_XZ_CommunicateAll)
 {
-    // recvProcessNeighborHost
-    SPtr<std::vector<ProcessNeighbor27>>recvProcessNeighborHost = setUpRecvProcessNeighbors(numNodes);
-
-    // sendProcessNeighborHost
-    std::vector<ProcessNeighbor27> sendProcessNeighborHost(1);
-    std::vector<real> sendFs(27 * numNodes, 0.0);
-    sendProcessNeighborHost[0].f[0]          = sendFs.data();
-    sendProcessNeighborHost[0].numberOfNodes = numNodes;
+    setUpRecvProcessNeighbors(numNodes);
+    setUpSendProcessNeighbors(numNodes);
 
     // expected
     std::vector<real> expectedFs(numNodes, 0.0);
@@ -109,7 +136,7 @@ TEST_F(ExchangeData27Test_CopyEdgeNodesXZTest, copyEdgeNodes_XZ_CommunicateAll)
     setUpFsByCopyingF0(expectedFs, numNodes);
 
     // act
-    copyEdgeNodes(para->getParH(level)->edgeNodesXtoZ, *recvProcessNeighborHost, sendProcessNeighborHost);
+    copyEdgeNodes(para->getParH(level)->edgeNodesXtoZ, recvProcessNeighborHost, sendProcessNeighborHost);
 
     // convert result to std::vector
     std::vector<real> result;