diff --git a/slurm/slurm.h.in b/slurm/slurm.h.in
index 705fec551e6d79c564eabc7d20563aedaec5019d..fa99f8b5818eda80c56bf7e45fa38449bdc8138c 100644
--- a/slurm/slurm.h.in
+++ b/slurm/slurm.h.in
@@ -1034,7 +1034,7 @@ typedef struct reserve_info_msg {
 	reserve_info_t *reservation_array; /* the reservation records */
 } reserve_info_msg_t;
 
-typedef struct reserve_request_msg {
+typedef struct resv_desc_msg {
 	char *accounts;		/* names of accounts permitted to use */
 	uint32_t duration;	/* duration of reservation in seconds */
 	time_t end_time;	/* end time of reservation */
@@ -1046,7 +1046,7 @@ typedef struct reserve_request_msg {
 	char *partition;	/* name of partition to be used */
 	time_t start_time;	/* start time of reservation */
 	char *users;		/* names of users permitted to use */
-} reserve_request_msg_t;
+} resv_desc_msg_t;
 
 typedef struct reserve_response_msg {
 	char *name;		/* name of reservation */
@@ -2127,7 +2127,7 @@ extern int slurm_delete_partition PARAMS(( delete_part_msg_t * part_msg ));
  * OUT job_desc_msg - user defined partition descriptor
  */
 extern void slurm_init_resv_desc_msg PARAMS(( 
-		reserve_request_msg_t * update_resv_msg ));
+		resv_desc_msg_t * update_resv_msg ));
 /*
  * slurm_create_reservation - create a new reservation, only usable by user root
  * IN resv_msg - description of reservation
@@ -2135,7 +2135,7 @@ extern void slurm_init_resv_desc_msg PARAMS((
  *	otherwise return NULL and set errno to indicate the error
  */
 extern char * slurm_create_reservation PARAMS((
-		reserve_request_msg_t * resv_msg ));
+		resv_desc_msg_t * resv_msg ));
 
 /*
  * slurm_update_reservation - modify an existing reservation, only usable by 
@@ -2143,7 +2143,7 @@ extern char * slurm_create_reservation PARAMS((
  * IN resv_msg - description of reservation
  * RET 0 on success, otherwise return -1 and set errno to indicate the error
  */
-extern int slurm_update_reservation PARAMS((reserve_request_msg_t * resv_msg));
+extern int slurm_update_reservation PARAMS((resv_desc_msg_t * resv_msg));
 
 /*
  * slurm_delete_reservation - issue RPC to delete a reservation, only usable 
diff --git a/src/api/init_msg.c b/src/api/init_msg.c
index 854186ccde16daf26afe2b476dd5f71a33ba5f48..f62e7e9b6fc292069bfdca3bcd53b7bc8775f0b0 100644
--- a/src/api/init_msg.c
+++ b/src/api/init_msg.c
@@ -172,19 +172,19 @@ void slurm_init_part_desc_msg (update_part_msg_t * update_part_msg)
  *	default values 
  * OUT job_desc_msg - user defined partition descriptor
  */
-void slurm_init_resv_desc_msg (reserve_request_msg_t * update_resv_msg)
+void slurm_init_resv_desc_msg (resv_desc_msg_t * resv_msg)
 {
-	update_resv_msg->name		= NULL;
-	update_resv_msg->start_time	= (time_t) NO_VAL;
-	update_resv_msg->end_time	= (time_t) NO_VAL;
-	update_resv_msg->duration	= NO_VAL;
-	update_resv_msg->flags		= (uint16_t) NO_VAL;
-	update_resv_msg->node_cnt	= NO_VAL;
-	update_resv_msg->node_list	= NULL;
-	update_resv_msg->features	= NULL;
-	update_resv_msg->partition	= NULL;
-	update_resv_msg->users		= NULL;
-	update_resv_msg->accounts	= NULL;
+	resv_msg->name		= NULL;
+	resv_msg->start_time	= (time_t) NO_VAL;
+	resv_msg->end_time	= (time_t) NO_VAL;
+	resv_msg->duration	= NO_VAL;
+	resv_msg->flags		= (uint16_t) NO_VAL;
+	resv_msg->node_cnt	= NO_VAL;
+	resv_msg->node_list	= NULL;
+	resv_msg->features	= NULL;
+	resv_msg->partition	= NULL;
+	resv_msg->users		= NULL;
+	resv_msg->accounts	= NULL;
 }
 
 /*
diff --git a/src/api/update_config.c b/src/api/update_config.c
index 70797b85f40bef58edb1c24d220ef17e3aac71c4..a1ac4fe53dde09b0953d04b08c8361e903404fc5 100644
--- a/src/api/update_config.c
+++ b/src/api/update_config.c
@@ -119,7 +119,7 @@ slurm_delete_partition ( delete_part_msg_t * part_msg )
  *	otherwise return NULL and set errno to indicate the error
  */
 char * 
-slurm_create_reservation (reserve_request_msg_t * resv_msg ) 
+slurm_create_reservation (resv_desc_msg_t * resv_msg ) 
 {
 	int rc;
 	char *resv_name = NULL;
@@ -157,7 +157,7 @@ slurm_create_reservation (reserve_request_msg_t * resv_msg )
  * IN resv_msg - description of reservation
  * RET 0 on success, otherwise return -1 and set errno to indicate the error
  */
-extern int slurm_update_reservation ( reserve_request_msg_t * resv_msg )
+extern int slurm_update_reservation ( resv_desc_msg_t * resv_msg )
 {
 	return _slurm_update ((void *) resv_msg, REQUEST_UPDATE_RESERVATION);
 }
diff --git a/src/common/slurm_protocol_defs.c b/src/common/slurm_protocol_defs.c
index f5c8acc2c8e377c314a6195d4cb716f792f34d90..2db2c6b6443d21c682f3b2e9c0b8d4d93701c69d 100644
--- a/src/common/slurm_protocol_defs.c
+++ b/src/common/slurm_protocol_defs.c
@@ -449,7 +449,7 @@ void slurm_free_delete_part_msg(delete_part_msg_t * msg)
 	}
 }
 
