diff --git a/openfpm_data b/openfpm_data
index 58f3b70f264af944182ff2182e168d68f196b7e8..0083a00b0bf82127a828c52ff3c1e922c18e19cf 160000
--- a/openfpm_data
+++ b/openfpm_data
@@ -1 +1 @@
-Subproject commit 58f3b70f264af944182ff2182e168d68f196b7e8
+Subproject commit 0083a00b0bf82127a828c52ff3c1e922c18e19cf
diff --git a/script/download_MPI.sh b/script/download_MPI.sh
index c691b736d8db1239426c015772d920aea17ac723..765e5ac2e81c8d9d9edb736eea86760723ecf5ca 100755
--- a/script/download_MPI.sh
+++ b/script/download_MPI.sh
@@ -2,8 +2,8 @@
 
 # check if the directory $1/MPI exist
 
-rm -rf openmpi-3.1.3
-rm openmpi-3.1.3.tar.gz
-wget http://ppmcore.mpi-cbg.de/upload/openmpi-3.1.3.tar.gz
-tar -xvf openmpi-3.1.3.tar.gz
+rm -rf openmpi-4.0.2
+rm openmpi-4.0.2.tar.gz
+wget http://ppmcore.mpi-cbg.de/upload/openmpi-4.0.2.tar.gz
+tar -xvf openmpi-4.0.2.tar.gz
 
diff --git a/script/install_HDF5.sh b/script/install_HDF5.sh
index 7e21087e62bfad5045053713f2756a39e1cbc56b..f44ac3df67fe6ff48e140fe16cd0577bf2d48fcb 100755
--- a/script/install_HDF5.sh
+++ b/script/install_HDF5.sh
@@ -37,9 +37,9 @@ else
 fi
 
 ### 1.8.19 does not compile on CYGWIN
-wget http://ppmcore.mpi-cbg.de/upload/hdf5-1.8.19.tar.gz
-tar -xf hdf5-1.8.19.tar.gz
-cd hdf5-1.8.19
+wget http://ppmcore.mpi-cbg.de/upload/hdf5-1.10.6.tar.gz
+tar -xf hdf5-1.10.6.tar.gz
+cd hdf5-1.10.6
 
 if [ x"$platform" != x"cygwin" ]; then
         CC=mpicc ./configure --with-zlib=$1/ZLIB --enable-parallel --prefix=$1/HDF5
@@ -54,4 +54,4 @@ if [ $? -ne 0 ]; then
     echo "HDF5 error installing"
     exit 0
 fi
-echo 1 > $1/HDF5/version
+echo 2 > $1/HDF5/version
diff --git a/script/install_MPI.sh b/script/install_MPI.sh
index cc0d922e905770d7e5ffb83718cce3d38f8c347f..3a1d6ac23f5153ab6e0e9adf587c326c7b6d4bf8 100755
--- a/script/install_MPI.sh
+++ b/script/install_MPI.sh
@@ -8,7 +8,7 @@ if [ -d "$1/MPI" ]; then
 fi
 
 ./script/download_MPI.sh
-cd openmpi-3.1.3
+cd openmpi-4.0.2
 
 if [ x"$3" == x"1" ]; then
    echo "Installing MPI with GPU support"
@@ -25,5 +25,5 @@ make -j $2
 make install
 
 # Mark the installation
-echo 4 > $1/MPI/version
+echo 5 > $1/MPI/version
 
