diff --git a/src/clock_predef.ml b/src/clock_predef.ml
index 7c1a0a5d790ad3f06d94e955fbeaa6482f4909b1..24669fd2f2f653b5e059d9a1c629aaa424136c55 100644
--- a/src/clock_predef.ml
+++ b/src/clock_predef.ml
@@ -14,6 +14,8 @@
 (** Predefined operator clocks *)
 open Clocks
 
+let ck_tuple cl = new_ck (Ctuple cl) true
+
 let ck_bin_univ =
   let univ = new_univar () in
   new_ck (Carrow (new_ck (Ctuple [univ;univ]) true, univ)) true
diff --git a/src/corelang.ml b/src/corelang.ml
index 3ff58c0577969e714978c32b28a39e1838356847..c819feef297656e57a6d45d9746518734d0ff302 100755
--- a/src/corelang.ml
+++ b/src/corelang.ml
@@ -391,7 +391,14 @@ let expr_list_of_expr expr =
 let expr_of_expr_list loc elist =
  match elist with
  | [t]  -> { t with expr_loc = loc }
- | t::_ -> { t with expr_desc = Expr_tuple elist; expr_loc = loc }
+ | t::_ ->
+    let tlist = List.map (fun e -> e.expr_type) elist in
+    let clist = List.map (fun e -> e.expr_clock) elist in
+    { t with expr_desc = Expr_tuple elist;
+	     expr_type = Type_predef.type_tuple tlist;
+	     expr_clock = Clock_predef.ck_tuple clist;
+	     expr_tag = Utils.new_tag ();
+	     expr_loc = loc }
  | _    -> assert false
 
 let call_of_expr expr =
