diff --git a/src/com/android/settings/ChooseLockPassword.java b/src/com/android/settings/ChooseLockPassword.java
index 4a8b543..2d36f03 100644
--- a/src/com/android/settings/ChooseLockPassword.java
+++ b/src/com/android/settings/ChooseLockPassword.java
@@ -78,10 +78,16 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        mLockPatternUtils = new LockPatternUtils(getContentResolver());
-        mRequestedMode = getIntent().getIntExtra("password_mode", mRequestedMode);
-        mPasswordMinLength = getIntent().getIntExtra("password_min_length", mPasswordMinLength);
-        mPasswordMaxLength = getIntent().getIntExtra("password_max_length", mPasswordMaxLength);
+        mLockPatternUtils = new LockPatternUtils(this);
+        if (mLockPatternUtils.isDevicePolicyActive()) {
+            mRequestedMode = mLockPatternUtils.getRequestedPasswordMode();
+            mPasswordMinLength = mLockPatternUtils.getRequestedMinimumPasswordLength();
+        } else {
+            mRequestedMode = getIntent().getIntExtra(LockPatternUtils.PASSWORD_TYPE_KEY,
+                    mRequestedMode);
+            mPasswordMinLength = getIntent().getIntExtra(PASSWORD_MIN_KEY, mPasswordMinLength);
+        }
+        mPasswordMaxLength = getIntent().getIntExtra(PASSWORD_MAX_KEY, mPasswordMaxLength);
         initViews();
         mChooseLockSettingsHelper = new ChooseLockSettingsHelper(this);
         if (savedInstanceState == null) {
@@ -91,19 +97,22 @@
     }
 
     private void initViews() {
-        if (LockPatternUtils.MODE_PIN == mRequestedMode
-                || LockPatternUtils.MODE_PASSWORD == mRequestedMode) {
-            setContentView(R.layout.choose_lock_pin);
-            // TODO: alphanumeric layout
-            // setContentView(R.layout.choose_lock_password);
-            for (int i = 0; i < digitIds.length; i++) {
-                Button button = (Button) findViewById(digitIds[i]);
-                button.setOnClickListener(this);
-                button.setText(Integer.toString(i));
-            }
-            findViewById(R.id.ok).setOnClickListener(this);
-            findViewById(R.id.cancel).setOnClickListener(this);
+        switch(mRequestedMode) {
+            case LockPatternUtils.MODE_PIN:
+            case LockPatternUtils.MODE_PASSWORD:
+            case LockPatternUtils.MODE_PATTERN:
+                setContentView(R.layout.choose_lock_pin);
+                // TODO: alphanumeric layout
+                // setContentView(R.layout.choose_lock_password);
+                for (int i = 0; i < digitIds.length; i++) {
+                    Button button = (Button) findViewById(digitIds[i]);
+                    button.setOnClickListener(this);
+                    button.setText(Integer.toString(i));
+                }
+                break;
         }
+        findViewById(R.id.ok).setOnClickListener(this);
+        findViewById(R.id.cancel).setOnClickListener(this);
         findViewById(R.id.backspace).setOnClickListener(this);
         mPasswordTextView = (TextView) findViewById(R.id.pinDisplay);
         mHeaderText = (TextView) findViewById(R.id.headerText);
@@ -179,8 +188,6 @@
                             // TODO: move these to LockPatternUtils
                             mLockPatternUtils.setLockPatternEnabled(false);
                             mLockPatternUtils.saveLockPattern(null);
-
-
                             mLockPatternUtils.saveLockPassword(pin);
                             finish();
                         } else {
diff --git a/src/com/android/settings/ChooseLockPatternTutorial.java b/src/com/android/settings/ChooseLockPatternTutorial.java
index 6e92ca8..757dc40 100644
--- a/src/com/android/settings/ChooseLockPatternTutorial.java
+++ b/src/com/android/settings/ChooseLockPatternTutorial.java
@@ -25,15 +25,15 @@
 
 public class ChooseLockPatternTutorial extends Activity implements View.OnClickListener {
     private static final int REQUESTCODE_EXAMPLE = 1;
-    
+
     private View mNextButton;
     private View mSkipButton;
-    
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         // Don't show the tutorial if the user has seen it before.
-        LockPatternUtils lockPatternUtils = new LockPatternUtils(getContentResolver());
+        LockPatternUtils lockPatternUtils = new LockPatternUtils(this);
         if (savedInstanceState == null && lockPatternUtils.isPatternEverChosen()) {
             Intent intent = new Intent();
             intent.setClassName("com.android.settings", "com.android.settings.ChooseLockPattern");
@@ -43,7 +43,7 @@
             initViews();
         }
     }
-    
+
     private void initViews() {
         setContentView(R.layout.choose_lock_pattern_tutorial);
         mNextButton = findViewById(R.id.next_button);
@@ -70,6 +70,6 @@
             finish();
         }
     }
-    
+
 }
 
