diff --git a/src/plugins/e-acsl/src/code_generator/injector.ml b/src/plugins/e-acsl/src/code_generator/injector.ml
index 49f1da4d1c25f2bacb000c77510c3eaef337784e..020e915946b61586f8c2aa4e286b06c7eeb2c7c5 100644
--- a/src/plugins/e-acsl/src/code_generator/injector.ml
+++ b/src/plugins/e-acsl/src/code_generator/injector.ml
@@ -315,7 +315,7 @@ let add_new_block_in_stmt env kf stmt =
       let res = Smart_stmt.block new_stmt post_block in
       res, env
   in
-  Options.debug ~level:4
+  Options.debug ~dkey ~level:4
     "@[new stmt (from sid %d):@ %a@]" stmt.sid Printer.pp_stmt new_stmt;
   new_stmt, env
 
diff --git a/src/plugins/e-acsl/src/code_generator/logic_functions.ml b/src/plugins/e-acsl/src/code_generator/logic_functions.ml
index 9dcb920b211da97cf9163c4fcf8ecbfdf4da2039..71c2b7bef6236e13ad824950d2a7f1715d80e368 100644
--- a/src/plugins/e-acsl/src/code_generator/logic_functions.ml
+++ b/src/plugins/e-acsl/src/code_generator/logic_functions.ml
@@ -488,7 +488,7 @@ let app_to_exp ~adata ~loc ?tapp kf env ?eargs li targs =
                        env
                        kf
                        (Some ty)
-                       Typed_number.C_number
+                       Analyses_types.C_number
                        (Some targ)
                        earg
                    with Typing.Not_a_number ->
diff --git a/src/plugins/e-acsl/src/code_generator/translate_predicates.ml b/src/plugins/e-acsl/src/code_generator/translate_predicates.ml
index 39286fcdf9e2e26c72eea4647970fb4115567cae..c885230cc46982ff84f4f8b10026c54afff6859e 100644
--- a/src/plugins/e-acsl/src/code_generator/translate_predicates.ml
+++ b/src/plugins/e-acsl/src/code_generator/translate_predicates.ml
@@ -327,17 +327,7 @@ and to_exp ~adata ?inplace ?name kf ?rte env p =
            in
            let env = if rte then !translate_rte_exp_ref kf env e else env in
            let env = Assert.do_pending_register_data env in
-           Extlib.nest
-             adata
-             (Typed_number.add_cast
-                ~loc:p.pred_loc
-                ?name
-                env
-                kf
-                None
-                Typed_number.C_number
-                None
-                e)
+           (e, adata), env
          )
        env)
 
diff --git a/src/plugins/e-acsl/src/code_generator/translate_terms.ml b/src/plugins/e-acsl/src/code_generator/translate_terms.ml
index ab384697b41d6ce00b5ea789af5c17f1958fba73..c025a21d2518cdf93c425fb62598490a35fc7275 100644
--- a/src/plugins/e-acsl/src/code_generator/translate_terms.ml
+++ b/src/plugins/e-acsl/src/code_generator/translate_terms.ml
@@ -48,7 +48,7 @@ let translate_rte_exp_ref
 let constant_to_exp ~loc env t c =
   let mk_real s =
     let s = Gmp.Q.normalize_str s in
-    Cil.mkString ~loc s, Typed_number.Str_R
+    Cil.mkString ~loc s, Analyses_types.Str_R
   in
   match c with
   | Integer(n, _repr) ->
@@ -58,7 +58,7 @@ let constant_to_exp ~loc env t c =
      | Nan -> assert false
      | Real -> Error.not_yet "real number constant"
      | Rational -> mk_real (Integer.to_string n)
-     | Gmpz -> Cil.mkString ~loc (Integer.to_string n), Typed_number.Str_Z
+     | Gmpz -> Cil.mkString ~loc (Integer.to_string n), Analyses_types.Str_Z
      (* too large integer *)
      | C_float fkind ->
        Cil.kfloat ~loc fkind (Int64.to_float (Integer.to_int64_exn n)), C_number
