diff --git a/src/imap/ngx_imap.h b/src/imap/ngx_imap.h
index 5dc48df..6f5307d 100644
--- a/src/imap/ngx_imap.h
+++ b/src/imap/ngx_imap.h
@@ -7,22 +7,33 @@
 
 
 typedef struct {
-    ngx_chain_t  *send;
-} ngx_imap_request_t;
+    ngx_connection_t      *connection;
+
+    ngx_buf_t             *downstream_buffer;
+    ngx_buf_t             *upstream_buffer;
+} ngx_imap_proxy_ctx_t;
 
 
-#define NGX_POP3_USER    1
-#define NGX_POP3_PASS    2
-#define NGX_POP3_APOP    3
-#define NGX_POP3_STAT    4
-#define NGX_POP3_LIST    5
-#define NGX_POP3_RETR    6
-#define NGX_POP3_DELE    7
-#define NGX_POP3_NOOP    8
-#define NGX_POP3_RSET    9
-#define NGX_POP3_TOP     10
-#define NGX_POP3_UIDL    11
-#define NGX_POP3_QUIT    12
+typedef struct {
+    uint32_t               signature;         /* "IMAP" */
+
+    ngx_connection_t      *connection;
+    ngx_imap_proxy_ctx_t  *proxy;
+} ngx_imap_session_t;
+
+
+#define NGX_POP3_USER      1
+#define NGX_POP3_PASS      2
+#define NGX_POP3_APOP      3
+#define NGX_POP3_STAT      4
+#define NGX_POP3_LIST      5
+#define NGX_POP3_RETR      6
+#define NGX_POP3_DELE      7
+#define NGX_POP3_NOOP      8
+#define NGX_POP3_RSET      9
+#define NGX_POP3_TOP       10
+#define NGX_POP3_UIDL      11
+#define NGX_POP3_QUIT      12
 
 
 void ngx_imap_init_connection(ngx_connection_t *c);
diff --git a/src/imap/ngx_imap_handler.c b/src/imap/ngx_imap_handler.c
index bbedc9c..61c59c9 100644
--- a/src/imap/ngx_imap_handler.c
+++ b/src/imap/ngx_imap_handler.c
@@ -15,16 +15,16 @@
 
 void ngx_imap_init_connection(ngx_connection_t *c)
 {
-    ngx_int_t  rc;
+    ngx_int_t  n;
 
     ngx_log_debug0(NGX_LOG_DEBUG_IMAP, c->log, 0,
                    "imap init connection");
 
     c->log_error = NGX_ERROR_INFO;
 
-    rc = ngx_send(c, pop3_greeting, sizeof(pop3_greeting) - 1);
+    n = ngx_send(c, pop3_greeting, sizeof(pop3_greeting) - 1);
 
-    if (rc == NGX_ERROR) {
+    if (n == NGX_ERROR) {
         ngx_imap_close_connection(c);
         return;
     }
diff --git a/src/imap/ngx_imap_proxy.c b/src/imap/ngx_imap_proxy.c
new file mode 100644
index 0000000..f856159
--- /dev/null
+++ b/src/imap/ngx_imap_proxy.c
@@ -0,0 +1,80 @@
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+#include <ngx_event.h>
+#include <ngx_imap.h>
+
+
+static void ngx_imap_proxy_close_session(ngx_imap_session_t *s);
+
+
+void ngx_imap_proxy_handler(ngx_event_t *ev)
+{
+    ssize_t              n;
+    ngx_buf_t           *b;
+    ngx_uint_t           data, do_write;
+    ngx_connection_t    *c, *src, *dst;
+    ngx_imap_session_t  *s;
+
+    c = ev->data;
+    s = c->data;
+
+    if (c == s->connection) {
+        src = c;
+        dst = s->proxy->connection;
+        b = s->proxy->downstream_buffer;
+
+    } else {
+        src = s->proxy->connection;
+        dst = c;
+        b = s->proxy->upstream_buffer;
+    }
+
+    do_write = ev->write ? 1 : 0;
+
+    do {
+        data = 0;
+
+        if (do_write == 1) {
+            if (dst->write->ready && b->pos < b->last) {
+                n = ngx_send(dst, b->pos, b->last - b->pos);
+
+                if (n == NGX_ERROR) {
+                    ngx_imap_proxy_close_session(s);
+                    return;
+                }
+
+                if (n > 0) {
+                    data = 1;
+                    b->pos += n;
+
+                    if (b->pos == b->last) {
+                        b->pos = b->start;
+                        b->last = b->start;
+                    }
+                }
+            }
+        }
+
+        if (src->read->ready && b->last < b->end) {
+            n = ngx_recv(src, b->last, b->end - b->last);
+
+            if (n == NGX_ERROR || n == 0) {
+                ngx_imap_proxy_close_session(s);
+                return;
+            }
+
+            if (n > 0) {
+                data = 1;
+                do_write = 1;
+                b->last += n;
+            }
+        }
+
+    } while (data);
+}
+
+
+static void ngx_imap_proxy_close_session(ngx_imap_session_t *s)
+{
+}
