diff --git a/cpp/full_code/NSVEcomplex_particles.cpp b/cpp/full_code/NSVEcomplex_particles.cpp
index 81408d2bf739d85a6fb668da9cb74d35d8ad2882..d7e500920d6ef6ac3375804bf922425b4a5277a8 100644
--- a/cpp/full_code/NSVEcomplex_particles.cpp
+++ b/cpp/full_code/NSVEcomplex_particles.cpp
@@ -74,6 +74,8 @@ int NSVEcomplex_particles<rnumber>::initialize(void)
                 (this->simname + "_particles.h5"),
                 "tracers0",
                 "position/0");
+    this->particles_output_writer_mpi->setParticleFileLayout(this->ps->getParticleFileLayout());
+    this->particles_sample_writer_mpi->setParticleFileLayout(this->ps->getParticleFileLayout());
 
 
     /// allocate grad vel field
@@ -164,7 +166,7 @@ int NSVEcomplex_particles<rnumber>::do_stats()
     this->particles_sample_writer_mpi->template save_dataset<3>(
             "tracers0",
             "position",
-            pdata0.get(),
+            pdata0.get(), // we need to use pdata0.get() here, because it's 3D, whereas getParticlesState may give something else
             &pdata0,
             this->ps->getParticlesIndexes(),
             this->ps->getLocalNbParticles(),
diff --git a/cpp/particles/particles_output_sampling_hdf5.hpp b/cpp/particles/particles_output_sampling_hdf5.hpp
index 32ef18d3c35e3970ae6719c34837cdb80964d773..b3a4c51f8f03772ed5017aabdaa351e5453662d5 100644
--- a/cpp/particles/particles_output_sampling_hdf5.hpp
+++ b/cpp/particles/particles_output_sampling_hdf5.hpp
@@ -278,7 +278,7 @@ public:
         }
     }
 
-    int setParticleFileLayout(std::vector<hsize_t> input_layout){
+    int setParticleFileLayout(const std::vector<hsize_t> input_layout){
         this->particle_file_layout.resize(input_layout.size());
         for (unsigned int i=0; i<this->particle_file_layout.size(); i++)
             this->particle_file_layout[i] = input_layout[i];