diff --git a/common-session.c b/common-session.c
index 40c66e856fca25861ae9b87154b82354df997ab8..6882dced292301475332842f89b37bf43af78539 100644
--- a/common-session.c
+++ b/common-session.c
@@ -244,7 +244,11 @@ void session_cleanup() {
 	if (ses.extra_session_cleanup) {
 		ses.extra_session_cleanup();
 	}
+
+	chancleanup();
 	
+	/* Cleaning up keys must happen after other cleanup
+	functions which might queue packets */
 	if (ses.session_id) {
 		buf_burn(ses.session_id);
 		buf_free(ses.session_id);
@@ -258,8 +262,6 @@ void session_cleanup() {
 	m_burn(ses.keys, sizeof(struct key_context));
 	m_free(ses.keys);
 
-	chancleanup();
-
 	TRACE(("leave session_cleanup"))
 }