diff --git a/src/core/cntlr.c b/src/core/cntlr.c
index ed683c94d90183f82bc62eac45717515cd74fac1..2cbc887f7073201e10f0814fa95621c6300671b5 100644
--- a/src/core/cntlr.c
+++ b/src/core/cntlr.c
@@ -1999,7 +1999,7 @@ static void cntlr_signal_periodic_run(struct uloop_timeout *t)
 			}
 		} else if (diff & (CONFIG_DIFF_AGENT_POLICY | CONFIG_DIFF_AGENT_POLICY_CNT)) {
 			struct agent_policy *p;
-			struct cmdu_cstruct *cmdu;
+			struct cmdu_buff *cmdu;
 			int num_radio = 1;
 			int num_bk = 1;
 
@@ -2027,7 +2027,7 @@ static void cntlr_signal_periodic_run(struct uloop_timeout *t)
 						num_radio, radio_id, num_bk, bk_id);
 				if (cmdu) {
 					send_cmdu(c, cmdu);
-					map_free_cmdu(cmdu);
+					cmdu_free(cmdu);
 				}
 
 				/* reset is_policy_diff to false; */
diff --git a/src/core/cntlr_cmdu_generator.c b/src/core/cntlr_cmdu_generator.c
index d790b7386c396e48660bbe96945e4896cc197e19..db4441a878fdb85a4fdbc055a373d12f5fb50bbf 100644
--- a/src/core/cntlr_cmdu_generator.c
+++ b/src/core/cntlr_cmdu_generator.c
@@ -667,25 +667,26 @@ out:
 	return NULL;
 }
 
-struct cmdu_cstruct *cntlr_gen_topology_query(struct controller *c,
+struct cmdu_buff *cntlr_gen_topology_query(struct controller *c,
 					      uint8_t *origin, char *intf_name)
 {
-	struct cmdu_cstruct *cmdu;
-
-	cmdu = calloc(1, sizeof(struct cmdu_cstruct));
-	if (!cmdu) {
-		fprintf(stderr, "failed to malloc cmdu\n");
-		return NULL;
-	}
-
-	cmdu_defaults(c, cmdu, origin, intf_name, CMDU_TYPE_TOPOLOGY_QUERY);
-
-	cmdu->num_tlvs = 0;
-
-	return cmdu;
-
-fail_cmdu:
-	map_free_cmdu(cmdu);
 	return NULL;
+//	struct cmdu_cstruct *cmdu;
+//
+//	cmdu = calloc(1, sizeof(struct cmdu_cstruct));
+//	if (!cmdu) {
+//		fprintf(stderr, "failed to malloc cmdu\n");
+//		return NULL;
+//	}
+//
+//	cmdu_defaults(c, cmdu, origin, intf_name, CMDU_TYPE_TOPOLOGY_QUERY);
+//
+//	cmdu->num_tlvs = 0;
+//
+//	return cmdu;
+//
+//fail_cmdu:
+//	map_free_cmdu(cmdu);
+//	return NULL;
 }
 
diff --git a/src/core/cntlr_map.c b/src/core/cntlr_map.c
index 710c01c95498307c48ec4cf5ba6432d4e6018e0e..9125f87ff1e67c236edfcdfda7e8d27d68df44ef 100644
--- a/src/core/cntlr_map.c
+++ b/src/core/cntlr_map.c
@@ -251,6 +251,20 @@ int handle_ap_autoconfig_search(void *cntlr, struct cmdu_buff *rec_cmdu)
 		}
 	}
 
