diff --git a/src/main.ml b/src/main.ml
index 9b153aa301de7c8f1a92831a08c436b41b110f20..d17ab2bfcef42a223e510e28d015337fce4d3c71 100644
--- a/src/main.ml
+++ b/src/main.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 26/04/2013 (at 15:43) by Erwan Jahier> *)
+(* Time-stamp: <modified the 06/05/2013 (at 11:14) by Erwan Jahier> *)
 
 open Verbose
 open AstV6
@@ -100,13 +100,27 @@ let (gen_autotest_files : LicPrg.t -> Ident.idref option -> Lv6MainArgs.t -> uni
     let invars_name  = List.map fst invars in
     let prg = prg^"  ("^(String.concat "," locals_name)^") = "^name in
     let prg = prg^"("^(String.concat "," invars_name)^");\n  "^ok^" = (" in
-    let var_to_equals (x,t) (y,_) =
-      match t with 
-        | Data.Real ->  x^"-"^y^" < 0.1 and "^ y^"-"^x^" < 0.1 "
-        | _ ->  x^"="^y
+    let (var_to_equals : Soc.var -> Soc.var -> string list) =
+      fun (x,t) (y,_) -> 
+        let rec aux x y t =
+          match t with 
+            | Data.Real ->  [x^"-"^y^" < 0.1 and "^ y^"-"^x^" < 0.1 "]
+            | Data.Array(t,n) -> 
+              let res = ref [] in
+              for i = 0 to n-1 do
+                let istr = string_of_int i in
+                res := !res @ aux (x^"["^istr^"]") (y^"["^istr^"]") t
+              done;
+              !res
+            | Data.Struct(n,fl) ->
+              let do_field (fn,ft) = aux (x^"."^fn) (y^"."^fn) ft in
+              List.flatten (List.map do_field fl)
+            | _ ->  [x^"="^y]
+        in
+        aux x y t
     in
     let prg = try prg^(String.concat " and\n \t\t  " 
-                         (List.map2 var_to_equals locals outvars)) ^ ");\ntel;\n"
+                       (List.flatten (List.map2 var_to_equals locals outvars)))^");\ntel;\n"
       with _ -> assert false
     in
     Lv6util.dump_entete oc; 
