diff --git a/tests/gmap.ref b/tests/gmap.ref
index a4d42549233b5c0153c1b455eb21f2651d09f7d4..8b1fa98fcf41db2dd1a8077a4957ed1ff9032285 100644
--- a/tests/gmap.ref
+++ b/tests/gmap.ref
@@ -70,3 +70,9 @@ Failed to progress.
   
   ============================
   bool_decide (∅ ⊆ {[1; 2; 3]}) = true
+The command has indeed failed with message:
+Nothing to inject.
+The command has indeed failed with message:
+Nothing to inject.
+The command has indeed failed with message:
+Failed to progress.
diff --git a/tests/gmap.v b/tests/gmap.v
index 6cb7029b63ea9553c3255497fe63bd09b68fb38d..987c0fe699f9c45b55eb46191ac38d0721faeb2e 100644
--- a/tests/gmap.v
+++ b/tests/gmap.v
@@ -68,3 +68,17 @@ Proof.
   Show.
   reflexivity.
 Qed.
+
+Lemma should_not_unfold (m1 m2 : gmap nat nat) k x :
+  dom (gset nat) m1 = dom (gset nat) m2 →
+  <[k:=x]> m1 = <[k:=x]> m2 →
+  True.
+Proof.
+  (** Make sure that [injection]/[simplify_eq] does not unfold constructs on
+  [gmap] and [gset]. *)
+  intros Hdom Hinsert.
+  Fail injection Hdom.
+  Fail injection Hinsert.
+  Fail progress simplify_eq.
+  done.
+Qed.
diff --git a/theories/gmap.v b/theories/gmap.v
index 97726848b7b816d38e1ffb547545094017bf71b6..9b49181e25bfa288ea31a9e22d947d7e0939e256 100644
--- a/theories/gmap.v
+++ b/theories/gmap.v
@@ -251,7 +251,11 @@ Section gset.
   Global Instance gset_elem_of_dec : RelDecision (∈@{gset K}) | 1 := _.
   Global Instance gset_disjoint_dec : RelDecision (##@{gset K}) := _.
   Global Instance gset_subseteq_dec : RelDecision (⊆@{gset K}) := _.
-  Global Instance gset_dom {A} : Dom (gmap K A) (gset K) := mapset_dom.
+
+  (** We put in an eta expansion to avoid [injection] from unfolding equalities
+  like [dom (gset _) m1 = dom (gset _) m2]. *)
+  Global Instance gset_dom {A} : Dom (gmap K A) (gset K) := λ m,
+    let '(GMap m Hm) := m in mapset_dom (GMap m Hm).
 
   Global Arguments gset_elem_of : simpl never.
   Global Arguments gset_empty : simpl never.
@@ -273,7 +277,11 @@ Section gset.
   Global Instance gset_semi_set : SemiSet K (gset K) | 1 := _.
   Global Instance gset_set : Set_ K (gset K) | 1 := _.
   Global Instance gset_fin_set : FinSet K (gset K) := _.
-  Global Instance gset_dom_spec : FinMapDom K (gmap K) (gset K) := mapset_dom_spec.
+  Global Instance gset_dom_spec : FinMapDom K (gmap K) (gset K).
+  Proof.
+    pose proof (mapset_dom_spec (M:=gmap K)) as [?? Hdom]; split; auto.
+    intros A m. specialize (Hdom A m). by destruct m.
+  Qed.
 
   (** If you are looking for a lemma showing that [gset] is extensional, see
   [sets.set_eq]. *)