diff --git a/src/lv6MainArgs.ml b/src/lv6MainArgs.ml
index 6357afa63d1d49e169e5bff973b63bfb1cb39c36..583b83fb0f8dbb25652228a76f2db0b0337b17d9 100644
--- a/src/lv6MainArgs.ml
+++ b/src/lv6MainArgs.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 12/02/2015 (at 18:17) by Erwan Jahier> *)
+(* Time-stamp: <modified the 13/02/2015 (at 15:50) by Erwan Jahier> *)
 (*
 Le manager d'argument adapté de celui de lutin, plus joli
 N.B. solution un peu batarde : les options sont stockées, comme avant, dans Global,
diff --git a/src/soc2cHeap.ml b/src/soc2cHeap.ml
index 73d5287fc7a58c57e528218a8d6db92d6c8d956c..fc47832ef70c1687eb35249eddf4b24e348c80bf 100644
--- a/src/soc2cHeap.ml
+++ b/src/soc2cHeap.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 11/02/2015 (at 16:19) by Erwan Jahier> *)
+(* Time-stamp: <modified the 13/02/2015 (at 16:01) by Erwan Jahier> *)
 
 open Soc2cUtil
 open Soc2cIdent
@@ -28,21 +28,22 @@ let rec (string_of_var_expr: Soc.t -> Soc.var_expr -> string) =
 
 
 (* exported *) 
-let rec (gen_assign : Data.t  -> string -> string -> string -> string) =
-  fun t vi vo size -> 
+let rec (gen_assign : Data.t  -> string -> string -> string) =
+  fun t vi vo -> 
+    let t_str = Soc2cUtil.data_type_to_c t "" in
     match t with
-      | Data.Alias(_,t) -> gen_assign t vi vo size
+      | Data.Alias(_,t) -> gen_assign t vi vo
       | Data.Enum _  
       | Data.Struct(_) (* should I rather use memcpy for struct? *)
       | Data.Bool | Data.Int | Data.Real -> 
         Printf.sprintf "  %s = %s;\n" vi vo
       | Data.Alpha(_) (* dead code ? *) 
       | Data.Array(_) -> 
-        let t_str = Soc2cIdent.type_to_short_string t in
-        Printf.sprintf "  _assign_%s(%s, %s, sizeof(%s));\n" t_str vi vo vi
+        let t_str_short = Soc2cIdent.type_to_short_string t in
+        Printf.sprintf "  _assign_%s(%s, %s, sizeof(%s));\n" t_str_short vi vo t_str
 
       | Data.Extern (id) -> 
-        Printf.sprintf "  _assign_%s(&%s, &%s, sizeof(%s));\n" (id2s id) vi vo vo
+        Printf.sprintf "  _assign_%s(&%s, &%s, sizeof(%s));\n" (id2s id) vi vo t_str
 
 let (gen_assign_var_expr : Soc.t -> Soc.var_expr -> Soc.var_expr -> string) =
 fun soc vi vo -> 
@@ -52,7 +53,6 @@ fun soc vi vo ->
     | _,_ -> 
       gen_assign (Soc.data_type_of_var_expr vi)
         (string_of_var_expr soc vi) (string_of_var_expr soc vo)
-        (Printf.sprintf "sizeof(%s)" (string_of_var_expr soc vo))
 
 
 let (step_name : Soc.key -> string -> string) =
@@ -133,7 +133,7 @@ let (gen_step_call : Soc.t -> Soc.t -> Soc.var_expr list -> Soc.var_expr list ->
             let inputs = fst called_soc.profile in
             let l = try (
               List.map2 (fun (name, t) ve -> 
-                gen_assign t (Printf.sprintf "%s.%s" ctx name) ve (Printf.sprintf "sizeof(%s)" ve)) 
+                gen_assign t (Printf.sprintf "%s.%s" ctx name) ve) 
                 inputs vel_in
             ) with _ -> assert false (* are all parameters necessarily used? *)
             in
@@ -146,7 +146,8 @@ let (gen_step_call : Soc.t -> Soc.t -> Soc.var_expr list -> Soc.var_expr list ->
               List.map2
                 (fun  (name,t) ve -> 
                   let ve2 = Printf.sprintf "%s.%s" ctx name in
-                  gen_assign t ve ve2 (Printf.sprintf "sizeof(%s)" ve2)) outputs vel_out
+                  gen_assign t ve ve2) 
+                outputs vel_out
             ) with _ -> assert false
             in
             (String.concat "" l) ^"\n"
