diff --git a/src/core/nginx.c b/src/core/nginx.c
index b436dd4..61cc53e 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -173,7 +173,7 @@
 
 #else
 
-    if (ccf->daemon != 0) {
+    if (!ngx_inherited && ccf->daemon != 0) {
         if (ngx_daemon(cycle->log) == NGX_ERROR) {
             return 1;
         }
@@ -356,11 +356,10 @@
                     live = 0;
                     for (i = 0; i < ngx_last_process; i++) {
 
-                        ngx_log_debug6(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+                        ngx_log_debug5(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
                                        "child: " PID_T_FMT
-                                       " s:%d e:%d t:%d d:%d r:%d",
+                                       " e:%d t:%d d:%d r:%d",
                                        ngx_processes[i].pid,
-                                       ngx_processes[i].signal,
                                        ngx_processes[i].exiting,
                                        ngx_processes[i].exited,
                                        ngx_processes[i].detached,
@@ -396,13 +395,10 @@
                                                ngx_processes[ngx_last_process];
                             }
 
-                        } else if (!ngx_processes[i].detached
-                                   && (ngx_terminate || ngx_quit))
+                        } else if (ngx_processes[i].exiting
+                                   || !ngx_processes[i].detached)
                         {
                             live = 1;
-
-                        } else if (ngx_processes[i].exiting) {
-                            live = 1;
                         }
                     }
                 }
@@ -470,46 +466,29 @@
                 if (signo) {
                     for (i = 0; i < ngx_last_process; i++) {
 
-                        if (!ngx_processes[i].detached) {
-                            ngx_processes[i].signal = signo;
+                        if (ngx_processes[i].detached) {
+                            continue;
+                        }
 
-                            ngx_log_debug2(NGX_LOG_DEBUG_EVENT,
-                                           cycle->log, 0,
-                                           "signal " PID_T_FMT " %d",
-                                           ngx_processes[i].pid, signo);
+                        ngx_log_debug2(NGX_LOG_DEBUG_CORE, cycle->log, 0,
+                                       "kill (" PID_T_FMT ", %d)" ,
+                                       ngx_processes[i].pid, signo);
+
+                        if (kill(ngx_processes[i].pid, signo) == -1) {
+                            ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+                                          "kill(%d, %d) failed",
+                                          ngx_processes[i].pid, signo);
+                            continue;
+                        }
+
+                        if (signo != ngx_signal_value(NGX_REOPEN_SIGNAL)) {
+                            ngx_processes[i].exiting = 1;
                         }
                     }
+
                     signo = 0;
                 }
 
-                for (i = 0; i < ngx_last_process; i++) {
-
-                    if (ngx_processes[i].signal == 0) {
-                        continue;
-                    }
-
-                    ngx_log_debug2(NGX_LOG_DEBUG_CORE, cycle->log, 0,
-                                   "kill (" PID_T_FMT ", %d)" ,
-                                   ngx_processes[i].pid,
-                                   ngx_processes[i].signal);
-
-                    if (kill(ngx_processes[i].pid, ngx_processes[i].signal)
-                                                                         == -1)
-                    {
-                        ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
-                                      "kill(%d, %d) failed",
-                                      ngx_processes[i].pid,
-                                      ngx_processes[i].signal);
-                        continue;
-                    }
-
-                    if (ngx_processes[i].signal
-                                        != ngx_signal_value(NGX_REOPEN_SIGNAL))
-                    {
-                        ngx_processes[i].exiting = 1;
-                    }
-                }
-
                 if (ngx_reopen || ngx_reconfigure || ngx_timer) {
                     break;
                 }
diff --git a/src/core/nginx.h b/src/core/nginx.h
index 4596fd0..99423d3 100644
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -2,7 +2,7 @@
 #define _NGINX_H_INCLUDED_
 
 
-#define NGINX_VER      "nginx/0.0.1"
+#define NGINX_VER      "nginx/0.0.2"
 #define NGINX_CONF     "nginx.conf"
 #define NGINX_PID      "nginx.pid"
 #define NGINX_NEW_PID  NGINX_PID ".newbin"
diff --git a/src/core/ngx_config.h b/src/core/ngx_config.h
index 3039d58..796d7a2 100644
--- a/src/core/ngx_config.h
+++ b/src/core/ngx_config.h
@@ -2,7 +2,10 @@
 #define _NGX_CONFIG_H_INCLUDED_
 
 
-#if 0
+#include <ngx_auto_config.h>
+
+
+#if 1
 /* STUB to allocate a big ngx_connections */
 #undef  FD_SETSIZE
 #define FD_SETSIZE  5000
@@ -53,9 +56,6 @@
 #define PTR_FMT  "%08X"
 
 
-#include <ngx_auto_config.h>
-
-
 #ifndef NGX_SERVER_ROOT
 #define NGX_SERVER_ROOT   "./"
 #if 0
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index e169c8c..28966fe 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -375,6 +375,8 @@
     ngx_gettimeofday(&tv);
     ngx_time_update(tv.tv_sec);
 
+    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "kevent events: %d", events);
+
     delta = ngx_elapsed_msec;
     ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
 
