diff --git a/src/.deps/pdata-HeapMemory.Po b/src/.deps/pdata-HeapMemory.Po
index 0706e43c51600c003e028e8c4ed69cf8d0826c70..3267e5443a5969bedabbf93fbef3540b4cd7fcd7 100644
--- a/src/.deps/pdata-HeapMemory.Po
+++ b/src/.deps/pdata-HeapMemory.Po
@@ -72,9 +72,10 @@ pdata-HeapMemory.o: ../../OpenFPM_devices/src/memory/HeapMemory.cpp \
  /usr/include/sys/types.h /usr/include/sys/select.h \
  /usr/include/bits/select.h /usr/include/bits/sigset.h \
  /usr/include/sys/sysmacros.h /usr/include/alloca.h \
- /usr/include/bits/stdlib-float.h /usr/include/c++/4.8.3/cstdio \
- /usr/include/libio.h /usr/include/_G_config.h \
- /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+ /usr/include/bits/stdlib-bsearch.h /usr/include/bits/stdlib-float.h \
+ /usr/include/c++/4.8.3/cstdio /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/bits/stdio_lim.h \
+ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \
  /usr/include/c++/4.8.3/cerrno /usr/include/errno.h \
  /usr/include/bits/errno.h /usr/include/linux/errno.h \
  /usr/include/asm/errno.h /usr/include/asm-generic/errno.h \
@@ -303,6 +304,8 @@ config.h:
 
 /usr/include/alloca.h:
 
+/usr/include/bits/stdlib-bsearch.h:
+
 /usr/include/bits/stdlib-float.h:
 
 /usr/include/c++/4.8.3/cstdio:
@@ -315,6 +318,8 @@ config.h:
 
 /usr/include/bits/sys_errlist.h:
 
+/usr/include/bits/stdio.h:
+
 /usr/include/c++/4.8.3/cerrno:
 
 /usr/include/errno.h:
diff --git a/src/.deps/pdata-Memleak_check.Po b/src/.deps/pdata-Memleak_check.Po
index e3f40118b47199b47e7f00efae9c6d8ac10fb0a7..06e60b91b08601b6213b8ea1c9b507094f31276d 100644
--- a/src/.deps/pdata-Memleak_check.Po
+++ b/src/.deps/pdata-Memleak_check.Po
@@ -69,9 +69,10 @@ pdata-Memleak_check.o: ../../OpenFPM_data/src/Memleak_check.cpp \
  /usr/include/sys/types.h /usr/include/sys/select.h \
  /usr/include/bits/select.h /usr/include/bits/sigset.h \
  /usr/include/sys/sysmacros.h /usr/include/alloca.h \
- /usr/include/bits/stdlib-float.h /usr/include/c++/4.8.3/cstdio \
- /usr/include/libio.h /usr/include/_G_config.h \
- /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+ /usr/include/bits/stdlib-bsearch.h /usr/include/bits/stdlib-float.h \
+ /usr/include/c++/4.8.3/cstdio /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/bits/stdio_lim.h \
+ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \
  /usr/include/c++/4.8.3/cerrno /usr/include/errno.h \
  /usr/include/bits/errno.h /usr/include/linux/errno.h \
  /usr/include/asm/errno.h /usr/include/asm-generic/errno.h \
@@ -295,6 +296,8 @@ config.h:
 
 /usr/include/alloca.h:
 
+/usr/include/bits/stdlib-bsearch.h:
+
 /usr/include/bits/stdlib-float.h:
 
 /usr/include/c++/4.8.3/cstdio:
@@ -307,6 +310,8 @@ config.h:
 
 /usr/include/bits/sys_errlist.h:
 
+/usr/include/bits/stdio.h:
+
 /usr/include/c++/4.8.3/cerrno:
 
 /usr/include/errno.h:
diff --git a/src/.deps/pdata-VCluster.Po b/src/.deps/pdata-VCluster.Po
index aae231be0c9ed71bd803a0c45328058ef26c1440..6e74898fd176d858c73288385c98e6e6155271a0 100644
--- a/src/.deps/pdata-VCluster.Po
+++ b/src/.deps/pdata-VCluster.Po
@@ -75,9 +75,10 @@ pdata-VCluster.o: ../../OpenFPM_vcluster/src/VCluster.cpp \
  /usr/include/sys/types.h /usr/include/sys/select.h \
  /usr/include/bits/select.h /usr/include/bits/sigset.h \
  /usr/include/sys/sysmacros.h /usr/include/alloca.h \
