diff --git a/src/api/job_info.c b/src/api/job_info.c
index be33a197764eccf5b6793203fb1e50ce15b528f2..099e9196b70c0a89c6c90252f46150960e6629f1 100644
--- a/src/api/job_info.c
+++ b/src/api/job_info.c
@@ -23,6 +23,7 @@
 
 #include "pack.h"
 #include "slurmlib.h"
+#include "bits_bytes.h"
 
 #if DEBUG_MODULE
 /* main is used here for testing purposes only */
@@ -30,7 +31,7 @@ int
 main (int argc, char *argv[]) 
 {
 	static time_t last_update_time = (time_t) NULL;
-	int error_code, i;
+	int error_code, i, j;
 	struct job_buffer *job_buffer_ptr = NULL;
 	struct job_table *job_ptr;
 
@@ -52,12 +53,23 @@ main (int argc, char *argv[])
 			printf ("Priority=%u Partition=%s\n", 
 				job_ptr[i].priority, job_ptr[i].partition);
 
-			printf ("   Name=%s Nodes=%s ", 
+			printf ("   Name=%s NodeList=%s ", 
 				job_ptr[i].name, job_ptr[i].nodes);
 			printf ("StartTime=%x EndTime=%x\n", 
 				(uint32_t) job_ptr[i].start_time, 
 				(uint32_t) job_ptr[i].end_time);
 
+			printf ("   NodeListIndecies=");
+			for (j = 0; job_ptr[i].node_inx; j++) {
+				if (j > 0)
+					printf(",%d", job_ptr[i].node_inx[j]);
+				else
+					printf("%d", job_ptr[i].node_inx[j]);
+				if (job_ptr[i].node_inx[j] == -1)
+					break;
+			}
+			printf("\n");
+
 			printf ("   ReqProcs=%u ReqNodes=%u ",
 				job_ptr[i].num_procs, job_ptr[i].num_nodes);
 			printf ("Shared=%u Contiguous=%u\n",
@@ -65,13 +77,23 @@ main (int argc, char *argv[])
 
 			printf ("   MinProcs=%u MinMemory=%u ",
 				job_ptr[i].min_procs, job_ptr[i].min_memory);
-			printf ("MinTmpDisk=%u TotalProcs=%u\n",
-				job_ptr[i].min_tmp_disk, job_ptr[i].total_procs);
+			printf ("MinTmpDisk=%u\n",
+				job_ptr[i].min_tmp_disk);
 
-			printf ("   ReqNodes=%s Features=%s ",
+			printf ("   ReqNodeList=%s Features=%s ",
 				job_ptr[i].req_nodes, job_ptr[i].features);
-			printf ("JobScript=%s\n\n",
+			printf ("JobScript=%s\n",
 				job_ptr[i].job_script);
+			printf ("   ReqNodeListIndecies=");
+			for (j = 0; job_ptr[i].req_node_inx; j++) {
+				if (j > 0)
+					printf(",%d", job_ptr[i].req_node_inx[j]);
+				else
+					printf("%d", job_ptr[i].req_node_inx[j]);
+				if (job_ptr[i].req_node_inx[j] == -1)
+					break;
+			}
+			printf("\n\n");
 
 	}			
 	slurm_free_job_info (job_buffer_ptr);
@@ -87,12 +109,21 @@ main (int argc, char *argv[])
 void
 slurm_free_job_info (struct job_buffer *job_buffer_ptr)
 {
+	int i;
+
 	if (job_buffer_ptr == NULL)
 		return;
 	if (job_buffer_ptr->raw_buffer_ptr)
 		free (job_buffer_ptr->raw_buffer_ptr);
-	if (job_buffer_ptr->job_table_ptr)
+	if (job_buffer_ptr->job_table_ptr) {
+		for (i = 0; i < job_buffer_ptr->job_count; i++) {
+			if (job_buffer_ptr->job_table_ptr[i].node_inx)
+				free (job_buffer_ptr->job_table_ptr[i].node_inx);
+			if (job_buffer_ptr->job_table_ptr[i].req_node_inx)
+				free (job_buffer_ptr->job_table_ptr[i].req_node_inx);
+		}
 		free (job_buffer_ptr->job_table_ptr);
+	}
 }
 
 
@@ -112,7 +143,7 @@ int
 slurm_load_job (time_t update_time, struct job_buffer **job_buffer_ptr)
 {
 	int buffer_offset, buffer_size, in_size, i, sockfd;
-	char request_msg[64], *buffer;
+	char request_msg[64], *buffer,*node_inx_str;
 	void *buf_ptr;
 	struct sockaddr_in serv_addr;
 	uint16_t uint16_tmp;
@@ -202,6 +233,9 @@ slurm_load_job (time_t update_time, struct job_buffer **job_buffer_ptr)
 			&buf_ptr, &buffer_size);
 		unpackstr_ptr (&job[i].name, &uint16_tmp, 
 			&buf_ptr, &buffer_size);
+		unpackstr_ptr (&node_inx_str, &uint16_tmp, 
+			&buf_ptr, &buffer_size);
+		job[i].node_inx = bitfmt2int(node_inx_str);
 
 		unpack32  (&job[i].num_procs, &buf_ptr, &buffer_size);
 		unpack32  (&job[i].num_nodes, &buf_ptr, &buffer_size);
@@ -211,10 +245,12 @@ slurm_load_job (time_t update_time, struct job_buffer **job_buffer_ptr)
 		unpack32  (&job[i].min_procs, &buf_ptr, &buffer_size);
 		unpack32  (&job[i].min_memory, &buf_ptr, &buffer_size);
 		unpack32  (&job[i].min_tmp_disk, &buf_ptr, &buffer_size);
-		unpack32  (&job[i].total_procs, &buf_ptr, &buffer_size);
 
 		unpackstr_ptr (&job[i].req_nodes, &uint16_tmp, 
 			&buf_ptr, &buffer_size);
+		unpackstr_ptr (&node_inx_str, &uint16_tmp, 
+			&buf_ptr, &buffer_size);
+		job[i].req_node_inx = bitfmt2int(node_inx_str);
 		unpackstr_ptr (&job[i].features, &uint16_tmp, 
 			&buf_ptr, &buffer_size);
 		unpackstr_ptr (&job[i].job_script, &uint16_tmp, 
@@ -224,7 +260,14 @@ slurm_load_job (time_t update_time, struct job_buffer **job_buffer_ptr)
 	*job_buffer_ptr = malloc (sizeof (struct job_buffer));
 	if (*job_buffer_ptr == NULL) {
 		free (buffer);
-		free (job);
+		if (job) {
+			int j;
+			for (j = 0; j < i; j++) {
+				if (job[j].node_inx)
+					free (job[j].node_inx);
+			}
+			free (job);
+		}
 		return ENOMEM;
 	}
 	(*job_buffer_ptr)->last_update = (time_t) uint32_time;
diff --git a/src/api/partition_info.c b/src/api/partition_info.c
index 83ad1142868b906c03209dcff4fbeee01f9efe92..727dbe155dd0d8df51aa5d06818c08b48660c67c 100644
--- a/src/api/partition_info.c
+++ b/src/api/partition_info.c
@@ -21,6 +21,7 @@
 
 #include "slurmlib.h"
 #include "pack.h"
+#include "bits_bytes.h"
 
 #if DEBUG_MODULE
 /* main is used here for module testing purposes only */
@@ -28,7 +29,7 @@ int
 main (int argc, char *argv[]) 
 {
 	static time_t last_update_time = (time_t) NULL;
-	int error_code, i;
+	int error_code, i, j;
 	struct part_buffer *part_buffer_ptr = NULL;
 	struct part_table *part_ptr;
 
@@ -49,13 +50,23 @@ main (int argc, char *argv[])
 				part_ptr[i].max_nodes, part_ptr[i].total_nodes);
 			printf ("TotalCPUs=%u Key=%u\n", 
 				part_ptr[i].total_cpus, part_ptr[i].key);
-			printf ("     Default=%u ", 
+			printf ("   Default=%u ", 
 				part_ptr[i].default_part);
 			printf ("Shared=%u StateUp=%u ", 
 				part_ptr[i].shared, part_ptr[i].state_up);
 			printf ("Nodes=%s AllowGroups=%s\n", 
 				part_ptr[i].nodes, part_ptr[i].allow_groups);
-	}			
+			printf ("   NodeIndecies=");
+			for (j = 0; part_ptr[i].node_inx; j++) {
+				if (j > 0)
+					printf(",%d", part_ptr[i].node_inx[j]);
+				else
+					printf("%d", part_ptr[i].node_inx[j]);
+				if (part_ptr[i].node_inx[j] == -1)
+					break;
+			}
+			printf("\n\n");
+	}
 	slurm_free_part_info (part_buffer_ptr);
 	exit (0);
 }
@@ -69,12 +80,20 @@ main (int argc, char *argv[])
 void
 slurm_free_part_info (struct part_buffer *part_buffer_ptr)
 {
+	int i;
+
 	if (part_buffer_ptr == NULL)
 		return;
 	if (part_buffer_ptr->raw_buffer_ptr)
 		free (part_buffer_ptr->raw_buffer_ptr);
-	if (part_buffer_ptr->part_table_ptr)
+	if (part_buffer_ptr->part_table_ptr) {
+		for (i = 0; i < part_buffer_ptr->part_count; i++) {
+			if (part_buffer_ptr->part_table_ptr[i].node_inx == NULL)
+				continue;
+			free (part_buffer_ptr->part_table_ptr[i].node_inx);
+		}
 		free (part_buffer_ptr->part_table_ptr);
+	}
 }
 
 
@@ -95,7 +114,7 @@ int
 slurm_load_part (time_t update_time, struct part_buffer **part_buffer_ptr)
 {
 	int buffer_offset, buffer_size, in_size, i, sockfd;
-	char request_msg[64], *buffer;
+	char request_msg[64], *buffer, *node_inx_str;
 	void *buf_ptr;
 	struct sockaddr_in serv_addr;
 	uint16_t uint16_tmp;
@@ -172,21 +191,33 @@ slurm_load_part (time_t update_time, struct part_buffer **part_buffer_ptr)
 		unpack32  (&part[i].max_time, &buf_ptr, &buffer_size);
 		unpack32  (&part[i].max_nodes, &buf_ptr, &buffer_size);
 		unpack32  (&part[i].total_nodes, &buf_ptr, &buffer_size);
+
 		unpack32  (&part[i].total_cpus, &buf_ptr, &buffer_size);
 		unpack16  (&part[i].default_part, &buf_ptr, &buffer_size);
 		unpack16  (&part[i].key, &buf_ptr, &buffer_size);
 		unpack16  (&part[i].shared, &buf_ptr, &buffer_size);
+
 		unpack16  (&part[i].state_up, &buf_ptr, &buffer_size);
 		unpackstr_ptr (&part[i].allow_groups, &uint16_tmp, 
 			&buf_ptr, &buffer_size);
 		unpackstr_ptr (&part[i].nodes, &uint16_tmp, 
 			&buf_ptr, &buffer_size);
+		unpackstr_ptr (&node_inx_str, &uint16_tmp, 
+			&buf_ptr, &buffer_size);
+		part[i].node_inx = bitfmt2int(node_inx_str);
 	}
 
 	*part_buffer_ptr = malloc (sizeof (struct part_buffer));
 	if (*part_buffer_ptr == NULL) {
 		free (buffer);
-		free (part);
+		if (part) {
+			int j;
+			for (j = 0; j < i; j++) {
+				if (part[j].node_inx)
+					free (part[j].node_inx);
+			}
+			free (part);
+		}
 		return ENOMEM;
 	}
 	(*part_buffer_ptr)->last_update = (time_t) uint32_time;