diff --git a/src/main/java/avatartranslator/modelchecker/AvatarModelChecker.java b/src/main/java/avatartranslator/modelchecker/AvatarModelChecker.java
index fe45abd0efd6b4e3aa20a562ae7191d626c80f58..55264bea3a620f47e7b9992c09f331fb57ddb20c 100644
--- a/src/main/java/avatartranslator/modelchecker/AvatarModelChecker.java
+++ b/src/main/java/avatartranslator/modelchecker/AvatarModelChecker.java
@@ -111,7 +111,9 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
     private SpecificationReinit initState;
     
     //Debug counterexample
-    //private boolean counterexample;
+//    private boolean counterexample;
+//    private CounterexampleTrace counterTrace;
+//    public Map<Integer, CounterexampleTraceState> traceStates;
     
     //RG limits
     private boolean stateLimitRG;
@@ -144,6 +146,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
         timeLimitRG = false;
         stateLimit = Integer.MAX_VALUE;
         timeLimit = 500;
+//        counterexample = false;
         freeIntermediateStateCoding = true;
     }
 
@@ -381,6 +384,9 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
         
         initModelChecking();
         
+//        counterexample = false; //TODO: delete
+//        initCounterexample();
+        
         stateLimitRG = false;
         timeLimitRG = false;
         emptyTr = ignoreEmptyTransitions;
@@ -398,6 +404,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
         studyLiveness = false;
         studyReachability = false;
         studyReinit = false;
+                
 
         if (studyL) {
             studySafety = true;
@@ -408,7 +415,9 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
                 startModelChecking(nbOfThreads);
                 deadlocks += nbOfDeadlocks;
                 resetModelChecking();
-                safety.setComputed();
+                if (!stoppedBeforeEnd) {
+                    safety.setComputed();
+                }
             }
             studySafety = false;
             ignoreConcurrenceBetweenInternalActions = ignoreConcurrence;
@@ -443,7 +452,9 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
                     System.out.println("Dimensions of lead states to elaborate: " + safetyLeadStates.size());
                     safetyLeadStates = null;
                 }
-                safety.setComputed();
+                if (!stoppedBeforeEnd) {
+                    safety.setComputed();
+                }
                 deadlocks += nbOfDeadlocks;
                 ignoreConcurrenceBetweenInternalActions = ignoreConcurrence;
                 resetModelChecking();
@@ -493,6 +504,11 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
         studyReachability = studyR;
         studyReinit = studyRI;
         
+//        if (counterexample && counterTrace.hasCounterexample()) {
+//            counterTrace.buildTrace();
+//            System.out.println(counterTrace.generateSimpleTrace());
+//        }
+        
         TraceManager.addDev("Model checking done");
         return true;
     }
@@ -516,7 +532,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
 
 
     public void startModelChecking(int _nbOfThreads) {
-        nbOfThreads = _nbOfThreads;
+        nbOfThreads = 1;
 
         // Init data stuctures
         states = Collections.synchronizedMap(new HashMap<Integer, SpecificationState>());
@@ -882,6 +898,32 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
         }
     }
 
+
+//    private void initCounterexample() {
+//        if (counterexample) {
+//            int nstudies = 0;
+//            if (livenesses != null) {
+//                nstudies += livenesses.size();
+//            }
+//            if (safeties != null) {
+//                nstudies += safeties.size();
+//            }
+//            if (checkNoDeadlocks) {
+//                nstudies++; 
+//            }
+//            if (studyReinit) {
+//                nstudies++;
+//            }
+//            if (nstudies != 1) {
+//                counterexample = false;
+//            } else {
+//                counterTrace = new CounterexampleTrace(spec);
+//                traceStates =  Collections.synchronizedMap(new HashMap<Integer, CounterexampleTraceState>());
+//            }
+//        }
+//    }
+
+
     private void prepareTransitionsOfState(SpecificationState _ss) {
 
         int cpt;
@@ -980,7 +1022,6 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
         if (transitions.size() == 0) {
             checkPropertyOnDeadlock(_ss);
             nbOfDeadlocks++;
-            propertyDone = deadlockStop; //use this flag to stop the execution
             //TraceManager.addDev("Deadlock found");
         }
 
@@ -1874,11 +1915,14 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
     }
     
     private void actionOnProperty(SpecificationState newState, int i, SpecificationState similar, SpecificationState _ss) {
+        boolean cexample = false;
+        
         if (studySafety) {
             if (safety.safetyType == SafetyProperty.ALLTRACES_ALLSTATES) {
                 if (newState.property) {
                     propertyDone = true;
                     safety.result = false;
+                    cexample = true;
                 } else if (similar == null){
                     pendingStates.add(newState);
                 }
@@ -1896,10 +1940,11 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
                         newState.freeUselessAllocations();
                     }
                 } else if (!newState.property) {
-                    if (!similar.property && stateIsReachableFromState(similar, _ss)) {
+                    if (!similar.property && stateIsReachableFromState(similar, _ss) || similar.property) {
                         //found a loop with true property
                         propertyDone = true;
                         safety.result = true;
+                        cexample = true;
                     }
                 }
             } else if (safety.safetyType == SafetyProperty.ALLTRACES_ONESTATE) {
@@ -1916,16 +1961,18 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
                         newState.freeUselessAllocations();
                     }
                 } else if (newState.property == false) {
-                    if (!similar.property && stateIsReachableFromState(similar, _ss)) {
+                    if (!similar.property && stateIsReachableFromState(similar, _ss) || similar.property) {
                         //found a loop with false property
                         propertyDone = true;
                         safety.result = false;
+                        cexample = true;
                     }
                 }
             } else if (safety.safetyType == SafetyProperty.ONETRACE_ONESTATE) {
                 if (newState.property) {
                     propertyDone = true;
                     safety.result = true;
+                    cexample = true;
                 } else if (similar == null) {
                     pendingStates.add(newState);
                 }
@@ -1942,30 +1989,60 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
                     pendingStates.add(newState);
                 }
             }
