diff --git a/graphminimize/build.gradle b/graphminimize/build.gradle
index 7b80aed76291c63367b4130fd27ad81bf96a9b28..a96b2cdc43c3cae5c622a5e80da005703375b941 100644
--- a/graphminimize/build.gradle
+++ b/graphminimize/build.gradle
@@ -20,6 +20,7 @@ sourceSets {
 }
 
 dependencies {
+    implementation name: 'java_cup'
     compileOnly name: 'gs-core-2.0'
     compileOnly name: 'gs-algo-2.0'
     compileOnly name: 'gs-ui-swing-2.0'
diff --git a/graphshow/build.gradle b/graphshow/build.gradle
index d784aed8571f9a8a8db3c1e3df216aa32e0f011c..7cfae83b48a64b0591b6e4b947865319d94e9e6a 100644
--- a/graphshow/build.gradle
+++ b/graphshow/build.gradle
@@ -15,6 +15,7 @@ sourceSets {
 }
 
 dependencies {
+    implementation name: 'java_cup'
     implementation name: 'gs-core-2.0'
     implementation name: 'gs-algo-2.0'
     implementation name: 'gs-ui-swing-2.0'
diff --git a/launcher/build.gradle b/launcher/build.gradle
index 1c07d24e9fd6692611802b5dce1a71027bde42ab..5a88f6c61975608980bf64f75d6f1e4cc3931d6d 100644
--- a/launcher/build.gradle
+++ b/launcher/build.gradle
@@ -12,6 +12,7 @@ sourceSets {
 }
 
 dependencies {
+    implementation name: 'java_cup'
     implementation name: 'commons-codec-1.10'
     compileOnly name: 'commons-io-2.5'
     compileOnly name: 'jsoup-1.8.1'
diff --git a/rundse/build.gradle b/rundse/build.gradle
index 3727e528329e539b53e1af9c351d8a361434e711..0b0b7ccd02a70228afd2b945019d99c36f0742f5 100644
--- a/rundse/build.gradle
+++ b/rundse/build.gradle
@@ -10,6 +10,7 @@ sourceSets {
 }
 
 dependencies {
+    implementation name: 'java_cup'
     compileOnly name: 'opencloud'
     compileOnly name: 'JavaPlot'
     compileOnly name: 'derbynet'
diff --git a/simulationcontrol/build.gradle b/simulationcontrol/build.gradle
index 7cafd684afc537f2a1894b935db9ebf06b15da57..a88b8d7f0b151971afdeebde600065d6543d55d7 100644
--- a/simulationcontrol/build.gradle
+++ b/simulationcontrol/build.gradle
@@ -13,6 +13,7 @@ sourceSets {
 }
 
 dependencies {
+    implementation name: 'java_cup'
     implementation name: 'jsoup-1.8.1'
 }
 
diff --git a/src/main/java/avatartranslator/AvatarSyntaxChecker.java b/src/main/java/avatartranslator/AvatarSyntaxChecker.java
index ed5800c4fb3535187e8fa1269e0928bc89d85583..9a79c7c3f0fb2488ad429d3d6f34adb03b8eaef1 100644
--- a/src/main/java/avatartranslator/AvatarSyntaxChecker.java
+++ b/src/main/java/avatartranslator/AvatarSyntaxChecker.java
@@ -47,7 +47,6 @@ import compiler.tmlparser.TokenMgrError;
 import myutil.Conversion;
 import myutil.NameChecker;
 import myutil.TraceManager;
-import avatartranslator.intboolsolver.AvatarIBSParser;
 
 import java.io.StringReader;
 import java.util.ArrayList;
diff --git a/src/main/java/avatartranslator/intboolsolver/AvatarIBSExpressionClass.java b/src/main/java/avatartranslator/intboolsolver/AvatarIBSExpressionClass.java
index 5043706c2db5c36890da6d515fe33862595c9ebe..cb571acc3580c2b770cc55ef42791e39380f3a17 100644
--- a/src/main/java/avatartranslator/intboolsolver/AvatarIBSExpressionClass.java
+++ b/src/main/java/avatartranslator/intboolsolver/AvatarIBSExpressionClass.java
@@ -53,7 +53,7 @@ import myutil.intboolsolver.*;
  * <p> It is provided for documentation together with
  * {@link IBSStdClosedFormulaAttributeClass
  * IBSStdClosedFormulaAttribute} and
- * {@link AvatarIBSParser
+ * {@link AvatarIBSOriginParser
  * IBSStdClosedFormulaSolver}}</p>
  *
  * <p>These three
diff --git a/src/main/java/avatartranslator/intboolsolver/AvatarIBSParser.java b/src/main/java/avatartranslator/intboolsolver/AvatarIBSOriginParser.java
similarity index 96%
rename from src/main/java/avatartranslator/intboolsolver/AvatarIBSParser.java
rename to src/main/java/avatartranslator/intboolsolver/AvatarIBSOriginParser.java
index bb9e19d06e91ac07142379425c8e2306f31c6064..d3c956ad6891deced175f57709543168fdd4bd0b 100644
--- a/src/main/java/avatartranslator/intboolsolver/AvatarIBSParser.java
+++ b/src/main/java/avatartranslator/intboolsolver/AvatarIBSOriginParser.java
@@ -71,16 +71,16 @@ import myutil.intboolsolver.*;
  * @author Sophie Coudert
  */
 
-public class AvatarIBSParser extends IBSOriginParser<
+public class AvatarIBSOriginParser extends IBSOriginParser<
         AvatarSpecification,
         AvatarBlock,
         AvatarStateMachineElement,
         SpecificationState,
         SpecificationBlock> {
-        public AvatarIBSParser() {
+        public AvatarIBSOriginParser() {
                 super(new AvatarIBSAttributeClass(),new AvatarIBSExpressionClass());
         }
-        public AvatarIBSParser(
+        public AvatarIBSOriginParser(
                 IBSAttributeClass<
                         AvatarSpecification,
                         AvatarBlock,
diff --git a/src/main/java/avatartranslator/intboolsolver/AvatarIBSStdParser.java b/src/main/java/avatartranslator/intboolsolver/AvatarIBSStdParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..1444f1b5ac589c9d9222358468367d2ba63b7e30
--- /dev/null
+++ b/src/main/java/avatartranslator/intboolsolver/AvatarIBSStdParser.java
@@ -0,0 +1,102 @@
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ *
+ * ludovic.apvrille AT enst.fr
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+
+package avatartranslator.intboolsolver;
+
+import avatartranslator.AvatarBlock;
+import avatartranslator.AvatarSpecification;
+import avatartranslator.AvatarStateMachineElement;
+import avatartranslator.modelchecker.SpecificationBlock;
+import avatartranslator.modelchecker.SpecificationState;
+import myutil.intboolsolver.*;
+
+/**
+ * class IBSStdClosedFormulaSolver is a complete implementation
+ * and instantiation of {@link IBSOriginParser
+ * IBSolver} for closed Formulas.
+ *
+ * <p> It is provided for documentation together with
+ * {@link IBSStdClosedFormulaAttributeClass
+ * IBSStdClosedFormulaAttributeClass} and
+ * {@link IBSStdClosedFormulaAttributeClass
+ * IBSStdClosedFormulaAttribute}}</p>
+ *
+ * <p>These three
+ * classes provides the same features as
+ * {@link IBSClosedFormulaAttributeClass
+ * IBSClosedFormulaAttribute},
+ * {@link IBSClosedFormulaAttributeClass
+ * IBSClosedFormulaAttributeClass} and
+ * {@link IBSClosedFormulaParser
+ * IBSClosedFormulaSolver} (together).</p>
+ *
+ * Creation: 07/03/2023
+ *
+ * @version 0.1 07/03/2023
+ * @author Sophie Coudert
+ */
+
+public class AvatarIBSStdParser extends IBSStdParser<
+        AvatarSpecification,
+        AvatarBlock,
+        AvatarStateMachineElement,
+        SpecificationState,
+        SpecificationBlock> {
+        public AvatarIBSStdParser() {
+                super();
+                setAttributeClass(new AvatarIBSAttributeClass());
+                setExpressionClass(new AvatarIBSExpressionClass());
+        }
+        public AvatarIBSStdParser(
+                IBSAttributeClass<
+                        AvatarSpecification,
+                        AvatarBlock,
+                        AvatarStateMachineElement,
+                        SpecificationState,
+                        SpecificationBlock> _c,
+                IBSExpressionClass<
+                        AvatarSpecification,
+                        AvatarBlock,
+                        AvatarStateMachineElement,
+                        SpecificationState,
+                        SpecificationBlock> _e) {
+                super();
+                setAttributeClass(_c);
+                setExpressionClass(_e);
+        }
+}
\ No newline at end of file
diff --git a/src/main/java/avatartranslator/intboolsolver/AvatarIBSolver.java b/src/main/java/avatartranslator/intboolsolver/AvatarIBSolver.java
index 44df3cfb769090270243b43bd3ba2e12e444da33..a1742b1aef58fa7449df11d3b48a1ad52433c5c6 100644
--- a/src/main/java/avatartranslator/intboolsolver/AvatarIBSolver.java
+++ b/src/main/java/avatartranslator/intboolsolver/AvatarIBSolver.java
@@ -4,5 +4,5 @@ public class AvatarIBSolver {
     public static AvatarIBSAttributeClass attrC = new AvatarIBSAttributeClass();
     protected static AvatarIBSExpressionClass exprC = new AvatarIBSExpressionClass();
 
-    public static AvatarIBSParser parser = new AvatarIBSParser(attrC,exprC);
+    public static AvatarIBSStdParser parser = new AvatarIBSStdParser(attrC,exprC);
 }
diff --git a/src/main/java/myutil/intboolsolver/IBSStdLexer.java b/src/main/java/myutil/intboolsolver/IBSStdLexer.java
index deb1a1084090df47f74f4fc4a3048fda8b12a92f..214a412818f2141b368e3b8d98471cb4e21eceec 100644
--- a/src/main/java/myutil/intboolsolver/IBSStdLexer.java
+++ b/src/main/java/myutil/intboolsolver/IBSStdLexer.java
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.4.3 on 05/04/2023 14:20 */
+/* The following code was generated by JFlex 1.4.3 on 05/04/2023 15:54 */
 
 package myutil.intboolsolver;
 import java_cup.runtime.*;
@@ -8,7 +8,7 @@ import java.util.HashSet;
 /**
  * This class is a scanner generated by 
  * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
- * on 05/04/2023 14:20 from the specification file
+ * on 05/04/2023 15:54 from the specification file
  * <tt>IBSStdLexer.jflex</tt>
  */
 class IBSStdLexer< Spec extends IBSParamSpec, Comp extends IBSParamComp, State extends IBSParamState, SpecState extends IBSParamSpecState, CompState extends IBSParamCompState > implements java_cup.runtime.Scanner {
@@ -251,24 +251,24 @@ class IBSStdLexer< Spec extends IBSParamSpec, Comp extends IBSParamComp, State e
   private boolean zzEOFDone;
 
   /* user code: */
-private IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> attrC;
+private IBSAttributeClass<Spec,Comp,State,SpecState,CompState> attrC;
 private IBSExpressionClass<Spec,Comp,State,SpecState,CompState> exprC;
 private final HashSet<String> badIdents = new HashSet<String>();
 
 public IBSStdLexer(){}
-public void setAttributeClass( IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> _attrC) { attrC = _attrC; }
-public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass() { return attrC; }
+public void setAttributeClass( IBSAttributeClass<Spec,Comp,State,SpecState,CompState> _attrC) { attrC = _attrC; }
+public IBSAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass() { return attrC; }
 public void setExpressionClass( IBSExpressionClass<Spec,Comp,State,SpecState,CompState> _exprC) { exprC = _exprC; }
 public IBSExpressionClass<Spec,Comp,State,SpecState,CompState> getExpressionClass() { return exprC; }
 public HashSet<String> getBadIdents() { return badIdents; }
 public void clearBadIdents() { badIdents.clear(); }
 
 private abstract class AttrHandler {
-    public abstract IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s) throws Exception;
+    public abstract IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s) throws Exception;
 }
 private class ClosedAttrHandler extends AttrHandler {
     ClosedAttrHandler(){};
-    public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s)
+    public IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s)
        throws Exception {
         badIdents.add(_s); throw new Exception ("Ident in closed expression: " +  _s);
     }
@@ -276,14 +276,14 @@ private class ClosedAttrHandler extends AttrHandler {
 private class SpecAttrHandler extends AttrHandler {
     private Spec spec;
     SpecAttrHandler(Spec _spec){ spec = _spec; }
-    public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s){
+    public IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s){
         return attrC.getTypedAttribute(spec,_s);
     }
 }
 private class CompAttrHandler extends AttrHandler {
     private Comp comp;
     CompAttrHandler(Comp _comp){ comp = _comp; }
-    public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s){
+    public IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s){
         return attrC.getTypedAttribute(comp,_s);
     }
 }
@@ -614,86 +614,86 @@ public void init(Comp _comp, String _s) throws java.io.IOException { attrHandler
           { return new Symbol(IBSStdParserSym.LT);
           }
         case 26: break;
+        case 3: 
+          { IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute attr =
+                      attrHandler.getTypedAttribute(yytext());
+                  switch(attr.getType()) {
+                      case IBSAttributeClass.NullAttr : badIdents.add(yytext()); throw new Exception ("Bad Ident : " +  yytext());
+                      case IBSAttributeClass.BoolConst : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(attr.getConstant()!=0)));
+                      case IBSAttributeClass.IntConst : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iConst(attr.getConstant())));
+                      case IBSAttributeClass.BoolAttr : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bVar(attr.getAttribute())));
+                      case IBSAttributeClass.IntAttr : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iVar(attr.getAttribute())));
+                      default : throw new Error ("Lexer, BUG : bad attribute type");
+                  }
+          }
+        case 27: break;
         case 19: 
           { return new Symbol(IBSStdParserSym.GEQ);
           }
