diff --git a/src/gpu/GridGenerator/grid/Grid.h b/src/gpu/GridGenerator/grid/Grid.h
index 338168e0f8250142f5e31582557ff2fc2ef5a860..21cfea189e58067fabc753d27fb13803abdcb9aa 100644
--- a/src/gpu/GridGenerator/grid/Grid.h
+++ b/src/gpu/GridGenerator/grid/Grid.h
@@ -51,10 +51,6 @@ public:
     HOSTDEVICE virtual void setFieldEntry(uint matrixIndex, char type) = 0;
 
     CUDA_HOST virtual void getGridInterfaceIndices(uint* iCellCfc, uint* iCellCff, uint* iCellFcc, uint* iCellFcf) const = 0;
-    CUDA_HOST virtual void getGridInterfaceIndicesBorderBulkFC(uint *iCellFccBorder, uint *&iCellFccBulk,
-                                                                uint *iCellFcfBorder, uint *&iCellFcfBulk,
-                                                                uint &intFCBorderKfc, uint &intFCBulkKfc,
-                                                                int level) const = 0;
     CUDA_HOST virtual bool isSparseIndexInFluidNodeIndicesBorder(uint &sparseIndex) const = 0;
 
     CUDA_HOST virtual int *getNeighborsX() const = 0;
@@ -152,7 +148,6 @@ public:
     virtual void getFluidNodeIndices(uint *fluidNodeIndices) const = 0;
 
     virtual void findFluidNodeIndicesBorder() = 0;
-
     virtual uint getNumberOfFluidNodesBorder() const = 0;
     virtual void getFluidNodeIndicesBorder(uint *fluidNodeIndicesBorder) const = 0;
 };
diff --git a/src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h b/src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h
index 97d36c700a87be7f168efe2d320902bf317a6424..9ff99fad4e2577536f50ce112acdc0e2e6bf40d5 100644
--- a/src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h
+++ b/src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h
@@ -56,9 +56,6 @@ public:
     virtual uint getNumberOfNodesCF(int level) = 0;
     virtual uint getNumberOfNodesFC(int level) = 0;
     virtual void getGridInterfaceIndices(uint* iCellCfc, uint* iCellCff, uint* iCellFcc, uint* iCellFcf, int level) const = 0;
-    virtual void getGridInterfaceIndicesBorderBulkFC(uint *iCellFccBorder, uint *&iCellFccBulk, uint *iCellFcfBorder,
-                                                      uint *&iCellFcfBulk, uint &intFCBorderKfc, uint &intFCBulkKfc,
-                                                      int level) const = 0;
 
     virtual void getOffsetFC(real* xOffCf, real* yOffCf, real* zOffCf, int level) = 0;
     virtual void getOffsetCF(real* xOffFc, real* yOffFc, real* zOffFc, int level) = 0;
diff --git a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
index b269dd33e5ec00218eb6943b2edb57e246373bf4..13d9d22134ee1731e317a76c3e5d0a561c580547 100644
--- a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
+++ b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
@@ -207,14 +207,6 @@ void LevelGridBuilder::getGridInterfaceIndices(uint* iCellCfc, uint* iCellCff, u
     this->grids[level]->getGridInterfaceIndices(iCellCfc, iCellCff, iCellFcc, iCellFcf);
 }
 
