diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5891dbcde5a8b0687e2989d5709459317a9ff88e..f5879995733915ec38daeab5d0cb7ab8c6969807 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,19 @@
 # Change Log
 All notable changes to this project will be documented in this file.
 
+## [0.5.0] - 
+
+### Added
+- map_list map communicate particles across processors mooving the information of all the particle map_list give the possibility to
+           give a list of property to move from one to another processor
+- Numeric: Finite Differences discretization with matrix contruction and parallel solvers
+
+### Fixed
+
+### Changed
+
+
+
 ## [0.4.0] - 26-05-2016
 
 ### Added
diff --git a/src/Vector/vector_dist.hpp b/src/Vector/vector_dist.hpp
index 8e79e5be8cbdb7aa4098f19247de670fc0e2136c..a3778f022c1ac1be9229ac52f5eb2896c9e7c9f3 100644
--- a/src/Vector/vector_dist.hpp
+++ b/src/Vector/vector_dist.hpp
@@ -699,7 +699,7 @@ private:
 		{
 			// Get the number of elements
 
-			size_t n_ele = recv_mem_gm.get(i).size() / (sizeof(Point<dim, St> ) + sizeof(prop));
+			size_t n_ele = recv_mem_gm.get(i).size() / (sizeof(Point<dim, St> ) + sizeof(prp_object));
 
 			// Pointer of the received positions for each near processor
 			void * ptr_pos = (unsigned char *) recv_mem_gm.get(i).getPointer();
@@ -707,7 +707,7 @@ private:
 			void * ptr_prp = (unsigned char *) recv_mem_gm.get(i).getPointer() + n_ele * sizeof(Point<dim, St> );
 
 			PtrMemory * ptr1 = new PtrMemory(ptr_pos, n_ele * sizeof(Point<dim, St> ));
-			PtrMemory * ptr2 = new PtrMemory(ptr_prp, n_ele * sizeof(prop));
+			PtrMemory * ptr2 = new PtrMemory(ptr_prp, n_ele * sizeof(prp_object));
 
 			// create vector representation to a piece of memory already allocated
 
@@ -1023,7 +1023,7 @@ public:
 		// convert the particle number to buffer size
 		for (size_t i = 0; i < prc_sz_r.size(); i++)
 		{
-			prc_sz_r.get(i) = prc_sz_r.get(i) * (sizeof(prop) + sizeof(Point<dim, St> ));
+			prc_sz_r.get(i) = prc_sz_r.get(i) * (sizeof(prp_object) + sizeof(Point<dim, St> ));
 		}
 
 		// Send and receive the particles
diff --git a/src/Vector/vector_dist_unit_test.hpp b/src/Vector/vector_dist_unit_test.hpp
index b621d28195133b392ce77639e3d4ceaee837d24f..a570c1b0500b410528b05e797f153547c0eabe22 100644
--- a/src/Vector/vector_dist_unit_test.hpp
+++ b/src/Vector/vector_dist_unit_test.hpp
@@ -1179,6 +1179,7 @@ BOOST_AUTO_TEST_CASE( vector_dist_periodic_map_list )
 	long int big_step = k / 4;
 	big_step = (big_step == 0)?1:big_step;
 
+	print_test("Testing 3D periodic vector with map_list k=",k);
 	BOOST_TEST_CHECKPOINT( "Testing 3D periodic vector with map_list k=" << k );
 
 	//! [Create a vector of random elements on each processor 3D]
@@ -1197,8 +1198,10 @@ BOOST_AUTO_TEST_CASE( vector_dist_periodic_map_list )
 	// ghost2 (a little bigger because of round off error)
 	Ghost<3,float> ghost2(0.05001 / factor);
 
+	typedef  aggregate<float,float,std::list<int>,openfpm::vector<size_t>,openfpm::vector<Point_test<float>>> part_prop;
+
 	// Distributed vector
-	vector_dist<3,float, aggregate<float,float,std::list<int>,openfpm::vector<size_t>> > vd(k,box,bc,ghost);
+	vector_dist<3,float, part_prop > vd(k,box,bc,ghost);
 
 	auto it = vd.getIterator();
 
@@ -1210,6 +1213,23 @@ BOOST_AUTO_TEST_CASE( vector_dist_periodic_map_list )
 		vd.getPos(key)[1] = ud(eg);
 		vd.getPos(key)[2] = ud(eg);
 
+		// Fill some properties randomly
+
+		vd.getProp<2>(key).push_back(1);
+		vd.getProp<2>(key).push_back(2);
+		vd.getProp<2>(key).push_back(3);
+		vd.getProp<2>(key).push_back(4);
+
+		vd.getProp<3>(key).add(1);
+		vd.getProp<3>(key).add(2);
+		vd.getProp<3>(key).add(3);
+		vd.getProp<3>(key).add(4);
+
+		vd.getProp<4>(key).add();
+		vd.getProp<4>(key).add();
+		vd.getProp<4>(key).add();
+		vd.getProp<4>(key).add();
+
 		++it;
 	}
 
@@ -1230,7 +1250,7 @@ BOOST_AUTO_TEST_CASE( vector_dist_periodic_map_list )
 	size_t n_out = 0;
 
 	auto it2 = vd.getIterator();
-	count_local_n_local<3,vector_dist<3,float, aggregate<float,float,std::list<int>,openfpm::vector<size_t>>> >(vd,it2,bc,box,dom_ext,l_cnt,nl_cnt,n_out);
+	count_local_n_local<3,vector_dist<3,float, part_prop>>(vd,it2,bc,box,dom_ext,l_cnt,nl_cnt,n_out);
 
 	// No particles should be out of domain + ghost
 	BOOST_REQUIRE_EQUAL(n_out,0ul);
@@ -1252,7 +1272,7 @@ BOOST_AUTO_TEST_CASE( vector_dist_periodic_map_list )
 
 	// Iterate only on the ghost particles
 	auto itg = vd.getGhostIterator();
-	count_local_n_local<3, vector_dist<3,float, aggregate<float,float,std::list<int>,openfpm::vector<size_t>> > >(vd,itg,bc,box,dom_ext,l_cnt,nl_cnt,n_out);
+	count_local_n_local<3, vector_dist<3,float,part_prop> >(vd,itg,bc,box,dom_ext,l_cnt,nl_cnt,n_out);
 
 	// No particle on the ghost must be inside the domain
 	BOOST_REQUIRE_EQUAL(l_cnt,0ul);