diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index 3846d5f..fa3aa9b 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -11,8 +11,8 @@
 
 
 typedef struct {
-    int  changes;
-    int  events;
+    u_int  changes;
+    u_int  events;
 } ngx_kqueue_conf_t;
 
 
@@ -27,11 +27,10 @@
 static char *ngx_kqueue_init_conf(ngx_pool_t *pool, void *conf);
 
 
-int                    ngx_kqueue;
+int                    ngx_kqueue = -1;
 
 static struct kevent  *change_list, *event_list;
-static u_int           max_changes, nchanges;
-static int             nevents;
+static u_int           max_changes, nchanges, nevents;
 
 
 static ngx_str_t      kqueue_name = ngx_string("kqueue");
@@ -86,6 +85,7 @@
 
 static int ngx_kqueue_init(ngx_log_t *log)
 {
+    struct timespec     ts;
     ngx_kqueue_conf_t  *kcf;
 
     kcf = ngx_event_get_conf(ngx_kqueue_module);
@@ -93,28 +93,57 @@
 ngx_log_debug(log, "CH: %d" _ kcf->changes);
 ngx_log_debug(log, "EV: %d" _ kcf->events);
 
-    max_changes = kcf->changes;
-    nevents = kcf->events;
-    nchanges = 0;
-
-    ngx_kqueue = kqueue();
-
     if (ngx_kqueue == -1) {
-        ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "kqueue() failed");
-        return NGX_ERROR;
+        ngx_kqueue = kqueue();
+
+        if (ngx_kqueue == -1) {
+            ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "kqueue() failed");
+            return NGX_ERROR;
+        }
     }
 
-    ngx_test_null(change_list,
-                  ngx_alloc(kcf->changes * sizeof(struct kevent), log),
-                  NGX_ERROR);
-    ngx_test_null(event_list,
-                  ngx_alloc(kcf->events * sizeof(struct kevent), log),
-                  NGX_ERROR);
+    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;
+            }
+        }
+
+        if (change_list) {
+            ngx_free(change_list);
+        }
+
+        ngx_test_null(change_list,
+                      ngx_alloc(kcf->changes * sizeof(struct kevent), log),
+                      NGX_ERROR);
+    }
+
+    max_changes = kcf->changes;
+    nchanges = 0;
+
+    if (nevents < kcf->events) {
+        if (event_list) {
+            ngx_free(event_list);
+        }
+
+        ngx_test_null(event_list,
+                      ngx_alloc(kcf->events * sizeof(struct kevent), log),
+                      NGX_ERROR);
+    }
+
+    nevents = kcf->events;
 
     if (ngx_event_timer_init(log) == NGX_ERROR) {
         return NGX_ERROR;
     }
 
+    /* TODO: re-add active events with new udata
+             if ecf->connections was increased */
+
     ngx_event_actions = ngx_kqueue_module_ctx.actions;
 
     ngx_event_flags = NGX_HAVE_LEVEL_EVENT
@@ -139,10 +168,18 @@
         ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "kqueue close() failed");
     }
 
+    ngx_kqueue = -1;
+
     ngx_event_timer_done(log);
 
     ngx_free(change_list);
     ngx_free(event_list);
+
+    change_list = NULL;
+    event_list = NULL;
+    max_changes = 0;
+    nchanges = 0;
+    nevents = 0;
 }
 
 
@@ -209,8 +246,8 @@
 
 static int ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags)
 {
-    struct timespec     ts;
-    ngx_connection_t   *c;
+    struct timespec    ts;
+    ngx_connection_t  *c;
 
     c = ev->data;
 
@@ -227,7 +264,7 @@
         ts.tv_nsec = 0;
 
         if (kevent(ngx_kqueue, change_list, nchanges, NULL, 0, &ts) == -1) {
-            ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno, "kevent failed");
+            ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno, "kevent() failed");
             return NGX_ERROR;
         }
 
@@ -295,7 +332,7 @@
     events = kevent(ngx_kqueue, change_list, nchanges, event_list, nevents, tp);
 
     if (events == -1) {
-        ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "kevent failed");
+        ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "kevent() failed");
         return NGX_ERROR;
     }
 
@@ -313,7 +350,7 @@
     } else {
         if (events == 0) {
             ngx_log_error(NGX_LOG_ALERT, log, 0,
-                          "kevent returns no events without timeout");
+                          "kevent() returned no events without timeout");
             return NGX_ERROR;
         }
     }
@@ -342,7 +379,7 @@
 
         if (event_list[i].flags & EV_ERROR) {
             ngx_log_error(NGX_LOG_ALERT, log, event_list[i].data,
-                          "kevent error on %d", event_list[i].ident);
+                          "kevent() error on %d", event_list[i].ident);
             continue;
         }
 
@@ -414,8 +451,8 @@
 {
     ngx_kqueue_conf_t *kcf = conf;
 
-    ngx_conf_init_value(kcf->changes, 512);
-    ngx_conf_init_value(kcf->events, 512);
+    ngx_conf_init_unsigned_value(kcf->changes, 512);
+    ngx_conf_init_unsigned_value(kcf->events, 512);
 
     return NGX_CONF_OK;
 }
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index b706979..f6d10cc 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -42,7 +42,6 @@
 
 
 static ngx_str_t  events_name = ngx_string("events");
-static ngx_str_t  event_name = ngx_string("event");
 
 static ngx_command_t  ngx_events_commands[] = {
 
@@ -66,6 +65,7 @@
 };
 
 
+static ngx_str_t  event_name = ngx_string("event");
 
 static ngx_command_t  ngx_event_commands[] = {
 
diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c
index 081afdb..a49cc92 100644
--- a/src/event/ngx_event_timer.c
+++ b/src/event/ngx_event_timer.c
@@ -12,20 +12,33 @@
 int ngx_event_timer_init(ngx_log_t *log)
 {
     int                i;
+    ngx_event_t       *new_queue;
     ngx_event_conf_t  *ecf;
 
     ecf = ngx_event_get_conf(ngx_event_module);
 
-    ngx_timer_queue_num = ecf->timer_queues;
-    ngx_timer_cur_queue = 0;
+    if (ngx_timer_queue_num < ecf->timer_queues) {
+        ngx_test_null(new_queue,
+                      ngx_alloc(ecf->timer_queues * sizeof(ngx_event_t), log),
+                      NGX_ERROR);
 
-    ngx_test_null(ngx_timer_queue,
-                  ngx_alloc(ngx_timer_queue_num * sizeof(ngx_event_t), log),
-                  NGX_ERROR);
+        for (i = 0; i < ngx_timer_queue_num; i++) {
+            new_queue[i] = ngx_timer_queue[i];
+        }
 
-    for (i = 0; i < ngx_timer_queue_num; i++) {
-        ngx_timer_queue[i].timer_prev = &ngx_timer_queue[i];
-        ngx_timer_queue[i].timer_next = &ngx_timer_queue[i];
+        if (ngx_timer_queue) {
+            ngx_free(ngx_timer_queue);
+        }
+
+        ngx_timer_queue = new_queue;
+
+        ngx_timer_queue_num = ecf->timer_queues;
+        ngx_timer_cur_queue = 0;
+
+        for (/* void */; i < ngx_timer_queue_num; i++) {
+            ngx_timer_queue[i].timer_prev = &ngx_timer_queue[i];
+            ngx_timer_queue[i].timer_next = &ngx_timer_queue[i];
+        }
     }
 
     return NGX_OK;;
@@ -35,6 +48,7 @@
 void ngx_event_timer_done(ngx_log_t *log)
 {
     ngx_free(ngx_timer_queue);
+    ngx_timer_queue = NULL;
 }
 
 
