diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index dc01c24..12551d0 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1852,7 +1852,6 @@
                 android:label="@string/wifi_display_settings_title"
                 android:taskAffinity="">
             <intent-filter android:priority="1">
-                <action android:name="android.settings.WIFI_DISPLAY_SETTINGS" />
                 <action android:name="android.settings.CAST_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
@@ -2326,6 +2325,8 @@
                 android:value="com.android.settings.notification.OtherSoundSettings" />
             <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                 android:resource="@id/notification_settings" />
+            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+                android:value="true" />
         </activity>
 
         <!-- Show apps for which application-level notification settings are applicable -->
diff --git a/res/layout/battery_history_chart.xml b/res/layout/battery_history_chart.xml
index 0e3cf88..c0c37f1 100644
--- a/res/layout/battery_history_chart.xml
+++ b/res/layout/battery_history_chart.xml
@@ -28,7 +28,7 @@
         android:gravity="center_vertical"
         android:id="@+id/battery_history_chart"
         android:textAppearance="?android:attr/textAppearanceSmall"
-        android:textColor="#ff000000"
+        android:textColor="?android:attr/textColorPrimary"
         app:headerAppearance="?android:attr/textAppearanceMedium"
         android:shadowRadius="4"
         android:shadowColor="?android:attr/colorBackground"
diff --git a/res/layout/data_usage_summary.xml b/res/layout/data_usage_summary.xml
index 6634105..8875004 100644
--- a/res/layout/data_usage_summary.xml
+++ b/res/layout/data_usage_summary.xml
@@ -26,6 +26,11 @@
         android:orientation="vertical"
         android:background="@drawable/default_preference_background">
 
+        <FrameLayout
+            android:id="@+id/pinned_header"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+
         <include layout="@layout/tab_widget" />
 
         <!-- give an empty content area to make tabhost happy -->
diff --git a/res/layout/manage_applications_apps.xml b/res/layout/manage_applications_apps.xml
index 044cdb4..e4ec871 100644
--- a/res/layout/manage_applications_apps.xml
+++ b/res/layout/manage_applications_apps.xml
@@ -30,6 +30,11 @@
                 android:orientation="vertical"
                 android:visibility="gone">
 
+            <FrameLayout
+                android:id="@+id/pinned_header"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content" />
+
             <FrameLayout android:layout_width="match_parent"
                     android:layout_height="0px"
                     android:layout_weight="1">
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 672d4e7..7467248 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5966,6 +5966,9 @@
     <!-- Sound & notification > Other sounds: Title for the option enabling touch sounds for screen locking sounds. [CHAR LIMIT=30] -->
     <string name="screen_locking_sounds_title">Screen locking sounds</string>
 
+    <!-- Sound & notification > Other sounds: Title for the option enabling charging sounds. [CHAR LIMIT=30] -->
+    <string name="charging_sounds_title">Charging sounds</string>
+
     <!-- Sound & notification > Other sounds: Title for the option enabling docking sounds. [CHAR LIMIT=30] -->
     <string name="docking_sounds_title">Docking sounds</string>
 
diff --git a/res/xml/other_sound_settings.xml b/res/xml/other_sound_settings.xml
index 88c4130..57a302b 100644
--- a/res/xml/other_sound_settings.xml
+++ b/res/xml/other_sound_settings.xml
@@ -35,6 +35,14 @@
             android:switchTextOn=""
             android:persistent="false" />
 
+    <!-- Charging sounds -->
+    <SwitchPreference
+            android:key="charging_sounds"
+            android:title="@string/charging_sounds_title"
+            android:switchTextOff=""
+            android:switchTextOn=""
+            android:persistent="false" />
+
     <!-- Docking sounds -->
     <SwitchPreference
             android:key="docking_sounds"
