diff --git a/src/core/nginx.c b/src/core/nginx.c
index 338f98a..b967393 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -23,6 +23,346 @@
 ngx_array_t  ngx_listening_sockets;
 
 
+#if 0
+
+int main(int argc, char *const *argv)
+{
+    int          i;
+    ngx_str_t    conf_file;
+    ngx_log_t   *log;
+    ngx_pool_t  *pool;
+    ngx_conf_t   conf;
+
+    ngx_max_sockets = -1;
+
+    log = ngx_log_init_errlog();
+
+    if (ngx_os_init(log) == NGX_ERROR) {
+        return 1;
+    }
+
+    ngx_max_module = 0;
+    for (i = 0; ngx_modules[i]; i++) {
+        ngx_modules[i]->index = ngx_max_module++;
+    }
+
+    ngx_test_null(pool, ngx_create_pool(16 * 1024, log), 1);
+    ngx_test_null(cycle, ngx_pcalloc(pool, sizeof(ngx_cycle_t)), 1);
+    cycle->pool = pool;
+
+    if (ngx_init_conf(cycle) == NGX_ERROR) {
+        return 1;
+    }
+
+    /* daemon */
+
+    /* life cycle */
+
+    for ( ;; ) {
+
+        /* forks */
+
+        ngx_init_temp_number();
+
+        /* threads */
+
+        for ( ;; ) {
+
+            worker(cycle->log);
+
+            pool = ngx_create_pool(16 * 1024, cycle->log);
+
+            if (pool == NULL) {
+                continue;
+            }
+
+            new_cycle = ngx_pcalloc(pool, sizeof(ngx_cycle_t));
+
+            if (new_cycle == NULL) {
+                ngx_destroy_pool(pool);
+                continue;
+            }
+
+            new_cycle->pool = pool;
+
+            if (ngx_init_conf(new_cycle, cycle->log) == NGX_ERROR) {
+                ngx_destroy_pool(new_cycle->pool);
+                continue;
+            }
+
+            nls = new_cycle->listening.elts;
+            for (n = 0; n < new_cycle->listening.nelts; n++) {
+                ls = cycle->listening.elts;
+                for (i = 0; i < cycle->listening.nelts; i++) {
+                    if (ngx_memcmp(nls[n].sockaddr,
+                                   ls[i].sockaddr, ls[i].socklen) == 0)
+                    {
+                        nls[n].fd = ls[i].fd;
+                        break;
+                    }
+                }
+
+                if (nls[n].fd == -1) {
+                    nls[n].new = 1;
+                }
+            }
+
+            if (ngx_open_listening_sockets(new_cycle) == NGX_ERROR) {
+                for (n = 0; n < new_cycle->listening.nelts; n++) {
+                    if (nls[n].new && nls[n].fd != -1) {
+                        if (ngx_close_socket(nls[n].fd) == -1)
+                            ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
+                                          ngx_close_socket_n " %s failed",
+                                          nls[n].addr_text.data);
+                        }
+                    }
+                }
+
+                ngx_destroy_pool(new_cycle->pool);
+                continue;
+            }
+
+            new_cycle->log = new log;
+
+            ngx_destroy_pool(cycle->pool);
+
+            cycle = new_cycle;
+            break;
+        }
+    }
+
+    return 0;
+}
+
+
+static int ngx_init_cycle(ngx_cycle_t *old_cycle, ngx_log_t *log)
+{
+    int           n;
+    ngx_conf_t    conf;
+    ngx_pool_t   *pool;
+    ngx_cycle_t  *cycle;
+
+
+    pool = ngx_create_pool(16 * 1024, log);
+    if (pool == NULL) {
+        return NULL;
+    }
+
+    cycle = ngx_pcalloc(pool, sizeof(ngx_cycle_t));
+    if (cycle == NULL) {
+        ngx_destroy_pool(pool);
+        return NULL;
+    }
+    cycle->pool = pool;
+
+    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) {
+        ngx_destroy_pool(pool);
+        return NULL;
+    }
+    cycle->open_files.nelts = 0;
+    cycle->open_files.size = sizeof(ngx_open_file_t);
+    cycle->open_files.nalloc = n;
+    cycle->open_files.pool = pool;
+
+    n = old_cycle ? old_cycle->listening.nelts : 10;
+    cycle->listening.elts = ngx_pcalloc(pool, n * sizeof(ngx_listening_t));
+    if (cycle->listening.elts == NULL) {
+        ngx_destroy_pool(pool);
+        return NULL;
+    }
+    cycle->listening.nelts = 0;
+    cycle->listening.size = sizeof(ngx_listening_t);
+    cycle->listening.nalloc = n;
+    cycle->listening.pool = pool;
+
+    cycle->conf_ctx = ngx_pcalloc(pool, ngx_max_module * sizeof(void *));
+    if (cycle->conf_ctx == NULL) {
+        ngx_destroy_pool(pool);
+        return NULL;
+    }
+
+    ngx_memzero(&conf, sizeof(ngx_conf_t));
+    /* STUB: init array ? */
+    conf.args = ngx_create_array(pool, 10, sizeof(ngx_str_t));
+    if (conf.args == NULL) {
+        ngx_destroy_pool(pool);
+        return NULL;
+    }
+
+    conf.ctx = cycle->conf_ctx;
+    conf.cycle = cycle;
+    /* STUB */ conf.pool = cycle->pool;
+    conf.log = log;
+    conf.module_type = NGX_CORE_MODULE;
+    conf.cmd_type = NGX_MAIN_CONF;
+
+    conf_file.len = sizeof(NGINX_CONF) - 1;
+    conf_file.data = NGINX_CONF;
+
+    if (ngx_conf_parse(&conf, &conf_file) != NGX_CONF_OK) {
+        ngx_destroy_pool(pool);
+        return NULL;
+    }
+
+    for (i = 0; ngx_modules[i]; i++) {
+        if (ngx_modules[i]->init_module) {
+            if (ngx_modules[i]->init_module(cycle, log) == NGX_ERROR)
+            {
+                failed = 1;
+                break;
+            }
+        }
+    }
+
+    if (!failed) {
+        file = cycle->open_files.elts;
+        for (i = 0; i < cycle->open_files.nelts; i++) {
+            if (file->name.data = NULL) {
+                continue;
+            }
+
+            file->fd = ngx_open_file(file->name.data,
+                                     NGX_FILE_RDWR,
+                                     NGX_FILE_CREATE_OR_OPEN|NGX_FILE_APPEND);
+
+            if (file->fd == NGX_INVALID_FILE) {
+                ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
+                              ngx_open_file_n " \"%s\" failed",
+                              file->name.data);
+                failed = 1;
+                break;
+            }
+
+            /* TODO: Win32 append */
+        }
+    }
+
+    if (!failed) {
+        if (ngx_open_listening_sockets(new_cycle) == NGX_ERROR) {
+            failed = 1;
+        }
+    }
+
+    if (failed) {
+
+        /* rollback the new cycle configuration */
+
+        for (i = 0; ngx_modules[i]; i++) {
+            if (ngx_modules[i]->rollback_module) {
+                ngx_modules[i]->rollback_module(cycle);
+            }
+        }
+
+        file = cycle->open_files.elts;
+        for (i = 0; i < cycle->open_files.nelts; i++) {
+            if (file->fd != NGX_INVALID_FILE) {
+                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;
+        for (i = 0; i < cycle->listening.nelts; i++) {
+            if (ls[i].new && 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);
+                }
+            }
+        }
+
+        ngx_destroy_pool(pool);
+        return NULL;
+
+    } else {
+
+        /* commit the new cycle configuration */
+
+        for (i = 0; ngx_modules[i]; i++) {
+            if (ngx_modules[i]->commit_module) {
+                ngx_modules[i]->commit_module(cycle);
+            }
+        }
+    }
+
+    new_cycle->log = ???;
+    pool->log = ???;
+
+    return cycle;
+
+
+
+
+
+
+----------------
+
+    ngx_init_array(cycle->listening, cycle->pool, 10, sizeof(ngx_listening_t),
+                   NGX_ERROR);
+
+    ngx_memzero(&conf, sizeof(ngx_conf_t));
+
+    ngx_test_null(conf.args,
+                  ngx_create_array(cycle->pool, 10, sizeof(ngx_str_t)),
+                  NGX_ERROR);
+
+    ngx_test_null(cycle->conf_ctx,
+                  ngx_pcalloc(cycle->pool, ngx_max_module * sizeof(void *)),
+                  NGX_ERROR);
+
+    conf.ctx = cycle->conf_ctx;
+    conf.cycle = cycle;
+    /* STUB */ conf.pool = cycle->pool; conf.log = cycle->log;
+    conf.module_type = NGX_CORE_MODULE;
+    conf.cmd_type = NGX_MAIN_CONF;
+
+    conf_file.len = sizeof(NGINX_CONF) - 1;
+    conf_file.data = NGINX_CONF;
+
+    if (ngx_conf_parse(&conf, &conf_file) == NGX_CONF_OK) {
+        for (i = 0; ngx_modules[i]; i++) {
+            if (ngx_modules[i]->init_module) {
+                if (ngx_modules[i]->init_module(pool) == NGX_ERROR) {
+                    failed = 1;
+                    break;
+                }
+            }
+        }
+
+    } else {
+        failed = 1;
+    }
+
+    if (failed) {
+        for (i = 0; ngx_modules[i]; i++) {
+            if (ngx_modules[i]->rollback_module) {
+                ngx_modules[i]->rollback_module(pool);
+            }
+        }
+
+        return NGX_ERROR;
+
+    } else {
+        for (i = 0; ngx_modules[i]; i++) {
+            if (ngx_modules[i]->commit_module) {
+                ngx_modules[i]->commit_module(pool);
+            }
+        }
+    }
+
+    return NGX_OK;
+}
+
+
+#endif
+
+
 int main(int argc, char *const *argv)
 {
     int          i;
@@ -44,61 +384,6 @@
         ngx_modules[i]->index = ngx_max_module++;
     }
 
