diff --git a/src/Decomposition/CartDecomposition.hpp b/src/Decomposition/CartDecomposition.hpp
index dab7b09b6f8163a833241092e9f81377fc620876..7d13b3312cb3cb3a488a93f1c6df628d5c61294d 100644
--- a/src/Decomposition/CartDecomposition.hpp
+++ b/src/Decomposition/CartDecomposition.hpp
@@ -86,15 +86,6 @@ private:
 	//! the set of all local sub-domain as vector
 	openfpm::vector<SpaceBox<dim,T>> sub_domains;
 
-	//! for each sub-domain (first vector), contain the list (nested vector) of the neighborhood processors
-	//! and for each processor contain the boxes calculated from the intersection
-	//! of the sub-domains + ghost with the near-by processor sub-domain () and the other way around
-	//! \see calculateGhostBoxes
-//	openfpm::vector< openfpm::vector< Box_proc<dim,T> > > box_nn_processor_int;
-
-	//! It store the same information of box_nn_processor_int organized by processor id
-//	openfpm::vector< Box_dom<dim,T> > proc_int_box;
-
 	//! for each sub-domain, contain the list of the neighborhood processors
 	openfpm::vector<openfpm::vector<long unsigned int> > box_nn_processor;
 
@@ -118,9 +109,6 @@ private:
 	//! Runtime virtual cluster machine
 	Vcluster & v_cl;
 
-	//! Cell-list that store the geometrical information of the internal ghost boxes
-//	CellList<dim,T,FAST> geo_cell;
-
 	//! Cell-list that store the geometrical information of the local internal ghost boxes
 	CellList<dim,T,FAST> lgeo_cell;
 
@@ -319,216 +307,6 @@ private:
 		}
 	}
 
