diff --git a/apps/gpu/LBM/MusselOyster/MusselOyster.cpp b/apps/gpu/LBM/MusselOyster/MusselOyster.cpp
index 0cd44375fa75c261b7821ae0128841d20f55b1d4..4c18a7c84fb668d8bec6e2d25ee7aeb9215db9f9 100644
--- a/apps/gpu/LBM/MusselOyster/MusselOyster.cpp
+++ b/apps/gpu/LBM/MusselOyster/MusselOyster.cpp
@@ -140,8 +140,8 @@ void multipleLevel(const std::string& configPath)
     *logging::out << logging::Logger::INFO_HIGH << "useStreams = " << useStreams << "\n";
 
     
-    para->setTOut(1000);
-    para->setTEnd(10000);
+    para->setTOut(10);
+    para->setTEnd(10);
 
     para->setCalcDragLift(false);
     para->setUseWale(false);
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp b/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
index a8529096cf0d59c35ca6afdbd4f83e915003f62b..eff5f8039450442c4604e5bc932c42177330ee95 100644
--- a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
+++ b/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
@@ -77,16 +77,21 @@ void updateGrid27(Parameter *para, vf::gpu::Communicator *comm, CudaMemoryManage
             fineToCoarseWithStream(para, level, 
                                    para->getParD(level)->intFCBorder.ICellFCC,
                                    para->getParD(level)->intFCBorder.ICellFCF,
-                                   para->getParD(level)->intFCBorder.kFC, -1);
+                                   para->getParD(level)->intFCBorder.kFC, borderStreamIndex);
+
+            // prepare exchange and trigger bulk kernel when finished
+            prepareExchangeMultiGPUAfterFtoC(para, level, borderStreamIndex);
+            if (para->getUseStreams())
+                para->getStreamManager()->triggerStartBulkKernel(borderStreamIndex);
+
+            // launch bulk kernel
+            para->getStreamManager()->waitOnStartBulkKernelEvent(bulkStreamIndex);
             fineToCoarseWithStream(para, level, 
                                    para->getParD(level)->intFCBulk.ICellFCC,
                                    para->getParD(level)->intFCBulk.ICellFCF,
-                                   para->getParD(level)->intFCBulk.kFC, -1);
-            //fineToCoarse(para, level);
-
-            prepareExchangeMultiGPUAfterFtoC(para, level, -1);
-            exchangeMultiGPUAfterFtoC(para, comm, cudaManager, level, -1);
+                                   para->getParD(level)->intFCBulk.kFC, bulkStreamIndex);
 
+            exchangeMultiGPUAfterFtoC(para, comm, cudaManager, level, borderStreamIndex);
             coarseToFine(para, level);
         } else {
             fineToCoarse(para, level);