diff --git a/barrier/barrier.v b/barrier/barrier.v
index 7a0a9bb2d0149e5943fdea114af8e04f7719e4dd..d1e2b2a5007f218ae7e91466a8b81aa5c6e48bf7 100644
--- a/barrier/barrier.v
+++ b/barrier/barrier.v
@@ -168,10 +168,18 @@ Section proof.
       + rewrite /= /tok /=. apply elem_of_equiv=>t. rewrite elem_of_difference elem_of_union.
         rewrite !mkSet_elem_of /change_tokens.
         (* TODO: destruct t; solve_elem_of does not work. What is the best way to do on? *)
-        admit.
+        destruct t as [i'|]; last by naive_solver. split.
+        * move=>[_ Hn]. left. destruct (decide (i = i')); first by subst i.
+          exfalso. apply Hn. left. solve_elem_of.
+        * move=>[[EQ]|?]; last discriminate. solve_elem_of. 
       + apply elem_of_intersection. rewrite !mkSet_elem_of /=. solve_elem_of.
-      + (* TODO: Need lemma about closenedd os intersection / union. *) admit.
-  Abort.
+      + apply sts.closed_op.
+        * apply i_states_closed.
+        * apply low_states_closed.
+        * solve_elem_of.
+        * apply (non_empty_inhabited (State Low {[ i ]})). apply elem_of_intersection.
+          rewrite !mkSet_elem_of /=. solve_elem_of.
+  Qed.
 
   Lemma signal_spec l P (Q : val → iProp) :
     heapN ⊥ N → (send l P ★ P ★ Q '()) ⊑ wp ⊤ (signal (LocV l)) Q.