-        case 27: break;
+        case 28: break;
         case 8: 
           { return new Symbol(IBSStdParserSym.MOD);
           }
-        case 28: break;
+        case 29: break;
         case 11: 
           { return new Symbol(IBSStdParserSym.GT);
           }
-        case 29: break;
+        case 30: break;
         case 18: 
           { return new Symbol(IBSStdParserSym.LEQ);
           }
-        case 30: break;
+        case 31: break;
         case 17: 
           { return new Symbol(IBSStdParserSym.EQ);
           }
-        case 31: break;
+        case 32: break;
         case 14: 
           { return new Symbol(IBSStdParserSym.OR);
           }
-        case 32: break;
+        case 33: break;
         case 4: 
           { return new Symbol(IBSStdParserSym.PLUS);
           }
-        case 33: break;
+        case 34: break;
         case 21: 
           { return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(false)));
           }
-        case 34: break;
+        case 35: break;
         case 13: 
           { return new Symbol(IBSStdParserSym.RPAR);
           }
-        case 35: break;
+        case 36: break;
         case 5: 
           { return new Symbol(IBSStdParserSym.MINUS);
           }
-        case 36: break;
+        case 37: break;
         case 22: 
           { yybegin(INTBOOL); return new Symbol(IBSStdParserSym.PARSE_BOOL);
           }