- /usr/include/bits/stdlib-float.h /usr/include/c++/4.8.3/cstdio \
- /usr/include/libio.h /usr/include/_G_config.h \
- /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+ /usr/include/bits/stdlib-bsearch.h /usr/include/bits/stdlib-float.h \
+ /usr/include/c++/4.8.3/cstdio /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/bits/stdio_lim.h \
+ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \
  /usr/include/c++/4.8.3/cerrno /usr/include/errno.h \
  /usr/include/bits/errno.h /usr/include/linux/errno.h \
  /usr/include/asm/errno.h /usr/include/asm-generic/errno.h \
@@ -788,7 +789,8 @@ pdata-VCluster.o: ../../OpenFPM_vcluster/src/VCluster.cpp \
  /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \
  /usr/include/bits/inf.h /usr/include/bits/nan.h \
  /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \
- /usr/include/c++/4.8.3/sstream /usr/include/c++/4.8.3/bits/sstream.tcc \
+ /usr/include/bits/mathinline.h /usr/include/c++/4.8.3/sstream \
+ /usr/include/c++/4.8.3/bits/sstream.tcc \
  /usr/include/boost/type_traits/is_compound.hpp \
  /usr/include/boost/type_traits/is_floating_point.hpp \
  /usr/include/boost/type_traits/is_member_object_pointer.hpp \
@@ -1171,6 +1173,8 @@ pdata-VCluster.o: ../../OpenFPM_vcluster/src/VCluster.cpp \
 
 /usr/include/alloca.h:
 
+/usr/include/bits/stdlib-bsearch.h:
+
 /usr/include/bits/stdlib-float.h:
 
 /usr/include/c++/4.8.3/cstdio:
@@ -1183,6 +1187,8 @@ pdata-VCluster.o: ../../OpenFPM_vcluster/src/VCluster.cpp \
 
 /usr/include/bits/sys_errlist.h:
 
+/usr/include/bits/stdio.h:
+
 /usr/include/c++/4.8.3/cerrno:
 
 /usr/include/errno.h:
@@ -2689,6 +2695,8 @@ config.h:
 
 /usr/include/bits/mathcalls.h:
 
+/usr/include/bits/mathinline.h:
+
 /usr/include/c++/4.8.3/sstream:
 
 /usr/include/c++/4.8.3/bits/sstream.tcc:
diff --git a/src/.deps/pdata-main.Po b/src/.deps/pdata-main.Po
index a45efb54360899b4417ab89034201c0ad4631f40..4b1c8c212fa0324f5f74970a90b65d1d6c52cc48 100644
--- a/src/.deps/pdata-main.Po
+++ b/src/.deps/pdata-main.Po
@@ -68,9 +68,10 @@ pdata-main.o: main.cpp /usr/include/stdc-predef.h \
  /usr/include/sys/types.h /usr/include/sys/select.h \
  /usr/include/bits/select.h /usr/include/bits/sigset.h \
  /usr/include/sys/sysmacros.h /usr/include/alloca.h \
- /usr/include/bits/stdlib-float.h /usr/include/c++/4.8.3/cstdio \
- /usr/include/libio.h /usr/include/_G_config.h \
- /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+ /usr/include/bits/stdlib-bsearch.h /usr/include/bits/stdlib-float.h \
+ /usr/include/c++/4.8.3/cstdio /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/bits/stdio_lim.h \
+ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \
  /usr/include/c++/4.8.3/cerrno /usr/include/errno.h \
  /usr/include/bits/errno.h /usr/include/linux/errno.h \
  /usr/include/asm/errno.h /usr/include/asm-generic/errno.h \
@@ -737,7 +738,8 @@ pdata-main.o: main.cpp /usr/include/stdc-predef.h \
  /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \
  /usr/include/bits/inf.h /usr/include/bits/nan.h \
  /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \
- /usr/include/c++/4.8.3/sstream /usr/include/c++/4.8.3/bits/sstream.tcc \
+ /usr/include/bits/mathinline.h /usr/include/c++/4.8.3/sstream \
+ /usr/include/c++/4.8.3/bits/sstream.tcc \
  /usr/include/boost/type_traits/is_compound.hpp \
  /usr/include/boost/type_traits/is_floating_point.hpp \
  /usr/include/boost/type_traits/is_member_object_pointer.hpp \
@@ -1081,6 +1083,7 @@ pdata-main.o: main.cpp /usr/include/stdc-predef.h \
  /usr/include/boost/math/tools/user.hpp \
  /usr/include/boost/detail/fenv.hpp /usr/include/c++/4.8.3/fenv.h \
  /usr/include/fenv.h /usr/include/bits/fenv.h \
