diff --git a/src/main/java/avatartranslator/AvatarDataType.java b/src/main/java/avatartranslator/AvatarDataType.java
index f9e28f60bbe01f2405a9d0712ea1c53ae3a7f689..aa1431a270a299185c6a5486b246f71559301323 100644
--- a/src/main/java/avatartranslator/AvatarDataType.java
+++ b/src/main/java/avatartranslator/AvatarDataType.java
@@ -11,19 +11,27 @@ public class AvatarDataType {
     public final static int DATATYPE = 2;
     public static Map<String,AvatarDataType> dataTypeMap = new HashMap<String,AvatarDataType>();
     private String name;
-    private List<String> fieldNames = new ArrayList<String>();
-    private List<Integer> fieldTypes = new ArrayList<Integer>();
-    private List<String> dataTypeNames = new ArrayList<String>();
-    private int size = -1;
+    private List<String> fieldStrings;
+    private List<String> fieldNames;
+    private List<Integer> fieldTypes;
+    private List<String> dataTypeNames;
+    private int size;
 
     public AvatarDataType(String _name) {
         name = _name;
+        fieldStrings = new ArrayList<String>();
+        fieldNames = new ArrayList<String>();
+        fieldTypes = new ArrayList<Integer>();
+        dataTypeNames = new ArrayList<String>();
+        size = -1;
     }
+    public String getName() { return name; }
     public int getFullSize() { return size; }
     public int getNbFields() { return fieldNames.size(); }
-    String getFieldName(int _i) { return fieldNames.get(_i); }
+    public String getFieldName(int _i) { return fieldNames.get(_i); }
+    public String getFieldString(int _i) { return fieldStrings.get(_i); }
     public int getFieldType(int _i) { return fieldTypes.get(_i); }
-    String getDataTypeNameName(int _i) { return dataTypeNames.get(_i); }
+    public String getDataTypeNameName(int _i) { return dataTypeNames.get(_i); }
     public void addField(String _fieldName, int _fieldType, String _dataTypeName) {
         if (size != -1) return; // DataType has already been finalized
         if (_fieldType == AvatarDataType.INTEGER || _fieldType == AvatarDataType.BOOLEAN)
@@ -41,15 +49,18 @@ public class AvatarDataType {
         int length = adt.getNbFields();
         for (int i = 0; i < length; i++) {
             if (adt.getFieldType(i) == AvatarDataType.INTEGER || adt.getFieldType(i) == AvatarDataType.BOOLEAN) {
+                adt.fieldStrings.add(adt.fieldNames.get(i));
                 size += 1;
                 continue;
             }
-            AvatarDataType fieldDataType = dataTypeMap.get(i);
+            AvatarDataType fieldDataType = dataTypeMap.get(adt.getDataTypeNameName(i));
             if (fieldDataType == null)  return;
             finalize(fieldDataType); // loops if recursion => recursive types are forbidden
             int fieldSize = fieldDataType.getFullSize();
             if (fieldSize == -1)  return;
             size += fieldSize;
+            for(int j=0; j<fieldSize; j++)
+                adt.fieldStrings.add(adt.fieldNames.get(i) + "__" + fieldDataType.getFieldString(i));
         }
         adt.size = size;
     }
diff --git a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java
index 4f1573a6f3a68169e7b64e1132d2125aa05d8318..eeec4f2e6f74fbe005aa2ba4481ee9d0538e9a51 100644
--- a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java
+++ b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java
@@ -53,19 +53,55 @@ public class Avatar2SysML {
     /**
      * Memorized while declaring channels, to be reused for generating states
      */
-    class SignalInfo {
+    class MethodInfo {
         private String name;
-        private String msgtype;
-        private ArrayList<String> profile;
-       SignalInfo(String _name, String _msgtype) {
+        private String msgtype; // null for methods that are not signals
+        private ArrayList<String> fieldNames;
+        private ArrayList<Integer> fieldTypes;
+        private ArrayList<AvatarDataType> dataTypes;
+        private int returnType;
+        private AvatarDataType returnDataType;
+
+       MethodInfo(String _name) { // for void methods
             name = _name;
-            msgtype = _msgtype;
-            profile = new ArrayList<String>();
+            msgtype = null;
+            fieldNames = new ArrayList<String>();
+            returnType = -1;
+            returnDataType = null;
         }
-        public void addField(String _fieldName){ profile.add(_fieldName); }
-        public String getName(){ return name; }
-        public String getMessageType(){ return msgtype; }
-        public List<String> getProfile(){ return profile; }
+       MethodInfo(String _name, int _returnType, AvatarDataType dt) { // for non-void methods
+            name = _name;
+            msgtype = null;
+            fieldNames = new ArrayList<String>();
+            returnType = _returnType;
+            if (_returnType != AvatarDataType.DATATYPE)
+                returnDataType = null;
+            else
+                returnDataType = dt;
+        }
+       MethodInfo(String _name, String _msgtype) { // for signals
+            name = _name;
+            msgtype = _msgtype;
+            fieldNames = new ArrayList<String>();
+            returnType = -1;
+            returnDataType = null;
+       }
+       public void addField(String _fieldName, int _type, AvatarDataType _dt){
+           if (_type == AvatarDataType.DATATYPE)
+               dataTypes.add(_dt);
+           else if (!(_type == AvatarDataType.BOOLEAN || _type == AvatarDataType.INTEGER))
+               return; // unknown type
+           fieldNames.add(_fieldName);
+           fieldTypes.add(_type);
+       }
+       public int getArity() { return fieldNames.size(); }
+       public String getName(){ return name; }
+       public String getMessageType(){ return msgtype; }
+       public int getReturnType(){ return returnType; }
+       public AvatarDataType getReturnDataType(){ return returnDataType; }
+       public String getFieldName(int i){ return fieldNames.get(i); }
+       public int getFieldType(int i){ return fieldTypes.get(i); }
+       public AvatarDataType getDataType(int i){ return dataTypes.get(i); }
     }
    /**
      * Memorized while naming states, to be reused for generating states
@@ -89,12 +125,12 @@ public class Avatar2SysML {
     StringBuffer avsysml;
 
     HashSet<AvatarSignal> fifoSet = new HashSet<AvatarSignal>();
-    HashMap<AvatarSignal, SignalInfo> signalMap = new HashMap<AvatarSignal, SignalInfo>();
+    HashMap<AvatarMethod, MethodInfo> methodMap = new HashMap<AvatarMethod, MethodInfo>();
     HashMap<AvatarStateMachineElement, StateInfo> stateMap = new HashMap<AvatarStateMachineElement, StateInfo>();
     ArrayList<AvatarStateMachineElement> stateList = new ArrayList<AvatarStateMachineElement>();
     ArrayList<AvatarAttribute> timerList = new ArrayList<AvatarAttribute>();
 
-    void searcCountSignals() {
+    void searchCountSignals() {
         fifoSet.clear();
         for(AvatarBlock block: avspec.getListOfBlocks()) {
             for(AvatarStateMachineElement sme : block.getStateMachine().getListOfElements()) {
@@ -132,20 +168,54 @@ public class Avatar2SysML {
 
 
     StringBuffer avatar2SysML() {
-        signalMap.clear();
+        methodMap.clear();
         stateMap.clear();
         stateList.clear();
         blockChain.clear();
         blockLinks = new StringBuffer(indentStep + "// Block Shortcut Links $$$$$$$$$$$$\n");
         avsysml = new StringBuffer(header);
         indent += indentStep;
-        searcCountSignals();;
+        searchCountSignals();;
+        dataTypes2SysML();
         communications2SysML();
         blocks2SysML();
         avsysml.append(blockLinks);
         avsysml.append("}\n");
         return avsysml;
     }
+    String removeFieldName(String fullName, AvatarDataType dt) {
+        if (fullName == null || dt.getNbFields() == 0) return fullName;
+        String fieldString = dt.getFieldString(0);
+        if (fieldString.equals(fullName.substring(fullName.length() - fieldString.length())))
+            return fullName.substring(0,fullName.length() - fieldString.length());
+        else
+            return null;
+    }
+    void dataTypes2SysML(){
+        if (avspec.getDataTypes() == null || avspec.getDataTypes().size() == 0) return;
+        avsysml.append("\n" + indent + "// DATATYPES $$$$$$$$$$$$$$$$$$$$$$$$\n");
+        for(AvatarDataType dt : avspec.getDataTypes()){
+            avsysml.append("\n" + indent + "attribute def " + dataTypeSysMLname(dt.getName()) + " :> '#AvatarDataType");
+            int nbFields = dt.getNbFields();
+            if (nbFields == 0)
+                avsysml.append(";\n");
+            else {
+                avsysml.append(" { \n");
+                indent += indentStep;
+                for (int i = 0; i < nbFields; i++) {
+                    avsysml.append( indent + "attribute " + dt.getFieldName(i) + " : " );
+                    if (dt.getFieldType(i) == AvatarDataType.BOOLEAN)
+                        avsysml.append("Boolean;\n");
+                    else if (dt.getFieldType(i) == AvatarDataType.INTEGER)
+                        avsysml.append("Integer;\n");
+                    else
+                        avsysml.append(dt.getDataTypeNameName(i) + ";\n");
+                }
+                indent = indent.substring(indentStepSize);
+                avsysml.append(indent + "}\n");
+            }
+        }
+    }
     void communications2SysML(){
         int nbfiforelNumber = 0;
         int bfiforelNumber = 0;
@@ -241,8 +311,8 @@ public class Avatar2SysML {
                 String sig2SYSMLname = signalSysMLname(sig2.getName());
                 String message1SYSMLname = messageSysMLname(blk1,sig1.getName());
                 String message2SYSMLname = messageSysMLname(blk2,sig2.getName());
-                SignalInfo sig1Info = new SignalInfo(sig1SYSMLname, message1SYSMLname);
-                SignalInfo sig2Info = new SignalInfo(sig2SYSMLname, message2SYSMLname);
+                MethodInfo sig1Info = new MethodInfo(sig1SYSMLname, message1SYSMLname);
+                MethodInfo sig2Info = new MethodInfo(sig2SYSMLname, message2SYSMLname);
 
                 // Channel declaration .........................
 
@@ -266,19 +336,35 @@ public class Avatar2SysML {
                 indent += indentStep;
                 // message fields. SysML names preserve Avatar sender and receiver names
                 int channelSize = sig1.getListOfAttributes().size();
-                for (int j=0; j<channelSize; j++) { // browse channels' parameters
-                    String attributeType = (sig1.getListOfAttributes().get(j).isInt() ? "Integer;\n" : "Boolean;\n");
-                    String fieldName1 = fieldSysMLname(sig1.getListOfAttributes().get(j).getName());
-                    String fieldName2 = fieldSysMLname(sig2.getListOfAttributes().get(j).getName());
-               if (in2out) {
-                    msg1Buf.append(indent + "attribute " + fieldName2 + " : " + attributeType);
-                    msg2Buf.append(indent + "attribute " + fieldName1 + " redefines " + fieldName2 + ";\n");
-                } else {
-                    msg1Buf.append(indent + "attribute " + fieldName1 + " : " + attributeType);
-                    msg2Buf.append(indent + "attribute " + fieldName2 + " redefines " + fieldName1 + ";\n");
-                }
-                    sig1Info.addField(fieldName1);
-                    sig2Info.addField(fieldName2);
+                int j=0;
+                int type;
+                String attributeType;
+                String fieldName1;
+                String fieldName2;
+                while (j < channelSize ) { // browse channels' parameters
+                    AvatarDataType dataType = sig1.getListOfAttributes().get(j).getDataType();
+                    if (dataType == null) {
+                        attributeType = (sig1.getListOfAttributes().get(j).isInt() ? "Integer;\n" : "Boolean;\n");
+                        type = (sig1.getListOfAttributes().get(j).isInt() ? AvatarDataType.INTEGER : AvatarDataType.BOOLEAN);
+                        fieldName1 = fieldSysMLname(sig1.getListOfAttributes().get(j).getName());
+                        fieldName2 = fieldSysMLname(sig2.getListOfAttributes().get(j).getName());
+                        j++;
+                    } else {
+                        attributeType = dataTypeSysMLname(dataType.getName()) + ";\n";
+                        type = AvatarDataType.DATATYPE;
+                        fieldName1 = fieldSysMLname(removeFieldName(sig1.getListOfAttributes().get(j).getName(),dataType));
+                        fieldName2 = fieldSysMLname(removeFieldName(sig2.getListOfAttributes().get(j).getName(),dataType));
+                        j += dataType.getFullSize();
+                    }
+                   if (in2out) {
+                        msg1Buf.append(indent + "attribute " + fieldName2 + " : " + attributeType);
+                        msg2Buf.append(indent + "attribute " + fieldName1 + " redefines " + fieldName2 + ";\n");
+                    } else {
+                        msg1Buf.append(indent + "attribute " + fieldName1 + " : " + attributeType);
+                        msg2Buf.append(indent + "attribute " + fieldName2 + " redefines " + fieldName1 + ";\n");
+                    }
+                    sig1Info.addField(fieldName1, type, dataType);
+                    sig2Info.addField(fieldName2, type, dataType);
                 }
                 indent = indent.substring(indentStepSize);
                 msg1Buf.append(indent + "}\n");
@@ -287,60 +373,76 @@ public class Avatar2SysML {
                 avsysml.append(msg1Buf);
                 avsysml.append(msg2Buf);
 
-                signalMap.put(sig1,sig1Info);
-                signalMap.put(sig2,sig2Info);
+                methodMap.put(sig1,sig1Info);
+                methodMap.put(sig2,sig2Info);
             }
         }
     }
 
-    void attribute2SysML(AvatarAttribute aa) {
-        if (aa.isTimer())
-            timerList.add(aa);
+     void method2SysML(AvatarMethod am){
+        // "return tuple" not handled
+        String returnType;
+        List<AvatarAttribute> returns = am.getListOfReturnAttributes();
+        AvatarDataType returnDataType;
+        MethodInfo methodInfo;
+        if(returns.size() == 0) {
+            returnType = null;
+            methodInfo = new MethodInfo(methodSysMLname(am.getName()));
+        }
         else {
-            avsysml.append(indent + "attribute " + attributeSysMLname(aa.getName()) + " : ");
-            if (aa.isInt()) avsysml.append("Integer");
-            else // if (aa.isBool())
-                avsysml.append("Boolean");
-            if (aa.hasInitialValue()) avsysml.append(" := " + aa.getInitialValue().trim());
-            avsysml.append(";\n");
+            returnDataType = returns.get(0).getDataType();
+            if (returnDataType == null) {
+                String avatarType = returns.get(0).getType().getStringType();
+                if (avatarType.equals("int")) {
+                    returnType = "Integer";
+                    methodInfo = new MethodInfo(methodSysMLname(am.getName()), AvatarDataType.INTEGER, null);
+                } else {
+                    returnType = "Boolean";
+                    methodInfo = new MethodInfo(methodSysMLname(am.getName()), AvatarDataType.BOOLEAN, null);
+                }
+            } else {
+                returnType = dataTypeSysMLname(returnDataType.getName());
+                methodInfo = new MethodInfo(methodSysMLname(am.getName()), AvatarDataType.DATATYPE, returnDataType);
+            }
         }
-    }
-    void field2SysML(AvatarAttribute aa, String prefix) {
-        avsysml.append(indent + prefix + "attribute " + fieldSysMLname(aa.getName()) + " : ");
-        if (aa.isInt()) avsysml.append("Integer;\n");
-        else
-            avsysml.append("Boolean;\n");
-    }
 
-    void method2SysML(AvatarMethod am){
-        // "return tuple" not handled
-        String returnType = null;
-        if(am.getListOfReturnAttributes().size() == 1){
-            String avatarType = am.getListOfReturnAttributes().get(0).getType().getStringType();
-            if (avatarType.equals("int"))
-                returnType = "Integer";
-            else
-                returnType = "Boolean";
-        }
-        if (returnType == null) {
+        if (returnType == null)
             avsysml.append(indent + "action " + methodSysMLname(am.getName()) +  ": '#AvatarVoidMethod' {\n");
-            indent += indentStep;
-            for (AvatarAttribute aa : am.getListOfAttributes()) field2SysML(aa, "in ");
-            indent = indent.substring(indentStepSize);
-            avsysml.append(indent + "}\n");
-        } else {
+        else
             avsysml.append(indent + "calc " + methodSysMLname(am.getName()) +  ": '#AvatarCalcMethod' {\n");
-            indent += indentStep;
-            for (AvatarAttribute aa : am.getListOfAttributes()) field2SysML(aa, "in ");
-            avsysml.append(indent + "return : " + returnType + ";\n");
-            indent = indent.substring(indentStepSize);
-            avsysml.append(indent + "}\n");
+        indent += indentStep;
+
+        int j = 0;
+        int nbFields = am.getListOfAttributes().size();
+        while (j < nbFields) {
+            AvatarAttribute aa = am.getListOfAttributes().get(j);
+            AvatarDataType fieldDataType = aa.getDataType();
+            if (fieldDataType == null) {
+                if (aa.isInt()) {
+                    avsysml.append(indent + "attribute " + fieldSysMLname(aa.getName()) + " : Integer;\n");
+                    methodInfo.addField(fieldSysMLname(aa.getName()), AvatarDataType.INTEGER, null);
+                } else {
+                    avsysml.append(indent + "attribute " + fieldSysMLname(aa.getName()) + " : Boolean;\n");
+                    methodInfo.addField(fieldSysMLname(aa.getName()), AvatarDataType.BOOLEAN, null);
+                }
+                j++;
+            } else {
+                avsysml.append(indent + "attribute " + fieldSysMLname(removeFieldName(aa.getName(), fieldDataType))
+                        + " : " + dataTypeSysMLname(fieldDataType.getName())+ "\n");
+                methodInfo.addField(fieldSysMLname(aa.getName()), AvatarDataType.DATATYPE, fieldDataType);
+                j += fieldDataType.getFullSize();
+            }
         }
+        if (returnType != null)
+            avsysml.append(indent + "return : " + returnType + ";\n");
+        indent = indent.substring(indentStepSize);
+        avsysml.append(indent + "}\n");
+        methodMap.put(am, methodInfo);
     }
 
     void signal2SysML(AvatarSignal as){
 
-        avsysml.append(indent + "part " + signalMap.get(as).getName() + " : " +
+        avsysml.append(indent + "part " + methodMap.get(as).getName() + " : " +
                 (fifoSet.contains(as) ? "'#Fifo'" : "'#Channel'") + ";\n");
     }
     // handling one block
@@ -358,7 +460,30 @@ public class Avatar2SysML {
         // attributes --------------------
         if (block.getAttributes() != null && block.getAttributes().size() != 0) {
             avsysml.append("\n" + indent + "// Attributes ---------------------\n");
-            for (AvatarAttribute aa : block.getAttributes()) attribute2SysML(aa);
+            int j = 0;
+            int nbAttributes = block.getAttributes().size();
+            while(j < nbAttributes)  {
+                AvatarAttribute aa = block.getAttributes().get(j);
+                if (aa.isTimer()) {
+                    timerList.add(aa);
+                    j++;
+                }
+                else {
+                    AvatarDataType dataType = aa.getDataType();
+                    if (dataType == null) {
+                        avsysml.append(indent + "attribute " + attributeSysMLname(aa.getName()) + " : ");
+                        if (aa.isInt()) avsysml.append("Integer");
+                        else avsysml.append("Boolean");
+                        if (aa.hasInitialValue()) avsysml.append(" := " + aa.getInitialValue().trim());
+                        avsysml.append(";\n");
+                        j++;
+                    } else {
+                        avsysml.append(indent + "attribute " + attributeSysMLname(removeFieldName(aa.getName(), dataType)) +
+                                " : " + dataTypeSysMLname(dataType.getName()) + ";\n");
+                        j += dataType.getFullSize();
+                    }
+                }
+            }
         }
         // methods --------------------
         if (block.getMethods() != null && block.getMethods().size() != 0) {
@@ -509,7 +634,7 @@ public class Avatar2SysML {
             avsysml.append(indent + "state_action = '#Assignment'(\n");
             indent += indentStep;
             avsysml.append(indent + "target = " + attributeSysMLname(((AvatarQueryOnSignal)asme).getAttribute().getName()) + ",\n");
-            avsysml.append(indent + "value = " + signalMap.get(((AvatarQueryOnSignal)asme).getSignal()).getName() + ".amount()\n");
+            avsysml.append(indent + "value = " + methodMap.get(((AvatarQueryOnSignal)asme).getSignal()).getName() + ".amount()\n");
             indent = indent.substring(indentStepSize);
             avsysml.append(indent + ")\n");
             indent = indent.substring(indentStepSize);
@@ -577,7 +702,7 @@ public class Avatar2SysML {
         for (AvatarStateMachineElement aos: requirePreCom) {
             StateInfo stateinfo = stateMap.get(aos);
             if (aos instanceof AvatarActionOnSignal) {
-                SignalInfo signalinfo = signalMap.get(((AvatarActionOnSignal)aos).getSignal());
+                MethodInfo signalinfo = methodMap.get(((AvatarActionOnSignal)aos).getSignal());
 
                 if (((AvatarActionOnSignal)aos).isSending()) {
                     // preComm State
@@ -761,13 +886,13 @@ public class Avatar2SysML {
             sysMLrequests.append(sendRequest2SysML(transindex,
                     expr2SysML(minDelay),
                     expr2SysML(maxDelay),
-                     signalMap.get(((AvatarActionOnSignal)target).getSignal()),
+                     methodMap.get(((AvatarActionOnSignal)target).getSignal()),
                     ((AvatarActionOnSignal)target).getValues()));
         else if (requestType == 2) // Receive
             sysMLrequests.append(receiveRequest2SysML(transindex,
                     expr2SysML(minDelay),
                     expr2SysML(maxDelay),
-                    signalMap.get(((AvatarActionOnSignal)target).getSignal())));
+                    methodMap.get(((AvatarActionOnSignal)target).getSignal())));
         else if (requestType == 3) // Set
             sysMLrequests.append(setTimerRequest2SysML(transindex,
                     expr2SysML(minDelay),
@@ -794,7 +919,7 @@ public class Avatar2SysML {
         String doAction;
         indent += indentStep;
         if(requestType == 2)
-            doAction = receiveActions2SysML(signalMap.get(((AvatarActionOnSignal)target).getSignal()), ((AvatarActionOnSignal)target).getValues());
+            doAction = receiveActions2SysML(methodMap.get(((AvatarActionOnSignal)target).getSignal()), ((AvatarActionOnSignal)target).getValues());
         else
             doAction = transitionActions2SysM(at.getActions());
         indent = indent.substring(indentStepSize);
@@ -839,12 +964,12 @@ public class Avatar2SysML {
                 return indent + "'#TrivialRequest'(transition_index= " + index + ", delay= '#bound_random'(" + min + ", " + max + "))";
     }
 
-    String sendRequest2SysML(int index, String min, String max, SignalInfo chinfo, List<String> values) {
+    String sendRequest2SysML(int index, String min, String max, MethodInfo signalInfo, List<String> values) {
         StringBuffer result = new StringBuffer(indent + "'#SendRequest'(\n");
         indent += indentStep;
         if (index != 1)
             result.append(indent + "transition_index= " + index + ",\n");
-        result.append(indent + "channel= " + chinfo.getName() + ",\n");
+        result.append(indent + "channel= " + signalInfo.getName() + ",\n");
         if (max.equals("0")) {
             if (!min.equals("0"))
                 result.append(indent + "delay= " + min + ",\n");
@@ -854,13 +979,25 @@ public class Avatar2SysML {
         else
             result.append(indent + "delay= '#bound_random'(" + min + ", " + max + "),\n");
 
-        if (values.size() == 0)
-            result.append(indent + "payload= " + chinfo.getMessageType() + "()\n");
+        int nbFields = signalInfo.getArity();
+        if (nbFields == 0)
+            result.append(indent + "payload= " + signalInfo.getMessageType() + "()\n");
         else {
-            result.append(indent + "payload= " + chinfo.getMessageType() + "(\n");
+            result.append(indent + "payload= " + signalInfo.getMessageType() + "(\n");
             indent += indentStep;
-            for(String vl : values)
-                result.append(indent + expr2SysML(vl) + ",\n");
+
+            int j = 0;
+            while (j < nbFields) { //for(String vl : values)
+                if (signalInfo.getFieldType(j) != AvatarDataType.DATATYPE) {
+                    result.append(indent + expr2SysML(values.get(j)) + ",\n");
+                    j++;
+                } else {
+                    AvatarDataType dt = signalInfo.getDataType(j);
+                    result.append(indent + expr2SysML(removeFieldName(values.get(j), dt)) + ",\n");
+                    j += dt.getFullSize();
+                }
+            }
+
             result.replace(result.length()-2, result.length(), " )\n");
             indent = indent.substring(indentStepSize);
         }
@@ -911,7 +1048,7 @@ public class Avatar2SysML {
         return result.toString();
     }
 
-    String receiveRequest2SysML(int index, String min, String max, SignalInfo chinfo) {
+    String receiveRequest2SysML(int index, String min, String max, MethodInfo chinfo) {
         StringBuffer result = new StringBuffer(indent + "'#ReceiveRequest'(\n");
         indent += indentStep;
         if (index != 1)
@@ -972,13 +1109,13 @@ public class Avatar2SysML {
         return result.toString();
     }
 
-    String receiveActions2SysML(SignalInfo chinfo, List<String> values) {
+    String receiveActions2SysML(MethodInfo chinfo, List<String> values) {
         if (values == null || values.size() == 0) return "";
         StringBuffer result = new StringBuffer(indent + "do action {\n");
         indent += indentStep;
         result.append(indent + "item msg : " + chinfo.getMessageType() + " = response.payload as " + chinfo.getMessageType() +
                 ";\n" + indent + "first start;\n");
-        List<String> fields = chinfo.getProfile();
+        List<String> fields = null; //chinfo.getFieldName();
         int length = values.size(); // must be equal to fields.size()
         for (int i = 0; i<length; i++) {
             result.append(indent + "then assign " + attributeSysMLname(values.get(i)) + " := msg." + fields.get(i) + ";\n");
diff --git a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLNames.java b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLNames.java
index d8c6524aee69eb7d4b6876d0298b71c000cc1685..fdb472d5715a260512169bf8ca73caf43ddd175c 100644
--- a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLNames.java
+++ b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysMLNames.java
@@ -42,6 +42,7 @@ public class Avatar2SysMLNames {
     public final static int BFIFO = 1;
     public final static int NBFIFO = 2;
 
+    public static String dataTypeSysMLname(String name){ return "'@dt:" + name + "'"; }
     public static String blockSysMLname(String name){ return "'@blk:" + name + "'"; }
     public static String attributeSysMLname(String name){ return "'$" + name + "'"; }
     public static String methodSysMLname(String name){ return "'$" + name + "'"; }