diff --git a/script/install_PETSC.sh b/script/install_PETSC.sh
index 2b9ee3190647f2aebf573588fe0965c2dd3dd064..a12f6614993869df823b9da039eef482dfa1c1a0 100755
--- a/script/install_PETSC.sh
+++ b/script/install_PETSC.sh
@@ -19,7 +19,7 @@ source script/solve_python
 discover_os
 
 function test_configure_options() {
-  cd petsc-3.10.2
+  cd petsc-3.12.3
   $python_command ./configure COPTFLAGS="-O3 -g" CXXOPTFLAGS="-O3 -g" FOPTFLAGS="-O3 -g" $ldflags_petsc  --with-cxx-dialect=C++11 $petsc_openmp --with-mpi-dir=$mpi_dir $configure_options2 --with-debugging=0
   error=$?
   cd ..
@@ -49,14 +49,14 @@ fi
 
 #### Download and uncompress petsc
 
-rm petsc-lite-3.10.2.tar.gz
-rm -rf petsc-3.10.2
-wget http://ppmcore.mpi-cbg.de/upload/petsc-lite-3.10.2.tar.gz
+rm petsc-lite-3.12.3.tar.gz
+rm -rf petsc-3.12.3
+wget http://ppmcore.mpi-cbg.de/upload/petsc-lite-3.12.3.tar.gz
 if [ $? -ne 0 ]; then
   echo -e "\033[91;5;1m FAILED! Installation requires an Internet connection \033[0m"
   exit 1
 fi
-tar -xf petsc-lite-3.10.2.tar.gz
+tar -xf petsc-lite-3.12.3.tar.gz
 
 ####
 
@@ -114,15 +114,15 @@ configure_options="$configure_options --download-scalapack --download-mumps"
 configure_options="$configure_options --download-superlu_dist"
 configure_options="$configure_options --download-hypre"
 
-rm petsc-lite-3.10.2.tar.gz
-rm -rf petsc-3.10.2
-wget http://ppmcore.mpi-cbg.de/upload/petsc-lite-3.10.2.tar.gz
+rm petsc-lite-3.12.3.tar.gz
+rm -rf petsc-3.12.3
+wget http://ppmcore.mpi-cbg.de/upload/petsc-lite-3.12.3.tar.gz
 if [ $? -ne 0 ]; then
   echo -e "\033[91;5;1m FAILED! Installation requires an Internet connection \033[0m"
   exit 1
 fi
-tar -xf petsc-lite-3.10.2.tar.gz
-cd petsc-3.10.2
+tar -xf petsc-lite-3.12.3.tar.gz
+cd petsc-3.12.3
 
 if [ x"$CXX" != x"icpc" ]; then
 
@@ -158,7 +158,7 @@ if [ ! "$(ls -A $1/PETSC)" ]; then
    rm -rf $1/PETSC
 else
    #Mark the installation
-   echo 2 > $1/PETSC/version
+   echo 3 > $1/PETSC/version
    exit 0
 fi
 
diff --git a/script/pre_req b/script/pre_req
index 42347be5f94723c7857fdad7d7af526defc2679b..f2d10992ef4632f737383e267849625fe1852dc3 100755
--- a/script/pre_req
+++ b/script/pre_req
@@ -308,33 +308,6 @@ if [ x"$MPI_valid" == x"yes"  ]; then
     fi
   fi
 
-  #### Detect a potential dangerous situation ###
-  #### In which g++ is different from mpic++ ###
-
-  output_mpi=$(mpic++ --version)
-  output_gcc=$($dgc_compiler --version)
-
-  if [ x"$output_mpi" != x"$output_gcc" ]; then
-    echo -e "\033[91;5;1m MPI dangerous installation \033[0m"
-    echo -e "Performing a \033[1m  \"mpic++ --version\" \033[0m, we detect that your installed mpic++ does not wrap the standard command g++"
-    echo "In general we strongly disencourage to override the default compiler(s), this configuration not only is not supported by OpenFPM, but can lead potentialy to several problems at system level. For the following reasons"
-    echo -e "\033[1m 1) All system wide dependencies become potentially useless \033[0m"
-    echo -e "\033[1m 2) A package maneger (apt-get or brew) installing a packege from source can potentialy generate incompatible system packages \033[0m"
-    echo -e "\033[1m 3) It is not easy to discover which compiler has been used to compile one dependency \033[0m"
-    echo -e "For just the time of the installation the installer will realign mpic++ to g++, unfortunately this could be not enough to ensure that all the dependencies has been compiled with the same compiler"
-    echo -e "\033[1m Installation will resume in 20 seconds \033[0m"
-    export OMPI_CXX=g++
-    sleep 20
-  fi
-
-  output_mpi=$(mpic++ --version)
-  output_gcc=$($dgc_compiler --version)
-
-  if [ x"$output_mpi" != x"$output_gcc" ]; then
-    echo -e "\033[91;5;1m MPI dangerous installation \033[0m"
-    echo -e "\033[1m The realign operation failed the installation will continue \033[0m"
-    sleep 10
-  fi
 fi
 
 }
diff --git a/script/remove_old b/script/remove_old
index dd11a7639e79bf61cf8fc4eda8cc85d19eb3dc58..b0f778e506d8e64b920cc8ac0bb23763873f912f 100755
--- a/script/remove_old
+++ b/script/remove_old
@@ -76,10 +76,10 @@ function remove_old()
     ## Check the installed version of the dependencies
 
     if [ -d $1/BOOST ]; then
-    	is_update=$(cat $1/BOOST/include/boost/version.hpp | grep "#define BOOST_VERSION 106800")
+    	is_update=$(cat $1/BOOST/include/boost/version.hpp | grep "#define BOOST_VERSION 107200")
     	if [ x"$is_update" == x"" ]; then
             echo -e "\033[1;34;5m  --------------------------------------------------------------------------- \033[0m"
-            echo -e "\033[1;34;5m  Boost has been updated to 1.68, the component will be updated automatically \033[0m"
+            echo -e "\033[1;34;5m  Boost has been updated to 1.72, the component will be updated automatically \033[0m"
             echo -e "\033[1;34;5m  --------------------------------------------------------------------------- \033[0m"
             sleep 5
             rm -rf $1/BOOST/include
