diff --git a/src/plugins/wp/cfgCalculus.ml b/src/plugins/wp/cfgCalculus.ml
index e8d0582346f29b867b37a7c1752cc96ff0894dfe..0b9f43b08d6e5fbb55aa1d9b186a141a7c4362a0 100644
--- a/src/plugins/wp/cfgCalculus.ml
+++ b/src/plugins/wp/cfgCalculus.ml
@@ -62,24 +62,25 @@ let is_default_bhv (m: mode) = Cil.is_default_behavior m.bhv
 let is_selected_bhv (m: mode) (bhv: funbehavior) =
   m.bhv.b_name = bhv.b_name
 
-let is_selected_for (m: mode) (fors: string list) =
-  fors=[] || List.mem m.bhv.b_name fors
+let is_selected_for (m: mode) ~goal (fors: string list) =
+  (fors=[] && (not goal || is_default_bhv m)) ||
+  List.mem m.bhv.b_name fors
 
-let is_selected_ca (m: mode) (ca: code_annotation) =
+let is_selected_ca (m: mode) ~goal (ca: code_annotation) =
   match ca.annot_content with
   | AAssigns(forb,_)
   | AAllocation(forb,_)
   | AAssert(forb,_)
   | AInvariant(forb,_,_)
-    -> is_selected_for m forb
+    -> is_selected_for m ~goal forb
   | AVariant _ -> is_default_bhv m
   | AExtended _ | AStmtSpec _ | APragma _ ->
       assert false (* n/a *)
 
-let is_active_mode ~mode (p: Property.t) =
+let is_active_mode ~mode ~goal (p: Property.t) =
   let open Property in
   match p with
-  | IPCodeAnnot { ica_ca } -> is_selected_ca mode ica_ca
+  | IPCodeAnnot { ica_ca } -> is_selected_ca mode ~goal ica_ca
   | IPPredicate { ip_kind } ->
       begin match ip_kind with
         | PKRequires bhv | PKAssumes bhv ->
@@ -89,11 +90,11 @@ let is_active_mode ~mode (p: Property.t) =
       end
   | IPAllocation { ial_bhv = bhv } | IPAssigns { ias_bhv = bhv } ->
       begin match bhv with
-        | Id_loop ca -> is_selected_ca mode ca
+        | Id_loop ca -> is_selected_ca mode ~goal ca
         | Id_contract(_,bhv) -> is_selected_bhv mode bhv
       end
   | IPDecrease { id_ca = None } -> is_default_bhv mode
-  | IPDecrease { id_ca = Some ca } -> is_selected_ca mode ca
+  | IPDecrease { id_ca = Some ca } -> is_selected_ca mode ~goal ca
   | IPComplete _ | IPDisjoint _ -> is_default_bhv mode
   | IPFrom _ | IPGlobalInvariant _ | IPTypeInvariant _ ->
       (*TODO: is it in pass or not ? *) assert false
@@ -174,7 +175,7 @@ struct
 
   let is_selected ~goal { mode ; props } (pid,_) =
     let pi = WpPropId.property_of_id pid in
-    is_active_mode ~mode pi &&
+    is_active_mode ~mode ~goal pi &&
     ( not goal || is_selected_props props ~pi pid )
 
   let is_selected_callpre { props } (pid,_) =