-        case 37: break;
+        case 38: break;
         case 15: 
           { return new Symbol(IBSStdParserSym.AND);
           }
-        case 38: break;
+        case 39: break;
         case 9: 
           { return new Symbol(IBSStdParserSym.NOT);
           }
-        case 39: break;
+        case 40: break;
         case 7: 
           { return new Symbol(IBSStdParserSym.DIV);
           }
-        case 40: break;
+        case 41: break;
         case 6: 
           { return new Symbol(IBSStdParserSym.MULT);
           }
-        case 41: break;
+        case 42: break;
         case 12: 
           { return new Symbol(IBSStdParserSym.LPAR);
           }
-        case 42: break;
+        case 43: break;
         case 20: 
           { return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(true)));
           }
-        case 43: break;
-        case 3: 
-          { IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute attr =
-                      attrHandler.getTypedAttribute(yytext());
-                  switch(attr.getType()) {
-                      case IBSStdAttributeClass.NullAttr : badIdents.add(yytext()); throw new Exception ("Bad Ident : " +  yytext());
-                      case IBSStdAttributeClass.BoolConst : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(attr.getConstant()!=0)));
-                      case IBSStdAttributeClass.IntConst : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iConst(attr.getConstant())));
-                      case IBSStdAttributeClass.BoolAttr : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bVar(attr.getAttribute())));
-                      case IBSStdAttributeClass.IntAttr : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iVar(attr.getAttribute())));
-                      default : throw new Error ("Lexer, BUG : bad attribute type");
-                  }
-          }
         case 44: break;
         case 2: 
           { try { return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iConst(Integer.parseInt(yytext()))));}
