diff --git a/src/plugins/core_spec/cray/core_spec_cray.c b/src/plugins/core_spec/cray/core_spec_cray.c
index 9208563943ef3b0354170e3ecab2ea1bbf33fab2..628ea65453da20dd18ea56ce1ac6e29dbd7d8c69 100644
--- a/src/plugins/core_spec/cray/core_spec_cray.c
+++ b/src/plugins/core_spec/cray/core_spec_cray.c
@@ -114,10 +114,10 @@ extern int fini(void)
  *
  * Return SLURM_SUCCESS on success
  */
-extern int core_spec_p_set(int core_count)
+extern int core_spec_p_set(uint64_t cont_id, uint16_t core_count)
 {
 #if _DEBUG
-	info("core_spec_p_set(%d)", core_count);
+	info("core_spec_p_set(%"PRIu64") to %u", cont_id, core_count);
 #endif
 	return SLURM_SUCCESS;
 }
@@ -127,10 +127,10 @@ extern int core_spec_p_set(int core_count)
  *
  * Return SLURM_SUCCESS on success
  */
-extern int core_spec_p_clear(int core_count)
+extern int core_spec_p_clear(uint64_t cont_id)
 {
 #if _DEBUG
-	info("core_spec_p_clear(%d)", core_count);
+	info("core_spec_p_clear(%"PRIu64")", cont_id);
 #endif
 	return SLURM_SUCCESS;
 }
diff --git a/src/plugins/core_spec/none/core_spec_none.c b/src/plugins/core_spec/none/core_spec_none.c
index 9f07b3795353f767fb8244c2a56dc2cb1b2dbf06..4878c727d291067bd8f9902dfd23ba16ca657844 100644
--- a/src/plugins/core_spec/none/core_spec_none.c
+++ b/src/plugins/core_spec/none/core_spec_none.c
@@ -112,10 +112,10 @@ extern int fini(void)
  *
  * Return SLURM_SUCCESS on success
  */
-extern int core_spec_p_set(int core_count)
+extern int core_spec_p_set(uint64_t cont_id, uint16_t core_count)
 {
 #if _DEBUG
-	info("core_spec_p_set(%d)", core_count);
+	info("core_spec_p_set(%"PRIu64") to %u", cont_id, core_count);
 #endif
 	return SLURM_SUCCESS;
 }
@@ -125,10 +125,10 @@ extern int core_spec_p_set(int core_count)
  *
  * Return SLURM_SUCCESS on success
  */
-extern int core_spec_p_clear(int core_count)
+extern int core_spec_p_clear(uint64_t cont_id)
 {
 #if _DEBUG
-	info("core_spec_p_clear(%d)", core_count);
+	info("core_spec_p_clear(%"PRIu64")", cont_id);
 #endif
 	return SLURM_SUCCESS;
 }
diff --git a/src/slurmd/common/core_spec_plugin.c b/src/slurmd/common/core_spec_plugin.c
index 19d620dfcfec8d266f8995e96c9d2fc5b3b0eda3..bac0384bd2b2bf8d95f5a578a1362f5322aeb0fc 100644
--- a/src/slurmd/common/core_spec_plugin.c
+++ b/src/slurmd/common/core_spec_plugin.c
@@ -46,8 +46,8 @@
 
 
 typedef struct core_spec_ops {
-	int	(*core_spec_p_set)	(uint16_t count);
-	int	(*core_spec_p_clear)	(uint16_t count);
+	int	(*core_spec_p_set)	(uint64_t cont_id, uint16_t count);
+	int	(*core_spec_p_clear)	(uint64_t cont_id);
 	int	(*core_spec_p_suspend)	(uint64_t cont_id);
 	int	(*core_spec_p_resume)	(uint64_t cont_id);
 } core_spec_ops_t;
@@ -173,7 +173,7 @@ done:
  *
  * Return SLURM_SUCCESS on success
  */
