diff --git a/src/lv6MainArgs.ml b/src/lv6MainArgs.ml
index bee48879131a5cd8ff8384204268774770e03ac8..8052c99beafc0e787f8b54b0349597d8e3bd967a 100644
--- a/src/lv6MainArgs.ml
+++ b/src/lv6MainArgs.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 12/02/2015 (at 10:35) by Erwan Jahier> *)
+(* Time-stamp: <modified the 12/02/2015 (at 17:25) 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/soc2cStack.ml b/src/soc2cStack.ml
index a153b6c7a9fe9352fb2ca491bfd64c2db7529f5f..09b62b5ef524e6067afe5e29408490feb115254c 100644
--- a/src/soc2cStack.ml
+++ b/src/soc2cStack.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 12/02/2015 (at 10:01) by Erwan Jahier> *)
+(* Time-stamp: <modified the 12/02/2015 (at 17:14) by Erwan Jahier> *)
 
 open Soc2cUtil
 open Soc2cIdent
@@ -11,6 +11,38 @@ let (mem_interface_out : Soc.t -> string -> bool) =
     let _,outs = soc.profile in
     List.mem_assoc id outs
 
+let (not_an_array : Data.t -> bool) = function 
+  | Data.Array(_,_) -> false | _ -> true
+
+
+let rec (ve_not_an_array : Soc.var_expr -> bool) =
+  fun v -> 
+    match v with
+      | Var(_,t) 
+      | Const(_,t) 
+      | Field(_,_,t) 
+      | Index(_,_,t) -> not_an_array t 
+      | Slice(_,_,_,_,_,_) -> false
+
+let rec (ve_not_a_field : Soc.var_expr -> bool) =
+  fun v -> 
+    match v with
+      | Var(_,_) 
+      | Const(_,_) 
+      | Index(_,_,_) 
+      | Slice(_,_,_,_,_,_) -> true
+      | Field(_,_,t) -> false
+
+(* exported : returns true if v is an output of soc *)
+let rec (is_soc_output : Soc.var_expr -> Soc.t -> bool) =
+  fun v soc -> 
+    match v with
+      | Var(n,t) -> List.mem (n,t) (snd soc.profile)
+      | Const(_) -> false
+      | Index(ve,_,t) 
+      | Field(ve,_,t)
+      | Slice(ve,_,_,_,_,t) -> false (* is_soc_output ve soc *)
+
 let rec (string_of_var_expr: Soc.t -> Soc.var_expr -> string) = 
   fun soc -> function
     | Const("true", _) -> "_true"
@@ -18,7 +50,10 @@ let rec (string_of_var_expr: Soc.t -> Soc.var_expr -> string) =
     | Const(id, _) -> id2s id
     | Var ("_memory",_)   -> (* Clutch! it's not an interface var... *) "ctx->_memory" 
     | Var (id,_)   -> id2s id
-    | Field(f, id,_) -> Printf.sprintf "%s.%s" (string_of_var_expr soc f) (id2s id) 
+    | Field(f, id,_) -> 
+      if is_soc_output f soc
+      then Printf.sprintf "%s->%s" (string_of_var_expr soc f) (id2s id) 
+      else Printf.sprintf "%s.%s"  (string_of_var_expr soc f) (id2s id) 
     | Index(f, index,_) -> Printf.sprintf "%s[%i]" (string_of_var_expr soc f) index
     | Slice(f,fi,la,st,wi,vt) -> assert false (* should not occur *)
 
@@ -38,16 +73,6 @@ let rec (gen_assign : Data.t  -> string -> string -> string -> string) =
 
       | Data.Extern (id) -> 
         Printf.sprintf "  _assign_%s(&%s, &%s, sizeof(%s));\n" (id2s id) vi vo vo
-
-let rec (is_soc_output : Soc.var_expr -> Soc.t -> bool) =
-  fun v soc -> 
-    match v with
-      | Var(v) -> List.mem v (snd soc.profile)
-      | Const(_) -> false
-      | Index(ve,_,_) 
-      | Field(ve,_,_)
-      | Slice(ve,_,_,_,_,_) -> is_soc_output ve soc
-          
       
 
 let (gen_assign_var_expr : Soc.t -> Soc.var_expr -> Soc.var_expr -> string) =
@@ -56,7 +81,8 @@ fun soc vi vo ->
     | Slice _, _  | _, Slice _ ->  assert false
     | _,_ -> 
       let left = string_of_var_expr soc vi in
-      let left = if is_soc_output vi soc then "*"^left else left  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))
 