+
+
+	if (c->state == CNTLR_INIT) {
+		trace("Disable and exit\n");
+		set_value_by_string("mapcontroller", "controller", "enabled", "0",
+				UCI_TYPE_STRING);
+		exit(0);
+	} else {
+		char data[128] = {0};
+
+		snprintf(data, sizeof(data), "{\"type\":\"error\", \"reason\":\"multiple controllers\", \"almac\":\""MACFMT"\"}", MAC2STR(rec_cmdu->origin));
+		cntlr_notify_event(c, "map.controller", data);
+	}
+
 	/* TODO: don't answer if searched service does not include controller */
 
 	trace("%s: sending autoconfig response for band = %d\n",
@@ -262,13 +276,6 @@ int handle_ap_autoconfig_search(void *cntlr, struct cmdu_buff *rec_cmdu)
 		return -1;
 
 
-	if (c->state == CNTLR_INIT) {
-		trace("Disable and exit\n");
-		set_value_by_string("mapcontroller", "controller", "enabled", "0",
-				UCI_TYPE_STRING);
-		exit(0);
-	} else {
-		char data[128] = {0};
 	ret = send_cmdu(c, cmdu);
 
 	cmdu_free(cmdu);
diff --git a/src/core/cntlr_map_debug.c b/src/core/cntlr_map_debug.c
index b4e589661533804db5af44750c148fbb98d8259c..50a8d217303356bb2357780a3fa3470a547a6471 100644
--- a/src/core/cntlr_map_debug.c
+++ b/src/core/cntlr_map_debug.c
@@ -43,174 +43,175 @@ int debug_topology_notification(void *cntlr, struct cmdu_buff *cmdu)
 
 int debug_topology_response(void *cntlr, struct cmdu_buff *cmdu)
 {
-	uint8_t *tlv;
-	int i, j, k;
-
-	trace("%s: --->\n", __func__);
-	trace("parsing topology response |" MACFMT "|CMDU: %s\n",
-			MAC2STR(cmdu->origin),
-			map_stringify_cmdu_type(cmdu->message_type));
-
-	for (i = 0; i < cmdu->num_tlvs; i++) {
-		tlv = (uint8_t *)cmdu->tlvs[i];
-		trace("TLV: %s\n", map_stringify_tlv_type(*tlv));
-		switch (*tlv) {
-		case TLV_TYPE_DEVICE_INFORMATION_TYPE:
-			{
-				struct tlv_device_info *p =
-					(struct tlv_device_info *)tlv;
-
-				trace("\tal_mac_address: " MACFMT "\n",
-				      MAC2STR(p->al_mac_address));
-				trace("\tlocal_interfaces_nr: %d\n",
-				      p->local_interfaces_nr);
-				for (j = 0; j < p->local_interfaces_nr; j++) {
-					trace("\t\tmac_address: " MACFMT "\n",
-					      MAC2STR(p->local_interfaces[j].mac_address));
-					trace("\t\tmedia_type: 0x%04hx\n",
-					      p->local_interfaces[j].media_type);
-					trace("\t\tmedia_specific_data_size: %d\n",
-					      p->local_interfaces[j].media_specific_data_size);
-					if ((p->local_interfaces[j].media_type & 0xff00) == 0x0100) {
-						/* IEEE 802.11 devices */
-						trace("\t\tnetwork_membership: " MACFMT "\n",
-						      MAC2STR(p->local_interfaces[j].media_specific_data.ieee80211.network_membership));
-						trace("\t\trole: ");
-						print_bits(p->local_interfaces[j].media_specific_data.ieee80211.role,
-							   4, 4);
-						trace("\t\tap_channel_band: 0x%02hx\n",
-						      p->local_interfaces[j].media_specific_data.ieee80211.ap_channel_band);
-						trace("\t\tap_ch_freq_1: 0x%02hx\n",
-						      p->local_interfaces[j].media_specific_data.ieee80211.ap_ch_freq_1);
-						trace("\t\tap_ch_freq_2: 0x%02hx\n",
-						      p->local_interfaces[j].media_specific_data.ieee80211.ap_ch_freq_2);
-					}
-				}
-				break;
-			}
-		case TLV_TYPE_DEVICE_BRIDGING_CAPABILITIES:
-			{
-				struct tlv_device_bridge_cap *p =
-					(struct tlv_device_bridge_cap *)tlv;
-
-				trace("\tbridging_tuples_nr: %d\n",
-				      p->bridging_tuples_nr);
-				for (j = 0; j < p->bridging_tuples_nr; j++) {
-					trace("\t\tbridging_tuple_macs_nr: %d\n",
-					      p->bridging_tuples[j].bridging_tuple_macs_nr);
-					for (k = 0; k < p->bridging_tuples[j].bridging_tuple_macs_nr; k++) {
-						trace("\t\t\tmac_address: " MACFMT "\n",
-						      MAC2STR(p->bridging_tuples[j].bridging_tuple_macs[k].mac_address));
-					}
-				}
-				break;
-			}
-		case TLV_TYPE_NON_1905_NEIGHBOR_DEVICE_LIST:
-			{
-				struct tlv_non1905_neighbor *p =
-					(struct tlv_non1905_neighbor *)tlv;
-
-				trace("\tlocal_mac_address: " MACFMT "\n",
-				      MAC2STR(p->local_mac_address));
-				trace("\tnon_1905_neighbors_nr: %d\n",
-				      p->non_1905_neighbors_nr);
-				for (j = 0; j < p->non_1905_neighbors_nr; j++) {
-					trace("\t\tmac_address: " MACFMT "\n",
-					      MAC2STR(p->non_1905_neighbors[j].mac_address));
-				}
-				break;
-			}
-		case TLV_TYPE_NEIGHBOR_DEVICE_LIST:
-			{
-				struct tlv_neighbor_device *p =
-					(struct tlv_neighbor_device *)tlv;
-
-				trace("\tlocal_mac_address: " MACFMT "\n",
-				      MAC2STR(p->local_mac_address));
-				trace("\tneighbors_nr: %d\n",
-				      p->neighbors_nr);
-				for (j = 0; j < p->neighbors_nr; j++) {
-					trace("\t\tmac_address: " MACFMT "\n",
-					      MAC2STR(p->neighbors[j].mac_address));
-					trace("\t\tbridge_flag: %s\n",
-					      (p->neighbors[j].bridge_flag ? "true" : "false"));
-				}
-				break;
-			}
-		case MAP_TLV_SUPPORTED_SERVICE:
-			{
-				struct tlv_supp_service *p =
-					(struct tlv_supp_service *)tlv;
-
-				trace("\tsupported_services_list: %d\n",
-				      p->supported_services_list);
-				for (j = 0; j < p->supported_services_list; j++) {
-					trace("\t\tservice: %s\n",
-					      (p->supported_services[j].service ?
-					       "Multi-AP Agent" : "Multi-AP Controller"));
-				}
-				break;
-			}
-		case MAP_TLV_AP_OPERATIONAL_BSS:
-			{
-				struct tlv_ap_oper_bss *p =
-					(struct tlv_ap_oper_bss *)tlv;
-
-				trace("\tradios_nr: %d\n", p->radios_nr);
-				for (j = 0; j < p->radios_nr; j++) {
-					trace("\t\tradio_id: " MACFMT "\n",
-					      MAC2STR(p->radio[j].radio_id));
-					trace("\t\tbss_nr: %d\n",
-					      p->radio[j].bss_nr);
-					for (k = 0; k < p->radio[j].bss_nr; k++) {
-						trace("\t\t\tbssid: " MACFMT "\n",
-						      MAC2STR(p->radio[j].bss[k].bssid));
-						trace("\t\t\tssid_len: %d\n",
-						      p->radio[j].bss[k].ssid_len);
-						trace("\t\t\tssid: %.*s\n",
-						      p->radio[j].bss[k].ssid_len,
-						      p->radio[j].bss[k].ssid);
-					}
-				}
-				break;
-			}
-		case MAP_TLV_ASSOCIATED_CLIENTS:
-			{
-				struct tlv_assoc_client *p =
-					(struct tlv_assoc_client *)tlv;
-
-				trace("\tbss_nr: %d\n", p->bss_nr);
-				for (j = 0; j < p->bss_nr; j++) {
-					trace("\t\tbssid: " MACFMT "\n",
-					      MAC2STR(p->bss[j].bssid));
-					trace("\t\tassoc_clients_nr: %d\n",
-					      p->bss[j].assoc_clients_nr);
-					for (k = 0; k < p->bss[j].assoc_clients_nr; k++) {
-						trace("\t\t\tclient_addr: " MACFMT "\n",
-						      MAC2STR(p->bss[j].clients[k].client_addr));
-						trace("\t\t\tuptime: 0x%04x\n",
-						      p->bss[j].clients[k].uptime);
-					}
-				}
-				break;
-			}
-		case MAP_TLV_MULTIAP_PROFILE:
-			{
-				struct tlv_map_profile *p =
-					(struct tlv_map_profile *)tlv;
-
-				trace("\tprofile: 0x%02hx\n", p->profile);
-				break;
-			}
-		default:
-			{
-				trace("unknown TLV\n");
-				break;
-			}
-		}
-		trace("\n");
-	}
 	return 0;
+//	uint8_t *tlv;
+//	int i, j, k;
+//
+//	trace("%s: --->\n", __func__);
+//	trace("parsing topology response |" MACFMT "|CMDU: %s\n",
+//			MAC2STR(cmdu->origin),
+//			map_stringify_cmdu_type(cmdu->message_type));
+//
+//	for (i = 0; i < cmdu->num_tlvs; i++) {
+//		tlv = (uint8_t *)cmdu->tlvs[i];
+//		trace("TLV: %s\n", map_stringify_tlv_type(*tlv));
+//		switch (*tlv) {
+//		case TLV_TYPE_DEVICE_INFORMATION_TYPE:
+//			{
+//				struct tlv_device_info *p =
+//					(struct tlv_device_info *)tlv;
+//
+//				trace("\tal_mac_address: " MACFMT "\n",
+//				      MAC2STR(p->al_mac_address));
+//				trace("\tlocal_interfaces_nr: %d\n",
+//				      p->local_interfaces_nr);
+//				for (j = 0; j < p->local_interfaces_nr; j++) {
+//					trace("\t\tmac_address: " MACFMT "\n",
+//					      MAC2STR(p->local_interfaces[j].mac_address));
+//					trace("\t\tmedia_type: 0x%04hx\n",
+//					      p->local_interfaces[j].media_type);
+//					trace("\t\tmedia_specific_data_size: %d\n",
+//					      p->local_interfaces[j].media_specific_data_size);
+//					if ((p->local_interfaces[j].media_type & 0xff00) == 0x0100) {
+//						/* IEEE 802.11 devices */
+//						trace("\t\tnetwork_membership: " MACFMT "\n",
+//						      MAC2STR(p->local_interfaces[j].media_specific_data.ieee80211.network_membership));
+//						trace("\t\trole: ");
+//						print_bits(p->local_interfaces[j].media_specific_data.ieee80211.role,
+//							   4, 4);
+//						trace("\t\tap_channel_band: 0x%02hx\n",
+//						      p->local_interfaces[j].media_specific_data.ieee80211.ap_channel_band);
+//						trace("\t\tap_ch_freq_1: 0x%02hx\n",
+//						      p->local_interfaces[j].media_specific_data.ieee80211.ap_ch_freq_1);
+//						trace("\t\tap_ch_freq_2: 0x%02hx\n",
+//						      p->local_interfaces[j].media_specific_data.ieee80211.ap_ch_freq_2);
+//					}
+//				}
+//				break;
+//			}
+//		case TLV_TYPE_DEVICE_BRIDGING_CAPABILITIES:
+//			{
+//				struct tlv_device_bridge_cap *p =
+//					(struct tlv_device_bridge_cap *)tlv;
+//
+//				trace("\tbridging_tuples_nr: %d\n",
+//				      p->bridging_tuples_nr);
+//				for (j = 0; j < p->bridging_tuples_nr; j++) {
+//					trace("\t\tbridging_tuple_macs_nr: %d\n",
+//					      p->bridging_tuples[j].bridging_tuple_macs_nr);
+//					for (k = 0; k < p->bridging_tuples[j].bridging_tuple_macs_nr; k++) {
+//						trace("\t\t\tmac_address: " MACFMT "\n",
+//						      MAC2STR(p->bridging_tuples[j].bridging_tuple_macs[k].mac_address));
+//					}
+//				}
+//				break;
+//			}
+//		case TLV_TYPE_NON_1905_NEIGHBOR_DEVICE_LIST:
+//			{
+//				struct tlv_non1905_neighbor *p =
+//					(struct tlv_non1905_neighbor *)tlv;
+//
+//				trace("\tlocal_mac_address: " MACFMT "\n",
+//				      MAC2STR(p->local_mac_address));
+//				trace("\tnon_1905_neighbors_nr: %d\n",
+//				      p->non_1905_neighbors_nr);
+//				for (j = 0; j < p->non_1905_neighbors_nr; j++) {
+//					trace("\t\tmac_address: " MACFMT "\n",
+//					      MAC2STR(p->non_1905_neighbors[j].mac_address));
+//				}
+//				break;
+//			}
+//		case TLV_TYPE_NEIGHBOR_DEVICE_LIST:
+//			{
+//				struct tlv_neighbor_device *p =
+//					(struct tlv_neighbor_device *)tlv;
+//
+//				trace("\tlocal_mac_address: " MACFMT "\n",
+//				      MAC2STR(p->local_mac_address));
+//				trace("\tneighbors_nr: %d\n",
+//				      p->neighbors_nr);
+//				for (j = 0; j < p->neighbors_nr; j++) {
+//					trace("\t\tmac_address: " MACFMT "\n",
+//					      MAC2STR(p->neighbors[j].mac_address));
+//					trace("\t\tbridge_flag: %s\n",
+//					      (p->neighbors[j].bridge_flag ? "true" : "false"));
+//				}
+//				break;
+//			}
+//		case MAP_TLV_SUPPORTED_SERVICE:
+//			{
+//				struct tlv_supp_service *p =
+//					(struct tlv_supp_service *)tlv;
+//
+//				trace("\tsupported_services_list: %d\n",
+//				      p->supported_services_list);
+//				for (j = 0; j < p->supported_services_list; j++) {
+//					trace("\t\tservice: %s\n",
+//					      (p->supported_services[j].service ?
+//					       "Multi-AP Agent" : "Multi-AP Controller"));
+//				}
+//				break;
+//			}
+//		case MAP_TLV_AP_OPERATIONAL_BSS:
+//			{
+//				struct tlv_ap_oper_bss *p =
+//					(struct tlv_ap_oper_bss *)tlv;
+//
+//				trace("\tradios_nr: %d\n", p->radios_nr);
+//				for (j = 0; j < p->radios_nr; j++) {
+//					trace("\t\tradio_id: " MACFMT "\n",
+//					      MAC2STR(p->radio[j].radio_id));
+//					trace("\t\tbss_nr: %d\n",
+//					      p->radio[j].bss_nr);
+//					for (k = 0; k < p->radio[j].bss_nr; k++) {
+//						trace("\t\t\tbssid: " MACFMT "\n",
+//						      MAC2STR(p->radio[j].bss[k].bssid));
+//						trace("\t\t\tssid_len: %d\n",
+//						      p->radio[j].bss[k].ssid_len);
+//						trace("\t\t\tssid: %.*s\n",
+//						      p->radio[j].bss[k].ssid_len,
+//						      p->radio[j].bss[k].ssid);
+//					}
+//				}
+//				break;
+//			}
+//		case MAP_TLV_ASSOCIATED_CLIENTS:
+//			{
+//				struct tlv_assoc_client *p =
+//					(struct tlv_assoc_client *)tlv;
+//
+//				trace("\tbss_nr: %d\n", p->bss_nr);
+//				for (j = 0; j < p->bss_nr; j++) {
+//					trace("\t\tbssid: " MACFMT "\n",
+//					      MAC2STR(p->bss[j].bssid));
+//					trace("\t\tassoc_clients_nr: %d\n",
+//					      p->bss[j].assoc_clients_nr);
+//					for (k = 0; k < p->bss[j].assoc_clients_nr; k++) {
+//						trace("\t\t\tclient_addr: " MACFMT "\n",
+//						      MAC2STR(p->bss[j].clients[k].client_addr));
+//						trace("\t\t\tuptime: 0x%04x\n",
+//						      p->bss[j].clients[k].uptime);
+//					}
+//				}
+//				break;
+//			}
+//		case MAP_TLV_MULTIAP_PROFILE:
+//			{
+//				struct tlv_map_profile *p =
+//					(struct tlv_map_profile *)tlv;
+//
+//				trace("\tprofile: 0x%02hx\n", p->profile);
+//				break;
+//			}
+//		default:
+//			{
+//				trace("unknown TLV\n");
+//				break;
+//			}
+//		}
+//		trace("\n");
+//	}
+//	return 0;
 }
 
 int debug_ap_autoconfig_search(void *cntlr, struct cmdu_buff *cmdu)
diff --git a/src/core/cntlr_ubus.c b/src/core/cntlr_ubus.c
index a4717f4001b39a6acd30c341f22c48ac92316c03..a0e0b559748684a799633e4a641f08ab68ba553e 100644
--- a/src/core/cntlr_ubus.c
+++ b/src/core/cntlr_ubus.c
@@ -1670,7 +1670,7 @@ static int cntlr_topology_query(struct ubus_context *ctx, struct ubus_object *ob
 		return UBUS_STATUS_UNKNOWN_ERROR;
 
 	send_cmdu(c, cmdu_data);
-	map_free_cmdu(cmdu_data);
+	cmdu_free(cmdu_data);
 
 	return UBUS_STATUS_OK;
 }