diff --git a/src/core/ngx_log.h b/src/core/ngx_log.h
index 4765f3b..20fb227 100644
--- a/src/core/ngx_log.h
+++ b/src/core/ngx_log.h
@@ -163,6 +163,12 @@
         ngx_log_error_core(NGX_LOG_DEBUG, log, err, fmt, \
                            arg1, arg2, arg3, arg4, arg5, arg6)
 
+#define ngx_log_debug7(level, log, err, fmt, \
+                       arg1, arg2, arg3, arg4, arg5, arg6, arg7) \
+    if (log->log_level & level) \
+        ngx_log_error_core(NGX_LOG_DEBUG, log, err, fmt, \
+                           arg1, arg2, arg3, arg4, arg5, arg6, arg7)
+
 #else /* NO VARIADIC MACROS */
 
 #define ngx_log_debug0(level, log, err, fmt) \
@@ -194,6 +200,12 @@
     if (log->log_level & level) \
         ngx_log_debug_core(log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6)
 
+#define ngx_log_debug7(level, log, err, fmt, \
+                       arg1, arg2, arg3, arg4, arg5, arg6, arg7) \
+    if (log->log_level & level) \
+        ngx_log_debug_core(log, err, fmt, \
+                       arg1, arg2, arg3, arg4, arg5, arg6, arg7)
+
 #endif
 
 #else /* NO NGX_DEBUG */
@@ -205,6 +217,8 @@
 #define ngx_log_debug4(level, log, err, fmt, arg1, arg2, arg3, arg4)
 #define ngx_log_debug5(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5)
 #define ngx_log_debug6(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6)
+#define ngx_log_debug7(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5, arg6,
+                       arg7)
 
 #endif
 
diff --git a/src/event/modules/ngx_devpoll_module.c b/src/event/modules/ngx_devpoll_module.c
index 29da2fb..3706e01 100644
--- a/src/event/modules/ngx_devpoll_module.c
+++ b/src/event/modules/ngx_devpoll_module.c
@@ -405,7 +405,8 @@
     ngx_time_update(tv.tv_sec);
 
     delta = ngx_elapsed_msec;
-    ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
+    ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000
+                                          + tv.tv_usec / 1000 - ngx_start_msec;
 
     if (err) {
         ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
diff --git a/src/event/modules/ngx_epoll_module.c b/src/event/modules/ngx_epoll_module.c
index fac28f1..ebe2cab 100644
--- a/src/event/modules/ngx_epoll_module.c
+++ b/src/event/modules/ngx_epoll_module.c
@@ -459,7 +459,8 @@
     ngx_time_update(tv.tv_sec);
 
     delta = ngx_elapsed_msec;
-    ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
+    ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000
+                                          + tv.tv_usec / 1000 - ngx_start_msec;
 
     if (timer != NGX_TIMER_INFINITE) {
         delta = ngx_elapsed_msec - delta;
diff --git a/src/event/modules/ngx_iocp_module.c b/src/event/modules/ngx_iocp_module.c
index 4506cbc..5273152 100644
--- a/src/event/modules/ngx_iocp_module.c
+++ b/src/event/modules/ngx_iocp_module.c
@@ -198,7 +198,8 @@
                    "iocp: %d b:%d k:%d ov:" PTR_FMT, rc, bytes, key, ovlp);
 
     delta = ngx_elapsed_msec;
-    ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
+    ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000
+                                          + tv.tv_usec / 1000 - ngx_start_msec;
 
     if (err) {
         if (ovlp == NULL) {
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index ddce6d9..6116de0 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -527,9 +527,6 @@
     ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000
                                           + tv.tv_usec / 1000 - ngx_start_msec;
 
-    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
-                   "elapsed: %qd", ngx_elapsed_msec);
-
     if (err) {
         ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
                       cycle->log, err, "kevent() failed");
diff --git a/src/event/modules/ngx_poll_module.c b/src/event/modules/ngx_poll_module.c
index 75172f1..7c23f5f 100644
--- a/src/event/modules/ngx_poll_module.c
+++ b/src/event/modules/ngx_poll_module.c
@@ -341,7 +341,8 @@
     ngx_time_update(tv.tv_sec);
 
     delta = ngx_elapsed_msec;
-    ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
+    ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000
+                                          + tv.tv_usec / 1000 - ngx_start_msec;
 
     ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
                    "poll ready %d of %d", ready, nevents);
diff --git a/src/event/modules/ngx_rtsig_module.c b/src/event/modules/ngx_rtsig_module.c
index 517c1a0..e6b16fe 100644
--- a/src/event/modules/ngx_rtsig_module.c
+++ b/src/event/modules/ngx_rtsig_module.c
@@ -389,7 +389,8 @@
     ngx_time_update(tv.tv_sec);
 
     delta = ngx_elapsed_msec;
-    ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
+    ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000
+                                          + tv.tv_usec / 1000 - ngx_start_msec;
 
     if (err) {
         ngx_accept_mutex_unlock();
diff --git a/src/event/modules/ngx_select_module.c b/src/event/modules/ngx_select_module.c
index e32f1db..5cb421f 100644
--- a/src/event/modules/ngx_select_module.c
+++ b/src/event/modules/ngx_select_module.c
@@ -378,8 +378,8 @@
             ngx_time_update(tv.tv_sec);
             deltas = tv.tv_usec / 1000;
 
-            ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000
-                                                              - ngx_start_msec;
+            ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000
+                                          + tv.tv_usec / 1000 - ngx_start_msec;
         } else {
             ngx_elapsed_msec += delta;
         }
@@ -392,8 +392,9 @@
         ngx_gettimeofday(&tv);
         ngx_time_update(tv.tv_sec);
 
-        ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000
-                                                              - ngx_start_msec;
+        ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000
+                                          + tv.tv_usec / 1000 - ngx_start_msec;
+
         if (ready == 0) {
             ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
                           "select() returned no events without timeout");
diff --git a/src/http/modules/ngx_http_charset_filter.c b/src/http/modules/ngx_http_charset_filter.c
index 63ac0e1..d7ce88e 100644
--- a/src/http/modules/ngx_http_charset_filter.c
+++ b/src/http/modules/ngx_http_charset_filter.c
@@ -148,12 +148,19 @@
     }
 #endif
 
