diff --git a/src/com/android/settings/wfd/WifiDisplaySettings.java b/src/com/android/settings/wfd/WifiDisplaySettings.java
index 34d16d9..d04c3cb 100755
--- a/src/com/android/settings/wfd/WifiDisplaySettings.java
+++ b/src/com/android/settings/wfd/WifiDisplaySettings.java
@@ -207,8 +207,7 @@
         preferenceScreen.removeAll();
 
         if (featureState == WifiDisplayStatus.FEATURE_STATE_ON) {
-            final WifiDisplay[] pairedDisplays = mWifiDisplayStatus.getRememberedDisplays();
-            final WifiDisplay[] availableDisplays = mWifiDisplayStatus.getAvailableDisplays();
+            final WifiDisplay[] displays = mWifiDisplayStatus.getDisplays();
 
             if (mPairedDevicesCategory == null) {
                 mPairedDevicesCategory = new PreferenceCategory(getActivity());
@@ -218,13 +217,6 @@
             }
             preferenceScreen.addPreference(mPairedDevicesCategory);
 
-            for (WifiDisplay d : pairedDisplays) {
-                mPairedDevicesCategory.addPreference(createWifiDisplayPreference(d, true));
-            }
-            if (mPairedDevicesCategory.getPreferenceCount() == 0) {
-                preferenceScreen.removePreference(mPairedDevicesCategory);
-            }
-
             if (mAvailableDevicesCategory == null) {
                 mAvailableDevicesCategory = new ProgressCategory(getActivity(), null,
                         R.string.wifi_display_no_devices_found);
@@ -234,11 +226,16 @@
             }
             preferenceScreen.addPreference(mAvailableDevicesCategory);
 
-            for (WifiDisplay d : availableDisplays) {
-                if (!contains(pairedDisplays, d.getDeviceAddress())) {
-                    mAvailableDevicesCategory.addPreference(createWifiDisplayPreference(d, false));
+            for (WifiDisplay d : displays) {
+                if (d.isRemembered()) {
+                    mPairedDevicesCategory.addPreference(createWifiDisplayPreference(d));
+                } else if (d.isAvailable()){
+                    mAvailableDevicesCategory.addPreference(createWifiDisplayPreference(d));
                 }
             }
+            if (mPairedDevicesCategory.getPreferenceCount() == 0) {
+                preferenceScreen.removePreference(mPairedDevicesCategory);
+            }
             if (mWifiDisplayStatus.getScanState() == WifiDisplayStatus.SCAN_STATE_SCANNING) {
                 mAvailableDevicesCategory.setProgress(true);
             } else {
@@ -253,7 +250,7 @@
         getActivity().invalidateOptionsMenu();
     }
 
-    private Preference createWifiDisplayPreference(final WifiDisplay d, boolean paired) {
+    private Preference createWifiDisplayPreference(final WifiDisplay d) {
         WifiDisplayPreference p = new WifiDisplayPreference(getActivity(), d);
         if (d.equals(mWifiDisplayStatus.getActiveDisplay())) {
             switch (mWifiDisplayStatus.getActiveDisplayState()) {
@@ -264,22 +261,15 @@
                     p.setSummary(R.string.wifi_display_status_connecting);
                     break;
             }
-        } else if (paired && contains(mWifiDisplayStatus.getAvailableDisplays(),
-                d.getDeviceAddress())) {
-            p.setSummary(R.string.wifi_display_status_available);
-            for (WifiDisplay display : mWifiDisplayStatus.getAvailableDisplays()) {
-                if (display.getDeviceAddress().equals(d.getDeviceAddress()) &&
-                        !display.canConnect()) {
-                    p.setSummary(R.string.wifi_display_status_in_use);
-                    p.setEnabled(false);
-                    break;
-                }
+        } else if (d.isAvailable()) {
+            if (!d.canConnect()) {
+                p.setSummary(R.string.wifi_display_status_in_use);
+                p.setEnabled(false);
+            } else if (d.isRemembered()) {
+                p.setSummary(R.string.wifi_display_status_available);
             }
-        } else if (!paired && !d.canConnect()) {
-            p.setSummary(R.string.wifi_display_status_in_use);
-            p.setEnabled(false);
         }
-        if (paired) {
+        if (d.isRemembered()) {
             p.setWidgetLayoutResource(R.layout.wifi_display_preference);
         }
         return p;
