diff --git a/test/Makefile.dot b/test/Makefile.dot
index 03b8593a87b9acb786a7413572cfb8d37f296aa1..7cbb79ed548becc01be978bc38c2025f4ddd6cef 100644
--- a/test/Makefile.dot
+++ b/test/Makefile.dot
@@ -1,4 +1,4 @@
-# Time-stamp: <modified the 04/12/2020 (at 11:14) by Erwan Jahier>
+# Time-stamp: <modified the 29/03/2021 (at 14:48) by Erwan Jahier>
 
 
 # Rules to generate various dot files.
@@ -34,7 +34,7 @@ ring%.dot:
 	gg-deco $(DECO_PATTERN) $@ -o $@
 
 dtree%.dot:
-	gg tree -dir -n $* -o $@
+	gg tree -n $* -o $@
 	gg-deco $(DECO_PATTERN) $@ -o $@
 
 
diff --git a/tools/rdbg4sasa/daemongui.ml b/tools/rdbg4sasa/daemongui.ml
index b0d5e6febac1510b6208b53e9f00da688cef9cc3..4192fb4d8595546c4153f4c59e6892a0d8f51d39 100644
--- a/tools/rdbg4sasa/daemongui.ml
+++ b/tools/rdbg4sasa/daemongui.ml
@@ -45,7 +45,7 @@ let rdbg_nodes_enabled e =
     in
     List.rev (last::res)
   
-type daemon_kind = D | S | C | LC | ManualCentral | Manual 
+type daemon_kind = Distributed | Synchronous | Central | LocCentral | ManualCentral | Manual 
 let daemon_kind = ref ManualCentral
 
 let refresh_fun_tbl = Hashtbl.create 1
@@ -86,7 +86,7 @@ let main () =
       (*       ~width:320 ~height:240 *)
       ~title:"Daemon GUI"
       ~show:true () in
