diff --git a/src/lynq/lib/liblynq-wifi6/libwifi6.c b/src/lynq/lib/liblynq-wifi6/libwifi6.c
index 102d130..07beaf7 100755
--- a/src/lynq/lib/liblynq-wifi6/libwifi6.c
+++ b/src/lynq/lib/liblynq-wifi6/libwifi6.c
@@ -128,6 +128,7 @@
     char msg_notify[MAX_RET];
 
     struct wpa_ctrl *lynq_wpa_ctrl = NULL;
+    g_ap_watcher_stop_flag = 0;
 
     while (g_ap_watcher_stop_flag == 0) {
         if (lynq_wpa_ctrl == NULL) {
@@ -161,8 +162,10 @@
             }
         } // end if (!wpa_ctrl_recv(lynq_wpa_ctrl, msg_notify, &len))
     } // end while (g_ap_watcher_stop_flag == 0)
-    wpa_ctrl_detach(lynq_wpa_ctrl);
-    wpa_ctrl_close(lynq_wpa_ctrl);
+    if (lynq_wpa_ctrl != NULL) {
+        wpa_ctrl_detach(lynq_wpa_ctrl);
+        wpa_ctrl_close(lynq_wpa_ctrl);
+    }
 }
 
 static void STAWatcherThreadProc() {
@@ -172,6 +175,7 @@
     error_number_s error;
 
     struct wpa_ctrl *lynq_wpa_ctrl = NULL;
+    g_sta_watcher_stop_flag = 0;
 
     while (g_sta_watcher_stop_flag == 0) {
         if (lynq_wpa_ctrl == NULL) {
@@ -212,10 +216,10 @@
                 pReason = strstr(msg_notify, "reason=");
                 if (pReason != NULL) {
                     pReason += strlen("reason=");
-                    if (memcpy(pReason, "CONN_FAILED", 11) == 0) {
+                    if (memcmp(pReason, "CONN_FAILED", 11) == 0) {
                         error = LYNQ_TIME_OUT;
                     }
-                    else if (memcpy(pReason, "WRONG_KEY", 9) == 0) {
+                    else if (memcmp(pReason, "WRONG_KEY", 9) == 0) {
                         error = LYNQ_PSW_ERROR;
                     }
                     g_sta_callback_func(g_ap_callback_priv, LYNQ_WIFI_STA_STATUS_DISCONNECT, error);
@@ -229,8 +233,10 @@
             }
         }
     }
-    wpa_ctrl_detach(lynq_wpa_ctrl);
-    wpa_ctrl_close(lynq_wpa_ctrl);
+    if (lynq_wpa_ctrl != NULL) {
+        wpa_ctrl_detach(lynq_wpa_ctrl);
+        wpa_ctrl_close(lynq_wpa_ctrl);
+    }
 }
 
 int lynq_wifi_enable(void)
@@ -948,7 +954,7 @@
         return -1;
     }
 
-    if (0 == lynq_wifi_ap_auth_get(idx, &org_auth)) {
+    if (0 == lynq_wifi_ap_auth_get(idx, &org_auth) && org_auth != -1) {
         if (org_auth == auth) {
             return 0;
         }
@@ -973,6 +979,7 @@
 		case LYNQ_WIFI_AUTH_OPEN:
         {
             sprintf(lynq_auth_cmd,"SET_NETWORK %d key_mgmt NONE", AP_NETWORK_0);
+            sprintf(lynq_pairwise_cmd,"SET_NETWORK %d pairwise NONE", AP_NETWORK_0);
 
             DO_OK_FAIL_REQUEST(lynq_auth_cmd);
 			break;
@@ -980,6 +987,7 @@
         case LYNQ_WIFI_AUTH_WEP:
         {
             sprintf(lynq_auth_cmd,"SET_NETWORK %d key_mgmt NONE", AP_NETWORK_0);
+            sprintf(lynq_pairwise_cmd,"SET_NETWORK %d pairwise NONE", AP_NETWORK_0);
             sprintf(lynq_auth_alg_cmd,"SET_NETWORK %d auth_alg  SHARED", AP_NETWORK_0);
 
             DO_OK_FAIL_REQUEST(lynq_auth_cmd);
@@ -1040,9 +1048,9 @@
             *auth = LYNQ_WIFI_AUTH_OPEN;
         }
     }
-    else {
+    else if(strcmp( lynq_auth_str, "WPA-PSK") == 0 ) {
         if (inner_get_param(CTRL_AP, AP_NETWORK_0, "proto", lynq_proto_str) != 0) {
-            *auth = LYNQ_WIFI_AUTH_WPA_PSK;
+            *auth = -1;
         }
         else if (memcmp(lynq_proto_str, "RSN", 3) == 0) {
             *auth = LYNQ_WIFI_AUTH_WPA2_PSK;
@@ -1051,6 +1059,9 @@
             *auth = LYNQ_WIFI_AUTH_WPA_PSK;
         }
     }
+    else {
+        *auth = -1;
+    }
 
     return 0;
 }
