diff --git a/stream_js.t b/stream_js.t
index 1e8712a..4daf223 100644
--- a/stream_js.t
+++ b/stream_js.t
@@ -1,6 +1,7 @@
 #!/usr/bin/perl
 
 # (C) Andrey Zelenkov
+# (C) Dmitry Volyntsev
 # (C) Nginx, Inc.
 
 # Tests for stream JavaScript module.
@@ -23,7 +24,7 @@
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/stream stream_return udp/)
+my $t = Test::Nginx->new()->has(qw/http proxy rewrite stream stream_return udp/)
 	->write_file_expand('nginx.conf', <<'EOF');
 
 %%TEST_GLOBALS%%
@@ -33,11 +34,36 @@
 events {
 }
 
+http {
+    %%TEST_GLOBALS_HTTP%%
+
+    js_include test.js;
+
+    server {
+        listen       127.0.0.1:8079;
+        server_name  localhost;
+
+        location /njs {
+            js_content test_njs;
+        }
+
+        location /p/ {
+            proxy_pass http://127.0.0.1:8095/;
+
+        }
+
+        location /return {
+            return 200 $http_foo;
+        }
+    }
+}
+
 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_include test.js;
@@ -74,30 +100,6 @@
 
     server {
         listen      127.0.0.1:8086;
-        js_access   js_access_allow;
-        return      'OK';
-    }
-
-    server {
-        listen      127.0.0.1:8087;
-        js_access   js_access_deny;
-        return      'OK';
-    }
-
-    server {
-        listen      127.0.0.1:8088;
-        js_preread  js_preread;
-        proxy_pass  127.0.0.1:8090;
-    }
-
-    server {
-        listen      127.0.0.1:8089;
-        js_filter   js_filter;
-        proxy_pass  127.0.0.1:8090;
-    }
-
-    server {
-        listen      127.0.0.1:8091;
         js_access   js_access_step;
         js_preread  js_preread_step;
         js_filter   js_filter_step;
@@ -105,21 +107,85 @@
     }
 
     server {
+        listen      127.0.0.1:8087;
+        js_access   js_access_undecided;
+        return      OK;
+    }
+
+    server {
+        listen      127.0.0.1:8088;
+        js_access   js_access_allow;
+        return      OK;
+    }
+
+    server {
+        listen      127.0.0.1:8089;
+        js_access   js_access_deny;
+        return      OK;
+    }
+
+    server {
+        listen      127.0.0.1:8091;
+        js_preread  js_preread_async;
+        proxy_pass  127.0.0.1:8090;
+    }
+
+    server {
         listen      127.0.0.1:8092;
-        js_filter   js_filter_except;
+        js_preread  js_preread_data;
         proxy_pass  127.0.0.1:8090;
     }
 
     server {
         listen      127.0.0.1:8093;
+        js_preread  js_preread_req_line;
+        return      $js_req_line;
+    }
+
+    server {
+        listen      127.0.0.1:8094;
+        js_filter   js_filter_empty;
+        proxy_pass  127.0.0.1:8090;
+    }
+
+    server {
+        listen      127.0.0.1:8095;
+        js_filter   js_filter_header_inject;
+        proxy_pass  127.0.0.1:8079;
+    }
+
+    server {
+        listen      127.0.0.1:8096;
+        js_filter   js_filter_search;
+        proxy_pass  127.0.0.1:8090;
+    }
+
+    server {
+        listen      127.0.0.1:8097;
+        js_access   js_access_except;
+        proxy_pass  127.0.0.1:8090;
+    }
+
+    server {
+        listen      127.0.0.1:8098;
         js_preread  js_preread_except;
         proxy_pass  127.0.0.1:8090;
     }
+
+    server {
+        listen      127.0.0.1:8099;
+        js_filter   js_filter_except;
+        proxy_pass  127.0.0.1:8090;
+    }
 }
 
 EOF
 
 $t->write_file('test.js', <<EOF);
+    function test_njs(r) {
+        r.return(200, njs.version);
+    }
+
     function js_addr(s) {
         return 'addr=' + s.remoteAddress;
     }
@@ -136,55 +202,142 @@
         s.log("SEE-THIS");
     }
 
+    var res = '';
+
+    function js_access_step(s) {
+        res += '1';
+
+        setTimeout(function() {
+            if (s.remoteAddress.match('127.0.0.1')) {
+                s.allow();
+            }
+        }, 1);
+    }
+
+    function js_preread_step(s) {
+        s.on('upload', function (data) {
+            res += '2';
+            if (res.length >= 3) {
+                s.done();
+            }
+        });
+    }
+
+    function js_filter_step(s) {
+        s.on('upload', function(data, flags) {
+            s.send(data);
+            res += '3';
+        });
+
+        s.on('download', function(data, flags) {
+
+            if (!flags.last) {
+                res += '4';
+                s.send(data);
+
+            } else {
+                res += '5';
+                s.send(res, {last:1});
+                s.off('download');
+            }
+        });
+    }
+
+    function js_access_undecided(s) {
+        s.decline();
+    }
+
     function js_access_allow(s) {
         if (s.remoteAddress.match('127.0.0.1')) {
-            return s.OK;
+            s.done();
+            return;
         }
+
+        s.abort();
     }
 
     function js_access_deny(s) {
         if (s.remoteAddress.match('127.0.0.1')) {
-            return s.ABORT;
+            s.abort();
+            return;
         }
+
+        s.allow();
     }
 
