diff --git a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.cpp b/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.cpp
index 06a408fd659f772ee5a6482dc263d9b8e39e2da7..31019a9cb2b7e457e3c395534f1c219c302b2e3a 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.cpp
+++ b/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.cpp
@@ -1,5 +1,4 @@
 #include "EdgeNodeFinder.h"
-#include "Parameter.h"
 
 namespace vf::gpu
 {
@@ -15,52 +14,38 @@ void findEdgeNodesCommMultiGPU(SPtr<Parameter> parameter)
 
 namespace
 {
+
 void findEdgeNodesXY(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 nodeIndex = parameter->getParH(level)->recvProcessNeighborX[i].index[j];
-            bool foundIndex = findIndexInSendNodes(nodeIndex, parameter->getParH(level)->sendProcessNeighborY,
-                                                   indexOfProcessNeighborSend, indexInSendBuffer);
-            if (foundIndex) {
-                parameter->getParH(level)->edgeNodesXtoY.emplace_back(i, j, indexOfProcessNeighborSend,
-                                                                      indexInSendBuffer);
-            }
-        }
-    }
+    findEdgeNodes(parameter->getParH(level)->recvProcessNeighborX, parameter->getParH(level)->sendProcessNeighborY,
+                  parameter->getParH(level)->edgeNodesXtoY);
 }
 
 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 nodeIndex = parameter->getParH(level)->recvProcessNeighborX[i].index[j];
-            bool foundIndex = findIndexInSendNodes(nodeIndex, parameter->getParH(level)->sendProcessNeighborZ,
-                                                   indexOfProcessNeighborSend, indexInSendBuffer);
-            if (foundIndex) {
-                parameter->getParH(level)->edgeNodesXtoZ.emplace_back(i, j, indexOfProcessNeighborSend,
-                                                                      indexInSendBuffer);
-            }
-        }
-    }
+    findEdgeNodes(parameter->getParH(level)->recvProcessNeighborX, parameter->getParH(level)->sendProcessNeighborZ,
+                  parameter->getParH(level)->edgeNodesXtoZ);
 }
 
 void findEdgeNodesYZ(int level, SPtr<Parameter> parameter)
+{
+    findEdgeNodes(parameter->getParH(level)->recvProcessNeighborY, parameter->getParH(level)->sendProcessNeighborZ,
+                  parameter->getParH(level)->edgeNodesYtoZ);
+}
+
+void findEdgeNodes(const std::vector<ProcessNeighbor27> &recvProcessNeighbor,
+                   const std::vector<ProcessNeighbor27> &sendProcessNeighbor,
+                   std::vector<LBMSimulationParameter::EdgeNodePositions> &edgeNodes)
 {
     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 nodeIndex = parameter->getParH(level)->recvProcessNeighborY[i].index[j];
-            bool foundIndex = findIndexInSendNodes(nodeIndex, parameter->getParH(level)->sendProcessNeighborZ,
-                                                   indexOfProcessNeighborSend, indexInSendBuffer);
+    for (uint i = 0; i < (unsigned int)(recvProcessNeighbor.size()); i++) {
+        for (int j = 0; j < recvProcessNeighbor[i].numberOfNodes; j++) {
+            int nodeIndex = recvProcessNeighbor[i].index[j];
+            bool foundIndex =
+                findIndexInSendNodes(nodeIndex, sendProcessNeighbor, indexOfProcessNeighborSend, indexInSendBuffer);
             if (foundIndex) {
-                parameter->getParH(level)->edgeNodesYtoZ.emplace_back(i, j, indexOfProcessNeighborSend,
-                                                                      indexInSendBuffer);
+                edgeNodes.emplace_back(i, j, indexOfProcessNeighborSend, indexInSendBuffer);
             }
         }
     }
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.h b/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.h
index 831f4efcc70c6decdc21ac77269378c647403283..b91321957a87ad446398e5adef9c0c2da44431fb 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.h
+++ b/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.h
@@ -42,8 +42,7 @@
 #include "Core/DataTypes.h"
 #include "basics/PointerDefinitions.h"
 #include "gpu/VirtualFluids_GPU/LBM/LB.h"
-
-class Parameter;
+#include "Parameter.h"
 
 namespace vf::gpu
 {
@@ -54,8 +53,10 @@ void findEdgeNodesCommMultiGPU(SPtr<Parameter> parameter);
 // anonymous namespace
 namespace
 {
-bool findIndexInSendNodes(int nodeIndex, const std::vector<ProcessNeighbor27> &sendProcessNeighbor,
-                          int &indexOfProcessNeighborSend, int &indexInSendBuffer);
+void findEdgeNodes(const std::vector<ProcessNeighbor27> &recvProcessNeighbor,
+                   const std::vector<ProcessNeighbor27> &sendProcessNeighbor, 
+                   std::vector<LBMSimulationParameter::EdgeNodePositions> &edgeNodes);
+bool findIndexInSendNodes(int nodeIndex, const std::vector<ProcessNeighbor27>& sendProcessNeighbor, int &indexOfProcessNeighborSend, int &indexInSendBuffer);
 void findEdgeNodesXY(int level, SPtr<Parameter> parameter);
 void findEdgeNodesXZ(int level, SPtr<Parameter> parameter);
 void findEdgeNodesYZ(int level, SPtr<Parameter> parameter);
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinderTest.cpp b/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinderTest.cpp
index ac515474c5704cdf1d56b282415b14d50d080376..8c680d1c2cb9334cec101ab2469ad495360d5dd8 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinderTest.cpp
+++ b/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinderTest.cpp
@@ -2,7 +2,6 @@
 
 #include <filesystem>
 
-#include "Parameter.h"
 #include "basics/config/ConfigurationFile.h"
 #include "EdgeNodeFinder.h"