diff --git a/channels.c b/channels.c
index d030fcd..5a7e56e 100644
--- a/channels.c
+++ b/channels.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: channels.c,v 1.357 2017/02/01 02:59:09 dtucker Exp $ */
+/* $OpenBSD: channels.c,v 1.358 2017/04/30 23:13:25 djm Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -571,14 +571,6 @@
 	for (i = 0; i < channels_alloc; i++) {
 		c = channels[i];
 		if (c != NULL && c->type == SSH_CHANNEL_OPEN) {
-#if 0
-			if (!compat20 &&
-			    buffer_len(&c->input) > packet_get_maxsize()) {
-				debug2("channel %d: big input buffer %d",
-				    c->self, buffer_len(&c->input));
-				return 0;
-			}
-#endif
 			if (buffer_len(&c->output) > packet_get_maxsize()) {
 				debug2("channel %d: big output buffer %u > %u",
 				    c->self, buffer_len(&c->output),
@@ -616,8 +608,6 @@
 		case SSH_CHANNEL_RUNIX_LISTENER:
 			continue;
 		case SSH_CHANNEL_LARVAL:
-			if (!compat20)
-				fatal("cannot happen: SSH_CHANNEL_LARVAL");
 			continue;
 		case SSH_CHANNEL_OPENING:
 		case SSH_CHANNEL_OPEN:
@@ -627,11 +617,9 @@
 			return 1;
 		case SSH_CHANNEL_INPUT_DRAINING:
 		case SSH_CHANNEL_OUTPUT_DRAINING:
-			if (!compat13)
-				fatal("cannot happen: OUT_DRAIN");
-			return 1;
+			fatal("cannot happen: OUT_DRAIN");
 		default:
-			fatal("channel_still_open: bad channel type %d", c->type);
+			fatal("%s: bad channel type %d", __func__, c->type);
 			/* NOTREACHED */
 		}
 	}
@@ -672,11 +660,9 @@
 			return i;
 		case SSH_CHANNEL_INPUT_DRAINING:
 		case SSH_CHANNEL_OUTPUT_DRAINING:
-			if (!compat13)
-				fatal("cannot happen: OUT_DRAIN");
-			return i;
+			fatal("cannot happen: OUT_DRAIN");
 		default:
-			fatal("channel_find_open: bad channel type %d", c->type);
+			fatal("%s: bad channel type %d", __func__, c->type);
 			/* NOTREACHED */
 		}
 	}
@@ -896,22 +882,11 @@
 }
 
 static void
-channel_pre_open_13(Channel *c, fd_set *readset, fd_set *writeset)
-{
-	if (buffer_len(&c->input) < packet_get_maxsize())
-		FD_SET(c->sock, readset);
-	if (buffer_len(&c->output) > 0)
-		FD_SET(c->sock, writeset);
-}
-
-static void
 channel_pre_open(Channel *c, fd_set *readset, fd_set *writeset)
 {
-	u_int limit = compat20 ? c->remote_window : packet_get_maxsize();
-
 	if (c->istate == CHAN_INPUT_OPEN &&
-	    limit > 0 &&
-	    buffer_len(&c->input) < limit &&
+	    c->remote_window > 0 &&
+	    buffer_len(&c->input) < c->remote_window &&
 	    buffer_check_alloc(&c->input, CHAN_RBUF))
 		FD_SET(c->rfd, readset);
 	if (c->ostate == CHAN_OUTPUT_OPEN ||
@@ -927,8 +902,8 @@
 		}
 	}
 	/** XXX check close conditions, too */
