diff --git a/hysop/core/graph/graph_builder.py b/hysop/core/graph/graph_builder.py
index 238d4eefd472fbfa5eb80cc919d7a68c2b9772d4..fb7eaff3a61ca4fac341b3e556691f80439839a0 100644
--- a/hysop/core/graph/graph_builder.py
+++ b/hysop/core/graph/graph_builder.py
@@ -564,9 +564,6 @@ class GraphBuilder(object):
         operators     = reduced_graph.vertex_properties['operators']
         nodes = [ operators[reduced_graph.vertex(vid)] for vid in self.sorted_nodes ]
         return nodes
-        import sys
-        sys.exit(1)
-
         
     def build_subgraph(self, node, current_level, **kwds):
         node_ops = []
diff --git a/hysop/operator/base/custom_symbolic_operator.py b/hysop/operator/base/custom_symbolic_operator.py
index 131b4da7966a0c111aeafece7639577045596bc2..e287b978c70b3e3c984d132717fe503077bd4b62 100644
--- a/hysop/operator/base/custom_symbolic_operator.py
+++ b/hysop/operator/base/custom_symbolic_operator.py
@@ -496,7 +496,7 @@ class SymbolicExpressionParser(object):
                 else:
                     array = lhs
             elif isinstance(lhs, sm.Derivative):
-                _vars = lhs.args[1:]
+                _vars = tuple(v[0] for v in lhs.args[1:] for _ in xrange(v[1]))
                 _t    = time_symbol
                 unique_vars = set(_vars)
                 if isinstance(lhs.args[0], AppliedSymbolicField):
@@ -855,7 +855,7 @@ class SymbolicExpressionParser(object):
                                                                 field=field, _register=False)}
         elif isinstance(expr, sm.Derivative):
             dexpr = expr.args[0]
-            dvars = expr.args[1:]
+            dvars = tuple(v[0] for v in expr.args[1:] for _ in xrange(v[1]))
             unique_dvars = set(dvars)
             invalid_dvars = (unique_dvars - set(space_symbols) - set([time_symbol]))
             if invalid_dvars:
@@ -902,7 +902,8 @@ class SymbolicExpressionParser(object):
         elif isinstance(expr, Assignment):
             lhs, rhs = expr.args
             if isinstance(lhs, sm.Derivative):
-                assert lhs.args[1] == time_symbol
+                assert lhs.args[1][0] == time_symbol
+                assert lhs.args[1][1] == 1
                 assert len(lhs.args)==2
                 lhs = lhs.args[0]
             freqs = cls._extract_obj_requirements(info, rhs)
@@ -960,7 +961,8 @@ class SymbolicExpressionParser(object):
             func = expr.func
         elif isinstance(lhs, sm.Derivative):
             assert isinstance(lhs.args[0], AppliedSymbolicField)
-            assert lhs.args[1] == time_symbol
+            assert lhs.args[1][0] == time_symbol
+            assert lhs.args[1][1] == 1
             assert len(lhs.args)==2
             lhs = lhs.args[0]
             assert expr.func is Assignment
@@ -1023,7 +1025,7 @@ class SymbolicExpressionParser(object):
             return dfield.s[index], di
         elif isinstance(expr, sm.Derivative):
             dexpr = expr.args[0]
-            dvars = expr.args[1:]
+            dvars = tuple(v[0] for v in expr.args[1:] for _ in xrange(v[1]))
             unique_dvars = set(dvars)
             invalid_dvars = (unique_dvars - set(space_symbols))
             direction = info.direction
diff --git a/hysop/operator/directional/symbolic_dir.py b/hysop/operator/directional/symbolic_dir.py
index 1a8a85ab6f06579138d7c5df02bb3cc8e02c916e..73d0193925d786155ef20d6fa321cf89418b7dd6 100644
--- a/hysop/operator/directional/symbolic_dir.py
+++ b/hysop/operator/directional/symbolic_dir.py
@@ -120,8 +120,10 @@ class DirectionalSymbolic(DirectionalOperatorFrontend):
         else:
             directional_exprs = {}
             for e, fixed_res, forced_res in zip(exprs, fixed_residue, force_residue):
+                print 'SPLITTING EXPR:', e
                 se = split_assignement(e, fixed_res, forced_res, None)
                 for (k,v) in se.iteritems():
+                    print 'DIR={}, EXPR={}'.format(k,v)
                     if (v==0):
                         continue
                     if (k in directional_exprs):
diff --git a/hysop/symbolic/directional.py b/hysop/symbolic/directional.py
index 924b5ae55e6f7f54ef2d05c509744ae74ec5ae1d..7ce51e8bbe0afa0b355d35cae40db5d56a1a68cc 100644
--- a/hysop/symbolic/directional.py
+++ b/hysop/symbolic/directional.py
@@ -17,8 +17,11 @@ def collect_direction(expr, var):
         args = ()
         if isinstance(expr, sm.Symbol):
             return expr
-        elif isinstance(expr, sm.Derivative) and set(expr.args[1:]) != set((var,)):
-            return 0
+        elif isinstance(expr, sm.Derivative):
+            if (set(a[0] for a in expr.args[1:] if a[1]>=1) != set((var,))):
+                return 0
+            else:
+                return expr
         elif isinstance(expr, (sm.Number, int, float)):
             return expr
         elif isinstance(expr, sm.Expr):
@@ -36,6 +39,7 @@ def split(F, fixed_residue, force_residue, coords):
     if isinstance(F, Assignment):
         msg='Expression cannot be of type Assignment: {}'.format(F)
         raise TypeError(msg)
+    print 'SPLIT {} with FIXED_RESIDUE={} and FORCE_RESIDUE={}'.format(F, fixed_residue, force_residue)
     res = {}
     coords = first_not_None(coords, space_symbols)
     for i, xi in enumerate(coords):