-void slurm_free_update_resv_msg(reserve_request_msg_t * msg)
+void slurm_free_resv_desc_msg(resv_desc_msg_t * msg)
 {
 	if (msg) {
 		xfree(msg->accounts);
@@ -1657,7 +1657,7 @@ extern int slurm_free_msg_data(slurm_msg_type_t type, void *data)
 		break;
 	case REQUEST_CREATE_RESERVATION:
 	case REQUEST_UPDATE_RESERVATION:
-		slurm_free_update_resv_msg(data);
+		slurm_free_resv_desc_msg(data);
 		break;
 	case REQUEST_DELETE_RESERVATION:
 	case RESPONSE_CREATE_RESERVATION:		
diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h
index b1ffd598aa9444caa591e59ec5779cd3e21ad74e..08f1dcc841b359e1b4da9f4076c5b9b9c7fd8e7a 100644
--- a/src/common/slurm_protocol_defs.h
+++ b/src/common/slurm_protocol_defs.h
@@ -883,7 +883,7 @@ void inline slurm_free_job_launch_msg(batch_job_launch_msg_t * msg);
 void inline slurm_free_update_node_msg(update_node_msg_t * msg);
 void inline slurm_free_update_part_msg(update_part_msg_t * msg);
 void inline slurm_free_delete_part_msg(delete_part_msg_t * msg);
-void inline slurm_free_update_resv_msg(reserve_request_msg_t * msg);
+void inline slurm_free_resv_desc_msg(resv_desc_msg_t * msg);
 void inline slurm_free_resv_name_msg(reservation_name_msg_t * msg);
 void inline slurm_free_resv_info_request_msg(resv_info_request_msg_t * msg);
 void inline
diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c
index de720ad35d91a65e7d83482c3599e8a57c4720b5..1d1d3ba870ce92c38e5981d19a4e71a90c1b1caa 100644
--- a/src/common/slurm_protocol_pack.c
+++ b/src/common/slurm_protocol_pack.c
@@ -384,8 +384,8 @@ static void _pack_accounting_update_msg(accounting_update_msg_t *msg,
 static int _unpack_accounting_update_msg(accounting_update_msg_t **msg,
 					 Buf buffer);
 
-static void _pack_update_resv_msg(reserve_request_msg_t * msg, Buf buffer);
-static int  _unpack_update_resv_msg(reserve_request_msg_t ** msg, Buf buffer);
+static void _pack_update_resv_msg(resv_desc_msg_t * msg, Buf buffer);
+static int  _unpack_update_resv_msg(resv_desc_msg_t ** msg, Buf buffer);
 static void _pack_resv_name_msg(reservation_name_msg_t * msg, Buf buffer);
 static int  _unpack_resv_name_msg(reservation_name_msg_t ** msg, Buf buffer);
 
@@ -573,7 +573,7 @@ pack_msg(slurm_msg_t const *msg, Buf buffer)
 		break;
 	case REQUEST_CREATE_RESERVATION:
 	case REQUEST_UPDATE_RESERVATION:
-		_pack_update_resv_msg((reserve_request_msg_t *) msg->
+		_pack_update_resv_msg((resv_desc_msg_t *) msg->
 				      data, buffer);
 		break;
 	case RESPONSE_RESERVATION_INFO:
@@ -950,7 +950,7 @@ unpack_msg(slurm_msg_t * msg, Buf buffer)
 		break;
 	case REQUEST_CREATE_RESERVATION:
 	case REQUEST_UPDATE_RESERVATION:
-		rc = _unpack_update_resv_msg((reserve_request_msg_t **)
+		rc = _unpack_update_resv_msg((resv_desc_msg_t **)
 					     &(msg->data), buffer);
 		break;
 	case REQUEST_DELETE_RESERVATION:
@@ -2059,7 +2059,7 @@ unpack_error:
 }
 
 static void
-_pack_update_resv_msg(reserve_request_msg_t * msg, Buf buffer)
+_pack_update_resv_msg(resv_desc_msg_t * msg, Buf buffer)
 {
 	xassert(msg != NULL);
 
@@ -2078,15 +2078,15 @@ _pack_update_resv_msg(reserve_request_msg_t * msg, Buf buffer)
 }
 
 static int
-_unpack_update_resv_msg(reserve_request_msg_t ** msg, Buf buffer)
+_unpack_update_resv_msg(resv_desc_msg_t ** msg, Buf buffer)
 {
 	uint32_t uint32_tmp;
-	reserve_request_msg_t *tmp_ptr;
+	resv_desc_msg_t *tmp_ptr;
 
 	xassert(msg != NULL);
 
 	/* alloc memory for structure */
-	tmp_ptr = xmalloc(sizeof(reserve_request_msg_t));
+	tmp_ptr = xmalloc(sizeof(resv_desc_msg_t));
 	*msg = tmp_ptr;
 
 	safe_unpackstr_xmalloc(&tmp_ptr->name, &uint32_tmp, buffer);
@@ -2104,7 +2104,7 @@ _unpack_update_resv_msg(reserve_request_msg_t ** msg, Buf buffer)
 	return SLURM_SUCCESS;
 
 unpack_error:
-	slurm_free_update_resv_msg(tmp_ptr);
+	slurm_free_resv_desc_msg(tmp_ptr);
 	*msg = NULL;
 	return SLURM_ERROR;
 }
diff --git a/src/scontrol/create_res.c b/src/scontrol/create_res.c
index 63d2db4fcf0db90e1d9ff2706a86119d9f1ff355..4e1df350f6c29a3a9bf1d3942004077126e597b6 100644
--- a/src/scontrol/create_res.c
+++ b/src/scontrol/create_res.c
@@ -41,13 +41,12 @@
 
 
 /*
- *  process_plus_minus is used to convert a string like
+ *  _process_plus_minus is used to convert a string like
  *       Users+=a,b,c
  *  to   Users=+a,+b,+c
  */
 
-static char *
-process_plus_minus(char plus_or_minus, char *src)
+static char * _process_plus_minus(char plus_or_minus, char *src)
 {
 	int num_commas = 0;
 	int ii;
@@ -76,12 +75,11 @@ process_plus_minus(char plus_or_minus, char *src)
 
 
 /*
- *  parse_flags  is used to parse the Flags= option.  It handles
+ *  _parse_flags  is used to parse the Flags= option.  It handles
  *  daily, weekly, and maint, optionally preceded by + or -, 
  *  separated by a comma but no spaces.
  */
-static uint32_t
-parse_flags(const char *flagstr, const char *msg)
+static uint32_t _parse_flags(const char *flagstr, const char *msg)
 {
 	int flip;
 	uint32_t outflags = 0;
@@ -145,7 +143,7 @@ parse_flags(const char *flagstr, const char *msg)
  */
 extern int
 scontrol_parse_res_options(int argc, char *argv[], const char *msg, 
-			   reserve_request_msg_t  *resv_msg_ptr, 
+			   resv_desc_msg_t  *resv_msg_ptr, 
 			   int *free_user_str, int *free_acct_str)
 {
 	int i;
@@ -210,11 +208,12 @@ scontrol_parse_res_options(int argc, char *argv[], const char *msg,
 		} else if (strncasecmp(tag, "Flags", MAX(taglen, 2)) == 0) {
 			uint32_t f;
 			if (plus_minus) {
-				char *tmp = process_plus_minus(plus_minus, val);
-				f = parse_flags(tmp, msg);
+				char *tmp =
+					_process_plus_minus(plus_minus, val);
+				f = _parse_flags(tmp, msg);
 				xfree(tmp);
 			} else {
-				f = parse_flags(val, msg);
+				f = _parse_flags(val, msg);
 			}
 			if (f == 0xffffffff) {
 				return -1;
@@ -245,7 +244,7 @@ scontrol_parse_res_options(int argc, char *argv[], const char *msg,
 		} else if (strncasecmp(tag, "Users", MAX(taglen, 1)) == 0) {
 			if (plus_minus) {
 				resv_msg_ptr->users = 
-					process_plus_minus(plus_minus, val);
+					_process_plus_minus(plus_minus, val);
 				*free_user_str = 1;
 			} else {
 				resv_msg_ptr->users = val;
@@ -253,7 +252,7 @@ scontrol_parse_res_options(int argc, char *argv[], const char *msg,
 		} else if (strncasecmp(tag, "Accounts", MAX(taglen, 1)) == 0) {
 			if (plus_minus) {
 				resv_msg_ptr->accounts = 
-					process_plus_minus(plus_minus, val);
+					_process_plus_minus(plus_minus, val);
 				*free_acct_str = 1;
 			} else {
 				resv_msg_ptr->accounts = val;
@@ -282,7 +281,7 @@ scontrol_parse_res_options(int argc, char *argv[], const char *msg,
 extern int
 scontrol_update_res(int argc, char *argv[])
 {
-	reserve_request_msg_t   resv_msg;
+	resv_desc_msg_t   resv_msg;
 	int err, ret = 0;
 	int free_user_str = 0, free_acct_str = 0;
 
@@ -329,7 +328,7 @@ SCONTROL_UPDATE_RES_CLEANUP:
 extern int
 scontrol_create_res(int argc, char *argv[])
 {
-	reserve_request_msg_t   resv_msg;
+	resv_desc_msg_t   resv_msg;
 	char *new_res_name = NULL;
 	int free_user_str = 0, free_acct_str = 0;
 	int err, ret = 0;
diff --git a/src/slurmctld/proc_req.c b/src/slurmctld/proc_req.c
index 47f02dbbbc5785c7aa7cbd2288f4cd20defebd8c..18d7b4431120a3208544034fac4402d8aac2a7fc 100644
--- a/src/slurmctld/proc_req.c
+++ b/src/slurmctld/proc_req.c
@@ -276,11 +276,11 @@ void slurmctld_req (slurm_msg_t * msg)
 		break;
 	case REQUEST_CREATE_RESERVATION:
 		_slurm_rpc_resv_create(msg);
-		slurm_free_update_resv_msg(msg->data);
+		slurm_free_resv_desc_msg(msg->data);
 		break;
 	case REQUEST_UPDATE_RESERVATION:
 		_slurm_rpc_resv_update(msg);
-		slurm_free_update_resv_msg(msg->data);
+		slurm_free_resv_desc_msg(msg->data);
 		break;
 	case REQUEST_DELETE_RESERVATION:
 		_slurm_rpc_resv_delete(msg);
@@ -2405,7 +2405,7 @@ static void _slurm_rpc_resv_create(slurm_msg_t * msg)
 {
 	int error_code = SLURM_SUCCESS;
 	DEF_TIMERS;
-	reserve_request_msg_t *resv_desc_ptr = (reserve_request_msg_t *) 
+	resv_desc_msg_t *resv_desc_ptr = (resv_desc_msg_t *) 
 						msg->data;
 	/* Locks: write node, read partition */
 	slurmctld_lock_t node_write_lock = { 
@@ -2461,7 +2461,7 @@ static void _slurm_rpc_resv_update(slurm_msg_t * msg)
 {
 	int error_code = SLURM_SUCCESS;
 	DEF_TIMERS;
-	reserve_request_msg_t *resv_desc_ptr = (reserve_request_msg_t *) 
+	resv_desc_msg_t *resv_desc_ptr = (resv_desc_msg_t *) 
 						msg->data;
 	/* Locks: write node, read partition */
 	slurmctld_lock_t node_write_lock = { 
diff --git a/src/slurmctld/reservation.c b/src/slurmctld/reservation.c
index d6a4d65cd2965576ab575aa1c6c93be509fb3501..7e29e2050fc29ba98e74e8cade3b60c1e6096fa0 100644
--- a/src/slurmctld/reservation.c
+++ b/src/slurmctld/reservation.c
@@ -91,11 +91,11 @@ static int  _build_uid_list(char *users, int *user_cnt, uid_t **user_list);
 static void _clear_job_resv(slurmctld_resv_t *resv_ptr);
 static slurmctld_resv_t *_copy_resv(slurmctld_resv_t *resv_orig_ptr);
 static void _del_resv_rec(void *x);
-static void _dump_resv_req(reserve_request_msg_t *resv_ptr, char *mode);
+static void _dump_resv_req(resv_desc_msg_t *resv_ptr, char *mode);
 static int  _find_resv_id(void *x, void *key);
 static int  _find_resv_name(void *x, void *key);
 static void _generate_resv_id(void);
-static void _generate_resv_name(reserve_request_msg_t *resv_ptr);
+static void _generate_resv_name(resv_desc_msg_t *resv_ptr);
 static bool _is_account_valid(char *account);
 static bool _is_resv_used(slurmctld_resv_t *resv_ptr);
 static void _pack_resv(slurmctld_resv_t *resv_ptr, Buf buffer,
@@ -105,12 +105,12 @@ static int  _post_resv_delete(slurmctld_resv_t *resv_ptr);
 static int  _post_resv_update(slurmctld_resv_t *resv_ptr,
 			      slurmctld_resv_t *old_resv_ptr);
 static bitstr_t *_pick_idle_nodes(bitstr_t *avail_nodes, 
-				  reserve_request_msg_t *resv_desc_ptr);
+				  resv_desc_msg_t *resv_desc_ptr);
 static int  _resize_resv(slurmctld_resv_t *resv_ptr, uint32_t node_cnt);
 static bool _resv_overlap(time_t start_time, time_t end_time, 
 			  uint16_t flags, bitstr_t *node_bitmap,
 			  slurmctld_resv_t *this_resv_ptr);
-static int  _select_nodes(reserve_request_msg_t *resv_desc_ptr, 
+static int  _select_nodes(resv_desc_msg_t *resv_desc_ptr, 
 			  struct part_record **part_ptr,
 			  bitstr_t **resv_bitmap);
 static int  _set_assoc_list(slurmctld_resv_t *resv_ptr);
@@ -172,7 +172,7 @@ static slurmctld_resv_t *_copy_resv(slurmctld_resv_t *resv_orig_ptr)
 static void _swap_resv(slurmctld_resv_t *resv_backup, 
 		       slurmctld_resv_t *resv_ptr)
 {
-	reserve_request_msg_t *resv_copy_ptr;
+	resv_desc_msg_t *resv_copy_ptr;
 
 	xassert(resv_backup->magic == RESV_MAGIC);
 	xassert(resv_ptr->magic    == RESV_MAGIC);
@@ -233,7 +233,7 @@ static int _find_resv_name(void *x, void *key)
 		return 1;	/* match */
 }
 
-static void _dump_resv_req(reserve_request_msg_t *resv_ptr, char *mode)
+static void _dump_resv_req(resv_desc_msg_t *resv_ptr, char *mode)
 {
 	
 #if _RESV_DEBUG
@@ -274,7 +274,7 @@ static void _generate_resv_id(void)
 	}
 }
 
-static void _generate_resv_name(reserve_request_msg_t *resv_ptr)
+static void _generate_resv_name(resv_desc_msg_t *resv_ptr)
 {
 	char *key, *name, *sep;
 	int len;
@@ -1016,7 +1016,7 @@ static void _set_cpu_cnt(slurmctld_resv_t *resv_ptr)
 }
 
 /* Create a resource reservation */
-extern int create_resv(reserve_request_msg_t *resv_desc_ptr)
+extern int create_resv(resv_desc_msg_t *resv_desc_ptr)
 {
 	int i, rc = SLURM_SUCCESS;
 	time_t now = time(NULL);
@@ -1206,7 +1206,7 @@ extern void resv_fini(void)
 }
 
 /* Update an exiting resource reservation */
-extern int update_resv(reserve_request_msg_t *resv_desc_ptr)
+extern int update_resv(resv_desc_msg_t *resv_desc_ptr)
 {
 	time_t now = time(NULL);
 	slurmctld_resv_t *resv_backup, *resv_ptr;
@@ -1743,7 +1743,7 @@ static void _validate_node_choice(slurmctld_resv_t *resv_ptr)
 {
 	bitstr_t *tmp_bitmap = NULL;
 	int i;
-	reserve_request_msg_t resv_desc;
+	resv_desc_msg_t resv_desc;
 
 	if (resv_ptr->flags & RESERVE_FLAG_SPEC_NODES)
 		return;
@@ -1755,7 +1755,7 @@ static void _validate_node_choice(slurmctld_resv_t *resv_ptr)
 	/* Reservation includes DOWN, DRAINED/DRAINING, FAILING or 
 	 * NO_RESPOND nodes. Generate new request using _select_nodes()
 	 * in attempt to replace this nodes */
-	memset(&resv_desc, 0, sizeof(reserve_request_msg_t));
+	memset(&resv_desc, 0, sizeof(resv_desc_msg_t));
 	resv_desc.start_time = resv_ptr->start_time;
 	resv_desc.end_time   = resv_ptr->end_time;
 	resv_desc.features   = resv_ptr->features;
@@ -1948,7 +1948,7 @@ static int  _resize_resv(slurmctld_resv_t *resv_ptr, uint32_t node_cnt)
 {
 	bitstr_t *tmp1_bitmap = NULL, *tmp2_bitmap = NULL;
 	int delta_node_cnt, i;
-	reserve_request_msg_t resv_desc;
+	resv_desc_msg_t resv_desc;
 
 	delta_node_cnt = resv_ptr->node_cnt - node_cnt;
 	if (delta_node_cnt == 0)	/* Already correct node count */
@@ -1995,7 +1995,7 @@ static int  _resize_resv(slurmctld_resv_t *resv_ptr, uint32_t node_cnt)
 
 	/* Must increase node count. Make this look like new request so 
 	 * we can use _select_nodes() for selecting the nodes */
-	memset(&resv_desc, 0, sizeof(reserve_request_msg_t));
+	memset(&resv_desc, 0, sizeof(resv_desc_msg_t));
 	resv_desc.start_time = resv_ptr->start_time;
 	resv_desc.end_time   = resv_ptr->end_time;
 	resv_desc.features   = resv_ptr->features;
@@ -2014,7 +2014,7 @@ static int  _resize_resv(slurmctld_resv_t *resv_ptr, uint32_t node_cnt)
 }
 
 /* Given a reservation create request, select appropriate nodes for use */
-static int  _select_nodes(reserve_request_msg_t *resv_desc_ptr, 
+static int  _select_nodes(resv_desc_msg_t *resv_desc_ptr, 
 			  struct part_record **part_ptr,
 			  bitstr_t **resv_bitmap)
 {
@@ -2110,7 +2110,7 @@ static int  _select_nodes(reserve_request_msg_t *resv_desc_ptr,
  * RET bitmap of selected nodes or NULL if request can not be satisfied
  */
 static bitstr_t *_pick_idle_nodes(bitstr_t *avail_nodes, 
-				  reserve_request_msg_t *resv_desc_ptr)
+				  resv_desc_msg_t *resv_desc_ptr)
 {
 	ListIterator job_iterator;
 	struct job_record *job_ptr;
diff --git a/src/slurmctld/reservation.h b/src/slurmctld/reservation.h
index d91ec7590b49e9106476e76a79d3bcdb8cc1da22..bc4e0df9e6e613fb475e20d253624b6487f1b7e4 100644
--- a/src/slurmctld/reservation.h
+++ b/src/slurmctld/reservation.h
@@ -48,10 +48,10 @@
 extern time_t last_resv_update;
 
 /* Create a resource reservation */
-extern int create_resv(reserve_request_msg_t *resv_desc_ptr);
+extern int create_resv(resv_desc_msg_t *resv_desc_ptr);
 
 /* Update an exiting resource reservation */
-extern int update_resv(reserve_request_msg_t *resv_desc_ptr);
+extern int update_resv(resv_desc_msg_t *resv_desc_ptr);
 
 /* Delete an exiting resource reservation */
 extern int delete_resv(reservation_name_msg_t *resv_desc_ptr);
diff --git a/src/sview/block_info.c b/src/sview/block_info.c
index c43af429055714e2403360324dbbd2db0e3cae0f..3c9e98a912ea6f4500f97af1809862b98466b8c2 100644
--- a/src/sview/block_info.c
+++ b/src/sview/block_info.c
@@ -134,6 +134,7 @@ static display_data_t options_data_block[] = {
 	{G_TYPE_STRING, PART_PAGE, "Partition", TRUE, BLOCK_PAGE},
 	{G_TYPE_STRING, NODE_PAGE, "Base Partitions", TRUE, BLOCK_PAGE},
 	{G_TYPE_STRING, SUBMIT_PAGE, "Job Submit", FALSE, BLOCK_PAGE},
+	{G_TYPE_STRING, RESV_PAGE, "Reservation", TRUE, BLOCK_PAGE},
 	{G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE}
 };
 
diff --git a/src/sview/common.c b/src/sview/common.c
index 524b9b99fdae401ce0faa358aafef992088507a2..b45555f92e37efd3490b14f16964c5bb6187b41c 100644
--- a/src/sview/common.c
+++ b/src/sview/common.c
@@ -288,6 +288,10 @@ static void _selected_page(GtkMenuItem *menuitem,
 		popup_all_block(treedata->model, &treedata->iter, 
 				display_data->id);
 		break;
+	case RESV_PAGE: 
+		popup_all_resv(treedata->model, &treedata->iter, 
+			       display_data->id);
+		break;
 	case ADMIN_PAGE:
 		switch(display_data->id) {
 		case JOB_PAGE:
@@ -302,6 +306,10 @@ static void _selected_page(GtkMenuItem *menuitem,
 			admin_block(treedata->model, &treedata->iter, 
 				    display_data->name);
 			break;
+		case RESV_PAGE:
+			admin_resv(treedata->model, &treedata->iter, 
+				   display_data->name);
+			break;
 		case NODE_PAGE:
 			admin_node(treedata->model, &treedata->iter, 
 				   display_data->name);
@@ -936,6 +944,9 @@ extern void *popup_thr(popup_info_t *popup_win)
 	case BLOCK_PAGE: 
 		specifc_info = specific_info_block;
 		break;
+	case RESV_PAGE: 
+		specifc_info = specific_info_resv;
+		break;
 	case SUBMIT_PAGE: 
 	default:
 		g_print("thread got unknown type %d\n", popup_win->type);
diff --git a/src/sview/job_info.c b/src/sview/job_info.c
index 0161cdde41b25e22eab5051c02849440a85c0b9d..a1c94b22fe61d2d87fa8f19323f112b3a9ca3735 100644
--- a/src/sview/job_info.c
+++ b/src/sview/job_info.c
@@ -320,6 +320,7 @@ static display_data_t options_data_job[] = {
 #else
 	{G_TYPE_STRING, NODE_PAGE, "Nodes", TRUE, JOB_PAGE},
 #endif
+	{G_TYPE_STRING, RESV_PAGE, "Reservation", TRUE, JOB_PAGE},
 	{G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE}
 };
 
@@ -3072,6 +3073,13 @@ extern void popup_all_job(GtkTreeModel *model, GtkTreeIter *iter, int id)
 			snprintf(title, 100, "Partition with job %d.%d",
 				 jobid, stepid);			
 		break;
+	case RESV_PAGE:
+		if(stepid == NO_VAL)
+			snprintf(title, 100, "Reservation with job %d", jobid);
+		else
+			snprintf(title, 100, "Reservation with job %d.%d",
+				 jobid, stepid);			
+		break;
 	case NODE_PAGE:
 		if(stepid == NO_VAL) {
 #ifdef HAVE_BG
@@ -3145,6 +3153,10 @@ extern void popup_all_job(GtkTreeModel *model, GtkTreeIter *iter, int id)
 		gtk_tree_model_get(model, iter, SORTID_PARTITION, &name, -1);
 		popup_win->spec_info->search_info->gchar_data = name;
 		break;
+	case RESV_PAGE:
+		gtk_tree_model_get(model, iter, SORTID_RESV_NAME, &name, -1);
+		popup_win->spec_info->search_info->gchar_data = name;
+		break;
 #ifdef HAVE_BG
 	case BLOCK_PAGE: 
 		gtk_tree_model_get(model, iter, SORTID_BLOCK, &name, -1);
diff --git a/src/sview/node_info.c b/src/sview/node_info.c
index 8f3118c9d0a01cab5069d966142401c496cf8141..1a90c21a5f892b493c94ec37cf98d42d04af9088 100644
--- a/src/sview/node_info.c
+++ b/src/sview/node_info.c
@@ -107,6 +107,7 @@ static display_data_t options_data_node[] = {
 	{G_TYPE_STRING, BLOCK_PAGE, "Blocks", TRUE, NODE_PAGE},
 #endif
 	{G_TYPE_STRING, PART_PAGE, "Partition", TRUE, NODE_PAGE},
+	{G_TYPE_STRING, RESV_PAGE, "Reservation", TRUE, NODE_PAGE},
 	{G_TYPE_STRING, SUBMIT_PAGE, "Job Submit", FALSE, NODE_PAGE},
 	{G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE}
 };
diff --git a/src/sview/part_info.c b/src/sview/part_info.c
index f9b48020337fee2f8a31c5f6ac2697e887735d5d..2aeef4b847bf732590663216267f9bc83d696d0c 100644
--- a/src/sview/part_info.c
+++ b/src/sview/part_info.c
@@ -191,6 +191,7 @@ static display_data_t options_data_part[] = {
 	{G_TYPE_STRING, NODE_PAGE, "Nodes", TRUE, PART_PAGE},
 #endif
 	{G_TYPE_STRING, SUBMIT_PAGE, "Job Submit", FALSE, PART_PAGE},
+	{G_TYPE_STRING, RESV_PAGE, "Reservation", TRUE, PART_PAGE},
 	{G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE}
 };
 
diff --git a/src/sview/resv_info.c b/src/sview/resv_info.c
index 1147c9bb38b5e3a470f7e0d38e66bc1319157760..768974154467c7bc3461c67be0148c55dcb74bd5 100644
--- a/src/sview/resv_info.c
+++ b/src/sview/resv_info.c
@@ -32,10 +32,22 @@
  
 #define _DEBUG 0
 
+/* Collection of data for printing reports. Like data is combined here */
+typedef struct {
+	reserve_info_t *resv_ptr;
+	char *color;
+} sview_resv_info_t;
+
+enum { 
+	EDIT_REMOVE = 1,
+	EDIT_EDIT
+};
+
 /* These need to be in alpha order (except POS and CNT) */
 enum { 
 	SORTID_POS = POS_LOC,
 	SORTID_ACCOUNTS,
+	SORTID_ACTION,
 	SORTID_END_TIME,
 	SORTID_FEATURES,
 	SORTID_FLAGS,
@@ -44,6 +56,7 @@ enum {
 	SORTID_NODE_LIST,
 	SORTID_PARTITION,
 	SORTID_START_TIME,
+	SORTID_UPDATED,
 	SORTID_USERS,
 	SORTID_CNT
 };
@@ -56,31 +69,682 @@ enum {
 static display_data_t display_data_resv[] = {
 	{G_TYPE_INT, SORTID_POS, NULL, FALSE, EDIT_NONE, 
 	 refresh_resv, create_model_resv, admin_edit_resv},
-	{G_TYPE_STRING, SORTID_ACCOUNTS,   "Accounts", FALSE, EDIT_TEXTBOX, 
+	{G_TYPE_STRING, SORTID_NAME,       "Name", TRUE, EDIT_NONE, 
 	 refresh_resv, create_model_resv, admin_edit_resv},
-	{G_TYPE_STRING, SORTID_END_TIME,   "EndTime", FALSE, EDIT_TEXTBOX, 
+	{G_TYPE_STRING, SORTID_ACTION,     "Action", FALSE, EDIT_MODEL,
 	 refresh_resv, create_model_resv, admin_edit_resv},
-	{G_TYPE_STRING, SORTID_FEATURES,   "Features", FALSE, EDIT_TEXTBOX, 
+	{G_TYPE_STRING, SORTID_NODE_CNT,   "Nodes", TRUE, EDIT_TEXTBOX, 
 	 refresh_resv, create_model_resv, admin_edit_resv},
-	{G_TYPE_STRING, SORTID_FLAGS,      "Flags", FALSE, EDIT_NONE, 
+	{G_TYPE_STRING, SORTID_NODE_LIST,  "NodeList", TRUE, EDIT_TEXTBOX, 
 	 refresh_resv, create_model_resv, admin_edit_resv},
-	{G_TYPE_STRING, SORTID_NAME,       "Name", TRUE, EDIT_NONE, 
+	{G_TYPE_STRING, SORTID_START_TIME, "StartTime", FALSE, EDIT_TEXTBOX, 
 	 refresh_resv, create_model_resv, admin_edit_resv},
-	{G_TYPE_INT,    SORTID_NODE_CNT,   "Nodes", TRUE, EDIT_TEXTBOX, 
+	{G_TYPE_STRING, SORTID_END_TIME,   "EndTime", FALSE, EDIT_TEXTBOX, 
 	 refresh_resv, create_model_resv, admin_edit_resv},
-	{G_TYPE_STRING, SORTID_NODE_LIST,  "NodeList", TRUE, EDIT_TEXTBOX, 
+	{G_TYPE_STRING, SORTID_ACCOUNTS,   "Accounts", FALSE, EDIT_TEXTBOX, 
+	 refresh_resv, create_model_resv, admin_edit_resv},
+	{G_TYPE_STRING, SORTID_USERS,      "Users", FALSE, EDIT_TEXTBOX, 
 	 refresh_resv, create_model_resv, admin_edit_resv},
 	{G_TYPE_STRING, SORTID_PARTITION,  "Partition", FALSE, EDIT_TEXTBOX, 
 	 refresh_resv, create_model_resv, admin_edit_resv},
-	{G_TYPE_STRING, SORTID_START_TIME, "StartTime", FALSE, EDIT_TEXTBOX, 
+	{G_TYPE_STRING, SORTID_FEATURES,   "Features", FALSE, EDIT_TEXTBOX, 
 	 refresh_resv, create_model_resv, admin_edit_resv},
-	{G_TYPE_STRING, SORTID_USERS,      "Users", FALSE, EDIT_TEXTBOX, 
+	{G_TYPE_STRING, SORTID_FLAGS,      "Flags", FALSE, EDIT_NONE, 
+	 refresh_resv, create_model_resv, admin_edit_resv},
+	{G_TYPE_INT,    SORTID_UPDATED,    NULL, FALSE, EDIT_NONE,
 	 refresh_resv, create_model_resv, admin_edit_resv},
 	{G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE}
 };
 
+static display_data_t options_data_resv[] = {
+	{G_TYPE_INT, SORTID_POS, NULL, FALSE, EDIT_NONE},
+	{G_TYPE_STRING, INFO_PAGE, "Full Info", TRUE, RESV_PAGE},
+	{G_TYPE_STRING, RESV_PAGE, "Remove", TRUE, ADMIN_PAGE},
+	{G_TYPE_STRING, RESV_PAGE, "Edit Reservation", TRUE, ADMIN_PAGE},
+	{G_TYPE_STRING, JOB_PAGE, "Jobs", TRUE, RESV_PAGE},
+	{G_TYPE_STRING, PART_PAGE, "Partition", TRUE, RESV_PAGE},
+#ifdef HAVE_BG
+	{G_TYPE_STRING, BLOCK_PAGE, "Block", TRUE, RESV_PAGE},
+	{G_TYPE_STRING, NODE_PAGE, "Base Partitions", TRUE, RESV_PAGE},
+#else
+	{G_TYPE_STRING, NODE_PAGE, "Nodes", TRUE, RESV_PAGE},
+#endif
+	{G_TYPE_NONE, -1, NULL, FALSE, EDIT_NONE}
+};
+
+
 static display_data_t *local_display_data = NULL;
 
+static char *got_edit_signal = NULL;
+
+/*
+ *  _parse_flags  is used to parse the Flags= option.  It handles
+ *  daily, weekly, and maint, optionally preceded by + or -, 
+ *  separated by a comma but no spaces.
+ */
+static uint32_t _parse_flags(const char *flagstr)
+{
+	int flip;
+	uint32_t outflags = 0;
+	const char *curr = flagstr;
+	int taglen = 0;
+
+	while (*curr != '\0') {
+		flip = 0;
+		if (*curr == '+') {
+			curr++;
+		} else if (*curr == '-') {
+			flip = 1;
+			curr++;
+		}
+		taglen = 0;
+		while (curr[taglen] != ',' && curr[taglen] != '\0')
+			taglen++;
+
+		if (strncasecmp(curr, "Maintenance", MAX(taglen,1)) == 0) {
+			curr += taglen;
+			if (flip)
+				outflags |= RESERVE_FLAG_NO_MAINT;
+			else 
+				outflags |= RESERVE_FLAG_MAINT;
+		} else if (strncasecmp(curr, "Daily", MAX(taglen,1)) == 0) {
+			curr += taglen;
+			if (flip)
+				outflags |= RESERVE_FLAG_NO_DAILY;
+			else 
+				outflags |= RESERVE_FLAG_DAILY;
+		} else if (strncasecmp(curr, "Weekly", MAX(taglen,1)) == 0) {
+			curr += taglen;
+			if (flip)
+				outflags |= RESERVE_FLAG_NO_WEEKLY;
+			else 
+				outflags |= RESERVE_FLAG_WEEKLY;
+		} else {
+			char *temp = g_strdup_printf("Error parsing flags %s.",
+						     flagstr);
+			display_edit_note(temp);
+			g_free(temp);
+			outflags = (uint32_t)NO_VAL;
+			break;
+		}
+
+		if (*curr == ',') 
+			curr++;
+	}
+	return outflags;
+}
+
+static void _set_active_combo_resv(GtkComboBox *combo, 
+				   GtkTreeModel *model, GtkTreeIter *iter,
+				   int type)
+{
+	char *temp_char = NULL;
+	int action = 0;
+
+	gtk_tree_model_get(model, iter, type, &temp_char, -1);
+	if(!temp_char)
+		goto end_it;
+	switch(type) {
+	case SORTID_ACTION:
+		if(!strcmp(temp_char, "none"))
+			action = 0;
+		else if(!strcmp(temp_char, "remove"))
+			action = 1;
+		else 
+			action = 0;
+				
+		break;
+	default:
+		break;
+	}
+	g_free(temp_char);
+end_it:
+	gtk_combo_box_set_active(combo, action);
+	
+}
+
+/* don't free this char */
+static const char *_set_resv_msg(resv_desc_msg_t *resv_msg,
+				 const char *new_text,
+				 int column)
+{
+	char *type = NULL;
+	int temp_int = 0;
+	uint32_t f;
+	
+	/* need to clear errno here (just in case) */
+	errno = 0;
+
+	if(!resv_msg)
+		return NULL;
+	
+	switch(column) {
+	case SORTID_ACCOUNTS:		
+		resv_msg->accounts = xstrdup(new_text);
+		type = "accounts";
+		break;
+	case SORTID_ACTION:
+		xfree(got_edit_signal);
+		if(!strcasecmp(new_text, "None"))
+			got_edit_signal = NULL;
+		else
+			got_edit_signal = xstrdup(new_text);
+		break;
+	case SORTID_END_TIME:
+		resv_msg->end_time = parse_time((char *)new_text, 0);
+		type = "end time";
+		break;
+	case SORTID_FEATURES:
+		resv_msg->features = xstrdup(new_text);
+		type = "features";
+		break;
+	case SORTID_FLAGS:
+		f = _parse_flags(new_text);
+		type = "flags";
+		if(f == (uint32_t)NO_VAL) 
+			goto return_error;
+		resv_msg->flags = f;
+		break;
+	case SORTID_NAME:
+		resv_msg->name = xstrdup(new_text);
+		type = "name";
+		break;
+	case SORTID_NODE_CNT:
+		temp_int = strtol(new_text, (char **)NULL, 10);
+		
+		type = "Node Count";
+		if(temp_int <= 0)
+			goto return_error;
+		resv_msg->node_cnt = temp_int;
+		break;
+	case SORTID_NODE_LIST:
+		resv_msg->node_list = xstrdup(new_text);
+		type = "node list";
+		break;
+	case SORTID_PARTITION:
+		resv_msg->partition = xstrdup(new_text);
+		type = "partition";
+		break;
+	case SORTID_START_TIME:
+		resv_msg->start_time = parse_time((char *)new_text, 0);
+		type = "start time";
+		break;
+	case SORTID_USERS:		
+		resv_msg->users = xstrdup(new_text);
+		type = "users";
+		break;
+	default:
+		type = "unknown";
+		break;
+	}
+
+	return type;
+
+return_error:
+	errno = 1;
+	return type;
+}
+
+static void _resv_info_list_del(void *object)
+{
+	sview_resv_info_t *sview_resv_info = (sview_resv_info_t *)object;
+
+	if (sview_resv_info) {
+		xfree(sview_resv_info);
+	}
+}
+
+static void _admin_edit_combo_box_resv(GtkComboBox *combo,
+				       resv_desc_msg_t *resv_msg)
+{
+	GtkTreeModel *model = NULL;
+	GtkTreeIter iter;
+	int column = 0;
+	char *name = NULL;
+	
+	if(!resv_msg)
+		return;
+
+	if(!gtk_combo_box_get_active_iter(combo, &iter)) {
+		g_print("nothing selected\n");
+		return;
+	}
+	model = gtk_combo_box_get_model(combo);
+	if(!model) {
+		g_print("nothing selected\n");
+		return;
+	}
+
+	gtk_tree_model_get(model, &iter, 0, &name, -1);
+	gtk_tree_model_get(model, &iter, 1, &column, -1);
+
+	_set_resv_msg(resv_msg, name, column);
+
+	g_free(name);
+}
+
+
+
+static gboolean _admin_focus_out_resv(GtkEntry *entry,
+				      GdkEventFocus *event, 
+				      resv_desc_msg_t *resv_msg)
+{
+	int type = gtk_entry_get_max_length(entry);
+	const char *name = gtk_entry_get_text(entry);
+	type -= DEFAULT_ENTRY_LENGTH;
+	_set_resv_msg(resv_msg, name, type);
+	
+	return false;
+}
+
+static GtkWidget *_admin_full_edit_resv(resv_desc_msg_t *resv_msg, 
+					GtkTreeModel *model, GtkTreeIter *iter)
+{
+	GtkScrolledWindow *window = create_scrolled_window();
+	GtkBin *bin = NULL;
+	GtkViewport *view = NULL;
+	GtkTable *table = NULL;
+	GtkWidget *label = NULL;
+	GtkWidget *entry = NULL;
+	GtkTreeModel *model2 = NULL; 
+	GtkCellRenderer *renderer = NULL;
+	int i = 0, row = 0;
+	char *temp_char = NULL;
+
+	gtk_scrolled_window_set_policy(window,
+				       GTK_POLICY_NEVER,
+				       GTK_POLICY_AUTOMATIC);
+	bin = GTK_BIN(&window->container);
+	view = GTK_VIEWPORT(bin->child);
+	bin = GTK_BIN(&view->bin);
+	table = GTK_TABLE(bin->child);
+	gtk_table_resize(table, SORTID_CNT, 2);
+	
+	gtk_table_set_homogeneous(table, FALSE);	
+
+	for(i = 0; i < SORTID_CNT; i++) {
+		if(display_data_resv[i].extra == EDIT_MODEL) {
+			/* edittable items that can only be known
+			   values */
+			model2 = GTK_TREE_MODEL(
+				create_model_resv(display_data_resv[i].id));
+			if(!model2) {
+				g_print("no model set up for %d(%s)\n",
+					display_data_resv[i].id,
+					display_data_resv[i].name);
+				continue;
+			}
+			entry = gtk_combo_box_new_with_model(model2);
+			g_object_unref(model2);
+			
+			_set_active_combo_resv(GTK_COMBO_BOX(entry), model,
+					      iter, display_data_resv[i].id);
+			
+			g_signal_connect(entry, "changed",
+					 G_CALLBACK(
+						 _admin_edit_combo_box_resv),
+					 resv_msg);
+			
+			renderer = gtk_cell_renderer_text_new();
+			gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(entry),
+						   renderer, TRUE);
+			gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(entry),
+						      renderer, "text", 0);
+		} else if(display_data_resv[i].extra == EDIT_TEXTBOX) {
+			/* other edittable items that are unknown */
+			entry = create_entry();
+			gtk_tree_model_get(model, iter,
+					   display_data_resv[i].id,
+					   &temp_char, -1);
+			gtk_entry_set_max_length(GTK_ENTRY(entry), 
+						 (DEFAULT_ENTRY_LENGTH +
+						  display_data_resv[i].id));
+			
+			if(temp_char) {
+				gtk_entry_set_text(GTK_ENTRY(entry),
+						   temp_char);
+				g_free(temp_char);
+			}
+			g_signal_connect(entry, "focus-out-event",
+					 G_CALLBACK(_admin_focus_out_resv),
+					 resv_msg);
+		} else /* others can't be altered by the user */
+			continue;
+		label = gtk_label_new(display_data_resv[i].name);
+		gtk_table_attach(table, label, 0, 1, row, row+1,
+				 GTK_FILL | GTK_EXPAND, GTK_SHRINK, 
+				 0, 0);
+		gtk_table_attach(table, entry, 1, 2, row, row+1,
+				 GTK_FILL, GTK_SHRINK,
+				 0, 0);
+		row++;
+	}
+	gtk_table_resize(table, row, 2);
+	
+	return GTK_WIDGET(window);
+}
+
+static void _layout_resv_record(GtkTreeView *treeview, 
+				sview_resv_info_t *sview_resv_info,
+				int update)
+{
+	GtkTreeIter iter;
+	char time_buf[20];
+	reserve_info_t *resv_ptr = sview_resv_info->resv_ptr;
+	char *temp_char = NULL;
+
+	GtkTreeStore *treestore = 
+		GTK_TREE_STORE(gtk_tree_view_get_model(treeview));
+	
+
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_NAME),
+				   resv_ptr->name);
+
+	convert_num_unit((float)resv_ptr->node_cnt, 
+			 time_buf, sizeof(time_buf), UNIT_NONE);
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_NODE_CNT), 
+				   time_buf);
+
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_NODE_LIST),
+				   resv_ptr->node_list);
+
+	slurm_make_time_str((time_t *)&resv_ptr->start_time, time_buf,
+			    sizeof(time_buf));
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_START_TIME), 
+				   time_buf);
+	slurm_make_time_str((time_t *)&resv_ptr->end_time, time_buf,
+			    sizeof(time_buf));
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_END_TIME), 
+				   time_buf);
+
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_ACCOUNTS),
+				   resv_ptr->accounts);
+
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_USERS),
+				   resv_ptr->users);
+
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_PARTITION),
+				   resv_ptr->partition);
+
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_FEATURES),
+				   resv_ptr->features);
+
+	temp_char = reservation_flags_string(resv_ptr->flags);
+	add_display_treestore_line(update, treestore, &iter, 
+				   find_col_name(display_data_resv,
+						 SORTID_FLAGS),
+				   temp_char);
+	xfree(temp_char);
+}
+
+static void _update_resv_record(sview_resv_info_t *sview_resv_info_ptr, 
+				GtkTreeStore *treestore,
+				GtkTreeIter *iter)
+{
+	char *tmp_ptr = NULL;
+	char tmp_char[50];
+	reserve_info_t *resv_ptr = sview_resv_info_ptr->resv_ptr;
+		     
+	gtk_tree_store_set(treestore, iter, SORTID_UPDATED, 1, -1);
+
+	gtk_tree_store_set(treestore, iter,
+			   SORTID_ACCOUNTS, resv_ptr->accounts, -1);
+
+	slurm_make_time_str((time_t *)&resv_ptr->end_time, tmp_char,
+			    sizeof(tmp_char));
+	gtk_tree_store_set(treestore, iter, SORTID_END_TIME, tmp_char, -1);
+
+	gtk_tree_store_set(treestore, iter, SORTID_FEATURES,
+			   resv_ptr->features, -1);
+
+	tmp_ptr = reservation_flags_string(resv_ptr->flags);
+	gtk_tree_store_set(treestore, iter, SORTID_FLAGS,
+			   tmp_ptr, -1);
+	xfree(tmp_ptr);
+
+	gtk_tree_store_set(treestore, iter, SORTID_NAME, resv_ptr->name, -1);
+
+	convert_num_unit((float)resv_ptr->node_cnt,
+			 tmp_char, sizeof(tmp_char), UNIT_NONE);
+	gtk_tree_store_set(treestore, iter, 
+			   SORTID_NODE_CNT, tmp_char, -1);
+
+	gtk_tree_store_set(treestore, iter, 
+			   SORTID_NODE_LIST, resv_ptr->node_list, -1);
+
+	gtk_tree_store_set(treestore, iter, 
+			   SORTID_PARTITION, resv_ptr->partition, -1);
+
+	slurm_make_time_str((time_t *)&resv_ptr->start_time, tmp_char,
+			    sizeof(tmp_char));
+	gtk_tree_store_set(treestore, iter, SORTID_START_TIME, tmp_char, -1);
+
+	gtk_tree_store_set(treestore, iter,
+			   SORTID_USERS, resv_ptr->users, -1);
+		
+	return;
+}
+
+static void _append_resv_record(sview_resv_info_t *sview_resv_info_ptr, 
+				GtkTreeStore *treestore, GtkTreeIter *iter,
+				int line)
+{
+	gtk_tree_store_append(treestore, iter, NULL);
+	gtk_tree_store_set(treestore, iter, SORTID_POS, line, -1);
+	_update_resv_record(sview_resv_info_ptr, treestore, iter);	
+}
+
+static void _update_info_resv(List info_list, 
+			      GtkTreeView *tree_view)
+{
+	GtkTreePath *path = gtk_tree_path_new_first();
+	GtkTreeModel *model = gtk_tree_view_get_model(tree_view);
+	GtkTreeIter iter;
+	reserve_info_t *resv_ptr = NULL;
+	int line = 0;
+	char *host = NULL, *resv_name = NULL;
+	ListIterator itr = NULL;
+	sview_resv_info_t *sview_resv_info = NULL;
+
+	/* get the iter, or find out the list is empty goto add */
+	if (gtk_tree_model_get_iter(model, &iter, path)) {
+		/* make sure all the reserves are still here */
+		while(1) {
+			gtk_tree_store_set(GTK_TREE_STORE(model), &iter, 
+					   SORTID_UPDATED, 0, -1);	
+			if(!gtk_tree_model_iter_next(model, &iter)) {
+				break;
+			}
+		}
+	}
+
+	itr = list_iterator_create(info_list);
+	while ((sview_resv_info = (sview_resv_info_t*) list_next(itr))) {
+		resv_ptr = sview_resv_info->resv_ptr;
+		/* get the iter, or find out the list is empty goto add */
+		if (!gtk_tree_model_get_iter(model, &iter, path)) {
+			goto adding;
+		} 
+		while(1) {
+			/* search for the jobid and check to see if 
+			   it is in the list */
+			gtk_tree_model_get(model, &iter, SORTID_NAME, 
+					   &resv_name, -1);
+			if(!strcmp(resv_name, resv_ptr->name)) {
+				/* update with new info */
+				g_free(resv_name);
+				_update_resv_record(sview_resv_info, 
+						    GTK_TREE_STORE(model), 
+						    &iter);
+				goto found;
+			}
+			g_free(resv_name);
+				
+			/* see what line we were on to add the next one 
+			   to the list */
+			gtk_tree_model_get(model, &iter, SORTID_POS, 
+					   &line, -1);
+			if(!gtk_tree_model_iter_next(model, &iter)) {
+				line++;
+				break;
+			}
+		}
+	adding:
+		_append_resv_record(sview_resv_info, GTK_TREE_STORE(model), 
+				    &iter, line);
+	found:
+		;
+	}
+	list_iterator_destroy(itr);
+	if(host)
+		free(host);
+
+	gtk_tree_path_free(path);
+	/* remove all old reservations */
+	remove_old(model, SORTID_UPDATED);
+	return;
+}
+
+static List _create_resv_info_list(reserve_info_msg_t *resv_info_ptr,
+				   int changed)
+{
+	static List info_list = NULL;
+	int i = 0;
+	sview_resv_info_t *sview_resv_info_ptr = NULL;
+	reserve_info_t *resv_ptr = NULL;
+
+	if(!changed && info_list) 
+		goto update_color;
+	
+	if(info_list) 
+		list_flush(info_list);
+	else
+		info_list = list_create(_resv_info_list_del);
+
+	if (!info_list) {
+		g_print("malloc error\n");
+		return NULL;
+	}
+	
+	for(i=0; i<resv_info_ptr->record_count; i++) {
+		resv_ptr = &(resv_info_ptr->reservation_array[i]);
+		sview_resv_info_ptr = xmalloc(sizeof(sview_resv_info_t));
+		sview_resv_info_ptr->resv_ptr = resv_ptr;
+		list_append(info_list, sview_resv_info_ptr);
+	}
+
+update_color:
+	return info_list;
+}
+
+void _display_info_resv(List info_list,	popup_info_t *popup_win)
+{
+	specific_info_t *spec_info = popup_win->spec_info;
+	char *name = (char *)spec_info->search_info->gchar_data;
+	int found = 0;
+	reserve_info_t *resv_ptr = NULL;
+	GtkTreeView *treeview = NULL;
+	ListIterator itr = NULL;
+	sview_resv_info_t *sview_resv_info = NULL;
+	int update = 0;
+	int i = -1, j = 0;
+	int first_time = 0;
+
+	if(!spec_info->search_info->gchar_data) {
+		//info = xstrdup("No pointer given!");
+		goto finished;
+	}
+	if(!list_count(popup_win->grid_button_list)) 
+		first_time = 1;
+
+need_refresh:
+	if(!spec_info->display_widget) {
+		treeview = create_treeview_2cols_attach_to_table(
+			popup_win->table);
+		spec_info->display_widget = 
+			gtk_widget_ref(GTK_WIDGET(treeview));
+	} else {
+		treeview = GTK_TREE_VIEW(spec_info->display_widget);
+		update = 1;
+	}
+
+	itr = list_iterator_create(info_list);
+	while ((sview_resv_info = (sview_resv_info_t*) list_next(itr))) {
+		resv_ptr = sview_resv_info->resv_ptr;
+		i++;
+		if(!strcmp(resv_ptr->name, name)) {
+			j=0;
+			while(resv_ptr->node_inx[j] >= 0) {
+				if(!first_time)
+					change_grid_color(
+						popup_win->grid_button_list,
+						resv_ptr->node_inx[j],
+						resv_ptr->node_inx[j+1], i);
+				else
+					get_button_list_from_main(
+						&popup_win->grid_button_list,
+						resv_ptr->node_inx[j],
+						resv_ptr->node_inx[j+1],
+						i);
+				j += 2;
+			}
+			_layout_resv_record(treeview, sview_resv_info, update);
+			found = 1;
+			break;
+		}
+	}
+	list_iterator_destroy(itr);
+	
+	if(!found) {
+		if(!popup_win->not_found) { 
+			char *temp = "RESERVATION DOESN'T EXSIST\n";
+			GtkTreeIter iter;
+			GtkTreeModel *model = NULL;
+	
+			/* only time this will be run so no update */
+			model = gtk_tree_view_get_model(treeview);
+			add_display_treestore_line(0, 
+						   GTK_TREE_STORE(model), 
+						   &iter,
+						   temp, "");
+		}
+		popup_win->not_found = true;
+	} else {
+		if(popup_win->not_found) { 
+			popup_win->not_found = false;
+			gtk_widget_destroy(spec_info->display_widget);
+			
+			goto need_refresh;
+		}
+		put_buttons_in_table(popup_win->grid_table,
+				     popup_win->grid_button_list);
+
+	}
+	gtk_widget_show(spec_info->display_widget);
+		
+finished:
+		
+	return;
+}
+
 extern void refresh_resv(GtkAction *action, gpointer user_data)
 {
 	popup_info_t *popup_win = (popup_info_t *)user_data;
@@ -91,9 +755,67 @@ extern void refresh_resv(GtkAction *action, gpointer user_data)
 	specific_info_resv(popup_win);
 }
 
+extern int get_new_info_resv(reserve_info_msg_t **info_ptr, 
+			     int force)
+{
+	static reserve_info_msg_t *resv_info_ptr = NULL, *new_resv_ptr = NULL;
+	int error_code = SLURM_NO_CHANGE_IN_DATA;
+	time_t now = time(NULL);
+	static time_t last;
+	static bool changed = 0;
+		
+	if(!force && ((now - last) < global_sleep_time)) {
+		error_code = SLURM_NO_CHANGE_IN_DATA;
+		*info_ptr = resv_info_ptr;
+		if(changed) 
+			return SLURM_SUCCESS;
+		return error_code;
+	}
+	last = now;
+	if (resv_info_ptr) {
+		error_code = slurm_load_reservations(resv_info_ptr->last_update,
+						     &new_resv_ptr);
+		if (error_code == SLURM_SUCCESS) {
+			slurm_free_reservation_info_msg(resv_info_ptr);
+			changed = 1;
+		} else if (slurm_get_errno() == SLURM_NO_CHANGE_IN_DATA) {
+			error_code = SLURM_NO_CHANGE_IN_DATA;
+			new_resv_ptr = resv_info_ptr;
+			changed = 0;
+		}
+	} else {
+		error_code = slurm_load_reservations((time_t) NULL, 
+						     &new_resv_ptr);
+		changed = 1;
+	}
+	resv_info_ptr = new_resv_ptr;
+	*info_ptr = new_resv_ptr;
+	return error_code;
+}
+
 extern GtkListStore *create_model_resv(int type)
 {
-	return (GtkListStore *) NULL;
+	GtkListStore *model = NULL;
+	GtkTreeIter iter;
+
+	switch(type) {
+	case SORTID_ACTION:
+		model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
+		gtk_list_store_append(model, &iter);
+		gtk_list_store_set(model, &iter,
+				   1, SORTID_ACTION,
+				   0, "None",
+				   -1);	
+		gtk_list_store_append(model, &iter);
+		gtk_list_store_set(model, &iter,
+				   1, SORTID_ACTION,
+				   0, "Remove",
+				   -1);	
+		break;
+	default:
+		break;
+	}
+	return model;
 }
 
 extern void admin_edit_resv(GtkCellRendererText *cell,
@@ -101,19 +823,90 @@ extern void admin_edit_resv(GtkCellRendererText *cell,
 			    const char *new_text,
 			    gpointer data)
 {
+	GtkTreeStore *treestore = GTK_TREE_STORE(data);
+	GtkTreePath *path = gtk_tree_path_new_from_string(path_string);
+	GtkTreeIter iter;
+	resv_desc_msg_t *resv_msg = xmalloc(sizeof(resv_desc_msg_t));
+	
+	char *temp = NULL;
+	char *old_text = NULL;
+	const char *type = NULL;
+	
+	int column = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cell), 
+						       "column"));
+
+	if(!new_text || !strcmp(new_text, ""))
+		goto no_input;
+	
+	slurm_init_resv_desc_msg(resv_msg);
+
+	gtk_tree_model_get_iter(GTK_TREE_MODEL(treestore), &iter, path);
+
+	slurm_init_resv_desc_msg(resv_msg);	
+	gtk_tree_model_get(GTK_TREE_MODEL(treestore), &iter, 
+			   SORTID_NAME, &resv_msg->name, 
+			   column, &old_text,
+			   -1);
+	
+	type = _set_resv_msg(resv_msg, new_text, column);
+	if(errno) 
+		goto print_error;
+	
+	if(got_edit_signal) {
+		temp = got_edit_signal;
+		got_edit_signal = NULL;
+		admin_resv(GTK_TREE_MODEL(treestore), &iter, temp);
+		xfree(temp);
+		goto no_input;
+	}
+			
+	if(old_text && !strcmp(old_text, new_text)) {
+		temp = g_strdup_printf("No change in value.");
+	} else if(slurm_update_reservation(resv_msg) == SLURM_SUCCESS) {
+		gtk_tree_store_set(treestore, &iter, column, new_text, -1);
+		temp = g_strdup_printf("Reservation %s %s changed to %s",
+				       resv_msg->name,
+				       type,
+				       new_text);
+	} else if(errno == ESLURM_DISABLED) {
+		temp = g_strdup_printf(
+			"Can only edit %s on reservations not yet started.",
+			type);
+	} else {
+	print_error:
+		temp = g_strdup_printf("Reservation %s %s can't be "
+				       "set to %s",
+				       resv_msg->name,
+				       type,
+				       new_text);
+	}
+	
+	display_edit_note(temp);
+	g_free(temp);
+
+no_input:
+	slurm_free_resv_desc_msg(resv_msg);
+			  
+	gtk_tree_path_free (path);
+	g_free(old_text);
+	g_static_mutex_unlock(&sview_mutex);
 }
 
 extern void get_info_resv(GtkTable *table, display_data_t *display_data)
 {
 	int error_code = SLURM_SUCCESS;
+	List info_list = NULL;
 	static int view = -1;
 	static reserve_info_msg_t *resv_info_ptr = NULL;
-	reserve_info_t *resv;
 	char error_char[100];
 	GtkWidget *label = NULL;
 	GtkTreeView *tree_view = NULL;
 	static GtkWidget *display_widget = NULL;
 	int i = 0, j = 0;
+	int changed = 1;
+	ListIterator itr = NULL;
+	sview_resv_info_t *sview_resv_info_ptr = NULL;
+	reserve_info_t *resv_ptr = NULL;
 		
 	if(display_data)
 		local_display_data = display_data;
@@ -128,8 +921,9 @@ extern void get_info_resv(GtkTable *table, display_data_t *display_data)
 	}
 
 	error_code = get_new_info_resv(&resv_info_ptr, force_refresh);
-	if ((error_code != SLURM_SUCCESS) &&
-	    (error_code != SLURM_NO_CHANGE_IN_DATA)) {
+	if(error_code == SLURM_NO_CHANGE_IN_DATA) {
+		changed = 0;
+	} else if (error_code != SLURM_SUCCESS) {
 		if(view == ERROR_VIEW)
 			goto end_it;
 		if(display_widget)
@@ -145,40 +939,44 @@ extern void get_info_resv(GtkTable *table, display_data_t *display_data)
 	}
 
 display_it:
-	for (i=0; i<resv_info_ptr->record_count; i++) {
-		resv = &resv_info_ptr->reservation_array[i];
-		j = 0;
-		while (resv->node_inx[j] >= 0) {
-//FIXME: Need to capure the color here?
-			(void)        change_grid_color(grid_button_list,
-							resv->node_inx[j],
-							resv->node_inx[j+1],
-							i);
+	info_list = _create_resv_info_list(resv_info_ptr, changed);
+	if(!info_list)
+		return;
+	/* set up the grid */
+	itr = list_iterator_create(info_list);
+	while ((sview_resv_info_ptr = list_next(itr))) {
+		resv_ptr = sview_resv_info_ptr->resv_ptr;
+		j=0;
+		while(resv_ptr->node_inx[j] >= 0) {
+			sview_resv_info_ptr->color = 
+				change_grid_color(grid_button_list,
+						  resv_ptr->node_inx[j],
+						  resv_ptr->node_inx[j+1],
+						  i);
 			j += 2;
 		}
+		i++;
 	}
-
+	list_iterator_destroy(itr);
+		
 	if(view == ERROR_VIEW && display_widget) {
 		gtk_widget_destroy(display_widget);
 		display_widget = NULL;
 	}
-
 	if(!display_widget) {
 		tree_view = create_treeview(local_display_data);
-				
+
 		display_widget = gtk_widget_ref(GTK_WIDGET(tree_view));
-		gtk_table_attach_defaults(GTK_TABLE(table), 
+		gtk_table_attach_defaults(table,
 					  GTK_WIDGET(tree_view),
-					  0, 1, 0, 1); 
+					  0, 1, 0, 1);
 		/* since this function sets the model of the tree_view 
-		 * to the treestore we don't really care about 
-		 * the return value */
+		   to the treestore we don't really care about 
+		   the return value */
 		create_treestore(tree_view, display_data_resv, SORTID_CNT);
 	}
-
 	view = INFO_VIEW;
-//	_update_info_job(info_list, GTK_TREE_VIEW(display_widget));
-
+	_update_info_resv(info_list, GTK_TREE_VIEW(display_widget));
 end_it:
 	toggled = FALSE;
 	force_refresh = FALSE;
@@ -186,84 +984,397 @@ end_it:
 	return;
 }
 
-extern int get_new_info_resv(reserve_info_msg_t **info_ptr, 
-			     int force)
+extern void specific_info_resv(popup_info_t *popup_win)
 {
-	static reserve_info_msg_t *resv_info_ptr = NULL, *new_resv_ptr = NULL;
-	int error_code = SLURM_NO_CHANGE_IN_DATA;
-	time_t now = time(NULL);
-	static time_t last;
-	static bool changed = 0;
-		
-	if(!force && ((now - last) < global_sleep_time)) {
-		error_code = SLURM_NO_CHANGE_IN_DATA;
-		*info_ptr = resv_info_ptr;
-		if(changed) 
-			return SLURM_SUCCESS;
-		return error_code;
+	int resv_error_code = SLURM_SUCCESS;
+	static reserve_info_msg_t *resv_info_ptr = NULL;
+	static reserve_info_t *resv_ptr = NULL;
+	specific_info_t *spec_info = popup_win->spec_info;
+	sview_search_info_t *search_info = spec_info->search_info;
+	char error_char[100];
+	GtkWidget *label = NULL;
+	GtkTreeView *tree_view = NULL;
+	List resv_list = NULL;
+	List send_resv_list = NULL;
+	int changed = 1;
+	sview_resv_info_t *sview_resv_info_ptr = NULL;
+	int j=0, i=-1;
+	char *host = NULL, *host2 = NULL;
+	hostlist_t hostlist = NULL;
+	int found = 0;
+	ListIterator itr = NULL;
+	
+	if(!spec_info->display_widget) {
+		setup_popup_info(popup_win, display_data_resv, SORTID_CNT);
 	}
-	last = now;
-	if (resv_info_ptr) {
-		error_code = slurm_load_reservations(resv_info_ptr->last_update,
-						     &new_resv_ptr);
-		if (error_code == SLURM_SUCCESS) {
-			slurm_free_reservation_info_msg(resv_info_ptr);
-			changed = 1;
-		} else if (slurm_get_errno() == SLURM_NO_CHANGE_IN_DATA) {
-			error_code = SLURM_NO_CHANGE_IN_DATA;
-			new_resv_ptr = resv_info_ptr;
-			changed = 0;
+
+	if(spec_info->display_widget && popup_win->toggled) {
+		gtk_widget_destroy(spec_info->display_widget);
+		spec_info->display_widget = NULL;
+		goto display_it;
+	}
+	
+	if((resv_error_code = 
+	    get_new_info_resv(&resv_info_ptr, popup_win->force_refresh))
+	   == SLURM_NO_CHANGE_IN_DATA) { 
+		if(!spec_info->display_widget 
+		   || spec_info->view == ERROR_VIEW) {
+			goto display_it;
 		}
-	} else {
-		error_code = slurm_load_reservations((time_t) NULL, 
-						     &new_resv_ptr);
-		changed = 1;
+		changed = 0;
+		
+	} else if (resv_error_code != SLURM_SUCCESS) {
+		if(spec_info->view == ERROR_VIEW)
+			goto end_it;
+		spec_info->view = ERROR_VIEW;
+		if(spec_info->display_widget)
+			gtk_widget_destroy(spec_info->display_widget);
+		sprintf(error_char, "slurm_load_node_select: %s",
+			slurm_strerror(slurm_get_errno()));
+		label = gtk_label_new(error_char);
+		gtk_table_attach_defaults(popup_win->table, 
+					  label,
+					  0, 1, 0, 1); 
+		gtk_widget_show(label);	
+		spec_info->display_widget = gtk_widget_ref(label);
+		goto end_it;
 	}
-	resv_info_ptr = new_resv_ptr;
-	*info_ptr = new_resv_ptr;
-	return error_code;
-}
+	
+display_it:
+	
+	resv_list = _create_resv_info_list(resv_info_ptr, changed);
 
-extern void specific_info_resv(popup_info_t *popup_win)
-{
+	if(!resv_list)
+		return;
+
+	if(spec_info->view == ERROR_VIEW && spec_info->display_widget) {
+		gtk_widget_destroy(spec_info->display_widget);
+		spec_info->display_widget = NULL;
+	}
+	if(spec_info->type != INFO_PAGE && !spec_info->display_widget) {
+		tree_view = create_treeview(local_display_data);
+		spec_info->display_widget = 
+			gtk_widget_ref(GTK_WIDGET(tree_view));
+		gtk_table_attach_defaults(popup_win->table, 
+					  GTK_WIDGET(tree_view),
+					  0, 1, 0, 1); 
+		/* since this function sets the model of the tree_view 
+		   to the treestore we don't really care about 
+		   the return value */
+		create_treestore(tree_view, 
+				 popup_win->display_data, SORTID_CNT);
+	}
+
+	if(popup_win->grid_button_list) {
+		list_destroy(popup_win->grid_button_list);
+	}	       
+	
+#ifdef HAVE_3D
+	popup_win->grid_button_list = copy_main_button_list();
+#else
+	popup_win->grid_button_list = list_create(destroy_grid_button);
+#endif	
+
+	spec_info->view = INFO_VIEW;
+	if(spec_info->type == INFO_PAGE) {
+		_display_info_resv(resv_list, popup_win);
+		goto end_it;
+	}
+
+	/* just linking to another list, don't free the inside, just
+	   the list */
+	send_resv_list = list_create(NULL);	
+	itr = list_iterator_create(resv_list);
+	i = -1;
+	while ((sview_resv_info_ptr = list_next(itr))) {
+		i++;
+		resv_ptr = sview_resv_info_ptr->resv_ptr;	
+		switch(spec_info->type) {
+		case PART_PAGE:
+			if(strcmp(resv_ptr->partition, 
+				  search_info->gchar_data)) 
+				continue;
+			break;
+		case BLOCK_PAGE:
+		case NODE_PAGE:
+			if(!resv_ptr->node_list)
+				continue;
+			
+			hostlist = hostlist_create(search_info->gchar_data);
+			host = hostlist_shift(hostlist);
+			hostlist_destroy(hostlist);
+			if(!host) 
+				continue;
+
+			hostlist = hostlist_create(resv_ptr->node_list);
+			found = 0;
+			while((host2 = hostlist_shift(hostlist))) { 
+				if(!strcmp(host, host2)) {
+					free(host2);
+					found = 1;
+					break; 
+				}
+				free(host2);
+			}
+			hostlist_destroy(hostlist);
+			if(!found)
+				continue;
+			break;
+		case JOB_PAGE:
+			if(strcmp(resv_ptr->name, 
+				  search_info->gchar_data)) 
+				continue;
+			break;
+		default:
+			g_print("Unknown type %d\n", spec_info->type);
+			continue;
+		}
+		list_push(send_resv_list, resv_ptr);
+		j=0;
+		while(resv_ptr->node_inx[j] >= 0) {
+			change_grid_color(
+				popup_win->grid_button_list,
+				resv_ptr->node_inx[j],
+				resv_ptr->node_inx[j+1], i);
+			j += 2;
+		}
+	}
+	list_iterator_destroy(itr);
+	 
+	_update_info_resv(send_resv_list, 
+			   GTK_TREE_VIEW(spec_info->display_widget));
+	list_destroy(send_resv_list);
+end_it:
+	popup_win->toggled = 0;
+	popup_win->force_refresh = 0;
+	
+	return;
 }
 
 extern void set_menus_resv(void *arg, GtkTreePath *path, 
 			   GtkMenu *menu, int type)
 {
+	GtkTreeView *tree_view = (GtkTreeView *)arg;
+	popup_info_t *popup_win = (popup_info_t *)arg;
+	switch(type) {
+	case TAB_CLICKED:
+		make_fields_menu(menu, display_data_resv, SORTID_CNT);
+		break;
+	case ROW_CLICKED:
+		make_options_menu(tree_view, path, menu, options_data_resv);
+		break;
+	case POPUP_CLICKED:
+		make_popup_fields_menu(popup_win, menu);
+		break;
+	default:
+		g_error("UNKNOWN type %d given to set_fields\n", type);
+	}
 }
 
-#if 0
-static void _layout_job_record(GtkTreeView *treeview, 
-			       sview_job_info_t *sview_job_info_ptr, 
-			       int update)
+extern void popup_all_resv(GtkTreeModel *model, GtkTreeIter *iter, int id)
 {
-	char *nodes = NULL, *reason = NULL, *uname = NULL;
-	char tmp_char[50];
-	time_t now_time = time(NULL);
-	job_info_t *job_ptr = sview_job_info_ptr->job_ptr;
-	struct group *group_info = NULL;
-	uint16_t term_sig = 0;
-
-	GtkTreeIter iter;
-	GtkTreeStore *treestore = 
-		GTK_TREE_STORE(gtk_tree_view_get_model(treeview));
+	char *name = NULL;
+	char *state = NULL;
+	char title[100];
+	ListIterator itr = NULL;
+	popup_info_t *popup_win = NULL;
+	GError *error = NULL;
+				
+	gtk_tree_model_get(model, iter, SORTID_NAME, &name, -1);
+	
+	switch(id) {
+	case PART_PAGE:
+		snprintf(title, 100, "Partition with reservation %s", name);
+		break;
+	case JOB_PAGE:
+		snprintf(title, 100, "Job(s) in reservation %s", name);
+		break;
+	case NODE_PAGE:
+#ifdef HAVE_BG
+		snprintf(title, 100, 
+			 "Base partitions(s) in reservation %s",
+			 name);
+#else
+		snprintf(title, 100, "Node(s) in reservation %s ",
+			 name);
+#endif
+		break;
+	case BLOCK_PAGE: 
+		snprintf(title, 100, "Block(s) in reservation %s", name);
+		break;
+	case SUBMIT_PAGE: 
+		snprintf(title, 100, "Submit job in reservation %s", name);
+		break;
+	case INFO_PAGE: 
+		snprintf(title, 100, "Full info for reservation %s", name);
+		break;
+	default:
+		g_print("resv got %d\n", id);
+	}
+	
+	itr = list_iterator_create(popup_list);
+	while((popup_win = list_next(itr))) {
+		if(popup_win->spec_info)
+			if(!strcmp(popup_win->spec_info->title, title)) {
+				break;
+			} 
+	}
+	list_iterator_destroy(itr);
 
-	if(!treestore)
+	if(!popup_win) {
+		if(id == INFO_PAGE)
+			popup_win = create_popup_info(id, RESV_PAGE, title);
+		else
+			popup_win = create_popup_info(RESV_PAGE, id, title);
+	} else {
+		g_free(name);
+		g_free(state);
+		gtk_window_present(GTK_WINDOW(popup_win->popup));
 		return;
+	}
 
-	add_display_treestore_line(update, treestore, &iter, 
-				   find_col_name(display_data_job,
-						 SORTID_NAME), 
-				   job_ptr->name);
+	switch(id) {
+	case JOB_PAGE:
+	case BLOCK_PAGE: 
+	case INFO_PAGE:
+		popup_win->spec_info->search_info->gchar_data = name;
+		//specific_info_job(popup_win);
+		break;
+	case NODE_PAGE:
+		g_free(name);
+		gtk_tree_model_get(model, iter, SORTID_NODE_LIST, &name, -1);
+		popup_win->spec_info->search_info->gchar_data = name;
+		popup_win->spec_info->search_info->search_type = 
+			SEARCH_NODE_NAME;
+		
+		g_free(state);
+		
+		//specific_info_node(popup_win);
+		break;
+	case SUBMIT_PAGE: 
+		break;
+	default:
+		g_print("resv got unknown type %d\n", id);
+	}
+	if (!g_thread_create((gpointer)popup_thr, popup_win, FALSE, &error))
+	{
+		g_printerr ("Failed to create resv popup thread: %s\n", 
+			    error->message);
+		return;
+	}		
 }
 
-static void _update_job_record(sview_job_info_t *sview_job_info_ptr, 
-			       GtkTreeStore *treestore,
-			       GtkTreeIter *iter)
+extern void admin_resv(GtkTreeModel *model, GtkTreeIter *iter, char *type)
 {
+	resv_desc_msg_t *resv_msg = xmalloc(sizeof(resv_desc_msg_t));
+	reservation_name_msg_t resv_name_msg;
+	char *resvid = NULL;
+	char tmp_char[100];
+	char *temp = NULL;
+	int edit_type = 0;
+	int response = 0;	
+	GtkWidget *label = NULL;
+	GtkWidget *entry = NULL;
+	GtkWidget *popup = gtk_dialog_new_with_buttons(
+		type,
+		GTK_WINDOW(main_window),
+		GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+		NULL);
+	gtk_window_set_transient_for(GTK_WINDOW(popup), NULL);
+
+	gtk_tree_model_get(model, iter, SORTID_NAME, &resvid, -1);
+
+	slurm_init_resv_desc_msg(resv_msg);
+	memset(&resv_name_msg, 0, sizeof(reservation_name_msg_t));
+	
+	resv_msg->name = xstrdup(resvid);
+		
+	if(!strcasecmp("Remove", type)) {
+		resv_name_msg.name = resvid;
+
+		label = gtk_dialog_add_button(GTK_DIALOG(popup),
+					      GTK_STOCK_YES, GTK_RESPONSE_OK);
+		gtk_window_set_default(GTK_WINDOW(popup), label);
+		gtk_dialog_add_button(GTK_DIALOG(popup),
+				      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+		
+			snprintf(tmp_char, sizeof(tmp_char), 
+				 "Are you sure you want to remove "
+				 "reservation %s?",
+				 resvid);
+		label = gtk_label_new(tmp_char);
+		edit_type = EDIT_REMOVE;
+	} else {
+		label = gtk_dialog_add_button(GTK_DIALOG(popup),
+					      GTK_STOCK_OK, GTK_RESPONSE_OK);
+		gtk_window_set_default(GTK_WINDOW(popup), label);
+		gtk_dialog_add_button(GTK_DIALOG(popup),
+				      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+
+		gtk_window_set_default_size(GTK_WINDOW(popup), 200, 400);
+		snprintf(tmp_char, sizeof(tmp_char), 
+			 "Editing reservation %s think before you type",
+			 resvid);
+		label = gtk_label_new(tmp_char);
+		edit_type = EDIT_EDIT;
+		entry = _admin_full_edit_resv(resv_msg, model, iter);
+	}
+
+	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(popup)->vbox), 
+			   label, FALSE, FALSE, 0);
+	if(entry)
+		gtk_box_pack_start(GTK_BOX(GTK_DIALOG(popup)->vbox), 
+				   entry, TRUE, TRUE, 0);
+	gtk_widget_show_all(popup);
+	response = gtk_dialog_run (GTK_DIALOG(popup));
 
-	gtk_tree_store_set(treestore, iter, SORTID_NAME, job_ptr->name, -1);
+	if (response == GTK_RESPONSE_OK) {
+		switch(edit_type) {
+		case EDIT_REMOVE:
+			if(slurm_delete_reservation(&resv_name_msg)
+			   == SLURM_SUCCESS) {
+				temp = g_strdup_printf(
+					"Reservation %s removed successfully",
+					resvid);
+			} else {
+				temp = g_strdup_printf(
+					"Problem removing reservation %s.",
+					resvid);
+			}			
+			display_edit_note(temp);
+			g_free(temp);
+			break;
+		case EDIT_EDIT:
+			if(got_edit_signal) 
+				goto end_it;
+			if(slurm_update_reservation(resv_msg)
+			   == SLURM_SUCCESS) {
+				temp = g_strdup_printf(
+					"Reservation %s updated successfully",
+					resvid);
+			} else {
+				temp = g_strdup_printf(
+					"Problem updating reservation %s.",
+					resvid);
+			}
+			display_edit_note(temp);
+			g_free(temp);
+			break;
+		default:
+			break;
+		}
+	}
+end_it:
+		
+	g_free(resvid);
+	slurm_free_resv_desc_msg(resv_msg);
+	gtk_widget_destroy(popup);
+	if(got_edit_signal) {
+		type = got_edit_signal;
+		got_edit_signal = NULL;
+		admin_resv(model, iter, type);
+		xfree(type);
+	}			
+	return;
 }
 
-#endif
diff --git a/src/sview/sview.c b/src/sview/sview.c
index c44669ca14903e761ea324a164520acbb1e9822d..4b12840624787b8f466efa42dd6b8b27db91cb8a 100644
--- a/src/sview/sview.c
+++ b/src/sview/sview.c
@@ -83,8 +83,6 @@ display_data_t main_display_data[] = {
 	 refresh_main, create_model_resv, admin_edit_resv,
 	 get_info_resv, specific_info_resv, 
 	 set_menus_resv, NULL},
-
-
 #ifdef HAVE_BG
 	{G_TYPE_NONE, BLOCK_PAGE, "BG Blocks", TRUE, -1,
 	 refresh_main, NULL, NULL,
diff --git a/src/sview/sview.h b/src/sview/sview.h
index e275d7dbcfb83adb1c582d359db385598e2e6a74..e516a7ce5cd14e3de8af04b25350b11b2f49ed95 100644
--- a/src/sview/sview.h
+++ b/src/sview/sview.h
@@ -356,18 +356,20 @@ extern void popup_all_node(GtkTreeModel *model, GtkTreeIter *iter, int id);
 extern void admin_node(GtkTreeModel *model, GtkTreeIter *iter, char *type);
 
 // resv_info.c
+extern void refresh_resv(GtkAction *action, gpointer user_data);
+extern GtkListStore *create_model_resv(int type);
 extern void admin_edit_resv(GtkCellRendererText *cell,
 			    const char *path_string,
 			    const char *new_text,
 			    gpointer data);
-extern GtkListStore *create_model_resv(int type);
+extern int get_new_info_resv(reserve_info_msg_t **info_ptr, int force);
 extern void get_info_resv(GtkTable *table, display_data_t *display_data);
-extern int  get_new_info_resv(reserve_info_msg_t **info_ptr, 
-			      int force);
+extern void specific_info_resv(popup_info_t *popup_win);
 extern void set_menus_resv(void *arg, GtkTreePath *path, 
 			   GtkMenu *menu, int type);
-extern void specific_info_resv(popup_info_t *popup_win);
-extern void refresh_resv(GtkAction *action, gpointer user_data);
+extern void popup_all_resv(GtkTreeModel *model, GtkTreeIter *iter, int id);
+extern void admin_resv(GtkTreeModel *model, GtkTreeIter *iter, char *type);
+
 
 // submit_info.c
 extern void get_info_submit(GtkTable *table, display_data_t *display_data);