diff --git a/_oasis b/_oasis
index ad160cac24124b2d03dd940cc68fb8f28e60ed78..917824a552c91e4aaf4e40baf2648bf1c1d7b55f 100644
--- a/_oasis
+++ b/_oasis
@@ -1,6 +1,6 @@
 OASISFormat: 0.4
 Name:        lustre-v6
-Version:     1.750
+Version:     1.762
 Synopsis:    The Lustre V6 Verimag compiler
 Description: This package contains:
  - lv6: the (current) name of the compiler (and interpreter via -exec)
diff --git a/lv6-ref-man/lv6-ref-man.pdf b/lv6-ref-man/lv6-ref-man.pdf
index 414d9989f0032da98c5f99f1966a8be90c309bbb..8c5e09e95c89d153ac31746c18b89c896787d4ba 100644
Binary files a/lv6-ref-man/lv6-ref-man.pdf and b/lv6-ref-man/lv6-ref-man.pdf differ
diff --git a/src/ast2lic.ml b/src/ast2lic.ml
index b2a85bf951571ce4ca2e7ecf57a54fc6392dc9de..4c11f6af2d744227042c54ac7b0fc9d56aa5abcb 100644
--- a/src/ast2lic.ml
+++ b/src/ast2lic.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 18/10/2017 (at 18:59) by Erwan Jahier> *)
+(* Time-stamp: <modified the 03/12/2018 (at 17:16) by Erwan Jahier> *)
 
 
 open Lxm
@@ -163,13 +163,13 @@ let get_abstract_static_params
          in List.map do_abstract_static_param spl
       )
       | (None, nid) -> (
-         try 
+          (* try *)
             (* let spl = match AstTabSymbol.find_node symbols (Lv6Id.name_of_idref idref) lxm with *)
             let spl = match AstTabSymbol.find_node symbols nid lxm with
             | AstTabSymbol.Local ni -> ni.it.static_params
             | AstTabSymbol.Imported(imported_node, params) -> params
             in List.map do_abstract_static_param spl
-         with _  ->
+              (*          with Compile_error(_,_)  -> *)
             (* can occur for static node parameters, which cannot
                themselves have static parameters.  A better solution ougth
                to be to add node static parameters in the AstTabSymbol.t
@@ -183,7 +183,7 @@ let get_abstract_static_params
                Voir + bas ...
       
             *)
-            []
+            (*             [] *)
      ) 
 
 
@@ -191,13 +191,13 @@ let get_abstract_static_params
 
 let rec of_node
     (id_solver : IdSolver.t) (ne: AstCore.node_exp srcflagged) : Lic.node_exp =
-  
+
   Lv6Verbose.exe ~flag:dbg (fun () ->
-    Printf.fprintf stderr "\n\n#DBG: ENTERING Ast2lic.of_node \'";
-    AstV6Dump.print_node_exp stderr ne.it;
-    Printf.fprintf stderr "'\n\n";
-    
-  );
+      Printf.fprintf stderr "\n\n#DBG: ENTERING Ast2lic.of_node \'";
+      AstV6Dump.print_node_exp stderr ne.it;
+      Printf.fprintf stderr "'\n\n";
+
+    );
   let lxm = ne.src in
   let (idref, static_args) = ne.it in
   (* pas tres beau : on corrige le idref des predefs ... *)
@@ -229,35 +229,36 @@ let rec of_node
   let static_args_eff = match static_args with
     | [] -> []
     | _ ->
