diff --git a/tests/test_filetree/test_query.py b/tests/test_filetree/test_query.py
index 3d4bef6db3f229b88f0a7dfef21b38d41a1cb166..2e2b6c007f35da686dd03f369314e3faf9eab6fe 100644
--- a/tests/test_filetree/test_query.py
+++ b/tests/test_filetree/test_query.py
@@ -396,6 +396,104 @@ def test_query_subtree():
             op.join('subj-03', 'surf', 'R.white.gii')]
 
 
+def test_query_multi_subtree():
+    tree1 = tw.dedent("""
+    subj-{participant}
+        T1w.nii.gz (T1w)
+        native
+            ->surface space=native (surf_native)
+        mni
+            ->surface space=mni (surf_mni)
+    """)
+    tree2 = tw.dedent("""
+    {hemi}.{space}.gii (surface)
+    """)
+
+    files = [
+        op.join('subj-01', 'T1w.nii.gz'),
+        op.join('subj-01', 'native', 'L.native.gii'),
+        op.join('subj-01', 'native', 'R.native.gii'),
+        op.join('subj-01', 'mni',    'L.mni.gii'),
+        op.join('subj-01', 'mni',    'R.mni.gii'),
+        op.join('subj-02', 'T1w.nii.gz'),
+        op.join('subj-02', 'native', 'L.native.gii'),
+        op.join('subj-02', 'native', 'R.native.gii'),
+        op.join('subj-02', 'mni',    'L.mni.gii'),
+        op.join('subj-02', 'mni',    'R.mni.gii'),
+        op.join('subj-03', 'T1w.nii.gz'),
+        op.join('subj-03', 'native', 'L.native.gii'),
+        op.join('subj-03', 'native', 'R.native.gii'),
+        op.join('subj-03', 'mni',    'L.mni.gii'),
+        op.join('subj-03', 'mni',    'R.mni.gii')]
+
+    with testdir(files):
+        with open('tree1.tree',   'wt') as f: f.write(tree1)
+        with open('surface.tree', 'wt') as f: f.write(tree2)
+
+        tree = filetree.FileTree.read('tree1.tree', '.')
+        query = filetree.FileTreeQuery(tree)
+
+        assert sorted(query.templates) == ['T1w',
+                                           'surf_mni/surface',
+                                           'surf_native/surface']
+
+        qvars = query.variables()
+        assert sorted(qvars.keys()) == ['hemi', 'participant', 'space']
+        assert qvars['hemi']        == ['L', 'R']
+        assert qvars['participant'] == ['01', '02', '03']
+        assert qvars['space']       == ['mni', 'native']
+
+        qvars = query.variables('T1w')
+        assert sorted(qvars.keys()) == ['participant']
+        assert qvars['participant'] == ['01', '02', '03']
+
+        qvars = query.variables('surf_mni/surface')
+        assert sorted(qvars.keys()) == ['hemi', 'participant', 'space']
+        assert qvars['hemi']        == ['L', 'R']
+        assert qvars['participant'] == ['01', '02', '03']
+        assert qvars['space']       == ['mni', 'native']
+
+        qvars = query.variables('surf_native/surface')
+        assert sorted(qvars.keys()) == ['hemi', 'participant', 'space']
+        assert qvars['hemi']        == ['L', 'R']
+        assert qvars['participant'] == ['01', '02', '03']
+        assert qvars['space']       == ['mni', 'native']
+
+        got = query.query('T1w')
+        assert [m.filename for m in sorted(got)] == [
+            op.join('subj-01', 'T1w.nii.gz'),
+            op.join('subj-02', 'T1w.nii.gz'),
+            op.join('subj-03', 'T1w.nii.gz')]
+
+        got = query.query('T1w', participant='01')
+        assert [m.filename for m in sorted(got)] == [
+            op.join('subj-01', 'T1w.nii.gz')]
+
+        got = query.query('surf_mni/surface')
+        assert [m.filename for m in sorted(got)] == [
+            op.join('subj-01', 'mni', 'L.mni.gii'),
+            op.join('subj-01', 'mni', 'R.mni.gii'),
+            op.join('subj-02', 'mni', 'L.mni.gii'),
+            op.join('subj-02', 'mni', 'R.mni.gii'),
+            op.join('subj-03', 'mni', 'L.mni.gii'),
+            op.join('subj-03', 'mni', 'R.mni.gii')]
+
+        got = query.query('surf_native/surface', hemi='L')
+        assert [m.filename for m in sorted(got)] == [
+            op.join('subj-01', 'native', 'L.native.gii'),
+            op.join('subj-02', 'native', 'L.native.gii'),
+            op.join('subj-03', 'native', 'L.native.gii')]
+
+        got = query.query('surf_native/surface', space='mni')
+        assert [m.filename for m in sorted(got)] == []
+
+        got = query.query('surf_native/surface', space='native', hemi='R')
+        assert [m.filename for m in sorted(got)] == [
+            op.join('subj-01', 'native', 'R.native.gii'),
+            op.join('subj-02', 'native', 'R.native.gii'),
+            op.join('subj-03', 'native', 'R.native.gii')]
+
+
 def test_scan():
 
     with _test_data():