diff --git a/Src/GroupTree/FGroupTaskAlgorithm.hpp b/Src/GroupTree/FGroupTaskAlgorithm.hpp
index 050e2d77a8a03c8c6e55cab58a50c0e982b4f973..38e48e58cafc8bb278adb8dd62c687c37428562d 100644
--- a/Src/GroupTree/FGroupTaskAlgorithm.hpp
+++ b/Src/GroupTree/FGroupTaskAlgorithm.hpp
@@ -54,9 +54,9 @@ public:
     void execute(const unsigned operationsToProceed = FFmmNearAndFarFields){
         FLOG( FLog::Controller << "\tStart FGroupTaskAlgorithm\n" );
 
-        #pragma omp parallel
+#pragma omp parallel
         {
-            #pragma omp single nowait
+#pragma omp single nowait
             {
                 if(operationsToProceed & FFmmP2M) bottomPass();
 
@@ -68,14 +68,14 @@ public:
 
             }
 
-            #pragma omp single nowait
+#pragma omp single nowait
             {
                 if( operationsToProceed & FFmmP2P ) directPass();
             }
 
-            #pragma omp barrier
+#pragma omp barrier
 
-            #pragma omp single nowait
+#pragma omp single nowait
             {
                 if( operationsToProceed & FFmmL2P ) mergePass();
             }
@@ -94,7 +94,7 @@ protected:
         while(iterParticles != endParticles && iterCells != endCells){
             CellContainerClass* leafCells = (*iterCells);
             ParticleGroupClass* containers = (*iterParticles);
-            #pragma omp task default(shared) firstprivate(leafCells, containers)
+#pragma omp task default(shared) firstprivate(leafCells, containers)
             { // Can be a task(in:iterParticles, out:iterCells)
                 const MortonIndex blockStartIdx = leafCells->getStartingIndex();
                 const MortonIndex blockEndIdx = leafCells->getEndingIndex();
@@ -115,7 +115,7 @@ protected:
             ++iterCells;
         }
         // Wait for task to complete
-        #pragma omp taskwait
+#pragma omp taskwait
 
         FAssertLF(iterParticles == endParticles && iterCells == endCells);
         FLOG( FLog::Controller << "\t\t bottomPass in " << timer.tacAndElapsed() << "s\n" );
@@ -133,8 +133,8 @@ protected:
             while(iterCells != endCells && iterChildCells != endChildCells){
                 CellContainerClass* currentCells = (*iterCells);
 
-                CellContainerClass* subCellGroups[8];
-                memset(subCellGroups, 0, sizeof(CellContainerClass*) * 8);
+                CellContainerClass* subCellGroups[9];
+                memset(subCellGroups, 0, sizeof(CellContainerClass*) * 9);
 
                 // Skip current group if needed
                 if( (*iterChildCells)->getEndingIndex() <= ((*iterCells)->getStartingIndex()<<3) ){
@@ -148,10 +148,10 @@ protected:
                 nbSubCellGroups += 1;
                 while((*iterChildCells)->getEndingIndex() <= (((*iterCells)->getEndingIndex()<<3)+7)
                       && (++iterChildCells) != endChildCells
-                      && (*iterChildCells)->getEndingIndex() <= ((*iterCells)->getEndingIndex()<<3)+7 ){
+                      && (*iterChildCells)->getStartingIndex() <= ((*iterCells)->getEndingIndex()<<3)+7 ){
                     subCellGroups[nbSubCellGroups] = (*iterChildCells);
                     nbSubCellGroups += 1;
-                    FAssertLF( nbSubCellGroups <= 8 );
+                    FAssertLF( nbSubCellGroups <= 9 );
                 }
 
                 #pragma omp task default(none) firstprivate(idxLevel, currentCells, subCellGroups, nbSubCellGroups)
@@ -168,7 +168,7 @@ protected:
                             CellClass* child[8] = {nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,nullptr};
 
                             for(int idxChild = 0 ; idxChild < 8 ; ++idxChild){
-                                while(idxSubCellGroup != nbSubCellGroups && subCellGroups[idxSubCellGroup]->getEndingIndex() <= ((mindex<<3)+idxChild) ){
+                                if( subCellGroups[idxSubCellGroup]->getEndingIndex() <= ((mindex<<3)+idxChild) ){
                                     idxSubCellGroup += 1;
                                 }
                                 if( idxSubCellGroup == nbSubCellGroups ){
@@ -309,12 +309,12 @@ protected:
             while(iterCells != endCells && iterChildCells != endChildCells){
                 CellContainerClass* currentCells = (*iterCells);
 
-                CellContainerClass* subCellGroups[8];
-                memset(subCellGroups, 0, sizeof(CellContainerClass*) * 8);
+                CellContainerClass* subCellGroups[9];
+                memset(subCellGroups, 0, sizeof(CellContainerClass*) * 9);
 
                 // Skip current group if needed
                 if( (*iterChildCells)->getEndingIndex() <= ((*iterCells)->getStartingIndex()<<3) ){
-                    ++iterChildCells;                    
+                    ++iterChildCells;
                     FAssertLF( iterChildCells != endChildCells );
                     FAssertLF( ((*iterChildCells)->getStartingIndex()>>3) == (*iterCells)->getStartingIndex() );
                 }
@@ -324,13 +324,13 @@ protected:
                 nbSubCellGroups += 1;
                 while((*iterChildCells)->getEndingIndex() <= (((*iterCells)->getEndingIndex()<<3)+7)
                       && (++iterChildCells) != endChildCells
-                      && (*iterChildCells)->getEndingIndex() <= ((*iterCells)->getEndingIndex()<<3)+7 ){
+                      && (*iterChildCells)->getStartingIndex() <= ((*iterCells)->getEndingIndex()<<3)+7 ){
                     subCellGroups[nbSubCellGroups] = (*iterChildCells);
                     nbSubCellGroups += 1;
-                    FAssertLF( nbSubCellGroups <= 8 );
+                    FAssertLF( nbSubCellGroups <= 9 );
                 }
 
-                #pragma omp task default(none) firstprivate(idxLevel, currentCells, subCellGroups, nbSubCellGroups)
+#pragma omp task default(none) firstprivate(idxLevel, currentCells, subCellGroups, nbSubCellGroups)
                 {
                     const MortonIndex blockStartIdx = currentCells->getStartingIndex();
                     const MortonIndex blockEndIdx = currentCells->getEndingIndex();
@@ -344,7 +344,7 @@ protected:
                             CellClass* child[8] = {nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,nullptr,nullptr};
 
                             for(int idxChild = 0 ; idxChild < 8 ; ++idxChild){
-                                while(idxSubCellGroup != nbSubCellGroups && subCellGroups[idxSubCellGroup]->getEndingIndex() <= ((mindex<<3)+idxChild) ){
+                                if( subCellGroups[idxSubCellGroup]->getEndingIndex() <= ((mindex<<3)+idxChild) ){
                                     idxSubCellGroup += 1;
                                 }
                                 if( idxSubCellGroup == nbSubCellGroups ){
@@ -362,7 +362,7 @@ protected:
                 ++iterCells;
             }
 
-            #pragma omp taskwait
+#pragma omp taskwait
 
             FAssertLF(iterCells == endCells && (iterChildCells == endChildCells || (++iterChildCells) == endChildCells));
         }
@@ -478,7 +478,7 @@ protected:
             while(iterParticles != endParticles && iterCells != endCells){
                 CellContainerClass* leafCells = (*iterCells);
                 ParticleGroupClass* containers = (*iterParticles);
-                #pragma omp task default(shared) firstprivate(leafCells, containers)
+#pragma omp task default(shared) firstprivate(leafCells, containers)
                 { // Can be a task(out:iterParticles, in:iterCells)
                     const MortonIndex blockStartIdx = leafCells->getStartingIndex();
                     const MortonIndex blockEndIdx = leafCells->getEndingIndex();
@@ -499,7 +499,7 @@ protected:
                 ++iterCells;
             }
             // Wait for task to complete
-            #pragma omp taskwait
+#pragma omp taskwait
 
             FAssertLF(iterParticles == endParticles && iterCells == endCells);
         }