diff --git a/src/plugins/wp/GuiConfig.ml b/src/plugins/wp/GuiConfig.ml
index 10dc553e75ed7d6a07c7fe478470f40afad26658..4e28f2e8957422a891e016663e4e583ec0d5c2fb 100644
--- a/src/plugins/wp/GuiConfig.ml
+++ b/src/plugins/wp/GuiConfig.ml
@@ -24,51 +24,29 @@
 (* ---  Prover List in Configuration                                    --- *)
 (* ------------------------------------------------------------------------ *)
 
-class provers key =
+module S = Why3.Whyconf.Sprover
+module M = Why3.Whyconf.Mprover
+
+class provers =
   object(self)
-    inherit [Why3.Whyconf.Sprover.t] Wutil.selector Why3.Whyconf.Sprover.empty
-
-    method private load () =
-      let open Gtk_helper.Configuration in
-      let prover_of_conf acc = function
-        | ConfList [ConfString prover_name;
-                    ConfString prover_version;
-                    ConfString prover_altern] ->
-            Why3.Whyconf.Sprover.add
-              Why3.Whyconf.{ prover_name; prover_version; prover_altern }
-              acc
-        | _ -> acc in
-      try
-        let data = Gtk_helper.Configuration.find key in
-        match data with
-        | ConfList data ->
-            (List.fold_left prover_of_conf Why3.Whyconf.Sprover.empty data)
-        | _ -> Why3.Whyconf.Sprover.empty
-      with Not_found -> Why3.Whyconf.Sprover.empty
-
-    method private save () =
-      let open Gtk_helper.Configuration in
-      let conf_of_prover dp = ConfList Why3.Whyconf.[ConfString dp.prover_name;
-                                                     ConfString dp.prover_version;
-                                                     ConfString dp.prover_altern] in
-      Gtk_helper.Configuration.set key
-        (ConfList (List.map conf_of_prover
-                     (Why3.Whyconf.Sprover.elements self#get)))
+    inherit [S.t] Wutil.selector S.empty
 
     initializer
       begin
-        let settings = self#load () in
         (** select automatically the provers set on the command line *)
-        let cmdline = Wp_parameters.Provers.get () in
+        let cmdline =
+          match Wp_parameters.Provers.get () with
+          | [] -> [ "alt-ergo" ]
+          | prvs -> prvs
+        in
         let selection = List.fold_left
             (fun acc e ->
                match Why3Provers.find_opt e with
                | None -> acc
-               | Some p -> Why3.Whyconf.Sprover.add p acc)
-            settings cmdline
+               | Some p -> S.add p acc)
+            S.empty cmdline
         in
         self#set selection ;
-        self#on_event self#save ;
       end
 
   end
@@ -88,13 +66,14 @@ class dp_chooser
   let array = new Wpane.warray () in
   object(self)
 
-    val mutable selected = Why3.Whyconf.Mprover.empty
+    val mutable mainstream = true
+    val mutable selected = M.empty
 
     method private enable dp e =
-      selected <- Why3.Whyconf.Mprover.add dp e selected
+      selected <- M.add dp e selected
 
     method private lookup dp =
-      Why3.Whyconf.Mprover.find dp selected
+      try M.find dp selected with Not_found -> false
 
     method private entry dp =
       let text = Why3Provers.title dp in
@@ -117,23 +96,30 @@ class dp_chooser
         array#update () ;
       end
 
-    method private detect () =
+    method private provers =
+      let filter p =
+        self#lookup p || not mainstream || Why3Provers.is_mainstream p
+      in S.filter filter (Why3Provers.provers_set ())
+
+    method private filter () =
       begin
-        self#configure (Why3Provers.provers_set ());
+        mainstream <- not mainstream ;
+        self#configure self#provers ;
       end
 
     method private apply () =
       provers#set
-        (Why3.Whyconf.Mprover.map_filter
+        (M.map_filter
            (function
              | true -> Some ()
              | false -> None)
            selected)
 
     method run () =
-      let dps = Why3Provers.provers_set () in
+      selected <- M.empty ;
+      let dps = self#provers in
       let sel = provers#get in
-      selected <- Why3.Whyconf.Mprover.merge
+      selected <- M.merge
           (fun _ avail enab ->
              match avail, enab with
              | None, _ -> None
@@ -145,7 +131,8 @@ class dp_chooser
 
     initializer
       begin
-        dialog#button ~action:(`ACTION self#detect) ~label:"Detect Provers" () ;
+        dialog#button ~action:(`ACTION self#filter) ~label:"Filter"
+          ~tooltip:"Switch to main stream / alternative solvers" () ;
         dialog#button ~action:(`CANCEL) ~label:"Cancel" () ;
         dialog#button ~action:(`APPLY) ~label:"Apply" () ;
         array#set_entry self#entry ;
diff --git a/src/plugins/wp/GuiConfig.mli b/src/plugins/wp/GuiConfig.mli
index 8da20b6c04d036f1f4a20b67de0d800433b9c278..9d912d61ffe92012713f45d0e91441d23b6a5c29 100644
--- a/src/plugins/wp/GuiConfig.mli
+++ b/src/plugins/wp/GuiConfig.mli
@@ -24,7 +24,7 @@
 (* ---  WP Provers Configuration Panel                                  --- *)
 (* ------------------------------------------------------------------------ *)
 
-class provers : string -> [Why3.Whyconf.Sprover.t] Widget.selector
+class provers : [Why3.Whyconf.Sprover.t] Widget.selector
 
 class dp_chooser :
   main:Design.main_window_extension_points ->
diff --git a/src/plugins/wp/GuiNavigator.ml b/src/plugins/wp/GuiNavigator.ml
index 06cc23a28c451cb7ba48c8bc8d2c227e2762450b..5c04d8a2c0b6904ea815f6e2ebf5b983bdfca50f 100644
--- a/src/plugins/wp/GuiNavigator.ml
+++ b/src/plugins/wp/GuiNavigator.ml
@@ -441,8 +441,7 @@ let make (main : main_window_extension_points) =
     (* --- Provers                                                            --- *)
     (* -------------------------------------------------------------------------- *)
 
-    let provers = new GuiConfig.provers "wp.provers" in
-
+    let provers = new GuiConfig.provers in
     let dp_chooser = new GuiConfig.dp_chooser ~main ~provers in
 
     (* -------------------------------------------------------------------------- *)
diff --git a/src/plugins/wp/Why3Provers.ml b/src/plugins/wp/Why3Provers.ml
index 46a1f714ab5902d7b9356ede7a3a0f879af75a54..215d8912e50e7b2cbb3160540329ddd5e50e6c63 100644
--- a/src/plugins/wp/Why3Provers.ml
+++ b/src/plugins/wp/Why3Provers.ml
@@ -94,6 +94,7 @@ let print_wp s =
 let title p = Pretty_utils.sfprintf "%a" Why3.Whyconf.print_prover p
 let name p = p.Why3.Whyconf.prover_name
 let compare = Why3.Whyconf.Prover.compare
+let is_mainstream p = p.Why3.Whyconf.prover_altern = ""
 
 let provers () =
   Why3.Whyconf.Mprover.keys (Why3.Whyconf.get_provers (config ()))
diff --git a/src/plugins/wp/Why3Provers.mli b/src/plugins/wp/Why3Provers.mli
index 4875dbcc97b27d5081c3df090a693254ef0a5dc5..1098dc55906999c9c19cc85f11aaeb1fb02a297c 100644
--- a/src/plugins/wp/Why3Provers.mli
+++ b/src/plugins/wp/Why3Provers.mli
@@ -41,6 +41,7 @@ val compare : t -> t -> int
 val provers : unit -> t list
 val provers_set : unit -> Why3.Whyconf.Sprover.t
 val is_available : t -> bool
+val is_mainstream : t -> bool
 val has_shortcut : t -> string -> bool
 
 (**************************************************************************)