diff --git a/NEWS b/NEWS
index 152f6a7fb5567f655a5495ccc680dac71cd20500..376d673f92836a82c584e025391b8dc63d66b0c7 100644
--- a/NEWS
+++ b/NEWS
@@ -8,6 +8,7 @@ documents those changes that are of interest to users and admins.
     of the daemon rather than restoring the bitmap since the nodes in a system
     can change (be added or removed).
  -- Add configuration option "--with-cpusetdir=PATH" for non-standard locations.
+ -- Get new multi-core data structures working on BlueGene systems.
 
 * Changes in SLURM 1.4.0-pre4
 =============================
diff --git a/src/common/slurm_cred.c b/src/common/slurm_cred.c
index ecb508a23cf2e69e180747ed0e31ceaa0799ad37..2c6935df2fa76b6e3536b974207c39dcb07b23ef 100644
--- a/src/common/slurm_cred.c
+++ b/src/common/slurm_cred.c
@@ -1,6 +1,5 @@
 /*****************************************************************************\
  *  src/common/slurm_cred.c - SLURM job credential functions
- *  $Id$
  *****************************************************************************
  *  Copyright (C) 2002-2007 The Regents of the University of California.
  *  Copyright (C) 2008 Lawrence Livermore National Security.
@@ -150,7 +149,7 @@ struct slurm_job_credential {
 	char     *nodes;	/* hostnames for which the cred is ok	*/
 	uint32_t  alloc_lps_cnt;/* Number of hosts in the list above	*/
 	uint16_t *alloc_lps;	/* Number of tasks on each host		*/
-
+#ifndef HAVE_BG
 	bitstr_t *core_bitmap;
 	uint16_t  core_array_size;	/* core/socket array size */
 	uint16_t *cores_per_socket;
@@ -158,7 +157,7 @@ struct slurm_job_credential {
 	uint32_t *sock_core_rep_count;
 	uint32_t  job_nhosts;	/* count of nodes allocated to JOB */
 	char     *job_hostlist;	/* list of nodes allocated to JOB */
-
+#endif
 	char     *signature; 	/* credential signature			*/
 	unsigned int siglen;	/* signature length in bytes		*/
 };
@@ -589,7 +588,6 @@ slurm_cred_t
 slurm_cred_create(slurm_cred_ctx_t ctx, slurm_cred_arg_t *arg)
 {
 	slurm_cred_t cred = NULL;
-	int i, sock_recs = 0;
 
 	xassert(ctx != NULL);
 	xassert(arg != NULL);
@@ -622,6 +620,9 @@ slurm_cred_create(slurm_cred_ctx_t ctx, slurm_cred_arg_t *arg)
                 memcpy(cred->alloc_lps, arg->alloc_lps, 
 		       cred->alloc_lps_cnt * sizeof(uint16_t));
         }
+#ifndef HAVE_BG
+{
+	int i, sock_recs = 0;
 	xassert(arg->job_nhosts);
 	for (i=0; i<arg->job_nhosts; i++) {
 		sock_recs += arg->sock_core_rep_count[i];
@@ -642,7 +643,8 @@ slurm_cred_create(slurm_cred_ctx_t ctx, slurm_cred_arg_t *arg)
 	       (sizeof(uint32_t) * i));
 	cred->job_nhosts = arg->job_nhosts;
 	cred->job_hostlist = xstrdup(arg->job_hostlist);
-
+}
+#endif
 	cred->ctime  = time(NULL);
 
 	if (_slurm_cred_sign(ctx, cred) < 0) 
@@ -690,7 +692,7 @@ slurm_cred_copy(slurm_cred_t cred)
 		memcpy(rcred->alloc_lps, cred->alloc_lps, 
 		       rcred->alloc_lps_cnt * sizeof(uint16_t));
 	}
-
+#ifndef HAVE_BG
 	rcred->core_bitmap = bit_copy(cred->core_bitmap);
 	rcred->core_array_size = cred->core_array_size;
 	rcred->cores_per_socket = xmalloc(sizeof(uint16_t) * 
@@ -707,7 +709,7 @@ slurm_cred_copy(slurm_cred_t cred)
 	       (sizeof(uint32_t) * rcred->core_array_size));
 	rcred->job_nhosts = cred->job_nhosts;
 	rcred->job_hostlist = xstrdup(cred->job_hostlist);
