diff --git a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java
index c675dac9ec410e65774c032b97d412070e794ccf..e16fa4bbf12ca626a6e2dc32ba89ce528cd95d21 100644
--- a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java
+++ b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java
@@ -334,15 +334,13 @@ public class Avatar2SysML {
                 avsysml.append(indent + "part " + channelSYSMLname + " : " + channelConstructor + " = "
                         + channelConstructor + "('@relation' = " + relationSYSMLname + ");\n");
                 if (in2out) {
-                    avsysml.append(indent + "bind " + blk1SysMLname + "." + sig1SYSMLname + " = " + channelSYSMLname + "{ attribute '@isInSignal' : " +
-                            "Boolean = true; }\n");
-                    avsysml.append(indent + "bind " + blk2SysMLname + "." + sig2SYSMLname + " = " + channelSYSMLname + "{ attribute '@isInSignal' : " +
-                            "Boolean = false; }\n");
+                    avsysml.append(indent + "binding : '#InSignalBinding' bind " + blk1SysMLname + "." + sig1SYSMLname + " = " + channelSYSMLname +
+                            ";\n");
+                    avsysml.append(indent + "binding : '#OutSignalBinding' bind " + blk2SysMLname + "." + sig2SYSMLname + " = " + channelSYSMLname +
+                            ";\n");
                 } else {
-                    avsysml.append(indent + "bind " + blk1SysMLname + "." + sig1SYSMLname + " = " + channelSYSMLname + " { attribute '@isInSignal' : " +
-                            "Boolean = false; }\n");
-                    avsysml.append(indent + "bind " + blk2SysMLname + "." + sig2SYSMLname + " = " + channelSYSMLname + " { attribute '@isInSignal' : " +
-                            "Boolean = true; }\n");
+                    avsysml.append(indent + "binding : '#OutSignalBinding' bind " + blk1SysMLname + "." + sig1SYSMLname + " = " + channelSYSMLname + ";\n");
+                    avsysml.append(indent + "binding : '#InSignalBinding' bind " + blk2SysMLname + "." + sig2SYSMLname + " = " + channelSYSMLname + ";\n");
                 }
                 // Message declaration .........................
 
diff --git a/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup
index b058ed82cc30f73c9c23044b09a15e02637ed316..c436e4a2e1c65719731d34f834e0647c1143cbd8 100644
--- a/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup
+++ b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup
@@ -2,7 +2,6 @@
 package avatartranslator.fromsml;
 import java_cup.runtime.*;
 parser code {:
-
 :}
 
 /* Terminals (tokens returned by the scanner). */
@@ -63,7 +62,7 @@ non terminal Integer    iexpr, bexpr;
 precedence left OR;
 precedence left AND;
 
-model ::= PACKAGE AVATARNAME LB featureList RB | PACKAGE AVATARNAME LB  RB;
+model ::= PACKAGE AVATARNAME LBRAC featureList RBRAC | PACKAGE AVATARNAME LBRAC  RBRAC;
 featureList ::= feature | feature featureList;
 
 feature ::=
@@ -88,13 +87,33 @@ bfChDecl ::= bfChDeclHEADER fifoChDeclBODY;
     | messageDecl
     | blockDecl
     | blockAlias
-
-
-expr    ::=
-     PARSE_BOOL bexpr:e  {: RESULT = lexer.getExpressions().getBExpr(e.intValue());
-                            lexer.getExpressions().freeBool(e.intValue()); :}
-   | PARSE_INT iexpr:e   {: RESULT = lexer.getExpressions().getIExpr(e.intValue());
-                            lexer.getExpressions().freeInt(e.intValue()); :}
+;
+datatypeDeclHEADER ::=
+    | ATTRIBUTE DEF DATATYPENAME SPECIALIZES AVDATATYPE
+    | ATTRIBUTE DEF AVATARNAME SPECIALIZES AVDATATYPE
+;
+syncRelDeclHEADER ::=
+    | PART RELATIONNAME SPECIALIZES SYNCREL_T
+    | PART AVATARNAME SPECIALIZES SYNCREL_T
+;
+bfRelDeclHEADER ::=
+    | PART RELATIONNAME SPECIALIZES BFIFOREL_T
+    | PART AVATARNAME SPECIALIZES BFIFOREL_T
+;
+nbfRelDeclHEADER ::=
+    | PART RELATIONNAME SPECIALIZES NBFIFOREL_T
+    | PART AVATARNAME SPECIALIZES NBFIFOREL_T
+;
+syncChDeclHEADER ::=
+    | PART CHANNELNAME SPECIALIZES SYNC_T
+    | PART AVATARNAME SPECIALIZES SYNC_T
+;
+bfChDeclHEADER ::=
+    | PART CHANNELNAME SPECIALIZES BFIFO_T
+    | PART AVATARNAME SPECIALIZES BFIFO_T
+;
+nbfChDeclHEADER ::=
+    | PART CHANNELNAME SPECIALIZES NBFIFO_T
+    | PART AVATARNAME SPECIALIZES NBFIFO_T
 ;
 
-Spec ::= Blocs Interconnections
diff --git a/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jflex b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jflex
index c5e76d83c3381fad59da290e9ead077e9c640736..a674bde092171f0a70798d0ed8d8a042a0521769 100644
--- a/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jflex
+++ b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jflex
@@ -81,9 +81,9 @@ expireTimerChannelName = "'@ch:expire." AvIdent "'"
                   catch (NumberFormatException nfe) { throw new Exception ("Lexer : Integer Format : " + yytext()); }
                 }
 
- "=="           { return new Symbol(XX#Symb.EQ, yyline, yycolumn); }
- "true"         { return new Symbol(XX#Symb.TRUE, yyline, yycolumn); }
- "false"        { return new Symbol(XX#Symb.FALSE, yyline, yycolumn); }
+ "=="            { return new Symbol(XX#Symb.EQ, yyline, yycolumn); }
+ "true"          { return new Symbol(XX#Symb.TRUE, yyline, yycolumn); }
+ "false"         { return new Symbol(XX#Symb.FALSE, yyline, yycolumn); }
   "("            { return new Symbol(XX#Symb.LPAR, yyline, yycolumn); }
   ")"            { return new Symbol(XX#Symb.RPAR, yyline, yycolumn); }
   "{"            { return new Symbol(XX#Symb.LBRAC, yyline, yycolumn); }
@@ -260,6 +260,7 @@ expireTimerChannelName = "'@ch:expire." AvIdent "'"
   "send"             { return new Symbol(XX#Symb.SEND, yyline, yycolumn); }
   "snapshot"         { return new Symbol(XX#Symb.SNAPSHOT, yyline, yycolumn); }
   "specializes"      { return new Symbol(XX#Symb.SPECIALIZES, yyline, yycolumn); }
+  ":>"               { return new Symbol(XX#Symb.SPECIALIZES, yyline, yycolumn); }
   "stakeholder"      { return new Symbol(XX#Symb.STAKEHOLDER, yyline, yycolumn); }
   "state"            { return new Symbol(XX#Symb.STATE, yyline, yycolumn); }
   "subject"          { return new Symbol(XX#Symb.SUBJECT, yyline, yycolumn); }