diff --git a/src/main/java/myutil/intboolsolver/IBSStdParser.java b/src/main/java/myutil/intboolsolver/IBSStdParser.java
index 87234659b02e15f5f9879680c71790eb1ee583f4..5431c49dfe3edd04dec172a47ed4e2fec52e4308 100644
--- a/src/main/java/myutil/intboolsolver/IBSStdParser.java
+++ b/src/main/java/myutil/intboolsolver/IBSStdParser.java
@@ -216,9 +216,9 @@ public class IBSStdParser< Spec extends IBSParamSpec, Comp extends IBSParamComp,
     
     public void setLexer(IBSStdLexer<Spec,Comp,State,SpecState,CompState> _lexer){ lexer=_lexer; setScanner(_lexer); }
 
-    public void setAttributeClass(IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> _c){ lexer.setAttributeClass(_c); }
+    public void setAttributeClass(IBSAttributeClass<Spec,Comp,State,SpecState,CompState> _c){ lexer.setAttributeClass(_c); }
 
-    public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass(){ return lexer.getAttributeClass(); }
+    public IBSAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass(){ return lexer.getAttributeClass(); }
 
     public void setExpressionClass(IBSExpressionClass<Spec,Comp,State,SpecState,CompState> _c){ lexer.setExpressionClass(_c); }
 
