diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 66556df9d851d38dfb53906aef6a7c6df00d0a02..e04c5d3a291721f9c1648051d3226ef617b6815e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -17,8 +17,8 @@ config:bionic:
   image: keckj/hysop:ubuntu_bionic
   stage: configure
   script: 
-      - "sh ci/scripts/config.sh $CI_PROJECT_DIR/build/gcc-7   $CI_PROJECT_DIR/install/gcc-7   gcc-7     g++-7       gfortran-7"
-      - "sh ci/scripts/config.sh $CI_PROJECT_DIR/build/clang-6 $CI_PROJECT_DIR/install/clang-6 clang-6.0 clang++-6.0 gfortran-7"
+      - "bash ci/scripts/config.sh $CI_PROJECT_DIR/build/gcc-7   $CI_PROJECT_DIR/install/gcc-7   gcc-7     g++-7       gfortran-7"
+      - "bash ci/scripts/config.sh $CI_PROJECT_DIR/build/clang-6 $CI_PROJECT_DIR/install/clang-6 clang-6.0 clang++-6.0 gfortran-7"
   dependencies:
     - env:bionic
   artifacts:
@@ -29,8 +29,8 @@ build:bionic:
   image: keckj/hysop:ubuntu_bionic
   stage: build
   script: 
-      - "sh ci/scripts/build.sh $CI_PROJECT_DIR/build/gcc-7   gcc-7     g++-7       gfortran-7"
-      - "sh ci/scripts/build.sh $CI_PROJECT_DIR/build/clang-6 clang-6.0 clang++-6.0 gfortran-7"
+      - "bash ci/scripts/build.sh $CI_PROJECT_DIR/build/gcc-7   gcc-7     g++-7       gfortran-7"
+      - "bash ci/scripts/build.sh $CI_PROJECT_DIR/build/clang-6 clang-6.0 clang++-6.0 gfortran-7"
   dependencies:
     - config:bionic
   artifacts:
@@ -41,7 +41,7 @@ install:bionic:
   image: keckj/hysop:ubuntu_bionic
   stage: install
   script: 
-      - "sh ci/scripts/install.sh $CI_PROJECT_DIR/build/gcc-7 $CI_PROJECT_DIR/install/gcc-7"
+      - "bash ci/scripts/install.sh $CI_PROJECT_DIR/build/gcc-7 $CI_PROJECT_DIR/install/gcc-7"
   dependencies:
     - build:bionic
   artifacts:
@@ -52,7 +52,7 @@ test:bionic:
   image: keckj/hysop:ubuntu_bionic
   stage: test
   script:
-    - "sh ci/scripts/test.sh $CI_PROJECT_DIR/install/gcc-7 $CI_PROJECT_DIR/hysop $CI_PROJECT_DIR/cache"
+    - "bash ci/scripts/test.sh $CI_PROJECT_DIR/install/gcc-7 $CI_PROJECT_DIR/hysop $CI_PROJECT_DIR/cache"
   dependencies:
     - install:bionic
   cache:
diff --git a/examples/fixed_point/heat_equation.py b/examples/fixed_point/heat_equation.py
index 43fddf9ed5e7bb12dfc653397991dff7920d3cc0..35ca2e65371458201621b93c55cecf9d68aaf666 100644
--- a/examples/fixed_point/heat_equation.py
+++ b/examples/fixed_point/heat_equation.py
@@ -1,4 +1,5 @@
-"""Example for fixed point iteration inside Simulation.
+"""
+Example for fixed point iteration inside Simulation.
 
 We consider steady state of heat equation with a varying source term.
 Each time step, the source terms are computed analytically and then an
