diff --git a/src/imap/ngx_imap.c b/src/imap/ngx_imap.c
index b8a75ad..2b768dd 100644
--- a/src/imap/ngx_imap.c
+++ b/src/imap/ngx_imap.c
@@ -28,12 +28,12 @@
       ngx_null_command
 };
 
-    
+
 static ngx_core_module_t  ngx_imap_module_ctx = {
     ngx_string("imap"),
     NULL,
     NULL
-};  
+};
 
 
 ngx_module_t  ngx_imap_module = {
@@ -164,7 +164,7 @@
         /* init imap{} main_conf's */
 
         if (module->init_main_conf) {
-            rv = module->init_main_conf(cf, ctx->main_conf[mi]); 
+            rv = module->init_main_conf(cf, ctx->main_conf[mi]);
             if (rv != NGX_CONF_OK) {
                 *cf = pcf;
                 return rv;
@@ -172,9 +172,9 @@
         }
 
         for (s = 0; s < cmcf->servers.nelts; s++) {
-    
+
             /* merge the server{}s' srv_conf's */
-    
+
             if (module->merge_srv_conf) {
                 rv = module->merge_srv_conf(cf,
                                             ctx->srv_conf[mi],
@@ -187,9 +187,9 @@
         }
     }
 
-    /* imap{}'s cf->ctx was needed while the configuration merging */ 
-    
-    *cf = pcf; 
+    /* imap{}'s cf->ctx was needed while the configuration merging */
+
+    *cf = pcf;
 
     return NGX_CONF_OK;
 }
diff --git a/src/imap/ngx_imap_auth_http_module.c b/src/imap/ngx_imap_auth_http_module.c
index dfe0c20..75350d5 100644
--- a/src/imap/ngx_imap_auth_http_module.c
+++ b/src/imap/ngx_imap_auth_http_module.c
@@ -217,7 +217,7 @@
     ngx_log_debug0(NGX_LOG_DEBUG_IMAP, wev->log, 0,
                    "imap auth http write handler");
 
-    if (wev->timedout) {  
+    if (wev->timedout) {
         ngx_log_error(NGX_LOG_ERR, wev->log, NGX_ETIMEDOUT,
                       "auth http server %V timed out",
                       &ctx->peer.peers->peer[0].name);
@@ -275,7 +275,7 @@
 
     ctx = ngx_imap_get_module_ctx(s, ngx_imap_auth_http_module);
 
-    if (rev->timedout) {  
+    if (rev->timedout) {
         ngx_log_error(NGX_LOG_ERR, rev->log, NGX_ETIMEDOUT,
                       "auth http server %V timed out",
                       &ctx->peer.peers->peer[0].name);
@@ -384,7 +384,7 @@
                 state = sw_almost_done;
 
                 break;
-            case LF: 
+            case LF:
                 goto done;
             }
             break;
@@ -767,11 +767,11 @@
         sw_space_before_value,
         sw_value,
         sw_space_after_value,
-        sw_almost_done, 
+        sw_almost_done,
         sw_header_almost_done
     } state;
 
-    state = ctx->state; 
+    state = ctx->state;
     hash = ctx->hash;
 
     for (p = ctx->response->pos; p < ctx->response->last; p++) {
@@ -784,10 +784,10 @@
 
             switch (ch) {
             case CR:
-                ctx->header_end = p; 
+                ctx->header_end = p;
                 state = sw_header_almost_done;
                 break;
-            case LF: 
+            case LF:
                 ctx->header_end = p;
                 goto header_done;
             default:
@@ -1061,9 +1061,9 @@
 
 static void *
 ngx_imap_auth_http_create_conf(ngx_conf_t *cf)
-{           
+{
     ngx_imap_auth_http_conf_t  *ahcf;
-            
+
     ahcf = ngx_pcalloc(cf->pool, sizeof(ngx_imap_auth_http_conf_t));
     if (ahcf == NULL) {
         return NGX_CONF_ERROR;
@@ -1128,7 +1128,7 @@
 
 static char *
 ngx_imap_auth_http(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
-{   
+{
     ngx_imap_auth_http_conf_t *ahcf = conf;
 
     ngx_str_t                   *value, *url;
@@ -1159,13 +1159,13 @@
         ahcf->host_header.len = sizeof("localhost") - 1;
         ahcf->host_header.data = (u_char *) "localhost";
         ahcf->uri = unix_upstream.uri;
-    
+
 #else
         ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
                            "the unix domain sockets are not supported "
                            "on this platform");
         return NGX_CONF_ERROR;
-    
+
 #endif
 
     } else {
@@ -1196,7 +1196,7 @@
 
 static char *
 ngx_imap_auth_http_header(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
-{   
+{
     ngx_imap_auth_http_conf_t *ahcf = conf;
 
     ngx_str_t        *value;
diff --git a/src/imap/ngx_imap_core_module.c b/src/imap/ngx_imap_core_module.c
index d037ad8..6408e54 100644
--- a/src/imap/ngx_imap_core_module.c
+++ b/src/imap/ngx_imap_core_module.c
@@ -127,7 +127,7 @@
 
 static void *
 ngx_imap_core_create_main_conf(ngx_conf_t *cf)
-{           
+{
     ngx_imap_core_main_conf_t  *cmcf;
 
     cmcf = ngx_pcalloc(cf->pool, sizeof(ngx_imap_core_main_conf_t));
@@ -147,9 +147,9 @@
 
 static void *
 ngx_imap_core_create_srv_conf(ngx_conf_t *cf)
-{           
+{
     ngx_imap_core_srv_conf_t  *cscf;
-            
+
     cscf = ngx_pcalloc(cf->pool, sizeof(ngx_imap_core_srv_conf_t));
     if (cscf == NULL) {
         return NULL;
@@ -299,7 +299,7 @@
 
     imap_ctx = cf->ctx;
     ctx->main_conf = imap_ctx->main_conf;
-    
+
     /* the server{}'s srv_conf */
 
     ctx->srv_conf = ngx_pcalloc(cf->pool, sizeof(void *) * ngx_imap_max_module);
@@ -388,7 +388,7 @@
 
         if (in_addr == INADDR_NONE) {
             h = gethostbyname((const char *) inet_upstream.host.data);
-    
+
             if (h == NULL || h->h_addr_list[0] == NULL) {
                 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
                                    "can not resolve host \"%s\" "
@@ -407,7 +407,7 @@
 
     ls = ngx_listening_inet_stream_socket(cf, in_addr, inet_upstream.port);
     if (ls == NULL) {
-        return NGX_CONF_ERROR; 
+        return NGX_CONF_ERROR;
     }
 
     ls->backlog = -1;
diff --git a/src/imap/ngx_imap_handler.c b/src/imap/ngx_imap_handler.c
index ac5db73..ddff96a 100644
--- a/src/imap/ngx_imap_handler.c
+++ b/src/imap/ngx_imap_handler.c
@@ -17,7 +17,6 @@
 
 #if (NGX_IMAP_SSL)
 static void ngx_imap_ssl_handshake_handler(ngx_connection_t *c);
-static void ngx_imap_ssl_close_handler(ngx_event_t *ev);
 #endif
 
 
@@ -58,7 +57,7 @@
     if (lctx == NULL) {
         ngx_imap_close_connection(c);
         return;
-    } 
+    }
 
     lctx->client = &c->addr_text;
     lctx->session = NULL;
@@ -106,7 +105,7 @@
 
 static void
 ngx_imap_ssl_handshake_handler(ngx_connection_t *c)
-{   
+{
     if (c->ssl->handshaked) {
         ngx_imap_init_session(c);
         return;
@@ -181,6 +180,7 @@
 
     if (wev->timedout) {
         ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
+        c->timedout = 1;
         ngx_imap_close_connection(c);
         return;
     }
@@ -246,6 +246,7 @@
 
     if (rev->timedout) {
         ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
+        c->timedout = 1;
         ngx_imap_close_connection(c);
         return;
     }
@@ -298,6 +299,7 @@
 
     if (rev->timedout) {
         ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
+        c->timedout = 1;
         ngx_imap_close_connection(c);
         return;
     }
@@ -498,6 +500,7 @@
 
     if (rev->timedout) {
         ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
+        c->timedout = 1;
         ngx_imap_close_connection(c);
         return;
     }
@@ -725,8 +728,7 @@
 
     if (c->ssl) {
         if (ngx_ssl_shutdown(c) == NGX_AGAIN) {
-            c->read->handler = ngx_imap_ssl_close_handler;
-            c->write->handler = ngx_imap_ssl_close_handler;
+            c->ssl->handler = ngx_imap_close_connection;
             return;
         }
     }
@@ -743,27 +745,6 @@
 }
 
 
-#if (NGX_IMAP_SSL)
- 
-static void
-ngx_imap_ssl_close_handler(ngx_event_t *ev)
-{
-    ngx_connection_t  *c;
-
-    c = ev->data;
-
-    ngx_log_debug0(NGX_LOG_DEBUG_IMAP, ev->log, 0, "http ssl close handler");
-
-    if (ngx_ssl_shutdown(c) == NGX_AGAIN) {
-        return;
-    }
-
-    ngx_imap_close_connection(c);
-}
-
-#endif
-
-
 static u_char *
 ngx_imap_log_error(ngx_log_t *log, u_char *buf, size_t len)
 {
@@ -776,7 +757,7 @@
         len -= p - buf;
         buf = p;
     }
-    
+
     ctx = log->data;
 
     p = ngx_snprintf(buf, len, ", client: %V", ctx->client);
diff --git a/src/imap/ngx_imap_parse.c b/src/imap/ngx_imap_parse.c
index 473825c..d8c436b 100644
--- a/src/imap/ngx_imap_parse.c
+++ b/src/imap/ngx_imap_parse.c
@@ -473,7 +473,7 @@
         case sw_argument:
             switch (ch) {
 
-         /* 
+         /*
           * the space should be considered part of the at username
           * or password, but not of argument in other commands
           *
diff --git a/src/imap/ngx_imap_proxy_module.c b/src/imap/ngx_imap_proxy_module.c
index e1cccf1..6232960 100644
--- a/src/imap/ngx_imap_proxy_module.c
+++ b/src/imap/ngx_imap_proxy_module.c
@@ -172,6 +172,7 @@
     if (rev->timedout) {
         ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT,
                       "upstream timed out");
+        c->timedout = 1;
         ngx_imap_proxy_internal_server_error(s);
         return;
     }
@@ -310,6 +311,7 @@
     if (rev->timedout) {
         ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT,
                       "upstream timed out");
+        c->timedout = 1;
         ngx_imap_proxy_internal_server_error(s);
         return;
     }
@@ -501,6 +503,8 @@
         if (c == s->connection) {
             ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT,
                           "client timed out");
+            c->timedout = 1;
+
         } else {
             ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT,
                           "upstream timed out");
@@ -652,9 +656,9 @@
 
 static void *
 ngx_imap_proxy_create_conf(ngx_conf_t *cf)
-{           
+{
     ngx_imap_proxy_conf_t  *pcf;
-            
+
     pcf = ngx_pcalloc(cf->pool, sizeof(ngx_imap_proxy_conf_t));
     if (pcf == NULL) {
         return NGX_CONF_ERROR;
diff --git a/src/imap/ngx_imap_ssl_module.c b/src/imap/ngx_imap_ssl_module.c
index f92dba6..cbbbb68 100644
--- a/src/imap/ngx_imap_ssl_module.c
+++ b/src/imap/ngx_imap_ssl_module.c
@@ -27,7 +27,7 @@
 #endif
 
 
-static ngx_conf_bitmask_t  ngx_imap_ssl_protocols[] = { 
+static ngx_conf_bitmask_t  ngx_imap_ssl_protocols[] = {
     { ngx_string("SSLv2"), NGX_SSL_SSLv2 },
     { ngx_string("SSLv3"), NGX_SSL_SSLv3 },
     { ngx_string("TLSv1"), NGX_SSL_TLSv1 },
@@ -124,16 +124,16 @@
 
 static void *
 ngx_imap_ssl_create_conf(ngx_conf_t *cf)
-{           
+{
     ngx_imap_ssl_conf_t  *scf;
-            
+
     scf = ngx_pcalloc(cf->pool, sizeof(ngx_imap_ssl_conf_t));
     if (scf == NULL) {
         return NGX_CONF_ERROR;
     }
 
     /*
-     * set by ngx_pcalloc():  
+     * set by ngx_pcalloc():
      *
      *     scf->protocols = 0;
      *
@@ -240,12 +240,12 @@
     return NGX_CONF_OK;
 }
 
-    
+
 #if !defined (SSL_OP_CIPHER_SERVER_PREFERENCE)
-    
+
 static char *
 ngx_imap_ssl_nosupported(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
-{   
+{
     ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
                        "\"%V\" directive is available only in %s,",
                        &cmd->name, cmd->post);