@@ -296,6 +296,77 @@ public class IBSStdParser< Spec extends IBSParamSpec, Comp extends IBSParamComp,
         return null;
     }
 
+    // A DEPLACER ...
+
+    public int indexOfVariable(String expr, String variable) {
+        int index;
+        String tmp = expr;
+        int removed = 0;
+        //System.out.println("\nHandling expr: " + expr);
+
+        while ((index = tmp.indexOf(variable)) > -1) {
+            char c1, c2;
+            if (index > 0) {
+                c1 = tmp.charAt(index - 1);
+            } else {
+                c1 = ' ';
+            }
+
+            if (index + variable.length() < tmp.length())
+                c2 = tmp.charAt(index + variable.length());
+            else
+                c2 = ' ';
+
+            //System.out.println("tmp=" + tmp + " c1=" + c1 + " c2=" + c2);
+
+            if (!(Character.isLetterOrDigit(c1) || (c1 == '_'))) {
+                if (!(Character.isLetterOrDigit(c2) || (c2 == '_'))) {
+                    //System.out.println("Found at index=" + index + " returnedIndex=" + (index+removed));
+                    return index + removed;
+                }
+            }
+            tmp = tmp.substring(index + variable.length(), tmp.length());
+            //System.out.println("tmp=" + tmp);
+            removed = index + variable.length();
+            if (tmp.length() == 0) {
+                return -1;
+            }
+            // We cut until we find a non alphanumerical character
+            while (Character.isLetterOrDigit(tmp.charAt(0)) || (tmp.charAt(0) == '_')) {
+                tmp = tmp.substring(1, tmp.length());
+                if (tmp.length() == 0) {
+                    return -1;
+                }
+                removed++;
+            }
+            //System.out.println("after remove: tmp=" + tmp);
+
+        }
+        return -1;
+    }
+
+
+    public String replaceVariable(String expr, String oldVariable, String newVariable) {
+        if (oldVariable.compareTo(newVariable) == 0) {
+            return expr;
+        }
+        int index;
+        String tmp = expr;
+
+        while ((index = indexOfVariable(tmp, oldVariable)) > -1) {
+            String tmp1 = "";
+            if (index > 0) {
+                tmp1 = tmp.substring(0, index);
+            }
+            tmp1 += newVariable;
+            tmp1 += tmp.substring(index + oldVariable.length(), tmp.length());
+            tmp = tmp1;
+        }
+
+        return tmp;
+    }
+
+
 
 /** Cup generated class to encapsulate user supplied action code.*/
 class CUP$IBSStdParser$actions {
diff --git a/src/main/java/myutil/intboolsolver/javacup/IBSStdLexer.jflex b/src/main/java/myutil/intboolsolver/javacup/IBSStdLexer.jflex
index 119873a5eb93556e389ae5b676c4f2c717431b25..e7211054b1a179543c182489279ad6d0bed8d46b 100644
--- a/src/main/java/myutil/intboolsolver/javacup/IBSStdLexer.jflex
+++ b/src/main/java/myutil/intboolsolver/javacup/IBSStdLexer.jflex
@@ -14,24 +14,24 @@ import java.util.HashSet;
 %yylexthrow Exception
 
 %{
-private IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> attrC;
+private IBSAttributeClass<Spec,Comp,State,SpecState,CompState> attrC;
 private IBSExpressionClass<Spec,Comp,State,SpecState,CompState> exprC;
 private final HashSet<String> badIdents = new HashSet<String>();
 
 public IBSStdLexer(){}
-public void setAttributeClass( IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> _attrC) { attrC = _attrC; }
-public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass() { return attrC; }
+public void setAttributeClass( IBSAttributeClass<Spec,Comp,State,SpecState,CompState> _attrC) { attrC = _attrC; }
+public IBSAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass() { return attrC; }
 public void setExpressionClass( IBSExpressionClass<Spec,Comp,State,SpecState,CompState> _exprC) { exprC = _exprC; }
 public IBSExpressionClass<Spec,Comp,State,SpecState,CompState> getExpressionClass() { return exprC; }
 public HashSet<String> getBadIdents() { return badIdents; }
 public void clearBadIdents() { badIdents.clear(); }
 
 private abstract class AttrHandler {
-    public abstract IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s) throws Exception;
+    public abstract IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s) throws Exception;
 }
 private class ClosedAttrHandler extends AttrHandler {
     ClosedAttrHandler(){};
-    public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s)
+    public IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s)
        throws Exception {
         badIdents.add(_s); throw new Exception ("Ident in closed expression: " +  _s);
     }
