diff --git a/res/layout/delete_managed_profile_dialog.xml b/res/layout/delete_managed_profile_dialog.xml
index da763c9..0458f1d 100644
--- a/res/layout/delete_managed_profile_dialog.xml
+++ b/res/layout/delete_managed_profile_dialog.xml
@@ -41,15 +41,15 @@
             android:layout_height="@dimen/mdm_app_info_height"
             android:layout_alignParentLeft="true"
             android:layout_centerInParent="true"
-            android:layout_gravity="center_vertical"
+            android:layout_gravity="center_vertical|start"
             android:orientation="horizontal"
             android:paddingBottom="@dimen/mdm_app_info_padding_top_bottom"
             android:paddingTop="@dimen/mdm_app_info_padding_top_bottom" >
 
             <ImageView
                 android:id="@+id/delete_managed_profile_mdm_icon_view"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
+                android:layout_width="@dimen/mdm_app_icon_width_height"
+                android:layout_height="@dimen/mdm_app_icon_width_height"
                 android:scaleType="centerInside"
                 android:gravity="center_vertical" />
 
@@ -58,7 +58,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="match_parent"
                 android:gravity="center_vertical"
-                android:paddingLeft="@dimen/mdm_app_name_padding_left"
+                android:paddingStart="@dimen/mdm_app_name_padding_left"
                 style="@style/TextAppearance.RemoveDialogContent" />
         </LinearLayout>
 
diff --git a/res/layout/single_button_panel.xml b/res/layout/single_button_panel.xml
index 1ff5470..6673b0d 100755
--- a/res/layout/single_button_panel.xml
+++ b/res/layout/single_button_panel.xml
@@ -33,8 +33,7 @@
             android:layout_width="120dip"
             android:layout_weight="0.4"
             android:layout_height="wrap_content"
-            android:layout_gravity="center_vertical"
-            style="@android:style/Widget.Material.Button.Colored" />
+            android:layout_gravity="center_vertical" />
         <Space
             android:layout_width="0dip"
             android:layout_height="wrap_content"
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index a4e3401..9d739c0 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -247,6 +247,7 @@
     <dimen name="mdm_app_info_height">72dp</dimen>
     <dimen name="mdm_app_info_padding_top_bottom">8dp</dimen>
     <dimen name="mdm_app_name_padding_left">16dp</dimen>
+    <dimen name="mdm_app_icon_width_height">56dp</dimen>
 
     <dimen name="shortcut_size">40dp</dimen>
     <dimen name="badge_size">10dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index c726d0e..8c532f5 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1005,7 +1005,7 @@
     <string name="setup_lock_settings_picker_title">Protect your phone</string>
 
     <!-- Title for screen in setup wizard, prompting user to choose the their backup screen lock method [CHAR LIMIT=NONE] -->
-    <string name="setup_lock_settings_picker_fingerprint_message">Fingerprint may be less secure than a strong pattern, PIN or password. Set up a backup lock screen to be secure.</string>
+    <string name="setup_lock_settings_picker_fingerprint_message">Your fingerprint may be less secure than a strong pattern, PIN, or password. For added security, set up a backup screen lock.</string>
 
     <!-- Description text for screen in setup wizard asking user to set up screen lock, explaining to the user how setting up a screen lock protect them from losing data. (tablet) [CHAR LIMIT=NONE] -->
     <string name="setup_lock_settings_picker_message" product="tablet">Prevent others from using this tablet without your permission by activating device protection features. Choose the screen lock you want to use.</string>
diff --git a/src/com/android/settings/ChooseLockSettingsHelper.java b/src/com/android/settings/ChooseLockSettingsHelper.java
index 21d26eb..d3bf747 100644
--- a/src/com/android/settings/ChooseLockSettingsHelper.java
+++ b/src/com/android/settings/ChooseLockSettingsHelper.java
@@ -88,8 +88,8 @@
      * @return true if one exists and we launched an activity to confirm it
      * @see Activity#onActivityResult(int, int, android.content.Intent)
      */
