diff --git a/bfps/DNS.py b/bfps/DNS.py
index e6ef006ad5b8251dd7bc893512f240aeb70714ca..e6ace758a1f6efb240cfa0655cc661a83a1ab6e2 100644
--- a/bfps/DNS.py
+++ b/bfps/DNS.py
@@ -148,6 +148,11 @@ class DNS(_code):
         self.NSVEp_extra_parameters['tracers0_integration_steps'] = int(4)
         self.NSVEp_extra_parameters['tracers0_neighbours'] = int(1)
         self.NSVEp_extra_parameters['tracers0_smoothness'] = int(1)
+        self.NSVEp_extra_parameters['tracers0_enable_p2p'] = int(0)
+        self.NSVEp_extra_parameters['tracers0_enable_inner'] = int(0)
+        self.NSVEp_extra_parameters['tracers0_enable_vorticity_omega'] = int(0)
+        self.NSVEp_extra_parameters['tracers0_cutoff'] = float(1)
+        self.NSVEp_extra_parameters['tracers0_inner_v0'] = float(1)
         #self.extra_parameters = {}
         #for key in ['NSVE', 'NSVE_no_output', 'NSVEparticles', 'NSVEparticles_no_output', 'NSVEcomplex_particles']:
         #    self.extra_parameters[key] = {}
diff --git a/bfps/cpp/full_code/NSVE_no_output.hpp b/bfps/cpp/full_code/NSVE_no_output.hpp
index 0047a45a02dd58ae8934f78fdd8d804424ae817c..b98f89f6de95b806128a0b9d84dc322602234f71 100644
--- a/bfps/cpp/full_code/NSVE_no_output.hpp
+++ b/bfps/cpp/full_code/NSVE_no_output.hpp
@@ -18,7 +18,6 @@ class NSVE_no_output: public NSVE<rnumber>
     {
         return 0;
     }
-    int read_parameters(void);
 };
 
 #endif//NSVE_NO_OUTPUT_HPP
diff --git a/bfps/cpp/full_code/NSVEcomplex_particles.cpp b/bfps/cpp/full_code/NSVEcomplex_particles.cpp
index 93d0edc17e24925b25513dd3a4832f687255329a..1e138711b19c9bf686a4cb6dcfe1c79f5c8f59fe 100644
--- a/bfps/cpp/full_code/NSVEcomplex_particles.cpp
+++ b/bfps/cpp/full_code/NSVEcomplex_particles.cpp
@@ -184,6 +184,29 @@ int NSVEcomplex_particles<rnumber>::do_stats()
             this->ps->getLocalNbParticles(),
             this->ps->get_step_idx()-1);
 
+    // deallocate temporary data array
+    // TODO: is it required/safe to call the release method here?
+    //pdata.release();
+
+    return EXIT_SUCCESS;
+}
+
+template <typename rnumber>
+int NSVEcomplex_particles<rnumber>::read_parameters(void)
+{
+    this->NSVE<rnumber>::read_parameters();
+    hid_t parameter_file = H5Fopen((this->simname + ".h5").c_str(), H5F_ACC_RDONLY, H5P_DEFAULT);
+    this->niter_part = hdf5_tools::read_value<int>(parameter_file, "parameters/niter_part");
+    this->nparticles = hdf5_tools::read_value<int>(parameter_file, "parameters/nparticles");
+    this->tracers0_integration_steps = hdf5_tools::read_value<int>(parameter_file, "parameters/tracers0_integration_steps");
+    this->tracers0_neighbours = hdf5_tools::read_value<int>(parameter_file, "parameters/tracers0_neighbours");
+    this->tracers0_smoothness = hdf5_tools::read_value<int>(parameter_file, "parameters/tracers0_smoothness");
+    this->enable_p2p = hdf5_tools::read_value<int>(parameter_file, "parameters/tracers0_enable_p2p");
+    this->enable_inner = hdf5_tools::read_value<int>(parameter_file, "parameters/tracers0_enable_inner");
+    this->enable_vorticity_omega = hdf5_tools::read_value<int>(parameter_file, "parameters/tracers0_enable_vorticity_omega");
+    this->cutoff = hdf5_tools::read_value<double>(parameter_file, "parameters/tracers0_cutoff");
+    this->inner_v0 = hdf5_tools::read_value<double>(parameter_file, "parameters/tracers0_inner_v0");
+    H5Fclose(parameter_file);
     return EXIT_SUCCESS;
 }
 
