diff --git a/executablecode/generated_src/main.c b/executablecode/generated_src/main.c
deleted file mode 100644
index bce8999af4f6974ca087f2adf5d623f9e7be3a9b..0000000000000000000000000000000000000000
--- a/executablecode/generated_src/main.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <stdio.h>
-#include <pthread.h>
-#include <unistd.h>
-#include <stdlib.h>
-
-#include "request.h"
-#include "syncchannel.h"
-#include "request_manager.h"
-#include "debug.h"
-
-int main(int argc, char *argv[]) {
-}
\ No newline at end of file
diff --git a/executablecode/src/defs.h b/executablecode/src/defs.h
new file mode 100644
index 0000000000000000000000000000000000000000..d04603858e5e19b68c009c1c7b7a1e2a89eee333
--- /dev/null
+++ b/executablecode/src/defs.h
@@ -0,0 +1,6 @@
+#ifndef DEFS_H
+#define DEFS_H
+
+#define bool int
+#define true 1
+#define false 0
diff --git a/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java b/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java
index 75cdcbb1bfd6ef88bdf3bce992b63f5b1d3391f5..9fec99fd11bf518c7b7da5bce76e8b918daab1fd 100755
--- a/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java
+++ b/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java
@@ -70,10 +70,19 @@ public class AVATAR2CPOSIX {
 	
 	
 	public void saveInFiles(String path) throws FileException {
+		
+		TraceManager.addDev("Generating files");
+		
 		if (mainFile != null) {
+			TraceManager.addDev("Generating main files in " + path + mainFile.getName() + ".h");
 			FileUtils.saveFile(path + mainFile.getName() + ".h", mainFile.getHeaderCode());
 			FileUtils.saveFile(path + mainFile.getName() + ".c", mainFile.getMainCode());
 		}
+		
+		for(TaskFile taskFile: taskFiles) {
+			FileUtils.saveFile(path + taskFile.getName() + ".h", taskFile.getFullHeaderCode());
+			FileUtils.saveFile(path + taskFile.getName() + ".c", taskFile.getMainCode());
+		}
 	}
 	
 	
@@ -85,20 +94,38 @@ public class AVATAR2CPOSIX {
 	
 	public void generateCPOSIX(boolean _debug) {
 		mainFile = new MainFile("main");
+		taskFiles = new Vector<TaskFile>();
+		
+		makeMainMutex();
+	
+		makeSynchronousChannels();
 		
+		makeTasks();
+	}
+	
+	public void makeMainMutex() {
 		// Create a main mutex
 		mainFile.appendToHCode("/* Main mutex */" + CR);
 		mainFile.appendToBeforeMainCode("/* Main mutex */" + CR);
 		mainFile.appendToHCode("extern pthread_mutex_t mainMutex;" + CR + CR);
 		mainFile.appendToBeforeMainCode("pthread_mutex_t mainMutex;" + CR + CR);
 		
+	}
+	
+	public void makeSynchronousChannels() {
 		
 		// Create a synchronous channel per relation/signal
 		mainFile.appendToHCode("/* Synchronous channels */" + CR);
 		mainFile.appendToBeforeMainCode("/* Synchronous channels */" + CR);
+		mainFile.appendToMainCode("/* Synchronous channels */" + CR);
 		for(AvatarRelation ar: avspec.getRelations()) {
 				if (!ar.isAsynchronous()) {
-					
+					for(int i=0; i<ar.nbOfSignals(); i++) {
+						mainFile.appendToHCode("extern syncchannel " + getChannelName(ar, i)  + ";" + CR);
+						mainFile.appendToBeforeMainCode("syncchannel " + getChannelName(ar, i) + ";" + CR);
+						mainFile.appendToMainCode(getChannelName(ar, i) + ".inname =\"" + ar.getInSignal(i).getName() + "\";" + CR);
+						mainFile.appendToMainCode(getChannelName(ar, i) + ".outname =\"" + ar.getOutSignal(i).getName() + "\";" + CR);
+					}
 				}
 		}
 			
@@ -106,4 +133,95 @@ public class AVATAR2CPOSIX {
 		
 	}
 	
+	public void makeTasks() {
+		for(AvatarBlock block: avspec.getListOfBlocks()) {
+			makeTask(block);
+		}
+	}
+	
+	public void makeTask(AvatarBlock block) {
+		TaskFile taskFile = new TaskFile(block.getName());
+		
+		//taskFile.addToHeaderCode("#include \"main.h\"" + CR);
+		
+		//taskFile.addToMainCode("#include \"" + block.getName() + ".h\"");
+		
+		
+		defineAllStates(block, taskFile);
+		
+		defineAllMethods(block, taskFile);
+		
+		makeMainFunction(block, taskFile);
+		
+		taskFiles.add(taskFile);
+	}
+	
+	public void defineAllStates(AvatarBlock _block, TaskFile _taskFile) {
+		int id = 0;
+		for (AvatarStateMachineElement asme: _block.getStateMachine().getListOfElements()) {
+			if (asme instanceof AvatarState) {
+				_taskFile.addToMainCode("#define STATE__" + asme.getName() + " " + id + CR);
+				id ++;
+			}
+		}
+	}
+	
+	public void defineAllMethods(AvatarBlock _block, TaskFile _taskFile) {
+		String ret = "";
+		LinkedList<AvatarAttribute> list;
+		
+		for (AvatarMethod am: _block.getMethods()) {
+			list = am.getListOfReturnAttributes();
+			if (list.size() == 0) {
+				ret += "void";
+			} else {
+				ret += getCTypeOf(list.get(0));
+			}
+			ret += " " + am.getName() + "(";
+			list = am.getListOfAttributes();
+			int cpt = 0;
+			for(AvatarAttribute aa: list) {
+				ret += getCTypeOf(aa) + " " + aa.getName()
+			}
+			
+			ret += ") {" + CR + "printf(\"Entering method " + am.getName() + "\");" + CR + "}" + CR + CR;
+		}
+		_taskFile.addToMainCode(ret + CR);
+		
+	}
+	
+	public void makeMainFunction(AvatarBlock _block, TaskFile _taskFile) {
+		String s = "void mainFunc_" + _block.getName() + "(void *arg)"
+		String sh = "extern " + s + ";" + CR;
+		s+= {" + CR;
+			
+		s += makeAttributesDeclaration(_block, _taskFile);	
+			
+		s += "}\n" + CR;	
+		_taskFile.addToMainCode(s + CR);
+		_taskFile.addToHeaderCode(sh + CR);	
+	}
+	
+	
+	public String makeAttributesDeclaration(AvatarBlock _block, TaskFile _taskFile) {
+		String ret = "";
+		for(AvatarAttribute aa: _block.getAttributes()) {
+			ret += getCTypeOf(aa) + " " + aa.getName() + " = " + aa.getInitialValue() + ";" + CR;
+		}
+		return ret;
+	}
+	
+	
+	public String getCTypeOf(AvatarAttribute _aa) {
+		String ret = "int";
+		if (_aa.getType() == AvatarType.BOOLEAN) {
+			ret = "bool";
+		}
+		return ret;
+	}
+	
+	public String getChannelName(AvatarRelation _ar, int _index) {
+		return _ar.block1.getName() + "_" + _ar.getSignal1(_index).getName() + "__" + _ar.block2.getName() + "_" + _ar.getSignal2(_index).getName();
+	}
+	
 }
\ No newline at end of file
diff --git a/src/avatartranslator/toexecutable/TaskFile.java b/src/avatartranslator/toexecutable/TaskFile.java
index e4c284b77d0e7e461921ffc62e822ccfd1cb3b9a..cb1c5f5def4e83590a864c39a907fdb97658d434 100755
--- a/src/avatartranslator/toexecutable/TaskFile.java
+++ b/src/avatartranslator/toexecutable/TaskFile.java
@@ -54,25 +54,45 @@ import avatartranslator.*;
 public class TaskFile {
 
 	private final static String INCLUDE_HEADER = "#include <stdio.h>\n#include <pthread.h>\n#include <unistd.h>\n#include <stdlib.h>\n";
-	private final static String LOCAL_INCLUDE_HEADER = "#include \"request.h\"\n#include \"syncchannel.h\"\n#include \"request_manager.h\"\n#include \"debug.h\""; 
+	private final static String LOCAL_INCLUDE_HEADER = "#include \"request.h\"\n#include \"syncchannel.h\"\n#include \"request_manager.h\"\n#include \"debug.h\"\n#include \"defs.h\"\n#include \"main.h\""; 
+	
+	private final static String CR = "\n";
 	
 	private String name;
 	
+	private String headerCode;
+	private String mainCode;
+	
 	
 	public TaskFile(String _name) {
 		name = _name;
+		headerCode = "";
+		mainCode = "";
 	}
 	
 	public String getName() {
 		return name;
 	}
 	
-	public String getHeaderCode() {
-		return "";
+	public String getFullHeaderCode() {
+		String s = "#ifndef " + name + "_H\n#define " + name + "_H\n";
+		s += INCLUDE_HEADER + CR + LOCAL_INCLUDE_HEADER + CR + CR;
+		s += headerCode;
+		s += "#endif\n";
+		return s;
 	}
 	
 	public String getMainCode() {
-		return INCLUDE_HEADER + "\n" + LOCAL_INCLUDE_HEADER;
+		return "#include \"" + name + ".h\"" + CR + CR + mainCode;
+	}
+	
+	public void addToHeaderCode(String _code) {
+		headerCode += _code;
 	}
 	
+	public void addToMainCode(String _code) {
+		mainCode += _code;
+	}
+
+	
 }
\ No newline at end of file