diff --git a/src/plugins/wp/cfgAnnot.ml b/src/plugins/wp/cfgAnnot.ml
index f67f603fc98175edf595cf440088ee7a915e7427..2629c793465eccb13baf84119b38d7b63a874099 100644
--- a/src/plugins/wp/cfgAnnot.ml
+++ b/src/plugins/wp/cfgAnnot.ml
@@ -75,13 +75,16 @@ let normalize_pre ~goal kf bhv ?assumes ip =
     let module L = NormAtLabels in
     let labels = L.labels_fct_pre in
     let id = WpPropId.mk_pre_id kf Kglobal bhv ip in
-    let p = L.preproc_annot labels ip.ip_content.tp_statement in
-    Some (id, implies ?assumes p)
+    let pre = ip.ip_content.tp_statement in
+    let assumes = Option.map normalize_assumes assumes in
+    Some (id, L.preproc_annot labels @@ implies ?assumes pre)
   else None
 
 let normalize_post ~goal kf bhv tk ?assumes (itk,ip) =
   if tk = itk && filter ~goal ip then
     let module L = NormAtLabels in
+    let at_pre e = Logic_const.pat (e, BuiltinLabel Pre) in
+    let assumes = Option.map (fun p -> normalize_assumes @@ at_pre p) assumes in
     let labels = L.labels_fct_post ~exit:(tk=Exits) in
     let id = WpPropId.mk_post_id kf Kglobal bhv (tk,ip) in
     let p = L.preproc_annot labels ip.ip_content.tp_statement in
@@ -238,7 +241,8 @@ module CallContract = WpContext.StaticGenerator(Kernel_function)
         setup_preconditions kf ;
         List.iter
           begin fun bhv ->
-            let assumes = normalize_assumes (Ast_info.behavior_assumes bhv) in
+            (* Normalization of assumes is specific to each case *)
+            let assumes = Ast_info.behavior_assumes bhv in
             let mk_cond = normalize_pre ~goal:true kf bhv ~assumes in
             let mk_hpre = normalize_pre ~goal:false kf bhv ~assumes in
             let mk_post = normalize_post ~goal:false kf bhv ~assumes in
diff --git a/src/plugins/wp/tests/wp_acsl/assumes_labels.i b/src/plugins/wp/tests/wp_acsl/assumes_labels.i
new file mode 100644
index 0000000000000000000000000000000000000000..0fa61b5f7f88da063565ac6f202dea2b6d640fd1
--- /dev/null
+++ b/src/plugins/wp/tests/wp_acsl/assumes_labels.i
@@ -0,0 +1,16 @@
+int v ;
+
+/*@ assigns v ;
+    behavior b1:
+      assumes v == 1 ;
+      ensures v == 2 ;
+*/
+void foo(void){
+	if(v == 1) v = 2 ;
+}
+
+//@ requires v == 1 ;
+void bar(void){
+  foo();
+  //@ check v == 2 ;
+}
diff --git a/src/plugins/wp/tests/wp_acsl/oracle/assumes_labels.res.oracle b/src/plugins/wp/tests/wp_acsl/oracle/assumes_labels.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..85af01ca037e6e749f5fd1e1b655cb53910f983e
--- /dev/null
+++ b/src/plugins/wp/tests/wp_acsl/oracle/assumes_labels.res.oracle
@@ -0,0 +1,28 @@
+# frama-c -wp [...]
+[kernel] Parsing tests/wp_acsl/assumes_labels.i (no preprocessing)
+[wp] Running WP plugin...
+[wp] Warning: Missing RTE guards
+------------------------------------------------------------
+  Function bar
+------------------------------------------------------------
+
+Goal Check (file tests/wp_acsl/assumes_labels.i, line 15):
+Prove: true.
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function foo
+------------------------------------------------------------
+
+Goal Assigns (file tests/wp_acsl/assumes_labels.i, line 3) in 'foo':
+Prove: true.
+
+------------------------------------------------------------
+------------------------------------------------------------
+  Function foo with behavior b1
+------------------------------------------------------------
+
+Goal Post-condition for 'b1' (file tests/wp_acsl/assumes_labels.i, line 6) in 'foo':
+Prove: true.
+
+------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_acsl/oracle_qualif/assumes_labels.res.oracle b/src/plugins/wp/tests/wp_acsl/oracle_qualif/assumes_labels.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..ef9795b78bf531707eb022930a34dc964f6bc5da
--- /dev/null
+++ b/src/plugins/wp/tests/wp_acsl/oracle_qualif/assumes_labels.res.oracle
@@ -0,0 +1,15 @@
+# frama-c -wp [...]
+[kernel] Parsing tests/wp_acsl/assumes_labels.i (no preprocessing)
+[wp] Running WP plugin...
+[wp] Warning: Missing RTE guards
+[wp] 3 goals scheduled
+[wp] [Qed] Goal typed_foo_assigns : Valid
+[wp] [Qed] Goal typed_foo_b1_ensures : Valid
+[wp] [Qed] Goal typed_bar_check : Valid
+[wp] Proved goals:    3 / 3
+  Qed:             3
+------------------------------------------------------------
+ Functions                 WP     Alt-Ergo  Total   Success
+  foo                       2        -        2       100%
+  bar                       1        -        1       100%
+------------------------------------------------------------