-      (* on en proffite pour corriger le idref en y rajoutant l'eventuel pack *)
-      let static_params = get_abstract_static_params id_solver.all_srcs id_solver.global_symbols lxm idref in
+      let static_params =
+        get_abstract_static_params id_solver.all_srcs id_solver.global_symbols lxm idref
+      in
       let sp_l = List.length static_params 
       and sa_l = List.length static_args in
       if (sp_l <> sa_l) then
         let msg = "Bad number of (static) arguments: " ^ 
-          (string_of_int sp_l) ^ " expected, and " ^ 
-          (string_of_int sa_l) ^ " provided."
+                  (string_of_int sp_l) ^ " expected, and " ^ 
+                  (string_of_int sa_l) ^ " provided."
         in
         raise (Compile_error(lxm, msg))
       else
         List.map2 (check_static_arg id_solver) 
           static_params 
-          static_args 
+          static_args
   in
   let res = id_solver.id2node idref static_args_eff lxm in
   Lv6Verbose.exe ~flag:dbg (fun () ->
-    Printf.fprintf stderr "\n#DBG: LEAVING Ast2lic.of_node \'";
-    AstV6Dump.print_node_exp stderr ne.it;
-    Printf.fprintf stderr "'\n";
-    Printf.fprintf stderr "    RESULT:\n%s\n" (Lic.string_of_node_exp res);
-  );
+      Printf.fprintf stderr "\n#DBG: LEAVING Ast2lic.of_node \'";
+      AstV6Dump.print_node_exp stderr ne.it;
+      Printf.fprintf stderr "'\n";
+      Printf.fprintf stderr "    RESULT:\n%s\n" (Lic.string_of_node_exp res);
+    );
   res
 
 and check_static_arg
     (node_id_solver: IdSolver.t)
     (asp: abstract_static_param) 
     (sa: AstCore.static_arg srcflagged) 
-    : Lic.static_arg =
+  : Lic.static_arg =
   (
     (* 1ere passe :
        on utilise expected juste pour résoudre la nature,
@@ -282,11 +283,11 @@ and check_static_arg
         ConstStaticArgLic (id, ceff)
       (* val_exp vs const *)
       | (StaticArgConst ce, ASP_const id) -> (
-        let ceff = EvalConst.f node_id_solver ce in
-        match ceff with
-        | [ceff] -> ConstStaticArgLic (id,ceff)
-        | _ -> ConstStaticArgLic (id,Tuple_const_eff ceff)
-      )
+          let ceff = EvalConst.f node_id_solver ce in
+          match ceff with
+          | [ceff] -> ConstStaticArgLic (id,ceff)
+          | _ -> ConstStaticArgLic (id,Tuple_const_eff ceff)
+        )
       (* id vs node *)
       | (StaticArgLv6Id idref, ASP_node id) ->
         let sargs = [] in
@@ -305,7 +306,7 @@ and check_static_arg
       | (_, ASP_node  _) -> nature_error "node"
     in res
   )
-    
+
 (******************************************************************************)
 
 
@@ -331,42 +332,42 @@ and (translate_left_part : IdSolver.t -> AstCore.left_part -> Lic.left) =
       let vi_eff = id_solver.id2var id.it id.src in
       LeftVarLic (vi_eff, id.src)
     | LeftField (lp, id) -> (
-      let lp_eff = translate_left_part id_solver lp in
-      let teff = Lic.type_of_left lp_eff in
+        let lp_eff = translate_left_part id_solver lp in
+        let teff = Lic.type_of_left lp_eff in
         (* check that [lp_eff] is a struct that have a field named [id] *)
-      match teff with
-      | Struct_type_eff(_, fl) -> (
-        try let (teff_field,_) = List.assoc id.it fl in
-            LeftFieldLic(lp_eff, id.it, teff_field)
-        with Not_found ->
-          raise (Compile_error(id.src, "bad field name in structure"))
+        match teff with
+        | Struct_type_eff(_, fl) -> (
+            try let (teff_field,_) = List.assoc id.it fl in
+              LeftFieldLic(lp_eff, id.it, teff_field)
+            with Not_found ->
+              raise (Compile_error(id.src, "bad field name in structure"))
+          )
+        | _  -> raise (Compile_error(id.src, "a structure was expected"))
       )
-      | _  -> raise (Compile_error(id.src, "a structure was expected"))
-    )
     | LeftArray (lp, vef) -> (
-      let lp_eff = translate_left_part id_solver lp in
-      let teff = Lic.type_of_left lp_eff in
-      let lxm = vef.src in
-      match teff with
-      | Abstract_type_eff(_,Array_type_eff(teff_elt, size))
-      | Array_type_eff(teff_elt, size) ->
-        let index = EvalConst.eval_array_index id_solver vef.it lxm in
-        LeftArrayLic(lp_eff, index, teff_elt)
-          
-      | _ -> raise (Compile_error(vef.src, "an array was expected"))
-    )
+        let lp_eff = translate_left_part id_solver lp in
+        let teff = Lic.type_of_left lp_eff in
+        let lxm = vef.src in
+        match teff with
+        | Abstract_type_eff(_,Array_type_eff(teff_elt, size))
+        | Array_type_eff(teff_elt, size) ->
+          let index = EvalConst.eval_array_index id_solver vef.it lxm in
+          LeftArrayLic(lp_eff, index, teff_elt)
+
+        | _ -> raise (Compile_error(vef.src, "an array was expected"))
+      )
     | LeftSlice (lp, sif) -> (
-      let lp_eff = translate_left_part id_solver lp in
-      let teff = Lic.type_of_left lp_eff in
-      match teff with  
-      | Abstract_type_eff(_,Array_type_eff(teff_elt, size))
-      | Array_type_eff(teff_elt, size) -> 
-        let sieff = translate_slice_info id_solver sif.it sif.src in
-        let size_slice = sieff.se_width in
-        let teff_slice = Array_type_eff(teff_elt, size_slice) in
-        LeftSliceLic(lp_eff, sieff, teff_slice)
-      | _ -> raise (Compile_error(sif.src, "an array was expected"))
-    )
+        let lp_eff = translate_left_part id_solver lp in
+        let teff = Lic.type_of_left lp_eff in
+        match teff with  
+        | Abstract_type_eff(_,Array_type_eff(teff_elt, size))
+        | Array_type_eff(teff_elt, size) -> 
+          let sieff = translate_slice_info id_solver sif.it sif.src in
+          let size_slice = sieff.se_width in
+          let teff_slice = Array_type_eff(teff_elt, size_slice) in
+          LeftSliceLic(lp_eff, sieff, teff_slice)
+        | _ -> raise (Compile_error(sif.src, "an array was expected"))
+      )
 
 
 (* Translate and performs the checks *)
