diff --git a/src/tmltranslator/ctranslator/AdaifOperationMEC.java b/src/tmltranslator/ctranslator/AdaifOperationMEC.java
index 6c408ee3a789d92d627bc9aac9299dd7911ab33f..de3433c2e3ac1131091984c3fe4a292dc1bd222c 100644
--- a/src/tmltranslator/ctranslator/AdaifOperationMEC.java
+++ b/src/tmltranslator/ctranslator/AdaifOperationMEC.java
@@ -54,7 +54,9 @@ public class AdaifOperationMEC extends OperationMEC	{
 
 	public AdaifOperationMEC( String ctxName, String ID0, String OD0 )	{
 		name = "AdaifOperationMEC";
-		exec_code = "adaif_do(&" + ctxName + ");" + CR;
+		exec_code = TAB + "int status;" + CR + TAB +
+								"adaif_wait(&" + ctxName + ");" + CR + TAB +
+								"status = adaif_wait(&" + ctxName + ");" + CR;
 	
 		init_code =
 			"void init_" + ctxName.split("_ctx")[0] + "( void )\t{" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/CwaMEC.java b/src/tmltranslator/ctranslator/CwaMEC.java
index 1f9869bf77f77c4d1385bf20a44335322f28b93f..77ba345ea1de0645ffe2ad7a17e26ae09dde80d8 100644
--- a/src/tmltranslator/ctranslator/CwaMEC.java
+++ b/src/tmltranslator/ctranslator/CwaMEC.java
@@ -55,6 +55,7 @@ public class CwaMEC extends FepOperationMEC	{
 
 		name = "Component Wise Addition MEC";
 		exec_code = TAB + "/*firm instruction*/" + CR + TAB +
+			"int status;" + CR + TAB +
 			"fep_set_l(&"+ _ctxName + ", ((FEP_BUFFER_TYPE*)sig["+ inSignalName + "].pBuff)->num_samples);" + CR + TAB +
 			"fep_set_qx(&"+ _ctxName + ", ((FEP_BUFFER_TYPE*)sig["+ inSignalName + "].pBuff)->bank);" + CR + TAB +
 			"fep_set_bx(&"+ _ctxName + ", ((FEP_BUFFER_TYPE*)sig["+ inSignalName + "].pBuff)->base_address);" + CR + TAB +
@@ -66,7 +67,7 @@ public class CwaMEC extends FepOperationMEC	{
 			"fep_set_bz(&"+ _ctxName + ", ((FEP_BUFFER_TYPE*)sig["+ outSignalName + "].pBuff)->base_address);" + CR + TAB +
 			"fep_set_tz(&"+ _ctxName + ", ((FEP_BUFFER_TYPE*)sig["+ outSignalName + "].pBuff)->data_type);" + CR + TAB +
 			"/*start execution*/" + CR + TAB +
-			"fep_do(&"+ _ctxName + ");" + CR;
+			"status = fep_do(&"+ _ctxName + ");" + CR;
 		
 		init_code ="/***** INIT "+ _ctxName.split("_ctx")[0] + " *******/" + CR +
 			"void init_"+ _ctxName.split("_ctx")[0] + "(void){" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/CwlMEC.java b/src/tmltranslator/ctranslator/CwlMEC.java
index 8a721809680a0b40abef23b67952b99de3b85b59..7a3e32185c3a4de068df7985ef1b6b51810d09a0 100755
--- a/src/tmltranslator/ctranslator/CwlMEC.java
+++ b/src/tmltranslator/ctranslator/CwlMEC.java
@@ -55,6 +55,7 @@ public class CwlMEC extends FepOperationMEC	{
 
 		name = "Component Wise Lookup MEC";
 		exec_code = TAB + "/*firm instruction*/" + CR + TAB +
+			"int status;" + CR + TAB +
 			"fep_set_l(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->num_samples);" + CR + TAB +
 			"fep_set_qx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->bank);" + CR + TAB +
 			"fep_set_bx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->base_address);" + CR + TAB +
@@ -63,7 +64,7 @@ public class CwlMEC extends FepOperationMEC	{
 			"fep_set_bz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->base_address);" + CR + TAB +
 			"fep_set_tz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->data_type);" + CR + TAB +
 			"/*start execution*/" + CR + TAB +
-			"fep_do(&" + _ctxName + ");" + CR;
+			"status = fep_do(&" + _ctxName + ");" + CR;
 	
 		init_code ="/***** INIT " + _ctxName.split("_ctx")[0] + " *******/" + CR +
 			"void init_" + _ctxName.split("_ctx")[0] + "(void){" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/CwmMEC.java b/src/tmltranslator/ctranslator/CwmMEC.java
index ca5a9b4365c9c9017c37b53c221849fc6dc0aacc..d131740c11b81168f29089173500f8eb3167f756 100755
--- a/src/tmltranslator/ctranslator/CwmMEC.java
+++ b/src/tmltranslator/ctranslator/CwmMEC.java
@@ -55,6 +55,7 @@ public class CwmMEC extends FepOperationMEC	{
 
 		name = "Component Wise Multiplication MEC";
 		exec_code = TAB + "/*firm instruction*/" + CR +
+			"int status;" + CR + TAB +
 			"fep_set_l(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->num_samples);" + CR +
 			"fep_set_qx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->bank);" + CR +
 			"fep_set_bx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->base_address);" + CR +
@@ -63,7 +64,7 @@ public class CwmMEC extends FepOperationMEC	{
 			"fep_set_bz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->base_address);" + CR +
 			"fep_set_tz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->data_type);" + CR +
 			"/*start execution*/" + CR +
-			"fep_do(&" + _ctxName + ");" + CR;
+			"status = fep_do(&" + _ctxName + ");" + CR;
 	
 		init_code ="/***** INIT " + _ctxName.split("_ctx")[0] + " *******/" + CR +
 			"void init_" + _ctxName.split("_ctx")[0] + "(void){" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/CwpMEC.java b/src/tmltranslator/ctranslator/CwpMEC.java
index 14147a0c6a417a46bf5433dc59ebf24f2cd47732..057f0b534ac04b392791e5963a5bb025272e0b31 100755
--- a/src/tmltranslator/ctranslator/CwpMEC.java
+++ b/src/tmltranslator/ctranslator/CwpMEC.java
@@ -55,6 +55,7 @@ public class CwpMEC extends FepOperationMEC	{
 
 		name = "Component Wise Product MEC";
 		exec_code = TAB + "/*firm instruction*/" + CR + TAB +
+			"int status;" + CR + TAB +
 			"fep_set_l(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->num_samples);" + CR + TAB +
 			"fep_set_qx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->bank);" + CR + TAB +
 			"fep_set_bx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->base_address);" + CR + TAB +
@@ -63,7 +64,7 @@ public class CwpMEC extends FepOperationMEC	{
 			"fep_set_bz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->base_address);" + CR + TAB +
 			"fep_set_tz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->data_type);" + CR + TAB +
 			"/*start execution*/" + CR + TAB +
-			"fep_do(&" + _ctxName + ");" + CR;
+			"status = fep_do(&" + _ctxName + ");" + CR;
 	
 		init_code ="/***** INIT " + _ctxName.split("_ctx")[0] + " *******/" + CR +
 			"void init_" + _ctxName.split("_ctx")[0] + "(void){" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/FftMEC.java b/src/tmltranslator/ctranslator/FftMEC.java
index 6d517ee9a26b3236a8e2b42b007f4cfd942d8e7a..88f8daee9bd79a7f9ae23e5db6e1ad19c000cd77 100644
--- a/src/tmltranslator/ctranslator/FftMEC.java
+++ b/src/tmltranslator/ctranslator/FftMEC.java
@@ -54,6 +54,7 @@ public class FftMEC extends FepOperationMEC	{
 	public FftMEC( String _ctxName, String inSignalName, String outSignalName )	{
 		name = "Fast Fourier Transform MEC";
 		exec_code = TAB + "/*firm instruction*/" + CR +
+			"int status;" + CR + TAB +
 			"fep_set_l(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->num_samples);" + CR + TAB +
 			"fep_set_qx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->bank);" + CR + TAB +
 			"fep_set_bx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->base_address);" + CR + TAB +
@@ -62,7 +63,7 @@ public class FftMEC extends FepOperationMEC	{
 			"fep_set_bz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->base_address);" + CR + TAB +
 			"fep_set_tz(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + outSignalName + "].pBuff)->data_type);" + CR + TAB +
 			"/*start execution*/" + CR + TAB +
-			"fep_do(&" + _ctxName + ");" + CR;
+			"status = fep_do(&" + _ctxName + ");" + CR;
 		
 		init_code ="/***** INIT " + _ctxName.split("_ctx")[0] + " *******/" + CR +
 			"void init_" + _ctxName.split("_ctx")[0] + "(void){" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/IntlOperationMEC.java b/src/tmltranslator/ctranslator/IntlOperationMEC.java
index 869907379ddfdb0245c4a33d5cfb3a99eab34f36..948d63b484d7cd287a7064673e8818fea4626e6b 100644
--- a/src/tmltranslator/ctranslator/IntlOperationMEC.java
+++ b/src/tmltranslator/ctranslator/IntlOperationMEC.java
@@ -53,9 +53,10 @@ public class IntlOperationMEC extends OperationMEC	{
 
 	public IntlOperationMEC( String ctxName, String ID0, String OD0 )	{
 		name = "InterleaverOperationMEC";
-		exec_code = TAB + "/*firm instruction*/" + CR + TAB +
-			"/*start execution*/" + CR + TAB +
-			"intl_do(&" + ctxName + ");" + CR;
+		exec_code = TAB + "/*start execution*/" + CR + TAB +
+								"int status;" + CR + TAB +
+								"intl_start(&" + ctxName + ");" + CR + TAB +
+								"status = intl_wait(&" + ctxName + ");" + CR;
 		
 		init_code ="/***** INIT " + ctxName.split("_ctx")[0] + " *******/" + CR +
 			"void init_" + ctxName.split("_ctx")[0] + "(void){" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/MappOperationMEC.java b/src/tmltranslator/ctranslator/MappOperationMEC.java
index 595a50df21dc8f45ac40b59b22c253bce2ce90c4..df1aab4c352a68014c74dc5748f92a8932b5cf0a 100644
--- a/src/tmltranslator/ctranslator/MappOperationMEC.java
+++ b/src/tmltranslator/ctranslator/MappOperationMEC.java
@@ -47,16 +47,15 @@
 package tmltranslator.ctranslator;;
 
 import java.util.*;
-//import Ctranslator.*;
 
 public class MappOperationMEC extends OperationMEC	{
 
-
 	public MappOperationMEC( String ctxName, String ID0, String OD0 )	{
 		name = "MapperOperationMEC";
-		exec_code = TAB + "/*firm instruction*/" + CR + TAB +
-			"/*start execution*/" + CR + TAB +
-			"mapper_do(&" + ctxName + ");" + CR;
+		exec_code = TAB + CR + TAB + "/*start execution*/" + CR + TAB +
+								"int status;" + CR + TAB +
+								"mapper_start(&" + ctxName + ");" + CR + TAB +
+								"status = mapper_wait(&" + ctxName + ");" + CR;
 		
 		init_code ="/***** INIT " + ctxName.split("_ctx")[0] + " *******/" + CR +
 			"void init_" + ctxName.split("_ctx")[0] + "(void){" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/SumMEC.java b/src/tmltranslator/ctranslator/SumMEC.java
index 225c69a0302c2c8114d7615afead47f10143b2b9..ddf2f2df1c49bd4af20c81a712012818acc0194d 100644
--- a/src/tmltranslator/ctranslator/SumMEC.java
+++ b/src/tmltranslator/ctranslator/SumMEC.java
@@ -53,9 +53,10 @@ public class SumMEC extends FepOperationMEC	{
 	public SumMEC( String _ctxName, String inSignalName, String outSignalName )	{
 		name = "Sum MEC";
 		exec_code = TAB + "/*firm instruction*/" + CR + TAB +
+			"int status;" + CR + TAB +
 			"fep_set_qx(&" + _ctxName + ", ((FEP_BUFFER_TYPE*)sig[" + inSignalName + "].pBuff)->bank);" + CR + TAB +
 			"/*start execution*/" + CR + TAB +
-			"fep_do(&" + _ctxName + ");" + CR;
+			"status = fep_do(&" + _ctxName + ");" + CR;
 		
 		init_code = 
 			"void init_" + _ctxName.split("_ctx")[0] + "(void){" + CR + TAB +
diff --git a/src/tmltranslator/ctranslator/TMLCCodeGeneration.java b/src/tmltranslator/ctranslator/TMLCCodeGeneration.java
index fb895e6207a57e0ed7152fa7c93aa5ce520fd149..e1073c4fb93a2bab986a06686bb29c58d6e654df 100755
--- a/src/tmltranslator/ctranslator/TMLCCodeGeneration.java
+++ b/src/tmltranslator/ctranslator/TMLCCodeGeneration.java
@@ -696,10 +696,10 @@ public class TMLCCodeGeneration	{
 							"#include <embb/mapper.h>" + CR +
 							"#include <embb/adaif.h>" + CR +
 							"#include <embb/memory.h>" + CR2 +
-							"char fep_mss[0x10000];" + CR +
-							"char adaif_mss[0x10000];" + CR +
-							"char intl_mss[0x10000];" + CR +
-							"char mapper_mss[0x10000];" + CR2;
+							"extern char fep_mss[];" + CR +
+							"extern char adaif_mss[];" + CR +
+							"extern char intl_mss[];" + CR +
+							"extern char mapper_mss[];" + CR2;
 		return s;
 	}
 
@@ -809,6 +809,14 @@ public class TMLCCodeGeneration	{
 		for( Signal sig: signalsList )	{
 			s.append( sig.getName() + "," + CR );
 		}
+		s.append( postexList.get(0).getName() + "," + CR );
+		/*for( Operation op: operationsList )	{
+			if( op.isPostex() )	{
+				TraceManager.addDev( "OPERATION: " + op.getName() );
+				TraceManager.addDev( "\t\tinSignal = " + op.getInSignals().get(0).getName() );
+			}
+		}
+		System.exit(0);*/
 		s.append( "NUM_SIGS };" + CR2 + "enum ops_enu	{" + CR );
 
 		for( Operation op: operationsList )	{
@@ -908,18 +916,20 @@ public class TMLCCodeGeneration	{
 
 		for( Operation op: operationsList )	{
 			if( op.getType() == Operation.SDR )	{
-				programString.append( generateSDROperation( op, op.getSDRTasks().get( Operation.X_TASK ), op.getSDRTasks().get( Operation.F_TASK ) ) );
+				programString.append( generateSDROperation( op ) );
 			}
 		}
 	}
 
-	private String generateSDROperation( Operation op, TMLTask xTask, TMLTask fTask )	{
+	private String generateSDROperation( Operation op )	{
 		
 		//For SDR operations the xTask is used to retrieve the mapped unit
 		String signalOutName = "";
 		String signalInName = "";
-		String ctxName = op.getContextName();
 		StringBuffer code = new StringBuffer();
+		String ctxName = op.getContextName();
+		TMLTask xTask = op.getSDRTasks().get( Operation.X_TASK );	
+		TMLTask fTask =	op.getSDRTasks().get( Operation.F_TASK );
 
 		OperationMEC xTaskOperation = xTask.getOperationMEC();
 
@@ -930,7 +940,10 @@ public class TMLCCodeGeneration	{
 			signalInName += sig.getName();
 		}
 
-		code.append( "int op_" + op.getName() + "()\t{" + CR + getTaskAttributes( fTask ) + CR );
+		code.append( "int op_" + op.getName() + "()\t{" + CR /*+ getTaskAttributes( fTask )*/ + CR );
+		if( op.isPrex() )	{
+			code.append( TAB + "int status = 0;" + CR );
+		}
 
 		//Mark input signals as false
 		for( Signal sig: op.getInSignals() )	{
@@ -1067,6 +1080,7 @@ public class TMLCCodeGeneration	{
 			attributes = tmlcplib.getAssignedAttributes();
 			String name = tmlcplib.getName().split("::")[0];
 			programString.append( "int op_" + name + "()\t{" + CR );
+			programString.append( TAB + "int status = 0;" + CR );
 			
 			for( Signal sig: dt.getInSignals() )	{
 				programString.append( TAB + "sig[ " + sig.getName() + " ].f = false;" + CR );
@@ -1075,14 +1089,14 @@ public class TMLCCodeGeneration	{
 			TraceManager.addDev( "CPMEC: " + cpMEC + "\n" + attributes.toString() );
 			if( cpMEC instanceof CpuMemoryCopyMEC )	{
 				CpuMemoryCopyMEC mec = new CpuMemoryCopyMEC( ctxName, "", "", "", "" );
-				programString.append( mec.getExecCode() );
+				programString.append( "/*" + mec.getExecCode() + "*/" );
 			}
 			if( cpMEC instanceof SingleDmaMEC )	{
 				destinationAddress = attributes.get( SingleDmaMEC.destinationAddressIndex );
 				sourceAddress = attributes.get( SingleDmaMEC.sourceAddressIndex );
 				counter = attributes.get( SingleDmaMEC.counterIndex );
 				SingleDmaMEC mec = new SingleDmaMEC( ctxName, destinationAddress, sourceAddress, counter );
-				programString.append( mec.getExecCode() );
+				programString.append( "/*" + mec.getExecCode() + "*/" );
 			}
 			if( cpMEC instanceof DoubleDmaMEC )	{
 				destinationAddress1 = attributes.get( DoubleDmaMEC.destinationAddress1Index );
@@ -1092,7 +1106,7 @@ public class TMLCCodeGeneration	{
 				sourceAddress2 = attributes.get( DoubleDmaMEC.sourceAddress2Index );
 				counter2 = attributes.get( DoubleDmaMEC.counter2Index );
 				DoubleDmaMEC mec = new DoubleDmaMEC( ctxName, destinationAddress1, sourceAddress1, counter1, destinationAddress2, sourceAddress2, counter2 );
-				programString.append( mec.getExecCode() );
+				programString.append( "/*" + mec.getExecCode() + "*/" );
 			}
 
 			for( Signal sig: dt.getOutSignals() )	{
@@ -1171,6 +1185,10 @@ public class TMLCCodeGeneration	{
 		String inSignalName, outSignalName;
 		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[0x10000];" + CR );
+		initFileString.append( "char mapper_mss[0x10000];" + CR );
 		initFileString.append( buffersAndInstructionsDeclaration( false ) + CR2 );
 		generateCodeToInitializeBuffers();
 		generateCodeToInitializeSignals();
@@ -1245,7 +1263,7 @@ public class TMLCCodeGeneration	{
 
 		generateInitRoutinesForCPs();
 
-		initFileString.append( "/**** init contexts ****/" + CR + "void init_operations_context(void)\t{" + CR );
+		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 );