diff --git a/CHANGELOG.md b/CHANGELOG.md
index 12d7e37..092c708 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 0.2.1
+
+* Support passing named arguments through to the underlying call to `test()`.
+
 # 0.2.0+1
 
 * Compatibility with the latest `test`.
diff --git a/lib/metatest.dart b/lib/metatest.dart
index 8eb8901..656cc2b 100644
--- a/lib/metatest.dart
+++ b/lib/metatest.dart
@@ -10,7 +10,6 @@
 library metatest;
 
 import 'dart:async';
-import 'dart:isolate';
 
 // TODO(nweiz): Stop importing from src when dart-lang/test#48 is fixed.
 import 'package:test/src/backend/declarer.dart';
@@ -25,7 +24,8 @@
 /// [body] corresponds to the `main` method of a test file. By default, this
 /// expects that all tests defined in [body] pass, but if [passing] is passed,
 /// only tests listed there are expected to pass.
-void expectTestsPass(String description, void body(), {List<String> passing}) {
+void expectTestsPass(String description, void body(), {List<String> passing,
+    String testOn, Timeout timeout, skip, Map<String, dynamic> onPlatform}) {
   _setUpTest(description, body, (liveTests) {
     if (passing == null) {
       if (liveTests.any(
@@ -49,20 +49,23 @@
           '${stringify(didPass)} passed.\n'
           '${_summarizeTests(liveTests)}');
     }
-  });
+  }, testOn: testOn, timeout: timeout, skip: skip, onPlatform: onPlatform);
 }
 
 /// Asserts that all tests defined by [body] fail.
 ///
 /// [body] corresponds to the `main` method of a test file.
-void expectTestsFail(String description, body()) {
-  expectTestsPass(description, body, passing: []);
+void expectTestsFail(String description, body(), {String testOn,
+    Timeout timeout, skip, Map<String, dynamic> onPlatform}) {
+  expectTestsPass(description, body, passing: [], testOn: testOn,
+      timeout: timeout, skip: skip, onPlatform: onPlatform);
 }
 
 /// Sets up a test with the given [description] and [body]. After the test runs,
 /// calls [validate] with the result map.
 void _setUpTest(String description, void body(),
-    void validate(List<LiveTest> liveTests)) {
+    void validate(List<LiveTest> liveTests), {String testOn, Timeout timeout,
+    skip, Map<String, dynamic> onPlatform}) {
   test(description, () async {
     var declarer = new Declarer();
     runZoned(body, zoneValues: {#test.declarer: declarer});
@@ -74,7 +77,7 @@
     await engine.run();
 
     validate(engine.liveTests);
-  });
+  }, testOn: testOn, timeout: timeout, skip: skip, onPlatform: onPlatform);
 }
 
 /// Returns a string description of the test run descibed by [liveTests].
