diff --git a/src/core/ngx_array.h b/src/core/ngx_array.h
index 79a86e6..848596c 100644
--- a/src/core/ngx_array.h
+++ b/src/core/ngx_array.h
@@ -20,7 +20,7 @@
 void *ngx_push_array(ngx_array_t *a);
 
 
-ngx_inline static ngx_int_t ngx_init_array0(ngx_array_t *array, ngx_pool_t *pool,
+ngx_inline static ngx_int_t ngx_array_init(ngx_array_t *array, ngx_pool_t *pool,
                                            ngx_uint_t n, size_t size)
 {
     if (!(array->elts = ngx_palloc(pool, n * size))) {
diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c
index ff23642..f6ecd4a 100644
--- a/src/core/ngx_conf_file.c
+++ b/src/core/ngx_conf_file.c
@@ -600,7 +600,7 @@
         }
     }
 
-    if (!(file = ngx_push_list(&cycle->open_files))) {
+    if (!(file = ngx_list_push(&cycle->open_files))) {
         return NULL;
     }
 
diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c
index cc309e3..9e5143c 100644
--- a/src/core/ngx_cycle.c
+++ b/src/core/ngx_cycle.c
@@ -81,7 +81,7 @@
         n = 20;
     }
 
-    if (ngx_init_list(&cycle->open_files, pool, n, sizeof(ngx_open_file_t))
+    if (ngx_list_init(&cycle->open_files, pool, n, sizeof(ngx_open_file_t))
                                                                   == NGX_ERROR)
     {
         ngx_destroy_pool(pool);
diff --git a/src/core/ngx_list.c b/src/core/ngx_list.c
index 10d7957..885f8f5 100644
--- a/src/core/ngx_list.c
+++ b/src/core/ngx_list.c
@@ -3,7 +3,7 @@
 #include <ngx_core.h>
 
 
-void *ngx_push_list(ngx_list_t *l)
+void *ngx_list_push(ngx_list_t *l)
 {
     void             *elt;
     ngx_list_part_t  *last;
diff --git a/src/core/ngx_list.h b/src/core/ngx_list.h
index 757564f..f43f235 100644
--- a/src/core/ngx_list.h
+++ b/src/core/ngx_list.h
@@ -24,7 +24,7 @@
 } ngx_list_t;
 
 
-ngx_inline static ngx_int_t ngx_init_list(ngx_list_t *list, ngx_pool_t *pool,
+ngx_inline static ngx_int_t ngx_list_init(ngx_list_t *list, ngx_pool_t *pool,
                                           ngx_uint_t n, size_t size)
 {
     if (!(list->part.elts = ngx_palloc(pool, n * size))) {
@@ -67,7 +67,7 @@
  */
 
 
-void *ngx_push_list(ngx_list_t *list);
+void *ngx_list_push(ngx_list_t *list);
 
 
 #endif /* _NGX_LIST_H_INCLUDED_ */
diff --git a/src/http/modules/ngx_http_gzip_filter.c b/src/http/modules/ngx_http_gzip_filter.c
index 8fbf3a9..b170df8 100644
--- a/src/http/modules/ngx_http_gzip_filter.c
+++ b/src/http/modules/ngx_http_gzip_filter.c
@@ -297,7 +297,7 @@
                         sizeof(ngx_http_gzip_ctx_t), NGX_ERROR);
     ctx->request = r;
 
-    r->headers_out.content_encoding = ngx_push_list(&r->headers_out.headers);
+    r->headers_out.content_encoding = ngx_list_push(&r->headers_out.headers);
     if (r->headers_out.content_encoding == NULL) {
         return NGX_ERROR;
     }
diff --git a/src/http/modules/ngx_http_headers_filter.c b/src/http/modules/ngx_http_headers_filter.c
index b821c0d..00c0070 100644
--- a/src/http/modules/ngx_http_headers_filter.c
+++ b/src/http/modules/ngx_http_headers_filter.c
@@ -75,13 +75,13 @@
 
     if (conf->expires != NGX_HTTP_EXPIRES_OFF) {
 
-        if (!(expires = ngx_push_list(&r->headers_out.headers))) {
+        if (!(expires = ngx_list_push(&r->headers_out.headers))) {
             return NGX_ERROR;
         }
 
         r->headers_out.expires = expires;
 
-        if (!(cc = ngx_push_list(&r->headers_out.headers))) {
+        if (!(cc = ngx_list_push(&r->headers_out.headers))) {
             return NGX_ERROR;
         }
 
diff --git a/src/http/modules/ngx_http_range_filter.c b/src/http/modules/ngx_http_range_filter.c
index 913c90a..ce13766 100644
--- a/src/http/modules/ngx_http_range_filter.c
+++ b/src/http/modules/ngx_http_range_filter.c
@@ -123,7 +123,7 @@
         || ngx_strncasecmp(r->headers_in.range->value.data, "bytes=", 6) != 0)
     {
 
-        r->headers_out.accept_ranges = ngx_push_list(&r->headers_out.headers);
+        r->headers_out.accept_ranges = ngx_list_push(&r->headers_out.headers);
         if (r->headers_out.accept_ranges == NULL) {
             return NGX_ERROR;
         }
@@ -244,7 +244,7 @@
         r->headers_out.status = rc;
         r->headers_out.ranges.nelts = 0;
 
-        r->headers_out.content_range = ngx_push_list(&r->headers_out.headers);
+        r->headers_out.content_range = ngx_list_push(&r->headers_out.headers);
         if (r->headers_out.content_range == NULL) {
             return NGX_ERROR;
         }
@@ -277,7 +277,7 @@
         if (r->headers_out.ranges.nelts == 1) {
 
             r->headers_out.content_range =
-                                        ngx_push_list(&r->headers_out.headers);
+                                        ngx_list_push(&r->headers_out.headers);
             if (r->headers_out.content_range == NULL) {
                 return NGX_ERROR;
             }
diff --git a/src/http/modules/ngx_http_static_handler.c b/src/http/modules/ngx_http_static_handler.c
index ad7d9cf..5d27cca 100644
--- a/src/http/modules/ngx_http_static_handler.c
+++ b/src/http/modules/ngx_http_static_handler.c
@@ -341,8 +341,8 @@
         *last++ = '/';
         *last = '\0';
 
-        if (!(r->headers_out.location = ngx_push_list(&r->headers_out.headers)))
-        {
+        r->headers_out.location = ngx_list_push(&r->headers_out.headers);
+        if (r->headers_out.location == NULL) {
             return NGX_HTTP_INTERNAL_SERVER_ERROR;
         }
 
diff --git a/src/http/modules/ngx_http_status_handler.c b/src/http/modules/ngx_http_status_handler.c
index 97492eb..6fc1e77 100644
--- a/src/http/modules/ngx_http_status_handler.c
+++ b/src/http/modules/ngx_http_status_handler.c
@@ -70,8 +70,8 @@
         return rc;
     }
 
-    if (!(r->headers_out.content_type = ngx_push_list(&r->headers_out.headers)))
-    {
+    r->headers_out.content_type = ngx_list_push(&r->headers_out.headers);
+    if (r->headers_out.content_type == NULL) {
         return NGX_HTTP_INTERNAL_SERVER_ERROR;
     } 
 
diff --git a/src/http/modules/ngx_http_userid_filter.c b/src/http/modules/ngx_http_userid_filter.c
index 842719e..718cca7 100644
--- a/src/http/modules/ngx_http_userid_filter.c
+++ b/src/http/modules/ngx_http_userid_filter.c
@@ -381,7 +381,7 @@
     ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
                    "uid cookie: \"%s\"", cookie);
 
-    if (!(set_cookie = ngx_push_list(&r->headers_out.headers))) {
+    if (!(set_cookie = ngx_list_push(&r->headers_out.headers))) {
         return NGX_ERROR;
     }
 
diff --git a/src/http/modules/proxy/ngx_http_proxy_handler.h b/src/http/modules/proxy/ngx_http_proxy_handler.h
index fa86982..6e37258 100644
--- a/src/http/modules/proxy/ngx_http_proxy_handler.h
+++ b/src/http/modules/proxy/ngx_http_proxy_handler.h
@@ -107,7 +107,10 @@
 
 
 typedef struct {
+    ngx_list_t                       headers;
+#if 0
     ngx_table_t                      headers;   /* it must be first field */
+#endif
 
     ngx_table_elt_t                 *date;
     ngx_table_elt_t                 *server;
diff --git a/src/http/modules/proxy/ngx_http_proxy_header.c b/src/http/modules/proxy/ngx_http_proxy_header.c
index a3e05e5..9e72f62 100644
--- a/src/http/modules/proxy/ngx_http_proxy_header.c
+++ b/src/http/modules/proxy/ngx_http_proxy_header.c
@@ -12,13 +12,31 @@
                                ngx_http_proxy_headers_in_t *headers_in)
 {
     ngx_uint_t           i;
+    ngx_list_part_t     *part;
     ngx_table_elt_t     *ho, *h;
     ngx_http_request_t  *r;
 
     r = p->request;
 
+    part = &headers_in->headers.part;
+    h = part->elts;
+
+#if 0
     h = headers_in->headers.elts;
     for (i = 0; i < headers_in->headers.nelts; i++) {
+#endif
+
+    for (i = 0 ; /* void */; i++) {
+  
+        if (i >= part->nelts) {
+            if (part->next == NULL) {
+                break;
+            }
+  
+            part = part->next;
+            h = part->elts;
+            i = 0;
+        }
 
         /* ignore some headers */
 
@@ -69,8 +87,7 @@
 
         /* copy some header pointers and set up r->headers_out */
 
-        if (!(ho = ngx_http_add_header(&r->headers_out, ngx_http_headers_out)))
-        {
+        if (!(ho = ngx_list_push(&r->headers_out.headers))) {
             return NGX_ERROR;
         }
 
@@ -138,8 +155,7 @@
     r = p->request;
     uc = p->lcf->upstream;
 
-    location = ngx_http_add_header(&r->headers_out, ngx_http_headers_out);
-    if (location == NULL) {
+    if (!(location = ngx_list_push(&r->headers_out.headers))) {
         return NGX_ERROR;
     }
 
diff --git a/src/http/modules/proxy/ngx_http_proxy_upstream.c b/src/http/modules/proxy/ngx_http_proxy_upstream.c
index 5930ceb..0cffbce 100644
--- a/src/http/modules/proxy/ngx_http_proxy_upstream.c
+++ b/src/http/modules/proxy/ngx_http_proxy_upstream.c
@@ -954,20 +954,22 @@
 
     /* init or reinit the p->upstream->headers_in.headers table */
 
-    if (p->upstream->headers_in.headers.elts) {
-        p->upstream->headers_in.headers.nelts = 0;
+    if (p->upstream->headers_in.headers.part.elts) {
+        p->upstream->headers_in.headers.part.nelts = 0;
+        p->upstream->headers_in.headers.part.next = NULL;
+        p->upstream->headers_in.headers.last =
+                                         &p->upstream->headers_in.headers.part;
+
+        ngx_memzero(&p->upstream->headers_in.date,
+                    sizeof(ngx_http_proxy_headers_in_t) - sizeof(ngx_list_t));
 
     } else {
-        p->upstream->headers_in.headers.elts = ngx_pcalloc(p->request->pool,
-                                                 20 * sizeof(ngx_table_elt_t));
-        if (p->upstream->headers_in.headers.elts == NULL) {
+        if (ngx_list_init(&p->upstream->headers_in.headers, p->request->pool,
+                                     20, sizeof(ngx_table_elt_t)) == NGX_ERROR)
+        {
             ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
             return;
         }
-        /* p->upstream->headers_in.headers.nelts = 0; */
-        p->upstream->headers_in.headers.nalloc = 20;
-        p->upstream->headers_in.headers.size = sizeof(ngx_table_elt_t);
-        p->upstream->headers_in.headers.pool = p->request->pool;
     }
 
 
@@ -1025,9 +1027,7 @@
 
             /* a header line has been parsed successfully */
 
-            h = ngx_http_add_header(&p->upstream->headers_in,
-                                    ngx_http_proxy_headers_in);
-            if (h == NULL) {
+            if (!(h = ngx_list_push(&p->upstream->headers_in.headers))) {
                 ngx_http_proxy_finalize_request(p,
                                                 NGX_HTTP_INTERNAL_SERVER_ERROR);
                 return;
diff --git a/src/http/ngx_http.c b/src/http/ngx_http.c
index 492ba6f..fabb2dd 100644
--- a/src/http/ngx_http.c
+++ b/src/http/ngx_http.c
@@ -500,13 +500,16 @@
         in_addr = in_port[p].addrs.elts;
         while (a < in_port[p].addrs.nelts) {
 
-            ngx_test_null(ls, ngx_push_array(&cf->cycle->listening),
-                          NGX_CONF_ERROR);
+            if (!(ls = ngx_push_array(&cf->cycle->listening))) {
+                return NGX_CONF_ERROR;
+            }
+
             ngx_memzero(ls, sizeof(ngx_listening_t));
 
-            ngx_test_null(addr_in,
-                          ngx_pcalloc(cf->pool, sizeof(struct sockaddr_in)),
-                          NGX_CONF_ERROR);
+            addr_in = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_in));
+            if (addr_in == NULL) {
+                return NGX_CONF_ERROR;
+            }
 
 #if (HAVE_SIN_LEN)
             addr_in->sin_len = sizeof(struct sockaddr_in);
@@ -515,17 +518,18 @@
             addr_in->sin_addr.s_addr = in_addr[a].addr;
             addr_in->sin_port = htons((u_short) in_port[p].port);
 
-            ngx_test_null(ls->addr_text.data,
-                          ngx_palloc(cf->pool, INET_ADDRSTRLEN + 6),
-                          NGX_CONF_ERROR);
+            ls->addr_text.data = ngx_palloc(cf->pool, INET_ADDRSTRLEN + 6);
+            if (ls->addr_text.data == NULL) {
+                return NGX_CONF_ERROR;
+            }
 
-            ls->addr_text.len =
-                        ngx_snprintf((char *) ls->addr_text.data
-                                     + ngx_inet_ntop(AF_INET,
-                                                     &in_addr[a].addr,
-                                                     ls->addr_text.data,
-                                                     INET_ADDRSTRLEN),
-                                     6, ":%d", in_port[p].port);
+            ls->addr_text.len = ngx_inet_ntop(AF_INET, &in_addr[a].addr,
+                                              ls->addr_text.data,
+                                              INET_ADDRSTRLEN),
+
+            ls->addr_text.len += ngx_snprintf((char *) ls->addr_text.data
+                                                           + ls->addr_text.len,
+                                               6, ":%d", in_port[p].port);
 
             ls->fd = (ngx_socket_t) -1;
             ls->family = AF_INET;
diff --git a/src/http/ngx_http.h b/src/http/ngx_http.h
index 145082f..b1f8a7d 100644
--- a/src/http/ngx_http.h
+++ b/src/http/ngx_http.h
@@ -81,8 +81,6 @@
 
 time_t ngx_http_parse_time(u_char *value, size_t len);
 size_t ngx_http_get_time(char *buf, time_t t);
-ngx_table_elt_t *ngx_http_add_header(void *header,
-                                     ngx_http_header_t *http_headers);
 
 
 
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index 62daa8d..78bb2a7 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -531,8 +531,8 @@
 
 
     if (rc == NGX_HTTP_LOCATION_AUTO_REDIRECT) {
-        if (!(r->headers_out.location = ngx_push_list(&r->headers_out.headers)))
-        {
+        r->headers_out.location = ngx_list_push(&r->headers_out.headers);
+        if (r->headers_out.location == NULL) {
             return NGX_HTTP_INTERNAL_SERVER_ERROR;
         }
 
@@ -673,8 +673,8 @@
     ngx_http_type_t           *type;
     ngx_http_core_loc_conf_t  *clcf;
 
-    if (!(r->headers_out.content_type = ngx_push_list(&r->headers_out.headers)))
-    {
+    r->headers_out.content_type = ngx_list_push(&r->headers_out.headers);
+    if (r->headers_out.content_type == NULL) {
         return NGX_HTTP_INTERNAL_SERVER_ERROR;
     }
 
diff --git a/src/http/ngx_http_header_filter.c b/src/http/ngx_http_header_filter.c
index bc78ce9..a08c73e 100644
--- a/src/http/ngx_http_header_filter.c
+++ b/src/http/ngx_http_header_filter.c
@@ -89,6 +89,28 @@
 };
 
 
+ngx_http_header_t  ngx_http_headers_out[] = {
+    { ngx_string("Server"), offsetof(ngx_http_headers_out_t, server) },
+    { ngx_string("Date"), offsetof(ngx_http_headers_out_t, date) },
+    { ngx_string("Content-Type"),
+                             offsetof(ngx_http_headers_out_t, content_type) },
+    { ngx_string("Content-Length"),
+                           offsetof(ngx_http_headers_out_t, content_length) },
+    { ngx_string("Content-Encoding"),
+                         offsetof(ngx_http_headers_out_t, content_encoding) },
+    { ngx_string("Location"), offsetof(ngx_http_headers_out_t, location) },
+    { ngx_string("Last-Modified"),
+                            offsetof(ngx_http_headers_out_t, last_modified) },
+    { ngx_string("Accept-Ranges"),
+                            offsetof(ngx_http_headers_out_t, accept_ranges) },
+    { ngx_string("Expires"), offsetof(ngx_http_headers_out_t, expires) },
+    { ngx_string("Cache-Control"),
+                            offsetof(ngx_http_headers_out_t, cache_control) },
+    { ngx_string("ETag"), offsetof(ngx_http_headers_out_t, etag) },
+
+    { ngx_null_string, 0 }
+};
+
 
 static ngx_int_t ngx_http_header_filter(ngx_http_request_t *r)
 {
diff --git a/src/http/ngx_http_headers.c b/src/http/ngx_http_headers.c
deleted file mode 100644
index fd617b1..0000000
--- a/src/http/ngx_http_headers.c
+++ /dev/null
@@ -1,116 +0,0 @@
-
-#include <ngx_config.h>
-#include <ngx_core.h>
-#include <ngx_http.h>
-
-
-ngx_http_header_t  ngx_http_headers_in[] = {
-    { ngx_string("Host"), offsetof(ngx_http_headers_in_t, host) },
-    { ngx_string("Connection"), offsetof(ngx_http_headers_in_t, connection) },
-    { ngx_string("If-Modified-Since"),
-                         offsetof(ngx_http_headers_in_t, if_modified_since) },
-    { ngx_string("User-Agent"), offsetof(ngx_http_headers_in_t, user_agent) },
-    { ngx_string("Referer"), offsetof(ngx_http_headers_in_t, referer) },
-    { ngx_string("Content-Length"),
-                            offsetof(ngx_http_headers_in_t, content_length) },
-
-    { ngx_string("Range"), offsetof(ngx_http_headers_in_t, range) },
-#if 0
-    { ngx_string("If-Range"), offsetof(ngx_http_headers_in_t, if_range) },
-#endif
-
-#if (NGX_HTTP_GZIP)
-    { ngx_string("Accept-Encoding"),
-                           offsetof(ngx_http_headers_in_t, accept_encoding) },
-    { ngx_string("Via"), offsetof(ngx_http_headers_in_t, via) },
-#endif
-
-    { ngx_string("Authorization"),
-                             offsetof(ngx_http_headers_in_t, authorization) },
-
-    { ngx_string("Keep-Alive"), offsetof(ngx_http_headers_in_t, keep_alive) },
-
-#if (NGX_HTTP_PROXY)
-    { ngx_string("X-Forwarded-For"),
-                           offsetof(ngx_http_headers_in_t, x_forwarded_for) },
-#endif
-
-    { ngx_null_string, 0 }
-};
-
-
-ngx_http_header_t  ngx_http_headers_out[] = {
-    { ngx_string("Server"), offsetof(ngx_http_headers_out_t, server) },
-    { ngx_string("Date"), offsetof(ngx_http_headers_out_t, date) },
-    { ngx_string("Content-Type"),
-                             offsetof(ngx_http_headers_out_t, content_type) },
-    { ngx_string("Content-Length"),
-                           offsetof(ngx_http_headers_out_t, content_length) },
-    { ngx_string("Content-Encoding"),
-                         offsetof(ngx_http_headers_out_t, content_encoding) },
-    { ngx_string("Location"), offsetof(ngx_http_headers_out_t, location) },
-    { ngx_string("Last-Modified"),
-                            offsetof(ngx_http_headers_out_t, last_modified) },
-    { ngx_string("Accept-Ranges"),
-                            offsetof(ngx_http_headers_out_t, accept_ranges) },
-    { ngx_string("Expires"), offsetof(ngx_http_headers_out_t, expires) },
-    { ngx_string("Cache-Control"),
-                            offsetof(ngx_http_headers_out_t, cache_control) },
-    { ngx_string("ETag"), offsetof(ngx_http_headers_out_t, etag) },
-
-    { ngx_null_string, 0 }
-};
-
-
-ngx_table_elt_t *ngx_http_add_header(void *header,
-                                     ngx_http_header_t *http_headers)
-{
-    void             *prev;
-    ngx_uint_t        i, j;
-    ngx_table_t      *headers;
-    ngx_table_elt_t  *h, *new;
-
-    headers = header;
-
-    prev = headers->elts;
-
-    if (!(new = ngx_push_table(headers))) {
-        return NULL;
-    }
-
-    if (prev == headers->elts) {
-        return new;
-    }
-
-    /*
-     * When table is relocated we need to update pointers in r->headers_in,
-     * r->headers_out, etc.  However this relocation should be very rare
-     * because we preallocate enough space for the number of the real world
-     * HTTP headers.
-     */
-
-    ngx_log_error(NGX_LOG_ALERT, headers->pool->log, 0,
-                  "header table is small, %d elements", headers->nelts - 1);
-
-    h = headers->elts;
-    for (i = 0; i < headers->nelts - 1; i++) {
-        if (h[i].key.len == 0) {
-            continue;
-        }
-
-        for (j = 0; http_headers[j].name.len != 0; j++) {
-            if (http_headers[j].name.len != h[i].key.len) {
-                continue;
-            }
-
-            if (ngx_strcasecmp(http_headers[j].name.data, h[i].key.data) == 0) {
-                *((ngx_table_elt_t **)
-                      ((char *) header + http_headers[j].offset)) = &h[i];
-                break;
-            }
-        }
-    }
-
-    return new;
-}
-
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index 185db72..52c7c42 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -49,6 +49,41 @@
 };
 
 
+ngx_http_header_t  ngx_http_headers_in[] = {
+    { ngx_string("Host"), offsetof(ngx_http_headers_in_t, host) },
+    { ngx_string("Connection"), offsetof(ngx_http_headers_in_t, connection) },
+    { ngx_string("If-Modified-Since"),
+                         offsetof(ngx_http_headers_in_t, if_modified_since) },
+    { ngx_string("User-Agent"), offsetof(ngx_http_headers_in_t, user_agent) },
+    { ngx_string("Referer"), offsetof(ngx_http_headers_in_t, referer) },
+    { ngx_string("Content-Length"),
+                            offsetof(ngx_http_headers_in_t, content_length) },
+
+    { ngx_string("Range"), offsetof(ngx_http_headers_in_t, range) },
+#if 0
+    { ngx_string("If-Range"), offsetof(ngx_http_headers_in_t, if_range) },
+#endif
+
+#if (NGX_HTTP_GZIP)
+    { ngx_string("Accept-Encoding"),
+                           offsetof(ngx_http_headers_in_t, accept_encoding) },
+    { ngx_string("Via"), offsetof(ngx_http_headers_in_t, via) },
+#endif
+
+    { ngx_string("Authorization"),
+                             offsetof(ngx_http_headers_in_t, authorization) },
+
+    { ngx_string("Keep-Alive"), offsetof(ngx_http_headers_in_t, keep_alive) },
+
+#if (NGX_HTTP_PROXY)
+    { ngx_string("X-Forwarded-For"),
+                           offsetof(ngx_http_headers_in_t, x_forwarded_for) },
+#endif
+    
+    { ngx_null_string, 0 }
+};
+
+
 #if 0
 static void ngx_http_dummy(ngx_event_t *wev)
 {
@@ -310,7 +345,7 @@
     r->cleanup.pool = r->pool;
 
 
-    if (ngx_init_list(&r->headers_out.headers, r->pool, 2,
+    if (ngx_list_init(&r->headers_out.headers, r->pool, 20,
                                          sizeof(ngx_table_elt_t)) == NGX_ERROR)
     {
         ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
@@ -319,23 +354,6 @@
     }
 
 
-#if 0
-    /* init the r->headers_out.headers table */
-
-    r->headers_out.headers.elts = ngx_pcalloc(r->pool,
-                                              20 * sizeof(ngx_table_elt_t));
-    if (r->headers_out.headers.elts == NULL) {
-        ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
-        ngx_http_close_connection(c);
-        return;
-    }
-    /* r->headers_out.headers.nelts = 0; */
-    r->headers_out.headers.nalloc = 20;
-    r->headers_out.headers.size = sizeof(ngx_table_elt_t);
-    r->headers_out.headers.pool = r->pool;
-#endif
-
-
     r->ctx = ngx_pcalloc(r->pool, sizeof(void *) * ngx_http_max_module);
     if (r->ctx == NULL) {
         ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
@@ -619,7 +637,7 @@
         }
 
 
-        if (ngx_init_list(&r->headers_in.headers, r->pool, 2,
+        if (ngx_list_init(&r->headers_in.headers, r->pool, 20,
                                          sizeof(ngx_table_elt_t)) == NGX_ERROR)
         {
             ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
@@ -628,7 +646,7 @@
         }
 
 
-        if (ngx_init_array0(&r->headers_in.cookies, r->pool, 5,
+        if (ngx_array_init(&r->headers_in.cookies, r->pool, 5,
                                        sizeof(ngx_table_elt_t *)) == NGX_ERROR)
         {
             ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
@@ -772,7 +790,7 @@
 
             r->headers_n++;
 
-            if (!(h = ngx_push_list(&r->headers_in.headers))) {
+            if (!(h = ngx_list_push(&r->headers_in.headers))) {
                 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
                 ngx_http_close_connection(c);
                 return;
diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h
index 145d171..abd52bc 100644
--- a/src/http/ngx_http_request.h
+++ b/src/http/ngx_http_request.h
@@ -160,9 +160,6 @@
 
 typedef struct {
     ngx_list_t        headers;
-#if 0
-    ngx_table_t       headers;   /* it must be first field */
-#endif
 
     ngx_uint_t        status;
     ngx_str_t         status_line;
diff --git a/src/http/ngx_http_special_response.c b/src/http/ngx_http_special_response.c
index d589dcb..17efa5a 100644
--- a/src/http/ngx_http_special_response.c
+++ b/src/http/ngx_http_special_response.c
@@ -282,9 +282,8 @@
             msie_padding = 1;
         }
 
-        if (!(r->headers_out.content_type =
-                                       ngx_push_list(&r->headers_out.headers)))
-        {
+        r->headers_out.content_type = ngx_list_push(&r->headers_out.headers);
+        if (r->headers_out.content_type == NULL) {
             return NGX_ERROR;
         }
 
