diff --git a/src/Ctranslator/TMLCCodeGeneration.java b/src/Ctranslator/TMLCCodeGeneration.java
index 988062abebdcd246df1654cd40275b5f3e10fb81..a59a6e3eb27dafde191c1ca1b3e517fc6d681e18 100755
--- a/src/Ctranslator/TMLCCodeGeneration.java
+++ b/src/Ctranslator/TMLCCodeGeneration.java
@@ -67,16 +67,23 @@ public class TMLCCodeGeneration	{
 	private String TAB4 = "\t\t\t\t";
 	private String SP = " ";
 	private String SC = ";";
+	private String COLON = ",";
 
 	private TMLMapping tmap;
 	private TMLModeling tmlm;
 	private String applicationName;
+	private String mainFile;
 	private String headerString;
 	private String programString;
 	private String initString;
 	private ArrayList<TMLTask> mappedTasks;
 	private ArrayList<TMLElement> commElts;
 	private ArrayList<Operation> operationsList = new ArrayList<Operation>();
+	private int nonSDRoperationsCounter = 0;
+	private int SDRoperationsCounter = 0;
+	private int signalsCounter = 0;
+	private ArrayList<String> signalsList = new ArrayList<String>();
+
 	public JFrame frame; //Main Frame
 
 	public TMLCCodeGeneration( String _title, String _applicationName, JFrame _frame )	{
@@ -104,12 +111,39 @@ public class TMLCCodeGeneration	{
 
 		//Generate the C code
 		makeOperationsList( mappedTasks );
+		generateMainFile();
 		generateHeaderFile( mappedTasks );
 		generateCProgram();
 		generateInitProgram( mappedTasks );
 	}
 
-	public void generateHeaderFile( ArrayList<TMLTask> mappedTasks )	{
+	private void generateMainFile()	{
+		mainFile = "#include \"" + applicationName + "\".h" + CR2;
+		mainFile += "int main(void)\t{" + CR +
+								TAB + "int status=0;" + CR +
+								TAB + "char *src_out_dat;" + CR +
+								TAB + "char *dma1_out_dat;" + CR +
+								TAB + "int g_r_size = 10240;" + CR +
+								TAB + "int g_Ns = 1024;" + CR +
+								TAB + "int g_Fi = 593;" + CR +
+								TAB + "int g_Li = 116;" + CR2 +
+								TAB + "src_out_dat = (char*) calloc(g_r_size*4, 1);" + CR +
+								TAB + "if( src_out_dat == NULL ) exit(1);" + CR +
+								TAB2 + "dma1_out_dat = (char*) calloc(4, 1);" + CR +
+								TAB + "if( dma1_out_dat == NULL ) exit(1);" + CR +
+								TAB2 + "FILE *source = fopen(\"date_demo.dat\", \"r\");" + CR +
+								TAB + "if( source != NULL ){ " + CR +
+								TAB2 + "fread(src_out_dat, 1, g_r_size*4, source);" + CR +
+								TAB2 + "fclose(source);" + CR +
+ 								TAB + "} else printf(\"ERROR input file does not exist!\\n\");" + CR +
+								TAB + applicationName + "_init( (char*)src_out_dat, (char*)dma1_out_dat, g_r_size, g_Ns , g_Fi, g_Li );" + CR +
+								TAB + "status = " + applicationName + "();" + CR +
+								TAB + "printf(\"score %d \", *(uint32_t*)dma1_out_dat );" + CR +
+								TAB + "free(src_out_dat);" + CR +
+								"}";
+	}
+
+	private void generateHeaderFile( ArrayList<TMLTask> mappedTasks )	{
 
 		headerString += libraries();
 		headerString += prototypes();
@@ -126,8 +160,7 @@ public class TMLCCodeGeneration	{
 							"#include <stdint.h>" + CR +
 							"#include <embb/fep.h>" + CR +
 							"#include <embb/memory.h>" + CR +
-							"#include <embb/intl.h>" + CR +
-							"#include \"eMIMO.h\"" + CR2;
+							"#include <embb/intl.h>" + CR2;
 		return s;
 	}
 
@@ -135,7 +168,7 @@ public class TMLCCodeGeneration	{
 		String s = 	"/**** prototypes *****/" + CR +
 								"extern int " + applicationName + "_final(void);" + CR +
 								"extern void " + applicationName + "_final_init();" + CR +
-								"extern boolean exit_rule(void);" + CR +
+								"extern bool exit_rule(void);" + CR +
 								"extern void register_operations(void);" + CR +
 								"extern void register_fire_rules(void);" + CR +
 								"extern void signal_to_buffer_init();" + CR +
@@ -152,15 +185,15 @@ public class TMLCCodeGeneration	{
 	private String instructions( ArrayList<TMLTask> mappedTasks )	{
 		String s = 	"/**** Instructions *****/" + CR;
 		for( String s1: getTaskNamePerMappedUnit( "FEP", mappedTasks ) )	{
-			s += "extern FEP_CONTEXT " + s1 + ";" + CR;
+			s += "extern embb_fep_context " + s1 + ";" + CR;
 		}
 		s += CR;
 		for( String s1: getTaskNamePerMappedUnit( "MAPPER", mappedTasks ) )	{
-			s += "extern MAPPER_CONTEXT " + s1 + ";" + CR;
+			s += "extern embb_mapper_context " + s1 + ";" + CR;
 		}
 		s += CR;
 		for( String s1: getTaskNamePerMappedUnit( "INTL", mappedTasks ) )	{
-			s += "extern INTL_CONTEXT " + s1 + ";" + CR;
+			s += "extern embb_intl_context " + s1 + ";" + CR;
 		}
 		s += CR;
 		return s;
@@ -185,7 +218,7 @@ public class TMLCCodeGeneration	{
 				"NUM_SIGS };" + CR2 +
 				"enum ops_enu	{" + CR +
 				opsList + CR + /* list of comma separated tasks*/
-				"NUM_SIGS };" + CR2;
+				"NUM_OPS };" + CR2;
 		
 		return s;
 	}
@@ -203,7 +236,9 @@ public class TMLCCodeGeneration	{
 				task = op.getSDRTasks().get( Operation.X_TASK );
 			}
 			if( task.getWriteChannels().size() > 0 )	{
+				signalsList.add( task.getWriteChannels().toString().split("__")[1] );
 				s += task.getWriteChannels().toString().split("__")[1] + ",\n";
+				signalsCounter++;
 			}
 		}
 		return s.substring( 0, s.length()-1 );
@@ -282,6 +317,7 @@ public class TMLCCodeGeneration	{
 				}
 				else	{	//it is a non-SDR operation
 					operationsList.add( new Operation( task ) );
+					nonSDRoperationsCounter++;
 				}
 			}
 		}
@@ -292,6 +328,7 @@ public class TMLCCodeGeneration	{
 				String xTaskName = xTask.getName().split( "__" )[1].split( "X_" )[1];
 				if( xTaskName.equals( fTaskName ) )	{
 					operationsList.add( new Operation( fTask, xTask ) );
+					SDRoperationsCounter++;
 				}
 			}
 		}
@@ -316,6 +353,11 @@ public class TMLCCodeGeneration	{
 				programString += generateSDROperation( op, xTask, fTask );
 			}
 		}
+		/*DmaMEC myDMA = new DmaMEC( "dma", "ctx_TAB_to_FEP_RX1", "0x123", "0x456", "256", "NULL" );
+		TraceManager.addDev( myDMA.getExecCode() );
+		TraceManager.addDev( myDMA.getInitCode() );
+		TraceManager.addDev( myDMA.getCleanupCode() );
+		System.exit(0);*/
 	}
 
 	private String generateNONSDROperation( Operation op, TMLTask xTask, TMLTask fTask )	{
@@ -722,21 +764,21 @@ public class TMLCCodeGeneration	{
 
 		initString += "/**** instructions ****/" + CR;
 		for( String s: getTaskNamePerMappedUnit( "FEP", mappedTasks ) )	{
-			initString += "FEP_CONTEXT " + s + ";" + CR;
+			initString += "embb_fep_context " + s + ";" + CR;
 		}
 		initString += CR;
 		for( String s: getTaskNamePerMappedUnit( "MAPPER", mappedTasks ) )	{
-			initString += "MAPPER_CONTEXT " + s + ";" + CR;
+			initString += "embb_mapper_context " + s + ";" + CR;
 		}
 		initString += CR;
 		for( String s: getTaskNamePerMappedUnit( "INTL", mappedTasks ) )	{
-			initString += "INTL_CONTEXT " + s + ";" + CR;
+			initString += "embb_intl_context " + s + ";" + CR;
 		}
 		initString += CR;
 
 		initString += "/**** init buffers ****/" + CR +
-									"void " + applicationName + "_final_init()\t{" + CR + "}" + CR +
-									"void signal_to_buffer_init()\t{" + CR + "}" + CR2;
+									"void " + applicationName + "_final_init()\t{" + CR + "}" + CR2;
+		initString += initializeSignals() + CR;
 
 		initString += "/**** init code ****/" + CR;
 
@@ -815,6 +857,17 @@ public class TMLCCodeGeneration	{
 		}
 		initString += "}";
 	}
+
+	private String initializeSignals()	{
+		String s = "void signal_to_buffer_init()\t{" + CR;
+		for( int i = 0; i < signalsCounter; i++ )	{
+			s += TAB + "sig[" + String.valueOf(i) + "].f = false;" + CR;
+			s += TAB + "sig[" + String.valueOf(i) + "].roff = false;" + CR;
+			s += TAB + "sig[" + String.valueOf(i) + "].woff = false;" + CR;
+			s += TAB + "sig[" + String.valueOf(i) + "].pBuff = false;" + CR2;
+		}
+		return s + "}" + SC + CR;
+	}
 	
 	private ArrayList<String> getTaskNamePerMappedUnit( String mappedUnit, ArrayList<TMLTask> mappedTasks )	{
 
@@ -858,6 +911,7 @@ public class TMLCCodeGeneration	{
 	public void saveFile( String path, String filename ) throws FileException {
 		
 		TraceManager.addUser( "Saving C files in " + path + filename );
+		FileUtils.saveFile( path + "main.c", mainFile );
 		FileUtils.saveFile( path + filename + ".h", headerString );
 		FileUtils.saveFile( path + filename + ".c", programString );
 		FileUtils.saveFile( path + filename + "_init.c", initString );