diff --git a/ivette/src/frama-c/api/generated/plugins/eva/values/index.ts b/ivette/src/frama-c/api/generated/plugins/eva/values/index.ts
index fdebfbe8d2132f19e9c909b8e325f0206c7dba6a..dde6739568c5020a71df49e33ab133fd6fabc6eb 100644
--- a/ivette/src/frama-c/api/generated/plugins/eva/values/index.ts
+++ b/ivette/src/frama-c/api/generated/plugins/eva/values/index.ts
@@ -192,7 +192,7 @@ export const byEvaluation: Compare.Order<evaluation> =
 const getValues_internal: Server.GetRequest<
   { callstack?: callstack, target: marker },
   { v_else?: evaluation, v_then?: evaluation, v_after?: evaluation,
-    v_before: evaluation }
+    v_before?: evaluation }
   > = {
   kind: Server.RqKind.GET,
   name:   'plugins.eva.values.getValues',
@@ -201,7 +201,7 @@ const getValues_internal: Server.GetRequest<
             v_else: jEvaluation,
             v_then: jEvaluation,
             v_after: jEvaluation,
-            v_before: jEvaluationSafe,
+            v_before: jEvaluation,
           }),
   signals: [],
 };
@@ -209,7 +209,7 @@ const getValues_internal: Server.GetRequest<
 export const getValues: Server.GetRequest<
   { callstack?: callstack, target: marker },
   { v_else?: evaluation, v_then?: evaluation, v_after?: evaluation,
-    v_before: evaluation }
+    v_before?: evaluation }
   >= getValues_internal;
 
 /* ------------------------------------- */
