diff -Naur xterm-165.orig/charproc.c xterm-165/charproc.c
--- xterm-165.orig/charproc.c	Sat Jan  5 17:05:02 2002
+++ xterm-165/charproc.c	Mon Jan 21 04:11:53 2002
@@ -227,6 +227,8 @@
 "\
                 ~Meta <KeyPress>:insert-seven-bit() \n\
                  Meta <KeyPress>:insert-eight-bit() \n\
+              ~Meta <KeyRelease>:insert-seven-bit() \n\
+               Meta <KeyRelease>:insert-eight-bit() \n\
                 !Ctrl <Btn1Down>:popup-menu(mainMenu) \n\
            !Lock Ctrl <Btn1Down>:popup-menu(mainMenu) \n\
  !Lock Ctrl @Num_Lock <Btn1Down>:popup-menu(mainMenu) \n\
@@ -1745,6 +1747,9 @@
 					reply.a_param[count++] = 0; /* ready */
 					reply.a_param[count++] = 0; /* LK201 */
 				}
+				if ((term->keyboard.flags & MODE_KSYM) != 0) {
+					reply.a_param[count++] = 30;
+				}
 				break;
 			case 53:
 				/* Locator status */
@@ -3369,6 +3374,9 @@
 			set_keyboard_type(keyboardIsVT220, func == bitset);
 			break;
 #endif
+		case 1515:	/* MODE_KSYM if set, send keysyms	*/
+			(*func)(&termw->keyboard.flags, MODE_KSYM);
+			break;
 		}
 	}
 }
diff -Naur xterm-165.orig/input.c xterm-165/input.c
--- xterm-165.orig/input.c	Wed Oct 10 15:46:23 2001
+++ xterm-165/input.c	Mon Jan 21 03:09:23 2002
@@ -369,9 +369,10 @@
 	int	dec_code;
 	short	modify_parm = 0;
 	int	keypad_mode = ((keyboard->flags & MODE_DECKPAM) != 0);
+	int	ksym_mode = ((keyboard->flags & MODE_KSYM) != 0);
 
 	/* Ignore characters typed at the keyboard */
-	if (keyboard->flags & MODE_KAM)
+	if (keyboard->flags & MODE_KAM || (!ksym_mode && event->type == KeyRelease))
 		return;
 
 #if OPT_TCAP_QUERY
@@ -383,7 +384,7 @@
 	else
 #endif
 #if OPT_I18N_SUPPORT
-        if (screen->xic) {
+        if (screen->xic && !ksym_mode) {
 	    Status status_return;
 #if OPT_WIDE_CHARS
             if(screen->utf8_mode)
@@ -551,6 +552,17 @@
 #endif
 	}
 
+	if (ksym_mode) {
+		if (event->type == KeyRelease) {
+			keysym |= 0x80000000;
+		}
+		unparseputc(keysym & 0xFF, pty);
+		unparseputc((keysym >> 8) & 0xFF, pty);
+		unparseputc((keysym >> 16) & 0xFF, pty);
+		unparseputc((keysym >> 24) & 0xFF, pty);
+		return;
+	}
+
 #if OPT_HP_FUNC_KEYS
 	if (term->keyboard.type == keyboardIsHP
 	 && (reply.a_final = hpfuncvalue (keysym)) != 0) {
diff -Naur xterm-165.orig/ptyx.h xterm-165/ptyx.h
--- xterm-165.orig/ptyx.h	Sat Jan  5 17:05:03 2002
+++ xterm-165/ptyx.h	Sun Jan 20 01:02:33 2002
@@ -1420,6 +1420,7 @@
 #define MODE_DECCKM	0x04	/* cursor keys */
 #define MODE_SRM	0x08	/* send-receive mode */
 #define MODE_DECBKM	0x10	/* backarrow */
+#define MODE_KSYM	0x20	/* send normalized keysyms */
 
 
 #define N_MARGINBELL	10
