diff --git a/apps/gpu/LBM/MusselOyster/MusselOyster.cpp b/apps/gpu/LBM/MusselOyster/MusselOyster.cpp
index f57b2077502559081e618778fa600debeca4b38d..d716ccf1d0e8ab31622444e74d8b8776b0c10c4f 100644
--- a/apps/gpu/LBM/MusselOyster/MusselOyster.cpp
+++ b/apps/gpu/LBM/MusselOyster/MusselOyster.cpp
@@ -109,7 +109,7 @@ void multipleLevel(const std::string& configPath)
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
     bool useGridGenerator = true;
-    bool useMultiGPU = false;
+    bool useMultiGPU = true;
     bool useStreams  = true;
     bool useLevels = true;
 
diff --git a/src/gpu/GridGenerator/grid/Grid.h b/src/gpu/GridGenerator/grid/Grid.h
index 387a9a7b0ada63a22d0899a55558969f65173bc6..c6189ba0977d2ed0d82a9f44c3e8d1779d6e21b8 100644
--- a/src/gpu/GridGenerator/grid/Grid.h
+++ b/src/gpu/GridGenerator/grid/Grid.h
@@ -51,7 +51,10 @@ 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 getGridInterfaceIndicesFCCBorderBulk(uint *iCellFccBorder, uint &intFCBorderKfc, uint *&iCellFccBulk, uint &intFCBulkKfc, int level) const = 0;
+    CUDA_HOST virtual void getGridInterfaceIndicesFCCBorderBulk(uint *iCellFccBorder, uint *&iCellFccBulk,
+                                                                uint *iCellFcfBorder, uint *&iCellFcfBulk,
+                                                                uint &intFCBorderKfc, uint &intFCBulkKfc,
+                                                                int level) const = 0;
 
     CUDA_HOST virtual int *getNeighborsX() const = 0;
     CUDA_HOST virtual int *getNeighborsY() const = 0;
