diff --git a/src/core/cntlr_map.c b/src/core/cntlr_map.c
index d753e5cce4ebb053abd9c736574899fb9b80dece..9feb715e583dd5259f6b21ac42b4ccd260d56d56 100644
--- a/src/core/cntlr_map.c
+++ b/src/core/cntlr_map.c
@@ -143,6 +143,7 @@ int handle_ap_autoconfig_wsc(void *cntlr, struct cmdu_cstruct *rec_cmdu)
 {
 	trace("%s: --->\n", __func__);
 	struct controller *c = (struct controller *) cntlr;
+	struct agent_policy *a, *found = NULL;
 	struct tlv_default_8021q_settings *p;
 	struct tlv_traffic_sep_policy *p1;
 	struct tlv_ap_radio_identifier *p2;
@@ -154,7 +155,7 @@ int handle_ap_autoconfig_wsc(void *cntlr, struct cmdu_cstruct *rec_cmdu)
 	cmdu = (struct cmdu_cstruct *)calloc(1, sizeof(struct cmdu_cstruct));
 	if (!cmdu) {
 		fprintf(stderr, "failed to malloc cmdu\n");
-		return UBUS_STATUS_UNKNOWN_ERROR;
+		return -1;
 	}
 
 	memcpy(cmdu->origin, rec_cmdu->origin, 6);
@@ -163,7 +164,17 @@ int handle_ap_autoconfig_wsc(void *cntlr, struct cmdu_cstruct *rec_cmdu)
 	strncpy(cmdu->intf_name, rec_cmdu->intf_name,
 			sizeof(cmdu->intf_name) - 1);
 
-	p = cntlr_gen_8021q_settings(c, cmdu, rec_cmdu);
+	list_for_each_entry(a, &c->cfg.policylist, list) {
+		if (!memcmp(rec_cmdu->origin, a->agent_id, 6)) {
+			found = a;
+			break;
+		}
+	}
+
+	if (!found)
+		return -1;
+
+	p = cntlr_gen_8021q_settings(c, a);
 	if (!p)
 		goto fail_cmdu;
 	cmdu->num_tlvs++;
diff --git a/src/core/cntlr_tlv_generator.c b/src/core/cntlr_tlv_generator.c
index f5a9f9f64c8f5e67b70f4af9dd80f2694c6f347e..2c8b11c5676caf6bc4b1e027c6940b9c8751b0cc 100644
--- a/src/core/cntlr_tlv_generator.c
+++ b/src/core/cntlr_tlv_generator.c
@@ -59,20 +59,9 @@ uint8_t *extract_tlv_by_type(struct cmdu_cstruct *cmdu, uint8_t tlv_type)
 }
 
 struct tlv_default_8021q_settings *cntlr_gen_8021q_settings(struct controller *c,
-	struct cmdu_cstruct *cmdu, struct cmdu_cstruct *rec_cmdu)
+		struct agent_policy *a)
 {
 	struct tlv_default_8021q_settings *p;
-	struct agent_policy *a, *found = NULL;
-
-	list_for_each_entry(a, &c->cfg.policylist, list) {
-		if (!memcmp(rec_cmdu->origin, a->agent_id, 6)) {
-			found = a;
-			break;
-		}
-	}
-
-	if (!found)
-		return NULL;
 
 	p = (struct tlv_default_8021q_settings *) calloc(1, sizeof(*p));
 	if (!p)
diff --git a/src/core/cntlr_tlv_generator.h b/src/core/cntlr_tlv_generator.h
index 042fc98842c84db4fe2a9854e1acf7541f854ecc..d409c49100525f51d4ded99e75125654dd011ab0 100644
--- a/src/core/cntlr_tlv_generator.h
+++ b/src/core/cntlr_tlv_generator.h
@@ -11,7 +11,7 @@
 #define CNTLR_TLV_GEN_H
 
 struct tlv_default_8021q_settings *cntlr_gen_8021q_settings(struct controller *c,
-		struct cmdu_cstruct *cmdu, struct cmdu_cstruct *rec_cmdu);
+		struct agent_policy *a);
 struct tlv_traffic_sep_policy *cntlr_gen_traffic_sep_policy(struct controller *c,
 		struct cmdu_cstruct *cmdu);
 struct tlv_wsc *cntlr_gen_wsc(struct controller *c,
diff --git a/src/core/cntlr_ubus.c b/src/core/cntlr_ubus.c
index 1f98a939521f7a02555a32ad111f4c9704273d00..87a378d5238c93983e9bda710755dc60eb16f0ee 100644
--- a/src/core/cntlr_ubus.c
+++ b/src/core/cntlr_ubus.c
@@ -911,9 +911,9 @@ static int cntlr_ap_policy_config(struct ubus_context *ctx, struct ubus_object *
 
 	cmdu_data->tlvs[tlv_index++] = (uint8_t *)p2;
 
-	/* Default 802.1Q setting TLV */
 // #ifdef PROFILE2
-	p3 = cntlr_gen_8021q_settings(c, NULL, cmdu_data);
+	/* Default 802.1Q setting TLV */
+	p3 = cntlr_gen_8021q_settings(c, found);
 	if (!p3)
 		goto fail_cmdu;