diff --git a/src/main/java/avatartranslator/modelchecker/AvatarModelChecker.java b/src/main/java/avatartranslator/modelchecker/AvatarModelChecker.java
index 55264bea3a620f47e7b9992c09f331fb57ddb20c..152c2217f50bf9fdb877db67114d02f01d47f723 100644
--- a/src/main/java/avatartranslator/modelchecker/AvatarModelChecker.java
+++ b/src/main/java/avatartranslator/modelchecker/AvatarModelChecker.java
@@ -111,9 +111,9 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
     private SpecificationReinit initState;
     
     //Debug counterexample
-//    private boolean counterexample;
-//    private CounterexampleTrace counterTrace;
-//    public Map<Integer, CounterexampleTraceState> traceStates;
+    private boolean counterexample;
+    private CounterexampleTrace counterTrace;
+    public Map<Integer, CounterexampleTraceState> traceStates;
     
     //RG limits
     private boolean stateLimitRG;
@@ -146,7 +146,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
         timeLimitRG = false;
         stateLimit = Integer.MAX_VALUE;
         timeLimit = 500;
-//        counterexample = false;
+        counterexample = false;
         freeIntermediateStateCoding = true;
     }
 
@@ -384,8 +384,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
         
         initModelChecking();
         
-//        counterexample = false; //TODO: delete
-//        initCounterexample();
+        counterexample = true; //TODO: delete
         
         stateLimitRG = false;
         timeLimitRG = false;
@@ -412,7 +411,9 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
             ignoreEmptyTransitions = true;
             for (SafetyProperty sp : livenesses) {
                 safety = sp;
+                initCounterexample();
                 startModelChecking(nbOfThreads);
+                generateCounterexample();
                 deadlocks += nbOfDeadlocks;
                 resetModelChecking();
                 if (!stoppedBeforeEnd) {
@@ -435,7 +436,9 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
                     ignoreEmptyTransitions = false;
                     ignoreConcurrenceBetweenInternalActions = ignoreConcurrence;
                 }
+                initCounterexample();
                 startModelChecking(nbOfThreads);
+                generateCounterexample();
                 if (safety.safetyType == SafetyProperty.LEADS_TO) {
                     // second pass
                     safety.initLead();
@@ -503,12 +506,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
         studySafety = studyS;
         studyReachability = studyR;
         studyReinit = studyRI;
-        
-//        if (counterexample && counterTrace.hasCounterexample()) {
-//            counterTrace.buildTrace();
-//            System.out.println(counterTrace.generateSimpleTrace());
-//        }
-        
+                
         TraceManager.addDev("Model checking done");
         return true;
     }
@@ -532,7 +530,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
 
 
     public void startModelChecking(int _nbOfThreads) {
-        nbOfThreads = 1;
+        nbOfThreads = _nbOfThreads;
 
         // Init data stuctures
         states = Collections.synchronizedMap(new HashMap<Integer, SpecificationState>());
@@ -899,29 +897,18 @@ 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 initCounterexample() {
+        counterTrace = new CounterexampleTrace(spec);
+        traceStates =  Collections.synchronizedMap(new HashMap<Integer, CounterexampleTraceState>());
+    }
+    
+    
+    private void generateCounterexample() {
+        if (counterexample && counterTrace.hasCounterexample()) {
+            counterTrace.buildTrace();
+            System.out.println(counterTrace.generateSimpleTrace());
+        }
+    }
 
 
     private void prepareTransitionsOfState(SpecificationState _ss) {
@@ -965,6 +952,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
         if (_ss.transitions == null) {
             TraceManager.addDev("null transitions");
             nbOfDeadlocks++;
+            checkPropertyOnDeadlock(_ss);
             mustStop();
             return;
         }
@@ -1194,7 +1182,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
             if (newState.transitions == null) {
                 TraceManager.addDev("null transitions");
                 nbOfDeadlocks++;
-                propertyDone = deadlockStop; //use this flag to stop the execution
+                checkPropertyOnDeadlock(_ss);
                 mustStop();
                 return;
             }
@@ -1997,25 +1985,25 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
             }
         }
         
-//        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);
-//            }
-//        }
+        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) {
@@ -2040,9 +2028,9 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
             cexample = true;
         }
         
-//        if (counterexample && cexample == true) {
-//            counterTrace.setCounterexample(traceStates.get(ss.hashValue));
-//        }
+        if (counterexample && cexample == true) {
+            counterTrace.setCounterexample(traceStates.get(ss.hashValue));
+        }
     }
 
 
diff --git a/src/main/java/avatartranslator/modelchecker/CounterexampleTrace.java b/src/main/java/avatartranslator/modelchecker/CounterexampleTrace.java
index 3dc1cd1ef62864d219b370ff1e6c431ec0876f54..ba7048f59824b5de91d3de8a1034d27a190285ab 100644
--- a/src/main/java/avatartranslator/modelchecker/CounterexampleTrace.java
+++ b/src/main/java/avatartranslator/modelchecker/CounterexampleTrace.java
@@ -88,7 +88,7 @@ public class CounterexampleTrace {
             s.append(id);
             int j = 0;
             for (AvatarBlock block : blocks) {
-                s.append("\t" + block.getName() + "." + block.getStateMachine().allStates[cs.blocksStates[j]].getName());
+                s.append("\t" + block.getName() + "." + block.getStateMachine().allStates[cs.blocksStates[j++]].getName());
             }
             s.append("\n");
             id++;