@@ -67,7 +67,7 @@ let constant_to_exp ~loc env t c =
        match cast, kind with
        | Some ty, (ILongLong | IULongLong) when Gmp_types.Z.is_t ty ->
          (* too large integer *)
-         Cil.mkString ~loc (Integer.to_string n), Typed_number.Str_Z
+         Cil.mkString ~loc (Integer.to_string n), Analyses_types.Str_Z
        | Some ty, _ when Gmp_types.Q.is_t ty ->
          mk_real (Integer.to_string n)
        | (None | Some _), _ ->
@@ -77,15 +77,15 @@ let constant_to_exp ~loc env t c =
             long] addition and so [1LL]. If we keep the initial string
             representation, the kind would be ignored in the generated code and
             so [1] would be generated. *)
-         Cil.kinteger64 ~loc ~kind n, Typed_number.C_number)
-  | LStr s -> Cil.new_exp ~loc (Const (CStr s)), Typed_number.C_number
-  | LWStr s -> Cil.new_exp ~loc (Const (CWStr s)), Typed_number.C_number
-  | LChr c -> Cil.new_exp ~loc (Const (CChr c)), Typed_number.C_number
+         Cil.kinteger64 ~loc ~kind n, Analyses_types.C_number)
+  | LStr s -> Cil.new_exp ~loc (Const (CStr s)), Analyses_types.C_number
+  | LWStr s -> Cil.new_exp ~loc (Const (CWStr s)), Analyses_types.C_number
+  | LChr c -> Cil.new_exp ~loc (Const (CChr c)), Analyses_types.C_number
   | LReal lr ->
     if lr.r_lower = lr.r_upper
-    then Cil.kfloat ~loc FDouble lr.r_nearest, Typed_number.C_number
+    then Cil.kfloat ~loc FDouble lr.r_nearest, Analyses_types.C_number
     else mk_real lr.r_literal
