diff --git a/src/syncterm/syncterm.c b/src/syncterm/syncterm.c
index 08f2156eee8bb503b1ae70b428d60e741f7fc94e..55014277448b59382b88e0b4558101ce70b7201e 100644
--- a/src/syncterm/syncterm.c
+++ b/src/syncterm/syncterm.c
@@ -1284,28 +1284,38 @@ int main(int argc, char **argv)
 	int	ww, wh, sf;
 	const char syncterm_termcap[]="\n# terminfo database entry for SyncTERM\n"
 				"syncterm|SyncTERM,\n"
-				"	am,bce,ccc,da,mir,msgr,ndscr,\n"	// sam?
-				"	it#8,colors#256,\n"
+				// cwin maybe?  Or just left/right and top/bottom margins?
+				// smgtb=\\E[%i%p1%d;%p2%dr,
+				// shift/ctrl/alt Fx as extra keys?
+				// Booleans:
+				"	am,bce,da,mir,msgr,ndscr,\n"	// sam is a printer capability
+				// Numeric:
+				"	it#8,colors#8,pairs#64,\n"        
+				// Strings:                                             |
 				"	acsc=l\\332m\\300k\\277j\\331u\\264t\\303v\\301w\\302q\\304x\\263n\\305`\\004a\\260f\\370g\\361~\\371.\\031-\\030h\\261i^U0\\333y\\363z\\362,\n"
-				"	cbt=\\E[Z,bel=^G,cr=^M,csr=\\E[%i%p1%d;%p2%dr,clear=\\E[2J,el1=\\E[1K,el=\\E[K,ed=\\E[J,\n"
-				"	hpa=\\E[%i%p1%dG,cup=\\E[%i%p1%d;%p2%dH,cud1=^J,home=\\E[H,civis=\\E[?25l,cub1=\\E[D,cnorm=\\E[?25h,\n"
-				"	cuf1=\\E[C,ll=\\E[255H,cuu1=\\E[A,dch1=\\E[P,dl1=\\E[M,smam=\\E[?7h,blink=\\E[5m,bold=\\E[1m,\n"
-				"	ech=\\E[%p1%dX,rmam=\\E[7l,sgr0=\\E[m,\n"
-				"	is1=\\E[?7h\\E[?25h\\E[?31l\\E[?32l\\E[?33l\\E[*r\\E[ D\\E[m\\E[?s,\n"
-				"	ich1=\\E[@,il1=\\E[L,\n"
-				"	kbs=^H,kdch1=\\177,kcud1=\\E[B,kend=\\E[K,\n"
-				"	kf1=\\EOP,kf2=\\EOQ,kf3=\\EOR,kf4=\\EOS,kf5=\\EOt,kf6=\\E[17~,\n"
-				"	kf7=\\E[18~,kf8=\\E[19~,kf9=\\E[20~,kf10=\\E[21~,kf11=\\E[23~,kf12=\\E[24~,\n"
-				"	khome=\\E[H,kich1=\\E[@,kcub1=\\E[D,knp=\\E[U,kpp=\\E[V,kcuf1=\\E[C,\n"
-				"	kcuu1=\\E[A,\n"
-				"	nel=^M^J,\n"
-				"	dch=\\E[%p1%dP,dl=\\E[%p1%dM,cud=\\E[%p1%dB,ich=\\E[%p1%d@,indn=\\E[%p1%dS,\n"
-				"	il=\\E[%p1%dL,cub=\\E[%p1%dD,cuf=\\E[%p1%dC,rin=\\E[%p1%dT,cuu=\\E[%p1%dA,\n"
-				"	rs1=\\E[?7h\\E[?25h\\E[?31l\\E[?32l\\E[?33l\\E[*r\\E[ D\\E[m\\E[?s,\n"
-				"	rc=\\E[u,sc=\\E[s,ind=\\E[S,ri=\\E[T,\n"
-				"	ht=\t,setab=\\E[4%p1%dm,setaf=\\E[3%p1%dm,\n"
+				"	cbt=\\E[Z,bel=^G,cr=^M,csr=\\E[%i%p1%d;%p2%dr,tbc=\\E[3g,\n"
+				"	mgc=\\E[69h\\E[s\\e[69l,clear=\\E[2J,csr=\\E[%i%p1%d;%p2%dr,el1=\\E[1K,\n"
+				"	el=\\E[K,ed=\\E[J,pa=\\E[%i%p1%dG,cup=\\E[%i%p1%d;%p2%dH,cud1=^J,home=\\E[H,\n"
+				"	civis=\\E[?25l,cub1=\\E[D,cnorm=\\E[?25h,cuf1=\\E[C,ll=\\E[255H,cuu1=\\E[A,\n"
+				"	cvvis=\\E[?25h,dch1=\\E[P,dl1=\\E[M,smam=\\E[?7h,blink=\\E[5m,bold=\\E[1m,\n"
+				"	ech=\\E[%p1%dX,rmam=\\E[7l,sgr0=\\E[m,is1=\\Ec,ich1=\\E[@,il1=\\E[L,kbs=^H,\n"
+				"	kcbt=\\E[Z,kdch1=\\177,kcud1=\\E[B,kend=\\E[K,kf1=\\E[11~,kf2=\\E[12~,\n"
+				"	kf3=\\E[13~,kf4=\\E[14~,kf5=\\E[15~,kf6=\\E[17~,kf7=\\E[18~,kf8=\\E[19~,\n"
+				"	kf9=\\E[20~,kf10=\\E[21~,kf11=\\E[23~,kf12=\\E[24~,kcub1=\\E[D,knp=\\E[U,\n"
+				"	kpp=\\E[V,kcuf1=\\E[C,kcuu1=\\E[A,nel=^M^J,dch=\\E[%p1%dP,dl=\\E[%p1%dM,\n"
+				"	cud=\\E[%p1%dB,ich=\\E[%p1%d@,indn=\\E[%p1%dS,il=\\E[%p1%dL,cub=\\E[%p1%dD,\n"
+				"	cuf=\\E[%p1%dC,rin=\\E[%p1%dT,cuu=\\E[%p1%dA,rep=%p1%c\E[%p2%{1}%-%db,\n"
+				"	rs=\\E[c,rc=\\E[u,sc=\\E[s,ind=\\E[S,ri=\\E[T,\n"
 				"	sgr=\\E[0%?%p1%p6%|%t;1%;%?%p4%|%t;5%;%?%p1%p3%|%t;7%;%?%p7%|%t;8%;m,\n"
