diff --git a/res/layout/crypt_keeper_pattern_entry.xml b/res/layout/crypt_keeper_pattern_entry.xml
new file mode 100644
index 0000000..a59d36f
--- /dev/null
+++ b/res/layout/crypt_keeper_pattern_entry.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License")
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+>
+    <include layout="@layout/crypt_keeper_status" />
+
+    <LinearLayout
+        android:layout_height="wrap_content"
+        android:layout_width="match_parent"
+        android:layout_marginStart="8dip"
+        android:layout_marginEnd="8dip"
+        android:orientation="horizontal"
+    >
+        <include layout="@layout/crypt_keeper_pattern_field" />
+    </LinearLayout>
+
+    <!-- Emergency call button.
+         Text and icon are set by CryptKeeper.updateEmergencyCallButtonState() -->
+    <Button android:id="@+id/emergencyCallButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:layout_marginTop="16dip"
+        style="@*android:style/Widget.Button.Transparent"
+        android:textSize="14sp"
+        android:drawablePadding="6dip"
+    />
+
+</LinearLayout>
diff --git a/res/layout/crypt_keeper_pattern_field.xml b/res/layout/crypt_keeper_pattern_field.xml
new file mode 100644
index 0000000..c4ec1f4
--- /dev/null
+++ b/res/layout/crypt_keeper_pattern_field.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License")
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<!-- Contents of the password entry field for CryptKeeper. Comes with an IME
+     switcher, if necessary. Assumed to be in a horizontal LinearLayout. -->
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+   <com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
+       android:layout_width="match_parent"
+       android:layout_height="match_parent" />
+
+   <ImageView android:id="@+id/switch_ime_button"
+       android:layout_width="wrap_content"
+       android:layout_height="wrap_content"
+       android:src="@drawable/ic_lockscreen_ime"
+       android:clickable="true"
+       android:contentDescription="@string/crypt_keeper_switch_input_method"
+       android:padding="8dip"
+       android:layout_gravity="center"
+       android:background="?android:attr/selectableItemBackground"
+       android:visibility="gone"
+   />
+</merge>
diff --git a/res/layout/crypt_keeper_pin_entry.xml b/res/layout/crypt_keeper_pin_entry.xml
new file mode 100644
index 0000000..dfc5fb5
--- /dev/null
+++ b/res/layout/crypt_keeper_pin_entry.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License")
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+>
+    <include layout="@layout/crypt_keeper_status" />
+
+    <LinearLayout
+        android:layout_height="wrap_content"
+        android:layout_width="match_parent"
+        android:layout_marginStart="8dip"
+        android:layout_marginEnd="8dip"
+        android:orientation="horizontal"
+    >
+        <include layout="@layout/crypt_keeper_pin_field" />
+    </LinearLayout>
+
+    <!-- Emergency call button.
+         Text and icon are set by CryptKeeper.updateEmergencyCallButtonState() -->
+    <Button android:id="@+id/emergencyCallButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:layout_marginTop="16dip"
+        style="@*android:style/Widget.Button.Transparent"
+        android:textSize="14sp"
+        android:drawablePadding="6dip"
+    />
+
+</LinearLayout>
diff --git a/res/layout/crypt_keeper_pin_field.xml b/res/layout/crypt_keeper_pin_field.xml
new file mode 100644
index 0000000..270b26b
--- /dev/null
+++ b/res/layout/crypt_keeper_pin_field.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License")
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<!-- Contents of the password entry field for CryptKeeper. Comes with an IME
+     switcher, if necessary. Assumed to be in a horizontal LinearLayout. -->
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+    <EditText android:id="@+id/passwordEntry"
+        android:layout_height="wrap_content"
+        android:layout_width="0dip"
+        android:layout_weight="1"
+        android:singleLine="true"
+        android:inputType="numberPassword"
+        android:imeOptions="flagForceAscii|actionDone"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+     />
+
+   <ImageView android:id="@+id/switch_ime_button"
+       android:layout_width="wrap_content"
+       android:layout_height="wrap_content"
+       android:src="@drawable/ic_lockscreen_ime"
+       android:clickable="true"
+       android:contentDescription="@string/crypt_keeper_switch_input_method"
+       android:padding="8dip"
+       android:layout_gravity="center"
+       android:background="?android:attr/selectableItemBackground"
+       android:visibility="gone"
+   />
+</merge>
diff --git a/res/values-hi/arrays.xml b/res/values-hi/arrays.xml
index fb0c86b..5ec6db2 100644
--- a/res/values-hi/arrays.xml
+++ b/res/values-hi/arrays.xml
@@ -434,7 +434,7 @@
   <string-array name="show_non_rect_clip_entries">
     <item msgid="993742912147090253">"बंद"</item>
     <item msgid="675719912558941285">"गैर-आयताकार क्लिप क्षेत्र नीले रंग से बनाएं"</item>
