diff --git a/src/sview/job_info.c b/src/sview/job_info.c
index 370c40d275cc40bc8b2f05936b1f4f51059d96e7..f1a408bb662165ac61303a43a1d613c4a251916a 100644
--- a/src/sview/job_info.c
+++ b/src/sview/job_info.c
@@ -233,6 +233,7 @@ static void _layout_job_record(GtkTreeView *treeview,
 	GtkTreeIter iter;
 	GtkTreeStore *treestore = 
 		GTK_TREE_STORE(gtk_tree_view_get_model(treeview));
+
 	if(!treestore)
 		return;
 	if(!job_ptr->nodes || !strcasecmp(job_ptr->nodes,"waiting...")) {
@@ -619,13 +620,13 @@ static void _update_info_step(job_step_info_response_msg_t *step_info_ptr,
 			}
 		}
 		memcpy(step_iter, &first_step_iter, sizeof(GtkTreeIter));
+		set = 1;
 	}
 	for (i = 0; i < step_info_ptr->job_step_count; i++) {
 		step = step_info_ptr->job_steps[i];
 		if(step.job_id != jobid)
 			continue;
-		/* get the iter, or find out the list is 
-		   empty goto add */
+		/* get the iter, or find out the list is empty goto add */
 		if (!step_iter) {
 			goto adding;
 		} else {
@@ -662,6 +663,7 @@ static void _update_info_step(job_step_info_response_msg_t *step_info_ptr,
 		while(1) {
 			gtk_tree_model_get(model, step_iter, 
 					   SORTID_UPDATED, &i, -1);
+			g_print("updated is %d\n", i);
 			if(!i) {
 				if(!gtk_tree_store_remove(
 					   GTK_TREE_STORE(model), 
@@ -883,6 +885,13 @@ need_refresh:
 						   GTK_TREE_STORE(model), 
 						   &iter,
 						   temp, "");
+			if(job_step->stepid != NO_VAL) 
+				add_display_treestore_line(
+					1, 
+					GTK_TREE_STORE(model), 
+					&iter,
+					display_data_job[SORTID_STATE].name,
+					job_state_string(JOB_COMPLETE));
 		}
 		popup_win->not_found = true;
 	} else {
@@ -891,8 +900,7 @@ need_refresh:
 			gtk_widget_destroy(spec_info->display_widget);
 			
 			goto need_refresh;
-		}
-		
+		}		
 	}
 	gtk_widget_show(spec_info->display_widget);
 
@@ -1667,14 +1675,11 @@ extern void popup_all_job(GtkTreeModel *model, GtkTreeIter *iter, int id)
 	list_iterator_destroy(itr);
 	
 	if(!popup_win) {
-		g_print("need popup for %s\n", title);
 		if(id == INFO_PAGE)
 			popup_win = create_popup_info(id, JOB_PAGE, title);
 		else
 			popup_win = create_popup_info(JOB_PAGE, id, title);
-	} else
-		g_print("got popup for %s\n", title);
-		
+	}		
 	
 	switch(id) {
 	case NODE_PAGE:
diff --git a/src/sview/node_info.c b/src/sview/node_info.c
index 463e21c7bb14db7b7e7314db1dae1a53b4506805..cc48ec697b0a6e3ca15941970ccafa80a5706b26 100644
--- a/src/sview/node_info.c
+++ b/src/sview/node_info.c
@@ -74,6 +74,7 @@ static display_data_t display_data_node[] = {
 
 static display_data_t options_data_node[] = {
 	{G_TYPE_INT, SORTID_POS, NULL, FALSE, -1},
+	{G_TYPE_STRING, INFO_PAGE, "Full Info", TRUE, NODE_PAGE},
 	{G_TYPE_STRING, JOB_PAGE, "Jobs", TRUE, NODE_PAGE},
 #ifdef HAVE_BG
 	{G_TYPE_STRING, BLOCK_PAGE, "Blocks", TRUE, NODE_PAGE},
@@ -85,6 +86,56 @@ static display_data_t options_data_node[] = {
 
 static display_data_t *local_display_data = NULL;
 
+static void _layout_node_record(GtkTreeView *treeview,
+				node_info_t *node_ptr,
+				int update)
+{
+	char tmp_cnt[50];
+	char *upper = NULL, *lower = NULL;		     
+	GtkTreeIter iter;
+	GtkTreeStore *treestore = 
+		GTK_TREE_STORE(gtk_tree_view_get_model(treeview));
+	if(!treestore)
+		return;
+	
+	add_display_treestore_line(update, treestore, &iter,
+				   display_data_node[SORTID_NAME].name,
+				   node_ptr->name);
+				   
+	upper = node_state_string(node_ptr->node_state);
+	lower = str_tolower(upper);
+	add_display_treestore_line(update, treestore, &iter,
+				   display_data_node[SORTID_STATE].name,
+				   lower);
+	xfree(lower);
+	
+	convert_num_unit((float)node_ptr->cpus, tmp_cnt, UNIT_MEGA);
+	add_display_treestore_line(update, treestore, &iter, 
+				   display_data_node[SORTID_CPUS].name,
+				   tmp_cnt);
+
+	convert_num_unit((float)node_ptr->real_memory, tmp_cnt, UNIT_MEGA);
+	add_display_treestore_line(update, treestore, &iter, 
+				   display_data_node[SORTID_MEMORY].name,
+				   tmp_cnt);
+
+	convert_num_unit((float)node_ptr->tmp_disk, tmp_cnt, UNIT_MEGA);
+	add_display_treestore_line(update, treestore, &iter, 
+				   display_data_node[SORTID_DISK].name,
+				   tmp_cnt);
+	snprintf(tmp_cnt, sizeof(tmp_cnt), "%u", node_ptr->weight);
+	add_display_treestore_line(update, treestore, &iter,
+				   display_data_node[SORTID_WEIGHT].name, 
+				   tmp_cnt);
+	add_display_treestore_line(update, treestore, &iter, 
+				   display_data_node[SORTID_FEATURES].name, 
+				   node_ptr->features);
+	add_display_treestore_line(update, treestore, &iter,
+				   display_data_node[SORTID_REASON].name, 
+				   node_ptr->reason);
+	return;
+}
+
 static void _update_node_record(node_info_t *node_ptr,
 				GtkTreeStore *treestore, GtkTreeIter *iter)
 {
@@ -223,50 +274,58 @@ void _display_info_node(node_info_msg_t *node_info_ptr,
 	char *name = (char *)spec_info->data;
 	int i, found = 0;
 	node_info_t node;
-	char *info = NULL;
-	char *not_found = NULL;
-	GtkWidget *label = NULL;
+	GtkTreeView *treeview = NULL;
+	int update = 0;
 	
 	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;
+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;
 	}
+	
 	for (i = 0; i < node_info_ptr->record_count; i++) {
 		node = node_info_ptr->node_array[i];
 		if (!node.name || (node.name[0] == '\0'))
 			continue;	/* bad node */
 		if(!strcmp(node.name, name)) {
-			if(!(info = slurm_sprint_node_table(&node, 0))) {
-				info = xmalloc(100);
-				sprintf(info, 
-					"Problem getting node info for %s",
-					node.name);
-			}
+			_layout_node_record(treeview, &node, update);
 			found = 1;
 			break;
 		}		
 	}
 	if(!found) {
-		char *temp = "NODE NOT FOUND\n";
-		if(!not_found || strncmp(temp, not_found, strlen(temp))) 
-			info = xstrdup(temp);
-		xstrcat(info, not_found);
+		if(!popup_win->not_found) { 
+			char *temp = "NODE NOT FOUND\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;
+		}	
 	}
+	gtk_widget_show(spec_info->display_widget);
+
 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;
 }
 
@@ -641,8 +700,12 @@ extern void popup_all_node(GtkTreeModel *model, GtkTreeIter *iter, int id)
 	}
 	list_iterator_destroy(itr);
 	
-	if(!popup_win) 
-		popup_win = create_popup_info(NODE_PAGE, id, title);
+	if(!popup_win) {
+		if(id == INFO_PAGE)
+			popup_win = create_popup_info(id, NODE_PAGE, title);
+		else
+			popup_win = create_popup_info(NODE_PAGE, id, title);
+	}
 	popup_win->spec_info->data = name;
 	
 	if (!g_thread_create((gpointer)popup_thr, popup_win, FALSE, &error))
diff --git a/src/sview/part_info.c b/src/sview/part_info.c
index 48195453bad14379db5abd9ba4075fe003e81858..5240446b90422cc28ff81c632bcf4ee02e5b2d10 100644
--- a/src/sview/part_info.c
+++ b/src/sview/part_info.c
@@ -221,8 +221,7 @@ static void _subdivide_part(sview_part_info_t *sview_part_info,
 				goto adding;
 			} else {
 				memcpy(sub_iter, &first_sub_iter, 
-				       sizeof(GtkTreeIter));
-			
+				       sizeof(GtkTreeIter));		
 			}
 			
 			while(1) {
@@ -1652,6 +1651,8 @@ extern void popup_all_part(GtkTreeModel *model, GtkTreeIter *iter, int id)
 	}
 	switch(id) {
 	case JOB_PAGE:
+	case BLOCK_PAGE: 
+	case INFO_PAGE:
 		popup_win->spec_info->data = name;
 		//specific_info_job(popup_win);
 		break;
@@ -1661,16 +1662,10 @@ extern void popup_all_part(GtkTreeModel *model, GtkTreeIter *iter, int id)
 		popup_win->spec_info->data = name;
 		//specific_info_node(popup_win);
 		break;
-	case BLOCK_PAGE: 
-		popup_win->spec_info->data = name;
-		break;
 	case SUBMIT_PAGE: 
 		break;
-	case INFO_PAGE:
-		popup_win->spec_info->data = name;
-		break;
 	default:
-		g_print("part got %d\n", id);
+		g_print("part got unknown type %d\n", id);
 	}
 	if (!g_thread_create((gpointer)popup_thr, popup_win, FALSE, &error))
 	{