diff --git a/cmds/alivemonitor.c b/cmds/alivemonitor.c
index 4e26361..5d7205c 100644
--- a/cmds/alivemonitor.c
+++ b/cmds/alivemonitor.c
@@ -16,6 +16,9 @@
 #include <assert.h>
 #include <errno.h>
 #include <fcntl.h>
+#ifdef __ANDROID__
+#include <libgen.h>  // For basename() on Android.
+#endif
 #include <limits.h>
 #include <signal.h>
 #include <stdio.h>
diff --git a/conman/connection_manager.py b/conman/connection_manager.py
index c9a4db1..39db198 100755
--- a/conman/connection_manager.py
+++ b/conman/connection_manager.py
@@ -41,6 +41,7 @@
 HOSTNAME = socket.gethostname()
 TMP_HOSTS = '/tmp/hosts'
 CWMP_PATH = '/tmp/cwmp'
+INTERFACE_PATH = '/tmp/interface'
 
 experiment.register('WifiNo2GClient')
 
@@ -186,6 +187,9 @@
     self.wifi.set_gateway_ip(None)
     self.wifi.set_subnet(None)
     command = self.WIFI_SETCLIENT + ['--ssid', self.ssid, '--band', self.band]
+    if self.wifi.recently_reset:
+      command += ['--force-restart']
+      self.wifi.recently_reset = False
     env = dict(os.environ)
     if self.passphrase:
       env['WIFI_CLIENT_PSK'] = self.passphrase
@@ -303,6 +307,8 @@
                  pyinotify.IN_CLOSE_WRITE | pyinotify.IN_MOVED_TO)
     wm.add_watch(self._moca_tmp_dir,
                  pyinotify.IN_CLOSE_WRITE | pyinotify.IN_MOVED_TO)
+    wm.add_watch(INTERFACE_PATH,
+                 pyinotify.IN_CLOSE_WRITE | pyinotify.IN_MOVED_TO)
     self.notifier = pyinotify.Notifier(wm, FileChangeHandler(self), timeout=0)
 
     # If the ethernet file doesn't exist for any reason when conman starts,
@@ -772,6 +778,10 @@
         if had_moca != has_moca:
           self.ifplugd_action('moca0', has_moca)
 
+    elif path == INTERFACE_PATH:
+      ifc = self.interface_by_name(filename)
+      ifc.recently_reset = True
+
   def interface_by_name(self, interface_name):
     for ifc in self.interfaces():
       if ifc.name == interface_name:
diff --git a/conman/connection_manager_test.py b/conman/connection_manager_test.py
index bec59f7..17d7a92 100755
--- a/conman/connection_manager_test.py
+++ b/conman/connection_manager_test.py
@@ -260,8 +260,10 @@
         wpa_control_interface = tempfile.mkdtemp()
         subprocess.mock('wifi', 'wpa_path', wpa_control_interface)
         connection_manager.CWMP_PATH = tempfile.mkdtemp()
+        connection_manager.INTERFACE_PATH = tempfile.mkdtemp()
         subprocess.set_conman_paths(tmp_dir, config_dir,
-                                    connection_manager.CWMP_PATH)
+                                    connection_manager.CWMP_PATH,
+                                    connection_manager.INTERFACE_PATH)
 
         for band, access_point in wlan_configs.iteritems():
           subprocess.mock('cwmp', band, ssid='initial ssid', psk='initial psk',
@@ -1119,5 +1121,24 @@
   wvtest.WVPASSEQ(1, count_setclient_calls())
 
 
+@test_common.wvtest
+@connection_manager_test(WIFI_SHOW_OUTPUT_MARVELL8897)
+def test_regression_b34040473(c):
+  ssid = 'my ssid'
+  psk = 'my passphrase'
+  band = '5'
+
+  subprocess.mock('cwmp', band, ssid=ssid, psk=psk, write_now=True)
+  subprocess.mock('wifi', 'remote_ap', band=band, ssid=ssid, psk=psk,
+                  bssid='00:00:00:00:00:00')
+  c.run_once()
+  wvtest.WVPASS(c.client_up(band))
+
+  subprocess.mock('wifi', 'mwifiex_reset', c.wifi_for_band(band).name, band)
+  wvtest.WVFAIL(c.client_up(band))
+  c.run_once()
+  wvtest.WVPASS(c.client_up(band))
+
+
 if __name__ == '__main__':
   wvtest.wvtest_main()
diff --git a/conman/interface.py b/conman/interface.py
index fbef47e..7639520 100755
--- a/conman/interface.py
+++ b/conman/interface.py
@@ -427,6 +427,10 @@
   def __init__(self, *args, **kwargs):
     self.bands = kwargs.pop('bands', [])
     super(Wifi, self).__init__(*args, **kwargs)
+    # When the interface is reset (e.g. due to a firmware crash), we need to
+    # force-restart wpa_supplicant next time we run "wifi setclient", even if
+    # the config hasn't changed.
+    self.recently_reset = False
 
   @property
   def wpa_supplicant(self):
diff --git a/conman/test/fake_python/subprocess/__init__.py b/conman/test/fake_python/subprocess/__init__.py
index ff8ad0a..f0a8e7a 100644
--- a/conman/test/fake_python/subprocess/__init__.py
+++ b/conman/test/fake_python/subprocess/__init__.py
@@ -28,6 +28,7 @@
     'upload_logs_and_wait': 'upload-logs-and-wait',
     'wifi': None,
     'wpa_cli': None,
+    'hotplug': None,
 }
 _COMMANDS = {v or k: importlib.import_module('.' + k, __name__)
              for k, v in _COMMAND_NAMES.iteritems()}
