diff --git a/h2_request_body_js.t b/h2_request_body_js.t
index 15efa48..e305bdd 100644
--- a/h2_request_body_js.t
+++ b/h2_request_body_js.t
@@ -36,7 +36,7 @@
 http {
     %%TEST_GLOBALS_HTTP%%
 
-    js_include test.js;
+    js_import test.js;
 
     server {
         listen       127.0.0.1:8080 http2;
@@ -45,7 +45,7 @@
         lingering_close off;
 
         location / {
-            js_content sr_body;
+            js_content test.sr_body;
             add_header X-Body $request_body;
         }
 
@@ -64,6 +64,8 @@
     r.subrequest('/sr', body_fwd_cb);
 }
 
+export default {sr_body};
+
 EOF
 
 $t->write_file('sr', 'SEE-THIS');
diff --git a/js.t b/js.t
index 7ebd838..b694355 100644
--- a/js.t
+++ b/js.t
@@ -37,26 +37,26 @@
 http {
     %%TEST_GLOBALS_HTTP%%
 
-    js_set $test_method   test_method;
-    js_set $test_version  test_version;
-    js_set $test_addr     test_addr;
-    js_set $test_uri      test_uri;
-    js_set $test_arg      test_arg;
-    js_set $test_iarg     test_iarg;
-    js_set $test_var      test_var;
-    js_set $test_type     test_type;
-    js_set $test_global   test_global;
-    js_set $test_log      test_log;
-    js_set $test_except   test_except;
+    js_set $test_method   test.method;
+    js_set $test_version  test.version;
+    js_set $test_addr     test.addr;
+    js_set $test_uri      test.uri;
+    js_set $test_arg      test.arg;
+    js_set $test_iarg     test.iarg;
+    js_set $test_var      test.variable;
+    js_set $test_type     test.type;
+    js_set $test_global   test.global_obj;
+    js_set $test_log      test.log;
+    js_set $test_except   test.except;
 
-    js_include test.js;
+    js_import test.js;
 
     server {
         listen       127.0.0.1:8080;
         server_name  localhost;
 
         location /njs {
-            js_content test_njs;
+            js_content test.njs;
         }
 
         location /method {
@@ -92,40 +92,40 @@
         }
 
         location /body {
-            js_content request_body;
+            js_content test.request_body;
         }
 
         location /in_file {
             client_body_in_file_only on;
-            js_content request_body;
+            js_content test.request_body;
         }
 
         location /status {
-            js_content status;
+            js_content test.status;
         }
 
         location /request_body {
-            js_content request_body;
+            js_content test.request_body;
         }
 
         location /request_body_cache {
-            js_content request_body_cache;
+            js_content test.request_body_cache;
         }
 
         location /send {
-            js_content send;
+            js_content test.send;
         }
 
         location /return_method {
-            js_content return_method;
+            js_content test.return_method;
         }
 
         location /arg_keys {
-            js_content arg_keys;
+            js_content test.arg_keys;
         }
 
         location /type {
-            js_content test_type;
+            js_content test.type;
         }
 
         location /log {
@@ -137,11 +137,11 @@
         }
 
         location /content_except {
-            js_content content_except;
+            js_content test.content_except;
         }
 
         location /content_empty {
-            js_content content_empty;
+            js_content test.content_empty;
         }
     }
 }
@@ -155,27 +155,27 @@
         r.return(200, njs.version);
     }
 