@@ -376,183 +377,183 @@ and (translate_val_exp_check  : IdSolver.t -> Lic.clock list -> UnifyClock.subst
     let s,vef = translate_val_exp id_solver s ve in
     let lxm = AstCore.lxm_of_val_exp ve in
     let lxms = List.map (fun _ -> lxm) exp_clks in
-     (* let vef, tl   = EvalType.f id_solver vef in *)
+    (* let vef, tl   = EvalType.f id_solver vef in *)
     EvalClock.f id_solver s vef lxms exp_clks  
-      
+
 
 and (translate_val_exp : IdSolver.t -> UnifyClock.subst -> AstCore.val_exp
      -> UnifyClock.subst * Lic.val_exp) =
   fun id_solver s ve ->
     (match ve with
-    | CallByPos({it=WITH_n(c,e1,e2)}, Oper vel) ->
-      assert (vel=[]);
-      if EvalConst.f id_solver c = [ Bool_const_eff true ] 
-      then translate_val_exp id_solver s e1 
-      else translate_val_exp id_solver s e2
-    | _ -> 
-      let s, vef_core, lxm =
-        match ve with
-        | Merge_n(ve, cl) ->  
-          let lxm_ve = ve.src in
-          let ve = ve.it in
-          let s,ve = translate_val_exp id_solver s ve in
-          let s, cl =
-            List.fold_left
-              (fun (s,cl) (id,ve) -> 
-                let s, ve = translate_val_exp id_solver s ve in
-                let const = id_solver.id2const id.it id.src in
-                s,(flagit const id.src, ve)::cl
-              )
-              (s, [])
-              cl
-          in
-          s, Lic.Merge(ve, List.rev cl), lxm_ve
-        | Merge_bool_n(ve, t, f) ->
-          let lxm_ve = ve.src in
-          let ve = ve.it in
-          let s,ve = translate_val_exp id_solver s ve in
-          let s,case_true  = translate_val_exp id_solver s t in
-          let s,case_false = translate_val_exp id_solver s f in
-          let case_true = (flagit (Bool_const_eff true) lxm_ve, case_true) in
-          let case_false = (flagit (Bool_const_eff false) lxm_ve, case_false) in
-          s, Lic.Merge(ve, [case_true; case_false]), lxm_ve
-
-        | CallByName(by_name_op, field_list) ->
-          let s,fl = List.fold_left 
-            (fun (s,fl) f -> 
-              let s,f = translate_field id_solver s f in
-              s,f::fl
-            )
-            (s,[])
-            field_list
-          in
-          let fl = List.rev fl in
-          let s, by_name_op = translate_by_name_op id_solver by_name_op s in
-          s, 
-          (CallByNameLic(by_name_op, fl)), by_name_op.src
-            
-        | CallByPos(by_pos_op, Oper vel) ->
-          let s, vel_eff = 
-            List.fold_left 
-              (fun (s,vel) ve -> 
-                let s, ve = translate_val_exp id_solver s ve in
-                s,ve::vel
-              )
-              (s,[]) vel 
-          in
-          let vel_eff = List.rev vel_eff in
-          let lxm = by_pos_op.src in
-          let by_pos_op = by_pos_op.it in
-          let mk_by_pos_op by_pos_op_eff =
-            CallByPosLic(flagit by_pos_op_eff lxm, vel_eff)
-          in
-          let mk_nary_pos_op by_pos_op_eff = 
-                (* For nor and diese: internally, nor and diese takes an array of val_exp,
-                   to make it easier the translation into boolred.
-
-                   It is the good spot to do that? what could be a better spot?
-                *)
-            let array_val_exp =
-              let lxm = Lxm.override_name "[ ]" lxm in
-              { ve_core = CallByPosLic(flagit Lic.ARRAY lxm, vel_eff);
-                ve_typ = [Array_type_eff(List.hd (List.hd vel_eff).ve_typ,
-                                         List.length vel_eff)];
-                ve_clk = (List.hd vel_eff).ve_clk;
-                ve_src =  lxm 
-              }
-            in
-            CallByPosLic(flagit by_pos_op_eff lxm, [array_val_exp])
-          in
-
-          let s, vef_core =
-            match by_pos_op with
-            | WITH_n(_,_,_) -> assert false (* handled at the top of the function *)
-                  (* put that in another module ? yes, see above.*)
-            | Predef_n({it=TRUE_n})  -> s,mk_by_pos_op(Lic.CONST (Bool_const_eff true))
-            | Predef_n({it=FALSE_n}) -> s,mk_by_pos_op(Lic.CONST (Bool_const_eff false))
-            | Predef_n({it=RCONST_n r}) -> s,mk_by_pos_op(Lic.CONST (Real_const_eff r))
-            | Predef_n({it=ICONST_n i}) -> s, mk_by_pos_op(Lic.CONST (Int_const_eff i))
-
-                                                          
-            | Predef_n({it=NOR_n;src=lxm}) -> s, mk_nary_pos_op(
-              Lic.PREDEF_CALL (flagit (AstPredef.op_to_long NOR_n,[]) lxm))
-            | Predef_n({it=DIESE_n;src=lxm}) -> s, mk_nary_pos_op(
-              Lic.PREDEF_CALL (flagit (AstPredef.op_to_long DIESE_n,[]) lxm))
-            | Predef_n(op) -> s, mk_by_pos_op(
-              Lic.PREDEF_CALL (flagit (AstPredef.op_to_long op.it,[]) op.src))
-            | CALL_n node_exp_f -> 
-              let neff = of_node id_solver node_exp_f in
-              let ceff = Lic.CALL (flagit neff.node_key_eff node_exp_f.src) in
-              Lv6Verbose.exe ~flag:dbg (fun () ->
-                Printf.fprintf stderr "#DBG: Ast2lic.translate_val_exp CALL_n ";
-                AstV6Dump.print_node_exp stderr node_exp_f.it;
-                Printf.fprintf stderr " gives type: %s\n%!"
-                  (Lic.string_of_type_profile (profile_of_node_exp neff))
-              ) ;
-              (s, mk_by_pos_op ceff)
-            | IDENT_n idref -> (
-              try
-                let var = id_solver.id2var idref.id_id lxm in
-                s, mk_by_pos_op(Lic.VAR_REF var.var_name_eff)
-              with _ ->
-                let s, const = UnifyClock.const_to_val_eff lxm false s
-                  (id_solver.id2const idref lxm)
-                in
-                s, const.ve_core
-            )
-            | CURRENT_n -> s, mk_by_pos_op (Lic.CURRENT None)
-            | PRE_n -> s, mk_by_pos_op Lic.PRE
-
-            | ARROW_n -> s, mk_by_pos_op Lic.ARROW
-
-            | FBY_n -> (* XXX temporary crutch: translate "e1 fby e2" into "e2 -> pre(e2)" *)
-              (match vel_eff with
-              | [e1;e2] -> 
-                let ve_pre = CallByPosLic(flagit Lic.PRE lxm, [e2]) in
-                let ve_pre = { e2 with ve_core=ve_pre } in
-                let lxm = Lxm.override_name "->" lxm in
-                s,CallByPosLic(flagit Lic.ARROW lxm, [e1;ve_pre]) 
-              | _ -> assert false
-              )
-                  (*                   | FBY_n ->   s, mk_by_pos_op Lic.FBY *)
-            | CONCAT_n -> s, mk_by_pos_op Lic.CONCAT
-            | TUPLE_n -> s, mk_by_pos_op Lic.TUPLE
-            | ARRAY_n -> s, CallByPosLic(flagit Lic.ARRAY lxm, vel_eff)
-            | STRUCT_ACCESS_n fid ->
-              s, mk_by_pos_op (Lic.STRUCT_ACCESS (fid))
-
-            | WHEN_n Base -> s, mk_by_pos_op (Lic.WHEN BaseLic)
-            | WHEN_n (NamedClock { it = (cc,c) ; src = lxm }) -> 
-              let var_info = id_solver.id2var c lxm in
-              let _, clk = var_info.var_clock_eff in
-              let ct =  var_info.var_type_eff in
-              s, mk_by_pos_op (Lic.WHEN (On((cc,c,ct), clk)))
-
-            | ARRAY_ACCES_n ve_index ->
-              s, mk_by_pos_op (Lic.ARRAY_ACCES(
-                EvalConst.eval_array_index id_solver ve_index lxm))
-
-            | ARRAY_SLICE_n si ->
-              s, mk_by_pos_op (Lic.ARRAY_SLICE(
-                EvalConst.eval_array_slice id_solver si lxm))
-                
-            | HAT_n -> (
-              match vel with
-              | [exp; ve_size] -> 
-                let size_const_eff = EvalConst.f id_solver ve_size in 
-                (match size_const_eff with
-                | [Int_const_eff sz] -> s, mk_by_pos_op (Lic.HAT(int_of_string sz))
-                | _ -> assert false)
-              | _ -> assert false
-            )
-          in
-          s, vef_core, lxm
-      in
-      let vef = { ve_core=vef_core; ve_typ=[]; ve_clk = []; ve_src = lxm } in
-      let vef, tl  = EvalType.f id_solver vef in
-      s,vef
+     | CallByPos({it=WITH_n(c,e1,e2)}, Oper vel) ->
+       assert (vel=[]);
+       if EvalConst.f id_solver c = [ Bool_const_eff true ] 
+       then translate_val_exp id_solver s e1 
+       else translate_val_exp id_solver s e2
+     | _ -> 
+       let s, vef_core, lxm =
+         match ve with
+         | Merge_n(ve, cl) ->  
+           let lxm_ve = ve.src in
+           let ve = ve.it in
+           let s,ve = translate_val_exp id_solver s ve in
+           let s, cl =
+             List.fold_left
+               (fun (s,cl) (id,ve) -> 
+                  let s, ve = translate_val_exp id_solver s ve in
+                  let const = id_solver.id2const id.it id.src in
+                  s,(flagit const id.src, ve)::cl
+               )
+               (s, [])
+               cl
+           in
+           s, Lic.Merge(ve, List.rev cl), lxm_ve
+         | Merge_bool_n(ve, t, f) ->
+           let lxm_ve = ve.src in
+           let ve = ve.it in
+           let s,ve = translate_val_exp id_solver s ve in
+           let s,case_true  = translate_val_exp id_solver s t in
+           let s,case_false = translate_val_exp id_solver s f in
+           let case_true = (flagit (Bool_const_eff true) lxm_ve, case_true) in
+           let case_false = (flagit (Bool_const_eff false) lxm_ve, case_false) in
+           s, Lic.Merge(ve, [case_true; case_false]), lxm_ve
+
+         | CallByName(by_name_op, field_list) ->
+           let s,fl = List.fold_left 
+               (fun (s,fl) f -> 
+                  let s,f = translate_field id_solver s f in
+                  s,f::fl
+               )
+               (s,[])
+               field_list
+           in
+           let fl = List.rev fl in
+           let s, by_name_op = translate_by_name_op id_solver by_name_op s in
+           s, 
+           (CallByNameLic(by_name_op, fl)), by_name_op.src
+
+         | CallByPos(by_pos_op, Oper vel) ->
+           let s, vel_eff = 
+             List.fold_left 
+               (fun (s,vel) ve -> 
+                  let s, ve = translate_val_exp id_solver s ve in
+                  s,ve::vel
+               )
+               (s,[]) vel 
+           in
+           let vel_eff = List.rev vel_eff in
+           let lxm = by_pos_op.src in
+           let by_pos_op = by_pos_op.it in
+           let mk_by_pos_op by_pos_op_eff =
+             CallByPosLic(flagit by_pos_op_eff lxm, vel_eff)
+           in
+           let mk_nary_pos_op by_pos_op_eff = 
+             (* For nor and diese: internally, nor and diese takes an array of val_exp,
+                to make it easier the translation into boolred.
+
+                It is the good spot to do that? what could be a better spot?
+             *)
+             let array_val_exp =
+               let lxm = Lxm.override_name "[ ]" lxm in
+               { ve_core = CallByPosLic(flagit Lic.ARRAY lxm, vel_eff);
+                 ve_typ = [Array_type_eff(List.hd (List.hd vel_eff).ve_typ,
+                                          List.length vel_eff)];
+                 ve_clk = (List.hd vel_eff).ve_clk;
+                 ve_src =  lxm 
+               }
+             in
+             CallByPosLic(flagit by_pos_op_eff lxm, [array_val_exp])
+           in
+
+           let s, vef_core =
+             match by_pos_op with
+             | WITH_n(_,_,_) -> assert false (* handled at the top of the function *)
+             (* put that in another module ? yes, see above.*)
+             | Predef_n({it=TRUE_n})  -> s,mk_by_pos_op(Lic.CONST (Bool_const_eff true))
+             | Predef_n({it=FALSE_n}) -> s,mk_by_pos_op(Lic.CONST (Bool_const_eff false))
+             | Predef_n({it=RCONST_n r}) -> s,mk_by_pos_op(Lic.CONST (Real_const_eff r))
+             | Predef_n({it=ICONST_n i}) -> s, mk_by_pos_op(Lic.CONST (Int_const_eff i))
+
+
+             | Predef_n({it=NOR_n;src=lxm}) -> s, mk_nary_pos_op(
+                 Lic.PREDEF_CALL (flagit (AstPredef.op_to_long NOR_n,[]) lxm))
+             | Predef_n({it=DIESE_n;src=lxm}) -> s, mk_nary_pos_op(
+                 Lic.PREDEF_CALL (flagit (AstPredef.op_to_long DIESE_n,[]) lxm))
+             | Predef_n(op) -> s, mk_by_pos_op(
+                 Lic.PREDEF_CALL (flagit (AstPredef.op_to_long op.it,[]) op.src))
+             | CALL_n node_exp_f -> 
+               let neff = of_node id_solver node_exp_f in
+               let ceff = Lic.CALL (flagit neff.node_key_eff node_exp_f.src) in
+               Lv6Verbose.exe ~flag:dbg (fun () ->
+                   Printf.fprintf stderr "#DBG: Ast2lic.translate_val_exp CALL_n ";
+                   AstV6Dump.print_node_exp stderr node_exp_f.it;
+                   Printf.fprintf stderr " gives type: %s\n%!"
+                     (Lic.string_of_type_profile (profile_of_node_exp neff))
+                 ) ;
+               (s, mk_by_pos_op ceff)
+             | IDENT_n idref -> (
+                 try
+                   let var = id_solver.id2var idref.id_id lxm in
+                   s, mk_by_pos_op(Lic.VAR_REF var.var_name_eff)
+                 with _ ->
+                   let s, const = UnifyClock.const_to_val_eff lxm false s
+                       (id_solver.id2const idref lxm)
+                   in
+                   s, const.ve_core
+               )
+             | CURRENT_n -> s, mk_by_pos_op (Lic.CURRENT None)
+             | PRE_n -> s, mk_by_pos_op Lic.PRE
+
+             | ARROW_n -> s, mk_by_pos_op Lic.ARROW
+
+             | FBY_n -> (* XXX temporary crutch: translate "e1 fby e2" into "e2 -> pre(e2)" *)
+               (match vel_eff with
+                | [e1;e2] -> 
+                  let ve_pre = CallByPosLic(flagit Lic.PRE lxm, [e2]) in
+                  let ve_pre = { e2 with ve_core=ve_pre } in
+                  let lxm = Lxm.override_name "->" lxm in
+                  s,CallByPosLic(flagit Lic.ARROW lxm, [e1;ve_pre]) 
+                | _ -> assert false
+               )
+             (*                   | FBY_n ->   s, mk_by_pos_op Lic.FBY *)
+             | CONCAT_n -> s, mk_by_pos_op Lic.CONCAT
+             | TUPLE_n -> s, mk_by_pos_op Lic.TUPLE
+             | ARRAY_n -> s, CallByPosLic(flagit Lic.ARRAY lxm, vel_eff)
+             | STRUCT_ACCESS_n fid ->
+               s, mk_by_pos_op (Lic.STRUCT_ACCESS (fid))
+
+             | WHEN_n Base -> s, mk_by_pos_op (Lic.WHEN BaseLic)
+             | WHEN_n (NamedClock { it = (cc,c) ; src = lxm }) -> 
+               let var_info = id_solver.id2var c lxm in
+               let _, clk = var_info.var_clock_eff in
+               let ct =  var_info.var_type_eff in
+               s, mk_by_pos_op (Lic.WHEN (On((cc,c,ct), clk)))
+
+             | ARRAY_ACCES_n ve_index ->
+               s, mk_by_pos_op (Lic.ARRAY_ACCES(
+                   EvalConst.eval_array_index id_solver ve_index lxm))
+
+             | ARRAY_SLICE_n si ->
+               s, mk_by_pos_op (Lic.ARRAY_SLICE(
+                   EvalConst.eval_array_slice id_solver si lxm))
+
+             | HAT_n -> (
+                 match vel with
+                 | [exp; ve_size] -> 
+                   let size_const_eff = EvalConst.f id_solver ve_size in 
+                   (match size_const_eff with
+                    | [Int_const_eff sz] -> s, mk_by_pos_op (Lic.HAT(int_of_string sz))
+                    | _ -> assert false)
+                 | _ -> assert false
+               )
+           in
+           s, vef_core, lxm
+       in
+       let vef = { ve_core=vef_core; ve_typ=[]; ve_clk = []; ve_src = lxm } in
+       let vef, tl  = EvalType.f id_solver vef in
+       s,vef
     )    
-      
+
 
 and translate_by_name_op id_solver op s = 
   let to_long idref =
@@ -587,12 +588,12 @@ and translate_field id_solver s (id, ve) =
 and const_of_static_arg id_solver const_or_const_ident lxm = 
   match const_or_const_ident with
   | StaticArgConst(c) -> (
-	 match EvalConst.f id_solver c with
-	 | [x] -> x
-	 | xl -> 
-			 (* EvalConst.f ne fabrique PAS de tuple, on le fait ici *)
-		Tuple_const_eff xl
-  )
+	   match EvalConst.f id_solver c with
+	   | [x] -> x
+	   | xl -> 
+		  (* EvalConst.f ne fabrique PAS de tuple, on le fait ici *)
+		  Tuple_const_eff xl
+    )
   | StaticArgLv6Id(id) -> id_solver.id2const id lxm 
   | StaticArgType _
   | StaticArgNode _ -> raise (Compile_error(lxm, "a constant was expected"))
