diff --git a/src/cntlr_commands_impl.c b/src/cntlr_commands_impl.c
index 4738fc3c8d586e008f364e3dc5cdfee1ff989d76..5877ac7f6b58a07a382897a3673a9ba7de69bb7f 100644
--- a/src/cntlr_commands_impl.c
+++ b/src/cntlr_commands_impl.c
@@ -2077,7 +2077,6 @@ static void add_array_steer_sta(struct blob_buf *bb, struct sta *s)
 	uint8_t num_attempts;
 	struct tm *info;
 	time_t tmp_t;
-	int size;
 	int i;
 
 	t = blobmsg_open_table(bb, "");
@@ -2085,10 +2084,10 @@ static void add_array_steer_sta(struct blob_buf *bb, struct sta *s)
 	blobmsg_add_string(bb, "macaddr", macstr);
 	ttt = blobmsg_open_array(bb, "history");
 	num_attempts = s->de_sta->mapsta.num_steer_hist;
-	size = num_attempts < MAX_STEER_HISTORY ? num_attempts : MAX_STEER_HISTORY;
-	for (i = 0; i < size; i++) {
+	for (i = 0; i < num_attempts; i++) {
+		int idx = (s->de_sta->mapsta.first + i) % MAX_STEER_HISTORY;
 		struct wifi_steer_history *attempt =
-				&s->de_sta->mapsta.steer_history[i];
+				&s->de_sta->mapsta.steer_history[idx];
 
 		tttt = blobmsg_open_table(bb, "");
 
diff --git a/src/sta.c b/src/sta.c
index a4577be66776930fe03f880974b8183b2f477bd3..9c396afa83e8b537b1e861c319dd708d8fb70f7e 100644
--- a/src/sta.c
+++ b/src/sta.c
@@ -64,8 +64,9 @@ static struct sta *sta_alloc(uint8_t *macaddr)
 	wse->mapsta.steer_summary.blacklist_attempt_cnt = STEER_STATS_NO_DATA;
 	wse->mapsta.steer_summary.blacklist_success_cnt = STEER_STATS_NO_DATA;
 	wse->mapsta.steer_summary.blacklist_failure_cnt = STEER_STATS_NO_DATA;
-	wse->mapsta.first = -1;
-	wse->mapsta.next = -1;
+	wse->mapsta.first = 0;
+	wse->mapsta.next = 0;
+	wse->mapsta.num_steer_hist = 0;
 
 	s->steer_data = (struct steer_sta *)(wse + 1);
 	ss = s->steer_data;
diff --git a/src/steer.c b/src/steer.c
index 022ab47c49eb0a99f50bb5c2e3c2930867813267..abf6895f46a20b2737a5acb9cd267e1580c9680a 100644
--- a/src/steer.c
+++ b/src/steer.c
@@ -118,48 +118,28 @@ struct wifi_steer_history *sta_lookup_steer_attempt(struct sta *s,
 						    uint8_t *dst_bssid)
 {
 	struct wifi_multiap_sta *mapsta = &s->de_sta->mapsta;
-	bool found = false;
 	int i;
 
-	dbg("%s: sta = " MACFMT", src-ap = "MACFMT"\n", __func__,
-	    MAC2STR(s->macaddr), MAC2STR(src_bssid));
+	cntlr_dbg(LOG_STEER, "%s: sta = " MACFMT", src-ap = "MACFMT"\n", __func__,
+		  MAC2STR(s->macaddr), MAC2STR(src_bssid));
 
-	/* lookup latest steering attempt */
-	for (i = mapsta->next; i >= 0; ) {
-		if (mapsta->steer_history[i].complete)
-			continue;
-
-		if (!memcmp(mapsta->steer_history[i].src_bssid, src_bssid, 6)) {
-			if (!dst_bssid || !memcmp(mapsta->steer_history[i].dst_bssid, dst_bssid, 6)) {
-				found = true;
-				break;
-			}
-		}
+	/* find imcomplete steering attempt */
+	for (i = 0; i < mapsta->num_steer_hist; i++) {
+		int idx = (mapsta->first + i) % MAX_STEER_HISTORY;
 
-		i--;
-		if (i == -1)
-			i = MAX_STEER_HISTORY - 1;
-
-		if (i == mapsta->first) {
-			if (mapsta->steer_history[i].complete)
-				break;
-
-			if (!memcmp(mapsta->steer_history[i].src_bssid, src_bssid, 6)) {
-				if (!dst_bssid || !memcmp(mapsta->steer_history[i].dst_bssid, dst_bssid, 6)) {
-					found = true;
-					break;
-				}
+		if (!memcmp(mapsta->steer_history[idx].src_bssid, src_bssid, 6) &&
+		    !mapsta->steer_history[idx].complete) {
+			if (!dst_bssid ||
+			    !memcmp(mapsta->steer_history[idx].dst_bssid, dst_bssid, 6)) {
+				return &mapsta->steer_history[idx];
 			}
-			break;
 		}
 	}
 
-	if (!found) {
-		dbg("%s: Steer attempt for sta = " MACFMT" not found\n",
-		    __func__, MAC2STR(s->macaddr));
-	}
+	cntlr_dbg(LOG_STEER, "%s: Steer attempt for sta = " MACFMT" not found\n",
+		  __func__, MAC2STR(s->macaddr));
 
-	return found ? &mapsta->steer_history[i] : NULL;
+	return NULL;
 }
 
 void cntlr_update_sta_steer_counters(struct controller *c,
@@ -184,9 +164,7 @@ void cntlr_update_sta_steer_counters(struct controller *c,
 	mapsta = &s->de_sta->mapsta;
 
 	/* update history entry */
-	mapsta->next = (mapsta->next + 1) % MAX_STEER_HISTORY;
 	a = &mapsta->steer_history[mapsta->next];
-
 	memset(a, 0, sizeof(struct wifi_steer_history));
 	timestamp_update(&a->time);
 	time(&a->steer_time);
@@ -202,14 +180,12 @@ void cntlr_update_sta_steer_counters(struct controller *c,
 		a->dst_rcpi = dst_rcpi;
 	}
 
-	mapsta->num_steer_hist = (mapsta->num_steer_hist + 1) % MAX_STEER_HISTORY;
-
-	if (mapsta->next == mapsta->first)
+	mapsta->next = (mapsta->next + 1) % MAX_STEER_HISTORY;
+	if (mapsta->num_steer_hist < MAX_STEER_HISTORY) {
+		mapsta->num_steer_hist++;
+	} else {
 		mapsta->first = (mapsta->next + 1) % MAX_STEER_HISTORY;
-
-	if (mapsta->first == -1)
-		mapsta->first = 0;
-
+	}
 
 	//FIXME: mode mappings