-    function test_method(r) {
+    function method(r) {
         return 'method=' + r.method;
     }
 
-    function test_version(r) {
+    function version(r) {
         return 'version=' + r.httpVersion;
     }
 
-    function test_addr(r) {
+    function addr(r) {
         return 'addr=' + r.remoteAddress;
     }
 
-    function test_uri(r) {
+    function uri(r) {
         return 'uri=' + r.uri;
     }
 
-    function test_arg(r) {
+    function arg(r) {
         return 'arg=' + r.args.foo;
     }
 
-    function test_iarg(r) {
+    function iarg(r) {
         var s = '', a;
         for (a in r.args) {
             if (a.substr(0, 3) == 'foo') {
@@ -185,11 +185,11 @@
         return s;
     }
 
-    function test_var(r) {
+    function variable(r) {
         return 'variable=' + r.variables.remote_addr;
     }
 
-    function test_global(r) {
+    function global_obj(r) {
         return 'global=' + global;
     }
 
@@ -236,18 +236,18 @@
         r.return(200, Object.keys(r.args).sort());
     }
 
-    function test_type(r) {
+    function type(r) {
         var p = r.args.path.split('.').reduce((a, v) => a[v], r);
 
-        var type = Buffer.isBuffer(p) ? 'buffer' : (typeof p);
-        r.return(200, `type: \${type}`);
+        var typ = Buffer.isBuffer(p) ? 'buffer' : (typeof p);
+        r.return(200, `type: \${typ}`);
     }
 
-    function test_log(r) {
+    function log(r) {
         r.log('SEE-LOG');
     }
 
-    function test_except(r) {
+    function except(r) {
         var fs = require('fs');
         fs.readFileSync();
     }
@@ -260,6 +260,11 @@
     function content_empty(r) {
     }
 
+    export default {njs:test_njs, method, version, addr, uri, arg, iarg,
+                    variable, global_obj, status, request_body,
+                    request_body_cache, send, return_method, arg_keys,
+                    type, log, except, content_except, content_empty};
+
 EOF
 
 $t->try_run('no njs available')->plan(33);
diff --git a/js_async.t b/js_async.t
index 3c817ea..6c75a7b 100644
--- a/js_async.t
+++ b/js_async.t
@@ -35,18 +35,18 @@
 http {
     %%TEST_GLOBALS_HTTP%%
 
-    js_set $test_async      set_timeout;
-    js_set $context_var     context_var;
-    js_set $test_set_rv_var set_rv_var;
+    js_set $test_async      test.set_timeout;
+    js_set $context_var     test.context_var;
+    js_set $test_set_rv_var test.set_rv_var;
 
-    js_include test.js;
+    js_import test.js;
 
     server {
         listen       127.0.0.1:8080;
         server_name  localhost;
 
         location /njs {
-            js_content test_njs;
+            js_content test.njs;
         }
 
         location /async_var {
@@ -55,30 +55,30 @@
 
         location /shared_ctx {
             add_header H $context_var;
-            js_content shared_ctx;
+            js_content test.shared_ctx;
         }
 
         location /set_timeout {
-            js_content set_timeout;
+            js_content test.set_timeout;
         }
 
         location /set_timeout_many {
-            js_content set_timeout_many;
+            js_content test.set_timeout_many;
         }
 
         location /set_timeout_data {
             postpone_output 0;
-            js_content set_timeout_data;
+            js_content test.set_timeout_data;
         }
 
         location /limit_rate {
             postpone_output 0;
             sendfile_max_chunk 5;
-            js_content limit_rate;
+            js_content test.limit_rate;
         }
 
         location /async_content {
-            js_content async_content;
+            js_content test.async_content;
         }
 
         location /set_rv_var {
@@ -194,6 +194,10 @@
         r.setReturnValue(`retval: \${a1 + a2}`);
     }
 
+    export default {njs:test_njs, set_timeout, set_timeout_data,
+                    set_timeout_many, context_var, shared_ctx, limit_rate,
+                    async_content, set_rv_var};
+
 EOF
 
 $t->try_run('no njs available')->plan(9);
diff --git a/js_dump.t b/js_dump.t
index 2d80abd..c00a53a 100644
--- a/js_dump.t
+++ b/js_dump.t
@@ -36,22 +36,22 @@
 http {
     %%TEST_GLOBALS_HTTP%%
 
-    js_include test.js;
+    js_import test.js;
 
     server {
         listen       127.0.0.1:8080;
         server_name  localhost;
 
         location /dump {
-            js_content test_dump;
+            js_content test.dump;
         }
 
         location /stringify {
-            js_content test_stringify;
+            js_content test.stringify;
         }
 
         location /stringify_subrequest {
-            js_content test_stringify_subrequest;
+            js_content test.stringify_subrequest;
         }
 
         location /js_sub {
@@ -63,23 +63,25 @@
 EOF
 
 $t->write_file('test.js', <<EOF);
-    function test_dump(r) {
+    function dump(r) {
         r.headersOut.baz = 'bar';
         r.return(200, njs.dump(r));
     }
 
-    function test_stringify(r) {
+    function stringify(r) {
         r.headersOut.baz = 'bar';
         var obj = JSON.parse(JSON.stringify(r));
         r.return(200, JSON.stringify(obj));
     }
 
-    function test_stringify_subrequest(r) {
+    function stringify_subrequest(r) {
         r.subrequest('/js_sub', reply => {
             r.return(200, JSON.stringify(reply))
         });
     }
 
+    export default {dump, stringify, stringify_subrequest};
+
 EOF
 
 $t->try_run('no njs dump')->plan(3);
diff --git a/js_headers.t b/js_headers.t
index 62ebfed..506c438 100644
--- a/js_headers.t
+++ b/js_headers.t
@@ -37,55 +37,55 @@
 http {
     %%TEST_GLOBALS_HTTP%%
 
-    js_set $test_foo_in   test_foo_in;
-    js_set $test_ifoo_in  test_ifoo_in;
+    js_set $test_foo_in   test.foo_in;
+    js_set $test_ifoo_in  test.ifoo_in;
 
-    js_include test.js;
+    js_import test.js;
 
     server {
         listen       127.0.0.1:8080;
         server_name  localhost;
 
         location /njs {
-            js_content test_njs;
+            js_content test.njs;
         }
 
         location /content_length {
-            js_content content_length;
+            js_content test.content_length;
         }
 
         location /content_length_arr {
-            js_content content_length_arr;
+            js_content test.content_length_arr;
         }
 
         location /content_length_keys {
-            js_content content_length_keys;
+            js_content test.content_length_keys;
         }
 
         location /content_type {
             charset windows-1251;
 
             default_type text/plain;
-            js_content content_type;
+            js_content test.content_type;
         }
 
         location /content_type_arr {
             charset windows-1251;
 
             default_type text/plain;
-            js_content content_type_arr;
+            js_content test.content_type_arr;
         }
 
         location /content_encoding {
-            js_content content_encoding;
+            js_content test.content_encoding;
         }
 
         location /content_encoding_arr {
-            js_content content_encoding_arr;
+            js_content test.content_encoding_arr;
         }
 
         location /headers_list {
-            js_content headers_list;
+            js_content test.headers_list;
         }
 
         location /foo_in {
@@ -97,39 +97,39 @@
         }
 
         location /hdr_in {
-            js_content hdr_in;
+            js_content test.hdr_in;
         }
 
         location /raw_hdr_in {
-            js_content raw_hdr_in;
+            js_content test.raw_hdr_in;
         }
 
         location /hdr_out {
-            js_content hdr_out;
+            js_content test.hdr_out;
         }
 
         location /raw_hdr_out {
-            js_content raw_hdr_out;
+            js_content test.raw_hdr_out;
         }
 
         location /hdr_out_array {
-            js_content hdr_out_array;
+            js_content test.hdr_out_array;
         }
 
         location /hdr_out_set_cookie {
-            js_content hdr_out_set_cookie;
+            js_content test.hdr_out_set_cookie;
         }
 
         location /hdr_out_single {
-            js_content hdr_out_single;
+            js_content test.hdr_out_single;
         }
 
         location /ihdr_out {
-            js_content ihdr_out;
+            js_content test.ihdr_out;
         }
 
         location /hdr_sorted_keys {
-            js_content hdr_sorted_keys;
+            js_content test.hdr_sorted_keys;
         }
     }
 }
@@ -243,11 +243,11 @@
         r.return(200, Object.keys(hdr).sort());
     }
 
-    function test_foo_in(r) {
+    function foo_in(r) {
         return 'hdr=' + r.headersIn.foo;
     }
 
-    function test_ifoo_in(r) {
+    function ifoo_in(r) {
         var s = '', h;
         for (h in r.headersIn) {
             if (h.substr(0, 3) == 'foo') {
@@ -323,6 +323,13 @@
         r.finish();
     }
 
+    export default {njs:test_njs, content_length, content_length_arr,
+                    content_length_keys, content_type, content_type_arr,
+                    content_encoding, content_encoding_arr, headers_list,
+                    hdr_in, raw_hdr_in, hdr_sorted_keys, foo_in, ifoo_in,
+                    hdr_out, raw_hdr_out, hdr_out_array, hdr_out_single,
+                    hdr_out_set_cookie, ihdr_out};
+
 
 EOF
 
diff --git a/js_internal_redirect.t b/js_internal_redirect.t
index ddbf0f7..b700794 100644
--- a/js_internal_redirect.t
+++ b/js_internal_redirect.t
@@ -35,14 +35,14 @@
 http {
     %%TEST_GLOBALS_HTTP%%
 
-    js_include test.js;
+    js_import test.js;
 
     server {
         listen       127.0.0.1:8080;
         server_name  localhost;
 
         location /test {
-            js_content test_redirect;
+            js_content test.redirect;
         }
 
         location /redirect {
@@ -59,7 +59,7 @@
 EOF
 
 $t->write_file('test.js', <<EOF);
-    function test_redirect(r) {
+    function redirect(r) {
         if (r.variables.arg_dest == 'named') {
             r.internalRedirect('\@named');
 
@@ -73,6 +73,8 @@
         }
     }
 
+    export default {redirect};
+
 EOF
 
 $t->try_run('no njs available')->plan(3);
diff --git a/js_modules.t b/js_modules.t
index 198ff46..21581b4 100644
--- a/js_modules.t
+++ b/js_modules.t
@@ -35,14 +35,14 @@
 http {
     %%TEST_GLOBALS_HTTP%%
 
-    js_include test.js;
+    js_import test.js;
 
     server {
         listen       127.0.0.1:8080;
         server_name  localhost;
 
         location /test {
-            js_content test;
+            js_content test.test;
         }
     }
 }
@@ -56,6 +56,8 @@
         r.return(200, m[r.args.fun](r.args.a, r.args.b));
     }
 
+    export default {test};
+
 EOF
 
 $t->write_file('module.js', <<EOF);
diff --git a/js_object.t b/js_object.t
index 1429bb4..97e778a 100644
--- a/js_object.t
+++ b/js_object.t
@@ -36,38 +36,38 @@
 http {
     %%TEST_GLOBALS_HTTP%%
 
-    js_include test.js;
+    js_import test.js;
 
     server {
         listen       127.0.0.1:8080;
         server_name  localhost;
 
         location /to_string {
-            js_content to_string;
+            js_content test.to_string;
         }
 
         location /define_prop {
-            js_content define_prop;
+            js_content test.define_prop;
         }
 
         location /in_operator {
-            js_content in_operator;
+            js_content test.in_operator;
         }
 
         location /redefine_bind {
-            js_content redefine_bind;
+            js_content test.redefine_bind;
         }
 
         location /redefine_proxy {
-            js_content redefine_proxy;
+            js_content test.redefine_proxy;
         }
 
         location /redefine_proto {
-            js_content redefine_proto;
+            js_content test.redefine_proto;
         }
 
         location /get_own_prop_descs {
-            js_content get_own_prop_descs;
+            js_content test.get_own_prop_descs;
         }
     }
 }
@@ -113,6 +113,9 @@
                  Object.getOwnPropertyDescriptors(r)['log'].value === r.log);
     }
 
+    export default {to_string, define_prop, in_operator, redefine_bind,
+                    redefine_proxy, redefine_proto, get_own_prop_descs};
+
 EOF
 
 $t->try_run('no njs request object')->plan(7);
diff --git a/js_paths.t b/js_paths.t
index 41254d9..98d8751 100644
--- a/js_paths.t
+++ b/js_paths.t
@@ -38,18 +38,18 @@
     js_path "%%TESTDIR%%/lib1";
     js_path "lib2";
 
-    js_include test.js;
+    js_import test.js;
 
     server {
         listen       127.0.0.1:8080;
         server_name  localhost;
 
         location /test {
-            js_content test;
+            js_content test.test;
         }
 
         location /test2 {
-            js_content test2;
+            js_content test.test2;
         }
     }
 }
@@ -73,6 +73,8 @@
         r.return(200, m3.sum(r.args.a, r.args.b));
     }
 
+    export default {test, test2};
+
 EOF
 
 my $d = $t->testdir();
diff --git a/js_promise.t b/js_promise.t
index a380496..b53998a 100644
--- a/js_promise.t
+++ b/js_promise.t
@@ -34,34 +34,34 @@
 http {
     %%TEST_GLOBALS_HTTP%%
 
-    js_include test.js;
+    js_import test.js;
 
     server {
         listen       127.0.0.1:8080;
         server_name  localhost;
 
         location /njs {
-            js_content test_njs;
+            js_content test.njs;
         }
 
         location /promise {
-            js_content promise;
+            js_content test.promise;
         }
 
         location /promise_throw {
-            js_content promise_throw;
+            js_content test.promise_throw;
         }
 
         location /promise_pure {
-            js_content promise_pure;
+            js_content test.promise_pure;
         }
 
         location /timeout {
-            js_content timeout;
+            js_content test.timeout;
         }
 
         location /sub_token {
-            js_content sub_token;
+            js_content test.sub_token;
         }
     }
 }
@@ -184,6 +184,9 @@
         r.return(parseInt(code), '{"token": "'+ token +'"}');
     }
 
+    export default {njs:test_njs, promise, promise_throw, promise_pure,
+                    timeout, sub_token};
+
 EOF
 
 $t->try_run('no njs available')->plan(4);
diff --git a/js_request_body.t b/js_request_body.t
index ffb9375..ac9476b 100644
--- a/js_request_body.t
+++ b/js_request_body.t
@@ -37,19 +37,19 @@
 http {
     %%TEST_GLOBALS_HTTP%%
 
-    js_include test.js;
+    js_import test.js;
 
     server {
         listen       127.0.0.1:8080;
         server_name  localhost;
 
         location /body {
-            js_content test_body;
+            js_content test.body;
         }
 
         location /in_file {
             client_body_in_file_only on;
-            js_content test_body;
+            js_content test.body;
         }
     }
 }
@@ -57,7 +57,7 @@
 EOF
 
 $t->write_file('test.js', <<EOF);
-    function test_body(r) {
+    function body(r) {
         try {
             var body = r.requestBody;
             r.return(200, body);
@@ -67,6 +67,8 @@
         }
     }
 
+    export default {body};
+
 EOF
 
 $t->try_run('no njs request body')->plan(3);
diff --git a/js_return.t b/js_return.t
index 9ec0b8d..2cc32f7 100644
--- a/js_return.t
+++ b/js_return.t
@@ -37,14 +37,14 @@
 http {
     %%TEST_GLOBALS_HTTP%%
 
-    js_include test.js;
+    js_import test.js;
 
     server {
         listen       127.0.0.1:8080;
         server_name  localhost;
 
         location / {
-            js_content test_return;
+            js_content test.returnf;
         }
     }
 }
@@ -52,10 +52,12 @@
 EOF
 
 $t->write_file('test.js', <<EOF);
-    function test_return(r) {
+    function returnf(r) {
         r.return(Number(r.args.c), r.args.t);
     }
 
+    export default {returnf};
+
 EOF
 
 $t->try_run('no njs return')->plan(5);
diff --git a/js_subrequests.t b/js_subrequests.t
index 6452e93..9da8e10 100644
--- a/js_subrequests.t
+++ b/js_subrequests.t
@@ -43,70 +43,70 @@
     proxy_cache_path   %%TESTDIR%%/cache1
                        keys_zone=ON:1m      use_temp_path=on;
 
-    js_include test.js;
+    js_import test.js;
 
-    js_set $async_var       async_var;
-    js_set $subrequest_var  subrequest_var;
+    js_set $async_var       test.async_var;
+    js_set $subrequest_var  test.subrequest_var;
 
     server {
         listen       127.0.0.1:8080;
         server_name  localhost;
 
         location /njs {
-            js_content test_njs;
+            js_content test.njs;
         }
 
         location /sr {
-            js_content sr;
+            js_content test.sr;
         }
 
         location /sr_pr {
-            js_content sr_pr;
+            js_content test.sr_pr;
         }
 
         location /sr_args {
-            js_content sr_args;
+            js_content test.sr_args;
         }
 
         location /sr_options_args {
-            js_content sr_options_args;
+            js_content test.sr_options_args;
         }
 
         location /sr_options_args_pr {
-            js_content sr_options_args_pr;
+            js_content test.sr_options_args_pr;
         }
 
         location /sr_options_method {
-            js_content sr_options_method;
+            js_content test.sr_options_method;
         }
 
         location /sr_options_method_pr {
-            js_content sr_options_method_pr;
+            js_content test.sr_options_method_pr;
         }
 
         location /sr_options_body {
-            js_content sr_options_body;
+            js_content test.sr_options_body;
         }
 
         location /sr_options_method_head {
-            js_content sr_options_method_head;
+            js_content test.sr_options_method_head;
         }
 
         location /sr_body {
-            js_content sr_body;
+            js_content test.sr_body;
         }
 
         location /sr_body_pr {
-            js_content sr_body_pr;
+            js_content test.sr_body_pr;
         }
 
         location /sr_body_special {
-            js_content sr_body_special;
+            js_content test.sr_body_special;
         }
 
         location /sr_in_variable_handler {
             set $_ $async_var;
-            js_content sr_in_variable_handler;
+            js_content test.sr_in_variable_handler;
         }
 
         location /sr_detached_in_variable_handler {
@@ -120,64 +120,64 @@
         }
 
         location /sr_error_page {
-            js_content sr_error_page;
+            js_content test.sr_error_page;
         }
 
         location /sr_js_in_subrequest {
-            js_content sr_js_in_subrequest;
+            js_content test.sr_js_in_subrequest;
         }
 
         location /sr_js_in_subrequest_pr {
-            js_content sr_js_in_subrequest_pr;
+            js_content test.sr_js_in_subrequest_pr;
         }
 
         location /sr_file {
-            js_content sr_file;
+            js_content test.sr_file;
         }
 
         location /sr_cache {
-            js_content sr_cache;
+            js_content test.sr_cache;
         }
 
 
         location /sr_unavail {
-            js_content sr_unavail;
+            js_content test.sr_unavail;
         }
 
         location /sr_unavail_pr {
-            js_content sr_unavail_pr;
+            js_content test.sr_unavail_pr;
         }
 
         location /sr_broken {
-            js_content sr_broken;
+            js_content test.sr_broken;
         }
 
         location /sr_too_large {
-            js_content sr_too_large;
+            js_content test.sr_too_large;
         }
 
         location /sr_out_of_order {
-            js_content sr_out_of_order;
+            js_content test.sr_out_of_order;
         }
 
         location /sr_except_not_a_func {
-            js_content sr_except_not_a_func;
+            js_content test.sr_except_not_a_func;
         }
 
         location /sr_except_failed_to_convert_options_arg {
-            js_content sr_except_failed_to_convert_options_arg;
+            js_content test.sr_except_failed_to_convert_options_arg;
         }
 
         location /sr_except_invalid_options_header_only {
-            js_content sr_except_invalid_options_header_only;
+            js_content test.sr_except_invalid_options_header_only;
         }
 
         location /sr_in_sr_callback {
-            js_content sr_in_sr_callback;
+            js_content test.sr_in_sr_callback;
         }
 
         location /sr_uri_except {
-            js_content sr_uri_except;
+            js_content test.sr_uri_except;
         }
 
 
@@ -200,7 +200,7 @@
         }
 
         location /sr_in_sr {
-            js_content sr_in_sr;
+            js_content test.sr_in_sr;
         }
 
         location /unavail {
@@ -208,11 +208,11 @@
         }
 
         location /sr_parent {
-             js_content sr_parent;
+             js_content test.sr_parent;
         }
 
         location /js_sub {
-            js_content js_sub;
+            js_content test.js_sub;
         }
 
         location /return {
@@ -244,15 +244,15 @@
         }
 
         location /body {
-            js_content body;
+            js_content test.body;
         }
 
         location /detached {
-            js_content detached;
+            js_content test.detached;
         }
 
         location /delayed {
-            js_content delayed;
+            js_content test.delayed;
         }
     }
 
@@ -267,8 +267,6 @@
 EOF
 
 $t->write_file('test.js', <<EOF);
-    this.Failed = {get toConvert() { return {toString(){return {};}}}};
-
     function test_njs(r) {
         r.return(200, njs.version);
     }
@@ -473,6 +471,8 @@
         r.subrequest('/sub1', 'a=1', 'b');
     }
 
+    let Failed = {get toConvert() { return {toString(){return {};}}}};
+
     function sr_except_failed_to_convert_options_arg(r) {
         r.subrequest('/sub1', {args:Failed.toConvert}, ()=>{});
     }
@@ -489,6 +489,17 @@
         r.return(200, '["JS-SUB"]');
     }
 
+    export default {njs:test_njs, sr, sr_pr, sr_args, sr_options_args,
+                    sr_options_args_pr, sr_options_method, sr_options_method_pr,
+                    sr_options_method_head, sr_options_body, sr_body,
+                    sr_body_pr, sr_body_special, body, delayed, detached,
+                    sr_in_variable_handler, async_var, sr_error_page,
+                    subrequest_var, sr_file, sr_cache, sr_unavail, sr_parent,
+                    sr_unavail_pr, sr_broken, sr_too_large, sr_in_sr,
+                    sr_js_in_subrequest, sr_js_in_subrequest_pr, js_sub,
+                    sr_in_sr_callback, sr_out_of_order, sr_except_not_a_func,
+                    sr_uri_except, sr_except_failed_to_convert_options_arg};
+
 EOF
 
 $t->write_file('t', '["SEE-THIS"]');
diff --git a/js_variables.t b/js_variables.t
index 2b67abd..f2481e0 100644
--- a/js_variables.t
+++ b/js_variables.t
@@ -35,26 +35,26 @@
 http {
     %%TEST_GLOBALS_HTTP%%
 
-    js_set $test_var   test_var;
+    js_set $test_var   test.variable;
 
-    js_include test.js;
+    js_import test.js;
 
     server {
         listen       127.0.0.1:8080;
         server_name  localhost;
 
-        set $foo       foo_orig;
+        set $foo       test.foo_orig;
 
         location /var_set {
             return 200 $test_var$foo;
         }
 
         location /content_set {
-            js_content content_set;
+            js_content test.content_set;
         }
 
         location /not_found_set {
-            js_content not_found_set;
+            js_content test.not_found_set;
         }
     }
 }
@@ -62,7 +62,7 @@
 EOF
 
 $t->write_file('test.js', <<EOF);
-    function test_var(r) {
+    function variable(r) {
         r.variables.foo = r.variables.arg_a;
         return 'test_var';
     }
@@ -80,6 +80,8 @@
         }
     }
 
+    export default {variable, content_set, not_found_set};
+
 EOF
 
 $t->try_run('no njs')->plan(3);
diff --git a/stream_js.t b/stream_js.t
index 2b22381..6e174bc 100644
--- a/stream_js.t
+++ b/stream_js.t
@@ -37,14 +37,14 @@
 http {
     %%TEST_GLOBALS_HTTP%%
 
-    js_include test.js;
+    js_import test.js;
 
     server {
         listen       127.0.0.1:8079;
         server_name  localhost;
 
         location /njs {
-            js_content test_njs;
+            js_content test.njs;
         }
 
         location /p/ {
@@ -61,15 +61,15 @@
 stream {
     %%TEST_GLOBALS_STREAM%%
 
-    js_set $js_addr      js_addr;
-    js_set $js_var       js_var;
-    js_set $js_log       js_log;
-    js_set $js_unk       js_unk;
-    js_set $js_req_line  js_req_line;
-    js_set $js_sess_unk  js_sess_unk;
-    js_set $js_async     js_async;
+    js_set $js_addr      test.addr;
+    js_set $js_var       test.variable;
+    js_set $js_log       test.log;
+    js_set $js_unk       test.unk;
+    js_set $js_req_line  test.req_line;
+    js_set $js_sess_unk  test.sess_unk;
+    js_set $js_async     test.asyncf;
 
-    js_include test.js;
+    js_import test.js;
 
     log_format status $server_port:$status;
 
@@ -105,84 +105,84 @@
 
     server {
         listen      127.0.0.1:8086;
-        js_access   js_access_step;
-        js_preread  js_preread_step;
-        js_filter   js_filter_step;
+        js_access   test.access_step;
+        js_preread  test.preread_step;
+        js_filter   test.filter_step;
         proxy_pass  127.0.0.1:8090;
     }
 
     server {
         listen      127.0.0.1:8087;
-        js_access   js_access_undecided;
+        js_access   test.access_undecided;
         return      OK;
         access_log  %%TESTDIR%%/status.log status;
     }
 
     server {
         listen      127.0.0.1:8088;
-        js_access   js_access_allow;
+        js_access   test.access_allow;
         return      OK;
         access_log  %%TESTDIR%%/status.log status;
     }
 
     server {
         listen      127.0.0.1:8089;
-        js_access   js_access_deny;
+        js_access   test.access_deny;
         return      OK;
         access_log  %%TESTDIR%%/status.log status;
     }
 
     server {
         listen      127.0.0.1:8091;
-        js_preread  js_preread_async;
+        js_preread  test.preread_async;
         proxy_pass  127.0.0.1:8090;
     }
 
     server {
         listen      127.0.0.1:8092;
-        js_preread  js_preread_data;
+        js_preread  test.preread_data;
         proxy_pass  127.0.0.1:8090;
     }
 
     server {
         listen      127.0.0.1:8093;
-        js_preread  js_preread_req_line;
+        js_preread  test.preread_req_line;
         return      $js_req_line;
     }
 
     server {
         listen      127.0.0.1:8094;
-        js_filter   js_filter_empty;
+        js_filter   test.filter_empty;
         proxy_pass  127.0.0.1:8090;
     }
 
     server {
         listen      127.0.0.1:8095;
-        js_filter   js_filter_header_inject;
+        js_filter   test.filter_header_inject;
         proxy_pass  127.0.0.1:8079;
     }
 
     server {
         listen      127.0.0.1:8096;
-        js_filter   js_filter_search;
+        js_filter   test.filter_search;
         proxy_pass  127.0.0.1:8090;
     }
 
     server {
         listen      127.0.0.1:8097;
-        js_access   js_access_except;
+        js_access   test.access_except;
         proxy_pass  127.0.0.1:8090;
     }
 
     server {
         listen      127.0.0.1:8098;
-        js_preread  js_preread_except;
+        js_preread  test.preread_except;
         proxy_pass  127.0.0.1:8090;
     }
 
     server {
         listen      127.0.0.1:8099;
-        js_filter   js_filter_except;
+        js_filter   test.filter_except;
         proxy_pass  127.0.0.1:8090;
     }
 
@@ -199,25 +199,25 @@
         r.return(200, njs.version);
     }
 
-    function js_addr(s) {
+    function addr(s) {
         return 'addr=' + s.remoteAddress;
     }
 
-    function js_var(s) {
+    function variable(s) {
         return 'variable=' + s.variables.remote_addr;
     }
 
-    function js_sess_unk(s) {
+    function sess_unk(s) {
         return 'sess_unk=' + s.unk;
     }
 
-    function js_log(s) {
+    function log(s) {
         s.log("SEE-THIS");
     }
 
     var res = '';
 
-    function js_access_step(s) {
+    function access_step(s) {
         res += '1';
 
         setTimeout(function() {
@@ -227,7 +227,7 @@
         }, 1);
     }
 
-    function js_preread_step(s) {
+    function preread_step(s) {
         s.on('upload', function (data) {
             res += '2';
             if (res.length >= 3) {
@@ -236,7 +236,7 @@
         });
     }
 
-    function js_filter_step(s) {
+    function filter_step(s) {
         s.on('upload', function(data, flags) {
             s.send(data);
             res += '3';
@@ -256,11 +256,11 @@
         });
     }
 
-    function js_access_undecided(s) {
+    function access_undecided(s) {
         s.decline();
     }
 
-    function js_access_allow(s) {
+    function access_allow(s) {
         if (s.remoteAddress.match('127.0.0.1')) {
             s.done();
             return;
@@ -269,7 +269,7 @@
         s.deny();
     }
 
-    function js_access_deny(s) {
+    function access_deny(s) {
         if (s.remoteAddress.match('127.0.0.1')) {
             s.deny();
             return;
@@ -279,13 +279,13 @@
     }
 
 
-    function js_preread_async(s) {
+    function preread_async(s) {
         setTimeout(function() {
             s.done();
         }, 1);
     }
 
-    function js_preread_data(s) {
+    function preread_data(s) {
         s.on('upload', function (data, flags) {
             if (data.indexOf('z') != -1) {
                 s.done();
@@ -295,7 +295,7 @@
 
     var line = '';
 
-    function js_preread_req_line(s) {
+    function preread_req_line(s) {
         s.on('upload', function (data, flags) {
             var n = data.indexOf('\\n');
             if (n != -1) {
@@ -305,14 +305,14 @@
         });
     }
 
-    function js_req_line(s) {
+    function req_line(s) {
         return line;
     }
 
-    function js_filter_empty(s) {
+    function filter_empty(s) {
     }
 
-    function js_filter_header_inject(s) {
+    function filter_header_inject(s) {
         var req = '';
 
         s.on('upload', function(data, flags) {
@@ -330,7 +330,7 @@
         });
     }
 
-    function js_filter_search(s) {
+    function filter_search(s) {
         s.on('download', function(data, flags) {
             var n = data.search('y');
             if (n != -1) {
@@ -346,19 +346,19 @@
         });
     }
 
-    function js_access_except(s) {
+    function access_except(s) {
         function done() {return s.a.a};
 
         setTimeout(done, 1);
         setTimeout(done, 2);
     }
 
-    function js_preread_except(s) {
+    function preread_except(s) {
         var fs = require('fs');
         fs.readFileSync();
     }
 
-    function js_filter_except(s) {
+    function filter_except(s) {
         s.on('unknown', function() {});
     }
 
@@ -366,13 +366,19 @@
         return new Promise(resolve => {resolve(x)}).then(v => v).then(v => v);
     }
 
-    async function js_async(s) {
+    async function asyncf(s) {
         const a1 = await pr(10);
         const a2 = await pr(20);
 
         s.setReturnValue(`retval: \${a1 + a2}`);
     }
 
+    export default {njs:test_njs, addr, variable, sess_unk, log, access_step,
+                    preread_step, filter_step, access_undecided, access_allow,
+                    access_deny, preread_async, preread_data, preread_req_line,
+                    req_line, filter_empty, filter_header_inject, filter_search,
+                    access_except, preread_except, filter_except, asyncf};
+
 EOF
 
 $t->run_daemon(\&stream_daemon, port(8090));
@@ -393,17 +399,17 @@
 
 is(stream('127.0.0.1:' . port(8086))->io('0'), '0122345',
 	'async handlers order');
-is(stream('127.0.0.1:' . port(8087))->io('#'), 'OK', 'js_access_undecided');
-is(stream('127.0.0.1:' . port(8088))->io('#'), 'OK', 'js_access_allow');
-is(stream('127.0.0.1:' . port(8089))->io('#'), '', 'js_access_deny');
+is(stream('127.0.0.1:' . port(8087))->io('#'), 'OK', 'access_undecided');
+is(stream('127.0.0.1:' . port(8088))->io('#'), 'OK', 'access_allow');
+is(stream('127.0.0.1:' . port(8089))->io('#'), '', 'access_deny');
 
-is(stream('127.0.0.1:' . port(8091))->io('#'), '#', 'js_preread_async');
-is(stream('127.0.0.1:' . port(8092))->io('#z'), '#z', 'js_preread_async_data');
-is(stream('127.0.0.1:' . port(8093))->io("xy\na"), 'xy', 'js_preread_req_line');
+is(stream('127.0.0.1:' . port(8091))->io('#'), '#', 'preread_async');
+is(stream('127.0.0.1:' . port(8092))->io('#z'), '#z', 'preread_async_data');
+is(stream('127.0.0.1:' . port(8093))->io("xy\na"), 'xy', 'preread_req_line');
 
-is(stream('127.0.0.1:' . port(8094))->io('x'), 'x', 'js_filter_empty');
-like(get('/p/return'), qr/foo/, 'js_filter_injected_header');
-is(stream('127.0.0.1:' . port(8096))->io('x'), 'z', 'js_filter_search');
+is(stream('127.0.0.1:' . port(8094))->io('x'), 'x', 'filter_empty');
+like(get('/p/return'), qr/foo/, 'filter_injected_header');
+is(stream('127.0.0.1:' . port(8096))->io('x'), 'z', 'filter_search');
 
 stream('127.0.0.1:' . port(8097))->io('x');
 stream('127.0.0.1:' . port(8098))->io('x');
@@ -413,7 +419,7 @@
 local $TODO = 'not yet'
 	unless get('/njs') =~ /^([.0-9]+)$/m && $1 ge '0.7.0';
 
-is(stream('127.0.0.1:' . port(8100))->read(), 'retval: 30', 'js_async');
+is(stream('127.0.0.1:' . port(8100))->read(), 'retval: 30', 'asyncf');
 
 }
 
@@ -422,7 +428,7 @@
 ok(index($t->read_file('error.log'), 'SEE-THIS') > 0, 'stream js log');
 ok(index($t->read_file('error.log'), 'at fs.readFileSync') > 0,
 	'stream js_preread backtrace');
-ok(index($t->read_file('error.log'), 'at js_filter_except') > 0,
+ok(index($t->read_file('error.log'), 'at filter_except') > 0,
 	'stream js_filter backtrace');
 
 my @p = (port(8087), port(8088), port(8089));
diff --git a/stream_js_object.t b/stream_js_object.t
index ccbfcd7..504b934 100644
--- a/stream_js_object.t
+++ b/stream_js_object.t
@@ -36,9 +36,9 @@
 stream {
     %%TEST_GLOBALS_STREAM%%
 
-    js_set $test     test;
+    js_set $test     test.test;
 
-    js_include test.js;
+    js_import test.js;
 
     server {
         listen  127.0.0.1:8081;
@@ -85,6 +85,8 @@
                ].every(v=>v(s));
     }
 
+    export default {test};
+
 EOF
 
 $t->try_run('no njs stream session object')->plan(1);
diff --git a/stream_js_variables.t b/stream_js_variables.t
index fc5075c..29e6c33 100644
--- a/stream_js_variables.t
+++ b/stream_js_variables.t
@@ -36,10 +36,10 @@
 stream {
     %%TEST_GLOBALS_STREAM%%
 
-    js_set $test_var       test_var;
-    js_set $test_not_found test_not_found;
+    js_set $test_var       test.variable;
+    js_set $test_not_found test.not_found;
 
-    js_include test.js;
+    js_import test.js;
 
     server {
         listen  127.0.0.1:8081;
@@ -55,12 +55,12 @@
 EOF
 
 $t->write_file('test.js', <<EOF);
-    function test_var(s) {
+    function variable(s) {
         s.variables.status = 400;
         return 'test_var';
     }
 
-    function test_not_found(s) {
+    function not_found(s) {
         try {
             s.variables.unknown = 1;
         } catch (e) {
@@ -68,6 +68,8 @@
         }
     }
 
+    export default {variable, not_found};
+
 EOF
 
 $t->try_run('no stream njs available')->plan(2);
