diff --git a/bfps/NavierStokes.py b/bfps/NavierStokes.py
index 52c6a8c4e0a5bdf6fb8c416b5294d34aa0b58690..d71d2704821ba085411a15652ab7cb387b48aa71 100644
--- a/bfps/NavierStokes.py
+++ b/bfps/NavierStokes.py
@@ -249,24 +249,15 @@ class NavierStokes(bfps.fluid_base.fluid_particle_base):
         self.parameters['kcut{0}'.format(self.particle_species)] = kcut
         self.parameters['integration_steps{0}'.format(self.particle_species)] = integration_steps
         self.particle_variables += 'tracers<{0}> *ps{1};\n'.format(self.C_dtype, self.particle_species)
-        grow_template = """
+        self.file_datasets_grow += """
                         //begincpp
                         temp_string = (std::string("/particles/") +
-                                       std::string(ps{0}->name) +
-                                       std::string("/{1}"));
-                        Cdset = H5Dopen(stat_file, temp_string.c_str(), H5P_DEFAULT);
-                        Cspace = H5Dget_space(Cdset);
-                        ndims = H5Sget_simple_extent_dims(Cspace, dims, NULL);
-                        dims[0] += niter_todo/niter_part;
-                        H5Dset_extent(Cdset, dims);
-                        H5Sclose(Cspace);
-                        H5Dclose(Cdset);
+                                       std::string(ps{0}->name));
+                        group = H5Gopen(stat_file, temp_string.c_str(), H5P_DEFAULT);
+                        grow_particle_datasets(group, temp_string.c_str(), NULL, NULL);
+                        H5Gclose(group);
                         //endcpp
-                        """
-        self.file_datasets_grow += grow_template.format(self.particle_species, 'state')
-        self.file_datasets_grow += grow_template.format(self.particle_species, 'rhs')
-        self.file_datasets_grow += grow_template.format(self.particle_species, 'velocity')
-        self.file_datasets_grow += grow_template.format(self.particle_species, 'acceleration')
+                        """.format(self.particle_species)
         #self.particle_definitions
         if kcut == 'fs->kM':
             if self.particle_species == 0 or force_vel_reset:
diff --git a/bfps/fluid_base.py b/bfps/fluid_base.py
index 5e136d5c688f97a6a2611138e9e59e4df97f4b8b..b126f5aea6094e741a71e180ed711757e2e7a98d 100644
--- a/bfps/fluid_base.py
+++ b/bfps/fluid_base.py
@@ -118,6 +118,19 @@ class fluid_particle_base(bfps.code):
                              'grow_single_dataset(dset, niter_todo/niter_stat);\n'
                              'H5Dclose(dset);\n}\n' +
                              'return 0;\n}\n')
+        self.definitions += ('herr_t grow_particle_datasets(hid_t g_id, const char *name, const H5L_info_t *info, void *op_data)\n{\n' +
+                             'std::string full_name;\n' +
+                             'hsize_t dset;\n')
+        for key in ['state', 'velocity', 'acceleration']:
+            self.definitions += ('full_name = (std::string(name) + std::string("/{0}"));\n'.format(key) +
+                                 'dset = H5Dopen(g_id, full_name.c_str(), H5P_DEFAULT);\n' +
+                                 'grow_single_dataset(dset, niter_todo/niter_part);\n' +
+                                 'H5Dclose(dset);\n')
+        self.definitions += ('full_name = (std::string(name) + std::string("/rhs"));\n' +
+                             'dset = H5Dopen(g_id, full_name.c_str(), H5P_DEFAULT);\n' +
+                             'grow_single_dataset(dset, 1);\n' +
+                             'H5Dclose(dset);\n' +
+                             'return 0;\n}\n')
         self.definitions += ('int grow_file_datasets()\n{\n' +
                              'int file_problems = 0;\n' +
                              self.file_datasets_grow +
diff --git a/tests/test_plain.py b/tests/test_plain.py
index 929100bc1802bc93e300045d7a3dfc892aa335b4..596eb0e9323c81e4d0c8c504b093aa2b1c95b0f9 100755
--- a/tests/test_plain.py
+++ b/tests/test_plain.py
@@ -47,12 +47,12 @@ def plain(opt):
     opt.work_dir = wd + '/N{0:0>3x}_2'.format(opt.n)
     opt.njobs *= 2
     opt.niter_todo /= 2
-    c1 = launch(opt)
+    c1 = launch(opt, dt = c0.parameters['dt'])
     c1.compute_statistics()
     opt.work_dir = wd + '/N{0:0>3x}_3'.format(opt.n)
     opt.njobs = 3*opt.njobs/2
     opt.niter_todo = 2*opt.niter_todo/3
-    c2 = launch(opt)
+    c2 = launch(opt, dt = c0.parameters['dt'])
     c2.compute_statistics()
     # plot energy and enstrophy
     fig = plt.figure(figsize = (12, 12))