diff --git a/res/values/strings.xml b/res/values/strings.xml
index 021e502..0e516f0 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2139,7 +2139,11 @@
     <!-- Night display screen, setting option name to enable night display (renamed "Night Light" with title caps). [CHAR LIMIT=30] -->
     <string name="night_display_title">Night Light</string>
     <!-- Night display screen, description of night display feature (renamed "Night Light" with title caps). [CHAR LIMIT=NONE] -->
-    <string name="night_display_text">Night Light tints your screen red at night. This makes it easier to look at your screen or read in dim light, and may help you fall asleep more easily.</string>
+    <string name="night_display_text">Night Light tints your screen red. This makes it easier to look at your screen or read in dim light, and may help you fall asleep more easily.</string>
+    <!-- Night display screen, category title for settings to schedule when night display activates automatically. [CHAR LIMIT=30] -->
+    <string name="night_display_category_schedule">Schedule</string>
+    <!-- Night display screen, category title for settings to manually activate night display. [CHAR LIMIT=30] -->
+    <string name="night_display_category_status">Status</string>
     <!-- Night display screen, setting option name to configure whether night display turn on/off automatically. [CHAR LIMIT=30] -->
     <string name="night_display_auto_mode_title">Turn on automatically</string>
     <!-- Night display screen, setting option value for night display to *never* turn on/off automatically. [CHAR LIMIT=30] -->
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index a89d687..6f55982 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -36,6 +36,7 @@
                 android:key="night_display"
                 android:title="@string/night_display_title"
                 android:fragment="com.android.settings.display.NightDisplaySettings"
+                android:widgetLayout="@null"
                 settings:keywords="@string/keywords_display_night_display" />
 
         <!-- Hide night mode for now
diff --git a/res/xml/night_display_settings.xml b/res/xml/night_display_settings.xml
index 531f606..76b9323 100644
--- a/res/xml/night_display_settings.xml
+++ b/res/xml/night_display_settings.xml
@@ -19,19 +19,32 @@
         xmlns:settings="http://schemas.android.com/apk/res-auto"
         android:title="@string/night_display_title">
 
-    <DropDownPreference
-            android:key="night_display_auto_mode"
-            android:title="@string/night_display_auto_mode_title"
-            android:persistent="false"
-            android:summary="%s" />
+    <PreferenceCategory
+            android:title="@string/night_display_category_schedule">
 
-    <Preference
-            android:key="night_display_start_time"
-            android:title="@string/night_display_start_time_title" />
+        <DropDownPreference
+                android:key="night_display_auto_mode"
+                android:title="@string/night_display_auto_mode_title"
+                android:summary="%s" />
 
-    <Preference
-            android:key="night_display_end_time"
-            android:title="@string/night_display_end_time_title" />
+        <Preference
+                android:key="night_display_start_time"
+                android:title="@string/night_display_start_time_title" />
+
+        <Preference
+                android:key="night_display_end_time"
+                android:title="@string/night_display_end_time_title" />
+
+    </PreferenceCategory>
+
+    <PreferenceCategory
+            android:title="@string/night_display_category_status">
+
+        <com.android.settings.display.NightDisplayPreference
+                android:key="night_display_activated"
+                android:title="@string/night_display_title" />
+
+    </PreferenceCategory>
 
     <com.android.settings.fuelgauge.WallOfTextPreference
             android:summary="@string/night_display_text"
diff --git a/src/com/android/settings/datausage/AppDataUsage.java b/src/com/android/settings/datausage/AppDataUsage.java
index 0143fa8..45fdc1d 100644
--- a/src/com/android/settings/datausage/AppDataUsage.java
+++ b/src/com/android/settings/datausage/AppDataUsage.java
@@ -38,6 +38,7 @@
 import android.support.v7.preference.PreferenceCategory;
 import android.text.format.Formatter;
 import android.util.ArraySet;