@@ -116,7 +117,8 @@
       reload(command)
 
 
-def set_conman_paths(tmp_path=None, config_path=None, cwmp_path=None):
+def set_conman_paths(tmp_path=None, config_path=None, cwmp_path=None,
+                     interface_path=None):
   for command in ('run-dhclient', '/etc/ifplugd/ifplugd.action'):
     _COMMANDS[command].CONMAN_PATH = tmp_path
 
@@ -126,6 +128,9 @@
   for command in ('cwmp',):
     _COMMANDS[command].CWMP_PATH = cwmp_path
 
+  for command in ('hotplug',):
+    _COMMANDS[command].INTERFACE_PATH = interface_path
+
   # Make sure <tmp_path>/interfaces exists.
   tmp_interfaces_path = os.path.join(tmp_path, 'interfaces')
   if not os.path.exists(tmp_interfaces_path):
diff --git a/conman/test/fake_python/subprocess/hotplug.py b/conman/test/fake_python/subprocess/hotplug.py
new file mode 100644
index 0000000..99342e6
--- /dev/null
+++ b/conman/test/fake_python/subprocess/hotplug.py
@@ -0,0 +1,16 @@
+"""Fake /sbin/hotplug implemenation."""
+
+import logging
+import os
+
+logger = logging.getLogger('subprocess.hotplug')
+
+
+INTERFACE_PATH = None
+
+
+def call(unused_command, env):
+  if env['SUBSYSTEM'] == 'net' and env['ACTION'] == 'add':
+    interface = env['INTERFACE']
+    logger.debug('Simulating creation of %s', interface)
+    open(os.path.join(INTERFACE_PATH, interface), 'w')
diff --git a/conman/test/fake_python/subprocess/wifi.py b/conman/test/fake_python/subprocess/wifi.py
index 900b908..3f5cdc9 100644
--- a/conman/test/fake_python/subprocess/wifi.py
+++ b/conman/test/fake_python/subprocess/wifi.py
@@ -8,6 +8,7 @@
 
 import connection_check
 import get_quantenna_interfaces
+import hotplug
 import ifplugd_action
 import ifup
 import qcsapi
@@ -71,6 +72,7 @@
                    'vendor_ies', 'connection_check_result', 'hidden')
     for attr in self._attrs:
       setattr(self, attr, kwargs.get(attr, None))
+    self.stuck = False
 
   def scan_str(self):
     security_strs = {
@@ -136,7 +138,8 @@
 
   band = _get_flag(args, ('-b', '--band'))
   bssid = _get_flag(args, ('--bssid',))
-  ssid = _get_flag(args, ('S', '--ssid',))
+  ssid = _get_flag(args, ('-S', '--ssid',))
+  force_restart = '--force-restart' in args
 
   if band not in INTERFACE_FOR_BAND:
     raise ValueError('No interface for band %r' % band)
@@ -166,7 +169,7 @@
     return 1, 'Wrong PSK, got %r, expected %r' % (psk, ap.psk)
 
   _setclient_success(interface_name, ssid, bssid, psk, interface.driver, ap,
-                     band)
+                     band, force_restart)
 
   return 0, ''
 
@@ -197,10 +200,22 @@
   CLIENT_ASSOCIATIONS[interface_name] = None
 
 
-def _setclient_success(interface_name, ssid, bssid, psk, driver, ap, band):
-  if CLIENT_ASSOCIATIONS.get(interface_name, None):
+def _setclient_success(interface_name, ssid, bssid, psk, driver, ap, band,
+                       force_restart):
+  same_ap = False
+  current_association = CLIENT_ASSOCIATIONS.get(interface_name, None)
+  if current_association:
+    same_ap = current_association == ap
+  else:
     _disconnected_event(band)
   if driver == 'cfg80211':
+    if same_ap and not force_restart:
+      return
+
+    # Make sure the association is unstuck after a firmware reset.
+    if current_association:
+      current_association.stuck = False
+
     # Make sure the wpa_supplicant socket exists.
     open(os.path.join(WPA_PATH, interface_name), 'w')
 
@@ -264,8 +279,8 @@
 
     CLIENT_ASSOCIATIONS[interface_name] = None
 
-  # Call ifplugd.action for the interface going down (wifi/quantenna.py does this
-  # manually).
+  # Call ifplugd.action for the interface going down (wifi/quantenna.py does
+  # this manually).
   ifplugd_action.call(interface_name, 'down')
 
   return 0, ''
@@ -296,7 +311,8 @@
 
 
 def _show(unused_args, **unused_kwargs):
-  return 0, '\n\n'.join(WIFI_SHOW_TPL.format(band=band, **interface._asdict()) if interface
+  return 0, '\n\n'.join(WIFI_SHOW_TPL.format(band=band, **interface._asdict())
+                        if interface
                         else WIFI_SHOW_NO_RADIO_TPL.format(band)
                         for band, interface in INTERFACE_FOR_BAND.iteritems())
 
@@ -329,3 +345,11 @@
     _disconnected_event(args[0])
   elif command == 'kill_wpa_supplicant':
     _kill_wpa_supplicant(args[0])
+  elif command == 'mwifiex_reset':
+    interface_name, band = args[0:2]
+    print CLIENT_ASSOCIATIONS
+    association = CLIENT_ASSOCIATIONS.get(interface_name, None)
+    association.stuck = True
+    wpa_cli.mock(interface_name, wpa_state='SCANNING')
+    hotplug.call([], env={'SUBSYSTEM': 'net', 'ACTION': 'add',
+                          'INTERFACE': args[0]})
