diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9c3a810..280c119 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1579,6 +1579,8 @@
     <string name="wifi_starting">Turning Wi\u2011Fi on\u2026</string>
     <!-- Summary text when turning Wi-Fi or bluetooth off -->
     <string name="wifi_stopping">Turning off Wi\u2011Fi\u2026</string>
+    <!-- Title of Button to show all Wi-Fi networks in the picker. [CHAR LIMIT=30] -->
+    <string name="wifi_see_all_networks_button_title">See all networks</string>
     <!-- Summary text when Wi-Fi or bluetooth has error -->
     <string name="wifi_error">Error</string>
     <!-- Summary text when wifi SoftAP started failed due to no legal usable channel allowed in this region by regulatory -->
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index faf5ca4..118d6eb 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -140,6 +140,10 @@
     // should Next button only be enabled when we have a connection?
     private boolean mEnableNextOnConnection;
 
+    // should see all networks instead of collapsing networks and showing mSeeAllNetworksPreference.
+    private boolean mSeeAllNetworks;
+    private static final int NETWORKS_TO_INITIALLY_SHOW = 5;
+
     // Save the dialog details
     private int mDialogMode;
     private AccessPoint mDlgAccessPoint;
@@ -157,6 +161,7 @@
     private PreferenceCategory mAccessPointsPreferenceCategory;
     private PreferenceCategory mAdditionalSettingsPreferenceCategory;
     private Preference mAddPreference;
+    private Preference mSeeAllNetworksPreference;
     private Preference mConfigureWifiSettingsPreference;
     private Preference mSavedNetworksPreference;
     private LinkablePreference mStatusMessagePreference;
@@ -200,6 +205,10 @@
         mAddPreference = new Preference(prefContext);
         mAddPreference.setIcon(R.drawable.ic_menu_add_inset);
         mAddPreference.setTitle(R.string.wifi_add_network);
+        mSeeAllNetworksPreference = new Preference(prefContext);
+        mSeeAllNetworksPreference.setIcon(R.drawable.ic_arrow_down_24dp);
+        mSeeAllNetworksPreference.setTitle(R.string.wifi_see_all_networks_button_title);
+        mSeeAllNetworks = false;
         mStatusMessagePreference = new LinkablePreference(prefContext);
 
         mUserBadgeCache = new AccessPointPreference.UserBadgeCache(getPackageManager());
@@ -524,6 +533,9 @@
             }
         } else if (preference == mAddPreference) {
             onAddNetworkPressed();
+        } else if (preference == mSeeAllNetworksPreference) {
+            mSeeAllNetworks = true;
+            onAccessPointsChanged();
         } else {
             return super.onPreferenceTreeClick(preference);
         }
@@ -635,8 +647,12 @@
                 cacheRemoveAllPrefs(mAccessPointsPreferenceCategory);
 
                 int index = configureConnectedAccessPointPreferenceCategory(accessPoints) ? 1 : 0;
+                boolean fewerNetworksThanLimit =
+                        accessPoints.size() <= index + NETWORKS_TO_INITIALLY_SHOW;
+                int numAccessPointsToShow = mSeeAllNetworks || fewerNetworksThanLimit
+                        ? accessPoints.size() : index + NETWORKS_TO_INITIALLY_SHOW;
 
-                for (; index < accessPoints.size(); index++) {
+                for (; index < numAccessPointsToShow; index++) {
                     AccessPoint accessPoint = accessPoints.get(index);
                     // Ignore access points that are out of range.
                     if (accessPoint.getLevel() != -1) {
@@ -682,15 +698,19 @@
                     pref.setOrder(index++);
                     pref.setKey(PREF_KEY_EMPTY_WIFI_LIST);
                     mAccessPointsPreferenceCategory.addPreference(pref);
-                    mAddPreference.setOrder(index++);
-                    mAccessPointsPreferenceCategory.addPreference(mAddPreference);
-                    setConfigureWifiSettingsVisibility();
                 } else {
-                    mAddPreference.setOrder(index++);
-                    mAccessPointsPreferenceCategory.addPreference(mAddPreference);
-                    setConfigureWifiSettingsVisibility();
                     setProgressBarVisible(false);
                 }
+                if (mSeeAllNetworks || fewerNetworksThanLimit) {
+                    mAccessPointsPreferenceCategory.removePreference(mSeeAllNetworksPreference);
+                    mAddPreference.setOrder(index);
+                    mAccessPointsPreferenceCategory.addPreference(mAddPreference);
+                } else {
+                    mAccessPointsPreferenceCategory.removePreference(mAddPreference);
+                    mSeeAllNetworksPreference.setOrder(index);
+                    mAccessPointsPreferenceCategory.addPreference(mSeeAllNetworksPreference);
+                }
+                setConfigureWifiSettingsVisibility();
                 if (mScanMenuItem != null) {
                     mScanMenuItem.setEnabled(true);
                 }