-        }
-
-        if (studyReinit && similar != null) {
+        } else if (studyReinit && similar != null) {
             if (similar != initState.initState && stateIsReachableFromState(similar, _ss)) {
                 propertyDone = true;
                 initState.setResult(false);
+                cexample = true;
             }
         }
+        
+//        if (counterexample) {
+//            if (cexample == true) {
+//                CounterexampleTraceState cs = new CounterexampleTraceState();
+//                if (_ss != null) {
+//                    cs.initState(newState, traceStates.get(_ss.hashValue));
+//                } else {
+//                    cs.initState(newState, null);
+//                }
+//                counterTrace.setCounterexample(cs);
+//            } else if (similar == null) {
+//                CounterexampleTraceState cs = new CounterexampleTraceState();
+//                if (_ss != null) {
+//                    cs.initState(newState, traceStates.get(_ss.hashValue));
+//                } else {
+//                    cs.initState(newState, null);
+//                }
+//                traceStates.put(cs.hash, cs);
+//            }
+//        }
     }
     
     private void checkPropertyOnDeadlock(SpecificationState ss) {
+        boolean cexample = false;
+        
         if (studySafety) {
             if (safety.safetyType == SafetyProperty.ALLTRACES_ONESTATE && ss.property == false) {
                 propertyDone = true;
                 safety.result = false;
+                cexample = true;
             } else if (safety.safetyType == SafetyProperty.ONETRACE_ALLSTATES && ss.property == false) {
                 propertyDone = true;
                 safety.result = true;
+                cexample = true;
             }
-        }
-        if (studyReinit) {
+        } else if (studyReinit) {
             propertyDone = true;
             initState.setResult(false);
+            cexample = true;
+        } else if (deadlockStop) {
+            propertyDone = true;
+            cexample = true;
         }
+        
+//        if (counterexample && cexample == true) {
+//            counterTrace.setCounterexample(traceStates.get(ss.hashValue));
+//        }
     }
 
 
@@ -2162,14 +2239,19 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
             return "Deadlock check not activeted\n";
         }
         
-        String ret;
+        StringBuilder ret = new StringBuilder();
+        
+        if (stoppedBeforeEnd) {
+            ret.append("Beware: Full deadlock study might not have been fully completed\n");
+        }
+        
         if (nbOfDeadlocks > 0) {
-            ret = "property is NOT satisfied\n";
+            ret.append("property is NOT satisfied\n");
         } else {
-            ret = "property is satisfied\n";
+            ret.append("property is satisfied\n");
         }
         
-        return ret;
+        return ret.toString();
     }
     
     public String safetyToString() {
@@ -2195,14 +2277,18 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
             return "Reinitialization check not activeted\n";
         }
         
-        String ret;
+        StringBuilder ret = new StringBuilder();
+        
+        if (stoppedBeforeEnd) {
+            ret.append("Beware: Full study of liveness might not have been fully completed\n");
+        }
         if (initState.getResult()) {
-            ret = "property is satisfied\n";
+            ret.append("property is satisfied\n");
         } else {
-            ret = "property is NOT satisfied\n";
+            ret.append("property is NOT satisfied\n");
         }
         
-        return ret;
+        return ret.toString();
     }
     
 
diff --git a/src/main/java/ui/window/JDialogAvatarModelChecker.java b/src/main/java/ui/window/JDialogAvatarModelChecker.java
index 7ecb33b1d95d8a9a1f1294c5cce1981ea8c74e0c..a29cae0518c4499558814c853c17e8fe8aa552d8 100644
--- a/src/main/java/ui/window/JDialogAvatarModelChecker.java
+++ b/src/main/java/ui/window/JDialogAvatarModelChecker.java
@@ -49,6 +49,7 @@ import myutil.*;
 import ui.util.IconManager;
 import ui.MainGUI;
 import ui.TGComponent;
+import ui.avatarbd.AvatarBDSafetyPragma;
 import graph.RG;
 import graph.AUTGraph;
 
@@ -992,9 +993,11 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act
 
         for (SafetyProperty sp : safeties) {
             if (sp.getPhase() == SpecificationPropertyPhase.SATISFIED) {
-                status = 1;
+                status = AvatarBDSafetyPragma.PROVED_TRUE;
+            } else if (sp.getPhase() == SpecificationPropertyPhase.NONSATISFIED) {
+                status = AvatarBDSafetyPragma.PROVED_FALSE;
             } else {
-                status = 0;
+                status = AvatarBDSafetyPragma.PROVED_ERROR;
             }
             verifMap.put(sp.getRawProperty(), status);
         }