@@ -39,14 +39,14 @@ private class ClosedAttrHandler extends AttrHandler {
 private class SpecAttrHandler extends AttrHandler {
     private Spec spec;
     SpecAttrHandler(Spec _spec){ spec = _spec; }
-    public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s){
+    public IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s){
         return attrC.getTypedAttribute(spec,_s);
     }
 }
 private class CompAttrHandler extends AttrHandler {
     private Comp comp;
     CompAttrHandler(Comp _comp){ comp = _comp; }
-    public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s){
+    public IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s){
         return attrC.getTypedAttribute(comp,_s);
     }
 }
@@ -93,14 +93,14 @@ Identifier = [a-zA-Z_][a-zA-Z0-9_\.]*
  ">="           { return new Symbol(IBSStdParserSym.GEQ); }
  "("            { return new Symbol(IBSStdParserSym.LPAR); }
  ")"            { return new Symbol(IBSStdParserSym.RPAR); }
- {Identifier}   { IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute attr =
+ {Identifier}   { IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute attr =
                       attrHandler.getTypedAttribute(yytext());
                   switch(attr.getType()) {
-                      case IBSStdAttributeClass.NullAttr : badIdents.add(yytext()); throw new Exception ("Bad Ident : " +  yytext());
-                      case IBSStdAttributeClass.BoolConst : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(attr.getConstant()!=0)));
-                      case IBSStdAttributeClass.IntConst : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iConst(attr.getConstant())));
-                      case IBSStdAttributeClass.BoolAttr : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bVar(attr.getAttribute())));
-                      case IBSStdAttributeClass.IntAttr : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iVar(attr.getAttribute())));
+                      case IBSAttributeClass.NullAttr : badIdents.add(yytext()); throw new Exception ("Bad Ident : " +  yytext());
+                      case IBSAttributeClass.BoolConst : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(attr.getConstant()!=0)));
+                      case IBSAttributeClass.IntConst : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iConst(attr.getConstant())));
+                      case IBSAttributeClass.BoolAttr : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bVar(attr.getAttribute())));
+                      case IBSAttributeClass.IntAttr : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iVar(attr.getAttribute())));
                       default : throw new Error ("Lexer, BUG : bad attribute type");
                   }
                 }
