diff --git a/src/common/gres.c b/src/common/gres.c
index 798ef8c91c6c267ab190a3cd9c65e71e13429ce0..b47a3bc67a5a30d60a015b52b1a3415501b585bc 100644
--- a/src/common/gres.c
+++ b/src/common/gres.c
@@ -338,6 +338,9 @@ extern int gres_plugin_init(void)
 	int i, j, rc = SLURM_SUCCESS;
 	char *last = NULL, *names, *one_name, *full_name;
 
+	if (gres_context_cnt >= 0)
+		return rc;
+
 	slurm_mutex_lock(&gres_context_lock);
 	if (slurm_get_debug_flags() & DEBUG_FLAG_GRES)
 		gres_debug = true;
diff --git a/src/common/mpi.c b/src/common/mpi.c
index 9ecdf1da837a8e9ef7ab4d88819e03d73964fc8a..d5c2d6054e2746abf600ba48a09e5d1b05cbbd0c 100644
--- a/src/common/mpi.c
+++ b/src/common/mpi.c
@@ -211,6 +211,9 @@ int _mpi_init (char *mpi_type)
 	char *full_type = NULL;
 	int got_default = 0;
 
+	if ( g_context )
+		return retval;
+
 	slurm_mutex_lock( &context_lock );
 
 	if ( g_context )
diff --git a/src/common/node_select.c b/src/common/node_select.c
index 10c6c8d2937ecd55d2512f5f3c13e68d7c0be0d8..d2bbd0c9825f0b21a20faea92bd0618f90c63fb3 100644
--- a/src/common/node_select.c
+++ b/src/common/node_select.c
@@ -281,6 +281,9 @@ extern int slurm_select_init(bool only_default)
 	struct dirent *e;
 	char *dir_array = NULL, *head = NULL;
 
+	if ( select_context )
+		return retval;
+
 	slurm_mutex_lock( &select_context_lock );
 
 	if ( select_context )
diff --git a/src/common/slurm_accounting_storage.c b/src/common/slurm_accounting_storage.c
index eff7577f784621feb06206077bfa4d55d40fe95f..056c185a473eb37cce14571d18fbe0634eb8d391 100644
--- a/src/common/slurm_accounting_storage.c
+++ b/src/common/slurm_accounting_storage.c
@@ -388,6 +388,9 @@ extern int slurm_acct_storage_init(char *loc)
 	int retval = SLURM_SUCCESS;
 	char *acct_storage_type = NULL;
 
+	if ( g_acct_storage_context )
+		return retval;
+
 	slurm_mutex_lock( &g_acct_storage_context_lock );
 
 	if ( g_acct_storage_context )
diff --git a/src/common/slurm_auth.c b/src/common/slurm_auth.c
index 264c605a712e41b7c4a805ab875dae5e63b91be6..652127f44305cab5f61fff6e4bdc9bc71c606a20 100644
--- a/src/common/slurm_auth.c
+++ b/src/common/slurm_auth.c
@@ -315,6 +315,9 @@ extern int slurm_auth_init( char *auth_type )
         int retval = SLURM_SUCCESS;
 	char *auth_type_local = NULL;
 
+        if ( g_context )
+		return retval;
+
         slurm_mutex_lock( &context_lock );
 
         if ( g_context )
diff --git a/src/common/slurm_jobacct_gather.c b/src/common/slurm_jobacct_gather.c
index 66a1cef9ac5ae452409f3ab4f7dcc4cdb29a0556..3c07c1540533d4f4d97e8cefd8e6840a653f8369 100644
--- a/src/common/slurm_jobacct_gather.c
+++ b/src/common/slurm_jobacct_gather.c
@@ -258,6 +258,9 @@ static int _slurm_jobacct_gather_init(void)
 	char	*jobacct_gather_type = NULL;
 	int	retval=SLURM_SUCCESS;
 
+	if ( g_jobacct_gather_context )
+		return(retval);
+
 	slurm_mutex_lock( &g_jobacct_gather_context_lock );
 	if ( g_jobacct_gather_context )
 		goto done;
diff --git a/src/common/slurm_priority.c b/src/common/slurm_priority.c
index ecb56b3b1acc93fecdc68b6d5a5172940fac29f6..a86432541f575313f9232e3e6a6a7b678045af59 100644
--- a/src/common/slurm_priority.c
+++ b/src/common/slurm_priority.c
@@ -198,6 +198,9 @@ extern int slurm_priority_init(void)
 	int retval = SLURM_SUCCESS;
 	char *priority_type = NULL;
 
+	if ( g_priority_context )
+		return retval;
+
 	slurm_mutex_lock( &g_priority_context_lock );
 
 	if ( g_priority_context )
diff --git a/src/common/slurm_topology.c b/src/common/slurm_topology.c
index a6ea794f6e552d4fc7891f987935846a428cfd53..8d4a265159e3c5d66bb47536407fade7f206c27f 100644
--- a/src/common/slurm_topology.c
+++ b/src/common/slurm_topology.c
@@ -207,6 +207,9 @@ slurm_topo_init( void )
 	int retval = SLURM_SUCCESS;
 	char *topo_type = NULL;
 
+	if ( g_topo_context )
+		return retval;
+
 	slurm_mutex_lock( &g_topo_context_lock );
 
 	if ( g_topo_context )
diff --git a/src/common/switch.c b/src/common/switch.c
index bbfc9c9ae4e572c3155067bb32b9496e9c0d6b13..5a8ac8b16e840ad3fefac52b3564286d50e763ce 100644
--- a/src/common/switch.c
+++ b/src/common/switch.c
@@ -288,6 +288,9 @@ extern int switch_init( void )
 	int retval = SLURM_SUCCESS;
 	char *switch_type = NULL;
 
+	if ( g_context )
+		return retval;
+
 	slurm_mutex_lock( &context_lock );
 
 	if ( g_context )
diff --git a/src/slurmctld/job_submit.c b/src/slurmctld/job_submit.c
index 7ded61704201ac7265f90c435c25e9c9b1bd1b25..56c3e3b1467e1989501884ce7e5948d7562a0064 100644
--- a/src/slurmctld/job_submit.c
+++ b/src/slurmctld/job_submit.c
@@ -196,6 +196,9 @@ extern int job_submit_plugin_init(void)
 	int rc = SLURM_SUCCESS;
 	char *last = NULL, *names, *one_name;
 
+	if (submit_context_cnt >= 0)
+		return rc;
+
 	slurm_mutex_lock(&submit_context_lock);
 	if (submit_context_cnt >= 0)
 		goto fini;
diff --git a/src/slurmctld/sched_plugin.c b/src/slurmctld/sched_plugin.c
index 55d8908a9731c4cecceeaf9718dc090400a868d4..5b1229109b4594ae8ff38b3ab6e26adcd61346c2 100644
--- a/src/slurmctld/sched_plugin.c
+++ b/src/slurmctld/sched_plugin.c
@@ -225,6 +225,9 @@ slurm_sched_init( void )
 	int retval = SLURM_SUCCESS;
 	char *sched_type = NULL;
 
+	if ( g_sched_context )
+		return retval;
+
 	slurm_mutex_lock( &g_sched_context_lock );
 
 	if ( g_sched_context )