diff --git a/src/main/java/avatartranslator/AvatarBlock.java b/src/main/java/avatartranslator/AvatarBlock.java
index 4ff2d674eb4fd398e85e339be42ffd89ede0fd16..511d0ebf1ca40d3fe58a75f48cbe676b00894a11 100644
--- a/src/main/java/avatartranslator/AvatarBlock.java
+++ b/src/main/java/avatartranslator/AvatarBlock.java
@@ -57,6 +57,7 @@ public class AvatarBlock extends AvatarElement implements AvatarStateMachineOwne
     private List<AvatarSignal> signals;
     private AvatarStateMachine asm;
     private AvatarSpecification avspec;
+    private int blockIndex; //Index of block in the Avatar Specification
 
     private String globalCode;
 
@@ -253,6 +254,14 @@ public class AvatarBlock extends AvatarElement implements AvatarStateMachineOwne
     public AvatarAttribute getAttribute(int _index) {
         return attributes.get(_index);
     }
+    
+    public int getBlockIndex() {
+        return blockIndex;
+    }
+    
+    public void setBlockIndex(int _blockIndex) {
+        blockIndex = _blockIndex;
+    }
 
     public boolean setAttributeValue(int _index, String _value) {
         AvatarAttribute aa = attributes.get(_index);
diff --git a/src/main/java/avatartranslator/modelchecker/AvatarModelChecker.java b/src/main/java/avatartranslator/modelchecker/AvatarModelChecker.java
index 5f8ac57c61369cde9dbecf7abdd892efb484d1f1..581a38e379537e22275d971ecf5ea1034a6ebc66 100644
--- a/src/main/java/avatartranslator/modelchecker/AvatarModelChecker.java
+++ b/src/main/java/avatartranslator/modelchecker/AvatarModelChecker.java
@@ -342,6 +342,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
         
         stateLimitRG = false;
         timeLimitRG = false;
+        ignoreEmptyTransitions = true;
         studyR = studyReachability;
         studyL = studyLiveness;
         studyS = studySafety;
@@ -468,16 +469,15 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
                 }
         }
         
-        //initialState.id = 0//getStateID();
         if (ignoreEmptyTransitions) {
             handleNonEmptyUniqueTransition(initialState);
         }
-        
-        prepareTransitionsOfState(initialState);
+//        
+//        prepareTransitionsOfState(initialState);
         blockValues = initialState.getBlockValues();
         initialState.distance = 0;
 
-        TraceManager.addDev("initialState=" + initialState.toString() + "\n nbOfTransitions" + initialState.transitions.size());
+        //TraceManager.addDev("initialState=" + initialState.toString() + "\n nbOfTransitions" + initialState.transitions.size());
         initialState.computeHash(blockValues);
         addState(initialState);
         
@@ -522,11 +522,8 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
         // initialState's transitions and blocks must be already initialized
         blockValues = initialState.getBlockValues();
         initialState.distance = 0;
-        
-        // properties are not tested on the initial node. The property is reset
-        initialState.property = false;
 
-        TraceManager.addDev("initialState=" + initialState.toString() + "\n nbOfTransitions" + initialState.transitions.size());
+        //TraceManager.addDev("initialState=" + initialState.toString() + "\n nbOfTransitions" + initialState.transitions.size());
         initialState.computeHash(blockValues);
         addState(initialState);
         
@@ -536,11 +533,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
         //statesByID.put(initialState.id, initialState);
         nbOfCurrentComputations = 0;
 
-        if (timeLimitRG) {
-            computeAllStatesTime();
-        } else {
-            computeAllStates();
-        }
+        computeAllStates();
 
         // All done
     }
@@ -580,6 +573,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
         //TraceManager.addDev("Preparing Avatar specification :" + spec.toString());
         prepareStates();
         prepareTransitions();
+        prepareBlocks();
 
 
         nbOfThreads = Runtime.getRuntime().availableProcessors();
@@ -813,6 +807,8 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
             mustStop();
             return;
         }