-
+#endif
 	rcred->ctime  = cred->ctime;
 	rcred->siglen = cred->siglen;
 	/* Assumes signature is a string,
@@ -723,7 +725,7 @@ slurm_cred_copy(slurm_cred_t cred)
 slurm_cred_t
 slurm_cred_faker(slurm_cred_arg_t *arg)
 {
-	int fd, i, sock_recs = 0;
+	int fd;
 	slurm_cred_t cred = NULL;
 
 	xassert(arg != NULL);
@@ -745,7 +747,9 @@ slurm_cred_faker(slurm_cred_arg_t *arg)
 		memcpy(cred->alloc_lps, arg->alloc_lps, 
 		       cred->alloc_lps_cnt * sizeof(uint16_t));
 	}
-
+#ifndef HAVE_BG
+{
+	int i, sock_recs = 0
 	for (i=0; i<arg->job_nhosts; i++) {
 		sock_recs += arg->sock_core_rep_count[i];
 		if (sock_recs >= arg->job_nhosts)
@@ -765,7 +769,8 @@ slurm_cred_faker(slurm_cred_arg_t *arg)
 	       (sizeof(uint32_t) * i));
 	cred->job_nhosts = arg->job_nhosts;
 	cred->job_hostlist = xstrdup(arg->job_hostlist);
-
+}
+#endif
 	cred->ctime  = time(NULL);
 	cred->siglen = SLURM_IO_KEY_SIZE;
 
@@ -828,7 +833,14 @@ slurm_cred_get_args(slurm_cred_t cred, slurm_cred_arg_t *arg)
 		       arg->alloc_lps_cnt * sizeof(uint16_t));
 	} else
 		arg->alloc_lps = NULL;
-
+#ifdef HAVE_BG
+	arg->core_bitmap = NULL;
+	arg->cores_per_socket = NULL;
+	arg->sockets_per_node = NULL;
+	arg->sock_core_rep_count = NULL;
+	arg->job_nhosts = 0;
+	arg->job_hostlist = NULL;
+#else
 	arg->core_bitmap = bit_copy(cred->core_bitmap);
 	arg->cores_per_socket = xmalloc(sizeof(uint16_t) * 
 					cred->core_array_size);
@@ -844,6 +856,7 @@ slurm_cred_get_args(slurm_cred_t cred, slurm_cred_arg_t *arg)
 	       (sizeof(uint32_t) * cred->core_array_size));
 	arg->job_nhosts = cred->job_nhosts;
 	arg->job_hostlist = xstrdup(cred->job_hostlist);
+#endif
 	slurm_mutex_unlock(&cred->mutex);
 
 	return SLURM_SUCCESS;
@@ -909,6 +922,14 @@ slurm_cred_verify(slurm_cred_ctx_t ctx, slurm_cred_t cred,
 	} else
 		arg->alloc_lps = NULL;
 
+#ifdef HAVE_BG
+	arg->core_bitmap = NULL;
+	arg->cores_per_socket = NULL;
+	arg->sockets_per_node = NULL;
+	arg->sock_core_rep_count = NULL;
+	arg->job_nhosts = 0;
+	arg->job_hostlist = NULL;
+#else
 	arg->core_bitmap = bit_copy(cred->core_bitmap);
 	arg->cores_per_socket = xmalloc(sizeof(uint16_t) * 
 					cred->core_array_size);
@@ -924,6 +945,7 @@ slurm_cred_verify(slurm_cred_ctx_t ctx, slurm_cred_t cred,
 	       (sizeof(uint32_t) * cred->core_array_size));
 	arg->job_nhosts = cred->job_nhosts;
 	arg->job_hostlist = xstrdup(cred->job_hostlist);
+#endif
 	slurm_mutex_unlock(&cred->mutex);
 
 	return SLURM_SUCCESS;
@@ -947,16 +969,18 @@ slurm_cred_destroy(slurm_cred_t cred)
 
 	slurm_mutex_lock(&cred->mutex);
 	xfree(cred->alloc_lps);
+#ifndef HAVE_BG
 	if (cred->core_bitmap) {
 		bit_free(cred->core_bitmap);
 		cred->core_bitmap = NULL;
 	}
 	xfree(cred->cores_per_socket);
 	xfree(cred->job_hostlist);
-	xfree(cred->nodes);
-	xfree(cred->signature);
 	xfree(cred->sock_core_rep_count);
 	xfree(cred->sockets_per_node);
+#endif
+	xfree(cred->nodes);
+	xfree(cred->signature);
 	xassert(cred->magic = ~CRED_MAGIC);
 
 	slurm_mutex_unlock(&cred->mutex);
@@ -1139,7 +1163,7 @@ slurm_cred_pack(slurm_cred_t cred, Buf buffer)
 slurm_cred_t
 slurm_cred_unpack(Buf buffer)
 {
-	uint32_t     cred_uid, len, tot_core_cnt;
+	uint32_t     cred_uid, len;
 	slurm_cred_t cred = NULL;
 	char        *bit_fmt = NULL;
 	char       **sigp;
@@ -1162,7 +1186,9 @@ slurm_cred_unpack(Buf buffer)
 			goto unpack_error;
 	}
 	safe_unpack_time(       &cred->ctime,         buffer);
-
+#ifndef HAVE_BG
+{
+	uint32_t tot_core_cnt;
 	safe_unpack32(          &tot_core_cnt,        buffer);
 	safe_unpackstr_xmalloc( &bit_fmt,     &len,   buffer);
 	cred->core_bitmap = bit_alloc((bitoff_t) tot_core_cnt);
@@ -1184,7 +1210,8 @@ slurm_cred_unpack(Buf buffer)
 	}
 	safe_unpack32(          &cred->job_nhosts,           buffer);
 	safe_unpackstr_xmalloc( &cred->job_hostlist, &len,   buffer);
-
+}
+#endif
 	/* "sigp" must be last */
 	sigp = (char **) &cred->signature;
 	safe_unpackmem_xmalloc( sigp,                &len,   buffer);
