diff --git a/src/plugins/wp/share/why3/frama_c_wp/memory.mlw b/src/plugins/wp/share/why3/frama_c_wp/memory.mlw
index c508fdae4430875422c5b95bf05b22ee7ee7c4ef..5489e17e49d787d04935ebad98966e6a93492373 100644
--- a/src/plugins/wp/share/why3/frama_c_wp/memory.mlw
+++ b/src/plugins/wp/share/why3/frama_c_wp/memory.mlw
@@ -111,7 +111,7 @@ theory Memory
   predicate linked (map int int)
   predicate sconst (map addr int)
   predicate framed (m : map addr addr) =
-    forall p:addr [m[p]]. region(m[p].base) <= 0
+    forall p:addr [m[p]]. region(p.base) <= 0 -> region(m[p].base) <= 0
 
   (* Properties *)
 
diff --git a/src/plugins/wp/tests/wp_typed/frame.i b/src/plugins/wp/tests/wp_typed/frame.i
index 8620e34f2bb24650bde00799389b3538b1873e77..c68f9d167b32f1d59941b6596759c096877c44c6 100644
--- a/src/plugins/wp/tests/wp_typed/frame.i
+++ b/src/plugins/wp/tests/wp_typed/frame.i
@@ -14,3 +14,23 @@ void compound(int k) {
 // NOTE:
 // if we require \valid(comp[k].ptr) the goal is provable without frame conditions
 // since it can not be aliased with 'm' at PRE, which is not (yet) valid.
+
+// For those two examples, we want the assert false to fail:
+//  -> the frame condition must *not* introduce incoherence on initialization
+
+void local_region(void) {
+  char b[4] = {0};
+  char *x = b ;
+  char **in_memtyped = &x ; // be sure to put x in MemTyped
+  //@ assert A:X: \valid_read(x + (0..3));
+  //@ assert A:Y: \false ;
+}
+
+struct S { char b ; };
+
+void formal_region(struct S s) {
+  char *x = &s.b ;
+  char **in_memtyped = &x ; // be sure to put x in MemTyped
+  //@ assert A:X: \valid_read(x);
+  //@ assert A:Y: \false ;
+}
diff --git a/src/plugins/wp/tests/wp_typed/oracle/frame.0.res.oracle b/src/plugins/wp/tests/wp_typed/oracle/frame.0.res.oracle
index e433d6edd6b606562cedf393f35702bd4766e830..64b8f12db9b92dfb7f4ea35a80a51d9f671d3554 100644
--- a/src/plugins/wp/tests/wp_typed/oracle/frame.0.res.oracle
+++ b/src/plugins/wp/tests/wp_typed/oracle/frame.0.res.oracle
@@ -38,3 +38,61 @@ Assume {
 Prove: x = 1.
 
 ------------------------------------------------------------
+------------------------------------------------------------
+  Function formal_region
+------------------------------------------------------------
+
+Goal Assertion 'A,X' (file tests/wp_typed/frame.i, line 34):
+Let a = Mptr_0[global(L_x_37)].
+Assume {
+  (* Heap *)
+  Type: framed(Mptr_0) /\ linked(Malloc_0).
+  (* Initializer *)
+  Init: a = shiftfield_F2_S_b(global(P_s_36)).
+}
+Prove: valid_rd(Malloc_0[P_s_36 <- 1][L_x_37 <- 1], a, 1).
+
+------------------------------------------------------------
+
+Goal Assertion 'A,Y' (file tests/wp_typed/frame.i, line 35):
+Let a = Mptr_0[global(L_x_37)].
+Assume {
+  (* Heap *)
+  Type: framed(Mptr_0) /\ linked(Malloc_0).
+  (* Initializer *)
+  Init: a = shiftfield_F2_S_b(global(P_s_36)).
+  (* Assertion 'A,X' *)
+  Have: valid_rd(Malloc_0[P_s_36 <- 1][L_x_37 <- 1], a, 1).
+}
+Prove: false.
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function local_region
+------------------------------------------------------------
+
+Goal Assertion 'A,X' (file tests/wp_typed/frame.i, line 25):
+Let a = Mptr_0[global(L_x_32)].
+Assume {
+  (* Heap *)
+  Type: framed(Mptr_0) /\ linked(Malloc_0).
+  (* Initializer *)
+  Init: a = shift_sint8(global(L_b_31), 0).
+}
+Prove: valid_rd(Malloc_0[L_b_31 <- 4][L_x_32 <- 1], a, 4).
+
+------------------------------------------------------------
+
+Goal Assertion 'A,Y' (file tests/wp_typed/frame.i, line 26):
+Let a = Mptr_0[global(L_x_32)].
+Assume {
+  (* Heap *)
+  Type: framed(Mptr_0) /\ linked(Malloc_0).
+  (* Initializer *)
+  Init: a = shift_sint8(global(L_b_31), 0).
+  (* Assertion 'A,X' *)
+  Have: valid_rd(Malloc_0[L_b_31 <- 4][L_x_32 <- 1], a, 4).
+}
+Prove: false.
+
+------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_typed/oracle/frame.1.res.oracle b/src/plugins/wp/tests/wp_typed/oracle/frame.1.res.oracle
index f958319c4c3c3f1942c23f3daaab8c2ce5ee627f..d1ace9a6829158bc2363250a76b8f34c86d26da7 100644
--- a/src/plugins/wp/tests/wp_typed/oracle/frame.1.res.oracle
+++ b/src/plugins/wp/tests/wp_typed/oracle/frame.1.res.oracle
@@ -38,3 +38,61 @@ Assume {
 Prove: x = 1.
 
 ------------------------------------------------------------
+------------------------------------------------------------
+  Function formal_region
+------------------------------------------------------------
+
+Goal Assertion 'A,X' (file tests/wp_typed/frame.i, line 34):
+Let a = Mptr_0[global(L_x_37)].
+Assume {
+  (* Heap *)
+  Type: framed(Mptr_0) /\ linked(Malloc_0).
+  (* Initializer *)
+  Init: a = shiftfield_F2_S_b(global(P_s_36)).
+}
+Prove: valid_rd(Malloc_0[P_s_36 <- 1][L_x_37 <- 1], a, 1).
+
+------------------------------------------------------------
+
+Goal Assertion 'A,Y' (file tests/wp_typed/frame.i, line 35):
+Let a = Mptr_0[global(L_x_37)].
+Assume {
+  (* Heap *)
+  Type: framed(Mptr_0) /\ linked(Malloc_0).
+  (* Initializer *)
+  Init: a = shiftfield_F2_S_b(global(P_s_36)).
+  (* Assertion 'A,X' *)
+  Have: valid_rd(Malloc_0[P_s_36 <- 1][L_x_37 <- 1], a, 1).
+}
+Prove: false.
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function local_region
+------------------------------------------------------------
+
+Goal Assertion 'A,X' (file tests/wp_typed/frame.i, line 25):
+Let a = Mptr_0[global(L_x_32)].
+Assume {
+  (* Heap *)
+  Type: framed(Mptr_0) /\ linked(Malloc_0).
+  (* Initializer *)
+  Init: a = shift_sint8(global(L_b_31), 0).
+}
+Prove: valid_rd(Malloc_0[L_b_31 <- 4][L_x_32 <- 1], a, 4).
+
+------------------------------------------------------------
+
+Goal Assertion 'A,Y' (file tests/wp_typed/frame.i, line 26):
+Let a = Mptr_0[global(L_x_32)].
+Assume {
+  (* Heap *)
+  Type: framed(Mptr_0) /\ linked(Malloc_0).
+  (* Initializer *)
+  Init: a = shift_sint8(global(L_b_31), 0).
+  (* Assertion 'A,X' *)
+  Have: valid_rd(Malloc_0[L_b_31 <- 4][L_x_32 <- 1], a, 4).
+}
+Prove: false.
+
+------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_typed/oracle_qualif/frame.res.oracle b/src/plugins/wp/tests/wp_typed/oracle_qualif/frame.res.oracle
index 96bb1c3037c84b0974790f377c051aa0257fd6fa..991ca84c401b93c81cf2fca1747872a72766cc92 100644
--- a/src/plugins/wp/tests/wp_typed/oracle_qualif/frame.res.oracle
+++ b/src/plugins/wp/tests/wp_typed/oracle_qualif/frame.res.oracle
@@ -2,13 +2,19 @@
 [kernel] Parsing tests/wp_typed/frame.i (no preprocessing)
 [wp] Running WP plugin...
 [wp] Warning: Missing RTE guards
-[wp] 2 goals scheduled
+[wp] 6 goals scheduled
 [wp] [Alt-Ergo] Goal typed_compound_assert_SEP : Unsuccess
 [wp] [Alt-Ergo] Goal typed_compound_assert_RES : Valid
-[wp] Proved goals:    1 / 2
+[wp] [Alt-Ergo] Goal typed_local_region_assert_A_X : Valid
+[wp] [Alt-Ergo] Goal typed_local_region_assert_A_Y : Unsuccess
+[wp] [Alt-Ergo] Goal typed_formal_region_assert_A_X : Valid
+[wp] [Alt-Ergo] Goal typed_formal_region_assert_A_Y : Unsuccess
+[wp] Proved goals:    3 / 6
   Qed:             0 
-  Alt-Ergo:        1  (unsuccess: 1)
+  Alt-Ergo:        3  (unsuccess: 3)
 ------------------------------------------------------------
  Functions                 WP     Alt-Ergo  Total   Success
   compound                  -        1        2      50.0%
+  local_region              -        1        2      50.0%
+  formal_region             -        1        2      50.0%
 ------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.session/script/init_t2_bis_v2_assigns_exit_part2.json b/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.session/script/init_t2_bis_v2_assigns_exit_part2.json
index d6b2be2c19d0a3c9227fced20293f93102d3d5bc..a187150cc649f2fe0559e01565b0547de2fada18 100644
--- a/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.session/script/init_t2_bis_v2_assigns_exit_part2.json
+++ b/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.session/script/init_t2_bis_v2_assigns_exit_part2.json
@@ -3,8 +3,8 @@
                 "target": "exists i_0,i_1:int.\n(i_0<=i_136) /\\ (i_1<=i_137) /\\ (0<=i_0) /\\ (i_136<=i_0) /\\ (i_137<=i_1)\n/\\ (i_0<=9)",
                 "pattern": "\\E$i$i0$i$i9" },
     "children": { "Goal 1/2": [ { "prover": "Alt-Ergo:2.2.0",
-                                  "verdict": "valid", "time": 0.0109,
+                                  "verdict": "valid", "time": 0.0088,
                                   "steps": 24 } ],
                   "Goal 2/2": [ { "prover": "Alt-Ergo:2.2.0",
-                                  "verdict": "valid", "time": 0.0114,
+                                  "verdict": "valid", "time": 0.0116,
                                   "steps": 24 } ] } } ]