-	if (compat20 && c->efd != -1 && 
-	    !(c->istate == CHAN_INPUT_CLOSED && c->ostate == CHAN_OUTPUT_CLOSED)) {
+	if (c->efd != -1 && !(c->istate == CHAN_INPUT_CLOSED &&
+	    c->ostate == CHAN_OUTPUT_CLOSED)) {
 		if (c->extended_usage == CHAN_EXTENDED_WRITE &&
 		    buffer_len(&c->extended) > 0)
 			FD_SET(c->efd, writeset);
@@ -941,29 +916,6 @@
 	/* XXX: What about efd? races? */
 }
 
-/* ARGSUSED */
-static void
-channel_pre_input_draining(Channel *c, fd_set *readset, fd_set *writeset)
-{
-	if (buffer_len(&c->input) == 0) {
-		packet_start(SSH_MSG_CHANNEL_CLOSE);
-		packet_put_int(c->remote_id);
-		packet_send();
-		c->type = SSH_CHANNEL_CLOSED;
-		debug2("channel %d: closing after input drain.", c->self);
-	}
-}
-
-/* ARGSUSED */
-static void
-channel_pre_output_draining(Channel *c, fd_set *readset, fd_set *writeset)
-{
-	if (buffer_len(&c->output) == 0)
-		chan_mark_dead(c);
-	else
-		FD_SET(c->sock, writeset);
-}
-
 /*
  * This is a special state for X11 authentication spoofing.  An opened X11
  * connection (when authentication spoofing is being done) remains in this
@@ -1039,32 +991,6 @@
 }
 
 static void
-channel_pre_x11_open_13(Channel *c, fd_set *readset, fd_set *writeset)
-{
-	int ret = x11_open_helper(&c->output);
-
-	if (ret == 1) {
-		/* Start normal processing for the channel. */
-		c->type = SSH_CHANNEL_OPEN;
-		channel_pre_open_13(c, readset, writeset);
-	} else if (ret == -1) {
-		/*
-		 * We have received an X11 connection that has bad
-		 * authentication information.
-		 */
-		logit("X11 connection rejected because of wrong authentication.");
-		buffer_clear(&c->input);
-		buffer_clear(&c->output);
-		channel_close_fd(&c->sock);
-		c->sock = -1;
-		c->type = SSH_CHANNEL_CLOSED;
-		packet_start(SSH_MSG_CHANNEL_CLOSE);
-		packet_put_int(c->remote_id);
-		packet_send();
-	}
-}
-
-static void
 channel_pre_x11_open(Channel *c, fd_set *readset, fd_set *writeset)
 {
 	int ret = x11_open_helper(&c->output);
@@ -1081,11 +1007,7 @@
 		buffer_clear(&c->input);
 		chan_ibuf_empty(c);
 		buffer_clear(&c->output);
-		/* for proto v1, the peer will send an IEOF */
-		if (compat20)
-			chan_write_failed(c);
-		else
-			c->type = SSH_CHANNEL_OPEN;
+		chan_write_failed(c);
 		debug2("X11 closed %d i%d/o%d", c->self, c->istate, c->ostate);
 	}
 }
@@ -1449,28 +1371,19 @@
 		nc = channel_new("accepted x11 socket",
 		    SSH_CHANNEL_OPENING, newsock, newsock, -1,
 		    c->local_window_max, c->local_maxpacket, 0, buf, 1);
-		if (compat20) {
-			packet_start(SSH2_MSG_CHANNEL_OPEN);
-			packet_put_cstring("x11");
-			packet_put_int(nc->self);
-			packet_put_int(nc->local_window_max);
-			packet_put_int(nc->local_maxpacket);
-			/* originator ipaddr and port */
-			packet_put_cstring(remote_ipaddr);
-			if (datafellows & SSH_BUG_X11FWD) {
-				debug2("ssh2 x11 bug compat mode");
-			} else {
-				packet_put_int(remote_port);
-			}
-			packet_send();
+		packet_start(SSH2_MSG_CHANNEL_OPEN);
+		packet_put_cstring("x11");
+		packet_put_int(nc->self);
+		packet_put_int(nc->local_window_max);
+		packet_put_int(nc->local_maxpacket);
+		/* originator ipaddr and port */
+		packet_put_cstring(remote_ipaddr);
+		if (datafellows & SSH_BUG_X11FWD) {
+			debug2("ssh2 x11 bug compat mode");
 		} else {
-			packet_start(SSH_SMSG_X11_OPEN);
-			packet_put_int(nc->self);
-			if (packet_get_protocol_flags() &
-			    SSH_PROTOFLAG_HOST_IN_FWD_OPEN)
-				packet_put_cstring(buf);
-			packet_send();
+			packet_put_int(remote_port);
 		}
+		packet_send();
 		free(remote_ipaddr);
 	}
 }