-extern int core_spec_g_set(uint16_t count)
+extern int core_spec_g_set(uint64_t cont_id, uint16_t core_count)
 {
 	int i, rc = SLURM_SUCCESS;
 
@@ -182,7 +182,7 @@ extern int core_spec_g_set(uint16_t count)
 
 	for (i = 0; ((i < g_core_spec_context_num) && (rc == SLURM_SUCCESS));
 	     i++) {
-		rc = (*(ops[i].core_spec_p_set))(count);
+		rc = (*(ops[i].core_spec_p_set))(cont_id, core_count);
 	}
 
 	return rc;
@@ -193,7 +193,7 @@ extern int core_spec_g_set(uint16_t count)
  *
  * Return SLURM_SUCCESS on success
  */
-extern int core_spec_g_clear(uint16_t count)
+extern int core_spec_g_clear(uint64_t cont_id)
 {
 	int i, rc = SLURM_SUCCESS;
 
@@ -202,7 +202,7 @@ extern int core_spec_g_clear(uint16_t count)
 
 	for (i = 0; ((i < g_core_spec_context_num) && (rc == SLURM_SUCCESS));
 	     i++) {
-		rc = (*(ops[i].core_spec_p_clear))(count);
+		rc = (*(ops[i].core_spec_p_clear))(cont_id);
 	}
 
 	return rc;
diff --git a/src/slurmd/common/core_spec_plugin.h b/src/slurmd/common/core_spec_plugin.h
index 3dfd05819ef9234e8b914761fc7dd0410c7d2889..2bf2dbdf4a511e025ecfe5f056b0622294f8f6bc 100644
--- a/src/slurmd/common/core_spec_plugin.h
+++ b/src/slurmd/common/core_spec_plugin.h
@@ -62,13 +62,13 @@ extern int core_spec_g_fini(void);
  *
  * Return SLURM_SUCCESS on success
  */
-extern int core_spec_g_set(uint16_t count);
+extern int core_spec_g_set(uint64_t cont_id, uint16_t core_count);
 /*
  * Clear specialized cores at job termination
  *
  * Return SLURM_SUCCESS on success
  */
-extern int core_spec_g_clear(uint16_t count);
+extern int core_spec_g_clear(uint64_t cont_id);
 
 /*
  * Reset specialized cores at job suspend
diff --git a/src/slurmd/slurmd/req.c b/src/slurmd/slurmd/req.c
index 38ecce735ef6cf275930ee3b7e81d0c0f3bca652..25001aea4a6aa8e36e6358a22979c5a4d5a4bc44 100644
--- a/src/slurmd/slurmd/req.c
+++ b/src/slurmd/slurmd/req.c
@@ -1124,7 +1124,7 @@ _rpc_launch_tasks(slurm_msg_t *msg)
 
 		if (container_g_create(req->job_id))
 			error("container_g_create(%u): %m", req->job_id);
-		if (core_spec_g_set(req->job_core_spec))
+		if (core_spec_g_set(0, req->job_core_spec))
 			error("core_spec_g_set(%u): %m", req->job_id);
 
 		memset(&job_env, 0, sizeof(job_env_t));
@@ -1584,7 +1584,7 @@ _rpc_batch_job(slurm_msg_t *msg, bool new_msg)
 		     req->job_id, req->step_id, req->uid);
 
 	debug3("_rpc_batch_job: call to _forkexec_slurmstepd");
-	if (core_spec_g_set(req->job_core_spec))
+	if (core_spec_g_set(0, req->job_core_spec))
 		error("core_spec_g_set(%u): %m", req->job_id);
 	rc = _forkexec_slurmstepd(LAUNCH_BATCH_JOB, (void *)req, cli, NULL,
 				  (hostset_t)NULL);
diff --git a/src/slurmd/slurmstepd/mgr.c b/src/slurmd/slurmstepd/mgr.c
index 12522f2ff6291e168003d4f45fce3c2b5aba938e..bfae2426ff16386ab750516e1ffadf659c901980 100644
--- a/src/slurmd/slurmstepd/mgr.c
+++ b/src/slurmd/slurmstepd/mgr.c
@@ -106,6 +106,7 @@
 
 #include "src/slurmd/slurmd/slurmd.h"
 
+#include "src/slurmd/common/core_spec_plugin.h"
 #include "src/slurmd/common/job_container_plugin.h"
 #include "src/slurmd/common/setproctitle.h"
 #include "src/slurmd/common/proctrack.h"
@@ -966,7 +967,8 @@ job_manager(stepd_step_rec_t *job)
 	/*
 	 * Preload plugins.
 	 */
-	if ((switch_init() != SLURM_SUCCESS)			||
+	if ((core_spec_g_init()!= SLURM_SUCCESS)		||
+	    (switch_init() != SLURM_SUCCESS)			||
 	    (slurmd_task_init() != SLURM_SUCCESS)		||
 	    (slurm_proctrack_init() != SLURM_SUCCESS)		||
 	    (checkpoint_init(ckpt_type) != SLURM_SUCCESS)	||
diff --git a/src/slurmd/slurmstepd/slurmstepd.c b/src/slurmd/slurmstepd/slurmstepd.c
index f2faee57d91038e478222cabbf6d9ddec1ba89a2..b6d347118370fedf7dd94f07947d681d2b85de25 100644
--- a/src/slurmd/slurmstepd/slurmstepd.c
+++ b/src/slurmd/slurmstepd/slurmstepd.c
@@ -145,7 +145,6 @@ main (int argc, char *argv[])
 	}
 
 	_send_ok_to_slurmd(STDOUT_FILENO);
-	(void) core_spec_g_init();
 
 	/* Fancy way of closing stdout that keeps STDOUT_FILENO from being
 	 * allocated to any random file.  The slurmd already opened /dev/null