@@ -111,12 +137,14 @@ let (inline_soc :  Soc.t -> Soc.t -> Soc.var_expr list -> Soc.var_expr list -> s
           then
             let vel_in_str = List.map (string_of_var_expr soc) vel_in in
             let vel_in = List.map2
-              (fun v s -> if is_soc_output v soc then "*"^s else s) vel_in vel_in_str
+              (fun v s -> if is_soc_output v soc  && ve_not_an_array v 
+                then "*"^s else s) vel_in vel_in_str
             in
 
             let vel_out_str = List.map (string_of_var_expr soc) vel_out in
             let vel_out = List.map2
-              (fun v s -> if is_soc_output v soc then "*"^s else s) vel_out vel_out_str
+              (fun v s -> if is_soc_output v soc && ve_not_an_array v 
+                then "*"^s else s) vel_out vel_out_str
             in
             Some (Soc2cPredef.gen_call called_soc_name soc vel_out vel_in)
           else 
@@ -140,11 +168,17 @@ let (gen_step_call : Soc.t -> Soc.t -> Soc.var_expr list -> Soc.var_expr list ->
       | None ->
         let vel_in_str = List.map (string_of_var_expr soc) vel_in in
         let vel_in =
-          List.map2 (fun v s -> if is_soc_output v soc then "*"^s else s) vel_in vel_in_str
+          List.map2 (fun v s -> if is_soc_output v soc && ve_not_an_array v 
+            then "*"^s else s) vel_in vel_in_str
         in
         let vel_out_str = List.map (string_of_var_expr soc) vel_out in
         let vel_out =
-          List.map2 (fun v s -> if is_soc_output v soc then s else "&"^s) vel_out vel_out_str
+          List.map2 
+            (fun v s -> 
+              if (not (is_soc_output v soc) && ve_not_an_array v )
+              then "&"^s 
+              else s) 
+            vel_out vel_out_str
         in
         let step_arg = if step_arg = "" then [] else [step_arg] in
         let step_arg = String.concat "," (vel_in@vel_out@step_arg) in
@@ -190,13 +224,14 @@ let (get_step_prototype : Soc.step_method -> Soc.t -> string * string) =
     let outputs = SocUtils.filter_step_params sm.Soc.idx_outs outputs in
     let to_param_decl is_an_output (id,dt) = 
       match is_an_output, dt with
-        | true, Data.Array(_,_) (* arrays are already pointers... *)
+        | true, Data.Array(_,_) -> Soc2cUtil.data_type_to_c dt "" ^"/*out*/" 
+        (* arrays are already pointers... *)
         | false, _ -> Soc2cUtil.data_type_to_c dt ""
         | true,  _ -> Soc2cUtil.data_type_to_c dt "*"
     in
     let to_param out (id,dt) = 
       match out, dt with
-        | true, Data.Array(_,_) 
+        | true, Data.Array(_,_) -> Soc2cUtil.data_type_to_c dt id ^"/*out*/"
         | false, _ -> Soc2cUtil.data_type_to_c dt id
         | true,  _ -> Soc2cUtil.data_type_to_c dt ("*"^id)
     in
diff --git a/src/soc2cStack.mli b/src/soc2cStack.mli
index f463499580b5ff7a8bb78df3d59fd0af9f544df2..5027868eb3cb04d6f837e54da9c258d3f5b942cf 100644
--- a/src/soc2cStack.mli
+++ b/src/soc2cStack.mli
@@ -1,8 +1,13 @@
-(* Time-stamp: <modified the 09/02/2015 (at 16:44) by Erwan Jahier> *)
+(* Time-stamp: <modified the 12/02/2015 (at 17:14) by Erwan Jahier> *)
 
 (** Gathers all entities (functions, types) that implement the
     heap-based C generator.  *)
 
+
+(* [is_soc_output ve soc] is true if ve is an output of soc *)
+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
diff --git a/src/socPredef2cStack.ml b/src/socPredef2cStack.ml
index 3a4c219eb42ab2950f7b8f15a0ae0e173e247cfd..701368004f9e1ffebe96cb96dec25eb06de6dbe9 100644
--- a/src/socPredef2cStack.ml
+++ b/src/socPredef2cStack.ml
@@ -1,5 +1,5 @@
 
-(* Time-stamp: <modified the 11/02/2015 (at 17:53) by Erwan Jahier> *)
+(* Time-stamp: <modified the 12/02/2015 (at 17:17) by Erwan Jahier> *)
 
 open Data
 open Soc
@@ -189,6 +189,8 @@ let rec type_elt_of_array = function
   | Data.Array(t,_) -> t
   | Data.Alias(_,t) -> type_elt_of_array t
   | _ -> assert false
+let (not_an_array : Data.t -> bool) = function 
+  | Data.Array(_,_) -> false | _ -> true
 
 
 (* exported *)
@@ -201,7 +203,11 @@ let (get_iterator : Soc.t -> string -> Soc.t -> int -> string) =
         | [] -> (
           let (array_index : int -> Soc.var -> Soc.var_expr) =
             fun i (vn,vt) -> (* Var(Printf.sprintf "%s[%d]" vn i, type_elt_of_array vt) *)
-              Index(Var (vn,Data.Array(vt,i)),i,vt) 
+              let vt_elt = match vt with
+                | Data.Array(vt,_) -> vt 
+                | _ -> assert false
+              in 
+              Index(Var (vn,vt),i,vt_elt)
           in          
           Array.make n "", 
           Array.make n (get_ctx_name it_soc.key),
@@ -214,7 +220,11 @@ let (get_iterator : Soc.t -> string -> Soc.t -> int -> string) =
           let ctx = List.map (fun sn -> ("ctx->"^(id2s sn))) inst_names in
           let (array_index : int -> var -> Soc.var_expr) =
             fun i (vn,vt) ->  
-              Index(Var (Printf.sprintf "%s" vn, Data.Array(vt,i)),i,vt)
+              let vt_elt = match vt with
+                | Data.Array(vt,_) -> vt 
+                | _ -> assert false
+              in 
+              Index(Var (Printf.sprintf "%s" vn, Data.Array(vt,i)),i,vt_elt)
            (* Var(Printf.sprintf "%s[%d]" vn i,vt)   *)
           in
           Array.of_list step_args,
@@ -244,7 +254,11 @@ let (get_iterator : Soc.t -> string -> Soc.t -> int -> string) =
     if iterator <> "map" then (
       let type_in = (snd (List.hd iter_inputs)) in
       let a_in  =  (fst (List.hd iter_inputs)) in
-      let a_out = "*" ^ (fst (List.hd iter_outputs)) in
+      let a_out = 
+        let o,t = List.hd iter_outputs in
+        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 *)
     );
diff --git a/test/lus2lic.sum b/test/lus2lic.sum
index ece0a148a03d1239e5b00abd067ed58fe3b126c5..c39ff13203f3ea54770ce9beb7e4ffb375125d4c 100644
--- a/test/lus2lic.sum
+++ b/test/lus2lic.sum
@@ -1,5 +1,5 @@
 ==> lus2lic0.sum <==
-Test Run By jahier on Thu Feb 12 10:46:28 
+Test Run By jahier on Thu Feb 12 17:26:11 
 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 10:46:30 
+Test Run By jahier on Thu Feb 12 17:26:02 
 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 10:46:32 
+Test Run By jahier on Thu Feb 12 17:26:07 
 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 10:46:34 
+Test Run By jahier on Thu Feb 12 17:26:05 
 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 10:46:37 
+Test Run By jahier on Thu Feb 12 17:26:09 
 Native configuration is x86_64-unknown-linux-gnu
 
 		=== lus2lic4 tests ===
@@ -1727,11 +1727,11 @@ PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node zzz2.lus {}
 ===============================
 # Total number of failures: 14
 lus2lic0.log:testcase ./lus2lic.tests/test0.exp completed in 6 seconds
-lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 47 seconds
-lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 74 seconds
-lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 45 seconds
-lus2lic4.log:testcase ./lus2lic.tests/test4.exp completed in 77 seconds
+lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 45 seconds
+lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 71 seconds
+lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 48 seconds
+lus2lic4.log:testcase ./lus2lic.tests/test4.exp completed in 76 seconds
 * Ref time: 
 * Quick time (-j 4):
-0.04user 0.02system 1:25.96elapsed 0%CPU (0avgtext+0avgdata 5100maxresident)k
-160inputs+0outputs (0major+5549minor)pagefaults 0swaps
+0.02user 0.03system 1:23.36elapsed 0%CPU (0avgtext+0avgdata 5108maxresident)k
+160inputs+0outputs (0major+5552minor)pagefaults 0swaps
diff --git a/test/lus2lic.time b/test/lus2lic.time
index 34882fa3e5d98dbd004e2b40a2b8a559bb6b058d..d9b79b59e204c8e9cced531d5f55eadee80ef6d1 100644
--- a/test/lus2lic.time
+++ b/test/lus2lic.time
@@ -1,9 +1,9 @@
 lus2lic0.log:testcase ./lus2lic.tests/test0.exp completed in 6 seconds
-lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 47 seconds
-lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 74 seconds
-lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 45 seconds
-lus2lic4.log:testcase ./lus2lic.tests/test4.exp completed in 77 seconds
+lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 45 seconds
+lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 71 seconds
+lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 48 seconds
+lus2lic4.log:testcase ./lus2lic.tests/test4.exp completed in 76 seconds
 * Ref time: 
 * Quick time (-j 4):
-0.04user 0.02system 1:25.96elapsed 0%CPU (0avgtext+0avgdata 5100maxresident)k
-160inputs+0outputs (0major+5549minor)pagefaults 0swaps
+0.02user 0.03system 1:23.36elapsed 0%CPU (0avgtext+0avgdata 5108maxresident)k
+160inputs+0outputs (0major+5552minor)pagefaults 0swaps
diff --git a/test/should_work/ELMU.lus b/test/should_work/ELMU.lus
index 39159460ee029991ebf34ad4286500001c0ff2b8..47d510240e1a904beb0799094054af905788c590 100644
--- a/test/should_work/ELMU.lus
+++ b/test/should_work/ELMU.lus
@@ -79,12 +79,12 @@ type T_ComChgNBC = T_ComChg^NBC;
 -- Utilitaires
 ----------------------------------------
 -- "copie" d'un tableau a l'identite
-node id(elt_in : int) returns (elt_out : int);  -- OK
+function id(elt_in : int) returns (elt_out : int);  -- OK
 let
    elt_out = elt_in;
 tel
 -- remplissage d'un tableau avec 0; 1; 2; ...
-node incr_acc( acc_in : int) returns ( acc_out: int; res : int); -- OK
+function incr_acc( acc_in : int) returns ( acc_out: int; res : int); -- OK
 let
 	res = acc_in;
 	acc_out = res + 1;
@@ -97,7 +97,7 @@ tel
 -------------------------------------------------
 -- Extraction des infos globales pour traiter_chg
 -------------------------------------------------
-node extract_info_chg_glob (EntreeGlob : T_EntreeGlob)  
+function extract_info_chg_glob (EntreeGlob : T_EntreeGlob)  
 	returns (InfoChgGlob : T_InfoChgGlob); -- OK
 let
 	InfoChgGlob = T_InfoChgGlob {chg2gen =  map<<id;NBC>>(EntreeGlob.chg2gen)};
@@ -114,13 +114,13 @@ tel
 ------------------------------------------------------
 -- Extraction des infos individuelles pour traiter_chg
 ------------------------------------------------------
-node int2InfoChgIndiv (m : int) -- OK
+function int2InfoChgIndiv (m : int) -- OK
 	returns (InfoChgIndiv : T_InfoChgIndiv);
 let
 	InfoChgIndiv = T_InfoChgIndiv{mesure_chg = m};
 tel
 
-node extract_tab_info_chg_indiv (EntreeGlob : T_EntreeGlob) -- OK
+function extract_tab_info_chg_indiv (EntreeGlob : T_EntreeGlob) -- OK
 	returns (TabInfoChgIndiv : T_InfoChgIndiv^NBC); 
 let
 	TabInfoChgIndiv = map<<int2InfoChgIndiv; NBC>>(EntreeGlob.mesure_chgs);
@@ -136,7 +136,7 @@ tel
 -------------------------------------------------
 -- Extraction des infos globales pour traiter_gen
 -------------------------------------------------
-node extract_info_gen_glob (EntreeGlob : T_EntreeGlob)  -- OK
+function extract_info_gen_glob (EntreeGlob : T_EntreeGlob)  -- OK
 	returns (InfoGenGlob : T_InfoGenGlob);
 let
 	InfoGenGlob = T_InfoGenGlob{
@@ -149,13 +149,13 @@ tel
 ------------------------------------------------------
 -- Extraction des infos individuelles pour traiter_gen
 ------------------------------------------------------
-node int2InfoGenIndiv (m : int)   -- OK
+function int2InfoGenIndiv (m : int)   -- OK
 	returns (InfoGenIndiv : T_InfoGenIndiv);
 let
 	InfoGenIndiv = T_InfoGenIndiv{mesure_gen = m};
 tel
 
-node extract_tab_info_gen_indiv (EntreeGlob : T_EntreeGlob)  -- OK
+function extract_tab_info_gen_indiv (EntreeGlob : T_EntreeGlob)  -- OK
 	returns (TabInfoGenIndiv : T_InfoGenIndiv^NBG);
 let
 	TabInfoGenIndiv = map<<int2InfoGenIndiv; NBG>>(EntreeGlob.mesure_gens);
@@ -176,7 +176,7 @@ tel
 --qui est lui-meme un map de  fusion_une_com
 ---------------------------------------------------
 -- accessoire : prendre (ou non) une ComChg
-node fusion_une_com (in_com  : T_ComChg ;     --- OK 
+function fusion_une_com (in_com  : T_ComChg ;     --- OK 
 					 cur_com : T_ComChg ;
 					 cur_val : bool) 
 	returns (out_com : T_ComChg);
@@ -185,7 +185,7 @@ let
 tel
 
 -- accessoire : completer un tableau de ComChg modulo un tableau de bool
-node fusion_tab_com (acc_in : T_ComChg^NBC;    -- OK
+function fusion_tab_com (acc_in : T_ComChg^NBC;    -- OK
 					 TabCom : T_ComChg^NBC;
 					 TabVal : bool^NBC) 
 	returns (acc_out : T_ComChg^NBC);
@@ -194,7 +194,7 @@ let
 tel
 
 -- Le VRAI noeud de fusion
-node fusion_com (AllTabComChg : T_ComChgNBC^NBG ;    -- OK
+function fusion_com (AllTabComChg : T_ComChgNBC^NBG ;    -- OK
 				 AllTabComVal : BOOLNBC^NBG) 
 	returns (TabComChg : T_ComChgNBC);
  var
@@ -211,13 +211,13 @@ tel
 --Maquette du noeud traite_chg :
 --   on fait abstraction de la fonctionnalite
 ----------------------------------------------------
-node trChItere(acc_in : int; elt : int) returns (acc_out : int);  -- OK
+function trChItere(acc_in : int; elt : int) returns (acc_out : int);  -- OK
 -- Pour l'instant,  calcul du max
 let
   acc_out = if(acc_in>elt) then acc_in else elt;
 tel
 
-node traite_charge(InfoChgIndiv : T_InfoChgIndiv; -- un entier                     --OK
+function traite_charge(InfoChgIndiv : T_InfoChgIndiv; -- un entier                     --OK
 					   InfoChgGlob   : T_InfoChgGlob)-- un tableau de NBC entier
 	returns (EtatCharge : T_EtatCharge);-- un entier
 -- Pour l'instant, determine le max
@@ -238,7 +238,7 @@ tel
 --  On a juste mis le calcul du TabComVal,
 --   le reste etant realise par un ``noeud'' abstrait
 ----------------------------------------------------
-node traite_genCore_itere(acc_in : int;               -- OK
+function traite_genCore_itere(acc_in : int;               -- OK
                           elt1 : bool; 
                           elt2 : int) 
      returns (acc_out : int; elt : int); 
@@ -249,7 +249,7 @@ let
   acc_out = acc_in;
 tel
 
-node traite_gen_core (indice_gen : int ;                   -- OK
+function traite_gen_core (indice_gen : int ;                   -- OK
                       InfoGenIndiv  : T_InfoGenIndiv ;
                       InfoGenGlob    : T_InfoGenGlob ;
                       TabEtatCharge : T_EtatCharge^NBC;
@@ -263,7 +263,7 @@ tel
 
 
 
-node egal_indice(indice, val : int) returns (r : bool);   -- OK
+function egal_indice(indice, val : int) returns (r : bool);   -- OK
 let 
   r = val = indice; 
 tel
@@ -272,7 +272,7 @@ tel
          
 
 
-node traite_gen(indice_gen : int ;                          -- OK
+function traite_gen(indice_gen : int ;                          -- OK
                    InfoGenIndiv  : T_InfoGenIndiv ;
                    InfoGenGlob    : T_InfoGenGlob ;
                    TabEtatCharge : T_EtatCharge^NBC;
@@ -298,7 +298,7 @@ tel
 
 
 
-node copie(acc_in : int)                -- OK
+function copie(acc_in : int)                -- OK
      returns (acc_out : int; elt : int);
 let
    acc_out = acc_in;
@@ -313,7 +313,7 @@ tel
 -------------------------------------------------------------------
 -- extraction des charges a partir des Entrees globales
 -------------------------------------------------------------------
-node extrCharge(EntreeGlob : T_EntreeGlob)                -- OK
+function extrCharge(EntreeGlob : T_EntreeGlob)                -- OK
      returns (TabInfoChgIndiv : T_InfoChgIndiv^NBC;
               TabInfoChgGlob   : T_InfoChgGlob^NBC);
 let
@@ -337,7 +337,7 @@ tel
 -------------------------------------------------------------------
 -- extraction des generateurs a partir des Entrees globales
 -------------------------------------------------------------------
-node extrGen(EntreeGlob : T_EntreeGlob)                      -- OK
+function extrGen(EntreeGlob : T_EntreeGlob)                      -- OK
      returns (TabInfoGenIndiv : T_InfoGenIndiv^NBG;
               TabInfoGenGlob   : T_InfoGenGlob^NBG;
               TabIndiceGen  : INTNBG;);
@@ -364,7 +364,7 @@ tel
 -----------------------------------------------------------------
 -- Traitement Global des charges                                 
 -----------------------------------------------------------------
-node traiteChg(TabInfoChgIndiv : T_InfoChgIndiv^NBC; -- tableau de NBC entiers  --OK
+function traiteChg(TabInfoChgIndiv : T_InfoChgIndiv^NBC; -- tableau de NBC entiers  --OK
                TabInfoChgGlob : T_InfoChgGlob^NBC) -- tableau de NBC*NBC entiers
      returns (TabEtatCharge : T_EtatCharge^NBC);-- tableau de NBC entiers
 let
@@ -384,7 +384,7 @@ tel
 -------------------------------------------------------------------
 -- Traitement Global des generateurs                               
 -------------------------------------------------------------------
-node traiteGen(TabIndiceGen  : INTNBG;               -- OK
+function traiteGen(TabIndiceGen  : INTNBG;               -- OK
                TabInfoGenIndiv : T_InfoGenIndiv^NBG;
                TabInfoGenGlob   : T_InfoGenGlob^NBG;
                TabEtatCharge : T_EtatCharge^NBC)
@@ -407,7 +407,7 @@ tel
 -------------------------------------------------------
 -- Noeud principal                                     
 -------------------------------------------------------
-node ELMU(EntreeGlob : T_EntreeGlob) --Contient (au moins) les valeurs des charges et des generateurs du systeme
+function  ELMU(EntreeGlob : T_EntreeGlob) --Contient (au moins) les valeurs des charges et des generateurs du systeme
 -- OK OK OK 
 	returns (TabComChg : T_ComChg^NBC);
 var