-void LevelGridBuilder::getGridInterfaceIndicesBorderBulkFC(uint *iCellFccBorder, uint *&iCellFccBulk, uint *iCellFcfBorder, uint *&iCellFcfBulk,
-                                                            uint &intFCBorderKfc, uint &intFCBulkKfc, int level) const
-{
-    this->grids[level]->getGridInterfaceIndicesBorderBulkFC(iCellFccBorder, iCellFccBulk,
-                                                             iCellFcfBorder, iCellFcfBulk,
-                                                             intFCBorderKfc, intFCBulkKfc, level);
-}
-
 void LevelGridBuilder::getOffsetFC(real * xOffFC, real * yOffFC, real * zOffFC, int level)
 {
     for (uint i = 0; i < getNumberOfNodesFC(level); i++)
diff --git a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
index 6b84863c0c50c610acc06056f1b977f6cf4acc85..f212f2c02ee21ab8d1f944863b6e1b59f0615f47 100644
--- a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
+++ b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
@@ -137,10 +137,6 @@ public:
     GRIDGENERATOR_EXPORT uint getNumberOfNodesFC(int level) override;
 
     GRIDGENERATOR_EXPORT void getGridInterfaceIndices(uint* iCellCfc, uint* iCellCff, uint* iCellFcc, uint* iCellFcf, int level) const override;
-    GRIDGENERATOR_EXPORT void getGridInterfaceIndicesBorderBulkFC(uint *iCellFccBorder, uint *&iCellFccBulk,
-                                                                   uint *iCellFcfBorder, uint *&iCellFcfBulk,
-                                                                   uint &intFCBorderKfc, uint &intFCBulkKfc,
-                                                                  int level) const override;
 
     GRIDGENERATOR_EXPORT void getOffsetFC(real* xOffCf, real* yOffCf, real* zOffCf, int level) override;
     GRIDGENERATOR_EXPORT void getOffsetCF(real* xOffFc, real* yOffFc, real* zOffFc, int level) override;
diff --git a/src/gpu/GridGenerator/grid/GridImp.cu b/src/gpu/GridGenerator/grid/GridImp.cu
index adf6781d93a9520e1a2d09af1ee079ab87541c2b..ea74df26ba96eadf15121cc393665f24b24a6d72 100644
--- a/src/gpu/GridGenerator/grid/GridImp.cu
+++ b/src/gpu/GridGenerator/grid/GridImp.cu
@@ -1943,43 +1943,6 @@ void GridImp::getGridInterface(uint* gridInterfaceList, const uint* oldGridInter
         gridInterfaceList[i] = oldGridInterfaceList[i] + 1; // + 1 for numbering shift between GridGenerator and VF_GPU
 }
 
-void GridImp::getGridInterfaceIndicesBorderBulkFC(uint *iCellFccBorder, uint *&iCellFccBulk, uint *iCellFcfBorder,
-                                                   uint *&iCellFcfBulk, uint &intFCBorderKfc, uint &intFCBulkKfc,
-                                                   int level) const
-{
-    // reorder the array of FCC/FCF indices and return pointers and sizes of the new subarrays
-
-    uint *iCellFccAll = iCellFccBorder;
-    uint *iCellFcfAll = iCellFcfBorder;
-    std::vector<uint> iCellFccBorderVector;
-    std::vector<uint> iCellFccBulkVector;
-    std::vector<uint> iCellFcfBorderVector;
-    std::vector<uint> iCellFcfBulkVector;
-
-    for (uint i = 0; i < this->gridInterface->fc.numberOfEntries; i++)
-        if (isSparseIndexInFluidNodeIndicesBorder(iCellFccAll[i])) {
-            iCellFccBorderVector.push_back(iCellFccAll[i]);
-            iCellFcfBorderVector.push_back(iCellFcfAll[i]);
-        } else {
-            iCellFccBulkVector.push_back(iCellFccAll[i]);
-            iCellFcfBulkVector.push_back(iCellFcfAll[i]);
-        }
-
-    intFCBorderKfc = (uint)iCellFccBorderVector.size();
-    intFCBulkKfc   = (uint)iCellFccBulkVector.size();
-    iCellFccBulk   = iCellFccBorder + intFCBorderKfc; 
-    iCellFcfBulk   = iCellFcfBorder + intFCBorderKfc; 
-
-    for (uint i = 0; i < (uint)iCellFccBorderVector.size(); i++) {
-        iCellFccBorder[i] = iCellFccBorderVector[i];
-        iCellFcfBorder[i] = iCellFcfBorderVector[i];
-    }
-    for (uint i = 0; i < (uint)iCellFccBulkVector.size(); i++) {
-        iCellFccBulk[i] = iCellFccBulkVector[i];
-        iCellFcfBulk[i] = iCellFcfBulkVector[i];
-    }
-}
-
 bool GridImp::isSparseIndexInFluidNodeIndicesBorder(uint &sparseIndex) const
 {
     return std::find(this->fluidNodeIndicesBorder.begin(), this->fluidNodeIndicesBorder.end(), sparseIndex) !=
diff --git a/src/gpu/GridGenerator/grid/GridImp.h b/src/gpu/GridGenerator/grid/GridImp.h
index 50fa16b8fd9996b535de796a73433380c19a0087..09f278a4d41bba346fd9ca3b38d028ef5d9fca4d 100644
--- a/src/gpu/GridGenerator/grid/GridImp.h
+++ b/src/gpu/GridGenerator/grid/GridImp.h
@@ -219,9 +219,6 @@ public:
     HOSTDEVICE uint getNumberOfNodesFC() const override;
     CUDA_HOST void getGridInterfaceIndices(uint* iCellCfc, uint* iCellCff, uint* iCellFcc, uint* iCellFcf) const override;
     CUDA_HOST static void getGridInterface(uint* gridInterfaceList, const uint* oldGridInterfaceList, uint size);
-    CUDA_HOST void getGridInterfaceIndicesBorderBulkFC(uint *iCellFccBorder, uint *&iCellFccBulk, uint *iCellFcfBorder,
-                                                        uint *&iCellFcfBulk, uint &intFCBorderKfc, uint &intFCBulkKfc,
-                                                       int level) const override;
     CUDA_HOST bool isSparseIndexInFluidNodeIndicesBorder(uint &sparseIndex) const override;
 
     int* getNeighborsX() const override;
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.cpp b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.cpp
index 07bdb361412b55713a3e05bad1533fcc5fa6166d..60cef53ba62ab2427c19fe1c9c6d3b3cc8a9d43b 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.cpp
+++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.cpp
@@ -35,6 +35,7 @@ void IndexRearrangementForStreams::initCommunicationArraysForCommAfterFinetoCoar
                           para->getParH(level)->recvProcessNeighborX[j].rankNeighbor,
                           sendIndicesForCommAfterFtoCPositions.data(), (int)sendIndicesForCommAfterFtoCPositions.size(),
                           para->getParH(level)->sendProcessNeighborX[j].rankNeighbor);
+    
     // resize receiving vector to correct size
     auto it = std::unique(recvIndicesForCommAfterFtoCPositions.begin(), recvIndicesForCommAfterFtoCPositions.end());
     recvIndicesForCommAfterFtoCPositions.erase(std::prev(it, 1), recvIndicesForCommAfterFtoCPositions.end());
@@ -69,6 +70,7 @@ void IndexRearrangementForStreams::initCommunicationArraysForCommAfterFinetoCoar
                           para->getParH(level)->recvProcessNeighborY[j].rankNeighbor,
                           sendIndicesForCommAfterFtoCPositions.data(), (int)sendIndicesForCommAfterFtoCPositions.size(),
                           para->getParH(level)->sendProcessNeighborY[j].rankNeighbor);
