diff --git a/src/main/java/avatartranslator/intboolsolver/AvatarIBSAttributeClass.java b/src/main/java/avatartranslator/intboolsolver/AvatarIBSAttributeClass.java
index 761e7975e50b541c10b38cf67ed817f918737fb4..a58bf3ae32a311187e5a9ba5d9120a6c86675e46 100644
--- a/src/main/java/avatartranslator/intboolsolver/AvatarIBSAttributeClass.java
+++ b/src/main/java/avatartranslator/intboolsolver/AvatarIBSAttributeClass.java
@@ -100,6 +100,12 @@ public class AvatarIBSAttributeClass extends IBSStdAttributeClass<
         attributesMap.put((AvatarElement) _state, _att);
     }
     protected Attribute getAttribute() {return new Attribute();}
+    //@Override
+    public String getStateName(AvatarBlock _comp, AvatarStateMachineElement _state)
+    {
+        return _state.getName();
+    }
+
     public static AvatarElement getElement(String s, AvatarSpecification spec) {
         //Extract Block and Attribute
         String[] splitS;
@@ -331,12 +337,6 @@ public class AvatarIBSAttributeClass extends IBSStdAttributeClass<
             }
         }
 
-
-
-        public String getStateName(AvatarBlock _comp, AvatarStateMachineElement _state){
-            return (_state).getName();
-        }
-
         public int getValue(SpecificationState _ss) {
             int value;
 
diff --git a/src/main/java/avatartranslator/modelchecker/SafetyProperty.java b/src/main/java/avatartranslator/modelchecker/SafetyProperty.java
index 0c3dff51994d15b7def78519ba4cded767e5f9ae..1a3a33bb960ef3ecbc52f00180f21aaf2168023e 100644
--- a/src/main/java/avatartranslator/modelchecker/SafetyProperty.java
+++ b/src/main/java/avatartranslator/modelchecker/SafetyProperty.java
@@ -39,6 +39,8 @@
 package avatartranslator.modelchecker;
 
 import avatartranslator.*;
+import avatartranslator.intboolsolver.*;
+import myutil.intboolsolver.*;
 import myutil.TraceManager;
 
 
@@ -54,9 +56,9 @@ public class SafetyProperty  {
     private String rawProperty;
     private String refProperty;
     private int errorOnProperty;
-    private AvatarExpressionSolver safetySolver;
-    private AvatarExpressionSolver safetySolverLead;
-    private SpecificationPropertyPhase phase;
+    private AvatarIBSExpressionClass.BExpr safetySolver;
+    private AvatarIBSExpressionClass.BExpr safetySolverLead;
+   private SpecificationPropertyPhase phase;
     private AvatarStateMachineElement state;
     
     // Error on property
@@ -102,9 +104,10 @@ public class SafetyProperty  {
     
     public SafetyProperty(AvatarBlock block, AvatarStateMachineElement state, int _safetyType) {
         //create liveness safety
-        AvatarExpressionAttribute attribute = new AvatarExpressionAttribute(block, state);
-        safetySolver = new AvatarExpressionSolver();
-        safetySolver.buildExpression(attribute);
+        AvatarIBSAttributeClass.Attribute attribute =
+                (AvatarIBSAttributeClass.Attribute)AvatarIBSolver.attrC.getTypedAttribute(block, state).getAttribute();
+        safetySolver = (AvatarIBSExpressionClass.BExpr) AvatarIBSolver.parser.makeBool(attribute);
+
         propertyType = BLOCK_STATE;
         safetyType = _safetyType;
         result = true;
@@ -161,7 +164,8 @@ public class SafetyProperty  {
  
     
     public void initLead() {
-        AvatarExpressionSolver tmp;
+        AvatarIBSExpressionClass.BExpr tmp;
+
         int type;
         tmp = safetySolver;
         safetySolver = safetySolverLead;
@@ -175,7 +179,7 @@ public class SafetyProperty  {
     
     public void restoreLead() {
         //to be used only after initLead()
-        AvatarExpressionSolver tmp;
+        AvatarIBSExpressionClass.BExpr tmp;
         int type;
         tmp = safetySolver;
         safetySolver = safetySolverLead;
@@ -208,20 +212,18 @@ public class SafetyProperty  {
     
     
     public boolean getSolverResult(SpecificationState _ss) {
-        return safetySolver.getResult(_ss) != 0;
+        return safetySolver.eval(_ss);
     }
     
     
     public boolean getSolverResult(SpecificationState _ss, AvatarStateMachineElement _asme) {
-        return safetySolver.getResult(_ss, _asme) != 0;
+       return safetySolver.eval(_ss, _asme);
     }
-    
-    
+
     public boolean getSolverLeadResult(SpecificationState _ss, AvatarStateMachineElement _asme) {
-        return safetySolverLead.getResult(_ss, _asme) != 0;
+        return safetySolverLead.eval(_ss, _asme);
     }
-    
-    
+
     public SpecificationPropertyPhase getPhase() {
         return phase;
     }
@@ -234,13 +236,11 @@ public class SafetyProperty  {
             phase = SpecificationPropertyPhase.NONSATISFIED;
         }
     }
-    
-    
+
     public AvatarStateMachineElement getState() {
         return state;
     }
-    
-    
+
     public void linkSolverStates() {
         //linking to states so that normal bool elaborations are possible
         if (safetySolver != null) {
@@ -250,8 +250,7 @@ public class SafetyProperty  {
             safetySolverLead.linkStates();
         }
     }
-    
-    
+
     public String toString() {
         String ret = rawProperty;
         switch(phase) {
@@ -325,39 +324,40 @@ public class SafetyProperty  {
     
     
     private boolean initSafetyTrace(AvatarSpecification _spec, String p) {      
-        safetySolver = new AvatarExpressionSolver(p);
-        boolean exprRet = safetySolver.buildExpression(_spec);
+        safetySolver = (AvatarIBSExpressionClass.BExpr)AvatarIBSolver.parser.parseBool(_spec,p);
+
         
-        if (exprRet == false) {
+        if (safetySolver==null) {
             errorOnProperty = BAD_PROPERTY_STRUCTURE;
+            return false;
         }
         
-        if (safetySolver.hasState()) {
+        if (safetySolver.hasStates()) {
             propertyType = BLOCK_STATE;
         } else {
             propertyType = BOOL_EXPR;
         }
         
-        return exprRet;
+        return true;
     }
     
     private boolean initSafetyTrace(AvatarBlock block, AvatarSpecification _spec, String p) {      
-        safetySolver = new AvatarExpressionSolver(p);
-        boolean exprRet = safetySolver.buildExpression(block);
+        safetySolver = (AvatarIBSExpressionClass.BExpr)AvatarIBSolver.parser.parseBool(block,p);
         
-        if (exprRet == false) {
+        if (safetySolver == null) {
             errorOnProperty = BAD_PROPERTY_STRUCTURE;
+            return false;
         }
         
-        safetySolver.setBlockIndex(_spec);
+        safetySolver.linkComps(_spec);
         
-        if (safetySolver.hasState()) {
+        if (safetySolver.hasStates()) {
             propertyType = BLOCK_STATE;
         } else {
             propertyType = BOOL_EXPR;
         }
         
-        return exprRet;
+        return true;
     }
     
     
@@ -375,29 +375,27 @@ public class SafetyProperty  {
         pp = pFields[0].trim();
         pq = pFields[1].trim();
         
-        safetySolver = new AvatarExpressionSolver(pp);
-        exprRet = safetySolver.buildExpression(_spec);
-    
-        if (exprRet == false) {
+        safetySolver = (AvatarIBSExpressionClass.BExpr)AvatarIBSolver.parser.parseBool(_spec,pp);
+
+        if (safetySolver==null) {
             errorOnProperty = BAD_PROPERTY_STRUCTURE;
             return false;
         }
         
-        safetySolverLead = new AvatarExpressionSolver(pq);
-        exprRet = safetySolverLead.buildExpression(_spec);
+        safetySolverLead = (AvatarIBSExpressionClass.BExpr)AvatarIBSolver.parser.parseBool(_spec,pq);
 
-        if (exprRet == false) {
+        if (safetySolverLead==null) {
             errorOnProperty = BAD_PROPERTY_STRUCTURE;
             return false;
         }
         
-        if (safetySolver.hasState()) {
+        if (safetySolver.hasStates()) {
             propertyType = BLOCK_STATE;
         } else {
             propertyType = BOOL_EXPR;
         }
         
-        if (safetySolverLead.hasState()) {
+        if (safetySolverLead.hasStates()) {
             leadType = BLOCK_STATE;
         } else {
             leadType = BOOL_EXPR;
@@ -420,33 +418,31 @@ public class SafetyProperty  {
         pp = pFields[0].trim();
         pq = pFields[1].trim();
         
-        safetySolver = new AvatarExpressionSolver(pp);
-        exprRet = safetySolver.buildExpression(block);
+        safetySolver = (AvatarIBSExpressionClass.BExpr)AvatarIBSolver.parser.parseBool(block,pp);
     
-        if (exprRet == false) {
+        if (safetySolver==null) {
             errorOnProperty = BAD_PROPERTY_STRUCTURE;
             return false;
         }
         
-        safetySolver.setBlockIndex(_spec);
+        safetySolver.linkComps(_spec);
         
-        safetySolverLead = new AvatarExpressionSolver(pq);
-        exprRet = safetySolverLead.buildExpression(block);
+        safetySolverLead = (AvatarIBSExpressionClass.BExpr)AvatarIBSolver.parser.parseBool(block,pq);
 
-        if (exprRet == false) {
+        if (safetySolverLead==null) {
             errorOnProperty = BAD_PROPERTY_STRUCTURE;
             return false;
         }
         
-        safetySolverLead.setBlockIndex(_spec);
+        safetySolverLead.linkComps(_spec);
         
-        if (safetySolver.hasState()) {
+        if (safetySolver.hasStates()) {
             propertyType = BLOCK_STATE;
         } else {
             propertyType = BOOL_EXPR;
         }
         
-        if (safetySolverLead.hasState()) {
+        if (safetySolverLead.hasStates()) {
             leadType = BLOCK_STATE;
         } else {
             leadType = BOOL_EXPR;
diff --git a/src/main/java/myutil/intboolsolver/IBSStdAttributeClass.java b/src/main/java/myutil/intboolsolver/IBSStdAttributeClass.java
index 8eaa56ae26eb5a461958497a68ba4b4f01ae9b80..665ad5e1441efde088e6406c611889714cf97d74 100644
--- a/src/main/java/myutil/intboolsolver/IBSStdAttributeClass.java
+++ b/src/main/java/myutil/intboolsolver/IBSStdAttributeClass.java
@@ -374,7 +374,7 @@ public class IBSStdAttributeClass<
 
 
         // $$$$$$$$$$$$$$$ provided implementation, should not be modified $$$$$$$$$$$$$$
-
+        public boolean isState() { return isState; }
         /**
          * get the type of the attribute. <b>do not override</b>
          * @return a type among NullAttr, BoolConst, IntConst,
diff --git a/ttool/src/test/java/cli/CLIAvatarModelCheckerTest.java b/ttool/src/test/java/cli/CLIAvatarModelCheckerTest.java
index e0b9d320c59941bc0776d57802e08b6aa7fb7737..f66dbe84c4a9c46bbe3ec6169b0d1150dda5927c 100644
--- a/ttool/src/test/java/cli/CLIAvatarModelCheckerTest.java
+++ b/ttool/src/test/java/cli/CLIAvatarModelCheckerTest.java
@@ -259,7 +259,7 @@ public class CLIAvatarModelCheckerTest extends AbstractTest implements Interpret
        /*for(int i=0; i<s1.length(); i++) {
            System.out.println(i + "\t" + s1.substring(i, i+1) + " " + s2.substring(i, i+1));
        }*/
-        
+        System.out.println("S1: " + s1 + "\nS2: " + s2);
         assertTrue(s1.equals(s2));
     }