diff --git a/res/layout/mac_preference.xml b/res/layout/mac_preference.xml
deleted file mode 100644
index f096b07..0000000
--- a/res/layout/mac_preference.xml
+++ /dev/null
@@ -1,79 +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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:minHeight="?android:attr/listPreferredItemHeightSmall"
-    android:gravity="center_vertical"
-    android:orientation="vertical"
-    android:background="?android:attr/selectableItemBackground">
-
-    <View
-        android:layout_width="fill_parent"
-        android:layout_height="@dimen/wifi_divider_height"
-        android:background="@color/wifi_divider" />
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:minHeight="?android:attr/listPreferredItemHeightSmall"
-        android:gravity="center_vertical"
-        android:background="?android:attr/selectableItemBackground">
-
-        <RelativeLayout
-            android:layout_width="0dip"
-            android:layout_height="wrap_content"
-            android:layout_weight="1"
-            android:paddingTop="6dip"
-            android:paddingBottom="6dip">
-
-            <TextView
-                android:id="@+android:id/title"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:paddingStart="16dip"
-                android:paddingEnd="16dip"
-                android:singleLine="true"
-                android:textAppearance="?android:attr/textAppearanceSmall"
-                android:ellipsize="marquee"
-                android:fadingEdge="horizontal" />
-
-            <TextView
-                android:id="@android:id/summary"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:layout_below="@android:id/title"
-                android:layout_alignStart="@android:id/title"
-                android:paddingStart="16dip"
-                android:layout_marginEnd="16dip"
-                android:visibility="gone"
-                android:textAppearance="?android:attr/textAppearanceSmall"
-                android:textColor="?android:attr/textColorSecondary"
-                android:maxLines="4" />
-
-        </RelativeLayout>
-
-        <LinearLayout
-            android:id="@android:id/widget_frame"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:gravity="center_vertical"
-            android:orientation="vertical" />
-
-    </LinearLayout>
-
-</LinearLayout>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index dbd842d0..153492b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1444,10 +1444,6 @@
     <string name="wifi_menu_scan">Scan</string>
     <!-- Menu option to Wi-Fi advanced settings -->
     <string name="wifi_menu_advanced">Advanced</string>
-    <!-- Menu option to show app icons instead of WiFi strength [CHAR LIMIT=20]-->
-    <string name="wifi_menu_apps">Show Apps</string>
-    <!-- Menu option to show WiFi strength icons [CHAR LIMIT=20]-->
-    <string name="wifi_menu_apps_strength">Show WiFi Strength</string>
     <!-- Menu option to connect to a Wi-Fi network -->
     <string name="wifi_menu_connect">Connect to network</string>
     <!-- Menu option to remember a temporary Wi-Fi network -->
diff --git a/res/xml/wifi_advanced_settings.xml b/res/xml/wifi_advanced_settings.xml
index 1fc1cda..ed6cfbd 100644
--- a/res/xml/wifi_advanced_settings.xml
+++ b/res/xml/wifi_advanced_settings.xml
@@ -69,7 +69,7 @@
     <Preference
             android:key="mac_address"
             android:title="@string/wifi_advanced_mac_address_title"
-            android:layout="@layout/mac_preference" />
+            android:layout="@layout/wifi_advance_layout" />
 
     <Preference
             android:key="current_ip_address"
diff --git a/src/com/android/settings/FingerprintSettings.java b/src/com/android/settings/FingerprintSettings.java
index 749ac11..00f4b43 100644
--- a/src/com/android/settings/FingerprintSettings.java
+++ b/src/com/android/settings/FingerprintSettings.java
@@ -92,6 +92,7 @@
         private static final String KEY_MANAGE_CATEGORY = "fingerprint_manage_category";
         private static final String KEY_FINGERPRINT_ENABLE_KEYGUARD_TOGGLE =
                 "fingerprint_enable_keyguard_toggle";
+        private static final String KEY_LAUNCHED_CONFIRM = "launched_confirm";
 
         private static final int MSG_REFRESH_FINGERPRINT_TEMPLATES = 1000;
         private static final int MSG_HIGHLIGHT_FINGERPRINT_ITEM = 1001;
@@ -110,6 +111,7 @@
         private CancellationSignal mFingerprintCancel;
         private int mMaxFingerprintAttempts;
         private byte[] mToken;
