diff --git a/src/core/nginx.c b/src/core/nginx.c
index b011df3..1c54a8c 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -5,8 +5,8 @@
 #include <nginx.h>
 
 
-
-static int ngx_open_listening_sockets(ngx_log_t *log);
+static ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle, ngx_log_t *log);
+static int ngx_open_listening_sockets(ngx_cycle_t *cycle, ngx_log_t *log);
 
 
 void  ****ngx_conf_ctx;
@@ -16,21 +16,25 @@
 
 
 int     ngx_max_module;
+#if 0
 void   *ctx_conf;
+#endif
 
 int ngx_connection_counter;
 
-ngx_array_t  ngx_listening_sockets;
-
-
 #if 0
+ngx_array_t  ngx_listening_sockets;
+#endif
+
+
+#if 1
 
 int main(int argc, char *const *argv)
 {
-    ngx_str_t     conf_file;
+    int           i;
     ngx_log_t    *log;
     ngx_conf_t    conf;
-    ngx_cycle_t  *cycle;
+    ngx_cycle_t  *cycle, *new_cycle;
 
     /* TODO */ ngx_max_sockets = -1;
 
@@ -64,10 +68,10 @@
 
         for ( ;; ) {
 
-            worker(cycle->log);
+            ngx_worker(cycle);
 
             new_cycle = ngx_init_cycle(cycle, cycle->log);
-            if (new_cycle) == NULL) {
+            if (new_cycle == NULL) {
                 continue;
             }
 
@@ -80,9 +84,10 @@
 }
 
 
-static int ngx_init_cycle(ngx_cycle_t *old_cycle, ngx_log_t *log)
+static ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle, ngx_log_t *log)
 {
-    int               i, n;
+    int               i, n, failed;
+    ngx_str_t         conf_file;
     ngx_conf_t        conf;
     ngx_pool_t       *pool;
     ngx_cycle_t      *cycle;
@@ -102,6 +107,12 @@
     }
     cycle->pool = pool;
 
+    cycle->log = ngx_log_create_errlog(cycle);
+    if (cycle->log == NULL) {
+        ngx_destroy_pool(pool);
+        return NULL;
+    }
+
     n = old_cycle ? old_cycle->open_files.nelts : 20;
     cycle->open_files.elts = ngx_pcalloc(pool, n * sizeof(ngx_open_file_t));
     if (cycle->open_files.elts == NULL) {
@@ -153,6 +164,8 @@
         return NULL;
     }
 
+    failed = 0;
+
     for (i = 0; ngx_modules[i]; i++) {
         if (ngx_modules[i]->init_module) {
             if (ngx_modules[i]->init_module(cycle, log) == NGX_ERROR)
@@ -166,7 +179,7 @@
     if (!failed) {
         file = cycle->open_files.elts;
         for (i = 0; i < cycle->open_files.nelts; i++) {
-            if (file->name.data = NULL) {
+            if (file->name.data == NULL) {
                 continue;
             }
 
@@ -209,7 +222,7 @@
             }
         }
 
-        if (ngx_open_listening_sockets(new_cycle) == NGX_ERROR) {
+        if (ngx_open_listening_sockets(cycle, log) == NGX_ERROR) {
             failed = 1;
         }
     }
@@ -220,7 +233,7 @@
 
         for (i = 0; ngx_modules[i]; i++) {
             if (ngx_modules[i]->rollback_module) {
-                ngx_modules[i]->rollback_module(cycle);
+                ngx_modules[i]->rollback_module(cycle, log);
             }
         }
 
@@ -230,20 +243,20 @@
                 continue;
             }
 
-            if (ngx_close_file(file.fd) == NGX_FILE_ERROR) {
+            if (ngx_close_file(file->fd) == NGX_FILE_ERROR) {
                 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
                               ngx_close_file_n " \"%s\" failed",
                               file->name.data);
             }
         }
 
-        ls[i] = cycle->listening.elts;
+        ls = cycle->listening.elts;
         for (i = 0; i < cycle->listening.nelts; i++) {
             if (ls[i].new && ls[i].fd == -1) {
                 continue;
             }
 
-            if (ngx_close_socket(ls[i].fd) == -1)
+            if (ngx_close_socket(ls[i].fd) == -1) {
                 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
                               ngx_close_socket_n " %s failed",
                               ls[i].addr_text.data);
@@ -252,15 +265,13 @@
 
         ngx_destroy_pool(pool);
         return NULL;
+    }
 
-    } else {
+    /* commit the new cycle configuration */
 
-        /* commit the new cycle configuration */
-
-        for (i = 0; ngx_modules[i]; i++) {
-            if (ngx_modules[i]->commit_module) {
-                ngx_modules[i]->commit_module(cycle);
-            }
+    for (i = 0; ngx_modules[i]; i++) {
+        if (ngx_modules[i]->commit_module) {
+            ngx_modules[i]->commit_module(cycle, log);
         }
     }
 
@@ -270,7 +281,7 @@
             continue;
         }
 
-        if (ngx_close_socket(ls[i].fd) == -1)
+        if (ngx_close_socket(ls[i].fd) == -1) {
             ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
                           ngx_close_socket_n " %s failed",
                           ls[i].addr_text.data);
@@ -278,20 +289,19 @@
     }
 
     file = old_cycle->open_files.elts;