diff --git a/src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h b/src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h
index ebe8ac8f9c62ed1cce21be9d0deebba6d34d9689..a5656146c25ec55fdae172377ba28ee4c962b40c 100644
--- a/src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h
+++ b/src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h
@@ -56,7 +56,9 @@ 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 getGridInterfaceIndicesFCCBorderBulk(uint *iCellFccBorder, uint &intFCBorderKfc, uint *&iCellFccBulk, uint &intFCBulkKfc, int level) const = 0;
+    virtual void getGridInterfaceIndicesFCCBorderBulk(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 fa0166a0414d96710ad878b3531d98019d95c17c..0431badb400e4da68c171757f3dab352e6501bf6 100644
--- a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
+++ b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
@@ -206,9 +206,12 @@ void LevelGridBuilder::getGridInterfaceIndices(uint* iCellCfc, uint* iCellCff, u
     this->grids[level]->getGridInterfaceIndices(iCellCfc, iCellCff, iCellFcc, iCellFcf);
 }
 
-void LevelGridBuilder::getGridInterfaceIndicesFCCBorderBulk(uint *iCellFccBorder, uint &intFCBorderKfc, uint *&iCellFccBulk, uint &intFCBulkKfc, int level) const
+void LevelGridBuilder::getGridInterfaceIndicesFCCBorderBulk(uint *iCellFccBorder, uint *&iCellFccBulk, uint *iCellFcfBorder, uint *&iCellFcfBulk,
+                                                            uint &intFCBorderKfc, uint &intFCBulkKfc, int level) const
 {
-    this->grids[level]->getGridInterfaceIndicesFCCBorderBulk(iCellFccBorder, intFCBorderKfc, iCellFccBulk, intFCBulkKfc, level);
+    this->grids[level]->getGridInterfaceIndicesFCCBorderBulk(iCellFccBorder, iCellFccBulk,
+                                                             iCellFcfBorder, iCellFcfBulk,
+                                                             intFCBorderKfc, intFCBulkKfc, level);
 }
 
 void LevelGridBuilder::getOffsetFC(real * xOffFC, real * yOffFC, real * zOffFC, int level)
diff --git a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
index 542df12d1ccc972e43ba38b386b4baa27eb6e813..c91a06a454107ac920d989a04097d659d401a01c 100644
--- a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
+++ b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
@@ -137,7 +137,10 @@ 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 getGridInterfaceIndicesFCCBorderBulk(uint *iCellFccBorder, uint &intFCBorderKfc, uint *&iCellFccBulk, uint &intFCBulkKfc, int level) const override;
+    GRIDGENERATOR_EXPORT void getGridInterfaceIndicesFCCBorderBulk(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 5b9e0da368672efe7f81251d9ff479880c8382ae..8de08cb3e029f3e777255f0bb06f967cbbb00aca 100644
--- a/src/gpu/GridGenerator/grid/GridImp.cu
+++ b/src/gpu/GridGenerator/grid/GridImp.cu
@@ -1943,33 +1943,43 @@ void GridImp::getGridInterface(uint* gridInterfaceList, const uint* oldGridInter
         gridInterfaceList[i] = oldGridInterfaceList[i] + 1; // + 1 for numbering shift between GridGenerator and VF_GPU
 }
 
-void GridImp::getGridInterfaceIndicesFCCBorderBulk(uint *iCellFccBorder, uint &intFCBorderKfc, uint *&iCellFccBulk,
-                                                   uint &intFCBulkKfc, int level) const
+void GridImp::getGridInterfaceIndicesFCCBorderBulk(uint *iCellFccBorder, uint *&iCellFccBulk, uint *iCellFcfBorder,
+                                                   uint *&iCellFcfBulk, uint &intFCBorderKfc, uint &intFCBulkKfc,
+                                                   int level) const
 {
-    // reorder the array of FCC indices and return pointers and sizes of the new subarrays
+    // reorder the array of FCC/FCF indices and return pointers and sizes of the new subarrays
 
     uint *iCellFccAll = iCellFccBorder;
+    uint *iCellFcfAll = iCellFcfBorder;
     uint intFCKfcAll = this->gridInterface->fc.numberOfEntries;
     std::vector<uint> iCellFccBorderVector;
     std::vector<uint> iCellFccBulkVector;
+    std::vector<uint> iCellFcfBorderVector;
+    std::vector<uint> iCellFcfBulkVector;
 
     for (uint i = 0; i < intFCKfcAll; i++)
         if (std::find(this->fluidNodeIndicesBorder.begin(), this->fluidNodeIndicesBorder.end(), iCellFccAll[i]) !=
-            this->fluidNodeIndicesBorder.end())
+            this->fluidNodeIndicesBorder.end()) {
             iCellFccBorderVector.push_back(iCellFccAll[i]);
-        else
+            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++)
+    for (uint i = 0; i < (uint)iCellFccBorderVector.size(); i++) {
         iCellFccBorder[i] = iCellFccBorderVector[i];
-    for (uint i = 0; i < (uint)iCellFccBulkVector.size(); i++)
+        iCellFcfBorder[i] = iCellFcfBorderVector[i];
+    }
+    for (uint i = 0; i < (uint)iCellFccBulkVector.size(); i++) {
         iCellFccBulk[i] = iCellFccBulkVector[i];
-    std::cout << iCellFccBulk[0] << std::endl;
-    std::cout << iCellFccBulk[iCellFccBulkVector.size()-1] << std::endl;
+        iCellFcfBulk[i] = iCellFcfBulkVector[i];
+    }
 }
 
 #define GEOFLUID 19
diff --git a/src/gpu/GridGenerator/grid/GridImp.h b/src/gpu/GridGenerator/grid/GridImp.h
index 25d78f895e6d7b6c39d37eea45d192fe85dbc79e..8fc155867cb9b4a1aa2d33554181c3ab2c872890 100644
--- a/src/gpu/GridGenerator/grid/GridImp.h
+++ b/src/gpu/GridGenerator/grid/GridImp.h
@@ -219,7 +219,9 @@ 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 getGridInterfaceIndicesFCCBorderBulk(uint *iCellFccBorder, uint &intFCBorderKfc, uint *&iCellFccBulk, uint &intFCBulkKfc, int level) const override;
+    CUDA_HOST void getGridInterfaceIndicesFCCBorderBulk(uint *iCellFccBorder, uint *&iCellFccBulk, uint *iCellFcfBorder,
+                                                        uint *&iCellFcfBulk, uint &intFCBorderKfc, uint &intFCBulkKfc,
+                                                        int level) const override;
 
     int* getNeighborsX() const override;
     int* getNeighborsY() const override;
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp b/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
index 5726f1e6e52597154de29958246b0d715a7f5d08..0c870d1cd76e019f045b0ff3aa5ac260799d41d5 100644
--- a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
+++ b/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
@@ -74,17 +74,25 @@ void updateGrid27(Parameter *para, vf::gpu::Communicator *comm, CudaMemoryManage
     if( level != para->getFine() )
     {
         if (para->getUseStreams() && para->getNumprocs() > 1) {
-        } else {
-            //fineToCoarse(para, level);
-
-            //fineToCoarseWithStream(para, level, para->getParD(level)->intFCBorder.ICellFCC,
-                                   //para->getParD(level)->intFCBorder.kFC, -1);
-            fineToCoarseWithStream(para, level, para->getParD(level)->intFCBulk.ICellFCC,
+            fineToCoarseWithStream(para, level, 
+                                   para->getParD(level)->intFCBorder.ICellFCC,
+                                   para->getParD(level)->intFCBorder.ICellFCF,
+                                   para->getParD(level)->intFCBorder.kFC, -1);
+            fineToCoarseWithStream(para, level, 
+                                   para->getParD(level)->intFCBulk.ICellFCC,
+                                   para->getParD(level)->intFCBulk.ICellFCF,
                                    para->getParD(level)->intFCBulk.kFC, -1);
 
             prepareExchangeMultiGPU(para, level, -1);
             exchangeMultiGPU(para, comm, cudaManager, level, -1);
 
+            coarseToFine(para, level);
+        } else {
+            fineToCoarse(para, level);
+
+            prepareExchangeMultiGPU(para, level, -1);
+            exchangeMultiGPU(para, comm, cudaManager, level, -1);
+
             coarseToFine(para, level);
         }
     }
@@ -1133,7 +1141,7 @@ void fineToCoarse(Parameter* para, int level)
 
 }
 
-void fineToCoarseWithStream(Parameter *para, int level, uint *iCellFCC, uint k_FC, int streamIndex)
+void fineToCoarseWithStream(Parameter *para, int level, uint *iCellFCC, uint *iCellFCF, uint k_FC, int streamIndex)
 {
     cudaStream_t stream = (streamIndex == -1) ? CU_STREAM_LEGACY : para->getStreamManager()->getStream(streamIndex);
 
@@ -1141,7 +1149,7 @@ void fineToCoarseWithStream(Parameter *para, int level, uint *iCellFCC, uint k_F
 							para->getParD(level)->neighborX_SP,   para->getParD(level)->neighborY_SP,    para->getParD(level)->neighborZ_SP, 
 							para->getParD(level+1)->neighborX_SP, para->getParD(level+1)->neighborY_SP,  para->getParD(level+1)->neighborZ_SP, 
 							para->getParD(level)->size_Mat_SP,    para->getParD(level+1)->size_Mat_SP,   para->getParD(level)->evenOrOdd,
-							iCellFCC,                             para->getParD(level)->intFC.ICellFCF, 
+							iCellFCC,                             iCellFCF, 
 							k_FC,                                 para->getParD(level)->omega,           para->getParD(level + 1)->omega, 
 							para->getParD(level)->vis,            para->getParD(level)->nx,              para->getParD(level)->ny, 
 							para->getParD(level+1)->nx,           para->getParD(level+1)->ny,            para->getParD(level)->numberofthreads,
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.h b/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.h
index d4eda6f6ce593c2e1fd5077485ec3f6ab91ad4eb..7a58feb622ad7ed51604b96f7d005d0957fe741e 100644
--- a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.h
+++ b/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.h
@@ -40,7 +40,7 @@ extern "C" void calcMacroscopicQuantities(Parameter* para, int level);
 extern "C" void preCollisionBC(Parameter* para, CudaMemoryManager* cudaManager, int level, unsigned int t);
 
 extern "C" void fineToCoarse(Parameter* para, int level);
-extern "C" void fineToCoarseWithStream(Parameter *para, int level, uint *iCellFCC, uint k_FC, int streamIndex);
+extern "C" void fineToCoarseWithStream(Parameter *para, int level, uint *iCellFCC, uint *iCellFCF, uint k_FC, int streamIndex);
 
 extern "C" void coarseToFine(Parameter* para, int level);
 
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
index afb322267ab728fe8f373050296d7ed5a10d4b96..c26503dd6e75472e14d881c456b53998fbcde9e0 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
+++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
@@ -922,37 +922,69 @@ void GridGenerator::allocArrays_OffsetScale()
         builder->getGridInterfaceIndices(para->getParH(level)->intCF.ICellCFC, para->getParH(level)->intCF.ICellCFF, para->getParH(level)->intFC.ICellFCC, para->getParH(level)->intFC.ICellFCF, level);
         
         if (para->getUseStreams()) {
-            // split fine-to-coarse-coarse indices into border and bulk
+            // split fine-to-coarse indices into border and bulk
             para->getParH(level)->intFCBorder.ICellFCC = para->getParH(level)->intFC.ICellFCC; 
-            builder->getGridInterfaceIndicesFCCBorderBulk(para->getParH(level)->intFCBorder.ICellFCC, para->getParH(level)->intFCBorder.kFC, para->getParH(level)->intFCBulk.ICellFCC, para->getParH(level)->intFCBulk.kFC, level);
+            para->getParH(level)->intFCBorder.ICellFCF = para->getParH(level)->intFC.ICellFCF; 
+            builder->getGridInterfaceIndicesFCCBorderBulk(
+                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);
             
             para->getParD(level)->intFCBorder.kFC = para->getParH(level)->intFCBorder.kFC;
             para->getParD(level)->intFCBulk.kFC = para->getParH(level)->intFCBulk.kFC;
             para->getParD(level)->intFCBorder.ICellFCC = para->getParD(level)->intFC.ICellFCC;
             para->getParD(level)->intFCBulk.ICellFCC = para->getParD(level)->intFCBorder.ICellFCC + para->getParD(level)->intFCBorder.kFC;
+            para->getParD(level)->intFCBorder.ICellFCF = para->getParD(level)->intFC.ICellFCF;
+            para->getParD(level)->intFCBulk.ICellFCF = para->getParD(level)->intFCBorder.ICellFCF + para->getParD(level)->intFCBorder.kFC;
+
+                    std::cout << " ..............FCC " << std::endl;
+            std::cout << "sizeOld  " << para->getParH(level)->K_FC << std::endl;
+            std::cout << "sizeNew  " << para->getParH(level)->intFCBorder.kFC + para->getParH(level)->intFCBulk.kFC
+                      << " = border " << para->getParH(level)->intFCBorder.kFC << " + bulk "
+                      << para->getParH(level)->intFCBulk.kFC << std::endl;
+            std::cout << "old pointer " << para->getParH(level)->intFC.ICellFCC << std::endl;
+            std::cout << "border pointer (= old pointer) " << para->getParH(level)->intFCBorder.ICellFCC << std::endl;
+            std::cout << "bulk pointer new " << para->getParH(level)->intFCBulk.ICellFCC << std::endl;
+            std::cout << "first old  " << para->getParH(level)->intFC.ICellFCC[0] << std::endl;
+            std::cout << "first new  " << para->getParH(level)->intFCBorder.ICellFCC[0] << std::endl;
+            if (para->getParH(level)->intFCBorder.kFC > 0) {
+                std::cout << "last border old  "
+                          << para->getParH(level)->intFC.ICellFCC[para->getParH(level)->intFCBorder.kFC - 1]
+                          << std::endl;
+                std::cout << "last border new  "
+                          << para->getParH(level)->intFCBorder.ICellFCC[para->getParH(level)->intFCBorder.kFC - 1]
+                          << std::endl;
+            }
+            std::cout << "first bulk old  "
+                      << para->getParH(level)->intFC.ICellFCC[para->getParH(level)->intFCBorder.kFC] << std::endl;
+            std::cout << "first bulk new  " << para->getParH(level)->intFCBulk.ICellFCC[0] << std::endl;
+            std::cout << "last bulk old  " << para->getParH(level)->intFC.ICellFCC[para->getParH(level)->K_FC - 1]
+                      << std::endl;
+            std::cout << "last bulk new  "
+                      << para->getParH(level)->intFCBulk.ICellFCC[para->getParH(level)->intFCBulk.kFC - 1] << std::endl;
+
+            std::cout << " ..............FCF " << std::endl;
+            std::cout << "old pointer " << para->getParH(level)->intFC.ICellFCF << std::endl;
+            std::cout << "border pointer (= old pointer) " << para->getParH(level)->intFCBorder.ICellFCF << std::endl;
+            std::cout << "bulk pointer new " << para->getParH(level)->intFCBulk.ICellFCF << std::endl;
+            std::cout << "first old  " << para->getParH(level)->intFC.ICellFCF[0] << std::endl;
+            std::cout << "first new  " << para->getParH(level)->intFCBorder.ICellFCF[0] << std::endl;
+            if (para->getParH(level)->intFCBorder.kFC > 0) {
+                std::cout << "last border old  "
+                          << para->getParH(level)->intFC.ICellFCF[para->getParH(level)->intFCBorder.kFC - 1]
+                          << std::endl;
+                std::cout << "last border new  "
+                          << para->getParH(level)->intFCBorder.ICellFCF[para->getParH(level)->intFCBorder.kFC - 1]
+                          << std::endl;
+            }
+            std::cout << "first bulk old  "
+                      << para->getParH(level)->intFC.ICellFCF[para->getParH(level)->intFCBorder.kFC] << std::endl;
+            std::cout << "first bulk new  " << para->getParH(level)->intFCBulk.ICellFCF[0] << std::endl;
+            std::cout << "last bulk old  " << para->getParH(level)->intFC.ICellFCF[para->getParH(level)->K_FC - 1]
+                      << std::endl;
+            std::cout << "last bulk new  "
+                      << para->getParH(level)->intFCBulk.ICellFCF[para->getParH(level)->intFCBulk.kFC - 1] << std::endl;
         }
-        std::cout << "sizeOld  " << para->getParH(level)->K_FC << std::endl;
-        std::cout << "sizeNew  " << para->getParH(level)->intFCBorder.kFC + para->getParH(level)->intFCBulk.kFC
-                  << " = border " << para->getParH(level)->intFCBorder.kFC << " + bulk "
-                  << para->getParH(level)->intFCBulk.kFC << std::endl;
-        std::cout << "first old  " << para->getParH(level)->intFC.ICellFCC[0] << std::endl;
-        std::cout << "first new  " << para->getParH(level)->intFCBorder.ICellFCC[0]
-                  << std::endl;
-        //std::cout << "last border old  " << para->getParH(level)->intFC.ICellFCC[para->getParH(level)->intFCBorder.kFC - 1]
-        //          << std::endl; //if (para->getParH(level)->intFCBorder.kFC > 0)
-        //std::cout << "last border new  " << para->getParH(level)->intFCBorder.ICellFCC[para->getParH(level)->intFCBorder.kFC - 1]
-        //          << std::endl;
-        std::cout << "old pointer " << para->getParH(level)->intFC.ICellFCC << std::endl;
-        std::cout << "border pointer (= old pointer) " << para->getParH(level)->intFCBorder.ICellFCC << std::endl;
-        std::cout << "bulk pointer new " << para->getParH(level)->intFCBulk.ICellFCC << std::endl;
-        std::cout << "first bulk old  "
-                  << para->getParH(level)->intFC.ICellFCC[para->getParH(level)->intFCBorder.kFC] << std::endl;
-        std::cout << "first bulk new  "
-                  << para->getParH(level)->intFCBulk.ICellFCC[0] << std::endl;
-        std::cout << "last bulk old  "
-                  << para->getParH(level)->intFC.ICellFCC[para->getParH(level)->K_FC - 1] << std::endl;
-        std::cout << "last bulk new  "
-                  << para->getParH(level)->intFCBulk.ICellFCC[para->getParH(level)->intFCBulk.kFC - 1] << std::endl;
 
         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         //copy
@@ -963,17 +995,23 @@ void GridGenerator::allocArrays_OffsetScale()
         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
-        if (para->getUseStreams())
-            cudaMemoryManager->cudaCheckInterfaceFCBulk(level);
-
-        std::cout << "...Device " << std::endl;
-        std::cout << "old pointer " << para->getParD(level)->intFC.ICellFCC << std::endl;
-        std::cout << "border pointer (= old pointer) " << para->getParD(level)->intFCBorder.ICellFCC << std::endl;
-        std::cout << "bulk pointer new " << para->getParD(level)->intFCBulk.ICellFCC << std::endl;
-        std::cout << "sizeOld  " << para->getParD(level)->K_FC << std::endl;
-        std::cout << "sizeNew  " << para->getParD(level)->intFCBorder.kFC + para->getParD(level)->intFCBulk.kFC
-                  << " = border " << para->getParD(level)->intFCBorder.kFC << " + bulk "
-                  << para->getParD(level)->intFCBulk.kFC << std::endl;
+        if (para->getUseStreams()) {
+            //    cudaMemoryManager->cudaCheckInterfaceFCBulk(level);
+
+            std::cout << "...Device FCC" << std::endl;
+            std::cout << "old pointer " << para->getParD(level)->intFC.ICellFCC << std::endl;
+            std::cout << "border pointer (= old pointer) " << para->getParD(level)->intFCBorder.ICellFCC << std::endl;
+            std::cout << "bulk pointer new " << para->getParD(level)->intFCBulk.ICellFCC << std::endl;
+            std::cout << "sizeOld  " << para->getParD(level)->K_FC << std::endl;
+            std::cout << "sizeNew  " << para->getParD(level)->intFCBorder.kFC + para->getParD(level)->intFCBulk.kFC
+                      << " = border " << para->getParD(level)->intFCBorder.kFC << " + bulk "
+                      << para->getParD(level)->intFCBulk.kFC << std::endl;
+
+            std::cout << "...Device FCF" << std::endl;
+            std::cout << "old pointer " << para->getParD(level)->intFC.ICellFCF << std::endl;
+            std::cout << "border pointer (= old pointer) " << para->getParD(level)->intFCBorder.ICellFCF << std::endl;
+            std::cout << "bulk pointer new " << para->getParD(level)->intFCBulk.ICellFCF << std::endl;
+        }
     }
 }
 
diff --git a/src/gpu/VirtualFluids_GPU/LBM/LB.h b/src/gpu/VirtualFluids_GPU/LBM/LB.h
index a116485acefa6d089824ea748be48ff522e311fe..a33b3b792cd451307825fd0b2c8716e942440582 100644
--- a/src/gpu/VirtualFluids_GPU/LBM/LB.h
+++ b/src/gpu/VirtualFluids_GPU/LBM/LB.h
@@ -140,11 +140,6 @@ typedef struct ICellFC{
    uint kFC;
 } InterpolationCellFC;
 
-typedef struct ICellFCBB {
-    uint *ICellFCC;
-    uint kFC;
-} InterpolationCellFCBorderBulk;
-
 //Offset of the interface cells at the wall
 typedef struct OffCF{
    real* xOffCF;
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
index b9bc179e34ac0a971ee79991f314c0c4c6e07160..09926c8cb178f7332377fbb5b2445250147127ac 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
+++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
@@ -181,8 +181,8 @@ struct LBMSimulationParameter
     unsigned int mem_size_kCF;
     unsigned int mem_size_kFC;
 
-    InterpolationCellFCBorderBulk intFCBorder;
-    InterpolationCellFCBorderBulk intFCBulk;
+    InterpolationCellFC intFCBorder;
+    InterpolationCellFC intFCBulk;
 
     // offset//////////////////
     OffsetCF offCF;