diff --git a/src/split.ml b/src/split.ml
index 8bc4d349d13c7e78ccf1d79b425dcd9f0594c76b..a504c375a75aeed62c41709cba94e3c2a40149d8 100644
--- a/src/split.ml
+++ b/src/split.ml
@@ -1,4 +1,4 @@
-(** Time-stamp: <modified the 20/11/2008 (at 10:47) by Erwan Jahier> *)
+(** Time-stamp: <modified the 20/11/2008 (at 14:32) by Erwan Jahier> *)
 
 
 open Lxm
@@ -143,6 +143,7 @@ and (split_val_exp : bool -> Eff.local_env -> Eff.val_exp -> Eff.val_exp * split
         -> ve, ([],[])
 
       | CallByNameEff (by_name_op_eff, fl) ->
+          let lxm = by_name_op_eff.src in
           let fl, eql, vl = 
             List.fold_left
               (fun (fl_acc, eql_acc, vl_acc) (fn, fv) -> 
@@ -152,8 +153,26 @@ and (split_val_exp : bool -> Eff.local_env -> Eff.val_exp -> Eff.val_exp * split
               ([],[],[])
               fl 
           in
-            CallByNameEff (by_name_op_eff, List.rev fl), (eql, vl)
+          let rhs = CallByNameEff (by_name_op_eff, List.rev fl) in
+            if top_level then 
+              rhs, (eql, vl) 
+            else
+              (* create the var for the current call *)
+              let clk_l = EvalClock.get_val_exp_eff ve in
+              let typ_l = EvalType.val_exp_eff ve in 
+              let nv_l = List.map2 (new_var node_env) typ_l clk_l in
+              let nve = match nv_l with
+                | [nv] -> CallByPosEff(
+                    Lxm.flagit (Eff.IDENT (Ident.to_idref nv.var_name_eff)) lxm,
+                    OperEff []
+                  )
+                | _ -> assert false
+              in
+              let lpl = List.map (fun nv -> LeftVarEff(nv, lxm)) nv_l in
+              let eq = Lxm.flagit (lpl, rhs) lxm in
 
+                nve, (eql@[eq], vl@nv_l)
+                   
 
       | CallByPosEff(by_pos_op_eff, OperEff vel) ->
           (* recursively split the arguments *) 
diff --git a/src/test/test.res.exp b/src/test/test.res.exp
index 967fb073adf0f9fce5d5c887f55137a49d28cb61..91d27f03ed5c37110f9d9ff4947edfd99eff7a33 100644
--- a/src/test/test.res.exp
+++ b/src/test/test.res.exp
@@ -8288,6 +8288,7 @@ type _left::truc = struct  {a : A_bool_100; b : int};
 node left::toto(x:bool) returns (t:A__left::truc_3);
 var
    _v1:A_bool_100;
+   _v2:_left::truc;
 let
    t[0].a[0 .. 98 step 2][48 .. 0 step -2] = true^25;
    t[0].a[0 .. 98 step 2][1 .. 49 step 2] = false^25;
@@ -8295,8 +8296,9 @@ let
    t[0].a[1 .. 99 step 2][1] = true;
    t[0].a[5 .. 99 step 2] = false^48;
    t[0].b = 42;
-   t[1 .. 2] = _left::truc{a=_v1;b=0}^2;
+   t[1 .. 2] = _v2^2;
    _v1 = true^100;
+   _v2 = _left::truc{a=_v1;b=0};
 tel
 -- end of node left::toto
 -- automatically defined aliases:
@@ -10635,10 +10637,12 @@ returns (
 	tabToFillAfter:A__Gyroscope2::Valid_ChannelT_3);
 var
    acc_out:_Gyroscope2::CFF_Eltstruct;
+   _v1:_Gyroscope2::CFF_Eltstruct;
 let
     (acc_out, tabToFillAfter) = fillred<<Gyroscope2::addOneChannelIter,
-	3>>(_Gyroscope2::CFF_Eltstruct{indx=0;indx_toChange=indx_toChange;value=channeltToAdd},
-	 tabToFill);
+	 3>>(_v1, tabToFill);
+    _v1 =
+	 _Gyroscope2::CFF_Eltstruct{indx=0;indx_toChange=indx_toChange;value=channeltToAdd};
 tel
 -- end of node Gyroscope2::addOneChannel
 
@@ -10685,13 +10689,14 @@ var
    acc_out:_Gyroscope2::CFF_struct;
    localtabToFill:_Gyroscope2::Valid_ChannelT;
    _v1:A__Gyroscope2::Valid_ChannelT_3;
+   _v2:_Gyroscope2::CFF_struct;
 let
     localtabToFill =
 	 _Gyroscope2::Valid_ChannelT{local_failure=false;local_value=0.0};
-    acc_out = red<<Gyroscope2::CFC_iter,
-	4>>(_Gyroscope2::CFF_struct{indx=0;indx_toChange=currentChannelIndx;tabToFill=_v1},
-	 allChannels);
+   acc_out = red<<Gyroscope2::CFC_iter, 4>>(_v2, allChannels);
    _v1 = localtabToFill^3;
+    _v2 =
+	 _Gyroscope2::CFF_struct{indx=0;indx_toChange=currentChannelIndx;tabToFill=_v1};
    foreignChannels = acc_out.tabToFill;
 tel
 -- end of node Gyroscope2::ComputeForeignChannels
@@ -11005,23 +11010,24 @@ var
    dumbChannel:A__Gyroscope2::Valid_ChannelT_4;
    initChannels:A__Gyroscope2::Valid_ChannelT_4;
    fillredInit:A__Gyroscope2::Valid_ChannelT_4;
-   _v1:A_int_4;
-   _v2:A_real_4;
+   _v1:_Gyroscope2::Valid_ChannelT;
+   _v2:A_int_4;
    _v3:A_real_4;
    _v4:A_real_4;
-   _v5:A__Gyroscope2::Valid_ChannelT_4;
+   _v5:A_real_4;
+   _v6:A__Gyroscope2::Valid_ChannelT_4;
 let
-    initChannels =
-	 _Gyroscope2::Valid_ChannelT{local_failure=false;local_value=0.0}^4;
+   initChannels = _v1^4;
+   _v1 = _Gyroscope2::Valid_ChannelT{local_failure=false;local_value=0.0};
     (dumbChannel, resChannels) = fillred<<Gyroscope2::Channel,
-	 4>>(fillredInit, _v1, channels, _v2, _v3, _v4);
-   _v1 = [0, 1, 2, 3];
-   _v2 = delta^4;
-   _v3 = god^4;
-   _v4 = delta_to_god^4;
+	 4>>(fillredInit, _v2, channels, _v3, _v4, _v5);
+   _v2 = [0, 1, 2, 3];
+   _v3 = delta^4;
+   _v4 = god^4;
+   _v5 = delta_to_god^4;
    AxisValue = Gyroscope2::Voter(resChannels, god, delta_to_god);
-   fillredInit = initChannels -> _v5;
-   _v5 = pre resChannels;
+   fillredInit = initChannels -> _v6;
+   _v6 = pre resChannels;
 tel
 -- end of node Gyroscope2::EvaluateAxis
 
@@ -16161,9 +16167,10 @@ returns (
 	iselementof:bool);
 var
    acc_out:_produitBool::T_isElementOf_;
+   _v1:_produitBool::T_isElementOf_;
 let
-    acc_out = red<<produitBool::iterated_isElementOf_,
-	 10>>(_produitBool::T_isElementOf_{eltToSearch=e;iselementof=false}, t);
+   acc_out = red<<produitBool::iterated_isElementOf_, 10>>(_v1, t);
+   _v1 = _produitBool::T_isElementOf_{eltToSearch=e;iselementof=false};
    iselementof = acc_out.iselementof;
 tel
 -- end of node produitBool::_isElementOf_
@@ -16204,11 +16211,12 @@ returns (
 var
    iterationResult:_produitBool::iteratedStruct;
    _v1:bool;
+   _v2:_produitBool::iteratedStruct;
 let
-    iterationResult = red<<produitBool::selectOneStage,
-	10>>(_produitBool::iteratedStruct{currentRank=0;rankToSelect=rankToSelect;elementSelected=_v1},
-	 array);
+   iterationResult = red<<produitBool::selectOneStage, 10>>(_v2, array);
    _v1 = array[0];
+    _v2 =
+	 _produitBool::iteratedStruct{currentRank=0;rankToSelect=rankToSelect;elementSelected=_v1};
    elementSelected = iterationResult.elementSelected;
 tel
 -- end of node produitBool::selectElementOfRank_inArray_
@@ -16268,11 +16276,12 @@ var
    bidon:_produitBool::Tacc_inShift2;
    _v2:int;
    _v1:A_bool_10;
+   _v3:_produitBool::Tacc_inShift2;
 let
-    (bidon, ligne) = fill<<produitBool::shiftFill,
-	 20>>(_produitBool::Tacc_inShift2{multiplieur=_v1;rank=_v2;actual_rank=0});
+   (bidon, ligne) = fill<<produitBool::shiftFill, 20>>(_v3);
    _v2 = acc_in.rank;
    _v1 = acc_in.multiplieur;
+   _v3 = _produitBool::Tacc_inShift2{multiplieur=_v1;rank=_v2;actual_rank=0};
 tel
 -- end of node produitBool::shift
 
@@ -16364,11 +16373,13 @@ returns (
 var
    v_iterationResult:_shiftFill_ludic::T3_STRUCT;
    _v1:bool;
+   _v2:_shiftFill_ludic::T3_STRUCT;
 let
-    v_iterationResult = red<<shiftFill_ludic::n_selectOneStage,
-	10>>(_shiftFill_ludic::T3_STRUCT{currentRank=0;rankToSelect=i_rankToSelect;elementSelected=_v1},
+    v_iterationResult = red<<shiftFill_ludic::n_selectOneStage, 10>>(_v2,
 	 i_array);
    _v1 = i_array[0];
+    _v2 =
+	 _shiftFill_ludic::T3_STRUCT{currentRank=0;rankToSelect=i_rankToSelect;elementSelected=_v1};
    o_elementSelected = v_iterationResult.elementSelected;
 tel
 -- end of node shiftFill_ludic::n_selectElementOfRank_inArray_
@@ -16471,11 +16482,13 @@ returns (
 var
    v_iterationResult:_shift_ludic::T4_STRUCT;
    _v1:bool;
+   _v2:_shift_ludic::T4_STRUCT;
 let
-    v_iterationResult = red<<shift_ludic::n_selectOneStage,
-	10>>(_shift_ludic::T4_STRUCT{currentRank=0;rankToSelect=i_rankToSelect;elementSelected=_v1},
+    v_iterationResult = red<<shift_ludic::n_selectOneStage, 10>>(_v2,
 	 i_array);
    _v1 = i_array[0];
+    _v2 =
+	 _shift_ludic::T4_STRUCT{currentRank=0;rankToSelect=i_rankToSelect;elementSelected=_v1};
    o_elementSelected = v_iterationResult.elementSelected;
 tel
 -- end of node shift_ludic::n_selectElementOfRank_inArray_
@@ -16531,11 +16544,12 @@ var
    v_bidon:_shift_ludic::T2_STRUCT;
    _v2:int;
    _v1:A_bool_10;
+   _v3:_shift_ludic::T2_STRUCT;
 let
-    (v_bidon, o_ligne) = fill<<shift_ludic::n_shiftFill,
-	 20>>(_shift_ludic::T2_STRUCT{multiplieur=_v1;rank=_v2;actual_rank=0});
+   (v_bidon, o_ligne) = fill<<shift_ludic::n_shiftFill, 20>>(_v3);
    _v2 = i_acc_in.rank;
    _v1 = i_acc_in.multiplieur;
+   _v3 = _shift_ludic::T2_STRUCT{multiplieur=_v1;rank=_v2;actual_rank=0};
 tel
 -- end of node shift_ludic::n_shift
 -- automatically defined aliases:
@@ -16715,26 +16729,27 @@ var
    _v5:int;
    _v4:int;
    _v3:int;
-   _v9:int;
-   _v10:bool;
-   _v11:int;
-   _v12:bool;
+   _v9:_calculs_max::struct_max;
+   _v10:int;
+   _v11:bool;
+   _v12:int;
    _v13:bool;
-   _v17:int;
+   _v14:bool;
    _v18:int;
+   _v19:int;
+   _v17:int;
    _v16:int;
    _v15:int;
-   _v14:int;
-   _v22:int;
+   _v20:_calculs_max::struct_max;
+   _v24:int;
+   _v25:int;
    _v23:int;
+   _v22:int;
    _v21:int;
-   _v20:int;
-   _v19:int;
-   _v24:_calculs_max::struct_max;
+   _v26:_calculs_max::struct_max;
+   _v27:_calculs_max::struct_max;
 let
-    strout =  if _v2 then
-	_calculs_max::struct_max{max1=_v3;max2=_v4;imax1=_v5;imax2=_v6;icourant=_v8}
-	 else _v24;
+   strout =  if _v2 then _v9 else _v27;
    _v1 = strin.max2;
    _v2 = ecourant <= _v1;
    _v7 = strin.icourant;
@@ -16743,25 +16758,28 @@ let
    _v5 = strin.imax1;
    _v4 = strin.max2;
    _v3 = strin.max1;
-   _v9 = strin.max2;
-   _v10 = ecourant > _v9;
-   _v11 = strin.max1;
-   _v12 = ecourant <= _v11;
-   _v13 = _v10 and _v12;
+    _v9 =
+	 _calculs_max::struct_max{max1=_v3;max2=_v4;imax1=_v5;imax2=_v6;icourant=_v8};
+   _v10 = strin.max2;
+   _v11 = ecourant > _v10;
+   _v12 = strin.max1;
+   _v13 = ecourant <= _v12;
+   _v14 = _v11 and _v13;
+   _v18 = strin.icourant;
+   _v19 = _v18 + 1;
    _v17 = strin.icourant;
-   _v18 = _v17 + 1;
-   _v16 = strin.icourant;
-   _v15 = strin.imax1;
-   _v14 = strin.max1;
+   _v16 = strin.imax1;
+   _v15 = strin.max1;
+    _v20 =
+	 _calculs_max::struct_max{max1=_v15;max2=ecourant;imax1=_v16;imax2=_v17;icourant=_v19};
+   _v24 = strin.icourant;
+   _v25 = _v24 + 1;
+   _v23 = strin.imax1;
    _v22 = strin.icourant;
-   _v23 = _v22 + 1;
-   _v21 = strin.imax1;
-   _v20 = strin.icourant;
-   _v19 = strin.max1;
-    _v24 =  if _v13 then
-	_calculs_max::struct_max{max1=_v14;max2=ecourant;imax1=_v15;imax2=_v16;icourant=_v18}
-	else
-	 _calculs_max::struct_max{max1=ecourant;max2=_v19;imax1=_v20;imax2=_v21;icourant=_v23};
+   _v21 = strin.max1;
+    _v26 =
+	 _calculs_max::struct_max{max1=ecourant;max2=_v21;imax1=_v22;imax2=_v23;icourant=_v25};
+   _v27 =  if _v14 then _v20 else _v26;
 tel
 -- end of node calculs_max::max
 
@@ -16802,18 +16820,20 @@ var
    tmp:_calculs_max::struct_fill_bool;
    _v2:int;
    _v1:int;
+   _v3:_calculs_max::struct_max;
+   _v5:int;
    _v4:int;
-   _v3:int;
+   _v6:_calculs_max::struct_fill_bool;
 let
-    local_struct = red<<calculs_max::max,
-	10>>(_calculs_max::struct_max{max1=0;max2=0;imax1=_v1;imax2=_v2;icourant=0},
-	 A);
+   local_struct = red<<calculs_max::max, 10>>(_v3, A);
    _v2 = -1;
    _v1 = -1;
-    (tmp, res) = fill<<calculs_max::fill_bool,
-	 10>>(_calculs_max::struct_fill_bool{imax1=_v3;imax2=_v4;icourant=0});
-   _v4 = local_struct.imax2;
-   _v3 = local_struct.imax1;
+    _v3 =
+	 _calculs_max::struct_max{max1=0;max2=0;imax1=_v1;imax2=_v2;icourant=0};
+   (tmp, res) = fill<<calculs_max::fill_bool, 10>>(_v6);
+   _v5 = local_struct.imax2;
+   _v4 = local_struct.imax1;
+   _v6 = _calculs_max::struct_fill_bool{imax1=_v4;imax2=_v5;icourant=0};
 tel
 -- end of node calculs_max::calculs_max
 -- automatically defined aliases:
@@ -16882,9 +16902,10 @@ returns (
 	acknowledge:A_bool_10);
 var
    accu_out:_deSimone::cell_accu;
+   _v1:_deSimone::cell_accu;
 let
-    (accu_out, acknowledge) = fillred<<deSimone::oneCell,
-	 10>>(_deSimone::cell_accu{token=new_token;grant=true}, request);
+   (accu_out, acknowledge) = fillred<<deSimone::oneCell, 10>>(_v1, request);
+   _v1 = _deSimone::cell_accu{token=new_token;grant=true};
 tel
 -- end of node deSimone::deSimone
 node deSimone::prop1(request:A_bool_10) returns (ok:bool);
@@ -17188,9 +17209,10 @@ tel
 node moyenne::moyenne(Tab:A_real_10) returns (moy:real);
 var
    accu_out:_moyenne::moyenne_accu;
+   _v1:_moyenne::moyenne_accu;
 let
-    accu_out = red<<moyenne::moyenne_step,
-	 10>>(_moyenne::moyenne_accu{sum=0.0;moyenne=0.0;rank=0.0}, Tab);
+   accu_out = red<<moyenne::moyenne_step, 10>>(_v1, Tab);
+   _v1 = _moyenne::moyenne_accu{sum=0.0;moyenne=0.0;rank=0.0};
    moy = accu_out.moyenne;
 tel
 -- end of node moyenne::moyenne
@@ -18299,44 +18321,49 @@ var
    accu_out_exchange:_triSel::Exchange_accu;
    localTab:A_int_50;
    _v1:int;
-   _v2:A_int_50;
-   _v3:int;
-   _v4:A_int_50;
+   _v2:_triSel::MinFR_accu;
+   _v3:A_int_50;
+   _v4:int;
+   _v5:_triSel::Select_accu;
+   _v6:A_int_50;
+   _v10:int;
+   _v9:int;
    _v8:int;
    _v7:int;
-   _v6:int;
-   _v5:int;
-   _v9:A_int_50;
-   _v10:int;
-   _v11:int;
+   _v11:_triSel::Exchange_accu;
+   _v12:A_int_50;
+   _v13:int;
+   _v14:int;
 let
-    accu_out_min = red<<triSel::minFromRank,
-	 50>>(_triSel::MinFR_accu{MinVal=0;MinRank=0;RankFrom=_v1;Rank=0}, _v2);
+   accu_out_min = red<<triSel::minFromRank, 50>>(_v2, _v3);
    _v1 = accu_in.CurrentRank;
-   _v2 = accu_in.Tab;
-    accu_out_select = red<<triSel::select,
-	 50>>(_triSel::Select_accu{RankToFind=_v3;CurrentRank=0;Val=0}, _v4);
-   _v3 = accu_in.CurrentRank;
-   _v4 = accu_in.Tab;
-    (accu_out_exchange, localTab) = fillred<<triSel::Exchange_i_j,
-	50>>(_triSel::Exchange_accu{MinVal=_v5;MinRank=_v6;RankFrom=_v7;CurrentVal=_v8;Rank=0},
-	 _v9);
-   _v8 = accu_out_select.Val;
-   _v7 = accu_out_select.RankToFind;
-   _v6 = accu_out_min.MinRank;
-   _v5 = accu_out_min.MinVal;
-   _v9 = accu_in.Tab;
-   accu_out = _triSel::Sort_accu{CurrentRank=_v11;Tab=localTab};
-   _v10 = accu_in.CurrentRank;
-   _v11 = _v10 + 1;
+   _v2 = _triSel::MinFR_accu{MinVal=0;MinRank=0;RankFrom=_v1;Rank=0};
+   _v3 = accu_in.Tab;
+   accu_out_select = red<<triSel::select, 50>>(_v5, _v6);
+   _v4 = accu_in.CurrentRank;
+   _v5 = _triSel::Select_accu{RankToFind=_v4;CurrentRank=0;Val=0};
+   _v6 = accu_in.Tab;
+    (accu_out_exchange, localTab) = fillred<<triSel::Exchange_i_j, 50>>(_v11,
+	 _v12);
+   _v10 = accu_out_select.Val;
+   _v9 = accu_out_select.RankToFind;
+   _v8 = accu_out_min.MinRank;
+   _v7 = accu_out_min.MinVal;
+    _v11 =
+	 _triSel::Exchange_accu{MinVal=_v7;MinRank=_v8;RankFrom=_v9;CurrentVal=_v10;Rank=0};
+   _v12 = accu_in.Tab;
+   accu_out = _triSel::Sort_accu{CurrentRank=_v14;Tab=localTab};
+   _v13 = accu_in.CurrentRank;
+   _v14 = _v13 + 1;
 tel
 -- end of node triSel::UnarySort
 node triSel::triSel(TIn:A_int_50) returns (TSorted:A_int_50);
 var
    UnarySort_accu_out:_triSel::Sort_accu;
+   _v1:_triSel::Sort_accu;
 let
-    UnarySort_accu_out = red<<triSel::UnarySort,
-	 50>>(_triSel::Sort_accu{CurrentRank=0;Tab=TIn}, TIn);
+   UnarySort_accu_out = red<<triSel::UnarySort, 50>>(_v1, TIn);
+   _v1 = _triSel::Sort_accu{CurrentRank=0;Tab=TIn};
    TSorted = UnarySort_accu_out.Tab;
 tel
 -- end of node triSel::triSel
@@ -18363,10 +18390,11 @@ node triSel::Sorted(TIn:A_int_50) returns (ok:bool);
 var
    accu_out:_triSel::sorted_iter_accu;
    TSorted:A_int_50;
+   _v1:_triSel::sorted_iter_accu;
 let
    TSorted = triSel::triSel(TIn);
-    accu_out = red<<triSel::sorted_iter,
-	 50>>(_triSel::sorted_iter_accu{prev_elt=0;prop_is_tt=true}, TSorted);
+   accu_out = red<<triSel::sorted_iter, 50>>(_v1, TSorted);
+   _v1 = _triSel::sorted_iter_accu{prev_elt=0;prop_is_tt=true};
    ok = accu_out.prop_is_tt;
 tel
 -- end of node triSel::Sorted
@@ -18461,10 +18489,12 @@ returns (
 	elementSelected:int);
 var
    iterationResult:_contractForElementSelectionInArray::iteratedStruct;
+   _v1:_contractForElementSelectionInArray::iteratedStruct;
 let
     iterationResult = red<<contractForElementSelectionInArray::selectOneStage,
-	10>>(_contractForElementSelectionInArray::iteratedStruct{currentRank=0;rankToSelect=rankToSelect;elementSelected=0},
-	 array);
+	 10>>(_v1, array);
+    _v1 =
+	 _contractForElementSelectionInArray::iteratedStruct{currentRank=0;rankToSelect=rankToSelect;elementSelected=0};
    elementSelected = iterationResult.elementSelected;
 tel
 -- end of node contractForElementSelectionInArray::selectEltInArray
@@ -18523,9 +18553,10 @@ returns (
 	iselementof:bool);
 var
    acc_out:_intArray::T_isElementOf_;
+   _v1:_intArray::T_isElementOf_;
 let
-    acc_out = red<<intArray::iterated_isElementOf_,
-	 10>>(_intArray::T_isElementOf_{eltToSearch=e;iselementof=false}, t);
+   acc_out = red<<intArray::iterated_isElementOf_, 10>>(_v1, t);
+   _v1 = _intArray::T_isElementOf_{eltToSearch=e;iselementof=false};
    iselementof = acc_out.iselementof;
 tel
 -- end of node intArray::_isElementOf_
@@ -18568,11 +18599,11 @@ returns (
 var
    result:_intArray::forSortingAlgo;
    _v1:int;
+   _v2:_intArray::forSortingAlgo;
 let
-    result = red<<intArray::isLocallyLoselySorted,
-	10>>(_intArray::forSortingAlgo{previousElement=_v1;sortedUpToHere=true},
-	 array);
+   result = red<<intArray::isLocallyLoselySorted, 10>>(_v2, array);
    _v1 = array[0];
+   _v2 = _intArray::forSortingAlgo{previousElement=_v1;sortedUpToHere=true};
    array_isLoselySorted = result.sortedUpToHere;
 tel
 -- end of node intArray::_isLoselySorted
@@ -18728,45 +18759,50 @@ var
    localTab:A_int_10;
    _v2:int;
    _v1:int;
-   _v3:A_int_10;
-   _v4:int;
-   _v5:A_int_10;
+   _v3:_intArray::MinFR_accu;
+   _v4:A_int_10;
+   _v5:int;
+   _v6:_intArray::Select_accu;
+   _v7:A_int_10;
+   _v11:int;
+   _v10:int;
    _v9:int;
    _v8:int;
-   _v7:int;
-   _v6:int;
-   _v10:A_int_10;
-   _v11:int;
-   _v12:int;
+   _v12:_intArray::Exchange_accu;
+   _v13:A_int_10;
+   _v14:int;
+   _v15:int;
 let
-    accu_out_min = red<<intArray::minFromRank,
-	 10>>(_intArray::MinFR_accu{MinVal=0;MinRank=_v1;RankFrom=_v2;Rank=0}, _v3);
+   accu_out_min = red<<intArray::minFromRank, 10>>(_v3, _v4);
    _v2 = accu_in.CurrentRank;
    _v1 = accu_in.CurrentRank;
-   _v3 = accu_in.Tab;
-    accu_out_select = red<<intArray::select,
-	 10>>(_intArray::Select_accu{RankToFind=_v4;CurrentRank=0;Val=0}, _v5);
-   _v4 = accu_in.CurrentRank;
-   _v5 = accu_in.Tab;
+   _v3 = _intArray::MinFR_accu{MinVal=0;MinRank=_v1;RankFrom=_v2;Rank=0};
+   _v4 = accu_in.Tab;
+   accu_out_select = red<<intArray::select, 10>>(_v6, _v7);
+   _v5 = accu_in.CurrentRank;
+   _v6 = _intArray::Select_accu{RankToFind=_v5;CurrentRank=0;Val=0};
+   _v7 = accu_in.Tab;
     (accu_out_exchange, localTab) = fillred<<intArray::Exchange_i_j,
-	10>>(_intArray::Exchange_accu{MinVal=_v6;MinRank=_v7;RankFrom=_v8;CurrentVal=_v9;Rank=0},
-	 _v10);
-   _v9 = accu_out_select.Val;
-   _v8 = accu_out_select.RankToFind;
-   _v7 = accu_out_min.MinRank;
-   _v6 = accu_out_min.MinVal;
-   _v10 = accu_in.Tab;
-   accu_out = _intArray::Sort_accu{CurrentRank=_v12;Tab=localTab};
-   _v11 = accu_in.CurrentRank;
-   _v12 = _v11 + 1;
+	 10>>(_v12, _v13);
+   _v11 = accu_out_select.Val;
+   _v10 = accu_out_select.RankToFind;
+   _v9 = accu_out_min.MinRank;
+   _v8 = accu_out_min.MinVal;
+    _v12 =
+	 _intArray::Exchange_accu{MinVal=_v8;MinRank=_v9;RankFrom=_v10;CurrentVal=_v11;Rank=0};
+   _v13 = accu_in.Tab;
+   accu_out = _intArray::Sort_accu{CurrentRank=_v15;Tab=localTab};
+   _v14 = accu_in.CurrentRank;
+   _v15 = _v14 + 1;
 tel
 -- end of node intArray::UnarySort
 node intArray::sort_(array:A_int_10) returns (arraySorted:A_int_10);
 var
    UnarySort_accu_out:_intArray::Sort_accu;
+   _v1:_intArray::Sort_accu;
 let
-    UnarySort_accu_out = red<<intArray::UnarySort,
-	 10>>(_intArray::Sort_accu{CurrentRank=0;Tab=array}, array);
+   UnarySort_accu_out = red<<intArray::UnarySort, 10>>(_v1, array);
+   _v1 = _intArray::Sort_accu{CurrentRank=0;Tab=array};
    arraySorted = UnarySort_accu_out.Tab;
 tel
 -- end of node intArray::sort_
@@ -18828,11 +18864,12 @@ returns (
 var
    iterationResult:_intArray::iteratedStruct;
    _v1:int;
+   _v2:_intArray::iteratedStruct;
 let
-    iterationResult = red<<intArray::selectOneStage,
-	10>>(_intArray::iteratedStruct{currentRank=0;rankToSelect=rankToSelect;elementSelected=_v1},
-	 array);
+   iterationResult = red<<intArray::selectOneStage, 10>>(_v2, array);
    _v1 = array[0];
+    _v2 =
+	 _intArray::iteratedStruct{currentRank=0;rankToSelect=rankToSelect;elementSelected=_v1};
    elementSelected = iterationResult.elementSelected;
 tel
 -- end of node intArray::selectElementOfRank_inArray_
@@ -18899,11 +18936,12 @@ returns (
 var
    local:_intArray::currentRank_withMemorizedRank;
    _v1:int;
+   _v2:_intArray::currentRank_withMemorizedRank;
 let
-    local = red<<intArray::selectMaxRank,
-	10>>(_intArray::currentRank_withMemorizedRank{currentRank=0;rankOfMemorizedVal=0;memorizedVal=_v1},
-	 array);
+   local = red<<intArray::selectMaxRank, 10>>(_v2, array);
    _v1 = array[0];
+    _v2 =
+	 _intArray::currentRank_withMemorizedRank{currentRank=0;rankOfMemorizedVal=0;memorizedVal=_v1};
    rankOfMaximumElement = local.rankOfMemorizedVal;
 tel
 -- end of node intArray::getRank_ofMaximumIn_
@@ -18943,12 +18981,13 @@ returns (
 var
    minElement:int;
    _v1:_intArray::currentRank_withMemorizedRank;
+   _v2:_intArray::currentRank_withMemorizedRank;
 let
    minElement = intArray::getMinimumIn_(array);
-   rankOfMinimumElement = _v1.rankOfMemorizedVal;
-    _v1 = red<<intArray::selectMinRank,
-	10>>(_intArray::currentRank_withMemorizedRank{currentRank=0;rankOfMemorizedVal=0;memorizedVal=minElement},
-	 array);
+   rankOfMinimumElement = _v2.rankOfMemorizedVal;
+    _v1 =
+	 _intArray::currentRank_withMemorizedRank{currentRank=0;rankOfMemorizedVal=0;memorizedVal=minElement};
+   _v2 = red<<intArray::selectMinRank, 10>>(_v1, array);
 tel
 -- end of node intArray::getRank_ofMinimumIn_
 
@@ -19149,49 +19188,54 @@ var
    localTab:A_int_10;
    _v2:int;
    _v1:int;
-   _v3:A_int_10;
-   _v4:int;
-   _v5:A_int_10;
+   _v3:_tri::MinFR_accu;
+   _v4:A_int_10;
+   _v5:int;
+   _v6:_tri::Select_accu;
+   _v7:A_int_10;
+   _v11:int;
+   _v10:int;
    _v9:int;
    _v8:int;
-   _v7:int;
-   _v6:int;
-   _v10:A_int_10;
-   _v11:int;
-   _v12:int;
+   _v12:_tri::Exchange_accu;
+   _v13:A_int_10;
+   _v14:int;
+   _v15:int;
 let
-    accu_out_min = red<<tri::minFromRank,
-	 10>>(_tri::MinFR_accu{MinVal=0;MinRank=_v1;RankFrom=_v2;Rank=0}, _v3);
+   accu_out_min = red<<tri::minFromRank, 10>>(_v3, _v4);
    _v2 = accu_in.CurrentRank;
    _v1 = accu_in.CurrentRank;
-   _v3 = accu_in.Tab;
-    accu_out_select = red<<tri::select,
-	 10>>(_tri::Select_accu{RankToFind=_v4;CurrentRank=0;Val=0}, _v5);
-   _v4 = accu_in.CurrentRank;
-   _v5 = accu_in.Tab;
-    (accu_out_exchange, localTab) = fillred<<tri::Exchange_i_j,
-	10>>(_tri::Exchange_accu{MinVal=_v6;MinRank=_v7;RankFrom=_v8;CurrentVal=_v9;Rank=0},
-	 _v10);
-   _v9 = accu_out_select.Val;
-   _v8 = accu_out_select.RankToFind;
-   _v7 = accu_out_min.MinRank;
-   _v6 = accu_out_min.MinVal;
-   _v10 = accu_in.Tab;
-   accu_out = _tri::Sort_accu{CurrentRank=_v12;Tab=localTab};
-   _v11 = accu_in.CurrentRank;
-   _v12 = _v11 + 1;
+   _v3 = _tri::MinFR_accu{MinVal=0;MinRank=_v1;RankFrom=_v2;Rank=0};
+   _v4 = accu_in.Tab;
+   accu_out_select = red<<tri::select, 10>>(_v6, _v7);
+   _v5 = accu_in.CurrentRank;
+   _v6 = _tri::Select_accu{RankToFind=_v5;CurrentRank=0;Val=0};
+   _v7 = accu_in.Tab;
+    (accu_out_exchange, localTab) = fillred<<tri::Exchange_i_j, 10>>(_v12,
+	 _v13);
+   _v11 = accu_out_select.Val;
+   _v10 = accu_out_select.RankToFind;
+   _v9 = accu_out_min.MinRank;
+   _v8 = accu_out_min.MinVal;
+    _v12 =
+	 _tri::Exchange_accu{MinVal=_v8;MinRank=_v9;RankFrom=_v10;CurrentVal=_v11;Rank=0};
+   _v13 = accu_in.Tab;
+   accu_out = _tri::Sort_accu{CurrentRank=_v15;Tab=localTab};
+   _v14 = accu_in.CurrentRank;
+   _v15 = _v14 + 1;
 tel
 -- end of node tri::UnarySort
 node tri::main(TIn:A_int_10) returns (TSorted:A_int_10);
 var
    UnarySort_accu_out:_tri::Sort_accu;
    _v1:A_int_10;
-   _v2:A_int_10;
+   _v2:_tri::Sort_accu;
+   _v3:A_int_10;
 let
-    UnarySort_accu_out = red<<tri::UnarySort,
-	 10>>(_tri::Sort_accu{CurrentRank=0;Tab=_v1}, _v2);
+   UnarySort_accu_out = red<<tri::UnarySort, 10>>(_v2, _v3);
    _v1 = [7, 8, 4, 3, 2, 9, 1, 10, 2, 7];
-   _v2 = [7, 8, 4, 3, 2, 9, 1, 10, 2, 7];
+   _v2 = _tri::Sort_accu{CurrentRank=0;Tab=_v1};
+   _v3 = [7, 8, 4, 3, 2, 9, 1, 10, 2, 7];
    TSorted = UnarySort_accu_out.Tab;
 tel
 -- end of node tri::main
@@ -19218,10 +19262,11 @@ node tri::Sorted(TIn:A_int_10) returns (res:bool);
 var
    accu_out:_tri::sorted_iter_accu;
    TSorted:A_int_10;
+   _v1:_tri::sorted_iter_accu;
 let
    TSorted = tri::main(TIn);
-    accu_out = red<<tri::sorted_iter,
-	 10>>(_tri::sorted_iter_accu{prev_elt=0;prop_is_tt=true}, TSorted);
+   accu_out = red<<tri::sorted_iter, 10>>(_v1, TSorted);
+   _v1 = _tri::sorted_iter_accu{prev_elt=0;prop_is_tt=true};
    res = accu_out.prop_is_tt;
 tel
 -- end of node tri::Sorted