diff --git a/src/soc2cHeap.mli b/src/soc2cHeap.mli
index 19f424a78024e09a63a70d6afccbeefabeddb5e1..205e3cc9d0b33ccc73c5e577b2ce06e1b43fd5eb 100644
--- a/src/soc2cHeap.mli
+++ b/src/soc2cHeap.mli
@@ -1,11 +1,11 @@
-(* Time-stamp: <modified the 09/02/2015 (at 16:44) by Erwan Jahier> *)
+(* Time-stamp: <modified the 13/02/2015 (at 15:37) by Erwan Jahier> *)
 
 (** Gathers all entities (functions, types) that implement the
     heap-based C generator.  *)
 
-(* [gen_assign t vi vo size] generated the C code that assign vo to vi,
+(* [gen_assign t vi vo] generated the C code that assign vo to vi,
    using memcpy or = depending on the type t *)
-val gen_assign : Data.t  -> string -> string -> string -> string
+val gen_assign : Data.t  -> string -> string -> string
 
 (* ditto *)
 val gen_assign_var_expr : Soc.t -> Soc.var_expr -> Soc.var_expr -> string
diff --git a/src/soc2cStack.ml b/src/soc2cStack.ml
index 09b62b5ef524e6067afe5e29408490feb115254c..489bfb13101adf8d4c38c901f4ede067a3aa46f9 100644
--- a/src/soc2cStack.ml
+++ b/src/soc2cStack.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 12/02/2015 (at 17:14) by Erwan Jahier> *)
+(* Time-stamp: <modified the 13/02/2015 (at 15:38) by Erwan Jahier> *)
 
 open Soc2cUtil
 open Soc2cIdent
@@ -44,12 +44,12 @@ let rec (is_soc_output : Soc.var_expr -> Soc.t -> bool) =
       | Slice(ve,_,_,_,_,t) -> false (* is_soc_output ve soc *)
 
 let rec (string_of_var_expr: Soc.t -> Soc.var_expr -> string) = 
-  fun soc -> function
+  fun soc var -> match var with
     | Const("true", _) -> "_true"
     | Const("false", _) -> "_false"
     | Const(id, _) -> id2s id
     | Var ("_memory",_)   -> (* Clutch! it's not an interface var... *) "ctx->_memory" 
-    | Var (id,_)   -> id2s id
+    | Var (id,t)   -> id2s id
     | Field(f, id,_) -> 
       if is_soc_output f soc
       then Printf.sprintf "%s->%s" (string_of_var_expr soc f) (id2s id) 
@@ -59,32 +59,37 @@ let rec (string_of_var_expr: Soc.t -> Soc.var_expr -> string) =
 
 
 (* exported *) 
-let rec (gen_assign : Data.t  -> string -> string -> string -> string) =
-  fun t vi vo size -> 
+let rec (gen_assign : Data.t  -> string -> string -> string) =
+  fun t vi vo -> 
+    let t_str = Soc2cUtil.data_type_to_c t "" in
     match t with
-      | Data.Alias(_,t) -> gen_assign t vi vo size
+      | Data.Alias(_,t) -> gen_assign t vi vo
       | Data.Enum _  
       | Data.Struct(_) (* should I rather use memcpy for struct? *)
       | Data.Bool | Data.Int | Data.Real -> Printf.sprintf "  %s = %s;\n" vi vo
       | Data.Alpha(_) (* dead code ? *) 
       | Data.Array(_) -> 
-        let t_str = Soc2cIdent.type_to_short_string t in
-        Printf.sprintf "  _assign_%s(%s, %s, sizeof(%s));\n" t_str vi vo vi
+        let t_str_short = Soc2cIdent.type_to_short_string t in
+        Printf.sprintf "  _assign_%s(%s, %s, sizeof(%s));\n" t_str_short vi vo t_str
 
       | Data.Extern (id) -> 
-        Printf.sprintf "  _assign_%s(&%s, &%s, sizeof(%s));\n" (id2s id) vi vo vo
+        Printf.sprintf "  _assign_%s(&%s, &%s, sizeof(%s));\n" (id2s id) vi vo t_str
       
 
 let (gen_assign_var_expr : Soc.t -> Soc.var_expr -> Soc.var_expr -> string) =
-fun soc vi vo -> 
-  match vi,vo with
+fun soc vo vi -> 
+  match vo,vi  with
     | Slice _, _  | _, Slice _ ->  assert false
     | _,_ -> 
-      let left = string_of_var_expr soc vi in
-      let left = if is_soc_output vi soc && ve_not_an_array vi && ve_not_a_field vi
-        then "*"^left else left  in
-      gen_assign (Soc.data_type_of_var_expr vi) left (string_of_var_expr soc vo)
-        (Printf.sprintf "sizeof(%s)" (string_of_var_expr soc vo))
+      let left = string_of_var_expr soc vo in
+      let left = if is_soc_output vo soc && ve_not_an_array vo && ve_not_a_field vo
+        then "*"^left else left  
+      in
+      let vi_str = string_of_var_expr soc vi in
+      let vi_str = 
+        if is_soc_output vi soc && ve_not_an_array vi then "*"^vi_str else vi_str
+      in
+      gen_assign (Soc.data_type_of_var_expr vo) left vi_str 
 
 
 let (step_name : Soc.key -> string -> string) =
diff --git a/src/soc2cStack.mli b/src/soc2cStack.mli
index 5027868eb3cb04d6f837e54da9c258d3f5b942cf..f310673a9bb75e603f3685f3d8f776728fd94d03 100644
--- a/src/soc2cStack.mli
+++ b/src/soc2cStack.mli
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 12/02/2015 (at 17:14) by Erwan Jahier> *)
+(* Time-stamp: <modified the 13/02/2015 (at 15:38) by Erwan Jahier> *)
 
 (** Gathers all entities (functions, types) that implement the
     heap-based C generator.  *)