+ /usr/include/bits/fenvinline.h \
  /usr/include/boost/math/special_functions/math_fwd.hpp \
  /usr/include/boost/math/special_functions/detail/round_fwd.hpp \
  /usr/include/boost/math/tools/promotion.hpp \
@@ -1294,8 +1297,9 @@ pdata-main.o: main.cpp /usr/include/stdc-predef.h \
  ../../metis_install/include/metis.h /usr/include/inttypes.h \
  ../../OpenFPM_IO/src/VTKWriter.hpp dec_optimizer.hpp \
  ../../OpenFPM_data/src/NN/CellList/CellDecomposer.hpp \
- ../../OpenFPM_data/src/util.hpp Decomposition/ORB_unit_test.hpp \
- Decomposition/ORB.hpp ../../OpenFPM_data/src/data_type/scalar.hpp \
+ ../../OpenFPM_data/src/util.hpp unit_test_init_cleanup.hpp \
+ Decomposition/ORB_unit_test.hpp Decomposition/ORB.hpp \
+ ../../OpenFPM_data/src/data_type/scalar.hpp \
  Graph/CartesianGraphFactory_unit_test.hpp \
  Graph/CartesianGraphFactory.hpp metis_util_unit_test.hpp metis_util.hpp \
  dec_optimizer_unit_test.hpp dec_optimizer.hpp \
@@ -1499,6 +1503,8 @@ pdata-main.o: main.cpp /usr/include/stdc-predef.h \
 
 /usr/include/alloca.h:
 
+/usr/include/bits/stdlib-bsearch.h:
+
 /usr/include/bits/stdlib-float.h:
 
 /usr/include/c++/4.8.3/cstdio:
@@ -1511,6 +1517,8 @@ pdata-main.o: main.cpp /usr/include/stdc-predef.h \
 
 /usr/include/bits/sys_errlist.h:
 
+/usr/include/bits/stdio.h:
+
 /usr/include/c++/4.8.3/cerrno:
 
 /usr/include/errno.h:
@@ -2929,6 +2937,8 @@ config.h:
 
 /usr/include/bits/mathcalls.h:
 
+/usr/include/bits/mathinline.h:
+
 /usr/include/c++/4.8.3/sstream:
 
 /usr/include/c++/4.8.3/bits/sstream.tcc:
@@ -3701,6 +3711,8 @@ config.h:
 
 /usr/include/bits/fenv.h:
 
+/usr/include/bits/fenvinline.h:
+
 /usr/include/boost/math/special_functions/math_fwd.hpp:
 
 /usr/include/boost/math/special_functions/detail/round_fwd.hpp:
@@ -4181,6 +4193,8 @@ dec_optimizer.hpp:
 
 ../../OpenFPM_data/src/util.hpp:
 
+unit_test_init_cleanup.hpp:
+
 Decomposition/ORB_unit_test.hpp:
 
 Decomposition/ORB.hpp:
diff --git a/src/Makefile b/src/Makefile
index 5caa50694257308cf217eb478314df08c16508f1..978199762b343f0f3dfbf558855ef71d038d4fd0 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -186,7 +186,7 @@ CUDA_CFLAGS =  -I -I -I/usr/local/cuda-5.5/include
 CUDA_LIBS =  -L -L -L/usr/local/cuda-5.5/lib64 -lcuda -lcudart
 CXX = mpic++
 CXXDEPMODE = depmode=gcc3
-CXXFLAGS =  --std=c++11  -mtune=corei7 -g3  -Wall -O0  -mavx -msse4.2 -msse4.1 -msse3 -msse2 -msse -mmmx -Wno-unused-but-set-variable
+CXXFLAGS =  --std=c++11  -mtune=corei7 -Wall -O3 -g3  -mavx -msse4.2 -msse4.1 -msse3 -msse2 -msse -mmmx -Wno-unused-but-set-variable
 CYGPATH_W = echo
 DEFS = -DHAVE_CONFIG_H
 DEPDIR = .deps
@@ -207,7 +207,7 @@ LTLIBOBJS =
 MAKEINFO = ${SHELL} /home/i-bird/Desktop/MOSAIC/OpenFPM_project/OpenFPM_pdata/missing makeinfo
 MKDIR_P = /usr/bin/mkdir -p
 NVCC = /usr/local/cuda-5.5/bin/nvcc
-NVCCFLAGS =    -g -O0 
+NVCCFLAGS =    -O3 
 NVCC_EXIST = yes
 OBJEXT = o
 PACKAGE = full-package-name
