diff --git a/src/smap/configure_functions.c b/src/smap/configure_functions.c
index 88c5f1a803206189aec36924b240e28b00d6b2cd..002221696caa0b4e451de614adb6caee363fdaf6 100644
--- a/src/smap/configure_functions.c
+++ b/src/smap/configure_functions.c
@@ -861,6 +861,6 @@ void get_command(void)
 	pa_system_ptr->xcord = 1;
 	pa_system_ptr->ycord = 1;
 	print_date();
-	get_job();
+	get_job(0);
 	return;
 }
diff --git a/src/smap/job_functions.c b/src/smap/job_functions.c
index c6f997450156e8b60eb85d20c97bea517a8edc04..9a5087c02725e94173a7e212a84a34e714faa89b 100644
--- a/src/smap/job_functions.c
+++ b/src/smap/job_functions.c
@@ -32,10 +32,11 @@
 static void _print_header_job(void);
 static int  _print_text_job(job_info_t * job_ptr);
 
-extern void get_job(void)
+extern void get_job()
 {
-	int error_code = -1, i, j, recs, count = 0;
-
+	int error_code = -1, i, j, recs;
+	static int printed_jobs = 0;
+	static int count = 0;
 	static job_info_msg_t *job_info_ptr = NULL, *new_job_ptr = NULL;
 	job_info_t job;
 
@@ -69,6 +70,11 @@ extern void get_job(void)
 	else
 		recs = 0;
 	
+	if(!params.commandline)
+		if((text_line_cnt+printed_jobs) > count) 
+			text_line_cnt--;
+	printed_jobs = 0;
+	count = 0;
 	for (i = 0; i < recs; i++) {
 		job = new_job_ptr->job_array[i];
 		
@@ -87,31 +93,62 @@ extern void get_job(void)
 					 job.node_inx[j + 1], count);
 				j += 2;
 			}
-			job.num_procs = (int) letters[count%62];
-			wattron(pa_system_ptr->text_win,
-				COLOR_PAIR(colors[count%6]));
-			_print_text_job(&job);
-			wattroff(pa_system_ptr->text_win,
-				 COLOR_PAIR(colors[count%6]));
+			
+			if(!params.commandline) {
+				if((count>=text_line_cnt)
+				   && (printed_jobs 
+				       < (pa_system_ptr->text_win->_maxy-3))) {
+					job.num_procs = (int)letters[count%62];
+					wattron(pa_system_ptr->text_win,
+						COLOR_PAIR(colors[count%6]));
+					_print_text_job(&job);
+					wattroff(pa_system_ptr->text_win,
+						 COLOR_PAIR(colors[count%6]));
+					printed_jobs++;
+				} 
+			} else {
+				job.num_procs = (int)letters[count%62];
+				wattron(pa_system_ptr->text_win,
+					COLOR_PAIR(colors[count%6]));
+				_print_text_job(&job);
+				wattroff(pa_system_ptr->text_win,
+					 COLOR_PAIR(colors[count%6]));
+			}
 			count++;			
 		}
 		if(count==128)
 			count=0;
 	}
-	
+		
 	for (i = 0; i < recs; i++) {
 		job = new_job_ptr->job_array[i];
 		
 		if (job.job_state != JOB_PENDING)
 			continue;	/* job has completed */
-		
-		job.nodes = "waiting...";
-		job.num_procs = (int) letters[count%62];
-		wattron(pa_system_ptr->text_win,
-			COLOR_PAIR(colors[count%6]));
-		_print_text_job(&job);
-		wattroff(pa_system_ptr->text_win,
-			 COLOR_PAIR(colors[count%6]));
+
+		if(!params.commandline) {
+			if((count>=text_line_cnt)
+			   && (printed_jobs 
+			       < (pa_system_ptr->text_win->_maxy-3))) {
+				job.nodes = "waiting...";
+				job.num_procs = (int) letters[count%62];
+				wattron(pa_system_ptr->text_win,
+					COLOR_PAIR(colors[count%6]));
+				_print_text_job(&job);
+				wattroff(pa_system_ptr->text_win,
+					 COLOR_PAIR(colors[count%6]));
+				printed_jobs++;
+			} 
+		} else {
+			job.nodes = "waiting...";
+			job.num_procs = (int) letters[count%62];
+			wattron(pa_system_ptr->text_win,
+				COLOR_PAIR(colors[count%6]));
+			_print_text_job(&job);
+			wattroff(pa_system_ptr->text_win,
+				 COLOR_PAIR(colors[count%6]));
+			printed_jobs++;
+		}
 		count++;			
 		
 		if(count==128)
@@ -121,6 +158,8 @@ extern void get_job(void)
 	if (params.commandline && params.iterate)
 		printf("\n");
 
+	pa_system_ptr->ycord++;
+	
 	job_info_ptr = new_job_ptr;
 	return;
 }
