diff --git a/src/test/subscription/t/000_rep_btree+.pl b/src/test/subscription/t/000_rep_btree+.pl
new file mode 100644
index 0000000000..5a7149334c
--- /dev/null
+++ b/src/test/subscription/t/000_rep_btree+.pl
@@ -0,0 +1,83 @@
+use strict;
+use warnings;
+use PostgresNode;
+use TestLib;
+use Test::More tests => 1;
+
+# Initialize publisher node
+my $node_publisher = get_new_node('publisher');
+$node_publisher->init(allows_streaming => 'logical');
+$node_publisher->append_conf('postgresql.conf', q{
+autovacuum = 'off'
+max_connections = 100
+});
+$node_publisher->start;
+
+# Create subscriber node
+my $node_subscriber = get_new_node('subscriber');
+$node_subscriber->init(allows_streaming => 'logical');
+$node_subscriber->append_conf('postgresql.conf', q{
+autovacuum = 'off'
+max_connections = 100
+});
+$node_subscriber->start;
+
+$node_publisher->safe_psql('postgres', "CREATE TABLE t (k int primary key, v int, c int);");
+$node_subscriber->safe_psql('postgres', "CREATE TABLE t (k int primary key, v int, c int);");
+
+# Setup logical replication
+my $publisher_connstr = $node_publisher->connstr . ' dbname=postgres';
+$node_publisher->safe_psql('postgres', "CREATE PUBLICATION tap_pub");
+$node_publisher->safe_psql('postgres', "ALTER PUBLICATION tap_pub ADD TABLE t");
+
+$node_subscriber->safe_psql('postgres',
+    "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION tap_pub"
+);
+
+$node_publisher->wait_for_catchup('tap_sub');
+
+# Also wait for initial table sync to finish
+my $synced_query = "SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');";
+$node_subscriber->poll_query_until('postgres', $synced_query)
+  or die "Timed out while waiting for subscriber to synchronize data";
+
+$node_publisher->safe_psql('postgres', "INSERT INTO t (select generate_series(0, 399), 0, 0);");
+
+open (PGB_SCRIPT, '>/tmp/writer.pgb');
+print PGB_SCRIPT << 'END';
+\set src random(0, 399)
+\set dst random(0, 399)
+\set amount random(1, 10)
+begin;
+update t set v = v - :amount, c = c + 1 where k=:src;
+update t set v = v + :amount, c = c + 1 where k=:dst;
+commit;
+END
+close(PGB_SCRIPT);
+
+my $time = localtime();
+diag("$time: pgbench starting...");
+my $pgbench1 = IPC::Run::start(
+    [ 'pgbench', '-n', '-c', 10, '-T', 60, '-f', '/tmp/writer.pgb', '-d', $node_publisher->connstr('postgres') ],
+    '<', \undef, '>&', '/tmp/pgbench1.log');
+
+my $pgbench2 = IPC::Run::start(
+    [ 'pgbench', '-n', '-c', 10, '-T', 60, '-f', '/tmp/writer.pgb', '-d', $node_subscriber->connstr('postgres') ],
+    '<', \undef, '>&', '/tmp/pgbench2.log');
+
+for my $i (1..60 + 2) {
+    my $result1 = $node_publisher->safe_psql('postgres', "SELECT SUM(c) FROM t");
+    my $result2 = $node_subscriber->safe_psql('postgres', "SELECT SUM(c) FROM t");
+    diag("changes: $result1 / $result2");
+    sleep(1);
+}
+$pgbench1->finish;
+$pgbench2->finish;
+
+$time = localtime();
+diag("$time: pgbench ended.");
+
+$node_subscriber->stop('fast');
+$node_publisher->stop('fast');
+ok(1);
+