diff --git a/src/com/android/settings/AppHeader.java b/src/com/android/settings/AppHeader.java
index 2f3678b..71c2255 100644
--- a/src/com/android/settings/AppHeader.java
+++ b/src/com/android/settings/AppHeader.java
@@ -28,18 +28,27 @@
 
 public class AppHeader {
 
-    public static void createAppHeader(final Activity activity, Drawable icon, CharSequence label,
-            final Intent settingsIntent) {
-        createAppHeader(activity, icon, label, settingsIntent, 0);
+    public static void createAppHeader(SettingsPreferenceFragment fragment, Drawable icon,
+            CharSequence label, final Intent settingsIntent) {
+        createAppHeader(fragment, icon, label, settingsIntent, 0);
     }
 
-    public static void createAppHeader(final Activity activity, Drawable icon, CharSequence label,
-            final Intent settingsIntent, int tintColorRes) {
-        final View content = activity.findViewById(R.id.main_content);
-        final ViewGroup contentParent = (ViewGroup) content.getParent();
+    public static void createAppHeader(Activity activity, Drawable icon, CharSequence label,
+            final Intent settingsIntent, ViewGroup pinnedHeader) {
         final View bar = activity.getLayoutInflater().inflate(R.layout.app_header,
-                contentParent, false);
+                pinnedHeader, false);
+        setupHeaderView(activity, icon, label, settingsIntent, 0, bar);
+        pinnedHeader.addView(bar);
+    }
 
+    public static void createAppHeader(SettingsPreferenceFragment fragment, Drawable icon,
+            CharSequence label, Intent settingsIntent, int tintColorRes) {
+        View bar = fragment.setPinnedHeaderView(R.layout.app_header);
+        setupHeaderView(fragment.getActivity(), icon, label, settingsIntent, tintColorRes, bar);
+    }
+
+    private static View setupHeaderView(final Activity activity, Drawable icon, CharSequence label,
+            final Intent settingsIntent, int tintColorRes, View bar) {
         final ImageView appIcon = (ImageView) bar.findViewById(R.id.app_icon);
         appIcon.setImageDrawable(icon);
         if (tintColorRes != 0) {
@@ -61,7 +70,8 @@
                 }
             });
         }
-        contentParent.addView(bar, 0);
+
+        return bar;
     }
 
 }
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index 27a486c..7eec3df 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -112,6 +112,7 @@
 import android.widget.ArrayAdapter;
 import android.widget.BaseAdapter;
 import android.widget.Button;
+import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.ListView;
@@ -120,12 +121,12 @@
 import android.widget.Spinner;
 import android.widget.Switch;
 import android.widget.TabHost;
-import android.widget.Toast;
 import android.widget.TabHost.OnTabChangeListener;
 import android.widget.TabHost.TabContentFactory;
 import android.widget.TabHost.TabSpec;
 import android.widget.TabWidget;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.telephony.PhoneConstants;
@@ -464,12 +465,12 @@
         mListView.setOnItemClickListener(mListListener);
         mListView.setAdapter(mAdapter);
 
-        showRequestedAppIfNeeded();
+        showRequestedAppIfNeeded(view);
 
         return view;
     }
 
-    private void showRequestedAppIfNeeded() {
+    private void showRequestedAppIfNeeded(View rootView) {
         if (mShowAppImmediatePkg == null) {
             return;
         }
@@ -482,7 +483,8 @@
             final UidDetail detail = mUidDetailProvider.getUidDetail(app.key, true);
             // When we are going straight to an app then we are coming from App Info and want
             // a header at the top.
-            AppHeader.createAppHeader(getActivity(), detail.icon, detail.label, null);
+            FrameLayout pinnedHeader = (FrameLayout) rootView.findViewById(R.id.pinned_header);
+            AppHeader.createAppHeader(getActivity(), detail.icon, detail.label, null, pinnedHeader);
             AppDetailsFragment.show(DataUsageSummary.this, app, detail.label, false);
         } catch (NameNotFoundException e) {
             Log.w(TAG, "Could not find " + mShowAppImmediatePkg, e);
diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java
index 2d402e5..e42f246 100644
--- a/src/com/android/settings/applications/AppInfoBase.java
+++ b/src/com/android/settings/applications/AppInfoBase.java
@@ -37,12 +37,13 @@
 
 import com.android.settings.InstrumentedPreferenceFragment;
 import com.android.settings.SettingsActivity;
+import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
 import com.android.settings.applications.ApplicationsState.AppEntry;
 
 import java.util.ArrayList;
 
-public abstract class AppInfoBase extends InstrumentedPreferenceFragment
+public abstract class AppInfoBase extends SettingsPreferenceFragment
         implements ApplicationsState.Callbacks {
 
     public static final String ARG_PACKAGE_NAME = "package";
diff --git a/src/com/android/settings/applications/AppInfoWithHeader.java b/src/com/android/settings/applications/AppInfoWithHeader.java
index f7546f2..f8feaf1 100644
--- a/src/com/android/settings/applications/AppInfoWithHeader.java
+++ b/src/com/android/settings/applications/AppInfoWithHeader.java
@@ -34,7 +34,7 @@
         }
         mCreated = true;
         if (mPackageInfo == null) return;
-        AppHeader.createAppHeader(getActivity(), mPackageInfo.applicationInfo.loadIcon(mPm),
-                mPackageInfo.applicationInfo.loadLabel(mPm), null);
+        AppHeader.createAppHeader(this, mPackageInfo.applicationInfo.loadIcon(mPm),
+                mPackageInfo.applicationInfo.loadLabel(mPm), null, 0);
     }
 }
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index b55cc44..aaec5cf 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -45,6 +45,7 @@
 import android.widget.BaseAdapter;
 import android.widget.Filter;
 import android.widget.Filterable;
