diff --git a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java
index 74fa75495879666df5f73f2ead3282efed37d339..c675dac9ec410e65774c032b97d412070e794ccf 100644
--- a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java
+++ b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java
@@ -529,7 +529,8 @@ public class Avatar2SysML {
         // timers -------------------
         if (timerList != null && timerList.size() != 0) {
             avsysml.append("\n" + indent + "// Timers ---------------------\n");
-            for (AvatarAttribute timer : timerList) timer2SysML(timer);
+            for (AvatarAttribute timer : timerList)
+                avsysml.append(indent + "part " + timerBlockSysMLname(timer.getName()) + ": '#AvatarTimer' = '#AvatarTimer'();\n");
         }
         // sub-blocks -------------------
         List<AvatarBlock> subBlockList = new ArrayList<AvatarBlock>();
@@ -549,21 +550,6 @@ public class Avatar2SysML {
         for(AvatarBlock block: avspec.getListOfBlocks())
             if (block.getFather() == null) block2SysML(block);
     }
-    void timer2SysML(AvatarAttribute timer) {
-        String relationname = timerRelationSysMLname(timer.getName());
-        String settimername = setTimerChannelSysMLname(timer.getName());
-        String resettimername = resetTimerChannelSysMLname(timer.getName());
-        String expiretimername = expireTimerChannelSysMLname(timer.getName());
-        String timerblockname = timerBlockSysMLname(timer.getName());
-        avsysml.append(indent + "part " + relationname + ": '#Timer_Rel';\n");
-        avsysml.append(indent + "part " + settimername + ": '#Sync' = '#Sync'('@relation' = " + relationname + ");\n");
-        avsysml.append(indent + "part " + resettimername + ": '#Sync' = '#Sync'('@relation' = " + relationname + ");\n");
-        avsysml.append(indent + "part " + expiretimername + ": '#Sync' = '#Sync'('@relation' = " + relationname + ");\n");
-        avsysml.append(indent + "part " + timerblockname + ": '#AvatarTimer';\n");
-        avsysml.append(indent + "bind " + timerblockname + ".set = " + settimername + ";\n");
-        avsysml.append(indent + "bind " + timerblockname + ".reset = " + resettimername + ";\n");
-        avsysml.append(indent + "bind " + timerblockname + ".expire = " + expiretimername + ";\n");
-    }
     Boolean stopState;
     void statemachine2SysML(AvatarStateMachine asm) {
         stateList.clear();
@@ -775,7 +761,7 @@ public class Avatar2SysML {
                     avsysml.append(indent + "'@request' =\n");
                     indent += indentStep;
                     avsysml.append(setTimerRequest2SysML(1, "0", "0",
-                            setTimerChannelSysMLname(((AvatarSetTimer) aos).getTimer().getName()),
+                            timerBlockSysMLname(((AvatarResetTimer) aos).getTimer().getName()) + ".set" ,
                             ((AvatarSetTimer)aos).getTimerValue()) + "\n");
                     indent = indent.substring(2 * indentStepSize);
                     avsysml.append(indent + ");\n");
@@ -791,7 +777,7 @@ public class Avatar2SysML {
                     avsysml.append(indent + "'@request' =\n");
                     indent += indentStep;
                     avsysml.append(resetTimerRequest2SysML(1, "0", "0",
-                            resetTimerChannelSysMLname(((AvatarResetTimer) aos).getTimer().getName())) + "\n");
+                            timerBlockSysMLname(((AvatarResetTimer) aos).getTimer().getName()) + ".reset" ) + "\n");
                     indent = indent.substring(2 * indentStepSize);
                     avsysml.append(indent + ");\n");
                     // its transition
@@ -805,7 +791,7 @@ public class Avatar2SysML {
                     avsysml.append(indent + "'@request' =\n");
                     indent += indentStep;
                     avsysml.append(expireTimerRequest2SysML(1, "0", "0",
-                            expireTimerChannelSysMLname(((AvatarExpireTimer) aos).getTimer().getName())) + "\n");
+                            timerBlockSysMLname(((AvatarResetTimer) aos).getTimer().getName()) + ".expire" ) + "\n");
                     indent = indent.substring(2 * indentStepSize);
                     avsysml.append(indent + ");\n");
                     // its transition
@@ -925,18 +911,18 @@ public class Avatar2SysML {
             sysMLrequests.append(setTimerRequest2SysML(transindex,
                     expr2SysML(minDelay),
                     expr2SysML(maxDelay),
-                    setTimerChannelSysMLname(((AvatarTimerOperator) target).getTimer().getName()),
+                    timerBlockSysMLname(((AvatarTimerOperator) target).getTimer().getName()) + ".set",
                     ((AvatarSetTimer) target).getTimerValue()));
         else  if (requestType == 4) // Reset
             sysMLrequests.append(resetTimerRequest2SysML(transindex,
                     expr2SysML(minDelay),
                     expr2SysML(maxDelay),
-                    resetTimerChannelSysMLname(((AvatarTimerOperator) target).getTimer().getName())));
+                    timerBlockSysMLname(((AvatarTimerOperator) target).getTimer().getName()) + ".reset" ));
         else // Expire
             sysMLrequests.append(expireTimerRequest2SysML(transindex,
                     expr2SysML(minDelay),
                     expr2SysML(maxDelay),
-                    expireTimerChannelSysMLname(((AvatarTimerOperator) target).getTimer().getName())));
+                    timerBlockSysMLname(((AvatarTimerOperator) target).getTimer().getName()) + ".expire" ));
         if(guarded) {
             indent = indent.substring(indentStepSize);
             sysMLrequests.append("\n" + indent + "else '#nok_request'(" + transindex + ")");
diff --git a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLNames.java b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLNames.java
index 2921120b8b9fdd9cb617a8320cbf585e5ad3c744..c273cd970cdac5493b6d07e0a624a67470eb51c0 100644
--- a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLNames.java
+++ b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLNames.java
@@ -103,11 +103,6 @@ public class Avatar2SysMLNames {
     public static String preresetTimerStateSysMLname(String timerName, int number){ return "'@st:prereset." + timerName.trim() + "." + number + "'"; }
     public static String preexpireTimerStateSysMLname(String timerName, int number){ return "'@st:preexpire." + timerName.trim() + "." + number + "'"; }
     public static String timerBlockSysMLname(String timerName){ return "'@tmr:" + timerName.trim() + "'"; }
-    public static String timerRelationSysMLname(String timerName){ return "'@TMRRel:" + timerName.trim() + "'"; }
-    public static String setTimerChannelSysMLname(String timerName){ return "'@ch:set." + timerName.trim() + "'"; }
-    public static String resetTimerChannelSysMLname(String timerName){ return "'@ch:reset." + timerName.trim() + "'"; }
-    public static String expireTimerChannelSysMLname(String timerName){ return "'@ch:expire." + timerName.trim() + "'"; }
-
     public static String expr2SysML(String _expr) {
         Avatar2SysMLParser parser = new Avatar2SysMLParser(new Avatar2SysMLLexer(new StringReader (_expr)));
         try { return (String)parser.parse().value; }
diff --git a/src/main/java/avatartranslator/tosysmlv2/static/AvatarBlockTypes.sysml b/src/main/java/avatartranslator/tosysmlv2/static/AvatarBlockTypes.sysml
index 1315b963003f8acf4a3aac0817809a3720c931b9..8c169958eb78fe6fc03ddca97781ff13eae734b3 100644
--- a/src/main/java/avatartranslator/tosysmlv2/static/AvatarBlockTypes.sysml
+++ b/src/main/java/avatartranslator/tosysmlv2/static/AvatarBlockTypes.sysml
@@ -12,6 +12,8 @@ package AvatarBlockTypes {
 	state def '#AvatarStateMachine'{
 		item localClock : Clock redefines localClock = systemClock ;
 	}
+	action def '#ReceiveAction';
+	action def '#TransitionAction';
 			
 	abstract state def '#AvatarState' {
         protected item '@pool'[0..*] : '#Request' default '#immediate_request';
@@ -98,80 +100,85 @@ package AvatarBlockTypes {
     // Block type for timers
     part def '#AvatarTimer' :> '#AvatarBlock' {
 
-        attribute '$value' : Integer := 0;
+        private attribute value : Integer := 0;
 
-        part set : '#Sync';
-        part reset : '#Sync';
-        part expire : '#Sync';
+        private part t_rel: '#Sync_Rel';
+        part set : '#Sync' = '#Sync'('@relation' = t_rel);
+        part reset : '#Sync' = '#Sync'('@relation' = t_rel);
+        part expire : '#Sync' = '#Sync'('@relation' = t_rel);
 
-        // state-machine description +++++
+        // state-machine -------------------
         exhibit state '@statemachine' : '#AvatarStateMachine' {
 
-            entry action '@st:start' :'#AvatarStartState';
+            entry action startstate :'#AvatarStartState';
 
-            transition : '#AvatarTransition' first '@st:start'
-                then '@st:standard.wait4set';
+            transition : '#AvatarTransition' first startstate
+                then st_wait4set;
 
-            state '@st:standard.wait4set' : '#AvatarStandardState' = '#AvatarStandardState'(
-                '@pool' = ( '#ReceiveRequest'('@index'= 1, '@channel'= set),
-                         '#ReceiveRequest'('@index'= 2, '@channel'= reset ) )
+            state st_wait4set : '#AvatarStandardState' = '#AvatarStandardState'(
+                '@pool' = (
+                    '#ReceiveRequest'('@channel'= set),
+                    '#ReceiveRequest'('@index' =  2,'@channel'= reset) )
             );
 
-            transition : '#AvatarTransition' first '@st:standard.wait4set' if '@index' == 1
-                do action {
+            transition : '#AvatarTransition' first st_wait4set if '@index' == 1
+                do action : '#ReceiveAction' {
                     item msg : '#TimerSetMsg' = '@payload' as '#TimerSetMsg';
-                    first start; then assign '$value' := msg.'value'; then done;
-                } then '@st:receive.set.0';
+                    first start; then assign value := msg.value; then done;
+                } then rcv_set_0;
 
-            transition : '#AvatarTransition' first '@st:standard.wait4set' if '@index' == 2
-                then '@st:receive.reset.4';
+            transition : '#AvatarTransition' first st_wait4set if '@index' == 2
+                then rcv_reset_2;
 
-            state '@st:standard.wait4expire' : '#AvatarStandardState' = '#AvatarStandardState'(
+            state st_wait4expire : '#AvatarStandardState' = '#AvatarStandardState'(
                 '@pool' = (
-                    '#ReceiveRequest'('@index'= 1, '@channel'= set),
-                    '#SendRequest'('@index'= 2, '@channel'= expire,
-                        '@delay' = '#bound_random'('$value', '$value'),
-                        '@payload' = '#TimerExpireMsg'()),
-                    '#ReceiveRequest'('@index'= 3, '@channel'= reset) )
+                    '#ReceiveRequest'('@channel'= set),
+                    '#SendRequest'(
+                        '@index' =  2,
+                        '@channel'= expire,
+                        '@delay' = value,
+                        '@payload' = '#TimerExpireMsg'()
+                    ),
+                    '#ReceiveRequest'('@index' =  3,'@channel'= reset)
+                )
             );
 
-            transition : '#AvatarTransition' first '@st:standard.wait4expire' if '@index' == 1
-                do action {
+            transition : '#AvatarTransition' first st_wait4expire if '@index' == 1
+                do action : '#ReceiveAction' {
                     item msg : '#TimerSetMsg' = '@payload' as '#TimerSetMsg';
-                    first start; then assign '$value' := msg.'value'; then done;
-                } then '@st:receive.set.2';
-
-            transition : '#AvatarTransition' first '@st:standard.wait4expire' if '@index' == 2
-                then '@st:send.expire.0';
+                    first start; then assign value := msg.'value'; then done;
+                } then rcv_set_1;
 
-            transition : '#AvatarTransition' first '@st:standard.wait4expire' if '@index' == 3
-                then '@st:receive.reset.6';
+            transition : '#AvatarTransition' first st_wait4expire if '@index' == 2
+                then snd_expire_0;
 
-            state '@st:receive.set.0' : '#AvatarReceiveState';
+            transition : '#AvatarTransition' first st_wait4expire if '@index' == 3
+                then rcv_reset_3;
 
-            transition : '#AvatarTransition' first '@st:receive.set.0'
-                then '@st:standard.wait4expire';
+            state rcv_set_0 : '#AvatarReceiveState';
 
-            state '@st:receive.set.2' : '#AvatarReceiveState';
+            transition : '#AvatarTransition' first rcv_set_0
+                then st_wait4expire;
 
-            transition : '#AvatarTransition' first '@st:receive.set.2'
-                then '@st:standard.wait4expire';
+            state rcv_set_1 : '#AvatarReceiveState';
 
-            state '@st:receive.reset.4' : '#AvatarReceiveState';
+            transition : '#AvatarTransition' first rcv_set_1
+                then st_wait4expire;
 
-            transition : '#AvatarTransition' first '@st:receive.reset.4'
-                then '@st:standard.wait4set';
+            state rcv_reset_2 : '#AvatarReceiveState';
 
-            state '@st:receive.reset.6' : '#AvatarReceiveState';
+            transition : '#AvatarTransition' first rcv_reset_2
+                then st_wait4set;
 
-            transition : '#AvatarTransition' first '@st:receive.reset.6'
-                then '@st:standard.wait4set';
+            state rcv_reset_3 : '#AvatarReceiveState';
 
-            state '@st:send.expire.0' : '#AvatarSendState';
+            transition : '#AvatarTransition' first rcv_reset_3
+                then st_wait4set;
 
-            transition : '#AvatarTransition' first '@st:send.expire.0'
-                then '@st:standard.wait4set';
+            state snd_expire_0 : '#AvatarSendState';
 
+            transition : '#AvatarTransition' first snd_expire_0
+                then st_wait4set;
         }
-	}
+    }
 }