diff --git a/Common/src/com/googlecode/android_scripting/facade/wifi/WifiManagerFacade.java b/Common/src/com/googlecode/android_scripting/facade/wifi/WifiManagerFacade.java
index b38b9b7..8889f3c 100755
--- a/Common/src/com/googlecode/android_scripting/facade/wifi/WifiManagerFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/wifi/WifiManagerFacade.java
@@ -119,13 +119,16 @@
     private final IntentFilter mScanFilter;
     private final IntentFilter mStateChangeFilter;
     private final IntentFilter mTetherFilter;
+    private final IntentFilter mNetworkSuggestionStateChangeFilter;
     private final WifiScanReceiver mScanResultsAvailableReceiver;
     private final WifiStateChangeReceiver mStateChangeReceiver;
+    private final WifiNetworkSuggestionStateChangeReceiver mNetworkSuggestionStateChangeReceiver;
     private final HandlerThread mCallbackHandlerThread;
     private final Object mCallbackLock = new Object();
     private final Map<NetworkSpecifier, NetworkCallback> mNetworkCallbacks = new HashMap<>();
     private boolean mTrackingWifiStateChange;
     private boolean mTrackingTetherStateChange;
+    private boolean mTrackingNetworkSuggestionStateChange;
     @GuardedBy("mCallbackLock")
     private NetworkRequestUserSelectionCallback mNetworkRequestUserSelectionCallback;
 
@@ -230,16 +233,20 @@
         mStateChangeFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
         mStateChangeFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
         mStateChangeFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
-        mStateChangeFilter.addAction(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION);
         mStateChangeFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY - 1);
 
         mTetherFilter = new IntentFilter(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
         mTetherFilter.addAction(ConnectivityManager.ACTION_TETHER_STATE_CHANGED);
 
+        mNetworkSuggestionStateChangeFilter = new IntentFilter(
+                WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION);
+
         mScanResultsAvailableReceiver = new WifiScanReceiver(mEventFacade);
         mStateChangeReceiver = new WifiStateChangeReceiver();
+        mNetworkSuggestionStateChangeReceiver = new WifiNetworkSuggestionStateChangeReceiver();
         mTrackingWifiStateChange = false;
         mTrackingTetherStateChange = false;
+        mTrackingNetworkSuggestionStateChange = false;
         mCallbackHandlerThread.start();
     }
 
@@ -357,7 +364,15 @@
                 Bundle msg = new Bundle();
                 msg.putBoolean("enabled", enabled);
                 mEventFacade.postEvent("WifiStateChanged", msg);
-            } else if (action.equals(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) {
+            }
+        }
+    }
+
+    public class WifiNetworkSuggestionStateChangeReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            if (action.equals(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) {
                 WifiNetworkSuggestion networkSuggestion =
                         intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_SUGGESTION);
                 mEventFacade.postEvent(
@@ -1338,6 +1353,21 @@
         }
     }
 
+    @Rpc(description = "Start listening for network suggestion change related broadcasts.")
+    public void wifiStartTrackingNetworkSuggestionStateChange() {
+        mService.registerReceiver(
+                mNetworkSuggestionStateChangeReceiver, mNetworkSuggestionStateChangeFilter);
+        mTrackingNetworkSuggestionStateChange = true;
+    }
+
+    @Rpc(description = "Stop listening for network suggestion change related broadcasts.")
+    public void wifiStopTrackingNetworkSuggestionStateChange() {
+        if (mTrackingNetworkSuggestionStateChange) {
+            mService.unregisterReceiver(mNetworkSuggestionStateChangeReceiver);
+            mTrackingNetworkSuggestionStateChange = false;
+        }
+    }
+
     @Rpc(description = "Toggle Wifi on and off.", returns = "True if Wifi is enabled.")
     public Boolean wifiToggleState(@RpcParameter(name = "enabled") @RpcOptional Boolean enabled) {
         if (enabled == null) {
