diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/function_contract.i b/src/plugins/e-acsl/tests/e-acsl-runtime/function_contract.i
index e3002072d798c5c8aa42a6664015e5675e016be9..89d51537c241d2c97838d214355977e9e1676bb7 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/function_contract.i
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/function_contract.i
@@ -63,6 +63,17 @@ int l() {
   @   ensures X == \old(X) + Y; */
 void m(void) { X += Y; }
 
+// mix requires, ensures and assumes
+/*@ requires X > 0;
+  @ requires X < 10;
+  @ behavior b1:
+  @   assumes X == 7;
+  @   ensures X == 8;
+  @ behavior b2:
+  @   assumes X == 5;
+  @   ensures X == 98; */
+void n(void) { X ++; }
+
 int main(void) {
   f();
   g();
@@ -72,5 +83,6 @@ int main(void) {
   k();
   l();
   m();
+  n();
   return 0;
 }
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/function_contract.1.res.oracle b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/function_contract.1.res.oracle
index 29db38b07613efb88a79c23afaaf3cf95ab4437e..1349b58541fa9d9824ca4063b13ee7af6e9e0cb5 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/function_contract.1.res.oracle
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/function_contract.1.res.oracle
@@ -5,7 +5,7 @@
         X ∈ {0}
         Y ∈ {2}
 [value] computing for function f <- main.
-        Called from PROJECT_FILE.i:697.
+        Called from PROJECT_FILE.i:792.
 [value] computing for function __gmpz_init_set_si <- f <- main.
         Called from PROJECT_FILE.i:251.
 [value] using specification for function __gmpz_init_set_si
@@ -37,7 +37,7 @@ PROJECT_FILE.i:243:[value] Function f: postcondition got status valid.
 [value] Recording results for f
 [value] Done for function f
 [value] computing for function g <- main.
-        Called from PROJECT_FILE.i:698.
+        Called from PROJECT_FILE.i:793.
 [value] computing for function __gmpz_init_set_si <- g <- main.
         Called from PROJECT_FILE.i:273.
 [value] Done for function __gmpz_init_set_si
@@ -75,7 +75,7 @@ PROJECT_FILE.i:263:[value] Function g: postcondition got status valid.
 [value] Recording results for g
 [value] Done for function g
 [value] computing for function h <- main.
-        Called from PROJECT_FILE.i:699.
+        Called from PROJECT_FILE.i:794.
 PROJECT_FILE.i:288:[value] Function h: precondition got status valid.
 [value] computing for function __gmpz_init_set_si <- h <- main.
         Called from PROJECT_FILE.i:295.
@@ -99,7 +99,7 @@ PROJECT_FILE.i:288:[value] Function h: precondition got status valid.
 [value] Recording results for h
 [value] Done for function h
 [value] computing for function i <- main.
-        Called from PROJECT_FILE.i:700.
+        Called from PROJECT_FILE.i:795.
 PROJECT_FILE.i:307:[value] Function i: precondition got status valid.
 PROJECT_FILE.i:308:[value] Function i: precondition got status valid.
 [value] computing for function __gmpz_init_set_si <- i <- main.
@@ -143,7 +143,7 @@ PROJECT_FILE.i:308:[value] Function i: precondition got status valid.
 [value] Recording results for i
 [value] Done for function i
 [value] computing for function j <- main.
-        Called from PROJECT_FILE.i:701.
+        Called from PROJECT_FILE.i:796.
 PROJECT_FILE.i:337:[value] Function j, behavior b1: precondition got status valid.
 PROJECT_FILE.i:341:[value] Function j, behavior b2: precondition got status valid.
 PROJECT_FILE.i:342:[value] Function j, behavior b2: precondition got status valid.
@@ -265,7 +265,7 @@ PROJECT_FILE.i:343:[value] Function j, behavior b2: postcondition got status val
 [value] Recording results for j
 [value] Done for function j
 [value] computing for function k <- main.
-        Called from PROJECT_FILE.i:702.
+        Called from PROJECT_FILE.i:797.
 PROJECT_FILE.i:411:[value] Function k, behavior b1: assumption got status invalid; precondition not evaluated.
 PROJECT_FILE.i:416:[value] Function k, behavior b2: precondition got status valid.
 PROJECT_FILE.i:417:[value] Function k, behavior b2: precondition got status valid.
@@ -402,7 +402,7 @@ PROJECT_FILE.i:446:[value] assigning non deterministic value for the first time
 [value] Recording results for k
 [value] Done for function k
 [value] computing for function l <- main.
-        Called from PROJECT_FILE.i:703.
+        Called from PROJECT_FILE.i:798.
 PROJECT_FILE.i:525:[value] Assertion got status valid.
 [value] computing for function __gmpz_init_set_si <- l <- main.
         Called from PROJECT_FILE.i:530.
@@ -446,7 +446,7 @@ PROJECT_FILE.i:522:[value] Function l: postcondition got status valid.
 [value] Recording results for l
 [value] Done for function l
 [value] computing for function m <- main.
-        Called from PROJECT_FILE.i:704.
+        Called from PROJECT_FILE.i:799.
 [value] computing for function __gmpz_init_set_si <- m <- main.
         Called from PROJECT_FILE.i:578.
 [value] Done for function __gmpz_init_set_si
@@ -599,6 +599,114 @@ PROJECT_FILE.i:561:[value] Function m, behavior b2: postcondition got status val
 PROJECT_FILE.i:562:[value] Function m, behavior b2: postcondition got status valid.
 [value] Recording results for m
 [value] Done for function m
+[value] computing for function n <- main.
+        Called from PROJECT_FILE.i:800.
+PROJECT_FILE.i:694:[value] Function n: precondition got status valid.
+PROJECT_FILE.i:695:[value] Function n: precondition got status valid.
+[value] computing for function __gmpz_init_set_si <- n <- main.
+        Called from PROJECT_FILE.i:716.
+[value] Done for function __gmpz_init_set_si
+[value] computing for function __gmpz_init_set_si <- n <- main.
+        Called from PROJECT_FILE.i:717.
+[value] Done for function __gmpz_init_set_si
+[value] computing for function __gmpz_cmp <- n <- main.
+        Called from PROJECT_FILE.i:718.
+[value] Done for function __gmpz_cmp
+[value] computing for function e_acsl_assert <- n <- main.
+        Called from PROJECT_FILE.i:719.
+[value] Recording results for e_acsl_assert
+[value] Done for function e_acsl_assert
+[value] computing for function __gmpz_init_set_si <- n <- main.
+        Called from PROJECT_FILE.i:720.
+[value] Done for function __gmpz_init_set_si
+[value] computing for function __gmpz_cmp <- n <- main.
+        Called from PROJECT_FILE.i:721.
+[value] Done for function __gmpz_cmp
+[value] computing for function e_acsl_assert <- n <- main.
+        Called from PROJECT_FILE.i:722.
+[value] Recording results for e_acsl_assert
+[value] Done for function e_acsl_assert
+[value] computing for function __gmpz_clear <- n <- main.
+        Called from PROJECT_FILE.i:723.
+[value] Done for function __gmpz_clear
+[value] computing for function __gmpz_clear <- n <- main.
+        Called from PROJECT_FILE.i:724.
+[value] Done for function __gmpz_clear
+[value] computing for function __gmpz_clear <- n <- main.
+        Called from PROJECT_FILE.i:725.
+[value] Done for function __gmpz_clear
+[value] computing for function __gmpz_init_set_si <- n <- main.
+        Called from PROJECT_FILE.i:730.
+[value] Done for function __gmpz_init_set_si
+[value] computing for function __gmpz_init_set_si <- n <- main.
+        Called from PROJECT_FILE.i:731.
+[value] Done for function __gmpz_init_set_si
+[value] computing for function __gmpz_cmp <- n <- main.
+        Called from PROJECT_FILE.i:732.
+[value] Done for function __gmpz_cmp
+[value] computing for function __gmpz_clear <- n <- main.
+        Called from PROJECT_FILE.i:734.
+[value] Done for function __gmpz_clear
+[value] computing for function __gmpz_clear <- n <- main.
+        Called from PROJECT_FILE.i:735.
+[value] Done for function __gmpz_clear
+[value] computing for function __gmpz_init_set_si <- n <- main.
+        Called from PROJECT_FILE.i:742.
+[value] Done for function __gmpz_init_set_si
+[value] computing for function __gmpz_init_set_si <- n <- main.
+        Called from PROJECT_FILE.i:743.
+[value] Done for function __gmpz_init_set_si
+[value] computing for function __gmpz_cmp <- n <- main.
+        Called from PROJECT_FILE.i:744.
+[value] Done for function __gmpz_cmp
+[value] computing for function __gmpz_clear <- n <- main.
+        Called from PROJECT_FILE.i:746.
+[value] Done for function __gmpz_clear
+[value] computing for function __gmpz_clear <- n <- main.
+        Called from PROJECT_FILE.i:747.
+[value] Done for function __gmpz_clear
+[value] computing for function __gmpz_init_set_si <- n <- main.
+        Called from PROJECT_FILE.i:761.
+[value] Done for function __gmpz_init_set_si
+[value] computing for function __gmpz_init_set_si <- n <- main.
+        Called from PROJECT_FILE.i:762.
+[value] Done for function __gmpz_init_set_si
+[value] computing for function __gmpz_cmp <- n <- main.
+        Called from PROJECT_FILE.i:763.
+[value] Done for function __gmpz_cmp
+[value] computing for function __gmpz_clear <- n <- main.
+        Called from PROJECT_FILE.i:765.
+[value] Done for function __gmpz_clear
+[value] computing for function __gmpz_clear <- n <- main.
+        Called from PROJECT_FILE.i:766.
+[value] Done for function __gmpz_clear
+[value] computing for function e_acsl_assert <- n <- main.
+        Called from PROJECT_FILE.i:768.
+[value] Recording results for e_acsl_assert
+[value] Done for function e_acsl_assert
+[value] computing for function __gmpz_init_set_si <- n <- main.
+        Called from PROJECT_FILE.i:775.
+[value] Done for function __gmpz_init_set_si
+[value] computing for function __gmpz_init_set_si <- n <- main.
+        Called from PROJECT_FILE.i:776.
+[value] Done for function __gmpz_init_set_si
+[value] computing for function __gmpz_cmp <- n <- main.
+        Called from PROJECT_FILE.i:777.
+[value] Done for function __gmpz_cmp
+[value] computing for function __gmpz_clear <- n <- main.
+        Called from PROJECT_FILE.i:779.
+[value] Done for function __gmpz_clear
+[value] computing for function __gmpz_clear <- n <- main.
+        Called from PROJECT_FILE.i:780.
+[value] Done for function __gmpz_clear
+[value] computing for function e_acsl_assert <- n <- main.
+        Called from PROJECT_FILE.i:782.
+[value] Recording results for e_acsl_assert
+[value] Done for function e_acsl_assert
+PROJECT_FILE.i:698:[value] Function n, behavior b1: postcondition got status valid.
+PROJECT_FILE.i:702:[value] Function n, behavior b2: assumes got status invalid; post-condition not evaluated.
+[value] Recording results for n
+[value] Done for function n
 [value] Recording results for main
 [value] done for function main
 [value] ====== VALUES COMPUTED ======
@@ -622,8 +730,12 @@ PROJECT_FILE.i:562:[value] Function m, behavior b2: postcondition got status val
           __e_acsl_at_2 ∈ {0; 1}
           __e_acsl_at_3 ∈ {0; 1}
           __e_acsl_at_4 ∈ {5}
+[value] Values at end of function n:
+          X ∈ {8}
+          __e_acsl_at ∈ {0; 1}
+          __e_acsl_at_2 ∈ {0; 1}
 [value] Values at end of function main:
-          X ∈ {7}
+          X ∈ {8}
           __retres ∈ {0}
 /* Generated by Frama-C */
 struct __anonstruct___mpz_struct_1 {
@@ -1192,6 +1304,109 @@ void m(void)
   
 }
 
+/*@ requires X > 0;
+    requires X < 10;
+    behavior b1:
+      assumes X ≡ 7;
+      ensures X ≡ 8;
+      
+    behavior b2:
+      assumes X ≡ 5;
+      ensures X ≡ 98;
+      
+  
+*/
+void n(void)
+{
+  int __e_acsl_at;
+  int __e_acsl_at_2;
+  {
+    mpz_t __e_acsl_X;
+    mpz_t __e_acsl;
+    int __e_acsl_gt;
+    mpz_t __e_acsl_2;
+    int __e_acsl_lt;
+    __gmpz_init_set_si((__mpz_struct *)(__e_acsl_X),(long)X);
+    __gmpz_init_set_si((__mpz_struct *)(__e_acsl),(long)0);
+    __e_acsl_gt = __gmpz_cmp((__mpz_struct const *)(__e_acsl_X),
+                             (__mpz_struct const *)(__e_acsl));
+    e_acsl_assert(__e_acsl_gt > 0,(char *)"Precondition",(char *)"(X > 0)",
+                  67);
+    __gmpz_init_set_si((__mpz_struct *)(__e_acsl_2),(long)10);
+    __e_acsl_lt = __gmpz_cmp((__mpz_struct const *)(__e_acsl_X),
+                             (__mpz_struct const *)(__e_acsl_2));
+    e_acsl_assert(__e_acsl_lt < 0,(char *)"Precondition",(char *)"(X < 10)",
+                  68);
+    __gmpz_clear((__mpz_struct *)(__e_acsl_X));
+    __gmpz_clear((__mpz_struct *)(__e_acsl));
+    __gmpz_clear((__mpz_struct *)(__e_acsl_2));
+    {
+      mpz_t __e_acsl_X_4;
+      mpz_t __e_acsl_5;
+      int __e_acsl_eq_3;
+      __gmpz_init_set_si((__mpz_struct *)(__e_acsl_X_4),(long)X);
+      __gmpz_init_set_si((__mpz_struct *)(__e_acsl_5),(long)5);
+      __e_acsl_eq_3 = __gmpz_cmp((__mpz_struct const *)(__e_acsl_X_4),
+                                 (__mpz_struct const *)(__e_acsl_5));
+      __e_acsl_at_2 = __e_acsl_eq_3 == 0;
+      __gmpz_clear((__mpz_struct *)(__e_acsl_X_4));
+      __gmpz_clear((__mpz_struct *)(__e_acsl_5));
+    }
+    
+    {
+      mpz_t __e_acsl_X_2;
+      mpz_t __e_acsl_3;
+      int __e_acsl_eq;
+      __gmpz_init_set_si((__mpz_struct *)(__e_acsl_X_2),(long)X);
+      __gmpz_init_set_si((__mpz_struct *)(__e_acsl_3),(long)7);
+      __e_acsl_eq = __gmpz_cmp((__mpz_struct const *)(__e_acsl_X_2),
+                               (__mpz_struct const *)(__e_acsl_3));
+      __e_acsl_at = __e_acsl_eq == 0;
+      __gmpz_clear((__mpz_struct *)(__e_acsl_X_2));
+      __gmpz_clear((__mpz_struct *)(__e_acsl_3));
+    }
+    
+    X ++;
+  }
+  
+  {
+    int __e_acsl_implies;
+    int __e_acsl_implies_2;
+    if (! __e_acsl_at) { __e_acsl_implies = 1; }
+    else {
+      mpz_t __e_acsl_X_3;
+      mpz_t __e_acsl_4;
+      int __e_acsl_eq_2;
+      __gmpz_init_set_si((__mpz_struct *)(__e_acsl_X_3),(long)X);
+      __gmpz_init_set_si((__mpz_struct *)(__e_acsl_4),(long)8);
+      __e_acsl_eq_2 = __gmpz_cmp((__mpz_struct const *)(__e_acsl_X_3),
+                                 (__mpz_struct const *)(__e_acsl_4));
+      __e_acsl_implies = __e_acsl_eq_2 == 0;
+      __gmpz_clear((__mpz_struct *)(__e_acsl_X_3));
+      __gmpz_clear((__mpz_struct *)(__e_acsl_4));
+    }
+    e_acsl_assert(__e_acsl_implies,(char *)"Postcondition",
+                  (char *)"(\\old(X == 7) ==> X == 8)",71);
+    if (! __e_acsl_at_2) { __e_acsl_implies_2 = 1; }
+    else {
+      mpz_t __e_acsl_X_5;
+      mpz_t __e_acsl_6;
+      int __e_acsl_eq_4;
+      __gmpz_init_set_si((__mpz_struct *)(__e_acsl_X_5),(long)X);
+      __gmpz_init_set_si((__mpz_struct *)(__e_acsl_6),(long)98);
+      __e_acsl_eq_4 = __gmpz_cmp((__mpz_struct const *)(__e_acsl_X_5),
+                                 (__mpz_struct const *)(__e_acsl_6));
+      __e_acsl_implies_2 = __e_acsl_eq_4 == 0;
+      __gmpz_clear((__mpz_struct *)(__e_acsl_X_5));
+      __gmpz_clear((__mpz_struct *)(__e_acsl_6));
+    }
+    e_acsl_assert(__e_acsl_implies_2,(char *)"Postcondition",
+                  (char *)"(\\old(X == 5) ==> X == 98)",74);
+    return;
+  }
+  
+}
+
 int main(void)
 {
   int __retres;
@@ -1203,6 +1418,7 @@ int main(void)
   k();
   l();
   m();
+  n();
   __retres = 0;
   return (__retres);
 }
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 88e50b41ba606374001a820595751010bab36374..e7e2a7b86f573bd80d934867a7668bd0b012cc9c 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
@@ -5,7 +5,7 @@
         X ∈ {0}
         Y ∈ {2}
 [value] computing for function f <- main.
-        Called from PROJECT_FILE.i:414.
+        Called from PROJECT_FILE.i:451.
 [value] computing for function e_acsl_assert <- f <- main.
         Called from PROJECT_FILE.i:247.
 PROJECT_FILE.i:231:[value] Function e_acsl_assert: precondition got status valid.
@@ -15,7 +15,7 @@ PROJECT_FILE.i:243:[value] Function f: postcondition got status valid.
 [value] Recording results for f
 [value] Done for function f
 [value] computing for function g <- main.
-        Called from PROJECT_FILE.i:415.
+        Called from PROJECT_FILE.i:452.
 [value] computing for function e_acsl_assert <- g <- main.
         Called from PROJECT_FILE.i:256.
 [value] Recording results for e_acsl_assert
@@ -29,7 +29,7 @@ PROJECT_FILE.i:252:[value] Function g: postcondition got status valid.
 [value] Recording results for g
 [value] Done for function g
 [value] computing for function h <- main.
-        Called from PROJECT_FILE.i:416.
+        Called from PROJECT_FILE.i:453.
 PROJECT_FILE.i:261:[value] Function h: precondition got status valid.
 [value] computing for function e_acsl_assert <- h <- main.
         Called from PROJECT_FILE.i:264.
@@ -38,7 +38,7 @@ PROJECT_FILE.i:261:[value] Function h: precondition got status valid.
 [value] Recording results for h
 [value] Done for function h
 [value] computing for function i <- main.
-        Called from PROJECT_FILE.i:417.
+        Called from PROJECT_FILE.i:454.
 PROJECT_FILE.i:269:[value] Function i: precondition got status valid.
 PROJECT_FILE.i:270:[value] Function i: precondition got status valid.
 [value] computing for function e_acsl_assert <- i <- main.
@@ -52,7 +52,7 @@ PROJECT_FILE.i:270:[value] Function i: precondition got status valid.
 [value] Recording results for i
 [value] Done for function i
 [value] computing for function j <- main.
-        Called from PROJECT_FILE.i:418.
+        Called from PROJECT_FILE.i:455.
 PROJECT_FILE.i:280:[value] Function j, behavior b1: precondition got status valid.
 PROJECT_FILE.i:284:[value] Function j, behavior b2: precondition got status valid.
 PROJECT_FILE.i:285:[value] Function j, behavior b2: precondition got status valid.
@@ -81,7 +81,7 @@ PROJECT_FILE.i:286:[value] Function j, behavior b2: postcondition got status val
 [value] Recording results for j
 [value] Done for function j
 [value] computing for function k <- main.
-        Called from PROJECT_FILE.i:419.
+        Called from PROJECT_FILE.i:456.
 PROJECT_FILE.i:305:[value] Function k, behavior b1: assumption got status invalid; precondition not evaluated.
 PROJECT_FILE.i:310:[value] Function k, behavior b2: precondition got status valid.
 PROJECT_FILE.i:311:[value] Function k, behavior b2: precondition got status valid.
@@ -100,7 +100,7 @@ PROJECT_FILE.i:311:[value] Function k, behavior b2: precondition got status vali
 [value] Recording results for k
 [value] Done for function k
 [value] computing for function l <- main.
-        Called from PROJECT_FILE.i:420.
+        Called from PROJECT_FILE.i:457.
 PROJECT_FILE.i:348:[value] Assertion got status valid.
 [value] computing for function e_acsl_assert <- l <- main.
         Called from PROJECT_FILE.i:349.
@@ -114,7 +114,7 @@ PROJECT_FILE.i:345:[value] Function l: postcondition got status valid.
 [value] Recording results for l
 [value] Done for function l
 [value] computing for function m <- main.
-        Called from PROJECT_FILE.i:421.
+        Called from PROJECT_FILE.i:458.
 [value] computing for function e_acsl_assert <- m <- main.
         Called from PROJECT_FILE.i:394.
 [value] Recording results for e_acsl_assert
@@ -132,6 +132,30 @@ PROJECT_FILE.i:362:[value] Function m, behavior b2: postcondition got status val
 PROJECT_FILE.i:363:[value] Function m, behavior b2: postcondition got status valid.
 [value] Recording results for m
 [value] Done for function m
+[value] computing for function n <- main.
+        Called from PROJECT_FILE.i:459.
+PROJECT_FILE.i:411:[value] Function n: precondition got status valid.
+PROJECT_FILE.i:412:[value] Function n: precondition got status valid.
+[value] computing for function e_acsl_assert <- n <- main.
+        Called from PROJECT_FILE.i:427.
+[value] Recording results for e_acsl_assert
+[value] Done for function e_acsl_assert
+[value] computing for function e_acsl_assert <- n <- main.
+        Called from PROJECT_FILE.i:428.
+[value] Recording results for e_acsl_assert
+[value] Done for function e_acsl_assert
+[value] computing for function e_acsl_assert <- n <- main.
+        Called from PROJECT_FILE.i:437.
+[value] Recording results for e_acsl_assert
+[value] Done for function e_acsl_assert
+[value] computing for function e_acsl_assert <- n <- main.
+        Called from PROJECT_FILE.i:441.
+[value] Recording results for e_acsl_assert
+[value] Done for function e_acsl_assert
+PROJECT_FILE.i:415:[value] Function n, behavior b1: postcondition got status valid.
+PROJECT_FILE.i:419:[value] Function n, behavior b2: assumes got status invalid; post-condition not evaluated.
+[value] Recording results for n
+[value] Done for function n
 [value] Recording results for main
 [value] done for function main
 [value] ====== VALUES COMPUTED ======
@@ -155,8 +179,12 @@ PROJECT_FILE.i:363:[value] Function m, behavior b2: postcondition got status val
           __e_acsl_at_2 ∈ {1}
           __e_acsl_at_3 ∈ {1}
           __e_acsl_at_4 ∈ {5}
+[value] Values at end of function n:
+          X ∈ {8}
+          __e_acsl_at ∈ {1}
+          __e_acsl_at_2 ∈ {0}
 [value] Values at end of function main:
-          X ∈ {7}
+          X ∈ {8}
           __retres ∈ {0}
 /* Generated by Frama-C */
 struct __anonstruct___mpz_struct_1 {
@@ -356,6 +384,43 @@ void m(void)
   
 }
 
+/*@ requires X > 0;
+    requires X < 10;
+    behavior b1:
+      assumes X ≡ 7;
+      ensures X ≡ 8;
+      
+    behavior b2:
+      assumes X ≡ 5;
+      ensures X ≡ 98;
+      
+  
+*/
+void n(void)
+{
+  int __e_acsl_at;
+  int __e_acsl_at_2;
+  e_acsl_assert(X > 0,(char *)"Precondition",(char *)"(X > 0)",67);
+  e_acsl_assert(X < 10,(char *)"Precondition",(char *)"(X < 10)",68);
+  __e_acsl_at_2 = X == 5;
+  __e_acsl_at = X == 7;
+  X ++;
+  {
+    int __e_acsl_implies;
+    int __e_acsl_implies_2;
+    if (! __e_acsl_at) { __e_acsl_implies = 1; }
+    else { __e_acsl_implies = X == 8; }
+    e_acsl_assert(__e_acsl_implies,(char *)"Postcondition",
+                  (char *)"(\\old(X == 7) ==> X == 8)",71);
+    if (! __e_acsl_at_2) { __e_acsl_implies_2 = 1; }
+    else { __e_acsl_implies_2 = X == 98; }
+    e_acsl_assert(__e_acsl_implies_2,(char *)"Postcondition",
+                  (char *)"(\\old(X == 5) ==> X == 98)",74);
+    return;
+  }
+  
+}
+
 int main(void)
 {
   int __retres;
@@ -367,6 +432,7 @@ int main(void)
   k();
   l();
   m();
+  n();
   __retres = 0;
   return (__retres);
 }
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_function_contract.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_function_contract.c
index 0285beae055f9d7a7f6682885d0818ebcf4f295d..58f94f55cfdc1927dbdb9ecd53103c18c6a70988 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_function_contract.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_function_contract.c
@@ -196,6 +196,43 @@ void m(void)
   
 }
 
+/*@ requires X > 0;
+    requires X < 10;
+    behavior b1:
+      assumes X ≡ 7;
+      ensures X ≡ 8;
+      
+    behavior b2:
+      assumes X ≡ 5;
+      ensures X ≡ 98;
+      
+  
+*/
+void n(void)
+{
+  int __e_acsl_at;
+  int __e_acsl_at_2;
+  e_acsl_assert(X > 0,(char *)"Precondition",(char *)"(X > 0)",67);
+  e_acsl_assert(X < 10,(char *)"Precondition",(char *)"(X < 10)",68);
+  __e_acsl_at_2 = X == 5;
+  __e_acsl_at = X == 7;
+  X ++;
+  {
+    int __e_acsl_implies;
+    int __e_acsl_implies_2;
+    if (! __e_acsl_at) { __e_acsl_implies = 1; }
+    else { __e_acsl_implies = X == 8; }
+    e_acsl_assert(__e_acsl_implies,(char *)"Postcondition",
+                  (char *)"(\\old(X == 7) ==> X == 8)",71);
+    if (! __e_acsl_at_2) { __e_acsl_implies_2 = 1; }
+    else { __e_acsl_implies_2 = X == 98; }
+    e_acsl_assert(__e_acsl_implies_2,(char *)"Postcondition",
+                  (char *)"(\\old(X == 5) ==> X == 98)",74);
+    return;
+  }
+  
+}
+
 int main(void)
 {
   int __retres;
@@ -207,6 +244,7 @@ int main(void)
   k();
   l();
   m();
+  n();
   __retres = 0;
   return (__retres);
 }
diff --git a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_function_contract2.c b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_function_contract2.c
index fba1ec725786986b5f47396b5094b8bf781f2503..3d6b00f3429fd1c661fb1ecfb4a49eb825162ba6 100644
--- a/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_function_contract2.c
+++ b/src/plugins/e-acsl/tests/e-acsl-runtime/oracle/gen_function_contract2.c
@@ -561,6 +561,109 @@ void m(void)
   
 }
 
+/*@ requires X > 0;
+    requires X < 10;
+    behavior b1:
+      assumes X ≡ 7;
+      ensures X ≡ 8;
+      
+    behavior b2:
+      assumes X ≡ 5;
+      ensures X ≡ 98;
+      
+  
+*/
+void n(void)
+{
+  int __e_acsl_at;
+  int __e_acsl_at_2;
+  {
+    mpz_t __e_acsl_X;
+    mpz_t __e_acsl;
+    int __e_acsl_gt;
+    mpz_t __e_acsl_2;
+    int __e_acsl_lt;
+    __gmpz_init_set_si((__mpz_struct *)(__e_acsl_X),(long)X);
+    __gmpz_init_set_si((__mpz_struct *)(__e_acsl),(long)0);
+    __e_acsl_gt = __gmpz_cmp((__mpz_struct const *)(__e_acsl_X),
+                             (__mpz_struct const *)(__e_acsl));
+    e_acsl_assert(__e_acsl_gt > 0,(char *)"Precondition",(char *)"(X > 0)",
+                  67);
+    __gmpz_init_set_si((__mpz_struct *)(__e_acsl_2),(long)10);
+    __e_acsl_lt = __gmpz_cmp((__mpz_struct const *)(__e_acsl_X),
+                             (__mpz_struct const *)(__e_acsl_2));
+    e_acsl_assert(__e_acsl_lt < 0,(char *)"Precondition",(char *)"(X < 10)",
+                  68);
+    __gmpz_clear((__mpz_struct *)(__e_acsl_X));
+    __gmpz_clear((__mpz_struct *)(__e_acsl));
+    __gmpz_clear((__mpz_struct *)(__e_acsl_2));
+    {
+      mpz_t __e_acsl_X_4;
+      mpz_t __e_acsl_5;
+      int __e_acsl_eq_3;
+      __gmpz_init_set_si((__mpz_struct *)(__e_acsl_X_4),(long)X);
+      __gmpz_init_set_si((__mpz_struct *)(__e_acsl_5),(long)5);
+      __e_acsl_eq_3 = __gmpz_cmp((__mpz_struct const *)(__e_acsl_X_4),
+                                 (__mpz_struct const *)(__e_acsl_5));
+      __e_acsl_at_2 = __e_acsl_eq_3 == 0;
+      __gmpz_clear((__mpz_struct *)(__e_acsl_X_4));
+      __gmpz_clear((__mpz_struct *)(__e_acsl_5));
+    }
+    
+    {
+      mpz_t __e_acsl_X_2;
+      mpz_t __e_acsl_3;
+      int __e_acsl_eq;
+      __gmpz_init_set_si((__mpz_struct *)(__e_acsl_X_2),(long)X);
+      __gmpz_init_set_si((__mpz_struct *)(__e_acsl_3),(long)7);
+      __e_acsl_eq = __gmpz_cmp((__mpz_struct const *)(__e_acsl_X_2),
+                               (__mpz_struct const *)(__e_acsl_3));
+      __e_acsl_at = __e_acsl_eq == 0;
+      __gmpz_clear((__mpz_struct *)(__e_acsl_X_2));
+      __gmpz_clear((__mpz_struct *)(__e_acsl_3));
+    }
+    
+    X ++;
+  }
+  
+  {
+    int __e_acsl_implies;
+    int __e_acsl_implies_2;
+    if (! __e_acsl_at) { __e_acsl_implies = 1; }
+    else {
+      mpz_t __e_acsl_X_3;
+      mpz_t __e_acsl_4;
+      int __e_acsl_eq_2;
+      __gmpz_init_set_si((__mpz_struct *)(__e_acsl_X_3),(long)X);
+      __gmpz_init_set_si((__mpz_struct *)(__e_acsl_4),(long)8);
+      __e_acsl_eq_2 = __gmpz_cmp((__mpz_struct const *)(__e_acsl_X_3),
+                                 (__mpz_struct const *)(__e_acsl_4));
+      __e_acsl_implies = __e_acsl_eq_2 == 0;
+      __gmpz_clear((__mpz_struct *)(__e_acsl_X_3));
+      __gmpz_clear((__mpz_struct *)(__e_acsl_4));
+    }
+    e_acsl_assert(__e_acsl_implies,(char *)"Postcondition",
+                  (char *)"(\\old(X == 7) ==> X == 8)",71);
+    if (! __e_acsl_at_2) { __e_acsl_implies_2 = 1; }
+    else {
+      mpz_t __e_acsl_X_5;
+      mpz_t __e_acsl_6;
+      int __e_acsl_eq_4;
+      __gmpz_init_set_si((__mpz_struct *)(__e_acsl_X_5),(long)X);
+      __gmpz_init_set_si((__mpz_struct *)(__e_acsl_6),(long)98);
+      __e_acsl_eq_4 = __gmpz_cmp((__mpz_struct const *)(__e_acsl_X_5),
+                                 (__mpz_struct const *)(__e_acsl_6));
+      __e_acsl_implies_2 = __e_acsl_eq_4 == 0;
+      __gmpz_clear((__mpz_struct *)(__e_acsl_X_5));
+      __gmpz_clear((__mpz_struct *)(__e_acsl_6));
+    }
+    e_acsl_assert(__e_acsl_implies_2,(char *)"Postcondition",
+                  (char *)"(\\old(X == 5) ==> X == 98)",74);
+    return;
+  }
+  
+}
+
 int main(void)
 {
   int __retres;
@@ -572,6 +675,7 @@ int main(void)
   k();
   l();
   m();
+  n();
   __retres = 0;
   return (__retres);
 }
