diff --git a/src/avatartranslator/AvatarBlock.java b/src/avatartranslator/AvatarBlock.java
index 4c7005c9d2491877eb34cc4c3991f7c7986335c4..6cc1f7b2a877b9f1973d6498b8218c7e48fd5742 100644
--- a/src/avatartranslator/AvatarBlock.java
+++ b/src/avatartranslator/AvatarBlock.java
@@ -542,78 +542,4 @@ public class AvatarBlock extends AvatarElement {
         }
         return cpt;
     }
-
-    public AvatarState removeElseGuards() {
-        if (asm == null) {
-            return null;
-        }
-
-        AvatarStateMachineElement asme0;
-        AvatarTransition at = null, at0;
-        int nbOfElse;
-        String guard, g;
-        int i;
-
-        for(AvatarStateMachineElement asme :asm.getListOfElements()) {
-            if (asme instanceof AvatarState) {
-                // Has only one "else" transition?
-                if (asme.nbOfNexts() > 0) {
-                    // Search for several "else"
-                    nbOfElse = 0;
-                    for(i=0; i<asme.nbOfNexts(); i++) {
-                        asme0 = asme.getNext(i);
-                        if (asme0 instanceof AvatarTransition) {
-                            if (((AvatarTransition)asme0).hasElseGuard()) {
-                                nbOfElse ++;
-                                at = (AvatarTransition)asme0;
-                            }
-                        }
-                    }
-
-                    if ((asme.nbOfNexts() == 1) && (nbOfElse == 1)) {
-                        return (AvatarState)asme;
-                    }
-
-                    if (nbOfElse > 2) {
-                        return (AvatarState)asme;
-                    }
-
-                    if (nbOfElse == 1) {
-                        // Must compute the new guard
-                        guard = "";
-                        for(i=0; i<asme.nbOfNexts(); i++) {
-                            asme0 = asme.getNext(i);
-                            if ((asme0 instanceof AvatarTransition) && (asme0 != at)) {
-                                at0 = (AvatarTransition)asme0;
-                                g = at0.getGuard().toString ();
-                                if (g != null) {
-                                    if (at0.hasNonDeterministicGuard()) {
-                                        guard = "false";
-                                        break;
-                                    } else {
-                                        if (guard.length() == 0) {
-                                            guard = "not(" + at0.getGuard() + ")";
-                                        } else {
-                                            guard = guard + " and (not(" + at0.getGuard() + "))";
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                        guard = Conversion.replaceAllChar(guard, '[', "(");
-                        guard = Conversion.replaceAllChar(guard, ']', ")");
-                        guard = "[" + guard + "]";
-                        at.setGuard(AvatarGuard.createFromString (this, guard));
-                        TraceManager.addDev("[ else ] replaced with :" + guard);
-                    }
-                }
-            }
-        }
-
-        return null;
-
-    }
-
-
-
 }
diff --git a/src/avatartranslator/AvatarSpecification.java b/src/avatartranslator/AvatarSpecification.java
index 631391738574be5143157a26e127ebc77e60561d..a418c3b31f24d4c67ed771f09edc25ad4a2f50de 100644
--- a/src/avatartranslator/AvatarSpecification.java
+++ b/src/avatartranslator/AvatarSpecification.java
@@ -302,17 +302,28 @@ public class AvatarSpecification extends AvatarElement {
         return null;
     }
 
-    public AvatarState removeElseGuards() {
-        AvatarState state;
-
-        for(AvatarBlock block: blocks) {
-            state = block.removeElseGuards();
-            if (state != null) {
-                return state;
+    public void removeElseGuards() {
+        for (AvatarBlock block: blocks) {
+            AvatarStateMachine asm = block.getStateMachine ();
+            if (asm == null)
+                continue;
+            for (AvatarStateMachineElement asme: asm.getListOfElements ()) {
+                if (! (asme instanceof AvatarState))
+                    continue;
+
+                for (AvatarStateMachineElement next: asme.getNexts ()) {
+                    if (! (next instanceof AvatarTransition))
+                        continue;
+                    AvatarTransition at = (AvatarTransition) next;
+                    AvatarGuard ancientGuard = at.getGuard ();
+
+                    if (ancientGuard == null)
+                        continue;
+
+                    at.setGuard (ancientGuard.getRealGuard (asme));
+                }
             }
         }
-
-        return null;
     }
 
     public boolean hasLossyChannel() {
diff --git a/src/avatartranslator/toproverif/AVATAR2ProVerif.java b/src/avatartranslator/toproverif/AVATAR2ProVerif.java
index 949f8b9b2302d91b6c042d860637a72c267f592f..be69b896b06682fc320de20e9b891bb76ea88393 100755
--- a/src/avatartranslator/toproverif/AVATAR2ProVerif.java
+++ b/src/avatartranslator/toproverif/AVATAR2ProVerif.java
@@ -817,99 +817,100 @@ public class AVATAR2ProVerif implements AvatarTranslator {
 
         TraceManager.addDev("|    |    Actions");
         // Loop over all assigment functions
-        for(AvatarActionAssignment action: _asme.getAssignments ()) {
-            TraceManager.addDev("|    |    |    assignment found: " + action);
-            AvatarLeftHand leftHand = action.getLeftHand ();
-
-            // Compute right part of assignment
-            AvatarTerm rightHand = action.getRightHand ();
-            String proVerifRightHand = null;
-            if (rightHand instanceof AvatarTermFunction) {
-                // If it's a function call
-                String name = ((AvatarTermFunction) rightHand).getMethod ().getName ();
-                LinkedList<AvatarTerm> args = ((AvatarTermFunction) rightHand).getArgs ().getComponents ();
-
-                if (name.equals ("concat2") || name.equals ("concat3") || name.equals ("concat4")) {
-                    // If it's a concat function, just use tuples
-                    boolean first = true;
-                    proVerifRightHand = "(";
-                    for (AvatarTerm argTerm: args) {
-                        if (first)
-                            first = false;
-                        else
-                            proVerifRightHand += ", ";
-                        proVerifRightHand += AVATAR2ProVerif.translateTerm (argTerm, arg.attributeCmp);
-                    }
-                    proVerifRightHand += ")";
+        for(AvatarAction aaction: _asme.getActions ()) {
+            if (aaction instanceof AvatarActionAssignment) {
+                AvatarActionAssignment action = (AvatarActionAssignment) aaction;
+                TraceManager.addDev("|    |    |    assignment found: " + action);
+                AvatarLeftHand leftHand = action.getLeftHand ();
+
+                // Compute right part of assignment
+                AvatarTerm rightHand = action.getRightHand ();
+                String proVerifRightHand = null;
+                if (rightHand instanceof AvatarTermFunction) {
+                    // If it's a function call
+                    String name = ((AvatarTermFunction) rightHand).getMethod ().getName ();
+                    LinkedList<AvatarTerm> args = ((AvatarTermFunction) rightHand).getArgs ().getComponents ();
+
+                    if (name.equals ("concat2") || name.equals ("concat3") || name.equals ("concat4")) {
+                        // If it's a concat function, just use tuples
+                        boolean first = true;
+                        proVerifRightHand = "(";
+                        for (AvatarTerm argTerm: args) {
+                            if (first)
+                                first = false;
+                            else
+                                proVerifRightHand += ", ";
+                            proVerifRightHand += AVATAR2ProVerif.translateTerm (argTerm, arg.attributeCmp);
+                        }
+                        proVerifRightHand += ")";
+                    } else
+                        // Else use the function as is
+                        proVerifRightHand = AVATAR2ProVerif.translateTerm (rightHand, arg.attributeCmp);
                 } else
-                    // Else use the function as is
+                    // If it's not a function, use it as is
                     proVerifRightHand = AVATAR2ProVerif.translateTerm (rightHand, arg.attributeCmp);
-            } else
-                // If it's not a function, use it as is
-                proVerifRightHand = AVATAR2ProVerif.translateTerm (rightHand, arg.attributeCmp);
-
-            // Compute left hand part of the assignment
-            LinkedList<ProVerifVar> proVerifLeftHand = new LinkedList<ProVerifVar> ();
-            if (leftHand instanceof AvatarTuple)
-                for (AvatarTerm term: ((AvatarTuple) leftHand).getComponents ()) {
-                    if (! (term instanceof AvatarAttribute)) {
-                        CheckingError ce = new CheckingError(CheckingError.BEHAVIOR_ERROR, "'" + term.getName () + "' should be an attribute (ignored)");
-                        ce.setAvatarBlock(arg.block);
-                        ce.setTDiagramPanel(((AvatarDesignPanel)(this.avspec.getReferenceObject())).getAvatarSMDPanel(arg.block.getName()));
-                        ce.setTGComponent((TGComponent)(_asme.getReferenceObject()));
-                        this.warnings.add(ce);
-                        continue;
-                    }
 
-                    AvatarAttribute attr = (AvatarAttribute) term;
+                // Compute left hand part of the assignment
+                LinkedList<ProVerifVar> proVerifLeftHand = new LinkedList<ProVerifVar> ();
+                if (leftHand instanceof AvatarTuple)
+                    for (AvatarTerm term: ((AvatarTuple) leftHand).getComponents ()) {
+                        if (! (term instanceof AvatarAttribute)) {
+                            CheckingError ce = new CheckingError(CheckingError.BEHAVIOR_ERROR, "'" + term.getName () + "' should be an attribute (ignored)");
+                            ce.setAvatarBlock(arg.block);
+                            ce.setTDiagramPanel(((AvatarDesignPanel)(this.avspec.getReferenceObject())).getAvatarSMDPanel(arg.block.getName()));
+                            ce.setTGComponent((TGComponent)(_asme.getReferenceObject()));
+                            this.warnings.add(ce);
+                            continue;
+                        }
+
+                        AvatarAttribute attr = (AvatarAttribute) term;
+                        Integer c = arg.attributeCmp.get (attr) + 1;
+                        arg.attributeCmp.put (attr, c);
+                        proVerifLeftHand.add (new ProVerifVar (AVATAR2ProVerif.translateTerm (attr, arg.attributeCmp), "bitstring"));
+                    }
+                else if (leftHand instanceof AvatarAttribute) {
+                    AvatarAttribute attr = (AvatarAttribute) leftHand;
                     Integer c = arg.attributeCmp.get (attr) + 1;
                     arg.attributeCmp.put (attr, c);
                     proVerifLeftHand.add (new ProVerifVar (AVATAR2ProVerif.translateTerm (attr, arg.attributeCmp), "bitstring"));
                 }
-            else if (leftHand instanceof AvatarAttribute) {
-                AvatarAttribute attr = (AvatarAttribute) leftHand;
-                Integer c = arg.attributeCmp.get (attr) + 1;
-                arg.attributeCmp.put (attr, c);
-                proVerifLeftHand.add (new ProVerifVar (AVATAR2ProVerif.translateTerm (attr, arg.attributeCmp), "bitstring"));
-            }
-
-            if (proVerifRightHand != null && proVerifLeftHand.size () > 0)
-                _lastInstr = _lastInstr.setNextInstr (new ProVerifProcLet (proVerifLeftHand.toArray (new ProVerifVar[proVerifLeftHand.size ()]), proVerifRightHand));
-        }
-
-        // Loop over all function calls
-        for(AvatarTermFunction action: _asme.getFunctionCalls ()) {
-            String name = action.getMethod ().getName ();
 
-            if (name.equals ("get2") || name.equals ("get3") || name.equals ("get4")) {
-                // If the function called is get[234]
-                LinkedList<AvatarTerm> args = action.getArgs ().getComponents ();
-                int index = (int) name.charAt (3) - 48;
+                if (proVerifRightHand != null && proVerifLeftHand.size () > 0)
+                    _lastInstr = _lastInstr.setNextInstr (new ProVerifProcLet (proVerifLeftHand.toArray (new ProVerifVar[proVerifLeftHand.size ()]), proVerifRightHand));
+            } else if (aaction instanceof AvatarTermFunction) {
+                AvatarTermFunction action = (AvatarTermFunction) aaction;
+                String name = action.getMethod ().getName ();
+
+                if (name.equals ("get2") || name.equals ("get3") || name.equals ("get4")) {
+                    // If the function called is get[234]
+                    LinkedList<AvatarTerm> args = action.getArgs ().getComponents ();
+                    int index = (int) name.charAt (3) - 48;
+
+                    boolean ok = true;
+                    for (int i = 1; i <= index; i++)
+                        if (! (args.get(i) instanceof AvatarAttribute)) {
+                            CheckingError ce = new CheckingError(CheckingError.BEHAVIOR_ERROR, "'" + args.get(i).getName () + "' should be an attribute (ignored)");
+                            ce.setAvatarBlock(arg.block);
+                            ce.setTDiagramPanel(((AvatarDesignPanel)(this.avspec.getReferenceObject())).getAvatarSMDPanel(arg.block.getName()));
+                            ce.setTGComponent((TGComponent)(_asme.getReferenceObject()));
+                            this.warnings.add(ce);
+                            ok = false;
+                        }
 
-                boolean ok = true;
-                for (int i = 1; i <= index; i++)
-                    if (! (args.get(i) instanceof AvatarAttribute)) {
-                        CheckingError ce = new CheckingError(CheckingError.BEHAVIOR_ERROR, "'" + args.get(i).getName () + "' should be an attribute (ignored)");
-                        ce.setAvatarBlock(arg.block);
-                        ce.setTDiagramPanel(((AvatarDesignPanel)(this.avspec.getReferenceObject())).getAvatarSMDPanel(arg.block.getName()));
-                        ce.setTGComponent((TGComponent)(_asme.getReferenceObject()));
-                        this.warnings.add(ce);
-                        ok = false;
-                    }
+                    if (ok) {
+                        // Create the corresponding assignment
+                        String rightHand = AVATAR2ProVerif.translateTerm (args.get (0), arg.attributeCmp);
 
-                if (ok) {
-                    // Create the corresponding assignment
-                    String rightHand = AVATAR2ProVerif.translateTerm (args.get (0), arg.attributeCmp);
+                        LinkedList<ProVerifVar> tup = new LinkedList<ProVerifVar> ();
+                        for (int i = 1; i <= index; i++) {
+                            AvatarAttribute attr = (AvatarAttribute) args.get (i);
+                            Integer c = arg.attributeCmp.get (attr) + 1;
+                            arg.attributeCmp.put (attr, c);
+                            tup.add (new ProVerifVar (AVATAR2ProVerif.translateTerm (attr, arg.attributeCmp), "bitstring"));
+                        }
 
-                    LinkedList<ProVerifVar> tup = new LinkedList<ProVerifVar> ();
-                    for (int i = 1; i <= index; i++) {
-                        AvatarAttribute attr = (AvatarAttribute) args.get (i);
-                        Integer c = arg.attributeCmp.get (attr) + 1;
-                        arg.attributeCmp.put (attr, c);
-                        tup.add (new ProVerifVar (AVATAR2ProVerif.translateTerm (attr, arg.attributeCmp), "bitstring"));
+                        _lastInstr = _lastInstr.setNextInstr (new ProVerifProcLet (tup.toArray (new ProVerifVar[tup.size ()]), rightHand));
                     }
-
-                    _lastInstr = _lastInstr.setNextInstr (new ProVerifProcLet (tup.toArray (new ProVerifVar[tup.size ()]), rightHand));
                 }
             }
         }
diff --git a/src/ui/AvatarDesignPanelTranslator.java b/src/ui/AvatarDesignPanelTranslator.java
index f13100a01db375b07320387d5018c4d6bbbd16c9..9a8c2548b404af1c3bfbab3a3d254ea3380303d1 100644
--- a/src/ui/AvatarDesignPanelTranslator.java
+++ b/src/ui/AvatarDesignPanelTranslator.java
@@ -116,10 +116,9 @@ public class AvatarDesignPanelTranslator {
 	} */
         createPragmas(as, blocks);
 
-        // FIXME: is it ok to let else guards ?
-        // TraceManager.addDev("Removing else guards");
-        // as.removeElseGuards();
-        // TraceManager.addDev("Removing else guards ... done");
+        TraceManager.addDev("Removing else guards");
+        as.removeElseGuards();
+        TraceManager.addDev("Removing else guards ... done");
         return as;
     }