diff --git a/src/agent.c b/src/agent.c
index fdd4a535e0ef6155205bd9bd382991280aa1f382..fdd34ec196d8ab8954798b69db0d2d8957b53bd6 100644
--- a/src/agent.c
+++ b/src/agent.c
@@ -4690,6 +4690,29 @@ static void wifi_bsta_event_scan_failed(struct agent *a, struct netif_bk *bk)
 	return;
 }
 
+void agent_handle_bh_lost(struct agent *a, struct netif_bk *bk)
+{
+	char ul_ifname[16] = {0};
+
+	if (!bk->cfg->enabled)
+		return;
+
+	dynbh_handle_bh_lost(a, bk);
+
+	if (agent_get_backhaul_ifname(a, ul_ifname)) {
+		if (!strncmp(ul_ifname, bk->ifname, IFNAMSIZ)) {
+			char ev[512] = {0};
+
+			sprintf(ev,
+				"{\"action\":\"unset_uplink\""
+				",\"type\":\"wifi\"}");
+
+			agent_notify_event(a, "map.agent", ev);
+			agent_exec_platform_scripts("unset_uplink wifi");
+		}
+	}
+}
+
 static void wifi_bsta_event_handler(void *agent, struct blob_attr *msg)
 {
 	char ifname[16] = {0}, event[16] = {0};
@@ -4835,24 +4858,7 @@ static void wifi_bsta_event_handler(void *agent, struct blob_attr *msg)
 
 		bk->connected = false;
 		/* Handle link loss if this was supposed to be an active bsta */
-		if (bk->cfg->enabled) {
-			char ul_ifname[16] = {0};
-
-			dynbh_handle_bh_lost(a, bk);
-
-			if (agent_get_backhaul_ifname(a, ul_ifname)) {
-				if (!strncmp(ul_ifname, bk->ifname, IFNAMSIZ)) {
-					char ev[512] = {0};
-
-					sprintf(ev,
-						"{\"action\":\"unset_uplink\""
-						",\"type\":\"wifi\"}");
-
-					agent_notify_event(a, "map.agent", ev);
-					agent_exec_platform_scripts("unset_uplink wifi");
-				}
-			}
-		}
+		agent_handle_bh_lost(a, bk);
 
 		wifi_mod_bridge(a, bk, false);
 		a->connected = agent_is_bsta_connected(a);
@@ -5921,16 +5927,7 @@ static void bk_toggle(struct agent *a, struct netif_bk *bk,
 		/* check if part of the bridge */
 		if (if_isbridge_interface(bk->ifname)) {
 			wifi_mod_bridge(a, bk, false);
-
-			if (bk->cfg->enabled) {
-				char ul_ifname[16] = {0};
-
-				dynbh_handle_bh_lost(a, bk);
-
-				if (agent_get_backhaul_ifname(a, ul_ifname)
-					&& !strncmp(ul_ifname, bk->ifname, IFNAMSIZ))
-					agent_exec_platform_scripts("unset_uplink wifi");
-			}
+			agent_handle_bh_lost(a, bk);
 		}
 	}
 }
diff --git a/src/agent.h b/src/agent.h
index 30a519c38e699cfe8dc4f5b69ff062229a523e1f..e225e7c0105759789f2ba40c02461773b5c6d3e1 100644
--- a/src/agent.h
+++ b/src/agent.h
@@ -1148,6 +1148,7 @@ void agent_set_post_scan_action_pref(struct agent *agent, struct wifi_radio_elem
 bool is_channel_supported_by_radio(struct wifi_radio_element *r,
 				   uint8_t opclass,
 				   uint8_t channel);
+void agent_handle_bh_lost(struct agent *a, struct netif_bk *bk);
 int agent_send_ch_scan_response(struct agent *a, struct wifi_radio_element *ndev,
 		struct wifi_scan_request_radio *req);
 bool agent_ch_scan_succesful(struct agent *a);
diff --git a/src/backhaul.c b/src/backhaul.c
index 50beae76e342791eb07d16c381e1927047b15905..ba28f8c81670751754b924bd0083ddbf31cca098 100644
--- a/src/backhaul.c
+++ b/src/backhaul.c
@@ -619,18 +619,8 @@ void agent_manage_bsta(struct agent *a, struct netif_bk *bk)
 	} else {
 		if (if_isbridge_interface(ifname)) {
 			wifi_mod_bridge(a, bk, false);
-
 			/* Handle bk link loss if this is an active bsta */
-			if (bk->cfg->enabled) {
-				char ul_ifname[16] = {0};
-
-				dynbh_handle_bh_lost(a, bk);
-
-				if (agent_get_backhaul_ifname(a, ul_ifname)) {
-					if (!strncmp(ul_ifname, bk->ifname, IFNAMSIZ))
-						agent_exec_platform_scripts("unset_uplink wifi");
-				}
-			}
+			agent_handle_bh_lost(a, bk);
 		}
 	}
 }