-  | LEnum e -> Cil.new_exp ~loc (Const (CEnum e)), Typed_number.C_number
+  | LEnum e -> Cil.new_exp ~loc (Const (CEnum e)), Analyses_types.C_number
 
 (* Create and initialize a variable in the [env] according to [ty], [name] and
    [exp_init], return a tuple [varinfo * exp] and the [env] extended with the
@@ -255,7 +255,7 @@ and extended_quantifier_to_exp ~adata ~loc kf env t t_min t_max lambda name =
     Env.Logic_binding.remove env k;
     let env = Env.add_stmt env (Smart_stmt.block_stmt final_stmt) in
     let adata = Assert.register_term ~loc t acc_as_exp adata in
-    acc_as_exp, adata, env, Typed_number.C_number, ""
+    acc_as_exp, adata, env, Analyses_types.C_number, ""
   | _ ->
     assert false
 
@@ -270,29 +270,29 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
     let lv, env, name = tlval_to_lval kf env lv in
     let e = Smart_exp.lval ~loc lv in
     let adata = Assert.register_term ~loc t e adata in
-    e, adata, env, Typed_number.C_number, name
+    e, adata, env, Analyses_types.C_number, name
   | TSizeOf ty ->
     let e = Cil.sizeOf ~loc ty in
     let adata = Assert.register_term ~loc ~force:true t e adata in
-    e, adata, env, Typed_number.C_number, "sizeof"
+    e, adata, env, Analyses_types.C_number, "sizeof"
   | TSizeOfE t' ->
     let e', _, env = to_exp ~adata:Assert.no_data kf env t' in
     let e = Cil.sizeOf ~loc (Cil.typeOf e') in
     let adata = Assert.register_term ~loc ~force:true t e adata in
-    e, adata, env, Typed_number.C_number, "sizeof"
+    e, adata, env, Analyses_types.C_number, "sizeof"
   | TSizeOfStr s ->
     let e = Cil.new_exp ~loc (SizeOfStr s) in
     let adata = Assert.register_term ~loc t e adata in
-    e, adata, env, Typed_number.C_number, "sizeofstr"
+    e, adata, env, Analyses_types.C_number, "sizeofstr"
   | TAlignOf ty ->
     let e = Cil.new_exp ~loc (AlignOf ty) in
     let adata = Assert.register_term ~loc t e adata in
-    e, adata, env, Typed_number.C_number, "alignof"
+    e, adata, env, Analyses_types.C_number, "alignof"
   | TAlignOfE t' ->
     let e', _, env = to_exp ~adata:Assert.no_data kf env t' in
     let e = Cil.new_exp ~loc (AlignOfE e') in
     let adata = Assert.register_term ~loc t e adata in
-    e, adata, env, Typed_number.C_number, "alignof"
+    e, adata, env, Analyses_types.C_number, "alignof"
   | TUnOp(Neg | BNot as op, t') ->
     let ty = Typing.get_typ ~logic_env t in
     let e, adata, env = to_exp ~adata kf env t' in
@@ -311,11 +311,11 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
           (Some t)
           (fun _ ev -> [ Smart_stmt.rtl_call ~loc ~prefix:"" name [ ev; e ] ])
       in
-      e, adata, env, Typed_number.C_number, ""
+      e, adata, env, Analyses_types.C_number, ""
     else if Gmp_types.Q.is_t ty then
       Env.not_yet env "reals: Neg | BNot"
     else
-      Cil.new_exp ~loc (UnOp(op, e, ty)), adata, env, Typed_number.C_number, ""
+      Cil.new_exp ~loc (UnOp(op, e, ty)), adata, env, Analyses_types.C_number, ""
   | TUnOp(LNot, t) ->
     let t = Logic_normalizer.get_term t in
     let ty = Typing.get_effective_typ ~logic_env t in
@@ -337,12 +337,12 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
           zero
           (Some t)
       in
-      e, adata, env, Typed_number.C_number, ""
+      e, adata, env, Analyses_types.C_number, ""
     else begin
       assert (Cil.isIntegralType ty);
       let e, adata, env = to_exp ~adata kf env t in
       let e = Smart_exp.lnot ~loc e in
-      e, adata, env, Typed_number.C_number, ""
+      e, adata, env, Analyses_types.C_number, ""
     end
   | TBinOp(PlusA | MinusA | Mult as bop, t1, t2) ->
     let ty = Typing.get_typ ~logic_env t in
@@ -350,14 +350,14 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
     let e2, adata, env = to_exp ~adata kf env t2 in
     if Gmp_types.Z.is_t ty then
       let e, env = Gmp.Z.binop ~loc (Some t) bop env kf e1 e2 in
-      e, adata, env, Typed_number.C_number, ""
+      e, adata, env, Analyses_types.C_number, ""
     else if Gmp_types.Q.is_t ty then
       let e, env = Gmp.Q.binop ~loc (Some t) bop env kf e1 e2 in
-      e, adata, env, Typed_number.C_number, ""
+      e, adata, env, Analyses_types.C_number, ""
     else begin
       assert (Logic_typing.is_integral_type t.term_type);
       let e = Cil.new_exp ~loc (BinOp(bop, e1, e2, ty)) in
-      e, adata, env, Typed_number.C_number, ""
+      e, adata, env, Analyses_types.C_number, ""
     end
   | TBinOp(Div | Mod as bop, t1, t2) ->
     let ty = Typing.get_typ ~logic_env t in
@@ -416,17 +416,17 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
       in
       let name = Misc.name_of_binop bop in
       let _, e, env = Gmp.Z.new_var ~loc ~name env kf t mk_stmts in
-      e, adata, env, Typed_number.C_number, ""
+      e, adata, env, Analyses_types.C_number, ""
     else if Gmp_types.Q.is_t ty then
       let e2, adata, env = t2_to_exp adata env in
       let e, env = Gmp.Q.binop ~loc (Some t) bop env kf e1 e2 in
-      e, adata, env, Typed_number.C_number, ""
+      e, adata, env, Analyses_types.C_number, ""
     else begin
       assert (Logic_typing.is_integral_type t.term_type);
       (* no guard required since RTEs are generated separately *)
       let e2, adata, env = t2_to_exp adata env in
       let e = Cil.new_exp ~loc (BinOp(bop, e1, e2, ty)) in
-      e, adata, env, Typed_number.C_number, ""
+      e, adata, env, Analyses_types.C_number, ""
     end
   | TBinOp(Lt | Gt | Le | Ge | Eq | Ne as bop, t1, t2) ->
     (* comparison operators *)
@@ -449,7 +449,7 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
         t2
         (Some t)
     in
-    e, adata, env, Typed_number.C_number, ""
+    e, adata, env, Analyses_types.C_number, ""
   | TBinOp((Shiftlt | Shiftrt) as bop, t1, t2) ->
     (* left/right shift *)
     let ty = Typing.get_typ ~logic_env t in
@@ -625,13 +625,13 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
       in
       let name = bop_name in
       let _, e, env = Gmp.Z.new_var ~loc ~name env kf t mk_stmts in
-      e, adata, env, Typed_number.C_number, ""
+      e, adata, env, Analyses_types.C_number, ""
     else begin
       assert (Logic_typing.is_integral_type t.term_type);
       let e1, adata, env = t1_to_exp adata env in
       let e2, adata, env = t2_to_exp adata env in
       let e = Cil.new_exp ~loc (BinOp(bop, e1, e2, ty)) in
-      e, adata, env, Typed_number.C_number, ""
+      e, adata, env, Analyses_types.C_number, ""
     end
   | TBinOp(LOr, t1, t2) ->
     (* t1 || t2 <==> if t1 then true else t2 *)
@@ -653,7 +653,7 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
              )
            env)
     in
-    e, adata, env, Typed_number.C_number, ""
+    e, adata, env, Analyses_types.C_number, ""
   | TBinOp(LAnd, t1, t2) ->
     (* t1 && t2 <==> if t1 then t2 else false *)
     let e, adata, env =
@@ -674,7 +674,7 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
              )
            env)
     in