-    for (i = 0; i < cycle->old_open_files.nelts; i++) {
+    for (i = 0; i < old_cycle->open_files.nelts; i++) {
         if (file->fd == NGX_INVALID_FILE) {
             continue;
         }
 
-        if (ngx_close_file(file.fd) == NGX_FILE_ERROR) {
+        if (ngx_close_file(file->fd) == NGX_FILE_ERROR) {
             ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
                           ngx_close_file_n " \"%s\" failed",
                           file->name.data);
         }
     }
 
-    new_cycle->log = ???;
-    pool->log = ???;
+    pool->log = cycle->log;
 
     ngx_destroy_pool(old_cycle->pool);
 
@@ -397,7 +407,7 @@
 #endif
 
 
-static int ngx_open_listening_sockets(ngx_log_t *log)
+static int ngx_open_listening_sockets(ngx_cycle_t *cycle, ngx_log_t *log)
 {
     int              times, failed, reuseaddr, i;
     ngx_err_t        err;
@@ -406,16 +416,19 @@
 
     reuseaddr = 1;
 
+    /* TODO: times configurable */
+
     for (times = 10; times; times--) {
          failed = 0;
 
         /* for each listening socket */
 
-        ls = ngx_listening_sockets.elts;
-        for (i = 0; i < ngx_listening_sockets.nelts; i++) {
+        ls = cycle->listening.elts;
+        for (i = 0; i < cycle->listening.nelts; i++) {
 
-            if (ls[i].bound)
+            if (ls[i].fd != -1) {
                 continue;
+            }
 
             if (ls[i].inherited) {
 
@@ -423,12 +436,12 @@
                 /* TODO: nonblocking */
                 /* TODO: deferred accept */
 
-                ls[i].bound = 1;
                 continue;
             }
 
             s = ngx_socket(ls[i].family, ls[i].type, ls[i].protocol,
                            ls[i].flags);
+
             if (s == -1) {
                 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
                               ngx_socket_n " %s falied", ls[i].addr_text.data);
@@ -493,22 +506,20 @@
             /* TODO: deferred accept */
 
             ls[i].fd = s;
-            ls[i].bound = 1;
         }
 
         if (!failed)
             break;
 
+        /* TODO: delay configurable */
+
         ngx_log_error(NGX_LOG_NOTICE, log, 0,
                       "try again to bind() after 500ms");
         ngx_msleep(500);
     }
 
     if (failed) {
-
-        /* TODO: configurable */
-
-        ngx_log_error(NGX_LOG_EMERG, log, 0, "can not bind(), exiting");
+        ngx_log_error(NGX_LOG_EMERG, log, 0, "still can not bind()");
         return NGX_ERROR;
     }
 
diff --git a/src/core/ngx_conf_file.h b/src/core/ngx_conf_file.h
index e841374..932f5bf 100644
--- a/src/core/ngx_conf_file.h
+++ b/src/core/ngx_conf_file.h
@@ -56,13 +56,32 @@
 #define ngx_null_command   {ngx_null_string, 0, NULL, 0, 0, NULL}
 
 
+struct ngx_open_file_s {
+    ngx_fd_t   fd;
+    ngx_str_t  name;
+};
+
+
+struct ngx_cycle_s {
+    void         ****conf_ctx;
+    ngx_pool_t      *pool;
+    ngx_log_t       *log;
+    ngx_array_t      listening;
+    ngx_array_t      open_files;
+
+    unsigned         one_process:1;
+};
+
+
 struct ngx_module_s {
     int             ctx_index;
     int             index;
     void           *ctx;
     ngx_command_t  *commands;
     int             type;
-    int           (*init_module)(ngx_pool_t *p);
+    int           (*init_module)(ngx_cycle_t *cycle, ngx_log_t *log);
+    int           (*commit_module)(ngx_cycle_t *cycle, ngx_log_t *log);
+    int           (*rollback_module)(ngx_cycle_t *cycle, ngx_log_t *log);
 };
 
 
@@ -73,22 +92,6 @@
 } ngx_conf_file_t;
 
 
-struct ngx_open_file_s {
-    ngx_fd_t   fd;
-    ngx_str_t  name;
-};
-
-
-typedef struct {
-    ngx_pool_t   *pool;
-    ngx_log_t    *log;
-    ngx_array_t   listening;
-    ngx_array_t   open_files;
-
-    unsigned      one_process:1;
-} ngx_cycle_t;
-
-
 typedef char *(*ngx_conf_handler_pt)(ngx_conf_t *cf,
                                      ngx_command_t *dummy, void *conf);
 
diff --git a/src/core/ngx_connection.h b/src/core/ngx_connection.h
index 1bd97f2..6211c5f 100644
--- a/src/core/ngx_connection.h
+++ b/src/core/ngx_connection.h
@@ -34,6 +34,9 @@
     time_t            post_accept_timeout;     /* should be here because
                                                   of the deferred accept */
 
+    unsigned          new:1;
+    unsigned          remain:1;
+
     unsigned          bound:1;       /* already bound */
     unsigned          inherited:1;   /* inherited from previous process */
     unsigned          nonblocking_accept:1;
diff --git a/src/core/ngx_core.h b/src/core/ngx_core.h
index a1a7c06..52ba59b 100644
--- a/src/core/ngx_core.h
+++ b/src/core/ngx_core.h
@@ -10,7 +10,8 @@
 
 typedef struct ngx_module_s      ngx_module_t;
 typedef struct ngx_conf_s        ngx_conf_t;
-typedef struct ngx_open_file_s   ngx_open_file_t;;
+typedef struct ngx_cycle_s       ngx_cycle_t;
+typedef struct ngx_open_file_s   ngx_open_file_t;
 typedef struct ngx_command_s     ngx_command_t;
 
 typedef struct ngx_file_s        ngx_file_t;
diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c
index d4f3df3..51bae3d 100644
--- a/src/core/ngx_log.c
+++ b/src/core/ngx_log.c
@@ -246,6 +246,17 @@
 }
 
 
+ngx_log_t *ngx_log_create_errlog(ngx_cycle_t *cycle)
+{
+    ngx_log_t  *log;
+
+    ngx_test_null(log, ngx_pcalloc(cycle->pool, sizeof(ngx_log_t)), NULL);
+    ngx_test_null(log->file, ngx_push_array(&cycle->open_files), NULL);
+
+    return log;
+}
+
+
 char *ngx_log_set_errlog(ngx_conf_t *cf, ngx_command_t *cmd, ngx_log_t *log)
 {
     int         len;
diff --git a/src/core/ngx_log.h b/src/core/ngx_log.h
index d8aca8a..0de8c3e 100644
--- a/src/core/ngx_log.h
+++ b/src/core/ngx_log.h
@@ -168,6 +168,8 @@
 #define ngx_log_copy_log(new, old)    ngx_memcpy(new, old, sizeof(ngx_log_t))
 
 ngx_log_t *ngx_log_init_errlog();
+ngx_log_t *ngx_log_create_errlog(ngx_cycle_t *cycle);
+
 char *ngx_log_set_errlog(ngx_conf_t *cf, ngx_command_t *cmd, ngx_log_t *log);
 
 
diff --git a/src/event/modules/ngx_devpoll_module.c b/src/event/modules/ngx_devpoll_module.c
index 27396fc..766d403 100644
--- a/src/event/modules/ngx_devpoll_module.c
+++ b/src/event/modules/ngx_devpoll_module.c
@@ -190,10 +190,10 @@
 
 static int ngx_devpoll_del_event(ngx_event_t *ev, int event, u_int flags)
 {
-    ngx_event_t  *e;
+    ngx_event_t       *e;
+    ngx_connection_t  *c;
 
 #if (NGX_DEBUG_EVENT)
-    ngx_connection_t *c = ev->data;
     ngx_log_debug(c->log, "del event: %d, %d" _ c->fd _ event);
 #endif
 
@@ -209,6 +209,8 @@
 
     /* we need to restore second event if it exists */
 
+    c = ev->data;
+
     if (event == NGX_READ_EVENT) {
         e = c->write;
         event = POLLOUT;
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index 263d88e..7438fc1 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -235,12 +235,12 @@
 }
 
 
-void ngx_worker(ngx_log_t *log)
+void ngx_worker(ngx_cycle_t *cycle)
 {
     for ( ;; ) {
-        ngx_log_debug(log, "ngx_worker cycle");
+        ngx_log_debug(cycle->log, "ngx_worker cycle");
 
-        ngx_process_events(log);
+        ngx_process_events(cycle->log);
     }
 }
 
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 8ae2b53..393699f 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -371,7 +371,7 @@
 
 
 int  ngx_pre_thread(ngx_array_t *ls, ngx_pool_t *pool, ngx_log_t *log);
-void ngx_worker(ngx_log_t *log);
+void ngx_worker(ngx_cycle_t *cycle);
 
 
 /* ***************************** */
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index c1024e2..4cc4388 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -20,7 +20,7 @@
 static char *ngx_http_core_merge_loc_conf(ngx_pool_t *pool,
                                           void *parent, void *child);
 
-static int ngx_http_core_init(ngx_pool_t *pool);
+static int ngx_http_core_init(ngx_cycle_t *cycle, ngx_log_t *log);
 static char *ngx_server_block(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy);
 static int ngx_cmp_locations(const void *first, const void *second);
 static char *ngx_location_block(ngx_conf_t *cf, ngx_command_t *cmd,
@@ -186,17 +186,20 @@
     &ngx_http_core_module_ctx,             /* module context */
     ngx_http_core_commands,                /* module directives */
     NGX_HTTP_MODULE,                       /* module type */
-    ngx_http_core_init                     /* init module */
+    ngx_http_core_init,                    /* init module */
+    NULL,                                  /* commit module */
+    NULL                                   /* rollback module */
 };
 
 
 void ngx_http_handler(ngx_http_request_t *r)
 {
-    int                        rc, i;
-    ngx_http_log_ctx_t        *lcx;
-    ngx_http_handler_pt       *h;
-    ngx_http_core_loc_conf_t  *clcf, **clcfp;
-    ngx_http_core_srv_conf_t  *cscf;
+    int                         rc, i;
+    ngx_http_log_ctx_t         *lcx;
+    ngx_http_handler_pt        *h;
+    ngx_http_core_loc_conf_t   *clcf, **clcfp;
+    ngx_http_core_srv_conf_t   *cscf;
+    ngx_http_core_main_conf_t  *cmcf;
 
     r->connection->unexpected_eof = 0;
 
@@ -248,10 +251,12 @@
         r->filter = NGX_HTTP_FILTER_NEED_IN_MEMORY;
     }
 
+    cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
+
     /* run translation phase */
 
-    h = ngx_http_translate_handlers.elts;
-    for (i = ngx_http_translate_handlers.nelts - 1; i >= 0; i--) {
+    h = cmcf->translate_handlers.elts;
+    for (i = cmcf->translate_handlers.nelts - 1; i >= 0; i--) {
 
         rc = h[i](r);
 
@@ -521,7 +526,7 @@
 }
 
 
-static int ngx_http_core_init(ngx_pool_t *pool)
+static int ngx_http_core_init(ngx_cycle_t *cycle, ngx_log_t *log)
 {
     ngx_http_handler_pt  *h;
 
diff --git a/src/http/ngx_http_core_module.h b/src/http/ngx_http_core_module.h
index df9bcca..8acf4fe 100644
--- a/src/http/ngx_http_core_module.h
+++ b/src/http/ngx_http_core_module.h
@@ -18,7 +18,8 @@
 
 
 typedef struct {
-    ngx_array_t  servers;      /* array of ngx_http_core_srv_conf_t */
+    ngx_array_t  servers;              /* array of ngx_http_core_srv_conf_t */
+    ngx_array_t  translate_handlers;
 } ngx_http_core_main_conf_t;
 
 
