diff --git a/doc/html/jobacctplugins.shtml b/doc/html/jobacctplugins.shtml
index 8aa51658cbc6a0ce6374ba348aad41fd2bc1d6f8..9c4b7154f5e9ea9c36f2d04e6be031939b103764 100644
--- a/doc/html/jobacctplugins.shtml
+++ b/doc/html/jobacctplugins.shtml
@@ -90,21 +90,23 @@ jobacct_p_add_task() used to add a task to the poller.
 <p class="commandline">jobacctinfo_t *jobacct_p_stat_task(pid_t pid) 
 <p style="margin-left:.2in"><b>Description</b>:
 jobacct_p_stat_task() used to get most recent information about task.
-DO NOT FREE the information returned by this function!
+You need to FREE the information returned by this function!
 <p style="margin-left:.2in"><b>Arguments</b>: 
 <span class="commandline"> pid</span> (input) Process id  
 <p style="margin-left:.2in"><b>Returns</b>: 
 <span class="commandline">jobacctinfo structure pointer</span> on success, or
 <span class="commandline">NULL</span> on failure.
 
-<p class="commandline">int jobacct_p_remove_task(pid_t pid) 
+<p class="commandline">jobacctinfo_t *jobacct_p_remove_task(pid_t pid) 
 <p style="margin-left:.2in"><b>Description</b>:
 jobacct_p_remove_task() used to remove a task from the poller.
+You need to FREE the information returned by this function!
 <p style="margin-left:.2in"><b>Arguments</b>: 
 <span class="commandline"> pid</span> (input) Process id  
 <p style="margin-left:.2in"><b>Returns</b>: 
-<span class="commandline">SLURM_SUCCESS</span> on success, or
-<span class="commandline">SLURM_FAILURE</span> on failure.
+<span class="commandline">Pointer to removed jobacctinfo_t structure</span> 
+on success, or 
+<span class="commandline">NULL</span> on failure.
 
 <p class="footer"><a href="#top">top</a>
 
@@ -279,6 +281,19 @@ different jobacctinfo structures.
 <p style="margin-left:.2in"><b>Returns</b>: 
 <span class="commandline">none</span>
 
+<p class="commandline">
+void jobacct_p_2_sacct(sacct_t *sacct, jobacctinfo_t *jobacct) 
+<p style="margin-left:.2in"><b>Description</b>:
+jobacct_p_2_sacct() is called to transfer information from data structure 
+jobacct to structure sacct.
+<p style="margin-left:.2in"><b>Arguments</b>: 
+<span class="commandline">sacct</span> 
+(input/output) initial structure to be applied to.
+<span class="commandline">jobacct</span> 
+(input) jobacctinfo_t structure containing information to apply to sacct.
+<p style="margin-left:.2in"><b>Returns</b>: 
+<span class="commandline">none</span>
+
 <p class="commandline">
 void jobacct_p_pack(jobacctinfo_t *jobacct, Buf buffer) 
 <p style="margin-left:.2in"><b>Description</b>:
diff --git a/doc/man/man1/sacct.1 b/doc/man/man1/sacct.1
index b3c5ad28f70558574feaf47446c5b2839c620e78..47effd83fa92dae62de29bc5383f5d90d51b76eb 100644
--- a/doc/man/man1/sacct.1
+++ b/doc/man/man1/sacct.1
@@ -20,7 +20,7 @@ command displays job accounting data stored in the job accounting log
 file in a variety of forms for your analysis.
 The 
 .BR "sacct "
-command displays information on jobs, job steps, status, and errors by 
+command displays information on jobs, job steps, status, and exitcodes by 
 default.
 You can tailor the output with the use of the 
 \f3--fields=\fP 
