diff --git a/input-keys.c b/input-keys.c
index f73bcf36..c8697cd0 100644
--- a/input-keys.c
+++ b/input-keys.c
@@ -32,7 +32,6 @@ struct input_key_ent {
 #define INPUTKEY_KEYPAD 0x1	/* keypad key */
 #define INPUTKEY_CURSOR 0x2	/* cursor key */
 #define INPUTKEY_CTRL 0x4	/* may be modified with ctrl */
-#define INPUTKEY_XTERM 0x4	/* may have xterm argument appended */
 };
 
 struct input_key_ent input_keys[] = {
@@ -40,32 +39,32 @@ struct input_key_ent input_keys[] = {
 	{ KEYC_BSPACE, "\177",	   0 },
 
 	/* Function keys. */
-	{ KEYC_F1,     "\033OP",   INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F2,     "\033OQ",   INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F3,     "\033OR",   INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F4,     "\033OS",   INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F5,     "\033[15~", INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F6,     "\033[17~", INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F7,     "\033[18~", INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F8,     "\033[19~", INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F9,     "\033[20~", INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F10,    "\033[21~", INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F11,    "\033[23~", INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F12,    "\033[24~", INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F13,    "\033[25~", INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F14,    "\033[26~", INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F15,    "\033[28~", INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F16,    "\033[29~", INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F17,    "\033[31~", INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F18,    "\033[32~", INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F19,    "\033[33~", INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_F20,    "\033[34~", INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_IC,     "\033[2~",  INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_DC,     "\033[3~",  INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_HOME,   "\033[1~",  INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_END,    "\033[4~",  INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_NPAGE,  "\033[6~",  INPUTKEY_CTRL|INPUTKEY_XTERM },
-	{ KEYC_PPAGE,  "\033[5~",  INPUTKEY_CTRL|INPUTKEY_XTERM },
+	{ KEYC_F1,     "\033OP",   INPUTKEY_CTRL },
+	{ KEYC_F2,     "\033OQ",   INPUTKEY_CTRL },
+	{ KEYC_F3,     "\033OR",   INPUTKEY_CTRL },
+	{ KEYC_F4,     "\033OS",   INPUTKEY_CTRL },
+	{ KEYC_F5,     "\033[15~", INPUTKEY_CTRL },
+	{ KEYC_F6,     "\033[17~", INPUTKEY_CTRL },
+	{ KEYC_F7,     "\033[18~", INPUTKEY_CTRL },
+	{ KEYC_F8,     "\033[19~", INPUTKEY_CTRL },
+	{ KEYC_F9,     "\033[20~", INPUTKEY_CTRL },
+	{ KEYC_F10,    "\033[21~", INPUTKEY_CTRL },
+	{ KEYC_F11,    "\033[23~", INPUTKEY_CTRL },
+	{ KEYC_F12,    "\033[24~", INPUTKEY_CTRL },
+	{ KEYC_F13,    "\033[25~", INPUTKEY_CTRL },
+	{ KEYC_F14,    "\033[26~", INPUTKEY_CTRL },
+	{ KEYC_F15,    "\033[28~", INPUTKEY_CTRL },
+	{ KEYC_F16,    "\033[29~", INPUTKEY_CTRL },
+	{ KEYC_F17,    "\033[31~", INPUTKEY_CTRL },
+	{ KEYC_F18,    "\033[32~", INPUTKEY_CTRL },
+	{ KEYC_F19,    "\033[33~", INPUTKEY_CTRL },
+	{ KEYC_F20,    "\033[34~", INPUTKEY_CTRL },
+	{ KEYC_IC,     "\033[2~",  INPUTKEY_CTRL },
+	{ KEYC_DC,     "\033[3~",  INPUTKEY_CTRL },
+	{ KEYC_HOME,   "\033[1~",  INPUTKEY_CTRL },
+	{ KEYC_END,    "\033[4~",  INPUTKEY_CTRL },
+	{ KEYC_NPAGE,  "\033[6~",  INPUTKEY_CTRL },
+	{ KEYC_PPAGE,  "\033[5~",  INPUTKEY_CTRL },
 	{ KEYC_BTAB,   "\033[Z",   INPUTKEY_CTRL },
 
 	/* Arrow keys. Cursor versions must come first. */
@@ -172,37 +171,6 @@ input_key(struct window_pane *wp, int key)
 
 	log_debug2("found key 0x%x: \"%s\"", key, ike->data);
 
-	/*
-	 * If in xterm keys mode, work out and append the modifier as an
-	 * argument.
-	 */
-	xterm_keys = options_get_number(&wp->window->options, "xterm-keys");
-	if (xterm_keys && ike->flags & INPUTKEY_XTERM) {
-		ch = '\0';
-		if (key & (KEYC_SHIFT|KEYC_ESCAPE|KEYC_CTRL))
-			ch = '8';
-		else if (key & (KEYC_ESCAPE|KEYC_CTRL))
-			ch = '7';
-		else if (key & (KEYC_SHIFT|KEYC_CTRL))
-			ch = '6';
-		else if (key & KEYC_CTRL)
-			ch = '5';
-		else if (key & (KEYC_SHIFT|KEYC_ESCAPE))
-			ch = '4';
-		else if (key & KEYC_ESCAPE)
-			ch = '3';
-		else if (key & KEYC_SHIFT)
-			ch = '2';
-		if (ch != '\0') {
-			buffer_write(wp->out, ike->data, dlen - 1);
-			buffer_write8(wp->out, ';');
-			buffer_write8(wp->out, ch);
-			buffer_write8(wp->out, ike->data[dlen - 1]);
-		} else
-			buffer_write(wp->out, ike->data, dlen);
-		return;
-	}
-
 	/*
 	 * Not in xterm mode. Prefix a \033 for escape, and set bit 5 of the
 	 * last byte for ctrl.
diff --git a/tty-keys.c b/tty-keys.c
index a443bd5a..2a713933 100644
--- a/tty-keys.c
+++ b/tty-keys.c
@@ -26,8 +26,7 @@
 #include "tmux.h"
 
 void	tty_keys_add(struct tty *, const char *, int, int);
-int	tty_keys_parse_xterm(struct tty *, char *, size_t, size_t *);
-int	tty_keys_parse_mouse(char *, size_t, size_t *, struct mouse_event *);
+int	tty_keys_mouse(char *, size_t, size_t *, struct mouse_event *);
 
 struct tty_key_ent {
 	enum tty_code_code	code;
@@ -269,14 +268,7 @@ tty_keys_next(struct tty *tty, int *key, struct mouse_event *mouse)
 	}
 
 	/* Not found. Is this a mouse key press? */
-	*key = tty_keys_parse_mouse(buf, len, &size, mouse);
-	if (*key != KEYC_NONE) {
-		buffer_remove(tty->in, size);
-		goto found;
-	}
-
-	/* Not found. Try to parse xterm-type arguments. */
-	*key = tty_keys_parse_xterm(tty, buf, len, &size);
+	*key = tty_keys_mouse(buf, len, &size, mouse);
 	if (*key != KEYC_NONE) {
 		buffer_remove(tty->in, size);
 		goto found;
@@ -331,7 +323,7 @@ found:
 }
 
 int
-tty_keys_parse_mouse(char *buf, size_t len, size_t *size, struct mouse_event *m)
+tty_keys_mouse(char *buf, size_t len, size_t *size, struct mouse_event *m)
 {
 	/*
 	 * Mouse sequences are \033[M followed by three characters indicating
@@ -353,68 +345,3 @@ tty_keys_parse_mouse(char *buf, size_t len, size_t *size, struct mouse_event *m)
 	m->y -= 33;
 	return (KEYC_MOUSE);
 }
-
-int
-tty_keys_parse_xterm(struct tty *tty, char *buf, size_t len, size_t *size)
-{
-	struct tty_key	*tk;
-	char		 tmp[5];
-	size_t		 tmplen;
-	int		 key;
-
-	/*
-	 * xterm sequences with modifier keys are of the form:
-	 *
-	 * ^[[1;xD becomes ^[[D
-	 * ^[[5;x~ becomes ^[[5~
-	 *
-	 * This function is a bit of a hack. Need to figure out what exact
-	 * format and meaning xterm outputs and fix it. XXX
-	 */
-
-	log_debug("xterm input is: %.*s", (int) len, buf);
-	if (len != 6 || memcmp(buf, "\033[1;", 4) != 0)
-		return (KEYC_NONE);
-	*size = 6;
-
-	tmplen = 0;
-	tmp[tmplen++] = '[';
-	if (buf[5] == '~') {
-		tmp[tmplen++] = buf[2];
-		tmp[tmplen++] = '~';
-	} else
-		tmp[tmplen++] = buf[5];
-	log_debug("xterm output is: %.*s", (int) tmplen, tmp);
-
-	tk = tty_keys_find(tty, tmp, tmplen, size);
-	if (tk == NULL)
-		return (KEYC_NONE);
-	key = tk->key;
-
-	switch (buf[4]) {
-	case '8':
-		key |= KEYC_SHIFT|KEYC_ESCAPE|KEYC_CTRL;
-		break;
-	case '7':
-		key |= KEYC_ESCAPE|KEYC_CTRL;
-		break;
-	case '6':
-		key |= KEYC_SHIFT|KEYC_CTRL;
-		break;
-	case '5':
-		key |= KEYC_CTRL;
-		break;
-	case '4':
-		key |= KEYC_SHIFT|KEYC_ESCAPE;
-		break;
-	case '3':
-		key |= KEYC_ESCAPE;
-		break;
-	case '2':
-		key |= KEYC_SHIFT;
-		break;
-	}
-
-	*size = 6;
-	return (key);
-}