diff --git a/src/smap/opts.c b/src/smap/opts.c
index 901d51156341754b3c0a93c56a3b1ba794735949..94beea99be51baea334e1fa6d2ae77414a02332c 100644
--- a/src/smap/opts.c
+++ b/src/smap/opts.c
@@ -34,7 +34,7 @@ static void _usage(void);
 /*
  * parse_command_line, fill in params data structure with data
  */
-void parse_command_line(int argc, char *argv[])
+extern void parse_command_line(int argc, char *argv[])
 {
 	int opt_char;
 	int option_index;
@@ -111,7 +111,7 @@ void parse_command_line(int argc, char *argv[])
 
 }
 
-void snprint_time(char *buf, size_t buf_size, time_t time)
+extern void snprint_time(char *buf, size_t buf_size, time_t time)
 {
 	if (time == INFINITE) {
 		snprintf(buf, buf_size, "UNLIMITED");
@@ -136,7 +136,7 @@ void snprint_time(char *buf, size_t buf_size, time_t time)
 	}
 }
 
-void print_date()
+extern void print_date()
 {
 	pa_system_ptr->now_time = time(NULL);
 
@@ -150,7 +150,7 @@ void print_date()
 	}
 }
 
-void clear_window(WINDOW *win)
+extern void clear_window(WINDOW *win)
 {
 	int x,y;
 	for(x=0; x<=win->_maxx; x++)
diff --git a/src/smap/partition_functions.c b/src/smap/partition_functions.c
index c11a53b59c8a5422555d5597620fa3e410fd0587..8af0c6ee33642aa8178db041760ad9acd7d4858b 100644
--- a/src/smap/partition_functions.c
+++ b/src/smap/partition_functions.c
@@ -68,7 +68,7 @@ static int _in_slurm_partition(db2_block_info_t *db2_info_ptr,
 static int _print_rest(db2_block_info_t *block_ptr, int *count);
 #endif
 
-void get_slurm_part(void)
+extern void get_slurm_part()
 {
 	int error_code, i, j, recs, count = 0;
 	static partition_info_msg_t *part_info_ptr = NULL;
@@ -98,19 +98,22 @@ void get_slurm_part(void)
 				pa_system_ptr->ycord++;
 			} else {
 				printf("slurm_load_partitions: %s",
-					  slurm_strerror(slurm_get_errno()));
+				       slurm_strerror(slurm_get_errno()));
 			}
 		}
 		return;
 	}
-
+	
 	if (!params.no_header)
 		_print_header_part();
-
+	
 	if (new_part_ptr)
 		recs = new_part_ptr->record_count;
 	else
 		recs = 0;
+	if (!params.commandline)
+		if((recs - text_line_cnt) < (pa_system_ptr->text_win->_maxy-3))
+			text_line_cnt--;
 
 	for (i = 0; i < recs; i++) {
 		j = 0;
@@ -125,13 +128,15 @@ void get_slurm_part(void)
 				 part.node_inx[j + 1], count);
 			j += 2;
 		}
-		part.root_only =
-			(int) letters[count%62];
-		wattron(pa_system_ptr->text_win,
-			COLOR_PAIR(colors[count%6]));
-		_print_text_part(&part, NULL);
-		wattroff(pa_system_ptr->text_win,
-			 COLOR_PAIR(colors[count%6]));
+		if(i>=text_line_cnt) {
+			part.root_only =
+				(int) letters[count%62];
+			wattron(pa_system_ptr->text_win,
+				COLOR_PAIR(colors[count%6]));
+			_print_text_part(&part, NULL);
+			wattroff(pa_system_ptr->text_win,
+				 COLOR_PAIR(colors[count%6]));
+		}
 		count++;
 			
 	}
@@ -144,7 +149,7 @@ void get_slurm_part(void)
 	return;
 }
 
-void get_bgl_part(void)
+extern void get_bgl_part()
 {
 #ifdef HAVE_BGL
 	int error_code, i, j, recs=0, count = 0;
@@ -225,6 +230,11 @@ void get_bgl_part(void)
 			return;
 		}
 	}
+	if (!params.commandline)
+		if((new_bgl_ptr->record_count - text_line_cnt) 
+		   < (pa_system_ptr->text_win->_maxy-3))
+			text_line_cnt--;
+	
 	for (i=0; i<new_bgl_ptr->record_count; i++) {
 		block_ptr = xmalloc(sizeof(db2_block_info_t));
 		list_append(block_list, block_ptr);
@@ -251,6 +261,7 @@ void get_bgl_part(void)
 		recs = new_part_ptr->record_count;
 	else
 		recs = 0;
+
 	for (i = 0; i < recs; i++) {
 		j = 0;
 		part = new_part_ptr->partition_array[i];
@@ -282,23 +293,36 @@ void get_bgl_part(void)
 			itr = list_iterator_create(block_list);
 			while ((block_ptr = (db2_block_info_t*) 
 				list_next(itr)) != NULL) {
-				if(_in_slurm_partition(block_ptr, start, end))
+				if(_in_slurm_partition(block_ptr, 
+						       start, 
+						       end)) {
 					block_ptr->slurm_part_name 
 						= xstrdup(part.name);
+				}
 			}
 			list_iterator_destroy(itr);
 		}
 	}
 
