diff --git a/multi_actris/examples/leader_election.v b/multi_actris/examples/leader_election.v
index 0c1f3da78836a873d69c160d5ce8a3d096e9db5f..9a21b1796324753f05a82ab024286b05ad85dccb 100644
--- a/multi_actris/examples/leader_election.v
+++ b/multi_actris/examples/leader_election.v
@@ -51,30 +51,25 @@ Notation iProto_choice a p1 p2 :=
 Section ring_leader_election_example.
   Context `{!heapGS Σ, chanG Σ, spawnG Σ, mono_natG Σ}.
 
-  Definition my_send_prot (il ir i : nat) i'
-    (rec : bool -d> nat -d> iProto Σ) : bool -d> nat -d> iProto Σ :=
-    λ (isp:bool) (i_max:nat),
-      iProto_choice (Send,il)
-        (<(Send,il)> MSG #(max i' i_max) ; rec isp (max i' i_max))%proto
-        (<(Send,il)> MSG #i_max ; rec isp i_max)%proto.
-
   Definition my_recv_prot (il ir i : nat) (p : nat → iProto Σ)
              (rec : bool -d> nat -d> iProto Σ) : bool -d> nat -d> iProto Σ :=
     λ (isp:bool) (i_max:nat),
       iProto_choice (Recv,ir)
         (<(Recv,ir) @ (i':nat)> MSG #i' ;
          if bool_decide (i_max < i')
-         then my_send_prot il ir i i' rec isp i_max
+         then <(Send,il)> MSG #true ; <(Send,il)> MSG #(max i' i_max) ;
+              rec isp (max i' i_max)
          else if bool_decide (i_max = i')
-         then my_send_prot il ir i i' rec false i_max
+         then <(Send,il)> MSG #false ; <(Send, il)> MSG #i_max ; rec false i_max
          else if isp then rec isp i_max
-         else my_send_prot il ir i i' rec true i_max)%proto
+         else <(Send,il)> MSG #true ; <(Send,il)> MSG #(max i' i_max) ;
+              rec true (max i' i_max))%proto
         (<(Recv,ir)> MSG #i_max ;
          if (bool_decide (i = i_max)) then p i_max
          else <(Send,il)> MSG #false; <(Send,il)> MSG #i_max; p i_max)%proto.
 
   Instance rle_prot_aux_contractive il ir i p : Contractive (my_recv_prot il ir i p).
-  Proof. rewrite /my_recv_prot /my_send_prot. solve_proto_contractive. Qed.
+  Proof. rewrite /my_recv_prot. solve_proto_contractive. Qed.
   Definition rle_prot il ir i p := fixpoint (my_recv_prot il ir i p).
   Instance rle_prot_unfold il ir i isp max_id p :
     ProtoUnfold (rle_prot il ir i p isp max_id) (my_recv_prot il ir i p (rle_prot il ir i p) isp max_id).
@@ -100,7 +95,7 @@ Section ring_leader_election_example.
       { case_bool_decide; [|lia].
         wp_pures. wp_send with "[//]".
         iEval (replace i' with (max i' i_max) by lia).
-        wp_send with "[//]". wp_pures.
+        wp_send with "[//]". wp_pures.        
         iApply ("IH" with "[] Hc HΦ"). iPureIntro. lia. }
       case_bool_decide as Hlt2.
       { case_bool_decide; [lia|].
@@ -116,7 +111,6 @@ Section ring_leader_election_example.
       destruct isp.
       { wp_pures. iApply ("IH" with "[] Hc HΦ"). iPureIntro. lia. }
       wp_pures.
-      rewrite /my_send_prot.
       wp_send with "[//]".
       iEval (replace i_max with (max i' i_max) by lia).
       wp_send with "[//]".
@@ -166,8 +160,64 @@ Section ring_leader_election_example.
   Proof. apply (fixpoint_unfold (my_recv_prot il ir i p)). Qed.
 
   Lemma prot_pool_consistent : ⊢ iProto_consistent prot_pool.
-  Proof. Admitted.
-    
+  Proof.    
+    rewrite /prot_pool /rle_preprot.
+    rewrite !rle_prot_unfold'.
+    iProto_consistent_take_step.
+    iProto_consistent_resolve_step.
+    iProto_consistent_take_step.
+    iProto_consistent_resolve_step.
+    repeat clean_map 0. repeat clean_map 1.
+    repeat clean_map 2. repeat clean_map 3.
+    iProto_consistent_take_step.
+    iProto_consistent_resolve_step.
+    iProto_consistent_take_step.
+    iProto_consistent_resolve_step.
+    repeat clean_map 0. repeat clean_map 1.
+    repeat clean_map 2. repeat clean_map 3.
+    rewrite !rle_prot_unfold'.
+    iProto_consistent_take_step.
+    iProto_consistent_resolve_step.
+    iProto_consistent_take_step.
+    iProto_consistent_resolve_step.
+    repeat clean_map 0. repeat clean_map 1.
+    repeat clean_map 2. repeat clean_map 3.
+    iProto_consistent_take_step.
+    iProto_consistent_resolve_step.
+    iProto_consistent_take_step.
+    iProto_consistent_resolve_step.
+    repeat clean_map 0. repeat clean_map 1.
+    repeat clean_map 2. repeat clean_map 3.
+    rewrite !rle_prot_unfold'.
+    iProto_consistent_take_step.
+    iProto_consistent_resolve_step.
+    iProto_consistent_take_step.
+    iProto_consistent_resolve_step.
+    repeat clean_map 0. repeat clean_map 1.
+    repeat clean_map 2. repeat clean_map 3.
+    iProto_consistent_take_step.
+    iProto_consistent_resolve_step.
+    iProto_consistent_take_step.
+    iProto_consistent_resolve_step.
+    repeat clean_map 0. repeat clean_map 1.
+    repeat clean_map 2. repeat clean_map 3.
+    iProto_consistent_take_step.
+    iProto_consistent_resolve_step.
+    iProto_consistent_take_step.
+    iProto_consistent_resolve_step.
+    repeat clean_map 0. repeat clean_map 1.
+    repeat clean_map 2. repeat clean_map 3.
+    iProto_consistent_take_step.
+    iProto_consistent_resolve_step.
+    iProto_consistent_take_step.
+    iProto_consistent_resolve_step.
+    repeat clean_map 0. repeat clean_map 1.
+    repeat clean_map 2. repeat clean_map 3.
+    iProto_consistent_take_step.
+    iProto_consistent_resolve_step.
+    iProto_consistent_take_step.
+  Qed.
+
   Lemma program_spec :
     {{{ True }}} 
       program #()