diff --git a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java
index 89900a55c3ffb724e0e3a30d5c859bedc92f154b..0026b42853df9be0ab3689c9aa6331285f3f5dc7 100644
--- a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java
+++ b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java
@@ -208,6 +208,10 @@ public class AvatarFromSysML {
         List<AvatarDataType> dataTypeList;
         public BuildBlock(){}
         public void accept(String n, StxBlock blk) {
+            if (!blk.isDeclared()) {
+                addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR,
+                        "block " + blk.getName() +"has been used but has not been declared"));
+            }
             AvatarBlock theBlock = getBlock(blk);
             avSpec.addBlock(theBlock);
             // set father
@@ -271,18 +275,19 @@ public class AvatarFromSysML {
                 theBlock.addMethod(am);
                 buildProfile(sm, am, theBlock);
                 String returnType = sm.getReturnType();
-                if (returnType == null) continue;
+                if (returnType == null || returnType.length() == 0) continue;
                 if (returnType.equals("Integer"))
-                    am.addReturnParameter(new AvatarAttribute("return__0", AvatarType.INTEGER, theBlock, null));
+                    am.addOriginalReturnParameter(new AvatarAttribute("return", AvatarType.INTEGER, theBlock, null));
                 else if (returnType.equals("Boolean"))
-                    am.addReturnParameter(new AvatarAttribute("return__0", AvatarType.BOOLEAN, theBlock, null));
+                    am.addOriginalReturnParameter(new AvatarAttribute("return", AvatarType.BOOLEAN, theBlock, null));
                 else {
                     AvatarDataType adt = avSpec.getDataTypeByName(returnType);
-                    int nbFields = adt.getAttributeNb();
-                    for (int j = 0; j < nbFields; j++) {
-                        AvatarType type = adt.getFieldStringType(j);
-                        am.addReturnParameter(new AvatarAttribute("return__" + j, type, theBlock, null));
-                    }
+                    if (adt == null)
+                        addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, sm.getLeft(),
+                                "unknown type for method return parameter", null));
+                    AvatarAttribute ret = new AvatarAttribute("return", AvatarType.UNDEFINED, theBlock, null);
+                    ret.setDataType(adt);
+                    am.addOriginalReturnParameter(ret);
                 }
             }
             // add Signals (build profile delayed)
@@ -291,7 +296,35 @@ public class AvatarFromSysML {
                 StxSignal ss = blk.getSignal(i);
                 AvatarSignal as = getSignal(ss);
                 theBlock.addSignal(as);
-                buildProfile((ss.isInput() ? ss.getChannel().getInProfile() : ss.getChannel().getOutProfile()), as, theBlock);
+                StxChannel ch = ss.getChannel();
+                if (ch == null) {
+                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, ss.getLeft(),
+                            "channel of signal " + ss.getName() + " has not been set"));
+                    continue;
+                }
+                if (!ch.isDeclared()) {
+                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, ss.getLeft(),
+                            "channel of signal " + theBlock.getName() + "." + ss.getName() + " has not been declared"));
+                    continue;
+                }
+                if (ss.isInput()) {
+                    StxInMessage im = ss.getChannel().getInProfile();
+                    if (im == null) {
+                        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, ss.getLeft(),
+                                "input profile of signal " + ss.getName() + " has not been set"));
+                        continue;
+                    }
+                    buildProfile(im, as, theBlock);
+                }
+                else {
+                    StxOutMessage om = ss.getChannel().getOutProfile();
+                    if (om == null) {
+                        addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, ss.getLeft(),
+                                "output profile of signal " + ss.getName() + " has not been set"));
+                        continue;
+                    }
+                    buildProfile(om, as, theBlock);
+                }
             }
             // add states
             StxState[] states = blk.getStates();
