diff --git a/theories/finite.v b/theories/finite.v
index 4297363d0e5a5fed5b30c20756e270dd33c3ad88..9e58dcd6af54cfe9353255ea45e2a1f3d1d25520 100644
--- a/theories/finite.v
+++ b/theories/finite.v
@@ -224,11 +224,12 @@ Section surjective_finite.
   Context `{Finite A, EqDecision B} (f : A → B).
   Context `{!Surj (=) f}.
 
-  Program Instance surjective_finite: Finite B := {| enum := remove_dups (f <$> enum A) |}.
+  Program Instance surjective_finite: Finite B :=
+    {| enum := remove_dups (f <$> enum A) |}.
   Next Obligation. apply NoDup_remove_dups. Qed.
   Next Obligation.
     intros y. rewrite elem_of_remove_dups, elem_of_list_fmap.
-    destruct (Surj0 y). eauto using elem_of_enum.
+    destruct (surj f y). eauto using elem_of_enum.
   Qed.
 End surjective_finite.
 
@@ -236,9 +237,9 @@ Section bijective_finite.
   Context `{Finite A, EqDecision B} (f : A → B) (g : B → A).
   Context `{!Inj (=) (=) f, !Cancel (=) f g}.
 
-  Program Instance bijective_finite: Finite B := _.
-  Next Obligation. eapply surjective_finite. eapply cancel_surj.
-                   Unshelve. all: eapply _. Qed.
+  Global Instance bijective_finite: Finite B :=
+    let _ := cancel_surj (f:=f) (g:=g) in
+    surjective_finite f.
 End bijective_finite.
 
 Program Instance option_finite `{Finite A} : Finite (option A) :=