diff --git a/src/plugins/e-acsl/src/main.ml b/src/plugins/e-acsl/src/main.ml
index 194e1e54f8ef8aa2ad9222a64449a4be1e083733..179208761e50a057c0383b80ad0c7079c6fcaa61 100644
--- a/src/plugins/e-acsl/src/main.ml
+++ b/src/plugins/e-acsl/src/main.ml
@@ -40,19 +40,7 @@ let generate_code =
     (fun name ->
        Options.feedback "beginning translation.";
        Temporal.enable (Options.Temporal_validity.get ());
-       if Plugin.is_present "variadic" then begin
-         let opt_name = "-variadic-translation" in
-         if Dynamic.Parameter.Bool.get opt_name () &&
-            Options.Validate_format_strings.get () then begin
-           if Ast.is_computed () then
-             Options.abort
-               "The variadic translation is incompatible with E-ACSL option \
-                '%s'.@ Please use option '-variadic-no-translation'."
-               Options.Validate_format_strings.option_name;
-           Options.warning "deactivating variadic translation";
-           Dynamic.Parameter.Bool.off opt_name ();
-         end
-       end;
+       Options.setup ();
        (* slightly more efficient to copy the project before computing the AST
           if it is not yet computed *)
        let rtl_prj_name = Options.Project_name.get () ^ " RTL" in
diff --git a/src/plugins/e-acsl/src/options.ml b/src/plugins/e-acsl/src/options.ml
index e4f6bdddd94e5c6ad94c656f6e85e0dea9120e16..cc172a073cca608159d727b83e34df66c02e3a13 100644
--- a/src/plugins/e-acsl/src/options.ml
+++ b/src/plugins/e-acsl/src/options.ml
@@ -177,6 +177,35 @@ let dkey_prepare = register_category "preparation"
 let dkey_translation = register_category "translation"
 let dkey_typing = register_category "typing"
 
+let setup ?(rtl=false) () =
+  (* Variadic translation *)
+  if Plugin.is_present "variadic" then begin
+    let opt_name = "-variadic-translation" in
+    if Dynamic.Parameter.Bool.get opt_name () then begin
+      if rtl then
+        (* If we are translating the RTL project, then we need to deactivate the
+           variadic translation. Indeed since we are translating the RTL in
+           isolation, we do not now if the variadic functions are used by the
+            user project and we cannot monomorphise them accordingly. *)
+        Dynamic.Parameter.Bool.off opt_name ()
+      else if Validate_format_strings.get () then begin
+        if Ast.is_computed () then
+          abort
+            "The variadic translation is incompatible with E-ACSL option \
+             '%s'.@ Please use option '-variadic-no-translation'."
+            Validate_format_strings.option_name;
+        warning ~once:true "deactivating variadic translation";
+        Dynamic.Parameter.Bool.off opt_name ();
+      end
+    end
+  end;
+  (* Additionnal kernel options while parsing the RTL project. *)
+  if rtl then begin
+    Kernel.Keep_unused_specified_functions.off ();
+    Kernel.CppExtraArgs.add
+      (Format.asprintf " -DE_ACSL_MACHDEP=%s" (Kernel.Machdep.get ()));
+  end
+
 (*
 Local Variables:
 compile-command: "make -C ../../../.."
diff --git a/src/plugins/e-acsl/src/options.mli b/src/plugins/e-acsl/src/options.mli
index eda2b4a31e1271bd08c5cdf9d9ee8c72323e6bde..ec3f385c089743a1901f0a52b355cd22ea42c6e1 100644
--- a/src/plugins/e-acsl/src/options.mli
+++ b/src/plugins/e-acsl/src/options.mli
@@ -46,6 +46,11 @@ val dkey_prepare: category
 val dkey_translation: category
 val dkey_typing: category
 
+val setup: ?rtl:bool -> unit -> unit
+(** Verify and initialize the options of the current project according to the
+    options set by the user.
+    If [rtl] is true, then the project being modified is the RTL project. *)
+
 (*
 Local Variables:
 compile-command: "make -C ../../../.."
diff --git a/src/plugins/e-acsl/src/project_initializer/rtl.ml b/src/plugins/e-acsl/src/project_initializer/rtl.ml
index 2666f70349900e1e38437991b775f84f36ae1f90..c48aa7a7e8f48c066a20b77dde02d94992f99dea 100644
--- a/src/plugins/e-acsl/src/project_initializer/rtl.ml
+++ b/src/plugins/e-acsl/src/project_initializer/rtl.ml
@@ -31,11 +31,7 @@ let create_rtl_ast prj =
     prj
     (fun () ->
        (* compute the RTL AST in the standard E-ACSL setting *)
-       if Plugin.is_present "variadic" then
-         Dynamic.Parameter.Bool.off "-variadic-translation" ();
-       Kernel.Keep_unused_specified_functions.off ();
-       Kernel.CppExtraArgs.add
-         (Format.asprintf " -DE_ACSL_MACHDEP=%s" (Kernel.Machdep.get ()));
+       Options.setup ~rtl:true ();
        Kernel.Files.set [ rtl_file () ];
        Ast.get ())
     ()