diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index 4dde340..8847321 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -611,12 +611,26 @@
 
         private void removeAllFingerprintTemplatesAndFinish() {
             if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()
-                    && mFingerprintManager.getEnrolledFingerprints().size() > 0) {
+                    && mFingerprintManager.hasEnrolledFingerprints(mUserId)) {
+                mFingerprintManager.setActiveUser(mUserId);
                 mFingerprintManager.remove(
-                        new Fingerprint(null, 0, 0, 0), mUserId, mRemovalCallback);
-            } else {
-                finish();
+                        new Fingerprint(null, mUserId, 0, 0), mUserId,
+                        new RemovalCallback() {
+                            @Override
+                            public void onRemovalError(Fingerprint fp, int errMsgId,
+                                    CharSequence errString) {
+                                mRemovalCallback.onRemovalError(fp, errMsgId, errString);
+                                mFingerprintManager.setActiveUser(UserHandle.myUserId());
+                            }
+
+                            @Override
+                            public void onRemovalSucceeded(Fingerprint fingerprint) {
+                                mRemovalCallback.onRemovalSucceeded(fingerprint);
+                                mFingerprintManager.setActiveUser(UserHandle.myUserId());
+                            }
+                        });
             }
+            finish();
         }
 
         @Override
@@ -636,7 +650,7 @@
         }
 
         private int getResIdForFactoryResetProtectionWarningMessage() {
-            boolean hasFingerprints = mFingerprintManager.hasEnrolledFingerprints();
+            boolean hasFingerprints = mFingerprintManager.hasEnrolledFingerprints(mUserId);
             boolean isProfile = Utils.isManagedProfile(UserManager.get(getActivity()), mUserId);
             switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(mUserId)) {
                 case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
