diff --git a/src/plugins/value/domains/abstract_domain.mli b/src/plugins/value/domains/abstract_domain.mli
index 9d3603ad580f66c8cd71d8077719f12e614061e2..dcd64ed822256755b0a1ccbd1517ca56cc11a8b4 100644
--- a/src/plugins/value/domains/abstract_domain.mli
+++ b/src/plugins/value/domains/abstract_domain.mli
@@ -412,7 +412,8 @@ module type S = sig
 
   (** Interprets an ACSL extension.
       Defined by {!Domain_builder.Complete} as the identity. *)
-  val interpret_acsl_extension: acsl_extension -> state -> state
+  val interpret_acsl_extension:
+    acsl_extension -> state logic_environment -> state -> state
 
   (** {3 Scoping and initialization } *)
 
diff --git a/src/plugins/value/domains/cvalue/cvalue_domain.ml b/src/plugins/value/domains/cvalue/cvalue_domain.ml
index 22f0af53515c2639505ceccc9ef7b1e67b1a8a46..3bc961572d72b56d63387af68454bccf5321e833 100644
--- a/src/plugins/value/domains/cvalue/cvalue_domain.ml
+++ b/src/plugins/value/domains/cvalue/cvalue_domain.ml
@@ -316,7 +316,7 @@ module State = struct
     then `Value (state, clob)
     else `Bottom
 
