diff --git a/src/plugins/e-acsl/env.ml b/src/plugins/e-acsl/env.ml
index e2d8c8d10031e1f2762a5aef1149971d4482c6e2..f162204e1a697ad93d70da5260ab185da4fa0d77 100644
--- a/src/plugins/e-acsl/env.ml
+++ b/src/plugins/e-acsl/env.ml
@@ -71,13 +71,9 @@ let is_empty env = env.var_cpt = 0 && is_empty_block env
 let add_stmt env s = 
   { env with beginning_of_block = s :: env.beginning_of_block }
 
-let add_assert s p = 
+let add_assert kf s p = 
   Queue.add
-    (fun () -> 
-      (* Don't work since the kernel_function does not yet exist in the new
-	 project. Virgile said he was implementing the missing stuff in the
-	 visitor. Wait and see... *)
-      let kf = Kernel_function.find_englobing_kf s in
+    (fun () ->
       Annotations.add_assert kf s [ !self ] p) 
     !queue
 
diff --git a/src/plugins/e-acsl/env.mli b/src/plugins/e-acsl/env.mli
index c48dc52acef0cfedc125a61bcde2ddca0aaa2a4f..e67bdad8e3d69fd4e7ee99efa10ee87ab45e929b 100644
--- a/src/plugins/e-acsl/env.mli
+++ b/src/plugins/e-acsl/env.mli
@@ -60,9 +60,9 @@ val merge_block_vars: from:t -> t -> t
 val add_stmt: t -> stmt -> t
   (** [add_stmt env s] extends [env] with the new statement [s] *)
 
-val add_assert: stmt -> predicate named -> unit
-  (** [add_assert s p] extends the global environment with an assertion [p]
-      associated to the statement [s]. *)
+val add_assert: kernel_function -> stmt -> predicate named -> unit
+  (** [add_assert kf s p] extends the global environment with an assertion [p]
+      associated to the statement [s] in function [kf]. *)
 
 val register_actions_queue: (unit -> unit) Queue.t -> unit
   (** To be called once at initialization time: the queue of event of the
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/arith.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/arith.res.oracle
index e1823cd42647abb82fd31b77339c8aa95b8870e3..8c3d2b5d938bfe388b6fe2039b9751ddbf7d51f5 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/arith.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/arith.res.oracle
@@ -6,24 +6,24 @@
 PROJECT_FILE.i:134:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:136.
-PROJECT_FILE.i:29:[value] Function mpz_init_set_si: postcondition got status unknown
+PROJECT_FILE.i:29:[value] Function mpz_init_set_si: postcondition got status valid.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init <- main.
         Called from PROJECT_FILE.i:136.
-PROJECT_FILE.i:21:[value] Function mpz_init: postcondition got status unknown
+PROJECT_FILE.i:21:[value] Function mpz_init: postcondition got status valid.
 [value] Done for function mpz_init
 [value] computing for function mpz_neg <- main.
         Called from PROJECT_FILE.i:137.
-PROJECT_FILE.i:55:[value] Function mpz_neg: precondition got status valid
-PROJECT_FILE.i:56:[value] Function mpz_neg: precondition got status valid
+PROJECT_FILE.i:55:[value] Function mpz_neg: precondition got status valid.
+PROJECT_FILE.i:56:[value] Function mpz_neg: precondition got status valid.
 [value] Done for function mpz_neg
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:137.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_cmp <- main.
         Called from PROJECT_FILE.i:138.
-PROJECT_FILE.i:45:[value] Function mpz_cmp: precondition got status valid
-PROJECT_FILE.i:46:[value] Function mpz_cmp: precondition got status valid
+PROJECT_FILE.i:45:[value] Function mpz_cmp: precondition got status valid.
+PROJECT_FILE.i:46:[value] Function mpz_cmp: precondition got status valid.
 [value] Done for function mpz_cmp
 [value] computing for function e_acsl_fail <- main.
         Called from PROJECT_FILE.i:139.
@@ -32,13 +32,13 @@ PROJECT_FILE.i:46:[value] Function mpz_cmp: precondition got status valid
 [value] Done for function printf
 [value] computing for function exit <- e_acsl_fail <- main.
         Called from PROJECT_FILE.i:125.
-PROJECT_FILE.i:115:[value] Function exit: postcondition got status invalid
+PROJECT_FILE.i:115:[value] Function exit: postcondition got status invalid.
 [value] Done for function exit
 [value] Recording results for e_acsl_fail
 [value] Done for function e_acsl_fail
 [value] computing for function mpz_clear <- main.
         Called from PROJECT_FILE.i:140.
-PROJECT_FILE.i:39:[value] Function mpz_clear: precondition got status valid
+PROJECT_FILE.i:39:[value] Function mpz_clear: precondition got status valid.
 [value] Done for function mpz_clear
 [value] computing for function mpz_clear <- main.
         Called from PROJECT_FILE.i:140.
@@ -129,9 +129,9 @@ PROJECT_FILE.i:161:[value] Assertion got status valid.
 [value] Done for function mpz_init
 [value] computing for function mpz_add <- main.
         Called from PROJECT_FILE.i:165.
-PROJECT_FILE.i:60:[value] Function mpz_add: precondition got status valid
-PROJECT_FILE.i:61:[value] Function mpz_add: precondition got status valid
-PROJECT_FILE.i:62:[value] Function mpz_add: precondition got status valid
+PROJECT_FILE.i:60:[value] Function mpz_add: precondition got status valid.
+PROJECT_FILE.i:61:[value] Function mpz_add: precondition got status valid.
+PROJECT_FILE.i:62:[value] Function mpz_add: precondition got status valid.
 [value] Done for function mpz_add
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:165.
@@ -182,9 +182,9 @@ PROJECT_FILE.i:173:[value] Assertion got status valid.
 [value] Done for function mpz_init
 [value] computing for function mpz_sub <- main.
         Called from PROJECT_FILE.i:177.
-PROJECT_FILE.i:66:[value] Function mpz_sub: precondition got status valid
-PROJECT_FILE.i:67:[value] Function mpz_sub: precondition got status valid
-PROJECT_FILE.i:68:[value] Function mpz_sub: precondition got status valid
+PROJECT_FILE.i:66:[value] Function mpz_sub: precondition got status valid.
+PROJECT_FILE.i:67:[value] Function mpz_sub: precondition got status valid.
+PROJECT_FILE.i:68:[value] Function mpz_sub: precondition got status valid.
 [value] Done for function mpz_sub
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:177.
@@ -235,9 +235,9 @@ PROJECT_FILE.i:185:[value] Assertion got status valid.
 [value] Done for function mpz_init
 [value] computing for function mpz_mul <- main.
         Called from PROJECT_FILE.i:189.
-PROJECT_FILE.i:72:[value] Function mpz_mul: precondition got status valid
-PROJECT_FILE.i:73:[value] Function mpz_mul: precondition got status valid
-PROJECT_FILE.i:74:[value] Function mpz_mul: precondition got status valid
+PROJECT_FILE.i:72:[value] Function mpz_mul: precondition got status valid.
+PROJECT_FILE.i:73:[value] Function mpz_mul: precondition got status valid.
+PROJECT_FILE.i:74:[value] Function mpz_mul: precondition got status valid.
 [value] Done for function mpz_mul
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:189.
@@ -285,7 +285,7 @@ PROJECT_FILE.i:197:[value] Assertion got status valid.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_get_si <- main.
         Called from PROJECT_FILE.i:201.
-PROJECT_FILE.i:92:[value] Function mpz_get_si: precondition got status valid
+PROJECT_FILE.i:92:[value] Function mpz_get_si: precondition got status valid.
 [value] Done for function mpz_get_si
 [value] computing for function mpz_init <- main.
         Called from PROJECT_FILE.i:201.
@@ -303,9 +303,9 @@ PROJECT_FILE.i:202:[value] Assertion got status valid.
 [value] Done for function e_acsl_fail
 [value] computing for function mpz_cdiv_q <- main.
         Called from PROJECT_FILE.i:204.
-PROJECT_FILE.i:78:[value] Function mpz_cdiv_q: precondition got status valid
-PROJECT_FILE.i:79:[value] Function mpz_cdiv_q: precondition got status valid
-PROJECT_FILE.i:80:[value] Function mpz_cdiv_q: precondition got status valid
+PROJECT_FILE.i:78:[value] Function mpz_cdiv_q: precondition got status valid.
+PROJECT_FILE.i:79:[value] Function mpz_cdiv_q: precondition got status valid.
+PROJECT_FILE.i:80:[value] Function mpz_cdiv_q: precondition got status valid.
 [value] Done for function mpz_cdiv_q
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:204.
@@ -347,7 +347,7 @@ PROJECT_FILE.i:80:[value] Function mpz_cdiv_q: precondition got status valid
 PROJECT_FILE.i:212:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_str <- main.
         Called from PROJECT_FILE.i:215.
-PROJECT_FILE.i:33:[value] Function mpz_init_set_str: postcondition got status unknown
+PROJECT_FILE.i:33:[value] Function mpz_init_set_str: postcondition got status valid.
 [value] Done for function mpz_init_set_str
 [value] computing for function mpz_init_set_str <- main.
         Called from PROJECT_FILE.i:216.
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/cast.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/cast.res.oracle
index d1c35002514a4f04b1feadb5087dc34273b7f029..bc71784ef73faada91cb1de204c3208bf07cbca1 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/cast.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/cast.res.oracle
@@ -7,7 +7,7 @@ tests/e-acsl-runtime/cast.i:18:[e-acsl] warning: missing guard for ensuring that
 PROJECT_FILE.i:134:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_str <- main.
         Called from PROJECT_FILE.i:136.
-PROJECT_FILE.i:33:[value] Function mpz_init_set_str: postcondition got status unknown.
+PROJECT_FILE.i:33:[value] Function mpz_init_set_str: postcondition got status valid.
 [value] Done for function mpz_init_set_str
 [value] computing for function mpz_get_si <- main.
         Called from PROJECT_FILE.i:137.
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/comparison.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/comparison.res.oracle
index ba903d11580edd9956268f70a40b96e092b4401a..6351bee0d37da771b214486544895fbe4697a9d4 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/comparison.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/comparison.res.oracle
@@ -7,7 +7,7 @@ PROJECT_FILE.i:138:[value] Assertion got status valid.
 PROJECT_FILE.i:141:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:143.
-PROJECT_FILE.i:29:[value] Function mpz_init_set_si: postcondition got status unknown.
+PROJECT_FILE.i:29:[value] Function mpz_init_set_si: postcondition got status valid.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:143.
@@ -62,7 +62,7 @@ PROJECT_FILE.i:149:[value] Assertion got status valid.
         Called from PROJECT_FILE.i:154.
 [value] Done for function mpz_clear
 PROJECT_FILE.i:158:[value] Assertion got status valid.
-PROJECT_FILE.i:161:[value] Assertion got status valid.
+PROJECT_FILE.i:161:[value] Assertion got status unknown.
 PROJECT_FILE.i:164:[value] Assertion got status valid.
 PROJECT_FILE.i:167:[value] Assertion got status valid.
 PROJECT_FILE.i:170:[value] Assertion got status valid.
@@ -75,7 +75,7 @@ PROJECT_FILE.i:182:[value] Assertion got status valid.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init <- main.
         Called from PROJECT_FILE.i:184.
-PROJECT_FILE.i:21:[value] Function mpz_init: postcondition got status unknown.
+PROJECT_FILE.i:21:[value] Function mpz_init: postcondition got status valid.
 [value] Done for function mpz_init
 [value] computing for function mpz_neg <- main.
         Called from PROJECT_FILE.i:185.
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/function_contract.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/function_contract.res.oracle
index 81ba3e72ab9b4915c53af9910c13d288d78d5692..c1bb930a271214543a3423a69849a928ab21de91 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/function_contract.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/function_contract.res.oracle
@@ -20,7 +20,7 @@ PROJECT_FILE.i:144:[value] Function g: postcondition got status valid.
 PROJECT_FILE.i:162:[value] Function h: precondition got status valid.
 [value] computing for function mpz_init_set_si <- h <- main.
         Called from PROJECT_FILE.i:166.
-PROJECT_FILE.i:29:[value] Function mpz_init_set_si: postcondition got status unknown.
+PROJECT_FILE.i:29:[value] Function mpz_init_set_si: postcondition got status valid.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <- h <- main.
         Called from PROJECT_FILE.i:166.
@@ -141,7 +141,7 @@ PROJECT_FILE.i:201:[value] Function j, behavior b2: precondition got status vali
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init <- j <- main.
         Called from PROJECT_FILE.i:215.
-PROJECT_FILE.i:21:[value] Function mpz_init: postcondition got status unknown.
+PROJECT_FILE.i:21:[value] Function mpz_init: postcondition got status valid.
 [value] Done for function mpz_init
 [value] computing for function mpz_add <- j <- main.
         Called from PROJECT_FILE.i:216.
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_arith.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_arith.c
index 4fc2d516e8e7d8b0dd00033bc5e9347e4c5c291a..f9a3f1a52e33456969a998beb17db5e998efce62 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_arith.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_arith.c
@@ -604,7 +604,7 @@ __inline static mp_limb_t __gmpn_neg_n(mp_ptr __gmp_rp, mp_srcptr __gmp_up,
 extern void exit(int status);
 void e_acsl_fail(char *msg)
 {
-  printf((char const *)"%s\n",msg);
+  printf("%s\n",msg);
   exit(1);
   return;
 }
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_lazy.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_lazy.c
index bee9302fe0a0e28120c3cc646c1d918dba974917..8a2ae8bb12df129df00433026f710476cf409745 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_lazy.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_lazy.c
@@ -559,7 +559,7 @@ __inline static mp_limb_t __gmpn_neg_n(mp_ptr __gmp_rp, mp_srcptr __gmp_up,
 extern void exit(int status);
 void e_acsl_fail(char *msg)
 {
-  printf((char const *)"%s\n",msg);
+  printf("%s\n",msg);
   exit(1);
   return;
 }
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_ptr.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_ptr.c
index 3fa5e559ff282dc250e91bfed85c0c33d52c09e6..53a8b0b13bff6474fd5b89ccfbd361635eed5c3f 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_ptr.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_ptr.c
@@ -598,7 +598,7 @@ __inline static mp_limb_t __gmpn_neg_n(mp_ptr __gmp_rp, mp_srcptr __gmp_up,
 extern void exit(int status);
 void e_acsl_fail(char *msg)
 {
-  printf((char const *)"%s\n",msg);
+  printf("%s\n",msg);
   exit(1);
   return;
 }
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/integer_constant.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/integer_constant.res.oracle
index dd65f0697655184082c19b01fc680d3124de58e1..f6e48bcfecdbc15fafcbc10a995724afe0256218 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/integer_constant.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/integer_constant.res.oracle
@@ -7,7 +7,7 @@ PROJECT_FILE.i:135:[value] Assertion got status valid.
 PROJECT_FILE.i:138:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_str <- main.
         Called from PROJECT_FILE.i:140.
-PROJECT_FILE.i:33:[value] Function mpz_init_set_str: postcondition got status unknown.
+PROJECT_FILE.i:33:[value] Function mpz_init_set_str: postcondition got status valid.
 [value] Done for function mpz_init_set_str
 [value] computing for function mpz_init_set_str <- main.
         Called from PROJECT_FILE.i:141.
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/lazy.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/lazy.res.oracle
index c8428bb3abe96cba28552c70023b9074e3d08387..1d54dc22a3546873d78163ce7c5a1b886c3ea9d7 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/lazy.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/lazy.res.oracle
@@ -5,15 +5,15 @@
 PROJECT_FILE.i:134:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:136.
-PROJECT_FILE.i:29:[value] Function mpz_init_set_si: postcondition got status unknown
+PROJECT_FILE.i:29:[value] Function mpz_init_set_si: postcondition got status valid.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:137.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_cmp <- main.
         Called from PROJECT_FILE.i:137.
-PROJECT_FILE.i:45:[value] Function mpz_cmp: precondition got status valid
-PROJECT_FILE.i:46:[value] Function mpz_cmp: precondition got status valid
+PROJECT_FILE.i:45:[value] Function mpz_cmp: precondition got status valid.
+PROJECT_FILE.i:46:[value] Function mpz_cmp: precondition got status valid.
 [value] Done for function mpz_cmp
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:142.
@@ -27,7 +27,7 @@ PROJECT_FILE.i:46:[value] Function mpz_cmp: precondition got status valid
 PROJECT_FILE.i:145:[value] assigning non deterministic value for the first time
 [value] computing for function mpz_clear <- main.
         Called from PROJECT_FILE.i:146.
-PROJECT_FILE.i:39:[value] Function mpz_clear: precondition got status valid
+PROJECT_FILE.i:39:[value] Function mpz_clear: precondition got status valid.
 [value] Done for function mpz_clear
 [value] computing for function mpz_clear <- main.
         Called from PROJECT_FILE.i:147.
@@ -39,7 +39,7 @@ PROJECT_FILE.i:39:[value] Function mpz_clear: precondition got status valid
 [value] Done for function printf
 [value] computing for function exit <- e_acsl_fail <- main.
         Called from PROJECT_FILE.i:125.
-PROJECT_FILE.i:115:[value] Function exit: postcondition got status invalid
+PROJECT_FILE.i:115:[value] Function exit: postcondition got status invalid.
 [value] Done for function exit
 [value] Recording results for e_acsl_fail
 [value] Done for function e_acsl_fail
@@ -62,7 +62,7 @@ PROJECT_FILE.i:153:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:163.
 [value] Done for function mpz_init_set_si
-PROJECT_FILE.i:164:[value] Assertion got status invalid (stopping propagation)..
+PROJECT_FILE.i:164:[value] Assertion got status invalid (stopping propagation).
 [value] computing for function mpz_clear <- main.
         Called from PROJECT_FILE.i:174.
 [value] Done for function mpz_clear
@@ -123,7 +123,7 @@ PROJECT_FILE.i:196:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:207.
 [value] Done for function mpz_init_set_si
-PROJECT_FILE.i:208:[value] Assertion got status invalid (stopping propagation)..
+PROJECT_FILE.i:208:[value] Assertion got status invalid (stopping propagation).
 [value] computing for function mpz_clear <- main.
         Called from PROJECT_FILE.i:217.
 [value] Done for function mpz_clear
@@ -184,7 +184,7 @@ PROJECT_FILE.i:239:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:250.
 [value] Done for function mpz_init_set_si
-PROJECT_FILE.i:251:[value] Assertion got status invalid (stopping propagation)..
+PROJECT_FILE.i:251:[value] Assertion got status invalid (stopping propagation).
 [value] computing for function mpz_clear <- main.
         Called from PROJECT_FILE.i:260.
 [value] Done for function mpz_clear
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/nested_code_annot.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/nested_code_annot.res.oracle
index f0693c50a44cfca3ee84058434500a1c2ed63a79..6f6d95e3edbf2f076fbf00ccb7500f42f4025be4 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/nested_code_annot.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/nested_code_annot.res.oracle
@@ -6,7 +6,7 @@ tests/e-acsl-runtime/nested_code_annot.i:12:[kernel] warning: Body of function m
 PROJECT_FILE.i:134:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:141.
-PROJECT_FILE.i:29:[value] Function mpz_init_set_si: postcondition got status unknown.
+PROJECT_FILE.i:29:[value] Function mpz_init_set_si: postcondition got status valid.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:141.
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/other_constants.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/other_constants.res.oracle
index f0c78ccd69af31f45afce818ac8d934b261df275..e2d48d0b40d8aba6a621513cbd3b67a6473ea780 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/other_constants.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/other_constants.res.oracle
@@ -2,11 +2,11 @@
 [value] Computing initial state
 [value] Initial state computed
 [value] Values of globals at initialization
-PROJECT_FILE.i:134:[value] Assertion got status valid.
-PROJECT_FILE.i:137:[value] Assertion got status valid.
+PROJECT_FILE.i:134:[value] Assertion got status unknown.
+PROJECT_FILE.i:137:[value] Assertion got status unknown.
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:139.
-PROJECT_FILE.i:29:[value] Function mpz_init_set_si: postcondition got status unknown.
+PROJECT_FILE.i:29:[value] Function mpz_init_set_si: postcondition got status valid.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:139.
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/ptr.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/ptr.res.oracle
index 612d89375bd59c3ad62cc63a57d674c151abaaf7..7a43b69b087ed77c2b5d1fe10dfff1ad76e9c161 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/ptr.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/ptr.res.oracle
@@ -17,15 +17,15 @@ tests/e-acsl-runtime/ptr.i:26:[e-acsl] warning: missing guard for ensuring that
 PROJECT_FILE.i:138:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:140.
-PROJECT_FILE.i:29:[value] Function mpz_init_set_si: postcondition got status unknown
+PROJECT_FILE.i:29:[value] Function mpz_init_set_si: postcondition got status valid.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:140.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_cmp <- main.
         Called from PROJECT_FILE.i:141.
-PROJECT_FILE.i:45:[value] Function mpz_cmp: precondition got status valid
-PROJECT_FILE.i:46:[value] Function mpz_cmp: precondition got status valid
+PROJECT_FILE.i:45:[value] Function mpz_cmp: precondition got status valid.
+PROJECT_FILE.i:46:[value] Function mpz_cmp: precondition got status valid.
 [value] Done for function mpz_cmp
 [value] computing for function e_acsl_fail <- main.
         Called from PROJECT_FILE.i:142.
@@ -34,13 +34,13 @@ PROJECT_FILE.i:46:[value] Function mpz_cmp: precondition got status valid
 [value] Done for function printf
 [value] computing for function exit <- e_acsl_fail <- main.
         Called from PROJECT_FILE.i:125.
-PROJECT_FILE.i:115:[value] Function exit: postcondition got status invalid
+PROJECT_FILE.i:115:[value] Function exit: postcondition got status invalid.
 [value] Done for function exit
 [value] Recording results for e_acsl_fail
 [value] Done for function e_acsl_fail
 [value] computing for function mpz_clear <- main.
         Called from PROJECT_FILE.i:143.
-PROJECT_FILE.i:39:[value] Function mpz_clear: precondition got status valid
+PROJECT_FILE.i:39:[value] Function mpz_clear: precondition got status valid.
 [value] Done for function mpz_clear
 [value] computing for function mpz_clear <- main.
         Called from PROJECT_FILE.i:143.
@@ -106,13 +106,13 @@ PROJECT_FILE.i:162:[value] Assertion got status valid.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init <- main.
         Called from PROJECT_FILE.i:167.
-PROJECT_FILE.i:21:[value] Function mpz_init: postcondition got status unknown
+PROJECT_FILE.i:21:[value] Function mpz_init: postcondition got status valid.
 [value] Done for function mpz_init
 [value] computing for function mpz_mul <- main.
         Called from PROJECT_FILE.i:167.
-PROJECT_FILE.i:72:[value] Function mpz_mul: precondition got status valid
-PROJECT_FILE.i:73:[value] Function mpz_mul: precondition got status valid
-PROJECT_FILE.i:74:[value] Function mpz_mul: precondition got status valid
+PROJECT_FILE.i:72:[value] Function mpz_mul: precondition got status valid.
+PROJECT_FILE.i:73:[value] Function mpz_mul: precondition got status valid.
+PROJECT_FILE.i:74:[value] Function mpz_mul: precondition got status valid.
 [value] Done for function mpz_mul
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:168.
@@ -139,13 +139,13 @@ PROJECT_FILE.i:170:[value] Assertion got status valid.
 [value] Done for function e_acsl_fail
 [value] computing for function mpz_cdiv_q <- main.
         Called from PROJECT_FILE.i:172.
-PROJECT_FILE.i:78:[value] Function mpz_cdiv_q: precondition got status valid
-PROJECT_FILE.i:79:[value] Function mpz_cdiv_q: precondition got status valid
-PROJECT_FILE.i:80:[value] Function mpz_cdiv_q: precondition got status valid
+PROJECT_FILE.i:78:[value] Function mpz_cdiv_q: precondition got status valid.
+PROJECT_FILE.i:79:[value] Function mpz_cdiv_q: precondition got status valid.
+PROJECT_FILE.i:80:[value] Function mpz_cdiv_q: precondition got status valid.
 [value] Done for function mpz_cdiv_q
 [value] computing for function mpz_get_si <- main.
         Called from PROJECT_FILE.i:173.
-PROJECT_FILE.i:92:[value] Function mpz_get_si: precondition got status valid
+PROJECT_FILE.i:92:[value] Function mpz_get_si: precondition got status valid.
 [value] Done for function mpz_get_si
 PROJECT_FILE.i:174:[kernel] warning: accessing out of bounds index [-2147483648..2147483647].
                   assert 0 ≤ e_acsl_17 ∧ e_acsl_17 < 3;
@@ -208,9 +208,9 @@ PROJECT_FILE.i:186:[value] Assertion got status valid.
 [value] Done for function mpz_init
 [value] computing for function mpz_add <- main.
         Called from PROJECT_FILE.i:190.
-PROJECT_FILE.i:60:[value] Function mpz_add: precondition got status valid
-PROJECT_FILE.i:61:[value] Function mpz_add: precondition got status valid
-PROJECT_FILE.i:62:[value] Function mpz_add: precondition got status valid
+PROJECT_FILE.i:60:[value] Function mpz_add: precondition got status valid.
+PROJECT_FILE.i:61:[value] Function mpz_add: precondition got status valid.
+PROJECT_FILE.i:62:[value] Function mpz_add: precondition got status valid.
 [value] Done for function mpz_add
 [value] computing for function mpz_cmp <- main.
         Called from PROJECT_FILE.i:191.
@@ -249,9 +249,9 @@ PROJECT_FILE.i:197:[value] Assertion got status valid.
 [value] Done for function mpz_init
 [value] computing for function mpz_sub <- main.
         Called from PROJECT_FILE.i:202.
-PROJECT_FILE.i:66:[value] Function mpz_sub: precondition got status valid
-PROJECT_FILE.i:67:[value] Function mpz_sub: precondition got status valid
-PROJECT_FILE.i:68:[value] Function mpz_sub: precondition got status valid
+PROJECT_FILE.i:66:[value] Function mpz_sub: precondition got status valid.
+PROJECT_FILE.i:67:[value] Function mpz_sub: precondition got status valid.
+PROJECT_FILE.i:68:[value] Function mpz_sub: precondition got status valid.
 [value] Done for function mpz_sub
 [value] computing for function mpz_get_si <- main.
         Called from PROJECT_FILE.i:203.
@@ -405,6 +405,7 @@ PROJECT_FILE.i:197:[value] Assertion got status unknown.
 [value] computing for function mpz_get_si <- main.
         Called from PROJECT_FILE.i:203.
 [value] Done for function mpz_get_si
+PROJECT_FILE.i:204:[value] Assertion got status unknown.
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:204.
 [value] Done for function mpz_init_set_si
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/sizeof.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/sizeof.res.oracle
index e0448b250d0a9f46ad7aceb731ad9df34efa8752..723f3b5095d64432f85d58b609dc1175c2430e2b 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/sizeof.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/sizeof.res.oracle
@@ -5,7 +5,7 @@
 PROJECT_FILE.i:131:[value] Assertion got status valid.
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:133.
-PROJECT_FILE.i:29:[value] Function mpz_init_set_si: postcondition got status unknown.
+PROJECT_FILE.i:29:[value] Function mpz_init_set_si: postcondition got status valid.
 [value] Done for function mpz_init_set_si
 [value] computing for function mpz_init_set_si <- main.
         Called from PROJECT_FILE.i:133.
diff --git a/src/plugins/e-acsl/visit.ml b/src/plugins/e-acsl/visit.ml
index 52fc32115d6ad793cfb20112a5affc7278b3d765..2fc97d1856d4b509d72a7283e4fdf0139bbe50b0 100644
--- a/src/plugins/e-acsl/visit.ml
+++ b/src/plugins/e-acsl/visit.ml
@@ -141,60 +141,60 @@ let constant_to_exp ?(loc=Location.unknown) = function
   | CStr _ | CWStr _ | CChr _ | CReal _ | CEnum _ as c -> 
     new_exp ?loc (Const c), false
 
-let rec thost_to_host env = function
+let rec thost_to_host kf env = function
   | TVar { lv_origin = Some v } -> Var v, env
   | TVar { lv_origin = None } -> Misc.not_yet "logic variable"
   | TResult _typ -> Misc.not_yet "\\result"
   | TMem t ->
-    let e, env = term_to_exp env (Ctype intType) t in
+    let e, env = term_to_exp kf env (Ctype intType) t in
     Options.warning ~source:(fst e.eloc) ~once:true
       "missing guard for ensuring that %a is a valid memory access"
       d_term t;
     Mem e, env
 
-and toffset_to_offset ?loc env = function
+and toffset_to_offset ?loc kf env = function
   | TNoOffset -> NoOffset, env
   | TField(f, offset) -> 
     (* TODO: still untested *)
-    let offset, env = toffset_to_offset ?loc env offset in
+    let offset, env = toffset_to_offset ?loc kf env offset in
     Field(f, offset), env
   | TIndex(t, offset) -> 
-    let e, env = term_to_exp env (Ctype intType) t in
+    let e, env = term_to_exp kf env (Ctype intType) t in
     Options.warning ~source:(fst e.eloc) ~once:true
       "missing guard for ensuring that %a is a valid array index"
       d_term t;
-    let offset, env = toffset_to_offset env offset in
+    let offset, env = toffset_to_offset kf env offset in
     Index(e, offset), env
 
-and tlval_to_lval env (host, offset) = 
-  let host, env = thost_to_host env host in
-  let offset, env = toffset_to_offset env offset in
+and tlval_to_lval kf env (host, offset) = 
+  let host, env = thost_to_host kf env host in
+  let offset, env = toffset_to_offset kf env offset in
   (host, offset), env
 
-and context_insensitive_term_to_exp env t = 
+and context_insensitive_term_to_exp kf env t = 
   let loc = t.term_loc in
   match t.term_node with
   | TConst c -> 
     let c, is_mpz_string = constant_to_exp ~loc c in
     c, env, is_mpz_string
   | TLval lv -> 
-    let lv, env = tlval_to_lval env lv in
+    let lv, env = tlval_to_lval kf env lv in
     new_exp ~loc (Lval lv), env, false
   | TSizeOf ty -> sizeOf ~loc ty, env, false
   | TSizeOfE t ->
     let ty = t.term_type in
     assert (match ty with Ctype _ -> true | _ -> false);
-    let e, env = term_to_exp env ty t in
+    let e, env = term_to_exp kf env ty t in
     sizeOf ~loc (typeOf e), env, false
   | TSizeOfStr s -> new_exp ~loc (SizeOfStr s), env, false
   | TAlignOf ty -> new_exp ~loc (AlignOf ty), env, false
   | TAlignOfE t ->
     let ty = t.term_type in
     assert (match ty with Ctype _ -> true | _ -> false);
-    let e, env = term_to_exp env ty t in
+    let e, env = term_to_exp kf env ty t in
     new_exp ~loc (AlignOfE e), env, false
   | TUnOp(Neg | BNot as op, t) ->
-    let e, env = term_to_exp env Linteger t in
+    let e, env = term_to_exp kf env Linteger t in
     let name = match op with
       | Neg -> "mpz_neg"
       | BNot -> "mpz_com"
@@ -208,7 +208,7 @@ and context_insensitive_term_to_exp env t =
     e, env, false
   | TUnOp(LNot, t) ->
     let ty = t.term_type in
-    let e, env = term_to_exp env ty t in
+    let e, env = term_to_exp kf env ty t in
     (* TODO: preserve the old behavior. But that is incorrect if [t] is an 
        integer since we have to implement a ! over mpz values.
        Such a case is actually possible. *)
@@ -216,8 +216,8 @@ and context_insensitive_term_to_exp env t =
     new_exp ~loc (UnOp(LNot, e, intType)), env, false
   | TBinOp(PlusA | MinusA | Mult as bop, t1, t2) ->
     (* arithmetic binary operator not safely convertible into C *)
-    let e1, env = term_to_exp env Linteger t1 in
-    let e2, env = term_to_exp env Linteger t2 in
+    let e1, env = term_to_exp kf env Linteger t1 in
+    let e2, env = term_to_exp kf env Linteger t2 in
     assert (Typ.equal (typeOf e1) (typeOf e2));
     let name = name_of_mpz_arith_bop bop in
     let mk_stmts _ e = [ Misc.mk_call ~loc name [ e; e1; e2 ] ] in
@@ -226,18 +226,18 @@ and context_insensitive_term_to_exp env t =
   | TBinOp(Div | Mod as bop, t1, t2) ->
     (* arithmetic binary operator potentially convertible into C *)
     let ctx = principal_type_from_term t1 t2 in
-    let e1, env = term_to_exp env ctx t1 in
-    let e2, env = term_to_exp env ctx t2 in
+    let e1, env = term_to_exp kf env ctx t1 in
+    let e2, env = term_to_exp kf env ctx t2 in
     (* guarding divisions and modulos *)
     let zero = Logic_const.tinteger ~ikind:IInt 0 in
     (* do not generate [e2] from [t2] twice *)
-    let guard, env = comparison_to_exp env ~e1:(e2, ctx) Eq t2 zero in
+    let guard, env = comparison_to_exp kf env ~e1:(e2, ctx) Eq t2 zero in
     let mk_stmts v e = 
       let name = name_of_mpz_arith_bop bop in
       let cond = 
 	Misc.mk_e_acsl_guard guard (Logic_const.prel (Req, t2, zero)) 
       in
-      Env.add_assert cond (Logic_const.prel (Rneq, t2, zero));
+      Env.add_assert kf cond (Logic_const.prel (Rneq, t2, zero));
       let instr = match ctx with
 	| Ctype ty when isIntegralType ty -> 
 	  let e = new_exp ~loc (BinOp(bop, e1, e2, ty)) in
@@ -255,7 +255,7 @@ and context_insensitive_term_to_exp env t =
     e, env, false
   | TBinOp(Lt | Gt | Le | Ge | Eq | Ne as bop, t1, t2) ->
     (* comparison operators *)
-    let e, env = comparison_to_exp ~loc env bop t1 t2 in
+    let e, env = comparison_to_exp ~loc kf env bop t1 t2 in
     e, env, false
   | TBinOp((Shiftlt | Shiftrt), _, _) ->
     (* left/right shift *)
@@ -272,8 +272,8 @@ and context_insensitive_term_to_exp env t =
 	Ctype intType 
       | ty -> ty
     in
-    let e1, env = term_to_exp env (ctx_type t1) t1 in
-    let e2, env = term_to_exp env (ctx_type t2) t2 in
+    let e1, env = term_to_exp kf env (ctx_type t1) t1 in
+    let e2, env = term_to_exp kf env (ctx_type t2) t2 in
     Options.warning ~source:(fst loc) ~once:true
       "missing guard for ensuring that %a is a valid pointer"
       d_term t;
@@ -281,13 +281,13 @@ and context_insensitive_term_to_exp env t =
        whatever is [e2] *)
     new_exp ~loc (BinOp(bop, e1, e2, typeOf e1)), env, false
   | TCastE(ty, t) ->
-    let e, env = term_to_exp env (Ctype ty) t in
+    let e, env = term_to_exp kf env (Ctype ty) t in
     mkCast e ty, env, false
   | TAddrOf lv -> 
-    let lv, env = tlval_to_lval env lv in
+    let lv, env = tlval_to_lval kf env lv in
     mkAddrOf ~loc lv, env, false
   | TStartOf lv -> 
-    let lv, env = tlval_to_lval env lv in
+    let lv, env = tlval_to_lval kf env lv in
     mkAddrOrStartOf ~loc lv, env, false
   | Tapp _ -> Misc.not_yet "applying logic function"
   | Tlambda _ -> Misc.not_yet "functional"
@@ -312,12 +312,12 @@ and context_insensitive_term_to_exp env t =
 (* Convert an ACSL term into a corresponding C expression (if any) in the given
    environment. Also extend this environment which includes the generating
    constructs. *)
-and term_to_exp env ctx t = 
-  let e, env, is_mpz_string = context_insensitive_term_to_exp env t in
+and term_to_exp kf env ctx t = 
+  let e, env, is_mpz_string = context_insensitive_term_to_exp kf env t in
   context_sensitive ~loc:t.term_loc env ctx is_mpz_string e
 
 (* generate the C code equivalent to [t1 bop t2]. *)
-and comparison_to_exp ?(loc=Location.unknown) ?e1 env bop t1 t2 =
+and comparison_to_exp ?(loc=Location.unknown) kf ?e1 env bop t1 t2 =
   let ctx = match e1 with
     | None -> principal_type_from_term t1 t2 
     | Some(_, ctx) -> 
@@ -327,11 +327,11 @@ and comparison_to_exp ?(loc=Location.unknown) ?e1 env bop t1 t2 =
 (*  Options.feedback "principal type of %a and %a is %a" 
     d_term t1 d_term t2 d_logic_type ctx;*)
   let e1, env = match e1 with
-    | None -> term_to_exp env ctx t1
+    | None -> term_to_exp kf env ctx t1
     | Some(e1, ctx1) when Cil_datatype.Logic_type.equal ctx ctx1 -> e1, env
     | Some(e1, _) -> context_sensitive ~loc:e1.eloc env ctx false e1
   in
-  let e2, env = term_to_exp env ctx t2 in
+  let e2, env = term_to_exp kf env ctx t2 in
   match ctx with
   | Linteger ->
     let e, env =
@@ -347,7 +347,7 @@ and comparison_to_exp ?(loc=Location.unknown) ?e1 env bop t1 t2 =
 (* Convert an ACSL named predicate into a corresponding C expression (if
    any) in the given environment. Also extend this environment which includes
    the generating constructs. *)
-let rec named_predicate_to_exp env p = 
+let rec named_predicate_to_exp kf env p = 
   let loc = p.loc in
   match p.content with
   | Pfalse -> zero ~loc, env
@@ -355,13 +355,13 @@ let rec named_predicate_to_exp env p =
   | Papp _ -> Misc.not_yet "logic function application"
   | Pseparated _ -> Misc.not_yet "separated"
   | Prel(rel, t1, t2) -> 
-    let e, env = comparison_to_exp ~loc env (relation_to_binop rel) t1 t2 in
+    let e, env = comparison_to_exp ~loc kf env (relation_to_binop rel) t1 t2 in
     context_sensitive ~loc env (Ctype intType) false e
   | Pand(p1, p2) ->
     (* p1 && p2 <==> if p1 then p2 else false *)
-    let e1, env1 = named_predicate_to_exp env p1 in
+    let e1, env1 = named_predicate_to_exp kf env p1 in
     let e2, env2 = 
-      named_predicate_to_exp (Env.no_overlap ~from:env1 Env.empty) p2 
+      named_predicate_to_exp kf (Env.no_overlap ~from:env1 Env.empty) p2 
     in
     let env = Env.merge_block_vars ~from:env2 env1 in
     Env.new_var
@@ -379,9 +379,9 @@ let rec named_predicate_to_exp env p =
 	[ mkStmt ~valid_sid:true (If(e1, then_block, else_block, loc)) ])
   | Por(p1, p2) -> 
     (* p1 || p2 <==> if p1 then true else p2 *)
-    let e1, env1 = named_predicate_to_exp env p1 in
+    let e1, env1 = named_predicate_to_exp kf env p1 in
     let e2, env2 = 
-      named_predicate_to_exp (Env.no_overlap ~from:env1 Env.empty) p2 
+      named_predicate_to_exp kf (Env.no_overlap ~from:env1 Env.empty) p2 
     in
     let env = Env.merge_block_vars ~from:env2 env1 in
     Env.new_var
@@ -399,10 +399,10 @@ let rec named_predicate_to_exp env p =
 	[ mkStmt ~valid_sid:true (If(e1, then_block, else_block, loc)) ])
   | Pxor _ -> Misc.not_yet "xor"
   | Pimplies(p1, p2) -> 
-    named_predicate_to_exp env (Logic_const.por ((Logic_const.pnot p1), p2))
+    named_predicate_to_exp kf env (Logic_const.por ((Logic_const.pnot p1), p2))
   | Piff _ -> Misc.not_yet "<==>"
   | Pnot p ->
-    let e, env = named_predicate_to_exp env p in
+    let e, env = named_predicate_to_exp kf env p in
     new_exp ~loc (UnOp(LNot, e, TInt(IInt, []))), env
   | Pif _ -> Misc.not_yet "_ ? _ : _"
   | Plet _ -> Misc.not_yet "let _ = _ in _"
@@ -421,7 +421,7 @@ let rec named_predicate_to_exp env p =
    statement (if any) for runtime assertion checking *)
 (* ************************************************************************** *)
 
-let convert_preconditions env behaviors =
+let convert_preconditions kf env behaviors =
   let do_behavior env b = 
     let assumes_pred =
       List.fold_left
@@ -434,14 +434,14 @@ let convert_preconditions env behaviors =
 	let p = 
 	  Logic_const.pimplies (assumes_pred, Logic_const.unamed p.ip_content)
 	in
-	let e, env = named_predicate_to_exp env p in
+	let e, env = named_predicate_to_exp kf env p in
 	Env.add_stmt env (Misc.mk_e_acsl_guard ~reverse:true e p))
       env
       b.b_requires
   in 
   List.fold_left do_behavior env behaviors
 