-    <item msgid="1064373276095698656">"परीक्षित आरेखण आदेशों को हरे रंग से हाइलाइट करें"</item>
+    <item msgid="1064373276095698656">"परीक्षित ड्रॉइंग आदेशों को हरे रंग से हाइलाइट करें"</item>
   </string-array>
   <string-array name="track_frame_time_entries">
     <item msgid="2193584639058893150">"बंद"</item>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 7645c01..5a79730 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -1814,7 +1814,7 @@
     <string name="wait_for_debugger" msgid="1202370874528893091">"डीबगर की प्रतीक्षा करें"</string>
     <string name="wait_for_debugger_summary" msgid="1766918303462746804">"डीबग किया गया ऐप्स  निष्पादन के पहले अनुलग्न करने हेतु डीबगर की प्रतीक्षा करता है"</string>
     <string name="debug_input_category" msgid="1811069939601180246">"इनपुट"</string>
-    <string name="debug_drawing_category" msgid="6755716469267367852">"आरेखण"</string>
+    <string name="debug_drawing_category" msgid="6755716469267367852">"ड्रॉइंग"</string>
     <string name="debug_hw_drawing_category" msgid="6220174216912308658">"हार्डवेयर त्वरित रेंडरिंग"</string>
     <string name="debug_monitoring_category" msgid="7640508148375798343">"निगरानी"</string>
     <string name="strict_mode" msgid="1938795874357830695">"सख्‍त मोड सक्षम किया गया"</string>
@@ -1841,7 +1841,7 @@
     <string name="show_cpu_usage" msgid="2389212910758076024">"CPU उपयोग दिखाएं"</string>
     <string name="show_cpu_usage_summary" msgid="2113341923988958266">"स्‍क्रीन ओवरले वर्तमान CPU उपयोग को दिखा रहा है"</string>
     <string name="force_hw_ui" msgid="6426383462520888732">"बलपूर्वक GPU रेंडर करें"</string>
-    <string name="force_hw_ui_summary" msgid="5535991166074861515">"2d आरेखण के लिए GPU का बलपूर्वक उपयोग करें"</string>
+    <string name="force_hw_ui_summary" msgid="5535991166074861515">"2d ड्रॉइंग के लिए GPU का बलपूर्वक उपयोग करें"</string>
     <string name="force_msaa" msgid="7920323238677284387">"4x MSAA को बाध्य करें"</string>
     <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 ऐप्स  में 4x MSAA को सक्षम करें"</string>
     <string name="show_non_rect_clip" msgid="505954950474595172">"गैर-आयताकार क्लिप परिचालनों को डीबग करें"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index feab5cb..fe8feb9 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -1689,7 +1689,7 @@
     <string name="backup_data_title" msgid="1239105919852668016">"Hifadhi nakala ya data yangu"</string>
     <string name="backup_data_summary" msgid="708773323451655666">"Hifadhi nakala ya data ya programu, manenosiri ya Wi-Fi, na mipangilio mingine kwenye seva za Google"</string>
     <string name="backup_configure_account_title" msgid="3790872965773196615">"Akaunti mbadala"</string>
-    <string name="backup_configure_account_default_summary" msgid="2436933224764745553">"Hakuna akaunti inayohifadhi kwa sasa data iliyochelezwa"</string>
+    <string name="backup_configure_account_default_summary" msgid="2436933224764745553">"Hakuna akaunti ambayo kwa sasa inahifadhi nakala rudufu za data"</string>
     <string name="auto_restore_title" msgid="5397528966329126506">"Onyesha upya otomatiki"</string>
     <string name="auto_restore_summary" msgid="4235615056371993807">"Wakati wa kusanidi upya programu, rejesha mipangilio na data ambazo zina nakala rudufu"</string>
     <string name="local_backup_password_title" msgid="3860471654439418822">"Nenosiri la hifadhi rudufu ya eneo kazi"</string>
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index a92f514..9c9fab1 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -226,20 +226,7 @@
         private int upgradeQuality(int quality, MutableBoolean allowBiometric) {
             quality = upgradeQualityForDPM(quality);
             quality = upgradeQualityForKeyStore(quality);
-            int encryptionQuality = upgradeQualityForEncryption(quality);
-            if (encryptionQuality > quality) {
-                //The first case checks whether biometric is allowed, prior to the user making
-                //their selection from the list
-                if (allowBiometric != null) {
-                    allowBiometric.value = quality <=
-                            DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK;
-                } else if (quality == DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK) {
-                    //When the user has selected biometric we shouldn't change that due to
-                    //encryption
-                    return quality;
-                }
-            }
-            return encryptionQuality;
+            return quality;
         }
 
         private int upgradeQualityForDPM(int quality) {
@@ -251,27 +238,6 @@
             return quality;
         }
 