@@ -299,6 +332,11 @@ public class AvatarFromSysML {
             AvatarStateMachineElement theSourceState;
             size = states.length;
             for (int i = 0; i < size; i++) {
+                if (! states[i].isDeclared()) {
+                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR,
+                            "state " + theBlock.getName() + "." + states[i].getName() + " is used but not declared"));
+                    continue;
+                }
                 byte stateType = states[i].getType();
                 if (stateType != AvatarFromSysMLSyntax.STXPRESENDSTATE &&
                         stateType != AvatarFromSysMLSyntax.STXPRERECEIVESTATE &&
@@ -315,16 +353,27 @@ public class AvatarFromSysML {
                     int tsize = transitions.size();
                     for (int j = 0; j < tsize; j++) {
                         StxTransition transition = transitions.get(j);
+                        if (transition == null) {
+                            addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, states[i].getLeft(),
+                                    "something is wrong in state " + states[i].getName() + " : null transition found"));
+                            continue;
+                        }
+                        if (! transition.isDeclared()) {
+                            addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getRleft(),
+                                    "transition from state " + states[i].getName() + " in block" + theBlock.getName() +
+                                            "." + states[i].getName() + " is used but not declared" ));
+                            continue;
+                        }
                         AvatarTransition theTransition = new AvatarTransition(theBlock,"", null);
                         transitionList.add(theTransition);
                         asm.addElement(theTransition);
                         theSourceState.addNext(theTransition);
-                        theTransition.setGuard(transition.getGuard());
+                        theTransition.setGuard("",transition.getGuard());
                         String minDelay = transition.getMinDelay().trim();
                         String maxDelay = transition.getMaxDelay().trim();
                         if (minDelay.equals(maxDelay)) maxDelay = "";
-                        theTransition.setDelays(minDelay, maxDelay);
-                        setDistributionLaw(theTransition, transition.getDelayDistributionLaw(),transition.getDelayExtra());
+                        theTransition.setDelays("","", minDelay, maxDelay);
+                        setDistributionLaw(theTransition, transition.getDelayDistributionLaw(),transition.getDelayExtra(), transition);
                         // add actions
                         List<StxAction> actions = transition.getActions(); // should exist only in some cases...
                         int asize = actions.size();
@@ -334,79 +383,190 @@ public class AvatarFromSysML {
                                 String leftHandStr = action.getTarget();
                                 String rightHandStr;
                                 StxTerm value = action.getValue();
-                                if (value instanceof StxId){ rightHandStr = extendIdent(((StxId)value).getString(),blk); }
+                                if (value instanceof StxId){ rightHandStr = ((StxId)value).getString(); }
                                 else if (value instanceof StxExpr){ rightHandStr = ((StxExpr)value).getString(); }
                                 else { rightHandStr = extendCall((StxCall)value,blk); }
-                                AvatarAction act = AvatarTerm.createActionFromString(theBlock, leftHandStr + "=" + rightHandStr);
-                                theTransition.addAction(act);
+                                theTransition.addAction("", leftHandStr + "=" + rightHandStr);
                             }
                             else { // STXMETHODACTION
                                 if (action.getValue() instanceof StxCall) { // else ERROR
                                     String termStr = extendCall((StxCall)action.getValue(),blk);
-                                    theTransition.addAction(AvatarTerm.createActionFromString(theBlock, termStr));
+                                    theTransition.addAction("", termStr);
                                 }
                             }
                         }
-                        if(transition.getTarget().getType() == AvatarFromSysMLSyntax.STXPRESENDSTATE ||
-                           transition.getTarget().getType() == AvatarFromSysMLSyntax.STXPRERECEIVESTATE)
+                        if (transition.getTarget() == null) {
+                            addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                    "something is wrong in transition : no target defined", transition.getRleft()));
+                            continue;
+                        }
+                        if (transition.getTarget().getType() == AvatarFromSysMLSyntax.STXPRESENDSTATE ||
+                           transition.getTarget().getType() == AvatarFromSysMLSyntax.STXPRERECEIVESTATE) {
+                            if (transition.getTarget().getTransitions().size() == 0 ||
+                                transition.getTarget().getTransition(0) == null) {
+                                addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getTarget().getLeft(),
+                                        "something is wrong in precommunication state " + transition.getTarget().getName() +
+                                        " : no outgoing transition"));
+                                continue;
+                            }
+                            byte type = transition.getTarget().getType();
                             transition = transition.getTarget().getTransition(0);