-  let vbox = GPack.vbox ~packing:window#add () in
+  let vbox = GPack.vbox ~packing:window#add () ~homogeneous:false in
   ignore (window#connect#destroy ~callback: (
       fun () ->
         quit (); (* quit rdbg, this will stop the readloop below *)
@@ -99,18 +99,18 @@ let main () =
   (* création du rdbg_mv_hook et de tout ce qu'il faut autour *)
   init_rdbg_hook ();
 
-  let daemon_box = GPack.hbox ~packing:vbox#add () in
+  let daemon_box = GPack.hbox ~packing:vbox#add ()  ~homogeneous:true  ~height:15 in
   let daemon_box_manual = GPack.hbox ~packing:vbox#add () in
-  let dk_dd = GButton.radio_button  ~active:(!daemon_kind=D)
+  let dk_dd = GButton.radio_button  ~active:(!daemon_kind=Distributed)
       ~label:"Distributed" ~packing:daemon_box#add ()
   in
-  let dk_cd = GButton.radio_button ~active:(!daemon_kind=C)
+  let dk_cd = GButton.radio_button ~active:(!daemon_kind=Central)
       ~label:"Central" ~group:dk_dd#group ~packing:daemon_box#add ()
   in
-  let dk_lcd = GButton.radio_button  ~active:(!daemon_kind=LC)
+  let dk_lcd = GButton.radio_button  ~active:(!daemon_kind=LocCentral)
       ~label:"Locally Central" ~group:dk_dd#group ~packing:daemon_box#add ()
   in
-  let dk_sd = GButton.radio_button  ~active:(!daemon_kind=S)
+  let dk_sd = GButton.radio_button  ~active:(!daemon_kind=Synchronous)
       ~label:"Synchronous" ~group:dk_dd#group ~packing:daemon_box#add ()
   in
   let dk_manual = GButton.radio_button  ~active:(!daemon_kind=Manual)
@@ -133,28 +133,32 @@ let main () =
   dk_manual_central#misc#set_tooltip_text (Printf.sprintf "Set the manual central mode");
 
   let nodes_enabled = rdbg_nodes_enabled !e in
-  List.iter (fun (n,_enab) -> Hashtbl.add daemongui_activate n false) nodes_enabled;
-  (** Met à jour le hook pour un noeud  *)
+
+  (** Met à jour le hook pour node quand le bouton ou une checkbox correspondant est activé *)
   let update_rdbg_hook node activate =
-    match !daemon_kind with
-    | D | S | C | LC ->
-      gtext#buffer#set_text  "finish me" (* todo *)
-    | ManualCentral -> (
-        let txt = Printf.sprintf "ManualCentral step: \n%s" (str_of_sasa_event false !e) in
-        gtext#buffer#set_text txt;
-        Hashtbl.iter
-          (fun n status ->
-             if n = node then (
-               if not status then Hashtbl.replace daemongui_activate n true;
-             )
-             else (
-               Hashtbl.replace daemongui_activate n false;
-             )
-          )
-          daemongui_activate;
-      )
-    | Manual -> 
-      Hashtbl.replace daemongui_activate node activate
+    (match !daemon_kind with
+     | Distributed | Synchronous | Central | LocCentral -> 
+       assert false (* SNO *)
+     | ManualCentral -> (
+         let txt = Printf.sprintf "ManualCentral step: %s\n%s" node (str_of_sasa_event false !e) in
+         gtext#buffer#set_text txt;
+         Hashtbl.iter
+           (fun n status ->
+              if n = node then (
+                if status then Hashtbl.replace daemongui_activate n true;
+              )
+              else (
+                Hashtbl.replace daemongui_activate n false;
+              )
+           )
+           daemongui_activate;
+       )
+     | Manual ->
+       let txt = Printf.sprintf "Manual step: \n%s" (str_of_sasa_event false !e) in
+       gtext#buffer#set_text txt;
+       Hashtbl.replace daemongui_activate node activate
+    );
+
   in
 
   (* 1 case par noeud : activer/pas activer *)
@@ -166,8 +170,9 @@ let main () =
   (* build manually a m x m grid *)
   let i = ref 0 in
   let checkbox_grid = GPack.vbox ~packing:vbox#add () in
-  let checkbox_scrolled_grid = GBin.scrolled_window ~border_width:10   ~hpolicy:`AUTOMATIC 
+  let checkbox_scrolled_grid = GBin.scrolled_window ~border_width:10 ~hpolicy:`AUTOMATIC 
       ~vpolicy:`AUTOMATIC
+      ~height:300
       ~shadow_type:`OUT ~packing:checkbox_grid#add ()
   in
   let checkbox_scrolled_grid_box = GPack.vbox ~packing:checkbox_scrolled_grid#add () in
@@ -195,12 +200,13 @@ let main () =
     nodes_enabled;
 
   (* Des boutons pour le mode Manuel Central *)
-  let pushbox_grid = GPack.vbox ~packing:vbox#add () in
+  let pushbox_grid = GPack.vbox ~packing:vbox#add () ~homogeneous:true in
   let pushbox_scrolled_grid = GBin.scrolled_window ~border_width:10 ~hpolicy:`AUTOMATIC 
-      ~vpolicy:`AUTOMATIC
+      ~vpolicy:`AUTOMATIC 
+      ~height:300
       ~shadow_type:`OUT ~packing:pushbox_grid#add ()
   in
-  let pushbox_scrolled_grid_box = GPack.vbox  ~packing:pushbox_scrolled_grid#add () in
+  let pushbox_scrolled_grid_box = GPack.vbox  ~homogeneous:true ~packing:pushbox_scrolled_grid#add () in
   let pushbox_line = GPack.hbox ~packing:pushbox_scrolled_grid_box#add () in
   let pushbox_line_ref = ref pushbox_line in
   let pushbox_map = Hashtbl.create n in
@@ -229,7 +235,7 @@ let main () =
   (* Des compteurs pour les modes automatiques *)
   let counter_grid = GPack.vbox ~packing:vbox#add () in
   let counter_scrolled_grid = GBin.scrolled_window ~border_width:10 ~hpolicy:`AUTOMATIC 
-      ~vpolicy:`AUTOMATIC 
+      ~vpolicy:`AUTOMATIC ~height:400
       ~shadow_type:`OUT ~packing:counter_grid#add ()
   in
   let counter_scrolled_grid_box = GPack.vbox ~packing:counter_scrolled_grid#add () in
@@ -244,14 +250,14 @@ let main () =
         let new_counter_line = GPack.hbox ~packing:counter_scrolled_grid_box#add () in
         counter_line_ref := new_counter_line
       );
-      
+
       let counter_container_frame = GBin.frame ~label:name ~packing:!counter_line_ref#add () in
       let counter_container =
         GPack.hbox ~homogeneous:true ~border_width: 2 ~spacing:0
           ~packing:counter_container_frame#add () 
       in
       let incr_container = GPack.vbox  ~packing:counter_container#add () in
-      
+
       let counter = new GUtil.variable 0 in
       let decB = GButton.button ~label:"-" ~packing:incr_container#add () in
       let counter_lbl = GMisc.label  ~packing:counter_container#pack () in
@@ -263,7 +269,7 @@ let main () =
       ignore (counter#connect#changed ~callback:(fun n -> counter_lbl#set_text (string_of_int n)));
       counter#set 1;
       counter_container#misc#set_tooltip_text (Printf.sprintf "Set the priority of %s" name);
-      Hashtbl.add counter_map name counter_container
+      Hashtbl.add counter_map name counter
     )
     nodes_enabled;
 
@@ -274,7 +280,9 @@ let main () =
       pushbox_grid#misc#hide();
       counter_grid#misc#hide();
       let checkbox = Hashtbl.find checkbox_map node in
-      if not enabled then (
+      if enabled then
+        checkbox#misc#show ()
+      else (
         checkbox#set_active false; (* on decoche *)
         checkbox#misc#hide ()
       );
@@ -284,26 +292,30 @@ let main () =
       pushbox_grid#misc#show();
       counter_grid#misc#hide();
       let pushbox = Hashtbl.find pushbox_map node in
-      if not enabled then (pushbox#misc#hide ());
+      if enabled then
+        pushbox#misc#show ()
+      else
+        pushbox#misc#hide ();
       pushbox#set_sensitive enabled
-    | LC | C | D ->
+    | Distributed | Synchronous | Central | LocCentral ->
       checkbox_grid#misc#hide();
       pushbox_grid#misc#hide();
       counter_grid#misc#show()
-    | S ->
-      checkbox_grid#misc#hide();
-      pushbox_grid#misc#hide();
-      counter_grid#misc#hide()
   in
   let update_all_checkboxes () =
-    List.iter (fun (name, enabled) -> update_checkbox name enabled) (rdbg_nodes_enabled !e)
+    let nodes_enabled = rdbg_nodes_enabled !e in
+    List.iter (fun (name, enabled) ->
+        Hashtbl.replace daemongui_activate name enabled;
+        update_checkbox name enabled
+      )
+      nodes_enabled
   in
   Hashtbl.add refresh_fun_tbl "" update_all_checkboxes;
 
-  let set_dd_mode () = daemon_kind := D; refresh () in
-  let set_sd_mode () = daemon_kind := S; refresh () in
-  let set_cd_mode () = daemon_kind := C; refresh () in
-  let set_lcd_mode () = daemon_kind := LC; refresh () in
+  let set_dd_mode () = daemon_kind := Distributed; refresh () in
+  let set_sd_mode () = daemon_kind := Synchronous; refresh () in
+  let set_cd_mode () = daemon_kind := Central; refresh () in
+  let set_lcd_mode () = daemon_kind := LocCentral; refresh () in
   let set_manual_mode () = daemon_kind := Manual; refresh ()  in
   let set_manual_central_mode () = daemon_kind := ManualCentral; refresh ()  in
   ignore(dk_dd#connect#clicked ~callback:set_dd_mode);
@@ -319,14 +331,6 @@ let main () =
     gtext#buffer#set_text txt;
     gtext_content := txt;
   in
-  let msg = String.concat "\n" 
-      (List.map 
-         (fun (name, enabled) ->
-            Printf.sprintf "%s is %senabled" name (if enabled then "" else "not "))
-         nodes_enabled
-      )
-  in
-  print_gui msg;
 
   (* Boutons de contrôle de la simulation *)
   let hbox = GPack.hbox ~packing:vbox#add () in
@@ -336,15 +340,55 @@ let main () =
     ignore (btn#connect#clicked ~callback: (
         fun () ->
           cmd ();
-          print_gui (Printf.sprintf "%s" label);
           refresh ();
       ));
     btn
   in
+  let rec get_higher_prioriry nl =
+    let prio n =
+      let counter = Hashtbl.find counter_map n in
+      counter#get
+    in
+    let rec aux p acc = function
+      | [] -> acc
+      | (n, false)::t -> aux p acc t
+      | (n, true)::t ->
+        let pn = prio n in
+        if p > pn then aux p acc t else
+        if p = pn then aux p (n::acc) t else
+          aux pn [n] t
+    in
+    aux 0 [] nl
+  in
+  let step () =
+    match !daemon_kind with
+    | Distributed -> 
+      gtext#buffer#set_text  "finish me"
+    | Synchronous -> (
+        let nodes_enabled = rdbg_nodes_enabled !e in
+        let nodes = get_higher_prioriry nodes_enabled in
+        List.iter
+          (fun (n,_) ->
+             if List.mem n nodes
+             then Hashtbl.add daemongui_activate n true
+             else Hashtbl.add daemongui_activate n false
+          )
+          nodes_enabled;
+        sd ();
+        gtext#buffer#set_text  ("Synchronous step : " ^ (String.concat "," nodes))
+      )
+    | Central  ->
+      gtext#buffer#set_text  "finish me"
+    | LocCentral -> 
+      gtext#buffer#set_text  "finish me"
+
+    | ManualCentral -> () (* SNO *)
+    | Manual -> sd ()
+  in
   let _ = rdbg_btn "<<" "previous round" pr in
   let _ = rdbg_btn "<" "previous step" bd in
   let _ = rdbg_btn "G" "display the network" graph_view in
-  let _ = rdbg_btn ">" "next step" sd in
+  let _ = rdbg_btn ">" "next step" step in
   let _ = rdbg_btn ">>" "next round" nr in
   let _ = rdbg_btn "q" "end the session" q in
   refresh ()
@@ -352,6 +396,8 @@ let main () =
 let m = main 
 (* todo
 - cacher les boutons de rounds en mode manuel
+- cacher le bouton step en mode manuel central 
 - faire les modes automatiques
 - reglage de la taille des boites 
+
  *)
diff --git a/tools/rdbg4sasa/sasa-rdbg-cmds.ml b/tools/rdbg4sasa/sasa-rdbg-cmds.ml
index 7a68566640ffd2e26bd09e738ea39a70305aee61..ca332620d53b296aac64929400e5f30fd91e8999 100644
--- a/tools/rdbg4sasa/sasa-rdbg-cmds.ml
+++ b/tools/rdbg4sasa/sasa-rdbg-cmds.ml
@@ -19,7 +19,7 @@ let _ = Hashtbl.add roundtbl 1 (1,true);;
 let sasa_step e = next_cond e (fun ne -> ne.kind = e.kind)
 let sasa_bstep e = rev_cond e (fun ne -> ne.kind = e.kind)
 let s () = e:=sasa_step !e ; emacs_udate !e; store !e.nb;pe()
-let b () = e:=sasa_step !e ; emacs_udate !e; store !e.nb;pe()
+let b () = e:=sasa_bstep !e ; emacs_udate !e; store !e.nb;pe()
 
 let p =
   try Topology.read dotfile