diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index 3d35bc8..56c53d3 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -316,10 +316,11 @@
         }
 
         private String getKeyForCurrent() {
-            if (mLockPatternUtils.isLockScreenDisabled(mUserId)) {
+            final int credentialOwner = mUserManager.getCredentialOwnerProfile(mUserId);
+            if (mLockPatternUtils.isLockScreenDisabled(credentialOwner)) {
                 return KEY_UNLOCK_SET_OFF;
             }
-            switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(mUserId)) {
+            switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(credentialOwner)) {
                 case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
                     return KEY_UNLOCK_SET_PATTERN;
                 case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
@@ -521,6 +522,7 @@
             }
 
             if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
+                mLockPatternUtils.setSeparateProfileChallengeEnabled(mUserId, true);
                 mChooseLockSettingsHelper.utils().clearLock(mUserId);
                 mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled, mUserId);
                 mLockPatternUtils.setSeparateProfileChallengeEnabled(mUserId, false);
diff --git a/src/com/android/settings/ProfileChallengePreferenceFragment.java b/src/com/android/settings/ProfileChallengePreferenceFragment.java
index 4e3fcfd..676f61f 100644
--- a/src/com/android/settings/ProfileChallengePreferenceFragment.java
+++ b/src/com/android/settings/ProfileChallengePreferenceFragment.java
@@ -128,12 +128,16 @@
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
         if (requestCode == UNIFY_LOCK_METHOD_REQUEST && resultCode == Activity.RESULT_OK) {
-            mLockPatternUtils.clearLock(mProfileUserId);
-            mLockPatternUtils.setSeparateProfileChallengeEnabled(mProfileUserId, false);
+            unifyLocks();
             return;
         }
     }
 
+    private void unifyLocks() {
+        mLockPatternUtils.clearLock(mProfileUserId);
+        mLockPatternUtils.setSeparateProfileChallengeEnabled(mProfileUserId, false);
+    }
+
     @Override
     public void onResume() {
         super.onResume();
@@ -260,6 +264,8 @@
         @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             final Bundle args = getArguments();
+            final ProfileChallengePreferenceFragment parentFragment =
+                    ((ProfileChallengePreferenceFragment) getParentFragment());
             return new AlertDialog.Builder(getActivity())
                     .setTitle(R.string.lock_settings_profile_unification_dialog_title)
                     .setMessage(R.string.lock_settings_profile_unification_dialog_body)
@@ -271,9 +277,13 @@
                                             R.string.lock_settings_profile_screen_lock_title);
                                     ChooseLockSettingsHelper helper =
                                             new ChooseLockSettingsHelper(
-                                                    getActivity(), getParentFragment());
-                                    helper.launchConfirmationActivity(UNIFY_LOCK_METHOD_REQUEST,
-                                            title, true, args.getInt(ARG_USER_ID));
+                                                    getActivity(), parentFragment);
+                                    if (!helper.launchConfirmationActivity(
+                                            UNIFY_LOCK_METHOD_REQUEST,
+                                            title, true, args.getInt(ARG_USER_ID))) {
+                                        parentFragment.unifyLocks();
+                                        parentFragment.createPreferenceHierarchy();
+                                    }
                                 }
                             }
                     )
