diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 3367345..e80856d 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1434,7 +1434,21 @@
         <activity android:name=".fingerprint.FingerprintEnrollFindSensor" android:exported="false"/>
         <activity android:name=".fingerprint.FingerprintEnrollEnrolling" android:exported="false"/>
         <activity android:name=".fingerprint.FingerprintEnrollFinish" android:exported="false"/>
-        <activity android:name=".fingerprint.FingerprintEnrollIntroduction" android:exported="false"/>
+        <activity android:name=".fingerprint.FingerprintEnrollIntroduction" android:exported="false" />
+
+        <activity android:name=".fingerprint.SetupFingerprintEnrollOnboard" android:exported="false"/>
+        <activity android:name=".fingerprint.SetupFingerprintEnrollFindSensor" android:exported="false"/>
+        <activity android:name=".fingerprint.SetupFingerprintEnrollEnrolling" android:exported="false"/>
+        <activity android:name=".fingerprint.SetupFingerprintEnrollFinish" android:exported="false"/>
+        <activity android:name=".fingerprint.SetupFingerprintEnrollIntroduction"
+            android:exported="true"
+            android:permission="android.permission.MANAGE_FINGERPRINT"
+            android:theme="@style/SetupWizardDisableAppStartingTheme">
+            <intent-filter>
+                <action android:name="android.settings.FINGERPRINT_SETUP" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
 
         <!-- Note this must not be exported since it returns the password in the intent -->
         <activity android:name="ConfirmLockPattern$InternalActivity"
diff --git a/res/color/fingerprint_indicator_background_activated.xml b/res/color/fingerprint_indicator_background_activated.xml
new file mode 100644
index 0000000..32f5383
--- /dev/null
+++ b/res/color/fingerprint_indicator_background_activated.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2015 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:alpha="0.5" android:color="?android:attr/colorAccent" />
+</selector>
diff --git a/res/layout-land/fingerprint_enroll_enrolling.xml b/res/layout-land/fingerprint_enroll_enrolling.xml
index 4d02c07..8577f5f 100644
--- a/res/layout-land/fingerprint_enroll_enrolling.xml
+++ b/res/layout-land/fingerprint_enroll_enrolling.xml
@@ -20,7 +20,7 @@
     android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    style="@style/SetupWizardFingerprintStyle">
+    style="?attr/fingerprint_layout_theme">
 
     <LinearLayout
         style="@style/SuwContentFrame"
diff --git a/res/layout-land/fingerprint_enroll_find_sensor.xml b/res/layout-land/fingerprint_enroll_find_sensor.xml
index b340193..81d1dac 100644
--- a/res/layout-land/fingerprint_enroll_find_sensor.xml
+++ b/res/layout-land/fingerprint_enroll_find_sensor.xml
@@ -20,7 +20,7 @@
     android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    style="@style/SetupWizardFingerprintStyle">
+    style="?attr/fingerprint_layout_theme">
 
     <LinearLayout
         style="@style/SuwContentFrame"
diff --git a/res/layout-land/fingerprint_enroll_finish.xml b/res/layout-land/fingerprint_enroll_finish.xml
index aeadd5d..d70dc84 100644
--- a/res/layout-land/fingerprint_enroll_finish.xml
+++ b/res/layout-land/fingerprint_enroll_finish.xml
@@ -20,7 +20,7 @@
     android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    style="@style/SetupWizardFingerprintStyle">
+    style="?attr/fingerprint_layout_theme">
 
     <LinearLayout
         style="@style/SuwContentFrame"
diff --git a/res/layout/app_item.xml b/res/layout/app_item.xml
index 29dd461..ea0008e 100644
--- a/res/layout/app_item.xml
+++ b/res/layout/app_item.xml
@@ -21,7 +21,8 @@
     android:paddingTop="16dp"
     android:paddingBottom="16dp"
     android:gravity="top"
-    android:columnCount="3">
+    android:columnCount="3"
+    android:duplicateParentState="true">
 
     <ImageView
         android:id="@android:id/icon"
@@ -30,7 +31,8 @@
         android:layout_gravity="center"
         android:scaleType="fitXY"
         android:layout_marginEnd="16dip"
-        android:contentDescription="@null" />
+        android:contentDescription="@null"
+        android:duplicateParentState="true" />
 
     <TextView
         android:id="@android:id/title"
@@ -41,7 +43,8 @@
         android:ellipsize="marquee"
         android:textAppearance="@android:style/TextAppearance.Material.Subhead"
         android:textColor="?android:attr/textColorPrimary"
-        android:textAlignment="viewStart" />
+        android:textAlignment="viewStart"
+        android:duplicateParentState="true" />
 
     <TextView
         android:id="@android:id/summary"
@@ -54,7 +57,8 @@
         android:singleLine="true"
         android:ellipsize="marquee"
         android:textAppearance="@android:style/TextAppearance.Material.Subhead"
-        android:textColor="?android:attr/textColorSecondary" />
+        android:textColor="?android:attr/textColorSecondary"
+        android:duplicateParentState="true" />
 
     <FrameLayout
         android:id="@android:id/widget_frame"
@@ -63,6 +67,7 @@
         android:layout_toEndOf="@android:id/icon"
         android:layout_below="@android:id/title"
         android:layout_alignParentEnd="true"
-        android:layout_gravity="fill_horizontal|top" />
+        android:layout_gravity="fill_horizontal|top"
+        android:duplicateParentState="true" />
 
 </RelativeLayout>