@@ -143,9 +143,9 @@ function remove_old()
 
     if [ -d $1/PETSC ]; then
         version=$(cat $1/PETSC/version)
-        if [ x"$version" != x"2"  ]; then
+        if [ x"$version" != x"3"  ]; then
             echo -e "\033[1;34;5m  -------------------------------------------------------------------------------------- \033[0m"
-            echo -e "\033[1;34;5m  PETSC has been updated to version 3.10.2, the component will be updated automatically      \033[0m"
+            echo -e "\033[1;34;5m  PETSC has been updated to version 3.12.3, the component will be updated automatically      \033[0m"
             echo -e "\033[1;34;5m  -------------------------------------------------------------------------------------- \033[0m"
             sleep 5
             rm -rf $1/PETSC
@@ -158,7 +158,7 @@ function remove_old()
 
     if [ -d $1/HDF5 ]; then
         version=$(cat $1/HDF5/version)
-        if [ x"$version" != x"1"  ]; then
+        if [ x"$version" != x"2"  ]; then
             echo -e "\033[1;34;5m  -------------------------------------------------------------------------------------- \033[0m"
             echo -e "\033[1;34;5m  HDF5 has been updated to version 1.10.6, the component will be updated automatically   \033[0m"
             echo -e "\033[1;34;5m  -------------------------------------------------------------------------------------- \033[0m"
@@ -169,7 +169,7 @@ function remove_old()
 
     if [ -d $1/MPI ]; then
         version=$(cat $1/MPI/version)
-        if [ x"$version" != x"4"  ]; then
+        if [ x"$version" != x"5"  ]; then
             echo -e "\033[1;34;5m  -------------------------------------------------------------------------------------- \033[0m"
             echo -e "\033[1;34;5m  MPI has been updated to version 4.0.2, the component will be updated automatically      \033[0m"
             echo -e "\033[1;34;5m  -------------------------------------------------------------------------------------- \033[0m"
diff --git a/src/Amr/grid_dist_amr.hpp b/src/Amr/grid_dist_amr.hpp
index 6ac740458cbbefa05dc21b0277a4134c7ce6d31b..ce1d0eb395088b7ea8f4a1b9aba54399fe736d60 100644
--- a/src/Amr/grid_dist_amr.hpp
+++ b/src/Amr/grid_dist_amr.hpp
@@ -758,11 +758,11 @@ public:
 	 * \tparam prp... Properties to synchronize
 	 *
 	 */
-	template<int... prp> void ghost_get()
+	template<int... prp> void ghost_get(size_t opt = 0)
 	{
 		for (size_t i = 0 ; i < gd_array.size() ; i++)
 		{
-			gd_array.get(i).template ghost_get<prp...>();
+			gd_array.get(i).template ghost_get<prp...>(opt);
 		}
 	}
 
diff --git a/src/Amr/tests/amr_base_gpu_unit_tests.cu b/src/Amr/tests/amr_base_gpu_unit_tests.cu
index 63f0dea44c16db921be2696ce3159733bfc6b32e..b224547198bfbe691c9c387866002d0530503cec 100644
--- a/src/Amr/tests/amr_base_gpu_unit_tests.cu
+++ b/src/Amr/tests/amr_base_gpu_unit_tests.cu
@@ -376,8 +376,9 @@ BOOST_AUTO_TEST_CASE( grid_dist_id_amr_gpu_link_test_more_dense )
 	}
 
 	amr_g.hostToDevice<0>();
-	amr_g.ghost_get<0>();
+	amr_g.ghost_get<0>(RUN_ON_DEVICE);
 	amr_g.tagBoundaries<NNStar<2>>();
+	amr_g.ghost_get<0>(RUN_ON_DEVICE);
 	amr_g.construct_level_connections();
 	amr_g.deviceToHost<0>();
 	amr_g.write("TESTOUT");
diff --git a/src/Grid/grid_dist_id.hpp b/src/Grid/grid_dist_id.hpp
index 5246e6292ec847f5887bc8fd71a1a51feb6f46b1..76c9d7f08721dd2ec574ef51b71338bb2a330b41 100644
--- a/src/Grid/grid_dist_id.hpp
+++ b/src/Grid/grid_dist_id.hpp
@@ -2688,7 +2688,12 @@ public:
     {
 		for (int i = 0 ; i < loc_grid.size() ; i++)
 		{
-			loc_grid.get(i).template tagBoundaries<stencil_type>(v_cl.getmgpuContext());
+			// we limit to the domain subset for tagging
+
+			Box_check<dim,unsigned int> chk(gdb_ext.get(i).Dbox);
+
+
+			loc_grid.get(i).template tagBoundaries<stencil_type>(v_cl.getmgpuContext(),chk);
 		}
 	}