diff --git a/Src/GroupTree/Core/FGroupTaskStarpuImplicitAlgorithm.hpp b/Src/GroupTree/Core/FGroupTaskStarpuImplicitAlgorithm.hpp
index 3b4aefd33d7645d715d850c57accc76af85b0b9e..047f4e5d04080f737f44bc07e98840b1d025adf1 100644
--- a/Src/GroupTree/Core/FGroupTaskStarpuImplicitAlgorithm.hpp
+++ b/Src/GroupTree/Core/FGroupTaskStarpuImplicitAlgorithm.hpp
@@ -287,8 +287,7 @@ public:
     void syncData(){
         for(int idxLevel = 0 ; idxLevel < tree->getHeight() ; ++idxLevel){
             for(int idxHandle = 0 ; idxHandle < int(cellHandles[idxLevel].size()) ; ++idxHandle){
-				//if(isDataOwned(idxHandle, int(cellHandles[idxLevel].size()))) {
-				if(isDataOwnedBerenger(tree->getCellGroup(idxLevel, idxHandle)->getStartingIndex()+1, idxLevel)) {//Clean only our data handle
+				if(isDataOwnedBerenger(tree->getCellGroup(idxLevel, idxHandle)->getStartingIndex(), idxLevel)) {//Clean only our data handle
 					starpu_data_acquire(cellHandles[idxLevel][idxHandle].symb, STARPU_R);
 					starpu_data_release(cellHandles[idxLevel][idxHandle].symb);
 					starpu_data_acquire(cellHandles[idxLevel][idxHandle].up, STARPU_R);
@@ -300,8 +299,7 @@ public:
         }
         {
             for(int idxHandle = 0 ; idxHandle < int(particleHandles.size()) ; ++idxHandle){
-				//if(isDataOwned(idxHandle, int(particleHandles.size()))) {
-				if(isDataOwnedBerenger(tree->getCellGroup(tree->getHeight()-1, idxHandle)->getStartingIndex()+1, tree->getHeight()-1)) {//Clean only our data handle
+				if(isDataOwnedBerenger(tree->getCellGroup(tree->getHeight()-1, idxHandle)->getStartingIndex(), tree->getHeight()-1)) {//Clean only our data handle
 					starpu_data_acquire(particleHandles[idxHandle].symb, STARPU_R);
 					starpu_data_release(particleHandles[idxHandle].symb);
 					starpu_data_acquire(particleHandles[idxHandle].down, STARPU_R);
@@ -435,13 +433,6 @@ public:
 				nodeRepartition[idxLevel][node_id][1] = nodeRepartition[idxLevel+1][node_id][1] >> 3;
 			}
 		}
-        //for(int idxLevel = 0; idxLevel < tree->getHeight(); ++idxLevel){
-			//cout << "Level " << idxLevel << endl;
-			//for(int node_id = 0; node_id < nproc; ++node_id){
-				//cout << "\t" << nodeRepartition[idxLevel][node_id][0] << " " << nodeRepartition[idxLevel][node_id][0] << endl;
-			//}
-			
-		//}
 	}
 protected:
     /**
@@ -842,8 +833,7 @@ protected:
     void cleanHandle(){
         for(int idxLevel = 0 ; idxLevel < tree->getHeight() ; ++idxLevel){
             for(int idxHandle = 0 ; idxHandle < int(cellHandles[idxLevel].size()) ; ++idxHandle){
-				//if(isDataOwned(idxHandle, int(cellHandles[idxLevel].size())))//Clean only our data handle
-				if(isDataOwnedBerenger(tree->getCellGroup(idxLevel, idxHandle)->getStartingIndex()+1, idxLevel))//Clean only our data handle
+				if(isDataOwnedBerenger(tree->getCellGroup(idxLevel, idxHandle)->getStartingIndex(), idxLevel))//Clean only our data handle
 				{
 					starpu_data_unregister(cellHandles[idxLevel][idxHandle].symb);
 					starpu_data_unregister(cellHandles[idxLevel][idxHandle].up);
@@ -854,8 +844,7 @@ protected:
         }
         {
             for(int idxHandle = 0 ; idxHandle < int(particleHandles.size()) ; ++idxHandle){
-				//if(isDataOwned(idxHandle, int(particleHandles.size())))
-				if(isDataOwnedBerenger(tree->getCellGroup(tree->getHeight()-1, idxHandle)->getStartingIndex()+1, tree->getHeight()-1))//Clean only our data handle
+				if(isDataOwnedBerenger(tree->getCellGroup(tree->getHeight()-1, idxHandle)->getStartingIndex(), tree->getHeight()-1))//Clean only our data handle
 				{
 					starpu_data_unregister(particleHandles[idxHandle].symb);
 					starpu_data_unregister(particleHandles[idxHandle].down);
@@ -875,10 +864,8 @@ protected:
             cellHandles[idxLevel].resize(tree->getNbCellGroupAtLevel(idxLevel));
             for(int idxGroup = 0 ; idxGroup < tree->getNbCellGroupAtLevel(idxLevel) ; ++idxGroup){
                 const CellContainerClass* currentCells = tree->getCellGroup(idxLevel, idxGroup);
-				int registeringNode = dataMappingBerenger(currentCells->getStartingIndex()+1, idxLevel);
+				int registeringNode = dataMappingBerenger(currentCells->getStartingIndex(), idxLevel);
 				
-				//int registeringNode = dataMapping(idxGroup, tree->getNbCellGroupAtLevel(idxLevel));
-				//cout << registeringNode << endl;
 				where = (registeringNode == mpi_rank) ? STARPU_MAIN_RAM : -1;
                 starpu_variable_data_register(&cellHandles[idxLevel][idxGroup].symb, where,
                                               (uintptr_t)currentCells->getRawBuffer(), currentCells->getBufferSizeInByte());
@@ -900,8 +887,7 @@ protected:
         {
             particleHandles.resize(tree->getNbParticleGroup());
             for(int idxGroup = 0 ; idxGroup < tree->getNbParticleGroup() ; ++idxGroup){
-				//int registeringNode = dataMapping(idxGroup, tree->getNbParticleGroup());
-				int registeringNode = dataMappingBerenger(tree->getCellGroup(tree->getHeight()-1, idxGroup)->getStartingIndex()+1, tree->getHeight()-1);
+				int registeringNode = dataMappingBerenger(tree->getCellGroup(tree->getHeight()-1, idxGroup)->getStartingIndex(), tree->getHeight()-1);
 				where = (registeringNode == mpi_rank) ? STARPU_MAIN_RAM : -1;
                 ParticleGroupClass* containers = tree->getParticleGroup(idxGroup);
                 starpu_variable_data_register(&particleHandles[idxGroup].symb, where,
@@ -924,12 +910,11 @@ protected:
         }
     }
 	int dataMappingBerenger(MortonIndex const idx, int const idxLevel) const {
-		//return idxLevel%4;
 		for(int i = 0; i < nproc; ++i)
 			if(nodeRepartition[idxLevel][i][0] <= nodeRepartition[idxLevel][i][1] && idx >= nodeRepartition[idxLevel][i][0] && idx <= nodeRepartition[idxLevel][i][1])
 				return i;
 		if(mpi_rank == 0)
-			cout << "Error !! [" << idx << "," << idxLevel << "]" << endl;
+			cout << "[scalfmm][map error] idx " << idx << " on level " << idxLevel << " isn't mapped on any proccess." << endl;
 		return -1;
 	}
     /**
diff --git a/Src/GroupTree/Core/FGroupTaskStarpuMpiAlgorithm.hpp b/Src/GroupTree/Core/FGroupTaskStarpuMpiAlgorithm.hpp
index 441cacc812cd7b7368bfaaac161b64f4b2c18307..e0b224f39b57da85baf4d2f0cf10888d1413f460 100644
--- a/Src/GroupTree/Core/FGroupTaskStarpuMpiAlgorithm.hpp
+++ b/Src/GroupTree/Core/FGroupTaskStarpuMpiAlgorithm.hpp
@@ -317,8 +317,14 @@ public:
     ~FGroupTaskStarPUMpiAlgorithm(){
         starpu_resume();
 
+		std::cout << "Loutre " << comm.processId() << std::endl;
+		comm.barrier();
         cleanHandle();
+		std::cout << "Canard " << comm.processId() << std::endl;
+		comm.barrier();
         cleanHandleMpi();
+		std::cout << "Suricate " << comm.processId() << std::endl;
+		comm.barrier();
         delete[] cellHandles;
 
         starpu_pthread_mutex_t releaseMutex;
@@ -1344,12 +1350,16 @@ protected:
         for(int idxLevel = 0 ; idxLevel < int(remoteCellGroups.size()) ; ++idxLevel){
             for(int idxHandle = 0 ; idxHandle < int(remoteCellGroups[idxLevel].size()) ; ++idxHandle){
                 if(remoteCellGroups[idxLevel][idxHandle].ptrSymb){
+					if(comm.processId() == 4)
+						std::cout << "Narval " << idxLevel << " " << idxHandle << std::endl;
                     starpu_data_unregister(remoteCellGroups[idxLevel][idxHandle].handleSymb);
                     starpu_data_unregister(remoteCellGroups[idxLevel][idxHandle].handleUp);
                     FAlignedMemory::DeallocBytes(remoteCellGroups[idxLevel][idxHandle].ptrSymb);
                     FAlignedMemory::DeallocBytes(remoteCellGroups[idxLevel][idxHandle].ptrUp);
 
                     if(remoteCellGroups[idxLevel][idxHandle].ptrDown){
+						if(comm.processId() == 4)
+							std::cout << "Narval " << idxLevel << " " << idxHandle << std::endl;
                         starpu_data_unregister(remoteCellGroups[idxLevel][idxHandle].handleDown);
                         FAlignedMemory::DeallocBytes(remoteCellGroups[idxLevel][idxHandle].ptrDown);
                     }
@@ -1360,12 +1370,16 @@ protected:
         {
             for(int idxHandle = 0 ; idxHandle < int(remoteParticleGroupss.size()) ; ++idxHandle){
                 if(remoteParticleGroupss[idxHandle].ptrSymb){
+					if(comm.processId() == 4)
+						std::cout << "Narval part  " << idxHandle << std::endl;
                     starpu_data_unregister(remoteParticleGroupss[idxHandle].handleSymb);
                     FAlignedMemory::DeallocBytes(remoteParticleGroupss[idxHandle].ptrSymb);
                 }
             }
             remoteParticleGroupss.clear();
         }
+		if(comm.processId() == 4)
+			std::cout << "Done" << std::endl;
     }
 
     ////////////////////////////////////////////////////////////////////////////
diff --git a/Tests/GroupTree/testBlockedImplicitAlgorithm.cpp b/Tests/GroupTree/testBlockedImplicitAlgorithm.cpp
index d08df067d01083aafc9bb78cea444e398ab5f6ae..5ecf3ea229b4d04bc8dc512a3e0387ba64e3ce9d 100644
--- a/Tests/GroupTree/testBlockedImplicitAlgorithm.cpp
+++ b/Tests/GroupTree/testBlockedImplicitAlgorithm.cpp
@@ -65,7 +65,7 @@ using namespace std;
 
     // FFmmAlgorithmTask FFmmAlgorithmThread
     typedef FFmmAlgorithm<OctreeClass, CellClass, ContainerClass, KernelClass, LeafClass >     FmmClass;
-//#define LOAD_FILE
+#define LOAD_FILE
 #ifndef LOAD_FILE
 	typedef FRandomLoader<FReal> LoaderClass;
 #else
@@ -100,8 +100,8 @@ int main(int argc, char* argv[]){
 		cout << "Pas de mpi -_-\" " << endl;
 #endif
 #ifndef LOAD_FILE
-    const FSize NbParticles   = FParameters::getValue(argc,argv,FParameterDefinitions::NbParticles.options, FSize(100));
-    LoaderClass loader(NbParticles, 1.0, FPoint<FReal>(0,0,0), 0);
+    const FSize NbParticles   = FParameters::getValue(argc,argv,FParameterDefinitions::NbParticles.options, FSize(10000));
+	LoaderClass loader(NbParticles, 1.0, FPoint<FReal>(0,0,0), 0);
 #else
     // Load the particles
     const char* const filename = FParameters::getStr(argc,argv,FParameterDefinitions::InputFile.options, "../Data/test20k.fma");
@@ -157,15 +157,6 @@ int main(int argc, char* argv[]){
 	mpi_rank = groupalgo.getRank();
 	cout << "Executing time (implicit node " << mpi_rank << ") " << elapsedTime << "s\n";
 	timeAverage(mpi_rank, nproc, elapsedTime);
-	//if( groupalgo.getRank() != 0)
-		//return 0;
-	//groupedTree.printInfoBlocks();
-	//for(int i = 0; i < NbLevels; ++i)
-	//{
-		//cout << "Level " << i << "(" << sizeForEachGroup[i].size() << ")" << endl;
-		//for(int j = 0; j < sizeForEachGroup[i].size(); ++j)
-			//cout << "\t" << sizeForEachGroup[i][j] << endl;
-	//}
 	
     // Usual algorithm
     KernelClass kernels;            // FTestKernels FBasicKernels
@@ -276,7 +267,7 @@ void sortParticle(FPoint<FReal> * allParticles, int treeHeight, int groupSize, v
 	}
 	
 	//Compte le nombre de feuilles
-	sizeForEachGroup.resize(treeHeight+1);//Le +1 est pour les particules
+	sizeForEachGroup.resize(treeHeight);
 	MortonIndex previousLeaf = -1;
 	int numberOfLeaf = 0;
 	for(FSize idxPart = 0 ; idxPart < nbParticles ; ++idxPart)
@@ -331,10 +322,6 @@ void sortParticle(FPoint<FReal> * allParticles, int treeHeight, int groupSize, v
 	std::vector<std::vector<std::vector<MortonIndex>>> nodeRepartition;
 	createNodeRepartition(distributedMortonIndex, nodeRepartition, nproc, treeHeight);
 
-	//for(int i = 0; i < nproc; ++i)
-	//{
-			//cout << nodeRepartition[1][i][0] << " - " << nodeRepartition[1][i][1] << endl;
-	//}
 	//Pour chaque niveau calcul de la taille des groupe
 	for(int idxLevel = treeHeight - 2; idxLevel >= 0; --idxLevel)
 	{
diff --git a/Tests/GroupTree/testBlockedMpiAlgorithm.cpp b/Tests/GroupTree/testBlockedMpiAlgorithm.cpp
index e28b1d2f92e9d984d74d1bd2aad35f5e053504ba..81d8f5b875d9daab52fa99ac48e425281c27fe61 100644
--- a/Tests/GroupTree/testBlockedMpiAlgorithm.cpp
+++ b/Tests/GroupTree/testBlockedMpiAlgorithm.cpp
@@ -104,7 +104,7 @@ int main(int argc, char* argv[]){
     memset(particles.get(), 0, sizeof(TestParticle) * loader.getNumberOfParticles());
     for(FSize idxPart = 0 ; idxPart < loader.getNumberOfParticles() ; ++idxPart){
 		loader.fillParticleAtMortonIndex(&(particles[idxPart].position), mpiComm.global().processId()*NbParticles + idxPart,NbLevels);
-        //loader.fillParticle(&(particles[idxPart].position));
+		//loader.fillParticle(&(particles[idxPart].position));
     }
     // Sort in parallel
     FVector<TestParticle> myParticles;
@@ -147,28 +147,20 @@ int main(int argc, char* argv[]){
 		std::cout << "Exchange particle to create the file" << std::endl;
 		std::vector<TestParticle*> particlesGathered;
 		std::vector<int> sizeGathered;
-		std::vector<MortonIndex> mortonIndex;
 		
 		//Ajout des mes particules
 		int sizeofParticle = sizeof(TestParticle)*myParticles.getSize();
 		sizeGathered.push_back(sizeofParticle);
 		particlesGathered.push_back(new TestParticle[sizeofParticle]);
 		memcpy(particlesGathered.back(), myParticles.data(), sizeofParticle);
-		mortonIndex.push_back(leftLimite);
-		mortonIndex.push_back(myLeftLimite);
 		//Recupération des particules des autres
 		for(int i = 1; i < mpiComm.global().processCount(); ++i)
 		{
 			int sizeReceive;
-			MortonIndex mortonStart, mortonEnd;
 			MPI_Recv(&sizeReceive, sizeof(sizeReceive), MPI_BYTE, i, 0, mpiComm.global().getComm(), MPI_STATUS_IGNORE);
 			sizeGathered.push_back(sizeReceive);
 			particlesGathered.push_back(new TestParticle[sizeReceive]);
 			MPI_Recv(particlesGathered.back(), sizeReceive, MPI_BYTE, i, 0, mpiComm.global().getComm(), MPI_STATUS_IGNORE);
-			MPI_Recv(&mortonStart, sizeof(mortonStart), MPI_BYTE, i, 0, mpiComm.global().getComm(), MPI_STATUS_IGNORE);
-			MPI_Recv(&mortonEnd, sizeof(mortonEnd), MPI_BYTE, i, 0, mpiComm.global().getComm(), MPI_STATUS_IGNORE);
-			mortonIndex.push_back(mortonStart);
-			mortonIndex.push_back(mortonEnd);
 		}
 		int sum = 0;
 		for(int a : sizeGathered)
@@ -180,10 +172,6 @@ int main(int argc, char* argv[]){
 		writer.writeHeader(loader.getCenterOfBox(), loader.getBoxWidth(),totalNbParticles, particles[0]);
 		for(unsigned int i = 0; i < particlesGathered.size(); ++i)
 			writer.writeArrayOfParticles(particlesGathered[i], sizeGathered[i]/sizeof(TestParticle));
-		std::ofstream fichier("mapping", std::ios::out | std::ios::trunc);  //déclaration du flux et ouverture du fichier
-		fichier << mortonIndex.size()/2 << std::endl;
-		for(unsigned int i = 0; i < mortonIndex.size(); i+=2)
-			fichier << mortonIndex[i] << " " << mortonIndex[i+1] << std::endl;
 		for(TestParticle* ptr : particlesGathered)
 			delete ptr;
 		std::cout << "Done exchanging !" << std::endl;
@@ -221,6 +209,7 @@ int main(int argc, char* argv[]){
     });
 
 
+    mpiComm.global().barrier();
 
     typedef FTestCell                   CellClass;
     typedef FTestParticleContainer<FReal>      ContainerClass;
@@ -236,7 +225,7 @@ int main(int argc, char* argv[]){
             FRandomLoader<FReal> loaderAll(NbParticles, 1.0, FPoint<FReal>(0,0,0), idxProc);
             for(FSize idxPart = 0 ; idxPart < loaderAll.getNumberOfParticles() ; ++idxPart){
                 FPoint<FReal> pos;
-                //loaderAll.fillParticle(&pos);
+				//loaderAll.fillParticle(&pos);
 				loaderAll.fillParticleAtMortonIndex(&pos, idxProc*NbParticles + idxPart,NbLevels);
                 tree.insert(pos);
             }