diff --git a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.cpp b/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.cpp
index 1134ee0c65ecfe30e314c743ac6c22d4f528130d..937ad1edda5f7a703134904e2c08ea09a12207db 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.cpp
+++ b/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.cpp
@@ -21,9 +21,9 @@ void findEdgeNodesXY(int level, SPtr<Parameter> parameter)
     int indexInSendBuffer;
     for (uint i = 0; i < (unsigned int)(parameter->getNumberOfProcessNeighborsX(level, "recv")); i++) {
         for (int j = 0; j < parameter->getParH(level)->recvProcessNeighborX[i].numberOfNodes; j++) {
-            int index = parameter->getParH(level)->recvProcessNeighborX[i].index[j];
+            int nodeIndex = parameter->getParH(level)->recvProcessNeighborX[i].index[j];
             bool foundIndex =
-                findIndexInSendNodesXY(level, index, indexOfProcessNeighborSend, indexInSendBuffer, parameter);
+                findIndexInSendNodes(nodeIndex, parameter->getParH(level)->sendProcessNeighborY, indexOfProcessNeighborSend,  indexInSendBuffer);
             if (foundIndex) {
                 parameter->getParH(level)->edgeNodesXtoY.emplace_back(i, j, indexOfProcessNeighborSend,
                                                                       indexInSendBuffer);
@@ -32,30 +32,15 @@ void findEdgeNodesXY(int level, SPtr<Parameter> parameter)
     }
 }
 
-bool findIndexInSendNodesXY(int level, int index, int &indexOfProcessNeighborSend, int &indexInSendBuffer,
-                            SPtr<Parameter> parameter)
-{
-    for (uint k = 0; k < (unsigned int)(parameter->getNumberOfProcessNeighborsY(level, "send")); k++) {
-        for (int l = 0; l < parameter->getParH(level)->sendProcessNeighborY[k].numberOfNodes; l++) {
-            if (parameter->getParH(level)->sendProcessNeighborY[k].index[l] == index) {
-                indexOfProcessNeighborSend = k;
-                indexInSendBuffer = l;
-                return true;
-            }
-        }
-    }
-    return false;
-}
-
 void findEdgeNodesXZ(int level, SPtr<Parameter> parameter)
 {
     int indexOfProcessNeighborSend;
     int indexInSendBuffer;
     for (uint i = 0; i < (unsigned int)(parameter->getNumberOfProcessNeighborsX(level, "recv")); i++) {
         for (int j = 0; j < parameter->getParH(level)->recvProcessNeighborX[i].numberOfNodes; j++) {
-            int index = parameter->getParH(level)->recvProcessNeighborX[i].index[j];
+            int nodeIndex = parameter->getParH(level)->recvProcessNeighborX[i].index[j];
             bool foundIndex =
-                findIndexInSendNodesXZ(level, index, indexOfProcessNeighborSend, indexInSendBuffer, parameter);
+                findIndexInSendNodes(nodeIndex, parameter->getParH(level)->sendProcessNeighborZ, indexOfProcessNeighborSend,  indexInSendBuffer);
             if (foundIndex) {
                 parameter->getParH(level)->edgeNodesXtoZ.emplace_back(i, j, indexOfProcessNeighborSend,
                                                                       indexInSendBuffer);
@@ -64,30 +49,15 @@ void findEdgeNodesXZ(int level, SPtr<Parameter> parameter)
     }
 }
 
-bool findIndexInSendNodesXZ(int level, int index, int &indexOfProcessNeighborSend, int &indexInSendBuffer,
-                            SPtr<Parameter> parameter)
-{
-    for (uint k = 0; k < (unsigned int)(parameter->getNumberOfProcessNeighborsZ(level, "send")); k++) {
-        for (int l = 0; l < parameter->getParH(level)->sendProcessNeighborZ[k].numberOfNodes; l++) {
-            if (parameter->getParH(level)->sendProcessNeighborZ[k].index[l] == index) {
-                indexOfProcessNeighborSend = k;
-                indexInSendBuffer = l;
-                return true;
-            }
-        }
-    }
-    return false;
-}
-
 void findEdgeNodesYZ(int level, SPtr<Parameter> parameter)
 {
     int indexOfProcessNeighborSend;
     int indexInSendBuffer;
     for (uint i = 0; i < (unsigned int)(parameter->getNumberOfProcessNeighborsY(level, "recv")); i++) {
         for (int j = 0; j < parameter->getParH(level)->recvProcessNeighborY[i].numberOfNodes; j++) {
-            int index = parameter->getParH(level)->recvProcessNeighborY[i].index[j];
+            int nodeIndex = parameter->getParH(level)->recvProcessNeighborY[i].index[j];
             bool foundIndex =
-                findIndexInSendNodesYZ(level, index, indexOfProcessNeighborSend, indexInSendBuffer, parameter);
+                findIndexInSendNodes(nodeIndex, parameter->getParH(level)->sendProcessNeighborZ,indexOfProcessNeighborSend,  indexInSendBuffer);
             if (foundIndex) {
                 parameter->getParH(level)->edgeNodesYtoZ.emplace_back(i, j, indexOfProcessNeighborSend,
                                                                       indexInSendBuffer);
@@ -96,18 +66,18 @@ void findEdgeNodesYZ(int level, SPtr<Parameter> parameter)
     }
 }
 
-bool findIndexInSendNodesYZ(int level, int index, int &indexOfProcessNeighborSend, int &indexInSendBuffer,
-                            SPtr<Parameter> parameter)
+bool findIndexInSendNodes(int nodeIndex, const std::vector<ProcessNeighbor27>& sendProcessNeighbor, int &indexOfProcessNeighborSend, int &indexInSendBuffer)
 {
-    for (uint k = 0; k < (unsigned int)(parameter->getNumberOfProcessNeighborsZ(level, "send")); k++) {
-        for (int l = 0; l < parameter->getParH(level)->sendProcessNeighborZ[k].numberOfNodes; l++) {
-            if (parameter->getParH(level)->sendProcessNeighborZ[k].index[l] == index) {
-                indexOfProcessNeighborSend = k;
-                indexInSendBuffer = l;
+    for (uint neighbor = 0; neighbor < (unsigned int)sendProcessNeighbor.size(); neighbor++) {
+        for (int node = 0; node < sendProcessNeighbor[neighbor].numberOfNodes; node++) {
+            if (sendProcessNeighbor[neighbor].index[node] == nodeIndex) {
+                indexOfProcessNeighborSend = neighbor;
+                indexInSendBuffer = node;
                 return true;
             }
         }
     }
     return false;
 }
+
 } // namespace
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.h b/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.h
index 6867cb7eb0dba9aa39409d9cc21b1c6a18344f5d..9c0477f5f58ce99cc532ad448085afad0f868a46 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.h
+++ b/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.h
@@ -37,29 +37,27 @@
 #ifndef GPU_EDGENODES_H
 #define GPU_EDGENODES_H
 
+#include <vector>
+
 #include "Core/DataTypes.h"
 #include "basics/PointerDefinitions.h"
+#include "gpu/VirtualFluids_GPU/LBM/LB.h"
 
 class Parameter;
 
 namespace vf::gpu
 {
-
+//! \brief Find nodes which are part of communication in multiple coordinate directions
 void findEdgeNodesCommMultiGPU(SPtr<Parameter> parameter);
-}
+} // namespace vf::gpu
 
 // anonymous namespace
 namespace
 {
+static bool findIndexInSendNodes(int nodeIndex, const std::vector<ProcessNeighbor27>& sendProcessNeighbor, int &indexOfProcessNeighborSend, int &indexInSendBuffer);
 static void findEdgeNodesXY(int level, SPtr<Parameter> parameter);
-static bool findIndexInSendNodesXY(int level, int index, int &indexOfProcessNeighborSend, int &indexInSendBuffer,
-                                   SPtr<Parameter> parameter);
 static void findEdgeNodesXZ(int level, SPtr<Parameter> parameter);
-static bool findIndexInSendNodesXZ(int level, int index, int &indexOfProcessNeighborSend, int &indexInSendBuffer,
-                                   SPtr<Parameter> parameter);
 static void findEdgeNodesYZ(int level, SPtr<Parameter> parameter);
-static bool findIndexInSendNodesYZ(int level, int index, int &indexOfProcessNeighborSend, int &indexInSendBuffer,
-                                   SPtr<Parameter> parameter);
 } // namespace
 
 #endif
\ No newline at end of file