diff --git a/common-session.c b/common-session.c
index 6bcb7fa9363f774f2194427c283463180b83f27f..e23be66d2bcef429f1602d22599efb978d774bbc 100644
--- a/common-session.c
+++ b/common-session.c
@@ -186,13 +186,7 @@ void session_loop(void(*loophandler)()) {
 		/* check for auth timeout, rekeying required etc */
 		checktimeouts();
 
-		/* process session socket's incoming/outgoing data */
-		if (ses.sock_out != -1) {
-			if (FD_ISSET(ses.sock_out, &writefd) && !isempty(&ses.writequeue)) {
-				write_packet();
-			}
-		}
-
+		/* process session socket's incoming data */
 		if (ses.sock_in != -1) {
 			if (FD_ISSET(ses.sock_in, &readfd)) {
 				if (!ses.remoteident) {
@@ -218,6 +212,14 @@ void session_loop(void(*loophandler)()) {
 		 * during rekeying ) */
 		channelio(&readfd, &writefd);
 
+		/* process session socket's outgoing data */
+		if (ses.sock_out != -1) {
+			if (!isempty(&ses.writequeue)) {
+				write_packet();
+			}
+		}
+
+
 		if (loophandler) {
 			loophandler();
 		}