diff --git a/src/plugins/eva/domains/cvalue/builtins_malloc.ml b/src/plugins/eva/domains/cvalue/builtins_malloc.ml
index 0b59d55c65bedf4517163f9383ac8e38df405684..8ec8dba455741efcceec85330e0f622410bcf327 100644
--- a/src/plugins/eva/domains/cvalue/builtins_malloc.ml
+++ b/src/plugins/eva/domains/cvalue/builtins_malloc.ml
@@ -535,7 +535,7 @@ let calloc_builtin state args =
   let size = Cvalue.V.mul nmemb sizev in
   let size_ok = alloc_size_ok size in
   if size_ok <> Alarmset.True then
-    Eva_utils.warning_once_current
+    Self.warning ~current:true ~once:true
       "calloc out of bounds: assert(nmemb * size <= SIZE_MAX)";
   let c_values =
     if size_ok = Alarmset.False (* size always overflows *)
@@ -861,7 +861,7 @@ let reallocarray_builtin state args =
   let size = Cvalue.V.mul nmemb sizev in
   let size_ok = alloc_size_ok size in
   if size_ok <> Alarmset.True then
-    Eva_utils.warning_once_current
+    Self.warning ~current:true ~once:true
       "reallocarray out of bounds: assert(nmemb * size <= SIZE_MAX)";
   if size_ok = Alarmset.False (* size always overflows *)
   then Builtins.Result [Cvalue.V.singleton_zero]
@@ -920,7 +920,8 @@ let check_leaked_malloced_bases state _ =
   let alloced_bases = Dynamic_Alloc_Bases.get () in
   Base_hptmap.iter
     (fun base _ -> if check_if_base_is_leaked base state then
-        Eva_utils.warning_once_current "memory leak detected for %a"
+        Self.warning ~current:true ~once:true
+          "memory leak detected for %a"
           Base.pretty base)
     alloced_bases;
   let c_clobbered = Base.SetLattice.bottom in
diff --git a/src/plugins/eva/domains/cvalue/builtins_misc.ml b/src/plugins/eva/domains/cvalue/builtins_misc.ml
index 9d6c78ca537d7078b0e151f817614a2fa2ccd3e5..7238d3e459cc9966cc61209b4d6bcfa52de73650 100644
--- a/src/plugins/eva/domains/cvalue/builtins_misc.ml
+++ b/src/plugins/eva/domains/cvalue/builtins_misc.ml
@@ -20,13 +20,11 @@
 (*                                                                        *)
 (**************************************************************************)
 
-open Eva_utils
-
 open Lattice_bounds.Bottom.Operators
 
 let frama_C_assert state actuals =
   let do_bottom () =
-    warning_once_current "Frama_C_assert: false";
+    Self.warning ~current:true ~once:true "Frama_C_assert: false";
     Cvalue.Model.bottom
   in
   match actuals with
@@ -42,11 +40,13 @@ let frama_C_assert state actuals =
           Cvalue_transfer.update valuation state
         in
         match state with