@@ -1500,46 +1413,35 @@
 	free(c->remote_name);
 	c->remote_name = xstrdup(buf);
 
-	if (compat20) {
-		packet_start(SSH2_MSG_CHANNEL_OPEN);
-		packet_put_cstring(rtype);
-		packet_put_int(c->self);
-		packet_put_int(c->local_window_max);
-		packet_put_int(c->local_maxpacket);
-		if (strcmp(rtype, "direct-tcpip") == 0) {
-			/* target host, port */
-			packet_put_cstring(c->path);
-			packet_put_int(c->host_port);
-		} else if (strcmp(rtype, "direct-streamlocal@openssh.com") == 0) {
-			/* target path */
-			packet_put_cstring(c->path);
-		} else if (strcmp(rtype, "forwarded-streamlocal@openssh.com") == 0) {
-			/* listen path */
-			packet_put_cstring(c->path);
-		} else {
-			/* listen address, port */
-			packet_put_cstring(c->path);
-			packet_put_int(local_port);
-		}
-		if (strcmp(rtype, "forwarded-streamlocal@openssh.com") == 0) {
-			/* reserved for future owner/mode info */
-			packet_put_cstring("");
-		} else {
-			/* originator host and port */
-			packet_put_cstring(remote_ipaddr);
-			packet_put_int((u_int)remote_port);
-		}
-		packet_send();
-	} else {
-		packet_start(SSH_MSG_PORT_OPEN);
-		packet_put_int(c->self);
+	packet_start(SSH2_MSG_CHANNEL_OPEN);
+	packet_put_cstring(rtype);
+	packet_put_int(c->self);
+	packet_put_int(c->local_window_max);
+	packet_put_int(c->local_maxpacket);
+	if (strcmp(rtype, "direct-tcpip") == 0) {
+		/* target host, port */
 		packet_put_cstring(c->path);
 		packet_put_int(c->host_port);
-		if (packet_get_protocol_flags() &
-		    SSH_PROTOFLAG_HOST_IN_FWD_OPEN)
-			packet_put_cstring(c->remote_name);
-		packet_send();
+	} else if (strcmp(rtype, "direct-streamlocal@openssh.com") == 0) {
+		/* target path */
+		packet_put_cstring(c->path);
+	} else if (strcmp(rtype, "forwarded-streamlocal@openssh.com") == 0) {
+		/* listen path */
+		packet_put_cstring(c->path);
+	} else {
+		/* listen address, port */
+		packet_put_cstring(c->path);
+		packet_put_int(local_port);
 	}
+	if (strcmp(rtype, "forwarded-streamlocal@openssh.com") == 0) {
+		/* reserved for future owner/mode info */
+		packet_put_cstring("");
+	} else {
+		/* originator host and port */
+		packet_put_cstring(remote_ipaddr);
+		packet_put_int((u_int)remote_port);
+	}
+	packet_send();
 	free(remote_ipaddr);
 	free(local_ipaddr);
 }
@@ -1649,16 +1551,11 @@
 		    SSH_CHANNEL_OPENING, newsock, newsock, -1,
 		    c->local_window_max, c->local_maxpacket,
 		    0, "accepted auth socket", 1);
-		if (compat20) {
-			packet_start(SSH2_MSG_CHANNEL_OPEN);
-			packet_put_cstring("auth-agent@openssh.com");
-			packet_put_int(nc->self);
-			packet_put_int(c->local_window_max);
-			packet_put_int(c->local_maxpacket);
-		} else {
-			packet_start(SSH_SMSG_AGENT_OPEN);
-			packet_put_int(nc->self);
-		}
+		packet_start(SSH2_MSG_CHANNEL_OPEN);
+		packet_put_cstring("auth-agent@openssh.com");
+		packet_put_int(nc->self);
+		packet_put_int(c->local_window_max);
+		packet_put_int(c->local_maxpacket);
 		packet_send();
 	}
 }