@@ -10,7 +10,7 @@ val is_soc_output : Soc.var_expr -> Soc.t -> bool
 
 (** [gen_assign t vi vo size] generated the C code that assign vo to vi,
    using memcpy or = depending on the type t *)
-val gen_assign : Data.t  -> string -> string -> string -> string
+val gen_assign : Data.t  -> string -> string -> string
 
 (** ditto *)
 val gen_assign_var_expr : Soc.t -> Soc.var_expr -> Soc.var_expr -> string
diff --git a/src/socPredef2cHeap.ml b/src/socPredef2cHeap.ml
index 0e379e6c1f43a4e72dfab4e64b2492429b937d97..2bcbd65e55f998a2d5386484ea57f4fbb3ca0d5b 100644
--- a/src/socPredef2cHeap.ml
+++ b/src/socPredef2cHeap.ml
@@ -1,5 +1,5 @@
 
-(* Time-stamp: <modified the 06/02/2015 (at 16:09) by Erwan Jahier> *)
+(* Time-stamp: <modified the 13/02/2015 (at 16:09) by Erwan Jahier> *)
 
 open Data
 open Soc
@@ -28,8 +28,7 @@ let (lustre_ite : Soc.key -> string) =
 (*     Printf.sprintf"  %s.z = (%s.c)? %s.xt : %s.xe;\n" ctx ctx ctx ctx *)
     Soc2cHeap.gen_assign t (Printf.sprintf "%s.z" ctx)
        (Printf.sprintf "(%s.c)? %s.xt : %s.xe" ctx ctx ctx)
-       (Printf.sprintf "sizeof(%s.z)" ctx)
-
+    
 let (lustre_impl : Soc.key -> string) =
   fun sk -> 
     let ctx = get_ctx_name sk in
@@ -42,9 +41,7 @@ let (lustre_arrow : Soc.key -> string) =
     let x,y,z = "ctx->x", "ctx->y", "ctx->z" in
     let t = match sk with  (_,_::t::_,_) -> t | _ ->  assert false in
     let vo = Printf.sprintf"((ctx->_memory)? %s : %s)" x y in
-    let size = Printf.sprintf "sizeof(%s)" x in
-    (Soc2cHeap.gen_assign t z vo size) ^ 
-      ("  ctx->_memory = _false;\n")
+    (Soc2cHeap.gen_assign t z vo) ^ ("  ctx->_memory = _false;\n")
       
 let (lustre_hat : Soc.key -> string) =
   fun (n,tl,si_opt) -> 