-    e, adata, env, Typed_number.C_number, ""
+    e, adata, env, Analyses_types.C_number, ""
   | TBinOp((BOr | BXor | BAnd) as bop, t1, t2) ->
     (* other logic/arith operators  *)
     let ty = Typing.get_typ ~logic_env t in
@@ -689,11 +689,11 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
       let name = Misc.name_of_binop bop in
       let t = Some t in
       let _, e, env = Gmp.Z.new_var ~loc ~name env kf t mk_stmts in
-      e, adata, env, Typed_number.C_number, ""
+      e, adata, env, Analyses_types.C_number, ""
     else begin
       assert (Logic_typing.is_integral_type t.term_type);
       let e = Cil.new_exp ~loc (BinOp(bop, e1, e2, ty)) in
-      e, adata, env, Typed_number.C_number, ""
+      e, adata, env, Analyses_types.C_number, ""
     end
   | TBinOp(PlusPI | MinusPI as bop, t1, t2) ->
     if Misc.is_set_of_ptr_or_array t1.term_type ||
@@ -710,7 +710,7 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
     let e1, adata, env = to_exp ~adata kf env t1 in
     let e2, adata, env = to_exp ~adata kf env t2 in
     let e = Cil.new_exp ~loc (BinOp(bop, e1, e2, ty)) in
-    e, adata, env, Typed_number.C_number, ""
+    e, adata, env, Analyses_types.C_number, ""
   | TBinOp(MinusPP, t1, t2) ->
     begin match Typing.get_number_ty ~logic_env t with
       | C_integer _ ->
@@ -718,7 +718,7 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
         let e2, adata, env = to_exp ~adata kf env t2 in
         let ty = Typing.get_typ ~logic_env t in
         let e = Cil.new_exp ~loc (BinOp(MinusPP, e1, e2, ty)) in
-        e, adata, env, Typed_number.C_number, ""
+        e, adata, env, Analyses_types.C_number, ""
       | Gmpz ->
         Env.not_yet env "pointer subtraction resulting in gmp"
       | C_float _ | Rational | Real | Nan ->
