diff --git a/common-session.c b/common-session.c
index b5147966c634bc6ba54dfbb8d88ea1374432fcd3..6b357bf0d7f1b9db25bde83b796a7900cf848c74 100644
--- a/common-session.c
+++ b/common-session.c
@@ -33,7 +33,6 @@
 #include "random.h"
 #include "kex.h"
 #include "channel.h"
-#include "atomicio.h"
 #include "runopts.h"
 
 static void checktimeouts();
@@ -50,8 +49,6 @@ int sessinitdone = 0; /* GLOBAL */
 /* this is set when we get SIGINT or SIGTERM, the handler is in main.c */
 int exitflag = 0; /* GLOBAL */
 
-
-
 /* called only at the start of a session, set up initial state */
 void common_session_init(int sock_in, int sock_out) {
 
@@ -257,13 +254,12 @@ void session_cleanup() {
 	TRACE(("leave session_cleanup"))
 }
 
-
 void send_session_identification() {
-	/* write our version string, this blocks */
-	if (atomicio(write, ses.sock_out, LOCAL_IDENT "\r\n",
-				strlen(LOCAL_IDENT "\r\n")) == DROPBEAR_FAILURE) {
-		ses.remoteclosed();
-	}
+	buffer *writebuf = buf_new(strlen(LOCAL_IDENT "\r\n") + 1);
+	buf_putbytes(writebuf, LOCAL_IDENT "\r\n", strlen(LOCAL_IDENT "\r\n"));
+	buf_putbyte(writebuf, 0x0); // packet type
+	buf_setpos(writebuf, 0);
+	enqueue(&ses.writequeue, writebuf);
 }
 
 static void read_session_identification() {
diff --git a/process-packet.c b/process-packet.c
index 384e4494fe24a1c458936d66bbb1a76cdc6b90fc..128eb72bbf63a325a716c1a16a6d2a79a708ea35 100644
--- a/process-packet.c
+++ b/process-packet.c
@@ -48,7 +48,7 @@ void process_packet() {
 	TRACE2(("enter process_packet"))
 
 	type = buf_getbyte(ses.payload);
-	TRACE(("process_packet: packet type = %d", type))
+	TRACE(("process_packet: packet type = %d,  len %d", type, ses.payload->len))
 
 	ses.lastpacket = type;