+                            if (type == AvatarFromSysMLSyntax.STXPRESENDSTATE &
+                                    ! ( ( transition.getTarget().getType() == AvatarFromSysMLSyntax.STXSENDSTATE &&
+                                            transition.getType() == AvatarFromSysMLSyntax.STXSENDTRANSITION ) ||
+                                        ( transition.getTarget().getType() == AvatarFromSysMLSyntax.STXSETTIMERSTATE &&
+                                                transition.getType() == AvatarFromSysMLSyntax.STXSETTIMERTRANSITION ) ||
+                                        ( transition.getTarget().getType() == AvatarFromSysMLSyntax.STXRESETTIMERSTATE &&
+                                                transition.getType() == AvatarFromSysMLSyntax.STXRESETTIMERTRANSITION ) )) {
+                                addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getTarget().getLeft(),
+                                        "outgoing transitions from pre-send state must be sending transitions leading to some sending state " +
+                                                "(send/set timer /reset timer)", transition.getLeft()));
+                                continue;
+                            }
+                            if (type == AvatarFromSysMLSyntax.STXPRERECEIVESTATE &
+                                    ! ( ( transition.getTarget().getType() == AvatarFromSysMLSyntax.STXRECEIVESTATE &&
+                                            transition.getType() == AvatarFromSysMLSyntax.STXRECEIVETRANSITION ) ||
+                                        ( transition.getTarget().getType() == AvatarFromSysMLSyntax.STXEXPIRETIMERSTATE &&
+                                                transition.getType() == AvatarFromSysMLSyntax.STXEXPIRETIMERTRANSITION ) )) {
+                                addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getTarget().getLeft(),
+                                        "outgoing transitions from pre-reveive state must be sending transitions leading to some " +
+                                                "receivinging state (receive/expire timer)", transition.getLeft()));
+                                continue;
+                            }
+                        }
 
                         AvatarStateMachineElement tgtState;
                         if (transition.getTarget().getType() == AvatarFromSysMLSyntax.STXSTOPSTATE) {
+                            if (transition.getTarget().getTransitions().size() != 0) {
+                                addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, transition.getTarget().getLeft(),
+                                        "stopstate should not have outgoing transitions"));
+                            }
                             tgtState = new AvatarStopState("StopState", null, theBlock);
                             asm.addElement(tgtState);
                         }
-                        else tgtState =getState(transition.getTarget(), theBlock);
+                        else tgtState = getState(transition.getTarget(), theBlock);
                         theTransition.addNext(tgtState);
 
                         if (transition.getType() == AvatarFromSysMLSyntax.STXSENDTRANSITION) {
                             if(tgtState instanceof AvatarActionOnSignal) {
                                 AvatarActionOnSignal state = (AvatarActionOnSignal)tgtState;
+                                if (transition.getSignal() == null) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getRleft(),
+                                            "sending transition should have an associated signal", transition.getLeft()));
+                                    continue;
+                                }
                                 state.setSignal( getSignal(transition.getSignal()));
+                                if (state.getSignal().isIn()) {
+                                    new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getRleft(),
+                                            "signal of sending transition must be an output signal", transition.getSignal().getLeft());
+                                    continue;
+                                }
+                                if (! transition.getSignal().isDeclared()) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, transition.getRleft(),
+                                            "transition uses a signal " + transition.getSignal().getName() + " that has not been declared"));
+                                    continue;
+                                }
                                 ArrayList<StxTerm> sendPayload = transition.getSendPayload();
