diff --git a/slurm/slurm.h.in b/slurm/slurm.h.in
index 4b67461ca8db26df590aa4df3da50d2dd6338c0d..16b997bc5239026717fe95cecff1303542817216 100644
--- a/slurm/slurm.h.in
+++ b/slurm/slurm.h.in
@@ -701,6 +701,7 @@ typedef struct job_info {
 	char *name;		/* name of the job */
 	char *network;		/* network specification */
 	char *nodes;		/* list of nodes allocated to job */
+	uint16_t nice;    	/* requested priority change */
 	int *node_inx;		/* list index pairs into node_table for *nodes:
 				 * start_range_1, end_range_1, 
 				 * start_range_2, .., -1  */
@@ -924,6 +925,7 @@ typedef struct {
 	int *node_inx;		/* list index pairs into node_table for *nodes:
 				 * start_range_1, end_range_1,
 				 * start_range_2, .., -1  */
+	uint32_t num_cpus;	/* how many cpus are being used by step */
 	uint32_t num_tasks;	/* number of tasks */
 	char *partition;	/* name of assigned partition */
 	char *resv_ports;	/* ports allocated for MPI */
diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c
index 4b9d2dc6fee2c956c19ac70260d325813986dd69..a43e28a420f71cf946ee540e975024d9e95fc22e 100644
--- a/src/common/slurm_protocol_pack.c
+++ b/src/common/slurm_protocol_pack.c
@@ -2671,6 +2671,7 @@ _unpack_job_step_info_members(job_step_info_t * step, Buf buffer)
 	safe_unpack32(&step->step_id, buffer);
 	safe_unpack16(&step->ckpt_interval, buffer);
 	safe_unpack32(&step->user_id, buffer);
+	safe_unpack32(&step->num_cpus, buffer);
 	safe_unpack32(&step->num_tasks, buffer);
 
 	safe_unpack32(&step->time_limit, buffer);
@@ -2792,6 +2793,8 @@ _unpack_job_info_members(job_info_t * job, Buf buffer)
 	safe_unpack32(&job->alloc_sid,    buffer);
 	safe_unpack32(&job->time_limit,   buffer);
 
+	safe_unpack16(&job->nice, buffer);
+
 	safe_unpack_time(&job->submit_time, buffer);
 	safe_unpack_time(&job->eligible_time, buffer);
 	safe_unpack_time(&job->start_time, buffer);
diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c
index 8bb4d6d0d52f36a728e4addda6b0a03b3a335b0e..8f6dab56318d5ba117647748fc91e44dc99d7bbd 100644
--- a/src/slurmctld/job_mgr.c
+++ b/src/slurmctld/job_mgr.c
@@ -4228,6 +4228,7 @@ extern int pack_one_job(char **buffer_ptr, int *buffer_size,
 void pack_job(struct job_record *dump_job_ptr, uint16_t show_flags, Buf buffer)
 {
 	struct job_details *detail_ptr;
+	time_t begin_time = 0;
 
 	pack32(dump_job_ptr->assoc_id, buffer);
 	pack32(dump_job_ptr->job_id, buffer);
@@ -4246,15 +4247,23 @@ void pack_job(struct job_record *dump_job_ptr, uint16_t show_flags, Buf buffer)
 		pack32(dump_job_ptr->time_limit, buffer);
 
 	if (dump_job_ptr->details) {
+		pack16(dump_job_ptr->details->nice,  buffer);
 		pack_time(dump_job_ptr->details->submit_time, buffer);
 		/* Earliest possible begin time */
-		pack_time(dump_job_ptr->details->begin_time, buffer);
+		begin_time = dump_job_ptr->details->begin_time;
 	} else {
+		pack16(0, buffer);
 		pack_time((time_t) 0, buffer);
-		pack_time((time_t) 0, buffer);		
 	}
+
+	pack_time(begin_time, buffer);
+
 	/* Actual or expected start time */
-	pack_time(dump_job_ptr->start_time, buffer);
+	if(dump_job_ptr->start_time)
+		pack_time(dump_job_ptr->start_time, buffer);
+	else
+		pack_time(begin_time, buffer);
+
 	pack_time(dump_job_ptr->end_time, buffer);
 	pack_time(dump_job_ptr->suspend_time, buffer);
 	pack_time(dump_job_ptr->pre_sus_time, buffer);
diff --git a/src/slurmctld/step_mgr.c b/src/slurmctld/step_mgr.c
index 7473a1fa90ced04ca5f10e6ae9b2fb8183fb7762..a4b8b56b3556104f65a78f76b0c2a195dd132395 100644
--- a/src/slurmctld/step_mgr.c
+++ b/src/slurmctld/step_mgr.c
@@ -1535,7 +1535,7 @@ static void _pack_ctld_job_step_info(struct step_record *step_ptr, Buf buffer)
 
 	if (step_ptr->step_layout) {
 		task_cnt = step_ptr->step_layout->task_cnt;
-		node_list = step_ptr->step_layout->node_list;		
+		node_list = step_ptr->step_layout->node_list;	
 	} else {
 		task_cnt = step_ptr->job_ptr->num_procs;
 		node_list = step_ptr->job_ptr->nodes;	
@@ -1544,6 +1544,14 @@ static void _pack_ctld_job_step_info(struct step_record *step_ptr, Buf buffer)
 	pack32(step_ptr->step_id, buffer);
 	pack16(step_ptr->ckpt_interval, buffer);
 	pack32(step_ptr->job_ptr->user_id, buffer);
+#ifdef HAVE_BG
+	if (step_ptr->job_ptr->total_procs)
+		pack32(step_ptr->job_ptr->total_procs, buffer);
+	else
+		pack32(step_ptr->job_ptr->num_procs, buffer);
+#else
+	pack32(step_ptr->cpu_count, buffer);
+#endif
 	pack32(task_cnt, buffer);
 
 	pack32(step_ptr->time_limit, buffer);
@@ -1552,7 +1560,7 @@ static void _pack_ctld_job_step_info(struct step_record *step_ptr, Buf buffer)
 		run_time = step_ptr->pre_sus_time;
 	} else {
 		begin_time = MAX(step_ptr->start_time,
-				step_ptr->job_ptr->suspend_time);
+				 step_ptr->job_ptr->suspend_time);
 		run_time = step_ptr->pre_sus_time +
 			difftime(time(NULL), begin_time);
 	}