diff --git a/src/FiniteDifference/FDScheme.hpp b/src/FiniteDifference/FDScheme.hpp
index 32b12e3c03d802e854cd39ccc41f7969b1ad07d7..9fe06bdece05b48a996db1dff5abaedd4874d3c5 100644
--- a/src/FiniteDifference/FDScheme.hpp
+++ b/src/FiniteDifference/FDScheme.hpp
@@ -474,7 +474,7 @@ public:
 	 */
 	template<typename T> void impose(const T & op , typename Sys_eqs::stype num ,long int id ,grid_dist_iterator_sub<Sys_eqs::dims,typename g_map_type::d_grid> it_d, bool skip_first = false)
 	{
-		Vcluster & v_cl = *global_v_cluster;
+		Vcluster & v_cl = create_vcluster();
 
 		openfpm::vector<triplet> & trpl = A.getMatrixTriplets();
 
diff --git a/src/FiniteDifference/eq_unit_test.hpp b/src/FiniteDifference/eq_unit_test.hpp
index 511e5d012408623e688db63b109546f66f7f8b77..4daba5a447f1758daf1fc6f27bb848265837c837 100644
--- a/src/FiniteDifference/eq_unit_test.hpp
+++ b/src/FiniteDifference/eq_unit_test.hpp
@@ -140,7 +140,7 @@ typedef Avg<y,v_x,lid_nn,FORWARD> avg_vx_f;
 
 BOOST_AUTO_TEST_CASE(lid_driven_cavity)
 {
-	Vcluster & v_cl = *global_v_cluster;
+	Vcluster & v_cl = create_vcluster();
 
 	if (v_cl.getProcessingUnits() > 3)
 		return;
@@ -169,9 +169,6 @@ BOOST_AUTO_TEST_CASE(lid_driven_cavity)
 	// and cannot be discussed here
 	Padding<2> pd({1,1},{0,0});
 
-	// Initialize openfpm
-	init_global_v_cluster(&boost::unit_test::framework::master_test_suite().argc,&boost::unit_test::framework::master_test_suite().argv);
-
 	// Distributed grid that store the solution
 	grid_dist_id<2,float,aggregate<float[2],float>,CartDecomposition<2,float>> g_dist(szu,domain,g);
 
diff --git a/src/FiniteDifference/eq_unit_test_3d.hpp b/src/FiniteDifference/eq_unit_test_3d.hpp
index cb6defb1771f5e673e293e23976e160b58890247..2acac414925ba41531882f250e72f15621ce1993 100644
--- a/src/FiniteDifference/eq_unit_test_3d.hpp
+++ b/src/FiniteDifference/eq_unit_test_3d.hpp
@@ -130,7 +130,7 @@ typedef Avg<x,v_z,lid_nn_3d,FORWARD> avg_x_vz_f;
 
 BOOST_AUTO_TEST_CASE(lid_driven_cavity)
 {
-	Vcluster & v_cl = *global_v_cluster;
+	Vcluster & v_cl = create_vcluster();
 
 	if (v_cl.getProcessingUnits() > 3)
 		return;
@@ -149,9 +149,6 @@ BOOST_AUTO_TEST_CASE(lid_driven_cavity)
 
 	Padding<3> pd({1,1,1},{0,0,0});
 
-	// Initialize the global VCluster
-	init_global_v_cluster(&boost::unit_test::framework::master_test_suite().argc,&boost::unit_test::framework::master_test_suite().argv);
-
 	// velocity in the grid is the property 0, pressure is the property 1
 	constexpr int velocity = 0;
 	constexpr int pressure = 1;
diff --git a/src/Matrix/SparseMatrix_Eigen.hpp b/src/Matrix/SparseMatrix_Eigen.hpp
index 87f18d6bbd0d0a450097729fd91031ad3b9d8474..beb758c2dfab76da7d74ed547c58b6422fde84cc 100644
--- a/src/Matrix/SparseMatrix_Eigen.hpp
+++ b/src/Matrix/SparseMatrix_Eigen.hpp
@@ -96,7 +96,7 @@ private:
 	 */
 	void assemble()
 	{
-		Vcluster & vcl = *global_v_cluster;
+		Vcluster & vcl = create_vcluster();
 
 		////// On Master and only here
 		// we assemble the Matrix from the collected data
@@ -116,7 +116,7 @@ private:
 	 */
 	void collect()
 	{
-		Vcluster & vcl = *global_v_cluster;
+		Vcluster & vcl = create_vcluster();
 
 		trpl_recv.clear();
 
diff --git a/src/Matrix/SparseMatrix_unit_tests.hpp b/src/Matrix/SparseMatrix_unit_tests.hpp
index c75a7b12c932f63cd7b4239bc0e4065653640c16..4c9154636e67397ba6c46ed6d0d7b27ad8d17944 100644
--- a/src/Matrix/SparseMatrix_unit_tests.hpp
+++ b/src/Matrix/SparseMatrix_unit_tests.hpp
@@ -18,7 +18,7 @@ BOOST_AUTO_TEST_SUITE( sparse_matrix_test_suite )
 
 BOOST_AUTO_TEST_CASE(sparse_matrix_eigen_parallel)
 {
-	Vcluster & vcl = *global_v_cluster;
+	Vcluster & vcl = create_vcluster();
 
 	if (vcl.getProcessingUnits() != 3)
 		return;
diff --git a/src/PSE/Kernels_unit_tests.hpp b/src/PSE/Kernels_unit_tests.hpp
index 3029d25333e57912cd4ef84e9312b98ae5dbcd74..bc0df97c198120586943b9e7898a532dd5fc5465 100644
--- a/src/PSE/Kernels_unit_tests.hpp
+++ b/src/PSE/Kernels_unit_tests.hpp
@@ -17,7 +17,7 @@ BOOST_AUTO_TEST_SUITE( pse_kernels_unit_tests )
 
 BOOST_AUTO_TEST_CASE( pse_ker )
 {
-	Vcluster & v_cl = *global_v_cluster;
+	Vcluster & v_cl = create_vcluster();
 
 	// This test is not made to run in parallel
 	if (v_cl.getProcessingUnits() > 1)
diff --git a/src/Solvers/umfpack_solver.hpp b/src/Solvers/umfpack_solver.hpp
index 2d5f67d30d4291851416bd6aeb8a6b09cd477029..c7690a89eb01043340459ab2b80adf00e32efcaa 100644
--- a/src/Solvers/umfpack_solver.hpp
+++ b/src/Solvers/umfpack_solver.hpp
@@ -46,7 +46,7 @@ public:
 	 */
 	template<typename impl> static Vector<double> solve(SparseMatrix<double,int,impl> & A, const Vector<double> & b, size_t opt = UMFPACK_NONE)
 	{
-		Vcluster & vcl = *global_v_cluster;
+		Vcluster & vcl = create_vcluster();
 
 		Vector<double> x;
 
diff --git a/src/Vector/Vector_eigen.hpp b/src/Vector/Vector_eigen.hpp
index b0d161e7544f95572f1f5940295b7e36ddc70712..439f70f46c233b5365563f1c60f44364433f41b8 100644
--- a/src/Vector/Vector_eigen.hpp
+++ b/src/Vector/Vector_eigen.hpp
@@ -94,7 +94,7 @@ class Vector<T,Eigen::Matrix<T, Eigen::Dynamic, 1>>
 	 */
 	void collect() const
 	{
-		Vcluster & vcl = *global_v_cluster;
+		Vcluster & vcl = create_vcluster();
 
 		row_val_recv.clear();
 
@@ -313,7 +313,7 @@ public:
 	void scatter()
 	{
 		row_val_recv.clear();
-		Vcluster & vcl = *global_v_cluster;
+		Vcluster & vcl = create_vcluster();
 
 		vcl.SScatter(row_val,row_val_recv,prc,sz,0);
 
diff --git a/src/Vector/Vector_unit_tests.hpp b/src/Vector/Vector_unit_tests.hpp
index 0af5ad73bce1d41d971223d06b5f4d35cfde8b33..bc9c01f88deabff2b4648c7609775fc1b5cffe7a 100644
--- a/src/Vector/Vector_unit_tests.hpp
+++ b/src/Vector/Vector_unit_tests.hpp
@@ -14,7 +14,7 @@ BOOST_AUTO_TEST_SUITE( vector_test_suite )
 
 BOOST_AUTO_TEST_CASE(vector_eigen_parallel)
 {
-	Vcluster & vcl = *global_v_cluster;
+	Vcluster & vcl = create_vcluster();
 
 	if (vcl.getProcessingUnits() != 3)
 		return;
diff --git a/src/unit_test_init_cleanup.hpp b/src/unit_test_init_cleanup.hpp
index 12b98f01e423c571ff0c5d6b06a5eec2cf822b5a..ca73aa358938f05a668dac4c3b41ac919fe82378 100644
--- a/src/unit_test_init_cleanup.hpp
+++ b/src/unit_test_init_cleanup.hpp
@@ -11,8 +11,8 @@
 #include "VCluster.hpp"
 
 struct ut_start {
-    ut_start()   { BOOST_TEST_MESSAGE("Initialize global VCluster"); init_global_v_cluster(&boost::unit_test::framework::master_test_suite().argc,&boost::unit_test::framework::master_test_suite().argv); }
-    ~ut_start()  { BOOST_TEST_MESSAGE("Delete global VClster");delete_global_v_cluster(); }
+    ut_start()   { BOOST_TEST_MESSAGE("Initialize global VCluster"); openfpm_init(&boost::unit_test::framework::master_test_suite().argc,&boost::unit_test::framework::master_test_suite().argv); }
+    ~ut_start()  { BOOST_TEST_MESSAGE("Delete global VClster"); openfpm_finalize(); }
 };
 
 //____________________________________________________________________________//