diff --git a/src/lus2licRun.ml b/src/lus2licRun.ml
index 3e6096372ba4769172527fbac923419c1278ba8d..95dae55525ca203992d8efc5017af459e99f8217 100644
--- a/src/lus2licRun.ml
+++ b/src/lus2licRun.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 26/03/2014 (at 16:12) by Erwan Jahier> *)
+(* Time-stamp: <modified the 10/06/2014 (at 10:46) by Erwan Jahier> *)
 (*-----------------------------------------------------------------------
 ** Copyright (C) - Verimag.
 *)
@@ -44,8 +44,8 @@ let make argv =
     )
   in
   let soc = try Soc.SocMap.find sk soc_tbl with Not_found -> assert false in
-  let soc_inputs  = (SocExec.expand_profile false (fst soc.profile)) in
-  let soc_outputs = (SocExec.expand_profile true (snd soc.profile)) in
+  let soc_inputs  = (SocVar.expand_profile false false (fst soc.profile)) in
+  let soc_outputs = (SocVar.expand_profile true false (snd soc.profile)) in
   let (vntl_i:Data.vntl) = (fst soc.profile) in
   let (vntl_o:Data.vntl) = (snd soc.profile) in
   let oc = stdout in
@@ -57,7 +57,7 @@ let make argv =
     fun ctx vl ->
       (*       let sl = List.map (fun var -> fst var, SocExecValue.get_value ctx (Var var)) vl in *)
       let sl = SocExecValue.filter_top_subst ctx.s in
-      let sl = List.flatten (List.map SocExec.expand_subst sl) in
+      let sl = List.flatten (List.map SocVar.expand_subst sl) in
       (* If the order ever matters, I could try the following.  :
          try List.map (fun v -> fst v,
          List.assoc (fst v) sl) vl with Not_found -> assert false
@@ -66,7 +66,7 @@ let make argv =
   in
   let (add_subst : Data.subst list -> SocExecValue.substs -> SocExecValue.substs) = 
     fun s ctx_s ->
-      let s = SocExec.unexpand_profile s (fst soc.profile) in
+      let s = SocVar.unexpand_profile s (fst soc.profile) in
       List.fold_left (fun acc (id,v) -> SocExecValue.sadd acc [id] v) ctx_s s
   in
   let ctx_ref = ref (SocExecValue.create_ctx soc_tbl soc) in
diff --git a/src/main.ml b/src/main.ml
index e54e4d27a61315cbf1a9bbf7ec091b03dbc03a2d..ae05589b972a4aae72e92517b82eb129ce5a8a5e 100644
--- a/src/main.ml
+++ b/src/main.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 02/06/2014 (at 10:50) by Erwan Jahier> *)
+(* Time-stamp: <modified the 10/06/2014 (at 10:46) by Erwan Jahier> *)
 
 open Verbose
 open AstV6
