diff --git a/exec/lbshell.js b/exec/lbshell.js
index efc79075f7adaded67f51ca02e16b8c6a3e303e1..4e3ef2332169e2d2d39395b357ff4f5874f82886 100644
--- a/exec/lbshell.js
+++ b/exec/lbshell.js
@@ -215,9 +215,10 @@ mainbar.add("|Info","I");
 	infomenu.add("\xc0\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xd9",undefined,undefined,"","");
 mainbar.add("|Goodbye","G");
 
+draw_main(true);
 while(1) {
 	var done=0;
-	draw_main();
+	draw_main(false);
 	switch(mainbar.getval()) {
 		case 'F':
 			done=0;
@@ -230,7 +231,7 @@ while(1) {
 						console.attributes=7;
 						clear_screen();
 						bbs.batch_menu();
-						draw_main();
+						draw_main(true);
 						break;
 					case 'D':
 						download: do {
@@ -277,7 +278,7 @@ while(1) {
 								}
 							}
 						} while(0);
-						draw_main();
+						draw_main(true);
 						break;
 					case 'I':
 						var info_done=0;
@@ -321,7 +322,7 @@ while(1) {
 								console.cleartoeol();
 							}
 							else {
-								draw_main();
+								draw_main(true);
 								filemenu.draw();
 							}
 						}
@@ -357,19 +358,19 @@ while(1) {
 								}
 							}
 						}
-						draw_main();
+						draw_main(true);
 						break;
 					case 'S':
 						clear_screen();
 						console.putmsg("\r\nchFind Text in File Descriptions (no wildcards)\r\n");
 						bbs.scan_dirs(FL_FINDDESC);
-						draw_main();
+						draw_main(true);
 						break;
 					case 'F':
 						clear_screen();
 						console.putmsg("\r\nchSearch for Filename(s)\r\n");
 						bbs.scan_dirs(FL_NO_HDR);
-						draw_main();
+						draw_main(true);
 						break;
 					case 'C':
 						clear_screen();
@@ -442,7 +443,7 @@ while(1) {
 								break changedir;
 							}
 						} while(0);
-						draw_main();
+						draw_main(true);
 						break;
 					case 'L':
 						clear_screen();
@@ -453,13 +454,13 @@ while(1) {
 							else
 								console.putmsg(bbs.text(NFilesListed,i),P_SAVEATR);
 						}
-						draw_main();
+						draw_main(true);
 						break;
 					case 'N':
 						clear_screen();
 						console.putmsg("\r\nchNew File Scan\r\n");
 						bbs.scan_dirs(FL_ULTIME);
-						draw_main();
+						draw_main(true);
 						break;
 					case 'R':
 						clear_screen();
@@ -494,7 +495,7 @@ while(1) {
 								}
 							}
 						} while(0);
-						draw_main();
+						draw_main(true);
 						break;
 					case 'U':
 						clear_screen();
@@ -512,7 +513,7 @@ while(1) {
 								i=file_area.upload_dir.number;
 						}
 						bbs.upload_file(i);
-						draw_main();
+						draw_main(true);
 						break;
 					case 'V':
 						clear_screen();
@@ -543,7 +544,7 @@ while(1) {
 								}
 							}
 						} while(0);
-						draw_main();
+						draw_main(true);
 						break;
 				}
 			}