diff --git a/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.session/script/init_t2_bis_v2_assigns_normal_part2.json b/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.session/script/init_t2_bis_v2_assigns_normal_part2.json
index d6b2be2c19d0a3c9227fced20293f93102d3d5bc..a187150cc649f2fe0559e01565b0547de2fada18 100644
--- a/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.session/script/init_t2_bis_v2_assigns_normal_part2.json
+++ b/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.session/script/init_t2_bis_v2_assigns_normal_part2.json
@@ -3,8 +3,8 @@
                 "target": "exists i_0,i_1:int.\n(i_0<=i_136) /\\ (i_1<=i_137) /\\ (0<=i_0) /\\ (i_136<=i_0) /\\ (i_137<=i_1)\n/\\ (i_0<=9)",
                 "pattern": "\\E$i$i0$i$i9" },
     "children": { "Goal 1/2": [ { "prover": "Alt-Ergo:2.2.0",
-                                  "verdict": "valid", "time": 0.0109,
+                                  "verdict": "valid", "time": 0.0088,
                                   "steps": 24 } ],
                   "Goal 2/2": [ { "prover": "Alt-Ergo:2.2.0",
-                                  "verdict": "valid", "time": 0.0114,
+                                  "verdict": "valid", "time": 0.0116,
                                   "steps": 24 } ] } } ]
