diff --git a/robotlab_safety/pluto_auto.py b/robotlab_safety/pluto_auto.py
index 8625d437b8edcf94adcda1c316594f154b19442c..8c553d48a9b0bc5f248e988f611cb3d056a314c5 100755
--- a/robotlab_safety/pluto_auto.py
+++ b/robotlab_safety/pluto_auto.py
@@ -16,8 +16,8 @@ class PlutoVariables:
         self.by_name[name] = (int(pluto), int(index))
         pass
 
-    def codegen(self, expr):
-        m = re.match('([^=]+)=(AND|OR)\{(.*),(.*)\}', expr)
+    def codegen(self, auto, current):
+        m = re.match('([^=]+)=(AND|OR)\{(.*),(.*)\}', auto)
         if m:
             lh = m.group(1)
             op = m.group(2)
@@ -37,7 +37,17 @@ class PlutoVariables:
                 return("%s=%s" % (lh, '*'.join(rh)))
             elif op == 'OR':
                 return("%s=%s" % (lh, '+'.join(rh)))
-        raise Exception('Invalid expression', expr)
+            pass
+        m = re.match('([^=]+)=(.*)', auto)
+        if m:
+            regexp = '^(' + m.group(1).replace('*', '.*') + ')='
+            expr = '{0}=' + m.group(2)
+            lh_m = re.match(regexp, current)
+            if lh_m:
+                matches = lh_m.groups()
+                return expr.format(*matches)
+            pass
+        raise Exception('Invalid expression', auto)
 
 class SPS:
 
@@ -62,7 +72,7 @@ class SPS:
             result.append(l)
             m = re.match(';\s*AUTO:\s*(.*)', l)
             if m:
-                code = self.gm.codegen(m.group(1))
+                code = self.gm.codegen(m.group(1), current=result[-2])
                 if code != result[-2]:
                     result[-2] = code
                     pass