diff --git a/src/backends/backends.ml b/src/backends/backends.ml
index b0d4f81706d11ca95b6f25f4adb5a0ee3c36bff3..c4a4f012786d48974acd9891cde7831afd355da1 100644
--- a/src/backends/backends.ml
+++ b/src/backends/backends.ml
@@ -2,14 +2,14 @@
 let join_guards = ref true
 
 let setup () =
-  match !Options.output with
-  | "emf" ->
-     (* Not merging branches *)
-     join_guards := false;
-     (* In case of a default "int" type, substitute it with the legal int32 value *)
-     if !Options.int_type = "int" then
-       Options.int_type := "int32"
-  | _ -> ()
+  if !Options.output = "emf" then begin
+    (* Not merging branches *)
+    join_guards := false;
+    (* In case of a default "int" type, substitute it with the legal int32 value *)
+    if !Options.int_type = "int" then Options.int_type := "int32"
+  end;
+  if !Options.optimization < 0 then
+    join_guards := false
 
 let is_functional () = 
   match !Options.output with
diff --git a/src/main_lustre_compiler.ml b/src/main_lustre_compiler.ml
index f667d00e544f64464613f93169a57aa38ffe296d..15cfb58e90ec3c295ee9d3ad8caff5b31ba7715a 100644
--- a/src/main_lustre_compiler.ml
+++ b/src/main_lustre_compiler.ml
@@ -57,7 +57,7 @@ let compile dirname basename extension =
   let params = Backends.get_normalization_params () in
 
   let prog, dependencies = 
-    Log.report ~level:1 (fun fmt -> fprintf fmt "@[<v 2>.. Phase 1 : Normalisation@,");
+    Log.report ~level:1 (fun fmt -> fprintf fmt "@[<v 2>.. Phase 1: Normalisation@,");
     try 
       Compiler_stages.stage1 params prog dirname basename extension
     with Compiler_stages.StopPhase1 prog -> (
@@ -124,11 +124,12 @@ let anonymous filename =
       else
 	ok, ext)
     (false, "") extensions in
-  if ok_ext then
+  if ok_ext then begin
+    Options_management.setup();
     let dirname = Filename.dirname filename in
     let basename = Filename.chop_suffix (Filename.basename filename) ext in
     compile dirname basename ext
-  else
+  end else
     raise (Arg.Bad ("Can only compile *.lusi, *.lus or *.ec files"))
 
 let _ =
diff --git a/src/options.ml b/src/options.ml
index 4d87b07655b98226e15c47eedf38a13bd297d1da..57decf9bce524876c9fcd8eeb7367f28de06e4d4 100644
--- a/src/options.ml
+++ b/src/options.ml
@@ -65,8 +65,7 @@ let al_nb_max = ref 15
 
 (* Printer options *)
 let kind2_print = ref false
-                    
-                  
+
 (* Local Variables: *)
 (* compile-command:"make -C .." *)
 (* End: *)
diff --git a/src/options_management.ml b/src/options_management.ml
index b094172631ab2fa454fe3347f613d8f0791c9584..dd81492f253f74b13122b724d576b7efc14b3505 100644
--- a/src/options_management.ml
+++ b/src/options_management.ml
@@ -88,10 +88,12 @@ let set_real_type s =
     )
   | _ -> real_type := s
 
-let set_backend s =
-  output := s;
+let setup () =
   Backends.setup ()
 
+let set_backend s =
+  output := s
+
 let common_options =
   [ "-d", Arg.Set_string dest_dir, "uses the specified \x1b[4mdirectory\x1b[0m as root for generated/imported object and C files <default: .>";
     "-I", Arg.String add_include_dir, "sets include \x1b[4mdirectory\x1b[0m";