diff --git a/res/layout/fingerprint_enroll_enrolling_base.xml b/res/layout/fingerprint_enroll_enrolling_base.xml
index 21221cf..23ffa69 100644
--- a/res/layout/fingerprint_enroll_enrolling_base.xml
+++ b/res/layout/fingerprint_enroll_enrolling_base.xml
@@ -20,7 +20,7 @@
     android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    style="@style/SetupWizardFingerprintStyle">
+    style="?attr/fingerprint_layout_theme">
 
     <LinearLayout
         style="@style/SuwContentFrame"
diff --git a/res/layout/fingerprint_enroll_find_sensor_base.xml b/res/layout/fingerprint_enroll_find_sensor_base.xml
index 9f1eb4b..cbb6466 100644
--- a/res/layout/fingerprint_enroll_find_sensor_base.xml
+++ b/res/layout/fingerprint_enroll_find_sensor_base.xml
@@ -20,7 +20,7 @@
     android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    style="@style/SetupWizardFingerprintStyle">
+    style="?attr/fingerprint_layout_theme">
 
     <LinearLayout
         style="@style/SuwContentFrame"
diff --git a/res/layout/fingerprint_enroll_finish_base.xml b/res/layout/fingerprint_enroll_finish_base.xml
index 1c66103..4e641df 100644
--- a/res/layout/fingerprint_enroll_finish_base.xml
+++ b/res/layout/fingerprint_enroll_finish_base.xml
@@ -20,7 +20,7 @@
     android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    style="@style/SetupWizardFingerprintStyle">
+    style="?attr/fingerprint_layout_theme">
 
     <LinearLayout
         style="@style/SuwContentFrame"
diff --git a/res/layout/fingerprint_enroll_introduction.xml b/res/layout/fingerprint_enroll_introduction.xml
index df83bd9..b05abd8 100644
--- a/res/layout/fingerprint_enroll_introduction.xml
+++ b/res/layout/fingerprint_enroll_introduction.xml
@@ -20,7 +20,7 @@
     android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    style="@style/SetupWizardFingerprintStyle">
+    style="?attr/fingerprint_layout_theme">
 
     <LinearLayout
         style="@style/SuwContentFrame"
@@ -58,6 +58,7 @@
             android:layout_weight="1"/>
 
         <LinearLayout
+            android:id="@+id/button_bar"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginEnd="-12dp"
diff --git a/res/layout/fingerprint_enroll_onboard.xml b/res/layout/fingerprint_enroll_onboard.xml
index efe90ae..4189137 100644
--- a/res/layout/fingerprint_enroll_onboard.xml
+++ b/res/layout/fingerprint_enroll_onboard.xml
@@ -19,7 +19,7 @@
     android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    style="@style/SetupWizardFingerprintStyle">
+    style="?attr/fingerprint_layout_theme">
 
     <LinearLayout
         style="@style/SuwContentFrame"
diff --git a/res/layout/fingerprint_rename_dialog.xml b/res/layout/fingerprint_rename_dialog.xml
index 38b6ff2..d19d7a5 100644
--- a/res/layout/fingerprint_rename_dialog.xml
+++ b/res/layout/fingerprint_rename_dialog.xml
@@ -19,18 +19,25 @@
     android:orientation="vertical"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:gravity="center_horizontal">
+    android:gravity="center_horizontal"
+    android:paddingTop="24dp"
+    android:paddingBottom="17dp"
+    android:paddingEnd="20dp"
+    android:paddingStart="20dp">
 
     <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center_vertical|start"
-        android:layout_margin="10dip"
-        android:text="@string/security_settings_fingerprint_enroll_dialog_name_label"/>
+        android:text="@string/security_settings_fingerprint_enroll_dialog_name_label"
+        android:layout_marginBottom="-8dp"
+        android:layout_marginStart="4dp"
+        android:clipChildren="false"
+        android:clipToPadding="false" />
 
     <EditText
         android:id="@+id/fingerprint_rename_field"
-        android:layout_width="160dip"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content" />
 
 </LinearLayout>
diff --git a/res/layout/sim_information.xml b/res/layout/sim_information.xml
deleted file mode 100644
index d2a4acc..0000000
--- a/res/layout/sim_information.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 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.
--->
-
-<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@android:id/tabhost"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <LinearLayout
-        android:id="@+id/tabs_container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="vertical">
-
-        <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:scrollbars="none"
-            android:fillViewport="true">
-
-            <TabWidget
-                android:id="@android:id/tabs"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:orientation="horizontal"
-                style="?android:attr/tabWidgetStyle" />
-
-        </HorizontalScrollView>
-
-        <!-- give an empty content area to make tabhost happy -->
-        <FrameLayout
-            android:id="@android:id/tabcontent"
-            android:layout_width="0dip"
-            android:layout_height="0dip" />
-
-        <ListView
-            android:id="@android:id/list"
-            android:layout_width="match_parent"
-            android:layout_height="0dip"
-            android:layout_weight="1"
-            android:clipChildren="false"
-            android:clipToPadding="false"
-            android:smoothScrollbar="false" />
-
-    </LinearLayout>
-
-</TabHost>
diff --git a/res/layout/widget_text_views.xml b/res/layout/widget_text_views.xml
index ea49fa5..d95599d 100644
--- a/res/layout/widget_text_views.xml
+++ b/res/layout/widget_text_views.xml
@@ -17,7 +17,8 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:orientation="horizontal">
+    android:orientation="horizontal"
+    android:duplicateParentState="true">
 
     <TextView
         android:id="@+id/widget_text1"
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 0395989..f3fea10 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -67,7 +67,6 @@
     <color name="fingerprint_progress_ring">?android:attr/colorAccent</color>
     <color name="fingerprint_progress_ring_bg">#20000000</color>
     <color name="fingerprint_indicator_background_resting">#12000000</color>