-                                int nbParam = sendPayload.size();
-                                for(int u = 0; u < nbParam; u++) {
-                                    StxTerm p = sendPayload.get(u);
-                                    if (p instanceof StxId){
-                                        String[] ids = extendPath(((StxId)p).getString(),blk).split(",");
-                                        for (String id : ids) { state.addValue(id.trim()); }
+                                if (sendPayload != null) {
+                                    int nbParam = sendPayload.size();
+                                    for(int u = 0; u < nbParam; u++) {
+                                        StxTerm p = sendPayload.get(u);
+                                        if (p instanceof StxId){  state.addOriginalValue(((StxId)p).getString()); }
+                                        else if (p instanceof StxExpr){ state.addOriginalValue( ((StxExpr)p).getString() ); }
+                                        else { state.addOriginalValue( extendCall((StxCall)p,blk) ); }
                                     }
-                                    else if (p instanceof StxExpr){ state.addValue( ((StxExpr)p).getString() ); }
-                                    else { state.addValue( extendCall((StxCall)p,blk) ); }
                                 }
                             }
+                            else  {
+                                addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                        "sending transition should lead to a send state", transition.getRleft()));
+                            }
                         }
                         else if (transition.getType() == AvatarFromSysMLSyntax.STXRECEIVETRANSITION) {
                             if(tgtState instanceof AvatarActionOnSignal) {
                                 AvatarActionOnSignal state = (AvatarActionOnSignal)tgtState;
+                                if (transition.getSignal() == null) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getRleft(),
+                                            "receiving transition should have an associated signal", transition.getLeft()));
+                                    continue;
+                                }
                                 state.setSignal(getSignal(transition.getSignal()));
+                                if (! transition.getSignal().isDeclared()) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, transition.getRleft(),
+                                        "transition uses a signal " + transition.getSignal().getName() + " that has not been declared"));
+                                    continue;
+                                }
+                                if (state.getSignal().isOut()) {
+                                    new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getRleft(),
+                                            "signal of receiving transition must be an input signal", transition.getSignal().getLeft());
+                                    continue;
+                                }
+                                if (transition.getSignal().getChannel() == null) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getRleft(),
+                                            "signal of receiving transition doesn't have an associated channel", transition.getSignal().getLeft()));
+                                    continue;
+                                }
                                 StxOutMessage profile = transition.getSignal().getChannel().getOutProfile();
-                                HashMap<String, String> receivePayload = transition.getReceivePayload();
-                                int nbParams = profile.getSize();
-                                for (int k = 0; k < nbParams; k++) {
-                                    String[] ids = extendPath( receivePayload.get(profile.getFieldName(k)), blk).split(",");
-                                    for (String id : ids)  state.addValue(id);
+                                if (profile != null) {
+                                    HashMap<String, String> receivePayload = transition.getReceivePayload();
+                                    int nbParams = profile.getSize();
+                                    for (int k = 0; k < nbParams; k++) {
+                                        state.addOriginalValue(receivePayload.get(profile.getFieldName(k)));
+                                    }
                                 }
                             }
+                            else  {
+                                addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                        "receiving transition should lead to a receive state", transition.getRleft()));
+                            }
                         }
                         else if (transition.getType() == AvatarFromSysMLSyntax.STXSETTIMERTRANSITION) {
                              if(tgtState instanceof AvatarSetTimer) {
                                  AvatarSetTimer state = (AvatarSetTimer) tgtState;
+                                 if (transition.getTimer() == null) {
+                                     addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                             "set-timer transition has no associated timer", transition.getRleft()));
+                                 }
                                  state.setTimer(getTimerByName(transition.getTimer(), theBlock));
-                                 state.setTimerValue(((StxExpr)transition.getSendPayload().get(0)).getString());
+                                 if (transition.getSendPayload() == null || transition.getSendPayload().size() != 1) {
+                                     addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                             "payload of set-timer transition is not well formed", transition.getRleft()));
+                                     continue;
+                                 }
+                                 state.setTimerValue(((StxExpr)transition.getSendPayload().get(0)).getString().replaceAll(".","__"));
+                             }
+                             else  {
+                                 addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                         "set-timer transition should lead to a set-timer state", transition.getRleft()));
                              }
                         }
                         else if (transition.getType() == AvatarFromSysMLSyntax.STXRESETTIMERTRANSITION) {
                             if(tgtState instanceof AvatarResetTimer) {
                                 AvatarResetTimer state = (AvatarResetTimer) tgtState;
+                                if (transition.getTimer() == null) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                             "reset-timer transition has no associated timer", transition.getRleft()));
+                                }
                                 state.setTimer(getTimerByName(transition.getTimer(), theBlock));
                             }