-    if (r->headers_out.content_type == NULL
-        || ngx_strncasecmp(r->headers_out.content_type->value.data,
+    if (r->headers_out.content_type == NULL) {
+        return ngx_http_next_header_filter(r);
+    }
+
+    if (ngx_strncasecmp(r->headers_out.content_type->value.data,
                                                               "text/", 5) != 0
-        || ngx_strstr(r->headers_out.content_type->value.data, "charset")
-                                                                       != NULL
-       )
+        && ngx_strncasecmp(r->headers_out.content_type->value.data,
+                                          "application/x-javascript", 24) != 0)
+    {
+        return ngx_http_next_header_filter(r);
+    }
+
+    if (ngx_strstr(r->headers_out.content_type->value.data, "charset") != NULL)
     {
         return ngx_http_next_header_filter(r);
     }
diff --git a/src/http/modules/ngx_http_headers_filter.c b/src/http/modules/ngx_http_headers_filter.c
index b850ee3..7dcb88d 100644
--- a/src/http/modules/ngx_http_headers_filter.c
+++ b/src/http/modules/ngx_http_headers_filter.c
@@ -125,7 +125,8 @@
                     cc->value.data = (u_char *) "no-cache";
 
                 } else {
-                    cc->value.data = ngx_palloc(r->pool, TIME_T_LEN + 1);
+                    cc->value.data = ngx_palloc(r->pool,
+                                          sizeof("max-age=") + TIME_T_LEN + 1);
                     if (cc->value.data == NULL) {
                         return NGX_ERROR;
                     }
diff --git a/src/os/unix/ngx_process.c b/src/os/unix/ngx_process.c
index d6e2d39..cd160c2 100644
--- a/src/os/unix/ngx_process.c
+++ b/src/os/unix/ngx_process.c
@@ -20,7 +20,23 @@
     ngx_pid_t  pid;
     ngx_int_t  s;
 
-    s = respawn >= 0 ? respawn : ngx_last_process;
+    if (respawn >= 0) {
+        s = respawn;
+
+    } else {
+        for (s = 0; s < ngx_last_process; s++) {
+            if (ngx_processes[s].pid == -1) {
+                break;
+            }
+        }
+
+        if (s == NGX_MAX_PROCESSES) {
+            ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
+                          "no more than %d processes can be spawned",
+                          NGX_MAX_PROCESSES);
+            return NGX_ERROR;
+        }
+    }
 
 
     if (respawn != NGX_PROCESS_DETACHED) {
@@ -146,7 +162,9 @@
         break;
     }
 
-    ngx_last_process++;
+    if (s == ngx_last_process) {
+        ngx_last_process++;
+    }
 
     return pid;
 }
@@ -220,7 +238,7 @@
 
 
         one = 1;