+import android.util.Log;
 import android.view.View;
 import android.widget.AdapterView;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
@@ -50,11 +51,19 @@
 import com.android.settingslib.net.ChartDataLoader;
 import com.android.settingslib.net.UidDetailProvider;
 
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
 import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND;
 
 public class AppDataUsage extends DataUsageBase implements Preference.OnPreferenceChangeListener,
         DataSaverBackend.Listener {
 
+    private static final String TAG = "AppDataUsage";
+
     public static final String ARG_APP_ITEM = "app_item";
     public static final String ARG_NETWORK_TEMPLATE = "network_template";
 
@@ -94,6 +103,12 @@
     private SwitchPreference mUnrestrictedData;
     private DataSaverBackend mDataSaverBackend;
 
+    // Parameters to construct an efficient ThreadPoolExecutor
+    private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
+    private static final int CORE_POOL_SIZE = Math.max(2, Math.min(CPU_COUNT - 1, 4));
+    private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
+    private static final int KEEP_ALIVE_SECONDS = 30;
+
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -180,9 +195,13 @@
 
             if (mPackages.size() > 1) {
                 mAppList = (PreferenceCategory) findPreference(KEY_APP_LIST);
-                for (int i = 1 ; i < mPackages.size(); i++) {
-                    new AppPrefLoader().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
-                            mPackages.valueAt(i));
+                final int packageSize = mPackages.size();
+                final BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(packageSize);
+                final ThreadPoolExecutor executor = new ThreadPoolExecutor(CORE_POOL_SIZE,
+                        MAXIMUM_POOL_SIZE, KEEP_ALIVE_SECONDS, TimeUnit.SECONDS, workQueue);
+                for (int i = 1; i < mPackages.size(); i++) {
+                    final AppPrefLoader loader = new AppPrefLoader();
+                        loader.executeOnExecutor(executor, mPackages.valueAt(i));
                 }
             } else {
                 removePreference(KEY_APP_LIST);
diff --git a/src/com/android/settings/display/NightDisplayPreference.java b/src/com/android/settings/display/NightDisplayPreference.java
index 73ecf49..38b57a2 100644
--- a/src/com/android/settings/display/NightDisplayPreference.java
+++ b/src/com/android/settings/display/NightDisplayPreference.java
@@ -15,7 +15,7 @@
 package com.android.settings.display;
 
 import android.content.Context;
-import android.support.v7.preference.Preference;
+import android.support.v14.preference.SwitchPreference;
 import android.util.AttributeSet;
 
 import com.android.internal.app.NightDisplayController;
@@ -25,7 +25,8 @@
 import java.util.Calendar;
 import java.util.TimeZone;
 
-public class NightDisplayPreference extends Preference implements NightDisplayController.Callback {
+public class NightDisplayPreference extends SwitchPreference
+        implements NightDisplayController.Callback {
 
     private NightDisplayController mController;
     private DateFormat mTimeFormatter;
diff --git a/src/com/android/settings/display/NightDisplaySettings.java b/src/com/android/settings/display/NightDisplaySettings.java
index 5048272..7eb1217 100644
--- a/src/com/android/settings/display/NightDisplaySettings.java
+++ b/src/com/android/settings/display/NightDisplaySettings.java
@@ -22,15 +22,13 @@
 import android.os.Bundle;
 import android.support.v7.preference.DropDownPreference;
 import android.support.v7.preference.Preference;
-import android.widget.Switch;
+import android.support.v7.preference.TwoStatePreference;
 import android.widget.TimePicker;
 
 import com.android.internal.app.NightDisplayController;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
-import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.widget.SwitchBar;
 
 import java.text.DateFormat;
 import java.util.Calendar;
@@ -39,14 +37,13 @@
 /**
  * Settings screen for Night display.
  */
-public class NightDisplaySettings extends SettingsPreferenceFragment implements
-        NightDisplayController.Callback,
-        Preference.OnPreferenceChangeListener,
-        SwitchBar.OnSwitchChangeListener {
+public class NightDisplaySettings extends SettingsPreferenceFragment
+        implements NightDisplayController.Callback, Preference.OnPreferenceChangeListener {
 
     private static final String KEY_NIGHT_DISPLAY_AUTO_MODE = "night_display_auto_mode";
     private static final String KEY_NIGHT_DISPLAY_START_TIME = "night_display_start_time";
     private static final String KEY_NIGHT_DISPLAY_END_TIME = "night_display_end_time";
+    private static final String KEY_NIGHT_DISPLAY_ACTIVATED = "night_display_activated";
 
     private static final int DIALOG_START_TIME = 0;
     private static final int DIALOG_END_TIME = 1;
@@ -57,8 +54,7 @@
     private DropDownPreference mAutoModePreference;
     private Preference mStartTimePreference;
     private Preference mEndTimePreference;
-
-    private SwitchBar mSwitchBar;
+    private TwoStatePreference mActivatedPreference;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -81,6 +77,7 @@
         mAutoModePreference = (DropDownPreference) findPreference(KEY_NIGHT_DISPLAY_AUTO_MODE);
         mStartTimePreference = findPreference(KEY_NIGHT_DISPLAY_START_TIME);
         mEndTimePreference = findPreference(KEY_NIGHT_DISPLAY_END_TIME);
+        mActivatedPreference = (TwoStatePreference) findPreference(KEY_NIGHT_DISPLAY_ACTIVATED);
 
         mAutoModePreference.setEntries(new CharSequence[] {
                 getString(R.string.night_display_auto_mode_never),
@@ -93,15 +90,7 @@
                 String.valueOf(NightDisplayController.AUTO_MODE_TWILIGHT)
         });
         mAutoModePreference.setOnPreferenceChangeListener(this);
-    }
-
-    @Override
-    public void onActivityCreated(Bundle savedInstanceState) {
-        super.onActivityCreated(savedInstanceState);
-
-        mSwitchBar = ((SettingsActivity) getActivity()).getSwitchBar();
-        mSwitchBar.addOnSwitchChangeListener(this);
-        mSwitchBar.show();
+        mActivatedPreference.setOnPreferenceChangeListener(this);
     }
 
     @Override
@@ -168,7 +157,7 @@
 
     @Override
     public void onActivated(boolean activated) {
-        mSwitchBar.setChecked(activated);
+        mActivatedPreference.setChecked(activated);
     }
 
     @Override
@@ -201,20 +190,11 @@
     }
 
     @Override
-    public void onSwitchChanged(Switch switchView, boolean isChecked) {
-        // Attempt to update the NIGHT_DISPLAY_ACTIVATED setting if necessary.
-        final boolean isActivated = mController.isActivated();
-        if (isActivated != isChecked) {
-            if (mController.setActivated(isChecked)) {
-                switchView.setChecked(isActivated);
-            }
-        }
-    }
-
-    @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
         if (preference == mAutoModePreference) {
             return mController.setAutoMode(Integer.parseInt((String) newValue));
+        } else if (preference == mActivatedPreference) {
+            return mController.setActivated((Boolean) newValue);
         }
         return false;
     }
diff --git a/src/com/android/settings/search/Index.java b/src/com/android/settings/search/Index.java
index 976c6fb..ccedd62 100644
--- a/src/com/android/settings/search/Index.java
+++ b/src/com/android/settings/search/Index.java
@@ -177,8 +177,8 @@
         public List<SearchIndexableData> dataToDelete;
         public Map<String, List<String>> nonIndexableKeys;
 
-        public boolean forceUpdate = false;
-        public boolean fullIndex = true;
+        public boolean forceUpdate;
+        public boolean fullIndex;
 
         public UpdateData() {
             dataToUpdate = new ArrayList<SearchIndexableData>();