-	/*! \brief Create the box_nn_processor_int (bx part)  structure
-	 *
-	 * This structure store for each sub-domain of this processors enlarged by the ghost size the boxes that
-	 *  come from the intersection with the near processors sub-domains (External ghost box)
-	 *
-	 * \param ghost margins
-	 *
-	 * \note Are the G8_0 G9_0 G9_1 G5_0 boxes in calculateGhostBoxes
-	 * \see calculateGhostBoxes
-	 *
-	 */
-/*	void create_box_nn_processor_ext(Ghost<dim,T> & ghost)
-	{
-		box_nn_processor_int.resize(sub_domains.size());
-		proc_int_box.resize(nn_prcs<dim,T>::getNNProcessors());
-
-		// For each sub-domain
-		for (size_t i = 0 ; i < sub_domains.size() ; i++)
-		{
-			SpaceBox<dim,T> sub_with_ghost = sub_domains.get(i);
-
-			// enlarge the sub-domain with the ghost
-			sub_with_ghost.enlarge(ghost);
-
-			// resize based on the number of adjacent processors
-			box_nn_processor_int.get(i).resize(box_nn_processor.get(i).size());
-
-			// For each processor adjacent to this sub-domain
-			for (size_t j = 0 ; j < box_nn_processor.get(i).size() ; j++)
-			{
-				// Contiguous processor
-				size_t p_id = box_nn_processor.get(i).get(j);
-
-				// store the box in proc_int_box storing from which sub-domain they come from
-				Box_dom<dim,T> & proc_int_box_g = proc_int_box.get(nn_prcs<dim,T>::ProctoID(p_id));
-
-				// get the set of sub-domains of the adjacent processor p_id
-				const openfpm::vector< ::Box<dim,T> > & nn_processor_subdomains_g = nn_prcs<dim,T>::getAdjacentSubdomain(p_id);
-
-				// near processor sub-domain intersections
-				openfpm::vector< ::Box<dim,T> > & box_nn_processor_int_gg = box_nn_processor_int.get(i).get(j).bx;
-
-				// for each near processor sub-domain intersect with the enlarged local sub-domain and store it
-				for (size_t b = 0 ; b < nn_processor_subdomains_g.size() ; b++)
-				{
-					::Box<dim,T> bi;
-
-					bool intersect = sub_with_ghost.Intersect(::Box<dim,T>(nn_processor_subdomains_g.get(b)),bi);
-
-					if (intersect == true)
-					{
-						struct p_box<dim,T> pb;
-
-						pb.box = bi;
-						pb.proc = p_id;
-						pb.lc_proc = nn_prcs<dim,T>::ProctoID(p_id);
-
-						//
-						// Updating
-						//
-						// vb_ext
-						// box_nn_processor_int
-						// proc_int_box
-						//
-						// They all store the same information but organized in different ways
-						// read the description of each for more information
-						//
-						vb_ext.add(pb);
-						box_nn_processor_int_gg.add(bi);
-						proc_int_box_g.ebx.add();
-						proc_int_box_g.ebx.last() = bi;
-						proc_int_box_g.ebx.last().sub = i;
-
-						// Search for the correct id
-						size_t k = 0;
-						size_t p_idp = nn_prcs<dim,T>::ProctoID(p_id);
-
-						for (k = 0 ; k < nn_prcs<dim,T>::getInternalAdjSubdomain(p_idp).size() ; k++)
-						{
-							if (nn_prcs<dim,T>::getInternalAdjSubdomain(p_idp).get(k) == i)
-								break;
-						}
-						if (k == nn_prcs<dim,T>::getInternalAdjSubdomain(p_idp).size())
-							std::cerr << "Error: " << __FILE__ << ":" << __LINE__ << " sub-domain not found\n";
-
-						proc_int_box_g.ebx.last().id = (k * nn_processor_subdomains_g.size() + b) * v_cl.getProcessingUnits() + p_id;
-					}
-				}
-			}
-		}
-	}*/
-
-	/*! \brief Create the box_nn_processor_int (nbx part) structure, the geo_cell list and proc_int_box
-	 *
-	 * This structure store for each sub-domain of this processors the boxes that come from the intersection
-	 * of the near processors sub-domains enlarged by the ghost size (Internal ghost box). These boxes
-	 * fill a geometrical cell list. The proc_int_box store the same information ordered by near processors
-	 *
-	 * \param ghost margins
-	 *
-	 * \note Are the B8_0 B9_0 B9_1 B5_0 boxes in calculateGhostBoxes
-	 * \see calculateGhostBoxes
-	 *
-	 */
-/*	void create_box_nn_processor_int(Ghost<dim,T> & ghost)
-	{
-		box_nn_processor_int.resize(sub_domains.size());
-		proc_int_box.resize(nn_prcs<dim,T>::getNNProcessors());
-
-		// For each sub-domain
-		for (size_t i = 0 ; i < sub_domains.size() ; i++)
-		{
-			// For each processor contiguous to this sub-domain
-			for (size_t j = 0 ; j < box_nn_processor.get(i).size() ; j++)
-			{
-				// Contiguous processor
-				size_t p_id = box_nn_processor.get(i).get(j);
-
-				// get the set of sub-domains of the contiguous processor p_id
-				const openfpm::vector< ::Box<dim,T> > & nn_p_box = nn_prcs<dim,T>::getAdjacentSubdomain(p_id);
-
-				// get the local processor id
-				size_t lc_proc = nn_prcs<dim,T>::getAdjacentProcessor(p_id);
-
-				// For each near processor sub-domains enlarge and intersect with the local sub-domain and store the result
-				for (size_t k = 0 ; k < nn_p_box.size() ; k++)
-				{
-
-					// enlarge the near-processor sub-domain
-					::Box<dim,T> n_sub = nn_p_box.get(k);
-
-					// local sub-domain
-					::SpaceBox<dim,T> l_sub = sub_domains.get(i);
-
-					// Create a margin of ghost size around the near processor sub-domain
-					n_sub.enlarge(ghost);
-
-					// Intersect with the local sub-domain
-					p_box<dim,T> b_int;
-					bool intersect = n_sub.Intersect(l_sub,b_int.box);
-
-					// store if it intersect
-					if (intersect == true)
-					{
-						// the box fill with the processor id
-						b_int.proc = p_id;
-
-						// fill the local processor id
-						b_int.lc_proc = lc_proc;
-
-						//
-						// Updating
-						//
-						// vb_int
-						// box_nn_processor_int
-						// proc_int_box
-						//
-						// They all store the same information but organized in different ways
-						// read the description of each for more information
-						//
-
-						// add the box to the near processor sub-domain intersections
-						openfpm::vector< ::Box<dim,T> > & p_box_int = box_nn_processor_int.get(i).get(j).nbx;
-						p_box_int.add(b_int.box);
-						vb_int.add(b_int);
-
-						// store the box in proc_int_box storing from which sub-domain they come from
-						Box_dom<dim,T> & pr_box_int = proc_int_box.get(nn_prcs<dim,T>::ProctoID(p_id));
-						Box_sub<dim,T> sb;
-						sb = b_int.box;
-						sb.sub = i;
-
-						// Search for the correct id
-						size_t s = 0;
-						size_t p_idp = nn_prcs<dim,T>::ProctoID(p_id);
-						for (s = 0 ; s < nn_prcs<dim,T>::getInternalAdjSubdomain(p_idp).size() ; s++)
-						{
-							if (nn_prcs<dim,T>::getInternalAdjSubdomain(p_idp).get(s) == i)
-								break;
-						}
-						if (s == nn_prcs<dim,T>::getInternalAdjSubdomain(p_idp).size())
-							std::cerr << "Error: " << __FILE__ << ":" << __LINE__ << " sub-domain not found\n";
-
-						sb.id = (k * nn_prcs<dim,T>::getInternalAdjSubdomain(p_idp).size() + s) * v_cl.getProcessingUnits() + v_cl.getProcessUnitID();
-
-						pr_box_int.ibx.add(sb);
-
-						// update the geo_cell list
-
-						// get the cells this box span
-						const grid_key_dx<dim> p1 = geo_cell.getCellGrid(b_int.box.getP1());
-						const grid_key_dx<dim> p2 = geo_cell.getCellGrid(b_int.box.getP2());
-
-						// Get the grid and the sub-iterator
-						auto & gi = geo_cell.getGrid();
-						grid_key_dx_iterator_sub<dim> g_sub(gi,p1,p2);
-
-						// add the box-id to the cell list
-						while (g_sub.isNext())
-						{
-							auto key = g_sub.get();
-							geo_cell.addCell(gi.LinId(key),vb_int.size()-1);
-							++g_sub;
-						}
-					}
-				}
-			}
-		}
-	}*/
-
 	// Heap memory receiver
 	HeapMemory hp_recv;
 
