diff --git a/Src/GroupTree/StarPUUtils/FStarPUFmmPrioritiesV2.hpp b/Src/GroupTree/StarPUUtils/FStarPUFmmPrioritiesV2.hpp
index e410e4e4ef748dce8ea01dee58b24d5246615d4e..c3832b1af51439082d21607dbf362dc4c2769e1e 100644
--- a/Src/GroupTree/StarPUUtils/FStarPUFmmPrioritiesV2.hpp
+++ b/Src/GroupTree/StarPUUtils/FStarPUFmmPrioritiesV2.hpp
@@ -23,6 +23,7 @@ class FStarPUFmmPrioritiesV2{
     int insertionPositionM2MSend;
 
     int insertionPositionM2L;
+    int insertionPositionM2LExtern;
     int insertionPositionL2L;
     int insertionPositionL2P;
     int insertionPositionP2P;
@@ -80,6 +81,7 @@ public:
             insertionPositionL2L     = incPrio++;
             FLOG( FLog::Controller << "\t L2L "  << insertionPositionL2L << "\n" );
 
+            insertionPositionM2LExtern     = incPrio++;
             insertionPositionM2L     = incPrio++;
 
             insertionPositionL2P     = incPrio++;
@@ -95,6 +97,7 @@ public:
             insertionPositionM2MSend = -1;
             insertionPositionM2M     = -1;
 
+            insertionPositionM2LExtern     = -1;
             insertionPositionM2L     = -1;
 
             insertionPositionL2L     = -1;
@@ -153,6 +156,11 @@ public:
                 heteroprio->buckets[insertionPositionL2L].valide_archs |= STARPU_CPU;
             }
 
+            if(!workOnlyOnLeaves &&  capacities->supportM2L(FSTARPU_CPU_IDX)){
+                FLOG( FLog::Controller << "\t CPU prio M2L "  << cpuCountPrio << " bucket " << insertionPositionM2LExtern << "\n" );
+                heteroprio->prio_mapping_per_arch_index[FSTARPU_CPU_IDX][cpuCountPrio++] = insertionPositionM2LExtern;
+                heteroprio->buckets[insertionPositionM2LExtern].valide_archs |= STARPU_CPU;
+            }
             if(!workOnlyOnLeaves &&  capacities->supportM2L(FSTARPU_CPU_IDX)){
                 FLOG( FLog::Controller << "\t CPU prio M2L "  << cpuCountPrio << " bucket " << insertionPositionM2L << "\n" );
                 heteroprio->prio_mapping_per_arch_index[FSTARPU_CPU_IDX][cpuCountPrio++] = insertionPositionM2L;
@@ -195,11 +203,6 @@ public:
                 }
 #endif
             }
-            if(capacities->supportP2PExtern(FSTARPU_CUDA_IDX)){
-                FLOG( FLog::Controller << "\t CUDA prio P2P "  << cudaCountPrio << " bucket " << insertionPositionP2PExtern << "\n" );
-                heteroprio->prio_mapping_per_arch_index[FSTARPU_CUDA_IDX][cudaCountPrio++] = insertionPositionP2PExtern;
-                heteroprio->buckets[insertionPositionP2PExtern].valide_archs |= STARPU_CUDA;
-            }
 
             if(!workOnlyOnLeaves && capacities->supportM2L(FSTARPU_CUDA_IDX)){
                 FLOG( FLog::Controller << "\t CUDA prio M2L "  << cudaCountPrio << " bucket " << insertionPositionM2L << "\n" );
@@ -207,6 +210,11 @@ public:
                 heteroprio->buckets[insertionPositionM2L].valide_archs |= STARPU_CUDA;
                 FAssertLF(capacities->supportM2LExtern(FSTARPU_CUDA_IDX));
             }
+            if(capacities->supportP2PExtern(FSTARPU_CUDA_IDX)){
+                FLOG( FLog::Controller << "\t CUDA prio P2P "  << cudaCountPrio << " bucket " << insertionPositionP2PExtern << "\n" );
+                heteroprio->prio_mapping_per_arch_index[FSTARPU_CUDA_IDX][cudaCountPrio++] = insertionPositionP2PExtern;
+                heteroprio->buckets[insertionPositionP2PExtern].valide_archs |= STARPU_CUDA;
+            }
 
             if( !workOnlyOnLeaves && capacities->supportP2M(FSTARPU_CUDA_IDX)){
                 FLOG( FLog::Controller << "\t CUDA prio P2M send "  << cudaCountPrio << " bucket " << insertionPositionP2MSend << "\n" );
@@ -262,7 +270,7 @@ public:
         return insertionPositionM2L;
     }
     int getInsertionPosM2LExtern(const int /*inLevel*/) const {
-        return insertionPositionM2L;
+        return insertionPositionM2LExtern;
     }
     int getInsertionPosL2L(const int inLevel) const {
         return insertionPositionL2L;