@@ -555,22 +556,22 @@ while(1) {
 					case 'U':
 						clear_screen();
 						bbs.user_config();
-						draw_main();
+						draw_main(true);
 						break;
 					case 'M':
 						clear_screen();
 						bbs.cfg_msg_scan(SCAN_CFG_NEW);
-						draw_main();
+						draw_main(true);
 						break;
 					case 'Y':
 						clear_screen();
 						bbs.cfg_msg_scan(SCAN_CFG_TOYOU);
-						draw_main();
+						draw_main(true);
 						break;
 					case 'P':
 						clear_screen();
 						bbs.cfg_msg_ptrs();
-						draw_main();
+						draw_main(true);
 						break;
 					case 'F':
 						var xfercfgdone=0;
@@ -579,7 +580,7 @@ while(1) {
 								case 'S':
 									clear_screen();
 									bbs.get_newscantime(bbs.new_file_time);
-									draw_main();
+									draw_main(true);
 									settingsmenu.draw();
 									break;
 								case 'B':
@@ -592,7 +593,7 @@ while(1) {
 									xfercfgdone=1;
 							}
 						}
-						draw_main();
+						draw_main(false);
 						break;
 					case 'R':
 						bbs.reinit_msg_ptrs();
@@ -608,7 +609,7 @@ while(1) {
 					case 'B':
 						clear_screen();
 						bbs.time_bank();
-						draw_main();
+						draw_main(true);
 						break;
 					case '-':
 						done=1;
@@ -635,7 +636,7 @@ while(1) {
 							if(i>0)
 								bbs.email(i,WM_EMAIL);
 						}
-						draw_main();
+						draw_main(true);
 						break;
 					case 'N':
 						clear_screen();
@@ -647,22 +648,22 @@ while(1) {
 						str=console.getstr("",60,K_LINE);
 						if(str!=null && str !="")
 							bbs.netmail(str,i);
-						draw_main();
+						draw_main(true);
 						break;
 					case 'F':
 						clear_screen();
 						bbs.email(1,WM_EMAIL,bbs.text(ReFeedback));
-						draw_main();
+						draw_main(true);
 						break;
 					case 'R':
 						clear_screen();
 						bbs.read_mail(MAIL_YOUR);;
-						draw_main();
+						draw_main(true);
 						break;
 					case 'Y':
 						clear_screen();
 						bbs.read_mail(MAIL_SENT);;
-						draw_main();
+						draw_main(true);
 						break;
 					case 'U':
 						clear_screen();
@@ -679,7 +680,7 @@ while(1) {
 							if(i>0)
 								bbs.email(i,WM_EMAIL|WM_FILE);
 						}
-						draw_main();
+						draw_main(true);
 						break;
 					case '-':
 						done=1;
@@ -695,51 +696,51 @@ while(1) {
 						clear_screen();
 						console.putmsg("\r\n\x01c\x01hNew Message Scan\r\n");
 						bbs.scan_subs(SCAN_NEW);
-						draw_main();
+						draw_main(true);
 						break;
 					case 'R':
 						clear_screen();
 						bbs.scan_posts();
-						draw_main();
+						draw_main(true);
 						break;
 					case 'C':
 						clear_screen();
 						console.putmsg("\r\n\x01c\x01hContinuous New Message Scan\r\n");
 						bbs.scan_subs(SCAN_NEW|SCAN_CONST);
-						draw_main();
+						draw_main(true);
 						break;
 					case 'B':
 						clear_screen();
 						console.putmsg("\r\n\x01c\x01hBrowse/New Message Scan\r\n");
 						bbs.scan_subs(SCAN_NEW|SCAN_BACK);
-						draw_main();
+						draw_main(true);
 						break;
 					case 'Q':
 						clear_screen();
 						bbs.qwk_sec();
-						draw_main();
+						draw_main(true);
 						break;
 					case 'P':
 						clear_screen();
 						bbs.post_msg();
-						draw_main();
+						draw_main(true);
 						break;
 					case 'A':
 						clear_screen();
 						bbs.auto_msg();
-						draw_main();
+						draw_main(true);
 						break;
 					case 'F':
 						clear_screen();
 						console.putmsg("\r\n\x01c\x01hFind Text in Messages\r\n");
 						bbs.scan_subs(SCAN_FIND);
-						draw_main();
+						draw_main(true);
 						break;
 					case 'S':
 						clear_screen();
 						console.putmsg("\r\n\x01c\x01hScan for Messages Posted to You\r\n");
 						bbs.scan_subs(SCAN_TOYOU);
-						draw_main();
+						draw_main(true);
 						break;
 					case 'J':
 						clear_screen();
@@ -816,7 +817,7 @@ while(1) {
 							bbs.cursub=i;
 							break;
 						}
-						draw_main();
+						draw_main(true);
 						break;
 					case '-':
 						done=1;
@@ -831,28 +832,28 @@ while(1) {
 					case 'J':
 						clear_screen();
 						bbs.multinode_chat();
-						draw_main();
+						draw_main(true);
 						break;
 					case 'P':
 						clear_screen();
 						bbs.private_chat();
-						draw_main();
+						draw_main(true);
 						break;
 					case 'C':
 						clear_screen();
 						if(!bbs.page_sysop())
 							bbs.page_guru();
-						draw_main();
+						draw_main(true);
 						break;
 					case 'T':
 						clear_screen();
 						bbs.page_guru();
-						draw_main();
+						draw_main(true);
 						break;
 					case 'F':
 						clear_screen();
 						bbs.exec("?finger");
-						draw_main();
+						draw_main(true);
 						break;
 					case 'R':
 						clear_screen();
@@ -861,12 +862,12 @@ while(1) {
 						str=console.getstr(str, 50, K_EDIT|K_LINE|K_AUTODEL);
 						if(!console.aborted)
 							bbs.exec("?irc -a "+str);
-						draw_main();
+						draw_main(true);
 						break;
 					case 'I':
 						clear_screen();
 						bbs.exec("?sbbsimsg");
-						draw_main();
+						draw_main(true);
 						break;
 					case 'S':
 						user.chat_settings ^= CHAT_SPLITP;
@@ -892,12 +893,12 @@ while(1) {
 						break;
 					clear_screen();
 					bbs.exec_xtrn(xtrn_area.sec_list[curr_xtrnsec].prog_list[parseInt(x_prog)].number);
-					draw_main();
+					draw_main(true);
 					xtrnsec.draw();
 				}
-				draw_main();
+				draw_main(false);
 			}
-			draw_main();
+			draw_main(false);
 			break;
 		case 'I':
 			infoloop: while(1) {
@@ -905,22 +906,22 @@ while(1) {
 					case 'I':
 						clear_screen();
 						bbs.sys_info();
-						draw_main();
+						draw_main(true);
 						break;
 					case 'V':
 						clear_screen();
 						bbs.ver();
-						draw_main();
+						draw_main(true);
 						break;
 					case 'S':
 						clear_screen();
 						bbs.sub_info();
-						draw_main();
+						draw_main(true);
 						break;
 					case 'Y':
 						clear_screen();
 						bbs.user_info();
-						draw_main();
+						draw_main(true);
 						break;
 					case 'U':
 						userlistloop: while(1) {
@@ -928,41 +929,41 @@ while(1) {
 								case '-':
 									clear_screen();
 									break userlistloop;
-									draw_main();
+									draw_main(true);
 									infomenu.draw();
 									break;
 								case 'L':
 									clear_screen();
 									bbs.list_logons();
-									draw_main();
+									draw_main(true);
 									infomenu.draw();
 									break;
 								case 'S':
 									clear_screen();
 									bbs.list_users(UL_SUB);
-									draw_main();
+									draw_main(true);
 									infomenu.draw();
 									break;
 								case 'A':
 									clear_screen();
 									bbs.list_users(UL_ALL);
-									draw_main();
+									draw_main(true);
 									infomenu.draw();
 									break;
 							}
 						}
-						draw_main();
+						draw_main(false);
 						break;
 					case 'T':
 						clear_screen();
 						bbs.text_sec();
-						draw_main();
+						draw_main(true);
 						break;
 					case '-':
 						break infoloop;
 				}
 			}
-			draw_main();
+			draw_main(false);
 			break;
 		case 'G':
 			exit(1);
@@ -1010,16 +1011,31 @@ function clear_screen()
 	console.clear();
 }
 
-function draw_main()
+function draw_main(topline)
 {
 	/*
 	 * Called to re-display the main menu.
+	 * topline is false when the top line doesn't need redrawing.
+	 */
+	console.attributes=7;
+	if(topline) {
+		console.clear();
+		console.attributes=0x17;
+		console.clearline();
+		mainbar.draw();
+	}
+	else {
+		console.gotoxy(1,1);
+		var i;
+		for(i=1;i<console.screen_rows;i++) {
+			console.line_counter=0;
+			console.write("\n");
+			console.cleartoeol();
+		}
+		console.gotoxy(1,1);
+	}
+	/*
 	 * If you want a background ANSI or something for the menus,
 	 * this is the place to draw it from.
 	 */
-	console.attributes=7;
-	console.clear();
-	console.attributes=0x17;
-	console.clearline();
-	mainbar.draw();
 }