+        
+        prepareTransitionsOfState(_ss);
 
         ArrayList<SpecificationTransition> transitions = _ss.transitions;
         if (transitions == null) {
@@ -948,11 +944,11 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
                 newState.property = evaluateSafetyOfProperty(newState, tr, _ss.property);
             }
 
-            // Remove empty transitions if applicable
+//            // Remove empty transitions if applicable
             if (ignoreEmptyTransitions) {
                 handleNonEmptyUniqueTransition(newState);
             }
-            prepareTransitionsOfState(newState);
+//            prepareTransitionsOfState(newState);
             
 
             // Compute the hash of the new state, and create the link to the right next state
@@ -1208,7 +1204,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
         SpecificationTransition st = new SpecificationTransition();
         st.fromStateWithMoreThanOneTransition = _fromStateWithMoreThanOneTransition;
         _transitionsToAdd.add(st);
-        st.init(1, _at, _block, _sb, _indexOfBlock);
+        st.init(1, _at, _indexOfBlock);
 
         // Must compute the clockmin and clockmax values
         String minDelay = _at.getMinDelay().trim();
@@ -1292,6 +1288,13 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
             }
         }
     }
+    
+    private void prepareBlocks() {
+        int i = 0;
+        for (AvatarBlock ab : spec.getListOfBlocks()) {
+            ab.setBlockIndex(i++);
+        }
+    }
 
     public boolean oldEvaluateBoolExpression(String _expr, AvatarBlock _block, SpecificationBlock _sb) {
         String act = _expr;
@@ -1428,7 +1431,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
                 //int index = _st.blocks[i].getStateMachine().getIndexOfState(ase);
                 int index = _st.transitions[i].getBlock().getStateMachine().getIndexOfState(ase);
                 if (index > -1) {
-                    _newState.blocks[_st.blocksInt[i]].values[SpecificationBlock.STATE_INDEX] = index;
+                    _newState.blocks[((AvatarBlock) _st.transitions[i].getBlock()).getBlockIndex()].values[SpecificationBlock.STATE_INDEX] = index;
                 }
             }
         }
@@ -1485,7 +1488,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
                     retAction = nameOfVar + "=" + act;
                 }
                 
-                ((AvatarActionAssignment) aAction).executeActionSolver(_newState.blocks[_st.blocksInt[0]]);
+                ((AvatarActionAssignment) aAction).executeActionSolver(_newState.blocks[((AvatarBlock) _st.transitions[0].getBlock()).getBlockIndex()]);
 
 //                int indexVar = block.getIndexOfAvatarAttributeWithName(nameOfVar);
 //                AvatarType type = block.getAttribute(indexVar).getType();
