diff --git a/src/syncterm/bbslist.c b/src/syncterm/bbslist.c
index c16f2e2f3adb3ceb2d89d4fce89dc0556c09ceb3..982616a2d50eca5bbec67649dcdd81ff4b42e333 100644
--- a/src/syncterm/bbslist.c
+++ b/src/syncterm/bbslist.c
@@ -496,6 +496,7 @@ void change_settings(void)
 	char	*opt[4];
 	int		i,j;
 	char	str[64];
+	int	cur=0;
 
 	get_syncterm_filename(inipath, sizeof(inipath), SYNCTERM_PATH_INI, FALSE);
 	if((inifile=fopen(inipath,"r"))!=NULL) {
@@ -509,13 +510,12 @@ void change_settings(void)
 	for(i=0; i<4; i++)
 		opt[i]=opts[i];
 
-	i=0;
 	opts[3][0]=0;
 	for(;;) {
 		sprintf(opts[0],"Confirm Program Exit:    %s",settings.confirm_close?"Yes":"No");
 		sprintf(opts[1],"Startup Video Mode:      %s",screen_modes[settings.startup_mode]);
 		sprintf(opts[2],"Scrollback Buffer Lines: %d",settings.backlines);
-		switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,NULL,"Program Settings",opt)) {
+		switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&cur,NULL,"Program Settings",opt)) {
 			case -1:
 				goto write_ini;
 			case 0:
@@ -524,8 +524,9 @@ void change_settings(void)
 				break;
 			case 1:
 				j=settings.startup_mode;
-				for(;;) {
-					switch(uifc.list(WIN_SAV,0,0,0,&j,NULL,"Startup Video Mode",screen_modes)) {
+				i=0;
+				for(;i!=-1;) {
+					switch(i=uifc.list(WIN_SAV,0,0,0,&j,NULL,"Startup Video Mode",screen_modes)) {
 						case -1:
 							continue;
 						default:
diff --git a/src/syncterm/menu.c b/src/syncterm/menu.c
index ee34d9a6ee9cb3f01c5ca080994b2a7e8d982353..ff09150940c5b2e11501da87b46dd79c1767848d 100644
--- a/src/syncterm/menu.c
+++ b/src/syncterm/menu.c
@@ -27,8 +27,9 @@ void viewscroll(void)
 	y=wherey();
 	uifcbail();
     gettextinfo(&txtinfo);
-	scrollback=(char *)malloc((term.width*2*settings.backlines)+(txtinfo.screenheight*txtinfo.screenwidth*2));
-	memcpy(scrollback,cterm.scrollback,term.width*2*settings.backlines);
+	scrollback=(char *)malloc((scrollback_buf==NULL?0:(term.width*2*settings.backlines))+(txtinfo.screenheight*txtinfo.screenwidth*2));
+	if(cterm.scrollback != NULL)
+		memcpy(scrollback,cterm.scrollback,term.width*2*settings.backlines);
 	gettext(1,1,txtinfo.screenwidth,txtinfo.screenheight,scrollback+(cterm.backpos)*cterm.width*2);
 	drawwin();
 	top=cterm.backpos;
diff --git a/src/syncterm/syncterm.h b/src/syncterm/syncterm.h
index c556691b4f0675c897edc9f7c67193acc7634011..e4272aa42721f1b4ed035c0be55df9013fc290c9 100644
--- a/src/syncterm/syncterm.h
+++ b/src/syncterm/syncterm.h
@@ -17,6 +17,7 @@ struct syncterm_settings {
 
 extern char *inpath;
 extern char *syncterm_version;
+extern unsigned char *scrollback_buf;
 extern struct syncterm_settings settings;
 void parse_url(char *url, struct bbslist *bbs, int dflt_conn_type, int force_defaults);
 extern int default_font;
diff --git a/src/syncterm/term.c b/src/syncterm/term.c
index 6700c1c1a1ce28c402792d7d497c75181a63fdec..6edb69ad333ce95a8e50d9a81d7d79ec4e6ee45d 100644
--- a/src/syncterm/term.c
+++ b/src/syncterm/term.c
@@ -838,7 +838,6 @@ BOOL doterm(struct bbslist *bbs)
 	unsigned char prn[BUFSIZE];
 	int	key;
 	int i,j,k;
-	unsigned char *scrollback;
 	unsigned char *p;
 	BYTE zrqinit[] = { ZDLE, ZHEX, '0', '0', 0 };	/* for Zmodem auto-downloads */
 	BYTE zrinit[] = { ZDLE, ZHEX, '0', '1', 0 };	/* for Zmodem auto-uploads */
@@ -860,9 +859,9 @@ BOOL doterm(struct bbslist *bbs)
 	ciomouse_addevent(CIOLIB_BUTTON_1_DRAG_END);
 	ciomouse_addevent(CIOLIB_BUTTON_3_CLICK);
 	ciomouse_addevent(CIOLIB_BUTTON_2_CLICK);
-	scrollback=malloc(term.width*2*settings.backlines);
-	memset(scrollback,0,term.width*2*settings.backlines);
-	cterm_init(term.height,term.width,term.x-1,term.y-1,settings.backlines,scrollback);
+	if(scrollback_buf != NULL)
+		memset(scrollback_buf,0,term.width*2*settings.backlines);
+	cterm_init(term.height,term.width,term.x-1,term.y-1,settings.backlines,scrollback_buf);
 	cterm.music_enable=bbs->music;
 	ch[1]=0;
 	zrqbuf[0]=0;
@@ -886,7 +885,6 @@ BOOL doterm(struct bbslist *bbs)
 			switch(inch) {
 				case -1:
 					if(!is_connected(NULL)) {
-						free(scrollback);
 						cterm_end();
 						conn_close();
 						uifcmsg("Disconnected","`Disconnected`\n\nRemote host dropped connection");
@@ -959,7 +957,7 @@ BOOL doterm(struct bbslist *bbs)
 					getmouse(&mevent);
 					switch(mevent.event) {
 						case CIOLIB_BUTTON_1_DRAG_START:
-							mousedrag(scrollback);
+							mousedrag(scrollback_buf);
 							break;
 						case CIOLIB_BUTTON_2_CLICK:
 						case CIOLIB_BUTTON_3_CLICK:
@@ -1098,7 +1096,6 @@ BOOL doterm(struct bbslist *bbs)
 							uifcbail();
 							free(buf);
 							cterm_end();
-							free(scrollback);
 							conn_close();
 							hidemouse();
 							return(key==0x2d00 /* Alt-X? */);
@@ -1131,7 +1128,6 @@ BOOL doterm(struct bbslist *bbs)
 								continue;
 #endif
 							cterm_end();
-							free(scrollback);
 							conn_close();
 							hidemouse();
 							return(FALSE);
@@ -1176,7 +1172,6 @@ BOOL doterm(struct bbslist *bbs)
 								continue;
 #endif
 							cterm_end();
-							free(scrollback);
 							conn_close();
 							hidemouse();
 							return(TRUE);