+        private boolean mLaunchedConfirm;
 
         private AuthenticationCallback mAuthCallback = new AuthenticationCallback() {
             @Override
@@ -125,9 +127,12 @@
 
             @Override
             public void onAuthenticationError(int errMsgId, CharSequence errString) {
-                Toast.makeText(getActivity(), errString, Toast.LENGTH_SHORT);
-                if (errMsgId != FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
-                    retryFingerprint(false);
+                // get activity will be null on a screen rotation
+                if (getActivity() != null) {
+                    Toast.makeText(getActivity(), errString, Toast.LENGTH_SHORT);
+                    if (errMsgId != FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
+                        retryFingerprint(false);
+                    }
                 }
             }
 
@@ -191,13 +196,16 @@
             if (savedInstanceState != null) {
                 mToken = savedInstanceState.getByteArray(
                         ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
+                mLaunchedConfirm = savedInstanceState.getBoolean(
+                        KEY_LAUNCHED_CONFIRM, false);
             }
 
             mFingerprintManager = (FingerprintManager) getActivity().getSystemService(
                     Context.FINGERPRINT_SERVICE);
 
             // Need to authenticate a session token if none
-            if (mToken == null) {
+            if (mToken == null && mLaunchedConfirm == false) {
+                mLaunchedConfirm = true;
                 launchChooseOrConfirmLock();
             }
         }
@@ -307,6 +315,7 @@
         public void onSaveInstanceState(final Bundle outState) {
             outState.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN,
                     mToken);
+            outState.putBoolean(KEY_LAUNCHED_CONFIRM, mLaunchedConfirm);
         }
 
         @Override
diff --git a/src/com/android/settings/wifi/AccessPointPreference.java b/src/com/android/settings/wifi/AccessPointPreference.java
index f68410a..8a24bc9 100644
--- a/src/com/android/settings/wifi/AccessPointPreference.java
+++ b/src/com/android/settings/wifi/AccessPointPreference.java
@@ -15,16 +15,9 @@
  */
 package com.android.settings.wifi;
 
-import android.app.AppGlobals;
 import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.IPackageManager;
-import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.StateListDrawable;
-import android.net.wifi.WifiConfiguration;
-import android.os.RemoteException;
-import android.os.UserHandle;
 import android.preference.Preference;
 import android.view.View;
 import android.widget.TextView;
@@ -67,36 +60,6 @@
         notifyChanged();
     }
 
-    public void showAppIcon() {
-        PackageManager pm = getContext().getPackageManager();
-        String systemName = pm.getNameForUid(android.os.Process.SYSTEM_UID);
-        WifiConfiguration mConfig = mAccessPoint.getConfig();
-
-        Drawable drawable = pm.getDefaultActivityIcon();
-        if (mConfig == null) {
-            drawable.setAlpha(0);
-        } else {
-            int userId = UserHandle.getUserId(mConfig.creatorUid);
-            ApplicationInfo appInfo = null;
-            if (mConfig.creatorName.equals(systemName)) {
-                appInfo = getContext().getApplicationInfo();
-            } else {
-                try {
-                    IPackageManager ipm = AppGlobals.getPackageManager();
-                    appInfo = ipm.getApplicationInfo(mConfig.creatorName, 0 /* flags */, userId);
-                } catch (RemoteException rex) {
-                    // use default app icon
-                }
-            }
-            if (appInfo != null) {
-                drawable = appInfo.loadIcon(pm);
-                drawable = pm.getUserBadgedIcon(drawable, new UserHandle(userId));
-            }
-        }
-
-        setIcon(drawable);
-    }
-
     protected void updateIcon(int level, Context context) {
         if (level == -1) {
             setIcon(null);
diff --git a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
index 2627bc4..6726717 100644
--- a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
+++ b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
@@ -16,12 +16,19 @@
 
 package com.android.settings.wifi;
 
+import android.app.AppGlobals;
 import android.app.Dialog;
 import android.content.Context;
 import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageManager;
 import android.content.res.Resources;
+import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.UserHandle;
 import android.preference.Preference;
 import android.preference.PreferenceScreen;
 import android.util.Log;
@@ -93,11 +100,32 @@
 
         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);
-            preference.setShowSummary(false);
+            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);
+            }
             preferenceScreen.addPreference(preference);
         }
 
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index cb6be53..f46edac 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -93,7 +93,6 @@
     private static final int MENU_ID_FORGET = Menu.FIRST + 7;
     private static final int MENU_ID_MODIFY = Menu.FIRST + 8;
     private static final int MENU_ID_WRITE_NFC = Menu.FIRST + 9;
-    private static final int MENU_ID_APPS = Menu.FIRST + 10;
 
     public static final int WIFI_DIALOG_ID = 1;
     /* package */ static final int WPS_PBC_DIALOG_ID = 2;
@@ -120,9 +119,6 @@
 
     private TextView mEmptyView;
 
-    private boolean showAppIcons = false;
-    private MenuItem showAppMenuItem = null;
-
     // this boolean extra specifies whether to disable the Next button when not connected. Used by
     // account creation outside of setup wizard.
     private static final String EXTRA_ENABLE_NEXT_ON_CONNECT = "wifi_enable_next_on_connect";
@@ -324,8 +320,6 @@
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
         menu.add(Menu.NONE, MENU_ID_ADVANCED, 0, R.string.wifi_menu_advanced)
                 .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
-        showAppMenuItem = menu.add(Menu.NONE, MENU_ID_APPS, 0, R.string.wifi_menu_apps);
-        showAppMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
         ta.recycle();
     }
 
@@ -406,16 +400,6 @@
                             null);
                 }
                 return true;
-            case MENU_ID_APPS:
-                showAppIcons = !showAppIcons;
-
-                if (showAppIcons) {
-                    showAppMenuItem.setTitle(R.string.wifi_menu_apps_strength);
-                } else {
-                    showAppMenuItem.setTitle(R.string.wifi_menu_apps);
-                }
-                onAccessPointsChanged();
-                return true;
         }
         return super.onOptionsItemSelected(item);
     }
@@ -584,9 +568,6 @@
                     if (accessPoint.getLevel() != -1) {
                         AccessPointPreference preference = new AccessPointPreference(accessPoint,
                                 getActivity());
-                        if (showAppIcons) {
-                            preference.showAppIcon();
-                        }
 
                         getPreferenceScreen().addPreference(preference);
                         accessPoint.setListener(this);