@@ -643,104 +421,6 @@ public:
 		}
 	};
 
-	/*! /brief Given a point it return the set of boxes in which the point fall
-	 *
-	 * \param p Point to check
-	 * \return An iterator with the id's of the internal boxes in which the point fall
-	 *
-	 */
-/*	auto getInternalIDBoxes(Point<dim,T> & p) -> decltype(geo_cell.getIterator(geo_cell.getCell(p)))
-	{
-		return geo_cell.getIterator(geo_cell.getCell(p));
-	}*/
-
-
-	/*! \brief Given a position it return if the position belong to any neighborhood processor ghost
-	 * (Internal ghost)
-	 *
-	 * \tparam id type of if to get box_id processor_id lc_processor_id
-	 * \param p Particle position
-	 * \param opt intersection boxes of the same processor can overlap, so in general the function
-	 *        can produce more entry with the same processor, the UNIQUE option eliminate double entries
-	 *        (UNIQUE) is for particle data (MULTIPLE) is for grid data [default MULTIPLE]
-	 *
-	 * \param return the processor ids
-	 *
-	 */
-/*	template <typename id> inline const openfpm::vector<size_t> ghost_processorID(Point<dim,T> & p, const int opt = MULTIPLE)
-	{
-		ids.clear();
-
-		// Check with geo-cell if a particle is inside one Cell containing boxes
-
-		auto cell_it = geo_cell.getIterator(geo_cell.getCell(p));
-
-		// For each element in the cell, check if the point is inside the box
-		// if it is, store the processor id
-		while (cell_it.isNext())
-		{
-			size_t bid = cell_it.get();
-
-			if (vb_int.get(bid).box.isInside(p) == true)
-			{
-				ids.add(id::id(vb_int.get(bid),bid));
-			}
-
-			++cell_it;
-		}
-
-		// Make the id unique
-		if (opt == UNIQUE)
-			ids.unique();
-
-		return ids;
-	}*/
-
-	/*! \brief Given a position it return if the position belong to any neighborhood processor ghost
-	 * (Internal ghost)
-	 *
-	 * \tparam id type of if to get box_id processor_id lc_processor_id
-	 * \param p Particle position
-	 *
-	 * \param return the processor ids
-	 *
-	 */
-/*	template<typename id, typename Mem> inline const openfpm::vector<size_t> ghost_processorID(const encapc<1,Point<dim,T>,Mem> & p, const int opt = MULTIPLE)
-	{
-		ids.clear();
-
-		// Check with geo-cell if a particle is inside one Cell containing boxes
-
-		auto cell_it = geo_cell.getIterator(geo_cell.getCell(p));
-
-		// For each element in the cell, check if the point is inside the box
-		// if it is, store the processor id
-		while (cell_it.isNext())
-		{
-			size_t bid = cell_it.get();
-
-			if (vb_int.get(bid).box.isInside(p) == true)
-			{
-				ids.add(id::id(vb_int.get(bid),bid));
-			}
-
-			++cell_it;
-		}
-
-		// Make the id unique
-		if (opt == UNIQUE)
-			ids.unique();
-
-		return ids;
-	}*/
-
-	// External ghost boxes for this processor, indicated with G8_0 G9_0 ...
-//	openfpm::vector<p_box<dim,T>> vb_ext;
-
-	// Internal ghost boxes for this processor domain, indicated with B8_0 B9_0 ..... in the figure
-	// below as a linear vector
-//	openfpm::vector<p_box<dim,T>> vb_int;
-
 	/*! It calculate the internal ghost boxes
 	 *
 	 * Example: Processor 10 calculate
@@ -1084,164 +764,6 @@ p1[0]<-----+         +----> p2[0]
 
 	////////////// Functions to get decomposition information ///////////////
 
-
-	/*! \brief Get the number of Internal ghost boxes for one processor
-	 *
-	 * \param id near processor list id (the id go from 0 to getNNProcessor())
-	 * \return the number of internal ghost
-	 *
-	 */
-/*	inline size_t getProcessorNIGhost(size_t id) const
-	{
-		return proc_int_box.get(id).ibx.size();
-	}*/
-
-	/*! \brief Get the number of External ghost boxes for one processor id
-	 *
-	 * \param id near processor list id (the id go from 0 to getNNProcessor())
-	 * \return the number of external ghost
-	 *
-	 */
-/*	inline size_t getProcessorNEGhost(size_t id) const
-	{
-		return proc_int_box.get(id).ebx.size();
-	}*/
-
-	/*! \brief Get the j Internal ghost box for one processor
-	 *
-	 * \param id near processor list id (the id go from 0 to getNNProcessor())
-	 * \param j box (each near processor can produce more than one internal ghost box)
-	 * \return the box
-	 *
-	 */
-/*	inline const ::Box<dim,T> & getProcessorIGhostBox(size_t id, size_t j) const
-	{
-		return proc_int_box.get(id).ibx.get(j);
-	}*/
-
-	/*! \brief Get the j External ghost box
-	 *
-	 * \param id near processor list id (the id go from 0 to getNNProcessor())
-	 * \param j box (each near processor can produce more than one external ghost box)
-	 * \return the box
-	 *
-	 */
-/*	inline const ::Box<dim,T> & getProcessorEGhostBox(size_t id, size_t j) const
-	{
-		return proc_int_box.get(id).ebx.get(j);
-	}*/
-
-	/*! \brief Get the j Internal ghost box id
-	 *
-	 * \param id near processor list id (the id go from 0 to getNNProcessor())
-	 * \param j box (each near processor can produce more than one internal ghost box)
-	 * \return the box
-	 *
-	 */
-/*	inline size_t getProcessorIGhostId(size_t id, size_t j) const
-	{
-		return proc_int_box.get(id).ibx.get(j).id;
-	}*/
-
-	/*! \brief Get the j External ghost box id
-	 *
-	 * \param id near processor list id (the id go from 0 to getNNProcessor())
-	 * \param j box (each near processor can produce more than one external ghost box)
-	 * \return the box
-	 *
-	 */
-/*	inline size_t getProcessorEGhostId(size_t id, size_t j) const
-	{
-		return proc_int_box.get(id).ebx.get(j).id;
-	}*/
-
-
-	/*! \brief Get the local sub-domain at witch belong the internal ghost box
-	 *
-	 * \param id adjacent processor list id (the id go from 0 to getNNProcessor())
-	 * \param j box (each near processor can produce more than one internal ghost box)
-	 * \return sub-domain at which belong the internal ghost box
-	 *
-	 */
-/*	inline const size_t getProcessorIGhostSub(size_t id, size_t j) const
-	{
-		return proc_int_box.get(id).ibx.get(j).sub;
-	}*/
-
-	/*! \brief Get the local sub-domain at witch belong the external ghost box
-	 *
-	 * \param id near processor list id (the id go from 0 to getNNProcessor())
-	 * \param j box (each near processor can produce more than one external ghost box)
-	 * \return sub-domain at which belong the external ghost box
-	 *
-	 */
-/*	inline const size_t getProcessorEGhostSub(size_t id, size_t j) const
-	{
-		return proc_int_box.get(id).ebx.get(j).sub;
-	}*/
-
-	/*! \brief Return the total number of the calculated internal ghost boxes
-	 *
-	 * \return the number of internal ghost boxes
-	 *
-	 */
-/*	inline size_t getNIGhostBox() const
-	{
-		return vb_int.size();
-	}*/
-
-	/*! \brief Given the internal ghost box id, it return the internal ghost box
-	 *
-	 * \return the internal ghost box
-	 *
-	 */
-/*	inline ::Box<dim,T> getIGhostBox(size_t b_id) const
-	{
-		return vb_int.get(b_id).box;
-	}*/
-
-	/*! \brief Given the internal ghost box id, it return the near processor at witch belong
-	 *         or the near processor that produced this internal ghost box
-	 *
-	 * \return the processor id of the ghost box
-	 *
-	 */
-/*	inline size_t getIGhostBoxProcessor(size_t b_id) const
-	{
-		return vb_int.get(b_id).proc;
-	}*/
-
-	/*! \brief Get the number of the calculated external ghost boxes
-	 *
-	 * \return the number of external ghost boxes
-	 *
-	 */
-/*	inline size_t getNEGhostBox() const
-	{
-		return vb_ext.size();
-	}*/
-
-	/*! \brief Given the external ghost box id, it return the external ghost box
-	 *
-	 * \return the external ghost box
-	 *
-	 */
-/*	inline ::Box<dim,T> getEGhostBox(size_t b_id) const
-	{
-		return vb_ext.get(b_id).box;
-	}*/
-
-	/*! \brief Given the external ghost box id, it return the near processor at witch belong
-	 *         or the near processor that produced this external ghost box
-	 *
-	 * \return the processor id of the external ghost box
-	 *
-	 */
-/*	inline size_t getEGhostBoxProcessor(size_t b_id) const
-	{
-		return vb_ext.get(b_id).proc;
-	}*/
-
 	/*! \brief Write the decomposition as VTK file
 	 *
 	 * The function generate several files
@@ -1266,29 +788,6 @@ p1[0]<-----+         +----> p2[0]
 		vtk_box1.write(output + std::string("subdomains_") + std::to_string(v_cl.getProcessUnitID()) + std::string(".vtk"));
 
 		nn_prcs<dim,T>::write(output);
-
-		//! internal_ghost_X.vtk Internal ghost boxes for the local processor (X)
-/*		VTKWriter<openfpm::vector<::Box<dim,T>>,VECTOR_BOX> vtk_box3;
-		for (size_t p = 0 ; p < box_nn_processor_int.size() ; p++)
-		{
-			for (size_t s = 0 ; s < box_nn_processor_int.get(p).size() ; s++)
-			{
-				vtk_box3.add(box_nn_processor_int.get(p).get(s).nbx);
-			}
-		}
-		vtk_box3.write(output + std::string("internal_ghost_") + std::to_string(v_cl.getProcessUnitID()) + std::string(".vtk"));
-
-		//! external_ghost_X.vtk External ghost boxes for the local processor (X)
-		VTKWriter<openfpm::vector<::Box<dim,T>>,VECTOR_BOX> vtk_box4;
-		for (size_t p = 0 ; p < box_nn_processor_int.size() ; p++)
-		{
-			for (size_t s = 0 ; s < box_nn_processor_int.get(p).size() ; s++)
-			{
-				vtk_box4.add(box_nn_processor_int.get(p).get(s).bx);
-			}
-		}
-		vtk_box4.write(output + std::string("external_ghost_") + std::to_string(v_cl.getProcessUnitID()) + std::string(".vtk"));*/
-
 		ie_ghost<dim,T>::write(output,v_cl.getProcessUnitID());
 		ie_loc_ghost<dim,T>::write(output,v_cl.getProcessUnitID());