diff --git a/bin/lustre-mt/main.ml b/bin/lustre-mt/main.ml
index b0081614041e5726215385b4dd209871b3e7775a..6ef2dbcf76c8abe61937dcc8f94142dfc520c7db 100644
--- a/bin/lustre-mt/main.ml
+++ b/bin/lustre-mt/main.ml
@@ -70,41 +70,59 @@ let main () =
   in
   List.iter print_task_structs !tasks;
 
-  (* fprintf cfile "/* runners */\n";
-  *let print_task_runners task = 
-  *  fprintf cfile "void* %s_runner(void* cd) {\n" task.name;
-  *  fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*) cd" task.name task.name;
-  *  fprintf cfile "\twhile(1){\n";
-  *  fprintf cfile "\t\tSEM_WAIT(ts->sem_start);\n";
-  *  fprintf cfile "\t\t%s_step(&ts->ctx);\n" task.name;
-  *  fprintf cfile "\t\tSEM_SIGNAL(ts->sem_join);\n";
-  *  fprintf cfile "\t}\n";
-  *  fprintf cfile "}\n\n"
-  *in
-  *List.iter print_task_runners !tasks;
-*
-  *fprintf cfile "/* task Initializers */\n";
-  *let print_task_inits task = 
-  *  fprintf cfile "%s_TASK_type %s_TASK_init() {\n" task.name task.name;
-  *  fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*)calloc(1, sizeof(%s_TASK_struct));\n" task.name task.name task.name;
-  *  fprintf cfile "\t%s_ctx_init(&ts->ctx);\n" task.name;
-  *  fprintf cfile "SEM_INIT(ts->sem_start, 0, 1);\n";
-  *  fprintf cfile "SEM_INIT(ts->sem_join, 0, 1);\n";
-  *  fprintf cfile "pthread_create(&(ts->thr), NULL, %s_runner, ts);\n" task.name;
-  *  fprintf cfile "return (void*) ts;\n";
-  *  fprintf cfile "}\n\n"
-  *in
-  *List.iter print_task_inits !tasks;
-  *
-  *fprintf cfile "/* task resets */\n";
-  *let print_task_resets task =
-  *  fprintf cfile "void %s_TASK_reset(%s_TASK_type tD) {\n" task.name task.name;
-  *  fprintf cfile "%s_TASK_struct* ts = (%s_TASK_struct*) tD;\n" task.name task.name;
-  *  fprintf cfile "%s_ctx_reset(&ts->ctx)\n;" task.name;
-  *  fprintf cfile "}\n\n"
-  *in
-  *List.iter print_task_resets !tasks; 
-  *)
+  fprintf cfile "/* runners */\n";
+  let print_task_runners task = 
+    fprintf cfile "void* %s_runner(void* cd) {\n" task.name;
+    fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*) cd\n" task.name task.name;
+    fprintf cfile "\twhile(1){\n";
+    fprintf cfile "\t\tSEM_WAIT(ts->sem_start);\n";
+    fprintf cfile "\t\t%s_step(&ts->ctx);\n" task.name;
+    fprintf cfile "\t\tSEM_SIGNAL(ts->sem_join);\n";
+    fprintf cfile "\t}\n";
+    fprintf cfile "}\n\n"
+  in
+  List.iter print_task_runners !tasks;
+
+  fprintf cfile "/* task Initializers */\n";
+  let print_task_inits task = 
+    fprintf cfile "%s_TASK_type %s_TASK_init() {\n" task.name task.name;
+    fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*)calloc(1, sizeof(%s_TASK_struct));\n" task.name task.name task.name;
+    fprintf cfile "\t%s_ctx_init(&ts->ctx);\n" task.name;
+    fprintf cfile "\tSEM_INIT(ts->sem_start, 0, 1);\n";
+    fprintf cfile "\tSEM_INIT(ts->sem_join, 0, 1);\n";
+    fprintf cfile "\tpthread_create(&(ts->thr), NULL, %s_runner, ts);\n" task.name;
+    fprintf cfile "\treturn (void*) ts;\n";
+    fprintf cfile "}\n\n"
+  in
+  List.iter print_task_inits !tasks;
+  
+  fprintf cfile "/* task resets */\n";
+  let print_task_resets task =
+    fprintf cfile "void %s_TASK_reset(%s_TASK_type tD) {\n" task.name task.name;
+    fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*) tD;\n" task.name task.name;
+    fprintf cfile "\t%s_ctx_reset(&ts->ctx);\n" task.name;
+    fprintf cfile "}\n\n"
+  in
+  List.iter print_task_resets !tasks; 
+
+  fprintf cfile "/* task start */\n";
+  let print_task_starts task =
+    fprintf cfile "void %s_TASK_START(%s_TASK_type tD) {\n" task.name task.name;
+    fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*) tD;\n" task.name task.name;
+    fprintf cfile "\tSEM_SIGNAL(ts->sem_start);\n";
+    fprintf cfile "}\n\n"
+  in
+  List.iter print_task_starts !tasks; 
+
+  fprintf cfile "/* task join */\n";
+  let print_task_joins task =
+    fprintf cfile "void %s_TASK_JOIN(%s_TASK_type tD) {\n" task.name task.name;
+    fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*) tD;\n" task.name task.name;
+    fprintf cfile "\tSEM_WAIT(ts->sem_join);\n";
+    fprintf cfile "}\n\n"
+  in
+  List.iter print_task_joins !tasks; 
+  
 
   (* fprintf cfile "/* task inputs */\n";
   * let print_task_inputs task = 
@@ -112,7 +130,6 @@ let main () =
   *   task.
   * in
   * List.iter print_task_inputs !tasks;
-  *)