@@ -56,7 +53,7 @@ let (lustre_hat : Soc.key -> string) =
     let buff = ref "" in
     for j=0 to i-1 do
       buff := !buff^(Soc2cHeap.gen_assign t (Printf.sprintf "%s.z[%d]" ctx j)
-                       (Printf.sprintf "%s.x" ctx) (Printf.sprintf "sizeof(%s.x)" ctx)); 
+                       (Printf.sprintf "%s.x" ctx)); 
     done;
     !buff
 
@@ -70,8 +67,7 @@ let (lustre_array: Soc.key -> string) =
     let buff = ref "" in
     for j=0 to i-1 do
       buff := !buff^(Soc2cHeap.gen_assign t (Printf.sprintf "%s.z[%d]" ctx j)
-                       (Printf.sprintf "%s.x%d" ctx (j+1)) 
-                       (Printf.sprintf "sizeof(%s.x%d)" ctx (j+1))); 
+                       (Printf.sprintf "%s.x%d" ctx (j+1))); 
     done;
     !buff
  
@@ -84,18 +80,19 @@ let (lustre_concat: Soc.key -> string) =
     in
     let t1 = Printf.sprintf "%s.x" ctx
     and t2 = Printf.sprintf "%s.y" ctx  
-    and t12 = Printf.sprintf "%s.z" ctx in  
-    (Printf.sprintf "  memcpy(&%s, &%s, sizeof(%s));\n" t12 t1 t1)^ 
-      (Printf.sprintf "  memcpy(&%s[%d], &%s, sizeof(%s));\n" t12 s1 t2 t2) 
+    and t12 = Printf.sprintf "%s.z" ctx 
+    and t1_type = Soc2cUtil.data_type_to_c (Data.Array(t,s1)) ""
+    and t2_type = Soc2cUtil.data_type_to_c (Data.Array(t,s2)) "" 
+    in  
+      (Printf.sprintf "  memcpy(&%s, &%s, sizeof(%s));\n" t12 t1 t1_type)^ 
+      (Printf.sprintf "  memcpy(&%s[%d], &%s, sizeof(%s));\n" t12 s1 t2 t2_type) 
 (* Both seems to work *)
 (*      let buff = ref "" in  *)
 (*      for j=0 to s1-1 do  *)
-(*        buff := !buff^(Soc2cHeap.gen_assign t (Printf.sprintf "%s.z[%d]" ctx j)  *)
-(*                         (Printf.sprintf "%s.x[%d]" ctx j));   *)
+(*        buff := !buff^(Soc2cHeap.gen_assign t (Printf.sprintf "%s.z[%d]" ctx j));  *)
 (*      done;  *)
 (*      for j=s1 to s1+s2-1 do  *)
-(*        buff := !buff^(Soc2cHeap.gen_assign t (Printf.sprintf "%s.z[%d]" ctx j)  *)
-(*                         (Printf.sprintf "%s.y[%d]" ctx (j-s1)));   *)
+(*        buff := !buff^(Soc2cHeap.gen_assign t (Printf.sprintf "%s.z[%d]" ctx j));   *)
 (*      done;  *)
 (*      !buff  *)
 
@@ -114,7 +111,6 @@ let (lustre_slice: Soc.key -> string) =
           if (i-b) mod step = 0 then (
             buff := !buff^(Soc2cHeap.gen_assign t (Printf.sprintf "%s.z[%d]" ctx !j)  
                              (Printf.sprintf "%s.x[%d]" ctx i)
-                             (Printf.sprintf "sizeof(%s.x[%d])" ctx i)
             );   
             incr j);
           done; 
@@ -252,8 +248,7 @@ let (get_iterator : Soc.t -> string -> Soc.t -> int -> string) =
       let type_in = (snd (List.hd iter_inputs)) in
       let a_in  = ctx_access ^ (fst (List.hd iter_inputs)) in
       let a_out = ctx_access ^ (fst (List.hd iter_outputs)) in
-      buff := !buff^(Soc2cHeap.gen_assign type_in a_out a_in
-                       (Printf.sprintf "sizeof(%s)" a_in))  (* a_out=a_n *)
+      buff := !buff^(Soc2cHeap.gen_assign type_in a_out a_in)  (* a_out=a_n *)
     );
     !buff
  