@@ -1680,17 +1577,11 @@
 			    c->self, c->connect_ctx.host, c->connect_ctx.port);
 			channel_connect_ctx_free(&c->connect_ctx);
 			c->type = SSH_CHANNEL_OPEN;
-			if (compat20) {
-				packet_start(SSH2_MSG_CHANNEL_OPEN_CONFIRMATION);
-				packet_put_int(c->remote_id);
-				packet_put_int(c->self);
-				packet_put_int(c->local_window);
-				packet_put_int(c->local_maxpacket);
-			} else {
-				packet_start(SSH_MSG_CHANNEL_OPEN_CONFIRMATION);
-				packet_put_int(c->remote_id);
-				packet_put_int(c->self);
-			}
+			packet_start(SSH2_MSG_CHANNEL_OPEN_CONFIRMATION);
+			packet_put_int(c->remote_id);
+			packet_put_int(c->self);
+			packet_put_int(c->local_window);
+			packet_put_int(c->local_maxpacket);
 		} else {
 			debug("channel %d: connection failed: %s",
 			    c->self, strerror(err));
@@ -1705,17 +1596,12 @@
 			error("connect_to %.100s port %d: failed.",
 			    c->connect_ctx.host, c->connect_ctx.port);
 			channel_connect_ctx_free(&c->connect_ctx);
-			if (compat20) {
-				packet_start(SSH2_MSG_CHANNEL_OPEN_FAILURE);
-				packet_put_int(c->remote_id);
-				packet_put_int(SSH2_OPEN_CONNECT_FAILED);
-				if (!(datafellows & SSH_BUG_OPENFAILURE)) {
-					packet_put_cstring(strerror(err));
-					packet_put_cstring("");
-				}
-			} else {
-				packet_start(SSH_MSG_CHANNEL_OPEN_FAILURE);
-				packet_put_int(c->remote_id);
+			packet_start(SSH2_MSG_CHANNEL_OPEN_FAILURE);
+			packet_put_int(c->remote_id);
+			packet_put_int(SSH2_OPEN_CONNECT_FAILED);
+			if (!(datafellows & SSH_BUG_OPENFAILURE)) {
+				packet_put_cstring(strerror(err));
+				packet_put_cstring("");
 			}
 			chan_mark_dead(c);
 		}
@@ -1749,10 +1635,6 @@
 				debug2("channel %d: not open", c->self);
 				chan_mark_dead(c);
 				return -1;
-			} else if (compat13) {
-				buffer_clear(&c->output);
-				c->type = SSH_CHANNEL_INPUT_DRAINING;
-				debug2("channel %d: input draining.", c->self);
 			} else {
 				chan_read_failed(c);
 			}
@@ -1820,7 +1702,7 @@
 		}
 #ifdef _AIX
 		/* XXX: Later AIX versions can't push as much data to tty */
-		if (compat20 && c->wfd_isatty)
+		if (c->wfd_isatty)
 			dlen = MIN(dlen, 8*1024);
 #endif
 
@@ -1833,17 +1715,13 @@
 				debug2("channel %d: not open", c->self);
 				chan_mark_dead(c);
 				return -1;
-			} else if (compat13) {
-				buffer_clear(&c->output);
-				debug2("channel %d: input draining.", c->self);
-				c->type = SSH_CHANNEL_INPUT_DRAINING;
 			} else {
 				chan_write_failed(c);
 			}
 			return -1;
 		}
 #ifndef BROKEN_TCGETATTR_ICANON