+                             else  {
+                                 addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                         "reset-timer transition should lead to a reset-timer state", transition.getRleft()));
+                             }
                         }
                         else if (transition.getType() == AvatarFromSysMLSyntax.STXEXPIRETIMERTRANSITION) {
                             if(tgtState instanceof AvatarExpireTimer) {
                                 AvatarExpireTimer state = (AvatarExpireTimer) tgtState;
+                                if (transition.getTimer() == null) {
+                                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                             "expire-timer transition has no associated timer", transition.getRleft()));
+                                }
                                 state.setTimer(getTimerByName(transition.getTimer(), theBlock));
                             }
+                             else  {
+                                 addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, transition.getLeft(),
+                                         "expire-timer transition should lead to a expire-timer state", transition.getRleft()));
+                             }
                         }
                         else {}
                    }
@@ -417,7 +577,7 @@ public class AvatarFromSysML {
     private void buildBlocks(){
         stxSpec.getBlockMap().forEach(new BuildBlock());
     }
-    private void setDistributionLaw(AvatarTransition _t, String distributionLaw, HashMap<String,String> delayExtra) {
+    private void setDistributionLaw(AvatarTransition _t, String distributionLaw, HashMap<String,String> delayExtra, StxTransition _st) {
         int law = -1;
         int size;
         if (distributionLaw == null || distributionLaw.equals("")) law = AvatarTransition.DELAY_UNIFORM_LAW;
@@ -429,17 +589,37 @@ public class AvatarFromSysML {
                     break;
                 }
             }
-            if (law == -1) law = AvatarTransition.DELAY_UNIFORM_LAW;
+            if (law == -1) {
+                addError(new AvatarFromSysMLError(AvatarFromSysMLError.HIGHERROR, _st.getLeft(),
+                 "transition with unknown transition law : " + distributionLaw + " (set to uniform)"));
+                law = AvatarTransition.DELAY_UNIFORM_LAW;
+            }
         }
         String extra1 = _t.LABELS_OF_EXTRA_ATTRIBUTES_1[law];
         String extra2 = _t.LABELS_OF_EXTRA_ATTRIBUTES_2[law];
         size = _t.NB_OF_EXTRA_ATTRIBUTES[law];
+        String tmpString;
         if (size > 0) {
+            tmpString = extra1;
             extra1 = delayExtra.get(extra1);
+            if (extra1 == null) {
+                addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, _st.getLeft(),
+                 "transition law : " + distributionLaw + " requires a " + tmpString + " parameter"));
+            }
             if (size > 1) {
+                tmpString = extra2;
                 extra2 = delayExtra.get(extra2);
+                if (extra2 == null) {
+                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, _st.getLeft(),
+                     "transition law : " + distributionLaw + " requires a " + tmpString + " parameter"));
+                }
             }
         }
