diff --git a/src/http/modules/ngx_http_event_proxy_handler.c b/src/http/modules/ngx_http_event_proxy_handler.c
index d7d6178..9c2cc3a 100644
--- a/src/http/modules/ngx_http_event_proxy_handler.c
+++ b/src/http/modules/ngx_http_event_proxy_handler.c
@@ -8,7 +8,7 @@
 #include <ngx_http.h>
 #include <ngx_http_event_proxy_handler.h>
 
-ngx_http_module_t  ngx_http_proxy_module;
+ngx_http_module_t  ngx_http_proxy_module_ctx;
 
 
 static ngx_chain_t *ngx_http_proxy_create_request(ngx_http_request_t *r);
@@ -36,10 +36,11 @@
     ngx_chain_t           *chain;
     ngx_http_proxy_ctx_t  *p;
 
-    p = (ngx_http_proxy_ctx_t *) ngx_get_module_ctx(r, ngx_http_proxy_module);
+    p = (ngx_http_proxy_ctx_t *)
+                         ngx_http_get_module_ctx(r, ngx_http_proxy_module_ctx);
 
     if (p == NULL)
-        ngx_http_create_ctx(r, p, ngx_http_proxy_module,
+        ngx_http_create_ctx(r, p, ngx_http_proxy_module_ctx,
                             sizeof(ngx_http_proxy_ctx_t));
 
     chain = ngx_http_proxy_create_request(r);
@@ -244,7 +245,8 @@
 
     c = (ngx_connection_t *) ev->data;
     r = (ngx_http_request_t *) c->data;
-    p = (ngx_http_proxy_ctx_t *) ngx_get_module_ctx(r, ngx_http_proxy_module);
+    p = (ngx_http_proxy_ctx_t *)
+                         ngx_http_get_module_ctx(r, ngx_http_proxy_module_ctx);
 
     chain = ngx_event_write(c, p->out, 0);
     if (chain == (ngx_chain_t *) -1)
@@ -269,7 +271,8 @@
 
     c = (ngx_connection_t *) ev->data;
     r = (ngx_http_request_t *) c->data;
-    p = (ngx_http_proxy_ctx_t *) ngx_get_module_ctx(r, ngx_http_proxy_module);
+    p = (ngx_http_proxy_ctx_t *)
+                         ngx_http_get_module_ctx(r, ngx_http_proxy_module_ctx);
 
     if (p->header_in == NULL) {
         ngx_test_null(p->header_in,
@@ -389,7 +392,8 @@
 
     c = (ngx_connection_t *) ev->data;
     r = (ngx_http_request_t *) c->data;
-    p = (ngx_http_proxy_ctx_t *) ngx_get_module_ctx(r, ngx_http_proxy_module);
+    p = (ngx_http_proxy_ctx_t *)
+                         ngx_http_get_module_ctx(r, ngx_http_proxy_module_ctx);
 
     left = 0;
 
@@ -464,7 +468,8 @@
 
     c = (ngx_connection_t *) ev->data;
     r = (ngx_http_request_t *) c->data;
-    p = (ngx_http_proxy_ctx_t *) ngx_get_module_ctx(r, ngx_http_proxy_module);
+    p = (ngx_http_proxy_ctx_t *)
+                         ngx_http_get_module_ctx(r, ngx_http_proxy_module_ctx);
 
     do {
         h = ((ngx_hunk_t **) p->hunks->elts)[p->hunk_n];
diff --git a/src/http/modules/ngx_http_index_handler.c b/src/http/modules/ngx_http_index_handler.c
index d2084f0..65a896c 100644
--- a/src/http/modules/ngx_http_index_handler.c
+++ b/src/http/modules/ngx_http_index_handler.c
@@ -13,32 +13,43 @@
 static void *ngx_http_index_create_conf(ngx_pool_t *pool);
 static void *ngx_http_index_merge_conf(ngx_pool_t *p,
                                        void *parent, void *child);
-static char *ngx_http_index_set_index(ngx_pool_t *p, void *conf,
-                                      ngx_str_t *value);
+static char *ngx_http_index_set_index(ngx_conf_t *cf, ngx_command_t *cmd,
+                                      char *conf);
 
 
 static ngx_command_t ngx_http_index_commands[] = {
 
-    {"index", ngx_http_index_set_index, 0,
-     NGX_HTTP_LOC_CONF, NGX_CONF_ITERATE,
-     "set index files"},
+    {ngx_string("index"),
+     NGX_CONF_ANY,
+     ngx_http_index_set_index,
+     NGX_HTTP_LOC_CONF,
+     0},
 
-    {NULL}
-
+    {ngx_string(""), 0, NULL, 0, 0}
 };
 
 
-ngx_http_module_t  ngx_http_index_module = {
+ngx_http_module_t  ngx_http_index_module_ctx = {
     NGX_HTTP_MODULE,
 
     NULL,                                  /* create server config */
     ngx_http_index_create_conf,            /* create location config */
-    ngx_http_index_commands,               /* module directives */
 
-    NULL,                                  /* init module */
     NULL,                                  /* translate handler */
 
-    NULL,                                  /* init output body filter */
+    NULL,                                  /* output header filter */
+    NULL,                                  /* next output header filter */
+    NULL,                                  /* output body filter */
+    NULL,                                  /* next output body filter */
+
+};
+
+
+ngx_module_t  ngx_http_index_module = {
+    &ngx_http_index_module_ctx,            /* module context */
+    ngx_http_index_commands,               /* module directives */
+    NGX_HTTP_MODULE_TYPE,                  /* module type */
+    NULL                                   /* init module */
 };
 
 
@@ -53,7 +64,7 @@
     ngx_http_index_conf_t  *cf;
 
     cf = (ngx_http_index_conf_t *)
-                            ngx_get_module_loc_conf(r, ngx_http_index_module);
+                   ngx_http_get_module_loc_conf(r, ngx_http_index_module_ctx);
 
     ngx_test_null(name,
                   ngx_palloc(r->pool,
@@ -71,11 +82,13 @@
         fd = ngx_open_file(name, NGX_FILE_RDONLY);
         if (fd == NGX_INVALID_FILE) {
             err = ngx_errno;
-            if (err == NGX_ENOENT)
+            if (err == NGX_ENOENT) {
                 continue;
+            }
 #if (WIN32)
-            if (err == ERROR_PATH_NOT_FOUND)
+            if (err == ERROR_PATH_NOT_FOUND) {
                 continue;
+            }
 #endif
 
             ngx_log_error(NGX_LOG_ERR, r->connection->log, err,
@@ -117,8 +130,9 @@
     ngx_str_t  *index;
 
     if (conf->max_index_len == 0) {
-        if (prev->max_index_len != 0)
+        if (prev->max_index_len != 0) {
             return prev;
+        }
 
         ngx_test_null(index, ngx_push_array(conf->indices), NULL);
         index->len = sizeof(NGX_HTTP_INDEX) - 1;
@@ -130,18 +144,23 @@
 }
 
 
-static char *ngx_http_index_set_index(ngx_pool_t *p, void *conf,
-                                      ngx_str_t *value)
+static char *ngx_http_index_set_index(ngx_conf_t *cf, ngx_command_t *cmd,
+                                      char *conf)
 {
-    ngx_http_index_conf_t *cf = (ngx_http_index_conf_t *) conf;
-    ngx_str_t  *index;
+    ngx_http_index_conf_t *icf = (ngx_http_index_conf_t *) conf;
+    int  i;
+    ngx_str_t  *index, *value;
 
-    ngx_test_null(index, ngx_push_array(cf->indices), NULL);
-    index->len = value->len;
-    index->data = value->data;
+    value = (ngx_str_t *) cf->args->elts;
+    for (i = 1; i < cf->args->nelts; i++) {
+        ngx_test_null(index, ngx_push_array(icf->indices), NULL);
+        index->len = value[i].len;
+        index->data = value[i].data;
 
-    if (cf->max_index_len < index->len)
-        cf->max_index_len = index->len;
+        if (icf->max_index_len < index->len) {
+            icf->max_index_len = index->len;
+        }
+    }
 
     return NULL;
 }
diff --git a/src/http/modules/ngx_http_index_handler.h b/src/http/modules/ngx_http_index_handler.h
index 66261b0..3dd6bd8 100644
--- a/src/http/modules/ngx_http_index_handler.h
+++ b/src/http/modules/ngx_http_index_handler.h
@@ -9,13 +9,14 @@
 
 #define NGX_HTTP_INDEX   "index.html"
 
+
 typedef struct {
     ngx_array_t  *indices;
     size_t        max_index_len;
 } ngx_http_index_conf_t;
 
 
-extern ngx_http_module_t  ngx_http_index_module;
+extern ngx_module_t  ngx_http_index_module;
 
 
 #endif /* _NGX_HTTP_INDEX_HANDLER_H_INCLUDED_ */