-let convert_postconditions env behaviors =
+let convert_postconditions kf env behaviors =
   (* generate one guard by postcondition of each behavior *)
   let do_behavior env b = 
     List.fold_left
@@ -452,7 +452,7 @@ let convert_postconditions env behaviors =
 	    if p <> Ptrue && b.b_assumes <> [] then 
 	      Misc.not_yet "assumes in conjunction with ensures in behaviors";
 	    let p = Logic_const.unamed p in
-	    let e, env = named_predicate_to_exp env p in
+	    let e, env = named_predicate_to_exp kf env p in
 	    Env.add_stmt env (Misc.mk_e_acsl_guard ~reverse:true e p)
 	  | Exits | Breaks | Continues | Returns ->
 	    Misc.not_yet "abnormal termination case in behavior")
@@ -461,7 +461,7 @@ let convert_postconditions env behaviors =
   in 
   List.fold_left do_behavior env behaviors
 
-let convert_behaviors env behaviors =
+let convert_behaviors kf env behaviors =
   List.iter
     (fun b ->
       if b.b_assigns <> WritesAny then 
@@ -469,10 +469,11 @@ let convert_behaviors env behaviors =
       if b.b_extended <> [] then Misc.not_yet "grammar extensions in behavior")
     behaviors;
   let pre_env = 