-#if 0
-
-    ngx_test_null(cycle->pool, ngx_create_pool(16 * 1024, log), 1);
-
-    if (ngx_init_conf(cycle) == NGX_ERROR) {
-        ngx_destroy_pool(cycle->pool);
-        return 1;
-    }
-
-    /* daemon */
-
-    /* life cycle */
-
-    {
-
-        /* forks */
-
-        /* threads */
-
-        for ( ;; ) {
-            worker;
-
-            new_cycle = ngx_calloc(sizeof(ngx_cycle_t), cycle->log);
-
-            if (new_cycle == NULL) {
-                continue;
-            }
-
-            new_cycle->pool = ngx_create_pool(16 * 1024, cycle->log);
-
-            if (new_cycle->pool == NULL) {
-                ngx_free(new_cycle);
-                continue;
-            }
-
-            if (ngx_init_conf(new_cycle) == NGX_ERROR) {
-                ngx_destroy_pool(new_cycle->pool);
-                ngx_free(new_cycle);
-                continue;
-            }
-
-            /* update bound listening */
-
-            ngx_destroy_pool(cycle->pool);
-            ngx_free(cycle);
-
-            cycle = new_cycle;
-            break;
-        }
-    }
-
-    return 0;
-
-#endif
-
     /* life cycle */
 
     {
@@ -169,43 +454,6 @@
     return 0;
 }
 