diff --git a/bfps/cpp/full_code/NSVEparticles_no_output.hpp b/bfps/cpp/full_code/NSVEparticles_no_output.hpp
index 264fd75ac9b0628aff167d018d888030b7029a35..d3d40139ca80b424d314baadbec5ceb0153061a3 100644
--- a/bfps/cpp/full_code/NSVEparticles_no_output.hpp
+++ b/bfps/cpp/full_code/NSVEparticles_no_output.hpp
@@ -18,7 +18,6 @@ class NSVEparticles_no_output: public NSVEparticles<rnumber>
     {
         return 0;
     }
-    int read_parameters(void);
 };
 
 #endif//NSVEPARTICLES_NO_OUTPUT_HPP
diff --git a/bfps/cpp/full_code/postprocess.cpp b/bfps/cpp/full_code/postprocess.cpp
index cb04a030123f3f5ecaa501ca11b22511d1a8ca84..430d87a55fdec51ca145e6ee41d6ed7b3ed73a98 100644
--- a/bfps/cpp/full_code/postprocess.cpp
+++ b/bfps/cpp/full_code/postprocess.cpp
@@ -33,41 +33,19 @@ int postprocess::main_loop(void)
 
 int postprocess::read_parameters()
 {
-    hid_t parameter_file;
-    char fname[256];
-    sprintf(fname, "%s.h5", this->simname.c_str());
-    parameter_file = H5Fopen(fname, H5F_ACC_RDONLY, H5P_DEFAULT);
-    this->dealias_type = hdf5_tools::read_value<int>(
-            parameter_file, "/parameters/dealias_type");
-    this->dkx = hdf5_tools::read_value<double>(
-            parameter_file, "/parameters/dkx");
-    this->dky = hdf5_tools::read_value<double>(
-            parameter_file, "/parameters/dky");
-    this->dkz = hdf5_tools::read_value<double>(
-            parameter_file, "/parameters/dkz");
-    this->dt = hdf5_tools::read_value<double>(
-            parameter_file, "/parameters/dt");
-    this->famplitude = hdf5_tools::read_value<double>(
-            parameter_file, "/parameters/famplitude");
-    this->friction_coefficient = hdf5_tools::read_value<double>(
-            parameter_file, "/parameters/friction_coefficient");
-    this->fk0 = hdf5_tools::read_value<double>(
-            parameter_file, "/parameters/fk0");
-    this->fk1 = hdf5_tools::read_value<double>(
-            parameter_file, "/parameters/fk1");
-    this->fmode = hdf5_tools::read_value<int>(
-            parameter_file, "/parameters/fmode");
-    sprintf(this->forcing_type, "%s",
-            hdf5_tools::read_string(parameter_file, "/parameters/forcing_type").c_str());
-    this->nu = hdf5_tools::read_value<double>(
-            parameter_file, "/parameters/nu");
-    this->nx = hdf5_tools::read_value<int>(
-            parameter_file, "/parameters/nx");
-    this->ny = hdf5_tools::read_value<int>(
-            parameter_file, "/parameters/ny");
-    this->nz = hdf5_tools::read_value<int>(
-            parameter_file, "/parameters/nz");
+    this->code_base::read_parameters();
+    hid_t parameter_file = H5Fopen((this->simname + ".h5").c_str(), H5F_ACC_RDONLY, H5P_DEFAULT);
+    this->nu = hdf5_tools::read_value<double>(parameter_file, "parameters/nu");
+    this->dt = hdf5_tools::read_value<double>(parameter_file, "parameters/dt");
+    this->fmode = hdf5_tools::read_value<int>(parameter_file, "parameters/fmode");
+    this->famplitude = hdf5_tools::read_value<double>(parameter_file, "parameters/famplitude");
+    this->friction_coefficient = hdf5_tools::read_value<double>(parameter_file, "parameters/friction_coefficient");
+    this->fk0 = hdf5_tools::read_value<double>(parameter_file, "parameters/fk0");
+    this->fk1 = hdf5_tools::read_value<double>(parameter_file, "parameters/fk1");
+    this->energy = hdf5_tools::read_value<double>(parameter_file, "parameters/energy");
+    std::string tmp = hdf5_tools::read_string(parameter_file, "parameters/forcing_type");
+    snprintf(this->forcing_type, 511, "%s", tmp.c_str());
     H5Fclose(parameter_file);
-    return 0;
+    return EXIT_SUCCESS;
 }
 