-    convert_preconditions (Env.no_overlap ~from:env Env.empty) behaviors 
+    convert_preconditions kf (Env.no_overlap ~from:env Env.empty) behaviors 
   in
   let post_env = 
-    convert_postconditions (Env.no_overlap ~from:pre_env Env.empty) behaviors 
+    convert_postconditions kf 
+      (Env.no_overlap ~from:pre_env Env.empty) behaviors 
   in
   let env = Env.merge_function_vars ~from:pre_env env in
   let env = Env.merge_function_vars ~from:post_env env in
@@ -480,29 +481,29 @@ let convert_behaviors env behaviors =
   Env.close_block_option post_env,
   env
 
-let convert_spec env spec =
+let convert_spec kf env spec =
   if spec.spec_variant <> None then Misc.not_yet "variant clause";
   if spec.spec_terminates <> None then Misc.not_yet "terminates clause";
   if spec.spec_complete_behaviors <> [] then Misc.not_yet "complete behaviors";
   if spec.spec_disjoint_behaviors <> [] then Misc.not_yet "disjoint behaviors";
-  convert_behaviors env spec.spec_behavior
+  convert_behaviors kf env spec.spec_behavior
 
-let convert_named_predicate env p =
-  let e, env = named_predicate_to_exp env p in
+let convert_named_predicate kf env p =
+  let e, env = named_predicate_to_exp kf env p in
   assert (Typ.equal (typeOf e) intType);
   Env.add_stmt env (Misc.mk_e_acsl_guard ~reverse:true e p)
 
