diff --git a/src/syncterm/syncterm.c b/src/syncterm/syncterm.c
index d04bd8d7b792ca059520adc6f05e847e5b393db5..761dab8f86afe7cd48d0b988b90f6dc492bde5ec 100644
--- a/src/syncterm/syncterm.c
+++ b/src/syncterm/syncterm.c
@@ -112,6 +112,7 @@ int	safe_mode=0;
 FILE* log_fp;
 extern ini_style_t ini_style;
 BOOL quitting=FALSE;
+int fake_mode = -1;
 
 #ifdef _WINSOCKAPI_
 
@@ -1685,6 +1686,8 @@ int main(int argc, char **argv)
     		gettextinfo(&txtinfo);	/* Current mode may have changed while in show_bbslist() */
 		FREE_AND_NULL(last_bbs);
 		uifcbail();
+		if (bbs->screen_mode != SCREEN_MODE_CURRENT)
+			fake_mode = screen_to_ciolib(bbs->screen_mode);
 		textmode(screen_to_ciolib(bbs->screen_mode));
 		if (!bbs->hidepopups)
 			init_uifc(TRUE, TRUE);
@@ -1694,6 +1697,7 @@ int main(int argc, char **argv)
 			load_font_files();
 			uifcbail();
 			textmode(txtinfo.currmode);
+			fake_mode = -1;
 			init_uifc(TRUE, TRUE);
 			settitle("SyncTERM");
 		} else {
@@ -1734,6 +1738,7 @@ int main(int argc, char **argv)
 
 			if(doterm(bbs))
 				quitting=TRUE;
+			fake_mode = -1;
 			setvideoflags(0);
 
 			if(log_fp!=NULL) {
diff --git a/src/syncterm/syncterm.h b/src/syncterm/syncterm.h
index 2e7b48353d9e0491f466e6b76d7c00f1427e6d08..2ee5d3daef532320b7c1a79c066bf0aae962d91a 100644
--- a/src/syncterm/syncterm.h
+++ b/src/syncterm/syncterm.h
@@ -84,6 +84,7 @@ extern char *output_types[];
 extern int output_map[];
 extern char *output_descrs[];
 extern char *output_enum[];
+extern int fake_mode;
 
 void parse_url(char *url, struct bbslist *bbs, int dflt_conn_type, int force_defaults);
 char *get_syncterm_filename(char *fn, int fnlen, int type, int shared);
diff --git a/src/syncterm/window.c b/src/syncterm/window.c
index 5faf43e5f0cb7aae392fbdd470baef3f8a42b9ca..69f5b6e9ec4d9dce2e4c172304511f60b82b9d76 100644
--- a/src/syncterm/window.c
+++ b/src/syncterm/window.c
@@ -2,6 +2,7 @@
 
 #include <gen_defs.h>
 #include <ciolib.h>
+#include <vidmodes.h>
 #include "uifcinit.h"
 #include "term.h"
 #include "syncterm.h"
@@ -10,18 +11,28 @@ void
 get_term_win_size(int *width, int *height, int *nostatus)
 {
 	struct	text_info txtinfo;
+	int vmode = find_vmode(fake_mode);
 
 	gettextinfo(&txtinfo);
 
-	if(txtinfo.screenwidth < 80)
-		*width=40;
+	if (vmode != -1 && txtinfo.screenwidth >= vparams[vmode].cols) {
+			*width = vparams[vmode].cols;
+	}
 	else {
-		if(txtinfo.screenwidth <132)
-			*width=80;
-		else
-			*width=132;
+		if(txtinfo.screenwidth < 80)
+			*width=40;
+		else {
+			if(txtinfo.screenwidth <132)
+				*width=80;
+			else
+				*width=132;
+		}
 	}
 	*height=txtinfo.screenheight;
+	if (vmode != -1) {
+		if (txtinfo.screenheight >= vparams[vmode].rows)
+			*height = vparams[vmode].rows;
+	}
 	if(!*nostatus)
 		(*height)--;
 	if(*height<24) {