+    
     // resize receiving vector to correct size
     auto it = std::unique(recvIndicesForCommAfterFtoCPositions.begin(), recvIndicesForCommAfterFtoCPositions.end());
     recvIndicesForCommAfterFtoCPositions.erase(std::prev(it, 1), recvIndicesForCommAfterFtoCPositions.end());
@@ -104,6 +106,7 @@ void IndexRearrangementForStreams::initCommunicationArraysForCommAfterFinetoCoar
                           para->getParH(level)->recvProcessNeighborZ[j].rankNeighbor,
                           sendIndicesForCommAfterFtoCPositions.data(), (int)sendIndicesForCommAfterFtoCPositions.size(),
                           para->getParH(level)->sendProcessNeighborZ[j].rankNeighbor);
+    
     // resize receiving vector to correct size
     auto it = std::unique(recvIndicesForCommAfterFtoCPositions.begin(), recvIndicesForCommAfterFtoCPositions.end());
     recvIndicesForCommAfterFtoCPositions.erase(std::prev(it, 1), recvIndicesForCommAfterFtoCPositions.end());
@@ -423,15 +426,15 @@ void IndexRearrangementForStreams::splitCoarseToFineIntoBorderAndBulk(const uint
 
 void IndexRearrangementForStreams::getGridInterfaceIndicesBorderBulkCF(int level) 
 { 
-    // this function reorders the array of CFC/CFF indices and sets pointers and sizes of the new subarrays
+    // this function reorders the arrays of CFC/CFF indices and sets pointers and sizes of the new subarrays
      
     // create some local variables for better readability
-    uint *iCellCfcAll = para->getParH(level)->intCF.ICellCFC;
+    uint *iCellCfcAll    = para->getParH(level)->intCF.ICellCFC;
     uint *iCellCffAll    = para->getParH(level)->intCF.ICellCFF;
     uint *neighborX_SP   = this->para->getParH(level)->neighborX_SP;
     uint *neighborY_SP   = this->para->getParH(level)->neighborY_SP;
     uint *neighborZ_SP   = this->para->getParH(level)->neighborZ_SP;
-    auto grid = this->builder->getGrid((uint) level);   
+    auto grid            = this->builder->getGrid((uint)level);
 
     std::vector<uint> iCellCfcBorderVector;
     std::vector<uint> iCellCfcBulkVector;
@@ -462,11 +465,11 @@ void IndexRearrangementForStreams::getGridInterfaceIndicesBorderBulkCF(int level
 
     // set new sizes and pointers
     para->getParH(level)->intCFBorder.ICellCFC = iCellCfcAll;
-    para->getParH(level)->intCFBorder.ICellCFC  = iCellCffAll;
-    para->getParH(level)->intCFBorder.kCF = (uint)iCellCfcBorderVector.size();
-    para->getParH(level)->intCFBulk.kCF = (uint)iCellCfcBulkVector.size();
-    para->getParH(level)->intCFBulk.ICellCFC = iCellCfcAll + para->getParH(level)->intCFBorder.kCF;
-    para->getParH(level)->intCFBulk.ICellCFF = iCellCffAll + para->getParH(level)->intCFBorder.kCF;
+    para->getParH(level)->intCFBorder.ICellCFC = iCellCffAll;
+    para->getParH(level)->intCFBorder.kCF      = (uint)iCellCfcBorderVector.size();
+    para->getParH(level)->intCFBulk.kCF        = (uint)iCellCfcBulkVector.size();
+    para->getParH(level)->intCFBulk.ICellCFC   = iCellCfcAll + para->getParH(level)->intCFBorder.kCF;
+    para->getParH(level)->intCFBulk.ICellCFF   = iCellCffAll + para->getParH(level)->intCFBorder.kCF;
 
     // copy the created vectors to the memory addresses of the old arrays
     for (uint i = 0; i < (uint)iCellCfcBorderVector.size(); i++) {
@@ -481,13 +484,7 @@ void IndexRearrangementForStreams::getGridInterfaceIndicesBorderBulkCF(int level
 
 void IndexRearrangementForStreams::splitFineToCoarseIntoBorderAndBulk(const uint &level)
 {
-    para->getParH(level)->intFCBorder.ICellFCC = para->getParH(level)->intFC.ICellFCC;
-    para->getParH(level)->intFCBorder.ICellFCF = para->getParH(level)->intFC.ICellFCF;
-
-    builder->getGridInterfaceIndicesBorderBulkFC(
-        para->getParH(level)->intFCBorder.ICellFCC, para->getParH(level)->intFCBulk.ICellFCC,
-        para->getParH(level)->intFCBorder.ICellFCF, para->getParH(level)->intFCBulk.ICellFCF,
-        para->getParH(level)->intFCBorder.kFC, para->getParH(level)->intFCBulk.kFC, level);
+    this->getGridInterfaceIndicesBorderBulkFC(level);
 
     para->getParD(level)->intFCBorder.kFC      = para->getParH(level)->intFCBorder.kFC;
     para->getParD(level)->intFCBulk.kFC        = para->getParH(level)->intFCBulk.kFC;
@@ -499,3 +496,44 @@ void IndexRearrangementForStreams::splitFineToCoarseIntoBorderAndBulk(const uint
         para->getParD(level)->intFCBorder.ICellFCF + para->getParD(level)->intFCBorder.kFC;
 }
 
+void IndexRearrangementForStreams::getGridInterfaceIndicesBorderBulkFC(int level) {
+    // this function reorders the arrays of FCC/FCF indices and return pointers and sizes of the new subarrays
+
+    // create some local variables for better readability
+    uint *iCellFccAll = para->getParH(level)->intFC.ICellFCC;
+    uint *iCellFcfAll = para->getParH(level)->intFC.ICellFCF;
+    auto grid         = this->builder->getGrid((uint)level); 
+
+    std::vector<uint> iCellFccBorderVector;
+    std::vector<uint> iCellFccBulkVector;
+    std::vector<uint> iCellFcfBorderVector;
+    std::vector<uint> iCellFcfBulkVector;
+
+    // fill border and bulk vectors with iCellFCs
+    for (uint i = 0; i < para->getParH(level)->intFC.kFC; i++)
+        if (grid->isSparseIndexInFluidNodeIndicesBorder(iCellFccAll[i])) {
+            iCellFccBorderVector.push_back(iCellFccAll[i]);
+            iCellFcfBorderVector.push_back(iCellFcfAll[i]);
+        } else {
+            iCellFccBulkVector.push_back(iCellFccAll[i]);
+            iCellFcfBulkVector.push_back(iCellFcfAll[i]);
+        }
+
+    // set new sizes and pointers
+    para->getParH(level)->intFCBorder.ICellFCC = iCellFccAll;
+    para->getParH(level)->intFCBorder.ICellFCF = iCellFcfAll;
+    para->getParH(level)->intFCBorder.kFC      = (uint)iCellFccBorderVector.size();
+    para->getParH(level)->intFCBulk.kFC        = (uint)iCellFccBulkVector.size();
+    para->getParH(level)->intFCBulk.ICellFCC   = iCellFccAll + para->getParH(level)->intFCBorder.kFC;
+    para->getParH(level)->intFCBulk.ICellFCF   = iCellFcfAll + para->getParH(level)->intFCBorder.kFC;
+
+    // copy the created vectors to the memory addresses of the old arrays
+    for (uint i = 0; i < (uint)iCellFccBorderVector.size(); i++) {
+        iCellFccAll[i] = iCellFccBorderVector[i];
+        iCellFcfAll[i] = iCellFcfBorderVector[i];
+    }
+    for (uint i = 0; i < (uint)iCellFccBulkVector.size(); i++) {
+        para->getParH(level)->intFCBulk.ICellFCC[i] = iCellFccBulkVector[i];
+        para->getParH(level)->intFCBulk.ICellFCF[i] = iCellFcfBulkVector[i];
+    }
+}
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.h b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.h
index ee3542bfc0d26f50af58af1743a60c236d9514c8..70155b1990def791572992187ae068d15e90e053 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.h
+++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.h
@@ -70,8 +70,10 @@ private:
                                              std::vector<uint> &sendIndicesForCommAfterFtoCPositions);
     void reorderRecvIndicesForCommAfterFtoC(int *recvIndices, int &numberOfRecvNeighborsAfterFtoC, int direction,
                                             int level, int j, std::vector<uint> &sendIndicesForCommAfterFtoCPositions);
+    
     // split interpolation cells
     void getGridInterfaceIndicesBorderBulkCF(int level);
+    void getGridInterfaceIndicesBorderBulkFC(int level);
 };
 
 #endif