diff --git a/src/http/modules/ngx_http_random_index_module.c b/src/http/modules/ngx_http_random_index_module.c
index eb70ac8..23610f9 100644
--- a/src/http/modules/ngx_http_random_index_module.c
+++ b/src/http/modules/ngx_http_random_index_module.c
@@ -19,11 +19,10 @@
 
 static ngx_int_t ngx_http_random_index_error(ngx_http_request_t *r,
     ngx_dir_t *dir, ngx_str_t *name);
+static ngx_int_t ngx_http_random_index_init(ngx_conf_t *cf);
 static void *ngx_http_random_index_create_loc_conf(ngx_conf_t *cf);
 static char *ngx_http_random_index_merge_loc_conf(ngx_conf_t *cf,
     void *parent, void *child);
-static ngx_int_t ngx_http_random_index_add_variable(ngx_conf_t *cf);
-static ngx_int_t ngx_http_random_index_init(ngx_conf_t *cf);
 
 
 static ngx_command_t  ngx_http_random_index_commands[] = {
@@ -40,7 +39,7 @@
 
 
 static ngx_http_module_t  ngx_http_random_index_module_ctx = {
-    ngx_http_random_index_add_variable,    /* preconfiguration */
+    NULL,                                  /* preconfiguration */
     ngx_http_random_index_init,            /* postconfiguration */
 
     NULL,                                  /* create main configuration */
@@ -70,10 +69,6 @@
 };
 
 
-static ngx_str_t  ngx_http_random_index = ngx_string("random_index");
-static ngx_int_t  ngx_random_index_variable_index;
-
-
 static ngx_int_t
 ngx_http_random_index_handler(ngx_http_request_t *r)
 {
@@ -85,7 +80,6 @@
     ngx_dir_t                          dir;
     ngx_uint_t                         n, level;
     ngx_array_t                        names;
-    ngx_http_variable_value_t         *v;
     ngx_http_random_index_loc_conf_t  *rlcf;
 
     if (r->uri.data[r->uri.len - 1] != '/') {
@@ -263,14 +257,6 @@
     last = ngx_copy(uri.data, r->uri.data, r->uri.len);
     ngx_memcpy(last, name[n].data, name[n].len);
 
-    v = &r->variables[ngx_random_index_variable_index];
-
-    v->len = name[n].len;
-    v->valid = 1;
-    v->no_cacheable = 0;
-    v->not_found = 0;
-    v->data = name[n].data;
-
     return ngx_http_internal_redirect(r, &uri, &r->args);
 }
 
@@ -288,22 +274,6 @@
 }
 
 
-static ngx_int_t
-ngx_http_random_index_variable(ngx_http_request_t *r,
-    ngx_http_variable_value_t *v, uintptr_t data)
-{
-    /*
-     * the "random_index" directive stores index file name directly inside
-     * r->variables[] because request context is not preserved while
-     * an internal redirection
-     */
-
-    v->not_found = 1;
-
-    return NGX_OK;
-}
-
-
 static void *
 ngx_http_random_index_create_loc_conf(ngx_conf_t *cf)
 {
@@ -333,31 +303,6 @@
 
 
 static ngx_int_t
-ngx_http_random_index_add_variable(ngx_conf_t *cf)
-{
-    ngx_int_t             index;
-    ngx_http_variable_t  *var;
-
-    var = ngx_http_add_variable(cf, &ngx_http_random_index,
-                                NGX_HTTP_VAR_NOHASH);
-    if (var == NULL) {
-        return NGX_ERROR;
-    }
-
-    index = ngx_http_get_variable_index(cf, &ngx_http_random_index);
-    if (index == NGX_ERROR) {
-        return NGX_ERROR;
-    }
-
-    ngx_random_index_variable_index = index;
-
-    var->get_handler = ngx_http_random_index_variable;
-
-    return NGX_OK;
-}
-
-
-static ngx_int_t
 ngx_http_random_index_init(ngx_conf_t *cf)
 {
     ngx_http_handler_pt        *h;