-        /**
-         * Mix in "encryption minimums" to any given quality value.  This prevents users
-         * from downgrading the pattern/pin/password to a level below the minimums.
-         *
-         * ASSUMPTION:  Setting quality is sufficient (e.g. minimum lengths will be set
-         * appropriately.)
-         */
-        private int upgradeQualityForEncryption(int quality) {
-            // Don't upgrade quality for secondary users. Encryption requirements don't apply.
-            if (!Process.myUserHandle().equals(UserHandle.OWNER)) return quality;
-            int encryptionStatus = mDPM.getStorageEncryptionStatus();
-            boolean encrypted = (encryptionStatus == DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE)
-                    || (encryptionStatus == DevicePolicyManager.ENCRYPTION_STATUS_ACTIVATING);
-            if (encrypted) {
-                if (quality < CryptKeeperSettings.MIN_PASSWORD_QUALITY) {
-                    quality = CryptKeeperSettings.MIN_PASSWORD_QUALITY;
-                }
-            }
-            return quality;
-        }
-
         private int upgradeQualityForKeyStore(int quality) {
             if (!mKeyStore.isEmpty()) {
                 if (quality < CredentialStorage.MIN_PASSWORD_QUALITY) {
diff --git a/src/com/android/settings/CryptKeeper.java b/src/com/android/settings/CryptKeeper.java
index 23ec70e..d974d00 100644
--- a/src/com/android/settings/CryptKeeper.java
+++ b/src/com/android/settings/CryptKeeper.java
@@ -34,6 +34,7 @@
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.os.storage.IMountService;
+import android.os.storage.StorageManager;
 import android.provider.Settings;
 import android.telephony.TelephonyManager;
 import android.text.Editable;
@@ -60,6 +61,9 @@
 import com.android.internal.telephony.ITelephony;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
+import com.android.internal.widget.LockPatternUtils;
+import com.android.internal.widget.LockPatternView;
+import com.android.internal.widget.LockPatternView.Cell;
 
 import java.util.List;
 
@@ -113,6 +117,7 @@
     private int mCooldown;
     PowerManager.WakeLock mWakeLock;
     private EditText mPasswordEntry;
+    private LockPatternView mLockPatternView;
     /** Number of calls to {@link #notifyUser()} to ignore before notifying. */
     private int mNotificationCountdown = 0;
 
@@ -175,7 +180,9 @@
                 final TextView status = (TextView) findViewById(R.id.status);
                 status.setText(R.string.try_again);
                 // Reenable the password entry
-                mPasswordEntry.setEnabled(true);
+                if (mPasswordEntry != null) {
+                    mPasswordEntry.setEnabled(true);
+                }
             }
         }
     }
@@ -354,7 +361,21 @@
             setContentView(R.layout.crypt_keeper_progress);
             encryptionProgressInit();
         } else if (mValidationComplete || isDebugView(FORCE_VIEW_PASSWORD)) {
-            setContentView(R.layout.crypt_keeper_password_entry);
+            final IMountService service = getMountService();
+            int type = StorageManager.CRYPT_TYPE_PASSWORD;
+            try {
+                type = service.getPasswordType();
+            } catch (Exception e) {
+                Log.e(TAG, "Error while getting type - showing default dialog" + e);
+            }
+
+            if(type == StorageManager.CRYPT_TYPE_PIN) {
+                setContentView(R.layout.crypt_keeper_pin_entry);
+            } else if (type == StorageManager.CRYPT_TYPE_PATTERN) {
+                setContentView(R.layout.crypt_keeper_pattern_entry);
+            } else {
+                setContentView(R.layout.crypt_keeper_password_entry);
+            }
             passwordEntryInit();
         } else if (!mValidationRequested) {
             // We're supposed to be encrypted, but no validation has been done.
@@ -503,14 +524,44 @@
         }
     }
 
-    private void passwordEntryInit() {
+    protected LockPatternView.OnPatternListener mChooseNewLockPatternListener =
+            new LockPatternView.OnPatternListener() {
+
+            @Override
+            public void onPatternStart() {
+            }
+
+            @Override
+            public void onPatternCleared() {
+            }
+
+            @Override
+            public void onPatternDetected(List<LockPatternView.Cell> pattern) {
+                new DecryptTask().execute(LockPatternUtils.patternToString(pattern));
+            }
+
+            @Override
+            public void onPatternCellAdded(List<Cell> pattern) {
+            }
+     };
+
+     private void passwordEntryInit() {
+        // Password/pin case
         mPasswordEntry = (EditText) findViewById(R.id.passwordEntry);
-        mPasswordEntry.setOnEditorActionListener(this);
-        mPasswordEntry.requestFocus();
-        // Become quiet when the user interacts with the Edit text screen.
-        mPasswordEntry.setOnKeyListener(this);
-        mPasswordEntry.setOnTouchListener(this);
-        mPasswordEntry.addTextChangedListener(this);
+        if (mPasswordEntry != null){
+            mPasswordEntry.setOnEditorActionListener(this);
+            mPasswordEntry.requestFocus();
+            // Become quiet when the user interacts with the Edit text screen.
+            mPasswordEntry.setOnKeyListener(this);
+            mPasswordEntry.setOnTouchListener(this);
+            mPasswordEntry.addTextChangedListener(this);
+        }
+
+        // Pattern case
+        mLockPatternView = (LockPatternView) findViewById(R.id.lockPattern);
+        if (mLockPatternView != null) {
+            mLockPatternView.setOnPatternListener(mChooseNewLockPatternListener);
+        }
 
         // Disable the Emergency call button if the device has no voice telephone capability
         final TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
