diff --git a/Src/GroupTree/FGroupTaskAlgorithm.hpp b/Src/GroupTree/FGroupTaskAlgorithm.hpp
index 19d7f7815a3c26f6e2b0f00d0b4895e8b3986087..050e2d77a8a03c8c6e55cab58a50c0e982b4f973 100644
--- a/Src/GroupTree/FGroupTaskAlgorithm.hpp
+++ b/Src/GroupTree/FGroupTaskAlgorithm.hpp
@@ -139,16 +139,19 @@ protected:
                 // Skip current group if needed
                 if( (*iterChildCells)->getEndingIndex() <= ((*iterCells)->getStartingIndex()<<3) ){
                     ++iterChildCells;
+                    FAssertLF( iterChildCells != endChildCells );
+                    FAssertLF( ((*iterChildCells)->getStartingIndex()>>3) == (*iterCells)->getStartingIndex() );
                 }
-                FAssertLF(iterChildCells != endChildCells && ((*iterChildCells)->getStartingIndex()>>3) == (*iterCells)->getStartingIndex());
                 // Copy at max 8 groups
                 int nbSubCellGroups = 0;
                 subCellGroups[nbSubCellGroups] = (*iterChildCells);
                 nbSubCellGroups += 1;
-                while((*iterChildCells)->getEndingIndex() <= (((*iterCells)->getStartingIndex()<<3)+7)
-                      && (++iterChildCells) != endChildCells){
+                while((*iterChildCells)->getEndingIndex() <= (((*iterCells)->getEndingIndex()<<3)+7)
+                      && (++iterChildCells) != endChildCells
+                      && (*iterChildCells)->getEndingIndex() <= ((*iterCells)->getEndingIndex()<<3)+7 ){
                     subCellGroups[nbSubCellGroups] = (*iterChildCells);
                     nbSubCellGroups += 1;
+                    FAssertLF( nbSubCellGroups <= 8 );
                 }
 
                 #pragma omp task default(none) firstprivate(idxLevel, currentCells, subCellGroups, nbSubCellGroups)
@@ -311,17 +314,20 @@ protected:
 
                 // Skip current group if needed
                 if( (*iterChildCells)->getEndingIndex() <= ((*iterCells)->getStartingIndex()<<3) ){
-                    ++iterChildCells;
+                    ++iterChildCells;                    
+                    FAssertLF( iterChildCells != endChildCells );
+                    FAssertLF( ((*iterChildCells)->getStartingIndex()>>3) == (*iterCells)->getStartingIndex() );
                 }
-                FAssertLF(iterChildCells != endChildCells && ((*iterChildCells)->getStartingIndex()>>3) == (*iterCells)->getStartingIndex());
                 // Copy at max 8 groups
                 int nbSubCellGroups = 0;
                 subCellGroups[nbSubCellGroups] = (*iterChildCells);
                 nbSubCellGroups += 1;
-                while((*iterChildCells)->getEndingIndex() <= (((*iterCells)->getStartingIndex()<<3)+7)
-                      && (++iterChildCells) != endChildCells){
+                while((*iterChildCells)->getEndingIndex() <= (((*iterCells)->getEndingIndex()<<3)+7)
+                      && (++iterChildCells) != endChildCells
+                      && (*iterChildCells)->getEndingIndex() <= ((*iterCells)->getEndingIndex()<<3)+7 ){
                     subCellGroups[nbSubCellGroups] = (*iterChildCells);
                     nbSubCellGroups += 1;
+                    FAssertLF( nbSubCellGroups <= 8 );
                 }
 
                 #pragma omp task default(none) firstprivate(idxLevel, currentCells, subCellGroups, nbSubCellGroups)
@@ -356,6 +362,8 @@ protected:
                 ++iterCells;
             }
 
+            #pragma omp taskwait
+
             FAssertLF(iterCells == endCells && (iterChildCells == endChildCells || (++iterChildCells) == endChildCells));
         }
         FLOG( FLog::Controller << "\t\t downardPass in " << timer.tacAndElapsed() << "s\n" );