diff --git a/src/plugins/wp/ProverWhy3.ml b/src/plugins/wp/ProverWhy3.ml
index aded0a7e8b7b339210e2c3c9a3b7cb656238a470..ec36e4a1235e8f0b48e96ad31914922861744a5e 100644
--- a/src/plugins/wp/ProverWhy3.ml
+++ b/src/plugins/wp/ProverWhy3.ml
@@ -1262,7 +1262,9 @@ let batch pconf driver ?script ~timeout ~steplimit prover task =
 (* --- Interactive Prover (Coq)                                           --- *)
 (* -------------------------------------------------------------------------- *)
 
-let editor pconf =
+let editor_mutex = Task.mutex ()
+
+let editor_command pconf =
   let config = Why3Provers.config () in
   try
     let ed = Why3.Whyconf.editor_by_id config pconf.Why3.Whyconf.editor in
@@ -1275,21 +1277,25 @@ let scriptfile ~force ~ext wpo =
   Format.sprintf "%s/%s%s" (dir :> string) wpo.Wpo.po_sid ext
 
 let editor ~script ~merge wpo pconf driver prover task =
-  Wp_parameters.feedback ~ontty:`Transient "Editing %S..." script ;
-  Cache.clear_result ~digest:(digest wpo driver) prover task ;
-  if merge then
-    begin
-      let backup = script ^ ".bak" in
-      Sys.rename script backup ;
-      let old = open_in backup in
-      Command.pp_to_file script
-        (fun fmt ->
-           ignore @@ Why3.Driver.print_task_prepared ~old driver fmt task
-        );
-      close_in old ;
-    end ;
-  let call = Why3.Call_provers.call_editor ~command:(editor pconf) script in
-  call_prover_task ~timeout:None ~steps:None pconf.prover call
+  Task.sync editor_mutex
+    begin fun () ->
+      Wp_parameters.feedback ~ontty:`Transient "Editing %S..." script ;
+      Cache.clear_result ~digest:(digest wpo driver) prover task ;
+      if merge then
+        begin
+          let backup = script ^ ".bak" in
+          Sys.rename script backup ;
+          let old = open_in backup in
+          Command.pp_to_file script
+            (fun fmt ->
+               ignore @@ Why3.Driver.print_task_prepared ~old driver fmt task
+            );
+          close_in old ;
+        end ;
+      let command = editor_command pconf in
+      let call = Why3.Call_provers.call_editor ~command script in
+      call_prover_task ~timeout:None ~steps:None pconf.prover call
+    end
 
 let compile ~script ~timeout wpo pconf driver prover task =
   let digest = digest wpo driver in