diff --git a/tests/notgl.pl b/tests/notgl.pl
index 548af429b73462f6068917e12544aaa26a9315d1..4dd14f6a2ffa52c61787557c22f7bc161325a443 100755
--- a/tests/notgl.pl
+++ b/tests/notgl.pl
@@ -35,7 +35,10 @@ use CapsuleTest;
 
 skip_all_unless_bwrap;
 
-my $capsule_prefix = File::Temp->newdir();
+my $temp = File::Temp->newdir();
+my $capsule_prefix = "$temp/prefix";
+mkdir $capsule_prefix;
+
 my $libs = '';
 my $notgl_user = "$builddir/tests/notgl-user";
 my $notgl_helper_user = "$builddir/tests/notgl-helper-user";
@@ -269,6 +272,50 @@ like($stdout,
 like($stdout, qr/^notgles_extension_red: red-only extension$/m);
 like($stdout, qr/^notgles_extension_green: \(not found\)$/m);
 
+# We can use separate prefixes for different encapsulated libraries.
+my $red_capsule_prefix = "$temp/red";
+mkdir $red_capsule_prefix;
+my $green_capsule_prefix = "$temp/green";
+mkdir $green_capsule_prefix;
+
+diag 'With libcapsule loading disparate implementations, via dlopen:';
+run_ok([qw(bwrap
+        --ro-bind / /
+        --dev-bind /dev /dev
+        --ro-bind /), $red_capsule_prefix,
+        qw(--ro-bind /), $green_capsule_prefix,
+        '--tmpfs', realpath("$builddir/tests/lib$libs"),
+        '--tmpfs', $red_capsule_prefix.realpath($builddir),
+        '--tmpfs', $green_capsule_prefix.realpath($builddir),
+        '--ro-bind', realpath("$builddir/tests/red"),
+            $red_capsule_prefix.realpath("$builddir/tests/lib"),
+        '--ro-bind', realpath("$builddir/tests/green"),
+            $green_capsule_prefix.realpath("$builddir/tests/lib"),
+        '--setenv', 'CAPSULE_LIBNOTGL_SO_0_PREFIX', $red_capsule_prefix,
+        # We don't specify CAPSULE_LIBNOTGLES_SO_1_PREFIX, so the
+        # generic version gets used.
+        '--setenv', 'CAPSULE_PREFIX', $green_capsule_prefix,
+        '--setenv', 'LD_LIBRARY_PATH', join(':',
+            realpath("$builddir/tests/shim$libs"),
+            realpath("$builddir/tests/helper$libs"),
+            realpath("$builddir/tests/lib$libs"),
+        ),
+        $notgl_dlopener],
+    '>', \$stdout);
+diag_multiline $stdout;
+like($stdout, qr/^NotGL implementation: red$/m);
+like($stdout, qr/^NotGL helper implementation: host \(red\)$/m);
+like($stdout,
+    qr/^notgl_extension_both: red implementation of common extension$/m);
+like($stdout, qr/^notgl_extension_red: red-only extension$/m);
+like($stdout, qr/^notgl_extension_green: \(not found\)$/m);
+like($stdout, qr/^NotGLES implementation: green$/m);
+like($stdout, qr/^NotGLES helper implementation: host \(green\)$/m);
+like($stdout,
+    qr/^notgles_extension_both: green implementation of common extension$/m);
+like($stdout, qr/^notgles_extension_red: \(not found\)$/m);
+like($stdout, qr/^notgles_extension_green: green-only extension$/m);
+
 done_testing;
 
 # vim:set sw=4 sts=4 et: