diff --git a/src/sview/block_info.c b/src/sview/block_info.c
index dcdc256f5b1863a9eafe395996045a1764ad657a..ce8c3433489436b89ace55b463aaf568fba5f0dd 100644
--- a/src/sview/block_info.c
+++ b/src/sview/block_info.c
@@ -61,6 +61,7 @@ enum {
 	SORTID_USE,
 	SORTID_NODES, 
 	SORTID_NODELIST, 
+	SORTID_POINTER,
 	SORTID_UPDATED, 
 	SORTID_CNT
 };
@@ -78,6 +79,7 @@ static display_data_t display_data_block[] = {
 	{G_TYPE_STRING, SORTID_USE, "Node Use", TRUE, -1, refresh_block},
 	{G_TYPE_STRING, SORTID_NODES, "Nodes", TRUE, -1, refresh_block},
 	{G_TYPE_STRING, SORTID_NODELIST, "BP List", TRUE, -1, refresh_block},
+	{G_TYPE_POINTER, SORTID_POINTER, NULL, FALSE, -1, refresh_block},
 	{G_TYPE_INT, SORTID_UPDATED, NULL, FALSE, -1, refresh_block},
 	{G_TYPE_NONE, -1, NULL, FALSE, -1}
 };
@@ -364,6 +366,7 @@ static void _update_block_record(db2_block_info_t *block_ptr,
 	char tmp_cnt[7];
 	char tmp_nodes[30];
 	
+	gtk_tree_store_set(treestore, iter, SORTID_POINTER, block_ptr, -1);
 	gtk_tree_store_set(treestore, iter, SORTID_BLOCK, 
 			   block_ptr->bg_block_name, -1);
 	gtk_tree_store_set(treestore, iter, SORTID_PARTITION, 
diff --git a/src/sview/common.c b/src/sview/common.c
index 7a95ab798f2ba10872ae0c53fe19f8a2648a3f68..3492e8955f81b83998fab2e01f7a295abaa5e8c3 100644
--- a/src/sview/common.c
+++ b/src/sview/common.c
@@ -204,6 +204,25 @@ extern int get_row_number(GtkTreeView *tree_view, GtkTreePath *path)
 	return line;
 }
 
+extern void *get_pointer(GtkTreeView *tree_view, GtkTreePath *path, int loc)
+{
+	GtkTreeModel *model = gtk_tree_view_get_model(tree_view);
+	GtkTreeIter iter;
+	void *ptr = NULL;
+	
+	if(!model) {
+		g_error("error getting the model from the tree_view");
+		return ptr;
+	}
+	
+	if (!gtk_tree_model_get_iter(model, &iter, path)) {
+		g_error("error getting iter from model");
+		return ptr;
+	}	
+	gtk_tree_model_get(model, &iter, loc, &ptr, -1);
+	return ptr;
+}
+
 extern void load_header(GtkTreeView *tree_view, display_data_t *display_data)
 {
 	while(display_data++) {
@@ -450,10 +469,6 @@ extern void row_clicked(GtkTreeView *tree_view, GdkEventButton *event,
 	} else if(event->button == 3) {
 		right_button_pressed(tree_view, path, event, 
 				     display_data, ROW_CLICKED);
-	} else if(event->type==GDK_2BUTTON_PRESS ||
-		  event->type==GDK_3BUTTON_PRESS) {
-		(display_data->row_clicked)(tree_view, path, 
-					    NULL, display_data->user_data);
 	}
 	gtk_tree_path_free(path);
 }
@@ -694,3 +709,4 @@ extern void remove_old(GtkTreeModel *model, int updated)
 	}
 	gtk_tree_path_free(path);
 }
+
diff --git a/src/sview/job_info.c b/src/sview/job_info.c
index bce508db1758f30f2fb891167a509bfe777b883d..4be88d31a71d146ae42804feb3872f823de53962 100644
--- a/src/sview/job_info.c
+++ b/src/sview/job_info.c
@@ -38,10 +38,16 @@ typedef struct {
 	job_step_info_response_msg_t *step_info_ptr;
 } job_and_step_info_t;
 
+typedef struct {
+	int jobid;
+	int stepid;
+} job_step_num_t;
+
 
 enum { 
 	SORTID_POS = POS_LOC,
 	SORTID_JOBID, 
+	SORTID_ALLOC, 
 	SORTID_PARTITION, 
 #ifdef HAVE_BG
 	SORTID_BLOCK, 
@@ -72,6 +78,7 @@ enum {
 static display_data_t display_data_job[] = {
 	{G_TYPE_INT, SORTID_POS, NULL, FALSE, -1, refresh_job},
 	{G_TYPE_INT, SORTID_JOBID, "JobID", TRUE, -1, refresh_job},
+	{G_TYPE_INT, SORTID_ALLOC, NULL, FALSE, -1, refresh_job},
 	{G_TYPE_STRING, SORTID_PARTITION, "Partition", TRUE, -1, refresh_job},
 #ifdef HAVE_BG
 	{G_TYPE_STRING, SORTID_BLOCK, "BG Block", TRUE, -1, refresh_job},
@@ -117,6 +124,7 @@ static display_data_t display_data_job[] = {
 
 static display_data_t options_data_job[] = {
 	{G_TYPE_INT, SORTID_POS, NULL, FALSE, -1},
+	{G_TYPE_STRING, INFO_PAGE, "Full Info", TRUE, JOB_PAGE},
 	{G_TYPE_STRING, PART_PAGE, "Partition", TRUE, JOB_PAGE},
 #ifdef HAVE_BG
 	{G_TYPE_STRING, BLOCK_PAGE, "Blocks", TRUE, JOB_PAGE},
@@ -189,6 +197,7 @@ static void _update_job_record(job_info_t *job_ptr,
 	if(!changed) 
 		goto update_steps;
 	
+	gtk_tree_store_set(treestore, iter, SORTID_ALLOC, 1, -1);
 	gtk_tree_store_set(treestore, iter, 
 			   SORTID_JOBID, job_ptr->job_id, -1);
 	gtk_tree_store_set(treestore, iter, 
@@ -296,6 +305,7 @@ static void _update_step_record(job_step_info_t *step_ptr,
 		return;
 	
 	
+	gtk_tree_store_set(treestore, iter, SORTID_ALLOC, 0, -1);
 	gtk_tree_store_set(treestore, iter, 
 			   SORTID_JOBID, step_ptr->step_id, -1);
 	gtk_tree_store_set(treestore, iter, 
@@ -343,7 +353,7 @@ static void _append_job_record(job_info_t *job_ptr,
 			       int line)
 {
 	gtk_tree_store_append(treestore, iter, NULL);
-	gtk_tree_store_set(treestore, iter, SORTID_POS, line, -1);	
+	gtk_tree_store_set(treestore, iter, SORTID_POS, line, -1);
 	_update_job_record(job_ptr, step_info_ptr, treestore, iter, 1);	
 }
 
@@ -573,6 +583,84 @@ static void _update_info_job(job_info_msg_t *job_info_ptr,
 	return;	
 }
 
+void _display_info_job(job_info_msg_t *job_info_ptr,
+		       job_step_info_response_msg_t *step_info_ptr,
+		       popup_info_t *popup_win)
+{
+	int i;
+	job_info_t job;
+	job_step_info_t step;
+	specific_info_t *spec_info = popup_win->spec_info;
+	job_step_num_t *job_step = (job_step_num_t *)spec_info->data;
+	char *info = NULL;
+	int found = 0;
+	char *not_found = NULL;
+	GtkWidget *label = NULL;
+	
+	if(!spec_info->data) {
+		info = xstrdup("No pointer given!");
+		goto finished;
+	}
+
+	if(spec_info->display_widget) {
+		not_found = 
+			xstrdup(GTK_LABEL(spec_info->display_widget)->text);
+		gtk_widget_destroy(spec_info->display_widget);
+		spec_info->display_widget = NULL;
+	}
+	
+	if(job_step->stepid == NO_VAL) {
+		for (i = 0; i < job_info_ptr->record_count; i++) {
+			job = job_info_ptr->job_array[i];
+			if(job.job_id == job_step->jobid) {
+				if(!(info = slurm_sprint_job_info(&job, 0))) {
+					info = xmalloc(100);
+					snprintf(info, 100, 
+						 "Problem getting job "
+						 "info for %d",
+						 job.job_id);
+				}
+				found = 1;
+				break;
+			}
+		}
+	} else {
+		for (i = 0; i < step_info_ptr->job_step_count; i++) {
+			if((step_info_ptr->job_steps[i].job_id 
+			    == job_step->jobid)
+			   && step_info_ptr->job_steps[i].step_id 
+			   == job_step->stepid) {
+				step = step_info_ptr->job_steps[i];
+				if(!(info = slurm_sprint_job_step_info(
+					     &step, 0))) {
+					info = xmalloc(100);
+					snprintf(info, 100,
+						 "Problem getting job "
+						 "info for %d.%d",
+						 step.job_id, 
+						 step.step_id);
+				}
+			}
+			found = 1;
+			break;
+		}
+	}
+	
+	if(!found) {
+		info = xstrdup("JOB ALREADY FINISHED OR NOT FOUND\n");
+		xstrcat(info, not_found);
+	}
+finished:
+	label = gtk_label_new(info);
+	xfree(info);
+	xfree(not_found);
+	gtk_table_attach_defaults(popup_win->table, label, 0, 1, 0, 1); 
+	gtk_widget_show(label);	
+	spec_info->display_widget = gtk_widget_ref(GTK_WIDGET(label));
+	
+	return;
+}
+
 void *_popup_thr_job(void *arg)
 {
 	popup_thr(arg);		
@@ -597,6 +685,7 @@ extern int get_new_info_job(job_info_msg_t **info_ptr)
 	static time_t last;
 		
 	if((now - last) < global_sleep_time) {
+		error_code = SLURM_NO_CHANGE_IN_DATA;
 		*info_ptr = job_info_ptr;
 		return error_code;
 	}
@@ -629,6 +718,7 @@ extern int get_new_info_job_step(job_step_info_response_msg_t **info_ptr)
 	static time_t last;
 		
 	if((now - last) < global_sleep_time) {
+		error_code = SLURM_NO_CHANGE_IN_DATA;
 		*info_ptr = old_step_ptr;
 		return error_code;
 	}
@@ -800,14 +890,19 @@ get_steps:
 	   == SLURM_NO_CHANGE_IN_DATA){
 		if((!spec_info->display_widget 
 		    || spec_info->view == ERROR_VIEW)
-		   || (job_error_code != SLURM_NO_CHANGE_IN_DATA))
+		   || (job_error_code != SLURM_NO_CHANGE_IN_DATA)) {
 			goto display_it;
-		_update_info_job(job_info_ptr, step_info_ptr,
-				 GTK_TREE_VIEW(spec_info->display_widget), 
-				 NULL, 0);
+		}
+		
+		if(spec_info->type != INFO_PAGE) {
+			_update_info_job(job_info_ptr, step_info_ptr,
+					 GTK_TREE_VIEW(
+						 spec_info->display_widget), 
+					 NULL, 0);
+		}
 		goto end_it;
 	}
-
+			
 	if (step_error_code != SLURM_SUCCESS) {
 		if(spec_info->view == ERROR_VIEW)
 			goto end_it;
@@ -828,8 +923,12 @@ display_it:
 		gtk_widget_destroy(spec_info->display_widget);
 		spec_info->display_widget = NULL;
 	}
-
-	if(!spec_info->display_widget) {
+	
+	spec_info->view = INFO_VIEW;
+	if(spec_info->type == INFO_PAGE) {
+		_display_info_job(job_info_ptr, step_info_ptr, popup_win);
+		goto end_it;
+	} else if(!spec_info->display_widget) {
 		job_and_step_info.job_info_ptr = job_info_ptr;
 		job_and_step_info.step_info_ptr = step_info_ptr;
 		tree_view = create_treeview(local_display_data, 
@@ -846,9 +945,9 @@ display_it:
 		create_treestore(tree_view, popup_win->display_data, 
 				 SORTID_CNT);
 	}
-	spec_info->view = INFO_VIEW;
 	_update_info_job(job_info_ptr, step_info_ptr,
-			 GTK_TREE_VIEW(spec_info->display_widget), spec_info,
+			 GTK_TREE_VIEW(spec_info->display_widget), 
+			 spec_info,
 			 1);
 end_it:
 	popup_win->toggled = 0;
@@ -875,121 +974,81 @@ extern void set_menus_job(void *arg, GtkTreePath *path,
 	}
 }
 
-extern void row_clicked_job(GtkTreeView *tree_view,
-			    GtkTreePath *path,
-			    GtkTreeViewColumn *column,
-			    gpointer user_data)
-{
-	job_and_step_info_t *job_and_step_info_ptr = 
-		(job_and_step_info_t *)user_data;
-	job_info_msg_t *job_info_ptr = job_and_step_info_ptr->job_info_ptr;
-	job_step_info_response_msg_t *step_info_ptr =
-		job_and_step_info_ptr->step_info_ptr;
-	job_info_t *job_ptr = NULL;
-	job_step_info_t *step_ptr = NULL;
-	int job_id = 0, i, pos = 0;
-	GtkTreeModel *model = gtk_tree_view_get_model(tree_view);
-	GtkWidget *popup = NULL;
-	GtkWidget *label = NULL;
-	GtkTreeIter iter;
-	char *info = NULL;
-	bool found = false;
-	
-	if(!model) {
-		g_error("error getting the model from the tree_view");
-		return;
-	}
-	
-	if (!gtk_tree_model_get_iter(model, &iter, path)) {
-		g_error("error getting iter from model");
-		return;
-	}
-	gtk_tree_model_get(model, &iter, SORTID_JOBID, &job_id, -1);
-	gtk_tree_model_get(model, &iter, SORTID_POS, &pos, -1);
-	
-	for (i = 0; i < job_info_ptr->record_count; i++) {
-		if(job_info_ptr->job_array[i].job_id == job_id) {
-			job_ptr = &job_info_ptr->job_array[i];
-			if(!(info = slurm_sprint_job_info(job_ptr, 0))) {
-				info = xmalloc(100);
-				sprintf(info, 
-					"Problem getting job info for %d",
-					job_ptr->job_id);
-			}
-			found = true;
-			break;
-		}
-	}
-	if(!found && pos > 0) {
-		for (i = 0; i < step_info_ptr->job_step_count; i++) {
-			if((step_info_ptr->job_steps[i].job_id == pos)
-			   && step_info_ptr->job_steps[i].step_id == job_id) {
-				step_ptr = &step_info_ptr->job_steps[i];
-				if(!(info = slurm_sprint_job_step_info(
-					     step_ptr, 0))) {
-					info = xmalloc(100);
-					sprintf(info, 
-						"Problem getting job "
-						"info for %d.%d",
-						step_ptr->job_id, 
-						step_ptr->step_id);
-				}
-			}
-			found = true;
-			break;
-		}
-		if(!found) {
-			info = xmalloc(100);
-			sprintf(info, "Job step %d.%d was not found!",
-				pos, job_id);
-		}
-	} else if(!found) {
-		info = xmalloc(100);
-		sprintf(info, "Job %d was not found!", job_id);
-	}
-
-	popup = gtk_dialog_new();
-
-	label = gtk_label_new(info);
-	gtk_box_pack_end(GTK_BOX(GTK_DIALOG(popup)->vbox), 
-			 label, TRUE, TRUE, 0);
-	xfree(info);
-	gtk_widget_show(label);
-	
-	gtk_widget_show(popup);
-	
-}
-
 extern void popup_all_job(GtkTreeModel *model, GtkTreeIter *iter, int id)
 {
 	char *name = NULL;
 	char title[100];
 	ListIterator itr = NULL;
 	popup_info_t *popup_win = NULL;
-	int jobid = -1;
+	int jobid = NO_VAL;
+	int stepid = NO_VAL;
 	GError *error = NULL;
+	job_step_num_t *job_step = NULL;
 
 	gtk_tree_model_get(model, iter, SORTID_JOBID, &jobid, -1);
+	gtk_tree_model_get(model, iter, SORTID_ALLOC, &stepid, -1);
+	if(stepid)
+		stepid = NO_VAL;
+	else {
+		stepid = jobid;
+		gtk_tree_model_get(model, iter, SORTID_POS, &jobid, -1);
+	}
+
 	switch(id) {
 	case PART_PAGE:
-		snprintf(title, 100, "Partition with job %d", jobid);
+		if(stepid == NO_VAL)
+			snprintf(title, 100, "Partition with job %d", jobid);
+		else
+			snprintf(title, 100, "Partition with job %d.%d",
+				 jobid, stepid);			
 		break;
 	case NODE_PAGE:
+		if(stepid == NO_VAL) {
+#ifdef HAVE_BG
+			snprintf(title, 100, 
+				 "Base partition(s) running job %d", jobid);
+#else
+			snprintf(title, 100, "Node(s) running job %d", jobid);
+#endif
+		} else {
 #ifdef HAVE_BG
-		snprintf(title, 100, 
-			 "Base partition(s) running job %d", jobid);
+			snprintf(title, 100, 
+				 "Base partition(s) running job %d.%d",
+				 jobid, stepid);
 #else
-		snprintf(title, 100, "Node(s) running job %d", jobid);
+			snprintf(title, 100, "Node(s) running job %d.%d",
+				 jobid, stepid);
 #endif
+		}
 		break;
 	case BLOCK_PAGE: 
-		snprintf(title, 100, "Block with job %d", jobid);
+		if(stepid == NO_VAL)
+			snprintf(title, 100, "Block with job %d", jobid);
+		else
+			snprintf(title, 100, "Block with job %d.%d",
+				 jobid, stepid);
 		break;
 	case ADMIN_PAGE: 
-		snprintf(title, 100, "Admin Page for job %d", jobid);
+		if(stepid == NO_VAL)
+			snprintf(title, 100, "Admin Page for job %d", jobid);
+		else
+			snprintf(title, 100, "Admin Page for job %d.%d",
+				 jobid, stepid);		
 		break;
 	case SUBMIT_PAGE: 
-		snprintf(title, 100, "Submit job on job %d", jobid);
+		if(stepid == NO_VAL)
+			snprintf(title, 100, "Submit job on job %d", jobid);
+		else
+			snprintf(title, 100, "Submit job on job %d.%d",
+				 jobid, stepid);
+			
+		break;
+	case INFO_PAGE: 
+		if(stepid == NO_VAL)
+			snprintf(title, 100, "Full info for job %d", jobid);
+		else
+			snprintf(title, 100, "Full info for job %d.%d",
+				 jobid, stepid);			
 		break;
 	default:
 		g_print("jobs got id %d\n", id);
@@ -1004,11 +1063,13 @@ extern void popup_all_job(GtkTreeModel *model, GtkTreeIter *iter, int id)
 	}
 	list_iterator_destroy(itr);
 	
-	if(!popup_win) 
-		popup_win = create_popup_info(JOB_PAGE, id, title);
-
-	popup_win->type = id;
-
+	if(!popup_win) {
+		if(id == INFO_PAGE)
+			popup_win = create_popup_info(id, JOB_PAGE, title);
+		else
+			popup_win = create_popup_info(JOB_PAGE, id, title);
+	}
+	
 	switch(id) {
 	case NODE_PAGE:
 		gtk_tree_model_get(model, iter, SORTID_NODELIST, &name, -1);
@@ -1025,11 +1086,16 @@ extern void popup_all_job(GtkTreeModel *model, GtkTreeIter *iter, int id)
 		break;
 #endif
 	case ADMIN_PAGE: 
-		gtk_tree_model_get(model, iter, SORTID_NAME, &name, -1);
 		break;
 	case SUBMIT_PAGE: 
-		gtk_tree_model_get(model, iter, SORTID_NAME, &name, -1);
 		break;
+	case INFO_PAGE:
+		job_step = g_malloc(sizeof(job_step_num_t));
+		job_step->jobid = jobid;
+		job_step->stepid = stepid;
+		popup_win->spec_info->data = job_step;
+		break;
+	
 	default:
 		g_print("jobs got %d\n", id);
 	}
diff --git a/src/sview/node_info.c b/src/sview/node_info.c
index 7f9333225b683e798d5e390b9ae214ecc8ce54b4..9c63bf8609140b0e2528930e82d35d5178b5bedf 100644
--- a/src/sview/node_info.c
+++ b/src/sview/node_info.c
@@ -41,6 +41,7 @@ enum {
 	SORTID_WEIGHT, 
 	SORTID_FEATURES, 
 	SORTID_REASON,
+	SORTID_POINTER, 
 	SORTID_UPDATED, 
 	SORTID_CNT
 };
@@ -55,6 +56,7 @@ static display_data_t display_data_node[] = {
 	{G_TYPE_INT, SORTID_WEIGHT,"Weight", FALSE, -1, refresh_node},
 	{G_TYPE_STRING, SORTID_FEATURES, "Features", FALSE, -1, refresh_node},
 	{G_TYPE_STRING, SORTID_REASON, "Reason", FALSE, -1, refresh_node},
+	{G_TYPE_POINTER, SORTID_POINTER, NULL, FALSE, -1, refresh_node},
 	{G_TYPE_INT, SORTID_UPDATED, NULL, FALSE, -1, refresh_node},
 	{G_TYPE_NONE, -1, NULL, FALSE, -1}
 };
@@ -78,6 +80,7 @@ static void _update_node_record(node_info_t *node_ptr,
 {
 	char tmp_cnt[7];
 
+	gtk_tree_store_set(treestore, iter, SORTID_POINTER, node_ptr, -1);
 	gtk_tree_store_set(treestore, iter, SORTID_NAME, node_ptr->name, -1);
 	gtk_tree_store_set(treestore, iter, SORTID_STATE, 
 			   node_state_string(node_ptr->node_state), -1);
diff --git a/src/sview/part_info.c b/src/sview/part_info.c
index 8c437c89ecbfbb747127eda92c043ce67f332973..c1b7dcd1c52e047e4479ffcda61fe795a05001cf 100644
--- a/src/sview/part_info.c
+++ b/src/sview/part_info.c
@@ -46,6 +46,7 @@ enum {
 	SORTID_DISK, 
 	SORTID_NODELIST, 
 	SORTID_STATE,
+	SORTID_POINTER,
 	SORTID_UPDATED, 
 	SORTID_CNT
 };
@@ -70,6 +71,7 @@ static display_data_t display_data_part[] = {
 #else
 	{G_TYPE_STRING, SORTID_NODELIST, "NodeList", TRUE, -1, refresh_part},
 #endif
+	{G_TYPE_POINTER, SORTID_POINTER, NULL, FALSE, -1, refresh_part},
 	{G_TYPE_INT, SORTID_UPDATED, NULL, FALSE, -1, refresh_part},
 
 	{G_TYPE_NONE, -1, NULL, FALSE, -1}
@@ -77,6 +79,7 @@ static display_data_t display_data_part[] = {
 
 static display_data_t options_data_part[] = {
 	{G_TYPE_INT, SORTID_POS, NULL, FALSE, -1},
+	{G_TYPE_STRING, INFO_PAGE, "Full Info", TRUE, PART_PAGE},
 	{G_TYPE_STRING, JOB_PAGE, "Jobs", TRUE, PART_PAGE},
 #ifdef HAVE_BG
 	{G_TYPE_STRING, BLOCK_PAGE, "Blocks", TRUE, PART_PAGE},
@@ -117,7 +120,9 @@ static void _update_part_record(partition_info_t *part_ptr,
 {
 	char time_buf[20];
 	char tmp_cnt[7];
-
+	partition_info_t *ptr = xmalloc(sizeof(partition_info_t));
+	memcpy(ptr, part_ptr, sizeof(partition_info_t));
+	gtk_tree_store_set(treestore, iter, SORTID_POINTER, ptr, -1);
 	gtk_tree_store_set(treestore, iter, SORTID_NAME, part_ptr->name, -1);
 
 	if(part_ptr->default_part)
@@ -191,7 +196,7 @@ static void _update_info_part(partition_info_msg_t *part_info_ptr,
 	char *host = NULL, *host2 = NULL, *part_name = NULL;
 	hostlist_t hostlist = NULL;
 	int found = 0;
-	
+
 	if(spec_info) {
 		switch(spec_info->type) {
 		case NODE_PAGE:
@@ -376,7 +381,7 @@ extern void get_info_part(GtkTable *table, display_data_t *display_data)
 		if(display_widget)
 			gtk_widget_destroy(display_widget);
 		view = ERROR_VIEW;
-		sprintf(error_char, "slurm_load_partitions: %s",
+		snprintf(error_char, 100, "slurm_load_partitions: %s",
 			slurm_strerror(slurm_get_errno()));
 		label = gtk_label_new(error_char);
 		display_widget = gtk_widget_ref(GTK_WIDGET(label));
@@ -446,8 +451,8 @@ extern void specific_info_part(popup_info_t *popup_win)
 			spec_info->display_widget = NULL;
 		}
 		spec_info->view = ERROR_VIEW;
-		sprintf(error_char, "slurm_load_partitions: %s",
-			slurm_strerror(slurm_get_errno()));
+		snprintf(error_char, 100, "slurm_load_partitions: %s",
+			 slurm_strerror(slurm_get_errno()));
 		label = gtk_label_new(error_char);
 		gtk_table_attach_defaults(popup_win->table, 
 					  label,
@@ -550,8 +555,12 @@ extern void popup_all_part(GtkTreeModel *model, GtkTreeIter *iter, int id)
 	ListIterator itr = NULL;
 	popup_info_t *popup_win = NULL;
 	GError *error = NULL;
-					
+	partition_info_t *ptr = NULL;
+				
 	gtk_tree_model_get(model, iter, SORTID_NAME, &name, -1);
+	gtk_tree_model_get(model, iter, 
+				   SORTID_POINTER, &ptr, -1);
+	g_print("storing partition %s\n", ptr->name);
 	switch(id) {
 	case JOB_PAGE:
 		snprintf(title, 100, "Job(s) in partition %s", name);
@@ -573,6 +582,9 @@ extern void popup_all_part(GtkTreeModel *model, GtkTreeIter *iter, int id)
 	case SUBMIT_PAGE: 
 		snprintf(title, 100, "Submit job in partition %s", name);
 		break;
+	case INFO_PAGE: 
+		snprintf(title, 100, "Full info for partition %s", name);
+		break;
 	default:
 		g_print("part got %d\n", id);
 	}
@@ -586,9 +598,12 @@ extern void popup_all_part(GtkTreeModel *model, GtkTreeIter *iter, int id)
 	}
 	list_iterator_destroy(itr);
 
-	if(!popup_win) 
-		popup_win = create_popup_info(PART_PAGE, id, title);
-
+	if(!popup_win) {
+		if(id == INFO_PAGE)
+			popup_win = create_popup_info(id, PART_PAGE, title);
+		else
+			popup_win = create_popup_info(PART_PAGE, id, title);
+	}
 	switch(id) {
 	case JOB_PAGE:
 		popup_win->spec_info->data = name;
@@ -604,10 +619,11 @@ extern void popup_all_part(GtkTreeModel *model, GtkTreeIter *iter, int id)
 		popup_win->spec_info->data = name;
 		break;
 	case ADMIN_PAGE: 
-		gtk_tree_model_get(model, iter, SORTID_NAME, &name, -1);
 		break;
 	case SUBMIT_PAGE: 
-		gtk_tree_model_get(model, iter, SORTID_NAME, &name, -1);
+		break;
+	case INFO_PAGE:
+		popup_win->spec_info->data = name;
 		break;
 	default:
 		g_print("part got %d\n", id);
diff --git a/src/sview/sview.c b/src/sview/sview.c
index 5b7dc4f03c1dc3125dd3588a0c6ad5de0d35bd13..ca2d504ef162117a7f4e4a21d5d6b22f24059998 100644
--- a/src/sview/sview.c
+++ b/src/sview/sview.c
@@ -46,31 +46,37 @@ GtkWidget *main_notebook = NULL;
 display_data_t main_display_data[] = {
 	{G_TYPE_NONE, JOB_PAGE, "Jobs", TRUE, -1,
 	 refresh_main, get_info_job, specific_info_job, 
-	 set_menus_job, row_clicked_job, NULL},
+	 set_menus_job, NULL},
+	{G_TYPE_NONE, STEP_PAGE, NULL, FALSE, -1,
+	 refresh_main, NULL,
+	 NULL, NULL, NULL},
 	{G_TYPE_NONE, PART_PAGE, "Partitions", TRUE, -1, 
 	 refresh_main, get_info_part, specific_info_part, 
-	 set_menus_part, row_clicked_part, NULL},
+	 set_menus_part, NULL},
 #ifdef HAVE_BG
 	{G_TYPE_NONE, BLOCK_PAGE, "BG Blocks", TRUE, -1,
 	 refresh_main, get_info_block, specific_info_block, 
-	 set_menus_block, row_clicked_block, NULL},
+	 set_menus_block, NULL},
 	{G_TYPE_NONE, NODE_PAGE, "Base Partitions", FALSE, -1,
 	 refresh_main, get_info_node, specific_info_node, 
-	 set_menus_node, row_clicked_node, NULL},
+	 set_menus_node, NULL},
 #else
 	{G_TYPE_NONE, BLOCK_PAGE, "BG Blocks", FALSE, -1,
 	 refresh_main, get_info_block, specific_info_block, 
-	 set_menus_block, row_clicked_block, NULL},
+	 set_menus_block, NULL},
 	{G_TYPE_NONE, NODE_PAGE, "Nodes", FALSE, -1,
 	 refresh_main, get_info_node, specific_info_node, 
-	 set_menus_node, row_clicked_node, NULL},
+	 set_menus_node, NULL},
 #endif
 	{G_TYPE_NONE, SUBMIT_PAGE, "Submit Job", TRUE, -1,
-	 refresh_main, NULL, NULL, 
+	 refresh_main, NULL, 
 	 NULL, NULL, NULL},
 	{G_TYPE_NONE, ADMIN_PAGE, "Admin", TRUE, -1,
-	 refresh_main, NULL, NULL,
+	 refresh_main,  NULL,
 	 NULL, NULL, NULL},
+	{G_TYPE_NONE, INFO_PAGE, NULL, FALSE, -1,
+	 refresh_main, NULL, NULL,
+	 NULL, NULL},
 	{G_TYPE_NONE, -1, NULL, FALSE, -1}
 };
 
diff --git a/src/sview/sview.h b/src/sview/sview.h
index eccffd1d81725acc4eeb07427d4469443876a1ce..cd99a8af76a88adf3012f919e6f0ea40402e506e 100644
--- a/src/sview/sview.h
+++ b/src/sview/sview.h
@@ -74,11 +74,13 @@
 #define POS_LOC 0
 
 enum { JOB_PAGE, 
+       STEP_PAGE, 
        PART_PAGE, 
        NODE_PAGE, 
        BLOCK_PAGE, 
        SUBMIT_PAGE,
        ADMIN_PAGE,
+       INFO_PAGE,
        PAGE_CNT 
 };
 enum { TAB_CLICKED,
@@ -129,10 +131,6 @@ struct display_data {
 	void (*specific)    (popup_info_t *popup_win);
 	void (*set_menu)    (void *arg, GtkTreePath *path,
 			     GtkMenu *menu, int type);
-	void (*row_clicked) (GtkTreeView *tree_view,
-			     GtkTreePath *path,
-			     GtkTreeViewColumn *column,
-			     gpointer user_data);
 	gpointer user_data;
 };
 
@@ -189,10 +187,6 @@ extern void get_info_part(GtkTable *table, display_data_t *display_data);
 extern void specific_info_part(popup_info_t *popup_win);
 extern void set_menus_part(void *arg, GtkTreePath *path, 
 			   GtkMenu *menu, int type);
-extern void row_clicked_part(GtkTreeView *tree_view,
-			     GtkTreePath *path,
-			     GtkTreeViewColumn *column,
-			     gpointer user_data);
 extern void popup_all_part(GtkTreeModel *model, GtkTreeIter *iter, int id);
 
 // block_info.c
@@ -202,10 +196,6 @@ extern void get_info_block(GtkTable *table, display_data_t *display_data);
 extern void specific_info_block(popup_info_t *popup_win);
 extern void set_menus_block(void *arg, GtkTreePath *path, 
 			    GtkMenu *menu, int type);
-extern void row_clicked_block(GtkTreeView *tree_view,
-			      GtkTreePath *path,
-			      GtkTreeViewColumn *column,
-			      gpointer user_data);
 extern void popup_all_block(GtkTreeModel *model, GtkTreeIter *iter, int id);
 
 // job_info.c
@@ -216,21 +206,12 @@ extern void get_info_job(GtkTable *table, display_data_t *display_data);
 extern void specific_info_job(popup_info_t *popup_win);
 extern void set_menus_job(void *arg, GtkTreePath *path, 
 			  GtkMenu *menu, int type);
-extern void row_clicked_job(GtkTreeView *tree_view,
-			    GtkTreePath *path,
-			    GtkTreeViewColumn *column,
-			    gpointer user_data);
 extern void popup_all_job(GtkTreeModel *model, GtkTreeIter *iter, int id);
 
 // admin_info.c
 extern void get_info_admin(GtkTable *table, display_data_t *display_data);
 extern void set_menus_admin(void *arg, GtkTreePath *path, 
 			    GtkMenu *menu, int type);
-extern void row_clicked_admin(GtkTreeView *tree_view,
-			      GtkTreePath *path,
-			      GtkTreeViewColumn *column,
-			      gpointer user_data);
-
 // node_info.c
 extern void refresh_node(GtkAction *action, gpointer user_data);
 extern int get_new_info_node(node_info_msg_t **info_ptr);
@@ -238,21 +219,12 @@ extern void get_info_node(GtkTable *table, display_data_t *display_data);
 extern void specific_info_node(popup_info_t *popup_win);
 extern void set_menus_node(void *arg, GtkTreePath *path, 
 			   GtkMenu *menu, int type);
-extern void row_clicked_node(GtkTreeView *tree_view,
-			     GtkTreePath *path,
-			     GtkTreeViewColumn *column,
-			     gpointer user_data);
 extern void popup_all_node(GtkTreeModel *model, GtkTreeIter *iter, int id);
 
 // submit_info.c
 extern void get_info_submit(GtkTable *table, display_data_t *display_data);
 extern void set_menus_submit(void *arg, GtkTreePath *path, 
 			     GtkMenu *menu, int type);
-extern void row_clicked_submit(GtkTreeView *tree_view,
-			       GtkTreePath *path,
-			       GtkTreeViewColumn *column,
-			       gpointer user_data);
-
 // common.c
 extern void snprint_time(char *buf, size_t buf_size, time_t time);
 extern int get_row_number(GtkTreeView *tree_view, GtkTreePath *path);