-        | `Value state -> warning_once_current "Frama_C_assert: unknown"; state
+        | `Value state ->
+          Self.warning ~current:true ~once:true "Frama_C_assert: unknown";
+          state
         | `Bottom -> do_bottom ()
       end
       else begin
-        warning_once_current "Frama_C_assert: true";
+        Self.warning ~current:true ~once:true "Frama_C_assert: true";
         state
       end
     in
diff --git a/src/plugins/eva/engine/iterator.ml b/src/plugins/eva/engine/iterator.ml
index ab67e6f585735b0035a0844fbcfa16d6ac420263..0c7bd34fdb07177cf8626a36f13c9c675448c15a 100644
--- a/src/plugins/eva/engine/iterator.ml
+++ b/src/plugins/eva/engine/iterator.ml
@@ -259,7 +259,7 @@ module Make_Dataflow
     let asm_contracts = Annotations.code_annot stmt in
     match Logic_utils.extract_contract asm_contracts with
     | [] ->
-      Eva_utils.warning_once_current
+      Self.warning ~current:true ~once:true
         "assuming assembly code has no effects in function %t"
         Eva_utils.pretty_current_cfunction_name;
       id
@@ -717,7 +717,7 @@ module Computer
       Dataflow.merge_results ~save_results;
       let f = Kernel_function.get_definition kf in
       if Cil.typeHasAttribute "noreturn" f.svar.vtype && results <> [] then
-        Eva_utils.warning_once_current
+        Self.warning ~current:true ~once:true
           "function %a may terminate but has the noreturn attribute"
           Kernel_function.pretty kf;
       results, !Dataflow.cacheable
diff --git a/src/plugins/eva/engine/transfer_specification.ml b/src/plugins/eva/engine/transfer_specification.ml
index a8ea53b9baf6785cfc5a4af4eceb8ac8ccbc3878..27c8c62b98e4c22dc3cafcfffba856dd7a573147 100644
--- a/src/plugins/eva/engine/transfer_specification.ml
+++ b/src/plugins/eva/engine/transfer_specification.ml
@@ -40,7 +40,7 @@ let find_default_behavior spec =
   List.find (fun b' -> b'.b_name = Cil.default_behavior_name) spec.spec_behavior
 
 let warn_empty_assigns () =
-  Eva_utils.warning_once_current
+  Self.warning ~current:true ~once:true
     "Cannot handle empty assigns clause. Assuming assigns \\nothing: \
      be aware this is probably incorrect."
 
@@ -164,7 +164,7 @@ let precise_loc_of_assign env kind term =
     in
     if kind <> From then reduce_to_valid_location kind term loc else Some loc
   with Eval_terms.LogicEvalError e ->
-    Eva_utils.warning_once_current
+    Self.warning ~current:true ~once:true
       "@[<hov 0>@[<hov 2>cannot interpret %a@]%a;@ effects will be ignored@]"
       pp_assign_clause (kind, term) pp_eval_error e;
     None
diff --git a/src/plugins/eva/utils/eva_utils.ml b/src/plugins/eva/utils/eva_utils.ml
index 72a2129efb597b05b4372119dc97c323f2c53dd9..b40e802a7f76c006b911ee53fd796a4a28c22902 100644
--- a/src/plugins/eva/utils/eva_utils.ml
+++ b/src/plugins/eva/utils/eva_utils.ml
@@ -106,9 +106,6 @@ let pretty_actuals fmt actuals =
 let pretty_current_cfunction_name fmt =
   Kernel_function.pretty fmt (current_kf())
 
-let warning_once_current fmt =
-  Self.warning ~current:true ~once:true fmt
-
 (* Emit alarms in "non-warning" mode *)
 let alarm_report ?current ?source ?emitwith ?echo ?once ?append =
   Self.warning ~wkey:Self.wkey_alarm
diff --git a/src/plugins/eva/utils/eva_utils.mli b/src/plugins/eva/utils/eva_utils.mli
index a147daaa16051d4a2e98ece7079b2d456d4a1bdb..9d319318e27a4d59cc370331764fb1edf5eaadb9 100644
--- a/src/plugins/eva/utils/eva_utils.mli
+++ b/src/plugins/eva/utils/eva_utils.mli
@@ -63,7 +63,6 @@ val get_subdivision: stmt -> int
 val pretty_actuals :
   Format.formatter -> (Eva_ast.exp * Cvalue.V.t) list -> unit
 val pretty_current_cfunction_name : Format.formatter -> unit
-val warning_once_current : ('a, Format.formatter, unit) format -> 'a
 
 (** Emit an alarm, either as warning or as a result, according to
     status associated to {!Self.wkey_alarm} *)
diff --git a/src/plugins/eva/values/cvalue_forward.ml b/src/plugins/eva/values/cvalue_forward.ml
index bdeb63e5308b760d781a2213253300c02bb4de02..44e344b820908f215e146305f9b7419fe02d0104 100644
--- a/src/plugins/eva/values/cvalue_forward.ml
+++ b/src/plugins/eva/values/cvalue_forward.ml
@@ -540,8 +540,9 @@ let eval_float_constant f fkind fstring =
         if Fc_float.is_infinite f_lower && Fc_float.is_infinite f_upper
         then
           begin
-            Eva_utils.warning_once_current
-              "cannot parse floating-point constant, returning imprecise result";
+            Self.warning ~current:true ~once:true
+              "cannot parse floating-point constant, \
+               returning imprecise result";
             neg_infinity, infinity
           end
         else f_lower, f_upper