diff --git a/Makefile b/Makefile
index 959493a8b7f7e74eb470f08ffdc356a41ffec582..094dbc7c1b17ac3ed8861d8ddb78b7e04024b073 100755
--- a/Makefile
+++ b/Makefile
@@ -15,7 +15,7 @@ TAR = tar
 DEBUG  = -g
 CLASSPATH = -classpath
 SOURCEPATH = -sourcepath
-#PACKAGE = avatartranslator avatartranslator/toexecutable avatartranslator/directsimulation avatartranslator/tocppsim avatartranslator/touppaal avatartranslator/toturtle avatartranslator/toproverif avatartranslator/totpn automata compiler/tmlparser vcd nc ddtranslator launcher myutil tpndescription sddescription sdtranslator tepe translator tmltranslator tmltranslator/tmlcp tmltranslator/toautomata tmltranslator/tosystemc  tmltranslator/tomappingsystemc tmltranslator/tomappingsystemc2 tmltranslator/touppaal tmltranslator/toturtle translator/tojava translator/tosimujava translator/totpn translator/touppaal  ui ui/avatarbd ui/avatardd ui/avatarsmd ui/avatarrd ui/avatarpd ui/avatarcd ui/avatarad ui/ad ui/cd ui/oscd ui/osad ui/dd ui/ebrdd ui/file ui/graph ui/iod ui/ncdd ui/procsd ui/prosmdui/prosmd/util ui/tmlad ui/tmlcd ui/tmldd ui/tmlcomp ui/req ui/sd ui/tree ui/ucd ui/window ui/avatarmethodology ui/sysmlsecmethodology tmltranslator tmltranslator/toturtle req/ebrdd tmltranslator/tosystemc tmatrix proverifspec uppaaldesc fr/inria/oasis/vercors/cttool/model remotesimulation tmltranslator/ctranslator attacktrees myutil/externalSearch
+#PACKAGE = avatartranslator avatartranslator/toexecutable avatartranslator/directsimulation avatartranslator/tocppsim avatartranslator/touppaal avatartranslator/toturtle avatartranslator/toproverif avatartranslator/totpn automata compiler/tmlparser vcd nc ddtranslator launcher myutil tpndescription sddescription sdtranslator tepe translator tmltranslator tmltranslator/tmlcp tmltranslator/toautomata tmltranslator/tosystemc  tmltranslator/tomappingsystemc tmltranslator/tomappingsystemc2 tmltranslator/touppaal tmltranslator/toturtle translator/tojava translator/tosimujava translator/totpn translator/touppaal  ui ui/avatarbd ui/avatardd ui/avatarsmd ui/avatarrd ui/avatarpd ui/avatarcd ui/avatarad ui/ad ui/cd ui/oscd ui/osad ui/dd ui/ebrdd ui/file ui/graph ui/iod ui/ncdd ui/procsd ui/prosmdui/prosmd/util ui/tmlad ui/tmlcd ui/tmldd ui/tmlcomp ui/req ui/sd ui/tree ui/ucd ui/window ui/avatarmethodology ui/sysmlsecmethodology tmltranslator tmltranslator/toturtle req/ebrdd tmltranslator/tosystemc tmatrix proverifspec uppaaldesc fr/inria/oasis/vercors/cttool/model remotesimulation tmltranslator/modelcompiler attacktrees myutil/externalSearch
 BUILDER = builder.jar
 BUILD_INFO = build.txt
 BUILD_TO_MODIFY = src/ui/DefaultText.java
@@ -167,7 +167,7 @@ jar: launcher ttooljar tiftranslator tmltranslator rundse remotesimulator webcra
 ttooljar:
 	rm -f $(TTOOL_BIN)/$(TTOOL_BINARY)
 	cp $(TTOOL_SRC)/ui/images/$(STD_LOGO) $(TTOOL_SRC)/ui/images/$(LOGO) 
