diff --git a/src/http/modules/ngx_http_event_proxy_handler.c b/src/http/modules/ngx_http_event_proxy_handler.c
index 69adbe1..8843394 100644
--- a/src/http/modules/ngx_http_event_proxy_handler.c
+++ b/src/http/modules/ngx_http_event_proxy_handler.c
@@ -4,12 +4,14 @@
 #include <ngx_string.h>
 #include <ngx_file.h>
 #include <ngx_hunk.h>
+#include <ngx_event_write.h>
 #include <ngx_http.h>
 #include <ngx_http_event_proxy_handler.h>
 
 ngx_http_module_t  ngx_http_proxy_module;
 
 
+static ngx_chain_t *ngx_http_proxy_create_request(ngx_http_request_t *r);
 static int ngx_http_proxy_connect(ngx_http_request_t *r,
                                   struct sockaddr_in *addr,
                                   char *addr_text);
@@ -18,7 +20,8 @@
 
 int ngx_http_proxy_handler(ngx_http_request_t *r)
 {
-    struct sockaddr_in addr;
+    struct sockaddr_in     addr;
+    ngx_chain_t           *chain;
     ngx_http_proxy_ctx_t  *p;
 
     p = (ngx_http_proxy_ctx_t *) ngx_get_module_ctx(r, ngx_http_proxy_module);
@@ -27,6 +30,12 @@
         ngx_http_create_ctx(r, p, ngx_http_proxy_module,
                             sizeof(ngx_http_proxy_ctx_t));
 
+    chain = ngx_http_proxy_create_request(r);
+    if (chain == NULL)
+        return NGX_ERROR;
+
+    p->out = chain;
+
     ngx_memzero(&addr, sizeof(struct sockaddr_in));
     addr.sin_family = AF_INET;
     addr.sin_addr.s_addr = inet_addr("127.0.0.1");
@@ -35,6 +44,69 @@
     ngx_http_proxy_connect(r, &addr, "connecting to 127.0.0.1:9000");
 }
 
+
+static ngx_chain_t *ngx_http_proxy_create_request(ngx_http_request_t *r)
+{
+    int     i;
+    size_t  len;
+    ngx_hunk_t       *hunk;
+    ngx_chain_t      *chain;
+    ngx_table_elt_t  *header;
+
+    /* STUB */
+    int size = 1024;
+
+    /* "+ 2" is for "\r\n" */
+    len = r->request_line.len + 2;
+
+    header = (ngx_table_elt_t *) r->headers_in.headers->elts;
+    for (i = 0; i < r->headers_in.headers->nelts; i++) {
+        if (&header[i] == r->headers_in.host)
+            continue;
+
+        /* "+ 4" is for ": " and "\r\n" */
+        len += header[i].key.len + header[i].value.len + 4;
+    }
+
+    /* add "\r\n" at the header end */
+    len += 2;
+
+    /* STUB */ len++;
+
+    ngx_test_null(hunk, ngx_create_temp_hunk(r->pool, len, 0, 0), NULL);
+    ngx_add_hunk_to_chain(chain, hunk, r->pool, NULL);
+
+    ngx_memcpy(hunk->last.mem, r->request_line.data, r->request_line.len);
+    hunk->last.mem += r->request_line.len;
+    *(hunk->last.mem++) = CR; *(hunk->last.mem++) = LF;
+
+    for (i = 0; i < r->headers_in.headers->nelts; i++) {
+        if (&header[i] == r->headers_in.host)
+            continue;
+
+        ngx_memcpy(hunk->last.mem, header[i].key.data, header[i].key.len);
+        hunk->last.mem += header[i].key.len;
+
+        *(hunk->last.mem++) = ':'; *(hunk->last.mem++) = ' ';
+
+        ngx_memcpy(hunk->last.mem, header[i].value.data, header[i].value.len);
+        hunk->last.mem += header[i].value.len;
+
+        *(hunk->last.mem++) = CR; *(hunk->last.mem++) = LF;
+
+        ngx_log_debug(r->connection->log, "proxy: '%s: %s'" _
+                  header[i].key.data _ header[i].value.data);
+    }
+
+    /* add "\r\n" at the header end */
+    *(hunk->last.mem++) = CR; *(hunk->last.mem++) = LF;
+
+    /* STUB */ *(hunk->last.mem++) = '\0';
+    ngx_log_debug(r->connection->log, "PROXY:\n'%s'" _ hunk->pos.mem);
+
+    return chain;
+}
+
 static int ngx_http_proxy_connect(ngx_http_request_t *r,
                                   struct sockaddr_in *addr,
                                   char *addr_text)
@@ -42,8 +114,7 @@
     int                  rc;
     ngx_err_t            err;
     ngx_socket_t         s;
-    ngx_event_t         *ev;
-    ngx_connection_t    *c;
+    ngx_connection_t    *c, *pc;
     ngx_http_log_ctx_t  *ctx;
 
     c = r->connection;
@@ -99,6 +170,8 @@
         }
     }
 
+    pc = &ngx_connections[s];
+
     ngx_memzero(&ngx_read_events[s], sizeof(ngx_event_t));
     ngx_memzero(&ngx_write_events[s], sizeof(ngx_event_t));
     ngx_memzero(&ngx_connections[s], sizeof(ngx_connection_t));
