diff --git a/barrier/barrier.v b/barrier/barrier.v
index d9bf7e3c6a734048229dfca4bd7ce44f26419f0c..7a24961823409a49038ad0cc80439eb8b6eb02e3 100644
--- a/barrier/barrier.v
+++ b/barrier/barrier.v
@@ -14,27 +14,26 @@ Definition wait := (rec: "wait" "x" :=if: !"x" = '1 then '() else "wait" "x")%L.
     with saved propositions. *)
 Module barrier_proto.
   Inductive phase := Low | High.
-  Record stateT := State { state_phase : phase; state_I : gset gname }.
+  Record state := State { state_phase : phase; state_I : gset gname }.
   Inductive token := Change (i : gname) | Send.
 
-  Global Instance stateT_inhabited: Inhabited stateT.
-  Proof. split. exact (State Low ∅). Qed.
+  Global Instance stateT_inhabited: Inhabited state := populate (State Low ∅).
 
   Definition change_tokens (I : gset gname) : set token :=
     mkSet (λ t, match t with Change i => i ∉ I | Send => False end).
 
-  Inductive trans : relation stateT :=
-  | ChangeI p I2 I1 : trans (State p I1) (State p I2)
-  | ChangePhase I : trans (State Low I) (State High I).
+  Inductive prim_step : relation state :=
+    | ChangeI p I2 I1 : prim_step (State p I1) (State p I2)
+    | ChangePhase I : prim_step (State Low I) (State High I).
 
-  Definition tok (s : stateT) : set token :=
+  Definition tok (s : state) : set token :=
       change_tokens (state_I s)
     ∪ match state_phase s with Low => ∅ | High => {[ Send ]} end.
 
-  Canonical Structure sts := sts.STS trans tok.
+  Canonical Structure sts := sts.STS prim_step tok.
 
   (* The set of states containing some particular i *)
-  Definition i_states (i : gname) : set stateT :=
+  Definition i_states (i : gname) : set state :=
     mkSet (λ s, i ∈ state_I s).
 
   Lemma i_states_closed i :
@@ -62,7 +61,7 @@ Module barrier_proto.
   Qed.
 
   (* The set of low states *)
-  Definition low_states : set stateT :=
+  Definition low_states : set state :=
     mkSet (λ s, if state_phase s is Low then True else False).
 
   Lemma low_states_closed : sts.closed low_states {[ Send ]}.
@@ -161,7 +160,7 @@ Section proof.
 
   Local Notation state_to_val s :=
     (match s with State Low _ => 0 | State High _ => 1 end).
-  Definition barrier_inv (l : loc) (P : iProp) (s : stateT) : iProp :=
+  Definition barrier_inv (l : loc) (P : iProp) (s : state) : iProp :=
     (l ↦ '(state_to_val s) ★
      match s with State Low I' => waiting P I' | State High I' => ress I' end
     )%I.
@@ -181,18 +180,14 @@ Section proof.
     (∃ γ, barrier_ctx γ l P ★ sts_ownS γ low_states {[ Send ]})%I.
 
   Global Instance send_ne n l : Proper (dist n ==> dist n) (send l).
-  Proof. (* TODO: This really ought to be doable by an automatic tactic. it is just application of already regostered congruence lemmas. *)
-    move=>? ? EQ. rewrite /send. apply exist_ne=>γ. by rewrite EQ.
-  Qed.
-
+  Proof. intros P1 P2 HP. rewrite /send. by setoid_rewrite HP. Qed.
+ 
   Definition recv (l : loc) (R : iProp) : iProp :=
     (∃ γ P Q i, barrier_ctx γ l P ★ sts_ownS γ (i_states i) {[ Change i ]} ★
         saved_prop_own i Q ★ ▷(Q -★ R))%I.
 
   Global Instance recv_ne n l : Proper (dist n ==> dist n) (recv l).
-  Proof.
-    move=>? ? EQ. rewrite /send. do 4 apply exist_ne=>?. by rewrite EQ.
-  Qed.
+  Proof. intros R1 R2 HR. rewrite /recv. by setoid_rewrite HR. Qed.
 
   Lemma waiting_split i i1 i2 Q R1 R2 P I :
     i ∈ I → i1 ∉ I → i2 ∉ I → i1 ≠ i2 →