-  let interpret_acsl_extension _extension state = state
+  let interpret_acsl_extension _extension _env state = state
 
   let evaluate_from_clause state deps =
     (* Evaluates the contents of one element of the from clause, topify them,
diff --git a/src/plugins/value/domains/domain_builder.ml b/src/plugins/value/domains/domain_builder.ml
index 7c05474f1b52aa6ac83897e36d153974b4b33554..d5b24f78bd2119db70670d9f3344fb9b03660559 100644
--- a/src/plugins/value/domains/domain_builder.ml
+++ b/src/plugins/value/domains/domain_builder.ml
@@ -39,7 +39,8 @@ module type LeafDomain = sig
     t Abstract_domain.logic_environment -> t -> predicate -> Alarmset.status
   val reduce_by_predicate:
     t Abstract_domain.logic_environment -> t -> predicate -> bool -> t or_bottom
-  val interpret_acsl_extension: acsl_extension -> t -> t
+  val interpret_acsl_extension:
+    acsl_extension -> t Abstract_domain.logic_environment -> t -> t
 
   val enter_loop: stmt -> t -> t
   val incr_loop_counter: stmt -> t -> t
@@ -65,7 +66,7 @@ module Complete (Domain: InputDomain) = struct
 
   let evaluate_predicate _env _state _predicate = Alarmset.Unknown
   let reduce_by_predicate _env state _predicate _positive = `Value state
-  let interpret_acsl_extension _extension state = state
+  let interpret_acsl_extension _extension _env state = state
 
   let enter_loop _stmt state = state
   let incr_loop_counter _stmt state = state
@@ -546,8 +547,8 @@ module Restrict
       then Some (f state, mode)
       else x
 
-  let interpret_acsl_extension extension =
-    lift (Domain.interpret_acsl_extension extension)
+  let interpret_acsl_extension extension env =
+    lift (Domain.interpret_acsl_extension extension (lift_env env))
 
   let enter_scope kind varinfos = lift (Domain.enter_scope kind varinfos)
   let leave_scope kf varinfos = lift (Domain.leave_scope kf varinfos)
diff --git a/src/plugins/value/domains/domain_builder.mli b/src/plugins/value/domains/domain_builder.mli
index 4c38846e01f0dda328316b9b50f7e51afc662cda..3fd93d211841312e9a2942d363f4f6d00453c304 100644
--- a/src/plugins/value/domains/domain_builder.mli
+++ b/src/plugins/value/domains/domain_builder.mli
@@ -45,7 +45,8 @@ module type LeafDomain = sig
     t Abstract_domain.logic_environment -> t -> predicate -> Alarmset.status
   val reduce_by_predicate:
     t Abstract_domain.logic_environment -> t -> predicate -> bool -> t or_bottom
-  val interpret_acsl_extension: acsl_extension -> t -> t
+  val interpret_acsl_extension:
+    acsl_extension -> t Abstract_domain.logic_environment -> t -> t
 
   val enter_loop: stmt -> t -> t
   val incr_loop_counter: stmt -> t -> t
diff --git a/src/plugins/value/domains/domain_product.ml b/src/plugins/value/domains/domain_product.ml
index ceda6361b5f85d06c53ae5f74d12ff7c34babfe5..3adc09a45327fa56e9b929c6e6e79404de03b14a 100644
--- a/src/plugins/value/domains/domain_product.ml
+++ b/src/plugins/value/domains/domain_product.ml
@@ -263,9 +263,10 @@ module Make
     Right.reduce_by_predicate right_env right pred positive >>-: fun right ->
     left, right
 
-  let interpret_acsl_extension extension (left, right) =
-    Left.interpret_acsl_extension extension left,
-    Right.interpret_acsl_extension extension right
+  let interpret_acsl_extension extension env (left, right) =
+    let left_env, right_env = split_logic_env env in
+    Left.interpret_acsl_extension extension left_env left,
+    Right.interpret_acsl_extension extension right_env right
 
   let enter_scope kind vars (left, right) =
     Left.enter_scope kind vars left, Right.enter_scope kind vars right
diff --git a/src/plugins/value/domains/taint_domain.ml b/src/plugins/value/domains/taint_domain.ml
index 60a72b4b7daf48aebb3fd7a223d676fe7ec76857..d0ef3151485039fa5568cb2655acd903539846d1 100644
--- a/src/plugins/value/domains/taint_domain.ml
+++ b/src/plugins/value/domains/taint_domain.ml
@@ -512,7 +512,7 @@ let interpret_taint_logic (module Abstract: Abstractions.S) : (module Abstractio
           in
           `Value (Abstract.Dom.set key taint state)
 
-      let interpret_acsl_extension extension state =
+      let interpret_acsl_extension extension _env state =
         if String.equal extension.ext_name "taint"
         || String.equal extension.ext_name "taints"
         then
diff --git a/src/plugins/value/engine/transfer_logic.ml b/src/plugins/value/engine/transfer_logic.ml
index 367c0c0e8e717ebc427a0fa15f1e961d0f06ef74..95f0220637e68f331ec05c47d4f26b7a1ddaf603 100644
--- a/src/plugins/value/engine/transfer_logic.ml
+++ b/src/plugins/value/engine/transfer_logic.ml
@@ -304,7 +304,8 @@ module type LogicDomain = sig
     t Abstract_domain.logic_environment -> t -> predicate -> Alarmset.status
   val reduce_by_predicate:
     t Abstract_domain.logic_environment -> t -> predicate -> bool -> t or_bottom
-  val interpret_acsl_extension: acsl_extension -> t -> t
+  val interpret_acsl_extension:
+    acsl_extension -> t Abstract_domain.logic_environment -> t -> t
 end
 
 module Make
@@ -505,8 +506,11 @@ module Make
           let states =
             eval_and_reduce kf b active k posts states build_prop build_env
           in
+          let interpret_extension extension state =
+            Domain.interpret_acsl_extension extension (build_env state) state
+          in
           List.fold_left
-            (fun acc e -> States.map (Domain.interpret_acsl_extension e) acc)
+            (fun acc e -> States.map (interpret_extension e) acc)
             states b.b_extended
       in
       List.fold_left check_one_behavior post_states behaviors
@@ -711,7 +715,11 @@ module Make
     | AVariant _ | AAssigns _ | AAllocation _
     | AStmtSpec _ (*TODO*) -> states
     | AExtended (_, _, extension) ->
-      States.map (Domain.interpret_acsl_extension extension) states
+      let interpret_extension extension state =
+        let env = here_env ~pre:initial_state ~here:state in
+        Domain.interpret_acsl_extension extension env state
+      in
+      States.map (interpret_extension extension) states
 
 end
 
diff --git a/src/plugins/value/engine/transfer_logic.mli b/src/plugins/value/engine/transfer_logic.mli
index 11ab601df138f23143443caf2af970cb77dbf694..99b9b94b2c6ed12630174866622f5b5e295eb31e 100644
--- a/src/plugins/value/engine/transfer_logic.mli
+++ b/src/plugins/value/engine/transfer_logic.mli
@@ -73,7 +73,8 @@ module type LogicDomain = sig
     t Abstract_domain.logic_environment -> t -> predicate -> Alarmset.status
   val reduce_by_predicate:
     t Abstract_domain.logic_environment -> t -> predicate -> bool -> t or_bottom
-  val interpret_acsl_extension: acsl_extension -> t -> t
+  val interpret_acsl_extension:
+    acsl_extension -> t Abstract_domain.logic_environment -> t -> t
 end
 
 module Make