@@ -6,6 +7,7 @@ iterative method is used to compute  steady state solution.
 """
 
 import numpy as np
+import sympy as sp
 
 from hysop import Box, Simulation, Problem, Field, MPIParams
 from hysop.constants import Implementation, HYSOP_REAL, Backend, ResidualError
@@ -15,13 +17,12 @@ from hysop.operators import StrangSplitting, DirectionalDiffusion, \
 from hysop.methods import StrangOrder
 from hysop.parameters.scalar_parameter import ScalarParameter
 from hysop.topology.cartesian_topology import CartesianTopology
-from hysop.tools.parameters import Discretization
+from hysop.tools.parameters import CartesianDiscretization
 from hysop.iterative_method import PseudoSimulation, IterativeMethod
 from hysop.symbolic.relational import Assignment
 from hysop.symbolic.misc import Select
 from hysop.symbolic.tmp import TmpScalar
 from hysop.simulation import eps
-import sympy as sp
 
 
 # Define the domain
@@ -45,7 +46,7 @@ pseudo_dt = ScalarParameter(name='pseudo_dt', dtype=HYSOP_REAL, min_value=eps,
 topo_nogh = CartesianTopology(
     domain=box,
     backend=Backend.HOST,
-    discretization=Discretization(npts, ghosts=(0, 0, 0)),
+    discretization=CartesianDiscretization(npts, ghosts=(0, 0, 0), default_boundaries=True),
     mpi_params=mpi_params)
 
 # Operator for setting iterative method
diff --git a/examples/flow_around_sphere/flow_around_sphere.py b/examples/flow_around_sphere/flow_around_sphere.py
index 78b4cfca9b7a50487edbf97325a7df8fda19d510..45f83a42d69ed948eeea91bb6a58d7256de31ff0 100644
--- a/examples/flow_around_sphere/flow_around_sphere.py
+++ b/examples/flow_around_sphere/flow_around_sphere.py
@@ -230,8 +230,8 @@ enstrophy_op = Enstrophy(
     implementation=Implementation.PYTHON, **extra_op_kwds)
 
 ### Adaptive timestep operator
-#TODO:move advection to GRAD_U
-#TODO:add stretching criteria, based on a gradient
+#TODO: move advection to GRAD_U
+#TODO: add stretching criteria, based on a gradient
 adapt_dt = AdaptiveTimeStep(dt, equivalent_CFL=True,
                             start_time=10*dt0)  # start adapting timestep at t=10*dt0
 dt_cfl = adapt_dt.push_cfl_criteria(cfl=cfl,
@@ -268,8 +268,8 @@ problem.insert(
 )
 problem.build()
 
-# # Create a simulation
-# # (do not forget to specify the t and dt parameters here)
+## Create a simulation
+## (do not forget to specify the t and dt parameters here)
 simu = Simulation(start=0., end=10.0,
                   dt0=dt0, t=t, dt=dt)
 simu.write_parameters(t, dt_cfl, dt_advec, dt, enstrophy, flowrate,
diff --git a/hysop/core/graph/computational_graph.py b/hysop/core/graph/computational_graph.py
index 192fb1dce4c4875e9a05c6b86d4fd14c02276a75..ecd91d0055a436e808576552331c19d5151cbded 100644
--- a/hysop/core/graph/computational_graph.py
+++ b/hysop/core/graph/computational_graph.py
@@ -95,9 +95,10 @@ class ComputationalGraph(ComputationalGraphNode):
                     ghosts = u'{}<=ghosts<{}'.format(min_ghosts, max_ghosts)
                     can_split=req.can_split.view(npw.int8)
                     memory_order=u'{}'.format(req.memory_order) if req.memory_order else u'ANY'
+                    can_split=u'[{}]'.format(u','.join('1' if cs else '0' for cs in req.can_split))
                     tstates=u'{}'.format(u','.join(str(ts) for ts in req.tstates)) \
                             if req.tstates else 'ANY'
-                    sin.append( (opname, fname, discr, ghosts, memory_order, tstates) )
+                    sin.append( (opname, fname, discr, ghosts, memory_order, can_split, tstates) )
         for field, mreqs in requirements.output_field_requirements.iteritems():
             for td, reqs in mreqs.requirements.iteritems():
                 for req in reqs:
@@ -114,19 +115,21 @@ class ComputationalGraph(ComputationalGraphNode):
                     ghosts = u'{}<=ghosts<{}'.format(min_ghosts, max_ghosts)
                     can_split=req.can_split.view(npw.int8)
                     memory_order=u'{}'.format(req.memory_order) if req.memory_order else u'ANY'
+                    can_split=u'[{}]'.format(u','.join('1' if cs else '0' for cs in req.can_split))
                     tstates=u'{}'.format(u','.join(str(ts) for ts in req.tstates)) \
                             if req.tstates else u'ANY'
-                    sout.append( (opname, fname, discr, ghosts, memory_order, tstates) )
+                    sout.append( (opname, fname, discr, ghosts, memory_order, can_split, tstates) )
 
-        titles = [[(u'OPERATOR', u'FIELD', u'DISCRETIZATION', u'GHOSTS', u'MEMORY ORDER', u'TSTATES')]]
-        name_size    = max(len(s[0]) for ss in sinputs.values()+soutputs.values()+titles for s in ss)
-        field_size   = max(len(s[1]) for ss in sinputs.values()+soutputs.values()+titles for s in ss)
-        discr_size   = max(len(s[2]) for ss in sinputs.values()+soutputs.values()+titles for s in ss)
-        ghosts_size  = max(len(s[3]) for ss in sinputs.values()+soutputs.values()+titles for s in ss)
-        order_size   = max(len(s[4]) for ss in sinputs.values()+soutputs.values()+titles for s in ss)
-        tstates_size = max(len(s[5]) for ss in sinputs.values()+soutputs.values()+titles for s in ss)
+        titles = [[(u'OPERATOR', u'FIELD', u'DISCRETIZATION', u'GHOSTS', u'MEMORY ORDER', u'CAN_SPLIT', u'TSTATES')]]
+        name_size     = max(len(s[0]) for ss in sinputs.values()+soutputs.values()+titles for s in ss)
+        field_size    = max(len(s[1]) for ss in sinputs.values()+soutputs.values()+titles for s in ss)
+        discr_size    = max(len(s[2]) for ss in sinputs.values()+soutputs.values()+titles for s in ss)
+        ghosts_size   = max(len(s[3]) for ss in sinputs.values()+soutputs.values()+titles for s in ss)
+        order_size    = max(len(s[4]) for ss in sinputs.values()+soutputs.values()+titles for s in ss)
+        cansplit_size = max(len(s[5]) for ss in sinputs.values()+soutputs.values()+titles for s in ss)
+        tstates_size  = max(len(s[6]) for ss in sinputs.values()+soutputs.values()+titles for s in ss)
 
-        template = u'\n   {:<{name_size}}   {:^{field_size}}     {:^{discr_size}}      {:^{ghosts_size}}      {:^{order_size}}      {:^{tstates_size}}'
+        template = u'\n   {:<{name_size}}   {:^{field_size}}     {:^{discr_size}}      {:^{ghosts_size}}      {:^{order_size}}      {:^{cansplit_size}}      {:^{tstates_size}}'
 
         ss= u'>INPUTS:'
         if sinputs:
@@ -138,13 +141,15 @@ class ComputationalGraph(ComputationalGraphNode):
                 ss+= template.format(*titles[0][0],
                         name_size=name_size, field_size=field_size, 
                         discr_size=discr_size, ghosts_size=ghosts_size,
-                        order_size=order_size, tstates_size=tstates_size)
-                for (opname, fname, discr, ghosts, order, tstates) in sreqs:
+                        order_size=order_size, cansplit_size=cansplit_size,
+                        tstates_size=tstates_size)
+                for (opname, fname, discr, ghosts, order, can_split, tstates) in sreqs:
                     ss+=template.format(
-                            opname, fname, discr, ghosts, order, tstates,
+                            opname, fname, discr, ghosts, order, can_split, tstates,
                             name_size=name_size, field_size=field_size, 
                             discr_size=discr_size, ghosts_size=ghosts_size,
-                            order_size=order_size, tstates_size=tstates_size)
+                            order_size=order_size, cansplit_size=cansplit_size,
+                            tstates_size=tstates_size)
         else:
             ss+=u' None'
         ss+= u'\n>OUTPUTS:'
@@ -157,13 +162,15 @@ class ComputationalGraph(ComputationalGraphNode):
                 ss+= template.format(*titles[0][0],
                         name_size=name_size, field_size=field_size, 
                         discr_size=discr_size, ghosts_size=ghosts_size,
-                        order_size=order_size, tstates_size=tstates_size)
-                for (opname, fname, discr, ghosts, order, tstates) in sreqs:
+                        order_size=order_size, cansplit_size=cansplit_size,
+                        tstates_size=tstates_size)
+                for (opname, fname, discr, ghosts, order, can_split, tstates) in sreqs:
                     ss+=template.format(
-                            opname, fname, discr, ghosts, order, tstates,
+                            opname, fname, discr, ghosts, order, can_split, tstates,
                             name_size=name_size, field_size=field_size, 
                             discr_size=discr_size, ghosts_size=ghosts_size,
-                            order_size=order_size, tstates_size=tstates_size)
+                            order_size=order_size, cansplit_size=cansplit_size,
+                            tstates_size=tstates_size)
         else:
             ss+=u' None'
 
diff --git a/hysop/iterative_method.py b/hysop/iterative_method.py
index 0774703cf7519e0553182bdb0093d5c304d0b38a..5b15040ff9656413408e5e0cf3640b00f792d89d 100644
--- a/hysop/iterative_method.py
+++ b/hysop/iterative_method.py
@@ -63,8 +63,6 @@ class PseudoSimulation(Simulation):
             vprint(msg.format(self.current_iteration, crit))
 
 
-
-
 class IterativeMethod(Problem):
     """Overriding a Problem to enfoce a PseudoSimulation for iterative method loop.
 
@@ -128,3 +126,6 @@ class IterativeMethod(Problem):
             loop.current_iteration, loop.stop_criteria.value))
         self.it_num.value = loop.current_iteration
         loop.finalize()
+
+    def get_preserved_input_fields(self):
+        return set()
diff --git a/hysop/parameters/parameter.py b/hysop/parameters/parameter.py
index 71024f313b43fe52609fb3e7cc7df8ee06e77aaa..85d75f19b92f6a7ad3947c302ac2dba26d74f021 100644
--- a/hysop/parameters/parameter.py
+++ b/hysop/parameters/parameter.py
@@ -126,8 +126,8 @@ class Parameter(TaggedObject, VariableTag):
             value = value._get_value()
         self._set_value_impl(value)
         if not self.quiet:
-            if __DEBUG__ or main_rank == 0:
-                msg='[{}]>Parameter {} set to {}.'.format(
+            if __DEBUG__ or (main_rank == 0):
+                msg='[{}] >Parameter {} set to {}.'.format(
                     main_rank, self.pretty_name, value)
                 vprint(msg)