diff --git a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java
index 66b8b3ae864ff70147269bbe9d6413d2eb6a63a9..66112442359f5aa3a551bdf05b22e9898741d308 100644
--- a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java
+++ b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java
@@ -69,14 +69,17 @@ public class Avatar2SysML {
      * Memorized while naming states, to be reused for generating states
      */
     class StateInfo {
-        private String name;
-        private int number;
-        StateInfo(String _name, int _number) {
+       private String name;
+       private String prename = "";
+        StateInfo(String _name) {
+            name = _name;
+        }
+        StateInfo(String _name, String _prename) {
             name = _name;
-            number = _number;
+            prename = _prename;
         }
         public String getName(){ return name; }
-        public int getNumber(){ return number; }
+        public String getPreName(){ return prename; }
     }
 
     public Avatar2SysML(AvatarSpecification _avspec) { avspec = _avspec; }
@@ -284,7 +287,7 @@ public class Avatar2SysML {
         // sub-blocks -------------------
         for(AvatarBlock blk: avspec.getListOfBlocks()) { if (blk.getFather() == block) block2SysML(blk); }
 
-        //indent = indent.substring(indentStepSize);
+        indent = indent.substring(indentStepSize);
         avsysml.append(indent + "}\n");
     }
 
@@ -296,9 +299,8 @@ public class Avatar2SysML {
     }
 
     void statemachine2SysML(AvatarStateMachine asm) {
-
+        stateList.clear();
         // associate names to future SysML states
-        int stateNumber = 0;
         int randomNumber = 0;
         int countNumber = 0;
         int sendNumber = 0;
@@ -306,31 +308,34 @@ public class Avatar2SysML {
         for (AvatarStateMachineElement asme : asm.getListOfElements()) {
             StateInfo stateinfo;
             if      (asme instanceof AvatarStartState)
-                stateinfo = new StateInfo(startStateSysMLname(), 0);
+                stateinfo = new StateInfo(startStateSysMLname());
             else if (asme instanceof AvatarStopState)
-                stateinfo = new StateInfo(stopStateSysMLname(), 0);
+                stateinfo = new StateInfo(stopStateSysMLname());
             else if (asme instanceof AvatarState)
-                stateinfo = new StateInfo(standardStateSysMLname(stateNumber), stateNumber++);
+                stateinfo = new StateInfo(standardStateSysMLname(asme.getName()));
             else if (asme instanceof AvatarActionOnSignal) {
                 if(((AvatarActionOnSignal)asme).isSending())
-                    stateinfo = new StateInfo(sendStateSysMLname(stateNumber), sendNumber++);
+                    stateinfo = new StateInfo(
+                            sendStateSysMLname(((AvatarActionOnSignal)asme).getSignal().getName(), sendNumber),
+                            presendStateSysMLname(((AvatarActionOnSignal)asme).getSignal().getName(), sendNumber++));
                 else
-                    stateinfo = new StateInfo(receiveStateSysMLname(stateNumber), receiveNumber++);
+                    stateinfo = new StateInfo(receiveStateSysMLname(((AvatarActionOnSignal)asme).getSignal().getName(), receiveNumber++),
+                            prereceiveStateSysMLname(((AvatarActionOnSignal)asme).getSignal().getName(), receiveNumber++));
             }
             else if (asme instanceof AvatarQueryOnSignal)
-                stateinfo = new StateInfo(countStateSysMLname(stateNumber), countNumber++);
+                stateinfo = new StateInfo(countStateSysMLname(((AvatarQueryOnSignal)asme).getSignal().getName(), countNumber++));
             else if (asme instanceof AvatarRandom)
-                stateinfo = new StateInfo(randomStateSysMLname(stateNumber), randomNumber++);
+                stateinfo = new StateInfo(randomStateSysMLname(randomNumber++));
             else continue;
             stateList.add(asme);
             stateMap.put(asme, stateinfo);
         }
         avsysml.append(indent + "// state-machine description +++++\n" +
-                        indent + "exhibit state '@statemachine' : '#AvatarStateMachine' {\n");
+                        indent + "exhibit state '@statemachine' : '#AvatarStateMachine' {\n\n");
         indent += indentStep;
         // generate SysML states with associated transitions
         for (AvatarStateMachineElement asme : stateList) state2SysML(asme);
-        //indent = indent.substring(indentStepSize);
+        indent = indent.substring(indentStepSize);
         avsysml.append(indent + "}\n");
     }
     StringBuffer sysMLtransitions = new StringBuffer();
@@ -355,7 +360,7 @@ public class Avatar2SysML {
         } else
 
         if(asme instanceof AvatarRandom){
-            avsysml.append("indent + state " + stateMap.get(asme).getName() + " : '#AvatarRandomState' = '#AvatarRandomState'(\n");
+            avsysml.append(indent + "state " + stateMap.get(asme).getName() + " : '#AvatarRandomState' = '#AvatarRandomState'(\n");
             if (!requests.equals("")) avsysml.append(requests);
             indent += indentStep;
             avsysml.append(indent + "state_action = '#Assignment'(\n");
@@ -423,10 +428,8 @@ public class Avatar2SysML {
             ChannelInfo signalinfo = signalMap.get(aos.getSignal());
 
             if (aos.isSending()) {
-                String prestatename = presendStateSysMLname(stateinfo.getNumber());
-
                 // preComm State
-                avsysml.append(indent + "state " + prestatename + " : '#AvatarPreSendState' = '#AvatarPreSendState' (\n");
+                avsysml.append(indent + "state " + stateinfo.getPreName() + " : '#AvatarPreSendState' = '#AvatarPreSendState' (\n");
                 indent += indentStep;
                 avsysml.append(indent + "request =\n");
                 indent += indentStep;
@@ -434,11 +437,10 @@ public class Avatar2SysML {
                 indent = indent.substring(2 * indentStepSize);
                 avsysml.append(indent + ");\n");
                 // its transition
-                sysMLtransitions.append(indent + "transition : '#AvatarTransition' first " + prestatename +
+                sysMLtransitions.append(indent + "transition : '#AvatarTransition' first " + stateinfo.getPreName() +
                         " then " + stateinfo.getName() + ";\n");
             } else {
-                String prestatename = prereceiveStateSysMLname(stateinfo.getNumber());
-                avsysml.append(indent + "state " + prestatename + " : '#AvatarPreReceiveState' = '#AvatarPreReceiveState' (\n");
+                avsysml.append(indent + "state " + stateinfo.getPreName() + " : '#AvatarPreReceiveState' = '#AvatarPreReceiveState' (\n");
                 indent += indentStep;
                 avsysml.append(indent + "request =\n");
                 indent += indentStep;
@@ -446,7 +448,7 @@ public class Avatar2SysML {
                 indent = indent.substring(2 * indentStepSize);
                 avsysml.append(indent + ");\n");
                 // its transition
-                sysMLtransitions.append(indent + "transition : '#AvatarTransition' first " + prestatename + "\n");
+                sysMLtransitions.append(indent + "transition : '#AvatarTransition' first " + stateinfo.getPreName() + "\n");
                 indent += indentStep;
                 String doAction = receiveActions2SysM(signalinfo, aos.getValues());
                 if (doAction.length() == 0)
@@ -460,6 +462,7 @@ public class Avatar2SysML {
         }
     }
     void transitionsAndRequests(String srcName, List<AvatarStateMachineElement> nexts, String poolName) {
+        requirePreCom.clear();
         sysMLtransitions.delete(0, sysMLtransitions.length());
         sysMLrequests.delete(0, sysMLrequests.length());
         int nb = nexts.size();
@@ -504,10 +507,7 @@ public class Avatar2SysML {
 
         if((at.getActions()!=null && at.getActions().size()!=0) && target instanceof AvatarActionOnSignal) { // preCommunication Required
             requirePreCom.add((AvatarActionOnSignal)target);
-            if (((AvatarActionOnSignal)target).isSending())
-                tgtName = presendStateSysMLname(stateMap.get(target).getNumber());
-            else
-                tgtName = prereceiveStateSysMLname(stateMap.get(target).getNumber());
+            tgtName = stateMap.get(target).getPreName();
         }
         else {
             tgtName = stateMap.get(target).getName();
@@ -639,7 +639,7 @@ public class Avatar2SysML {
             if(aa instanceof AvatarActionAssignment) {
                 AvatarLeftHand lh = ((AvatarActionAssignment)aa).getLeftHand();
                 if(lh instanceof AvatarAttribute) { // tuples are not yet handled
-                    result.append(indent + "then assign " + attributeSysMLname(aa.getName()) + ":= ");
+                    result.append(indent + "then assign " + attributeSysMLname(lh.getName()) + ":= ");
                      result.append(expr2SysML(((AvatarActionAssignment)aa).getRightHand().getName()) + ";\n");
                 }
             }
diff --git a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLNames.java b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLNames.java
index 95aecb0c9a36a3509c3d473c3b3924a73e8b55f1..40eb82e70d8273e4c3fc26ee3e38b1a0dd8c1e67 100644
--- a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLNames.java
+++ b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLNames.java
@@ -68,13 +68,13 @@ public class Avatar2SysMLNames {
 
     public static String startStateSysMLname(){ return "'@st:start'"; }
     public static String stopStateSysMLname(){ return "'@st:stop'"; }
-    public static String standardStateSysMLname(int number){ return "'@st:state" + number + "'"; }
-    public static String randomStateSysMLname(int number){ return "'@st:random" + number + "'"; }
-    public static String countStateSysMLname(int number){ return "'@st:count" + number + "'"; }
-    public static String sendStateSysMLname(int number){ return "'@st:send" + number + "'"; }
-    public static String receiveStateSysMLname(int number){ return "'@st:receive" + number + "'"; }
-    public static String presendStateSysMLname(int number){ return "'@st:presend" + number + "'"; }
-    public static String prereceiveStateSysMLname(int number){ return "'@st:prereceive" + number + "'"; }
+    public static String standardStateSysMLname(String name){ return "'@st:standard." + name + "'"; }
+    public static String randomStateSysMLname(int number){ return "'@st:random." + number + "'"; }
+    public static String countStateSysMLname(String sigName, int number){ return "'@st:count." + sigName + "." + number + "'"; }
+    public static String sendStateSysMLname(String sigName, int number){ return "'@st:send." + sigName + "." + number + "'"; }
+    public static String receiveStateSysMLname(String sigName, int number){ return "'@st:receive." + sigName + "." + number + "'"; }
+    public static String presendStateSysMLname(String sigName, int number){ return "'@st:presend." + sigName + "." + number + "'"; }
+    public static String prereceiveStateSysMLname(String sigName, int number){ return "'@st:prereceive." + sigName + "." + number + "'"; }
 
     public static String expr2SysML(String _expr){ return "expression"; } // TO IMPLEMENT