-    boolean launchConfirmationActivity(int request, CharSequence title, boolean returnCredentials,
-            int userId) {
+    public boolean launchConfirmationActivity(int request, CharSequence title,
+            boolean returnCredentials, int userId) {
         return launchConfirmationActivity(request, title, null, null,
                 returnCredentials, false, false, 0, Utils.enforceSameOwner(mActivity, userId));
     }
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 75ad35d..c007891 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -1007,7 +1007,7 @@
             flashLockState = mOemUnlockManager.getFlashLockState();
         }
 
-        return flashLockState == PersistentDataBlockManager.FLASH_LOCK_LOCKED;
+        return flashLockState != PersistentDataBlockManager.FLASH_LOCK_UNLOCKED;
     }
 
     private void updateOemUnlockOptions() {
diff --git a/src/com/android/settings/PreviewPagerAdapter.java b/src/com/android/settings/PreviewPagerAdapter.java
index a2e7b0e..485ac8f 100644
--- a/src/com/android/settings/PreviewPagerAdapter.java
+++ b/src/com/android/settings/PreviewPagerAdapter.java
@@ -49,10 +49,6 @@
                                Configuration[] configurations) {
         mPreviewFrames = new FrameLayout[previewSampleResIds.length];
 
-        // We need to get the copy of the original configuration before we call
-        // createConfigurationContext() as that call changes the current configuration for the App.
-        final Configuration origConfig = context.getResources().getConfiguration();
-
         for (int i = 0; i < previewSampleResIds.length; ++i) {
             mPreviewFrames[i] = new FrameLayout(context);
             mPreviewFrames[i].setLayoutParams(new LinearLayout.LayoutParams(
@@ -76,10 +72,6 @@
                 mPreviewFrames[i].addView(sampleView);
             }
         }
-
-        // Create a context with the original App configuration since the last configuration passed
-        // to createConfigurationContext() becomes the configuration for any new views inflated.
-        context.createConfigurationContext(origConfig);
     }
 
     @Override
diff --git a/src/com/android/settings/accounts/AddAccountSettings.java b/src/com/android/settings/accounts/AddAccountSettings.java
index 3f691e3..1cec53b 100644
--- a/src/com/android/settings/accounts/AddAccountSettings.java
+++ b/src/com/android/settings/accounts/AddAccountSettings.java
@@ -32,6 +32,7 @@
 import android.util.Log;
 import android.widget.Toast;
 
+import com.android.settings.ChooseLockSettingsHelper;
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settingslib.RestrictedLockUtils;
@@ -83,6 +84,7 @@
 
     private static final int CHOOSE_ACCOUNT_REQUEST = 1;
     private static final int ADD_ACCOUNT_REQUEST = 2;
+    private static final int UNLOCK_WORK_PROFILE_REQUEST = 3;
 
     private PendingIntent mPendingIntent;
 
@@ -154,24 +156,27 @@
             finish();
             return;
         }