@@ -180,9 +194,11 @@ let main  = (
       print_compile_error (Lxm.last_made ()) "syntax error";
       my_exit opt 1
     | Unknown_var(lxm,id) -> 
-      print_compile_error lxm ("unknown variable (" ^ (Ident.to_string id) ^")")
+      print_compile_error lxm ("unknown variable (" ^ (Ident.to_string id) ^")");
+      my_exit opt 1
     | Unknown_constant(lxm,str) -> 
-      print_compile_error lxm ("unknown constant (" ^ str ^")")
+      print_compile_error lxm ("unknown constant (" ^ str ^")");
+      my_exit opt 1
     | Compile_error(lxm,msg) -> 
       print_compile_error lxm msg;
       my_exit opt 1
diff --git a/test/lus2lic.sum b/test/lus2lic.sum
index 8083bb85b533bca6658da7b89600aae0e07ae87d..ab02f1f659b38af4c57ea7c47cf2b38b6346fa50 100644
--- a/test/lus2lic.sum
+++ b/test/lus2lic.sum
@@ -1,4 +1,4 @@
-Test Run By jahier on Fri Apr 26 17:48:10 2013
+Test Run By jahier on Mon May  6 11:18:55 2013
 Native configuration is i686-pc-linux-gnu
 
 		=== lus2lic tests ===
@@ -28,7 +28,7 @@ UNRESOLVED: Time out: ../utils/test_lus2lic_no_node should_work/assertion.lus
 PASS: ./lus2lic {-o /tmp/normal.lic should_work/normal.lus}
 PASS: ./lus2lic {-ec -o /tmp/normal.ec should_work/normal.lus}
 PASS: ./ec2c {-o /tmp/normal.c /tmp/normal.ec}
-FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/normal.lus
+UNRESOLVED: Time out: ../utils/test_lus2lic_no_node should_work/normal.lus
 PASS: ./lus2lic {-o /tmp/nodeparam.lic should_work/nodeparam.lus}
 PASS: ./lus2lic {-ec -o /tmp/nodeparam.ec should_work/nodeparam.lus}
 PASS: ./ec2c {-o /tmp/nodeparam.c /tmp/nodeparam.ec}
@@ -56,7 +56,7 @@ PASS: ../utils/test_lus2lic_no_node should_work/dep.lus
 PASS: ./lus2lic {-o /tmp/ELMU.lic should_work/ELMU.lus}
 PASS: ./lus2lic {-ec -o /tmp/ELMU.ec should_work/ELMU.lus}
 PASS: ./ec2c {-o /tmp/ELMU.c /tmp/ELMU.ec}
-FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/ELMU.lus
+UNRESOLVED: Time out: ../utils/test_lus2lic_no_node should_work/ELMU.lus
 PASS: ./lus2lic {-o /tmp/testPilote.lic should_work/testPilote.lus}
 PASS: ./lus2lic {-ec -o /tmp/testPilote.ec should_work/testPilote.lus}
 PASS: ./ec2c {-o /tmp/testPilote.c /tmp/testPilote.ec}
@@ -172,7 +172,7 @@ FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node shou
 PASS: ./lus2lic {-o /tmp/mm1.lic should_work/mm1.lus}
 PASS: ./lus2lic {-ec -o /tmp/mm1.ec should_work/mm1.lus}
 PASS: ./ec2c {-o /tmp/mm1.c /tmp/mm1.ec}
-FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/mm1.lus
+PASS: ../utils/test_lus2lic_no_node should_work/mm1.lus
 PASS: ./lus2lic {-o /tmp/predef03.lic should_work/predef03.lus}
 PASS: ./lus2lic {-ec -o /tmp/predef03.ec should_work/predef03.lus}
 PASS: ./ec2c {-o /tmp/predef03.c /tmp/predef03.ec}
@@ -180,7 +180,7 @@ FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node shou
 PASS: ./lus2lic {-o /tmp/iter.lic should_work/iter.lus}
 PASS: ./lus2lic {-ec -o /tmp/iter.ec should_work/iter.lus}
 PASS: ./ec2c {-o /tmp/iter.c /tmp/iter.ec}
-FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/iter.lus
+PASS: ../utils/test_lus2lic_no_node should_work/iter.lus
 PASS: ./lus2lic {-o /tmp/call05.lic should_work/call05.lus}
 PASS: ./lus2lic {-ec -o /tmp/call05.ec should_work/call05.lus}
 PASS: ./ec2c {-o /tmp/call05.c /tmp/call05.ec}
@@ -238,7 +238,7 @@ FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node shou
 PASS: ./lus2lic {-o /tmp/call04.lic should_work/call04.lus}
 PASS: ./lus2lic {-ec -o /tmp/call04.ec should_work/call04.lus}
 PASS: ./ec2c {-o /tmp/call04.c /tmp/call04.ec}
-FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/call04.lus
+PASS: ../utils/test_lus2lic_no_node should_work/call04.lus
 PASS: ./lus2lic {-o /tmp/bascule.lic should_work/bascule.lus}
 PASS: ./lus2lic {-ec -o /tmp/bascule.ec should_work/bascule.lus}
 PASS: ./ec2c {-o /tmp/bascule.c /tmp/bascule.ec}
@@ -254,7 +254,7 @@ FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node shou
 PASS: ./lus2lic {-o /tmp/mm22.lic should_work/mm22.lus}
 PASS: ./lus2lic {-ec -o /tmp/mm22.ec should_work/mm22.lus}
 PASS: ./ec2c {-o /tmp/mm22.c /tmp/mm22.ec}
-FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/mm22.lus
+PASS: ../utils/test_lus2lic_no_node should_work/mm22.lus
 PASS: ./lus2lic {-o /tmp/X1.lic should_work/X1.lus}
 PASS: ./lus2lic {-ec -o /tmp/X1.ec should_work/X1.lus}
 PASS: ./ec2c {-o /tmp/X1.c /tmp/X1.ec}
@@ -382,7 +382,7 @@ FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node shou
 PASS: ./lus2lic {-o /tmp/calculs_max.lic should_work/calculs_max.lus}
 PASS: ./lus2lic {-ec -o /tmp/calculs_max.ec should_work/calculs_max.lus}
 PASS: ./ec2c {-o /tmp/calculs_max.c /tmp/calculs_max.ec}
-FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/calculs_max.lus
+PASS: ../utils/test_lus2lic_no_node should_work/calculs_max.lus
 PASS: ./lus2lic {-o /tmp/testCA.lic should_work/testCA.lus}
 PASS: ./lus2lic {-ec -o /tmp/testCA.ec should_work/testCA.lus}
 PASS: ./ec2c {-o /tmp/testCA.c /tmp/testCA.ec}
@@ -413,7 +413,7 @@ FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node shou
 PASS: ./lus2lic {-o /tmp/bad_call03.lic should_work/bad_call03.lus}
 PASS: ./lus2lic {-ec -o /tmp/bad_call03.ec should_work/bad_call03.lus}
 PASS: ./ec2c {-o /tmp/bad_call03.c /tmp/bad_call03.ec}
-FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/bad_call03.lus
+PASS: ../utils/test_lus2lic_no_node should_work/bad_call03.lus
 PASS: ./lus2lic {-o /tmp/onlyroll.lic should_work/onlyroll.lus}
 PASS: ./lus2lic {-ec -o /tmp/onlyroll.ec should_work/onlyroll.lus}
 PASS: ./ec2c {-o /tmp/onlyroll.c /tmp/onlyroll.ec}
@@ -421,7 +421,7 @@ UNRESOLVED: Time out: ../utils/test_lus2lic_no_node should_work/onlyroll.lus
 PASS: ./lus2lic {-o /tmp/produitBool.lic should_work/produitBool.lus}
 PASS: ./lus2lic {-ec -o /tmp/produitBool.ec should_work/produitBool.lus}
 PASS: ./ec2c {-o /tmp/produitBool.c /tmp/produitBool.ec}
-FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/produitBool.lus
+PASS: ../utils/test_lus2lic_no_node should_work/produitBool.lus
 PASS: ./lus2lic {-o /tmp/noeudsIndependants.lic should_work/noeudsIndependants.lus}
 PASS: ./lus2lic {-ec -o /tmp/noeudsIndependants.ec should_work/noeudsIndependants.lus}
 PASS: ./ec2c {-o /tmp/noeudsIndependants.c /tmp/noeudsIndependants.ec}
@@ -441,7 +441,7 @@ FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node shou
 PASS: ./lus2lic {-o /tmp/mapinf.lic should_work/mapinf.lus}
 PASS: ./lus2lic {-ec -o /tmp/mapinf.ec should_work/mapinf.lus}
 PASS: ./ec2c {-o /tmp/mapinf.c /tmp/mapinf.ec}
-FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/mapinf.lus
+PASS: ../utils/test_lus2lic_no_node should_work/mapinf.lus
 PASS: ./lus2lic {-o /tmp/integrator.lic should_work/integrator.lus}
 PASS: ./lus2lic {-ec -o /tmp/integrator.ec should_work/integrator.lus}
 PASS: ./ec2c {-o /tmp/integrator.c /tmp/integrator.ec}
@@ -453,7 +453,7 @@ PASS: ../utils/test_lus2lic_no_node should_work/nc4.lus
 PASS: ./lus2lic {-o /tmp/mm3.lic should_work/mm3.lus}
 PASS: ./lus2lic {-ec -o /tmp/mm3.ec should_work/mm3.lus}
 PASS: ./ec2c {-o /tmp/mm3.c /tmp/mm3.ec}
-FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/mm3.lus
+PASS: ../utils/test_lus2lic_no_node should_work/mm3.lus
 PASS: ./lus2lic {-o /tmp/over2.lic should_work/over2.lus}
 PASS: ./lus2lic {-ec -o /tmp/over2.ec should_work/over2.lus}
 PASS: ./ec2c {-o /tmp/over2.c /tmp/over2.ec}
@@ -652,7 +652,7 @@ FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node shou
 PASS: ./lus2lic {-o /tmp/iterFibo.lic should_work/iterFibo.lus}
 PASS: ./lus2lic {-ec -o /tmp/iterFibo.ec should_work/iterFibo.lus}
 PASS: ./ec2c {-o /tmp/iterFibo.c /tmp/iterFibo.ec}
-FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/iterFibo.lus
+PASS: ../utils/test_lus2lic_no_node should_work/iterFibo.lus
 PASS: ./lus2lic {-o /tmp/morel2.lic should_work/morel2.lus}
 PASS: ./lus2lic {-ec -o /tmp/morel2.ec should_work/morel2.lus}
 PASS: ./ec2c {-o /tmp/morel2.c /tmp/morel2.ec}
@@ -708,7 +708,7 @@ FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node shou
 PASS: ./lus2lic {-o /tmp/map_red_iter.lic should_work/map_red_iter.lus}
 PASS: ./lus2lic {-ec -o /tmp/map_red_iter.ec should_work/map_red_iter.lus}
 PASS: ./ec2c {-o /tmp/map_red_iter.c /tmp/map_red_iter.ec}
-FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/map_red_iter.lus
+PASS: ../utils/test_lus2lic_no_node should_work/map_red_iter.lus
 PASS: ./lus2lic {-o /tmp/p.lic should_work/p.lus}
 PASS: ./lus2lic {-ec -o /tmp/p.ec should_work/p.lus}
 PASS: ./ec2c {-o /tmp/p.c /tmp/p.ec}
@@ -756,7 +756,7 @@ FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node shou
 PASS: ./lus2lic {-o /tmp/dependeur_struct.lic should_work/dependeur_struct.lus}
 PASS: ./lus2lic {-ec -o /tmp/dependeur_struct.ec should_work/dependeur_struct.lus}
 PASS: ./ec2c {-o /tmp/dependeur_struct.c /tmp/dependeur_struct.ec}
-FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/dependeur_struct.lus
+UNRESOLVED: Time out: ../utils/test_lus2lic_no_node should_work/dependeur_struct.lus
 PASS: ./lus2lic {-o /tmp/minmax4_bis.lic should_work/minmax4_bis.lus}
 PASS: ./lus2lic {-ec -o /tmp/minmax4_bis.ec should_work/minmax4_bis.lus}
 PASS: ./ec2c {-o /tmp/minmax4_bis.c /tmp/minmax4_bis.ec}
@@ -856,7 +856,7 @@ PASS: ../utils/test_lus2lic_no_node should_work/nc10.lus
 PASS: ./lus2lic {-o /tmp/triSel.lic should_work/triSel.lus}
 PASS: ./lus2lic {-ec -o /tmp/triSel.ec should_work/triSel.lus}
 PASS: ./ec2c {-o /tmp/triSel.c /tmp/triSel.ec}
-FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/triSel.lus
+PASS: ../utils/test_lus2lic_no_node should_work/triSel.lus
 PASS: ./lus2lic {-o /tmp/s.lic should_work/s.lus}
 PASS: ./lus2lic {-ec -o /tmp/s.ec should_work/s.lus}
 PASS: ./ec2c {-o /tmp/s.c /tmp/s.ec}
@@ -904,7 +904,7 @@ FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node shou
 PASS: ./lus2lic {-o /tmp/iterate.lic should_work/iterate.lus}
 PASS: ./lus2lic {-ec -o /tmp/iterate.ec should_work/iterate.lus}
 PASS: ./ec2c {-o /tmp/iterate.c /tmp/iterate.ec}
-FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/iterate.lus
+PASS: ../utils/test_lus2lic_no_node should_work/iterate.lus
 PASS: ./lus2lic {-o /tmp/overload.lic should_work/overload.lus}
 PASS: ./lus2lic {-ec -o /tmp/overload.ec should_work/overload.lus}
 PASS: ./ec2c {-o /tmp/overload.c /tmp/overload.ec}
@@ -920,7 +920,7 @@ PASS: ../utils/test_lus2lic_no_node should_work/EDGE.lus
 PASS: ./lus2lic {-o /tmp/call03.lic should_work/call03.lus}
 PASS: ./lus2lic {-ec -o /tmp/call03.ec should_work/call03.lus}
 PASS: ./ec2c {-o /tmp/call03.c /tmp/call03.ec}
-FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/call03.lus
+PASS: ../utils/test_lus2lic_no_node should_work/call03.lus
 PASS: ./lus2lic {-o /tmp/count.lic should_work/count.lus}
 PASS: ./lus2lic {-ec -o /tmp/count.ec should_work/count.lus}
 PASS: ./ec2c {-o /tmp/count.c /tmp/count.ec}
@@ -1045,8 +1045,8 @@ XPASS: Test bad programs (semantics): lus2lic {-o /tmp/bug.lic should_fail/seman
 
 		=== lus2lic Summary ===
 
-# of expected passes		814
-# of unexpected failures	152
+# of expected passes		828
+# of unexpected failures	135
 # of unexpected successes	11
 # of expected failures		37
-# of unresolved testcases	19
+# of unresolved testcases	22
diff --git a/test/should_work/access.lus b/test/should_work/access.lus
index cb2d129f6bf6fa0c8a469454ebc42cf4a75e3c90..c11abc01728880ca0c49ec861329f71fa44b3daa 100644
--- a/test/should_work/access.lus
+++ b/test/should_work/access.lus
@@ -19,6 +19,8 @@ let
 	      ;
 tel
 
+node access = quick_access<<int, 8, -1>>;
+
 node quick_access_int8 = quick_access<<int, 8, -1>>;
 
 node quick_access_real8 = quick_access<<real, 8, -0.314e+1>>;
diff --git a/test/should_work/testPilote.lus b/test/should_work/testPilote.lus
index cfe411ea188ff7870ed08d0cb61255f19f0d3ac5..2e8e60ea0dedd81f68c586c6cf8409759fab39e5 100644
--- a/test/should_work/testPilote.lus
+++ b/test/should_work/testPilote.lus
@@ -1,7 +1,7 @@
 package pilote
 
 provides 
-node pilote(Hpilote, semAutP : bool; --
+node testPilote(Hpilote, semAutP : bool; --
 --            HupdatePiloteData : bool;
             dataBoiteCP : int) 
 returns (--semMemTakeP, 
@@ -16,7 +16,7 @@ returns (--semMemTakeP,
 
 body
 
-node pilote(Hpilote, semAutP : bool; --
+node testPilote(Hpilote, semAutP : bool; --
 --            HupdatePiloteData : bool;
             dataBoiteCP : int) 
 returns (--semMemTakeP, 
diff --git a/utils/test_lus2lic_no_node b/utils/test_lus2lic_no_node
index ca3baadb96a579a3b51c8bbe0c904584f0630e28..4a9b3790a697ce0db185a7d109d585d45c24c1e5 100755
--- a/utils/test_lus2lic_no_node
+++ b/utils/test_lus2lic_no_node
@@ -24,7 +24,7 @@ cat $lustre_file  >> $_oracle;
 
 
 if
-./lus2lic $_oracle -n $oracle -lv4 -eei -en --no-prefix -o lv4$_oracle ;
+./lus2lic $_oracle -n $oracle -lv4 -eei -en --no-prefix -o lv4$_oracle;
 then
 echo "lus2lic -lv4 done"
 else