-				"	smso=\\E[0;1;7m,rmso=\\E[m,\n"
+				"	smglp=\\E[69h\\E[%{1}%p1%+%d;0s\\E[69l,smgrp=\\E[69h\\E[0;%{1}%p1%+%ds\\E[69l,\n"
+				"	hts=\E[H,ht=\t,setab=\\E[4%p1%dm,setaf=\\E[3%p1%dm,\n"
+				"	smglr=\\E[?69h\\E[%i%p1%d;%p2%ds\\E?69l,smso=\\E[0;1;7m,rmso=\\E[m,\n"
+				"syncterm-bitmap|SyncTERM in Bitmap Mode,\n"
+				"	ccc,\n"
+				"	colors#256,pairs#65535,\n"
+				"	initc=\\E]4;%p1%d;rgb\\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\\E\\\\\n",
+				"	setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,\n"
+				"	setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,\n"
 				"syncterm-24|SyncTERM 80x25,\n"
 				"	lines#24,use=syncterm,\n"
 				"syncterm-25|SyncTERM No Status Line,\n"
@@ -1354,6 +1364,54 @@ int main(int argc, char **argv)
 				"	cols#132,lines#59,use=syncterm,\n"
 				"syncterm-60-w|SyncTERM 132x60 No Status Line,\n"
 				"	cols#132,lines#60,use=syncterm,\n";
+				"syncterm-24|SyncTERM 80x25,\n"
+				"	lines#24,use=syncterm,\n"
+				"syncterm-25|SyncTERM No Status Line,\n"
+				"	lines#25,use=syncterm,\n"
+				"syncterm-27|SyncTERM 80x28 With Status,\n"
+				"	lines#27,use=syncterm,\n"
+				"syncterm-28|SyncTERM 80x28 No Status Line,\n"
+				"	lines#28,use=syncterm,\n"
+				"syncterm-42|SyncTERM 80x23,\n"
+				"	lines#42,use=syncterm,\n"
+				"syncterm-43|SyncTERM 80x23 No Status Line,\n"
+				"	lines#43,use=syncterm,\n"
+				"syncterm-49|SyncTERM 80x50,\n"
+				"	lines#49,use=syncterm,\n"
+				"syncterm-50|SyncTERM 80x50 No Status Line,\n"
+				"	lines#50,use=syncterm,\n"
+				"syncterm-59|SyncTERM 80x60,\n"
+				"	lines#59,use=syncterm,\n"
+				"syncterm-60|SyncTERM 80x60 No Status Line,\n"
+				"	lines#60,use=syncterm,\n"
+				"syncterm-w-bitmap|SyncTERM Wide,\n"
+				"	cols#132,use=syncterm-bitmap,\n"
+				"syncterm-25-w-bitmap|SyncTERM No Status Line,\n"
+				"	cols#132,lines#25,use=syncterm-bitmap,\n"
+				"syncterm-27-w-bitmap|SyncTERM 132x28 With Status,\n"
+				"	cols#132,lines#27,use=syncterm-bitmap,\n"
+				"syncterm-28-w-bitmap|SyncTERM 132x28 No Status Line,\n"
+				"	cols#132,lines#28,use=syncterm-bitmap,\n"
+				"syncterm-36-w-bitmap|SyncTERM 132x37,\n"
+				"	cols#132,lines#36,use=syncterm-bitmap,\n"
+				"syncterm-37-w-bitmap|SyncTERM 132x37 No Status Line,\n"
+				"	cols#132,lines#37,use=syncterm-bitmap,\n"
+				"syncterm-42-w-bitmap|SyncTERM 132x23,\n"
+				"	cols#132,lines#42,use=syncterm-bitmap,\n"
+				"syncterm-43-w-bitmap|SyncTERM 132x23 No Status Line,\n"
+				"	cols#132,lines#43,use=syncterm-bitmap,\n"
+				"syncterm-49-w-bitmap|SyncTERM 132x50,\n"
+				"	cols#132,lines#49,use=syncterm-bitmap,\n"
+				"syncterm-50-w-bitmap|SyncTERM 132x50 No Status Line,\n"
+				"	cols#132,lines#50,use=syncterm-bitmap,\n"
+				"syncterm-51-w-bitmap|SyncTERM 132x52,\n"
+				"	cols#132,lines#51,use=syncterm-bitmap,\n"
+				"syncterm-52-w-bitmap|SyncTERM 132x52 No Status Line,\n"
+				"	cols#132,lines#52,use=syncterm-bitmap,\n"
+				"syncterm-59-w-bitmap|SyncTERM 132x60,\n"
+				"	cols#132,lines#59,use=syncterm-bitmap,\n"
+				"syncterm-60-w-bitmap|SyncTERM 132x60 No Status Line,\n"
+				"	cols#132,lines#60,use=syncterm-bitmap,\n";
 
 	SetThreadName("Main Thread");
 	if(argc==2 && strcmp(argv[1],"-T")==0) {
diff --git a/src/syncterm/term.c b/src/syncterm/term.c
index 9ffd2b3ae8d413d87d129536650b9ba7da80f5d3..e6cfaddcaa77bed78fb6c967b0b20ac21f06cbc9 100644
--- a/src/syncterm/term.c
+++ b/src/syncterm/term.c
@@ -3066,19 +3066,19 @@ BOOL doterm(struct bbslist *bbs)
 						conn_send("\033[V",3,0);
 						break;
 					case CIO_KEY_F(1):
-						conn_send("\033OP",3,0);
+						conn_send("\033[11~",3,0);
 						break;
 					case CIO_KEY_F(2):
-						conn_send("\033OQ",3,0);
+						conn_send("\033[12~",3,0);
 						break;
 					case CIO_KEY_F(3):
-						conn_send("\033OR",3,0);
+						conn_send("\033[13~",3,0);
 						break;
 					case CIO_KEY_F(4):
-						conn_send("\033OS",3,0);
+						conn_send("\033[14~",3,0);
 						break;
 					case CIO_KEY_F(5):
-						conn_send("\033Ot",3,0);
+						conn_send("\033[15~",3,0);
 						break;
 					case CIO_KEY_F(6):
 						conn_send("\033[17~",5,0);
@@ -3101,6 +3101,114 @@ BOOL doterm(struct bbslist *bbs)
 					case CIO_KEY_F(12):
 						conn_send("\033[24~",5,0);
 						break;
+					case CIO_KEY_SHIFT_F(1):
+						conn_send("\033[11;2~",3,0);
+						break;
+					case CIO_KEY_SHIFT_F(2):
+						conn_send("\033[12;2~",3,0);
+						break;
+					case CIO_KEY_SHIFT_F(3):
+						conn_send("\033[13;2~",3,0);
+						break;
+					case CIO_KEY_SHIFT_F(4):
+						conn_send("\033[14;2~",3,0);
+						break;
+					case CIO_KEY_SHIFT_F(5):
+						conn_send("\033[15;2~",3,0);
+						break;
+					case CIO_KEY_SHIFT_F(6):
+						conn_send("\033[17;2~",5,0);
+						break;
+					case CIO_KEY_SHIFT_F(7):
+						conn_send("\033[18;2~",5,0);
+						break;
+					case CIO_KEY_SHIFT_F(8):
+						conn_send("\033[19;2~",5,0);
+						break;
+					case CIO_KEY_SHIFT_F(9):
+						conn_send("\033[20;2~",5,0);
+						break;
+					case CIO_KEY_SHIFT_F(10):
+						conn_send("\033[21;2~",5,0);
+						break;
+					case CIO_KEY_SHIFT_F(11):
+						conn_send("\033[23;2~",5,0);
+						break;
+					case CIO_KEY_SHIFT_F(12):
+						conn_send("\033[24;2~",5,0);
+						break;
+					case CIO_KEY_CTRL_F(1):
+						conn_send("\033[11;5~",3,0);
+						break;
+					case CIO_KEY_CTRL_F(2):
+						conn_send("\033[12;5~",3,0);
+						break;
+					case CIO_KEY_CTRL_F(3):
+						conn_send("\033[13;5~",3,0);
+						break;
+					case CIO_KEY_CTRL_F(4):
+						conn_send("\033[14;5~",3,0);
+						break;
+					case CIO_KEY_CTRL_F(5):
+						conn_send("\033[15;5~",3,0);
+						break;
+					case CIO_KEY_CTRL_F(6):
+						conn_send("\033[17;5~",5,0);
+						break;
+					case CIO_KEY_CTRL_F(7):
+						conn_send("\033[18;5~",5,0);
+						break;
+					case CIO_KEY_CTRL_F(8):
+						conn_send("\033[19;5~",5,0);
+						break;
+					case CIO_KEY_CTRL_F(9):
+						conn_send("\033[20;5~",5,0);
+						break;
+					case CIO_KEY_CTRL_F(10):
+						conn_send("\033[21;5~",5,0);
+						break;
+					case CIO_KEY_CTRL_F(11):
+						conn_send("\033[23;5~",5,0);
+						break;
+					case CIO_KEY_CTRL_F(12):
+						conn_send("\033[24;5~",5,0);
+						break;
+					case CIO_KEY_ALT_F(1):
+						conn_send("\033[11;3~",3,0);
+						break;
+					case CIO_KEY_ALT_F(2):
+						conn_send("\033[12;3~",3,0);
+						break;
+					case CIO_KEY_ALT_F(3):
+						conn_send("\033[13;3~",3,0);
+						break;
+					case CIO_KEY_ALT_F(4):
+						conn_send("\033[14;3~",3,0);
+						break;
+					case CIO_KEY_ALT_F(5):
+						conn_send("\033[15;3~",3,0);
+						break;
+					case CIO_KEY_ALT_F(6):
+						conn_send("\033[17;3~",5,0);
+						break;
+					case CIO_KEY_ALT_F(7):
+						conn_send("\033[18;3~",5,0);
+						break;
+					case CIO_KEY_ALT_F(8):
+						conn_send("\033[19;3~",5,0);
+						break;
+					case CIO_KEY_ALT_F(9):
+						conn_send("\033[20;3~",5,0);
+						break;
+					case CIO_KEY_ALT_F(10):
+						conn_send("\033[21;3~",5,0);
+						break;
+					case CIO_KEY_ALT_F(11):
+						conn_send("\033[23;3~",5,0);
+						break;
+					case CIO_KEY_ALT_F(12):
+						conn_send("\033[24;3~",5,0);
+						break;
 					case CIO_KEY_IC:
 						conn_send("\033[@",3,0);
 						break;
@@ -3112,6 +3220,9 @@ BOOL doterm(struct bbslist *bbs)
 						ch[0]=key;
 						conn_send(ch,1,0);
 						break;
+					case CIO_KEY_BACKTAB:
+						conn_send("\033[Z", 3, 0);
+						break;
 					case '\b':
 						key='\b';
 						/* FALLTHROUGH to default */