diff --git a/images/Makefile.am b/images/Makefile.am
index 2bfeb798b81f45886e6a704ef51817cc528735ac..38847ec31475b0f3cd4c9b387100d1105ff3cb93 100644
--- a/images/Makefile.am
+++ b/images/Makefile.am
@@ -1,7 +1,7 @@
 
 LINKLIBS = $(METIS_LIB) $(PARMETIS_LIB)  $(PTHREAD_LIBS) $(OPT_LIBS) $(BOOST_LDFLAGS) $(BOOST_IOSTREAMS_LIB) $(CUDA_LIBS)
 
-noinst_PROGRAMS = cart_dec metis_dec dom_box
+noinst_PROGRAMS = cart_dec metis_dec dom_box vector_dist
 cart_dec_SOURCES = CartDecomposition_gen_vtk.cpp ../src/lib/pdata.cpp ../openfpm_devices/src/memory/HeapMemory.cpp ../openfpm_devices/src/memory/PtrMemory.cpp ../openfpm_vcluster/src/VCluster.cpp ../openfpm_devices/src/Memleak_check.cpp
 cart_dec_CXXFLAGS = $(PARMETIS_INCLUDE) $(CUDA_CFLAGS) $(INCLUDES_PATH) $(METIS_INCLUDE) $(BOOST_CPPFLAGS) -I../src -Wno-unused-function -Wno-unused-local-typedefs
 cart_dec_CFLAGS = $(CUDA_CFLAGS)