-        process = "";
+        process = "unknown process";
 
         for (i = 0; i < ngx_last_process; i++) {
             if (ngx_processes[i].pid == pid) {
@@ -231,10 +249,6 @@
             }
         }
 
-        if (i == ngx_last_process) {
-            process = "unknown process";
-        }
-
         if (WTERMSIG(status)) {
             ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0,
                           "%s " PID_T_FMT " exited on signal %d%s",
diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c
index 83b8da8..4ff2bae 100644
--- a/src/os/unix/ngx_process_cycle.c
+++ b/src/os/unix/ngx_process_cycle.c
@@ -306,11 +306,17 @@
         ch.slot = ngx_process_slot;
         ch.fd = ngx_processes[ngx_process_slot].channel[0];
 
-        for (i = 0; i < ngx_last_process - 1; i++) {
+        for (i = 0; i < ngx_last_process; i++) {
 
-        ngx_log_debug4(NGX_LOG_DEBUG_CORE, cycle->log, 0,
-                       "pass channel s: %d pid:" PID_T_FMT " fd:%d to:"
-                       PID_T_FMT, ch.slot, ch.pid, ch.fd, ngx_processes[i].pid);
+            if (i == ngx_process_slot || ngx_processes[i].pid == -1) {
+                continue;
+            }
+
+            ngx_log_debug5(NGX_LOG_DEBUG_CORE, cycle->log, 0,
+                           "pass channel s:%d pid:" PID_T_FMT
+                           " fd:%d to s:%d pid:" PID_T_FMT,
+                           ch.slot, ch.pid, ch.fd,
+                           i, ngx_processes[i].pid);
 
             /* TODO: NGX_AGAIN */
 
@@ -367,7 +373,7 @@
 
     for (i = 0; i < ngx_last_process; i++) {
 
-        if (ngx_processes[i].detached) {
+        if (ngx_processes[i].detached || ngx_processes[i].pid == -1) {
             continue;
         }
 
@@ -432,8 +438,9 @@
     live = 0;
     for (i = 0; i < ngx_last_process; i++) {
 
-        ngx_log_debug6(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
-                       "child: " PID_T_FMT " e:%d t:%d d:%d r:%d j:%d",
+        ngx_log_debug7(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+                       "child: %d " PID_T_FMT " e:%d t:%d d:%d r:%d j:%d",
+                       i,
                        ngx_processes[i].pid,
                        ngx_processes[i].exiting,
                        ngx_processes[i].exited,
@@ -441,6 +448,10 @@
                        ngx_processes[i].respawn,
                        ngx_processes[i].just_respawn);
 
+        if (ngx_processes[i].pid == -1) {
+            continue;
+        }
+
         if (ngx_processes[i].exited) {
 
             if (!ngx_processes[i].detached) {
@@ -454,13 +465,14 @@
 
                 for (n = 0; n < ngx_last_process; n++) {
                     if (ngx_processes[n].exited
+                        || ngx_processes[n].pid == -1
                         || ngx_processes[n].channel[0] == -1)
                     {
                         continue;
                     }
 
                     ngx_log_debug3(NGX_LOG_DEBUG_CORE, cycle->log, 0,
-                       "pass close channel s: %d pid:" PID_T_FMT
+                       "pass close channel s:%d pid:" PID_T_FMT
                        " to:" PID_T_FMT, ch.slot, ch.pid, ngx_processes[n].pid);
 
                     /* TODO: NGX_AGAIN */
@@ -498,8 +510,11 @@
                 }
             }
 
-            if (i != --ngx_last_process) {
-                ngx_processes[i--] = ngx_processes[ngx_last_process];
+            if (i == ngx_last_process - 1) {
+                ngx_last_process--;
+
+            } else {
+                ngx_processes[i].pid = -1;
             }
 
         } else if (ngx_processes[i].exiting || !ngx_processes[i].detached) {
@@ -593,14 +608,9 @@
         }
     }
 
-    for (n = 0; n <= ngx_last_process; n++) {
+    for (n = 0; n < ngx_last_process; n++) {
 
-        if (n == ngx_process_slot) {
-            if (close(ngx_processes[n].channel[0]) == -1) {
-                ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
-                              "close() failed");
-            }
-
+        if (ngx_processes[n].pid == -1) {
             continue;
         }
 
@@ -610,6 +620,11 @@
         }
     }
 
+    if (close(ngx_processes[ngx_process_slot].channel[0]) == -1) {
+        ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+                      "close() failed");
+    }
+
 #if 0
     ngx_last_process = 0;
 #endif
