diff --git a/conman/connection_manager.py b/conman/connection_manager.py
index d9ccefc..f925c26 100755
--- a/conman/connection_manager.py
+++ b/conman/connection_manager.py
@@ -272,7 +272,8 @@
         wifi_up = self.is_interface_up(wifi.name)
         self.ifplugd_action(wifi.name, wifi_up)
         if wifi_up:
-          wifi.attach_wpa_control(self._wpa_control_interface)
+          self._status.attached_to_wpa_supplicant = wifi.attach_wpa_control(
+              self._wpa_control_interface)
 
     for path, prefix in ((self._tmp_dir, self.GATEWAY_FILE_PREFIX),
                          (self._interface_status_dir, ''),
@@ -374,7 +375,8 @@
       if not wifi.attached():
         logging.debug('Attempting to attach to wpa control interface for %s',
                       wifi.name)
-        wifi.attach_wpa_control(self._wpa_control_interface)
+        self._status.attached_to_wpa_supplicant = wifi.attach_wpa_control(
+            self._wpa_control_interface)
       wifi.handle_wpa_events()
 
       # Only one wlan_configuration per interface will have access_point ==
diff --git a/conman/interface.py b/conman/interface.py
index 0f42e20..0d81b65 100755
--- a/conman/interface.py
+++ b/conman/interface.py
@@ -333,8 +333,16 @@
     return self._wpa_control and self._wpa_control.attached
 
   def attach_wpa_control(self, path):
+    """Attach to the wpa_supplicant control interface.
+
+    Args:
+      path:  The path containing the wpa_supplicant control interface socket.
+
+    Returns:
+      Whether attaching was successful.
+    """
     if self.attached():
-      return
+      return True
 
     socket = os.path.join(path, self.name)
     if os.path.exists(socket):
@@ -343,7 +351,7 @@
         self._wpa_control.attach()
       except wpactrl.error as e:
         logging.error('Error attaching to wpa_supplicant: %s', e)
-        return
+        return False
 
       for line in self._wpa_control.request('STATUS').splitlines():
         if '=' not in line:
@@ -353,6 +361,11 @@
           self.wpa_supplicant = value == 'COMPLETED'
         elif key == 'ssid' and not self._initialized:
           self.initial_ssid = value
+    else:
+      logging.error('wpa control socket does not exist: %s', socket)
+      return False
+
+    return True
 
   def get_wpa_control(self, socket):
     return wpactrl.WPACtrl(socket)
diff --git a/conman/status.py b/conman/status.py
index 1026a0b..e21dc01 100644
--- a/conman/status.py
+++ b/conman/status.py
@@ -29,6 +29,7 @@
   COULD_REACH_ACS = 'COULD_REACH_ACS'
   CAN_REACH_INTERNET = 'CAN_REACH_INTERNET'
   PROVISIONING_FAILED = 'PROVISIONING_FAILED'
+  ATTACHED_TO_WPA_SUPPLICANT = 'ATTACHED_TO_WPA_SUPPLICANT'
 
 
 # Format:  { proposition: (implications, counter-implications), ... }
@@ -66,6 +67,10 @@
         (P.HAVE_CONFIG,),
         (),
     ),
+    P.ATTACHED_TO_WPA_SUPPLICANT: (
+        (),
+        (),
+    )
 }
 
 
@@ -78,7 +83,7 @@
   def __init__(self, name, export_path):
     self._name = name
     self._export_path = export_path
-    self._value = False
+    self._value = None
     self._implications = set()
     self._counter_implications = set()
     self._impliers = set()
diff --git a/wifi/quantenna.py b/wifi/quantenna.py
index ab45b04..54b0262 100755
--- a/wifi/quantenna.py
+++ b/wifi/quantenna.py
@@ -115,6 +115,13 @@
     # 'apply_security_config' must be called instead.
     _qcsapi('apply_security_config', 'wifi0')
 
+    for _ in xrange(10):
+      if _qcsapi('get_status', 'wifi0') == 'Up':
+        break
+      time.sleep(1)
+    else:
+      raise utils.BinWifiException('wpa_supplicant failed to connect')
+
   return True
 
 
diff --git a/wifi/quantenna_test.py b/wifi/quantenna_test.py
index 12626c4..0b6975f 100755
--- a/wifi/quantenna_test.py
+++ b/wifi/quantenna_test.py
@@ -19,7 +19,9 @@
 def fake_qcsapi(*args):
   calls.append(list(args))
   if args[0] == 'is_startprod_done':
-    return '1\n' if ['startprod', 'wifi0'] in calls else '0\n'
+    return '1' if ['startprod', 'wifi0'] in calls else '0'
+  if args[0] == 'get_status':
+    return 'Up' if ['get_status', 'wifi0'] in calls else 'Down'
 
 
 bridge_interfaces = set()
