diff --git a/src/plugins/select/bluegene/bg_status.h b/src/plugins/select/bluegene/bg_status.h
index 2f7744731c9df313af47cb9312c6852dbadfd037..4e62b188042c088dbc68801c6e8cb9e6be0d262e 100644
--- a/src/plugins/select/bluegene/bg_status.h
+++ b/src/plugins/select/bluegene/bg_status.h
@@ -47,6 +47,8 @@ extern List bg_status_create_kill_job_list(void);
 extern void bg_status_process_kill_job_list(List kill_job_list);
 
 /* defined in the various bridge_status' */
+extern int bridge_status_init(void);
+
 extern int bridge_block_check_mp_states(char *bg_block_id,
 					bool slurmctld_locked);
 /* This needs to have block_state_mutex locked before hand. */
diff --git a/src/plugins/select/bluegene/bl/bridge_linker.c b/src/plugins/select/bluegene/bl/bridge_linker.c
index 06ac3f73106845618034f9d4b09fc0a8d75f1bcc..eb92ff44b5a6c97055436ed2056d6b95c2e25ec8 100644
--- a/src/plugins/select/bluegene/bl/bridge_linker.c
+++ b/src/plugins/select/bluegene/bl/bridge_linker.c
@@ -1435,7 +1435,6 @@ extern int bridge_init(char *properties_file)
 #else
 	fatal("No BG_SERIAL is set, can't run.");
 #endif
-	bridge_status_init();
 #endif
 	return 1;
 
diff --git a/src/plugins/select/bluegene/bl/bridge_status.h b/src/plugins/select/bluegene/bl/bridge_status.h
index f83abd31436a56a5fe11861a2798ee76a2f98c81..5cecc5d01bf894611411bb06423e81a82e30a1cc 100644
--- a/src/plugins/select/bluegene/bl/bridge_status.h
+++ b/src/plugins/select/bluegene/bl/bridge_status.h
@@ -39,7 +39,6 @@
 #ifndef _BRIDGE_STATUS_H_
 #define _BRIDGE_STATUS_H_
 
-extern int bridge_status_init(void);
 extern int bridge_status_fini(void);
 
 #endif
diff --git a/src/plugins/select/bluegene/bl_bgq/bridge_linker.cc b/src/plugins/select/bluegene/bl_bgq/bridge_linker.cc
index d7f66fc06b9d56afd51f94eb1e52905565386a5f..2c4743fff5b2365eb80970069197974739e0b026 100644
--- a/src/plugins/select/bluegene/bl_bgq/bridge_linker.cc
+++ b/src/plugins/select/bluegene/bl_bgq/bridge_linker.cc
@@ -380,8 +380,6 @@ extern int bridge_setup_system()
 	_setup_ba_mp(0, coords, getComputeHardware());
 #endif
 
-	bridge_status_init();
-
 	return SLURM_SUCCESS;
 }
 
diff --git a/src/plugins/select/bluegene/bl_bgq/bridge_status.cc b/src/plugins/select/bluegene/bl_bgq/bridge_status.cc
index 4b1179f002d90ab25007d92e80de47205b611893..8a353a241fc526093e7a10af0da2bc3b962b9890 100644
--- a/src/plugins/select/bluegene/bl_bgq/bridge_status.cc
+++ b/src/plugins/select/bluegene/bl_bgq/bridge_status.cc
@@ -71,6 +71,8 @@ static bool bridge_status_inited = false;
 
 #if defined HAVE_BG_FILES
 
+static bool initial_poll = true;
+
 /*
  * Handle compute block status changes as a result of a block allocate.
  */
@@ -687,10 +689,11 @@ static void *_poll(void *no_data)
 		slurm_mutex_unlock(&rt_mutex);
 		/* This means we are doing outside of the thread so
 		   break */
-		if (!blocks_are_created)
+		if (initial_poll)
 			break;
 		sleep(1);
 	}
+
 	return NULL;
 }
 
@@ -699,7 +702,7 @@ static void *_poll(void *no_data)
 extern int bridge_status_init(void)
 {
 	if (bridge_status_inited)
-		return SLURM_ERROR;
+		return SLURM_SUCCESS;
 
 	bridge_status_inited = true;
 
@@ -711,6 +714,7 @@ extern int bridge_status_init(void)
 
 	/* get initial state */
 	_poll(NULL);
+	initial_poll = false;
 
 	rt_client_ptr = new(bgsched::realtime::Client);
 
diff --git a/src/plugins/select/bluegene/bl_bgq/bridge_status.h b/src/plugins/select/bluegene/bl_bgq/bridge_status.h
index dcc8c5f23e4b156ff3d26cf6a96e2b04e23ef508..326d3c27a5005f2887a7d61c66483b596f77776d 100644
--- a/src/plugins/select/bluegene/bl_bgq/bridge_status.h
+++ b/src/plugins/select/bluegene/bl_bgq/bridge_status.h
@@ -41,7 +41,6 @@
 
 #include "bridge_helper.h"
 
-extern int bridge_status_init(void);
 extern int bridge_status_fini(void);
 
 #endif
diff --git a/src/plugins/select/bluegene/select_bluegene.c b/src/plugins/select/bluegene/select_bluegene.c
index 474d8aa6b15c23822e01bc186ef0dd98d29930f3..37b28bb6828fc1263421f045bde21f358cc3ceb6 100644
--- a/src/plugins/select/bluegene/select_bluegene.c
+++ b/src/plugins/select/bluegene/select_bluegene.c
@@ -1956,6 +1956,9 @@ extern int select_p_select_nodeinfo_free(select_nodeinfo_t *nodeinfo)
 
 extern int select_p_select_nodeinfo_set_all(time_t last_query_time)
 {
+        if (bg_recover != NOT_FROM_CONTROLLER)
+                bridge_status_init();
+
 	return select_nodeinfo_set_all(last_query_time);
 }