diff --git a/src/socPredef2cStack.ml b/src/socPredef2cStack.ml
index b2d6a39042df5d3f20db54118647aa46414331d0..d3c2569a5f97c7bed3658515cf66f12e67e05163 100644
--- a/src/socPredef2cStack.ml
+++ b/src/socPredef2cStack.ml
@@ -1,5 +1,5 @@
 
-(* Time-stamp: <modified the 12/02/2015 (at 18:11) by Erwan Jahier> *)
+(* Time-stamp: <modified the 13/02/2015 (at 16:10) by Erwan Jahier> *)
 
 open Data
 open Soc
@@ -25,7 +25,6 @@ let (lustre_ite : Soc.key -> string) =
 (*     Printf.sprintf"  %s.z = (%s.c)? %s.xt : %s.xe;\n" ctx ctx ctx ctx *)
     Soc2cStack.gen_assign t (Printf.sprintf "*z")
        (Printf.sprintf "(c)? xt : xe")
-       (Printf.sprintf "sizeof(*z)")
 
 let (lustre_impl : Soc.key -> string) =
   fun sk -> 
@@ -43,8 +42,7 @@ let (lustre_arrow : Soc.key -> string) =
       | _ ->  "*z" 
     in 
     let vo = Printf.sprintf"((ctx->_memory)? %s : %s)" x y in
-    let size = Printf.sprintf "sizeof(%s)" x in
-    (Soc2cStack.gen_assign t z vo size) ^ 
+    (Soc2cStack.gen_assign t z vo) ^ 
       ("  ctx->_memory = _false;\n")
       
 let (lustre_hat : Soc.key -> string) =
@@ -56,7 +54,7 @@ let (lustre_hat : Soc.key -> string) =
     let buff = ref "" in
     for j=0 to i-1 do
       buff := !buff^(Soc2cStack.gen_assign t (Printf.sprintf "z[%d]" j)
-                       (Printf.sprintf "x") (Printf.sprintf "sizeof(x)")); 
+                       (Printf.sprintf "x")); 
     done;
     !buff
 
@@ -69,8 +67,7 @@ let (lustre_array: Soc.key -> string) =
     let buff = ref "" in
     for j=0 to i-1 do
       buff := !buff^(Soc2cStack.gen_assign t (Printf.sprintf "z[%d]" j)
-                       (Printf.sprintf "x%d" (j+1)) 
-                       (Printf.sprintf "sizeof(x%d)" (j+1))); 
+                       (Printf.sprintf "x%d" (j+1))); 
     done;
     !buff
  
@@ -82,18 +79,19 @@ let (lustre_concat: Soc.key -> string) =
     in
     let t1 = Printf.sprintf "x"
     and t2 = Printf.sprintf "y" 
-    and t12 = Printf.sprintf "z" in  
-    (Printf.sprintf "  memcpy(%s, &%s, sizeof(%s));\n" t12 t1 t1)^ 
-      (Printf.sprintf "  memcpy(%s[%d], &%s, sizeof(%s));\n" t12 s1 t2 t2) 
+    and t12 = Printf.sprintf "z" 
+    and t1_type = Soc2cUtil.data_type_to_c (Data.Array(t,s1)) ""
+    and t2_type = Soc2cUtil.data_type_to_c (Data.Array(t,s2)) "" 
+    in  
+    (Printf.sprintf "  memcpy(%s, &%s, sizeof(%s));\n" t12 t1 t1_type)^ 
+      (Printf.sprintf "  memcpy(%s[%d], &%s, sizeof(%s));\n" t12 s1 t2 t2_type) 
 (* Both seems to work *)
 (*      let buff = ref "" in  *)
 (*      for j=0 to s1-1 do  *)
-(*        buff := !buff^(Soc2cStack.gen_assign t (Printf.sprintf "%s.z[%d]" ctx j)  *)
-(*                         (Printf.sprintf "%s.x[%d]" ctx j));   *)
+(*        buff := !buff^(Soc2cStack.gen_assign t (Printf.sprintf "%s.z[%d]" ctx j));   *)
 (*      done;  *)
 (*      for j=s1 to s1+s2-1 do  *)