-#if 0
-
-static int ngx_init_conf(ngx_cycle_t *cycle)
-{
-    ngx_conf_t   conf;
-
-    ngx_init_array(cycle->listening, cycle->pool, 10, sizeof(ngx_listening_t),
-                   NGX_ERROR);
-
-    ngx_memzero(&conf, sizeof(ngx_conf_t));
-
-    ngx_test_null(conf.args,
-                  ngx_create_array(cycle->pool, 10, sizeof(ngx_str_t)),
-                  NGX_ERROR);
-
-    ngx_test_null(ngx_conf_ctx,
-                  ngx_pcalloc(cycle->pool, ngx_max_module * sizeof(void *)),
-                  NGX_ERROR);
-
-    conf.ctx = ngx_conf_ctx;
-    conf.pool = cycle->pool;
-    conf.log = cycle->log;
-    conf.module_type = NGX_CORE_MODULE;
-    conf.cmd_type = NGX_MAIN_CONF;
-
-    conf_file.len = sizeof(NGINX_CONF) - 1;
-    conf_file.data = NGINX_CONF;
-
-    if (ngx_conf_parse(&conf, &conf_file) != NGX_CONF_OK) {
-        return NGX_ERROR;
-    }
-
-    return NGX_OK;
-}
-
-
-#endif
 
 static int ngx_open_listening_sockets(ngx_log_t *log)
 {
diff --git a/src/core/ngx_conf_file.h b/src/core/ngx_conf_file.h
index d82d239..e841374 100644
--- a/src/core/ngx_conf_file.h
+++ b/src/core/ngx_conf_file.h
@@ -83,7 +83,9 @@
     ngx_pool_t   *pool;
     ngx_log_t    *log;
     ngx_array_t   listening;
-    ngx_array_t   files;
+    ngx_array_t   open_files;
+
+    unsigned      one_process:1;
 } ngx_cycle_t;
 
 
