diff --git a/src/event/ngx_event_connectex.c b/src/event/ngx_event_connectex.c
index 79833c6..ed12283 100644
--- a/src/event/ngx_event_connectex.c
+++ b/src/event/ngx_event_connectex.c
@@ -14,8 +14,8 @@
 static HANDLE            pending_connect_event;
 
 __declspec(thread) int                nevents = 0;
-__declspec(thread) WSAEVENT           events[WSA_MAXIMUM_WAIT_EVENTS];
-__declspec(thread) ngx_connection_t  *conn[WSA_MAXIMUM_WAIT_EVENTS];
+__declspec(thread) WSAEVENT           events[WSA_MAXIMUM_WAIT_EVENTS + 1];
+__declspec(thread) ngx_connection_t  *conn[WSA_MAXIMUM_WAIT_EVENTS + 1];
 
 
 
@@ -121,7 +121,7 @@
     conn[0] = NULL;
 
     for ( ;; ) {
-        offset = (nevents == WSA_MAXIMUM_WAIT_EVENTS) ? 1: 0;
+        offset = (nevents == WSA_MAXIMUM_WAIT_EVENTS + 1) ? 1: 0;
         timeout = (nevents == 1 && !first) ? 60000: INFINITE;
 
         n = WSAWaitForMultipleEvents(nevents - offset, events[offset],
@@ -133,7 +133,7 @@
         }
 
         if (n == WAIT_TIMEOUT) {
-            if (nevents == 1 && !main) {
+            if (nevents == 2 && !main) {
                 ExitThread(0);
             }
 
@@ -145,9 +145,9 @@
 
         n -= WSA_WAIT_EVENT_0;
 
-        if (n == 0) {
+        if (events[n] == NULL) {
 
-            /* the first event is pending_connect_event */
+            /* the pending_connect_event */
 
             if (nevents == WSA_MAXIMUM_WAIT_EVENTS) {
                 ngx_iocp_new_thread(0);
diff --git a/src/event/ngx_event_pipe.c b/src/event/ngx_event_pipe.c
index 2dcb663..36adb29 100644
--- a/src/event/ngx_event_pipe.c
+++ b/src/event/ngx_event_pipe.c
@@ -451,26 +451,22 @@
 static int ngx_event_pipe_write_chain_to_temp_file(ngx_event_pipe_t *p)
 {
     int           size, hsize;
-    char         *save_pos;
     ngx_hunk_t   *h;
-    ngx_chain_t  *cl, *tl, *next, *out, **ll, **last_free;
+    ngx_chain_t  *cl, *tl, *next, *out, **ll, **last_free, fl;
 
-    ngx_log_debug(p->log, "write to file");
-
-    out = p->in;
-
-    if (out->hunk->type & NGX_HUNK_PREREAD) {
-        save_pos = out->hunk->pos;
-        out->hunk->pos = out->hunk->start;
+    if (p->hunk_to_file) {
+        fl.hunk = p->hunk_to_file;
+        fl.next = p->in;
+        out = &fl;
 
     } else {
-        save_pos = NULL;
+        out = p->in;
     }
 
     if (!p->cachable) {
 
         size = 0;
-        cl = p->in;
+        cl = out;
         ll = NULL;
 
 ngx_log_debug(p->log, "offset: %d" _ p->temp_file->offset);
@@ -519,10 +515,10 @@
         /* void */
     }
 
-    if (out->hunk->type & NGX_HUNK_PREREAD) {
-        p->temp_file->offset += save_pos - out->hunk->pos;
-        out->hunk->pos = save_pos;
-        out->hunk->type &= ~NGX_HUNK_PREREAD;
+    if (p->hunk_to_file) {
+        p->temp_file->offset = p->hunk_to_file->last - p->hunk_to_file->pos;
+        p->hunk_to_file = NULL;
+        out = out->next;
     }
 
     for (cl = out; cl; cl = next) {
@@ -566,8 +562,6 @@
     ngx_hunk_t   *h;
     ngx_chain_t  *cl;
 
-ngx_log_debug(p->log, "COPY");
-
     if (hunk->pos == hunk->last) {
         return NGX_OK;
     }
diff --git a/src/event/ngx_event_pipe.h b/src/event/ngx_event_pipe.h
index f7cb6d0..ce458d3 100644
--- a/src/event/ngx_event_pipe.h
+++ b/src/event/ngx_event_pipe.h
@@ -15,6 +15,9 @@
 
 
 struct ngx_event_pipe_s {
+    ngx_connection_t  *upstream;
+    ngx_connection_t  *downstream;
+
     ngx_chain_t       *free_raw_hunks;
     ngx_chain_t       *in;
     ngx_chain_t      **last_in;
@@ -59,9 +62,6 @@
     off_t              max_temp_file_size;
     int                temp_file_write_size;
 
-    ngx_connection_t  *upstream;
-    ngx_connection_t  *downstream;
-
     ngx_msec_t         read_timeout;
     ngx_msec_t         send_timeout;
     ssize_t            send_lowat;
@@ -71,6 +71,7 @@
 
     ngx_chain_t       *preread_hunks;
     int                preread_size;
+    ngx_hunk_t        *hunk_to_file;
 
     ngx_temp_file_t   *temp_file;
 
diff --git a/src/http/modules/proxy/ngx_http_proxy_upstream.c b/src/http/modules/proxy/ngx_http_proxy_upstream.c
index 0a5ecd2..ec4c425 100644
--- a/src/http/modules/proxy/ngx_http_proxy_upstream.c
+++ b/src/http/modules/proxy/ngx_http_proxy_upstream.c
@@ -956,10 +956,18 @@
     }
     ep->preread_hunks->hunk = p->header_in;
     ep->preread_hunks->next = NULL;
-    p->header_in->type |= NGX_HUNK_PREREAD;
 
     ep->preread_size = p->header_in->last - p->header_in->pos;
 
+    ep->hunk_to_file = ngx_calloc_hunk(r->pool);
+    if (ep->preread_hunks == NULL) {
+        ngx_http_proxy_finalize_request(p, 0);
+        return;
+    }
+    ep->hunk_to_file->pos = p->header_in->start;
+    ep->hunk_to_file->last = p->header_in->pos;
+    ep->hunk_to_file->type = NGX_HUNK_IN_MEMORY|NGX_HUNK_TEMP;
+
     if (ngx_event_flags & NGX_USE_AIO_EVENT) {
 
         /* the posted aio operation can currupt shadow buf */
