diff --git a/src/syncterm/menu.c b/src/syncterm/menu.c
index 4ff1a2cb0772a45914cbc444fab9d40f1028c38b..423887fa397672bcf32cbfd19d979344f7b1653b 100644
--- a/src/syncterm/menu.c
+++ b/src/syncterm/menu.c
@@ -23,6 +23,7 @@ void viewscroll(void)
 	struct	text_info txtinfo;
 	int	x,y;
 	struct mouse_event mevent;
+	int old_xlat=ciolib_xlat;
 
 	x=wherex();
 	y=wherey();
@@ -49,7 +50,7 @@ void viewscroll(void)
 		cputs("Scrollback");
 		gotoxy(cterm->width-9,1);
 		cputs("Scrollback");
-		ciolib_xlat = FALSE;
+		ciolib_xlat = old_xlat;
 		gotoxy(1,1);
 		key=getch();
 		switch(key) {
diff --git a/src/syncterm/term.c b/src/syncterm/term.c
index 69bab3b942e4a5eb402fee94a3e0ebe97e5f7df7..779a02b7e39b5ad48647d64485fdc351b17df4ab 100644
--- a/src/syncterm/term.c
+++ b/src/syncterm/term.c
@@ -169,6 +169,7 @@ void update_status(struct bbslist *bbs, int speed, int ooii_mode)
 	static int oldspeed=0;
 	int	timeon;
 	char sep;
+	int old_xlat = ciolib_xlat;
 
 	switch(getfont()) {
 			case 0:
@@ -244,7 +245,7 @@ void update_status(struct bbslist *bbs, int speed, int ooii_mode)
 	window(txtinfo.winleft,txtinfo.wintop,txtinfo.winright,txtinfo.winbottom);
 	gotoxy(txtinfo.curx,txtinfo.cury);
 	hold_update=olddmc;
-	ciolib_xlat = FALSE;
+	ciolib_xlat = old_xlat;
 }
 
 #if defined(_WIN32) && defined(_DEBUG) && defined(DUMP)
@@ -1896,6 +1897,7 @@ void font_control(struct bbslist *bbs)
 	char *buf;
 	struct	text_info txtinfo;
 	int i,j,k;
+	int enable_xlat = 0;
 
 	if(safe_mode)
 		return;
@@ -1927,12 +1929,18 @@ void font_control(struct bbslist *bbs)
 						loadfont(fpick.selected[0]);
 					filepick_free(&fpick);
 				}
-				else
+				else {
 					setfont(i,FALSE,1);
+					if (i >=32 && i<= 35 && cterm->emulation != CTERM_EMULATION_PETASCII)
+						enable_xlat = TRUE;
+					if (i==36 && cterm->emulation != CTERM_EMULATION_ATASCII)
+						enable_xlat = TRUE;
+				}
 			}
 		break;
 	}
 	uifcbail();
+	ciolib_xlat = enable_xlat;
 	setup_mouse_events();
 	puttext(1,1,txtinfo.screenwidth,txtinfo.screenheight,buf);
 	window(txtinfo.winleft,txtinfo.wintop,txtinfo.winright,txtinfo.winbottom);
diff --git a/src/syncterm/uifcinit.c b/src/syncterm/uifcinit.c
index c641028a7690795176952baa178a5afb51e1b1a6..ac53827bad1275e3a7c2c08d20b5ec505968bede 100644
--- a/src/syncterm/uifcinit.c
+++ b/src/syncterm/uifcinit.c
@@ -19,6 +19,7 @@ static int uifc_initialized=0;
 #define WITH_BOT	(1<<2)
 
 static void (*bottomfunc)(int);
+int orig_ciolib_xlat;
 
 int	init_uifc(BOOL scrn, BOOL bottom) {
 	int	i;
@@ -29,6 +30,7 @@ int	init_uifc(BOOL scrn, BOOL bottom) {
 	if(!uifc_initialized) {
 		/* Set scrn_len to 0 to prevent textmode() call */
 		uifc.scrn_len=0;
+		orig_ciolib_xlat = ciolib_xlat;
 		ciolib_xlat = TRUE;
 		uifc.chars = NULL;
 		if((i=uifcini32(&uifc))!=0) {
@@ -72,7 +74,7 @@ void uifcbail(void)
 {
 	if(uifc_initialized) {
 		uifc.bail();
-		ciolib_xlat = FALSE;
+		ciolib_xlat = orig_ciolib_xlat;
 	}
 	uifc_initialized=0;
 }