-    function js_preread(s) {
-        var n = s.buffer.indexOf('z');
-        if (n == -1) {
-            return s.AGAIN;
-        }
+
+    function js_preread_async(s) {
+        setTimeout(function() {
+            s.done();
+        }, 1);
     }
 
-    function js_filter(s) {
-        if (s.fromUpstream) {
-            var n = s.buffer.search('y');
-            if (n != -1) {
-                s.buffer = 'z';
+    function js_preread_data(s) {
+        s.on('upload', function (data, flags) {
+            if (data.indexOf('z') != -1) {
+                s.done();
             }
-            return;
-        }
-
-        n = s.buffer.search('x');
-        if (n != -1) {
-            s.buffer = 'y';
-        }
+        });
     }
 
-    var res = '';
-    function js_access_step(s) {
-        res += '1';
+    var line = '';
+
+    function js_preread_req_line(s) {
+        s.on('upload', function (data, flags) {
+            var n = data.indexOf('\n');
+            if (n != -1) {
+                line = data.substr(0, n);
+                s.done();
+            }
+        });
     }
 
-    function js_preread_step(s) {
-        res += '2';
+    function js_req_line(s) {
+        return line;
     }
 
-    function js_filter_step(s) {
-        if (s.eof) {
-            s.buffer = res;
-            return;
-        }
-        res += '3';
+    function js_filter_empty(s) {
+    }
+
+    function js_filter_header_inject(s) {
+        var req = '';
+
+        s.on('upload', function(data, flags) {
+            req += data;
+
+            var n = req.search('\n');
+            if (n != -1) {
+                var rest = req.substr(n + 1);
+                req = req.substr(0, n + 1);
+
+                s.send(req + 'Foo: foo' + '\r\n' + rest, flags);
+
+                s.off('upload');
+            }
+        });
+    }
+
+    function js_filter_search(s) {
+        s.on('download', function(data, flags) {
+            var n = data.search('y');
+            if (n != -1) {
+                s.send('z');
+            }
+        });
+
+        s.on('upload', function(data, flags) {
+            var n = data.search('x');
+            if (n != -1) {
+                s.send('y');
+            }
+        });
+    }
+
+    function js_access_except(s) {
+        function done() {return s.a.a};
+
+        setTimeout(done, 1);
+        setTimeout(done, 2);
     }
 
     function js_preread_except(s) {
@@ -193,13 +346,13 @@
     }
 
     function js_filter_except(s) {
-        s.a.a;
+        s.on('unknown', function() {});
     }
 
 EOF
 
 $t->run_daemon(\&stream_daemon, port(8090));
-$t->try_run('no stream njs available')->plan(14);
+$t->try_run('no stream njs available')->plan(19);
 $t->waitforsocket('127.0.0.1:' . port(8090));
 
 ###############################################################################
@@ -214,22 +367,37 @@
 is(stream('127.0.0.1:' . port(8083))->read(), '', 'stream js unknown function');
 is(stream('127.0.0.1:' . port(8084))->read(), 'sess_unk=undefined', 's.unk');
 
-is(stream('127.0.0.1:' . port(8086))->read(), 'OK', 'js_access allow');
-is(stream('127.0.0.1:' . port(8087))->read(), '', 'js_access deny');
-is(stream('127.0.0.1:' . port(8088))->io('xyz'), 'xyz', 'js_preread');
-is(stream('127.0.0.1:' . port(8089))->io('x'), 'z', 'js_filter');
-is(stream('127.0.0.1:' . port(8091))->io('0'), '01233', 'handlers order');
+TODO: {
+local $TODO = 'not yet'
+	unless get('/njs') =~ /^([.0-9]+)$/m && $1 ge '0.2.4';
 
-stream('127.0.0.1:' . port(8092))->io('x');
-stream('127.0.0.1:' . port(8093))->io('x');
+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(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(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');
+
+}
+
+stream('127.0.0.1:' . port(8097))->io('x');
+stream('127.0.0.1:' . port(8098))->io('x');
+stream('127.0.0.1:' . port(8099))->io('x');
 
 $t->stop();
 
 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');
+	'stream js_preread backtrace');
 ok(index($t->read_file('error.log'), 'at js_filter_except') > 0,
-   'stream js_filter backtrace');
+	'stream js_filter backtrace');
 
 ###############################################################################
 
@@ -265,4 +433,15 @@
 sub log2o { Test::Nginx::log_core('|| >>', @_); }
 sub log2c { Test::Nginx::log_core('||', @_); }
 
+sub get {
+	my ($url, %extra) = @_;
+
+	my $s = IO::Socket::INET->new(
+		Proto => 'tcp',
+		PeerAddr => '127.0.0.1:' . port(8079)
+	) or die "Can't connect to nginx: $!\n";
+
+	return http_get($url, socket => $s);
+}
+
 ###############################################################################