diff --git a/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.session/script/init_t2_bis_v2_loop_assigns_part2.json b/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.session/script/init_t2_bis_v2_loop_assigns_part2.json
index df90f71b8c97a99931e505509ad421ffe9e78911..baf7c5bf62b542aa313b0d746286e799b93e67b8 100644
--- a/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.session/script/init_t2_bis_v2_loop_assigns_part2.json
+++ b/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.session/script/init_t2_bis_v2_loop_assigns_part2.json
@@ -3,8 +3,8 @@
                 "target": "exists i_0,i_1:int.\n(i_0<=i_9) /\\ (i_1<=i_10) /\\ (0<=i_0) /\\ (i_9<=i_0) /\\ (i_10<=i_1)\n/\\ (i_0<=9)",
                 "pattern": "\\E$i$i0$i$i9" },
     "children": { "Goal 1/2": [ { "prover": "Alt-Ergo:2.2.0",
-                                  "verdict": "valid", "time": 0.0151,
+                                  "verdict": "valid", "time": 0.0279,
                                   "steps": 41 } ],
                   "Goal 2/2": [ { "prover": "Alt-Ergo:2.2.0",
-                                  "verdict": "valid", "time": 0.0147,
+                                  "verdict": "valid", "time": 0.021,
                                   "steps": 41 } ] } } ]
diff --git a/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.session/script/init_t2_bis_v2_loop_assigns_part3.json b/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.session/script/init_t2_bis_v2_loop_assigns_part3.json
index ab6c0d166bbb3cbc8605279fe510b720a5b8f879..cae89d2a942aa4f3f67bfeab7a4b6962d46fc0a4 100644
--- a/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.session/script/init_t2_bis_v2_loop_assigns_part3.json
+++ b/src/plugins/wp/tests/wp_typed/oracle_qualif/user_init.1.session/script/init_t2_bis_v2_loop_assigns_part3.json
@@ -3,8 +3,8 @@
                 "target": "exists i_1,i_2:int.\n(i_1<=i_0) /\\ (i_2<=i_3) /\\ (0<=i_1) /\\ (i_0<=i_1) /\\ (i_3<=i_2) /\\ (i_1<=9)",
                 "pattern": "\\E$i$i0$i$i9" },
     "children": { "Goal 1/2": [ { "prover": "Alt-Ergo:2.2.0",
-                                  "verdict": "valid", "time": 0.0115,
+                                  "verdict": "valid", "time": 0.009,
                                   "steps": 29 } ],
                   "Goal 2/2": [ { "prover": "Alt-Ergo:2.2.0",
-                                  "verdict": "valid", "time": 0.0117,
+                                  "verdict": "valid", "time": 0.0131,
                                   "steps": 29 } ] } } ]