diff --git a/src/cntlr.c b/src/cntlr.c
index eb4b840ee1ff4e9ebfb095da7e157021b826c7bc..40929873b79bcc16363302d8e2149e3ee1e08cf0 100644
--- a/src/cntlr.c
+++ b/src/cntlr.c
@@ -407,14 +407,24 @@ void cntlr_update_sta_steer_counters(struct controller *c,
 	a->answered = false;
 	a->auto_bssid = dst_bssid ? false : true;
 
-	/* Update SteeringSummaryStats */
-	/*TODO: split counter for opportunity & mandate */
-	s->stats.btm_attempt_cnt++;
 	/* Record tsp for most recent steer attempt */
 	timestamp_update(&s->stats.last_attempt_tsp);
 	s->num_steer_attempts += 1;
 }
 
+static void cntlr_btm_req_timer_cb(atimer_t *t)
+{
+	trace("%s:--->\n", __func__);
+
+	struct sta *s = container_of(t, struct sta, btm_req_timer);
+
+	if (s->pending_btm_resp_num > 0) {
+		s->failed_steer_attempts += s->pending_btm_resp_num;
+		s->stats.btm_failure_cnt += s->pending_btm_resp_num;
+		s->pending_btm_resp_num = 0;
+	}
+}
+
 static int cntlr_steer_sta(struct controller *c, struct sta *s,
 			   struct steer_target *to, uint32_t mode,
 			   uint32_t reason)
@@ -460,6 +470,10 @@ static int cntlr_steer_sta(struct controller *c, struct sta *s,
 				1, (uint8_t (*)[6])s->macaddr,
 				1, (uint8_t (*)[6])to->bssid);
 
+		/* Expect btm-resp from STA forwarded to cntlr */
+		s->pending_btm_resp_num++;
+		uloop_timeout_set(&s->btm_req_timer, BTM_RESP_EXP_TIMEOUT * 1000);
+
 		break;
 	case STEER_MODE_UNDEFINED:
 	default:
@@ -615,6 +629,7 @@ static void cntlr_init_sta_steer_counters(struct sta *s)
 	//s->stats.btm_failure_cnt = 0;
 	//s->stats.btm_query_resp_cnt = 0;
 	//s->stats.last_attempt_tsp = 0;
+	s->pending_btm_resp_num = 0;
 }
 
 struct sta *cntlr_add_sta(struct controller *c, uint8_t *macaddr)
@@ -635,6 +650,7 @@ struct sta *cntlr_add_sta(struct controller *c, uint8_t *macaddr)
 	memcpy(s->macaddr, macaddr, 6);
 	list_add(&s->list, &c->stalist);
 	s->bcn_metrics_timer.cb = cntlr_bcn_metrics_parse;
+	s->btm_req_timer.cb = cntlr_btm_req_timer_cb;
 	cntlr_init_sta_steer_counters(s);
 
 	return s;
diff --git a/src/cntlr.h b/src/cntlr.h
index b82db4fb400f4c440a50b3a408839843689eb580..93c784a68a4f1a1201836ea33da7a3a8b85892aa 100644
--- a/src/cntlr.h
+++ b/src/cntlr.h
@@ -179,6 +179,7 @@ struct sta {
 	int bcn_report_wait_time; /* maximum time to wait for bcn response in seconds */
 
 	int failed_steer_attempts;
+	int pending_btm_resp_num;
 
 	uint8_t num_steer_attempts;
 #define MAX_LOG_STEER_ATTEMPTS 10
@@ -186,6 +187,9 @@ struct sta {
 
 	struct steer_stats stats;
 
+#define BTM_RESP_EXP_TIMEOUT 5
+	atimer_t btm_req_timer;
+
 	struct list_head list;
 };
 
diff --git a/src/cntlr_map.c b/src/cntlr_map.c
index 4f26d27bb8fa2124d2287b0b3b1c073cb3d6baf3..a002943e2d1eb10c74d10e9c1824875f1b3c1bd9 100644
--- a/src/cntlr_map.c
+++ b/src/cntlr_map.c
@@ -1955,12 +1955,14 @@ int handle_sta_steer_btm_report(void *cntlr, struct cmdu_buff *cmdu)
 				resp->status ? NULL : resp->target_bssid[0]);
 
 	if (!attempt)
-		dbg("|%s:%d| could not find an attempt matching this btm report\n",
+		warn("|%s:%d| could not find an attempt matching this btm report\n",
 		    __func__, __LINE__);
-	else
+	else {
+		s->pending_btm_resp_num--;
 		attempt->answered = true;
+	}
 
-	if (resp->status) {
+	if (resp->status != 0x00) { /* error code */
 		s->failed_steer_attempts++;
 		/* Update Steering Summary Stats */
 		s->stats.btm_failure_cnt++;