diff --git a/src/http/modules/ngx_http_event_proxy_handler.c b/src/http/modules/ngx_http_event_proxy_handler.c
index c4594e6..195e4b3 100644
--- a/src/http/modules/ngx_http_event_proxy_handler.c
+++ b/src/http/modules/ngx_http_event_proxy_handler.c
@@ -6,6 +6,7 @@
 #include <ngx_hunk.h>
 #include <ngx_event_write.h>
 #include <ngx_http.h>
+#include <ngx_http_output_filter.h>
 #include <ngx_http_event_proxy_handler.h>
 
 ngx_http_module_t  ngx_http_proxy_module_ctx;
@@ -30,6 +31,9 @@
 static char conn_close[] = "Connection: close" CRLF;
 
 
+/* AF_INET only */
+
+
 int ngx_http_proxy_handler(ngx_http_request_t *r)
 {
     struct sockaddr_in     addr;
@@ -56,7 +60,7 @@
     addr.sin_addr.s_addr = inet_addr("127.0.0.1");
     addr.sin_port = htons(9000);
 
-    ngx_http_proxy_connect(r, &addr, "connecting to 127.0.0.1:9000");
+    return ngx_http_proxy_connect(r, &addr, "connecting to 127.0.0.1:9000");
 }
 
 
@@ -151,7 +155,7 @@
 
     s = ngx_socket(AF_INET, SOCK_STREAM, IPPROTO_IP, 0);
     if (s == -1) {
-        ngx_log_error(NGX_LOG_ERR, c->log, ngx_socket_errno,
+        ngx_log_error(NGX_LOG_ALERT, c->log, ngx_socket_errno,
                       ngx_socket_n " failed");
         return NGX_ERROR;
     }
@@ -164,7 +168,7 @@
                           "setsockopt(SO_RCVBUF) failed");
 
             if (ngx_close_socket(s) == -1) {
-                ngx_log_error(NGX_LOG_ERR, c->log, ngx_socket_errno,
+                ngx_log_error(NGX_LOG_ALERT, c->log, ngx_socket_errno,
                               ngx_close_socket_n " failed");
             }
 
@@ -178,7 +182,7 @@
                       ngx_nonblocking_n " failed");
 
         if (ngx_close_socket(s) == -1) {
-            ngx_log_error(NGX_LOG_ERR, c->log, ngx_socket_errno,
+            ngx_log_error(NGX_LOG_ALERT, c->log, ngx_socket_errno,
                           ngx_close_socket_n " failed");
         }
 
@@ -190,10 +194,10 @@
     if (rc == -1) {
         err = ngx_socket_errno;
         if (err != NGX_EINPROGRESS) {
-            ngx_log_error(NGX_LOG_ERR, c->log, err, "connect() failed");
+            ngx_log_error(NGX_LOG_CRIT, c->log, err, "connect() failed");
 
             if (ngx_close_socket(s) == -1) {
-                ngx_log_error(NGX_LOG_ERR, c->log, ngx_socket_errno,
+                ngx_log_error(NGX_LOG_ALERT, c->log, ngx_socket_errno,
                               ngx_close_socket_n " failed");
             }
 
@@ -271,7 +275,7 @@
 
 static int ngx_http_proxy_read_response_header(ngx_event_t *ev)
 {
-    int  n, rc;
+    int                    n;
     ngx_hunk_t           **ph;
     ngx_connection_t      *c;
     ngx_http_request_t    *r;
@@ -298,13 +302,12 @@
                       ngx_palloc(r->pool, sizeof(ngx_http_proxy_headers_in_t)),
                       NGX_ERROR);
 
-        ngx_test_null(p->hunks,
-                      ngx_create_array(r->pool,
-                                       /* STUB */ 10 /**/,
-                                       sizeof(ngx_hunk_t *)),
-                      NGX_ERROR);
+        ngx_init_array(p->hunks, r->pool,
+                       /* STUB */ 10 /**/,
+                       sizeof(ngx_hunk_t *),
+                       NGX_ERROR);
 
-        ngx_test_null(ph, ngx_push_array(p->hunks), NGX_ERROR);
+        ngx_test_null(ph, ngx_push_array(&p->hunks), NGX_ERROR);
         *ph = p->header_in;
 
         p->state_handler = ngx_http_proxy_process_status_line;
@@ -387,51 +390,64 @@
     /* STUB */ return NGX_ERROR;
 }
 
+#if 0
 static int ngx_http_proxy_process_response_header(ngx_http_request_t *r,
                                                   ngx_http_proxy_ctx_t *p)
 {
+    return NGX_OK;
 }
+#endif
 
 static int ngx_http_proxy_read_response_body(ngx_event_t *ev)
 {
-    int     n;
-    size_t  left;
+    int                    n;
+    char                  *buf;
+    size_t                 left, size;
     ngx_hunk_t            *h, **ph;
     ngx_connection_t      *c;
     ngx_http_request_t    *r;
     ngx_http_proxy_ctx_t  *p;
 
-    if (ev->timedout)
+    if (ev->timedout) {
         return NGX_ERROR;
+    }
 
     c = (ngx_connection_t *) ev->data;
     r = (ngx_http_request_t *) c->data;
     p = (ngx_http_proxy_ctx_t *)
                          ngx_http_get_module_ctx(r, ngx_http_proxy_module_ctx);
 
-    left = 0;
-
-    if (p->hunks->nelts > 0) {
-        h = ((ngx_hunk_t **) p->hunks->elts)[p->hunks->nelts - 1];
+    if (p->hunks.nelts > 0) {
+        h = ((ngx_hunk_t **) p->hunks.elts)[p->hunks.nelts - 1];
         left = h->end - h->last.mem;
+
+    } else {
+        h = NULL;
+        left = 0;
     }
 
     do {
 
-#if (HAVE_KQUEUE)
-#if !(USE_KQUEUE)
+#if (USE_KQUEUE)
+
+        /* do not allocate new block if there is EOF */
+        if (ev->eof && ev->available == 0) {
+            left = 1;
+        }
+
+#elif (HAVE_KQUEUE)
+
         if (ngx_event_type == NGX_KQUEUE_EVENT) {
-#endif
             /* do not allocate new block if there is EOF */
             if (ev->eof && ev->available == 0) {
                 left = 1;
             }
-#if !(USE_KQUEUE)
         }
+
 #endif
-#endif
+
         if (left == 0) {
-            ngx_test_null(ph, ngx_push_array(p->hunks), NGX_ERROR);
+            ngx_test_null(ph, ngx_push_array(&p->hunks), NGX_ERROR);
             ngx_test_null(h,
                           ngx_create_temp_hunk(r->pool,
                                                /* STUB */ 4096 /**/, 0, 0),
@@ -441,7 +457,16 @@
             *ph = h;
         }
 
-        n = ngx_event_recv(c, h->last.mem, h->end - h->last.mem);
+        if (h != NULL) {
+            buf = h->last.mem;
+            size = h->end - h->last.mem;
+
+        } else {
+            buf = (char *) &buf;
+            size = 0;
+        }
+
+        n = ngx_event_recv(c, buf, size);
 
         ngx_log_debug(c->log, "READ:%d" _ n);
 
@@ -492,14 +517,14 @@
                          ngx_http_get_module_ctx(r, ngx_http_proxy_module_ctx);
 
     do {
-        h = ((ngx_hunk_t **) p->hunks->elts)[p->hunk_n];
+        h = ((ngx_hunk_t **) p->hunks.elts)[p->hunk_n];
 
         rc = ngx_http_output_filter(r, h);
         if (rc != NGX_OK) {
             return rc;
         }
 
-        if (p->hunk_n >= p->hunks->nelts) {
+        if (p->hunk_n >= p->hunks.nelts) {
             break;
         }
 
@@ -534,8 +559,10 @@
     while (p < ctx->header_in->last.mem && state < sw_done) {
         ch = *p++;
 
+#if 0
 fprintf(stderr, "state: %d, pos: %x, end: %x, char: '%c', status: %d\n",
-       state, p, ctx->header_in->last.mem, ch, ctx->status);
+        state, p, ctx->header_in->last.mem, ch, ctx->status);
+#endif
 
         switch (state) {
 
diff --git a/src/http/modules/ngx_http_event_proxy_handler.h b/src/http/modules/ngx_http_event_proxy_handler.h
index 596a193..b5b480a 100644
--- a/src/http/modules/ngx_http_event_proxy_handler.h
+++ b/src/http/modules/ngx_http_event_proxy_handler.h
@@ -20,7 +20,7 @@
     ngx_chain_t  *out;
 
     int           last_hunk;
-    ngx_array_t  *hunks;
+    ngx_array_t   hunks;
 
     int           hunk_n;
 
diff --git a/src/http/modules/ngx_http_index_handler.c b/src/http/modules/ngx_http_index_handler.c
index d3b4901..ebbeac9 100644
--- a/src/http/modules/ngx_http_index_handler.c
+++ b/src/http/modules/ngx_http_index_handler.c
@@ -244,7 +244,9 @@
 /* STUB */
 static char *ngx_http_index_merge_conf(ngx_pool_t *p, void *parent, void *child)
 {
+#if 0
     ngx_http_index_conf_t *prev = (ngx_http_index_conf_t *) parent;
+#endif
     ngx_http_index_conf_t *conf = (ngx_http_index_conf_t *) child;
     ngx_str_t  *index;
 
diff --git a/src/http/modules/ngx_http_static_handler.c b/src/http/modules/ngx_http_static_handler.c
index c55f36a..fea2ee0 100644
--- a/src/http/modules/ngx_http_static_handler.c
+++ b/src/http/modules/ngx_http_static_handler.c
@@ -1,9 +1,11 @@
 
 #include <ngx_config.h>
+
 #include <ngx_string.h>
 #include <ngx_file.h>
 #include <ngx_hunk.h>
 #include <ngx_http.h>
+#include <ngx_http_output_filter.h>
 
 ngx_http_module_t  ngx_http_static_module;
 
