diff --git a/example/Vector/4_multiphase_celllist_verlet/main.cpp b/example/Vector/4_multiphase_celllist_verlet/main.cpp
index bf6223ca414c8bd0306cb574606811c2f0b9bb5a..e426b889e26f9aec2d7d4a1a1e8c822a2e9c9809 100644
--- a/example/Vector/4_multiphase_celllist_verlet/main.cpp
+++ b/example/Vector/4_multiphase_celllist_verlet/main.cpp
@@ -172,7 +172,7 @@ int main(int argc, char* argv[])
 	//! \cond [count part from phase0 to 1] \endcond
 
 	// Get an iterator of the particles of the phase0
-	auto it = phases.get(0).getDomainIterator();
+	it = phases.get(0).getDomainIterator();
 
 	// For each particle of the phase0
 	while (it.isNext())
@@ -314,13 +314,13 @@ int main(int argc, char* argv[])
 	//! \cond [compute sym multi-phase two phase] \endcond
 
 	// Get the cell list of the phase1
-	auto CL_phase1 = phases.get(1).getCellListSym(r_cut);
+	CL_phase1 = phases.get(1).getCellListSym(r_cut);
 
 	// This function create a Verlet-list between phases 0 and 1
-	auto NN_ver01 = createVerletSym(phases.get(0),CL_phase1,r_cut);
+	NN_ver01 = createVerletSym(phases.get(0),CL_phase1,r_cut);
 
 	// Get an iterator over the real and ghost particles
-	auto it = phases.get(0).getDomainAndGhostIterator();
+	it = phases.get(0).getDomainAndGhostIterator();
 
 	// For each particles
 	while (it.isNext())
@@ -338,7 +338,7 @@ int main(int argc, char* argv[])
 	// Compute interaction from phase0 to phase1
 
 	// Get an iterator over the real particles of phase0
-	auto it = phases.get(0).getDomainIterator();
+	it = phases.get(0).getDomainIterator();
 
 	// For each particle of the phase0
 	while (it.isNext())
@@ -397,7 +397,7 @@ int main(int argc, char* argv[])
 	//! \cond [create sym multi-phase multi verlet] \endcond
 
 	// Get an iterator over the phase0
-	auto it = phases.get(0).getDomainAndGhostIterator();
+	it = phases.get(0).getDomainAndGhostIterator();
 
 	// For each particle of the phase 0
 	while (it.isNext())
@@ -416,7 +416,7 @@ int main(int argc, char* argv[])
 	}
 
 	// This function create an "Empty" Multiphase Cell List
-	auto CL_all = createCellListSymM<2>(phases,r_cut);
+	CL_all = createCellListSymM<2>(phases,r_cut);
 
 	// Type of the multiphase Verlet-list
 	typedef decltype(createVerletSymM<2>(phases.get(0),CL_all,r_cut)) verlet_type;
@@ -518,7 +518,7 @@ int main(int argc, char* argv[])
 		current_phase.getProp<0>(p) = 0.0;
 
 		// Get an iterator of all the particles neighborhood of p
-		auto Np = CL_all.getNNIterator(NN.getCell(current_phase.getPos(p)));
+		auto Np = CL_all.getNNIterator(CL_all.getCell(current_phase.getPos(p)));
 
 		// For each particle near p
 		while (Np.isNext())
diff --git a/openfpm_data b/openfpm_data
index 03740810f8972af0b6ec122779d73a44b39cf3cb..ed732d7fe9e9644a9ad49f319923874b0c2c9e78 160000
--- a/openfpm_data
+++ b/openfpm_data
@@ -1 +1 @@
-Subproject commit 03740810f8972af0b6ec122779d73a44b39cf3cb
+Subproject commit ed732d7fe9e9644a9ad49f319923874b0c2c9e78
diff --git a/src/Vector/vector_dist.hpp b/src/Vector/vector_dist.hpp
index 64d85b55379a9734fe09c55227645c2b171017e5..ded398c37790ab18cb020533efe4ab45e7b36100 100644
--- a/src/Vector/vector_dist.hpp
+++ b/src/Vector/vector_dist.hpp
@@ -421,20 +421,7 @@ public:
 	 */
 	template<typename CellL = CellList<dim, St, FAST, shift<dim, St> > > void updateCellList(CellL & cell_list)
 	{
-		// Clear the cell list from the previous particles
-		cell_list.clear();
-
-		// for each particle real and ghost, add the particle to the cell list
-		auto it = getIterator();
-
-		while (it.isNext())
-		{
-			auto key = it.get();
-
-			cell_list.add(this->getPos(key), key.getKey());
-
-			++it;
-		}
+		populate_cell_list(v_pos,cell_list,g_m,CL_NON_SYMMETRIC);
 
 		cell_list.set_gm(g_m);
 	}
@@ -448,32 +435,7 @@ public:
 	 */
 	template<typename CellL = CellList<dim, St, FAST, shift<dim, St> > > void updateCellListSym(CellL & cell_list)
 	{
-		// Clear the cell list from the previous particles
-		cell_list.clear();
-
-		// for each particle real and ghost, add the particle to the cell list
-		auto it = getDomainIterator();
-
-		while (it.isNext())
-		{
-			auto key = it.get();
-
-			cell_list.addDom(this->getPos(key), key.getKey());
-
-			++it;
-		}
-
-		// for each particle real and ghost, add the particle to the cell list
-		it = getGhostIterator();
-
-		while (it.isNext())
-		{
-			auto key = it.get();
-
-			cell_list.addGhost(this->getPos(key), key.getKey());
-
-			++it;
-		}
+		populate_cell_list(v_pos,cell_list,g_m,CL_SYMMETRIC);
 
 		cell_list.set_gm(g_m);
 	}
diff --git a/src/Vector/vector_dist_unit_test.hpp b/src/Vector/vector_dist_unit_test.hpp
index 866868b36a6b3d2f285a76eccc23ff812164ca92..07b360353afb58a8d2faced5010b340c070c84b6 100644
--- a/src/Vector/vector_dist_unit_test.hpp
+++ b/src/Vector/vector_dist_unit_test.hpp
@@ -1566,25 +1566,11 @@ BOOST_AUTO_TEST_CASE( vector_dist_ghost_with_ghost_buffering )
 		auto it2 = vd.getGhostIterator();
 		bool ret = true;
 
-		while (it2.isNext())
-		{
-			auto key = it2.get();
-
-			ret &= vd.getProp<0>(key) == i;
-
-			ret &= vd.getProp<1>(key) == vd.getPos(key)[0];
-			ret &= vd.getProp<2>(key) == vd.getPos(key)[0] * vd.getPos(key)[0];
-
-			++it2;
-		}
-
-		it2 = vd.getGhostIterator();
 		while (it2.isNext())
 		{
 			// Particle p
 			auto p = it.get();
 
-			// we shift down he particles
 			ret &= vd.getPos(p)[0] == 10.0;
 
 			// we shift