diff --git a/examples/sample.c b/examples/sample.c
index c847635..e0aaab8 100644
--- a/examples/sample.c
+++ b/examples/sample.c
@@ -240,7 +240,7 @@ static void select_loop(ssh_session session,ssh_channel channel){
             channels[0]=NULL;
         }
         if(channels[0]){
-            while(channel && channel_is_open(channel) && channel_poll(channel,0)){
+            while(channel && channel_is_open(channel) && channel_poll(channel,0)>0){
                 lus=channel_read_buffer(channel,readbuf,0,0);
                 if(lus==-1){
                     fprintf(stderr, "Error reading channel: %s\n",
@@ -259,7 +259,7 @@ static void select_loop(ssh_session session,ssh_channel channel){
                       return;
                     }
             }
-            while(channel && channel_is_open(channel) && channel_poll(channel,1)){ /* stderr */
+            while(channel && channel_is_open(channel) && channel_poll(channel,1)>0){ /* stderr */
                 lus=channel_read_buffer(channel,readbuf,0,1);
                 if(lus==-1){
                     fprintf(stderr, "Error reading channel: %s\n",
@@ -332,7 +332,7 @@ static void select_loop(ssh_session session,ssh_channel channel){
 				channels[0]=NULL;
 			}
 			if(outchannels[0]){
-				while(channel && channel_is_open(channel) && channel_poll(channel,0)){
+				while(channel && channel_is_open(channel) && channel_poll(channel,0)>0){
 					lus=channel_read(channel,buffer,sizeof(buffer),0);
 					if(lus==-1){
 						fprintf(stderr, "Error reading channel: %s\n",
@@ -351,7 +351,7 @@ static void select_loop(ssh_session session,ssh_channel channel){
                                                     return;
                                                 }
 				}
-				while(channel && channel_is_open(channel) && channel_poll(channel,1)){ /* stderr */
+				while(channel && channel_is_open(channel) && channel_poll(channel,1)>0){ /* stderr */
 					lus=channel_read(channel,buffer,sizeof(buffer),1);
 					if(lus==-1){
 						fprintf(stderr, "Error reading channel: %s\n",
@@ -448,7 +448,7 @@ static int client(ssh_session session){
   state=verify_knownhost(session);
   if (state != 0)
   	return -1;
-  ssh_userauth_none(session, NULL);
+  //ssh_userauth_none(session, NULL);
   banner=ssh_get_issue_banner(session);
   if(banner){
       printf("%s\n",banner);
diff --git a/libssh/auth.c b/libssh/auth.c
index b0e0e90..d9be37d 100644
--- a/libssh/auth.c
+++ b/libssh/auth.c
@@ -218,7 +218,8 @@ static int wait_auth_status(ssh_session session) {
   enter_function();
 
   while (session->auth_state == SSH_AUTH_STATE_NONE) {
-    ssh_handle_packets(session,-1);
+    if (ssh_handle_packets(session,-1) != SSH_OK)
+      break;
   }
   switch(session->auth_state){
     case SSH_AUTH_STATE_ERROR:
@@ -1510,6 +1511,14 @@ int ssh_userauth_kbdint(ssh_session session, const char *user,
   enter_function();
 
   if (session->kbdint == NULL) {
+
+    session->kbdint = kbdint_new();
+    if (session->kbdint == NULL) {
+      ssh_set_error(session, SSH_FATAL, "Not enough space");
+      leave_function();
+      return SSH_AUTH_ERROR;
+    }
+
     /* first time we call. we must ask for a challenge */
     if (user == NULL) {
       if ((user = session->username) == NULL) {
diff --git a/libssh/auth1.c b/libssh/auth1.c
index 3571d76..30da081 100644
--- a/libssh/auth1.c
+++ b/libssh/auth1.c
@@ -38,7 +38,8 @@ static int wait_auth1_status(ssh_session session) {
   enter_function();
   /* wait for a packet */
   while(session->auth_state == SSH_AUTH_STATE_NONE)
-    ssh_handle_packets(session,-1);
+    if (ssh_handle_packets(session,-1) != SSH_OK)
+      break;
   ssh_log(session,SSH_LOG_PROTOCOL,"Auth state : %d",session->auth_state);
   leave_function();
   switch(session->auth_state) {
diff --git a/libssh/client.c b/libssh/client.c
index 0d34a8b..805b144 100644
--- a/libssh/client.c
+++ b/libssh/client.c
@@ -227,7 +227,7 @@ int ssh_send_banner(ssh_session session, int server) {
     }
   }
 
-  snprintf(buffer, 128, "%s\r\n", banner);
+  snprintf(buffer, 128, "%s\n", banner);
 
   if (ssh_socket_write(session->socket, buffer, strlen(buffer)) == SSH_ERROR) {
     leave_function();
@@ -645,7 +645,7 @@ void ssh_connection_callback(ssh_session session){
 		case SSH_SESSION_STATE_AUTHENTICATING:
 			break;
 		case SSH_SESSION_STATE_ERROR:
-		  break;
+			goto error;
 		default:
 			ssh_set_error(session,SSH_FATAL,"Invalid state %d",session->session_state);
 	}
diff --git a/libssh/packet1.c b/libssh/packet1.c
index 7a68c12..f7df911 100644
--- a/libssh/packet1.c
+++ b/libssh/packet1.c
@@ -337,6 +337,7 @@ SSH_PACKET_CALLBACK(ssh_packet_smsg_success1){
     return SSH_PACKET_USED;
   } else if(session->session_state==SSH_SESSION_STATE_AUTHENTICATING){
     ssh_auth1_handler(session,type);
+    session->session_state=SSH_SESSION_STATE_AUTHENTICATED;
     return SSH_PACKET_USED;
   } else {
     return ssh_packet_channel_success(session,type,packet,user);