@@ -17,6 +17,11 @@ dom_box_CXXFLAGS = $(CUDA_CFLAGS) $(INCLUDES_PATH) $(METIS_INCLUDE) $(BOOST_CPPF
 dom_box_CFLAGS = $(CUDA_CFLAGS)
 dom_box_LDADD = $(LINKLIBS)
 
+vector_dist_SOURCES = vector.cpp ../openfpm_devices/src/memory/HeapMemory.cpp ../openfpm_vcluster/src/VCluster.cpp ../openfpm_devices/src/memory/PtrMemory.cpp
+vector_dist_CXXFLAGS = $(CUDA_CFLAGS) $(INCLUDES_PATH) $(HDF5_CPPFLAGS) $(PARMETIS_INCLUDE)  $(METIS_INCLUDE) $(BOOST_CPPFLAGS) -I../src -Wno-unused-function -Wno-unused-local-typedefs
+vector_dist_CFLAGS = $(CUDA_CFLAGS)
+vector_dist_LDADD = $(LINKLIBS) -lparmetis -lmetis
+
 .cu.o :
 	$(NVCC) $(NVCCFLAGS) -o $@ -c $<
 
@@ -26,12 +31,17 @@ dom_box_LDADD = $(LINKLIBS)
 images : cart_dec metis_dec dom_box
 	rm -rf CartDecomposition
 	rm -rf Metis
+	rm -rf Vector
 	mkdir CartDecomposition
 	mkdir Metis
+	mkdir Vector
 	mpirun -np 4 ./cart_dec
+	mpirun -np 3 ./vector_dist
 	./dom_box
 	./metis_dec
 	mkdir -p generated
 	mkdir -p static
 	pvbatch Domain_decomposition.py
+	pvbatch Vector_dist.py
+	dot -Tsvg openfpm.dot -o generated/openfpm.svg
 
diff --git a/images/Vector_dist.py b/images/Vector_dist.py
new file mode 100644
index 0000000000000000000000000000000000000000..4ca4ce9ae2fff6410a73d72da04b5bde1ef75ea7
--- /dev/null
+++ b/images/Vector_dist.py
@@ -0,0 +1,190 @@
+#### import the simple module from the paraview
+from paraview.simple import *
+#### disable automatic camera reset on 'Show'
+paraview.simple._DisableFirstRenderCameraReset()
+
+# create a new 'CSV Reader'
+vector_before_map0csv = CSVReader(FileName=['/home/i-bird/Desktop/MOSAIC/OpenFPM_project/openfpm_pdata/images/Vector/vector_before_map0.csv'])
+
+# get active view
+renderView1 = GetActiveViewOrCreate('RenderView')
+# uncomment following to set a specific view size
+# renderView1.ViewSize = [1020, 495]
+
+# set active view
+SetActiveView(renderView1)
+
+# create a new 'Table To Points'
+tableToPoints1 = TableToPoints(Input=vector_before_map0csv)
+tableToPoints1.XColumn = 'x[0]'
+tableToPoints1.YColumn = 'x[1]'
+tableToPoints1.a2DPoints = 1
+
+# show data in view
+tableToPoints1Display = Show(tableToPoints1, renderView1)
+# trace defaults for the display properties.
+tableToPoints1Display.ColorArrayName = [None, '']
+
+# change representation type
+tableToPoints1Display.SetRepresentationType('Points')
+
+# create a new 'CSV Reader'
+vector_before_map1csv = CSVReader(FileName=['/home/i-bird/Desktop/MOSAIC/OpenFPM_project/openfpm_pdata/images/Vector/vector_before_map1.csv'])
+
+# set active view
+SetActiveView(renderView1)
+
+# create a new 'Table To Points'
+tableToPoints2 = TableToPoints(Input=vector_before_map1csv)
+tableToPoints2.XColumn = 'x[0]'
+tableToPoints2.YColumn = 'x[1]'
+tableToPoints2.a2DPoints = 1
+
+# show data in view
+tableToPoints2Display = Show(tableToPoints2, renderView1)
+# trace defaults for the display properties.
+tableToPoints2Display.ColorArrayName = [None, '']
+
+# change representation type
+tableToPoints2Display.SetRepresentationType('Points')
+
+# change solid color
+tableToPoints2Display.AmbientColor = [0.0, 1.0, 0.0]
+
+# create a new 'CSV Reader'
+vector_before_map2csv = CSVReader(FileName=['/home/i-bird/Desktop/MOSAIC/OpenFPM_project/openfpm_pdata/images/Vector/vector_before_map2.csv'])
+
+# set active view
+SetActiveView(renderView1)
+
+# create a new 'Table To Points'
+tableToPoints3 = TableToPoints(Input=vector_before_map2csv)
+tableToPoints3.XColumn = 'x[0]'
+tableToPoints3.YColumn = 'x[1]'
+tableToPoints3.a2DPoints = 1
+
+# show data in view
+tableToPoints3Display = Show(tableToPoints3, renderView1)
+# trace defaults for the display properties.
+tableToPoints3Display.ColorArrayName = [None, '']
+
+# change representation type
+tableToPoints3Display.SetRepresentationType('Points')
+
+# change solid color
+tableToPoints3Display.AmbientColor = [1.0, 0.35294117647058826, 0.35294117647058826]
+
+#### saving camera placements for all active views
+
+# current camera placement for renderView1
+renderView1.InteractionMode = '2D'
+renderView1.CameraPosition = [0.50000391295, 0.499549132735, 10000.0]
+renderView1.CameraFocalPoint = [0.50000391295, 0.499549132735, 0.0]
+renderView1.CameraParallelScale = 0.7067808453124975
+
+#### uncomment the following to render all views
+# RenderAllViews()
+# alternatively, if you want to write images, you can use SaveScreenshot(...). 
+
+WriteImage("generated/non_geometrical_decomposition.jpg")
+
+# destroy tableToPoints1
+Delete(tableToPoints1)
+del tableToPoints1
+Delete(tableToPoints2)
+del tableToPoints2
+Delete(tableToPoints3)
+del tableToPoints3
+
+# destroy vector_before_map0csv
+Delete(vector_before_map0csv)
+del vector_before_map0csv
+Delete(vector_before_map1csv)
+del vector_before_map1csv
+Delete(vector_before_map2csv)
+del vector_before_map2csv
+
+# create a new 'CSV Reader'
+vector_before_map0csv = CSVReader(FileName=['/home/i-bird/Desktop/MOSAIC/OpenFPM_project/openfpm_pdata/images/Vector/vector_after_map0.csv'])
+
+# get active view
+renderView1 = GetActiveViewOrCreate('RenderView')
+# uncomment following to set a specific view size
+# renderView1.ViewSize = [1020, 495]
+
+# set active view
+SetActiveView(renderView1)
+
+# create a new 'Table To Points'
+tableToPoints1 = TableToPoints(Input=vector_before_map0csv)
+tableToPoints1.XColumn = 'x[0]'
+tableToPoints1.YColumn = 'x[1]'
+tableToPoints1.a2DPoints = 1
+
+# show data in view
+tableToPoints1Display = Show(tableToPoints1, renderView1)
+# trace defaults for the display properties.
+tableToPoints1Display.ColorArrayName = [None, '']
+
+# change representation type
+tableToPoints1Display.SetRepresentationType('Points')
+
+# create a new 'CSV Reader'
+vector_before_map1csv = CSVReader(FileName=['/home/i-bird/Desktop/MOSAIC/OpenFPM_project/openfpm_pdata/images/Vector/vector_after_map1.csv'])
+
+# set active view
+SetActiveView(renderView1)
+
+# create a new 'Table To Points'
+tableToPoints2 = TableToPoints(Input=vector_before_map1csv)
+tableToPoints2.XColumn = 'x[0]'
+tableToPoints2.YColumn = 'x[1]'
+tableToPoints2.a2DPoints = 1
+
+# show data in view
+tableToPoints2Display = Show(tableToPoints2, renderView1)
+# trace defaults for the display properties.
+tableToPoints2Display.ColorArrayName = [None, '']
+
+# change representation type
+tableToPoints2Display.SetRepresentationType('Points')
+
+# change solid color
+tableToPoints2Display.AmbientColor = [0.0, 1.0, 0.0]
+
+# create a new 'CSV Reader'
+vector_before_map2csv = CSVReader(FileName=['/home/i-bird/Desktop/MOSAIC/OpenFPM_project/openfpm_pdata/images/Vector/vector_after_map2.csv'])
+
+# set active view
+SetActiveView(renderView1)
+
+# create a new 'Table To Points'
+tableToPoints3 = TableToPoints(Input=vector_before_map2csv)
+tableToPoints3.XColumn = 'x[0]'
+tableToPoints3.YColumn = 'x[1]'
+tableToPoints3.a2DPoints = 1
+
+# show data in view
+tableToPoints3Display = Show(tableToPoints3, renderView1)
+# trace defaults for the display properties.
+tableToPoints3Display.ColorArrayName = [None, '']
+
+# change representation type
+tableToPoints3Display.SetRepresentationType('Points')
+
+# change solid color
+tableToPoints3Display.AmbientColor = [1.0, 0.35294117647058826, 0.35294117647058826]
+
+#### saving camera placements for all active views
+
+# current camera placement for renderView1
+renderView1.InteractionMode = '2D'
+renderView1.CameraPosition = [0.50000391295, 0.499549132735, 10000.0]
+renderView1.CameraFocalPoint = [0.50000391295, 0.499549132735, 0.0]
+renderView1.CameraParallelScale = 0.7067808453124975
+
+#### uncomment the following to render all views
+# RenderAllViews()
+# alternatively, if you want to write images, you can use SaveScreenshot(...). 
+
+WriteImage("generated/geometrical_decomposition.jpg")
diff --git a/images/openfpm.dot b/images/openfpm.dot
new file mode 100644
index 0000000000000000000000000000000000000000..4362392c70dedeaefb914fe4711d290a36f1d657
--- /dev/null
+++ b/images/openfpm.dot
@@ -0,0 +1,22 @@
+digraph openfpm {
+	ratio = fill;
+        node [ shape = box color = blue ];
+        API;
+	node [ shape = oval color=red ] Core pdata data Vcluster "devices (Memory)";
+        node [ color=black ] Numerics IO;
+        
+        API -> Core [ arrowhead=crow color=blue ]
+       	Core -> pdata
+        Numerics -> Core
+        Numerics -> pdata
+        Numerics -> data
+ 	pdata -> Vcluster
+	pdata -> data
+        Vcluster -> data
+        data -> "devices (Memory)"
+        IO -> data
+        IO -> pdata
+        IO -> Core
+        Vcluster -> "devices (Memory)"
+}
+
diff --git a/images/static/Domain_decomposition_external.jpg b/images/static/Domain_decomposition_external.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..59bdcdb3b8e5b97a91253873bd2fd0a7e4b6e521
Binary files /dev/null and b/images/static/Domain_decomposition_external.jpg differ
diff --git a/images/static/Domain_decomposition_internal.jpg b/images/static/Domain_decomposition_internal.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f2f5d3f70375b6405f7eafc03449b0041f9fd63a
Binary files /dev/null and b/images/static/Domain_decomposition_internal.jpg differ
diff --git a/images/vector.cpp b/images/vector.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..839114f16538b85ce0b4139cbd0630b7eb7ac729
--- /dev/null
+++ b/images/vector.cpp
@@ -0,0 +1,64 @@
+#include "Vector/vector_dist.hpp"
+#include "Decomposition/CartDecomposition.hpp"
+
+
+template<typename T> class Particle
+{
+public:
+
+	typedef boost::fusion::vector<T,T[3],T[3][3]> type;
+
+	type data;
+
+	static const unsigned int s = 0;
+	static const unsigned int v = 1;
+	static const unsigned int t = 2;
+	static const unsigned int max_prop = 3;
+};
+
+int main(int argc, char* argv[])
+{
+	//
+	// ### WIKI 2 ###
+	//
+	// Here we Initialize the library, than we create a uniform random generator between 0 and 1 to to generate particles
+	// randomly in the domain, we create a Box that define our domain, boundary conditions, and ghost
+	//
+	init_global_v_cluster(&argc,&argv);
+	Vcluster & v_cl = *global_v_cluster;
+	
+	typedef Point<2,float> s;
+
+	// set the seed
+	// create the random generator engine
+	std::default_random_engine eg(v_cl.getProcessUnitID()*100);
+	std::uniform_real_distribution<float> ud(0.0f, 1.0f);
+
+	Box<2,float> domain({0.0,0.0},{1.0,1.0});
+    size_t bc[2]={PERIODIC,PERIODIC};
+	Ghost<2,float> g(0.01);
+	
+	vector_dist<2,float, Particle<float>, CartDecomposition<2,float> > vd(4096,domain,bc,g);
+
+	auto it = vd.getIterator();
+
+	while (it.isNext())
+	{
+		auto key = it.get();
+
+		vd.template getPos<s::x>(key)[0] = ud(eg);
+		vd.template getPos<s::x>(key)[1] = ud(eg);
+
+		++it;
+	}
+
+	vd.write("Vector/vector_before_map");
+
+	vd.map();
+
+	vd.write("Vector/vector_after_map");
+	
+	vd.ghost_get<0,1,2>();
+
+	delete_global_v_cluster();
+}