diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index 1ce1e23..b88e869 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -59,8 +59,6 @@
     void *conf);
 static char *ngx_http_core_directio(ngx_conf_t *cf, ngx_command_t *cmd,
     void *conf);
-static char *ngx_http_core_server_tokens(ngx_conf_t *cf, ngx_command_t *cmd,
-    void *conf);
 static char *ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd,
     void *conf);
 static char *ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd,
@@ -594,10 +592,10 @@
       NULL },
 
     { ngx_string("server_tokens"),
-      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
-      ngx_http_core_server_tokens,
+      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,
-      0,
+      offsetof(ngx_http_core_loc_conf_t, server_tokens),
       NULL },
 
     { ngx_string("if_modified_since"),
@@ -3645,9 +3643,9 @@
     clcf->log_not_found = NGX_CONF_UNSET;
     clcf->log_subrequest = NGX_CONF_UNSET;
     clcf->recursive_error_pages = NGX_CONF_UNSET;
+    clcf->server_tokens = NGX_CONF_UNSET;
     clcf->chunked_transfer_encoding = NGX_CONF_UNSET;
     clcf->etag = NGX_CONF_UNSET;
-    clcf->server_tokens = NGX_CONF_UNSET_UINT;
     clcf->types_hash_max_size = NGX_CONF_UNSET_UINT;
     clcf->types_hash_bucket_size = NGX_CONF_UNSET_UINT;
 
@@ -3911,15 +3909,11 @@
     ngx_conf_merge_value(conf->log_subrequest, prev->log_subrequest, 0);
     ngx_conf_merge_value(conf->recursive_error_pages,
                               prev->recursive_error_pages, 0);
+    ngx_conf_merge_value(conf->server_tokens, prev->server_tokens, 1);
     ngx_conf_merge_value(conf->chunked_transfer_encoding,
                               prev->chunked_transfer_encoding, 1);
     ngx_conf_merge_value(conf->etag, prev->etag, 1);
 
-    if (conf->server_tokens == NGX_CONF_UNSET_UINT) {
-        ngx_conf_merge_uint_value(conf->server_tokens, prev->server_tokens, 1);
-        conf->server_tokens_value = prev->server_tokens_value;
-    }
-
     ngx_conf_merge_ptr_value(conf->open_file_cache,
                               prev->open_file_cache, NULL);
 
@@ -4802,46 +4796,6 @@
 
 
 static char *
-ngx_http_core_server_tokens(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
-{
-    ngx_http_core_loc_conf_t *clcf = conf;
-
-    ngx_str_t                         *value;
-    ngx_http_compile_complex_value_t   ccv;
-
-    if (clcf->server_tokens != NGX_CONF_UNSET_UINT) {
-        return "is duplicate";
-    }
-
-    value = cf->args->elts;
-
-    if (ngx_strcmp(value[1].data, "on") == 0) {
-        clcf->server_tokens = 1;
-        return NGX_CONF_OK;
-    }
-
-    if (ngx_strcmp(value[1].data, "off") == 0) {
-        clcf->server_tokens = 0;
-        return NGX_CONF_OK;
-    }
-
-    ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
-
-    ccv.cf = cf;
-    ccv.value = &value[1];
-    ccv.complex_value = &clcf->server_tokens_value;
-
-    if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
-        return NGX_CONF_ERROR;
-    }
-
-    clcf->server_tokens = 2;
-
-    return NGX_CONF_OK;
-}
-
-
-static char *
 ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 {
     ngx_http_core_loc_conf_t *clcf = conf;
diff --git a/src/http/ngx_http_core_module.h b/src/http/ngx_http_core_module.h
index 961de3f..231c507 100644
--- a/src/http/ngx_http_core_module.h
+++ b/src/http/ngx_http_core_module.h
@@ -415,12 +415,10 @@
     ngx_flag_t    log_not_found;           /* log_not_found */
     ngx_flag_t    log_subrequest;          /* log_subrequest */
     ngx_flag_t    recursive_error_pages;   /* recursive_error_pages */
+    ngx_flag_t    server_tokens;           /* server_tokens */
     ngx_flag_t    chunked_transfer_encoding; /* chunked_transfer_encoding */
     ngx_flag_t    etag;                    /* etag */
 
-    ngx_uint_t    server_tokens;           /* server_tokens */
-    ngx_http_complex_value_t   server_tokens_value;
-
 #if (NGX_HTTP_GZIP)
     ngx_flag_t    gzip_vary;               /* gzip_vary */
 
diff --git a/src/http/ngx_http_header_filter_module.c b/src/http/ngx_http_header_filter_module.c
index 86bcabc..507dc93 100644
--- a/src/http/ngx_http_header_filter_module.c
+++ b/src/http/ngx_http_header_filter_module.c
@@ -46,8 +46,8 @@
 };
 
 
-static u_char ngx_http_server_string[] = "Server: nginx" CRLF;
-static u_char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
+static char ngx_http_server_string[] = "Server: nginx" CRLF;
+static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
 
 
 static ngx_str_t ngx_http_status_lines[] = {
@@ -152,7 +152,7 @@
 {
     u_char                    *p;
     size_t                     len;
-    ngx_str_t                  host, *status_line, tokens;
+    ngx_str_t                  host, *status_line;
     ngx_buf_t                 *b;
     ngx_uint_t                 status, i, port;
     ngx_chain_t                out;
@@ -277,35 +277,9 @@
 
     clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
 
-#if (NGX_SUPPRESS_WARN)
-    ngx_str_null(&tokens);
-#endif
-
     if (r->headers_out.server == NULL) {
-        if (clcf->server_tokens == 0) {
-            ngx_str_set(&tokens, ngx_http_server_string);
-
-        } else if (clcf->server_tokens == 1) {
-            ngx_str_set(&tokens, ngx_http_server_full_string);
-
-        } else {
-            if (ngx_http_complex_value(r, &clcf->server_tokens_value, &tokens)
-                != NGX_OK)
-            {
-                return NGX_ERROR;
-            }
-
-            if (tokens.len == 0
-                || (tokens.len == 3 && ngx_strncmp(tokens.data, "off", 3) == 0))
-            {
-                ngx_str_set(&tokens, ngx_http_server_string);
-
-            } else {
-                ngx_str_set(&tokens, ngx_http_server_full_string);
-            }
-        }
-
-        len += tokens.len;
+        len += clcf->server_tokens ? sizeof(ngx_http_server_full_string) - 1:
+                                     sizeof(ngx_http_server_string) - 1;
     }
 
     if (r->headers_out.date == NULL) {
@@ -482,7 +456,16 @@
     *b->last++ = CR; *b->last++ = LF;
 
     if (r->headers_out.server == NULL) {
-        b->last = ngx_cpymem(b->last, tokens.data, tokens.len);
+        if (clcf->server_tokens) {
+            p = (u_char *) ngx_http_server_full_string;
+            len = sizeof(ngx_http_server_full_string) - 1;
+
+        } else {
+            p = (u_char *) ngx_http_server_string;
+            len = sizeof(ngx_http_server_string) - 1;
+        }
+
+        b->last = ngx_cpymem(b->last, p, len);
     }
 
     if (r->headers_out.date == NULL) {
diff --git a/src/http/ngx_http_special_response.c b/src/http/ngx_http_special_response.c
index 70fdf44..2771e58 100644
--- a/src/http/ngx_http_special_response.c
+++ b/src/http/ngx_http_special_response.c
@@ -609,42 +609,26 @@
 ngx_http_send_special_response(ngx_http_request_t *r,
     ngx_http_core_loc_conf_t *clcf, ngx_uint_t err)
 {
+    u_char       *tail;
+    size_t        len;
     ngx_int_t     rc;
-    ngx_str_t     tail, tokens;
     ngx_buf_t    *b;
     ngx_uint_t    msie_padding;
     ngx_chain_t   out[3];
 
+    if (clcf->server_tokens) {
+        len = sizeof(ngx_http_error_full_tail) - 1;
+        tail = ngx_http_error_full_tail;
+
+    } else {
+        len = sizeof(ngx_http_error_tail) - 1;
+        tail = ngx_http_error_tail;
+    }
+
     msie_padding = 0;
 
     if (ngx_http_error_pages[err].len) {
-
-        if (clcf->server_tokens == 0) {
-            ngx_str_set(&tail, ngx_http_error_tail);
-
-        } else if (clcf->server_tokens == 1) {
-            ngx_str_set(&tail, ngx_http_error_full_tail);
-
-        } else {
-            if (ngx_http_complex_value(r, &clcf->server_tokens_value, &tokens)
-                != NGX_OK)
-            {
-                return NGX_ERROR;
-            }
-
-            if (tokens.len == 0
-                || (tokens.len == 3 && ngx_strncmp(tokens.data, "off", 3) == 0))
-            {
-                ngx_str_set(&tail, ngx_http_error_tail);
-
-            } else {
-                ngx_str_set(&tail, ngx_http_error_full_tail);
-            }
-        }
-
-        r->headers_out.content_length_n = ngx_http_error_pages[err].len
-                                          + tail.len;
-
+        r->headers_out.content_length_n = ngx_http_error_pages[err].len + len;
         if (clcf->msie_padding
             && (r->headers_in.msie || r->headers_in.chrome)
             && r->http_version >= NGX_HTTP_VERSION_10
@@ -661,10 +645,6 @@
 
     } else {
         r->headers_out.content_length_n = 0;
-
-#if (NGX_SUPPRESS_WARN)
-        ngx_str_null(&tail);
-#endif
     }
 
     if (r->headers_out.content_length) {
@@ -704,8 +684,9 @@
     }
 
     b->memory = 1;
-    b->pos = tail.data;
-    b->last = tail.data + tail.len;
+
+    b->pos = tail;
+    b->last = tail + len;
 
     out[1].buf = b;
     out[1].next = NULL;
diff --git a/src/http/v2/ngx_http_v2_filter_module.c b/src/http/v2/ngx_http_v2_filter_module.c
index 624ef1e..caa835d 100644
--- a/src/http/v2/ngx_http_v2_filter_module.c
+++ b/src/http/v2/ngx_http_v2_filter_module.c
@@ -128,8 +128,8 @@
 {
     u_char                     status, *pos, *start, *p, *tmp;
     size_t                     len, tmp_len;
-    ngx_str_t                  host, location, tokens;
-    ngx_uint_t                 i, port, server_tokens;
+    ngx_str_t                  host, location;
+    ngx_uint_t                 i, port;
     ngx_list_part_t           *part;
     ngx_table_elt_t           *header;
     ngx_connection_t          *fc;
@@ -229,42 +229,8 @@
 
     clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
 
-    server_tokens = clcf->server_tokens;
-
-#if (NGX_SUPPRESS_WARN)
-    ngx_str_null(&tokens);
-#endif
-
     if (r->headers_out.server == NULL) {
-
-        if (server_tokens == 0) {
-            len += 1 + sizeof(nginx);
-            ngx_str_set(&tokens, "nginx");
-
-        } else if (server_tokens == 1) {
-            len += 1 + nginx_ver_len;
-            ngx_str_set(&tokens, NGINX_VER);
-
-        } else {
-            if (ngx_http_complex_value(r, &clcf->server_tokens_value, &tokens)
-                != NGX_OK)
-            {
-                return NGX_ERROR;
-            }
-
-            if (tokens.len == 0
-                || (tokens.len == 3 && ngx_strncmp(tokens.data, "off", 3) == 0))
-            {
-                server_tokens = 0;
-                len += 1 + sizeof(nginx);
-                ngx_str_set(&tokens, "nginx");
-
-            } else {
-                server_tokens = 1;
-                len += 1 + nginx_ver_len;
-                ngx_str_set(&tokens, NGINX_VER);
-            }
-        }
+        len += 1 + (clcf->server_tokens ? nginx_ver_len : sizeof(nginx));
     }
 
     if (r->headers_out.date == NULL) {
@@ -470,15 +436,12 @@
 
     if (r->headers_out.server == NULL) {
         ngx_log_debug1(NGX_LOG_DEBUG_HTTP, fc->log, 0,
-                       "http2 output header: \"server: %V\"",
-                       &tokens);
+                       "http2 output header: \"server: %s\"",
+                       clcf->server_tokens ? NGINX_VER : "nginx");
 
         *pos++ = ngx_http_v2_inc_indexed(NGX_HTTP_V2_SERVER_INDEX);
 
-        if (server_tokens == 0) {
-            pos = ngx_cpymem(pos, nginx, sizeof(nginx));
-
-        } else {
+        if (clcf->server_tokens) {
             if (nginx_ver[0] == '\0') {
                 p = ngx_http_v2_write_value(nginx_ver, (u_char *) NGINX_VER,
                                             sizeof(NGINX_VER) - 1, tmp);
@@ -486,6 +449,9 @@
             }
 
             pos = ngx_cpymem(pos, nginx_ver, nginx_ver_len);
+
+        } else {
+            pos = ngx_cpymem(pos, nginx, sizeof(nginx));
         }
     }
 