+import android.widget.FrameLayout;
 import android.widget.ListView;
 import android.widget.Spinner;
 
@@ -232,8 +233,8 @@
             } else {
                 // No volume selected, display a normal list, sorted by size.
                 mListType = LIST_TYPE_MAIN;
-                mSortOrder = R.id.sort_order_size;
             }
+            mSortOrder = R.id.sort_order_size;
         } else if (className.equals(UsageAccessSettingsActivity.class.getName())) {
             mListType = LIST_TYPE_USAGE_ACCESS;
             getActivity().getActionBar().setTitle(R.string.usage_access_title);
@@ -298,15 +299,14 @@
 
     private void createHeader() {
         Activity activity = getActivity();
-        View content = activity.findViewById(R.id.main_content);
-        ViewGroup contentParent = (ViewGroup) content.getParent();
+        FrameLayout pinnedHeader = (FrameLayout) mRootView.findViewById(R.id.pinned_header);
         mSpinnerHeader = (ViewGroup) activity.getLayoutInflater()
-                .inflate(R.layout.apps_filter_spinner, contentParent, false);
+                .inflate(R.layout.apps_filter_spinner, pinnedHeader, false);
         mFilterSpinner = (Spinner) mSpinnerHeader.findViewById(R.id.filter_spinner);
         mFilterAdapter = new FilterSpinnerAdapter(this);
         mFilterSpinner.setAdapter(mFilterAdapter);
         mFilterSpinner.setOnItemSelectedListener(this);
-        contentParent.addView(mSpinnerHeader, 0);
+        pinnedHeader.addView(mSpinnerHeader, 0);
 
         mFilterAdapter.enableFilter(getDefaultFilter());
         if (mListType == LIST_TYPE_MAIN || mListType == LIST_TYPE_NOTIFICATION) {
@@ -333,7 +333,8 @@
     public void onViewCreated(View view, Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
         if (mListType == LIST_TYPE_STORAGE) {
-            AppHeader.createAppHeader(getActivity(), null, mVolumeName, null);
+            FrameLayout pinnedHeader = (FrameLayout) mRootView.findViewById(R.id.pinned_header);
+            AppHeader.createAppHeader(getActivity(), null, mVolumeName, null, pinnedHeader);
         }
     }
 
diff --git a/src/com/android/settings/applications/ProcessStatsDetail.java b/src/com/android/settings/applications/ProcessStatsDetail.java
index 317e3b2..7035bf0 100644
--- a/src/com/android/settings/applications/ProcessStatsDetail.java
+++ b/src/com/android/settings/applications/ProcessStatsDetail.java
@@ -113,7 +113,7 @@
     public void onViewCreated(View view, Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
 
-        AppHeader.createAppHeader(getActivity(),
+        AppHeader.createAppHeader(this,
                 mApp.mUiTargetApp != null ? mApp.mUiTargetApp.loadIcon(mPm) : new ColorDrawable(0),
                 mApp.mUiLabel, null);
     }
diff --git a/src/com/android/settings/deviceinfo/SimStatus.java b/src/com/android/settings/deviceinfo/SimStatus.java
index 4fa5673..ea4c3e1 100644
--- a/src/com/android/settings/deviceinfo/SimStatus.java
+++ b/src/com/android/settings/deviceinfo/SimStatus.java
@@ -143,24 +143,28 @@
         // Note - missing in zaku build, be careful later...
         mSignalStrength = findPreference(KEY_SIGNAL_STRENGTH);
 
-        mSir = mSelectableSubInfos.size() > 0 ? mSelectableSubInfos.get(0) : null;
-        if (mSelectableSubInfos.size() > 1) {
-            setContentView(R.layout.sim_information);
+        if (mSelectableSubInfos == null) {
+            mSir = null;
+        } else {
+            mSir = mSelectableSubInfos.size() > 0 ? mSelectableSubInfos.get(0) : null;
 
-            mTabHost = (TabHost) findViewById(android.R.id.tabhost);
-            mTabWidget = (TabWidget) findViewById(android.R.id.tabs);
-            mListView = (ListView) findViewById(android.R.id.list);
+            if (mSelectableSubInfos.size() > 1) {
+                setContentView(R.layout.sim_information);
 
-            mTabHost.setup();
-            mTabHost.setOnTabChangedListener(mTabListener);
-            mTabHost.clearAllTabs();
+                mTabHost = (TabHost) findViewById(android.R.id.tabhost);
+                mTabWidget = (TabWidget) findViewById(android.R.id.tabs);
+                mListView = (ListView) findViewById(android.R.id.list);
 
-            for (int i = 0; i < mSelectableSubInfos.size(); i++) {
-                mTabHost.addTab(buildTabSpec(String.valueOf(i),
-                        String.valueOf(mSelectableSubInfos.get(i).getDisplayName())));
+                mTabHost.setup();
+                mTabHost.setOnTabChangedListener(mTabListener);
+                mTabHost.clearAllTabs();
+
+                for (int i = 0; i < mSelectableSubInfos.size(); i++) {
+                    mTabHost.addTab(buildTabSpec(String.valueOf(i),
+                            String.valueOf(mSelectableSubInfos.get(i).getDisplayName())));
+                }
             }
         }
-
         updatePhoneInfos();
     }
 
diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
index 4aa935a..bac8202 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
@@ -464,7 +464,7 @@
             appIcon = getActivity().getPackageManager().getDefaultActivityIcon();
         }
 
-        AppHeader.createAppHeader(getActivity(), appIcon, title, null,
+        AppHeader.createAppHeader(this, appIcon, title, null,
                 mDrainType != DrainType.APP ? android.R.color.white : 0);
     }
 
diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index 883975a..28245c8 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -84,7 +84,7 @@
         }
         mCreated = true;
         if (mAppRow == null) return;
-        AppHeader.createAppHeader(getActivity(), mAppRow.icon, mAppRow.label,
+        AppHeader.createAppHeader(this, mAppRow.icon, mAppRow.label,
                 mAppRow.settingsIntent);
     }
 
diff --git a/src/com/android/settings/notification/OtherSoundSettings.java b/src/com/android/settings/notification/OtherSoundSettings.java
index c226906..969ec90 100644
--- a/src/com/android/settings/notification/OtherSoundSettings.java
+++ b/src/com/android/settings/notification/OtherSoundSettings.java
@@ -60,6 +60,7 @@
 
     private static final String KEY_DIAL_PAD_TONES = "dial_pad_tones";
     private static final String KEY_SCREEN_LOCKING_SOUNDS = "screen_locking_sounds";
+    private static final String KEY_CHARGING_SOUNDS = "charging_sounds";
     private static final String KEY_DOCKING_SOUNDS = "docking_sounds";
     private static final String KEY_TOUCH_SOUNDS = "touch_sounds";
     private static final String KEY_VIBRATE_ON_TOUCH = "vibrate_on_touch";
@@ -77,6 +78,9 @@
     private static final SettingPref PREF_SCREEN_LOCKING_SOUNDS = new SettingPref(
             TYPE_SYSTEM, KEY_SCREEN_LOCKING_SOUNDS, System.LOCKSCREEN_SOUNDS_ENABLED, DEFAULT_ON);
 
+    private static final SettingPref PREF_CHARGING_SOUNDS = new SettingPref(
+            TYPE_GLOBAL, KEY_CHARGING_SOUNDS, Global.CHARGING_SOUNDS_ENABLED, DEFAULT_ON);
+
     private static final SettingPref PREF_DOCKING_SOUNDS = new SettingPref(
             TYPE_GLOBAL, KEY_DOCKING_SOUNDS, Global.DOCK_SOUNDS_ENABLED, DEFAULT_ON) {
         @Override
@@ -155,6 +159,7 @@
     private static final SettingPref[] PREFS = {
         PREF_DIAL_PAD_TONES,
         PREF_SCREEN_LOCKING_SOUNDS,
+        PREF_CHARGING_SOUNDS,
         PREF_DOCKING_SOUNDS,
         PREF_TOUCH_SOUNDS,
         PREF_VIBRATE_ON_TOUCH,
diff --git a/src/com/android/settings/wifi/AccessPointPreference.java b/src/com/android/settings/wifi/AccessPointPreference.java
index 0f702b2..511d88d 100644
--- a/src/com/android/settings/wifi/AccessPointPreference.java
+++ b/src/com/android/settings/wifi/AccessPointPreference.java
@@ -21,7 +21,6 @@
 import android.preference.Preference;
 import android.view.View;
 import android.widget.TextView;
-
 import com.android.settings.R;
 import com.android.settingslib.wifi.AccessPoint;
 
@@ -81,7 +80,11 @@
                             ? STATE_SECURED
                             : STATE_NONE);
                     drawable = sld.getCurrent();
-                    setIcon(drawable);
+                    if (!mForSavedNetworks) {
+                        setIcon(drawable);
+                    } else {
+                        setIcon(null);
+                    }
                 }
             }
 
diff --git a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
index 04d2107..1444ad5 100644
--- a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
+++ b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
@@ -41,6 +41,8 @@
 import com.android.settings.search.SearchIndexableRaw;
 import com.android.settingslib.wifi.AccessPoint;
 import com.android.settingslib.wifi.WifiTracker;
+import java.util.Collections;
+import java.util.Comparator;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -97,35 +99,22 @@
 
         final List<AccessPoint> accessPoints = WifiTracker.getCurrentAccessPoints(context, true,
                 false, true);
-
+        Collections.sort(accessPoints, new Comparator<AccessPoint>() {
+            public int compare(AccessPoint ap1, AccessPoint ap2) {
+                if (ap1.getConfigName() != null) {
+                    return ap1.getConfigName().compareTo(ap2.getConfigName());
+                } else {
+                    return -1;
+                }
+            }
+        });
         preferenceScreen.removeAll();
 
-        PackageManager pm = context.getPackageManager();
-        String systemName = pm.getNameForUid(android.os.Process.SYSTEM_UID);
-
         final int accessPointsSize = accessPoints.size();
         for (int i = 0; i < accessPointsSize; ++i){
             AccessPointPreference preference = new AccessPointPreference(accessPoints.get(i),
                     context, true);
-            WifiConfiguration config = accessPoints.get(i).getConfig();
-            if (config != null) {
-                int userId = UserHandle.getUserId(config.creatorUid);
-                ApplicationInfo appInfo = null;
-                if (config.creatorName != null && config.creatorName.equals(systemName)) {
-                    appInfo = context.getApplicationInfo();
-                } else {
-                    try {
-                        IPackageManager ipm = AppGlobals.getPackageManager();
-                        appInfo = ipm.getApplicationInfo(config.creatorName, 0 /* flags */, userId);
-                    } catch (RemoteException rex) {
-                    }
-                }
-                if (appInfo != null) {
-                    preference.setSummary(getResources().getString(appInfo.labelRes));
-                }
-            } else {
-                preference.setShowSummary(false);
-            }
+            preference.setIcon(null);
             preferenceScreen.addPreference(preference);
         }
 