@@ -1562,8 +1565,8 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
 //        }
         for (int i = 0; i < aaoss.getNbOfValues(); i++) {
 //            try {
-                result = aaoss.getExpressionAttribute(i).getValue(_newState.blocks[_st.blocksInt[0]]);
-                aaosr.getExpressionAttribute(i).setValue(_newState.blocks[_st.blocksInt[1]], result);
+                result = aaoss.getExpressionAttribute(i).getValue(_newState.blocks[((AvatarBlock) _st.transitions[0].getBlock()).getBlockIndex()]);
+                aaosr.getExpressionAttribute(i).setValue(_newState.blocks[((AvatarBlock) _st.transitions[1].getBlock()).getBlockIndex()], result);
                 ret += "" + result;
 //            } catch (Exception e) {
 //                TraceManager.addDev("EXCEPTION on adding value " + aaoss);
@@ -1746,7 +1749,6 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
                 if (similar == null) {
                     if (newState.property) {
                         SpecificationState state = newState.advancedClone();
-                        state.transitions = newState.transitions;
                         safetyLeadStates.add(state);
                         newState.property = false;
                     }
diff --git a/src/main/java/avatartranslator/modelchecker/SpecificationTransition.java b/src/main/java/avatartranslator/modelchecker/SpecificationTransition.java
index a44e68f79b0b5fc57b41bf8414a726f84ad50ee8..f70c8e73ea7cb10ab21d069c8397d375b9bcfd9b 100644
--- a/src/main/java/avatartranslator/modelchecker/SpecificationTransition.java
+++ b/src/main/java/avatartranslator/modelchecker/SpecificationTransition.java
@@ -54,25 +54,17 @@ import avatartranslator.AvatarTransition;
  */
 public class SpecificationTransition  {
     public int clockMin, clockMax;
-
     public boolean fromStateWithMoreThanOneTransition;
-    
-    public int[] blocksInt;
-
     public AvatarTransition[] transitions;
-
     public String infoForGraph;
 
 
     public SpecificationTransition() {
     }
 
-    public void init(int _nbOfElements, AvatarTransition _at, AvatarBlock _ab, SpecificationBlock _sb, int _blockIndex) {
+    public void init(int _nbOfElements, AvatarTransition _at, int _blockIndex) {
         transitions = new AvatarTransition[_nbOfElements];
         transitions[0] = _at;        
-
-        blocksInt = new int[_nbOfElements];
-        blocksInt[0] = _blockIndex;
     }
 
     public int getType() {
@@ -89,13 +81,8 @@ public class SpecificationTransition  {
         transitions[0] = _tr1.transitions[0];
         transitions[1] = _tr2.transitions[0];
 
-        blocksInt = new int[nbOfElements];
-        blocksInt[0] = _tr1.blocksInt[0];
-        blocksInt[1] = _tr2.blocksInt[0];
-
         clockMin = Math.max(_tr1.clockMin, _tr2.clockMin);
         clockMax = Math.max(_tr1.clockMax, _tr2.clockMax);
-
     }
 
     public boolean hasBlockOf(SpecificationTransition _tr) {
@@ -120,27 +107,21 @@ public class SpecificationTransition  {
 
     
     public boolean hasBlockIndex(int _index) {
-        if (blocksInt == null) {
+        if (transitions == null) {
             return false;
         }
-
-        for(int i=0; i<blocksInt.length; i++) {
-            if (blocksInt[i] == _index) {
+        
+        for(int i = 0; i<transitions.length; i++) {
+            if (((AvatarBlock) transitions[i].getBlock()).getBlockIndex() == _index) {
                 return true;
             }
         }
-
         return false;
     }
 
     public String toString() {
         String ret = "Trans: ";
 
-//        if (blocks != null) {
-//            for (int i=0; i<blocks.length; i++) {
-//                ret += "/ Block" + i  + ": " + blocks[i].getName();
-//            }
-//        }
         if (transitions != null) {
             for (int i = 0; i < transitions.length; i++) {
                 ret += "/ Block" + i  + ": " + transitions[i].getBlock().getName() + "/" + transitions[i];
diff --git a/src/main/java/ui/window/JDialogAvatarModelChecker.java b/src/main/java/ui/window/JDialogAvatarModelChecker.java
index 5722554a9a6935bbda956bfdf46a35a429e8ea8d..5f4907a802240911c78c5773415496fe8e5687a0 100644
--- a/src/main/java/ui/window/JDialogAvatarModelChecker.java
+++ b/src/main/java/ui/window/JDialogAvatarModelChecker.java
@@ -560,9 +560,6 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act
             reinitValues();
             jta.append("Starting the model checker\n");
 
-
-
-
             amc = new AvatarModelChecker(spec);
 
             if (generateDesignSelected) {
@@ -891,7 +888,7 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act
 
         switch (mode) {
             case NOT_STARTED:
-                if ((reachabilitySelected == REACHABILITY_SELECTED) || (reachabilitySelected == REACHABILITY_ALL) || (livenessSelected == LIVENESS_SELECTED) || (livenessSelected == LIVENESS_ALL) || safetySelected|| graphSelected || graphSelectedDot) {
+                if ((reachabilitySelected == REACHABILITY_SELECTED) || (reachabilitySelected == REACHABILITY_ALL) || (livenessSelected == LIVENESS_SELECTED) || (livenessSelected == LIVENESS_ALL) || safetySelected || checkNoDeadSelected || graphSelected || graphSelectedDot) {
                     start.setEnabled(true);
                 } else {
                     start.setEnabled(false);