diff --git a/src/core/cntlr.c b/src/core/cntlr.c
index 8abe2db3cd5c18fbd2fa44ded1439ee268da865d..ff7519e67e5497d07fc0a87f7808f2921f8c2d6e 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)
 			uint8_t origin[6] = {0x01, 0x80, 0xc2, 0x00, 0x00, 0x13};
 
 			trace("Config changed, triggering renew!\n");
-			cmdu = cntlr_gen_ap_autoconfig_renew(c, origin, c->cfg.al_bridge, c->almac);
+			cmdu = cntlr_gen_ap_autoconfig_renew(c, origin);
 			if (cmdu) {
 				send_cmdu(c, cmdu);
 				cmdu_free(cmdu);
@@ -2221,11 +2221,15 @@ static void mapclient_subscribe_for_cmdus(struct controller *c)
 
 	trace("<----------------------------------- %s\n", __func__);
 
-	ret = ubus_lookup_id(c->ubus_ctx, map_plugin, &map_id);
-	if (ret) {
-		trace("plugin '%s' lookup failed. %s\n",
-			map_plugin, ubus_strerror(ret));
-		return;
+	for (;;) {
+		int ret;
+
+		ret = ubus_lookup_id(c->ubus_ctx, map_plugin, &map_id);
+		if (!ret)
+			break;
+
+		trace("i1905.map not up yet, sleeping for 2s!\n");
+		sleep(2);
 	}
 
 	c->map_oid = map_id;
@@ -2293,7 +2297,7 @@ int start_controller(void)
 	for (;;) {
 		int ret;
 
-		ret = ubus_lookup_id(c->ubus_ctx, map_plugin, &ieee1905_obj);
+		ret = ubus_lookup_id(c->ubus_ctx, "i1905", &ieee1905_obj);
 		if (!ret)
 			break;
 
diff --git a/src/core/cntlr_cmdu_generator.c b/src/core/cntlr_cmdu_generator.c
index fcbe352c16f370162d6726c40013cce3d75feacb..d08ad8db8227692b1621b5a83af65f2026b22346 100644
--- a/src/core/cntlr_cmdu_generator.c
+++ b/src/core/cntlr_cmdu_generator.c
@@ -83,12 +83,12 @@ struct cmdu_buff *cntlr_gen_ap_autoconfig_renew(struct controller *c,
 	if (ret)
 		goto out;
 
-	ret = cntlr_gen_al_mac(c, c->almac);
+	ret = cntlr_gen_al_mac(c, resp, c->almac);
 	if (ret)
 		goto out;
 
 	/* Hard-code dummy 5GHz, ignored by agent according to spec */
-	ret = cntlr_gen_supported_freq_band(c, IEEE80211_FREQUENCY_BAND_5_GHZ);
+	ret = cntlr_gen_supported_freq_band(c, resp, IEEE80211_FREQUENCY_BAND_5_GHZ);
 	if (ret)
 		goto out;
 
@@ -96,7 +96,7 @@ struct cmdu_buff *cntlr_gen_ap_autoconfig_renew(struct controller *c,
 	memcpy(resp->origin, dst, 6);
 	return resp;
 out:
-	cmdu_free(resp;)
+	cmdu_free(resp);
 	return NULL;
 }
 
@@ -526,7 +526,7 @@ struct cmdu_buff *cntlr_gen_ap_autoconfig_response(struct controller *c,
 	resp = cmdu_alloc_simple(CMDU_TYPE_AP_AUTOCONFIGURATION_RESPONSE, &mid);
 	if (!resp) {
 		trace("%s: -ENOMEM\n", __func__);
-		return -1;
+		return NULL;
 	}
 
 	ret = cntlr_gen_supp_role(c, resp, IEEE80211_ROLE_REGISTRAR);
@@ -571,7 +571,7 @@ struct cmdu_buff *cntlr_gen_ap_autoconfig_wsc(struct controller *c,
 	resp = cmdu_alloc_frame(3000);
 	if (!resp) {
 		trace("%s: -ENOMEM\n", __func__);
-		return -1;
+		return NULL;
 	}
 
 	cmdu_set_type(resp, CMDU_TYPE_AP_AUTOCONFIGURATION_WSC);
diff --git a/src/core/cntlr_cmdu_generator.h b/src/core/cntlr_cmdu_generator.h
index ada19b79a154600ee0f8fa1add538dcb96e682a6..02bb976502c2eb798072ac8a838dc915a65763b4 100644
--- a/src/core/cntlr_cmdu_generator.h
+++ b/src/core/cntlr_cmdu_generator.h
@@ -11,7 +11,7 @@
 #define CNTLR_CMDU_GEN_H
 
 struct cmdu_buff *cntlr_gen_ap_autoconfig_renew(struct controller *c,
-		uint8_t *origin, char *intf_name, uint8_t *almac);
+		uint8_t *dst);
 struct cmdu_buff *cntlr_gen_ap_capability_query(struct controller *c,
 		uint8_t *origin, char *intf_name);
 struct cmdu_buff *cntlr_gen_client_capability_query(struct controller *c,
diff --git a/src/core/cntlr_tlv_generator.c b/src/core/cntlr_tlv_generator.c
index 403aa8cb63dbd04ab15871d5aab52a3b4ee004a7..76860a519e012112bbc6e3642a5a1430957dfb4e 100644
--- a/src/core/cntlr_tlv_generator.c
+++ b/src/core/cntlr_tlv_generator.c
@@ -138,7 +138,7 @@ int cntlr_gen_8021q_settings(struct controller *c, struct cmdu_buff *frm,
 }
 
 int cntlr_gen_traffic_sep_policy(struct controller *c, struct cmdu_buff *frm,
-		uint8_t *band)
+		uint8_t band)
 {
 	struct tlv *t;
 	struct tlv_traffic_sep_policy *data;
@@ -392,19 +392,30 @@ struct tlv_ch_scan_rep_policy *cntlr_gen_ch_scan_rep_policy(
 //	return p;
 }
 
-struct tlv_al_mac *cntlr_gen_al_mac(struct controller *c, uint8_t *hwaddr)
+int cntlr_gen_al_mac(struct controller *c, struct cmdu_buff *frm,
+		uint8_t *hwaddr)
 {
-	return NULL;
-//	struct tlv_al_mac *p;
-//
-//	p = calloc(1, sizeof(struct tlv_al_mac));
-//	if (!p)
-//		return NULL;
-//
-//	p->tlv_type = TLV_TYPE_AL_MAC_ADDRESS_TYPE;
-//	memcpy(p->al_mac_address, hwaddr, 6);
-//
-//	return p;
+	struct tlv *t;
+	struct tlv_aladdr *data;
+
+	t = cmdu_reserve_tlv(frm, 256);
+	if (!t)
+		return -1;
+
+	t->type = TLV_TYPE_AL_MAC_ADDRESS_TYPE;
+	t->len = 6;
+
+	dbg("hwaddr " MACFMT "\n", MAC2STR(hwaddr));
+
+	data = (struct tlv_aladdr *) t->data;
+	memcpy(data->macaddr, hwaddr, 6);
+
+	if (cmdu_put_tlv(frm, t)) {
+		dbg("%s: error: cmdu_put_tlv()\n", __func__);
+		return -1;
+	}
+
+	return 0;
 }
 
 struct tlv_unsuccess_assoc_policy *cntlr_gen_unsuccess_assoc_policy(
diff --git a/src/core/cntlr_tlv_generator.h b/src/core/cntlr_tlv_generator.h
index 49acc3cce1924e3e1b9707a45224e90160f82e81..821e90a862fdeeb71e532d43bbfc2c274e879698 100644
--- a/src/core/cntlr_tlv_generator.h
+++ b/src/core/cntlr_tlv_generator.h
@@ -14,7 +14,7 @@ uint8_t *extract_tlv_by_type(struct cmdu_buff *cmdu, uint8_t tlv_type);
 int cntlr_gen_8021q_settings(struct controller *c, struct cmdu_buff *frm,
 		struct agent_policy *a);
 int cntlr_gen_traffic_sep_policy(struct controller *c, struct cmdu_buff *frm,
-		uint8_t *band);
+		uint8_t band);
 int cntlr_gen_wsc(struct controller *c, struct cmdu_buff *frm,
 		struct iface_credential *iface_cred, uint8_t *msg, uint16_t msglen,
 		uint8_t band);
@@ -40,7 +40,8 @@ struct tlv_unsuccess_assoc_policy *cntlr_gen_unsuccess_assoc_policy(
 struct tlv_backhaul_bss_config *cntlr_gen_backhaul_bss_config(
 		struct controller *c, struct agent_policy *a,
 		struct cmdu_buff *cmdu, const uint8_t *bssid);
-struct tlv_al_mac *cntlr_gen_al_mac(struct controller *c, uint8_t *hwaddr);
+int cntlr_gen_al_mac(struct controller *c, struct cmdu_buff *frm,
+		uint8_t *hwaddr);
 int cntlr_gen_supported_freq_band(struct controller *c, struct cmdu_buff *frm,
 		uint8_t freq_band);
 struct tlv_supported_role *cntlr_gen_supported_role(struct controller *c,
diff --git a/src/core/cntlr_ubus.c b/src/core/cntlr_ubus.c
index 641d08ba6dac65e0cb970538a3d0080de8c1ae92..18d5c754dc6b1292e55f387dd70e16d24e88ce7a 100644
--- a/src/core/cntlr_ubus.c
+++ b/src/core/cntlr_ubus.c
@@ -1024,7 +1024,7 @@ static int cntlr_reconfig_ap(struct ubus_context *ctx, struct ubus_object *obj,
 		return UBUS_STATUS_UNKNOWN_ERROR;
 
 	send_cmdu(c, cmdu);
-	map_free_cmdu(cmdu);
+	cmdu_free(cmdu);
 	return UBUS_STATUS_OK;
 }