diff --git a/Tests/noDist/testP2PAvx.cpp b/Tests/noDist/testP2PAvx.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ce9b3ef9c6f3fc4c7c17463a719cba02b1b2e5d6
--- /dev/null
+++ b/Tests/noDist/testP2PAvx.cpp
@@ -0,0 +1,159 @@
+// ===================================================================================
+// ===================================================================================
+// Copyright ScalFmm 2011 INRIA, Olivier Coulaud, Berenger Bramas, Matthias Messner
+// olivier.coulaud@inria.fr, berenger.bramas@inria.fr
+// This software is a computer program whose purpose is to compute the FMM.
+//
+// This software is governed by the CeCILL-C and LGPL licenses and
+// abiding by the rules of distribution of free software.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public and CeCILL-C Licenses for more details.
+// "http://www.cecill.info".
+// "http://www.gnu.org/licenses".
+// ===================================================================================
+
+#include <iostream>
+#include <iomanip>
+
+#include <cstdio>
+#include <cstdlib>
+#include <cmath>
+#include <algorithm>
+
+#include  "ScalFmmConfig.h"
+#include "Utils/FTic.hpp"
+#include "Utils/FParameters.hpp"
+
+#include "Files/FFmaGenericLoader.hpp"
+#include "Kernels/P2P/FP2P.hpp"
+#include "Kernels/P2P/FP2PParticleContainer.hpp"
+
+#include "Components/FBasicCell.hpp"
+#include "Components/FSimpleLeaf.hpp"
+#include "Containers/FOctree.hpp"
+
+
+//
+/// \file  DirectComputation.cpp
+//!
+//! \brief DirectComputation: Driver to compute direct interaction between N particles for 1/r kernel.
+//!
+//! DirectComputation: Driver to compute direct interaction between N particles for 1/r kernel.
+//! the particles are read from file given by -fin argument and potential, forces are stored in FMA format.
+//!  <b> General arguments:</b>
+//!     \param   -help (-h)      to see the parameters available in this driver
+//!     \param   -fin name:  file name  to convert (with extension .fma (ascii) or bfma (binary).
+//!                             Only our FMA (.bma, .bfma) is allowed "
+//!     \param    -fout filenameOUT   output file  with extension (default output.bfma)
+//!      \param   -verbose : print index x y z Q V fx fy fz
+//!
+
+// Simply create particles and try the kernels
+int main(int argc, char ** argv){
+	//
+	///////////////////////What we do/////////////////////////////
+	if( FParameters::existParameter(argc, argv, "-help" ) || argc < 4){
+		std::cout << ">> This executable has to be used to compute  interaction either for periodic or non periodic system.\n";
+		std::cout << ">> Example -fin filenameIN.{fma or bfma)     -fout filenameOUT{fma or bfma) \n";
+		std::cout << ">> Default input file : ../Data/unitCubeXYZQ20k.fma\n";
+		std::cout << " Options " << std::endl;
+		std::cout << "     -verbose : print index x y z Q V fx fy fz " << std::endl;
+		std::cout << "     -fin filename. Extension specifies if the file is binary or not. " << std::endl;
+		std::cout << "                            Only our FMA (.bma, .bfma) is allowed " << std::endl;
+		std::cout << "     -fout filenameOUT   output file  with extension (default output.bfma)" << std::endl;
+		exit(-1);
+
+	}
+
+	//////////////////////////////////////////////////////////////
+
+	const std::string defaultFile(/*SCALFMMDataPath+*/"../Data/unitCubeXYZQ20k.fma");
+	const std::string filenameIn(FParameters::getStr(argc,argv,"-fin",  defaultFile.c_str()));
+	const std::string filenameOut(FParameters::getStr(argc,argv,"-fout", "output.bfma"));
+	//
+	FTic counter;
+
+	// -----------------------------------------------------
+	//  LOADER
+	//  -----------------------------------------------------
+	// ---------------------------------------------------------------------------------
+	// Read  particles in the Octree
+	// ---------------------------------------------------------------------------------
+	std::cout << "Opening : " << filenameIn << "\n";
+	//
+	FFmaGenericLoader loader(filenameIn);
+	//
+	int nbParticles = static_cast<int>(loader.getNumberOfParticles());
+	std::cout << "Read " << nbParticles << " particles ..." << std::endl;
+	double BoxWith=loader.getBoxWidth();
+	FPoint Centre(loader.getCenterOfBox().getX(), loader.getCenterOfBox().getY() , loader.getCenterOfBox().getZ());
+	std::cout << "\tWidth : " <<BoxWith << " \t center x : " << loader.getCenterOfBox().getX()
+																		<< " y : " << loader.getCenterOfBox().getY() << " z : " << loader.getCenterOfBox().getZ() << std::endl;
+
+	counter.tic();
+	FmaRParticle *  particles = new FmaRParticle[nbParticles];
+	memset(particles, 0, sizeof(FmaRParticle) * nbParticles) ;
+	//
+	double totalCharge = 0.0;
+	//
+//	int nbDataToRead = particles[0].getReadDataNumber();
+	for(int idx = 0 ; idx<nbParticles ; ++idx){
+		//
+	    loader.fillParticle(particles[idx].getPtrFirstData(), particles[idx].getReadDataNumber());
+		//	loader.fillParticle(particles[idx].getPtrFirstData(), nbDataToRead);    // OK
+		//  loader.fillParticle(particles[idx]); // OK
+	//    std::cout << idx <<"  "<<  particles[idx].getPosition() << " "<<particles[idx].getPhysicalValue() << " "<<particles[idx].getPotential()
+	//			<<"  " << particles[idx].getForces()[0]<<"  " <<particles[idx].getForces()[1]<<"  " <<particles[idx].getForces()[2]<<"  " <<std::endl;
+		//
+	    totalCharge += particles[idx].getPhysicalValue() ;
+	}
+
+	counter.tac();
+
+	std::cout << std::endl;
+	std::cout << "Total Charge         = "<< totalCharge <<std::endl;
+	std::cout << std::endl;
+
+	std::cout << "Done  " << "(@ reading Particles  " << counter.elapsed() << " s)." << std::endl;
+	//Need to copy particles to ContainerClass -> FP2PParticleContainer
+	typedef FBasicCell                 CellClass;
+	typedef FP2PParticleContainer<>         ContainerClass;
+
+	typedef FSimpleLeaf< ContainerClass >                     LeafClass;
+	typedef FOctree< CellClass, ContainerClass , LeafClass >  OctreeClass;
+
+	OctreeClass tree(2, 1, loader.getBoxWidth(), loader.getCenterOfBox());
+	for(int idxP=0 ; idxP<nbParticles ; ++idxP){
+	    tree.insert(particles[idxP].getPosition());
+	}
+	int i=0;
+	tree.forEachLeaf([&](LeafClass * leaf){
+		printf("leaf : %d\n",i++ );
+	    });
+	//
+	// ----------------------------------------------------------------------------------------------------------
+	//                                   COMPUTATION
+	// ----------------------------------------------------------------------------------------------------------
+	FReal denergy = 0.0;
+	//
+	//  computation
+	//
+	{
+	    typename OctreeClass::Iterator iterator(&tree);
+	    iterator.gotoBottomLeft();
+
+	    do{
+		FTreeCoordinate coord = iterator.getCurrentGlobalCoordinate();
+		ContainerClass** neighbors = new ContainerClass*[27];
+		tree.getLeafsNeighbors(neighbors,coord,1);
+		FP2P::FullMutual(iterator.getCurrentLeaf()->getTargets(),neighbors,27);
+
+	    }while(iterator.moveRight());
+	}
+
+	delete[] particles;
+	return 0;
+}