diff --git a/bfps/cpp/full_code/postprocess.hpp b/bfps/cpp/full_code/postprocess.hpp
index 660e561a1ddba6b355ee5ecf49c5cea1b7153eff..65e6eadd1fd05615eb69cb7d8ca1754abd1b7e42 100644
--- a/bfps/cpp/full_code/postprocess.hpp
+++ b/bfps/cpp/full_code/postprocess.hpp
@@ -46,6 +46,7 @@ class postprocess: public code_base
         double friction_coefficient;
         double fk0;
         double fk1;
+        double energy;
         int fmode;
         char forcing_type[512];
         double nu;
diff --git a/bfps/cpp/full_code/test.cpp b/bfps/cpp/full_code/test.cpp
index 9c2e4e6744b4ecd8945615da730c9dcd14382e78..e382efb45238b621c0b9086d0619d46a9078c61b 100644
--- a/bfps/cpp/full_code/test.cpp
+++ b/bfps/cpp/full_code/test.cpp
@@ -18,36 +18,3 @@ int test::main_loop(void)
     return EXIT_SUCCESS;
 }
 
-
-int test::read_parameters()
-{
-    hid_t parameter_file;
-    hid_t dset;
-    char fname[256];
-    sprintf(fname, "%s.h5", this->simname.c_str());
-    parameter_file = H5Fopen(fname, H5F_ACC_RDONLY, H5P_DEFAULT);
-    dset = H5Dopen(parameter_file, "/parameters/dealias_type", H5P_DEFAULT);
-    H5Dread(dset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &this->dealias_type);
-    H5Dclose(dset);
-    dset = H5Dopen(parameter_file, "/parameters/dkx", H5P_DEFAULT);
-    H5Dread(dset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &this->dkx);
-    H5Dclose(dset);
-    dset = H5Dopen(parameter_file, "/parameters/dky", H5P_DEFAULT);
-    H5Dread(dset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &this->dky);
-    H5Dclose(dset);
-    dset = H5Dopen(parameter_file, "/parameters/dkz", H5P_DEFAULT);
-    H5Dread(dset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &this->dkz);
-    H5Dclose(dset);
-    dset = H5Dopen(parameter_file, "/parameters/nx", H5P_DEFAULT);
-    H5Dread(dset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &this->nx);
-    H5Dclose(dset);
-    dset = H5Dopen(parameter_file, "/parameters/ny", H5P_DEFAULT);
-    H5Dread(dset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &this->ny);
-    H5Dclose(dset);
-    dset = H5Dopen(parameter_file, "/parameters/nz", H5P_DEFAULT);
-    H5Dread(dset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &this->nz);
-    H5Dclose(dset);
-    H5Fclose(parameter_file);
-    return 0;
-}
-
diff --git a/bfps/cpp/full_code/test.hpp b/bfps/cpp/full_code/test.hpp
index 134a01512b3fd836a8ac4d40068b3954752c4844..96ddaf8104f1dd3d050b4acf16a68dbcd539b290 100644
--- a/bfps/cpp/full_code/test.hpp
+++ b/bfps/cpp/full_code/test.hpp
@@ -56,7 +56,6 @@ class test: public code_base
         virtual int finalize(void) = 0;
 
         int main_loop(void);
-        virtual int read_parameters(void);
 };
 
 #endif//TEST_HPP