+        if (delayExtra.size() > size) {
+                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, _st.getLeft(),
+                     "transition law : " + distributionLaw + " has too much parameters"));
+
+        }
         _t.setDistributionLaw(law, extra1, extra2);
     }
     private void buildProfile(StxStructure ss, AvatarMethod am, AvatarBlock b) {
@@ -449,24 +629,22 @@ public class AvatarFromSysML {
             String type = ss.getFieldType(i);
             if (type.equals("Integer")){
                 aa = new AvatarAttribute(ss.getFieldName(i), AvatarType.INTEGER, b, null);
-                am.addParameter(aa);
+                am.addOriginalParameter(aa);
                 aa.setAsConstant(false);
             } else if (type.equals("Boolean")) {
                 aa = new AvatarAttribute(ss.getFieldName(i), AvatarType.BOOLEAN, b, null);
-                am.addParameter(aa);
+                am.addOriginalParameter(aa);
                 aa.setAsConstant(false);
             } else {
                 AvatarDataType adt = avSpec.getDataTypeByName(type);
-                int tsize = adt.getFullSize();
-                for(int j = 0; j < tsize; j++) {
-                    aa = new AvatarAttribute(
-                            ss.getFieldName(i) + "__" + adt.getFieldString(j),
-                            adt.getFieldStringType(j),
-                            b, null);
-                    am.addParameter(aa);
-                    aa.setAsConstant(false);
-                    aa.setDataType(adt,j);
+                if (adt == null) {
+                    addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, ss.getLeft(),
+                     "message profile uses undefined datatype " + type));
                 }
+                aa = new AvatarAttribute(ss.getFieldName(i), AvatarType.UNDEFINED, b, null);
+                aa.setDataType(adt);
+                am.addOriginalParameter(aa);
+                aa.setAsConstant(false);
             }
         }
     }
@@ -477,6 +655,7 @@ public class AvatarFromSysML {
         }
         return null;
     }
+/*
     private String getStxPathType(String s, StxBlock b) {
         String[] path = s.split("__");
         String type = getStxAttributeType(path[0], b);
@@ -499,35 +678,14 @@ public class AvatarFromSysML {
         }
         return type;
     }
-    private String extendString;
-    private AvatarDataType extendType;
-    private String extendPath(String path, StxBlock b) {
-        extendString = getStxPathType(path, b);
-        if (extendString.equals("Integer") || extendString.equals("Boolean")) {
-            extendType = null;
-            return path;
-        }
-        extendType = avSpec.getDataTypeByName(extendString);
-        int size = extendType.getFullSize() - 1;
-        if (size == -1) return path;
-        StringBuffer res = new StringBuffer();
-        int i;
-        for (i = 0; i < size; i++)
-            res.append(path + "__" + extendType.getFieldString(i) + ", ");
-        res.append(path + "__" + extendType.getFieldString(i));
-        return res.toString();
-    }
-    private String extendIdent (String path, StxBlock b) {
-        String result = extendPath(path, b);
-        return (result.indexOf(',') == -1 ? result : "(" + result + ")");
-    }
+ */
      private String extendCall (StxCall call, StxBlock b) {
         StringBuffer result = new StringBuffer();
         int size = call.getNbIdents();
         int i;
         for (i =0 ; i < size; i++) {
             result.append(call.getSegment(i));
-            result.append(extendPath(call.getIdent(i), b));
+            result.append(call.getIdent(i));
         }
         result.append(call.getSegment(i));
         return result.toString();
@@ -542,6 +700,10 @@ public class AvatarFromSysML {
         public void accept(String n, StxRelation r) {
             AvatarBlock blk1 = getBlock(r.getBlock1());
             AvatarBlock blk2 = getBlock(r.getBlock2());
+            if (blk1.equals("") || blk2.equals("")) {
+                addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWERROR, r.getLeft(),
+                 "some block name in relation is empty"));
+            }
             AvatarRelation theRelation = new AvatarRelation(n, blk1, blk2, null);
             avSpec.addRelation(theRelation);
             theRelation.setAsynchronous(r.getAsynchronous());
@@ -550,6 +712,10 @@ public class AvatarFromSysML {
             theRelation.setBlocking(r.getBlocking());
             theRelation.setSizeOfFIFO(r.getFifoSize());
             int size = r.getSize();
+            if (size == 0) {
+                addError(new AvatarFromSysMLError(AvatarFromSysMLError.LOWWARNING, r.getLeft(),
+                 "relation is empty"));
+            }
             for (int i = 0; i < size; i++) {
                 StxChannel c = r.getChannel(i);
                 c.commuteSignals(r.getBlock1().getName());
@@ -557,16 +723,4 @@ public class AvatarFromSysML {
             }
         }
     }
-    void rebuildDataTypes(AvatarSpecification as){}
-        // handle attribute list
-        // handle signal profiles
-        // handle methods (profiles and return type
-        // statemachine state: handle send action
-        // statemachine state: handle receive action
-        // statemachine transaction: handle method call
-        // statemachine transaction: handle assignment target
-        // statemachine transaction: handle right method call
-        // handle expressions in ui ???
-
-
 }
