diff --git a/bfps/FluidConvert.py b/bfps/FluidConvert.py
index 72afa2a8c54d63bdbf96809670ed7aa4adbb2275..cbb9d9c3f478463426afbb63c18bb26abba49285 100644
--- a/bfps/FluidConvert.py
+++ b/bfps/FluidConvert.py
@@ -90,9 +90,10 @@ class FluidConvert(_fluid_particle_base):
                 """
         self.fluid_end += 'delete fs;\n'
         return None
-    def add_parser_arguments(
+    def specific_parser_arguments(
             self,
             parser):
+        _fluid_particle_base.specific_parser_arguments(self, parser)
         parser.add_argument(
                 '--src-wd',
                 type = str,
diff --git a/bfps/FluidResize.py b/bfps/FluidResize.py
index 253c6d791d72ec4646b397522e5ea9fc80f17f72..1730a6d63f94a6ae70c06589575cc0027a03d978 100644
--- a/bfps/FluidResize.py
+++ b/bfps/FluidResize.py
@@ -104,15 +104,16 @@ class FluidResize(_fluid_particle_base):
                 //endcpp
                 """
         return None
-    def add_parser_arguments(
+    def specific_parser_arguments(
             self,
             parser):
+        _fluid_particle_base.specific_parser_arguments(self, parser)
         parser.add_argument(
-                '-n',
+                '-N',
                 type = int,
-                dest = 'n',
+                dest = 'N',
                 default = 32,
-                metavar = 'N',
-                help = 'resize to N')
+                metavar = 'M',
+                help = 'resize from N to M')
         return None
 
diff --git a/bfps/Launcher.py b/bfps/Launcher.py
index a2dc0803321ce88f285a4e472b4cd8595424bd28..fc21489967fee6ae942cdfe0d5a9af956d14fbbd 100644
--- a/bfps/Launcher.py
+++ b/bfps/Launcher.py
@@ -43,39 +43,9 @@ class Launcher:
             self,
             base_class = NavierStokes):
         self.base_class = base_class
-        self.parser = argparse.ArgumentParser(prog = 'bfps-' + self.base_class.__name__)
-        # generic arguments, all classes may use these
-        self.parser.add_argument(
-                '-v', '--version',
-                action = 'version',
-                version = '%(prog)s ' + bfps.__version__)
-        self.parser.add_argument(
-                '--ncpu',
-                type = int, dest = 'ncpu',
-                default = 2)
-        self.parser.add_argument(
-                '--simname',
-                type = str, dest = 'simname',
-                default = 'test')
-        self.parser.add_argument(
-                '--environment',
-                type = str,
-                dest = 'environment',
-                default = '')
-        self.parser.add_argument(
-                '--wd',
-                type = str, dest = 'work_dir',
-                default = './')
+        self.parser = argparse.ArgumentParser(prog = 'bfps ' + self.base_class.__name__)
         c = self.base_class()
-        # now add class specific arguments
         c.add_parser_arguments(self.parser)
-        # now add code parameters
-        for k in sorted(c.parameters.keys()):
-            self.parser.add_argument(
-                    '--{0}'.format(k),
-                    type = type(c.parameters[k]),
-                    dest = k,
-                    default = None)
         return None
     def __call__(
             self,
diff --git a/bfps/NavierStokes.py b/bfps/NavierStokes.py
index 34433aced73bf62cf4076616e4119eef4e9c53a8..a4f6408d84757d5181616d972693c25e26b368dc 100644
--- a/bfps/NavierStokes.py
+++ b/bfps/NavierStokes.py
@@ -921,9 +921,10 @@ class NavierStokes(_fluid_particle_base):
         self.fluid_start += update_fields
         self.fluid_loop += update_fields
         return None
-    def add_parser_arguments(
+    def specific_parser_arguments(
             self,
             parser):
+        _fluid_particle_base.specific_parser_arguments(self, parser)
         parser.add_argument(
                 '--src-wd',
                 type = str,
@@ -939,13 +940,6 @@ class NavierStokes(_fluid_particle_base):
                 type = int,
                 dest = 'src_iteration',
                 default = 0)
-        parser.add_argument(
-               '-n', '--cube-size',
-               type = int,
-               dest = 'n',
-               default = 32,
-               metavar = 'N',
-               help = 'code is run by default in a grid of NxNxN')
         parser.add_argument(
                '--precision',
                type = str, dest = 'precision',
diff --git a/bfps/_base.py b/bfps/_base.py
index decfaaa7fbc1ba96027a34d0d5edfb6dbc4af258..78667424a6e455f20158e317f0e82868f5b21904 100644
--- a/bfps/_base.py
+++ b/bfps/_base.py
@@ -29,6 +29,7 @@ import sys
 import numpy as np
 import h5py
 from bfps import install_info
+from bfps import __version__
 
 class _base(object):
     """This class contains simulation parameters, and handles parameter related
@@ -119,13 +120,66 @@ class _base(object):
                     self.parameters[k] = type(self.parameters[k])(data_file['parameters/' + k].value)
         return None
     def pars_from_namespace(self, opt):
-        new_pars = vars(opt)
+        cmd_line_pars = vars(opt)
+        for k in ['nx', 'ny', 'nz']:
+            if type(cmd_line_pars[k]) == type(None):
+                cmd_line_pars[k] = opt.n
+        for k in self.parameters.keys():
+            if k in cmd_line_pars.keys():
+                if not type(cmd_line_pars[k]) == type(None):
+                    self.parameters[k] = cmd_line_pars[k]
         self.simname = opt.simname
         self.work_dir = opt.work_dir
-        for k in self.parameters.keys():
-            self.parameters[k] = new_pars[k]
         return None
     def get_coord(self, direction):
         assert(direction == 'x' or direction == 'y' or direction == 'z')
         return np.arange(.0, self.parameters['n' + direction])*2*np.pi / self.parameters['n' + direction]
+    def add_parser_arguments(
+            self,
+            parser):
+        self.specific_parser_arguments(parser)
+        self.parameters_to_parser_arguments(parser)
+        return None
+    def specific_parser_arguments(
+            self,
+            parser):
+        parser.add_argument(
+                '-v', '--version',
+                action = 'version',
+                version = '%(prog)s ' + __version__)
+        parser.add_argument(
+               '-n', '--cube-size',
+               type = int,
+               dest = 'n',
+               default = 32,
+               metavar = 'N',
+               help = 'code is run by default in a grid of NxNxN')
+        parser.add_argument(
+                '--ncpu',
+                type = int, dest = 'ncpu',
+                default = 2)
+        parser.add_argument(
+                '--simname',
+                type = str, dest = 'simname',
+                default = 'test')
+        parser.add_argument(
+                '--environment',
+                type = str,
+                dest = 'environment',
+                default = '')
+        parser.add_argument(
+                '--wd',
+                type = str, dest = 'work_dir',
+                default = './')
+        return None
+    def parameters_to_parser_arguments(
+            self,
+            parser):
+        for k in sorted(self.parameters.keys()):
+            parser.add_argument(
+                    '--{0}'.format(k),
+                    type = type(self.parameters[k]),
+                    dest = k,
+                    default = None)
+        return None