diff --git a/examples/NS0SliceParticles.py b/examples/NS0SliceParticles.py
new file mode 100644
index 0000000000000000000000000000000000000000..7c089405988a1c6eef6a1c7649e11c7a4a6edcaa
--- /dev/null
+++ b/examples/NS0SliceParticles.py
@@ -0,0 +1,126 @@
+#######################################################################
+#                                                                     #
+#  Copyright 2015 Max Planck Institute                                #
+#                 for Dynamics and Self-Organization                  #
+#                                                                     #
+#  This file is part of bfps.                                         #
+#                                                                     #
+#  bfps is free software: you can redistribute it and/or modify       #
+#  it under the terms of the GNU General Public License as published  #
+#  by the Free Software Foundation, either version 3 of the License,  #
+#  or (at your option) any later version.                             #
+#                                                                     #
+#  bfps is distributed in the hope that it will be useful,            #
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of     #
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      #
+#  GNU General Public License for more details.                       #
+#                                                                     #
+#  You should have received a copy of the GNU General Public License  #
+#  along with bfps.  If not, see <http://www.gnu.org/licenses/>       #
+#                                                                     #
+# Contact: Cristian.Lalescu@ds.mpg.de                                 #
+#                                                                     #
+#######################################################################
+
+
+
+import os
+import sys
+import bfps
+import numpy as np
+
+class NS0SliceParticles(bfps.NavierStokes):
+    """
+        Example of how bfps is envisioned to be used.
+        Standard NavierStokes class is inherited, and then new functionality
+        added on top.
+        In particular, this class will a DNS with particles starting on a square
+        grid in the z=0 slice of the field.
+    """
+    standard_names = ['NS0SP',
+                      'NS0SP-single',
+                      'NS0SP-double']
+    def __init__(
+            self,
+            name = 'NS0SliceParticles-v' + bfps.__version__,
+            **kwargs):
+        bfps.NavierStokes.__init__(
+                self,
+                name = name,
+                **kwargs)
+        return None
+    def specific_parser_arguments(
+            self,
+            parser):
+        bfps.NavierStokes.specific_parser_arguments(self, parser)
+        parser.add_argument(
+                '--pcloudX',
+                type = float,
+                dest = 'pcloudX',
+                default = 0.0)
+        parser.add_argument(
+                '--pcloudY',
+                type = float,
+                dest = 'pcloudY',
+                default = 0.0)
+        return None
+    def launch_jobs(
+            self,
+            opt = None):
+        if not os.path.exists(os.path.join(self.work_dir, self.simname + '.h5')):
+            particle_initial_condition = None
+            if self.parameters['nparticles'] > 0:
+                # the extra dimension of 1 is because I want
+                # a single chunk of particles.
+                particle_initial_condition = np.zeros(
+                        (1,
+                         self.parameters['nparticles'],
+                         self.parameters['nparticles'],
+                         3),
+                        dtype = np.float64)
+                xvals = (opt.pcloudX +
+                         np.linspace(-opt.particle_cloud_size/2,
+                                      opt.particle_cloud_size/2,
+                                      self.parameters['nparticles']))
+                yvals = (opt.pcloudY +
+                         np.linspace(-opt.particle_cloud_size/2,
+                                      opt.particle_cloud_size/2,
+                                      self.parameters['nparticles']))
+                particle_initial_condition[..., 0] = xvals[None, None, :]
+                particle_initial_condition[..., 1] = yvals[None, :, None]
+            self.write_par(
+                    particle_ic = particle_initial_condition)
+            if self.parameters['nparticles'] > 0:
+                data = self.generate_tracer_state(
+                        species = 0,
+                        rseed = opt.particle_rand_seed,
+                        data = particle_initial_condition)
+            init_condition_file = os.path.join(
+                    self.work_dir,
+                    self.simname + '_cvorticity_i{0:0>5x}'.format(0))
+            if not os.path.exists(init_condition_file):
+                if len(opt.src_simname) > 0:
+                    src_file = os.path.join(
+                            os.path.realpath(opt.src_work_dir),
+                            opt.src_simname + '_cvorticity_i{0:0>5x}'.format(opt.src_iteration))
+                    os.symlink(src_file, init_condition_file)
+                else:
+                   self.generate_vector_field(
+                           write_to_file = True,
+                           spectra_slope = 2.0,
+                           amplitude = 0.05)
+        self.run(
+                ncpu = opt.ncpu,
+                njobs = opt.njobs,
+                hours = opt.minutes // 60,
+                minutes = opt.minutes % 60)
+        return None
+
+def main():
+    c = NS0SliceParticles()
+    c.launch(args = sys.argv[1:])
+    return None
+
+if __name__ == '__main__':
+    main()
+