-	/* Report any BGL Blocks not in a SLURM partition */
+	/* Report the BGL Blocks */
 	if (block_list) {
 		itr = list_iterator_create(block_list);
 		while ((block_ptr = (db2_block_info_t*) 
-			list_next(itr)) != NULL)
+			list_next(itr)) != NULL) {
+			if (params.commandline)
+				block_ptr->printed = 1;
+			else
+				if(count>=text_line_cnt)
+					block_ptr->printed = 1;
+				
 			_print_rest(block_ptr, &count);
+			
+		}
+		
 		list_iterator_destroy(itr);
 	}
 
+	
 	if (params.commandline && params.iterate)
 		printf("\n");
 
@@ -699,13 +723,10 @@ static int _in_slurm_partition(db2_block_info_t *db2_info_ptr,
 
 static int _print_rest(db2_block_info_t *block_ptr, int *count)
 {
-	//static rm_BGL_t *bgl = NULL;
 	partition_info_t part;
 	db2_block_info_t *db2_info_ptr = NULL;
 	ListIterator itr;
 	int set = 0;
-	if (block_ptr->printed)
-		return SLURM_SUCCESS;
 		
 	part.total_nodes = 0;
 	
@@ -763,14 +784,16 @@ static int _print_rest(db2_block_info_t *block_ptr, int *count)
 	else
 		part.name = "no part";
 
+	if (!block_ptr->printed)
+		return SLURM_SUCCESS;
 	part.allow_groups = block_ptr->nodes;
-	part.root_only = (int) letters[block_ptr->letter_num%62];	
-	
+	part.root_only = (int) letters[block_ptr->letter_num%62];
 	wattron(pa_system_ptr->text_win, 
 		COLOR_PAIR(colors[block_ptr->letter_num%6]));
 	_print_text_part(&part, block_ptr);
 	wattroff(pa_system_ptr->text_win,
 		 COLOR_PAIR(colors[block_ptr->letter_num%6]));
+	
 	return SLURM_SUCCESS;
 }
 #endif
diff --git a/src/smap/smap.c b/src/smap/smap.c
index 0adea108cdf855c409365a418e005d97a7433fd9..51601b34c2cd7b3b96b7a345363579425cac6f68 100644
--- a/src/smap/smap.c
+++ b/src/smap/smap.c
@@ -32,15 +32,20 @@
 #include <signal.h>
 #include "src/smap/smap.h"
 
+#ifdef HAVE_BGL
 #define MIN_SCREEN_WIDTH 92
-
+#else
+#define MIN_SCREEN_WIDTH 72
+#endif
 /********************
  * Global Variables *
  ********************/
+int text_line_cnt = 0;
+
 smap_parameters_t params;
 
 int quiet_flag = 0;
-int line_cnt = 0;
+int grid_line_cnt = 0;
 int max_display;
 		
 /************
@@ -50,9 +55,6 @@ int max_display;
 static int _get_option();
 static void *_resize_handler(int sig);
 static int _set_pairs();
-#ifndef HAVE_BGL
-static int _scroll_grid(int dir);
-#endif /* HAVE_BGL */
 
 int main(int argc, char *argv[])
 {
@@ -201,7 +203,6 @@ part_fini:
 			_get_option();
 		redraw:
 			
-			line_cnt = 0;
 			clear_window(pa_system_ptr->text_win);
 			clear_window(pa_system_ptr->grid_win);
 			doupdate();
@@ -247,7 +248,8 @@ part_fini:
 			box(pa_system_ptr->text_win, 0, 0);
 			wnoutrefresh(pa_system_ptr->text_win);
 			
-			print_grid(0);
+			print_grid(grid_line_cnt*
+				     (pa_system_ptr->grid_win->_maxx-1));
 			box(pa_system_ptr->grid_win, 0, 0);
 			wnoutrefresh(pa_system_ptr->grid_win);
 			
@@ -287,7 +289,7 @@ part_fini:
 				}
 			}
 		}