-(*        buff := !buff^(Soc2cStack.gen_assign t (Printf.sprintf "%s.z[%d]" ctx j)  *)
-(*                         (Printf.sprintf "%s.y[%d]" ctx (j-s1)));   *)
+(*        buff := !buff^(Soc2cStack.gen_assign t (Printf.sprintf "%s.z[%d]" ctx j));   *)
 (*      done;  *)
 (*      !buff  *)
 
@@ -111,7 +109,6 @@ let (lustre_slice: Soc.key -> string) =
           if (i-b) mod step = 0 then (
             buff := !buff^(Soc2cStack.gen_assign t (Printf.sprintf "z[%d]" !j)  
                              (Printf.sprintf "x[%d]" i)
-                             (Printf.sprintf "sizeof(x[%d])" i)
             );   
             incr j);
           done; 
@@ -264,8 +261,7 @@ let (get_iterator : Soc.t -> string -> Soc.t -> int -> string) =
         if Soc2cStack.is_soc_output (Var(o,t)) soc && not_an_array t  
         then "*"^o else o
       in
-      buff := !buff^(Soc2cStack.gen_assign type_in a_out a_in
-                       (Printf.sprintf "sizeof(%s)" a_in))  (* a_out=a_n *)
+      buff := !buff^(Soc2cStack.gen_assign type_in a_out a_in)  (* a_out=a_n *)
     );
     !buff
  
@@ -311,7 +307,6 @@ let (get_condact : Soc.t -> Soc.t -> var_expr list -> string ) =
 (* exported *)
 let (get_boolred : Soc.t -> int -> int -> int -> string )= 
   fun soc i j k -> 
-    let ctx = get_ctx_name soc.key in
     let buff = ref "" in
     let add str = buff:=!buff^(str^"\n") in
     add "  int cpt,i;";
diff --git a/test/lus2lic.sum b/test/lus2lic.sum
index 902d54fcc9ec142410754622cd8c342f62e98e81..4417d58c12eb6e7f508113bb47b7684fc8727601 100644
--- a/test/lus2lic.sum
+++ b/test/lus2lic.sum
@@ -1,5 +1,5 @@
 ==> lus2lic0.sum <==
-Test Run By jahier on Thu Feb 12 18:18:34 
+Test Run By jahier on Fri Feb 13 16:11:32 
 Native configuration is x86_64-unknown-linux-gnu
 
 		=== lus2lic0 tests ===
@@ -63,7 +63,7 @@ XFAIL: Test bad programs (assert): test_lus2lic_no_node should_fail/assert/lecte
 XFAIL: Test bad programs (assert): test_lus2lic_no_node should_fail/assert/s.lus
 
 ==> lus2lic1.sum <==
-Test Run By jahier on Thu Feb 12 18:18:28 
+Test Run By jahier on Fri Feb 13 16:11:34 
 Native configuration is x86_64-unknown-linux-gnu
 
 		=== lus2lic1 tests ===
@@ -397,7 +397,7 @@ PASS: gcc -o multipar.exec multipar_multipar.c multipar_multipar_loop.c
 PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c multipar.lus  {}
 
 ==> lus2lic2.sum <==
-Test Run By jahier on Thu Feb 12 18:18:30 
+Test Run By jahier on Fri Feb 13 16:11:26 
 Native configuration is x86_64-unknown-linux-gnu
 
 		=== lus2lic2 tests ===
@@ -727,7 +727,7 @@ PASS: gcc -o zzz2.exec zzz2_zzz2.c zzz2_zzz2_loop.c
 PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c zzz2.lus  {}
 
 ==> lus2lic3.sum <==
-Test Run By jahier on Thu Feb 12 18:18:37 
+Test Run By jahier on Fri Feb 13 16:11:30 
 Native configuration is x86_64-unknown-linux-gnu
 
 		=== lus2lic3 tests ===
@@ -1230,7 +1230,7 @@ PASS: ./myec2c {-o multipar.c multipar.ec}
 PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node multipar.lus {}
 
 ==> lus2lic4.sum <==
-Test Run By jahier on Thu Feb 12 18:18:32 
+Test Run By jahier on Fri Feb 13 16:11:28 
 Native configuration is x86_64-unknown-linux-gnu
 
 		=== lus2lic4 tests ===