@@ -95,6 +97,7 @@
     char                 *name;
     ngx_array_t          *args;
 
+    ngx_cycle_t          *cycle;
     ngx_pool_t           *pool;
     ngx_conf_file_t      *conf_file;
     ngx_log_t            *log;
diff --git a/src/core/ngx_modules.c b/src/core/ngx_modules.c
index 0dbcde6..50655ab 100644
--- a/src/core/ngx_modules.c
+++ b/src/core/ngx_modules.c
@@ -6,7 +6,7 @@
 extern ngx_module_t  ngx_errlog_module;
 
 extern ngx_module_t  ngx_events_module;
-extern ngx_module_t  ngx_event_module;
+extern ngx_module_t  ngx_event_core_module;
 extern ngx_module_t  ngx_select_module;
 #if (HAVE_POLL)
 extern ngx_module_t  ngx_poll_module;
@@ -51,7 +51,7 @@
     /* events */
 
     &ngx_events_module,
-    &ngx_event_module,
+    &ngx_event_core_module,
 
     &ngx_select_module,
 #if (HAVE_POLL)
diff --git a/src/core/ngx_string.h b/src/core/ngx_string.h
index 036194b..73ed43a 100644
--- a/src/core/ngx_string.h
+++ b/src/core/ngx_string.h
@@ -18,8 +18,6 @@
 
 #if (WIN32)
 
-#define ngx_memzero               ZeroMemory
-
 #define ngx_strncasecmp           strnicmp
 #define ngx_strcasecmp            stricmp
 #define ngx_strncmp               strncmp
@@ -32,8 +30,6 @@
 
 #else
 
-#define ngx_memzero               bzero
-
 #define ngx_strncasecmp           strncasecmp
 #define ngx_strcasecmp            strcasecmp
 #define ngx_strncmp               strncmp
@@ -46,9 +42,19 @@
 
 #endif
 
+/*
+ * msvc and icc compile memset() to inline "rep stos"
+ * while ZeroMemory and bzero are calls.
+ */
+#define ngx_memzero(buf, n)       memset(buf, n, 0)
+
+/* msvc and icc compile memcpy() to inline "rep movs" */
 #define ngx_memcpy(dst, src, n)   memcpy(dst, src, n)
 #define ngx_cpymem(dst, src, n)   ((char *) memcpy(dst, src, n)) + n
 