@@ -64,13 +64,13 @@ Displays a brief listing, which includes the following data:
 .RS 
 .TP "3"
 \(bu
-\f3jobstep\fP 
+\f3jobid\fP 
 .TP "3"
 \(bu
 \f3status\fP 
 .TP "3"
 \(bu
-\f3error\fP 
+\f3exitcode\fP 
 .RE 
 .IP 
 This option has no effect when the 
@@ -130,8 +130,8 @@ Thus, the following two commands display the same data but in different order:
 .PP
 .nf 
 .ft 3
-# sacct --fields=jobstep,status
-Jobstep    Status
+# sacct --fields=jobid,status
+Jobid    Status
 ---------- ----------
 3          COMPLETED
 3.0        COMPLETED
@@ -143,8 +143,8 @@ Jobstep    Status
 .PP
 .nf 
 .ft 3
-# sacct --fields=status,jobstep
-Status     Jobstep
+# sacct --fields=status,jobid
+Status     Jobid
 ---------- ----------
 COMPLETED  3
 COMPLETED  3.0
@@ -156,7 +156,7 @@ COMPLETED  3.0
 The default value for the 
 \f2field_list\fP 
 operand is 
-\f3"jobstep,partition,process,ncpus,status,error"\fP\c
+\f3"jobid,partition,process,ncpus,status,exitcode"\fP\c
 \&.
 .IP 
 This option has no effect when the 
@@ -198,15 +198,16 @@ option.
 .nf 
 .ft 3
 Fields available:
-   cpu         elapsed     error       finished
+   cpu         elapsed     exitcode    blockid
    gid         group       idrss       inblocks
    isrss       ixrss       job         jobname
-   jobstep     majflt      minflt      msgrcv
+   jobid     majflt      minflt      msgrcv
    msgsnd      ncpus       nivcsw      nodes
-   nprocs      nsignals    nswap       ntasks
+   nprocs      ntasks      nsignals    nswap
    nvcsw       outblocks   partition   psize
    rss         status      submitted   systemcpu
    uid         user        usercpu     vsize 
+   cputime
 
 .ft 1
 .fi 
@@ -214,17 +215,17 @@ Fields available:
 .IP 
 The section titled "Job Accounting Fields" describes these fields.
 .TP 
-\f3\-j \fP\f2job_list\fP \f3,\fP  \f3--jobs\fP\f3=\fP\f2job_list\fP
-Displays information about the specified job or list of jobs.
+\f3\-j \fP\f2job(.step)\fP \f3,\fP  \f3--jobs\fP\f3=\fP\f2job(.step)\fP
+Displays information about the specified job(.step) or list of job(.step)s.
 .IP 
 The 
-\f2job_list\fP 
+\f2job(.step)\fP 
 parameter is a comma-separated list of jobs.
 Space characters are not permitted in this list.
 .IP 
 The default is to display information on all jobs.
 .TP 
-\f3\-J \fP\f2job.step\fP \f3,\fP  \f3--jobstep\fP\f3=\fP\f2job.step\fP
+\f3\-J \fP\f2job.step\fP \f3,\fP  \f3--jobid\fP\f3=\fP\f2job.step\fP
 Displays data only for the job steps specified by the 
 \f2job.step\fP 
 operand, which is a comma-separated list.
@@ -240,19 +241,25 @@ Displays a long listing, which includes the following data:
 \f3jobstep\fP 
 .TP "3"
 \(bu
-\f3usercpu\fP 
+\f3jobname\fP 
 .TP "3"
 \(bu
-\f3systemcpu\fP 
+\f3partition\fP 
 .TP "3"
 \(bu
-\f3minflt\fP 
+\f3vsize\fP 
 .TP "3"
 \(bu
-\f3majflt\fP 
+\f3rss\fP 
 .TP "3"
 \(bu
-\f3nprocs\fP 
+\f3pages\fP 
+.TP "3"
+\(bu
+\f3cputime\fP 
+.TP "3"
+\(bu
+\f3ntasks\fP 
 .TP "3"
 \(bu
 \f3ncpus\fP 
@@ -264,7 +271,7 @@ Displays a long listing, which includes the following data:
 \f3status\fP 
 .TP "3"
 \(bu
-\f3error\fP 
+\f3exitcode\fP 
 .RE 
 .TP 
 \f3--noheader\fP
@@ -379,7 +386,7 @@ seconds
 hundredths of seconds
 .RE 
 .TP 
-\f3error\fP 
+\f3exitcode\fP 
 The first non-zero error code returned by any job step.
 .TP 
 \f3finished\fP 
@@ -715,7 +722,7 @@ Timed out
 .RE 
 .TP 
 13
-\f3error\fP 
+\f3exitcode\fP 
 .TP 
 14
 \f3nprocs\fP 
@@ -876,7 +883,7 @@ Timed out
 .RE 
 .TP 
 13
-\f3error\fP 
+\f3exitcode\fP 
 .TP 
 14
 \f3nprocs\fP 
@@ -965,7 +972,7 @@ command:
 .nf 
 .ft 3
 # sacct
-Jobstep    Jobname    Partition    Ncpus Status     Error
+Jobstep    Jobname    Partition    Ncpus Status     Exitcode
 ---------- ---------- ---------- ------- ---------- -----
 2          script01   srun             1 RUNNING        0
 3          script02   srun             1 RUNNING        0
@@ -984,7 +991,7 @@ option.
 .nf 
 .ft 3
 # sacct --brief
-Jobstep    Status     Error
+Jobstep    Status     Exitcode
 ---------- ---------- -----
 2          RUNNING        0
 3          RUNNING        0
@@ -999,7 +1006,7 @@ Jobstep    Status     Error
 .nf 
 .ft 3
 # sacct --total
-Jobstep    Jobname    Partition    Ncpus Status     Error
+Jobstep    Jobname    Partition    Ncpus Status     Exitcode
 ---------- ---------- ---------- ------- ---------- -----
 3          sja_init   andy             1 COMPLETED      0
 4          sjaload    andy             2 COMPLETED      0
diff --git a/src/common/forward.c b/src/common/forward.c
index cc58f267120d248c35cfbee1deda7308cca84db4..ff76698387aaa8d11d3f7303e24362c6d38bf358 100644
--- a/src/common/forward.c
+++ b/src/common/forward.c
@@ -150,9 +150,10 @@ nothing_sent:
 	while((returned_type = list_pop(ret_list)) != NULL) {
 		itr = list_iterator_create(fwd_msg->ret_list);	
 		while((type = (ret_types_t *) list_next(itr)) != NULL) {
-			if(type->msg_rc == returned_type->msg_rc) {
+			if(type->msg_rc == returned_type->msg_rc){
 				while((ret_data_info = 
-				      list_pop(returned_type->ret_data_list))) {
+				       list_pop(returned_type->
+						ret_data_list))) {
 					list_push(type->ret_data_list, 
 						  ret_data_info);
 				}
@@ -467,9 +468,12 @@ void destroy_data_info(void *object)
 	ret_data_info_t *ret_data_info = (ret_data_info_t *)object;
 	if(ret_data_info) {
 		xfree(ret_data_info->node_name);
-		/*FIXME: needs to probably be something for all 
-		  types or messages */
-		xfree(ret_data_info->data);
+		/*
+		  FIXME: needs to probably be something for all 
+		  types or messages --
+		  Handle deletion of data inside of call not here
+		  xfree(ret_data_info->data);
+		*/
 		xfree(ret_data_info);
 	}
 }
diff --git a/src/common/slurm_protocol_api.c b/src/common/slurm_protocol_api.c
index 6cf3bc0a255925007bcb8afbee33001507be6e09..595c057378a4b9c1efd769f5ee84e698c2d26247 100644
--- a/src/common/slurm_protocol_api.c
+++ b/src/common/slurm_protocol_api.c
@@ -1005,7 +1005,7 @@ int slurm_send_node_msg(slurm_fd fd, slurm_msg_t * msg)
 		slurm_mutex_unlock(&msg->forward_struct->forward_mutex);
 		destroy_forward_struct(msg->forward_struct);
 	}
-
+	
 	init_header(&header, msg, SLURM_PROTOCOL_NO_FLAGS);
 
 	/*
@@ -1800,7 +1800,7 @@ int slurm_send_recv_controller_rc_msg(slurm_msg_t *req, int *rc)
 
 extern int *set_span(int total,  uint16_t tree_width)
 {
-	int *span;
+	int *span = NULL;
 	int left = total;
 	int i = 0;
 
diff --git a/src/sacct/options.c b/src/sacct/options.c
index ea30561b78fb92636d9970ff403b529143ee5441..f6bcc7aa58bcf2110d25a1dffd6ebc693a8a4d76 100644
--- a/src/sacct/options.c
+++ b/src/sacct/options.c
@@ -743,6 +743,13 @@ void parse_command_line(int argc, char **argv)
 			break;
 
 		case 'S':
+			params.opt_field_list =
+				xrealloc(params.opt_field_list,
+					 (params.opt_field_list==NULL? 0 :
+					  sizeof(params.opt_field_list)) +
+					 sizeof(STAT_FIELDS)+1);
+			strcat(params.opt_field_list, STAT_FIELDS);
+			strcat(params.opt_field_list, ",");
 			params.opt_stat = 1;
 			break;
 
diff --git a/src/sacct/print.c b/src/sacct/print.c
index 4605b349f2c9f08a144d4ccf8e9977b3fb886dc2..48c29fd8f4ed80d8a22b43f3506281368d4be993 100644
--- a/src/sacct/print.c
+++ b/src/sacct/print.c
@@ -336,7 +336,7 @@ void print_name(type_t type, void *object)
 	} 
 }
 
-void print_step(type_t type, void *object)
+void print_jobid(type_t type, void *object)
 {
 	job_rec_t *job = (job_rec_t *)object;
 	step_rec_t *step = (step_rec_t *)object;
diff --git a/src/sacct/process.c b/src/sacct/process.c
index 75ca5cdcc5cbe6e7dcdf470d5ff01fad054c2b60..78f8476f4f8cebb427a1254924a2af202a544c2f 100644
--- a/src/sacct/process.c
+++ b/src/sacct/process.c
@@ -87,7 +87,7 @@ job_rec_t *_init_job_rec(acct_header_t header)
 	memcpy(&job->header, &header, sizeof(acct_header_t));
 	memset(&job->rusage, 0, sizeof(struct rusage));
 	memset(&job->sacct, 0, sizeof(sacct_t));
-	job->sacct.min_cpu = NO_VAL;
+	job->sacct.min_cpu = (float)NO_VAL;
 	job->job_start_seen = 0;
 	job->job_step_seen = 0;
 	job->job_terminated_seen = 0;
@@ -467,9 +467,9 @@ void aggregate_sacct(sacct_t *dest, sacct_t *from)
 		dest->max_pages_task = from->max_pages_task;
 	}
 	dest->ave_pages += from->ave_pages;
-	
-	if((dest->min_cpu > from->min_cpu) 
-	   || (dest->min_cpu == NO_VAL)) {
+
+	if((dest->min_cpu > from->min_cpu)
+	   || (dest->min_cpu == (float)NO_VAL)) {
 		dest->min_cpu = from->min_cpu;
 		dest->min_cpu_task = from->min_cpu_task;
 	}
diff --git a/src/sacct/sacct.c b/src/sacct/sacct.c
index 40ce4ac8c8e0df91525d94f1dac722a1297c0bb0..b06800c4a8e7caaaf1e440eb789f996ec5e00b04 100644
--- a/src/sacct/sacct.c
+++ b/src/sacct/sacct.c
@@ -150,7 +150,7 @@ fields_t fields[] = {{"cpu", print_cpu},
 		     {"ixrss", print_ixrss}, 
 		     {"job", print_job}, 
 		     {"jobname", print_name}, 
-		     {"jobstep", print_step}, 
+		     {"jobid", print_jobid}, 
 		     {"majflt", print_majflt}, 
 		     {"minflt", print_minflt}, 
 		     {"msgrcv", print_msgrcv}, 
diff --git a/src/sacct/sacct.h b/src/sacct/sacct.h
index 9ee59b0ef48b95157c437a8e2e8ff0864b56a4d9..711f49cb31071629f5e948c74e7e1a5cace371c5 100644
--- a/src/sacct/sacct.h
+++ b/src/sacct/sacct.h
@@ -54,9 +54,10 @@
  * which have no logical jobsteps. */
 #define BATCH_JOB_TIMESTAMP 0
 
-#define BRIEF_FIELDS "jobstep,status,exitcode"
-#define DEFAULT_FIELDS "jobstep,jobname,partition,ncpus,status,exitcode"
-#define LONG_FIELDS "jobstep,jobname,partition,vsize,rss,pages,cputime,ntasks,ncpus,elapsed,status,exitcode"
+#define BRIEF_FIELDS "jobid,status,exitcode"
+#define DEFAULT_FIELDS "jobid,jobname,partition,ncpus,status,exitcode"
+#define STAT_FIELDS "jobid,vsize,rss,pages,cputime,ntasks,status"
+#define LONG_FIELDS "jobid,jobname,partition,vsize,rss,pages,cputime,ntasks,ncpus,elapsed,status,exitcode"
 
 #define BUFFER_SIZE 4096
 #define STATUS_COUNT 10
@@ -281,7 +282,7 @@ void print_isrss(type_t type, void *object);
 void print_ixrss(type_t type, void *object);
 void print_job(type_t type, void *object);
 void print_name(type_t type, void *object);
-void print_step(type_t type, void *object);
+void print_jobid(type_t type, void *object);
 void print_majflt(type_t type, void *object);
 void print_minflt(type_t type, void *object);
 void print_msgrcv(type_t type, void *object);
diff --git a/src/sacct/sacct_stat.c b/src/sacct/sacct_stat.c
index b405bc71c2ea8d580dd4eada5101bb7519abc6e9..f5d68bccca33b13edb03270d28461024183b847c 100644
--- a/src/sacct/sacct_stat.c
+++ b/src/sacct/sacct_stat.c
@@ -57,9 +57,9 @@ void *_stat_thread(void *args)
 	int ntasks = 0;
 
 	memset(&temp_sacct, 0, sizeof(sacct_t));
-	temp_sacct.min_cpu = NO_VAL;
+	temp_sacct.min_cpu = (float)NO_VAL;
 	memset(&temp_sacct2, 0, sizeof(sacct_t));
-	temp_sacct2.min_cpu = NO_VAL;
+	temp_sacct2.min_cpu = (float)NO_VAL;
 	
 	ret_list = slurm_send_recv_node_msg(msg, 
 					    &resp_msg, 
@@ -73,45 +73,66 @@ void *_stat_thread(void *args)
 	switch (resp_msg.msg_type) {
 	case MESSAGE_STAT_JOBACCT:
 		jobacct_msg = (stat_jobacct_msg_t *)resp_msg.data;
+		if(jobacct_msg) {
+			debug2("got it back for job %d %d tasks", 
+			     jobacct_msg->job_id,
+			     jobacct_msg->num_tasks);
+			jobacct_g_2_sacct(&temp_sacct, jobacct_msg->jobacct);
+			ntasks = jobacct_msg->num_tasks;
+			slurm_free_stat_jobacct_msg(jobacct_msg);
+		} else {
+			error("No Jobacct message returned!");
+		}
 		break;
 	case RESPONSE_SLURM_RC:
 		rc = ((return_code_msg_t *) resp_msg.data)->return_code;
 		slurm_free_return_code_msg(resp_msg.data);	
-		error("there was an error with the request rc = %d", rc);
-		goto cleanup;
+		error("there was an error with the request rc = %s", 
+		      slurm_strerror(rc));
 		break;
 	default:
 		rc = SLURM_UNEXPECTED_MSG_ERROR;
 		break;
 	}
 
-	if(jobacct_msg) {
-		info("got it back for job %d %d tasks", jobacct_msg->job_id,
-		     jobacct_msg->num_tasks);
-		jobacct_g_2_sacct(&temp_sacct, jobacct_msg->jobacct);
-		ntasks = jobacct_msg->num_tasks;
-		slurm_free_stat_jobacct_msg(jobacct_msg);
-	} else {
-		error("2 there was an error with the request rc = %d", rc);
-		goto cleanup;
-	}
 	itr = list_iterator_create(ret_list);		
 	while((ret_type = list_next(itr)) != NULL) {
-		data_itr = list_iterator_create(ret_type->ret_data_list);
-		while((ret_data_info = list_next(data_itr)) != NULL) {
-			jobacct_msg = 
-				(stat_jobacct_msg_t *)ret_data_info->data;
-			if(jobacct_msg) {
-				info("got it back for job %d", 
-				     jobacct_msg->job_id);
-				jobacct_g_2_sacct(&temp_sacct2, 
-						  jobacct_msg->jobacct);
-				ntasks += jobacct_msg->num_tasks;
-				slurm_free_stat_jobacct_msg(jobacct_msg);
-				aggregate_sacct(&temp_sacct, &temp_sacct2);
-			}	
+		switch (ret_type->type) {
+		case MESSAGE_STAT_JOBACCT:
+			data_itr = 
+				list_iterator_create(ret_type->ret_data_list);
+			while((ret_data_info = list_next(data_itr)) != NULL) {
+				jobacct_msg = (stat_jobacct_msg_t *)
+					ret_data_info->data;
+				if(jobacct_msg) {
+					debug2("got it back for job %d", 
+					       jobacct_msg->job_id);
+					jobacct_g_2_sacct(
+						&temp_sacct2, 
+						jobacct_msg->jobacct);
+					ntasks += jobacct_msg->num_tasks;
+					slurm_free_stat_jobacct_msg(
+						jobacct_msg);
+					aggregate_sacct(&temp_sacct, 
+							&temp_sacct2);
+				}
+			}
+			break;
+		case RESPONSE_SLURM_RC:
+			rc = ret_type->msg_rc;
+			error("there was an error with the request rc = %s", 
+			      slurm_strerror(rc));
+			break;
+		default:
+			rc = ret_type->msg_rc;
+			error("unknown return given %d rc = %s", 
+			      ret_type->type, slurm_strerror(rc));
+			break;
 		}
 	}
+	list_iterator_destroy(itr);
+	list_destroy(ret_list);
+
 	pthread_mutex_lock(&stat_mutex);
 	aggregate_sacct(&step.sacct, &temp_sacct);
 	step.ntasks += ntasks;		
@@ -130,15 +151,16 @@ int _sacct_query(resource_allocation_response_msg_t *job, uint32_t step_id)
 	slurm_msg_t *msg_array_ptr;
 	stat_jobacct_msg_t r;
 	int i;
-	int *span = set_span(job->node_cnt, 4000);
+	int *span = set_span(job->node_cnt, 0);
 	forward_t forward;
 	int thr_count = 0;
 	float tempf = 0;
 
-	debug("getting the stat of job %d", job->job_id);
+	debug("getting the stat of job %d on %d nodes", 
+	      job->job_id, job->node_cnt);
 
 	memset(&step.sacct, 0, sizeof(sacct_t));
-	step.sacct.min_cpu = NO_VAL;
+	step.sacct.min_cpu = (float)NO_VAL;
 	step.header.jobnum = job->job_id;
 	step.header.partition = NULL;
 	step.header.blockid = NULL;
@@ -154,7 +176,6 @@ int _sacct_query(resource_allocation_response_msg_t *job, uint32_t step_id)
 	r.step_id     = step_id;
 	r.jobacct     = jobacct_g_alloc((uint16_t)NO_VAL);
 
-	thr_count = 0;
 	forward.cnt = job->node_cnt;
 	/* we need this for forwarding, but not really anything else, so 
 	   this can be set to any sting as long as there are the same 
@@ -166,13 +187,14 @@ int _sacct_query(resource_allocation_response_msg_t *job, uint32_t step_id)
 	forward.addr = job->node_addr;
 	forward.node_id = NULL;
 	forward.timeout = 5000;
-
+	
+	thr_count = 0;
 	for (i = 0; i < job->node_cnt; i++) {
 		pthread_attr_t attr;
 		pthread_t threadid;
-		slurm_msg_t *m = &msg_array_ptr[i];
+		slurm_msg_t *m = &msg_array_ptr[thr_count];
 		
-		m->srun_node_id    = (uint32_t)i;			
+		m->srun_node_id    = 0;
 		m->msg_type        = MESSAGE_STAT_JOBACCT;
 		m->data            = &r;
 		m->ret_list = NULL;
@@ -183,7 +205,7 @@ int _sacct_query(resource_allocation_response_msg_t *job, uint32_t step_id)
 		       sizeof(slurm_addr));
 		
 		forward_set(&m->forward,
-			    span[i],
+			    span[thr_count],
 			    &i,
 			    &forward);
 		
@@ -210,7 +232,6 @@ int _sacct_query(resource_allocation_response_msg_t *job, uint32_t step_id)
 	slurm_mutex_lock(&stat_mutex);
 	while(thr_count > thr_finished) {
 		pthread_cond_wait(&stat_cond, &stat_mutex);
-		info("got %d", thr_finished);
 	}
 	slurm_mutex_unlock(&stat_mutex);
 	
@@ -226,7 +247,6 @@ int _sacct_query(resource_allocation_response_msg_t *job, uint32_t step_id)
 		tempf = step.sacct.ave_pages/step.ntasks;
 		step.sacct.ave_pages = (uint32_t)tempf;
 	}
-	info(" done");
 	xfree(msg_array_ptr);
 	jobacct_g_free(r.jobacct);	
 	return SLURM_SUCCESS;
@@ -276,7 +296,7 @@ int sacct_stat(uint32_t jobid, uint32_t stepid)
 	}
 		
 	if(!job) {
-		error("didn't get the job record rc = %d", rc);
+		error("didn't get the job record rc = %s", slurm_strerror(rc));
 		return rc;
 	}
 
diff --git a/src/slurmctld/proc_req.c b/src/slurmctld/proc_req.c
index 6aafb07a519a7dc9b5d4a32ce18b60d09fa22780..ed75ee3e46b3ccce1351b17f98521cc802dfd5fc 100644
--- a/src/slurmctld/proc_req.c
+++ b/src/slurmctld/proc_req.c
@@ -1539,7 +1539,8 @@ static void _slurm_rpc_step_complete(slurm_msg_t *msg)
  *	represent the termination of an entire job */
 static void  _slurm_rpc_stat_jobacct(slurm_msg_t * msg)
 {
-	int error_code = SLURM_SUCCESS, i=0;
+	int error_code = SLURM_SUCCESS, i = 0, i2 = 0, i3 = 0;
+	int count = 0, count2 = 0;
 	slurm_msg_t response_msg;
 	DEF_TIMERS;
 	stat_jobacct_msg_t *req = (stat_jobacct_msg_t *)msg->data;
@@ -1584,15 +1585,33 @@ static void  _slurm_rpc_stat_jobacct(slurm_msg_t * msg)
 
 		bit_fmt(bitstring, BUFFER_SIZE, step_ptr->step_node_bitmap);
 		node_pos = bitfmt2int(bitstring);
-
-		for(i=0; i < node_cnt; i++) {
-			if(node_pos[i] == -1) {
-				error("error with bitfmt2int");
-				break;
+		count = 0;
+		count2 = 0;
+		i = node_pos[count++];
+		i2 = node_pos[count++];
+		while(i != -1) {
+			if(i2 == -1) {
+				memcpy(&resp.node_addr[count2++], 
+				       &node_record_table_ptr[i].slurm_addr, 
+				       sizeof(slurm_addr));
+			       
+				
+			} else {
+				for(i3=i; i3 <= i2; i3++) {
+					if(i3 == -1) {
+						error("error with bitfmt2int "
+						      "on the %d one",
+						      i3);
+						break;
+					}
+					memcpy(&resp.node_addr[count2++], 
+					       &node_record_table_ptr[i3].
+					       slurm_addr, 
+					       sizeof(slurm_addr));
+				}
 			}
-			memcpy(&resp.node_addr[i], 
-			       &job_ptr->node_addr[node_pos[i]], 
-			       sizeof(slurm_addr));			
+			i = node_pos[count++];
+			i2 = node_pos[count++];	
 		}
 		resp.node_list = xstrdup(step_ptr->step_node_list);
 		resp.node_cnt = node_cnt;
diff --git a/src/slurmd/slurmd/req.c b/src/slurmd/slurmd/req.c
index 0c234bc6960518f9e8c08d8db39637f75d99728d..35b285b2a836a2365e92ad507987b250c28349e4 100644
--- a/src/slurmd/slurmd/req.c
+++ b/src/slurmd/slurmd/req.c
@@ -1189,6 +1189,8 @@ _rpc_stat_jobacct(slurm_msg_t *msg, slurm_addr *cli_addr)
 	resp_msg.data         = resp;
 	resp_msg.forward = msg->forward;
 	resp_msg.ret_list = msg->ret_list;
+	resp_msg.forward_struct_init = msg->forward_struct_init;
+	resp_msg.forward_struct = msg->forward_struct;
 	
 	slurm_send_node_msg(msg->conn_fd, &resp_msg);
 	slurm_free_stat_jobacct_msg(resp);
@@ -1269,7 +1271,9 @@ static void  _rpc_pid2jid(slurm_msg_t *msg, slurm_addr *cli)
 		resp_msg.data         = &resp;
 		resp_msg.forward = msg->forward;
 		resp_msg.ret_list = msg->ret_list;
-
+		resp_msg.forward_struct_init = msg->forward_struct_init;
+		resp_msg.forward_struct = msg->forward_struct;
+	
 		slurm_send_node_msg(msg->conn_fd, &resp_msg);
 	} else {
 		debug3("_rpc_pid2jid: pid(%u) not found", req->job_pid);