diff --git a/src/event/modules/ngx_poll_module.c b/src/event/modules/ngx_poll_module.c
index 37c10e3..8727c21 100644
--- a/src/event/modules/ngx_poll_module.c
+++ b/src/event/modules/ngx_poll_module.c
@@ -320,12 +320,12 @@
 
         found = 0;
 
-        if (event_list[i].revents & (POLLIN|POLLERR|POLLHUP)) {
+        if (event_list[i].revents & (POLLIN|POLLERR|POLLHUP|POLLNVAL)) {
             found = 1;
             ready_index[nready++] = c->read;
         }
 
-        if (event_list[i].revents & (POLLOUT|POLLERR|POLLHUP)) {
+        if (event_list[i].revents & (POLLOUT|POLLERR|POLLHUP|POLLNVAL)) {
             found = 1;
             ready_index[nready++] = c->write;
         }
diff --git a/src/event/modules/ngx_select_module.c b/src/event/modules/ngx_select_module.c
index 18d1bde..602960b 100644
--- a/src/event/modules/ngx_select_module.c
+++ b/src/event/modules/ngx_select_module.c
@@ -315,14 +315,15 @@
         deltas += delta;
         if (deltas > 1000) {
             ngx_gettimeofday(&tv);
-            deltas = tv.tv_usec / 1000;
             ngx_time_update(tv.tv_sec);
+            deltas = tv.tv_usec / 1000;
         }
 
         ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
                        "select timer: %d, delta: %d", timer, (int) delta);
 
     } else {
+        delta = 0;
         ngx_gettimeofday(&tv);
         ngx_time_update(tv.tv_sec);
 
@@ -438,8 +439,10 @@
     /* disable warning: the default FD_SETSIZE is 1024U in FreeBSD 5.x */
 
     if ((unsigned) ecf->connections > FD_SETSIZE) {
-        return "maximum number of connections "
-               "supported by select() is " ngx_value(FD_SETSIZE);
+        ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
+                      "the maximum number of files "
+                      "supported by select() is " ngx_value(FD_SETSIZE));
+        return NGX_CONF_ERROR;
     }
 
     return NGX_CONF_OK;
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index bf66346..482310b 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -84,6 +84,13 @@
       0,
       NULL },
 
+    { ngx_string("multi_accept"),
+      NGX_EVENT_CONF|NGX_CONF_TAKE1,
+      ngx_conf_set_flag_slot,
+      0,
+      offsetof(ngx_event_conf_t, multi_accept),
+      NULL },
+
       ngx_null_command
 };
 
@@ -421,8 +428,8 @@
                   NGX_CONF_ERROR);
 
     ecf->connections = NGX_CONF_UNSET;
-    ecf->timer_queues = NGX_CONF_UNSET;
     ecf->use = NGX_CONF_UNSET;
+    ecf->multi_accept = NGX_CONF_UNSET;
     ecf->name = (void *) NGX_CONF_UNSET;
 
     return ecf;
@@ -457,7 +464,7 @@
 
     cycle->connection_n = ecf->connections;
 
-    ngx_conf_init_value(ecf->timer_queues, 10);
+    ngx_conf_init_value(ecf->multi_accept, 1);
 
     return NGX_CONF_OK;
 }
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 0e79392..68d9f81 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -345,10 +345,10 @@
 
 
 typedef struct {
-    int    connections;
-    int    timer_queues;
-    int    use;
-    char  *name;
+    int          connections;
+    int          use;
+    ngx_flag_t   multi_accept;
+    char       *name;
 } ngx_event_conf_t;
 
 
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index be282eb..8ecd29b 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -23,6 +23,13 @@
 
     ecf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_event_core_module);
 
+    if (ngx_event_flags & (NGX_USE_EDGE_EVENT|NGX_USE_SIGIO_EVENT)) {
+        ev->available = 1;
+
+    } else if (!(ngx_event_flags & NGX_HAVE_KQUEUE_EVENT)) {
+        ev->available = ecf->multi_accept;
+    }
+
     ls = ev->data;
 
     ngx_log_debug(ev->log, "accept on %s ready: %d" _
@@ -31,26 +38,33 @@
 
     ev->ready = 0;
     accepted = 0;
+    pool = NULL;
 
     do {
 
-        /*
-         * Create the pool before accept() to avoid copy the sockaddr.
-         * Although accept() can fail it's an uncommon case
-         * and besides the pool can be got from the free pool list
-         */
+        if (pool == NULL) {
 
-        if (!(pool = ngx_create_pool(ls->listening->pool_size, ev->log))) {
-            return;
+            /*
+             * Create the pool before accept() to avoid copy the sockaddr.
+             * Although accept() can fail it's an uncommon case
+             * and besides the pool can be got from the free pool list
+             */
+
+            if (!(pool = ngx_create_pool(ls->listening->pool_size, ev->log))) {
+                return;
+            }
         }
 
         if (!(sa = ngx_palloc(pool, ls->listening->socklen))) {
+            ngx_destroy_pool(pool);
             return;
         }
 
         if (!(log = ngx_palloc(pool, sizeof(ngx_log_t)))) {
+            ngx_destroy_pool(pool);
             return;
         }
+
         ngx_memcpy(log, ls->log, sizeof(ngx_log_t));
         pool->log = log;
 
@@ -67,6 +81,8 @@
                 ngx_log_error(NGX_LOG_NOTICE, log, err,
                               "EAGAIN after %d accepted connection(s)",
                               accepted);
+
+                ngx_destroy_pool(pool);
                 return;
             }
 
@@ -74,6 +90,17 @@
                           "accept() on %s failed",
                           ls->listening->addr_text.data);
 
+            if (err == NGX_ECONNABORTED) {
+                if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) {
+                    ev->available--;
+                }
+
+                if (ev->available) {
+                    /* reuse the previously allocated pool */
+                    continue;
+                }
+            }
+
             ngx_destroy_pool(pool);
             return;
         }
