diff --git a/src/cntlr.c b/src/cntlr.c
index c419a36793144a1d36b0c01e23355b7b582c89fa..81bf00b171d34ecd684ce8e98b4c39d82499949e 100644
--- a/src/cntlr.c
+++ b/src/cntlr.c
@@ -897,7 +897,7 @@ struct sta *cntlr_add_sta(struct controller *c, uint8_t *macaddr)
 	if (!s)
 		return NULL;
 
-	INIT_LIST_HEAD(&s->unassoclist);
+	INIT_LIST_HEAD(&s->umetriclist);
 	list_add(&s->list, &c->stalist);
 	timer_init(&s->bcn_metrics_timer, cntlr_bcn_metrics_parse);
 	timer_init(&s->btm_req_timer, cntlr_btm_req_timer_cb);
@@ -1304,7 +1304,7 @@ void free_usta_metrics(struct controller *c, struct sta *s)
 {
 	struct una_sta_metrics *u = NULL, *tmp;
 
-	list_for_each_entry_safe(u, tmp, &s->unassoclist, list) {
+	list_for_each_entry_safe(u, tmp, &s->umetriclist, list) {
 		list_del(&u->list);
 		free(u);
 	}
diff --git a/src/cntlr.h b/src/cntlr.h
index e7510ba4111def7370d07a2c9b073618dc5e9712..809094cdf3efab3b7a30b946656e2e7d326f2830 100644
--- a/src/cntlr.h
+++ b/src/cntlr.h
@@ -125,8 +125,7 @@ struct sta {
 
 	uint32_t time_delta;
 
-	/* TODO: change name to match the data (e.g. umetriclist) */
-	struct list_head unassoclist;
+	struct list_head umetriclist;
 
 	struct wifi_sta_element *de_sta;
 
diff --git a/src/cntlr_map.c b/src/cntlr_map.c
index 07c26f88368fc567d874ebf2523f46afb72a83df..06a2c20dd988a339e21176f983b034754601a01e 100644
--- a/src/cntlr_map.c
+++ b/src/cntlr_map.c
@@ -2345,7 +2345,7 @@ struct una_sta_metrics *cntlr_find_usta_metric(struct controller *c,
 {
 	struct una_sta_metrics *u = NULL;
 
-	list_for_each_entry(u, &s->unassoclist, list) {
+	list_for_each_entry(u, &s->umetriclist, list) {
 		dbg("%s %d mac "MACFMT" alid " MACFMT"\n", __func__, __LINE__,
 				MAC2STR(u->agent->alid), MAC2STR(mac));
 		if (!memcmp(u->agent->alid, mac, 6))
@@ -2379,7 +2379,7 @@ void cntlr_check_usta_steer(struct controller *c, struct sta *s)
 	    MACFMT "\n", __func__, __LINE__, MAC2STR(s->de_sta->macaddr),
 	    MAC2STR(s->bssid), MAC2STR(n->alid));
 
-	list_for_each_entry(u, &s->unassoclist, list) {
+	list_for_each_entry(u, &s->umetriclist, list) {
 		dbg("%s %d check usta node "MACFMT"\n",
 		    __func__, __LINE__, MAC2STR(u->agent->alid));
 
@@ -2498,7 +2498,7 @@ int handle_unassoc_sta_link_metrics_response(void *cntlr,
 				if (!u)
 					continue;
 
-				list_add(&u->list, &s->unassoclist);
+				list_add(&u->list, &s->umetriclist);
 				u->agent = cntlr_find_node(c, cmdu->origin);
 				dbg("%s %d\n", __func__, __LINE__);
 			}
diff --git a/src/cntlr_ubus.c b/src/cntlr_ubus.c
index 5a9adff93da3e84b260d3c9d47c9100824261bb7..e198b8954d86c7cca27298da0e4f0a4df2bddf50 100644
--- a/src/cntlr_ubus.c
+++ b/src/cntlr_ubus.c
@@ -299,6 +299,15 @@ static const struct blobmsg_policy unassoc_sta_lm_query_params[__UNASSOC_STA_LM_
 			.type = BLOBMSG_TYPE_ARRAY },
 };
 
+enum {
+	UNASSOC_STA_LM_RESP_STA,
+	__UNASSOC_STA_LM_RESP_MAX,
+};
+
+static const struct blobmsg_policy unassoc_sta_lm_resp_params[__UNASSOC_STA_LM_RESP_MAX] = {
+	[UNASSOC_STA_LM_RESP_STA] = { .name = "sta", .type = BLOBMSG_TYPE_STRING },
+};
+
 enum {
 	BK_CAPS_POLICY_AGENT,
 	__BK_CAPS_POLICY_MAX,
@@ -3038,6 +3047,95 @@ int cntlr_bcn_metrics_resp(struct ubus_context *ctx, struct ubus_object *obj,
 	return UBUS_STATUS_OK;
 }
 
+static void add_array_una_sta_lm(struct blob_buf *bb,
+		struct sta *s)
+{
+	void *t;
+	struct una_sta_metrics *usm = NULL;
+	char alid_str[18] = {0};
+
+	t = blobmsg_open_array(bb, "unassociated_metrics");
+	list_for_each_entry(usm, &s->umetriclist, list) {
+		void *tt;
+
+		tt = blobmsg_open_table(bb, "");
+
+		if (WARN_ON(!usm->agent))
+			continue;
+		hwaddr_ntoa(usm->agent->alid, alid_str);
+		blobmsg_add_string(bb, "alid", alid_str);
+		blobmsg_add_u16(bb, "channel", usm->channel);
+		blobmsg_add_u16(bb, "ul_rcpi", usm->ul_rcpi);
+		blobmsg_add_u64(bb, "time_delta", usm->time_delta);
+
+		blobmsg_close_table(bb, tt);
+	}
+
+	blobmsg_close_array(bb, t);
+}
+
+int cntlr_unassoc_sta_lm_resp(struct ubus_context *ctx, struct ubus_object *obj,
+			struct ubus_request_data *req, const char *method,
+			struct blob_attr *msg)
+{
+	struct controller *c = container_of(obj, struct controller, obj);
+	struct blob_attr *tb[__UNASSOC_STA_LM_RESP_MAX];
+	struct blob_buf bb = {0};
+	struct sta *s = NULL;
+	char sta[18] = {0};
+	uint8_t sta_mac[6] = {0};
+	void *a;
+
+	trace("%s:--->\n", __func__);
+
+	blobmsg_parse(unassoc_sta_lm_resp_params, __UNASSOC_STA_LM_RESP_MAX,
+			tb, blob_data(msg), blob_len(msg));
+
+	if (tb[UNASSOC_STA_LM_RESP_STA]) {
+		strncpy(sta, blobmsg_data(tb[UNASSOC_STA_LM_RESP_STA]),
+				sizeof(sta) - 1);
+
+		if (!hwaddr_aton(sta, sta_mac)) {
+			dbg("|%s:%d|Provide valid STA address!\n",
+			    __func__, __LINE__);
+			return UBUS_STATUS_UNKNOWN_ERROR;
+		}
+	}
+
+	/* Example ubus call:
+	 * ubus call map.controller unassoc_sta_lm_resp '{
+	 * "sta":"44:d4:37:4d:84:83"}'
+	 */
+
+	blob_buf_init(&bb, 0);
+
+	a = blobmsg_open_array(&bb, "stations");
+	list_for_each_entry(s, &c->stalist, list) {
+		void *ttt;
+		char stastr[18] = {0};
+
+		if (!hwaddr_is_zero(sta_mac) &&
+				memcmp(s->de_sta->macaddr, sta_mac, 6))
+			continue;
+
+		hwaddr_ntoa(s->de_sta->macaddr, stastr);
+
+		ttt = blobmsg_open_table(&bb, "");
+
+		blobmsg_add_string(&bb, "macaddr", stastr);
+
+		add_array_una_sta_lm(&bb, s);
+
+		blobmsg_close_table(&bb, ttt);
+	}
+
+	blobmsg_close_array(&bb, a);
+	ubus_send_reply(ctx, req, bb.head);
+	blob_buf_free(&bb);
+
+	return UBUS_STATUS_OK;
+}
+
 static int cntlr_bk_caps(struct ubus_context *ctx, struct ubus_object *obj,
 			struct ubus_request_data *req, const char *method,
 			struct blob_attr *msg)
@@ -3475,6 +3573,8 @@ int cntlr_publish_object(struct controller *c, const char *objname)
 				sta_metric_query_params),
 		UBUS_METHOD("unassoc_sta_lm_query", cntlr_unassoc_sta_lm_query,
 				unassoc_sta_lm_query_params),
+		UBUS_METHOD("unassoc_sta_lm_resp", cntlr_unassoc_sta_lm_resp,
+				unassoc_sta_lm_resp_params),
 		UBUS_METHOD("bcn_metrics_query", cntlr_bcn_metrics_query,
 				bcn_metrics_query_params),
 		UBUS_METHOD("bcn_metrics_resp", cntlr_bcn_metrics_resp,