diff --git a/src/inliner.ml b/src/inliner.ml
index eb9fa16e91b6f0344e9cfe305ef128cf86107b0b..87f792b911e763a635d3a16f6af82c15ccaae16e 100644
--- a/src/inliner.ml
+++ b/src/inliner.ml
@@ -62,6 +62,7 @@ let inline_call orig_expr args reset locals node =
   assert (reset = None);
 
   let assign_inputs = mkeq loc (List.map (fun v -> v.var_id) inputs', args) in
+  let assign_inputs = Splitting.tuple_split_eq assign_inputs in
   let expr = expr_of_expr_list 
     loc 
     (List.map (fun v -> mkexpr loc (Expr_ident v.var_id)) outputs')
@@ -77,7 +78,7 @@ let inline_call orig_expr args reset locals node =
   in
   expr, 
   inputs'@outputs'@locals'@locals, 
-  assign_inputs::eqs',
+  assign_inputs@eqs',
   asserts'
 
 
@@ -118,8 +119,7 @@ let rec inline_expr expr locals nodes =
       (* let _ =     Format.eprintf "Inlining call to %s@." id in *)
       let node = try List.find (check_node_name id) nodes 
 	with Not_found -> (assert false) in
-      let node = 
-	match node.top_decl_desc with Node nd -> nd | _ -> assert false in
+      let node = node_of_top node in
       let node = inline_node node nodes in
       let expr, locals', eqs'', asserts'' = 
 	inline_call expr args' reset locals' node in
diff --git a/src/machine_code.ml b/src/machine_code.ml
index 2b4b4ab4c0d840284622b6194b9c24a79da9e5ed..715dfc71d16ec399f1646a90be282ffab1d85a1c 100644
--- a/src/machine_code.ml
+++ b/src/machine_code.ml
@@ -425,6 +425,9 @@ let find_eq xl eqs =
    to the computed schedule [sch]
 *)
 let sort_equations_from_schedule nd sch =
+(*  Format.eprintf "%s schedule: %a@."
+		 nd.node_id
+		 (Utils.fprintf_list ~sep:" ; " Scheduling.pp_eq_schedule) sch;*)
   let split_eqs = Splitting.tuple_split_eq_list nd.node_eqs in
   let eqs_rev, remainder =
     List.fold_left 
@@ -439,12 +442,14 @@ let sort_equations_from_schedule nd sch =
       ([], split_eqs) 
       sch 
   in
-  if List.length remainder > 0 then (
-    Format.eprintf "Equations not used are@.%a@.Full equation set is:@.%a@.@?"
-		   Printers.pp_node_eqs remainder
-      		   Printers.pp_node_eqs nd.node_eqs;
-    assert false);
-  List.rev eqs_rev
+  begin
+    if List.length remainder > 0 then (
+      Format.eprintf "Equations not used are@.%a@.Full equation set is:@.%a@.@?"
+		     Printers.pp_node_eqs remainder
+      		     Printers.pp_node_eqs nd.node_eqs;
+      assert false);
+    List.rev eqs_rev
+  end
 
 let translate_eqs node args eqs =
   List.fold_right (fun eq args -> translate_eq node args eq) eqs args;;
diff --git a/src/printers.ml b/src/printers.ml
index 504dd06a7dc31d1a64c917a49e2e32e78142e168..7ea7105fda8920365c4563198b966c123568d2f1 100644
--- a/src/printers.ml
+++ b/src/printers.ml
@@ -85,31 +85,30 @@ and pp_handlers fmt hl =
 
 and pp_app fmt id e r =
   match r with
-  | None ->
-    (match id, e.expr_desc with
-    | "+", Expr_tuple([e1;e2]) -> fprintf fmt "(%a + %a)" pp_expr e1 pp_expr e2
-    | "uminus", _ -> fprintf fmt "(- %a)" pp_expr e
-    | "-", Expr_tuple([e1;e2]) -> fprintf fmt "(%a - %a)" pp_expr e1 pp_expr e2
-    | "*", Expr_tuple([e1;e2]) -> fprintf fmt "(%a * %a)" pp_expr e1 pp_expr e2
-    | "/", Expr_tuple([e1;e2]) -> fprintf fmt "(%a / %a)" pp_expr e1 pp_expr e2
-    | "mod", Expr_tuple([e1;e2]) -> fprintf fmt "(%a mod %a)" pp_expr e1 pp_expr e2
-    | "&&", Expr_tuple([e1;e2]) -> fprintf fmt "(%a and %a)" pp_expr e1 pp_expr e2
-    | "||", Expr_tuple([e1;e2]) -> fprintf fmt "(%a or %a)" pp_expr e1 pp_expr e2
-    | "xor", Expr_tuple([e1;e2]) -> fprintf fmt "(%a xor %a)" pp_expr e1 pp_expr e2
-    | "impl", Expr_tuple([e1;e2]) -> fprintf fmt "(%a => %a)" pp_expr e1 pp_expr e2
-    | "<", Expr_tuple([e1;e2]) -> fprintf fmt "(%a < %a)" pp_expr e1 pp_expr e2
-    | "<=", Expr_tuple([e1;e2]) -> fprintf fmt "(%a <= %a)" pp_expr e1 pp_expr e2
-    | ">", Expr_tuple([e1;e2]) -> fprintf fmt "(%a > %a)" pp_expr e1 pp_expr e2
-    | ">=", Expr_tuple([e1;e2]) -> fprintf fmt "(%a >= %a)" pp_expr e1 pp_expr e2
-    | "!=", Expr_tuple([e1;e2]) -> fprintf fmt "(%a != %a)" pp_expr e1 pp_expr e2
-    | "=", Expr_tuple([e1;e2]) -> fprintf fmt "(%a = %a)" pp_expr e1 pp_expr e2
-    | "not", _ -> fprintf fmt "(not %a)" pp_expr e
-    | _, Expr_tuple _ -> fprintf fmt "%s %a" id pp_expr e
-    | _ -> fprintf fmt "%s (%a)" id pp_expr e
-)
-  | Some (x, l) -> fprintf fmt "%s (%a) every %s(%s)" id pp_expr e l x 
-
-
+  | None -> pp_call fmt id e
+  | Some (x, l) -> fprintf fmt "%t every %s(%s)" (fun fmt -> pp_call fmt id e) l x 
+
+and pp_call fmt id e =
+  match id, e.expr_desc with
+  | "+", Expr_tuple([e1;e2]) -> fprintf fmt "(%a + %a)" pp_expr e1 pp_expr e2
+  | "uminus", _ -> fprintf fmt "(- %a)" pp_expr e
+  | "-", Expr_tuple([e1;e2]) -> fprintf fmt "(%a - %a)" pp_expr e1 pp_expr e2
+  | "*", Expr_tuple([e1;e2]) -> fprintf fmt "(%a * %a)" pp_expr e1 pp_expr e2
+  | "/", Expr_tuple([e1;e2]) -> fprintf fmt "(%a / %a)" pp_expr e1 pp_expr e2
+  | "mod", Expr_tuple([e1;e2]) -> fprintf fmt "(%a mod %a)" pp_expr e1 pp_expr e2
+  | "&&", Expr_tuple([e1;e2]) -> fprintf fmt "(%a and %a)" pp_expr e1 pp_expr e2
+  | "||", Expr_tuple([e1;e2]) -> fprintf fmt "(%a or %a)" pp_expr e1 pp_expr e2
+  | "xor", Expr_tuple([e1;e2]) -> fprintf fmt "(%a xor %a)" pp_expr e1 pp_expr e2
+  | "impl", Expr_tuple([e1;e2]) -> fprintf fmt "(%a => %a)" pp_expr e1 pp_expr e2
+  | "<", Expr_tuple([e1;e2]) -> fprintf fmt "(%a < %a)" pp_expr e1 pp_expr e2
+  | "<=", Expr_tuple([e1;e2]) -> fprintf fmt "(%a <= %a)" pp_expr e1 pp_expr e2
+  | ">", Expr_tuple([e1;e2]) -> fprintf fmt "(%a > %a)" pp_expr e1 pp_expr e2
+  | ">=", Expr_tuple([e1;e2]) -> fprintf fmt "(%a >= %a)" pp_expr e1 pp_expr e2
+  | "!=", Expr_tuple([e1;e2]) -> fprintf fmt "(%a != %a)" pp_expr e1 pp_expr e2
+  | "=", Expr_tuple([e1;e2]) -> fprintf fmt "(%a = %a)" pp_expr e1 pp_expr e2
+  | "not", _ -> fprintf fmt "(not %a)" pp_expr e
+  | _, Expr_tuple _ -> fprintf fmt "%s %a" id pp_expr e
+  | _ -> fprintf fmt "%s (%a)" id pp_expr e
 
 and pp_eexpr fmt e =
   fprintf fmt "%a%t %a"