diff --git a/src/com/android/settings/ChooseLockSettingsHelper.java b/src/com/android/settings/ChooseLockSettingsHelper.java
index ab2f8c0..3697b28e 100644
--- a/src/com/android/settings/ChooseLockSettingsHelper.java
+++ b/src/com/android/settings/ChooseLockSettingsHelper.java
@@ -27,7 +27,7 @@
 
     public ChooseLockSettingsHelper(Activity activity) {
         mActivity = activity;
-        mLockPatternUtils = new LockPatternUtils(activity.getContentResolver());
+        mLockPatternUtils = new LockPatternUtils(activity);
     }
 
     public LockPatternUtils utils() {
diff --git a/src/com/android/settings/ConfirmLockPassword.java b/src/com/android/settings/ConfirmLockPassword.java
index 0cbc158..5308f88 100644
--- a/src/com/android/settings/ConfirmLockPassword.java
+++ b/src/com/android/settings/ConfirmLockPassword.java
@@ -39,7 +39,7 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        mLockPatternUtils = new LockPatternUtils(getContentResolver());
+        mLockPatternUtils = new LockPatternUtils(this);
         initViews();
     }
 
diff --git a/src/com/android/settings/ConfirmLockPattern.java b/src/com/android/settings/ConfirmLockPattern.java
index a91b45f..eb9a4d8 100644
--- a/src/com/android/settings/ConfirmLockPattern.java
+++ b/src/com/android/settings/ConfirmLockPattern.java
@@ -80,7 +80,7 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        mLockPatternUtils = new LockPatternUtils(getContentResolver());
+        mLockPatternUtils = new LockPatternUtils(this);
 
         requestWindowFeature(Window.FEATURE_NO_TITLE);
         setContentView(R.layout.confirm_lock_pattern);
@@ -94,7 +94,7 @@
         final LinearLayoutWithDefaultTouchRecepient topLayout
                 = (LinearLayoutWithDefaultTouchRecepient) findViewById(
                 R.id.topLayout);
-        topLayout.setDefaultTouchRecepient(mLockPatternView);        
+        topLayout.setDefaultTouchRecepient(mLockPatternView);
 
         Intent intent = getIntent();
         if (intent != null) {
@@ -161,7 +161,7 @@
                 } else {
                     mFooterTextView.setText(R.string.lockpattern_need_to_unlock_footer);
                 }
-                
+
                 mLockPatternView.setEnabled(true);
                 mLockPatternView.enableInput();
                 break;
@@ -176,7 +176,7 @@
                 } else {
                     mFooterTextView.setText(R.string.lockpattern_need_to_unlock_wrong_footer);
                 }
-                
+
                 mLockPatternView.setDisplayMode(LockPatternView.DisplayMode.Wrong);
                 mLockPatternView.setEnabled(true);
                 mLockPatternView.enableInput();
diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java
index fd4a411..d33e1e8 100644
--- a/src/com/android/settings/MasterClear.java
+++ b/src/com/android/settings/MasterClear.java
@@ -53,7 +53,7 @@
     private View mFinalView;
     private Button mFinalButton;
 