+/* msvc and icc compile memcmp() to inline loop */
+#define ngx_memcmp                memcmp
+
 char *ngx_cpystrn(char *dst, char *src, size_t n);
 int ngx_rstrncmp(char *s1, char *s2, size_t n);
 int ngx_atoi(char *line, size_t n);
diff --git a/src/event/modules/ngx_poll_module.c b/src/event/modules/ngx_poll_module.c
index a49afea..b03ed17 100644
--- a/src/event/modules/ngx_poll_module.c
+++ b/src/event/modules/ngx_poll_module.c
@@ -58,7 +58,7 @@
 {
     ngx_event_conf_t  *ecf;
 
-    ecf = ngx_event_get_conf(ngx_event_module);
+    ecf = ngx_event_get_conf(ngx_event_core_module);
 
     ngx_test_null(event_list,
                   ngx_alloc(sizeof(struct pollfd) * ecf->connections, log),
diff --git a/src/event/modules/ngx_select_module.c b/src/event/modules/ngx_select_module.c
index 96a5d67..a55be30 100644
--- a/src/event/modules/ngx_select_module.c
+++ b/src/event/modules/ngx_select_module.c
@@ -70,7 +70,7 @@
 {
     ngx_event_conf_t  *ecf;
 
-    ecf = ngx_event_get_conf(ngx_event_module);
+    ecf = ngx_event_get_conf(ngx_event_core_module);
 
     FD_ZERO(&master_read_fd_set);
     FD_ZERO(&master_write_fd_set);
@@ -376,7 +376,7 @@
 {
     ngx_event_conf_t  *ecf;
 
-    ecf = ngx_event_get_conf(ngx_event_module);
+    ecf = ngx_event_get_conf(ngx_event_core_module);
 
     /* the default FD_SETSIZE is 1024U in FreeBSD 5.x */
 
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index f6d10cc..263d88e 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -65,9 +65,9 @@
 };
 
 
-static ngx_str_t  event_name = ngx_string("event");
+static ngx_str_t  event_core_name = ngx_string("event_core");
 
-static ngx_command_t  ngx_event_commands[] = {
+static ngx_command_t  ngx_event_core_commands[] = {
 
     {ngx_string("connections"),
      NGX_EVENT_CONF|NGX_CONF_TAKE1,
@@ -94,8 +94,8 @@
 };
 
 
-ngx_event_module_t  ngx_event_module_ctx = {
-    &event_name,
+ngx_event_module_t  ngx_event_core_module_ctx = {
+    &event_core_name,
     ngx_event_create_conf,                 /* create configuration */
     ngx_event_init_conf,                   /* init configuration */
 
@@ -103,10 +103,10 @@
 };
 
 
-ngx_module_t  ngx_event_module = {
+ngx_module_t  ngx_event_core_module = {
     NGX_MODULE,
-    &ngx_event_module_ctx,                 /* module context */
-    ngx_event_commands,                    /* module directives */
+    &ngx_event_core_module_ctx,            /* module context */
+    ngx_event_core_commands,               /* module directives */
     NGX_EVENT_MODULE,                      /* module type */
     NULL                                   /* init module */
 };
@@ -125,7 +125,7 @@
     ngx_iocp_conf_t     *iocpcf;
 #endif
 
-    ecf = ngx_event_get_conf(ngx_event_module);
+    ecf = ngx_event_get_conf(ngx_event_core_module);
 
 ngx_log_debug(log, "CONN: %d" _ ecf->connections);
 ngx_log_debug(log, "TYPE: %d" _ ecf->use);
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 9b6dd23..8ae2b53 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -345,7 +345,7 @@
 
 
 extern ngx_module_t        ngx_events_module;
-extern ngx_module_t        ngx_event_module;
+extern ngx_module_t        ngx_event_core_module;
 
 
 #define ngx_event_get_conf(module)                                           \
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index 7e87761..2d2eed4 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -17,7 +17,7 @@
     ngx_connection_t  *c, *ls;
     ngx_event_conf_t  *ecf;
 
-    ecf = ngx_event_get_conf(ngx_event_module);
+    ecf = ngx_event_get_conf(ngx_event_core_module);
 
     ls = ev->data;
 
diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c
index a49cc92..9ca3fe5 100644
--- a/src/event/ngx_event_timer.c
+++ b/src/event/ngx_event_timer.c
@@ -15,7 +15,7 @@
     ngx_event_t       *new_queue;
     ngx_event_conf_t  *ecf;
 
-    ecf = ngx_event_get_conf(ngx_event_module);
+    ecf = ngx_event_get_conf(ngx_event_core_module);
 
     if (ngx_timer_queue_num < ecf->timer_queues) {
         ngx_test_null(new_queue,
diff --git a/src/http/ngx_http_cache.c b/src/http/ngx_http_cache.c
index b156966..e29241b 100644
--- a/src/http/ngx_http_cache.c
+++ b/src/http/ngx_http_cache.c
@@ -83,7 +83,8 @@
 
     for (sum = 0; len; len--) {
         /*
-         * gcc 2.95.2 x86 compiles that operator into the single rol opcode.
+         * gcc 2.95.2 x86 and icc 7.1.006 compile that operator
+         * into the single rol opcode.
          * msvc 6.0sp2 compiles it into four opcodes.
          */
         sum = sum >> 1 | sum << 31;
diff --git a/src/os/win32/ngx_errno.c b/src/os/win32/ngx_errno.c
index 30c1b93..3a9487c 100644
--- a/src/os/win32/ngx_errno.c
+++ b/src/os/win32/ngx_errno.c
@@ -34,7 +34,7 @@
     ngx_err_t  format_error;
 
     len = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM
-                        | FORMAT_MESSAGE_IGNORE_INSERTS,
+                        |FORMAT_MESSAGE_IGNORE_INSERTS,
                         NULL, err,
                         MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                         errstr, size, NULL);
diff --git a/src/os/win32/ngx_win32_init.c b/src/os/win32/ngx_win32_init.c
index 6bc69e4..c522c9e 100644
--- a/src/os/win32/ngx_win32_init.c
+++ b/src/os/win32/ngx_win32_init.c
@@ -77,20 +77,34 @@
                              + osvi.wServicePackMinor;
 
         ngx_log_error(NGX_LOG_INFO, log, 0,
-                      "OS: %u build:%u, %s, suite:%x, type:%u",
+                      "OS: %u build:%u, \"%s\", suite:%x, type:%u",
                       ngx_win32_version, osvi.dwBuildNumber, osvi.szCSDVersion,
                       osvi.wReserved[0], osvi.wReserved[1]);
 
 #if 0
         ngx_log_error(NGX_LOG_INFO, log, 0,
-                      "OS: %u build:%u, %s, suite:%x, type:%u",
+                      "OS: %u build:%u, \"%s\", suite:%x, type:%u",
                       ngx_win32_version, osvi.dwBuildNumber, osvi.szCSDVersion,
                       osvi.wSuiteMask, osvi.wProductType);
 #endif
 
     } else {
-        ngx_log_error(NGX_LOG_INFO, log, 0, "OS: %u build:%u, %s",
-                      ngx_win32_version, osvi.dwBuildNumber, osvi.szCSDVersion);
+        if (osvi.dwPlatformId == 1) {
+
+            /* Win9x build */
+
+            ngx_log_error(NGX_LOG_INFO, log, 0, "OS: %u build:%u.%u.%u, \"%s\"",
+                          ngx_win32_version,
+                          osvi.dwBuildNumber >> 24,
+                          (osvi.dwBuildNumber >> 16) & 0xff,
+                          osvi.dwBuildNumber & 0xffff,
+                          osvi.szCSDVersion);
+
+        } else {
+            ngx_log_error(NGX_LOG_INFO, log, 0, "OS: %u build:%u, \"%s\"",
+                          ngx_win32_version, osvi.dwBuildNumber,
+                          osvi.szCSDVersion);
+        }
     }
 
 
