diff --git a/src/agent.c b/src/agent.c
index d414b5b593c6a244ec42299725df83e3b593fa98..fc2e12c82ee3a52598049878651726b45dbe2b35 100644
--- a/src/agent.c
+++ b/src/agent.c
@@ -4477,14 +4477,16 @@ void parse_scanresults(struct ubus_request *req, int type, struct blob_attr *msg
 static void _enumerate_wifi_objects(struct ubus_request *req, int type,
 		struct blob_attr *msg)
 {
-
 	trace("%s: --->\n", __func__);
-
+	struct radio_apcfg_state {
+		char name[16];
+		enum autocfg_state state;
+	} apcfg_state[WIFI_DEVICE_MAX_NUM] = {0};
 	struct agent *a = (struct agent *)req->priv;
 	struct json_object *json_msg;
 	struct json_object *radio_array;
 	char *json_str;
-	int i, j, k, len;
+	int i, j, k, len, prev_len = 0;
 
 	json_str = blobmsg_format_json(msg, true);
 	if (!json_str)
@@ -4504,6 +4506,14 @@ static void _enumerate_wifi_objects(struct ubus_request *req, int type,
 
 	trace("%s: num_radios(len) = %d\n", __func__, len);
 	if (len) {
+		/* store current radio apcfg states */
+		for (i = 0; i < a->num_radios; i++) {
+			strncpy(apcfg_state[i].name, a->radios[i].name,
+				IFNAMSIZ - 1);
+			apcfg_state[i].state = a->radios[i].state;
+		}
+		prev_len = a->num_radios;
+		/* clears radio apcfg states */
 		agent_free_radios(a);
 		clear_fhlist(a);
 		a->num_radios = len;
@@ -4527,6 +4537,14 @@ static void _enumerate_wifi_objects(struct ubus_request *req, int type,
 		strncpy(a->ifs[i].radio, radio_name, 15);
 		strncpy(a->radios[i].name, radio_name, 15);
 
+		for (j = 0; j < prev_len; j++) {
+			/* write back apcfg state if any */
+			if (!strncmp(apcfg_state[j].name, a->radios[i].name,
+				     IFNAMSIZ - 1)) {
+				a->radios[i].state = apcfg_state[j].state;
+			}
+		}
+
 		list_for_each_entry(r_cfg, &a->cfg.radiolist, list) {
 			if (strncmp(r_cfg->name, a->radios[i].name, 15))
 				continue;
@@ -6011,6 +6029,7 @@ int wifiagent_get_status(struct ubus_context *ctx,
 		blobmsg_add_u32(&bb, "channel", re->current_channel);
 		blobmsg_add_u32(&bb, "bandwidth", re->current_bandwidth);
 		blobmsg_add_u32(&bb, "opclass", re->current_opclass);
+		blobmsg_add_u32(&bb, "autocfg_state", re->state);
 		blobmsg_close_table(&bb, t);
 	}
 	blobmsg_close_array(&bb, a);