@@ -187,8 +214,10 @@
         wev->write = 1;
         wev->ready = 1;
 
-        if (ngx_event_flags & (NGX_USE_AIO_EVENT|NGX_USE_EDGE_EVENT)) {
-            /* aio, iocp, epoll */
+        if (ngx_event_flags
+            & (NGX_USE_AIO_EVENT|NGX_USE_EDGE_EVENT|NGX_USE_SIGIO_EVENT))
+        {
+            /* aio, iocp, sigio, epoll */
             rev->ready = 1;
         }
 
@@ -229,6 +258,8 @@
             }
         }
 
+        pool = NULL;
+
         log->data = NULL;
         log->handler = NULL;
 
diff --git a/src/os/unix/ngx_aio_write_chain.c b/src/os/unix/ngx_aio_write_chain.c
index 7315044..4146d4f 100644
--- a/src/os/unix/ngx_aio_write_chain.c
+++ b/src/os/unix/ngx_aio_write_chain.c
@@ -58,7 +58,7 @@
         }
 
 #if (NGX_DEBUG_WRITE_CHAIN)
-        ngx_log_debug(c->log, "aio_write sent: " OFF_FMT _ c->sent);
+        ngx_log_debug(c->log, "aio_write sent: " OFF_T_FMT _ c->sent);
 #endif
 
         for (cl = in; cl; cl = cl->next) {
diff --git a/src/os/unix/ngx_errno.h b/src/os/unix/ngx_errno.h
index 1542456..208faa2 100644
--- a/src/os/unix/ngx_errno.h
+++ b/src/os/unix/ngx_errno.h
@@ -19,6 +19,7 @@
 #define NGX_EAGAIN        EWOULDBLOCK
 #define NGX_EINPROGRESS   EINPROGRESS
 #define NGX_EADDRINUSE    EADDRINUSE
+#define NGX_ECONNABORTED  ECONNABORTED
 #define NGX_ECONNRESET    ECONNRESET
 #define NGX_ENOTCONN      ENOTCONN
 #define NGX_ETIMEDOUT     ETIMEDOUT
diff --git a/src/os/unix/ngx_linux_config.h b/src/os/unix/ngx_linux_config.h
index de3f287..e43a6ca 100644
--- a/src/os/unix/ngx_linux_config.h
+++ b/src/os/unix/ngx_linux_config.h
@@ -55,6 +55,10 @@
 #include <poll.h>
 #endif
 
+#if (HAVE_EPOLL)
+#include <sys/epoll.h>
+#endif /* HAVE_EPOLL */
+
 
 #if defined TCP_DEFER_ACCEPT && !defined HAVE_DEFERRED_ACCEPT
 #define HAVE_DEFERRED_ACCEPT  1
@@ -76,14 +80,6 @@
 #endif
 
 
-/* 
- * SuSE 8.2 supports epoll's EPOLLET but misses it in <sys/epoll.h>
- */
-#ifndef EPOLLET  
-#define EPOLLET  0x80000000
-#endif
-
-
 #define ngx_setproctitle(title)
 
 
diff --git a/src/os/unix/ngx_process.c b/src/os/unix/ngx_process.c
index bad9a32..68bdaed 100644
--- a/src/os/unix/ngx_process.c
+++ b/src/os/unix/ngx_process.c
@@ -70,7 +70,6 @@
                                       (respawn == NGX_PROCESS_RESPAWN) ? 1 : 0;
     ngx_processes[ngx_last_process].detached =
                                      (respawn == NGX_PROCESS_DETACHED) ? 1 : 0;
-    ngx_processes[ngx_last_process].signal = 0;
     ngx_processes[ngx_last_process].exited = 0;
     ngx_processes[ngx_last_process].exiting = 0;
     ngx_last_process++;
diff --git a/src/os/unix/ngx_process.h b/src/os/unix/ngx_process.h
index 195d3fd..a1aa74b 100644
--- a/src/os/unix/ngx_process.h
+++ b/src/os/unix/ngx_process.h
@@ -8,7 +8,6 @@
 
 typedef struct {
     ngx_pid_t           pid;
-    int                 signal;
     int                 status;
 
     ngx_spawn_proc_pt   proc;
