diff --git a/cli-session.c b/cli-session.c
index 815f5b6a1b6c4fd857dcbd23ae9a288542f76b31..7019e9325ed9f8902c6f109b221e508a74282c4a 100644
--- a/cli-session.c
+++ b/cli-session.c
@@ -124,6 +124,8 @@ void cli_session(int sock_in, int sock_out, struct dropbear_progress_connection
 	/* Exchange identification */
 	send_session_identification();
 
+	kexfirstinitialise(); /* initialise the kex state */
+
 	send_msg_kexinit();
 
 	session_loop(cli_sessionloop);
diff --git a/common-session.c b/common-session.c
index 083b5c52f30a96b4866dd00c02f4569086778b5d..e12584ca6f6f17bb609a7cbcbe89418a111fb408 100644
--- a/common-session.c
+++ b/common-session.c
@@ -90,8 +90,6 @@ void common_session_init(int sock_in, int sock_out) {
 	ses.maxfd = MAX(ses.maxfd, ses.signal_pipe[0]);
 	ses.maxfd = MAX(ses.maxfd, ses.signal_pipe[1]);
 	
-	kexfirstinitialise(); /* initialise the kex state */
-
 	ses.writepayload = buf_new(TRANS_MAX_PAYLOAD_LEN);
 	ses.transseq = 0;
 
diff --git a/svr-session.c b/svr-session.c
index 8485905c33d1c75894fe7de90afd5dcac8ef9821..d638d59298a8ee8fca1fb164954e30dd1089792e 100644
--- a/svr-session.c
+++ b/svr-session.c
@@ -138,6 +138,8 @@ void svr_session(int sock, int childpipe) {
 
 	/* exchange identification, version etc */
 	send_session_identification();
+	
+	kexfirstinitialise(); /* initialise the kex state */
 
 	/* start off with key exchange */
 	send_msg_kexinit();