-	cd $(TTOOL_SRC);  $(JAR) cmf $(TTOOL_JAR_TXT) $(TTOOL_BIN)/$(TTOOL_BINARY) Main.class vcd/*.class avatartranslator/*.class avatartranslator/toexecutable/*.class avatartranslator/directsimulation/*.class avatartranslator/modelchecker/*.class  avatartranslator/touppaal/*.class avatartranslator/toproverif/*.class avatartranslator/totpn/* avatartranslator/*.class avatartranslator/toturtle/*.java automata/*.class compiler/tmlparser/*.class nc/*.class  tepe/*.class tmltranslator/*.class tmltranslator/toavatar/*.class tmltranslator/tmlcp/*.class tmltranslator/toautomata/*.class tmatrix/*.class tmltranslator/toturtle/*.class tmltranslator/touppaal/*.class tmltranslator/tosystemc/*.class tmltranslator/tomappingsystemc/*.class tmltranslator/tomappingsystemc2/*.class  tpndescription/*.class ddtranslator/*.class launcher/*.class myutil/*.class sddescription/*.class sdtranslator/*.class translator/*.class translator/tojava/*.class  translator/tosimujava/*.class translator/touppaal/*.class translator/totpn/*.class req/ebrdd/*.java ui/*.class ui/*/*.class ui/*/*/*.class proverifspec/*.class uppaaldesc/*.class ui/images/*.* ui/images/toolbarButtonGraphics/general/*.gif ui/images/toolbarButtonGraphics/navigation/*.gif  ui/images/toolbarButtonGraphics/media/*.gif $(TTOOL_BIN)/$(LAUNCHER_BINARY) RTLLauncher.class launcher/*.class fr/inria/oasis/vercors/cttool/model/*.class remotesimulation/*.class tmltranslator/ctranslator/*.class attacktrees/*.class myutil/externalSearch/*.class ddtranslatorSoclib/*.class ddtranslatorSoclib/toSoclib/*.class ddtranslatorSoclib/toTopCell/*.class dseengine/*.class #compiler/tmlCPparser/parser/*.class
+	cd $(TTOOL_SRC);  $(JAR) cmf $(TTOOL_JAR_TXT) $(TTOOL_BIN)/$(TTOOL_BINARY) Main.class vcd/*.class avatartranslator/*.class avatartranslator/toexecutable/*.class avatartranslator/directsimulation/*.class avatartranslator/modelchecker/*.class  avatartranslator/touppaal/*.class avatartranslator/toproverif/*.class avatartranslator/totpn/* avatartranslator/*.class avatartranslator/toturtle/*.java automata/*.class compiler/tmlparser/*.class nc/*.class  tepe/*.class tmltranslator/*.class tmltranslator/toavatar/*.class tmltranslator/tmlcp/*.class tmltranslator/toautomata/*.class tmatrix/*.class tmltranslator/toturtle/*.class tmltranslator/touppaal/*.class tmltranslator/tosystemc/*.class tmltranslator/tomappingsystemc/*.class tmltranslator/tomappingsystemc2/*.class  tpndescription/*.class ddtranslator/*.class launcher/*.class myutil/*.class sddescription/*.class sdtranslator/*.class translator/*.class translator/tojava/*.class  translator/tosimujava/*.class translator/touppaal/*.class translator/totpn/*.class req/ebrdd/*.java ui/*.class ui/*/*.class ui/*/*/*.class proverifspec/*.class uppaaldesc/*.class ui/images/*.* ui/images/toolbarButtonGraphics/general/*.gif ui/images/toolbarButtonGraphics/navigation/*.gif  ui/images/toolbarButtonGraphics/media/*.gif $(TTOOL_BIN)/$(LAUNCHER_BINARY) RTLLauncher.class launcher/*.class fr/inria/oasis/vercors/cttool/model/*.class remotesimulation/*.class tmltranslator/modelcompiler/*.class attacktrees/*.class myutil/externalSearch/*.class ddtranslatorSoclib/*.class ddtranslatorSoclib/toSoclib/*.class ddtranslatorSoclib/toTopCell/*.class dseengine/*.class #compiler/tmlCPparser/parser/*.class
 
 launcher:
 	rm -f $(TTOOL_BIN)/$(LAUNCHER_BINARY)
diff --git a/src/tmltranslator/HwCPU.java b/src/tmltranslator/HwCPU.java
index 96c212c5ccdf57b9c16acb78ccd1847132e709d7..ecb0f4f1ef62de78050da7f46dc59b8befc86c75 100755
--- a/src/tmltranslator/HwCPU.java
+++ b/src/tmltranslator/HwCPU.java
@@ -45,7 +45,7 @@ knowledge of the CeCILL license and that you accept its terms.
 
 package tmltranslator;
 
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 import java.util.*;
 
 
diff --git a/src/tmltranslator/HwExecutionNode.java b/src/tmltranslator/HwExecutionNode.java
index 8224b0f43ac13dc2c8ed03b0dff8519e288619f7..514ff7ecdf3d97be99218ed47b0aff4f181a09f5 100755
--- a/src/tmltranslator/HwExecutionNode.java
+++ b/src/tmltranslator/HwExecutionNode.java
@@ -46,7 +46,7 @@ knowledge of the CeCILL license and that you accept its terms.
 package tmltranslator;
 
 import java.util.*;
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 
 public abstract class HwExecutionNode extends HwNode  {
     protected int maximumNbOfTasks;
diff --git a/src/tmltranslator/HwMemory.java b/src/tmltranslator/HwMemory.java
index 1e9276ebe87bc28c24a169498c995beedf2acd1b..d5525fa0f32a2fab910e06f475b62705bec93936 100755
--- a/src/tmltranslator/HwMemory.java
+++ b/src/tmltranslator/HwMemory.java
@@ -46,7 +46,7 @@ knowledge of the CeCILL license and that you accept its terms.
 package tmltranslator;
 
 import java.util.*;
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 
 
 public class HwMemory extends HwCommunicationNode  {
diff --git a/src/tmltranslator/HwNode.java b/src/tmltranslator/HwNode.java
index 0b2ded9150eb1df2222b142ab7e939c809bbb706..5dddcfc2a45a70599e2f03b5f8d7c9c9f51b1a80 100755
--- a/src/tmltranslator/HwNode.java
+++ b/src/tmltranslator/HwNode.java
@@ -46,7 +46,7 @@ knowledge of the CeCILL license and that you accept its terms.
 package tmltranslator;
 
 import java.util.*;
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 
 
 public abstract class HwNode extends DIPLOElement  {
diff --git a/src/tmltranslator/TMLCPLib.java b/src/tmltranslator/TMLCPLib.java
index 9b37a754cf26269f2a9edd11eac13f0c9001e643..80c136e33703d497db421009cbb075f6791ae3a7 100755
--- a/src/tmltranslator/TMLCPLib.java
+++ b/src/tmltranslator/TMLCPLib.java
@@ -48,7 +48,7 @@ package tmltranslator;
 
 import java.util.*;
 import myutil.*;
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 
 public class TMLCPLib extends TMLElement {
 
diff --git a/src/tmltranslator/TMLTask.java b/src/tmltranslator/TMLTask.java
index f89c4be4811e156c25b3d9e84f63f2046a1213ec..4b45fbdda1d7d208734120ca1f10aa2899f0412c 100755
--- a/src/tmltranslator/TMLTask.java
+++ b/src/tmltranslator/TMLTask.java
@@ -47,7 +47,7 @@ package tmltranslator;
 
 import myutil.*;
 import java.util.*;
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 
 
 public class TMLTask extends TMLElement {
diff --git a/src/tmltranslator/ctranslator/AdaifBuffer.java b/src/tmltranslator/modelcompiler/AdaifBuffer.java
similarity index 99%
rename from src/tmltranslator/ctranslator/AdaifBuffer.java
rename to src/tmltranslator/modelcompiler/AdaifBuffer.java
index 88ca079c88d0a0c61ed9e2a66c8dfd3932b10cb8..5a27071662d6ac36f88016069ef557994b09ad64 100644
--- a/src/tmltranslator/ctranslator/AdaifBuffer.java
+++ b/src/tmltranslator/modelcompiler/AdaifBuffer.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/AdaifMEC.java b/src/tmltranslator/modelcompiler/AdaifMEC.java
similarity index 98%
rename from src/tmltranslator/ctranslator/AdaifMEC.java
rename to src/tmltranslator/modelcompiler/AdaifMEC.java
index 28ce717aa501c20a63829c622f609b23a33f9df8..65e1b7a73b36f121f92872d27a2e2ca2c95afd67 100644
--- a/src/tmltranslator/ctranslator/AdaifMEC.java
+++ b/src/tmltranslator/modelcompiler/AdaifMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 //import Ctranslator.*;
diff --git a/src/tmltranslator/ctranslator/AdaifOperationMEC.java b/src/tmltranslator/modelcompiler/AdaifOperationMEC.java
similarity index 99%
rename from src/tmltranslator/ctranslator/AdaifOperationMEC.java
rename to src/tmltranslator/modelcompiler/AdaifOperationMEC.java
index f9c55cb7478c0f3e4dd470be076e1e0fce8253d5..11f3310017adeb5facca66b72ce1df4ee420a136 100644
--- a/src/tmltranslator/ctranslator/AdaifOperationMEC.java
+++ b/src/tmltranslator/modelcompiler/AdaifOperationMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 //import Ctranslator.*;
diff --git a/src/tmltranslator/ctranslator/ArchUnitMEC.java b/src/tmltranslator/modelcompiler/ArchUnitMEC.java
similarity index 96%
rename from src/tmltranslator/ctranslator/ArchUnitMEC.java
rename to src/tmltranslator/modelcompiler/ArchUnitMEC.java
index 2e593dc8fccf3dbb4a40fb2793b6187f104570d0..e2c125f3de8afe2f39b862fdd0cfc67a743931a7 100755
--- a/src/tmltranslator/ctranslator/ArchUnitMEC.java
+++ b/src/tmltranslator/modelcompiler/ArchUnitMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;
+package tmltranslator.modelcompiler;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/BaseBuffer.java b/src/tmltranslator/modelcompiler/BaseBuffer.java
similarity index 96%
rename from src/tmltranslator/ctranslator/BaseBuffer.java
rename to src/tmltranslator/modelcompiler/BaseBuffer.java
index 1fe913cca1da4333332a4ecd39fb50ca1274c25e..be6afe54714a98f2880cbdcbfc0bbe51b0edcded 100755
--- a/src/tmltranslator/ctranslator/BaseBuffer.java
+++ b/src/tmltranslator/modelcompiler/BaseBuffer.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/Buffer.java b/src/tmltranslator/modelcompiler/Buffer.java
similarity index 96%
rename from src/tmltranslator/ctranslator/Buffer.java
rename to src/tmltranslator/modelcompiler/Buffer.java
index b88840691d38e708a9d90f0cd95e6d479d757bdb..511e563ea39d1fa591f92693008592686d004434 100755
--- a/src/tmltranslator/ctranslator/Buffer.java
+++ b/src/tmltranslator/modelcompiler/Buffer.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/BufferMEC.java b/src/tmltranslator/modelcompiler/BufferMEC.java
similarity index 98%
rename from src/tmltranslator/ctranslator/BufferMEC.java
rename to src/tmltranslator/modelcompiler/BufferMEC.java
index 08f3457f5855ac9c294d3b8fcdc3f6a38acb137e..179b1cd5e0c78b3de886ec9eb9136d64ee21c8c6 100644
--- a/src/tmltranslator/ctranslator/BufferMEC.java
+++ b/src/tmltranslator/modelcompiler/BufferMEC.java
@@ -43,7 +43,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/CPMEC.java b/src/tmltranslator/modelcompiler/CPMEC.java
similarity index 96%
rename from src/tmltranslator/ctranslator/CPMEC.java
rename to src/tmltranslator/modelcompiler/CPMEC.java
index dd991ce8db709346d7625d4030ae12af8014e58b..867f2626bfdea79c9b480d932ef2f2f57f5e2aa8 100755
--- a/src/tmltranslator/ctranslator/CPMEC.java
+++ b/src/tmltranslator/modelcompiler/CPMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/Context.java b/src/tmltranslator/modelcompiler/Context.java
similarity index 98%
rename from src/tmltranslator/ctranslator/Context.java
rename to src/tmltranslator/modelcompiler/Context.java
index 7698f93779e117c9401198630a33cc5d3904307f..1bec262efc2ea879e114909148625d659e70702f 100644
--- a/src/tmltranslator/ctranslator/Context.java
+++ b/src/tmltranslator/modelcompiler/Context.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/CpuMEC.java b/src/tmltranslator/modelcompiler/CpuMEC.java
similarity index 98%
rename from src/tmltranslator/ctranslator/CpuMEC.java
rename to src/tmltranslator/modelcompiler/CpuMEC.java
index 8a40ef8dd370d6b12692e330eab817babcf415b8..c97983cd5a1ca5d012214f99d4d87588cdfb3597 100644
--- a/src/tmltranslator/ctranslator/CpuMEC.java
+++ b/src/tmltranslator/modelcompiler/CpuMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 
diff --git a/src/tmltranslator/ctranslator/CpuMemoryCopyMEC.java b/src/tmltranslator/modelcompiler/CpuMemoryCopyMEC.java
similarity index 99%
rename from src/tmltranslator/ctranslator/CpuMemoryCopyMEC.java
rename to src/tmltranslator/modelcompiler/CpuMemoryCopyMEC.java
index 33c4356b990b68848d3928dad65c7ce6b86fdacd..207cb21292e308ed42da3c2977d16aee9cd16337 100644
--- a/src/tmltranslator/ctranslator/CpuMemoryCopyMEC.java
+++ b/src/tmltranslator/modelcompiler/CpuMemoryCopyMEC.java
@@ -45,7 +45,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import myutil.*;
diff --git a/src/tmltranslator/ctranslator/CpuOperationMEC.java b/src/tmltranslator/modelcompiler/CpuOperationMEC.java
similarity index 98%
rename from src/tmltranslator/ctranslator/CpuOperationMEC.java
rename to src/tmltranslator/modelcompiler/CpuOperationMEC.java
index ccfa6d051c5a3b862e4a3e10fb6ed067f242ef96..bad4176eb79b94095a5d5da85c24c314805bd926 100644
--- a/src/tmltranslator/ctranslator/CpuOperationMEC.java
+++ b/src/tmltranslator/modelcompiler/CpuOperationMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 //import Ctranslator.*;
diff --git a/src/tmltranslator/ctranslator/CwaMEC.java b/src/tmltranslator/modelcompiler/CwaMEC.java
similarity index 99%
rename from src/tmltranslator/ctranslator/CwaMEC.java
rename to src/tmltranslator/modelcompiler/CwaMEC.java
index 4799555dbefd4ae8cb5c9ea4a2516b107b97b7af..c48314fcf52f7b51f5a61db1cf7546235924cec5 100644
--- a/src/tmltranslator/ctranslator/CwaMEC.java
+++ b/src/tmltranslator/modelcompiler/CwaMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 //import Ctranslator.*;
diff --git a/src/tmltranslator/ctranslator/CwlMEC.java b/src/tmltranslator/modelcompiler/CwlMEC.java
similarity index 97%
rename from src/tmltranslator/ctranslator/CwlMEC.java
rename to src/tmltranslator/modelcompiler/CwlMEC.java
index 435c7ef56534fe75db7e7121bb1be442eb49a254..2e69d274defbc29ad7d7f8c45779c78f73cc1c84 100755
--- a/src/tmltranslator/ctranslator/CwlMEC.java
+++ b/src/tmltranslator/modelcompiler/CwlMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 //import Ctranslator.*;
diff --git a/src/tmltranslator/ctranslator/CwmMEC.java b/src/tmltranslator/modelcompiler/CwmMEC.java
similarity index 97%
rename from src/tmltranslator/ctranslator/CwmMEC.java
rename to src/tmltranslator/modelcompiler/CwmMEC.java
index f06ba2841cf23c62251216ec856c53dec44e96f4..8bbed09772c780cd22331708d3d577b713d96309 100755
--- a/src/tmltranslator/ctranslator/CwmMEC.java
+++ b/src/tmltranslator/modelcompiler/CwmMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 //import Ctranslator.*;
diff --git a/src/tmltranslator/ctranslator/CwpMEC.java b/src/tmltranslator/modelcompiler/CwpMEC.java
similarity index 97%
rename from src/tmltranslator/ctranslator/CwpMEC.java
rename to src/tmltranslator/modelcompiler/CwpMEC.java
index 99310867286c795050211a8fc5d608f461a3137e..05268a653ada5e1247927e8cffa249cb38180a5a 100755
--- a/src/tmltranslator/ctranslator/CwpMEC.java
+++ b/src/tmltranslator/modelcompiler/CwpMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 //import Ctranslator.*;
diff --git a/src/tmltranslator/ctranslator/DMAContext.java b/src/tmltranslator/modelcompiler/DMAContext.java
similarity index 98%
rename from src/tmltranslator/ctranslator/DMAContext.java
rename to src/tmltranslator/modelcompiler/DMAContext.java
index 52b8d9c56349e5e00100bf7156d23aa3a0deb9a0..a215f8c7e050a5837f25457cbd0b05fe02e35ea3 100644
--- a/src/tmltranslator/ctranslator/DMAContext.java
+++ b/src/tmltranslator/modelcompiler/DMAContext.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/DataTransfer.java b/src/tmltranslator/modelcompiler/DataTransfer.java
similarity index 95%
rename from src/tmltranslator/ctranslator/DataTransfer.java
rename to src/tmltranslator/modelcompiler/DataTransfer.java
index f76c513acb8a6a72edac5566e22e1acb7781d53b..29053667847b9ef6a114df031be38206a8c42160 100755
--- a/src/tmltranslator/ctranslator/DataTransfer.java
+++ b/src/tmltranslator/modelcompiler/DataTransfer.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/DoubleDmaMEC.java b/src/tmltranslator/modelcompiler/DoubleDmaMEC.java
similarity index 99%
rename from src/tmltranslator/ctranslator/DoubleDmaMEC.java
rename to src/tmltranslator/modelcompiler/DoubleDmaMEC.java
index 95665d2289c029ae50c10123d19539d505144c0f..3eeadeb9ca9724bef1d4d6c0b9978522d82888dc 100755
--- a/src/tmltranslator/ctranslator/DoubleDmaMEC.java
+++ b/src/tmltranslator/modelcompiler/DoubleDmaMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import myutil.*;
diff --git a/src/tmltranslator/ctranslator/FepBuffer.java b/src/tmltranslator/modelcompiler/FepBuffer.java
similarity index 97%
rename from src/tmltranslator/ctranslator/FepBuffer.java
rename to src/tmltranslator/modelcompiler/FepBuffer.java
index c888f1b9faf4d9e348dfb7bfdafc5af1c5cfd1ca..a67bb6a6691fbdc5546b335511a5ef5eb74c6a64 100755
--- a/src/tmltranslator/ctranslator/FepBuffer.java
+++ b/src/tmltranslator/modelcompiler/FepBuffer.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/FepMEC.java b/src/tmltranslator/modelcompiler/FepMEC.java
similarity index 98%
rename from src/tmltranslator/ctranslator/FepMEC.java
rename to src/tmltranslator/modelcompiler/FepMEC.java
index 216ebfae6752373b96ea14180f2df8da20cbbfa6..b9fbc270501e50add67a6fd558e5570204d0f7b2 100644
--- a/src/tmltranslator/ctranslator/FepMEC.java
+++ b/src/tmltranslator/modelcompiler/FepMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 //import Ctranslator.*;
diff --git a/src/tmltranslator/ctranslator/FepOperationMEC.java b/src/tmltranslator/modelcompiler/FepOperationMEC.java
similarity index 96%
rename from src/tmltranslator/ctranslator/FepOperationMEC.java
rename to src/tmltranslator/modelcompiler/FepOperationMEC.java
index c75e0f5e2126bd2e7b20cc1764f428a91e0f0aaa..035240f16fd36874abf94b91db5effbfade06ef5 100755
--- a/src/tmltranslator/ctranslator/FepOperationMEC.java
+++ b/src/tmltranslator/modelcompiler/FepOperationMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;
+package tmltranslator.modelcompiler;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/FftMEC.java b/src/tmltranslator/modelcompiler/FftMEC.java
similarity index 99%
rename from src/tmltranslator/ctranslator/FftMEC.java
rename to src/tmltranslator/modelcompiler/FftMEC.java
index 2958ea6810aef56cc7c6f7cfa6db845c19e8512d..614459d75d4fa0e925b7c1cb5912600bf6fc101e 100644
--- a/src/tmltranslator/ctranslator/FftMEC.java
+++ b/src/tmltranslator/modelcompiler/FftMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 //import Ctranslator.*;
diff --git a/src/tmltranslator/ctranslator/InterleaverBuffer.java b/src/tmltranslator/modelcompiler/InterleaverBuffer.java
similarity index 99%
rename from src/tmltranslator/ctranslator/InterleaverBuffer.java
rename to src/tmltranslator/modelcompiler/InterleaverBuffer.java
index ce0b9c7d357f2c1c9ff1f935793d971559f24924..7318750e5b91a555e8fad83b557e964e15ab8b08 100644
--- a/src/tmltranslator/ctranslator/InterleaverBuffer.java
+++ b/src/tmltranslator/modelcompiler/InterleaverBuffer.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/InterleaverMEC.java b/src/tmltranslator/modelcompiler/InterleaverMEC.java
similarity index 98%
rename from src/tmltranslator/ctranslator/InterleaverMEC.java
rename to src/tmltranslator/modelcompiler/InterleaverMEC.java
index 5be9a7bfb36eee179ef490a4f407d31b0161b6ec..134482a943de443e58b365b9ff45db95e38429a4 100644
--- a/src/tmltranslator/ctranslator/InterleaverMEC.java
+++ b/src/tmltranslator/modelcompiler/InterleaverMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 //import Ctranslator.*;
diff --git a/src/tmltranslator/ctranslator/IntlOperationMEC.java b/src/tmltranslator/modelcompiler/IntlOperationMEC.java
similarity index 99%
rename from src/tmltranslator/ctranslator/IntlOperationMEC.java
rename to src/tmltranslator/modelcompiler/IntlOperationMEC.java
index 948d63b484d7cd287a7064673e8818fea4626e6b..0a63201fb8748ec93373ab21fb89825f5a6b688f 100644
--- a/src/tmltranslator/ctranslator/IntlOperationMEC.java
+++ b/src/tmltranslator/modelcompiler/IntlOperationMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 
diff --git a/src/tmltranslator/ctranslator/MMBuffer.java b/src/tmltranslator/modelcompiler/MMBuffer.java
similarity index 99%
rename from src/tmltranslator/ctranslator/MMBuffer.java
rename to src/tmltranslator/modelcompiler/MMBuffer.java
index 36ac2e6ca2ff5d211bb49761277716435cd255cc..d48317e9bfb23272bf9c6f5ae071a832dede7820 100644
--- a/src/tmltranslator/ctranslator/MMBuffer.java
+++ b/src/tmltranslator/modelcompiler/MMBuffer.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/MappOperationMEC.java b/src/tmltranslator/modelcompiler/MappOperationMEC.java
similarity index 99%
rename from src/tmltranslator/ctranslator/MappOperationMEC.java
rename to src/tmltranslator/modelcompiler/MappOperationMEC.java
index df1aab4c352a68014c74dc5748f92a8932b5cf0a..8825c4c638fbeba55f79e463f4b59059d919be02 100644
--- a/src/tmltranslator/ctranslator/MappOperationMEC.java
+++ b/src/tmltranslator/modelcompiler/MappOperationMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 
diff --git a/src/tmltranslator/ctranslator/MapperBuffer.java b/src/tmltranslator/modelcompiler/MapperBuffer.java
similarity index 99%
rename from src/tmltranslator/ctranslator/MapperBuffer.java
rename to src/tmltranslator/modelcompiler/MapperBuffer.java
index 43f9f28ae1236a545f33b0b89c8903d6ec23e558..5dbc759b66fcdf7dd0ab31e22431578209614493 100644
--- a/src/tmltranslator/ctranslator/MapperBuffer.java
+++ b/src/tmltranslator/modelcompiler/MapperBuffer.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/MapperMEC.java b/src/tmltranslator/modelcompiler/MapperMEC.java
similarity index 98%
rename from src/tmltranslator/ctranslator/MapperMEC.java
rename to src/tmltranslator/modelcompiler/MapperMEC.java
index a4c9fd082c8162f87e40d5d09bf930f4e090c7a4..70e508833b956a522a3714b3115665f9c4dc19ec 100644
--- a/src/tmltranslator/ctranslator/MapperMEC.java
+++ b/src/tmltranslator/modelcompiler/MapperMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 //import Ctranslator.*;
diff --git a/src/tmltranslator/ctranslator/Operation.java b/src/tmltranslator/modelcompiler/Operation.java
similarity index 96%
rename from src/tmltranslator/ctranslator/Operation.java
rename to src/tmltranslator/modelcompiler/Operation.java
index 21eed5690429d92787a0917ce4e074474d37d379..40226d5fa1888862362ae149f68dbdc293a1591f 100755
--- a/src/tmltranslator/ctranslator/Operation.java
+++ b/src/tmltranslator/modelcompiler/Operation.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/OperationMEC.java b/src/tmltranslator/modelcompiler/OperationMEC.java
similarity index 96%
rename from src/tmltranslator/ctranslator/OperationMEC.java
rename to src/tmltranslator/modelcompiler/OperationMEC.java
index 177657224a8a71d2726ba4e41d9a5f637de8e717..7a752dcf675d131ae1e735c48dffa1c4c8574902 100755
--- a/src/tmltranslator/ctranslator/OperationMEC.java
+++ b/src/tmltranslator/modelcompiler/OperationMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;
+package tmltranslator.modelcompiler;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/Scheduler.java b/src/tmltranslator/modelcompiler/Scheduler.java
similarity index 98%
rename from src/tmltranslator/ctranslator/Scheduler.java
rename to src/tmltranslator/modelcompiler/Scheduler.java
index 4ef8381faf7cc5d136a1766a3da3712bd787b08f..67b80c1319bd7e22b44d2c72a286cfaf07db6553 100644
--- a/src/tmltranslator/ctranslator/Scheduler.java
+++ b/src/tmltranslator/modelcompiler/Scheduler.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/Signal.java b/src/tmltranslator/modelcompiler/Signal.java
similarity index 96%
rename from src/tmltranslator/ctranslator/Signal.java
rename to src/tmltranslator/modelcompiler/Signal.java
index 3d0ddd074a4876d81b6cd2fcb83dbb4a89d5b49b..8af66a61a56528db6ea20e1391ff8f2f38db1278 100755
--- a/src/tmltranslator/ctranslator/Signal.java
+++ b/src/tmltranslator/modelcompiler/Signal.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import java.nio.*;
diff --git a/src/tmltranslator/ctranslator/SingleDmaMEC.java b/src/tmltranslator/modelcompiler/SingleDmaMEC.java
similarity index 99%
rename from src/tmltranslator/ctranslator/SingleDmaMEC.java
rename to src/tmltranslator/modelcompiler/SingleDmaMEC.java
index 7f889eb9d369dda7c141a629767ffc4035292eec..1f48a173a1894f5bf078760e8c61948460d875d4 100755
--- a/src/tmltranslator/ctranslator/SingleDmaMEC.java
+++ b/src/tmltranslator/modelcompiler/SingleDmaMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import myutil.*;
diff --git a/src/tmltranslator/ctranslator/SumMEC.java b/src/tmltranslator/modelcompiler/SumMEC.java
similarity index 99%
rename from src/tmltranslator/ctranslator/SumMEC.java
rename to src/tmltranslator/modelcompiler/SumMEC.java
index 58fa4d7b685f53210d1aedf7184d8891f59483df..0f97ed3efc86926e9e2def8d752a61a1db09e3f7 100644
--- a/src/tmltranslator/ctranslator/SumMEC.java
+++ b/src/tmltranslator/modelcompiler/SumMEC.java
@@ -44,7 +44,7 @@
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 
diff --git a/src/tmltranslator/ctranslator/TMLCCodeGeneration.java b/src/tmltranslator/modelcompiler/TMLModelCompiler.java
similarity index 96%
rename from src/tmltranslator/ctranslator/TMLCCodeGeneration.java
rename to src/tmltranslator/modelcompiler/TMLModelCompiler.java
index 976dfbd36324aba0f2540dff1136cb25767aa2c7..1343099c48c7020e234923b742f06e4ec549c655 100755
--- a/src/tmltranslator/ctranslator/TMLCCodeGeneration.java
+++ b/src/tmltranslator/modelcompiler/TMLModelCompiler.java
@@ -1,7 +1,7 @@
 /**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille, Andrea Enrici
 
    ludovic.apvrille AT enst.fr
-   andrea.enrici AT enstr.fr
+   andrea.enrici AT nokia.com
 
    This software is a computer program whose purpose is to allow the
    edition of TURTLE analysis, design and deployment diagrams, to
@@ -37,14 +37,16 @@
    knowledge of the CeCILL license and that you accept its terms.
 
    /**
-   * Class TMLCCodeGeneration
+    * This class is the one of the model compiler that produces the control code of a system design
+   * Class TMLModelCompiler
    * Creation: 09/02/2014
    * @version 1.0 09/02/2014
+   * @modified 09/09/2016
    * @author Andrea ENRICI
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import java.io.*;
@@ -58,7 +60,7 @@ import ui.tmlcompd.*;
 import ui.ConfigurationTTool;
 import ui.*;
 
-public class TMLCCodeGeneration	{
+public class TMLModelCompiler	{
 
 	public String title;
 
@@ -95,15 +97,15 @@ public class TMLCCodeGeneration	{
 	private ArrayList<TMLCommunicationPatternPanel> tmlcpps;
 	private ArrayList<TMLCP> tmlcpsList;
 
-	private ArrayList<TMLCCodeGenerationError> errors;
-	private ArrayList<TMLCCodeGenerationError> warnings;
+	private ArrayList<TMLModelCompilerError> errors;
+	private ArrayList<TMLModelCompilerError> warnings;
 
 	private String debugFileName;
 	PrintWriter outputStream;
 
 	public JFrame frame; //Main Frame
 
-	public TMLCCodeGeneration( String _title, String _applicationName, JFrame _frame, ArrayList<TMLCommunicationPatternPanel> _tmlcpps, TMLMapping _tmap )	{
+	public TMLModelCompiler( String _title, String _applicationName, JFrame _frame, ArrayList<TMLCommunicationPatternPanel> _tmlcpps, TMLMapping _tmap )	{
 		title = _title;
 		applicationName = _applicationName;
 		frame = _frame;
@@ -120,7 +122,7 @@ public class TMLCCodeGeneration	{
 	private void init()	{
 		mappedTasks = new ArrayList<TMLTask>();
 		commElts = new ArrayList<TMLElement>();
-		errors = new ArrayList<TMLCCodeGenerationError>();
+		errors = new ArrayList<TMLModelCompilerError>();
 		mainFileString = new StringBuffer();
 		headerString = new StringBuffer();
 		programString = new StringBuffer();
@@ -227,7 +229,7 @@ public class TMLCCodeGeneration	{
 		
 		boolean[] list = new boolean[2];
 
-		for( TMLChannel ch: xTask.getWriteTMLChannels() )	{	//perche testa tutti i canali
+		for( TMLChannel ch: xTask.getWriteTMLChannels() )	{	//test all channels
 			if( ch.isBasicChannel() )	{
 				if( ch.getOriginPort().isPrex() )	{
 					list[0] = true;
@@ -243,7 +245,7 @@ public class TMLCCodeGeneration	{
 				}
 			}
 		}
-		for( TMLChannel ch: xTask.getReadTMLChannels() )	{	//perche testa tutti i canali
+		for( TMLChannel ch: xTask.getReadTMLChannels() )	{	//test all channels
 			if( ch.isBasicChannel() )	{
 				if( ch.getDestinationPort().isPostex() )	{
 					list[0] = false;
@@ -1678,7 +1680,7 @@ public class TMLCCodeGeneration	{
 
 	public void saveFile( String path, String filename ) throws FileException {
 		
-		TMLCCodeGenerationMakefile make = new TMLCCodeGenerationMakefile( applicationName );
+		TMLModelCompilerMakefile make = new TMLModelCompilerMakefile( applicationName );
 		path = path.substring( 0, path.length()-1 );
 
 		TraceManager.addUser( "Saving C files in " + path );
diff --git a/src/tmltranslator/modelcompiler/TMLModelCompilerError.java b/src/tmltranslator/modelcompiler/TMLModelCompilerError.java
new file mode 100755
index 0000000000000000000000000000000000000000..08734bfb7db09d0974c9a3d23be789a823732e54
--- /dev/null
+++ b/src/tmltranslator/modelcompiler/TMLModelCompilerError.java
@@ -0,0 +1,92 @@
+/**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille, Andrea ENRICI
+ *
+ * ludovic.apvrille AT enst.fr
+ * andrea.enrici AT nokia.com
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ *
+ * /**
+ * Class TMLModelCompilerError
+ * Used to store a compilation error generated by the TMLModelCompilerParser
+ * Creation: 12/09/2007
+ * @version 1.0 12/09/2007
+ * @modified 09/09/2016
+ * @author Ludovic APVRILLE, Andrea ENRICI
+ * @see
+ */
+
+
+package tmltranslator.modelcompiler;;
+
+import tmltranslator.*;
+
+public class TMLModelCompilerError {
+    
+    // type
+    public final static int ERROR_STRUCTURE = 0;
+    public final static int WARNING_STRUCTURE = 1;
+    public final static int ERROR_BEHAVIOR = 2;
+    public final static int WARNING_BEHAVIOR = 3;
+    
+    public int type; // ERROR, WARNING
+    public String message;
+    public TMLTask task;
+    public TMLActivityElement element;
+    
+    public TMLModelCompilerError( int _type ) {
+        type = _type;
+    }
+
+    @Override public String toString()	{
+    	String error_type = "";
+	switch( type )	{
+        case 0:
+		    error_type = "ERROR_STRUCTURE";
+		break;
+		case 1:
+    		error_type = "WARNING_STRUCTURE";
+		break;
+		case 2:
+	    	error_type = "ERROR_BEHAVIOR";
+		break;
+		case 3:
+		    error_type = "WARNING_BEHAVIOR";
+		break;
+		default:
+		    error_type = "NO RECOGNIZED ERROR TYPE";
+        break;
+	}
+    	return "TMLModelCompilerError of type: " + error_type;
+    }
+}
diff --git a/src/tmltranslator/ctranslator/TMLCCodeGenerationMakefile.java b/src/tmltranslator/modelcompiler/TMLModelCompilerMakefile.java
similarity index 93%
rename from src/tmltranslator/ctranslator/TMLCCodeGenerationMakefile.java
rename to src/tmltranslator/modelcompiler/TMLModelCompilerMakefile.java
index a974e1958f12e7b2cc05f48f3f6fddd87e5bb401..42e2de6e78d55ebba8d2e6a61597095cc6acdffe 100644
--- a/src/tmltranslator/ctranslator/TMLCCodeGenerationMakefile.java
+++ b/src/tmltranslator/modelcompiler/TMLModelCompilerMakefile.java
@@ -1,7 +1,7 @@
 /**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille, Andrea Enrici
 
    ludovic.apvrille AT enst.fr
-   andrea.enrici AT enstr.fr
+   andrea.enrici AT nokia.com
 
    This software is a computer program whose purpose is to allow the
    edition of TURTLE analysis, design and deployment diagrams, to
@@ -37,14 +37,16 @@
    knowledge of the CeCILL license and that you accept its terms.
 
    /**
-   * Class TMLCCodeGeneration
+    * This class is used to generate the Makefile of a control code generation project
+   * Class TMLModelCompilerMakefile
    * Creation: 09/02/2014
    * @version 1.0 09/02/2014
+   * @modified 09/09/2016
    * @author Andrea ENRICI
    * @see
    */
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import java.util.*;
 import java.io.*;
@@ -57,13 +59,13 @@ import tmltranslator.*;
 import ui.tmlcompd.*;
 import ui.ConfigurationTTool;
 