diff --git a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLLexer.java b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLLexer.java
index d66bfa2c691d0f08bc0476a3c08ba12e1026ac9d..e3e5c9fcecfcb8d5ebfaddba743dfdc6568f709e 100644
--- a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLLexer.java
+++ b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLLexer.java
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.4.3 on 11/06/2024 10:09 */
+/* The following code was generated by JFlex 1.4.3 on 12/06/2024 15:10 */
 
 package avatartranslator.tosysmlv2;
 import java_cup.runtime.*;
@@ -9,7 +9,7 @@ import avatartranslator.tosysmlv2.AvatarFromSysMLSyntax.*;
 /**
  * This class is a scanner generated by 
  * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
- * on 11/06/2024 10:09 from the specification file
+ * on 12/06/2024 15:10 from the specification file
  * <tt>__AvatarFromSysMLLexer__.jflex</tt>
  */
 public class AvatarFromSysMLLexer implements java_cup.runtime.Scanner {
diff --git a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLParser.java b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLParser.java
index cf3e9f77d4e0f47d366e4c4fce70b956ce441d25..09f76a6c19a3fa99ad5d44eec3034c95f39754c5 100644
--- a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLParser.java
+++ b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLParser.java
@@ -5849,7 +5849,7 @@ class CUP$AvatarFromSysMLParser$actions {
 		Location ixleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xleft;
 		Location ixright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$AvatarFromSysMLParser$stack.peek()).xright;
 		String i = CUP$AvatarFromSysMLParser$stack.peek().<String>value();
-		 RESULT = e.getAvatarName() + "__" + i; 
+		 RESULT = e.getAvatarName() + "." + i; 
               CUP$AvatarFromSysMLParser$result = parser.getSymbolFactory().newSymbol("complexIdent",152, CUP$AvatarFromSysMLParser$stack.elementAt(CUP$AvatarFromSysMLParser$top-2), CUP$AvatarFromSysMLParser$stack.peek(), RESULT);
             }
           return CUP$AvatarFromSysMLParser$result;
diff --git a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSyntax.java b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSyntax.java
index 5e7c03f2642ca0fc75585bcd6836715ff8e41325..2122ec9016342ef3b64105a538a31d573df06545 100644
--- a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSyntax.java
+++ b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSyntax.java
@@ -175,6 +175,7 @@ public class AvatarFromSysMLSyntax {
         public Location  getLeft() { return left; }
         public Location  getRight() { return right; }
         public boolean declare() { boolean res = !declared; declared = true; return res; }
+        public boolean isDeclared() { return declared; }
     }
     public static class StxField extends StxElement {
         private String name;
@@ -665,8 +666,8 @@ public class AvatarFromSysMLSyntax {
         public HashMap<String,String> getDelayExtra() { return delayExtra; }
         public StxState getTarget() { return target; }
         public ArrayList<StxAction> getActions() { return actions; }
-        public Location setRleft() { return rleft; }
-        public Location setRright() { return rright; }
+        public Location getRleft() { return rleft; }
+        public Location getRright() { return rright; }
     }
     public static class StxAction extends StxElement {
         private byte type;
diff --git a/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup
index fcdeecd2cc0b4a259b7140f15d3ab648f9cae3ca..21066b07e2b70e7adba143bdb0a27e6396d8fbf1 100644
--- a/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup
+++ b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup
@@ -1669,7 +1669,7 @@ expr    ::=
 ;
 complexIdent ::=
       IDENT:e {: RESULT = e.getAvatarName(); :}
-    | IDENT:e POINT complexIdent:i  {: RESULT = e.getAvatarName() + "__" + i; :}
+    | IDENT:e POINT complexIdent:i  {: RESULT = e.getAvatarName() + "." + i; :}
 ;
 stxCall ::=
       stxCallBegin RPAR {: