diff --git a/src/core/nginx.c b/src/core/nginx.c
index 30ebf3f..89dd6f0 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -22,7 +22,9 @@
 int ngx_connection_counter;
 
 
-#if 1
+int restart;
+int rotate;
+
 
 int main(int argc, char *const *argv)
 {
@@ -53,6 +55,8 @@
     /* life cycle */
 
     for ( ;; ) {
+        /* STUB */ cycle->log->file->fd = log->file->fd;
+        /* STUB */ cycle->log->log_level = NGX_LOG_DEBUG;
 
         /* STUB */
         ngx_io = ngx_os_io;
@@ -66,9 +70,26 @@
 
         /* threads */
 
+        restart = 0;
+        rotate = 0;
+
         for ( ;; ) {
 
-            ngx_worker(cycle);
+            for ( ;; ) {
+                ngx_log_debug(cycle->log, "worker cycle");
+
+                ngx_process_events(cycle->log);
+
+                if (rotate) {
+                    ngx_log_debug(cycle->log, "rotate");
+                }
+
+                if (restart) {
+                    ngx_log_debug(cycle->log, "restart");
+                    break;
+                }
+
+            }
 
             new_cycle = ngx_init_cycle(cycle, cycle->log);
             if (new_cycle == NULL) {
@@ -316,7 +337,7 @@
 
 
 
-#else
+#if 0
 
 
 int main(int argc, char *const *argv)
diff --git a/src/core/ngx_os_init.h b/src/core/ngx_os_init.h
index 3555095..18e7574 100644
--- a/src/core/ngx_os_init.h
+++ b/src/core/ngx_os_init.h
@@ -40,4 +40,8 @@
 extern int          ngx_inherited_nonblocking;
 
 
+extern int          restart;
+extern int          rotate;
+
+
 #endif /* _NGX_OS_INIT_H_INCLUDED_ */
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index fa3aa9b..17e991e 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -11,8 +11,11 @@
 
 
 typedef struct {
-    u_int  changes;
-    u_int  events;
+    int             kqueue;
+    struct kevent  *change_list;
+    u_int           changes;
+    struct kevent  *event_list;
+    u_int           events;
 } ngx_kqueue_conf_t;
 
 
@@ -83,6 +86,138 @@
 };
 
 
+#if 0
+
+static int ngx_kqueue_init(ngx_cycle_t *cycle, ngx_log_t *log)
+{
+    struct timespec     ts;
+    ngx_kqueue_conf_t  *kcf;
+
+    kcf = ngx_event_get_conf(cycle->conf_ctx, ngx_kqueue_module);
+
+ngx_log_debug(log, "CH: %d" _ kcf->changes);
+ngx_log_debug(log, "EV: %d" _ kcf->events);
+
+    if (ngx_kqueue == -1) {
+        kcf->kqueue = kqueue();
+
+        if (kcf->kqueue == -1) {
+            ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "kqueue() failed");
+            return NGX_ERROR;
+        }
+
+    } else {
+        kcf->kqueue = ngx_kqueue;
+    }
+
+    if (max_changes < kcf->changes) {
+        if (nchanges) {
+            ts.tv_sec = 0;
+            ts.tv_nsec = 0;
+
+            if (kevent(ngx_kqueue, change_list, nchanges, NULL, 0, &ts) == -1) {
+                ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "kevent() failed");
+                return NGX_ERROR;
+            }
+
+            nchanges = 0;
+        }
+
+        ngx_test_null(kcf->change_list,
+                      ngx_alloc(kcf->changes * sizeof(struct kevent), log),
+                      NGX_ERROR);
+
+    } else {
+        kcf->change_list = change_list;
+    }
+
+    if (nevents < kcf->events) {
+        ngx_test_null(kcf->event_list,
+                      ngx_alloc(kcf->events * sizeof(struct kevent), log),
+                      NGX_ERROR);
+    } else {
+        kcf->event_list = event_list;
+    }
+
+    if (ngx_event_timer_init(cycle, log) == NGX_ERROR) {
+        return NGX_ERROR;
+    }
+
+    return NGX_OK;
+}
+
+
+static void ngx_kqueue_commit(ngx_cycle_t *cycle, ngx_log_t *log)
+{
+    ngx_kqueue_conf_t  *kcf;
+
+    kcf = ngx_event_get_conf(cycle->conf_ctx, ngx_kqueue_module);
+
+    ngx_kqueue = kcf->kqueue;
+
+    if (change_list != kcf->change_list) {
+        ngx_free(change_list);
+        change_list = kcf->change_list;
+    }
+
+    max_changes = kcf->changes;
+
+    if (event_list != kcf->event_list) {
+        ngx_free(event_list);
+        event_list = kcf->event_list;
+    }
+
+    nevents = kcf->events;
+
+    ngx_event_timer_commit(cycle, log);
+
+    /* TODO: re-add active events with new udata
+             if ecf->connections was increased */
+
+    ngx_event_actions = ngx_kqueue_module_ctx.actions;
+    ngx_io = ngx_os_io;
+
+    ngx_event_flags = NGX_HAVE_LEVEL_EVENT
+                     |NGX_HAVE_ONESHOT_EVENT
+#if (HAVE_CLEAR_EVENT)
+                     |NGX_HAVE_CLEAR_EVENT
+#else
+                     |NGX_USE_LEVEL_EVENT
+#endif
+#if (HAVE_LOWAT_EVENT)
+                     |NGX_HAVE_LOWAT_EVENT
+#endif
+                     |NGX_HAVE_KQUEUE_EVENT;
+}
+
+
+static void ngx_kqueue_rollback(ngx_cycle_t *cycle, ngx_log_t *log)
+{
+    ngx_kqueue_conf_t  *kcf;
+
+    kcf = ngx_event_get_conf(cycle->conf_ctx, ngx_kqueue_module);
+
+    if (ngx_kqueue == -1) {
+        if (close(kcf->kqueue) == -1) {
+            ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
+                          "kqueue close() failed");
+        }
+    }
+
+    if (change_list != kcf->change_list) {
+        ngx_free(kcf->change_list);
+    }
+
+    if (event_list != kcf->event_list) {
+        ngx_free(kcf->event_list);
+    }
+
+    ngx_event_timer_rollback(cycle, log);
+}
+
+#endif
+
+
 static int ngx_kqueue_init(ngx_log_t *log)
 {
     struct timespec     ts;
diff --git a/src/os/unix/ngx_posix_init.c b/src/os/unix/ngx_posix_init.c
index aadb64c..364df11 100644
--- a/src/os/unix/ngx_posix_init.c
+++ b/src/os/unix/ngx_posix_init.c
@@ -7,6 +7,10 @@
 int  ngx_inherited_nonblocking;
 
 
+void ngx_restart_signal_handler(int signo);
+void ngx_rotate_signal_handler(int signo);
+
+
 int ngx_posix_init(ngx_log_t *log)
 {
     struct sigaction sa;
@@ -15,13 +19,26 @@
     ngx_memzero(&sa, sizeof(struct sigaction));
     sa.sa_handler = SIG_IGN;
     sigemptyset(&sa.sa_mask);
-
     if (sigaction(SIGPIPE, &sa, NULL) == -1) {
         ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
                       "sigaction(SIGPIPE, SIG_IGN) failed");
         return NGX_ERROR;
     }
 
+    sa.sa_handler = ngx_restart_signal_handler;
+    if (sigaction(SIGHUP, &sa, NULL) == -1) {
+        ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
+                      "sigaction(SIGHUP) failed");
+        return NGX_ERROR;
+    }
+
+    sa.sa_handler = ngx_rotate_signal_handler;
+    if (sigaction(SIGUSR1, &sa, NULL) == -1) {
+        ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
+                      "sigaction(SIGUSR1) failed");
+        return NGX_ERROR;
+    }
+
 
     if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) {
         ngx_log_error(NGX_LOG_ALERT, log, errno,
@@ -45,6 +62,18 @@
 }
 
 
+void ngx_restart_signal_handler(int signo)
+{
+    restart = 1;
+}
+
+
+void ngx_rotate_signal_handler(int signo)
+{
+    rotate = 1;
+}
+
+
 int ngx_posix_post_conf_init(ngx_log_t *log)
 {
     ngx_fd_t  pp[2];
