diff --git a/src/cntlr.c b/src/cntlr.c
index 81712db7186432b45b519e0cff5c24b8e725c375..b6477c44d0215055615766bb8b347fd268b20e53 100644
--- a/src/cntlr.c
+++ b/src/cntlr.c
@@ -1086,21 +1086,21 @@ struct sta *cntlr_add_sta(struct controller *c, uint8_t *macaddr,
 	if (!s)
 		return NULL;
 
-	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);
-
 	s->de_sta = cntlr_wifi_alloc_sta(c, macaddr);
 	if (!s->de_sta) {
 		free(s);
 		return NULL;
 	}
 
+	INIT_LIST_HEAD(&s->umetriclist);
+	list_add(&s->list, &c->stalist);
 	allmac_insert(&c->mac_table, macaddr,
 		is_bsta ? MAC_ENTRY_BSTA : MAC_ENTRY_STA,
 		(void *)s);
 
+	timer_init(&s->bcn_metrics_timer, cntlr_bcn_metrics_parse);
+	timer_init(&s->btm_req_timer, cntlr_btm_req_timer_cb);
+
 	cntlr_init_sta_steer_counters(s);
 
 	return s;