@@ -107,6 +180,8 @@
     ngx_connections[s].read = &ngx_read_events[s];
     ngx_connections[s].write = &ngx_write_events[s];
 
+    ngx_connections[s].data = r;
+
     ngx_connections[s].fd = s;
     ngx_connections[s].server = c->server;
     ngx_connections[s].servers = c->servers;
@@ -114,6 +189,10 @@
     ngx_connections[s].log =
         ngx_read_events[s].log = ngx_write_events[s].log = c->log;
 
+    ngx_test_null(pc->pool,
+                  ngx_create_pool(/* STUB */ 1024 /* */, pc->log),
+                  NGX_ERROR);
+
     if (rc == -1) {
         ngx_write_events[s].event_handler = ngx_http_proxy_send_request;
 
@@ -124,12 +203,28 @@
     ngx_write_events[s].write = 1;
     ngx_write_events[s].ready = 1;
 
-    return ngx_http_proxy_send_request(ev);
+    return ngx_http_proxy_send_request(&ngx_write_events[s]);
 }
 
 static int ngx_http_proxy_send_request(ngx_event_t *ev)
 {
-    return NGX_ERROR;
+    ngx_chain_t           *chain;
+    ngx_connection_t      *c;
+    ngx_http_request_t    *r;
+    ngx_http_proxy_ctx_t  *p;
+
+    c = (ngx_connection_t *) ev->data;
+    r = (ngx_http_request_t *) c->data;
+    p = (ngx_http_proxy_ctx_t *) ngx_get_module_ctx(r, ngx_http_proxy_module);
+
+    chain = ngx_event_write(c, p->out, 0);
+    if (chain == (ngx_chain_t *) -1)
+        return NGX_ERROR;
+
+    p->out = chain;
+
+    /* STUB */ return NGX_ERROR;
+    return NGX_OK;
 }
 
 #if 0
diff --git a/src/http/modules/ngx_http_event_proxy_handler.h b/src/http/modules/ngx_http_event_proxy_handler.h
index 85c2e79..b106b2c 100644
--- a/src/http/modules/ngx_http_event_proxy_handler.h
+++ b/src/http/modules/ngx_http_event_proxy_handler.h
@@ -8,7 +8,7 @@
 
 
 typedef struct {
-    int dummy;
+    ngx_chain_t  *out;
 } ngx_http_proxy_ctx_t;
 
 
diff --git a/src/http/ngx_http.h b/src/http/ngx_http.h
index 69dd20c..30e3159 100644
--- a/src/http/ngx_http.h
+++ b/src/http/ngx_http.h
@@ -115,6 +115,7 @@
     int    http_major;
     int    http_minor;
 
+    ngx_str_t  request_line;
     char  *uri;
     char  *exten;
     ngx_http_request_t *main;
diff --git a/src/http/ngx_http_event.c b/src/http/ngx_http_event.c
index 8c27f37..da5f1fe 100644
--- a/src/http/ngx_http_event.c
+++ b/src/http/ngx_http_event.c
@@ -270,11 +270,19 @@
     c = r->connection;
 
     if (rc == NGX_OK) {
-        ngx_test_null(r->uri,
-                      ngx_palloc(r->pool, r->uri_end - r->uri_start + 1), 
+        len = r->uri_end - r->uri_start + 1;
+        ngx_test_null(r->uri, ngx_palloc(r->pool, len),
                       ngx_http_close_request(r));
-        ngx_cpystrn(r->uri, r->uri_start, r->uri_end - r->uri_start + 1);
+        ngx_cpystrn(r->uri, r->uri_start, len);
 
+        r->request_line.len = r->request_end - r->header_in->start;
+        ngx_test_null(r->request_line.data,
+                      ngx_palloc(r->pool, r->request_line.len + 1),
+                      ngx_http_close_request(r));
+        ngx_cpystrn(r->request_line.data, r->header_in->start,
+                    r->request_line.len + 1);
+
+        /* TEMP */
         ngx_test_null(request, ngx_push_array(c->requests),
                       ngx_http_close_request(r));
 
@@ -288,6 +296,7 @@
         ngx_cpystrn(*request, r->header_in->start, len);
 
         ngx_log_debug(c->log, "REQ: '%s'" _ *request);
+        /* */
 
         if (r->uri_ext) {
             ngx_test_null(r->exten,
@@ -372,7 +381,7 @@
     int  i;
     ngx_table_elt_t *h;
 
-    ngx_test_null(h, ngx_push_array(r->headers_in.headers), NGX_ERROR);
+    ngx_test_null(h, ngx_push_table(r->headers_in.headers), NGX_ERROR);
 
     h->key.len = r->header_name_end - r->header_name_start;
     ngx_test_null(h->key.data, ngx_palloc(r->pool, h->key.len + 1), NGX_ERROR);
@@ -583,7 +592,7 @@
     int   err, rc;
     char *name, *loc, *file;
 
-#if 0
+#if 1
     /* STUB */
     r->handler = ngx_http_proxy_handler;
     return NGX_OK;