-	scrolling_grid:
+
 		if (params.iterate) {
 			for (i = 0; i < params.iterate; i++) {
 
@@ -295,8 +297,6 @@ part_fini:
 				if(!params.commandline) {
 					if ((rc = _get_option()) == 1)
 						goto redraw;
-					else if (rc == 2)
-						goto scrolling_grid;
 					else if (pa_system_ptr->
 						 resize_screen) {
 						pa_system_ptr->
@@ -326,16 +326,40 @@ static int _get_option()
 
 	ch = getch();
 	switch (ch) {
+	case KEY_RIGHT:
+	case '-':
+	case '_':
+		text_line_cnt++;		
+		return 1;
+		break;
+	case KEY_LEFT:
+	case '=':
+	case '+':
+		text_line_cnt--;
+		if(text_line_cnt<0) {
+			text_line_cnt = 0;
+			return 0;		
+	
+		}
+		return 1;
+		break;
+		
 	case 's':
+		text_line_cnt = 0;
+		grid_line_cnt = 0;
 		params.display = SLURMPART;
 		return 1;
 		break;
 	case 'j':
+		text_line_cnt = 0;
+		grid_line_cnt = 0;
 		params.display = JOBS;
 		return 1;
 		break;
 #ifdef HAVE_BGL
 	case 'b':
+		text_line_cnt = 0;
+		grid_line_cnt = 0;
 		params.display = BGLPART;
 		return 1;
 		break;
@@ -348,22 +372,23 @@ static int _get_option()
 #ifndef HAVE_BGL
 	case 'u':
 	case KEY_UP:
-		line_cnt--;
-		if(line_cnt<0)
-			line_cnt = 0;
-		_scroll_grid(line_cnt*(pa_system_ptr->grid_win->_maxx-1));
-		return 2;
+		grid_line_cnt--;
+		if(grid_line_cnt<0) {
+			grid_line_cnt = 0;
+			return 0;
+		}
+		return 1;
 		break;
 	case 'd':
 	case KEY_DOWN:
-		if((((line_cnt-1)*(pa_system_ptr->grid_win->_maxx-1)) + 
+		grid_line_cnt++;
+		if((((grid_line_cnt-2)*(pa_system_ptr->grid_win->_maxx-1)) + 
 		    max_display) > DIM_SIZE[X]) {
-			line_cnt--;
-			return 2;
+			grid_line_cnt--;
+			return 0;		
 		}
-		line_cnt++;
-		_scroll_grid(line_cnt*(pa_system_ptr->grid_win->_maxx-1));
-		return 2;
+		
+		return 1;
 		break;
 #endif
 	case 'q':
@@ -446,7 +471,7 @@ static void *_resize_handler(int sig)
 #endif
 	}
 
-	print_grid(0);
+	print_grid(grid_line_cnt*(pa_system_ptr->grid_win->_maxx-1));
 	box(pa_system_ptr->text_win, 0, 0);
 	box(pa_system_ptr->grid_win, 0, 0);
 	wnoutrefresh(pa_system_ptr->text_win);
@@ -482,13 +507,3 @@ static int _set_pairs()
 	}
 	return 1;
 }
-
-#ifndef HAVE_BGL
-static int _scroll_grid(int dir)
-{
-	print_grid(dir);
-	wnoutrefresh(pa_system_ptr->grid_win);
-	doupdate();
-	return 1;
-}
-#endif /* HAVE_BGL */
diff --git a/src/smap/smap.h b/src/smap/smap.h
index d24185c1aefda1b93382cc2f414ac88e0b6d21f5..2aa2879055ae7306a7df78d6a918619990d5883e 100644
--- a/src/smap/smap.h
+++ b/src/smap/smap.h
@@ -100,26 +100,27 @@ typedef struct {
 
 extern smap_parameters_t params;
 extern int DIM_SIZE[PA_SYSTEM_DIMENSIONS];
+extern int text_line_cnt;
 
-void parse_command_line(int argc, char *argv[]);
+extern void parse_command_line(int argc, char *argv[]);
 
 extern pa_system_t *pa_system_ptr;
 extern int quiet_flag;
 
 
-void init_grid(node_info_msg_t *node_info_ptr);
+extern void init_grid(node_info_msg_t *node_info_ptr);
 extern int set_grid(int start, int end, int count);
 extern int set_grid_bgl(int *start, int *end, int count, int set);
 extern void print_grid(int dir);
 
-void parse_command_line(int argc, char *argv[]);
-void snprint_time(char *buf, size_t buf_size, time_t time);
-void print_date();
-void clear_window(WINDOW *win);
+extern void parse_command_line(int argc, char *argv[]);
+extern void snprint_time(char *buf, size_t buf_size, time_t time);
+extern void print_date();
+extern void clear_window(WINDOW *win);
 
-void get_slurm_part();
-void get_bgl_part();
-void get_job();
-void get_command();
+extern void get_slurm_part();
+extern void get_bgl_part();
+extern void get_job();
+extern void get_command();
 
 #endif