@@ -63,8 +63,8 @@ let (gen_rif_interface : LicPrg.t -> Ident.idref option -> Lv6MainArgs.t -> unit
     in
     let soc = try Soc.SocMap.find msk zesoc with Not_found -> assert false in
     let invars,outvars=soc.Soc.profile in
-    let invars = SocExec.expand_profile false invars in
-    let outvars = SocExec.expand_profile true outvars in
+    let invars = SocVar.expand_profile false false invars in
+    let outvars = SocVar.expand_profile true false outvars in
     let invars_str  = List.map (fun (n,t) -> n^":"^(my_type_to_string t)) invars in
     let outvars_str = List.map (fun (n,t) -> n^":"^(my_type_to_string t)) outvars in
     print_string ("#inputs "^ (String.concat " " invars_str) ^"\n");
@@ -110,8 +110,8 @@ let (gen_autotest_files : LicPrg.t -> Ident.idref option -> Lv6MainArgs.t -> uni
     in
     let soc = try Soc.SocMap.find msk zesoc with Not_found -> assert false in
     let invars,outvars=soc.Soc.profile in
-    let invars = SocExec.expand_profile false invars in
-    let outvars = SocExec.expand_profile true outvars in
+    let invars = SocVar.expand_profile false false invars in
+    let outvars = SocVar.expand_profile true false outvars in
     let invars_str  = List.map (fun (n,t) -> n^":"^(my_type_to_string true t)) invars in
     let outvars_str = List.map (fun (n,t) -> n^":"^(my_type_to_string false t)) outvars in
     let name = main_node.Ident.id_id in
diff --git a/src/soc2c.ml b/src/soc2c.ml
index dd6126ee14310ccbabd76ad90d34d0015545df56..bf18aae7568a10788e94135d06dfdbe35396a568 100644
--- a/src/soc2c.ml
+++ b/src/soc2c.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 06/06/2014 (at 10:41) by Erwan Jahier> *)
+(* Time-stamp: <modified the 10/06/2014 (at 10:55) by Erwan Jahier> *)
 
 
 (* let put (os: out_channel) (fmt:('a, unit, string, unit) format4) : 'a = *)
@@ -14,9 +14,24 @@ let rec (type_to_string : Data.t -> string) =
         | Bool -> "_boolean"
         | Int -> "_integer"
         | Real-> "_real"
-        | Extern s -> s ^ "/* extern */"
+        | Extern s -> s
         | Enum  (s, sl) -> id2s s 
-        | Struct (sid,_) -> (id2s sid) ^ "/* struct */"
+        | Struct (sid,_) -> (id2s sid)
+        | Array (ty, sz) -> Printf.sprintf "%s^%d" (type_to_string ty) sz 
+        | Alpha nb -> "alpha_"^(string_of_int nb)
+    in
+    str
+
+let rec (type_to_string2 : Data.t -> string) = 
+  fun v -> 
+    let str =
+      match v with
+        | Bool -> "bool"
+        | Int -> "int"
+        | Real-> "real"
+        | Extern s -> s
+        | Enum  (s, sl) -> id2s s 
+        | Struct (sid,_) -> (id2s sid)
         | Array (ty, sz) -> Printf.sprintf "%s^%d" (type_to_string ty) sz 
         | Alpha nb -> "alpha_"^(string_of_int nb)
     in
@@ -233,7 +248,7 @@ let rec (lic_type_to_c: Lic.type_ -> string) =
       let field_to_c (id,(tf,_opt)) = 
         Printf.sprintf "  %s %s;\n" (lic_type_to_c tf)  (id2s id)
       in
-      Printf.sprintf "struct %s { \n    %s }" 
+      Printf.sprintf "struct %s { %s }" 
         (long2s name) 
         (String.concat "" (List.map field_to_c fl))
     | TypeVar Any -> assert false
@@ -312,9 +327,9 @@ let (typedef : LicPrg.t -> Soc.tbl -> Soc.t -> string) =
       let to_c k t =
         Printf.sprintf "typedef %s %s;\n" (lic_type_to_c t) (long2s k)
       in
-      LicPrg.fold_types (fun k t acc -> acc ^ (to_c k t)) licprg "// Type definitions \n"
+      LicPrg.fold_types (fun k t acc -> acc ^ (to_c k t)) licprg ""
     in
-    "// user type def \n"^user_typedef
+    "// User typedef \n"^user_typedef
     ^"// Memoryless soc ctx typedef \n"^soc_ctx_typedef_without
     ^"// Memoryfull soc ctx typedef \n"^soc_ctx_typedef_with
     
@@ -489,9 +504,10 @@ int main(){
       ++s;
 ");
     let inputs,outputs = soc.profile in
-    (* XXX do something for arrays and struct ! *)
+    let inputs = SocVar.expand_profile true true inputs in
+    let outputs = SocVar.expand_profile true true  outputs in
     List.iter (fun (id,t) -> 
-      let t = Data.type_to_string t in
+      let t = type_to_string2 t in
       let str = Printf.sprintf "      ctx->%s = _get_%s(\"%s\");\n" id t id in
       putc str
     ) 
diff --git a/src/socExec.ml b/src/socExec.ml
index ff9989a9b8c6b39e9050089715b80c2f0c65d160..b6dafe187255938be5e3d2288f7eb3242e2a8dcb 100644
--- a/src/socExec.ml
+++ b/src/socExec.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 27/02/2014 (at 17:32) by Erwan Jahier> *)
+(* Time-stamp: <modified the 10/06/2014 (at 10:47) by Erwan Jahier> *)
 
 open Soc
 open Data
@@ -188,110 +188,11 @@ and (filter_params : Soc.t -> Soc.var list -> int list -> Soc.var list) =
     let res  = List.map (fun i -> local_nth i el) il  in
     res
 
-(* exported *)
-let rec (expand_profile : bool -> Soc.var list -> Soc.var list) =
-  fun enum_flag vl -> 
-    let res = List.flatten (List.map (expand_var enum_flag) vl) in
-    (* fix point. now useless ? *)
-    if List.length res = List.length vl then res else
-      expand_profile enum_flag res
-and expand_var enum_flag var = match var with
-  | (vn,(Bool| Int | Real)) -> [var]
-  | (vn,Enum(n,l)) -> if enum_flag then [vn,Int] else [var]
-  | (vn,Array(vt,i)) ->
-    let res = ref [] in
-    for k=i-1 downto 0 do
-      res := (vn^"_"^(string_of_int k),vt) :: !res;
-    done;
-    (expand_profile enum_flag !res)
-  | (vn,Struct(name,fl)) -> expand_profile enum_flag (List.map (fun (fn,t) -> vn^"_"^fn,t ) fl)
-  | (vn,Extern id) ->
-    print_string "Extern node not yet supported, sorry\n"; flush stdout;
-    assert false (* finish me! *)
-  | (vn,Alpha _) -> assert false (* should not occur *)
-
-let (int_to_enum : Data.v -> Soc.ident list -> Data.v) =
-  fun v el ->
-    match v with
-      | I i -> (try E (List.nth el i,i) with _ ->
-        failwith ("Enum out of the range [0,"^(string_of_int (List.length el))^"]"))
-      | _ -> assert false (* should not occur *)
-
-let rec (expand_subst: Data.subst -> Data.subst list) =
-  fun s ->
-    let rec aux acc (n,v) =
-      match v with
-        | U | I _ | F _ | B _  -> (n,v)::acc
-        | E(_e,i) -> (n,I i)::acc
-        | S fl -> 
-          let f (fn,fv) = n^"_"^fn, fv in
-          let fl = List.map f fl in
-          List.fold_left aux acc fl
-        | A a -> 
-          let res = ref acc in
-          for i=0 to (Array.length a)-1 do
-            let n_i = n^"_"^(string_of_int i) in
-            res := aux !res (n_i, a.(i));
-          done;
-          !res
-    in
-    aux [] s
-
-(* A local shortcut to ease the profile def *)
-type sl = Data.subst list
-
-(* Reconstruct the flattenned data *)
-let (unexpand_profile : sl -> Soc.var list -> sl) =
-  fun sl vl -> 
-    let rec (aux : sl -> sl -> Soc.var list -> sl * sl)=
-      fun sl_done sl_todo vl -> 
-        (* Returns the (accumulated) result and the unused subst
-           (which should be empty at the top-level call) *)
-        match sl_todo, vl with
-          | [],_::_ -> sl_done,[] 
-          | _,[] -> sl_done, sl_todo
-          | s::sl, (_, (Bool| Int | Real))::vl -> aux (s::sl_done) sl vl
-          | (id,v)::sl, (_,Enum(n,el))::vl -> 
-            let s =  (id, int_to_enum v el) in
-            aux (s::sl_done) sl vl 
-          | _, (vn, Array(vt,i))::vl -> (
-            let sl_todo_ref = ref sl_todo in
-            let sl_done_ref = ref [] in
-            let a_fake_value = I 42 in
-            let res = Array.make i a_fake_value in
-            for k=0 to i-1 do
-              let (vk_l:Soc.var list) = [("fake_name",vt)] in
-              let (sl_done_v, sl_todo_v) = aux !sl_done_ref !sl_todo_ref vk_l in
-              sl_todo_ref:=sl_todo_v;
-              sl_done_ref:=sl_done_v;
-              Array.set res k (snd (List.hd !sl_done_ref));
-            done; 
-            let sl_done = (vn, A res)::sl_done in
-            aux sl_done !sl_todo_ref vl
-          )
-          | _, (vn,Struct(sn,fl))::vl -> 
-            let sl_todo, fl = List.fold_left aux_field (sl_todo,[]) fl in
-            let sl_done = (vn, S fl)::sl_done in
-            aux sl_done sl_todo vl
-
-          | _, (vn,Extern id)::_ -> assert false (* finish me! *)
-          | _, (vn,Alpha _  )::_ -> assert false (* should not occur *)
-
-    and (aux_field : sl * (ident * Data.v) list -> ident * Data.t -> sl * (ident * Data.v) list ) =
-      fun (sl_todo, fl) (fn, t) ->
-        let new_sl_done, sl_todo = aux [] sl_todo [fn,t] in
-        let (_,v) = List.hd new_sl_done in
-        sl_todo, (fn,v)::fl
-
-    in
-    let res, remaining = aux [] sl vl in
-    assert (remaining=[]);
-    res
 
 (* [add_data_subst vtnl data_s s] add the data_s to s; *)
 let (add_data_subst : var list -> Data.subst list -> SocExecValue.substs -> SocExecValue.substs) =
   fun vntl_i s ctx_s -> 
-    let s = unexpand_profile s vntl_i in
+    let s = SocVar.unexpand_profile s vntl_i in
     List.fold_left (fun acc (id,v) -> sadd acc [id] v) ctx_s s
 
 let (read_soc_input : Lv6MainArgs.t -> var list -> Data.vntl -> out_channel -> substs -> substs) =
@@ -310,7 +211,7 @@ let rec (loop_step : Lv6MainArgs.t -> Soc.tbl -> Soc.var list -> Data.vntl -> Da
     let ctx = soc_step step soc_tbl soc ctx in
     let ctx = { ctx with s = sadd ctx.s ("$first_step"::ctx.cpath) (B false)} in
     let s = SocExecValue.filter_top_subst ctx.s in
-    let s = List.flatten(List.map expand_subst s) in
+    let s = List.flatten(List.map SocVar.expand_subst s) in
     let f2s = SocUtils.my_string_of_float_precision opt.Lv6MainArgs.precision in
     if not opt.rif then RifIO.write oc " #outs ";
     RifIO.write_outputs oc f2s exp_vntl_o_str s;
@@ -323,8 +224,8 @@ let (f : Lv6MainArgs.t -> Soc.tbl -> Soc.key -> unit) =
   fun opt soc_tbl sk ->
     let soc = try SocMap.find sk soc_tbl with Not_found -> assert false in
     let ctx = SocExecValue.create_ctx soc_tbl soc in
-    let exp_vntl_i = expand_profile true (fst soc.profile) in
-    let exp_vntl_o = expand_profile true (snd soc.profile) in
+    let exp_vntl_i = SocVar.expand_profile true false (fst soc.profile) in
+    let exp_vntl_o = SocVar.expand_profile true false (snd soc.profile) in
     let oc = 
       if  opt.Lv6MainArgs.outfile  = "" then stdout else
         let rif_file =
diff --git a/src/socExec.mli b/src/socExec.mli
index 649cbb0c78edd382101a09cc3301f9c6e0cf2eab..6eabf8cee2e7c0080eebe0c024009e1182b0a617 100644
--- a/src/socExec.mli
+++ b/src/socExec.mli
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 26/04/2013 (at 15:39) by Erwan Jahier> *)
+(* Time-stamp: <modified the 06/06/2014 (at 15:09) by Erwan Jahier> *)
 
 (* The entry point for lus2lic -exec *)
 val f : Lv6MainArgs.t -> Soc.tbl -> Soc.key -> unit
@@ -8,9 +8,3 @@ val do_step : Soc.tbl -> Soc.t -> SocExecValue.ctx -> SocExecValue.ctx
 val do_step_dbg : Soc.tbl -> Soc.t -> Event.ctx -> SocExecValue.ctx ->
   (SocExecValue.ctx -> Event.t) -> Event.t
 
-
-(* Expand struct and arrays when communicating with the outside world *)
- (* the bool flag control the enum expansion *)
-val expand_profile : bool -> Soc.var list -> Soc.var list
-val unexpand_profile : Data.subst list -> Soc.var list -> Data.subst list
-val expand_subst: Data.subst -> Data.subst list
diff --git a/src/socVar.ml b/src/socVar.ml
new file mode 100644
index 0000000000000000000000000000000000000000..251c746446d35262087a64e9854115369e49a0f6
--- /dev/null
+++ b/src/socVar.ml
@@ -0,0 +1,117 @@
+(* Time-stamp: <modified the 10/06/2014 (at 11:10) by Erwan Jahier> *)
+
+open Data
+
+let rec (expand_profile : bool -> bool -> Soc.var list -> Soc.var list) =
+  fun enum_flag c_access vl -> 
+    let res = List.flatten (List.map (expand_var enum_flag c_access) vl) in
+    (* fix point. now useless ? *)
+    if List.length res = List.length vl then res else
+      expand_profile enum_flag c_access res
+and expand_var enum_flag c_access var = match var with
+  | (vn,(Bool| Int | Real)) -> [var]
+  | (vn,Enum(n,l)) -> if enum_flag then [vn,Int] else [var]
+  | (vn,Array(vt,i)) ->
+    let res = ref [] in
+    for k=i-1 downto 0 do
+      let access = 
+        if c_access then "["^(string_of_int k)^"]" else "_"^(string_of_int k)
+      in
+      res := (vn^access,vt) :: !res;
+    done;
+    (expand_profile enum_flag c_access !res)
+  | (vn,Struct(name,fl)) -> 
+    expand_profile enum_flag c_access 
+      (List.map (fun (fn,t) -> vn^(if c_access then "." else "_")^fn,t ) fl)
+  | (vn,Extern id) ->
+    print_string "*** Extern node not yet supported, sorry\n"; flush stdout;
+    assert false (* finish me! *)
+  | (vn,Alpha _) -> assert false (* should not occur *)
+
+let (int_to_enum : Data.v -> Soc.ident list -> Data.v) =
+  fun v el ->
+    match v with
+      | I i -> (try E (List.nth el i,i) with _ ->
+        failwith ("Enum out of the range [0,"^(string_of_int (List.length el))^"]"))
+      | _ -> assert false (* should not occur *)
+
+let rec (expand_subst: Data.subst -> Data.subst list) =
+  fun s ->
+    let rec aux acc (n,v) =
+      match v with
+        | U | I _ | F _ | B _  -> (n,v)::acc
+        | E(_e,i) -> (n,I i)::acc
+        | S fl -> 
+          let f (fn,fv) = n^"_"^fn, fv in
+          let fl = List.map f fl in
+          List.fold_left aux acc fl
+        | A a -> 
+          let res = ref acc in
+          for i=0 to (Array.length a)-1 do
+            let n_i = n^"_"^(string_of_int i) in
+            res := aux !res (n_i, a.(i));
+          done;
+          !res
+    in
+    aux [] s
+
+(* exported *)
+
+let (int_to_enum : Data.v -> Soc.ident list -> Data.v) =
+  fun v el ->
+    match v with
+      | I i -> (try E (List.nth el i,i) with _ ->
+        failwith ("Enum out of the range [0,"^(string_of_int (List.length el))^"]"))
+      | _ -> assert false (* should not occur *)
+
+
+(* A local shortcut to ease the profile def *)
+type sl = Data.subst list
+
+(* Reconstruct the flattenned data *)
+let (unexpand_profile : sl -> Soc.var list -> sl) =
+  fun sl vl -> 
+    let rec (aux : sl -> sl -> Soc.var list -> sl * sl)=
+      fun sl_done sl_todo vl -> 
+        (* Returns the (accumulated) result and the unused subst
+           (which should be empty at the top-level call) *)
+        match sl_todo, vl with
+          | [],_::_ -> sl_done,[] 
+          | _,[] -> sl_done, sl_todo
+          | s::sl, (_, (Bool| Int | Real))::vl -> aux (s::sl_done) sl vl
+          | (id,v)::sl, (_,Enum(n,el))::vl -> 
+            let s =  (id, int_to_enum v el) in
+            aux (s::sl_done) sl vl 
+          | _, (vn, Array(vt,i))::vl -> (
+            let sl_todo_ref = ref sl_todo in
+            let sl_done_ref = ref [] in
+            let a_fake_value = I 42 in
+            let res = Array.make i a_fake_value in
+            for k=0 to i-1 do
+              let (vk_l:Soc.var list) = [("fake_name",vt)] in
+              let (sl_done_v, sl_todo_v) = aux !sl_done_ref !sl_todo_ref vk_l in
+              sl_todo_ref:=sl_todo_v;
+              sl_done_ref:=sl_done_v;
+              Array.set res k (snd (List.hd !sl_done_ref));
+            done; 
+            let sl_done = (vn, A res)::sl_done in
+            aux sl_done !sl_todo_ref vl
+          )
+          | _, (vn,Struct(sn,fl))::vl -> 
+            let sl_todo, fl = List.fold_left aux_field (sl_todo,[]) fl in
+            let sl_done = (vn, S fl)::sl_done in
+            aux sl_done sl_todo vl
+
+          | _, (vn,Extern id)::_ -> assert false (* finish me! *)
+          | _, (vn,Alpha _  )::_ -> assert false (* should not occur *)
+
+    and (aux_field : sl * (ident * Data.v) list -> ident * Data.t -> sl * (ident * Data.v) list ) =
+      fun (sl_todo, fl) (fn, t) ->
+        let new_sl_done, sl_todo = aux [] sl_todo [fn,t] in
+        let (_,v) = List.hd new_sl_done in
+        sl_todo, (fn,v)::fl
+
+    in
+    let res, remaining = aux [] sl vl in
+    assert (remaining=[]);
+    res
diff --git a/src/socVar.mli b/src/socVar.mli
new file mode 100644
index 0000000000000000000000000000000000000000..4decbb75b63e2366ead28607ab1a6f0daf4b2f00
--- /dev/null
+++ b/src/socVar.mli
@@ -0,0 +1,17 @@
+(* Time-stamp: <modified the 10/06/2014 (at 10:44) by Erwan Jahier> *)
+
+
+(** Expand struct and arrays when communicating with the outside world *)
+
+
+(** If the first bool flag is true, enum are translated into integers 
+
+   If the second one is true, we generate var name that actually corresponds
+   to their access in C. For instance, an array element that is itself in a structure
+   would be named "S.f[3]" instead of "S_f_3"
+*)
+
+val expand_profile : bool -> bool -> Soc.var list -> Soc.var list
+
+val unexpand_profile : Data.subst list -> Soc.var list -> Data.subst list
+val expand_subst: Data.subst -> Data.subst list
diff --git a/test/lus2lic.sum b/test/lus2lic.sum
index 829d7662703310e72b44f881093643621344e14e..eb5d7927cacd841f1fb003176b0ed7a381ab9dd9 100644
--- a/test/lus2lic.sum
+++ b/test/lus2lic.sum
@@ -1,4 +1,4 @@
-Test Run By jahier on Fri Jun  6 10:41:47 2014
+Test Run By jahier on Tue Jun 10 11:01:45 2014
 Native configuration is i686-pc-linux-gnu
 
 		=== lus2lic tests ===
@@ -44,7 +44,7 @@ PASS: ./lus2lic {-ec -o /tmp/enum0.ec should_work/enum0.lus}
 PASS: ./myec2c {-o /tmp/enum0.c /tmp/enum0.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/enum0.lus
 PASS: ./lus2lic {-2c should_work/enum0.lus -n enum0}
-FAIL: Check that the generated C code compiles  : gcc enum0_enum0.c enum0_enum0_loop.c 
+PASS: gcc enum0_enum0.c enum0_enum0_loop.c 
 PASS: ./lus2lic {-o /tmp/ck6.lic should_work/ck6.lus}
 PASS: ./lus2lic {-ec -o /tmp/ck6.ec should_work/ck6.lus}
 PASS: ./myec2c {-o /tmp/ck6.c /tmp/ck6.ec}
@@ -352,7 +352,7 @@ PASS: ./lus2lic {-ec -o /tmp/struct_with.ec should_work/struct_with.lus}
 PASS: ./myec2c {-o /tmp/struct_with.c /tmp/struct_with.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/struct_with.lus
 PASS: ./lus2lic {-2c should_work/struct_with.lus -n struct_with}
-FAIL: Check that the generated C code compiles  : gcc struct_with_struct_with.c struct_with_struct_with_loop.c 
+PASS: gcc struct_with_struct_with.c struct_with_struct_with_loop.c 
 PASS: ./lus2lic {-o /tmp/test_node_expand.lic should_work/test_node_expand.lus}
 PASS: ./lus2lic {-ec -o /tmp/test_node_expand.ec should_work/test_node_expand.lus}
 PASS: ./myec2c {-o /tmp/test_node_expand.c /tmp/test_node_expand.ec}
@@ -636,7 +636,7 @@ PASS: ./lus2lic {-ec -o /tmp/mm3.ec should_work/mm3.lus}
 PASS: ./myec2c {-o /tmp/mm3.c /tmp/mm3.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/mm3.lus
 PASS: ./lus2lic {-2c should_work/mm3.lus -n mm3}
-FAIL: Check that the generated C code compiles  : gcc mm3_mm3.c mm3_mm3_loop.c 
+PASS: gcc mm3_mm3.c mm3_mm3_loop.c 
 PASS: ./lus2lic {-o /tmp/over2.lic should_work/over2.lus}
 PASS: ./lus2lic {-ec -o /tmp/over2.ec should_work/over2.lus}
 PASS: ./myec2c {-o /tmp/over2.c /tmp/over2.ec}
@@ -654,7 +654,7 @@ PASS: ./lus2lic {-ec -o /tmp/complex.ec should_work/complex.lus}
 PASS: ./myec2c {-o /tmp/complex.c /tmp/complex.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/complex.lus
 PASS: ./lus2lic {-2c should_work/complex.lus -n complex}
-FAIL: Check that the generated C code compiles  : gcc complex_complex.c complex_complex_loop.c 
+PASS: gcc complex_complex.c complex_complex_loop.c 
 PASS: ./lus2lic {-o /tmp/initial.lic should_work/initial.lus}
 PASS: ./lus2lic {-ec -o /tmp/initial.ec should_work/initial.lus}
 PASS: ./myec2c {-o /tmp/initial.c /tmp/initial.ec}
@@ -936,7 +936,7 @@ PASS: ./lus2lic {-ec -o /tmp/contractForElementSelectionInArray.ec should_work/c
 PASS: ./myec2c {-o /tmp/contractForElementSelectionInArray.c /tmp/contractForElementSelectionInArray.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/contractForElementSelectionInArray.lus
 PASS: ./lus2lic {-2c should_work/contractForElementSelectionInArray.lus -n contractForElementSelectionInArray}
-FAIL: Check that the generated C code compiles  : gcc contractForElementSelectionInArray_contractForElementSelectionInArray.c contractForElementSelectionInArray_contractForElementSelectionInArray_loop.c 
+PASS: gcc contractForElementSelectionInArray_contractForElementSelectionInArray.c contractForElementSelectionInArray_contractForElementSelectionInArray_loop.c 
 PASS: ./lus2lic {-o /tmp/iterFibo.lic should_work/iterFibo.lus}
 PASS: ./lus2lic {-ec -o /tmp/iterFibo.ec should_work/iterFibo.lus}
 PASS: ./myec2c {-o /tmp/iterFibo.c /tmp/iterFibo.ec}
@@ -1094,7 +1094,7 @@ PASS: ./lus2lic {-ec -o /tmp/test_struct.ec should_work/test_struct.lus}
 PASS: ./myec2c {-o /tmp/test_struct.c /tmp/test_struct.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/test_struct.lus
 PASS: ./lus2lic {-2c should_work/test_struct.lus -n test_struct}
-FAIL: Check that the generated C code compiles  : gcc test_struct_test_struct.c test_struct_test_struct_loop.c 
+PASS: gcc test_struct_test_struct.c test_struct_test_struct_loop.c 
 PASS: ./lus2lic {-o /tmp/uu.lic should_work/uu.lus}
 PASS: ./lus2lic {-ec -o /tmp/uu.ec should_work/uu.lus}
 PASS: ./myec2c {-o /tmp/uu.c /tmp/uu.ec}
@@ -1379,7 +1379,7 @@ PASS: ./lus2lic {-o /tmp/simple.lic should_work/simple.lus}
 PASS: ./lus2lic {-ec -o /tmp/simple.ec should_work/simple.lus}
 PASS: ./myec2c {-o /tmp/simple.c /tmp/simple.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/simple.lus
-PASS: ./lus2lic {-2c should_work/simple.lus -n simple}
+FAIL: Generate c code  : ./lus2lic {-2c should_work/simple.lus -n simple}
 FAIL: Check that the generated C code compiles  : gcc simple_simple.c simple_simple_loop.c 
 PASS: ./lus2lic {-o /tmp/func_with_body.lic should_work/func_with_body.lus}
 PASS: ./lus2lic {-ec -o /tmp/func_with_body.ec should_work/func_with_body.lus}
@@ -1468,9 +1468,9 @@ XPASS: Test bad programs (semantics): lus2lic {-o /tmp/bug.lic should_fail/seman
 
 		=== lus2lic Summary ===
 
-# of expected passes		1116
-# of unexpected failures	282
+# of expected passes		1121
+# of unexpected failures	277
 # of unexpected successes	21
 # of expected failures		37
-testcase ./lus2lic.tests/non-reg.exp completed in 113 seconds
+testcase ./lus2lic.tests/non-reg.exp completed in 136 seconds
 testcase ./lus2lic.tests/progression.exp completed in 0 seconds
diff --git a/test/lus2lic.time b/test/lus2lic.time
index 68f663399e42b00179445c364acd61ef4e423f60..2894b2b808b9bf9dd9f4d005c516f1b39cee73e7 100644
--- a/test/lus2lic.time
+++ b/test/lus2lic.time
@@ -1,2 +1,2 @@
-testcase ./lus2lic.tests/non-reg.exp completed in 113 seconds
+testcase ./lus2lic.tests/non-reg.exp completed in 136 seconds
 testcase ./lus2lic.tests/progression.exp completed in 0 seconds