-		if (compat20 && c->isatty && dlen >= 1 && buf[0] != '\r') {
+		if (c->isatty && dlen >= 1 && buf[0] != '\r') {
 			if (tcgetattr(c->wfd, &tio) == 0 &&
 			    !(tio.c_lflag & ECHO) && (tio.c_lflag & ICANON)) {
 				/*
@@ -1860,7 +1738,7 @@
 		buffer_consume(&c->output, len);
 	}
  out:
-	if (compat20 && olen > 0)
+	if (olen > 0)
 		c->local_consumed += olen - buffer_len(&c->output);
 	return 1;
 }
@@ -1944,8 +1822,6 @@
 {
 	channel_handle_rfd(c, readset, writeset);
 	channel_handle_wfd(c, readset, writeset);
-	if (!compat20)
-		return;
 	channel_handle_efd(c, readset, writeset);
 	channel_check_window(c);
 }
@@ -1979,9 +1855,6 @@
 	u_int need;
 	ssize_t len;
 
-	if (!compat20)
-		fatal("%s: entered with !compat20", __func__);
-
 	if (c->rfd != -1 && !c->mux_pause && FD_ISSET(c->rfd, readset) &&
 	    (c->istate == CHAN_INPUT_OPEN ||
 	    c->istate == CHAN_INPUT_WAIT_DRAIN)) {
@@ -2074,26 +1947,15 @@
 	nc->flags |= CHAN_LOCAL;
 }
 
-/* ARGSUSED */
 static void
-channel_post_output_drain_13(Channel *c, fd_set *readset, fd_set *writeset)
+channel_handler_init(void)
 {
-	int len;
+	int i;
 
-	/* Send buffered output data to the socket. */
-	if (FD_ISSET(c->sock, writeset) && buffer_len(&c->output) > 0) {
-		len = write(c->sock, buffer_ptr(&c->output),
-			    buffer_len(&c->output));
-		if (len <= 0)
-			buffer_clear(&c->output);
-		else
-			buffer_consume(&c->output, len);
+	for (i = 0; i < SSH_CHANNEL_MAX_TYPE; i++) {
+		channel_pre[i] = NULL;
+		channel_post[i] = NULL;
 	}
-}
-
-static void
-channel_handler_init_20(void)
-{
 	channel_pre[SSH_CHANNEL_OPEN] =			&channel_pre_open;
 	channel_pre[SSH_CHANNEL_X11_OPEN] =		&channel_pre_x11_open;
 	channel_pre[SSH_CHANNEL_PORT_LISTENER] =	&channel_pre_listener;
@@ -2120,64 +1982,6 @@
 	channel_post[SSH_CHANNEL_MUX_CLIENT] =		&channel_post_mux_client;
 }
 
-static void
-channel_handler_init_13(void)
-{
-	channel_pre[SSH_CHANNEL_OPEN] =			&channel_pre_open_13;
-	channel_pre[SSH_CHANNEL_X11_OPEN] =		&channel_pre_x11_open_13;
-	channel_pre[SSH_CHANNEL_X11_LISTENER] =		&channel_pre_listener;
-	channel_pre[SSH_CHANNEL_PORT_LISTENER] =	&channel_pre_listener;
-	channel_pre[SSH_CHANNEL_AUTH_SOCKET] =		&channel_pre_listener;
-	channel_pre[SSH_CHANNEL_INPUT_DRAINING] =	&channel_pre_input_draining;
-	channel_pre[SSH_CHANNEL_OUTPUT_DRAINING] =	&channel_pre_output_draining;
-	channel_pre[SSH_CHANNEL_CONNECTING] =		&channel_pre_connecting;
-	channel_pre[SSH_CHANNEL_DYNAMIC] =		&channel_pre_dynamic;
-
-	channel_post[SSH_CHANNEL_OPEN] =		&channel_post_open;
-	channel_post[SSH_CHANNEL_X11_LISTENER] =	&channel_post_x11_listener;
-	channel_post[SSH_CHANNEL_PORT_LISTENER] =	&channel_post_port_listener;
-	channel_post[SSH_CHANNEL_AUTH_SOCKET] =		&channel_post_auth_listener;
-	channel_post[SSH_CHANNEL_OUTPUT_DRAINING] =	&channel_post_output_drain_13;
-	channel_post[SSH_CHANNEL_CONNECTING] =		&channel_post_connecting;
-	channel_post[SSH_CHANNEL_DYNAMIC] =		&channel_post_open;
-}
-
-static void
-channel_handler_init_15(void)
-{
-	channel_pre[SSH_CHANNEL_OPEN] =			&channel_pre_open;
-	channel_pre[SSH_CHANNEL_X11_OPEN] =		&channel_pre_x11_open;
-	channel_pre[SSH_CHANNEL_X11_LISTENER] =		&channel_pre_listener;
-	channel_pre[SSH_CHANNEL_PORT_LISTENER] =	&channel_pre_listener;
-	channel_pre[SSH_CHANNEL_AUTH_SOCKET] =		&channel_pre_listener;
-	channel_pre[SSH_CHANNEL_CONNECTING] =		&channel_pre_connecting;
-	channel_pre[SSH_CHANNEL_DYNAMIC] =		&channel_pre_dynamic;
-
-	channel_post[SSH_CHANNEL_X11_LISTENER] =	&channel_post_x11_listener;
-	channel_post[SSH_CHANNEL_PORT_LISTENER] =	&channel_post_port_listener;
-	channel_post[SSH_CHANNEL_AUTH_SOCKET] =		&channel_post_auth_listener;
-	channel_post[SSH_CHANNEL_OPEN] =		&channel_post_open;
-	channel_post[SSH_CHANNEL_CONNECTING] =		&channel_post_connecting;
-	channel_post[SSH_CHANNEL_DYNAMIC] =		&channel_post_open;
-}
-
-static void
-channel_handler_init(void)
-{
-	int i;
-
-	for (i = 0; i < SSH_CHANNEL_MAX_TYPE; i++) {
-		channel_pre[i] = NULL;
-		channel_post[i] = NULL;
-	}
-	if (compat20)
-		channel_handler_init_20();
-	else if (compat13)
-		channel_handler_init_13();
-	else
-		channel_handler_init_15();
-}
-
 /* gc dead channels */
 static void
 channel_garbage_collect(Channel *c)
@@ -2312,16 +2116,9 @@
 		 * We are only interested in channels that can have buffered
 		 * incoming data.
 		 */
-		if (compat13) {
-			if (c->type != SSH_CHANNEL_OPEN &&
-			    c->type != SSH_CHANNEL_INPUT_DRAINING)
-				continue;
-		} else {
-			if (c->type != SSH_CHANNEL_OPEN)
-				continue;
-		}
-		if (compat20 &&
-		    (c->flags & (CHAN_CLOSE_SENT|CHAN_CLOSE_RCVD))) {
+		if (c->type != SSH_CHANNEL_OPEN)
+			continue;
+		if ((c->flags & (CHAN_CLOSE_SENT|CHAN_CLOSE_RCVD))) {
 			/* XXX is this true? */
 			debug3("channel %d: will not send data after close", c->self);
 			continue;
@@ -2359,24 +2156,12 @@
 			 * Send some data for the other side over the secure
 			 * connection.
 			 */
-			if (compat20) {
-				if (len > c->remote_window)
-					len = c->remote_window;
-				if (len > c->remote_maxpacket)
-					len = c->remote_maxpacket;
-			} else {
-				if (packet_is_interactive()) {
-					if (len > 1024)
-						len = 512;
-				} else {
-					/* Keep the packets at reasonable size. */
-					if (len > packet_get_maxsize()/2)
-						len = packet_get_maxsize()/2;
-				}
-			}
+			if (len > c->remote_window)
+				len = c->remote_window;
+			if (len > c->remote_maxpacket)
+				len = c->remote_maxpacket;
 			if (len > 0) {
-				packet_start(compat20 ?
-				    SSH2_MSG_CHANNEL_DATA : SSH_MSG_CHANNEL_DATA);
+				packet_start(SSH2_MSG_CHANNEL_DATA);
 				packet_put_int(c->remote_id);
 				packet_put_string(buffer_ptr(&c->input), len);
 				packet_send();
@@ -2384,8 +2169,6 @@
 				c->remote_window -= len;
 			}
 		} else if (c->istate == CHAN_INPUT_WAIT_DRAIN) {
-			if (compat13)
-				fatal("cannot happen: istate == INPUT_WAIT_DRAIN for proto 1.3");
 			/*
 			 * input-buffer is empty and read-socket shutdown:
 			 * tell peer, that we will not send more data: send IEOF.
@@ -2398,8 +2181,7 @@
 				chan_ibuf_empty(c);
 		}
 		/* Send extended data, i.e. stderr */
-		if (compat20 &&
-		    !(c->flags & CHAN_EOF_SENT) &&
+		if (!(c->flags & CHAN_EOF_SENT) &&
 		    c->remote_window > 0 &&
 		    (len = buffer_len(&c->extended)) > 0 &&
 		    c->extended_usage == CHAN_EXTENDED_READ) {
@@ -2738,26 +2520,23 @@
 	 * that window updates are sent back.  Otherwise the connection might
 	 * deadlock.
 	 */
-	if (!compat13 && c->ostate != CHAN_OUTPUT_OPEN) {
-		if (compat20) {
-			c->local_window -= win_len;
-			c->local_consumed += win_len;
-		}
+	if (c->ostate != CHAN_OUTPUT_OPEN) {
+		c->local_window -= win_len;
+		c->local_consumed += win_len;
 		return 0;
 	}
 
-	if (compat20) {
-		if (win_len > c->local_maxpacket) {
-			logit("channel %d: rcvd big packet %d, maxpack %d",
-			    c->self, win_len, c->local_maxpacket);
-		}
-		if (win_len > c->local_window) {
-			logit("channel %d: rcvd too much data %d, win %d",
-			    c->self, win_len, c->local_window);
-			return 0;
-		}
-		c->local_window -= win_len;
+	if (win_len > c->local_maxpacket) {
+		logit("channel %d: rcvd big packet %d, maxpack %d",
+		    c->self, win_len, c->local_maxpacket);
 	}
+	if (win_len > c->local_window) {
+		logit("channel %d: rcvd too much data %d, win %d",
+		    c->self, win_len, c->local_window);
+		return 0;
+	}
+	c->local_window -= win_len;
+
 	if (c->datagram)
 		buffer_put_string(&c->output, data, data_len);
 	else
@@ -2942,17 +2721,15 @@
 	c->remote_id = remote_id;
 	c->type = SSH_CHANNEL_OPEN;
 
-	if (compat20) {
-		c->remote_window = packet_get_int();
-		c->remote_maxpacket = packet_get_int();
-		if (c->open_confirm) {
-			debug2("callback start");
-			c->open_confirm(c->self, 1, c->open_confirm_ctx);
-			debug2("callback done");
-		}
-		debug2("channel %d: open confirm rwindow %u rmax %u", c->self,
-		    c->remote_window, c->remote_maxpacket);
+	c->remote_window = packet_get_int();
+	c->remote_maxpacket = packet_get_int();
+	if (c->open_confirm) {
+		debug2("callback start");
+		c->open_confirm(c->self, 1, c->open_confirm_ctx);
+		debug2("callback done");
 	}
+	debug2("channel %d: open confirm rwindow %u rmax %u", c->self,
+	    c->remote_window, c->remote_maxpacket);
 	packet_check_eom();
 	return 0;
 }
@@ -2992,21 +2769,19 @@
 	if (c->type != SSH_CHANNEL_OPENING)
 		packet_disconnect("Received open failure for "
 		    "non-opening channel %d.", id);
-	if (compat20) {
-		reason = packet_get_int();
-		if (!(datafellows & SSH_BUG_OPENFAILURE)) {
-			msg  = packet_get_string(NULL);
-			lang = packet_get_string(NULL);
-		}
-		logit("channel %d: open failed: %s%s%s", id,
-		    reason2txt(reason), msg ? ": ": "", msg ? msg : "");
-		free(msg);
-		free(lang);
-		if (c->open_confirm) {
-			debug2("callback start");
-			c->open_confirm(c->self, 0, c->open_confirm_ctx);
-			debug2("callback done");
-		}
+	reason = packet_get_int();
+	if (!(datafellows & SSH_BUG_OPENFAILURE)) {
+		msg  = packet_get_string(NULL);
+		lang = packet_get_string(NULL);
+	}
+	logit("channel %d: open failed: %s%s%s", id,
+	    reason2txt(reason), msg ? ": ": "", msg ? msg : "");
+	free(msg);
+	free(lang);
+	if (c->open_confirm) {
+		debug2("callback start");
+		c->open_confirm(c->self, 0, c->open_confirm_ctx);
+		debug2("callback done");
 	}
 	packet_check_eom();
 	/* Schedule the channel for cleanup/deletion. */
@@ -3022,9 +2797,6 @@
 	int id;
 	u_int adjust, tmp;
 
-	if (!compat20)
-		return 0;
-
 	/* Get the channel number and verify it. */
 	id = packet_get_int();
 	c = channel_lookup(id);
@@ -3581,49 +3353,24 @@
 int
 channel_request_remote_forwarding(struct Forward *fwd)
 {
-	int type, success = 0, idx = -1;
+	int success = 0, idx = -1;
 
 	/* Send the forward request to the remote side. */
-	if (compat20) {
-		packet_start(SSH2_MSG_GLOBAL_REQUEST);
-		if (fwd->listen_path != NULL) {
-		    packet_put_cstring("streamlocal-forward@openssh.com");
-		    packet_put_char(1);		/* boolean: want reply */
-		    packet_put_cstring(fwd->listen_path);
-		} else {
-		    packet_put_cstring("tcpip-forward");
-		    packet_put_char(1);		/* boolean: want reply */
-		    packet_put_cstring(channel_rfwd_bind_host(fwd->listen_host));
-		    packet_put_int(fwd->listen_port);
-		}
-		packet_send();
-		packet_write_wait();
-		/* Assume that server accepts the request */
-		success = 1;
-	} else if (fwd->listen_path == NULL) {
-		packet_start(SSH_CMSG_PORT_FORWARD_REQUEST);
-		packet_put_int(fwd->listen_port);
-		packet_put_cstring(fwd->connect_host);
-		packet_put_int(fwd->connect_port);
-		packet_send();
-		packet_write_wait();
-
-		/* Wait for response from the remote side. */
-		type = packet_read();
-		switch (type) {
-		case SSH_SMSG_SUCCESS:
-			success = 1;
-			break;
-		case SSH_SMSG_FAILURE:
-			break;
-		default:
-			/* Unknown packet */
-			packet_disconnect("Protocol error for port forward request:"
-			    "received packet type %d.", type);
-		}
+	packet_start(SSH2_MSG_GLOBAL_REQUEST);
+	if (fwd->listen_path != NULL) {
+	    packet_put_cstring("streamlocal-forward@openssh.com");
+	    packet_put_char(1);		/* boolean: want reply */
+	    packet_put_cstring(fwd->listen_path);
 	} else {
-		logit("Warning: Server does not support remote stream local forwarding.");
+	    packet_put_cstring("tcpip-forward");
+	    packet_put_char(1);		/* boolean: want reply */
+	    packet_put_cstring(channel_rfwd_bind_host(fwd->listen_host));
+	    packet_put_int(fwd->listen_port);
 	}
+	packet_send();
+	packet_write_wait();
+	/* Assume that server accepts the request */
+	success = 1;
 	if (success) {
 		/* Record that connection to this host/port is permitted. */
 		permitted_opens = xreallocarray(permitted_opens,
@@ -3722,9 +3469,6 @@
 {
 	int i;
 
-	if (!compat20)
-		return -1;
-
 	for (i = 0; i < num_permitted_opens; i++) {
 		if (open_listen_match_tcpip(&permitted_opens[i], host, port, 0))
 			break;
@@ -3761,9 +3505,6 @@
 {
 	int i;
 
-	if (!compat20)
-		return -1;
-
 	for (i = 0; i < num_permitted_opens; i++) {
 		if (open_listen_match_streamlocal(&permitted_opens[i], path))
 			break;
@@ -4644,12 +4385,8 @@
 	new_data = tohex(x11_fake_data, data_len);
 
 	/* Send the request packet. */
-	if (compat20) {
-		channel_request_start(client_session_id, "x11-req", want_reply);
-		packet_put_char(0);	/* XXX bool single connection */
-	} else {
-		packet_start(SSH_CMSG_X11_REQUEST_FORWARDING);
-	}
+	channel_request_start(client_session_id, "x11-req", want_reply);
+	packet_put_char(0);	/* XXX bool single connection */
 	packet_put_cstring(proto);
 	packet_put_cstring(new_data);
 	packet_put_int(screen_number);
