diff --git a/src/plugins/server/states.ml b/src/plugins/server/states.ml
index dcc2e97ec4d56f1bf4d1393e318ba083f39dcfef..cea501c3f142b3b16ebf9909202a23ed5fc4eb80 100644
--- a/src/plugins/server/states.ml
+++ b/src/plugins/server/states.ml
@@ -109,9 +109,14 @@ let synchronize model =
       Hashtbl.remove model.projects (Project.get_unique_name p) in
     Project.register_before_remove_hook cleanup ;
     Project.register_todo_before_clear cleanup ;
+    Request.on_signal model.signal
+      (fun _ ->
+         model.current <- None ;
+         Hashtbl.clear model.projects ;
+      );
   end
 
-let current model =
+let content model =
   match model.current with
   | Some w -> w
   | None ->
@@ -127,16 +132,26 @@ let current model =
     in model.current <- Some content ; content
 
 let reload model =
-  let m = current model in
-  m.cleared <- true ; m.updates <- Kmap.empty
+  let m = content model in
+  m.cleared <- true ;
+  m.updates <- Kmap.empty ;
+  Request.emit model.signal
 
 let update model k =
-  let m = current model in
-  if not m.cleared then m.updates <- Kmap.add (model.key k) (Add k) m.updates
+  let m = content model in
+  if not m.cleared then
+    begin
+      m.updates <- Kmap.add (model.key k) (Add k) m.updates ;
+      Request.emit model.signal ;
+    end
 
 let remove model k =
-  let m = current model in
-  if not m.cleared then m.updates <- Kmap.add (model.key k) Remove m.updates
+  let m = content model in
+  if not m.cleared then
+    begin
+      m.updates <- Kmap.add (model.key k) Remove m.updates ;
+      Request.emit model.signal ;
+    end
 
 (* -------------------------------------------------------------------------- *)
 (* --- Fetch Model Updates                                                --- *)
@@ -167,7 +182,7 @@ let update_entry buffer cols key = function
   | Add v -> add_entry buffer cols key v
 
 let fetch model n =
-  let m = current model in
+  let m = content model in
   let reload = m.cleared in
   let buffer = {
     reload ;