diff --git a/src/core/ngx_times.c b/src/core/ngx_times.c
index 235e703..a9ddb82 100644
--- a/src/core/ngx_times.c
+++ b/src/core/ngx_times.c
@@ -77,10 +77,8 @@
     }
 
 #if (NGX_THREADS)
-    if (ngx_time_mutex) {
-        if (ngx_mutex_trylock(ngx_time_mutex) != NGX_OK) {
-            return;
-        }
+    if (ngx_mutex_trylock(ngx_time_mutex) != NGX_OK) {
+        return;
     }
 #endif
 
@@ -119,9 +117,7 @@
                                        tm.ngx_tm_sec);
 
 #if (NGX_THREADS)
-    if (ngx_time_mutex) {
-        ngx_mutex_unlock(ngx_time_mutex);
-    }
+    ngx_mutex_unlock(ngx_time_mutex);
 #endif
 
 }
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index e89eb99..bfdd98b 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -413,6 +413,12 @@
         }
     }
 
+#if (NGX_THREADS0)
+    if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
+        return NGX_ERROR;
+    }
+#endif
+
     for (i = 0; i < events; i++) {
 
         ngx_log_debug6(NGX_LOG_DEBUG_EVENT, log, 0,
@@ -468,41 +474,109 @@
 
             ev->ready = 1;
 
-            ev->event_handler(ev);
-
             break;
 
         case EVFILT_VNODE:
             ev->kq_vnode = 1;
 
-            ev->event_handler(ev);
-
             break;
 
         case EVFILT_AIO:
             ev->complete = 1;
             ev->ready = 1;
 
-            ev->event_handler(ev);
-
             break;
 
-
         default:
             ngx_log_error(NGX_LOG_ALERT, log, 0,
                           "unexpected kevent() filter %d",
                           event_list[i].filter);
+            continue;
         }
+
+#if (NGX_THREADS0)
+
+        if (ngx_threaded) {
+
+            if (ev->light) {
+
+                /* the accept event */
+
+                ngx_mutex_unlock(ngx_posted_events_mutex);
+
+                ev->event_handler(ev);
+
+                if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
+                    return NGX_ERROR;
+                }
+
+            } else {
+                ev->next = ngx_posted_events;
+                ngx_posted_events = ev;
+            }
+
+            continue;
+        }
+
+#endif
+
+        ev->event_handler(ev);
     }
 
+#if (NGX_THREADS0)
+    ngx_mutex_unlock(ngx_posted_events_mutex);
+#endif
+
     if (timer && delta) {
         ngx_event_expire_timers((ngx_msec_t) delta);
     }
 
+#if (NGX_THREADS0)
+    if (!ngx_threaded) {
+    }
+#endif
+
+    /* TODO: non-thread mode only */
+
+    ev = ngx_posted_events;
+    ngx_posted_events = NULL;
+
+    while (ev) {
+        ev->event_handler(ev);
+        ev = ev->next;
+    }
+
     return NGX_OK;
 }
 
 
+#if (NGX_THREADS)
+
+static void ngx_kqueue_thread_handler(ngx_event_t *ev)
+{
+    ngx_int_t  instance;
+
+    instance = (uintptr_t) ev & 1;
+    ev = (ngx_event_t *) ((uintptr_t) ev & (uintptr_t) ~1);
+
+    if (ev->active == 0 || ev->instance != instance) {
+
+        /*
+         * the stale event from a file descriptor
+         * that was just closed in this iteration
+         */
+
+        ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ev->log, 0,
+                       "kevent: stale event " PTR_FMT, ev);
+        return;
+    }
+
+    ev->event_handler(ev);
+}
+
+#endif
+
+
 static void *ngx_kqueue_create_conf(ngx_cycle_t *cycle)
 {
     ngx_kqueue_conf_t  *kcf;
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index 80c65dc..820a5f5 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -45,6 +45,7 @@
 
 static int           ngx_event_max_module;
 
+ngx_event_t         *ngx_posted_events;
 
 
 static ngx_str_t  events_name = ngx_string("events");
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 83ce814..899db18 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -27,8 +27,7 @@
 
     u_int            index;
 
-    /* queue in mutex(), aio_read(), aio_write()  */
-    ngx_event_t     *prev;
+    /* the link of the posted queue or the event mutecies queues */
     ngx_event_t     *next;
 
     ngx_log_t       *log;
@@ -374,6 +373,8 @@
 
 
 
+extern ngx_event_t          *ngx_posted_events;
+
 extern int                   ngx_event_flags;
 extern ngx_module_t          ngx_events_module;
 extern ngx_module_t          ngx_event_core_module;
diff --git a/src/os/unix/ngx_freebsd_rfork_thread.c b/src/os/unix/ngx_freebsd_rfork_thread.c
index 4ea8b4c..dd18168 100644
--- a/src/os/unix/ngx_freebsd_rfork_thread.c
+++ b/src/os/unix/ngx_freebsd_rfork_thread.c
@@ -21,6 +21,8 @@
  */
 
 
+ngx_int_t  ngx_threaded;
+
 static inline int ngx_gettid();
 
 
@@ -204,6 +206,8 @@
     /* allow the spinlock in libc malloc() */
     __isthreaded = 1;
 
+    ngx_threaded = 1;
+
     return NGX_OK;
 }
 
@@ -315,6 +319,10 @@
     ngx_uint_t     tries;
     struct sembuf  op;
 
+    if (!ngx_threaded) {
+        return NGX_OK;
+    }
+
 #if (NGX_DEBUG)
     if (try) {
         ngx_log_debug2(NGX_LOG_DEBUG_CORE, m->log, 0,
@@ -438,6 +446,10 @@
     uint32_t       lock, new, old;
     struct sembuf  op;
 
+    if (!ngx_threaded) {
+        return NGX_OK;
+    }
+
     old = m->lock;
 
     if (!(old & NGX_MUTEX_LOCK_BUSY)) {
diff --git a/src/os/unix/ngx_thread.h b/src/os/unix/ngx_thread.h
index 3ecc1e6..3961f32 100644
--- a/src/os/unix/ngx_thread.h
+++ b/src/os/unix/ngx_thread.h
@@ -60,6 +60,9 @@
 ngx_int_t ngx_mutex_unlock(ngx_mutex_t *m);
 
 
+extern ngx_int_t ngx_threaded;
+
+
 #else /* !NGX_THREADS */
 
 #define ngx_log_tid  0