-    <color name="fingerprint_indicator_background_activated">#80009688</color>
 
     <color name="running_processes_system_ram">#ff384248</color>
     <color name="running_processes_apps_ram">#ff009587</color>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 02d92ec..5c57f83 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6460,6 +6460,12 @@
    <!-- Title of storage preference to control where app is stored -->
    <string name="storage_used">Storage used</string>
 
+   <!-- Title of button to change storage [CHAR LIMIT=25] -->
+   <string name="change">Change</string>
+
+   <!-- Title of dialog to change storage [CHAR LIMIT=25] -->
+   <string name="change_storage">Change storage</string>
+
    <!-- Label for notification settings for an specific app [CHAR LIMIT=40] -->
    <string name="notifications_label">Notifications</string>
    <!-- App notification summary with notifications enabled [CHAR LIMIT=40] -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 0f820f0..387acf5 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -327,12 +327,18 @@
         <item name="android:textColor">@color/warning</item>
     </style>
 
-    <style name="SetupWizardFingerprintStyle">
+    <style name="FingerprintLayoutTheme">
         <item name="suwBackground">@drawable/fp_enrollment_header</item>
         <item name="suwIllustrationAspectRatio">@dimen/fingerprint_illustration_aspect_ratio</item>
         <item name="suwDecorPaddingTop">@dimen/fingerprint_decor_padding_top</item>
     </style>
 
+    <style name="SetupWizardFingerprintLayoutTheme">
+        <item name="suwBackgroundTile">@drawable/setup_illustration_tile</item>
+        <item name="suwIllustration">@drawable/setup_illustration_lock_screen</item>
+        <item name="suwIllustrationHorizontalTile">@drawable/setup_illustration_horizontal_tile</item>
+    </style>
+
     <style name="TextAppearance.ConfirmDeviceCredentialsErrorText"
         parent="android:TextAppearance.Material.Body1">
         <item name="android:textColor">@color/warning</item>
diff --git a/res/values/themes.xml b/res/values/themes.xml
index e6621a8..e6229e0 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -15,6 +15,7 @@
 -->
 
 <resources>
+    <attr name="fingerprint_layout_theme" format="reference" />
     <attr name="ic_menu_add" format="reference" />
     <attr name="ic_menu_moreoverflow" format="reference" />
     <attr name="ic_wps" format="reference" />
@@ -36,6 +37,7 @@
         <item name="android:listPreferredItemPaddingStart">@dimen/suw_layout_margin_sides</item>
         <item name="android:windowBackground">?android:attr/colorBackground</item>
         <item name="@*android:preferencePanelStyle">@*android:style/PreferencePanel.Dialog</item>
+        <item name="fingerprint_layout_theme">@style/SetupWizardFingerprintLayoutTheme</item>
         <item name="ic_menu_add">@drawable/ic_menu_add_dark</item>
         <item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_material</item>
         <item name="ic_wps">@drawable/ic_wps_dark</item>
@@ -58,6 +60,7 @@
         <item name="android:listPreferredItemPaddingStart">@dimen/suw_layout_margin_sides</item>
         <item name="android:windowBackground">?android:attr/colorBackground</item>
         <item name="@*android:preferencePanelStyle">@*android:style/PreferencePanel.Dialog</item>
+        <item name="fingerprint_layout_theme">@style/SetupWizardFingerprintLayoutTheme</item>
         <item name="ic_menu_add">@drawable/ic_menu_add_light</item>
         <item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_material</item>
         <item name="ic_wps">@drawable/ic_wps_light</item>
@@ -90,6 +93,7 @@
 
         <item name="apnPreferenceStyle">@style/ApnPreference</item>
 
+        <item name="fingerprint_layout_theme">@style/FingerprintLayoutTheme</item>
         <item name="ic_menu_add">@drawable/ic_menu_add_dark</item>
         <item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_holo_dark</item>
         <item name="ic_wps">@drawable/ic_wps_light</item>
diff --git a/res/xml/app_storage_settings.xml b/res/xml/app_storage_settings.xml
index 7c5c25c..093d781 100644
--- a/res/xml/app_storage_settings.xml
+++ b/res/xml/app_storage_settings.xml
@@ -17,11 +17,19 @@
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
                   android:title="@string/application_info_label">
 
-    <com.android.settings.DropDownPreference
-        android:key="app_location_setting"
+    <com.android.settings.applications.SpacePreference
+        android:layout_height="8dp" />
+
+    <Preference
+        android:key="storage_used"
         android:title="@string/storage_used"
         android:summary="@string/storage_type_internal"
-        android:selectable="true" />
+        android:selectable="false"
+        android:layout="@layout/horizontal_preference" />
+
+    <com.android.settings.applications.LayoutPreference
+        android:key="change_storage_button"
+        android:layout="@layout/single_button_panel" />
 
     <PreferenceCategory
         android:key="storage_category"
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index b41d70f..bf091f6 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -355,9 +355,6 @@
         final List<Fingerprint> items = fpm.getEnrolledFingerprints();
         final int fingerprintCount = items != null ? items.size() : 0;
         final String clazz;
