diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c
index 94f2829605968f6eb73ab439688f8722a5685982..2ee574f1a8891233150f44e7c07b46277fc6a967 100644
--- a/src/common/slurm_protocol_pack.c
+++ b/src/common/slurm_protocol_pack.c
@@ -8654,7 +8654,6 @@ static void _pack_block_info_msg(block_info_t *block_info, Buf buffer,
 			packnull(buffer);
 			packnull(buffer);
 
-			pack32(NO_VAL, buffer);
 			pack32(NO_VAL, buffer);
 
 			packnull(buffer);
@@ -8708,8 +8707,6 @@ static void _pack_block_info_msg(block_info_t *block_info, Buf buffer,
 		}
 		count = NO_VAL;
 
-		pack32(block_info->job_running, buffer);
-
 		packstr(block_info->linuximage, buffer);
 		packstr(block_info->mloaderimage, buffer);
 		packstr(block_info->mp_str, buffer);
@@ -8792,7 +8789,7 @@ static void _pack_block_info_msg(block_info_t *block_info, Buf buffer,
 		}
 		count = NO_VAL;
 
-		pack32(block_info->job_running, buffer);
+		pack32(NO_VAL, buffer); /* for job_running */
 
 		packstr(block_info->linuximage, buffer);
 		packstr(block_info->mloaderimage, buffer);
@@ -8800,7 +8797,7 @@ static void _pack_block_info_msg(block_info_t *block_info, Buf buffer,
 		packstr(block_info->mp_used_str, buffer);
 		pack32(block_info->cnode_cnt, buffer);
 		pack16(block_info->node_use, buffer);
-		packnull(buffer);
+		packnull(buffer); /* for user name */
 		packstr(block_info->ramdiskimage, buffer);
 		packstr(block_info->reason, buffer);
 		pack16(block_info->state, buffer);
@@ -8860,7 +8857,7 @@ static void _pack_block_info_msg(block_info_t *block_info, Buf buffer,
 		} else
 			packnull(buffer);
 
-		pack32(block_info->job_running, buffer);
+		pack32(NO_VAL, buffer); /* for job_running */
 
 		packstr(block_info->linuximage, buffer);
 		packstr(block_info->mloaderimage, buffer);
@@ -8868,7 +8865,7 @@ static void _pack_block_info_msg(block_info_t *block_info, Buf buffer,
 		pack32(block_info->cnode_cnt, buffer);
 		if(cluster_flags & CLUSTER_FLAG_BGL)
 			pack16(block_info->node_use, buffer);
-		packnull(buffer);
+		packnull(buffer); /* for user_name */
 		packstr(block_info->ramdiskimage, buffer);
 		packstr(block_info->reason, buffer);
 		pack16(block_info->state, buffer);
@@ -8920,7 +8917,7 @@ static void _pack_block_info_msg(block_info_t *block_info, Buf buffer,
 		} else
 			packnull(buffer);
 
-		pack32(block_info->job_running, buffer);
+		pack32(NO_VAL, buffer); /* for job_running */
 
 		packstr(block_info->linuximage, buffer);
 		packstr(block_info->mloaderimage, buffer);
@@ -8928,7 +8925,7 @@ static void _pack_block_info_msg(block_info_t *block_info, Buf buffer,
 		pack32(block_info->cnode_cnt, buffer);
 		if(cluster_flags & CLUSTER_FLAG_BGL)
 			pack16(block_info->node_use, buffer);
-		packnull(buffer);
+		packnull(buffer); /* for user_name */
 		packstr(block_info->ramdiskimage, buffer);
 		pack16(block_info->state, buffer);
 	}
@@ -9014,7 +9011,6 @@ extern int slurm_unpack_block_info_members(block_info_t *block_info, Buf buffer,
 			}
 		}
 
-		safe_unpack32(&block_info->job_running, buffer);
 		safe_unpackstr_xmalloc(&block_info->linuximage,
 				       &uint32_tmp, buffer);
 		safe_unpackstr_xmalloc(&block_info->mloaderimage,
@@ -9081,7 +9077,16 @@ extern int slurm_unpack_block_info_members(block_info_t *block_info, Buf buffer,
 			}
 		}
 
-		safe_unpack32(&block_info->job_running, buffer);
+		safe_unpack32(&uint32_tmp, buffer);
+		if (uint32_tmp != (uint32_t)NO_JOB_RUNNING) {
+			block_job_info_t *job =
+				xmalloc(sizeof(block_job_info_t));;
+			if (!block_info->job_list)
+				block_info->job_list =
+					list_create(slurm_free_block_job_info);
+			job->job_id = uint32_tmp;
+			list_append(block_info->job_list, job);
+		}
 		safe_unpackstr_xmalloc(&block_info->linuximage,
 				       &uint32_tmp, buffer);
 		safe_unpackstr_xmalloc(&block_info->mloaderimage,
@@ -9129,7 +9134,16 @@ extern int slurm_unpack_block_info_members(block_info_t *block_info, Buf buffer,
 			block_info->ionode_inx = bitfmt2int(mp_inx_str);
 			xfree(mp_inx_str);
 		}
-		safe_unpack32(&block_info->job_running, buffer);
+		safe_unpack32(&uint32_tmp, buffer);
+		if (uint32_tmp != (uint32_t)NO_JOB_RUNNING) {
+			block_job_info_t *job =
+				xmalloc(sizeof(block_job_info_t));;
+			if (!block_info->job_list)
+				block_info->job_list =
+					list_create(slurm_free_block_job_info);
+			job->job_id = uint32_tmp;
+			list_append(block_info->job_list, job);
+		}
 		safe_unpackstr_xmalloc(&block_info->linuximage,
 				       &uint32_tmp, buffer);
 		safe_unpackstr_xmalloc(&block_info->mloaderimage,
@@ -9169,7 +9183,16 @@ extern int slurm_unpack_block_info_members(block_info_t *block_info, Buf buffer,
 			block_info->ionode_inx = bitfmt2int(mp_inx_str);
 			xfree(mp_inx_str);
 		}
-		safe_unpack32(&block_info->job_running, buffer);
+		safe_unpack32(&uint32_tmp, buffer);
+		if (uint32_tmp != (uint32_t)NO_JOB_RUNNING) {
+			block_job_info_t *job =
+				xmalloc(sizeof(block_job_info_t));;
+			if (!block_info->job_list)
+				block_info->job_list =
+					list_create(slurm_free_block_job_info);
+			job->job_id = uint32_tmp;
+			list_append(block_info->job_list, job);
+		}
 		safe_unpackstr_xmalloc(&block_info->linuximage,
 				       &uint32_tmp, buffer);
 		safe_unpackstr_xmalloc(&block_info->mloaderimage,
diff --git a/src/plugins/select/bluegene/select_bluegene.c b/src/plugins/select/bluegene/select_bluegene.c
index 32107ecc59b25408de29765262ab752e26e3c71a..4e6044d5237785a995bd264606bb9a2afa7c8247 100644
--- a/src/plugins/select/bluegene/select_bluegene.c
+++ b/src/plugins/select/bluegene/select_bluegene.c
@@ -426,6 +426,21 @@ static bg_record_t *_translate_info_2_record(block_info_t *block_info)
 	return bg_record;
 }
 
+static void _local_pack_block_job_info(struct job_record *job_ptr, Buf buffer,
+				       uint16_t protocol_version)
+{
+	block_job_info_t block_job;
+	select_jobinfo_t *jobinfo = job_ptr->select_jobinfo->data;
+
+	memset(&block_job, 0, sizeof(block_job_info_t));
+	block_job.job_id = job_ptr->job_id;
+	block_job.user_id = job_ptr->user_id;
+	block_job.user_name = jobinfo->user_name;
+	block_job.cnodes = jobinfo->ionode_str;
+	/* block_job.cnode_inx -- try not to set */
+	slurm_pack_block_job_info(&block_job, buffer, protocol_version);
+}
+
 /* Pack all relevent information about a block */
 /* NOTE: There is a matching pack function in
  * common/slurm_protocol_pack.c dealing with the block_info_t
@@ -438,13 +453,10 @@ static void _pack_block(bg_record_t *bg_record, Buf buffer,
 #ifdef HAVE_BGQ
 	int dim;
 #endif
-	uint32_t count = NO_VAL;
-	block_job_info_t block_job;
+	uint32_t count = NO_VAL, running_job = 0;
 	struct job_record *job_ptr;
 	ListIterator itr;
 
-	memset(&block_job, 0, sizeof(block_job_info_t));
-
 	if (protocol_version >= SLURM_2_4_PROTOCOL_VERSION) {
 		packstr(bg_record->bg_block_id, buffer);
 		packstr(bg_record->blrtsimage, buffer);
@@ -462,30 +474,28 @@ static void _pack_block(bg_record_t *bg_record, Buf buffer,
 
 		if (bg_record->job_list)
 			count = list_count(bg_record->job_list);
-		pack32(count, buffer);
+
 		if (count && count != NO_VAL) {
+			pack32(count, buffer);
 			itr = list_iterator_create(bg_record->job_list);
 			while ((job_ptr = list_next(itr))) {
-				select_jobinfo_t *jobinfo;
 				if (job_ptr->magic != JOB_MAGIC) {
 					list_delete_item(itr);
 					continue;
 				}
-				jobinfo = job_ptr->select_jobinfo->data;
-
-				block_job.job_id = job_ptr->job_id;
-				block_job.user_id = job_ptr->user_id;
-				block_job.user_name = jobinfo->user_name;
-				block_job.cnodes = jobinfo->ionode_str;
-				/* block_job.cnode_inx -- try not to set */
-				slurm_pack_block_job_info(&block_job, buffer,
-							  protocol_version);
+				_local_pack_block_job_info(
+					job_ptr, buffer, protocol_version);
 			}
 			list_iterator_destroy(itr);
-		}
+		} else if (bg_record->job_ptr) {
+			pack32(1, buffer);
+			_local_pack_block_job_info(
+				bg_record->job_ptr, buffer, protocol_version);
+		} else
+			pack32(count, buffer);
+
 		count = NO_VAL;
 
-		pack32((uint32_t)bg_record->job_running, buffer);
 		packstr(bg_record->linuximage, buffer);
 		packstr(bg_record->mloaderimage, buffer);
 		packstr(bg_record->mp_str, buffer);
@@ -517,26 +527,21 @@ static void _pack_block(bg_record_t *bg_record, Buf buffer,
 		if (count && count != NO_VAL) {
 			itr = list_iterator_create(bg_record->job_list);
 			while ((job_ptr = list_next(itr))) {
-				select_jobinfo_t *jobinfo;
 				if (job_ptr->magic != JOB_MAGIC) {
 					list_delete_item(itr);
 					continue;
 				}
-				jobinfo = job_ptr->select_jobinfo->data;
-
-				block_job.job_id = job_ptr->job_id;
-				block_job.user_id = job_ptr->user_id;
-				block_job.user_name = jobinfo->user_name;
-				block_job.cnodes = jobinfo->ionode_str;
-				/* block_job.cnode_inx -- try not to set */
-				slurm_pack_block_job_info(&block_job, buffer,
-							  protocol_version);
+				_local_pack_block_job_info(
+					job_ptr, buffer, protocol_version);
 			}
 			list_iterator_destroy(itr);
 		}
+		if ((count == 1) && running_job)
+			pack32((uint32_t)running_job, buffer);
+		else
+			pack32((uint32_t)bg_record->job_running, buffer);
 		count = NO_VAL;
 
-		pack32((uint32_t)bg_record->job_running, buffer);
 		packstr(bg_record->linuximage, buffer);
 		packstr(bg_record->mloaderimage, buffer);
 		packstr(bg_record->mp_str, buffer);