diff --git a/src/lv6version.ml b/src/lv6version.ml
index 5ca482a343ba3fe43b8b05b37f7d3990a5075c11..296ad2d87fc571aa8d399131d8c3acf23d8d59de 100644
--- a/src/lv6version.ml
+++ b/src/lv6version.ml
@@ -1,7 +1,7 @@
 (** Automatically generated from Makefile *) 
 let tool = "lv6"
 let branch = "master"
-let commit = "753"
-let sha_1 = "cf9efb1c888171ba68650f907e65adf6d6618e94"
+let commit = "762"
+let sha_1 = "1f13ae8eb77b10d105a7e84aaabd50d2f5f75604"
 let str = (branch ^ "." ^ commit ^ " (" ^ sha_1 ^ ")")
 let maintainer = "erwan.jahier@univ-grenoble-alpes.fr"
diff --git a/test/lus2lic.sum b/test/lus2lic.sum
index 1c941fbcf4ea26e599fbfb29dd910de690c7a23d..6469322e53a474f2b3c3723c3a610a701a1d0f5a 100644
--- a/test/lus2lic.sum
+++ b/test/lus2lic.sum
@@ -1,5 +1,5 @@
 ==> lus2lic0.sum <==
-Test run by jahier on Mon Oct  8 15:16:04 
+Test run by jahier on Mon Dec  3 11:11:28 
 Native configuration is x86_64-pc-linux-gnu
 
 		=== lus2lic0 tests ===