-let convert_code_annotation env annot =
+let convert_code_annotation kf env annot =
   try
     match annot.annot_content with
     | AAssert(l, p) -> 
       if l <> [] then Misc.not_yet "assertions applied only on some behaviors";
-      convert_named_predicate env p, None
+      convert_named_predicate kf env p, None
     | AStmtSpec(l, spec) ->
       if l <> [] then 
         Misc.not_yet "statement contract applied only on some behaviors";
       let pre_block, post_block, new_env =
-	convert_spec env spec 
+	convert_spec kf env spec 
       in
       let env = Env.merge_function_vars ~from:new_env env in
       let env = match pre_block with
@@ -559,8 +560,12 @@ class e_acsl_visitor prj generate = object (self)
 	  (self :> Visitor.frama_c_visitor)
 	  (Kernel_function.get_spec old_kf)
       in
+      (* We definitely are inside a function here. *)
+      let kf =
+        Cil.get_kernel_function self#behavior (Extlib.the self#current_kf)
+      in
       let pre_b, post_b, env = 
-	Project.on prj (convert_spec Env.empty) spec
+	Project.on prj (convert_spec kf Env.empty) spec
       in
       pre_block <- pre_b;
       post_block <- post_b;
@@ -586,13 +591,19 @@ class e_acsl_visitor prj generate = object (self)
     let env, post_stmts =
       Annotations.single_fold_stmt
 	(fun (User old_a | AI(_, old_a)) (env, post_stmts) -> 
-	  let a = 
-	    Visitor.visitFramacCodeAnnotation
-	      (self :> Visitor.frama_c_visitor)
+	  let a =
+            (* [VP] Don't use Visitor here, as it will fill the
+               queue in the middle of the computation...
+             *)
+	    Cil.visitCilCodeAnnotation
+	      (self :> Cil.cilVisitor)
 	      old_a
 	  in
+          let kf =
+            Cil.get_kernel_function self#behavior (Extlib.the self#current_kf)
+          in
 	  let env, post_block = 
-	    Project.on prj (convert_code_annotation env) a
+	    Project.on prj (convert_code_annotation kf env) a
 	  in
 	  let post_stmts = match post_block with
 	    | None -> post_stmts