diff --git a/src/main/java/myutil/intboolsolver/javacup/IBSStdParser.jcup b/src/main/java/myutil/intboolsolver/javacup/IBSStdParser.jcup
index 9c994c47e0f17c118e8a2a7e28aa6f6098a88dad..57896f8647766b2674fc4d85c13f83d547bfdc58 100644
--- a/src/main/java/myutil/intboolsolver/javacup/IBSStdParser.jcup
+++ b/src/main/java/myutil/intboolsolver/javacup/IBSStdParser.jcup
@@ -15,9 +15,9 @@ parser code {:
     
     public void setLexer(IBSStdLexer<Spec,Comp,State,SpecState,CompState> _lexer){ lexer=_lexer; setScanner(_lexer); }
 
-    public void setAttributeClass(IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> _c){ lexer.setAttributeClass(_c); }
+    public void setAttributeClass(IBSAttributeClass<Spec,Comp,State,SpecState,CompState> _c){ lexer.setAttributeClass(_c); }
 
-    public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass(){ return lexer.getAttributeClass(); }
+    public IBSAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass(){ return lexer.getAttributeClass(); }
 
     public void setExpressionClass(IBSExpressionClass<Spec,Comp,State,SpecState,CompState> _c){ lexer.setExpressionClass(_c); }
 
@@ -94,6 +94,77 @@ parser code {:
         // if (index==-1) syntaxError=true; else syntaxError=false;
         return null;
     }
+
+    // A DEPLACER ...
+
+    public int indexOfVariable(String expr, String variable) {
+        int index;
+        String tmp = expr;
+        int removed = 0;
+        //System.out.println("\nHandling expr: " + expr);
+
+        while ((index = tmp.indexOf(variable)) > -1) {
+            char c1, c2;
+            if (index > 0) {
+                c1 = tmp.charAt(index - 1);
+            } else {
+                c1 = ' ';
+            }
+
+            if (index + variable.length() < tmp.length())
+                c2 = tmp.charAt(index + variable.length());
+            else
+                c2 = ' ';
+
+            //System.out.println("tmp=" + tmp + " c1=" + c1 + " c2=" + c2);
+
+            if (!(Character.isLetterOrDigit(c1) || (c1 == '_'))) {
+                if (!(Character.isLetterOrDigit(c2) || (c2 == '_'))) {
+                    //System.out.println("Found at index=" + index + " returnedIndex=" + (index+removed));
+                    return index + removed;
+                }
+            }
+            tmp = tmp.substring(index + variable.length(), tmp.length());
+            //System.out.println("tmp=" + tmp);
+            removed = index + variable.length();
+            if (tmp.length() == 0) {
+                return -1;
+            }
+            // We cut until we find a non alphanumerical character
+            while (Character.isLetterOrDigit(tmp.charAt(0)) || (tmp.charAt(0) == '_')) {
+                tmp = tmp.substring(1, tmp.length());
+                if (tmp.length() == 0) {
+                    return -1;
+                }
+                removed++;
+            }
+            //System.out.println("after remove: tmp=" + tmp);
+
+        }
+        return -1;
+    }
+
+
+    public String replaceVariable(String expr, String oldVariable, String newVariable) {
+        if (oldVariable.compareTo(newVariable) == 0) {
+            return expr;
+        }
+        int index;
+        String tmp = expr;
+
+        while ((index = indexOfVariable(tmp, oldVariable)) > -1) {
+            String tmp1 = "";
+            if (index > 0) {
+                tmp1 = tmp.substring(0, index);
+            }
+            tmp1 += newVariable;
+            tmp1 += tmp.substring(index + oldVariable.length(), tmp.length());
+            tmp = tmp1;
+        }
+
+        return tmp;
+    }
+
 :}
 
 