diff --git a/src/plugins/e-acsl/visit.ml b/src/plugins/e-acsl/visit.ml
index 4e1ca198c5e152fe41b2e6a6e0edc87e4f9cddec..51c9282a99dc21dd0dad3936156e38bb966e1f71 100644
--- a/src/plugins/e-acsl/visit.ml
+++ b/src/plugins/e-acsl/visit.ml
@@ -515,13 +515,16 @@ let convert_preconditions env behaviors =
     let assumes_pred = assumes_predicate b in
     List.fold_left
       (fun env p ->
-	let loc = p.ip_loc in
-	let p = 
-	  Logic_const.pimplies
-	    ~loc
-	    (assumes_pred, Logic_const.unamed ~loc p.ip_content)
+	let do_it env =
+	  let loc = p.ip_loc in
+	  let p = 
+	    Logic_const.pimplies
+	      ~loc
+	      (assumes_pred, Logic_const.unamed ~loc p.ip_content)
+	  in
+	  convert_named_predicate env p
 	in
-	convert_named_predicate env p)
+	Error.handle do_it env)
       env
       b.b_requires
   in 
@@ -534,22 +537,25 @@ let convert_postconditions env behaviors =
     let assumes_pred = assumes_predicate b in
     List.fold_left
       (fun env (t, p) ->
-	if b.b_assigns <> WritesAny then 
-	  Error.not_yet "assigns clause in behavior";
-	if b.b_extended <> [] then 
-	  Error.not_yet "grammar extensions in behavior";
-	match t with
-	| Normal -> 
-	  let loc = p.ip_loc in
-	  let p = p.ip_content in
-	  let p = 
-	    Logic_const.pimplies 
-	      ~loc
-	      (Logic_const.pold ~loc assumes_pred, Logic_const.unamed ~loc p) 
-	  in
-	  convert_named_predicate env p
-	| Exits | Breaks | Continues | Returns ->
-	  Error.not_yet "@[abnormal termination case in behavior@]")
+	let do_it env =
+	  if b.b_assigns <> WritesAny then 
+	    Error.not_yet "assigns clause in behavior";
+	  if b.b_extended <> [] then 
+	    Error.not_yet "grammar extensions in behavior";
+	  match t with
+	  | Normal -> 
+	    let loc = p.ip_loc in
+	    let p = p.ip_content in
+	    let p = 
+	      Logic_const.pimplies 
+		~loc
+		(Logic_const.pold ~loc assumes_pred, Logic_const.unamed ~loc p) 
+	    in
+	    convert_named_predicate env p
+	  | Exits | Breaks | Continues | Returns ->
+	    Error.not_yet "@[abnormal termination case in behavior@]"
+	in
+	Error.handle do_it env)
       env
       b.b_post_cond
   in