diff --git a/ivette/src/frama-c/plugins/eva/cells.ts b/ivette/src/frama-c/plugins/eva/cells.ts
index 22f711b1eb39976a9b35f8b1e1f71cfa86646916..6de74f52a707d4381b7d187dc1ac465192f9a283 100644
--- a/ivette/src/frama-c/plugins/eva/cells.ts
+++ b/ivette/src/frama-c/plugins/eva/cells.ts
@@ -175,7 +175,7 @@ export class ValueCache {
       .send(Values.getValues, { target: marker, callstack })
       .then((r) => {
         newValue.errors = undefined;
-        newValue.v_before = r.v_before;
+        if (r.v_before) newValue.v_before = r.v_before;
         newValue.v_after = r.v_after;
         newValue.v_then = r.v_then;
         newValue.v_else = r.v_else;
diff --git a/src/plugins/value/api/values_request.ml b/src/plugins/value/api/values_request.ml
index bbbca64de7e26a4bdbc2e13db04f0233ec1b9d2d..83526a8cb55f03d695c0da4d8be7da2998740137 100644
--- a/src/plugins/value/api/values_request.ml
+++ b/src/plugins/value/api/values_request.ml
@@ -46,7 +46,6 @@ let package =
 type probe =
   | Pexpr of exp * stmt
   | Plval of lval * stmt
-  | Pnone
 
 type callstack = Value_types.callstack
 type truth = Abstract_interp.truth
@@ -94,20 +93,20 @@ let next_steps s =
 
 let probe_stmt s =
   match s.skind with
-  | Instr (Set(lv,_,_)) -> Plval(lv,s)
-  | Instr (Call(Some lr,_,_,_)) -> Plval(lr,s)
-  | Instr (Local_init(v,_,_)) -> Plval((Var v,NoOffset),s)
-  | Return (Some e,_) | If(e,_,_,_) | Switch(e,_,_,_) -> Pexpr(e,s)
-  | _ -> Pnone
+  | Instr (Set(lv,_,_)) -> Some (Plval (lv,s))
+  | Instr (Call(Some lr,_,_,_)) -> Some (Plval (lr,s))
+  | Instr (Local_init(v,_,_)) -> Some (Plval ((Var v,NoOffset), s))
+  | Return (Some e,_) | If(e,_,_,_) | Switch(e,_,_,_) -> Some (Pexpr (e,s))
+  | _ -> None
 
 let probe marker =
   let open Printer_tag in
   match marker with
-  | PLval(_,Kstmt s,l) -> Plval(l,s)
-  | PExp(_,Kstmt s,e) -> Pexpr(e,s)
+  | PLval(_,Kstmt s,l) -> Some (Plval (l,s))
+  | PExp(_,Kstmt s,e) -> Some (Pexpr (e,s))
   | PStmt(_,s) | PStmtStart(_,s) -> probe_stmt s
-  | PVDecl(_,Kstmt s,v) -> Plval((Var v,NoOffset),s)
-  | _ -> Pnone
+  | PVDecl(_,Kstmt s,v) -> Some (Plval ((Var v,NoOffset),s))
+  | _ -> None
 
 (* -------------------------------------------------------------------------- *)
 (* --- Stmt Ranking                                                       --- *)
@@ -461,7 +460,6 @@ module Proxy(A : Analysis.S) : EvaProxy = struct
       eval_steps (Cil.typeOfLval lval) (eval_lval lval) stmt callstack
     | Pexpr (expr, stmt) ->
       eval_steps (Cil.typeOf expr) (eval_expr expr) stmt callstack
-    | Pnone -> assert false
 end
 
 let proxy =
@@ -486,8 +484,8 @@ let () =
       let add stmt = List.fold_right CSet.add (A.callstacks stmt) in
       let gather_callstacks cset marker =
         match probe marker with
-        | Pexpr (_, stmt) | Plval (_, stmt) -> add stmt cset
-        | Pnone -> cset
+        | Some (Pexpr (_, stmt) | Plval (_, stmt)) -> add stmt cset
+        | None -> cset
       in
       let cset = List.fold_left gather_callstacks CSet.empty markers in
       Ranking.sort (CSet.elements cset)
@@ -563,9 +561,9 @@ let () =
     ~descr:(Md.plain "Probe informations")
     begin fun rq marker ->
       match probe marker with
-      | Plval (l, s) -> set_probe rq Printer.pp_lval l s
-      | Pexpr (e, s) -> set_probe rq Printer.pp_exp  e s
-      | Pnone -> ()
+      | Some (Plval (l, s)) -> set_probe rq Printer.pp_lval l s
+      | Some (Pexpr (e, s)) -> set_probe rq Printer.pp_exp  e s
+      | None -> ()
     end
 
 (* -------------------------------------------------------------------------- *)
@@ -611,7 +609,7 @@ let () =
   and get_cs = Request.param_opt getValues ~name:"callstack"
       ~descr:(Md.plain "Callstack to collect (defaults to none)")
       (module Jcallstack)
-  and set_before = Request.result getValues ~name:"v_before"
+  and set_before = Request.result_opt getValues ~name:"v_before"
       ~descr:(Md.plain "Domain values before execution")
       (module JEvaluation)
   and set_after = Request.result_opt getValues ~name:"v_after"
@@ -630,14 +628,17 @@ let () =
     begin fun rq () ->
       let module A : EvaProxy = (val proxy ()) in
       let marker = get_tgt rq and callstack = get_cs rq in
-      let domain = A.evaluate (probe marker) callstack in
-      set_before rq domain.here;
-      match domain.next with
-      | After value -> set_after rq (Some value)
-      | Cond (v_then, v_else) ->
-        set_then rq (Some v_then);
-        set_else rq (Some v_else)
-      | Nothing -> ()
+      match probe marker with
+      | None -> ()
+      | Some probe ->
+        let domain = A.evaluate probe callstack in
+        set_before rq (Some domain.here);
+        match domain.next with
+        | After value -> set_after rq (Some value)
+        | Cond (v_then, v_else) ->
+          set_then rq (Some v_then);
+          set_else rq (Some v_else)
+        | Nothing -> ()
     end
 
 (* -------------------------------------------------------------------------- *)