diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a2d80b9..b3d8453 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -69,6 +69,7 @@
     <uses-permission android:name="android.permission.MANAGE_DEVICE_ADMINS" />
     <uses-permission android:name="android.permission.READ_SEARCH_INDEXABLES" />
     <uses-permission android:name="android.permission.OEM_UNLOCK_STATE" />
+    <uses-permission android:name="android.permission.OVERRIDE_WIFI_CONFIG" />
 
     <application android:label="@string/settings_label"
             android:icon="@mipmap/ic_launcher_settings"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 54ceb3b..c75da27 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1503,6 +1503,10 @@
     <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 delete a Wi-Fi network -->
diff --git a/src/com/android/settings/wifi/AccessPoint.java b/src/com/android/settings/wifi/AccessPoint.java
index dda8d9e..a736e6c 100644
--- a/src/com/android/settings/wifi/AccessPoint.java
+++ b/src/com/android/settings/wifi/AccessPoint.java
@@ -19,6 +19,8 @@
 import com.android.settings.R;
 
 import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.StateListDrawable;
 import android.net.NetworkInfo.DetailedState;
@@ -286,6 +288,26 @@
         }
     }
 
+    public void showAppIcon() {
+        PackageManager pm = getContext().getPackageManager();
+        String systemName = pm.getNameForUid(android.os.Process.SYSTEM_UID);
+
+        Drawable drawable = pm.getDefaultActivityIcon();
+        if (mConfig == null) {
+            drawable.setAlpha(0);
+        } else if (mConfig.creatorName.equals(systemName)) {
+            drawable = getContext().getApplicationInfo().loadIcon(pm);
+        } else {
+            try {
+                drawable = pm.getApplicationIcon(mConfig.creatorName);
+            } catch (NameNotFoundException nnfe) {
+                // use default app icon
+            }
+        }
+
+        setIcon(drawable);
+    }
+
     @Override
     public int compareTo(Preference preference) {
         if (!(preference instanceof AccessPoint)) {
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 258c220..3c8ac99 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -102,6 +102,7 @@
     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;
 
     private static final String KEY_ASSISTANT_DISMISS_PLATFORM = "assistant_dismiss_platform";
 
@@ -142,6 +143,9 @@
 
     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";
@@ -420,6 +424,8 @@
                .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();
     }
 
@@ -496,6 +502,16 @@
                             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);
+                }
+                updateAccessPoints();
+                return true;
         }
         return super.onOptionsItemSelected(item);
     }
@@ -663,6 +679,10 @@
                 }
 
                 for (AccessPoint accessPoint : accessPoints) {
+                    if (showAppIcons) {
+                        accessPoint.showAppIcon();
+                    }
+
                     // Ignore access points that are out of range.
                     if (accessPoint.getLevel() != -1) {
                         getPreferenceScreen().addPreference(accessPoint);