-        boolean hasPassword = mChooseLockSettingsHelper.utils().getActivePasswordQuality(
-                MY_USER_ID)
-                != DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
         if (fingerprintCount > 0) {
             fingerprintPreference.setSummary(getResources().getQuantityString(
                     R.plurals.security_settings_fingerprint_preference_summary,
@@ -365,7 +362,6 @@
             clazz = FingerprintSettings.class.getName();
         } else {
             clazz = FingerprintEnrollIntroduction.class.getName();
-            intent.putExtra(FingerprintEnrollIntroduction.EXTRA_HAS_PASSWORD, hasPassword);
         }
         intent.setClassName("com.android.settings", clazz);
         fingerprintPreference.setIntent(intent);
diff --git a/src/com/android/settings/SetupChooseLockGeneric.java b/src/com/android/settings/SetupChooseLockGeneric.java
index 8b09a10..5a6ac7f 100644
--- a/src/com/android/settings/SetupChooseLockGeneric.java
+++ b/src/com/android/settings/SetupChooseLockGeneric.java
@@ -28,11 +28,9 @@
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.preference.PreferenceFragment;
-import android.hardware.fingerprint.FingerprintManager;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ListView;
 
 /**
  * Setup Wizard's version of ChooseLockGeneric screen. It inherits the logic and basic structure
@@ -70,14 +68,6 @@
             final SetupWizardListLayout layout = (SetupWizardListLayout) inflater.inflate(
                     R.layout.setup_choose_lock_generic, container, false);
             layout.setHeaderText(getActivity().getTitle());
-            ListView list = layout.getListView();
-            final FingerprintManager fpm = (FingerprintManager)
-                    getActivity().getSystemService(Context.FINGERPRINT_SERVICE);
-            if (fpm != null && fpm.isHardwareDetected()) {
-                final View footer = inflater.inflate(
-                        R.layout.setup_screen_lock_fingerprint_details, list, false);
-                list.addFooterView(footer, null, false);
-            }
 
             final NavigationBar navigationBar = layout.getNavigationBar();
             navigationBar.getNextButton().setEnabled(false);
diff --git a/src/com/android/settings/applications/AppStorageSettings.java b/src/com/android/settings/applications/AppStorageSettings.java
index 739aa3c..38440cb 100644
--- a/src/com/android/settings/applications/AppStorageSettings.java
+++ b/src/com/android/settings/applications/AppStorageSettings.java
@@ -38,7 +38,6 @@
 import android.widget.Button;
 
 import com.android.internal.logging.MetricsLogger;
-import com.android.settings.DropDownPreference;
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.deviceinfo.StorageWizardMoveConfirm;
@@ -51,7 +50,7 @@
 import java.util.Objects;
 
 public class AppStorageSettings extends AppInfoWithHeader
-        implements OnClickListener, Callbacks, DropDownPreference.Callback {
+        implements OnClickListener, Callbacks, DialogInterface.OnClickListener {
     private static final String TAG = AppStorageSettings.class.getSimpleName();
 
     //internal constants used in Handler
@@ -70,7 +69,8 @@
     private static final int DLG_CLEAR_DATA = DLG_BASE + 1;
     private static final int DLG_CANNOT_CLEAR_DATA = DLG_BASE + 2;
 
-    private static final String KEY_MOVE_PREFERENCE = "app_location_setting";
+    private static final String KEY_STORAGE_USED = "storage_used";
+    private static final String KEY_CHANGE_STORAGE = "change_storage_button";
     private static final String KEY_STORAGE_CATEGORY = "storage_category";
 
     private static final String KEY_TOTAL_SIZE = "total_size";
@@ -94,7 +94,8 @@
     private Button mClearDataButton;
     private Button mClearCacheButton;
 
-    private DropDownPreference mMoveDropDown;
+    private Preference mStorageUsed;
+    private Button mChangeStorageButton;
 
     private boolean mCanClearData = true;
     private boolean mHaveSizes = false;
@@ -113,6 +114,9 @@
     private CharSequence mInvalidSizeStr;
     private CharSequence mComputingStr;
 
+    private VolumeInfo[] mCandidates;
+    private AlertDialog.Builder mDialogBuilder;
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -146,8 +150,11 @@
         mClearDataButton = (Button) ((LayoutPreference) findPreference(KEY_CLEAR_DATA))
                 .findViewById(R.id.button);
 
-        mMoveDropDown = (DropDownPreference) findPreference(KEY_MOVE_PREFERENCE);
-        mMoveDropDown.setCallback(this);
+        mStorageUsed = findPreference(KEY_STORAGE_USED);
+        mChangeStorageButton = (Button) ((LayoutPreference) findPreference(KEY_CHANGE_STORAGE))
+                .findViewById(R.id.button);
+        mChangeStorageButton.setText(R.string.change);
+        mChangeStorageButton.setOnClickListener(this);
 
         // Cache section
         mCacheSize = findPreference(KEY_CACHE_SIZE);
@@ -164,7 +171,7 @@
                 mClearCacheObserver = new ClearCacheObserver();
             }
             mPm.deleteApplicationCacheFiles(mPackageName, mClearCacheObserver);
-        } else if(v == mClearDataButton) {
+        } else if (v == mClearDataButton) {
             if (mAppEntry.info.manageSpaceActivityName != null) {
                 if (!Utils.isMonkeyRunning()) {
                     Intent intent = new Intent(Intent.ACTION_DEFAULT);
@@ -175,15 +182,17 @@
             } else {
                 showDialogInner(DLG_CLEAR_DATA, 0);
             }
+        } else if (v == mChangeStorageButton) {
+            mDialogBuilder.show();
         }
     }
 
     @Override
-    public boolean onItemSelected(int pos, Object value) {
+    public void onClick(DialogInterface dialog, int which) {
         final Context context = getActivity();
 
         // If not current volume, kick off move wizard
-        final VolumeInfo targetVol = (VolumeInfo) value;
+        final VolumeInfo targetVol = mCandidates[which];
         final VolumeInfo currentVol = context.getPackageManager().getPackageCurrentVolume(
                 mAppEntry.info);
         if (!Objects.equals(targetVol, currentVol)) {
@@ -192,8 +201,7 @@
             intent.putExtra(Intent.EXTRA_PACKAGE_NAME, mAppEntry.info.packageName);
             startActivity(intent);
         }
-
-        return true;
+        dialog.dismiss();
     }
 
     private String getSizeStr(long size) {
@@ -273,18 +281,20 @@
     @Override
     protected boolean refreshUi() {
         retrieveAppEntry();
-        refreshButtons();
         refreshSizeInfo();
 
         final VolumeInfo currentVol = getActivity().getPackageManager()
                 .getPackageCurrentVolume(mAppEntry.info);
-        mMoveDropDown.setSelectedValue(currentVol);
+        final StorageManager storage = getContext().getSystemService(StorageManager.class);
+        mStorageUsed.setSummary(storage.getBestVolumeDescription(currentVol));
+
+        refreshButtons();
 
         return true;
     }
 
     private void refreshButtons() {
-        initMoveDropDown();
+        initMoveDialog();
         initDataButtons();
     }
 
@@ -314,7 +324,7 @@
         }
     }
 
-    private void initMoveDropDown() {
+    private void initMoveDialog() {
         final Context context = getActivity();
         final StorageManager storage = context.getSystemService(StorageManager.class);
 
@@ -323,14 +333,23 @@
         if (candidates.size() > 1) {
             Collections.sort(candidates, VolumeInfo.getDescriptionComparator());
 
-            mMoveDropDown.clearItems();
-            for (VolumeInfo vol : candidates) {
-                final String volDescrip = storage.getBestVolumeDescription(vol);
-                mMoveDropDown.addItem(volDescrip, vol);
+            CharSequence[] labels = new CharSequence[candidates.size()];
+            int current = -1;
+            for (int i = 0; i < candidates.size(); i++) {
+                final String volDescrip = storage.getBestVolumeDescription(candidates.get(i));
+                if (Objects.equals(volDescrip, mStorageUsed.getSummary())) {
+                    current = i;
+                }
+                labels[i] = volDescrip;
             }
-            mMoveDropDown.setSelectable(!mAppControlRestricted);
+            mCandidates = candidates.toArray(new VolumeInfo[candidates.size()]);
+            mDialogBuilder = new AlertDialog.Builder(getContext())
+                    .setTitle(R.string.change_storage)
+                    .setSingleChoiceItems(labels, current, this)
+                    .setNegativeButton(R.string.cancel, null);
         } else {
-            removePreference(KEY_MOVE_PREFERENCE);
+            removePreference(KEY_STORAGE_USED);
+            removePreference(KEY_CHANGE_STORAGE);
         }
     }
 
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index 7b49dd3..e4b404f 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -66,6 +66,7 @@
 import com.android.settings.applications.AppStateAppOpsBridge.PermissionState;
 import com.android.settings.applications.AppStateUsageBridge.UsageState;
 import com.android.settings.fuelgauge.HighPowerDetail;
+import com.android.settings.fuelgauge.PowerWhitelistBackend;
 import com.android.settings.notification.AppNotificationSettings;
 import com.android.settings.notification.NotificationBackend;
 import com.android.settings.notification.NotificationBackend.AppRow;
@@ -1011,6 +1012,15 @@
             return false;
         }
 
+        @Override
+        public boolean isEnabled(int position) {
+            if (mManageApplications.mListType != LIST_TYPE_HIGH_POWER) {
+                return true;
+            }
+            ApplicationsState.AppEntry entry = mEntries.get(position);
+            return !PowerWhitelistBackend.getInstance().isSysWhitelisted(entry.info.packageName);
+        }
+
         public View getView(int position, View convertView, ViewGroup parent) {
             // A ViewHolder keeps references to children views to avoid unnecessary calls
             // to findViewById() on each row.
@@ -1042,6 +1052,7 @@
             }
             mActive.remove(convertView);
             mActive.add(convertView);
+            convertView.setEnabled(isEnabled(position));
             return convertView;
         }
 
diff --git a/src/com/android/settings/deviceinfo/SimStatus.java b/src/com/android/settings/deviceinfo/SimStatus.java
index e25aed6..83043c7 100644
--- a/src/com/android/settings/deviceinfo/SimStatus.java
+++ b/src/com/android/settings/deviceinfo/SimStatus.java
@@ -150,7 +150,7 @@
             mSir = mSelectableSubInfos.size() > 0 ? mSelectableSubInfos.get(0) : null;
 
             if (mSelectableSubInfos.size() > 1) {
-                setContentView(R.layout.sim_information);
+                setContentView(com.android.internal.R.layout.common_tab_settings);
 
                 mTabHost = (TabHost) findViewById(android.R.id.tabhost);
                 mTabWidget = (TabWidget) findViewById(android.R.id.tabs);
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollBase.java b/src/com/android/settings/fingerprint/FingerprintEnrollBase.java
index 6e6fe4b..233f774 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollBase.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollBase.java
@@ -20,7 +20,6 @@
 import android.app.Activity;
 import android.content.Intent;
 import android.graphics.Color;
-import android.hardware.fingerprint.FingerprintManager;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.view.View;
@@ -72,6 +71,10 @@
     @Override
     protected void onPostCreate(@Nullable Bundle savedInstanceState) {
         super.onPostCreate(savedInstanceState);
+        initViews();
+    }
+
+    protected void initViews() {
         getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS |
                 WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
                 WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR);
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
index 81d6042..b8ac040 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
@@ -213,14 +213,17 @@
     }
 
     private void launchFinish(byte[] token) {
-        Intent intent = new Intent();
-        intent.setClassName("com.android.settings", FingerprintEnrollFinish.class.getName());
+        Intent intent = getFinishIntent();
         intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
         startActivity(intent);
         setResult(RESULT_FINISHED);
         finish();
     }
 
+    protected Intent getFinishIntent() {
+        return new Intent(this, FingerprintEnrollFinish.class);
+    }
+
     private void updateDescription() {
         if (mSidecar.getEnrollmentSteps() == -1) {
             setHeaderText(R.string.security_settings_fingerprint_enroll_start_title);
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java b/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java
index d45f3c2..7e4d656 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java
@@ -61,8 +61,8 @@
     @Override
     public void onClick(View v) {
         if (v.getId() == R.id.add_another_button) {
-            finish();
             startActivity(getEnrollingIntent());
+            finish();
         }
         super.onClick(v);
     }
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollIntroduction.java b/src/com/android/settings/fingerprint/FingerprintEnrollIntroduction.java
index a488358..de5bf24 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollIntroduction.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollIntroduction.java
@@ -16,10 +16,13 @@
 
 package com.android.settings.fingerprint;
 
+import android.app.admin.DevicePolicyManager;
 import android.content.Intent;
 import android.os.Bundle;
+import android.os.UserHandle;
 import android.view.View;
 
+import com.android.settings.ChooseLockSettingsHelper;
 import com.android.settings.HelpUtils;
 import com.android.settings.R;
 
@@ -28,7 +31,6 @@
  */
 public class FingerprintEnrollIntroduction extends FingerprintEnrollBase {
 
-    public static final String EXTRA_HAS_PASSWORD = "fp_existing_password";
     private boolean mHasPassword;
 
     @Override
@@ -38,27 +40,36 @@
         setHeaderText(R.string.security_settings_fingerprint_enroll_introduction_title);
         findViewById(R.id.cancel_button).setOnClickListener(this);
         findViewById(R.id.learn_more_button).setOnClickListener(this);
-        mHasPassword = getIntent().getBooleanExtra(EXTRA_HAS_PASSWORD, false);
+        final int passwordQuality = new ChooseLockSettingsHelper(this).utils()
+                .getActivePasswordQuality(UserHandle.myUserId());
+        mHasPassword = passwordQuality != DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
     }
 
     @Override
     protected void onNextButtonClick() {
-        Intent intent = new Intent();
-        final String clazz;
+        Intent intent;
         if (!mHasPassword) {
             // No fingerprints registered, launch into enrollment wizard.
-            clazz = FingerprintEnrollOnboard.class.getName();
+            intent = getOnboardIntent();
         } else {
             // Lock thingy is already set up, launch directly into find sensor step from wizard.
-            clazz = FingerprintEnrollFindSensor.class.getName();
+            intent = getFindSensorIntent();
         }
-        intent.setClassName("com.android.settings", clazz);
         startActivityForResult(intent, 0);
     }
 
+    protected Intent getOnboardIntent() {
+        return new Intent(this, FingerprintEnrollOnboard.class);
+    }
+
+    protected Intent getFindSensorIntent() {
+        return new Intent(this, FingerprintEnrollFindSensor.class);
+    }
+
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (resultCode == RESULT_FINISHED) {
+            setResult(RESULT_OK);
             finish();
         } else {
             super.onActivityResult(requestCode, resultCode, data);
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollOnboard.java b/src/com/android/settings/fingerprint/FingerprintEnrollOnboard.java
index b78636a..db1a20b 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollOnboard.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollOnboard.java
@@ -57,9 +57,8 @@
     }
 
     private void launchChooseLock() {
-        Intent intent = new Intent();
+        Intent intent = getChooseLockIntent();
         long challenge = getSystemService(FingerprintManager.class).preEnroll();
-        intent.setClassName("com.android.settings", ChooseLockGeneric.class.getName());
         intent.putExtra(ChooseLockGeneric.ChooseLockGenericFragment.MINIMUM_QUALITY_KEY,
                 DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
         intent.putExtra(ChooseLockGeneric.ChooseLockGenericFragment.HIDE_DISABLED_PREFS, true);
@@ -68,11 +67,18 @@
         startActivityForResult(intent, CHOOSE_LOCK_GENERIC_REQUEST);
     }
 
+    protected Intent getChooseLockIntent() {
+        return new Intent(this, ChooseLockGeneric.class);
+    }
+
     private void launchFindSensor(byte[] token) {
-        Intent intent = new Intent();
-        intent.setClassName("com.android.settings", FingerprintEnrollFindSensor.class.getName());
+        Intent intent = getFindSensorIntent();
         intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
         startActivity(intent);
         finish();
     }
+
+    protected Intent getFindSensorIntent() {
+        return new Intent(this, FingerprintEnrollFindSensor.class);
+    }
 }
diff --git a/src/com/android/settings/fingerprint/SetupFingerprintEnrollEnrolling.java b/src/com/android/settings/fingerprint/SetupFingerprintEnrollEnrolling.java
new file mode 100644
index 0000000..37c13e8
--- /dev/null
+++ b/src/com/android/settings/fingerprint/SetupFingerprintEnrollEnrolling.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2015 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
+ */
+
+package com.android.settings.fingerprint;
+
+import android.content.Intent;
+import android.content.res.Resources;
+import android.view.View;
+import android.widget.Button;
+
+import com.android.settings.R;
+import com.android.settings.SetupWizardUtils;
+import com.android.setupwizardlib.view.NavigationBar;
+
+public class SetupFingerprintEnrollEnrolling extends FingerprintEnrollEnrolling
+        implements NavigationBar.NavigationBarListener {
+
+    @Override
+    protected Intent getFinishIntent() {
+        final Intent intent = new Intent(this, SetupFingerprintEnrollFinish.class);
+        SetupWizardUtils.copySetupExtras(getIntent(), intent);
+        return intent;
+    }
+
+    @Override
+    protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {
+        resid = SetupWizardUtils.getTheme(getIntent());
+        super.onApplyThemeResource(theme, resid, first);
+    }
+
+    @Override
+    protected void initViews() {
+        SetupWizardUtils.setImmersiveMode(this);
+
+        final View buttonBar = findViewById(R.id.button_bar);
+        if (buttonBar != null) {
+            buttonBar.setVisibility(View.GONE);
+        }
+
+        final NavigationBar navigationBar = getNavigationBar();
+        navigationBar.setNavigationBarListener(this);
+        // Enrolling screen auto-advances once the fingerprint is added
+        navigationBar.getNextButton().setEnabled(false);
+    }
+
+    @Override
+    protected Button getNextButton() {
+        return getNavigationBar().getNextButton();
+    }
+
+    @Override
+    public void onNavigateBack() {
+        onBackPressed();
+    }
+
+    @Override
+    public void onNavigateNext() {
+        onNextButtonClick();
+    }
+}
diff --git a/src/com/android/settings/fingerprint/SetupFingerprintEnrollFindSensor.java b/src/com/android/settings/fingerprint/SetupFingerprintEnrollFindSensor.java
new file mode 100644
index 0000000..17c0671
--- /dev/null
+++ b/src/com/android/settings/fingerprint/SetupFingerprintEnrollFindSensor.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2015 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
+ */
+
+package com.android.settings.fingerprint;
+
+import android.content.Intent;
+import android.content.res.Resources;
+import android.view.View;
+import android.widget.Button;
+
+import com.android.settings.ChooseLockSettingsHelper;
+import com.android.settings.R;
+import com.android.settings.SetupWizardUtils;
+import com.android.setupwizardlib.view.NavigationBar;
+
+public class SetupFingerprintEnrollFindSensor extends FingerprintEnrollFindSensor
+        implements NavigationBar.NavigationBarListener {
+
+    @Override
+    protected Intent getEnrollingIntent() {
+        Intent intent = new Intent(this, SetupFingerprintEnrollEnrolling.class);
+        intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken);
+        SetupWizardUtils.copySetupExtras(getIntent(), intent);
+        return intent;
+    }
+
+    @Override
+    protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {
+        resid = SetupWizardUtils.getTheme(getIntent());
+        super.onApplyThemeResource(theme, resid, first);
+    }
+
+    @Override
+    protected void initViews() {
+        SetupWizardUtils.setImmersiveMode(this);
+
+        final View nextButton = findViewById(R.id.next_button);
+        if (nextButton != null) {
+            nextButton.setVisibility(View.GONE);
+        }
+
+        getNavigationBar().setNavigationBarListener(this);
+        getNavigationBar().getBackButton().setVisibility(View.GONE);
+    }
+
+    @Override
+    protected Button getNextButton() {
+        return getNavigationBar().getNextButton();
+    }
+
+    @Override
+    public void onNavigateBack() {
+        onBackPressed();
+    }
+
+    @Override
+    public void onNavigateNext() {
+        onNextButtonClick();
+    }
+}
diff --git a/src/com/android/settings/fingerprint/SetupFingerprintEnrollFinish.java b/src/com/android/settings/fingerprint/SetupFingerprintEnrollFinish.java
new file mode 100644
index 0000000..10dfe13
--- /dev/null
+++ b/src/com/android/settings/fingerprint/SetupFingerprintEnrollFinish.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2015 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
+ */
+
+package com.android.settings.fingerprint;
+
+import android.content.Intent;
+import android.content.res.Resources;
+import android.view.View;
+import android.widget.Button;
+
+import com.android.settings.ChooseLockSettingsHelper;
+import com.android.settings.R;
+import com.android.settings.SetupWizardUtils;
+import com.android.setupwizardlib.view.NavigationBar;
+
+public class SetupFingerprintEnrollFinish extends FingerprintEnrollFinish
+        implements NavigationBar.NavigationBarListener {
+
+    @Override
+    protected Intent getEnrollingIntent() {
+        Intent intent = new Intent(this, SetupFingerprintEnrollEnrolling.class);
+        intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken);
+        SetupWizardUtils.copySetupExtras(getIntent(), intent);
+        return intent;
+    }
+
+    @Override
+    protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {
+        resid = SetupWizardUtils.getTheme(getIntent());
+        super.onApplyThemeResource(theme, resid, first);
+    }
+
+    @Override
+    protected void initViews() {
+        SetupWizardUtils.setImmersiveMode(this);
+
+        final View nextButton = findViewById(R.id.next_button);
+        if (nextButton != null) {
+            nextButton.setVisibility(View.GONE);
+        }
+
+        final NavigationBar navigationBar = getNavigationBar();
+        navigationBar.setNavigationBarListener(this);
+        navigationBar.getBackButton().setVisibility(View.GONE);
+    }
+
+    @Override
+    protected Button getNextButton() {
+        return getNavigationBar().getNextButton();
+    }
+
+    @Override
+    public void onNavigateBack() {
+        onBackPressed();
+    }
+
+    @Override
+    public void onNavigateNext() {
+        onNextButtonClick();
+    }
+}
diff --git a/src/com/android/settings/fingerprint/SetupFingerprintEnrollIntroduction.java b/src/com/android/settings/fingerprint/SetupFingerprintEnrollIntroduction.java
new file mode 100644
index 0000000..416d53f
--- /dev/null
+++ b/src/com/android/settings/fingerprint/SetupFingerprintEnrollIntroduction.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2015 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
+ */
+
+package com.android.settings.fingerprint;
+
+import android.content.Intent;
+import android.content.res.Resources;
+import android.view.View;
+import android.widget.Button;
+
+import com.android.settings.R;
+import com.android.settings.SetupWizardUtils;
+import com.android.setupwizardlib.view.NavigationBar;
+
+public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntroduction
+        implements NavigationBar.NavigationBarListener {
+
+    @Override
+    protected Intent getOnboardIntent() {
+        final Intent intent = new Intent(this, SetupFingerprintEnrollOnboard.class);
+        SetupWizardUtils.copySetupExtras(getIntent(), intent);
+        return intent;
+    }
+
+    @Override
+    protected Intent getFindSensorIntent() {
+        final Intent intent = new Intent(this, SetupFingerprintEnrollFindSensor.class);
+        SetupWizardUtils.copySetupExtras(getIntent(), intent);
+        return intent;
+    }
+
+    @Override
+    protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {
+        resid = SetupWizardUtils.getTheme(getIntent());
+        super.onApplyThemeResource(theme, resid, first);
+    }
+
+    @Override
+    protected void initViews() {
+        SetupWizardUtils.setImmersiveMode(this);
+
+        final View buttonBar = findViewById(R.id.button_bar);
+        if (buttonBar != null) {
+            buttonBar.setVisibility(View.GONE);
+        }
+
+        getNavigationBar().setNavigationBarListener(this);
+    }
+
+    @Override
+    protected Button getNextButton() {
+        return getNavigationBar().getNextButton();
+    }
+
+    @Override
+    public void onNavigateBack() {
+        onBackPressed();
+    }
+
+    @Override
+    public void onNavigateNext() {
+        onNextButtonClick();
+    }
+}
diff --git a/src/com/android/settings/fingerprint/SetupFingerprintEnrollOnboard.java b/src/com/android/settings/fingerprint/SetupFingerprintEnrollOnboard.java
new file mode 100644
index 0000000..bee0cde
--- /dev/null
+++ b/src/com/android/settings/fingerprint/SetupFingerprintEnrollOnboard.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2015 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
+ */
+
+package com.android.settings.fingerprint;
+
+import android.content.Intent;
+import android.content.res.Resources;
+import android.view.View;
+import android.widget.Button;
+
+import com.android.settings.R;
+import com.android.settings.SetupChooseLockGeneric;
+import com.android.settings.SetupWizardUtils;
+import com.android.setupwizardlib.view.NavigationBar;
+
+public class SetupFingerprintEnrollOnboard extends FingerprintEnrollOnboard
+        implements NavigationBar.NavigationBarListener {
+
+    @Override
+    protected Intent getChooseLockIntent() {
+        Intent intent = new Intent(this, SetupChooseLockGeneric.class);
+        SetupWizardUtils.copySetupExtras(getIntent(), intent);
+        return intent;
+    }
+
+    @Override
+    protected Intent getFindSensorIntent() {
+        final Intent intent = new Intent(this, SetupFingerprintEnrollFindSensor.class);
+        SetupWizardUtils.copySetupExtras(getIntent(), intent);
+        return intent;
+    }
+
+    @Override
+    protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {
+        resid = SetupWizardUtils.getTheme(getIntent());
+        super.onApplyThemeResource(theme, resid, first);
+    }
+
+    @Override
+    protected void initViews() {
+        SetupWizardUtils.setImmersiveMode(this);
+
+        final View nextButton = findViewById(R.id.next_button);
+        if (nextButton != null) {
+            nextButton.setVisibility(View.GONE);
+        }
+
+        getNavigationBar().setNavigationBarListener(this);
+    }
+
+    @Override
+    protected Button getNextButton() {
+        return getNavigationBar().getNextButton();
+    }
+
+    @Override
+    public void onNavigateBack() {
+        onBackPressed();
+    }
+
+    @Override
+    public void onNavigateNext() {
+        onNextButtonClick();
+    }
+}
