diff --git a/Src/Core/FFmmAlgorithmThreadProcPeriodic.hpp b/Src/Core/FFmmAlgorithmThreadProcPeriodic.hpp
index 3bbe7a5e77892ef90dc96f7d1ff6d251273e417b..f97e87771fdeec6a10c30b6c54de6e51db0b5567 100644
--- a/Src/Core/FFmmAlgorithmThreadProcPeriodic.hpp
+++ b/Src/Core/FFmmAlgorithmThreadProcPeriodic.hpp
@@ -25,9 +25,9 @@
 #include "Utils/FEnv.hpp"
 
 #include "Utils/FMpi.hpp"
-
+#ifdef _OPENMP
 #include <omp.h>
-
+#endif
 #include "FCoreCommon.hpp"
 #include "FP2PExclusion.hpp"
 
@@ -2021,8 +2021,8 @@ protected:
         FAssertLF(leafsNeedOtherData.getSize() < std::numeric_limits<int>::max());
         const int nbLeafToProceed = int(leafsNeedOtherData.getSize());
 
-//#pragma omp for  schedule(dynamic, userChunkSize)
-#pragma omp single
+#pragma omp for  schedule(dynamic, userChunkSize)
+//#pragma omp single
         for(int idxLeafs = 0 ; idxLeafs < nbLeafToProceed ; ++idxLeafs){
             LeafData currentIter = leafsNeedOtherData[idxLeafs];
 
@@ -2035,7 +2035,6 @@ protected:
                                                                   indexesNeighbors,indexArray,AllDirs);
   //          std::cout << currentIter.coord.getMortonIndex() << "   Cells comming from another process " << nbNeigh <<std::endl;
             std::array<ContainerClass*,19>     periodicNeighbors{};
-            std::array<std::array<FReal,3>,19> periodicOffset{};
             int nbPeriodicCells=0 ;
 
             // Pourquoi pas de decallage de boite ??,
@@ -2047,7 +2046,7 @@ protected:
                         neighbors[counter]         = hypotheticNeighbor;
                         neighborPositions[counter] = indexArray[idxNeigh];
                         FTreeCoordinate coord3d(indexesNeighbors[idxNeigh] );
-                        std::array<FReal,3> & offSet = periodicOffset[nbPeriodicCells];
+                        std::array<FReal,3> offSet{};
                         bool movePos = false ;
                         coord3d-=currentIter.coord ;
                         if (std::abs(coord3d.getX()) == limitem1  ){ // it's a periodic cell)
@@ -2066,22 +2065,21 @@ protected:
 //                        std::cout << "     ( " << indexesNeighbors[idxNeigh] << "  "  << coord3d << "  offset= "
 //                                  <<offSet[0] << "," << offSet[1] << "," <<offSet[2] <<" )"  ;
                         if(movePos){
-                            periodicNeighbors[nbPeriodicCells] = hypotheticNeighbor;
                             ///  NEW NEW NEW NEW NEW NEW
                             // Put periodic cell into another cell (copy data)
-                              ///// HERE HERE HERE HERE HERE
-//				      ContainerClass * periodicNeighbors[nbPeriodicCells] = new ContainerClass(*(neighbors[idxNeig])) ;
-                            ///  NEW NEW NEW NEW NEW NEW
-                            FReal*const positionsX = hypotheticNeighbor->getPositions()[0];
-                            FReal*const positionsY = hypotheticNeighbor->getPositions()[1];
-                            FReal*const positionsZ = hypotheticNeighbor->getPositions()[2];
-                            for(FSize idxPart = 0; idxPart < hypotheticNeighbor->getNbParticles() ; ++idxPart){
-                                positionsX[idxPart] += offSet[0];
-                                positionsY[idxPart] += offSet[1];
-                                positionsZ[idxPart] += offSet[2];
-//                                std::cout <<indexesNeighbors[idxNeigh] <<  "  " << positionsX[idxPart] << "    "<< positionsY[idxPart] << "  "<< positionsZ[idxPart] <<std::endl;
-                              }
-                            ++nbPeriodicCells;
+                           periodicNeighbors[nbPeriodicCells] = new ContainerClass(*(neighbors[idxNeigh])) ;
+                           // newPos = pos + ofsset
+                           FReal*const positionsX = periodicNeighbors[nbPeriodicCells]->getPositions()[0];
+                           FReal*const positionsY = periodicNeighbors[nbPeriodicCells]->getPositions()[1];
+                           FReal*const positionsZ = periodicNeighbors[nbPeriodicCells]->getPositions()[2];
+                           for(FSize idxPart = 0; idxPart < periodicNeighbors[nbPeriodicCells]->getNbParticles() ; ++idxPart){
+                               positionsX[idxPart] += offSet[0];
+                               positionsY[idxPart] += offSet[1];
+                               positionsZ[idxPart] += offSet[2];
+                               //                                std::cout <<indexesNeighbors[idxNeigh] <<  "  " << positionsX[idxPart] << "    "<< positionsY[idxPart] << "  "<< positionsZ[idxPart] <<std::endl;
+                             }
+                           ++nbPeriodicCells;
+                           neighbors[counter] = periodicNeighbors[nbPeriodicCells];
                           }
                         ++counter;
                       }
@@ -2098,22 +2096,11 @@ protected:
                 if(nbPeriodicCells >0){
                     //to Do
                     for(int i=0 ; i < nbPeriodicCells ; ++i){
-                        auto hypotheticNeighbor = periodicNeighbors[i] ;
-                        auto & offSet           = periodicOffset[i];
-                        FReal*const positionsX = hypotheticNeighbor->getPositions()[0];
-                        FReal*const positionsY = hypotheticNeighbor->getPositions()[1];
-                        FReal*const positionsZ = hypotheticNeighbor->getPositions()[2];
-                        for(FSize idxPart = 0; idxPart < hypotheticNeighbor->getNbParticles() ; ++idxPart){
-                            positionsX[idxPart] -= offSet[0];
-                            positionsY[idxPart] -= offSet[1];
-                            positionsZ[idxPart] -= offSet[2];
-                          }
+                        delete periodicNeighbors[i] ;
                       }
                   }
               }
           } // end for loop
-#pragma omp barrier
-
       }
 
     delete[] leafsDataArray;