diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index 2641ad2..65e6c27 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -486,6 +486,7 @@
             if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
                 mChooseLockSettingsHelper.utils().clearLock(mUserId);
                 mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled, mUserId);
+                mLockPatternUtils.setSeparateProfileChallengeEnabled(mUserId, false);
                 removeAllFingerprintTemplatesAndFinish();
                 getActivity().setResult(Activity.RESULT_OK);
             } else {
diff --git a/src/com/android/settings/ChooseLockPassword.java b/src/com/android/settings/ChooseLockPassword.java
index eacf1ab..6739475 100644
--- a/src/com/android/settings/ChooseLockPassword.java
+++ b/src/com/android/settings/ChooseLockPassword.java
@@ -670,12 +670,11 @@
         private String mChosenPassword;
         private String mCurrentPassword;
         private int mRequestedQuality;
-        private int mUserId;
 
         public void start(LockPatternUtils utils, boolean required,
                 boolean hasChallenge, long challenge,
                 String chosenPassword, String currentPassword, int requestedQuality, int userId) {
-            prepare(utils, required, hasChallenge, challenge);
+            prepare(utils, required, hasChallenge, challenge, userId);
 
             mChosenPassword = chosenPassword;
             mCurrentPassword = currentPassword;
diff --git a/src/com/android/settings/ChooseLockPattern.java b/src/com/android/settings/ChooseLockPattern.java
index e20db93..93ffa95 100644
--- a/src/com/android/settings/ChooseLockPattern.java
+++ b/src/com/android/settings/ChooseLockPattern.java
@@ -671,12 +671,11 @@
         private List<LockPatternView.Cell> mChosenPattern;
         private String mCurrentPattern;
         private boolean mLockVirgin;
-        private int mUserId;
 
         public void start(LockPatternUtils utils, boolean credentialRequired,
                 boolean hasChallenge, long challenge,
                 List<LockPatternView.Cell> chosenPattern, String currentPattern, int userId) {
-            prepare(utils, credentialRequired, hasChallenge, challenge);
+            prepare(utils, credentialRequired, hasChallenge, challenge, userId);
 
             mCurrentPattern = currentPattern;
             mChosenPattern = chosenPattern;
diff --git a/src/com/android/settings/SaveChosenLockWorkerBase.java b/src/com/android/settings/SaveChosenLockWorkerBase.java
index a40871a..4d8964a 100644
--- a/src/com/android/settings/SaveChosenLockWorkerBase.java
+++ b/src/com/android/settings/SaveChosenLockWorkerBase.java
@@ -20,7 +20,6 @@
 import android.content.Intent;
 import android.os.AsyncTask;
 import android.os.Bundle;
-import android.os.UserHandle;
 
 import com.android.internal.widget.LockPatternUtils;
 
@@ -38,6 +37,7 @@
     protected boolean mHasChallenge;
     protected long mChallenge;
     protected boolean mWasSecureBefore;
+    protected int mUserId;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -57,12 +57,15 @@
     }
 
     protected void prepare(LockPatternUtils utils, boolean credentialRequired,
-            boolean hasChallenge, long challenge) {
+            boolean hasChallenge, long challenge, int userId) {
         mUtils = utils;
+        mUserId = userId;
 
         mHasChallenge = hasChallenge;
         mChallenge = challenge;
-        mWasSecureBefore = mUtils.isSecure(UserHandle.myUserId());
+        // This will be a no-op for non managed profiles.
+        mUtils.setSeparateProfileChallengeEnabled(mUserId, true);
+        mWasSecureBefore = mUtils.isSecure(mUserId);
 
         mUtils.setCredentialRequiredToDecrypt(credentialRequired);
 
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 9ffa1f2..1221624 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -223,7 +223,7 @@
                     mProfileChallengeUserId = profile.id;
                 }
             }
-            if (LockPatternUtils.isSeparateWorkChallengeEnabled()) {
+            if (mLockPatternUtils.isSeparateProfileChallengeAllowed(mProfileChallengeUserId)) {
                 addPreferencesFromResource(R.xml.security_settings_profile);
             }
         }
@@ -776,11 +776,21 @@
             result.add(sir);
 
             final UserManager um = UserManager.get(context);
-            boolean hasChildProfile = um.getProfiles(UserHandle.myUserId()).size() > 1;
-            if (hasChildProfile && LockPatternUtils.isSeparateWorkChallengeEnabled()) {
-                sir = new SearchIndexableResource(context);
-                sir.xmlResId = R.xml.security_settings_profile;
-                result.add(sir);
+            List<UserInfo> profiles = um.getProfiles(UserHandle.myUserId());
+            int numProfiles = profiles.size();
+            if (numProfiles > 1) {
+                int profileUserId = -1;
+                for (int i = 0; i < numProfiles; ++i) {
+                    UserInfo profile = profiles.get(i);
+                    if (profile.id != UserHandle.myUserId()) {
+                        profileUserId = profile.id;
+                    }
+                }
+                if (lockPatternUtils.isSeparateProfileChallengeAllowed(profileUserId)) {
+                    sir = new SearchIndexableResource(context);
+                    sir.xmlResId = R.xml.security_settings_profile;
+                    result.add(sir);
+                }
             }
 
             if (um.isAdminUser()) {