@@ -1237,7 +1264,6 @@ void
 slurm_cred_print(slurm_cred_t cred)
 {
         int i;
-	char str[128];
 
 	if (cred == NULL)
 		return;
@@ -1257,7 +1283,9 @@ slurm_cred_print(slurm_cred_t cred)
 		info("      alloc_lps[%d] %u ", i, cred->alloc_lps[i]);
 	info("Cred: ctime         %s",  ctime(&cred->ctime) );
 	info("Cred: siglen        %u",  cred->siglen        );
-
+#ifndef HAVE_BG
+{
+	char str[128];
 	info("Cred: core_bitmap   %s", 
 	     bit_fmt(str, sizeof(str), cred->core_bitmap));
 	info("Cred: sockets_per_node, cores_per_socket, rep_count");
@@ -1268,7 +1296,9 @@ slurm_cred_print(slurm_cred_t cred)
 		     cred->sock_core_rep_count[i]);
 	}
 	info("Cred: job_nhosts   %u",   cred->job_nhosts    );
-	info("Cred: job_hostlist %u",   cred->job_hostlist  );
+	info("Cred: job_hostlist %s",   cred->job_hostlist  );
+}
+#endif
 	slurm_mutex_unlock(&cred->mutex);
 
 }
@@ -1472,7 +1502,7 @@ _slurm_cred_verify_signature(slurm_cred_ctx_t ctx, slurm_cred_t cred)
 static void
 _pack_cred(slurm_cred_t cred, Buf buffer)
 {
-	uint32_t cred_uid = (uint32_t) cred->uid, tot_core_cnt;
+	uint32_t cred_uid = (uint32_t) cred->uid;
 
 	pack32(cred->jobid,    buffer);
 	pack32(cred->stepid,   buffer);
@@ -1483,6 +1513,9 @@ _pack_cred(slurm_cred_t cred, Buf buffer)
 	if (cred->alloc_lps_cnt > 0)
 		pack16_array(cred->alloc_lps, cred->alloc_lps_cnt, buffer);
 	pack_time(cred->ctime, buffer);
+#ifndef HAVE_BG
+{
+	uint32_t tot_core_cnt;
 	tot_core_cnt = bit_size(cred->core_bitmap);
 	pack32(tot_core_cnt, buffer);
 	pack_bit_fmt(cred->core_bitmap, buffer);
@@ -1498,6 +1531,8 @@ _pack_cred(slurm_cred_t cred, Buf buffer)
 	pack32(cred->job_nhosts,    buffer);
 	packstr(cred->job_hostlist, buffer);
 }
+#endif
+}
 
 
 static bool