@@ -66,7 +66,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 Mon Oct  8 15:16:06 
+Test run by jahier on Mon Dec  3 11:11:29 
 Native configuration is x86_64-pc-linux-gnu
 
 		=== lus2lic1 tests ===
@@ -409,7 +409,7 @@ PASS: sh multipar.sh
 PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c multipar.lus  {}
 
 ==> lus2lic2.sum <==
-Test run by jahier on Mon Oct  8 15:16:37 
+Test run by jahier on Mon Dec  3 11:11:54 
 Native configuration is x86_64-pc-linux-gnu
 
 		=== lus2lic2 tests ===
@@ -749,7 +749,7 @@ PASS: sh zzz2.sh
 PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c zzz2.lus  {}
 
 ==> lus2lic3.sum <==
-Test run by jahier on Mon Oct  8 15:17:13 
+Test run by jahier on Mon Dec  3 11:12:25 
 Native configuration is x86_64-pc-linux-gnu
 
 		=== lus2lic3 tests ===
@@ -1259,7 +1259,7 @@ PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node multipar.lus {}
 
 
 ==> lus2lic4.sum <==
-Test run by jahier on Mon Oct  8 15:17:54 
+Test run by jahier on Mon Dec  3 11:13:04 
 Native configuration is x86_64-pc-linux-gnu
 
 		=== lus2lic4 tests ===
