diff --git a/src/http/modules/ngx_http_autoindex_module.c b/src/http/modules/ngx_http_autoindex_module.c
index 76c5b03..96ab81e 100644
--- a/src/http/modules/ngx_http_autoindex_module.c
+++ b/src/http/modules/ngx_http_autoindex_module.c
@@ -33,6 +33,7 @@
 
 typedef struct {
     ngx_flag_t     enable;
+    ngx_flag_t     localtime;
 } ngx_http_autoindex_loc_conf_t;
 
 
@@ -58,6 +59,13 @@
       offsetof(ngx_http_autoindex_loc_conf_t, enable),
       NULL },
 
+    { ngx_string("autoindex_localtime"),
+      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
+      ngx_conf_set_flag_slot,
+      NGX_HTTP_LOC_CONF_OFFSET,
+      offsetof(ngx_http_autoindex_loc_conf_t, localtime),
+      NULL },
+
       ngx_null_command
 };
 
@@ -391,7 +399,7 @@
 
         *b->last++ = ' ';
 
-        ngx_gmtime(entry[i].mtime, &tm);
+        ngx_gmtime(entry[i].mtime + ngx_gmtoff * 60 * alcf->localtime, &tm);
 
         b->last = ngx_sprintf(b->last, "%02d-%s-%d %02d:%02d ",
                               tm.ngx_tm_mday,
@@ -542,6 +550,7 @@
     }
 
     conf->enable = NGX_CONF_UNSET;
+    conf->localtime = NGX_CONF_UNSET;
 
     return conf;
 }
@@ -554,6 +563,7 @@
     ngx_http_autoindex_loc_conf_t *conf = child;
 
     ngx_conf_merge_value(conf->enable, prev->enable, 0);
+    ngx_conf_merge_value(conf->localtime, prev->localtime, 0);
 
     return NGX_CONF_OK;
 }
diff --git a/src/http/modules/ngx_http_proxy_module.c b/src/http/modules/ngx_http_proxy_module.c
index 92dd6cc..0211dab 100644
--- a/src/http/modules/ngx_http_proxy_module.c
+++ b/src/http/modules/ngx_http_proxy_module.c
@@ -1576,6 +1576,10 @@
 
         *name = src[i].key;
 
+        if (src[i].value.len == 0) {
+            continue;
+        }
+
         if (ngx_http_script_variables_count(&src[i].value) == 0) {
             copy = ngx_array_push_n(conf->headers_set_len,
                                     sizeof(ngx_http_script_copy_code_t));
diff --git a/src/http/modules/ngx_http_rewrite_module.c b/src/http/modules/ngx_http_rewrite_module.c
index da4719b..ed7abd6 100644
--- a/src/http/modules/ngx_http_rewrite_module.c
+++ b/src/http/modules/ngx_http_rewrite_module.c
@@ -313,7 +313,7 @@
 
     /*
      * the ngx_http_rewrite_module sets variables directly in r->variables,
-     * and they should be handle by ngx_http_get_indexed_variable(),
+     * and they should be handled by ngx_http_get_indexed_variable(),
      * so the handler is called only if the variable is not initialized
      */
 
diff --git a/src/http/ngx_http_postpone_filter_module.c b/src/http/ngx_http_postpone_filter_module.c
index 5c3e2c9..8e47816 100644
--- a/src/http/ngx_http_postpone_filter_module.c
+++ b/src/http/ngx_http_postpone_filter_module.c
@@ -45,6 +45,7 @@
 {
     ngx_int_t                      rc;
     ngx_chain_t                   *out;
+    ngx_http_request_t            *mr;
     ngx_http_postponed_request_t  *pr, **ppr;
 
     if (r->connection->write->error) {
@@ -98,14 +99,16 @@
         out = in;
     }
 
-    if (out == NULL && r->out == NULL && !r->connection->buffered) {
+    mr = r->main ? r->main : r;
+
+    if (out == NULL && mr->out == NULL && !mr->connection->buffered) {
         return NGX_OK;
     }
 
     ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
                    "http postpone filter out \"%V\"", &r->uri);
 
-    rc = ngx_http_next_filter(r->main ? r->main : r, out);
+    rc = ngx_http_next_filter(mr, out);
 
     if (rc == NGX_ERROR) {
         /* NGX_ERROR may be returned by any filter */
diff --git a/src/http/ngx_http_variables.c b/src/http/ngx_http_variables.c
index 12ab515..d66f0dc 100644
--- a/src/http/ngx_http_variables.c
+++ b/src/http/ngx_http_variables.c
@@ -276,7 +276,12 @@
     if (v[key].name.len == name->len
         && ngx_strncmp(v[key].name.data, name->data, name->len) == 0)
     {
-        return v[key].handler(r, v[key].data);
+        if (v[key].flags & NGX_HTTP_VAR_INDEXED) {
+            return ngx_http_get_indexed_variable(r, v[key].data);
+
+        } else {
+            return v[key].handler(r, v[key].data);
+        }
     }
 
     if (ngx_strncmp(name->data, "http_", 5) == 0) {
@@ -701,7 +706,7 @@
             {
                 v[i].handler = av[n].handler;
                 v[i].data = av[n].data;
-                v[i].flags = av[n].flags;
+                v[i].flags = av[n].flags | NGX_HTTP_VAR_INDEXED;
 
                 goto next;
             }
diff --git a/src/http/ngx_http_variables.h b/src/http/ngx_http_variables.h
index 6624535..d986c7d 100644
--- a/src/http/ngx_http_variables.h
+++ b/src/http/ngx_http_variables.h
@@ -30,6 +30,7 @@
 
 #define NGX_HTTP_VAR_CHANGABLE   1
 #define NGX_HTTP_VAR_NOCACHABLE  2
+#define NGX_HTTP_VAR_INDEXED     4
 
 
 struct ngx_http_variable_s {
