diff --git a/src/core/cntlr_cmdu_generator.c b/src/core/cntlr_cmdu_generator.c
index a3c608425b7ba4ce0848e25cbaa02b81b8b40a70..0fbcaee7d3066ea5725a64d56e9aba2742cba098 100644
--- a/src/core/cntlr_cmdu_generator.c
+++ b/src/core/cntlr_cmdu_generator.c
@@ -175,7 +175,7 @@ struct cmdu_buff *cntlr_gen_client_capability_query(struct controller *c,
 }
 
 struct cmdu_buff *cntlr_gen_backhaul_steer_request(struct controller *c,
-		uint8_t *origin, uint8_t *macaddr, uint8_t *target_bssid,
+		uint8_t *origin, uint8_t *bkhaul, uint8_t *target_bssid,
 		uint8_t op_class, uint8_t channel)
 {
 	int ret;
@@ -184,19 +184,19 @@ struct cmdu_buff *cntlr_gen_backhaul_steer_request(struct controller *c,
 	resp = cmdu_alloc_frame(1500);
 	if (!resp) {
 		trace("%s: -ENOMEM\n", __func__);
-		return -1;
+		return NULL;
 	}
 
 	cmdu_set_type(resp, CMDU_BACKHAUL_STEER_REQUEST);
 
-	ret = cntlr_gen_backhaul_steer_req(c, resp, macaddr, target_bssid, op_class,
+	ret = cntlr_gen_backhaul_steer_req(c, resp, bkhaul, target_bssid, op_class,
 						channel);
 	if (ret)
-		return -1;
+		return NULL;
 
 	memcpy(resp->origin, origin, 6);
 	cmdu_put_eom(resp);
-	return 0;
+	return resp;
 }
 
 struct cmdu_buff *cntlr_gen_ap_metrics_query(struct controller *c,
diff --git a/src/core/cntlr_map.c b/src/core/cntlr_map.c
index 42943f66395f71e72298f2fc249594dcf4e214ae..96065cc66301a10de8726be3c3df4fd0c0ad67d4 100644
--- a/src/core/cntlr_map.c
+++ b/src/core/cntlr_map.c
@@ -202,7 +202,7 @@ int handle_ap_autoconfig_search(void *cntlr, struct cmdu_buff *rec_cmdu)
 			|| !tv[5][0])
 		return -1;
 
-	memcpy(aladdr_origin, tv[0][0]->data, tlv_length(tv[0][0]));
+	memcpy(aladdr_origin, tv[0][0]->data, 6);
 	if (hwaddr_is_zero(aladdr_origin)) {
 		trace("%s: Discard ap-autoconfig search from aladdr = 0!\n",
 			__func__);
diff --git a/src/core/cntlr_tlv_generator.c b/src/core/cntlr_tlv_generator.c
index 494e60bde34a212ce137c5bf025244905283fb22..403aa8cb63dbd04ab15871d5aab52a3b4ee004a7 100644
--- a/src/core/cntlr_tlv_generator.c
+++ b/src/core/cntlr_tlv_generator.c
@@ -613,7 +613,7 @@ struct tlv_client_info *cntlr_gen_client_info(struct controller *c,
 }
 
 int cntlr_gen_backhaul_steer_req(struct controller *c, struct cmdu_buff *frm,
-		uint8_t *target_bssid, uint8_t *macaddr, uint8_t op_class,
+		uint8_t *bkhaul, uint8_t *target_bssid, uint8_t op_class,
 		uint8_t channel)
 {
 	struct tlv *t;
@@ -628,7 +628,7 @@ int cntlr_gen_backhaul_steer_req(struct controller *c, struct cmdu_buff *frm,
 	t->len = 14;
 	data = (struct tlv_backhaul_steer_request *) t->data;
 	memcpy(data->target_bssid, target_bssid, 6);
-	memcpy(data->macaddr, macaddr, 6);
+	memcpy(data->macaddr, bkhaul, 6);
 	data->target_opclass = op_class;
 	data->target_channel = channel;
 
diff --git a/src/core/cntlr_tlv_generator.h b/src/core/cntlr_tlv_generator.h
index 1ea1919e5cadafd6b72e42a9ffc21fe8899f669b..49acc3cce1924e3e1b9707a45224e90160f82e81 100644
--- a/src/core/cntlr_tlv_generator.h
+++ b/src/core/cntlr_tlv_generator.h
@@ -48,7 +48,7 @@ struct tlv_supported_role *cntlr_gen_supported_role(struct controller *c,
 struct tlv_client_info *cntlr_gen_client_info(struct controller *c,
 		uint8_t *sta, uint8_t *bssid);
 int cntlr_gen_backhaul_steer_req(struct controller *c, struct cmdu_buff *frm,
-		uint8_t *target_bssid, uint8_t *macaddr, uint8_t op_class,
+		uint8_t *macaddr, uint8_t *target_bssid, uint8_t op_class,
 		uint8_t channel);
 struct tlv_steer_request *cntlr_gen_client_steering_req(
 		char *bss_id, uint32_t steer_timeout,
diff --git a/src/core/cntlr_ubus.c b/src/core/cntlr_ubus.c
index b85477cb4406f374afa877e3381fc0f2cddb6da4..c4cdf8d43d70700216c117a37f4c3b639cdbca68 100644
--- a/src/core/cntlr_ubus.c
+++ b/src/core/cntlr_ubus.c
@@ -1222,7 +1222,7 @@ static int cntlr_bk_steer(struct ubus_context *ctx, struct ubus_object *obj,
 	struct blob_attr *tb[__BK_STEER_POLICY_MAX];
 	struct controller *c = container_of(obj, struct controller, obj);
 	char agent_str[18] = {0}, bssid_str[18] = {0}, bkhaul_str[18] = {0};
-	uint8_t agent[6] = {0}, bssid[6] = {0}, bkhaul[6] = {0};
+	uint8_t agent[6] = {0}, target_bssid[6] = {0}, bkhaul[6] = {0};
 	struct cmdu_cstruct *cmdu;
 	uint8_t op_class = 0, channel = 0;
 
@@ -1230,7 +1230,7 @@ static int cntlr_bk_steer(struct ubus_context *ctx, struct ubus_object *obj,
 			blob_data(msg), blob_len(msg));
 
 	if (!tb[BK_STEER_POLICY_BSSID] || !tb[BK_STEER_POLICY_STA_MAC]) {
-		fprintf(stderr, "BSSID and MAC required\n");
+		trace("BSSID and MAC required\n");
 		return UBUS_STATUS_INVALID_ARGUMENT;
 	}
 
@@ -1239,8 +1239,8 @@ static int cntlr_bk_steer(struct ubus_context *ctx, struct ubus_object *obj,
 	strncpy(bkhaul_str, blobmsg_data(tb[BK_STEER_POLICY_STA_MAC]),
 			sizeof(bkhaul_str) - 1);
 
-	if (!hwaddr_aton(bssid_str, bssid) || !hwaddr_aton(bkhaul_str, bkhaul)) {
-		fprintf(stderr, "MAC must be in format 11:22:33...\n");
+	if (!hwaddr_aton(bssid_str, target_bssid) || !hwaddr_aton(bkhaul_str, bkhaul)) {
+		trace("MAC must be in format 11:22:33...\n");
 		return UBUS_STATUS_INVALID_ARGUMENT;
 	}
 
@@ -1248,6 +1248,7 @@ static int cntlr_bk_steer(struct ubus_context *ctx, struct ubus_object *obj,
 	if (tb[BK_STEER_POLICY_AGENT]) {
 		strncpy(agent_str, blobmsg_data(tb[BK_STEER_POLICY_AGENT]),
 				sizeof(agent_str) - 1);
+		trace("Received agent %s\n", agent_str);
 		if (!hwaddr_aton(agent_str, agent))
 			return UBUS_STATUS_INVALID_ARGUMENT;
 	}
@@ -1257,7 +1258,7 @@ static int cntlr_bk_steer(struct ubus_context *ctx, struct ubus_object *obj,
 	if (tb[BK_STEER_POLICY_OP_CLASS])
 		op_class = blobmsg_get_u8(tb[BK_STEER_POLICY_OP_CLASS]);
 
-	cmdu = cntlr_gen_backhaul_steer_request(c, agent, bssid, bkhaul,
+	cmdu = cntlr_gen_backhaul_steer_request(c, agent, bkhaul, target_bssid,
 							op_class, channel);
 	if (!cmdu)
 		return UBUS_STATUS_UNKNOWN_ERROR;