diff --git a/program_logic/namespaces.v b/program_logic/namespaces.v
index 5badaaded9f02f7c05dec7d870b63a6f430e1a61..51093e7f59107e6b2b1c7e122d9a9c350951ab98 100644
--- a/program_logic/namespaces.v
+++ b/program_logic/namespaces.v
@@ -43,41 +43,27 @@ Proof. apply nclose_subseteq with x, encode_nclose. Qed.
 Lemma nclose_infinite N : ¬set_finite (nclose N).
 Proof. rewrite nclose_eq. apply coPset_suffixes_infinite. Qed.
 
-Instance ndisjoint : Disjoint namespace := λ N1 N2,
-  ∃ N1' N2', N1' `suffix_of` N1 ∧ N2' `suffix_of` N2 ∧
-             length N1' = length N2' ∧ N1' ≠ N2'.
-Typeclasses Opaque ndisjoint.
+Instance ndisjoint : Disjoint namespace := λ N1 N2, nclose N1 ⊥ nclose N2.
 
 Section ndisjoint.
   Context `{Countable A}.
   Implicit Types x y : A.
 
-  Global Instance ndisjoint_symmetric : Symmetric ndisjoint.
-  Proof. intros N1 N2. rewrite /disjoint /ndisjoint; naive_solver. Qed.
-
   Lemma ndot_ne_disjoint N x y : x ≠ y → N .@ x ⊥ N .@ y.
-  Proof. intros. exists (N .@ x), (N .@ y); rewrite ndot_eq; naive_solver. Qed.
-
-  Lemma ndot_preserve_disjoint_l N1 N2 x : N1 ⊥ N2 → N1 .@ x ⊥ N2.
   Proof.
-    intros (N1' & N2' & Hpr1 & Hpr2 & Hl & Hne). exists N1', N2'.
-    split_and?; try done; []. rewrite ndot_eq. by apply suffix_of_cons_r.
+    intros Hxy a. rewrite !nclose_eq !elem_coPset_suffixes !ndot_eq.
+    intros [qx ->] [qy]. by intros [= ?%encode_inj]%list_encode_suffix_eq.
   Qed.
 
-  Lemma ndot_preserve_disjoint_r N1 N2 x : N1 ⊥ N2 → N1 ⊥ N2 .@ x .
-  Proof. intros. by apply symmetry, ndot_preserve_disjoint_l. Qed.
+  Lemma ndot_preserve_disjoint_l N E x : nclose N ⊥ E → nclose (N .@ x) ⊥ E.
+  Proof. intros. pose proof (nclose_subseteq N x). set_solver. Qed.
 
-  Lemma ndisj_disjoint N1 N2 : N1 ⊥ N2 → nclose N1 ⊥ nclose N2.
-  Proof.
-    intros (N1' & N2' & [N1'' ->] & [N2'' ->] & Hl & Hne) p.
-    rewrite nclose_eq /nclose.
-    rewrite !elem_coPset_suffixes; intros [q ->] [q' Hq]; destruct Hne.
-    by rewrite !list_encode_app !assoc in Hq; apply list_encode_suffix_eq in Hq.
-  Qed.
+  Lemma ndot_preserve_disjoint_r N E x : E ⊥ nclose N → E ⊥ nclose (N .@ x).
+  Proof. intros. by apply symmetry, ndot_preserve_disjoint_l. Qed.
 
-  Lemma ndisj_subseteq_difference N1 N2 E :
-    N1 ⊥ N2 → nclose N1 ⊆ E → nclose N1 ⊆ E ∖ nclose N2.
-  Proof. intros ?%ndisj_disjoint. set_solver. Qed.
+  Lemma ndisj_subseteq_difference N E F :
+    E ⊥ nclose N → E ⊆ F → E ⊆ F ∖ nclose N.
+  Proof. set_solver. Qed.
 End ndisjoint.
 
 (* The hope is that registering these will suffice to solve most goals