@@ -1776,14 +1776,14 @@ PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node zzz2.lus {}
 # of unexpected failures	7
 ===============================
 # Total number of failures: 15
-lus2lic0.log:testcase ./lus2lic.tests/test0.exp completed in 2 seconds
-lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 31 seconds
-lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 36 seconds
-lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 41 seconds
-lus2lic4.log:testcase ./lus2lic.tests/test4.exp completed in 21 seconds
+lus2lic0.log:testcase ./lus2lic.tests/test0.exp completed in 1 seconds
+lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 25 seconds
+lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 30 seconds
+lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 39 seconds
+lus2lic4.log:testcase ./lus2lic.tests/test4.exp completed in 17 seconds
 * Ref time: 
-71.69user 22.04system 2:11.00elapsed 71%CPU (0avgtext+0avgdata 280552maxresident)k
-0inputs+143152outputs (0major+11022451minor)pagefaults 0swaps
+59.55user 20.27system 1:52.76elapsed 70%CPU (0avgtext+0avgdata 280660maxresident)k
+0inputs+143272outputs (0major+11018831minor)pagefaults 0swaps
 * Quick time (-j 4):
-84.56user 23.21system 1:24.78elapsed 127%CPU (0avgtext+0avgdata 280056maxresident)k
-19408inputs+142096outputs (21major+10952554minor)pagefaults 0swaps
+66.52user 21.59system 0:57.33elapsed 153%CPU (0avgtext+0avgdata 280000maxresident)k
+0inputs+137184outputs (0major+10636737minor)pagefaults 0swaps