@@ -1726,12 +1726,12 @@ PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node zzz2.lus {}
 # of unexpected failures	3
 ===============================
 # Total number of failures: 14
-lus2lic0.log:testcase ./lus2lic.tests/test0.exp completed in 5 seconds
-lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 37 seconds
-lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 67 seconds
-lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 39 seconds
-lus2lic4.log:testcase ./lus2lic.tests/test4.exp completed in 76 seconds
+lus2lic0.log:testcase ./lus2lic.tests/test0.exp completed in 7 seconds
+lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 53 seconds
+lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 77 seconds
+lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 57 seconds
+lus2lic4.log:testcase ./lus2lic.tests/test4.exp completed in 90 seconds
 * Ref time: 
 * Quick time (-j 4):
-0.03user 0.02system 1:20.36elapsed 0%CPU (0avgtext+0avgdata 5132maxresident)k
-160inputs+0outputs (0major+5556minor)pagefaults 0swaps
+0.04user 0.01system 1:32.86elapsed 0%CPU (0avgtext+0avgdata 5080maxresident)k
+160inputs+0outputs (0major+5541minor)pagefaults 0swaps
diff --git a/test/lus2lic.time b/test/lus2lic.time
index b8c48913e4c1cae07d7a056ae74c67f509e9490c..52f0b05061c75d21899a4f01b4b03d07274ad85e 100644
--- a/test/lus2lic.time
+++ b/test/lus2lic.time
@@ -1,9 +1,9 @@
-lus2lic0.log:testcase ./lus2lic.tests/test0.exp completed in 5 seconds
-lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 37 seconds
-lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 67 seconds
-lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 39 seconds
-lus2lic4.log:testcase ./lus2lic.tests/test4.exp completed in 76 seconds
+lus2lic0.log:testcase ./lus2lic.tests/test0.exp completed in 7 seconds
+lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 53 seconds
+lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 77 seconds
+lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 57 seconds
+lus2lic4.log:testcase ./lus2lic.tests/test4.exp completed in 90 seconds
 * Ref time: 
 * Quick time (-j 4):
-0.03user 0.02system 1:20.36elapsed 0%CPU (0avgtext+0avgdata 5132maxresident)k
-160inputs+0outputs (0major+5556minor)pagefaults 0swaps
+0.04user 0.01system 1:32.86elapsed 0%CPU (0avgtext+0avgdata 5080maxresident)k
+160inputs+0outputs (0major+5541minor)pagefaults 0swaps
diff --git a/test/should_work/ck7.lus b/test/should_work/ck7.lus
index 7e2f3df5ccb4b30d7a3ac5b34a759005620288c8..cd0a839b83fc24116d806bfe47f92f7c7d4cd487 100644
--- a/test/should_work/ck7.lus
+++ b/test/should_work/ck7.lus
@@ -10,7 +10,7 @@ tel
 
 
 
-node ck7_clk(a: bool; m,n:int)
+function ck7_clk(a: bool; m,n:int)
 returns(q:int; r: int when a);
 let
 	q = m+n;
diff --git a/test/should_work/ply03.lus b/test/should_work/ply03.lus
index 6c32f80fa11ce8265dbc068af4c51d61803d16f5..a0ae05bc0c171ae1c130429ca99fd3776ab0bf98 100644
--- a/test/should_work/ply03.lus
+++ b/test/should_work/ply03.lus
@@ -1,5 +1,5 @@
 
-node ply03(x,y: int) returns (o: int^42);
+function ply03(x,y: int) returns (o: int^42);
 let
 	o = if (x < y) then 0^42 else map<<+,42>>(x^42, y^42);
 tel
diff --git a/test/should_work/trivial_array.lus b/test/should_work/trivial_array.lus
index fa47600c9ff58ea7b6b1c23b280843d52a97220a..e42e52fbdcc0b759884e96d20e86f756410dd69f 100644
--- a/test/should_work/trivial_array.lus
+++ b/test/should_work/trivial_array.lus
@@ -1,4 +1,4 @@
-node trivial_array(x:int^3) returns (y: int^3^4);
+function trivial_array(x:int^3) returns (y: int^3^4);
 let
 	y =  [x]|[x]|[x]|[x];
 tel