diff --git a/src/main/java/myutil/intboolsolver/javacup/test.tgz b/src/main/java/myutil/intboolsolver/javacup/test.tgz
deleted file mode 100644
index 3af7ff39682d0d9e7298327feafd63bfb2ba99ed..0000000000000000000000000000000000000000
Binary files a/src/main/java/myutil/intboolsolver/javacup/test.tgz and /dev/null differ
diff --git a/tiftranslator/build.gradle b/tiftranslator/build.gradle
index ba45b1d91d7ecdfcbaeb36982ab7501e4f67e6a7..36c342267821e90ade9b3cc66116e21eb86b5f33 100644
--- a/tiftranslator/build.gradle
+++ b/tiftranslator/build.gradle
@@ -17,6 +17,7 @@ sourceSets {
 }
 
 dependencies {
+    implementation name: 'java_cup'
     compileOnly name: 'commons-io-2.5'
     compileOnly name: 'jsoup-1.8.1'
     compileOnly name: 'commons-codec-1.10'
diff --git a/tmltranslator/build.gradle b/tmltranslator/build.gradle
index 91195ae974eecb01fbddf1b88f64750d3cc026e3..61d653a683d8fed1ba67b39f7ea01b0232f8379e 100644
--- a/tmltranslator/build.gradle
+++ b/tmltranslator/build.gradle
@@ -10,6 +10,7 @@ sourceSets {
 }
 
 dependencies {
+    implementation name: 'java_cup'
     compileOnly name: 'opencloud'
     compileOnly name: 'JavaPlot'
     compileOnly name: 'derbynet'
diff --git a/ttool-cli/build.gradle b/ttool-cli/build.gradle
index a5e309691bf8e75f697094bc3581c4cdcbdcaa48..681b99068fac81ce500999966b9e7f3cc6935188 100644
--- a/ttool-cli/build.gradle
+++ b/ttool-cli/build.gradle
@@ -19,6 +19,7 @@ sourceSets {
 }
 
 dependencies {
+    implementation name: 'java_cup'
     implementation name: 'opencloud'
     implementation name: 'JavaPlot'
     implementation name: 'derbynet'
diff --git a/ttool/src/test/java/avatartranslator/AvatarIBSParserTest.java b/ttool/src/test/java/avatartranslator/AvatarIBSOriginParserTest.java
similarity index 98%
rename from ttool/src/test/java/avatartranslator/AvatarIBSParserTest.java
rename to ttool/src/test/java/avatartranslator/AvatarIBSOriginParserTest.java
index 98f149e71ffcd70c6477b35ebd06fe2b1b3b697d..68af7a033fa9d8ae3d16dcab84de72a2e065fa38 100644
--- a/ttool/src/test/java/avatartranslator/AvatarIBSParserTest.java
+++ b/ttool/src/test/java/avatartranslator/AvatarIBSOriginParserTest.java
@@ -44,7 +44,7 @@
  */
 package avatartranslator;
 import avatartranslator.intboolsolver.AvatarIBSExpressionClass;
-import avatartranslator.intboolsolver.AvatarIBSParser;
+import avatartranslator.intboolsolver.AvatarIBSOriginParser;
 import avatartranslator.intboolsolver.AvatarIBSAttributeClass;
 import avatartranslator.modelchecker.SpecificationBlock;
 import avatartranslator.modelchecker.SpecificationState;
@@ -56,15 +56,15 @@ import java.util.ArrayList;
 
 import static org.junit.Assert.*;
 
-public class AvatarIBSParserTest {
+public class AvatarIBSOriginParserTest {
 
     private AvatarSpecification as;
     private AvatarBlock block1, block2;
     private AvatarIBSAttributeClass attC = new AvatarIBSAttributeClass();
     private AvatarIBSExpressionClass expr = new AvatarIBSExpressionClass();
 
-    private AvatarIBSParser parser = new AvatarIBSParser(attC,expr);
-    public AvatarIBSParserTest() {
+    private AvatarIBSOriginParser parser = new AvatarIBSOriginParser(attC,expr);
+    public AvatarIBSOriginParserTest() {
     }
     
     @Before
diff --git a/webcrawler/client/build.gradle b/webcrawler/client/build.gradle
index c8b3d8c5b54e5ef30f2dccbb9f1f958fa53f41e2..389fdee413964edec22aa6832fb619ce6a7a9e97 100644
--- a/webcrawler/client/build.gradle
+++ b/webcrawler/client/build.gradle
@@ -12,6 +12,7 @@ sourceSets {
 }
 
 dependencies {
+    implementation name: 'java_cup'
     compileOnly name: 'commons-codec-1.10'
     compileOnly name: 'jsoup-1.8.1'
     compileOnly name: 'commons-io-2.5'
diff --git a/webcrawler/server/build.gradle b/webcrawler/server/build.gradle
index 9ee6566d14d869982cf53216c17769eb7260199a..98cf4fc26e55d10791aafcc003e170ede4285f2f 100644
--- a/webcrawler/server/build.gradle
+++ b/webcrawler/server/build.gradle
@@ -12,6 +12,7 @@ sourceSets {
 }
 
 dependencies {
+    implementation name: 'java_cup'
     compileOnly name: 'commons-codec-1.10'
     compileOnly name: 'jsoup-1.8.1'
     implementation name: 'commons-io-2.5'