-    /** 
+    /**
      * The user has gone through the multiple confirmation, so now we go ahead
      * and invoke the Checkin Service to reset the device to its factory-default
      * state (rebooting in the process).
@@ -65,7 +65,7 @@
                     return;
                 }
 
-                ICheckinService service = 
+                ICheckinService service =
                         ICheckinService.Stub.asInterface(ServiceManager.getService("checkin"));
                 if (service != null) {
                     try {
@@ -159,7 +159,7 @@
      * click in order to initiate a confirmation sequence.  This method is
      * called from various other points in the code to reset the activity to
      * this base state.
-     * 
+     *
      * <p>Reinflating views from resources is expensive and prevents us from
      * caching widget pointers, so we use a single-inflate pattern:  we lazy-
      * inflate each view, caching all of the widget pointers we'll need at the
@@ -184,7 +184,7 @@
         mInitialView = null;
         mFinalView = null;
         mInflater = LayoutInflater.from(this);
-        mLockUtils = new LockPatternUtils(getContentResolver());
+        mLockUtils = new LockPatternUtils(this);
 
         establishInitialState();
     }
diff --git a/src/com/android/settings/MediaFormat.java b/src/com/android/settings/MediaFormat.java
index e414569..40ae0d7 100644
--- a/src/com/android/settings/MediaFormat.java
+++ b/src/com/android/settings/MediaFormat.java
@@ -147,7 +147,7 @@
      * click in order to initiate a confirmation sequence.  This method is
      * called from various other points in the code to reset the activity to
      * this base state.
-     * 
+     *
      * <p>Reinflating views from resources is expensive and prevents us from
      * caching widget pointers, so we use a single-inflate pattern:  we lazy-
      * inflate each view, caching all of the widget pointers we'll need at the
@@ -172,7 +172,7 @@
         mInitialView = null;
         mFinalView = null;
         mInflater = LayoutInflater.from(this);
-        mLockUtils = new LockPatternUtils(getContentResolver());
+        mLockUtils = new LockPatternUtils(this);
 
         establishInitialState();
     }
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 6564e3e..d4f721c 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -89,6 +89,10 @@
     private static final String LOCATION_GPS = "location_gps";
     private static final String ASSISTED_GPS = "assisted_gps";
 
+    // Default password lengths if device policy isn't in effect. Ignored otherwise.
+    private static final int PASSWORD_MIN_LENGTH = 4;
+    private static final int PASSWORD_MAX_LENGTH = 16;
+
     // Credential storage
     private CredentialStorage mCredentialStorage = new CredentialStorage();
 
@@ -217,14 +221,12 @@
         if ("none".equals(value)) {
             mChooseLockSettingsHelper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST);
         } else if ("password".equals(value) || "pin".equals(value)) {
-            final int minLength = 4; // TODO: get from policy store.
-            final int maxLength = 16;
             final int mode = "password".equals(value)
                     ? LockPatternUtils.MODE_PASSWORD : LockPatternUtils.MODE_PIN;
             Intent intent = new Intent().setClassName(PACKAGE, CHOOSE_LOCK_PIN);
             intent.putExtra(LockPatternUtils.PASSWORD_TYPE_KEY, mode);
-            intent.putExtra(ChooseLockPassword.PASSWORD_MIN_KEY, minLength);
-            intent.putExtra(ChooseLockPassword.PASSWORD_MAX_KEY, maxLength);
+            intent.putExtra(ChooseLockPassword.PASSWORD_MIN_KEY, PASSWORD_MIN_LENGTH);
+            intent.putExtra(ChooseLockPassword.PASSWORD_MAX_KEY, PASSWORD_MAX_LENGTH);
             startActivityForResult(intent, UPDATE_PASSWORD_REQUEST);
         } else if ("pattern".equals(value)) {
             boolean showTutorial = !lockPatternUtils.isPatternEverChosen();
