diff --git a/libwifi_hal/wifi_hal_common.cpp b/libwifi_hal/wifi_hal_common.cpp
index 5c956f2..93d6002 100644
--- a/libwifi_hal/wifi_hal_common.cpp
+++ b/libwifi_hal/wifi_hal_common.cpp
@@ -25,6 +25,7 @@
 #include <cutils/misc.h>
 #include <cutils/properties.h>
 #include <sys/syscall.h>
+#include <android-base/properties.h>
 
 extern "C" int init_module(void *, unsigned long, const char *);
 extern "C" int delete_module(const char *, unsigned int);
@@ -58,7 +59,7 @@
 #endif
 
 static int insmod(const char *filename, const char *args) {
-  int ret;
+  int ret = 0;
   int fd;
 
   fd = TEMP_FAILURE_RETRY(open(filename, O_RDONLY | O_CLOEXEC | O_NOFOLLOW));
@@ -67,13 +68,13 @@
     return -1;
   }
 
-  ret = syscall(__NR_finit_module, fd, args, 0);
-
-  close(fd);
-  if (ret < 0) {
+  if (syscall(__NR_finit_module, fd, args, 0) < 0) {
+    ret = -errno;
     PLOG(ERROR) << "finit_module return: " << ret;
   }
 
+  close(fd);
+
   return ret;
 }
 
@@ -81,6 +82,12 @@
   int ret = -1;
   int maxtry = 10;
 
+  std::string powerCtl = android::base::GetProperty("sys.powerctl", "");
+  if (!powerCtl.empty()) {
+    PLOG(ERROR) << powerCtl<<" :skipping rmmod";
+    return ret;
+  }
+
   while (maxtry-- > 0) {
     ret = delete_module(modname, O_NONBLOCK | O_EXCL);
     if (ret < 0 && errno == EAGAIN)
@@ -183,7 +190,25 @@
     return 0;
   }
 
-  if (insmod(DRIVER_MODULE_PATH, DRIVER_MODULE_ARG) < 0) return -1;
+  /*
+   * Sometimes the wifi HAL can get into a state where the module is already
+   * loaded in a broken state and the wifi HAL isn't aware of this. In this
+   * case try unloading and reloading the kernel module.
+   */
+  int err = insmod(DRIVER_MODULE_PATH, DRIVER_MODULE_ARG);
+  if (err == -EEXIST) {
+    if (rmmod(DRIVER_MODULE_NAME) != 0) {
+      LOG(ERROR) << "After module load failure tried rmmod but failed.";
+      return -1;
+    }
+    if (insmod(DRIVER_MODULE_PATH, DRIVER_MODULE_ARG) < 0) {
+      LOG(ERROR) << "After module load failure tried rmmod and insmod but failed.";
+      return -1;
+    }
+    LOG(INFO) << "After module load failure tried rmmod and insmod and succeeded.";
+  } else if (err < 0) {
+    return -1;
+  }
 #endif
 
 #ifdef WIFI_DRIVER_STATE_CTRL_PARAM
diff --git a/libwifi_system/hostapd_manager.cpp b/libwifi_system/hostapd_manager.cpp
index 3f2e27f..7ce971e 100644
--- a/libwifi_system/hostapd_manager.cpp
+++ b/libwifi_system/hostapd_manager.cpp
@@ -22,8 +22,19 @@
 namespace android {
 namespace wifi_system {
 const char kHostapdServiceName[] = "hostapd";
+const char kHostapdFullServiceName[] = "init.svc.hostapd";
 
 bool HostapdManager::StartHostapd() {
+
+  // Check if hostapd already started
+  char hostapd_status[PROPERTY_VALUE_MAX];
+  property_get(kHostapdFullServiceName, hostapd_status, "");
+
+  if (strcmp(hostapd_status, "running") == 0) {
+    LOG(DEBUG) << "SoftAP already started. Skip another start";
+    return true;
+  }
+
   if (property_set("ctl.start", kHostapdServiceName) != 0) {
     LOG(ERROR) << "Failed to start SoftAP";
     return false;
@@ -36,6 +47,15 @@
 bool HostapdManager::StopHostapd() {
   LOG(DEBUG) << "Stopping the SoftAP service...";
 
+  // Check if hostapd already stopped
+  char hostapd_status[PROPERTY_VALUE_MAX];
+  property_get(kHostapdFullServiceName, hostapd_status, "");
+
+  if (!strlen(hostapd_status) || strcmp(hostapd_status, "stopped") == 0) {
+    LOG(DEBUG) << "SoftAP already stopped. Skip another stop";
+    return true;
+  }
+
   if (property_set("ctl.stop", kHostapdServiceName) < 0) {
     LOG(ERROR) << "Failed to stop hostapd service!";
     return false;
diff --git a/libwifi_system/supplicant_manager.cpp b/libwifi_system/supplicant_manager.cpp
index 60720d4..33f7649 100644
--- a/libwifi_system/supplicant_manager.cpp
+++ b/libwifi_system/supplicant_manager.cpp
@@ -34,6 +34,7 @@
 
 const char kSupplicantInitProperty[] = "init.svc.wpa_supplicant";
 const char kSupplicantServiceName[] = "wpa_supplicant";
+const char kMigrationServiceName[] = "vendor.move_wifi_data";
 
 }  // namespace
 
@@ -61,6 +62,7 @@
     serial = __system_property_serial(pi);
   }
 
+  property_set("ctl.start", kMigrationServiceName);
   property_set("ctl.start", kSupplicantServiceName);
   sched_yield();
 
@@ -97,6 +99,7 @@
     return true;
   }
 
+  property_set("ctl.stop", kMigrationServiceName);
   property_set("ctl.stop", kSupplicantServiceName);
   sched_yield();
 
