diff --git a/src/cntlr.c b/src/cntlr.c
index 693b190c85c492aa75290b16d7944d7594eac007..d2d619aa5da59306ad6121c7fde837f2071c1aa7 100644
--- a/src/cntlr.c
+++ b/src/cntlr.c
@@ -2362,11 +2362,6 @@ void run_controller(void *opts)
 
 	controller_subscribe_for_cmdus(c);
 
-	/* steer-control */
-	cntlr_load_steer_modules(c);
-	if (!list_empty(&c->sclist))
-		cntlr_assign_steer_module_default(c);
-
 	/* The counters in MultiAPSteeringSummaryStats are all reset on reboot. */
 	memset(&c->dlem.network.steer_summary, 0, sizeof(struct wifi_steer_summary));
 	cntlr_dbg(LOG_MISC, "current wifi_cntlr profile %d\n", c->cfg.map_profile);
diff --git a/src/config.c b/src/config.c
index 1a46adeef72f2110745386810d1743756da58e76..2d5f8d65ef9485b0bc117dfda37999ec4cde1d60 100644
--- a/src/config.c
+++ b/src/config.c
@@ -1894,7 +1894,11 @@ uint8_t cntlr_config_reload(struct controller_config *cfg)
 		if (!strcmp(s->type, "controller")) {
 			cntlr_config_get_base(cfg, s);
 		} else if (!strcmp(s->type, "sta_steering")) {
+			struct controller *c =
+				container_of(cfg, struct controller, cfg);
+
 			cntlr_config_get_steer_params(cfg, s);
+			cntlr_load_steer_modules(c);
 		} else if (!strcmp(s->type, "ap")) {
 			cntlr_config_get_credentials(cfg, s);
 		} else if (!strcmp(s->type, "node")) {
diff --git a/src/steer_module.c b/src/steer_module.c
index a87dff8753b8fb4c531ae3f39653ecbaec8252d6..ef8546fc5039574cad194dd98054ec56e4ab9aff 100644
--- a/src/steer_module.c
+++ b/src/steer_module.c
@@ -190,6 +190,9 @@ void cntlr_load_steer_modules(struct controller *c)
 		if (!ret)
 			list_add_tail(&sc->list, &c->sclist);
 	}
+
+	if (!list_empty(&c->sclist))
+		cntlr_assign_steer_module_default(c);
 }
 
 void cntlr_unload_steer_modules(struct controller *c)