diff --git a/src/SubdomainGraphNodes.hpp b/src/SubdomainGraphNodes.hpp
index ce5326820e532e7dce64d7f412534b66ca5ac6ec..b58f94d72efb6212de41c787a7e045b6c4c5cc56 100644
--- a/src/SubdomainGraphNodes.hpp
+++ b/src/SubdomainGraphNodes.hpp
@@ -134,7 +134,7 @@ struct nm_part_v
 	static const unsigned int max_prop = 2;
 };
 
-const std::string nm_part_v::attributes::name[] = {"id"};
+const std::string nm_part_v::attributes::name[] = {"id","sub_id"};
 
 /*! \brief Reduced edge graph node
  *
diff --git a/src/Vector/vector_dist.hpp b/src/Vector/vector_dist.hpp
index 930eeba3e0baf9f82a1dd4938303d0a0b486a247..064cc2248ae621abe3b4ba2d664429ca75e01460 100644
--- a/src/Vector/vector_dist.hpp
+++ b/src/Vector/vector_dist.hpp
@@ -244,7 +244,7 @@ public:
 		recv_cnt = 0;
 		v_cl.sendrecvMultipleMessages(prc_sz_r.size(),&p_map.get(0), &prc_sz_r.get(0), &prc_r.get(0) , &ptr.get(0) , vector_dist::message_alloc, this ,NEED_ALL_SIZE);
 
-		// overwrite the outcoming particle with the incoming particle
+		// overwrite the outcoming particle with the incoming particle and resize the vectors
 
 		size_t o_p_id = 0;
 
@@ -254,16 +254,16 @@ public:
 
 			size_t n_ele = v_proc.get(i) / (sizeof(point) + sizeof(prop));
 
-			PtrMemory ptr1(hp_recv.getPointer(),n_ele * sizeof(point));
-			PtrMemory ptr2((unsigned char *)hp_recv.getPointer() + n_ele * sizeof(point),n_ele * sizeof(prop));
+			PtrMemory * ptr1 = new PtrMemory(hp_recv.getPointer(),n_ele * sizeof(point));
+			PtrMemory * ptr2 = new PtrMemory((unsigned char *)hp_recv.getPointer() + n_ele * sizeof(point),n_ele * sizeof(prop));
 
 			// create vector representation to a piece of memory already allocated
 
 			openfpm::vector<point,openfpm::device_cpu<point>,PtrMemory,openfpm::grow_policy_identity> vpos;
 			openfpm::vector<prop,openfpm::device_cpu<prop>,PtrMemory,openfpm::grow_policy_identity> vprp;
 
-			vpos.setMemory(ptr1);
-			vprp.setMemory(ptr2);
+			vpos.setMemory(*ptr1);
+			vprp.setMemory(*ptr2);
 
 			vpos.resize(n_ele);
 			vprp.resize(n_ele);
@@ -286,7 +286,10 @@ public:
 			}
 		}
 
-		// Add the remaining incoming particle
+		// remove the hole (out-going particles) in the vector
+
+		v_pos.get(0).remove(opart,o_p_id);
+		v_prp.get(0).remove(opart,o_p_id);
 	}
 
 	// Heap memory receiver
diff --git a/src/Vector/vector_dist_unit_test.hpp b/src/Vector/vector_dist_unit_test.hpp
index 6c0b15e79a41f1f4c368c0041fbf82721fd2154c..748940c02f2e2f0ec7649131c89e9266e4fdc621 100644
--- a/src/Vector/vector_dist_unit_test.hpp
+++ b/src/Vector/vector_dist_unit_test.hpp
@@ -49,6 +49,8 @@ BOOST_AUTO_TEST_CASE( vector_dist_iterator_test_use )
 	{
 		auto key = it.get();
 
+		// Check if local otherwise print the particle value
+
 		BOOST_REQUIRE_EQUAL(ct.isLocal(vd.template getPos<s::x>(key)),true);
 
 		++it;
diff --git a/src/main.cpp b/src/main.cpp
index f7700ac367089ef37f0149fb13b615acebd5a3d8..fe80dc22a50f03e316e7f7467be967f758e0cd74 100755
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -15,6 +15,7 @@
 #include "Space/Shape/Box.hpp"
 #include "util.hpp"
 
+#include "unit_test_init_cleanup.hpp"
 #include "Decomposition/ORB_unit_test.hpp"
 #include "Graph/CartesianGraphFactory_unit_test.hpp"
 #include "metis_util_unit_test.hpp"