-        final String[] authorities =
-                getIntent().getStringArrayExtra(AccountPreferenceBase.AUTHORITIES_FILTER_KEY);
-        final String[] accountTypes =
-                getIntent().getStringArrayExtra(AccountPreferenceBase.ACCOUNT_TYPES_FILTER_KEY);
-        final Intent intent = new Intent(this, ChooseAccountActivity.class);
-        if (authorities != null) {
-            intent.putExtra(AccountPreferenceBase.AUTHORITIES_FILTER_KEY, authorities);
+
+        // If the profile is locked, we must ask the user to unlock it first.
+        ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(this);
+        if (!helper.launchConfirmationActivity(UNLOCK_WORK_PROFILE_REQUEST,
+                getString(R.string.unlock_set_unlock_launch_picker_title),
+                false,
+                mUserHandle.getIdentifier())) {
+            requestChooseAccount();
         }
-        if (accountTypes != null) {
-            intent.putExtra(AccountPreferenceBase.ACCOUNT_TYPES_FILTER_KEY, accountTypes);
-        }
-        intent.putExtra(EXTRA_USER, mUserHandle);
-        startActivityForResult(intent, CHOOSE_ACCOUNT_REQUEST);
     }
 
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         switch (requestCode) {
+        case UNLOCK_WORK_PROFILE_REQUEST:
+            if (resultCode == Activity.RESULT_OK) {
+                requestChooseAccount();
+            } else {
+                finish();
+            }
+            break;
         case CHOOSE_ACCOUNT_REQUEST:
             if (resultCode == RESULT_CANCELED) {
                 if (data != null) {
@@ -202,6 +207,22 @@
         if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "saved");
     }
 
+    private void requestChooseAccount() {
+        final String[] authorities =
+                getIntent().getStringArrayExtra(AccountPreferenceBase.AUTHORITIES_FILTER_KEY);
+        final String[] accountTypes =
+                getIntent().getStringArrayExtra(AccountPreferenceBase.ACCOUNT_TYPES_FILTER_KEY);
+        final Intent intent = new Intent(this, ChooseAccountActivity.class);
+        if (authorities != null) {
+            intent.putExtra(AccountPreferenceBase.AUTHORITIES_FILTER_KEY, authorities);
+        }
+        if (accountTypes != null) {
+            intent.putExtra(AccountPreferenceBase.ACCOUNT_TYPES_FILTER_KEY, accountTypes);
+        }
+        intent.putExtra(EXTRA_USER, mUserHandle);
+        startActivityForResult(intent, CHOOSE_ACCOUNT_REQUEST);
+    }
+
     private void addAccount(String accountType) {
         Bundle addAccountOptions = new Bundle();
         /*
diff --git a/src/com/android/settings/dashboard/conditional/ConditionAdapterUtils.java b/src/com/android/settings/dashboard/conditional/ConditionAdapterUtils.java
index a87b0d0..a5d0701 100644
--- a/src/com/android/settings/dashboard/conditional/ConditionAdapterUtils.java
+++ b/src/com/android/settings/dashboard/conditional/ConditionAdapterUtils.java
@@ -106,7 +106,7 @@
 
     private static void animateChange(final View view, final View content,
             final View detailGroup, final boolean visible) {
-        final int beforeBottom = view.getBottom();
+        final int beforeBottom = content.getBottom();
         setHeight(detailGroup, visible ? LayoutParams.WRAP_CONTENT : 0);
         detailGroup.setVisibility(View.VISIBLE);
         view.addOnLayoutChangeListener(new OnLayoutChangeListener() {
@@ -115,7 +115,7 @@
             @Override
             public void onLayoutChange(View v, int left, int top, int right, int bottom,
                     int oldLeft, int oldTop, int oldRight, int oldBottom) {
-                final int afterBottom = v.getBottom();
+                final int afterBottom = content.getBottom();
                 v.removeOnLayoutChangeListener(this);
                 final ObjectAnimator animator = ObjectAnimator.ofInt(content, "bottom",
                         beforeBottom, afterBottom);
diff --git a/src/com/android/settings/users/EditUserPhotoController.java b/src/com/android/settings/users/EditUserPhotoController.java
index 01b553c..97a9937 100644
--- a/src/com/android/settings/users/EditUserPhotoController.java
+++ b/src/com/android/settings/users/EditUserPhotoController.java
@@ -37,6 +37,7 @@
 import android.provider.MediaStore;
 import android.support.v4.content.FileProvider;
 import android.util.Log;
+import android.view.Gravity;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.AdapterView;
@@ -169,6 +170,7 @@
         final int width = Math.max(mImageView.getWidth(), context.getResources()
                 .getDimensionPixelSize(R.dimen.update_user_photo_popup_min_width));
         listPopupWindow.setWidth(width);
+        listPopupWindow.setDropDownGravity(Gravity.START);
 
         listPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {
             @Override