@@ -733,22 +733,22 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
         env
         kf
         (Some ty)
-        Typed_number.C_number
+        Analyses_types.C_number
         (Some t)
         e
     in
-    e, adata, env, Typed_number.C_number, ""
+    e, adata, env, Analyses_types.C_number, ""
   | TLogic_coerce (_, t) -> context_insensitive_term_to_exp ~adata kf env t
   | TAddrOf lv ->
     let lv, env, _ = tlval_to_lval kf env lv in
     let e = Cil.mkAddrOf ~loc lv in
     let adata = Assert.register_term ~loc t e adata in
-    e, adata, env, Typed_number.C_number, "addrof"
+    e, adata, env, Analyses_types.C_number, "addrof"
   | TStartOf lv ->
     let lv, env, _ = tlval_to_lval kf env lv in
     let e = Cil.mkAddrOrStartOf ~loc lv in
     let adata = Assert.register_term ~loc t e adata in
-    e, adata, env, Typed_number.C_number, "startof"
+    e, adata, env, Analyses_types.C_number, "startof"
   | Tapp(li, _, [ t1; t2; {term_node = Tlambda([ _ ], _)} as lambda ])
     when li.l_body = LBnone && (li.l_var_info.lv_name = "\\sum" ||
                                 li.l_var_info.lv_name = "\\product")->
@@ -761,12 +761,12 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
     let e, adata, env =
       Logic_functions.app_to_exp ~adata ~loc ~tapp:t kf env li args in
     let adata = Assert.register_term ~loc t e adata in
-    e, adata, env, Typed_number.C_number, "app"
+    e, adata, env, Analyses_types.C_number, "app"
   | Tapp(_, _ :: _, _) ->
     Env.not_yet env "logic functions with labels"
   | Tlambda(_, lt) ->
     let exp, adata, env = to_exp ~adata kf env lt in
-    exp, adata, env, Typed_number.C_number, ""
+    exp, adata, env, Analyses_types.C_number, ""
   | TDataCons _ -> Env.not_yet env "constructor"
   | Tif(t1, t2, t3) ->
     let e, adata, env =
@@ -795,7 +795,7 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
              )
            env)
     in
