diff --git a/src/syncterm/menu.c b/src/syncterm/menu.c
index ef84d86b77410844e7b600b45302eac8edb9b36f..7f086e376be83b008505f8a6bc4223195238072a 100644
--- a/src/syncterm/menu.c
+++ b/src/syncterm/menu.c
@@ -1,5 +1,6 @@
 #include <uifc.h>
 #include <conio.h>
+#include <keys.h>
 
 #include "term.h"
 #include "uifcinit.h"
@@ -26,40 +27,44 @@ void viewscroll(void)
 		puttext(term.x+1,term.y+1,term.x+term.width,term.y+term.height,term.scrollback+(term.width*2*top));
 		key=getch();
 		switch(key) {
+			case 0:
+				switch(getch()<<8) {
+					case CIO_KEY_UP:
+						top--;
+						break;
+					case CIO_KEY_DOWN:
+						top++;
+						break;
+					case CIO_KEY_PPAGE:
+						top-=term.height;
+						break;
+					case CIO_KEY_NPAGE:
+						top+=term.height;
+						break;
+					case CIO_KEY_F(1):
+						init_uifc();
+						uifc.helpbuf=	"`Scrollback Buffer`\n\n"
+										"~ J ~ or ~ Up Arrow ~   Scrolls up one line\n"
+										"~ K ~ or ~ Down Arrow ~ Scrolls down one line\n"
+										"~ H ~ or ~ Page Up ~    Scrolls up one screen\n"
+										"~ L ~ or ~ Page Down ~  Scrolls down one screen\n";
+						uifc.showhelp();
+						uifcbail();
+						drawwin();
+						break;
+				}
+				break;
 			case 'j':
 			case 'J':
-			case KEY_UP:
-				top--;
-				break;
 			case 'k':
 			case 'K':
-			case KEY_DOWN:
-				top++;
-				break;
 			case 'h':
 			case 'H':
-			case KEY_PPAGE:
-				top-=term.height;
-				break;
 			case 'l':
 			case 'L':
-			case KEY_NPAGE:
-				top+=term.height;
-				break;
 			case ESC:
 				i=1;
 				break;
-			case KEY_F(1):
-				init_uifc();
-				uifc.helpbuf=	"`Scrollback Buffer`\n\n"
-								"~ J ~ or ~ Up Arrow ~   Scrolls up one line\n"
-								"~ K ~ or ~ Down Arrow ~ Scrolls down one line\n"
-								"~ H ~ or ~ Page Up ~    Scrolls up one screen\n"
-								"~ L ~ or ~ Page Down ~  Scrolls down one screen\n";
-				uifc.showhelp();
-				uifcbail();
-				drawwin();
-				break;
 		}
 	}
 	puttext(1,1,txtinfo.screenwidth,txtinfo.screenheight,buf);
diff --git a/src/syncterm/term.c b/src/syncterm/term.c
index b4ac1bd19d7f9bfbb464b84da1b926d4a4c8761a..2e08ab3a1663559e4a9ee0b9e0718035bd753d9f 100644
--- a/src/syncterm/term.c
+++ b/src/syncterm/term.c
@@ -1,5 +1,6 @@
 #include <genwrap.h>
 #include <conio.h>
+#include <keys.h>
 
 #include "term.h"
 #include "uifcinit.h"
@@ -576,6 +577,49 @@ void doterm(void)
 		while(kbhit()) {
 			key=getch();
 			switch(key) {
+				case 0:
+					switch(getch()<<8) {
+						case CIO_KEY_LEFT:
+							rlogin_send("\033[D",3,100);
+							break;
+						case CIO_KEY_RIGHT:
+							rlogin_send("\033[C",3,100);
+							break;
+						case CIO_KEY_UP:
+							rlogin_send("\033[A",3,100);
+							break;
+						case CIO_KEY_DOWN:
+							rlogin_send("\033[B",3,100);
+							break;
+						case CIO_KEY_HOME:
+							rlogin_send("\033[H",3,100);
+							break;
+						case CIO_KEY_END:
+#ifdef CIO_KEY_SELECT
+						case CIO_KEY_SELECT:	/* Some terminfo/termcap entries use KEY_SELECT as the END key! */
+#endif
+							rlogin_send("\033[K",3,100);
+							break;
+						case CIO_KEY_F(1):
+							rlogin_send("\033OP",3,100);
+							break;
+						case CIO_KEY_F(2):
+							rlogin_send("\033OQ",3,100);
+							break;
+						case CIO_KEY_F(3):
+							rlogin_send("\033Ow",3,100);
+							break;
+						case CIO_KEY_F(4):
+							rlogin_send("\033Ox",3,100);
+							break;
+#ifdef __unix__
+						case 128|'S':	/* Under curses, ALT sets the high bit of the char */
+						case 128|'s':	/* Under curses, ALT sets the high bit of the char */
+							viewscroll();
+							break;
+#endif
+					}
+					break;
 				case 17:	/* CTRL-Q */
 					free(term.scrollback);
 					return;
@@ -589,46 +633,6 @@ void doterm(void)
 					}
 					gotoxy(i,j);
 					break;
-				case KEY_LEFT:
-					rlogin_send("\033[D",3,100);
-					break;
-				case KEY_RIGHT:
-					rlogin_send("\033[C",3,100);
-					break;
-				case KEY_UP:
-					rlogin_send("\033[A",3,100);
-					break;
-				case KEY_DOWN:
-					rlogin_send("\033[B",3,100);
-					break;
-				case KEY_HOME:
-					rlogin_send("\033[H",3,100);
-					break;
-				case KEY_END:
-#ifdef KEY_SELECT
-				case KEY_SELECT:	/* Some terminfo/termcap entries use KEY_SELECT as the END key! */
-#endif
-					rlogin_send("\033[K",3,100);
-					break;
-				case KEY_F(1):
-					rlogin_send("\033OP",3,100);
-					break;
-				case KEY_F(2):
-					rlogin_send("\033OQ",3,100);
-					break;
-				case KEY_F(3):
-					rlogin_send("\033Ow",3,100);
-					break;
-				case KEY_F(4):
-					rlogin_send("\033Ox",3,100);
-					break;
-#ifdef __unix__
-				case 128|'S':	/* Under curses, ALT sets the high bit of the char */
-				case 128|'s':	/* Under curses, ALT sets the high bit of the char */
-					viewscroll();
-					break;
-#endif
-				case KEY_BACKSPACE:
 				case '\b':
 					key='\b';
 					/* FALLTHROUGH to default */