-public class TMLCCodeGenerationMakefile	{
+public class TMLModelCompilerMakefile	{
 
 	private String CR = "\n";
 	private String CR2 = "\n\n";
 	private StringBuffer code = new StringBuffer();
 	
-	public TMLCCodeGenerationMakefile( String ApplicationName )	{
+	public TMLModelCompilerMakefile( String ApplicationName )	{
 		
 		code.append(
 		"#In order to compile wpd, please define EMBB_INSTALL, either as an environment" + CR +
diff --git a/src/tmltranslator/ctranslator/TMLCCodeGenerationSyntaxCheck.java b/src/tmltranslator/modelcompiler/TMLModelCompilerParser.java
similarity index 68%
rename from src/tmltranslator/ctranslator/TMLCCodeGenerationSyntaxCheck.java
rename to src/tmltranslator/modelcompiler/TMLModelCompilerParser.java
index 0a3b0c61a9f3f7f4bdeb9f098473d2ededdefc03..07a6ea00ec4e7c397b852c2fbcc8647bff64625e 100755
--- a/src/tmltranslator/ctranslator/TMLCCodeGenerationSyntaxCheck.java
+++ b/src/tmltranslator/modelcompiler/TMLModelCompilerParser.java
@@ -1,6 +1,7 @@
-/**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+/**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille, Andrea ENRICI
  *
  * ludovic.apvrille AT enst.fr
+ * andrea.enrici AT nokia.com
  *
  * This software is a computer program whose purpose is to allow the
  * edition of TURTLE analysis, design and deployment diagrams, to
@@ -36,25 +37,26 @@
  * knowledge of the CeCILL license and that you accept its terms.
  *
  * /**
- * Class TMLCCodeGenerationSyntaxCheck
- * Used for checking for errors before generating the application C code
+ * Class TMLModelCompilerParser
+ * Parse models before compiling them into control code
  * Creation: 20/03/2015
  * @version 1.0 20/03/2015
+ * @modified 09/09/2016
  * @author Andrea ENRICI
  * @see
  */
 
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import tmltranslator.*;
 import java.util.*;
 import myutil.*;
 
-public class TMLCCodeGenerationSyntaxCheck {
+public class TMLModelCompilerParser {
     
 		public TMLActivityElement element;
-		private ArrayList<TMLCCodeGenerationError> errors;
+		private ArrayList<TMLModelCompilerError> errors;
 		private ArrayList<TMLTask> mappedTasks;
 		private TMLMapping tmap;
 		private TMLModeling tmlm;
@@ -69,9 +71,9 @@ public class TMLCCodeGenerationSyntaxCheck {
     public String message;
 		public TMLTask task;
     
-    public TMLCCodeGenerationSyntaxCheck( TMLMapping _tmap, TMLModeling _tmlm, TMLArchitecture _tmla ) {
+    public TMLModelCompilerParser( TMLMapping _tmap, TMLModeling _tmlm, TMLArchitecture _tmla ) {
 			//mappedTasks = _mappedTasks;
-			errors = new ArrayList<TMLCCodeGenerationError>();
+			errors = new ArrayList<TMLModelCompilerError>();
 			tmap = _tmap;
 			tmlm = _tmlm;
 			tmla = _tmla;
@@ -79,12 +81,12 @@ public class TMLCCodeGenerationSyntaxCheck {
     }
 
 	  public void addError( String message, int type )	{
-			TMLCCodeGenerationError error = new TMLCCodeGenerationError( type );
+			TMLModelCompilerError error = new TMLModelCompilerError( type );
 			error.message = message;
 			errors.add( error );
 		}
 
-  	public ArrayList<TMLCCodeGenerationError> getErrors() {
+  	public ArrayList<TMLModelCompilerError> getErrors() {
 			return errors;
 		}
 
@@ -122,13 +124,13 @@ public class TMLCCodeGenerationSyntaxCheck {
 					destinationPort = ch.getDestinationPort();
 					if( originPort.isPrex() )	{
 						if( ch.getOriginTask().getReadChannels().size() > 0 )	{
-							addError( "Port " + originPort.getName() + " cannot be marked as prex. Task " + ch.getOriginTask().getName() + " has input channels", TMLCCodeGenerationError.ERROR_STRUCTURE );
+							addError( "Port " + originPort.getName() + " cannot be marked as prex. Task " + ch.getOriginTask().getName() + " has input channels", TMLModelCompilerError.ERROR_STRUCTURE );
 						}
 						foundPrex = true;
 					}
 					if( destinationPort.isPostex() )	{
 						if( ch.getDestinationTask().getWriteChannels().size() > 0 )	{
-							addError( "Port " + destinationPort.getName() + " cannot be marked as postex. Task " + ch.getDestinationTask().getName() + " has output channels", TMLCCodeGenerationError.ERROR_STRUCTURE );
+							addError( "Port " + destinationPort.getName() + " cannot be marked as postex. Task " + ch.getDestinationTask().getName() + " has output channels", TMLModelCompilerError.ERROR_STRUCTURE );
 						}
 						foundPostex = true;
 					}
@@ -137,13 +139,13 @@ public class TMLCCodeGenerationSyntaxCheck {
 					originPort = ch.getOriginPorts().get(0);
 					if( originPort.isPrex() )	{
 						if( ch.getOriginTasks().get(0).getReadChannels().size() > 0 )	{
-							addError( "Port " + originPort.getName() + " cannot be marked as prex. Task " + ch.getOriginTask().getName() + " has input channels", TMLCCodeGenerationError.ERROR_STRUCTURE );
+							addError( "Port " + originPort.getName() + " cannot be marked as prex. Task " + ch.getOriginTask().getName() + " has input channels", TMLModelCompilerError.ERROR_STRUCTURE );
 						}
 						foundPrex = true;
 					}
 					for( TMLPort port: ch.getDestinationPorts() )	{	//check all destination ports: they cannot be marked as postex
 						if( port.isPostex() )	{
-							addError( "Port " + port.getName() + " belongs to a fork channel: it cannot be marked as postex", TMLCCodeGenerationError.ERROR_STRUCTURE );
+							addError( "Port " + port.getName() + " belongs to a fork channel: it cannot be marked as postex", TMLModelCompilerError.ERROR_STRUCTURE );
 						}
 					}
 				}
@@ -152,28 +154,28 @@ public class TMLCCodeGenerationSyntaxCheck {
 					destinationPort = ch.getDestinationPorts().get(0);
 					if( destinationPort.isPostex() )	{
 						if( ch.getDestinationTasks().get(0).getWriteChannels().size() > 0 )	{
-							addError( "Port " + destinationPort.getName() + " cannot be marked as postex. Task " + ch.getDestinationTask().getName() + " has output channels", TMLCCodeGenerationError.ERROR_STRUCTURE );
+							addError( "Port " + destinationPort.getName() + " cannot be marked as postex. Task " + ch.getDestinationTask().getName() + " has output channels", TMLModelCompilerError.ERROR_STRUCTURE );
 						}
 						foundPostex = true;
 					}
 					for( TMLPort port: ch.getOriginPorts() )	{	//check all origin ports: they cannot be marked as prex
 						if( port.isPrex() )	{
-							addError( "Port " + port.getName() + " belongs to a join channel: it cannot be marked as prex", TMLCCodeGenerationError.ERROR_STRUCTURE );
+							addError( "Port " + port.getName() + " belongs to a join channel: it cannot be marked as prex", TMLModelCompilerError.ERROR_STRUCTURE );
 						}
 					}
 				}
 				if( originPort.isPostex() )	{
-						addError( "Port " + originPort.getName() + " cannot be marked as postex", TMLCCodeGenerationError.ERROR_STRUCTURE );
+						addError( "Port " + originPort.getName() + " cannot be marked as postex", TMLModelCompilerError.ERROR_STRUCTURE );
 				}
 				if( destinationPort.isPrex() )	{
-						addError( "Port " + destinationPort.getName() + " cannot be marked as postex", TMLCCodeGenerationError.ERROR_STRUCTURE );
+						addError( "Port " + destinationPort.getName() + " cannot be marked as postex", TMLModelCompilerError.ERROR_STRUCTURE );
 				}
 			}
 			if( !foundPrex )	{
-				addError( "No suitable channel in the application diagram has been marked as prex", TMLCCodeGenerationError.ERROR_STRUCTURE );
+				addError( "No suitable channel in the application diagram has been marked as prex", TMLModelCompilerError.ERROR_STRUCTURE );
 			}
 			if( !foundPostex )	{
-				addError( "No suitable channel in the application diagram has been marked as postex", TMLCCodeGenerationError.ERROR_STRUCTURE );
+				addError( "No suitable channel in the application diagram has been marked as postex", TMLModelCompilerError.ERROR_STRUCTURE );
 			}
 		}
 
@@ -187,7 +189,7 @@ public class TMLCCodeGenerationSyntaxCheck {
 							for( TMLPort port: channel.getDestinationPorts() )	{
 								if( port.getName().equals( portName ) )	{
 										addError( "Port " + portName + " is part of a fork channel. It cannot be mapped to a CP",
-															TMLCCodeGenerationError.ERROR_STRUCTURE );
+															TMLModelCompilerError.ERROR_STRUCTURE );
 								}
 							}
 						}
@@ -195,38 +197,40 @@ public class TMLCCodeGenerationSyntaxCheck {
 				}
 			}
 		}
-
-		private void checkForXFTasks()	{	//check that the Operations have been correctly modeled with X and F tasks
-
-			HashSet<String> xTasksList = new HashSet<String>();
-			HashSet<String> fTasksList = new HashSet<String>();
-
-			for( TMLTask task: tmlm.getTasks() )	{
-				if( task.getTaskName().length() > 2 )	{
-					String name = task.getTaskName();
-					String prefix = task.getTaskName().substring(0,2);
-					if( prefix.equals( "X_" ) )	{
-						xTasksList.add( name.substring( 2, name.length() ) );
-					}
-					else if( prefix.equals( "F_" ) )	{
-						fTasksList.add( name.substring( 2, name.length() ) );
-					}
-					else	{
-						addError( "Task " + task.getTaskName() + " has a not a valid name: no X_ or F_ prefix has been detected", TMLCCodeGenerationError.ERROR_STRUCTURE );
-					}
-				}
-				else	{
-					addError( "Task " + task.getTaskName() + " has a not a valid name (too short)", TMLCCodeGenerationError.ERROR_STRUCTURE );
-				}
-			}
-			if( ( xTasksList.size() > 0 ) && ( fTasksList.size() > 0 ) )	{
-				for( String name: xTasksList )	{
-					if( !fTasksList.contains( name ) )	{
-						addError( "F task for operation " + name + " has not been instantiated", TMLCCodeGenerationError.ERROR_STRUCTURE );
-					}
-				}
-			}
-		}
+    
+	// Check that a Composite component contains only one data-processing Primitive component...TO DO
+    private void checkForXFTasks()	{
+
+        HashSet<String> xTasksList = new HashSet<String>();
+        HashSet<String> fTasksList = new HashSet<String>();
+
+        for( TMLTask task: tmlm.getTasks() )	{
+            TraceManager.addDev( "Task " + task.toString() + " is of " + task.getClass() );
+            if( task.getTaskName().length() > 2 )	{
+                String name = task.getTaskName();
+                String prefix = task.getTaskName().substring(0,2);
+                if( prefix.equals( "X_" ) )	{   //This is erroneous, there cannot be such a check. The data-processing task is defined as the one that is connected to data channels
+                    xTasksList.add( name.substring( 2, name.length() ) );
+                }
+                else if( prefix.equals( "F_" ) )	{
+                    fTasksList.add( name.substring( 2, name.length() ) );
+                }
+                else	{
+                    addError( "Task " + task.getTaskName() + " has a not a valid name: no X_ or F_ prefix has been detected", TMLModelCompilerError.ERROR_STRUCTURE );
+                }
+            }
+            else	{
+                addError( "Task " + task.getTaskName() + " has a not a valid name (too short)", TMLModelCompilerError.ERROR_STRUCTURE );
+            }
+        }
+        if( ( xTasksList.size() > 0 ) && ( fTasksList.size() > 0 ) )	{
+            for( String name: xTasksList )	{
+                if( !fTasksList.contains( name ) )	{
+                    addError( "F task for operation " + name + " has not been instantiated", TMLModelCompilerError.ERROR_STRUCTURE );
+                }
+            }
+        }
+    }
 
 		private void checkMappingOfTasks()	{	//check that all tasks in the application have been mapped
 
@@ -237,7 +241,7 @@ public class TMLCCodeGenerationSyntaxCheck {
 			}
 			for( TMLTask task: tmlm.getTasks() )	{
 				if( !mappedTasksList.contains( task.getTaskName() ) )	{
-					addError( "Task " + task.getTaskName() + " has not been mapped", TMLCCodeGenerationError.ERROR_STRUCTURE );
+					addError( "Task " + task.getTaskName() + " has not been mapped", TMLModelCompilerError.ERROR_STRUCTURE );
 				}
 			}
 		}
diff --git a/src/tmltranslator/modelcompiler/TMLPECParser.java b/src/tmltranslator/modelcompiler/TMLPECParser.java
new file mode 100755
index 0000000000000000000000000000000000000000..bf66c7c3ccad26f39bab9d0f97ecabf39389aba7
--- /dev/null
+++ b/src/tmltranslator/modelcompiler/TMLPECParser.java
@@ -0,0 +1,1923 @@
+/**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille, Andrea Enrici
+
+   ludovic.apvrille AT enst.fr
+   andrea.enrici AT enstr.fr
+
+   This software is a computer program whose purpose is to allow the
+   edition of TURTLE analysis, design and deployment diagrams, to
+   allow the generation of RT-LOTOS or Java code from this diagram,
+   and at last to allow the analysis of formal validation traces
+   obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+   from INRIA Rhone-Alpes.
+
+   This software is governed by the CeCILL  license under French law and
+   abiding by the rules of distribution of free software.  You can  use,
+   modify and/ or redistribute the software under the terms of the CeCILL
+   license as circulated by CEA, CNRS and INRIA at the following URL
+   "http://www.cecill.info".
+
+   As a counterpart to the access to the source code and  rights to copy,
+   modify and redistribute granted by the license, users are provided only
+   with a limited warranty  and the software's author,  the holder of the
+   economic rights,  and the successive licensors  have only  limited
+   liability.
+
+   In this respect, the user's attention is drawn to the risks associated
+   with loading,  using,  modifying and/or developing or reproducing the
+   software by the user in light of its specific status of free software,
+   that may mean  that it is complicated to manipulate,  and  that  also
+   therefore means  that it is reserved for developers  and  experienced
+   professionals having in-depth computer knowledge. Users are therefore
+   encouraged to load and test the software's suitability as regards their
+   requirements in conditions enabling the security of their systems and/or
+   data to be ensured and,  more generally, to use and operate it in the
+   same conditions as regards security.
+
+   The fact that you are presently reading this means that you have had
+   knowledge of the CeCILL license and that you accept its terms.
+
+   /**
+   * Class TMLPECParser
+   * Creation: 01/09/2016
+   * @version 1.0 01/09/2016
+   * @author Andrea ENRICI
+   * @see
+   */
+
+package tmltranslator.modelcompiler;;
+
+import java.util.*;
+import java.io.*;
+import java.nio.*;
+import java.nio.charset.*;
+import java.nio.file.*;
+import javax.swing.*;
+import javax.swing.event.*;
+import myutil.*;
+
+import tmltranslator.*;
+import ui.tmlcompd.*;
+import ui.ConfigurationTTool;
+import ui.*;
+
+public class TMLPECParser	{
+
+	public String title;
+
+	private String CR = "\n";
+	private String CR2 = "\n\n";
+	private String TAB = "\t";
+	private String TAB2 = "\t\t";
+	private String TAB3 = "\t\t\t";
+	private String TAB4 = "\t\t\t\t";
+	private String SPACE = " ";
+	private String SEMICOLON = ";";
+	private String COLON = ",";
+    private String FORBIDDEN_CHARACTERS = ";|é|è|ê|ë|ù|ü|à|â|ö|ï|ç|\"|\\/|\\%|\\(|\\)|\\.|\\'|\\?|\\!|\\,|\\@|\\$|\\#|\\-";   // Characters forbidden in ID names
+
+    // List of reserved keywords
+    private final static String DMA_KW = "DMA";
+    private final static String CPU_KW = "CPU";
+    private final static String MEMORY_KW = "MEMORY";
+    private final static String HWA_KW = "HWA";
+
+    private final static String Operation_KW = "Operation";
+    private final static String Execute_KW = "executes";
+
+    // List of error codes
+    private final static int ERROR_SEPARATOR = 0;
+    private final static int ERROR_SEMICOLON = 1;
+    private final static int ERROR_MULTIPLE_DECLARATION = 2;
+    private final static int ERROR_UNVALID_CHARACTERS = 3;
+
+    // Parser data structures
+    private ArrayList<String> cpus;
+    private ArrayList<String> dmas;
+    private ArrayList<String> memories;
+    private ArrayList<String> hwas;
+
+    private ArrayList<String> operations;
+    private ArrayList<ArrayList<String>> unitsOps;
+
+	private ArrayList<TMLPECParserError> errors;
+	private ArrayList<TMLPECParserError> warnings;
+
+    private File file;
+
+	private String debugFileName;
+	PrintWriter outputStream;
+
+    JFrame frame;
+
+	public TMLPECParser( File _file )	{
+        file = _file;
+		init();
+	}
+
+    private void init() {
+         cpus = new ArrayList<String>();
+         dmas = new ArrayList<String>();
+         memories = new ArrayList<String>();
+         hwas = new ArrayList<String>();
+         operations = new ArrayList<String>();
+         unitsOps = new ArrayList<ArrayList<String>>();
+         errors = new ArrayList<TMLPECParserError>();
+         warnings = new ArrayList<TMLPECParserError>();
+    }
+
+    public void parsePEC()  {
+
+        // Temporary data structures to store the three sections of a .pec file
+        ArrayList<String> unitDeclarationLines = new ArrayList<String>();
+        ArrayList<String> opLines = new ArrayList<String>();
+        ArrayList<String> unitToOpsLines = new ArrayList<String>();
+        ArrayList<String> errorLines = new ArrayList<String>();
+
+        Charset charset = Charset.forName("US-ASCII");
+        try( BufferedReader reader = Files.newBufferedReader( Paths.get( file.getAbsolutePath() ), charset ) ) {
+            String line = null;
+            while( (line = reader.readLine()) != null ) {
+                if( line.length() > 0 ) { // Filter empty lines
+                    if( line.charAt(0) != '%' ) {   // Ignore lines starting with % as they are comments
+                        // So far there are three cases: diplodocus-to-unit mapping, operation declatation, operation-to-unit mapping
+                        // Therefore trim the file in 3 separate data structures, then parse each of these
+                        // data-structures
+                        String arr[] = line.split( SPACE );
+                        String word = arr[0];
+                        switch( word )  {
+                            case Operation_KW:
+                                //System.out.println( "OPERATION DECLARATION: " + line );
+                                opLines.add( line );
+                                break;
+                            case DMA_KW:
+                                //System.out.println( "DMA DECLARATION: " + line );
+                                unitDeclarationLines.add( line );
+                                break;
+                            case CPU_KW:
+                                //System.out.println( "CPU DECLARATION: " + line );
+                                unitDeclarationLines.add( line );
+                                break;
+                            case HWA_KW:
+                                //System.out.println( "HWA DECLARATION: " + line );
+                                unitDeclarationLines.add( line );
+                                break;
+                            case MEMORY_KW:
+                                //System.out.println( "MEMORY DECLARATION: " + line );
+                                unitDeclarationLines.add( line );
+                                break;
+                            default:
+                                if( arr[1].equals( Execute_KW ) )   {
+                                    //System.out.println( "UNIT-TO-OPERATION MAPPING: " + line );
+                                    unitToOpsLines.add( line );
+                                }
+                                else    {
+                                    System.out.println( "PEC PARSER ERROR: " + line );
+                                    errorLines.add( line );
+                                    JOptionPane.showMessageDialog( frame, "The PEC file contains several errors", "Syntax analysis failed", JOptionPane.INFORMATION_MESSAGE );
+                                }
+                                break;
+                        }
+                        // Associate each unit to an index that will be used in the data structure unitsOps to access
+                        // the list of operations that are associated to that unit, e.g., FEP_PSS has index 0 and
+                        // operations FFT, CWL, CWP, CWA, CWM, CWS, MOV.
+                        // Then unitsOps[0] contains the list FFT, CWL, CWP, CWA, CWM, CWS, MOV*
+                    }
+                }
+            }   // End of while loop
+            // Parse the declaration of operations: at this point the only certain thing is that the line begins with
+            // the keyword Operation
+            for( String s: opLines )    {
+                String[] opArray = s.split( SPACE );
+                for( int i = 1; i < opArray.length; i++ )    {  // i = 1 to skip the keyword Operation
+                    char c = opArray[i].charAt( opArray[i].length()-1 );
+                    if( c == ',' )   {
+                        parseIdentifier( opArray[i], operations );
+                    }
+                    else    {   // Test if the last character of the identier is a semicolon
+                        if( (c == ';') && (i != (opArray.length-1)) )    {
+                            raiseError( opArray[i], ERROR_SEMICOLON );   // ERROR: semicolon has been used as a wrong separator
+                        }
+                        else    {
+                            if( (c == ';') && (i == (opArray.length-1)) )    {
+                                parseIdentifier( opArray[i], operations );
+                            }
+                            else    {   // ERROR: the identifier is not followed by a valid separator
+                                raiseError( opArray[i], ERROR_SEPARATOR );
+                            }
+                        }
+                    }
+                }
+            }
+            // Parse the declaration of units: at this point the only certain thing is that the line begins with a valid keyword
+            for( String s: unitDeclarationLines )    {
+                String[] unitArray = s.split( SPACE );
+                for( int i = 1; i < unitArray.length; i++ )    {  // i = 1 to skip the keyword Operation
+                    char c = unitArray[i].charAt( unitArray[i].length()-1 );
+                    if( c == ',' )   {
+                        switch( unitArray[0] )  {
+                            case DMA_KW:
+                                parseIdentifier( unitArray[i], dmas );
+                                break;
+                            case MEMORY_KW:
+                                parseIdentifier( unitArray[i], memories );
+                                break;
+                            case CPU_KW:
+                                parseIdentifier( unitArray[i], cpus );
+                                break;
+                            case HWA_KW:
+                                parseIdentifier( unitArray[i], hwas );
+                                break;
+                        }
+                    }
+                    else    {   // Test if the last character of the identier is a semicolon
+                        if( (c == ';') && (i != (unitArray.length-1)) )    {
+                            raiseError( unitArray[i], ERROR_SEMICOLON );   // ERROR: semicolon has been used as a wrong separator
+                        }
+                        else    {
+                            if( (c == ';') && (i == (unitArray.length-1)) )    {
+                                parseIdentifier( unitArray[i], operations );
+                                switch( unitArray[1] )  {
+                                    case DMA_KW:
+                                        parseIdentifier( unitArray[i], dmas );
+                                        break;
+                                    case MEMORY_KW:
+                                        parseIdentifier( unitArray[i], memories );
+                                        break;
+                                    case CPU_KW:
+                                        parseIdentifier( unitArray[i], cpus );
+                                        break;
+                                    case HWA_KW:
+                                        parseIdentifier( unitArray[i], hwas );
+                                        break;
+                                }
+                            }
+                            else    {   // ERROR: the identifier is not followed by a valid separator
+                                raiseError( unitArray[i], ERROR_SEPARATOR );
+                            }
+                        }
+                    }
+                }
+            }
+            // Parse the mapping of operations to units
+            for( String s: unitToOpsLines )    {
+                String[] mapArray = s.split( SPACE );
+                ArrayList<String> mappingLine = new ArrayList<String>();
+                mappingLine.add( mapArray[0] );
+                parseIdentifier( mapArray[1], new ArrayList<String>() );  // Parse the keyword "executes", pass a fake data structure
+                for( int i = 2; i < mapArray.length; i++ )    {  // i = 1 to skip the keyword Operation
+                    char c = mapArray[i].charAt( mapArray[i].length()-1 );
+                    if( c == ',' )   {
+                        parseIdentifier( mapArray[i], mappingLine );
+                    }
+                    else    {   // Test if the last character of the identier is a semicolon
+                        if( (c == ';') && (i != (mapArray.length-1)) )    {
+                            raiseError( mapArray[i], ERROR_SEMICOLON );   // ERROR: semicolon has been used as a wrong separator
+                        }
+                        else    {
+                            if( (c == ';') && (i == (mapArray.length-1)) )    {
+                                parseIdentifier( mapArray[i], mappingLine );
+                            }
+                            else    {   // ERROR: the identifier is not followed by a valid separator
+                                raiseError( mapArray[i], ERROR_SEPARATOR );
+                            }
+                        }
+                    }
+                }
+                unitsOps.add( mappingLine );
+            }
+            //TraceManager.addDev( "\nFinished parsing the operations of line:\n" + operations.toString() );
+        } catch( IOException x ) {
+                System.err.format( "IOException: %s%n", x );
+        }
+        TraceManager.addDev( "*** Finished parsing ***\nOPERATION DECLARATION:\n" + operations.toString() );
+        TraceManager.addDev( "\nDMAS DECLARATION:\n" + dmas.toString() );
+        TraceManager.addDev( "\nHWAS DECLARATION:\n" + hwas.toString() );
+        TraceManager.addDev( "\nMEMORIES DECLARATION:\n" + memories.toString() );
+        TraceManager.addDev( "\nCPUS DECLARATION:\n" + cpus.toString() );
+        TraceManager.addDev( "\nUNIT TO OPERATIONS DECLARATION:\n" + unitsOps.toString() );
+    }
+
+    private void parseIdentifier( String id, ArrayList<String> dataBase )  {
+        
+        // Remove trailing character: comma or semicolon
+        id = id.substring( 0, id.length()-1 );
+        // Test that it does not contain special characters at the beginning and at the end
+        if( id.split( FORBIDDEN_CHARACTERS ).length == 1 )  {   // There are no special characters
+            if( !dataBase.contains( id ) ) {
+                dataBase.add( id );
+            }
+            else    {   // ERROR: the operation has been declared multiple times
+                raiseError( id, ERROR_MULTIPLE_DECLARATION );
+            }
+        }
+        else    {   // ERROR: the identifier contains special characters
+            raiseError( id, ERROR_UNVALID_CHARACTERS );
+        }
+    }
+
+    private void raiseError( String t, int errorCode )   {
+
+        TraceManager.addDev( "Error when parsing string " + t );
+        JOptionPane.showMessageDialog( frame, "The PEC file contains several errors", "Syntax analysis failed", JOptionPane.INFORMATION_MESSAGE );
+        // Put the error in the error list and pass it to the structure that shows the error in the left
+        // side of the graphical window
+    }
+
+//	private void init()	{
+//		mappedTasks = new ArrayList<TMLTask>();
+//		commElts = new ArrayList<TMLElement>();
+//		errors = new ArrayList<TMLCCodeGenerationError>();
+//		mainFileString = new StringBuffer();
+//		headerString = new StringBuffer();
+//		programString = new StringBuffer();
+//		initFileString = new StringBuffer();
+//		operationsList = new ArrayList<Operation>();
+//		SDRoperationsCounter = 0;
+//		signalsCounter = 0;
+//		signalsList = new ArrayList<Signal>();
+//		postexList = new ArrayList<TMLPort>();
+//		prexList = new ArrayList<TMLPort>();
+//		buffersList = new ArrayList<Buffer>();
+//		dataTransfersList = new ArrayList<DataTransfer>();
+//		debugFileName = ConfigurationTTool.CcodeDirectory + "debugFile.txt";
+//		tmlcpsList = new ArrayList<TMLCP>();
+//	}
+//
+//	public void toTextFormat()	{
+//
+//		ArrayList<TMLTask> mappedTasks = tmap.getMappedTasks();
+//		ArrayList<TMLElement> commElts = tmap.getMappedCommunicationElement();
+//
+//		//Create the data structures for signals, buffers, operations and data transfers
+//		openDebugFile();
+//		makeCommunicationPatternsList();	
+//		makeSignalsList();	//make the signals associated to operations, based on the tasks of operations
+//
+//		for( Signal sig: signalsList )	{
+//			//TraceManager.addDev( sig.toString() + CR );
+//			appendToDebugFile( sig.toString() + CR2 );
+//		}
+//		makeOperationsList( mappedTasks );	//make the list of operations based on the tasks in the app model
+//		setMappingParametersToBuffers();
+//		for( Buffer buff: buffersList )	{
+//			//TraceManager.addDev( buff.toString() + CR );
+//			appendToDebugFile( buff.toString() + CR );
+//		}
+//		makeDataTransfersList();
+//		for( DataTransfer dt: dataTransfersList )	{
+//		 		//TraceManager.addDev( dt.toString() );
+//				appendToDebugFile( dt.toString() );
+//		}
+//		appendToDebugFile( "\n" );
+//		for( Operation op: operationsList )	{
+//			//TraceManager.addDev( op.toString() );
+//			appendToDebugFile( op.toString() + CR );
+//		}
+//		closeDebugFile();
+//
+//		//Generate the C code
+//		generateMainFile();
+//		generateHeaderFile( mappedTasks );
+//		generateProgramFile();
+//		generateInitFile( mappedTasks );
+//	}
+//
+///**********************************************************************************
+// * 																CREATION OF DATA STRUCTURE PART
+// *********************************************************************************/
+//	//From the list of mapped tasks, built the list of operations. For SDR operations, only F_ tasks are considered.
+//	private void makeOperationsList( ArrayList<TMLTask> mappedTasks )	{
+//
+//		ArrayList<TMLTask> SDRXtasks = new ArrayList<TMLTask>();
+//		ArrayList<TMLTask> SDRFtasks = new ArrayList<TMLTask>();
+//		Buffer inBuffer, outBuffer;
+//		Signal outSignal;
+//		ArrayList<Signal> inSignals;
+//		String[] s;
+//		boolean[] prexPostexList = new boolean[2];
+//
+//		for( TMLTask task: mappedTasks )	{
+//			String taskName = task.getName().split( "__" )[1];
+//			s = taskName.split( "X_" );
+//			if( s.length > 1 )	{	//we are splitting an eXecution task
+//				SDRXtasks.add( task );
+//			}
+//			else	{	
+//				s = taskName.split( "F_" );
+//				if( s.length > 1 )	{	//we are splitting a Firing task
+//					SDRFtasks.add( task );
+//				}
+//			}
+//		}
+//		//Now couple the tasks to create SDRoperations
+//		for( TMLTask fTask: SDRFtasks )	{
+//			String fTaskName = fTask.getName().split( "__" )[1].split( "F_" )[1];
+//			for( TMLTask xTask: SDRXtasks )	{
+//				String xTaskName = xTask.getName().split( "__" )[1].split( "X_" )[1];
+//				if( xTaskName.equals( fTaskName ) )	{
+//					//Mind that signals are based on channels NOT on events!
+//					prexPostexList = getPrexPostex( xTask );
+//					inSignals = getInSignals( xTask );	//is null for Source operation
+//					outSignal = getOutSignal( xTask );	//is null for Sink operation
+//					//Get the ports of channels and associated them to buffers
+//					inBuffer = createInBuffer( xTask, tmap.getHwNodeOf( xTask ) );	//null for Source
+//					outBuffer = createOutBuffer( xTask, tmap.getHwNodeOf( xTask ) );	//null for Sink
+//					operationsList.add( new Operation( fTask, xTask, tmap.getHwNodeOf( xTask ), tmap.getHwNodeOf( fTask ), inSignals, outSignal, inBuffer, outBuffer, prexPostexList[0], prexPostexList[1] ) );
+//					SDRoperationsCounter++;
+//				}
+//			}
+//		}
+//	}
+//
+//	private boolean[] getPrexPostex( TMLTask xTask )	{
+//		
+//		boolean[] list = new boolean[2];
+//
+//		for( TMLChannel ch: xTask.getWriteTMLChannels() )	{	//perche testa tutti i canali
+//			if( ch.isBasicChannel() )	{
+//				if( ch.getOriginPort().isPrex() )	{
+//					list[0] = true;
+//					list[1] = false;
+//					return list;
+//				}
+//			}
+//			if( ch.isAForkChannel() )	{
+//				if( ch.getOriginPorts().get(0).isPrex() )	{
+//					list[0] = true;
+//					list[1] = false;
+//					return list;
+//				}
+//			}
+//		}
+//		for( TMLChannel ch: xTask.getReadTMLChannels() )	{	//perche testa tutti i canali
+//			if( ch.isBasicChannel() )	{
+//				if( ch.getDestinationPort().isPostex() )	{
+//					list[0] = false;
+//					list[1] = true;
+//					return list;
+//				}
+//			}
+//			if( ch.isAJoinChannel() )	{
+//				if( ch.getDestinationPorts().get(0).isPostex() )	{
+//					list[0] = false;
+//					list[1] = true;
+//					return list;
+//				}
+//			}
+//		}
+//		return list;
+//	}
+//
+//	//Create the inBuffer from the port of the read channel associated to the xTask
+//	private Buffer createInBuffer( TMLTask xTask, HwNode node )	{
+//	
+//		if( xTask.getReadTMLChannels().size() > 0 )	{
+//			TMLChannel readChannel = xTask.getReadTMLChannels().get(0);
+//			ArchUnitMEC mec = node.getArchUnitMEC();
+//			Buffer buff = new Buffer();
+//			int i;
+//			if( readChannel.isBasicChannel() )	{
+//				if( mec instanceof FepMEC )	{
+//					buff = new FepBuffer( "buff_" + readChannel.getDestinationPort().getName(), xTask );
+//					}
+//				else if( mec instanceof MapperMEC )	{
+//					buff = new MapperBuffer( "buff_" + readChannel.getDestinationPort().getName(), xTask );
+//				}
+//				else if( mec instanceof InterleaverMEC )	{
+//					buff = new InterleaverBuffer( "buff_" + readChannel.getDestinationPort().getName(), xTask );
+//				}
+//				else if( mec instanceof AdaifMEC )	{
+//					buff = new MMBuffer( "buff_" + readChannel.getDestinationPort().getName(), xTask );
+//				}
+//				else if( mec instanceof CpuMEC )	{
+//					buff = new MMBuffer( "buff_" + readChannel.getDestinationPort().getName(), xTask );
+//				}
+//				buffersList.add( buff );	//this line has to be commented if ch_in buffers are to be excluded from the C code
+//				return buff;
+//			}
+//			else	{
+//				for( i = 0; i < readChannel.getDestinationTasks().size(); i++ )	{
+//					if( readChannel.getDestinationTasks().get(i).getName().equals( xTask.getName() ) )	{
+//						break;
+//					}
+//				}
+//				if( mec instanceof FepMEC )	{
+//					buff = new FepBuffer( "buff_" + readChannel.getDestinationPorts().get(i).getName(), xTask );
+//					}
+//				else if( mec instanceof MapperMEC )	{
+//					buff = new MapperBuffer( "buff_" + readChannel.getDestinationPorts().get(i).getName(), xTask );
+//				}
+//				else if( mec instanceof InterleaverMEC )	{
+//					buff = new InterleaverBuffer( "buff_" + readChannel.getDestinationPorts().get(i).getName(), xTask );
+//				}
+//				else if( mec instanceof AdaifMEC )	{
+//					buff = new MMBuffer( "buff_" + readChannel.getDestinationPorts().get(i).getName(), xTask );
+//				}
+//				else if( mec instanceof CpuMEC )	{
+//					buff = new MMBuffer( "buff_" + readChannel.getDestinationPorts().get(i).getName(), xTask );
+//				}
+//				buffersList.add( buff );	//this line has to be commented if ch_in buffers are to be excluded from the C code
+//				return buff;
+//			}
+//		}
+//		return null;
+//	}
+//
+//	//Create the inBuffer from the port of the write channel associated to the xTask
+//	private Buffer createOutBuffer( TMLTask xTask, HwNode node )	{
+//	
+//		if( xTask.getWriteTMLChannels().size() > 0 )	{
+//			TMLChannel writeChannel = xTask.getWriteTMLChannels().get(0);
+//			ArchUnitMEC mec = node.getArchUnitMEC();
+//			Buffer buff = new Buffer();
+//			int i;
+//			if( writeChannel.isBasicChannel() )	{
+//				if( mec instanceof FepMEC )	{
+//					buff = new FepBuffer( "buff_" + writeChannel.getOriginPort().getName(), xTask );
+//				}
+//				else if( mec instanceof MapperMEC )	{
+//					buff = new MapperBuffer( "buff_" + writeChannel.getOriginPort().getName(), xTask );
+//				}
+//				else if( mec instanceof InterleaverMEC )	{
+//					buff = new InterleaverBuffer( "buff_" + writeChannel.getOriginPort().getName(), xTask );
+//				}
+//				else if( mec instanceof AdaifMEC )	{
+//					buff = new MMBuffer( "buff_" + writeChannel.getOriginPort().getName(), xTask );
+//				}
+//				else if( mec instanceof CpuMEC )	{
+//					buff = new MMBuffer( "buff_" + writeChannel.getOriginPort().getName(), xTask );
+//				}
+//				buffersList.add( buff );
+//				return buff;
+//			}
+//			else	{
+//				for( i = 0; i < writeChannel.getOriginTasks().size(); i++ )	{
+//					if( writeChannel.getOriginTasks().get(i).getName().equals( xTask.getName() ) )	{
+//						break;
+//					}
+//				}
+//				if( mec instanceof FepMEC )	{
+//					buff = new FepBuffer( "buff_" + writeChannel.getOriginPorts().get(i).getName(), xTask );
+//				}
+//				else if( mec instanceof MapperMEC )	{
+//					buff = new MapperBuffer( "buff_" + writeChannel.getOriginPorts().get(i).getName(), xTask );
+//				}
+//				else if( mec instanceof InterleaverMEC )	{
+//					buff = new InterleaverBuffer( "buff_" + writeChannel.getOriginPorts().get(i).getName(), xTask );
+//				}
+//				else if( mec instanceof AdaifMEC )	{
+//					buff = new MMBuffer( "buff_" + writeChannel.getOriginPorts().get(i).getName(), xTask );
+//				}
+//				else if( mec instanceof CpuMEC )	{
+//					buff = new MMBuffer( "buff_" + writeChannel.getOriginPorts().get(i).getName(), xTask );
+//				}
+//				buffersList.add( buff );
+//				return buff;
+//			}
+//		}
+//		return null;
+//	}
+//
+//	private ArrayList<Signal> getInSignals( TMLTask task )	{	//Find the signal associated to the write channel of task
+//
+//		TMLPort originPort, destinationPortCh, originPortSigChannel, destinationPortSigChannel;
+//		TMLChannel sigChannel;
+//		ArrayList<Signal> sigsList = new ArrayList<Signal>();
+//
+//		for( TMLChannel ch: task.getReadTMLChannels() )	{
+//			if( ch.isBasicChannel() )	{
+//				originPort = ch.getOriginPort();
+//				for( Signal sig: signalsList )	{
+//					sigChannel = sig.getTMLChannel();
+//					if( sigChannel.isBasicChannel() )	{
+//						if( sigChannel.getOriginPort().getName().equals( originPort.getName() ) )	{
+//							sigsList.add( sig );
+//						}
+//					}
+//				}
+//			}
+//			else if( ch.isAForkChannel() )	{
+//				originPort = ch.getOriginPorts().get(0);
+//				for( Signal sig: signalsList )	{
+//					sigChannel = sig.getTMLChannel();
+//					if( sigChannel.isAForkChannel() )	{
+//						if( sigChannel.getOriginPorts().get(0).getName().equals( originPort.getName() ) )	{
+//							sigsList.add( sig );
+//						}
+//					}
+//				}
+//			}
+//			else if( ch.isAJoinChannel() )	{	//take all signals that match the destination port of the join channel
+//				destinationPortCh = ch.getDestinationPorts().get(0);
+//				for( Signal sig: signalsList )	{
+//					sigChannel = sig.getTMLChannel();
+//					if( sigChannel.isAForkChannel() )	{
+//						destinationPortSigChannel = sigChannel.getDestinationPorts().get(0);
+//					}
+//					else	{	//there are no join channels associated to signals
+//						destinationPortSigChannel = sigChannel.getDestinationPort();
+//					}
+//					if( destinationPortCh.getName().equals( destinationPortSigChannel.getName() ) )	{
+//						sigsList.add( sig );
+//					}
+//				}
+//			}
+//		}
+//		return sigsList;
+//	}
+//
+//	private Signal getOutSignal( TMLTask task )	{	//Find the signal associated to the write channel of task
+//		
+//		TMLPort originPort, destinationPort, originPortSigChannel;
+//		TMLChannel sigChannel;
+//
+//		for( TMLChannel ch: task.getWriteTMLChannels() )	{
+//			if( ch.isBasicChannel() )	{
+//				originPort = ch.getOriginPort();
+//				for( Signal sig: signalsList )	{
+//					sigChannel = sig.getTMLChannel();
+//					if( sigChannel.isBasicChannel() )	{
+//						if( sigChannel.getOriginPort().getName().equals( originPort.getName() ) )	{
+//							return sig;
+//						}
+//					}
+//				}
+//			}
+//			else if( ch.isAForkChannel() )	{
+//				originPort = ch.getOriginPorts().get(0);
+//				for( Signal sig: signalsList )	{
+//					sigChannel = sig.getTMLChannel();
+//					if( sigChannel.isAForkChannel() )	{
+//						if( sigChannel.getOriginPorts().get(0).getName().equals( originPort.getName() ) )	{
+//							return sig;
+//						}
+//					}
+//				}
+//			}
+//			else if( ch.isAJoinChannel() )	{	//join channels are tricky because of the multiple source tasks and ports.
+//				ArrayList<TMLTask> tasksList = ch.getOriginTasks();	//get the index of the origin port
+//				int i;
+//				for( i = 0; i < tasksList.size(); i++ )	{
+//					if( tasksList.get(i).getName().equals( task.getName() ) )	{
+//						break;	//i is the index of the correct origin port
+//					}
+//				}
+//				TMLPort sourcePortCh = ch.getOriginPorts().get(i);
+//				for( Signal sig: signalsList )	{
+//					sigChannel = sig.getTMLChannel();
+//					if( sigChannel.isAForkChannel() )	{
+//						originPortSigChannel = sigChannel.getOriginPorts().get(0);
+//					}
+//					else	{	//there are no join channels associated to signals
+//						originPortSigChannel = sigChannel.getOriginPort();
+//					}
+//					if( sourcePortCh.getName().equals( originPortSigChannel.getName() ) )	{
+//						return sig;
+//					}
+//				}
+//			}
+//		}
+//		return null;
+//	}
+//
+//	private void setMappingParametersToBuffers()	{
+//		
+//		for( TMLCPLib tmlcplib: mappedCPLibs )	{
+//			ArrayList<String> bufferParameters = tmlcplib.getArtifacts().get(0).getBufferParameters();
+//			String portName = tmlcplib.getArtifacts().get(0).getPortName();
+//			for( Buffer buff: buffersList )	{
+//				if( buff.getName().equals( "buff_" + portName ) )	{
+//					buff.setMappingParameters( bufferParameters );
+//				}
+//			}
+//			
+//		}
+//	}
+//
+//	private void makeDataTransfersList()	{
+//
+//		ArrayList<Signal> inSignals;
+//		Signal outSignal;
+//
+//		for( TMLCPLib cplib: mappedCPLibs )	{
+//			if( cplib.getArtifacts().size() == 1 )	{
+//				String portName = cplib.getArtifacts().get(0).getPortName();	//only one mapped port per CP
+//				Object o = cplib.getArtifacts().get(0).getReferenceObject();
+//				inSignals = getDTInSignals( portName );
+//				String cpName = cplib.getName().split("::")[1];
+//				for( TMLCP tmlcp: tmlcpsList )	{
+//					if( tmlcp.getName().equals( cpName ) )	{
+//						DataTransfer dt = new DataTransfer( cplib, tmlcp, inSignals, null );	//outSignals are added later
+//						dataTransfersList.add( dt );
+//					}
+//				}
+//			}
+//		}
+//
+//		Signal newSig;
+//		ArrayList<Signal> newInSignalsList = new ArrayList<Signal>();
+//
+//		for( DataTransfer dt: dataTransfersList )	{
+//			Operation op = getOperationWithSameInputSignals( dt.getInSignals() );	//IMPORTANT: create a DT output signal and modifies operations input signals
+//			if( op != null )	{
+//				for( Signal sig: op.getInSignals() )	{
+//					newSig = new Signal( sig.getTMLChannel() );
+//					newSig.setName( sig.getName() + "_CP" );
+//					dt.addOutSignal( newSig );
+//					newInSignalsList.add( newSig );	//to be substitued to the inSignals of op
+//					signalsList.add( newSig );
+//				}
+//				Buffer inBuff = op.getInBuffer();	//the operation inBuffer is the dataTransfer outBuffer
+//				String portName = "buff_" + dt.getTMLCPLib().getArtifacts().get(0).getPortName();
+//				if( inBuff != null )	{	//the port mapped on the CP is associated to the CP output buffer
+//					if( inBuff.getName().equals( portName ) )	{
+//						dt.setOutBuffer( inBuff );
+//					}
+//				}
+//			}
+//			op.setInSignals( newInSignalsList );
+//			newInSignalsList = new ArrayList<Signal>();
+//		}
+//		for( DataTransfer dt: dataTransfersList )	{
+//			for( Signal inSignal: dt.getInSignals() )	{	//for each in signal corresponds an inBuffer
+//				String buffName = "buff_" + inSignal.getName();
+//				for( Buffer buff: buffersList )	{
+//					if( buff.getName().equals( buffName ) )	{
+//						dt.addInBuffer( buff );
+//					}
+//				}
+//			}
+//		}
+//	}
+//
+//	private Operation getOperationWithSameInputSignals( ArrayList<Signal> inSignals )	{
+//		
+//		int counter = 0;
+//		for( Operation op: operationsList )	{
+//			for( Signal sig: op.getInSignals() )	{
+//				if( inSignals.contains( sig ) )	{
+//					counter++;
+//				}
+//			}
+//			if( counter == inSignals.size() )	{
+//				return op;
+//			}
+//			counter = 0;
+//		}
+//		return null;
+//	}
+//
+//	private Operation getOperationWithSameOutputSignals( ArrayList<Signal> outSignals )	{
+//		
+//		int counter = 0;
+//		for( Operation op: operationsList )	{
+//			Signal sig = op.getOutSignal();	//operations have one and only one outSignal
+//			if( sig != null)	{
+//				if( outSignals.contains( sig ) )	{
+//					counter++;
+//				}
+//				if( counter == outSignals.size() )	{
+//					return op;
+//				}
+//				counter = 0;
+//			}
+//		}
+//		return null;
+//	}
+//
+//	//retrieve the signal whose channel has a destintation port equal to portName
+//	private ArrayList<Signal> getDTInSignals( String portName )	{
+//		
+//		TMLChannel channel;
+//		ArrayList<Signal> sigsList = new ArrayList<Signal>();
+//
+//		for( Signal sig: signalsList )	{
+//			channel = sig.getTMLChannel();
+//			if( channel.isBasicChannel() )	{
+//				if( channel.getDestinationPort().getName().equals( portName ) )	{
+//					sigsList.add( sig );
+//				}
+//			}
+//			else	{	//fork or join channel with multiple destination ports	
+//				for( TMLPort port: channel.getDestinationPorts() )	{
+//					if( port.getName().equals( portName ) )	{
+//						sigsList.add(sig );
+//					}
+//				}
+//			}
+//		}
+//		return sigsList;
+//	}
+//
+//	private void makeCommunicationPatternsList()	{
+//
+//		for( TMLCommunicationPatternPanel panel: tmlcpps )	{
+//			GTMLModeling gtmlm = new GTMLModeling( panel, true );
+//			TMLCP tmlcp = gtmlm.translateToTMLCPDataStructure( panel.getName() );
+//			tmlcpsList.add( tmlcp );
+//		}
+//	}
+//
+//	//Associate signals to operations and at the same time add signals to signalsList. Only works for SDR operations (so far)
+//	//If user makes a typo in the event name associated to a channel, then the signal is not created. Should raise an error!
+//	private void makeSignalsList()	{
+//		
+//		for( TMLChannel ch: tmlm.getChannels() )	{
+//			//for basic and for channels there is a one-to-one correspondence with signals. Do not consider events, for simplicity, so
+//			//far.
+//			if( ch.isBasicChannel() || ch.isAForkChannel() )	{
+//				signalsList.add( new Signal( ch ) );
+//			}
+//			else if( ch.isAJoinChannel() )	{	//basic signals must be created in order for the SDF scheduler to work
+//				for( TMLChannel tmlch: transformIntoBasicChannels( ch ) )	{
+//					signalsList.add( new Signal( tmlch ) );
+//				}
+//			}
+//		}
+//		return;
+//	}
+//
+///**********************************************************************************
+// * 																CODE GENERATION PART
+// *********************************************************************************/
+//
+//	private void generateMainFile()	{
+//		mainFileString.append( "#include \"" + applicationName + ".h\"" + CR2 );
+//		mainFileString.append( 	"int main(void)\t{" + CR + TAB + "/* USER TO DO */" +
+//														CR + TAB + "int status = " + applicationName + "_exec();" + CR + "}" );
+//	}
+//
+//	private void generateHeaderFile( ArrayList<TMLTask> mappedTasks )	{
+//
+//		getPrexAndPostexChannels();
+//		headerString.append( generateCodeForLibraries() );
+//		headerString.append( generateCodeForCustomTypes() );
+//		headerString.append( generateCodeForPrototypes() );
+//		headerString.append( buffersAndInstructionsDeclaration( true ) );
+//		headerString.append( generateCodeForSignals() );
+//	}
+//
+//	private void getPrexAndPostexChannels()	{
+//
+//		boolean foundPrex = false, foundPostex = false;
+//		TMLPort originPort, destinationPort;
+//
+//		//Fill the the prex and postex lists
+//		for( TMLChannel ch: tmlm.getChannels() )	{
+//			if( ch.isBasicChannel() )	{
+//				originPort = ch.getOriginPort();
+//				if( originPort.isPrex() )	{
+//					prexList.add( originPort );
+//				}
+//				destinationPort = ch.getDestinationPort();
+//				if( destinationPort.isPostex() )	{
+//					postexList.add( destinationPort );
+//				}
+//			}
+//			if( ch.isAForkChannel() )	{
+//				originPort = ch.getOriginPorts().get(0);
+//				if( originPort.isPrex() )	{
+//					prexList.add( originPort );
+//				}
+//			}
+//			if( ch.isAJoinChannel() )	{
+//				destinationPort = ch.getDestinationPorts().get(0);
+//				if( destinationPort.isPostex() )	{
+//					postexList.add( destinationPort );
+//				}
+//			}
+//		}
+//	}
+//
+//	private String generateCodeForLibraries()	{
+//		String s = "#ifndef " + applicationName + "_H" + CR +
+//							"#define " + applicationName + "_H" + CR +
+//							"#include <stdio.h>" + CR +
+//							"#include <stdint.h>" + CR +
+//							"#include <embb/fep.h>" + CR +
+//							"#include <embb/intl.h>" + CR +
+//							"#include <embb/mapper.h>" + CR +
+//							"#include <embb/adaif.h>" + CR +
+//							"#include <embb/memory.h>" + CR2 +
+//							"extern char fep_mss[];" + CR +
+//							"extern char adaif_mss[];" + CR +
+//							"extern char intl_mss[];" + CR +
+//							"extern char mapper_mss[];" + CR2;
+//		return s;
+//	}
+//
+//	private String generateCodeForPrototypes()	{
+//		String s = 	"/**** prototypes *****/" + CR +
+//								"extern int " + applicationName + "_exec(void);" + CR +
+//								"extern void init_buffers(void);" + CR +
+//								"extern bool exit_rule(void);" + CR +
+//								"extern void register_operations(void);" + CR +
+//								"extern void register_dataTransfers(void);" + CR +
+//								"extern void register_fire_rules(void);" + CR +
+//								"extern void init_signals(void);" + CR +
+//								"extern void init_operations(void);" + CR +
+//								"extern void init_CPs(void);" + CR +
+//								"extern void cleanup_operations_context(void);" + CR +
+//								"extern void cleanup_CPs_context(void);" + CR2;
+//		return s;
+//	}
+//
+//	private String buffersAndInstructionsDeclaration( boolean declaration )	{
+//
+//		TMLTask xTask, fTask;
+//		String ctxName;
+//		ArchUnitMEC taskMEC;
+//		Buffer inBuff, outBuff;
+//		StringBuffer buffersString = new StringBuffer( "/**** Buffers *****/" + CR );
+//		StringBuffer instructionsString = new StringBuffer( "/**** Operations Data Structures *****/" + CR );
+//
+//		for( Operation op: operationsList )	{
+//			if( op.getType() == Operation.SDR )	{
+//				xTask = op.getSDRTasks().get( Operation.X_TASK );
+//				fTask = op.getSDRTasks().get( Operation.F_TASK );
+//				inBuff = op.getInBuffer();
+//				outBuff = op.getOutBuffer();
+//				ctxName = op.getContextName();
+//				int xTaskOperationType = xTask.getOperationType();
+//				if( declaration )	{
+//					if( inBuff == null )	{	//for source operation
+//						buffersString.append( "extern" + SP + outBuff.getType() + SP + outBuff.getName() + SC + CR );
+//						instructionsString.append( "extern" + SP + OperationMEC.ContextList.get( xTaskOperationType ) + SP + ctxName + SC + CR );
+//					}
+//					else	{
+//						if( outBuff == null )	{	//for sink operation
+//							buffersString.append( "extern" + SP + inBuff.getType() + SP + inBuff.getName() + SC + CR );
+//							instructionsString.append( "extern" + SP + OperationMEC.ContextList.get( xTaskOperationType ) + SP + ctxName + SC + CR );
+//						}
+//						else	{	//for all the remaining operations
+//							buffersString.append( "extern" + SP + inBuff.getType() + SP + inBuff.getName() + SC + CR );
+//							//if( outBuff != null )	{
+//							buffersString.append( "extern" + SP + outBuff.getType() + SP + outBuff.getName() + SC + CR );
+//							instructionsString.append( "extern" + SP + OperationMEC.ContextList.get( xTaskOperationType ) + SP + ctxName + SC + CR );
+//							//}
+//						}
+//					}
+//				}
+//				else	{
+//					if( inBuff == null )	{	//for source operation
+//						buffersString.append( outBuff.getType() + SP + outBuff.getName() + SC + CR );
+//						instructionsString.append( OperationMEC.ContextList.get( xTaskOperationType ) + SP + ctxName + SC + CR );
+//					}
+//					else	{
+//						if( outBuff == null )	{	//for sink operation
+//							buffersString.append( inBuff.getType() + SP + inBuff.getName() + SC + CR );
+//							instructionsString.append( OperationMEC.ContextList.get( xTaskOperationType ) + SP + ctxName + SC + CR );
+//						}
+//						else	{	//for all the remaining operations
+//							buffersString.append( inBuff.getType() + SP + inBuff.getName() + SC + CR );
+//							//if( outBuff != null )	{
+//								buffersString.append( outBuff.getType() + SP + outBuff.getName() + SC + CR );
+//								instructionsString.append( OperationMEC.ContextList.get( xTaskOperationType ) + SP + ctxName + SC + CR );
+//							//}
+//						}
+//					}
+//				}
+//			}
+//		}
+//		instructionsString.append( CR2 + "/**** Data Transfers Instructions ****/" + CR );
+//		ArchUnitMEC archMEC = new CpuMEC();
+//		for( DataTransfer dt: dataTransfersList )	{
+//			TMLCPLib tmlcplib = dt.getTMLCPLib();
+//			int cpMECType = tmlcplib.getCPMECType();
+//			ctxName = dt.getContextName();
+//			if( cpMECType == CPMEC.CpuMemoryCopyMEC )	{
+//				if( declaration )	{
+//					instructionsString.append( "extern" + SP + archMEC.getContext() + SP + ctxName + SC + CR );
+//				}
+//				else	{
+//					instructionsString.append( archMEC.getContext() + SP + ctxName + SC + CR );
+//				}
+//			}
+//			if( cpMECType == CPMEC.SingleDmaMEC )	{
+//				int transferType = tmlcplib.getTransferTypes().get(0);
+//			for( String s: tmlcplib.getMappedUnits() )	{
+//					if( s.contains( CPMEC.dmaController ) )	{
+//						String dmaUnit = s.split(":")[1].replaceAll("\\s+","");
+//						archMEC = tmla.getHwCPUByName( dmaUnit ).MEC;
+//						break;
+//					}
+//				}
+//				if( declaration )	{
+//					if( transferType == CPMEC.IP2IP )	{	//there are two contexts to declare
+//						instructionsString.append( "extern" + SP + archMEC.getContext() + SP + ctxName + "_1" + SC + CR );
+//						instructionsString.append( "extern" + SP + archMEC.getContext() + SP + ctxName + "_0" + SC + CR );
+//					}
+//					else	{
+//						instructionsString.append( "extern" + SP + archMEC.getContext() + SP + ctxName + SC + CR );
+//					}
+//				}
+//				else	{
+//					if( transferType == CPMEC.IP2IP )	{	//there are two contexts to declare
+//						instructionsString.append( archMEC.getContext() + SP + ctxName + "_0" + SC + CR );
+//						instructionsString.append( archMEC.getContext() + SP + ctxName + "_1" + SC + CR );
+//					}
+//					else	{
+//						instructionsString.append( archMEC.getContext() + SP + ctxName + SC + CR );
+//					}
+//				}
+//			}
+//			if( cpMECType == CPMEC.DoubleDmaMEC )	{
+//				int suffix = 0;
+//				for( String s: tmlcplib.getMappedUnits() )	{
+//					ArrayList<Integer> transferTypes = tmlcplib.getTransferTypes();
+//					if( s.contains( CPMEC.dmaController ) )	{
+//						int transferType = tmlcplib.getTransferTypes().get(suffix);
+//						String dmaUnit = s.split(":")[1].replaceAll("\\s+","");
+//						archMEC = tmla.getHwCPUByName( dmaUnit ).MEC;
+//						if( declaration )	{
+//							if( transferType == CPMEC.IP2IP )	{	//there are two contexts to declare
+//								instructionsString.append( "extern" + SP + archMEC.getContext() + SP + ctxName + "_" + String.valueOf(suffix) + "_0" + SC + CR );
+//								instructionsString.append( "extern" + SP + archMEC.getContext() + SP + ctxName + "_" + String.valueOf(suffix) + "_1" + SC + CR );
+//							}
+//							else	{
+//								instructionsString.append( "extern" + SP + archMEC.getContext() + SP + ctxName + "_" + String.valueOf(suffix) + SC + CR );
+//							}
+//						}
+//						else	{
+//							if( transferType == CPMEC.IP2IP )	{	//there are two contexts to declare
+//								instructionsString.append( archMEC.getContext() + SP + ctxName + "_" + String.valueOf(suffix) + "_0" + SC + CR );
+//								instructionsString.append( archMEC.getContext() + SP + ctxName + "_" + String.valueOf(suffix) + "_1" + SC + CR );
+//							}
+//							else	{
+//								instructionsString.append( archMEC.getContext() + SP + ctxName + "_" + String.valueOf(suffix) + SC + CR );
+//							}
+//						}
+//						suffix++;
+//					}
+//				}
+//			}
+//		}
+//		return buffersString.toString() + CR + instructionsString.toString();
+//	}
+//
+//	private String generateCodeForSignals()	{
+//
+//		StringBuffer s = new StringBuffer( CR2 + "enum sigs_enu	{" + CR );
+//		for( Signal sig: signalsList )	{
+//			s.append( TAB + sig.getName() + "," + CR );
+//		}
+//		s.append( TAB + postexList.get(0).getName() + "," + CR );
+//		s.append( "NUM_SIGS };" + CR2 + "enum ops_enu	{" + CR );
+//
+//		for( Operation op: operationsList )	{
+//			s.append( TAB + op.getName() + ",\n" );
+//		}
+//		for( DataTransfer dt: dataTransfersList )	{
+//			s.append( TAB + dt.getName() + ",\n" );
+//		}
+//		s.append( "NUM_OPS };" + CR2 + "#endif" );
+//		return s.toString();
+//	}
+//
+//	private String generateCodeForCustomTypes()	{
+//		StringBuffer s = new StringBuffer();
+//		s.append( Signal.DECLARATION + CR2 );
+//		s.append( "/**** Buffers ****/" + CR );
+//		s.append( FepBuffer.DECLARATION + CR2 );
+//		s.append( MapperBuffer.DECLARATION + CR2 );
+//		s.append( InterleaverBuffer.DECLARATION + CR2 );
+//		s.append( MMBuffer.DECLARATION + CR2 );
+//		s.append( AdaifBuffer.DECLARATION + CR );
+//
+//		return s.toString();
+//	}
+//
+//	private void generateProgramFile()	{
+//
+//		/*JOptionPane.showMessageDialog( frame,
+//																	 "The TURTLE Analysis contains several errors",
+//																	 "Syntax analysis failed",
+//																	 JOptionPane.INFORMATION_MESSAGE );*/
+//		Scheduler scheduler = new Scheduler( Scheduler.JAIR );
+//		programString.append(
+//							"#include " + "\"" + applicationName + ".h\"" + CR2 +
+//							"int (*operation[NUM_OPS])();" + CR +
+//							"bool (*fire_rule[NUM_OPS])();" + CR +
+//							"SIG_TYPE sig[NUM_SIGS]={{0}};" + CR2 +
+//							"/******** " + applicationName + "_exec function *********/" + CR +
+//							"int " + applicationName + "_exec(void)	{" + CR + TAB +
+//							"bool valid_signal = false;" + CR + TAB +
+//							"bool blocked = true;" + CR + TAB +
+//							"int status = 0;" + CR + TAB +
+//							"register_operations();" + CR + TAB +
+//							"register_dataTransfers();" + CR + TAB +
+//							"register_fire_rules();" + CR + TAB +
+//							"init_buffers();" + CR + TAB +
+//							"init_signals();" + CR + TAB +
+//							"init_operations();" + CR + TAB +
+//							"init_CPs();" + CR2 + TAB +
+//							"/********* INIT PREX OPs signals ********/" + CR +
+//							generateCodeToInitPrexOperation() + CR + TAB +
+//							"/********* OPERATIONS scheduling ***************/" + CR + TAB +
+//							scheduler.getCode() + CR + TAB +
+//							//generateCodeForSinkOperation() + CR + TAB +
+//							"cleanup_operations_context();" + CR + TAB +
+//							"cleanup_CPs_context();" + CR + TAB +
+//							"return status;" + CR + "}" + CR2 );
+//		generateCodeForOperations();
+//		generateCodeForCommunicationPatterns();
+//		generateCodeToRegisterOperations();
+//		generateCodeToRegisterDataTransfers();
+//		generateCodeForFireRules();
+//		generateCodeToRegisterFireRules();
+//		generateCodeForExitRule();
+//	}
+//
+//	private String generateCodeToInitPrexOperation()	{
+//		
+//		StringBuffer s = new StringBuffer();
+//		for( TMLPort port: prexList )	{
+//			s.append( TAB + "sig[ " + port.getName() +" ].f = false;" + CR );
+//		}
+//		return s.toString();
+//	}
+//
+//	private String generateCodeForSinkOperation()	{
+//
+//		StringBuffer s = new StringBuffer();
+//		for( Operation op: operationsList )	{
+//			if( op.isPostex() )	{
+//				s.append( "op_" + op.getName() + "()" + SC );
+//				break;
+//			}
+//		}
+//		return s.toString();
+//	}
+//
+//	private void generateCodeForOperations()	{ //generate the code for the execution operations
+//		
+//		//for each operations add the exec code + the info for all the signals and stuff
+//		String exec_code = "";
+//
+//		for( Operation op: operationsList )	{
+//			if( op.getType() == Operation.SDR )	{
+//				programString.append( generateSDROperation( op ) );
+//			}
+//		}
+//	}
+//
+//	private String generateSDROperation( Operation op )	{
+//		
+//		//For SDR operations the xTask is used to retrieve the mapped unit
+//		String signalOutName = "";
+//		String signalInName = "";
+//		StringBuffer code = new StringBuffer();
+//		String ctxName = op.getContextName();
+//		TMLTask xTask = op.getSDRTasks().get( Operation.X_TASK );	
+//		TMLTask fTask =	op.getSDRTasks().get( Operation.F_TASK );
+//
+//		int xTaskOperationType = xTask.getOperationType();
+//
+//		if( op.getOutSignal() != null )	{
+//			signalOutName = op.getOutSignal().getName();
+//		}
+//		for( Signal sig: op.getInSignals() )	{
+//			signalInName += sig.getName();
+//		}
+//
+//		code.append( "int op_" + op.getName() + "()\t{" + CR /*+ getTaskAttributes( fTask )*/ + CR );
+//		if( op.isPrex() || op.isPostex() )	{
+//			code.append( TAB + "int status = 0;" + CR );
+//		}
+//
+//		//Mark input signals as false
+//		for( Signal sig: op.getInSignals() )	{
+//			code.append( TAB + "sig[" + sig.getName() + "].f = false;" + CR );
+//		}
+//		
+//		if( xTaskOperationType == FepOperationMEC.CwpMEC )	{
+//			CwpMEC cwp = new CwpMEC( ctxName, signalInName, signalOutName );
+//			code.append( cwp.getExecCode() );
+//		}
+//		else if( xTaskOperationType == FepOperationMEC.CwmMEC )	{
+//			CwmMEC cwm = new CwmMEC( ctxName, signalInName, signalOutName );
+//			code.append( cwm.getExecCode() );
+//		}
+//		else if( xTaskOperationType == FepOperationMEC.CwaMEC )	{
+//			CwaMEC cwa = new CwaMEC( ctxName, signalInName, "", signalOutName );
+//			code.append( cwa.getExecCode() );
+//		}
+//		else if( xTaskOperationType == FepOperationMEC.CwlMEC )	{
+//			CwlMEC cwl = new CwlMEC( ctxName, signalInName, signalOutName );
+//			code.append( cwl.getExecCode() );
+//		}
+//		else if( xTaskOperationType == FepOperationMEC.SumMEC )	{
+//			SumMEC sum = new SumMEC( ctxName, signalInName, signalOutName );
+//			code.append( sum.getExecCode() );
+//		}
+//		else if( xTaskOperationType == FepOperationMEC.FftMEC )	{
+//			FftMEC fft = new FftMEC( ctxName, signalInName, signalOutName );
+//			code.append( fft.getExecCode() );
+//		}
+//		else if( xTaskOperationType == OperationMEC.MappOperationMEC )	{
+//			MappOperationMEC mapp = new MappOperationMEC( ctxName, signalInName, signalOutName );
+//			code.append( mapp.getExecCode() );
+//		}
+//		else if( xTaskOperationType == OperationMEC.IntlOperationMEC )	{
+//			IntlOperationMEC intl = new IntlOperationMEC( ctxName, signalInName, signalOutName );
+//			code.append( intl.getExecCode() );
+//		}
+//		else if( xTaskOperationType == OperationMEC.AdaifOperationMEC )	{
+//			AdaifOperationMEC adaif = new AdaifOperationMEC( ctxName );
+//			code.append( adaif.getExecCode() );
+//		}
+//
+//		if( op.getOutSignal() != null )	{
+//			code.append( TAB + "sig[" + op.getOutSignal().getName() + "].f = true;" + CR );
+//		}
+//		else	{	//the postex
+//			if( postexList.size() > 0 )	{
+//				code.append( TAB + "sig[" + postexList.get(0).getName() + "].f = true;" + CR );
+//			}
+//			else	{
+//				code.append( CR );
+//			}
+//		}
+//		code.append( TAB + "return status;" + CR + "}" + CR2 );
+//
+//		return code.toString();
+//	}
+//
+//	private String getTaskAttributes( TMLTask task )	{
+//
+//		StringBuffer attributesList = new StringBuffer();
+//		String type, value;
+//
+//		String[] attributes = task.getAttributeString().split("/");
+//		for( int i = 0; i < attributes.length; i++ )	{
+//			if( attributes[i].length() > 1 )	{
+//				String s = attributes[i].split("\\.")[1];
+//				String name = s.split(":")[0];
+//				if( !name.contains( "__req" ) )	{	//filter out request parameters
+//					type = s.split(":")[1].split("=")[0];
+//					value = s.split(":")[1].split("=")[1];
+//					if( value.equals(" " ) )	{
+//						attributesList.append( TAB + type + " " + name + ";" + CR );
+//					}
+//					else	{
+//						attributesList.append( TAB + type + " " + name + " = " + value.substring( 0, value.length() - 1 ) + ";" + CR );
+//					}
+//				}
+//			}
+//		}
+//		return attributesList.toString().substring( 0, attributesList.length() - 1 );	//remove last CR
+//	}
+//
+//	private String getOutSignalName( TMLTask task )	{
+//		
+//		String s = "";
+//		if( task.getWriteChannels().size() > 0 )	{
+//			TMLWriteChannel ch = task.getWriteChannels().get(0);
+//			String signalName = ch.toString().split("__")[1];
+//			if( signalsList.contains( signalName + "_CPin" ) )	{
+//				s = signalName;
+//			}
+//			else	{
+//				s = signalName;
+//			}
+//			return s;
+//		}
+//		return "";
+//	}
+//
+//	private String getInSignalName( TMLTask task )	{
+//		
+//		String s = "";
+//		if( task.getReadChannels().size() > 0 )	{
+//			TMLReadChannel ch = task.getReadChannels().get(0);
+//			String signalName = ch.toString().split("__")[1];
+//			if( signalsList.contains( signalName + "_CPin" ) )	{
+//				s = signalName;
+//			}
+//			else	{
+//				s = signalName;
+//			}
+//			return s;
+//		}
+//		return "";
+//	}
+//
+//	private void generateCodeForCommunicationPatterns()	{
+//		
+//		int srcMemoryType = 0, dstMemoryType = 0;
+//		TMLCPLib tmlcplib;
+//		String s, ctxName, counter;
+//		Vector<String> attributes;
+//		ArchUnitMEC dmaArchMEC = new CpuMEC();
+//
+//		for( DataTransfer dt: dataTransfersList )	{
+//			tmlcplib = dt.getTMLCPLib();
+//			ctxName = dt.getContextName();
+//			attributes = tmlcplib.getAssignedAttributes();
+//			
+//			TraceManager.addDev( "Getting assigned attributes from tmlcplib:\n" + attributes.toString() );
+//
+//			String name = tmlcplib.getName().split("::")[0];
+//			programString.append( "int op_" + name + "()\t{" + CR + TAB + "int status = 0;" + CR );
+//			
+//			for( Signal sig: dt.getInSignals() )	{
+//				programString.append( TAB + "sig[ " + sig.getName() + " ].f = false;" + CR );
+//			}
+//			int cpMECType = tmlcplib.getCPMECType();
+//			Vector<String> mecAttributes = tmlcplib.getAssignedAttributes();
+//			if( cpMECType == CPMEC.CpuMemoryCopyMEC )	{
+//				CpuMemoryCopyMEC mec = new CpuMemoryCopyMEC( ctxName, mecAttributes );	//mem2ip
+//				programString.append( mec.getExecCode() );
+//			}
+//			if( cpMECType == CPMEC.SingleDmaMEC )	{
+//				for( String s1: tmlcplib.getMappedUnits() )	{
+//					if( s1.contains( CPMEC.dmaController ) )	{
+//						String dmaUnit = s1.split(":")[1].replaceAll("\\s+","");
+//						dmaArchMEC = tmla.getHwCPUByName( dmaUnit ).MEC;
+//					}
+//					if( s1.contains( CPMEC.sourceStorage ) )	{
+//						String memoryUnit = s1.split(":")[1].replaceAll("\\s+","");
+//						srcMemoryType = tmla.getHwMemoryByName( memoryUnit ).BufferType;
+//					}
+//					if( s1.contains( CPMEC.destinationStorage ) )	{
+//						String memoryUnit = s1.split(":")[1].replaceAll("\\s+","");
+//						dstMemoryType = tmla.getHwMemoryByName( memoryUnit ).BufferType;
+//					}
+//				}
+//				SingleDmaMEC mec = new SingleDmaMEC( ctxName, dmaArchMEC, srcMemoryType, dstMemoryType, tmlcplib.getTransferTypes().get(0), attributes );
+//				programString.append( mec.getExecCode() );
+//			}
+//			if( cpMECType == CPMEC.DoubleDmaMEC )	{
+//				ArrayList<Integer> transferTypes = tmlcplib.getTransferTypes();
+//				//first I must get the mapped DMA controllers and the memories
+//				Vector<Integer> srcMemoryTypes = new Vector<Integer>();
+//				Vector<Integer> dstMemoryTypes = new Vector<Integer>();
+//				Vector<ArchUnitMEC> dmaArchMECs = new Vector<ArchUnitMEC>();
+//				int iDma = 1;
+//				int iSrc = 1;
+//				int iDst = 1;
+////				int iteration = 1;	// fixing compilation
+//				for( String s1: tmlcplib.getMappedUnits() )	{	//there are two DMA_controllers
+//					/*TraceManager.addDev( "Comparing " + s1 + " with " + CPMEC.dmaController + "_" + String.valueOf(iDma) );
+//					TraceManager.addDev( "Comparing " + s1 + " with " + CPMEC.sourceStorage + "_" + String.valueOf(iSrc) );
+//					TraceManager.addDev( "Comparing " + s1 + " with " + CPMEC.destinationStorage + "_" + String.valueOf(iDst) );*/
+//					if( s1.contains( CPMEC.dmaController + "_" + String.valueOf(iDma) ) )	{
+//						String dmaUnit = s1.split(":")[1].replaceAll("\\s+","");
+//						dmaArchMECs.add( iDma-1, tmla.getHwCPUByName( dmaUnit ).MEC );
+//						iDma++;
+//					}
+//					if( s1.contains( CPMEC.sourceStorage + "_" + String.valueOf(iSrc) ) )	{
+//						String memoryUnit = s1.split(":")[1].replaceAll("\\s+","");
+//						srcMemoryTypes.add( iSrc-1, tmla.getHwMemoryByName( memoryUnit ).BufferType );
+//						iSrc++;
+//					}
+//					if( s1.contains( CPMEC.destinationStorage + "_" + String.valueOf(iDst) ) )	{
+//						String memoryUnit = s1.split(":")[1].replaceAll("\\s+","");
+//						dstMemoryTypes.add( iDst-1, tmla.getHwMemoryByName( memoryUnit ).BufferType );
+//						iDst++;
+//					}
+//				}
+//				/*TraceManager.addDev( "About to create the DoubleDmaMEC class" );
+//				for( Integer i: srcMemoryTypes )	{
+//					TraceManager.addDev( "srcMemoryTypes = " + i.intValue() );
+//				}
+//				for( Integer i: dstMemoryTypes )	{
+//					TraceManager.addDev( "dstMemoryTypes = " + i.intValue() );
+//				}
+//				for( ArchUnitMEC i: dmaArchMECs )	{
+//					TraceManager.addDev( "dmaArchMECs = " + i.toString() );
+//				}*/
+//				DoubleDmaMEC mec = new DoubleDmaMEC( ctxName, dmaArchMECs, srcMemoryTypes, dstMemoryTypes, transferTypes, attributes );
+//				programString.append( mec.getExecCode() );
+//			}
+//			for( Signal sig: dt.getOutSignals() )	{
+//				programString.append( TAB + "sig[ " + sig.getName() + " ].f = true;" + CR );
+//			}
+//			programString.append( TAB + "return status;" + CR + "}" + CR2 );
+//		}
+//	}
+//
+//	/*private DoubleDmaMEC getDoubleDmaMEC( TMLCPLib tmlcplib, int iteration, String ctxName, Vector<String> attributes, ArrayList<Integer> transferTypes )	{
+//
+//		int srcMemoryType = 0, dstMemoryType = 0;
+//		ArchUnitMEC dmaArchMEC = new CpuMEC();
+//		ArrayList<String> sizes = new ArrayList<String>();*/
+//		//sizes.add( (attributes.size() == 0 ) ? "/* USER TODO */" : attributes.get( DoubleDmaMEC.counter1Index ) );
+//		//sizes.add( (attributes.size() == 0 ) ? "/* USER TODO */" : attributes.get( DoubleDmaMEC.counter2Index ) );
+//
+///*		for( String s1: tmlcplib.getMappedUnits() )	{	//there are two DMA_controllers
+//			if( s1.contains( CPMEC.dmaController + "_" + String.valueOf(iteration) ) )	{
+//				String dmaUnit = s1.split(":")[1].replaceAll("\\s+","");
+//				dmaArchMEC = tmla.getHwCPUByName( dmaUnit ).MEC;
+//			}
+//			if( s1.contains( CPMEC.sourceStorage + "_" + String.valueOf(iteration) ) )	{
+//				String memoryUnit = s1.split(":")[1].replaceAll("\\s+","");
+//				srcMemoryType = tmla.getHwMemoryByName( memoryUnit ).BufferType;
+//			}
+//			if( s1.contains( CPMEC.destinationStorage + "_" + String.valueOf(iteration) ) )	{
+//				String memoryUnit = s1.split(":")[1].replaceAll("\\s+","");
+//				dstMemoryType = tmla.getHwMemoryByName( memoryUnit ).BufferType;
+//			}
+//		}
+//		DoubleDmaMEC mec = new DoubleDmaMEC( ctxName + "_" + String.valueOf(iteration), dmaArchMEC, srcMemoryType, dstMemoryType, transferTypes.get(iteration), attributes );
+//		return mec;
+//	}*/
+//
+//	private void generateCodeToRegisterOperations()	{
+//
+//		programString.append( "void register_operations( void )\t{" + CR );
+//		for( Operation op: operationsList )	{
+//			programString.append( TAB + "operation[" + op.getName() + "] = " + "op_" + op.getName() + ";" + CR );
+//		}
+//		programString.append( "}" + CR2 );
+//	}
+//
+//	private void generateCodeToRegisterDataTransfers()	{
+//
+//		programString.append( "void register_dataTransfers( void )\t{" + CR );
+//		for( DataTransfer dt: dataTransfersList )	{
+//			programString.append( TAB + "operation[" + dt.getName() + "] = " + "op_" + dt.getName() + ";" + CR );
+//		}
+//		programString.append( "}" + CR2 );
+//	}
+//
+//	private void generateCodeForFireRules()	{
+//
+//		programString.append( "/**** OPERATIONS FIRE RULES ****/" + CR );
+//		for( Operation op: operationsList )	{
+//			programString.append( "bool fr_" + op.getName() + "( void )\t{" + CR );
+//			programString.append( TAB + "return (" + op.getFireRuleCondition() + ");" + CR );
+//			programString.append( "}" + CR2 );
+//		}
+//		programString.append( CR );
+//		programString.append( "/**** DATA TRANSFERS FIRE RULES ****/" + CR );
+//		for( DataTransfer dt: dataTransfersList )	{
+//			programString.append( "bool fr_" + dt.getName() + "( void )\t{" + CR );
+//			programString.append( TAB + "return (" + SP + dt.getFireRuleCondition() + SP + ");" + CR );
+//			programString.append( "}" + CR2 );
+//		}
+//		programString.append( CR );
+//	}
+//
+//	private void generateCodeToRegisterFireRules()	{
+//
+//		programString.append( "void register_fire_rules( void )\t{" + CR );
+//		for( Operation op: operationsList )	{
+//			programString.append( TAB + "fire_rule[" + op.getName() + "] = " + "fr_" + op.getName() + ";" + CR );
+//		}
+//		for( DataTransfer dt: dataTransfersList )	{
+//			programString.append( TAB + "fire_rule[" + dt.getName() + "] = " + "fr_" + dt.getName() + ";" + CR );
+//		}
+//		programString.append( "}" + CR2 );
+//	}
+//
+//	private void generateCodeForExitRule()	{
+//		
+//		StringBuffer s = new StringBuffer();
+//		for( TMLPort port: postexList )	{
+//			s.append( "( sig[ " + port.getName() +" ].f == true ) &&" );
+//		}
+//		if( s.length() > 3 )	{
+//			programString.append( "bool exit_rule(void)\t{" + CR + TAB + "return " + s.toString().substring( 0, s.length() - 3 ) + SC + CR + "}" );
+//		}
+//		else	{
+//			programString.append( "bool exit_rule(void)\t{" + CR + TAB + "return " + s + SC + CR + "}" );
+//		}
+//	}
+//
+//	private void generateInitFile( ArrayList<TMLTask> mappedTasks )	{
+//		
+//		String init_code = "";
+//		String ctxName;
+//		String inSignalName = Signal.USERTODO, outSignalName = Signal.USERTODO;
+//		initFileString.append( "#include \"" + applicationName + ".h\"" + CR2 );
+//		initFileString.append( "/**** variables ****/" + CR2 );		
+//		initFileString.append( "char fep_mss[0x10000];" + CR );
+//		initFileString.append( "char adaif_mss[0x10000];" + CR );
+//		initFileString.append( "char intl_mss[0x41000];" + CR );
+//		initFileString.append( "char mapper_mss[0x8000];" + CR );
+//		initFileString.append( buffersAndInstructionsDeclaration( false ) + CR2 );
+//		generateCodeToInitializeBuffers();
+//		generateCodeToInitializeSignals();
+//		initFileString.append( "/**** init code ****/" + CR );
+//
+//		//Only for SDR operations
+//		for( Operation op: operationsList )	{
+//			if( op.getType() == Operation.SDR )	{
+//				TMLTask xTask = op.getSDRTasks().get( Operation.X_TASK );
+//				TMLTask fTask = op.getSDRTasks().get( Operation.X_TASK );
+//				int xTaskOperationType = xTask.getOperationType();
+//				int fTaskOperationType = fTask.getOperationType();
+//				ctxName = op.getContextName();
+//				if( op.getInSignals().size() > 0 )	{
+//					inSignalName = op.getInSignals().get(0).getName();
+//				}
+//				if( op.getOutSignal() != null )	{
+//					outSignalName = op.getOutSignal().getName();
+//				}
+//				switch( xTaskOperationType )	{
+//					case OperationMEC.CwpMEC:
+//						CwpMEC cwp = new CwpMEC( ctxName, inSignalName, outSignalName );
+//						init_code = cwp.getInitCode();
+//					break;
+//					case OperationMEC.CwmMEC:
+//						CwmMEC cwm = new CwmMEC( ctxName, inSignalName, outSignalName );
+//						init_code = cwm.getInitCode();
+//					break;
+//					case OperationMEC.CwaMEC:
+//						CwaMEC cwa = new CwaMEC( ctxName, inSignalName, "", outSignalName );
+//						init_code = cwa.getInitCode();
+//					break;
+//					case OperationMEC.CwlMEC:
+//						CwlMEC cwl = new CwlMEC( ctxName, inSignalName, outSignalName );
+//						init_code = cwl.getInitCode();
+//					break;
+//					case OperationMEC.SumMEC:
+//						SumMEC sum = new SumMEC( ctxName, inSignalName, outSignalName );
+//						init_code = sum.getInitCode();
+//					break;
+//					case OperationMEC.FftMEC:
+//						FftMEC fft = new FftMEC( ctxName, inSignalName, outSignalName );
+//						init_code = fft.getInitCode();
+//					break;
+//					case OperationMEC.IntlOperationMEC:
+//						IntlOperationMEC intl = new IntlOperationMEC( ctxName, inSignalName, outSignalName );
+//						init_code = intl.getInitCode();
+//					break;
+//					case OperationMEC.MappOperationMEC:
+//						MappOperationMEC mapp = new MappOperationMEC( ctxName, inSignalName, outSignalName );
+//						init_code = mapp.getInitCode();
+//					break;
+//					case OperationMEC.AdaifOperationMEC:
+//						AdaifOperationMEC adaif = new AdaifOperationMEC( ctxName );
+//						init_code = adaif.getInitCode();
+//					break;
+//					case OperationMEC.CpuOperationMEC:
+//						CpuOperationMEC cpu = new CpuOperationMEC( ctxName, inSignalName, outSignalName );
+//						init_code = cpu.getInitCode();
+//					break;
+//				}
+//			initFileString.append( init_code + CR );
+//			init_code = "";
+//			inSignalName = Signal.USERTODO;
+//			outSignalName = Signal.USERTODO;
+//			}
+//		}
+//
+//		generateInitRoutinesForCPs();
+//
+//		initFileString.append( "/**** init contexts ****/" + CR + "void init_operations(void)\t{" + CR );
+//		for( Operation op: operationsList )	{
+//			if( op.getType() == Operation.SDR )	{
+//				TMLTask xTask = op.getSDRTasks().get( Operation.X_TASK );
+//				ArchUnitMEC xTaskArchMEC = tmap.getHwNodeOf( xTask ).getArchUnitMEC();
+//				if( xTaskArchMEC instanceof FepMEC )	{
+//					initFileString.append( TAB + "init_" + xTask.getTaskName() + "();" + CR );
+//				}
+//				if( xTaskArchMEC instanceof MapperMEC )	{
+//					initFileString.append( TAB + "init_" + xTask.getTaskName() + "();" + CR );
+//				}
+//				if( xTaskArchMEC instanceof InterleaverMEC )	{
+//					initFileString.append( TAB + "init_" + xTask.getTaskName() + "();" + CR );
+//				}
+//				if( xTaskArchMEC instanceof AdaifMEC )	{
+//					initFileString.append( TAB + "init_" + xTask.getTaskName() + "();" + CR );
+//				}
+//			}
+//		}
+//		initFileString.append( "}" + CR2 );
+//
+//		//Init Communication Patterns. Only DMA transfers need init code
+//		initFileString.append( "/**** init CPs ****/" + CR + "void init_CPs(void)\t{" + CR );
+//		for( DataTransfer dt: dataTransfersList )	{
+//			TMLCPLib tmlcplib = dt.getTMLCPLib();
+//			String name = tmlcplib.getName().split("::")[0];
+//			if( !( tmlcplib.getCPMECType() == CPMEC.CpuMemoryCopyMEC ) )	{	//No need to create init routine for memory copy transfers
+//				initFileString.append( TAB + "init_" + name + "();" + CR );
+//			}
+//		}
+//		initFileString.append( "}" + CR2 );
+//
+//		//Clean-up context routines
+//		initFileString.append( "/**** cleanup contexts ****/" + CR );
+//		initFileString.append( "void cleanup_operations_context( void )\t{" + CR );
+//		for( Operation op: operationsList )	{
+//			if( op.getType() == Operation.SDR )	{
+//				TMLTask xTask = op.getSDRTasks().get( Operation.X_TASK );
+//				ctxName = op.getContextName();
+//				ArchUnitMEC xTaskArchMEC = tmap.getHwNodeOf( xTask ).getArchUnitMEC();
+//				if( xTaskArchMEC instanceof FepMEC )	{
+//					initFileString.append( TAB + FepMEC.Ctx_cleanup + "( &" + ctxName + " );" + CR );
+//				}
+//				if( xTaskArchMEC instanceof MapperMEC )	{
+//					initFileString.append( TAB + MapperMEC.Ctx_cleanup + "( &" + ctxName + " );" + CR );
+//				}
+//				if( xTaskArchMEC instanceof InterleaverMEC )	{
+//					initFileString.append( TAB + InterleaverMEC.Ctx_cleanup + "( &" + ctxName + " );" + CR );
+//				}
+//				if( xTaskArchMEC instanceof AdaifMEC )	{
+//					initFileString.append( TAB + AdaifMEC.Ctx_cleanup + "( &" + ctxName + " );" + CR );
+//				}
+//			}
+//		}
+//		initFileString.append( "}" + CR2 );
+//		initFileString.append( "void cleanup_CPs_context( void )\t{" + CR );
+//		//ArchUnitMEC dmaArchMEC = new CpuMEC();
+//
+//		for( DataTransfer dt: dataTransfersList )	{
+//			TMLCPLib tmlcplib = dt.getTMLCPLib();
+//			int cpMECType = tmlcplib.getCPMECType();
+//			int transferType;
+//			ctxName = dt.getContextName();
+//			Vector<String> mappedUnits = tmlcplib.getMappedUnits();
+//			switch( cpMECType )	{
+//				case CPMEC.CpuMemoryCopyMEC:
+//					initFileString.append( getCtxCleanupRoutine( ctxName, mappedUnits ) );
+//				break;
+//				case CPMEC.SingleDmaMEC:
+//					transferType = tmlcplib.getTransferTypes().get(0);
+//					/*for( String s: tmlcplib.getMappedUnits() )	{
+//						if( s.contains( CPMEC.dmaController ) )	{
+//							String dmaUnit = s.split(":")[1].replaceAll("\\s+","");
+//							dmaArchMEC = tmla.getHwCPUByName( dmaUnit ).MEC;
+//							break;
+//						}
+//					}*/
+//					if( transferType == CPMEC.IP2IP )	{
+//						initFileString.append( getCtxCleanupRoutine( ctxName + "_0", mappedUnits ) );
+//						initFileString.append( getCtxCleanupRoutine( ctxName + "_1", mappedUnits ) );
+//					}
+//					else	{
+//						initFileString.append( getCtxCleanupRoutine( ctxName, mappedUnits ) );
+//					}
+//				break;
+//				case CPMEC.DoubleDmaMEC:
+//					int suffix = 0;
+//					for( String s: tmlcplib.getMappedUnits() )	{	//there are two DMA_controllers
+//						if( s.contains( CPMEC.dmaController ) )	{
+//							transferType = tmlcplib.getTransferTypes().get(suffix);
+//							//String dmaUnit = s.split(":")[1].replaceAll("\\s+","");
+//							//dmaArchMEC = tmla.getHwCPUByName( dmaUnit ).MEC;
+//							if( transferType == CPMEC.IP2IP )	{
+//								initFileString.append( getCtxCleanupRoutine( ctxName + "_" + String.valueOf(suffix) + "_0", mappedUnits ) );
+//								initFileString.append( getCtxCleanupRoutine( ctxName + "_" + String.valueOf(suffix) + "_1", mappedUnits ) );
+//								//initFileString.append( TAB + dmaArchMEC.getCtxCleanupCode() + "(&" + ctxName + "_" + String.valueOf(suffix) + "_0);" + CR );
+//								//initFileString.append( TAB + dmaArchMEC.getCtxCleanupCode() + "(&" + ctxName + "_" + String.valueOf(suffix) + "_1);" + CR );
+//							}
+//							else	{
+//								initFileString.append( getCtxCleanupRoutine( ctxName + "_" + String.valueOf(suffix), mappedUnits ) );
+//								//initFileString.append( TAB + dmaArchMEC.getCtxCleanupCode() + "(&" + ctxName + "_" + String.valueOf(suffix) + ");" + CR );
+//							}
+//							suffix++;
+//						}
+//					}
+//				break;
+//			}	//end of switch
+//		}
+//		initFileString.append( "}" + CR );
+//	}
+//
+//	private void generateInitRoutinesForCPs()	{
+//
+//		//ArchUnitMEC dmaArchMEC = new CpuMEC();
+//		ArrayList<ArchUnitMEC> dmaArchMECList = new ArrayList<ArchUnitMEC>();
+//		int transferType, cpMECType;
+//		Vector<String> mappedUnits = new Vector<String>();
+//
+//		for( DataTransfer dt: dataTransfersList )	{
+//			TMLCPLib tmlcplib = dt.getTMLCPLib();
+//			cpMECType = tmlcplib.getCPMECType();
+//			mappedUnits = tmlcplib.getMappedUnits();
+//			String ctxName = dt.getContextName();
+//			String name = tmlcplib.getName().split("::")[0];
+//			switch( cpMECType )	{
+//				case CPMEC.CpuMemoryCopyMEC:
+//					initFileString.append( "void init_" + name + "()\t{" + CR );
+//					initFileString.append( getCtxInitRoutine( ctxName, mappedUnits ) );	//get the ctx_init routine, according to destination_storage in SD
+//				break;
+//				case CPMEC.SingleDmaMEC:
+//					transferType = tmlcplib.getTransferTypes().get(0);
+//					for( String s: tmlcplib.getMappedUnits() )	{
+//						if( s.contains( CPMEC.dmaController ) )	{
+//							String dmaUnit = s.split(":")[1].replaceAll("\\s+","");
+//							//dmaArchMEC = tmla.getHwCPUByName( dmaUnit ).MEC;
+//							break;
+//						}
+//					}
+//					initFileString.append( "void init_" + name + "()\t{" + CR );
+//					if( transferType == CPMEC.IP2IP )	{
+//						//initFileString.append( TAB + dmaArchMEC.getCtxInitCode() + "(&" + ctxName + "_0, (uintptr_t) " + dmaArchMEC.getLocalMemoryPointer() + " );" + CR );
+//						initFileString.append( getCtxInitRoutine( ctxName + "_0", mappedUnits ) );
+//						//initFileString.append( TAB + dmaArchMEC.getCtxInitCode() + "(&" + ctxName + "_1, (uintptr_t) " + dmaArchMEC.getLocalMemoryPointer() + " );" + CR + "}" + CR2 );
+//						initFileString.append( getCtxInitRoutine( ctxName + "_1", mappedUnits ) );
+//					}
+//					else	{
+//						//initFileString.append( TAB + dmaArchMEC.getCtxInitCode() + "(&" + ctxName + ", (uintptr_t) " + dmaArchMEC.getLocalMemoryPointer() + " );" + CR + "}" + CR2 );
+//						initFileString.append( getCtxInitRoutine( ctxName, mappedUnits ) );
+//					}
+//				break;
+//				case CPMEC.DoubleDmaMEC:
+//					initFileString.append( "void init_" + name + "()\t{" + CR );
+//					int suffix = 0;
+//					for( String s: tmlcplib.getMappedUnits() )	{	//there are two DMA_controllers
+//						if( s.contains( CPMEC.dmaController ) )	{
+//							transferType = tmlcplib.getTransferTypes().get(suffix);
+//							String dmaUnit = s.split(":")[1].replaceAll("\\s+","");
+//							//dmaArchMEC = tmla.getHwCPUByName( dmaUnit ).MEC ;
+//							if( transferType == CPMEC.IP2IP )	{
+//								//initFileString.append( TAB + dmaArchMEC.getCtxInitCode() + "(&" + ctxName + "_" + String.valueOf(suffix) + "_0, (uintptr_t) " + dmaArchMEC.getLocalMemoryPointer() + " );" + CR );
+//								initFileString.append( getCtxInitRoutine( ctxName + "_" + String.valueOf(suffix) + "_0", mappedUnits ) );
+//								//initFileString.append( TAB + dmaArchMEC.getCtxInitCode() + "(&" + ctxName + "_" + String.valueOf(suffix) + "_1, (uintptr_t) " + dmaArchMEC.getLocalMemoryPointer() + " );" + CR );
+//								initFileString.append( getCtxInitRoutine( ctxName + "_" + String.valueOf(suffix) + "_1", mappedUnits ) );
+//							}
+//							else	{
+//								//initFileString.append( TAB + dmaArchMEC.getCtxInitCode() + "(&" + ctxName + "_" + String.valueOf(suffix) + ", (uintptr_t) " + dmaArchMEC.getLocalMemoryPointer() + " );" + CR );
+//								initFileString.append( getCtxInitRoutine( ctxName + "_" + String.valueOf(suffix), mappedUnits ) );
+//							}
+//							suffix++;
+//						}
+//					}
+//				break;
+//			}	//end of switch statement
+//			initFileString.append( "}" + CR2 );
+//		}	//end of for statement
+//	}
+//
+//	private String getCtxInitRoutine( String ctxName, Vector<String> mappedUnits )	{
+//
+//		String filteredMemoryName = "";
+//		for( String s: mappedUnits )	{
+//			if( s.contains( "Dst_Storage_Instance" ) )	{
+//				filteredMemoryName = s.split(":")[1].replaceAll("\\s+","");
+//				if( filteredMemoryName.contains( "MAPPER" ) || filteredMemoryName.contains( "mapper" ) )	{
+//					return TAB + "mapper_ctx_init(&" + ctxName + ", (uintptr_t) mapper_mss );" + CR;
+//				}
+//				if( filteredMemoryName.contains( "FEP" ) || filteredMemoryName.contains( "fep" ) )	{
+//					return TAB + "fep_ctx_init(&" + ctxName + ", (uintptr_t) fep_mss );" + CR;
+//				}
+//				if( filteredMemoryName.contains( "INTL" ) || filteredMemoryName.contains( "intl" ) )	{
+//					return TAB + "intl_ctx_init(&" + ctxName + ", (uintptr_t) intl_mss );" + CR;
+//				}
+//				if( filteredMemoryName.contains( "ADAIF" ) || filteredMemoryName.contains( "adaif" ) )	{
+//					return TAB + "adaif_ctx_init(&" + ctxName + ", (uintptr_t) adaif_mss );" + CR;
+//				}
+//			}
+//		}
+//		return "/* USER TODO */";
+//	}
+//
+//	private String getCtxCleanupRoutine( String ctxName, Vector<String> mappedUnits )	{
+//
+//		String filteredMemoryName = "";
+//		for( String s: mappedUnits )	{
+//			if( s.contains( "Dst_Storage_Instance" ) )	{
+//				filteredMemoryName = s.split(":")[1].replaceAll("\\s+","");
+//				if( filteredMemoryName.contains( "MAPPER" ) || filteredMemoryName.contains( "mapper" ) )	{
+//					return TAB + "mapper_ctx_cleanup(&" + ctxName + ");" + CR;
+//				}
+//				if( filteredMemoryName.contains( "FEP" ) || filteredMemoryName.contains( "fep" ) )	{
+//					return TAB + "fep_ctx_cleanup(&" + ctxName + ");" + CR;
+//				}
+//				if( filteredMemoryName.contains( "INTL" ) || filteredMemoryName.contains( "intl" ) )	{
+//					return TAB + "intl_ctx_cleanup(&" + ctxName + ");" + CR;
+//				}
+//				if( filteredMemoryName.contains( "ADAIF" ) || filteredMemoryName.contains( "adaif" ) )	{
+//					return TAB + "adaif_ctx_cleanup(&" + ctxName + ");" + CR;
+//				}
+//			}
+//		}
+//		return "/* USER TODO */";
+//	}
+//
+//	private void generateCodeToInitializeBuffers()	{
+//
+//		initFileString.append( "void init_buffers()\t{" + CR );
+//
+//		for( Buffer buff: buffersList )	{
+//			initFileString.append( buff.getInitCode() + CR );
+//		}
+//
+//		initFileString.append( "}" + CR2 );
+//	}
+//
+//	private void generateCodeToInitializeSignals()	{
+//
+//		initFileString.append( "void init_signals()\t{" + CR );
+//		for( Signal sig: signalsList )	{
+//			initFileString.append( TAB + "sig[" + sig.getName() + "].f = false;" + CR );
+//			Buffer buff = getBufferFromSignal( sig );
+//			if( buff != null )	{
+//				initFileString.append( TAB + "sig[" + sig.getName() + "].pBuff = (" + buff.getType() + "*)" + SP + "&" + buff.getName() + SC + CR2 );
+//			}
+//			else	{
+//				initFileString.append( TAB + "sig[" + sig.getName() + "].pBuff = /* USER TO DO */" + SC + CR2 );
+//			}
+//		}
+//		initFileString.append( "}" + CR2 );
+//	}
+//
+//	private Buffer getBufferFromSignal( Signal sig )	{
+//
+//		String sigName = sig.getName();
+//		if( sigName.contains( "_CP" ) )	{	//filter out trailing _CP for CP's signals
+//			sigName = sigName.split( "_CP" )[0];
+//		}
+//		for( Buffer buff: buffersList )	{
+//			if( buff.getName().equals( "buff_" + sigName ) )	{
+//				return buff;
+//			}
+//		}
+//		return null;
+//	}
+//
+//	//for code generation scheduling, transform a join channel into a set of basic channels
+//	public ArrayList<TMLChannel> transformIntoBasicChannels( TMLChannel originalCh )	{
+//
+//		String chName, appName, dstPortName;
+//		int numSrcPorts;
+//		TMLChannel channel;
+//		ArrayList<TMLChannel> channelsList = new ArrayList<TMLChannel>();
+//
+//		if( originalCh.isAJoinChannel() )	{
+//			String[] s = originalCh.getName().split("__");
+//			numSrcPorts = s.length-2;
+//			appName = s[0];
+//			dstPortName = s[ s.length-1 ];
+//			for( int i = 0; i < numSrcPorts; i++ )	{
+//				chName = appName + "__" + s[i+1] + "__" + appName + "__" + dstPortName;
+//				channel = new TMLChannel( chName, null );
+//				channel.setPorts( originalCh.getOriginPorts().get(i), originalCh.getDestinationPorts().get(0) );
+//				channel.setTasks( originalCh.getOriginTasks().get(i), originalCh.getDestinationTasks().get(0) );
+//				channel.setType( originalCh.getType() );
+//				channel.setSize( originalCh.getSize() );
+//				channel.setMax( originalCh.getMax() );
+//				channelsList.add( channel );
+//			}
+//		}
+//		return channelsList;
+//	}
+//	
+//	private static String prepareString(String s) {
+//		return s.replaceAll("\\s", "");
+//	}
+//	
+//	public static String modifyString(String s) {
+//		return prepareString(s);
+//	}
+//
+//	public String toString()	{
+//		return headerString.toString() + programString.toString();
+//	}
+//
+//	private ArchUnitMEC getArchMEC( TMLCPLib tmlcplib, String sdInstanceName )	{
+//
+//		ArchUnitMEC dmaArchMEC = new CpuMEC();
+//		for( String s: tmlcplib.getMappedUnits() )	{
+//			if( s.contains( sdInstanceName ) )	{
+//				String dmaUnit = s.split(":")[1].replaceAll("\\s+","");
+//				dmaArchMEC = tmla.getHwCPUByName( dmaUnit ).MEC;
+//				break;
+//			}
+//		}
+//		return dmaArchMEC;
+//	}
+//
+//	public void saveFile( String path, String filename ) throws FileException {
+//		
+//		TMLCCodeGenerationMakefile make = new TMLCCodeGenerationMakefile( applicationName );
+//		path = path.substring( 0, path.length()-1 );
+//
+//		TraceManager.addUser( "Saving C files in " + path );
+//		FileUtils.saveFile( path + "main.c", mainFileString.toString() );
+//		FileUtils.saveFile( path + filename + ".h", headerString.toString() );
+//		FileUtils.saveFile( path + filename + ".c", programString.toString() );
+//		FileUtils.saveFile( path + filename + "_init.c", initFileString.toString() );
+//		FileUtils.saveFile( path + "Makefile", make.getCode() );
+//	}
+//
+//	private void openDebugFile()	{
+//		File fileObject = new File( debugFileName );
+//		fileObject.delete();
+//		outputStream = null;
+//		try	{
+//			outputStream = new PrintWriter( new FileOutputStream( debugFileName, true ) );
+//		}
+//		catch( FileNotFoundException e )	{
+//			System.out.println( "Error opening file " + debugFileName );
+//		}
+//	}
+//
+//	private void appendToDebugFile( String s )	{
+//		if( ( s != null ) && ( s.isEmpty() ) )	{
+//			outputStream.println( s );
+//		}
+//		else	{
+//			outputStream.println( CR );
+//		}
+//	}
+//
+//	private void closeDebugFile()	{
+//		outputStream.close();
+//	}
+
+}	//End of class
diff --git a/src/tmltranslator/ctranslator/TMLCCodeGenerationError.java b/src/tmltranslator/modelcompiler/TMLPECParserError.java
similarity index 85%
rename from src/tmltranslator/ctranslator/TMLCCodeGenerationError.java
rename to src/tmltranslator/modelcompiler/TMLPECParserError.java
index dd86532df93fbeb399429b98cfdc1177ac533bc1..9e4757288e41276c01df11f52a4a03a0ce6a15ed 100755
--- a/src/tmltranslator/ctranslator/TMLCCodeGenerationError.java
+++ b/src/tmltranslator/modelcompiler/TMLPECParserError.java
@@ -1,6 +1,7 @@
-/**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+/**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille, Andrea ENRICI
  *
  * ludovic.apvrille AT enst.fr
+ * andrea.enrici AT nokia.com
  *
  * This software is a computer program whose purpose is to allow the
  * edition of TURTLE analysis, design and deployment diagrams, to
@@ -36,20 +37,20 @@
  * knowledge of the CeCILL license and that you accept its terms.
  *
  * /**
- * Class TMLCCodeGenerationError
- * Used for storing a TML error generated by a TMLCP syntax checking process
- * Creation: 12/09/2007
- * @version 1.0 12/09/2007
- * @author Ludovic APVRILLE
+ * Class TMLPECParserError
+ * Used for storing a TML error generated when parsing the Platform Extension Construct file(s)
+ * Creation: 01/09/2016
+ * @version 1.0 01/09/2016
+ * @author Ludovic APVRILLE, Andrea ENRICI
  * @see
  */
 
 
-package tmltranslator.ctranslator;;
+package tmltranslator.modelcompiler;;
 
 import tmltranslator.*;
 
-public class TMLCCodeGenerationError {
+public class TMLPECParserError {
     
     // type
     public final static int ERROR_STRUCTURE = 0;
@@ -62,7 +63,7 @@ public class TMLCCodeGenerationError {
     public TMLTask task;
     public TMLActivityElement element;
     
-    public TMLCCodeGenerationError( int _type ) {
+    public TMLPECParserError( int _type ) {
         type = _type;
     }
 
diff --git a/src/ui/GTMLModeling.java b/src/ui/GTMLModeling.java
index 0296c18efddb0a95758e7cd920a8dce0ae96f7c1..25019fad5674d12cc7f5f220702dc514adfefda8 100755
--- a/src/ui/GTMLModeling.java
+++ b/src/ui/GTMLModeling.java
@@ -62,7 +62,7 @@ import tmltranslator.tmlcp.*;
 import tmltranslator.toproverif.*;
 import proverifspec.*;
 import myutil.*;
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 import avatartranslator.*;
 
 
@@ -264,6 +264,10 @@ public class GTMLModeling  {
         return tmlm;
     }
 
+    public TMLDesignPanel getTMLDesignPanel()  {
+        return tmldp;
+    }
+
     public CorrespondanceTGElement getCorrespondanceTable() {
         return listE;
     }
diff --git a/src/ui/GTURTLEModeling.java b/src/ui/GTURTLEModeling.java
index c05dc2b44791ef514d6d1e4ccf613a27aa782f72..8287f73cd97fc2cbaaeee21c7258dd63612b5f96 100755
--- a/src/ui/GTURTLEModeling.java
+++ b/src/ui/GTURTLEModeling.java
@@ -133,7 +133,7 @@ import proverifspec.*;
 
 import req.ebrdd.*;
 
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 import tmltranslator.toavatar.*;
 
 //Communication Pattern javaCC parser
@@ -424,18 +424,18 @@ public class GTURTLEModeling {
         int type;
         TGComponent tgc;
         String applicationName;
-        TMLCCodeGeneration Ccode;
+        TMLModelCompiler Ccode;
 
         if( tmap == null )      {
             JOptionPane.showMessageDialog(mgui.frame, "C code is only generated from an architecture diagram with mapping information", "Code generation failed", JOptionPane.INFORMATION_MESSAGE);
             return true;
         }
-        TMLCCodeGenerationSyntaxCheck syntax = new TMLCCodeGenerationSyntaxCheck( tmap, tmap.getTMLModeling(), tmap.getTMLArchitecture() );
+        TMLModelCompilerParser syntax = new TMLModelCompilerParser( tmap, tmap.getTMLModeling(), tmap.getTMLArchitecture() );
         syntax.check();
         if( syntax.hasErrors() )        {
-            for( TMLCCodeGenerationError error: syntax.getErrors() ) {
+            for( TMLModelCompilerError error: syntax.getErrors() ) {
 	    	TraceManager.addDev( "ERROR: " + error.toString() );
-                if( error.type == TMLCCodeGenerationError.ERROR_STRUCTURE ) {
+                if( error.type == TMLModelCompilerError.ERROR_STRUCTURE ) {
                     type = CheckingError.STRUCTURE_ERROR;
                 }
                 else {
@@ -456,7 +456,7 @@ public class GTURTLEModeling {
             return true;
         }
         applicationName = tmap.getMappedTasks().get(0).getName().split("__")[0];
-        Ccode = new TMLCCodeGeneration( _title, applicationName, mgui.frame, mgui.getAllTMLCP(), tmap );
+        Ccode = new TMLModelCompiler( _title, applicationName, mgui.frame, mgui.getAllTMLCP(), tmap );
         Ccode.toTextFormat();
         try {
             if( ConfigurationTTool.CcodeDirectory.equals("") )  {
diff --git a/src/ui/MainGUI.java b/src/ui/MainGUI.java
index f59fd3f191890ade2ff95a4a6c5cefd2c2f34e59..b6e02188564d6120451e89cab0e82d2ccc94947d 100755
--- a/src/ui/MainGUI.java
+++ b/src/ui/MainGUI.java
@@ -87,6 +87,7 @@ import ui.tmlcompd.*;
 import ui.tmldd.*;
 import ui.tmlcp.*;
 import ui.tmlsd.*;
+import tmltranslator.modelcompiler.*;
 
 import ui.procsd.*;
 import ui.prosmd.*;
@@ -423,7 +424,6 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
             jfctgraph = new JFileChooser();
         }
 
-
         TFileFilter filter = new TFileFilter();
         jfc.setFileFilter(filter);
 
diff --git a/src/ui/TGComponent.java b/src/ui/TGComponent.java
index 4d6fa550d8d74a0e0295ceefd25141600c227d29..9f2715a9058103feaf69333ac53398e82b62042f 100755
--- a/src/ui/TGComponent.java
+++ b/src/ui/TGComponent.java
@@ -1132,6 +1132,8 @@ public abstract class TGComponent implements CDElement, GenericTree {
 
     public void drawWithAttributes(Graphics g) {
         if (this instanceof WithAttributes) {
+            /*TraceManager.addDev( "tdp is of " + tdp.getClass() );
+            TraceManager.addDev( "this is of " + this.getClass() );*/
             if (tdp.getAttributeState() == 2) {
                 drawAttributes(g, ((WithAttributes)this).getAttributes());
             } else {
diff --git a/src/ui/tmldd/TMLArchiArtifact.java b/src/ui/tmldd/TMLArchiArtifact.java
index e3f5da973008fb1d2a8e6e616443e95c3c72b1f7..7c9ab883a9072b439efa6aed775a2619104c2eab 100755
--- a/src/ui/tmldd/TMLArchiArtifact.java
+++ b/src/ui/tmldd/TMLArchiArtifact.java
@@ -55,7 +55,7 @@ import org.w3c.dom.*;
 import myutil.*;
 import ui.*;
 import ui.window.*;
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 
 public class TMLArchiArtifact extends TGCWithoutInternalComponent implements SwallowedTGComponent, WithAttributes {
     protected int lineLength = 5;
diff --git a/src/ui/tmldd/TMLArchiCPNode.java b/src/ui/tmldd/TMLArchiCPNode.java
index 69be927d678cbe9016fbfbd0e61cedd6373f5471..651db4c14b8860a395f3d1b397c75b220fa80180 100755
--- a/src/ui/tmldd/TMLArchiCPNode.java
+++ b/src/ui/tmldd/TMLArchiCPNode.java
@@ -57,9 +57,9 @@ import ui.*;
 import ui.window.*;
 
 import tmltranslator.*;
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 
-public class TMLArchiCPNode extends TMLArchiCommunicationNode implements SwallowTGComponent {
+public class TMLArchiCPNode extends TMLArchiCommunicationNode implements SwallowTGComponent, WithAttributes {
     private int textY1 = 15;
     private int textY2 = 30;
     private int derivationx = 2;
@@ -211,7 +211,12 @@ public class TMLArchiCPNode extends TMLArchiCommunicationNode implements Swallow
         transferType1 = dialog.getTransferTypes().get(0);
         transferType2 = dialog.getTransferTypes().get(1);
         assignedAttributes = dialog.getAssignedAttributes();
-				TraceManager.addDev( "RETRIEVING ASSIGNED ATTRIBUTES: " + assignedAttributes.toString() );
+        TraceManager.addDev( "name " + name );
+        TraceManager.addDev( "mappedUnits " + mappedUnits );
+        TraceManager.addDev( "cpMEC " + cpMEC );
+        TraceManager.addDev( "transferType1 " + transferType1 );
+        TraceManager.addDev( "transferType2 " + transferType2 );
+        TraceManager.addDev( "assignedAttributes " + assignedAttributes.toString() );
 
         if( !dialog.isRegularClose() )  {
             return false;
@@ -438,4 +443,17 @@ public class TMLArchiCPNode extends TMLArchiCommunicationNode implements Swallow
         transferTypes.add( transferType2 );
         return transferTypes;
     }
+
+    public String getAttributes()   {
+        String attr = "";
+        attr += assignedAttributes.toString(); // only the message attributes of the mapped CP are retrieved!
+        return attr;
+    }
+
+    public String getCodeGenerationAttributes()   {
+        String attr = "";
+        attr += cpMEC;
+        return attr;
+    }
+
 }
diff --git a/src/ui/tmldd/TMLArchiCPUNode.java b/src/ui/tmldd/TMLArchiCPUNode.java
index 3ce37425f986c21845a675d128d9e78be1ec218c..38e0a703168c84a8cad116a3aa2ab8f070fc9bc7 100755
--- a/src/ui/tmldd/TMLArchiCPUNode.java
+++ b/src/ui/tmldd/TMLArchiCPUNode.java
@@ -58,7 +58,7 @@ import ui.window.*;
 import ui.interactivesimulation.*;
 
 import tmltranslator.*;
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 
 public class TMLArchiCPUNode extends TMLArchiNode implements SwallowTGComponent, WithAttributes {
     private int textY1 = 15;
diff --git a/src/ui/tmldd/TMLArchiDiagramToolBar.java b/src/ui/tmldd/TMLArchiDiagramToolBar.java
index a17bbc461a49bd23a068942816e38aa5dc6fd5e5..f98507647cfd3b8640ce11f6eb14aee1ba98436b 100755
--- a/src/ui/tmldd/TMLArchiDiagramToolBar.java
+++ b/src/ui/tmldd/TMLArchiDiagramToolBar.java
@@ -48,8 +48,8 @@ knowledge of the CeCILL license and that you accept its terms.
 package ui.tmldd;
 
 import javax.swing.*;
-//import java.awt.*;
-//import java.awt.event.*;
+import java.awt.*;
+import java.awt.event.*;
 
 import ui.*;
 
@@ -57,7 +57,6 @@ public class TMLArchiDiagramToolBar extends TToolBar {
     
     public TMLArchiDiagramToolBar(MainGUI _mgui) {
         super(_mgui);
-        
     }
     
     protected void setActive(boolean b) {
@@ -138,11 +137,11 @@ public class TMLArchiDiagramToolBar extends TToolBar {
         	button.addMouseListener(mgui.mouseHandler);
         }
 		button = this.add(mgui.actions[TGUIAction.TMLARCHI_COMMUNICATION_ARTIFACT]);
-    button.addMouseListener(mgui.mouseHandler);
+        button.addMouseListener(mgui.mouseHandler);
 		button = this.add(mgui.actions[TGUIAction.TMLARCHI_PORT_ARTIFACT]);
-    button.addMouseListener(mgui.mouseHandler);
+        button.addMouseListener(mgui.mouseHandler);
 		button = this.add(mgui.actions[TGUIAction.TMLARCHI_KEY]);
-    button.addMouseListener(mgui.mouseHandler);
+        button.addMouseListener(mgui.mouseHandler);
 		this.addSeparator();
 		
 		button = this.add(mgui.actions[TGUIAction.ACT_TOGGLE_ATTR]);
diff --git a/src/ui/tmldd/TMLArchiNode.java b/src/ui/tmldd/TMLArchiNode.java
index f88e2a32d2522a4f8d3cbf538818397c76bba207..dab84991a282bd43cb14732cacaeb5b1f153a5fc 100755
--- a/src/ui/tmldd/TMLArchiNode.java
+++ b/src/ui/tmldd/TMLArchiNode.java
@@ -57,7 +57,7 @@ import ui.*;
 import ui.window.*;
 
 import tmltranslator.*;
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 
 public abstract class TMLArchiNode extends TGCWithInternalComponent implements SwallowTGComponent {
     protected int clockRatio = HwNode.DEFAULT_CLOCK_RATIO;
diff --git a/src/ui/tmldd/TMLArchiPortArtifact.java b/src/ui/tmldd/TMLArchiPortArtifact.java
index 799596b8ccd14735bf1b35cdad98d2d13984ccfd..3853ba6788ecf33daf0fe9853faf65bcc0f70c13 100644
--- a/src/ui/tmldd/TMLArchiPortArtifact.java
+++ b/src/ui/tmldd/TMLArchiPortArtifact.java
@@ -55,7 +55,7 @@ import org.w3c.dom.*;
 import myutil.*;
 import ui.*;
 import ui.window.*;
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 
 public class TMLArchiPortArtifact extends TGCWithoutInternalComponent implements SwallowedTGComponent, WithAttributes {
     protected int lineLength = 5;
diff --git a/src/ui/window/JDialogCPUNode.java b/src/ui/window/JDialogCPUNode.java
index eb15310c66154c22258890e8571521547046b93e..2e5f17a53ee4340d2617751af7e4704a1ab3eb7b 100755
--- a/src/ui/window/JDialogCPUNode.java
+++ b/src/ui/window/JDialogCPUNode.java
@@ -53,7 +53,7 @@ import javax.swing.*;
 import ui.*;
 import ui.tmlcd.*;
 import java.util.*;
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 import ui.*;
 import ui.tmldd.*;
 import ui.interactivesimulation.*;
diff --git a/src/ui/window/JDialogMemoryNode.java b/src/ui/window/JDialogMemoryNode.java
index 4e0b783f48e3b8fa490cfea8a2323f0007cbb0c0..0331e152f04799fd061b4b60c22c9a85710d61e8 100755
--- a/src/ui/window/JDialogMemoryNode.java
+++ b/src/ui/window/JDialogMemoryNode.java
@@ -54,7 +54,7 @@ import java.util.*;
 
 import ui.*;
 import ui.tmldd.*;
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 
 
 public class JDialogMemoryNode extends javax.swing.JDialog implements ActionListener  {
diff --git a/src/ui/window/JDialogPortArtifact.java b/src/ui/window/JDialogPortArtifact.java
index 9d517c5f8f008985b0feacf5885a9145c71b6ed0..f603ef1942633ba82e153febfb8ba3f4ab0d1229 100755
--- a/src/ui/window/JDialogPortArtifact.java
+++ b/src/ui/window/JDialogPortArtifact.java
@@ -53,7 +53,7 @@ import java.util.*;
 
 import ui.*;
 import ui.tmldd.*;
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 
 import myutil.*;
 
diff --git a/src/ui/window/JDialogReferenceCP.java b/src/ui/window/JDialogReferenceCP.java
index bb564f2776320bb8fb9aea8912a254883e6a4f6a..55355866fce6500c3ffcf35356cdc5577c28bc37 100644
--- a/src/ui/window/JDialogReferenceCP.java
+++ b/src/ui/window/JDialogReferenceCP.java
@@ -60,7 +60,7 @@ import ui.tmlsd.*;
 import ui.tmlcp.*;
 import ui.tmlcd.*;
 import ui.avatarbd.*;
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 import tmltranslator.tmlcp.*;
 import tmltranslator.*;
 import myutil.*;
diff --git a/src/ui/window/JDialogTMLTaskArtifact.java b/src/ui/window/JDialogTMLTaskArtifact.java
index 5b45813940ebd9c63f7a47d40d536f180b821364..0c496f29dc42eac96bf96b21554ff85592ab5605 100755
--- a/src/ui/window/JDialogTMLTaskArtifact.java
+++ b/src/ui/window/JDialogTMLTaskArtifact.java
@@ -54,7 +54,7 @@ import java.util.*;
 
 import ui.*;
 import ui.tmldd.*;
-import tmltranslator.ctranslator.*;
+import tmltranslator.modelcompiler.*;
 
 import myutil.*;
 
diff --git a/tmlcode/README.txt b/tmlcode/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..71f85a927ac9cae37b31b2e37ea4c101f1fd34a1
--- /dev/null
+++ b/tmlcode/README.txt
@@ -0,0 +1 @@
+This folder is used to store the TML code that is automatically generated from UML/SysMl models in TTool.
diff --git a/tmlcode/README_tml b/tmlcode/README_tml
deleted file mode 100644
index 5ca05cf572b858aa03ed7bea4acf2256c236933a..0000000000000000000000000000000000000000
--- a/tmlcode/README_tml
+++ /dev/null
@@ -1,5 +0,0 @@
-TTool, an open-source UML toolkit for modeling embedded systems and procotols.
-TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/
--------------------------------------------------------------------------------
-
-The tmlcode directory is intended to store the TML / TMAP files generated from TTool. To generate these files, please refer to http://labsoc.comelec.enst.fr/turtle/HELP
\ No newline at end of file