-    e, adata, env, Typed_number.C_number, ""
+    e, adata, env, Analyses_types.C_number, ""
   | Tat(t', label) ->
     let e, adata, env =
       if inplace then
@@ -803,7 +803,7 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
       else
         Translate_ats.to_exp ~loc ~adata kf env (PoT_term t) label
     in
-    e, adata, env, Typed_number.C_number, ""
+    e, adata, env, Analyses_types.C_number, ""
   | Tbase_addr(BuiltinLabel Here, t') ->
     let name = "base_addr" in
     let e, _, env =
@@ -817,7 +817,7 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
         t'
     in
     let adata = Assert.register_term ~loc t e adata in
-    e, adata, env, Typed_number.C_number, name
+    e, adata, env, Analyses_types.C_number, name
   | Tbase_addr _ -> Env.not_yet env "labeled \\base_addr"
   | Toffset(BuiltinLabel Here, t') ->
     let size_t = Cil.theMachine.Cil.typeOfSizeOf in
@@ -826,7 +826,7 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
       Memory_translate.call ~adata ~loc kf name size_t env t'
     in
     let adata = Assert.register_term ~loc t e adata in
-    e, adata, env, Typed_number.C_number, name
+    e, adata, env, Analyses_types.C_number, name
   | Toffset _ -> Env.not_yet env "labeled \\offset"
   | Tblock_length(BuiltinLabel Here, t') ->
     let size_t = Cil.theMachine.Cil.typeOfSizeOf in
@@ -835,11 +835,11 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
       Memory_translate.call ~adata ~loc kf name size_t env t'
     in
     let adata = Assert.register_term ~loc t e adata in
-    e, adata, env, Typed_number.C_number, name
+    e, adata, env, Analyses_types.C_number, name
   | Tblock_length _ -> Env.not_yet env "labeled \\block_length"
   | Tnull ->
     let e = Smart_exp.null ~loc in
-    e, adata, env, Typed_number.C_number, "null"
+    e, adata, env, Analyses_types.C_number, "null"
   | TUpdate _ -> Env.not_yet env "functional update"
   | Ttypeof _ -> Env.not_yet env "typeof"
   | Ttype _ -> Env.not_yet env "C type"
@@ -858,7 +858,7 @@ and context_insensitive_term_to_exp ~adata ?(inplace=false) kf env t =
     let e, adata, env = to_exp ~adata kf env t in
     (* Remove the logic var from the logic scope *)
     let env = Env.Logic_scope.remove env lvs in
-    e, adata, env, Typed_number.C_number, ""
+    e, adata, env, Analyses_types.C_number, ""
 
 (* Convert an ACSL term into a corresponding C expression (if any) in the given
    environment. Also extend this environment in order to include the generating
@@ -871,37 +871,36 @@ and to_exp ~adata ?inplace kf env t =
     (Env.Logic_env.get_profile env);
   let logic_env = Env.Logic_env.get env in
   let t = Logic_normalizer.get_term t in
-  let (rexp, _, _) as result =
-    Extlib.flatten
-      (Env.with_params_and_result
-         ~rte:false
-         ~f:(fun env ->
-             let e, adata, env, sty, name =
-               context_insensitive_term_to_exp ?inplace ~adata kf env t
-             in
-             let env =
-               if generate_rte then !translate_rte_exp_ref kf env e else env
-             in
-             let cast = Typing.get_cast ~logic_env t in
-             let name = if name = "" then None else Some name in
-             Extlib.nest
-               adata
-               (Typed_number.add_cast
-                  ~loc:t.term_loc
-                  ?name
-                  env
-                  kf
-                  cast
-                  sty
-                  (Some t)
-                  e)
-           )
-         env)
+  let ((rexp, _), _) as result =
+    Env.with_params_and_result
+      ~rte:false
+      ~f:(fun env ->
+          let e, adata, env, sty, name =
+            context_insensitive_term_to_exp ?inplace ~adata kf env t
+          in
+          let env =
+            if generate_rte then !translate_rte_exp_ref kf env e else env
+          in
+          let cast = Typing.get_cast ~logic_env t in
+          let name = if name = "" then None else Some name in
+          Extlib.nest
+            adata
+            (Typed_number.add_cast
+               ~loc:t.term_loc
+               ?name
+               env
+               kf
+               cast
+               sty
+               (Some t)
+               e)
+        )
+      env
   in
   Options.debug ~dkey ~level:4 "to_exp %a {%a} %a = %a"
     Kernel_function.pretty kf Profile.pretty (Env.Logic_env.get_profile env)
     Printer.pp_term t Printer.pp_exp rexp;
-  result
+  Extlib.flatten result
 
 
 let term_to_exp_without_inplace ~adata kf env t = to_exp ~adata kf env t
diff --git a/src/plugins/e-acsl/src/code_generator/translate_utils.ml b/src/plugins/e-acsl/src/code_generator/translate_utils.ml
index 8ebd2f182132437543c5d72cd502bcc503b3c9d3..ef8b075abf9db5814cb4fe9c6ee6103f520ca900 100644
--- a/src/plugins/e-acsl/src/code_generator/translate_utils.ml
+++ b/src/plugins/e-acsl/src/code_generator/translate_utils.ml
@@ -39,6 +39,8 @@ let term_to_exp_ref
   =
   ref (fun ~adata:_ _kf _env _t -> Extlib.mk_labeled_fun "term_to_exp_ref")
 
+let term_to_exp ~adata kf env t = !term_to_exp_ref ~adata kf env t
+
 let predicate_to_exp_ref
   : (adata:Assert.t ->
      ?name:string ->
@@ -51,6 +53,9 @@ let predicate_to_exp_ref
   ref (fun ~adata:_ ?name:_ _kf ?rte:_ _env _p ->
       Extlib.mk_labeled_fun "predicate_to_exp_ref")
 
+let predicate_to_exp ~adata ?name kf ?rte env p =
+  !predicate_to_exp_ref ~adata ?name kf ?rte env p
+
 (**************************************************************************)
 (********************** Utility functions *********************************)
 (**************************************************************************)
@@ -97,7 +102,7 @@ let gmp_to_sizet ~adata ~loc ~name ?(check_lower_bound=true) ?pp kf env t =
       Typing.preprocess_predicate ~logic_env lower_guard;
       let adata_lower_guard, env = Assert.empty ~loc kf env in
       let lower_guard, adata_lower_guard, env =
-        !predicate_to_exp_ref ~adata:adata_lower_guard kf env lower_guard
+        predicate_to_exp ~adata:adata_lower_guard kf env lower_guard
       in
       let assertion, env =
         Assert.runtime_check
@@ -127,7 +132,7 @@ let gmp_to_sizet ~adata ~loc ~name ?(check_lower_bound=true) ?pp kf env t =
   Typing.preprocess_predicate ~logic_env upper_guard;
   let adata_upper_guard, env = Assert.empty ~loc kf env in
   let upper_guard, adata_upper_guard, env =
-    !predicate_to_exp_ref ~adata:adata_upper_guard kf env upper_guard
+    predicate_to_exp ~adata:adata_upper_guard kf env upper_guard
   in
   let assertion, env =
     Assert.runtime_check
@@ -141,7 +146,7 @@ let gmp_to_sizet ~adata ~loc ~name ?(check_lower_bound=true) ?pp kf env t =
   in
   let stmts = assertion :: stmts in
   (* Translate term [t] into an exp of type [size_t] *)
-  let gmp_e, adata, env = !term_to_exp_ref ~adata kf env t in
+  let gmp_e, adata, env = term_to_exp ~adata kf env t in
   let  _, e, env = Env.new_var
       ~loc
       ~name:"size"
@@ -164,29 +169,9 @@ let gmp_to_sizet ~adata ~loc ~name ?(check_lower_bound=true) ?pp kf env t =
 let () =
   Memory_translate.gmp_to_sizet_ref := gmp_to_sizet
 
-let comparison_to_exp
-    ~adata
-    ~loc
-    kf
-    env
-    ity
-    ?e1
-    bop
-    t1
-    t2
-    ?(name = Misc.name_of_binop bop)
-    t_opt
-  =
-  let e1, adata, env =
-    match e1 with
-    | None ->
-      let e1, adata, env = !term_to_exp_ref ~adata kf env t1 in
-      e1, adata, env
-    | Some e1 ->
-      e1, adata, env
-  in
+let exp_comparison_to_exp
+    ~loc kf env ity bop e1 e2 ?(name = Misc.name_of_binop bop) t_opt =
   let ty1 = Cil.typeOf e1 in
-  let e2, adata, env = !term_to_exp_ref ~adata kf env t2 in
   let ty2 = Cil.typeOf e2 in
   let e, env =
     match Logic_aggr.get_t ty1, Logic_aggr.get_t ty2 with
@@ -216,6 +201,20 @@ let comparison_to_exp
         Printer.pp_typ ty1
         Printer.pp_typ ty2
   in
+  e, env
+
+let comparison_to_exp ~adata ~loc kf env ity ?e1 bop t1 t2 ?name t_opt
+  =
+  let e1, adata, env =
+    match e1 with
+    | None ->
+      let e1, adata, env = term_to_exp ~adata kf env t1 in
+      e1, adata, env
+    | Some e1 ->
+      e1, adata, env
+  in
+  let e2, adata, env = term_to_exp ~adata kf env t2 in
+  let e, env = exp_comparison_to_exp ~loc kf env ity bop e1 e2 ?name t_opt in
   e, adata, env
 
 let conditional_to_exp ?(name="if") ~loc kf t_opt e1 (e2, env2) (e3, env3) =
@@ -265,7 +264,7 @@ let env_of_li ~adata ~loc kf env li =
     let logic_env = Env.Logic_env.get env in
     let ty = Typing.get_typ ~logic_env t in
     let vi, vi_e, env = Env.Logic_binding.add ~ty env kf li.l_var_info in
-    let e, adata, env = !term_to_exp_ref ~adata kf env t in
+    let e, adata, env = term_to_exp ~adata kf env t in
     let stmt = match Typing.get_number_ty ~logic_env t with
       | C_integer _ | C_float _ | Nan ->
         Smart_stmt.assigns ~loc ~result:(Cil.var vi) e
diff --git a/src/plugins/e-acsl/src/code_generator/typed_number.ml b/src/plugins/e-acsl/src/code_generator/typed_number.ml
index 81b9956f449452d36650241fbe3ae577514f74f1..c11eb87ca6ffc76a8f3f956bee8c3bcf6329bb72 100644
--- a/src/plugins/e-acsl/src/code_generator/typed_number.ml
+++ b/src/plugins/e-acsl/src/code_generator/typed_number.ml
@@ -22,12 +22,8 @@
 
 (** Manipulate the type of numbers. *)
 
-type strnum =
-  | Str_Z         (* integers *)
-  | Str_R         (* reals *)
-  | C_number      (* integers and floats included *)
-
 let add_cast ~loc ?name env kf ctx strnum t_opt e =
+  let open Analyses_types in
   let e, env = match strnum with
     | Str_Z -> Gmp.Z.create ~loc ?name t_opt env kf e
     | Str_R -> Gmp.Q.create ~loc ?name t_opt env kf e
@@ -61,7 +57,7 @@ let add_cast ~loc ?name env kf ctx strnum t_opt e =
         Gmp.Z.create ~loc ?name t_opt env kf e
     | _, false ->
       if Gmp_types.Q.is_t ctx then
-        if Gmp_types.Q.is_t (Cil.typeOf e) then (* R --> R *)
+        if Gmp_types.Q.is_t ty then (* R --> R *)
           e, env
         else (* C integer or Z --> R *)
           Gmp.Q.create ~loc ?name t_opt env kf e
diff --git a/src/plugins/e-acsl/src/code_generator/typed_number.mli b/src/plugins/e-acsl/src/code_generator/typed_number.mli
index 5fedbcdfb8c992b6178f687b3b000a27f666844a..e91ebc76758e55e9c736dd7439f28a2e251a65be 100644
--- a/src/plugins/e-acsl/src/code_generator/typed_number.mli
+++ b/src/plugins/e-acsl/src/code_generator/typed_number.mli
@@ -24,14 +24,6 @@
 
 open Cil_types
 
-(** Type of a string that represents a number.
-    Used when a string is required to encode a constant number because it is not
-    representable in any C type  *)
-type strnum =
-  | Str_Z         (* integers *)
-  | Str_R         (* reals *)
-  | C_number      (* integers and floats included *)
-
 (** [add_cast ~loc ?name env kf ctx sty t_opt e] convert number expression [e]
     in a way that it is compatible with the given typing context [ctx].
     [sty] indicates if the expression is a string representing a number (integer
@@ -43,7 +35,7 @@ val add_cast:
   Env.t ->
   kernel_function ->
   typ option ->
-  strnum ->
+  Analyses_types.strnum ->
   term option ->
   exp ->
   exp * Env.t
diff --git a/src/plugins/e-acsl/src/libraries/analyses_types.ml b/src/plugins/e-acsl/src/libraries/analyses_types.ml
index a5a1f12468a7698020d8a3eeb74511df9d7c4b9f..fd52df4346b817beac016e2862e5564d508cf88f 100644
--- a/src/plugins/e-acsl/src/libraries/analyses_types.ml
+++ b/src/plugins/e-acsl/src/libraries/analyses_types.ml
@@ -92,3 +92,11 @@ type number_ty =
   | Rational
   | Real
   | Nan
+
+(** Type of a string that represents a number.
+    Used when a string is required to encode a constant number because it is not
+    representable in any C type  *)
+type strnum =
+  | Str_Z         (* integers *)
+  | Str_R         (* reals *)
+  | C_number      (* integers and floats included *)