diff --git a/client/common_lib/cros/network/shill_xmlrpc_server.py b/client/common_lib/cros/network/shill_xmlrpc_server.py
index e8b06f8..aa7a032 100755
--- a/client/common_lib/cros/network/shill_xmlrpc_server.py
+++ b/client/common_lib/cros/network/shill_xmlrpc_server.py
@@ -33,6 +33,9 @@
 
     """
 
+    DEFAULT_TEST_PROFILE_NAME = 'test'
+
+
     def __init__(self):
         self._wifi_proxy = wifi_proxy.WifiProxy()
         self._tpm_store = tpm_store.TPMStore()
@@ -143,6 +146,27 @@
         return result
 
 
+    def init_test_network_state(self):
+        """Create a clean slate for tests with respect to remembered networks.
+
+        For shill, this means popping and removing profiles before adding a
+        'test' profile.
+
+        @return True iff operation succeeded, False otherwise.
+
+        """
+        # TODO(wiley) We've not seen this problem before, but there could
+        #             still be remembered networks in the default profile.
+        #             at the very least, this profile has the ethernet
+        #             entry.
+        self.clean_profiles()
+        self.remove_profile(self.DEFAULT_TEST_PROFILE_NAME)
+        worked = self.create_profile(self.DEFAULT_TEST_PROFILE_NAME)
+        if worked:
+            worked = self.push_profile(self.DEFAULT_TEST_PROFILE_NAME)
+        return worked
+
+
     @xmlrpc_server.dbus_safe(False)
     def disconnect(self, ssid):
         """Attempt to disconnect from the given ssid.
diff --git a/server/cros/chaos_lib/chaos_base_test.py b/server/cros/chaos_lib/chaos_base_test.py
index 6482b26..e26be59 100644
--- a/server/cros/chaos_lib/chaos_base_test.py
+++ b/server/cros/chaos_lib/chaos_base_test.py
@@ -82,11 +82,7 @@
 
         """
         self.client.shill.disconnect(ap_info['ssid'])
-        self.client.shill.clean_profiles()
-        # Be extra sure that we're going to push successfully.
-        self.client.shill.remove_profile(self.TEST_PROFILE_NAME)
-        if (not self.client.shill.create_profile(self.TEST_PROFILE_NAME) or
-                not self.client.shill.push_profile(self.TEST_PROFILE_NAME)):
+        if not self.client.shill.init_test_network_state():
             return 'Failed to set up isolated test context profile.'
 
         # TODO(wiley) We probably don't always want HT40, but
diff --git a/server/cros/network/wifi_test_context_manager.py b/server/cros/network/wifi_test_context_manager.py
index 1315c0e..b0ef08d 100644
--- a/server/cros/network/wifi_test_context_manager.py
+++ b/server/cros/network/wifi_test_context_manager.py
@@ -199,13 +199,8 @@
         # services, such as OpenVPN or StrongSwan.
         server_host = hosts.SSHHost(self.server_address, port=22)
         self._server = site_linux_server.LinuxServer(server_host, {})
-        # Set up a test profile on a clean stack.
-        self.client.shill.clean_profiles()
-        # This extra remove takes care of a case where we popped the test
-        # profile in a previous test, but crashed before we removed it.
-        self.client.shill.remove_profile('test')
-        self.client.shill.create_profile('test')
-        self.client.shill.push_profile('test')
+        # Set up a clean context to conduct WiFi tests in.
+        self.client.shill.init_test_network_state()
         if self.CMDLINE_CLIENT_PACKET_CAPTURES in self._cmdline_args:
             self._enable_client_packet_captures = True
         if self.CMDLINE_ROUTER_PACKET_CAPTURES in self._cmdline_args:
diff --git a/server/cros/network/wpa_cli_proxy.py b/server/cros/network/wpa_cli_proxy.py
index 82f2957..7e0edaf 100644
--- a/server/cros/network/wpa_cli_proxy.py
+++ b/server/cros/network/wpa_cli_proxy.py
@@ -159,6 +159,18 @@
         logging.info('Skipping remove_profile on %s', self.__class__.__name__)
 
 
+    def init_test_network_state(self):
+        """Create a clean slate for tests with respect to remembered networks.
+
+        For wpa_cli hosts, this means removing all remembered networks.
+
+        @return True iff operation succeeded, False otherwise.
+
+        """
+        self.clean_profiles()
+        return True
+
+
     def connect_wifi(self, assoc_params):
         """
         Connect to the WiFi network described by AssociationParameters.
@@ -245,6 +257,7 @@
             return assoc_result.serialize()
 
         assoc_result.success = True
+        logging.info('Connected to %s', assoc_params.ssid)
         return assoc_result.serialize()
 
 
@@ -256,8 +269,11 @@
 
         """
         logging.debug('disconnect()')
+        if ssid not in self._created_networks:
+            return False
         self._run_wpa_cli_cmd('disable_network %d' %
                               self._created_networks[ssid])
+        return True
 
 
     def sync_time_to(self, epoch_seconds):
