diff --git a/pkg/smith/lib/configuration.dart b/pkg/smith/lib/configuration.dart
index 0c79fd1..949efcb 100644
--- a/pkg/smith/lib/configuration.dart
+++ b/pkg/smith/lib/configuration.dart
@@ -201,6 +201,18 @@
       return value as String;
     }
 
+    List<String> stringListOption(String option) {
+      if (!optionsCopy.containsKey(option)) return null;
+
+      var value = optionsCopy.remove(option);
+      if (value == null) throw FormatException('Option "$option" was null.');
+      if (value is! List) {
+        throw FormatException('Option "$option" had value "$value", which is '
+            'not a List.');
+      }
+      return new List<String>.from(value);
+    }
+
     // Extract options from the name and map.
     var architecture =
         enumOption("architecture", Architecture.names, Architecture.find);
@@ -236,14 +248,13 @@
     var configuration = Configuration(
         name, architecture, compiler, mode, runtime, system,
         builderTag: stringOption("builder-tag"),
-        vmOptions: stringOption("vm-options"),
+        vmOptions: stringListOption("vm-options"),
         timeout: intOption("timeout"),
         enableAsserts: boolOption("enable-asserts"),
         isChecked: boolOption("checked"),
         isCsp: boolOption("csp"),
         isHostChecked: boolOption("host-checked"),
         isMinified: boolOption("minified"),
-        isStrong: boolOption("strong"),
         previewDart2: boolOption("preview-dart-2"),
         useBlobs: boolOption("use-blobs"),
         useDart2JSWithKernel: boolOption("dart2js-with-kernel"),
@@ -273,12 +284,11 @@
 
   final System system;
 
-  // TODO(rnystrom): Is this still needed?
   final String builderTag;
 
-  final String vmOptions;
+  final List<String> vmOptions;
 
-  final int timeout;
+  int timeout;
 
   final bool enableAsserts;
 
@@ -293,9 +303,6 @@
   final bool isMinified;
 
   // TODO(rnystrom): Remove this when Dart 1.0 is no longer supported.
-  final bool isStrong;
-
-  // TODO(rnystrom): Remove this when Dart 1.0 is no longer supported.
   final bool previewDart2;
 
   // TODO(rnystrom): What is this?
@@ -315,14 +322,13 @@
   Configuration(this.name, this.architecture, this.compiler, this.mode,
       this.runtime, this.system,
       {String builderTag,
-      String vmOptions,
+      List<String> vmOptions,
       int timeout,
       bool enableAsserts,
       bool isChecked,
       bool isCsp,
       bool isHostChecked,
       bool isMinified,
-      bool isStrong,
       bool previewDart2,
       bool useBlobs,
       bool useDart2JSWithKernel,
@@ -332,14 +338,13 @@
       bool useHotReloadRollback,
       bool useSdk})
       : builderTag = builderTag ?? "",
-        vmOptions = vmOptions ?? "",
-        timeout = timeout ?? 0,
+        vmOptions = vmOptions ?? <String>[],
+        timeout = timeout,
         enableAsserts = enableAsserts ?? false,
         isChecked = isChecked ?? false,
         isCsp = isCsp ?? false,
         isHostChecked = isHostChecked ?? false,
         isMinified = isMinified ?? false,
-        isStrong = isStrong ?? false,
         previewDart2 = previewDart2 ?? true,
         useBlobs = useBlobs ?? false,
         useDart2JSWithKernel = useDart2JSWithKernel ?? false,
@@ -365,7 +370,6 @@
       isCsp == other.isCsp &&
       isHostChecked == other.isHostChecked &&
       isMinified == other.isMinified &&
-      isStrong == other.isStrong &&
       previewDart2 == other.previewDart2 &&
       useBlobs == other.useBlobs &&
       useDart2JSWithKernel == other.useDart2JSWithKernel &&
@@ -393,15 +397,14 @@
       (isCsp ? 4 : 0) ^
       (isHostChecked ? 8 : 0) ^
       (isMinified ? 16 : 0) ^
-      (isStrong ? 32 : 0) ^
-      (previewDart2 ? 64 : 0) ^
-      (useBlobs ? 128 : 0) ^
-      (useDart2JSWithKernel ? 256 : 0) ^
-      (useDart2JSOldFrontEnd ? 512 : 0) ^
-      (useFastStartup ? 1024 : 0) ^
-      (useHotReload ? 2048 : 0) ^
-      (useHotReloadRollback ? 4096 : 0) ^
-      (useSdk ? 8192 : 0);
+      (previewDart2 ? 32 : 0) ^
+      (useBlobs ? 64 : 0) ^
+      (useDart2JSWithKernel ? 128 : 0) ^
+      (useDart2JSOldFrontEnd ? 256 : 0) ^
+      (useFastStartup ? 512 : 0) ^
+      (useHotReload ? 1024 : 0) ^
+      (useHotReloadRollback ? 2048 : 0) ^
+      (useSdk ? 4096 : 0);
 
   String toString() {
     var buffer = new StringBuffer();
@@ -423,7 +426,6 @@
     if (isCsp) fields.add("csp");
     if (isHostChecked) fields.add("host-checked");
     if (isMinified) fields.add("minified");
-    if (isStrong) fields.add("strong");
     if (previewDart2) fields.add("preview-dart-2");
     if (useBlobs) fields.add("use-blobs");
     if (useDart2JSWithKernel) fields.add("dart2js-with-kernel");
diff --git a/pkg/smith/test/configuration_test.dart b/pkg/smith/test/configuration_test.dart
index 56404d0..626e9864 100644
--- a/pkg/smith/test/configuration_test.dart
+++ b/pkg/smith/test/configuration_test.dart
@@ -221,7 +221,7 @@
               Runtime.d8,
               System.host,
               builderTag: "the tag",
-              vmOptions: "vm stuff",
+              vmOptions: ["vm stuff", "more vm stuff"],
               enableAsserts: true,
               isChecked: true,
               isCsp: true,
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index f7693cf..a6db839 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -167,7 +167,7 @@
         "runtime": "vm",
         "mode": "release",
         "use-sdk": true,
-        "vm-options": "-DuserFastParser=true",
+        "vm-options": ["-DuserFastParser=true"],
         "builder-tag": "analyzer_use_fasta"
       }},
     "vm-legacy-(linux|mac|win)-(debug|release)-(ia32|x64)": {
@@ -227,14 +227,14 @@
       "options": {
         "preview-dart-2": false,
         "builder-tag": "optimization_counter_threshold",
-        "vm-options": "--optimization-counter-threshold=5"
+        "vm-options": ["--optimization-counter-threshold=5"]
       }},
     "vm-legacy-optcounter-checked-linux-release-(ia32|x64)": {
       "options": {
         "preview-dart-2": false,
         "checked": true,
         "builder-tag": "optimization_counter_threshold",
-        "vm-options": "--optimization-counter-threshold=5"
+        "vm-options": ["--optimization-counter-threshold=5"]
       }},
     "vm-legacy-reload-linux-(debug|release)-x64": {
       "options": {
@@ -346,7 +346,7 @@
     "dartkp-linux-release-x64": { },
     "dartkp-linux-debug-x64": {
       "options": {
-        "vm-options": "no-enable-malloc-hooks"
+        "vm-options": ["no-enable-malloc-hooks"]
     }},
     "dartk-(linux|mac)-(debug|release)-x64": { },
     "dartk-win-release-x64": { },
@@ -355,7 +355,7 @@
     "dartk-optcounter-linux-release-x64": {
       "options": {
         "builder-tag": "optimization_counter_threshold",
-        "vm-options": "--optimization-counter-threshold=5",
+        "vm-options": ["--optimization-counter-threshold=5"],
         "preview-dart-2": false
       }},
     "dartk-legacy-linux-release-x64": {
diff --git a/tools/testing/dart/configuration.dart b/tools/testing/dart/configuration.dart
index 5df9fc2..e532f7d 100644
--- a/tools/testing/dart/configuration.dart
+++ b/tools/testing/dart/configuration.dart
@@ -22,27 +22,17 @@
 /// executed on, etc.
 class TestConfiguration {
   TestConfiguration(
-      {this.architecture,
-      this.compiler,
-      this.mode,
+      {this.configuration,
+      this.namedConfiguration,
       this.progress,
-      this.runtime,
-      this.system,
       this.selectors,
       this.appendLogs,
       this.batch,
       this.batchDart2JS,
       this.copyCoreDumps,
-      this.hotReload,
-      this.hotReloadRollback,
-      this.isChecked,
-      this.isHostChecked,
-      this.isCsp,
-      this.isMinified,
       this.isVerbose,
       this.listTests,
       this.listStatusFiles,
-      this.noPreviewDart2,
       this.printTiming,
       this.printReport,
       this.reportInJson,
@@ -50,17 +40,10 @@
       this.skipCompilation,
       this.useAnalyzerCfe,
       this.useAnalyzerFastaParser,
-      this.useBlobs,
-      this.useSdk,
-      this.useFastStartup,
-      this.useEnableAsserts,
-      this.useDart2JSWithKernel,
-      this.useDart2JSOldFrontend,
       this.useKernelBytecode,
       this.writeDebugLog,
       this.writeTestOutcomeLog,
       this.writeResultLog,
-      this.namedConfiguration,
       this.drtPath,
       this.chromePath,
       this.safariPath,
@@ -69,7 +52,6 @@
       this.dartPrecompiledPath,
       this.flutterPath,
       this.taskCount,
-      int timeout,
       this.shardCount,
       this.shard,
       this.stepName,
@@ -78,26 +60,23 @@
       this.testDriverErrorPort,
       this.localIP,
       this.dart2jsOptions,
-      this.vmOptions,
       String packages,
       this.packageRoot,
       this.suiteDirectory,
-      this.builderTag,
       this.outputDirectory,
       this.reproducingArguments,
       this.fastTestsOnly,
       this.printPassingStdout})
-      : _packages = packages,
-        _timeout = timeout;
-
-  final Architecture architecture;
-  final Compiler compiler;
-  final Mode mode;
-  final Progress progress;
-  final Runtime runtime;
-  final System system;
+      : _packages = packages;
 
   final Map<String, RegExp> selectors;
+  final Progress progress;
+  // The test configuration computed from the test options.
+  final Configuration configuration;
+  // The test configuration coming from the -n option.  Merging
+  // these two configurations into one will be the focus of some
+  // usability work.
+  final Configuration namedConfiguration;
 
   // Boolean flags.
 
@@ -106,16 +85,9 @@
   final bool batchDart2JS;
   final bool copyCoreDumps;
   final bool fastTestsOnly;
-  final bool hotReload;
-  final bool hotReloadRollback;
-  final bool isChecked;
-  final bool isHostChecked;
-  final bool isCsp;
-  final bool isMinified;
   final bool isVerbose;
   final bool listTests;
   final bool listStatusFiles;
-  final bool noPreviewDart2;
   final bool printTiming;
   final bool printReport;
   final bool reportInJson;
@@ -123,20 +95,32 @@
   final bool skipCompilation;
   final bool useAnalyzerCfe;
   final bool useAnalyzerFastaParser;
-  final bool useBlobs;
-  final bool useSdk;
-  final bool useFastStartup;
-  final bool useEnableAsserts;
-  final bool useDart2JSWithKernel;
-  final bool useDart2JSOldFrontend;
   final bool useKernelBytecode;
   final bool writeDebugLog;
   final bool writeTestOutcomeLog;
   final bool writeResultLog;
   final bool printPassingStdout;
 
-  final Configuration
-      namedConfiguration; // The test configuration containing all test options.
+  Architecture get architecture => configuration.architecture;
+  Compiler get compiler => configuration.compiler;
+  Mode get mode => configuration.mode;
+  Runtime get runtime => configuration.runtime;
+  System get system => configuration.system;
+
+  // Boolean getters
+  bool get hotReload => configuration.useHotReload;
+  bool get hotReloadRollback => configuration.useHotReloadRollback;
+  bool get isChecked => configuration.isChecked;
+  bool get isHostChecked => configuration.isHostChecked;
+  bool get isCsp => configuration.isCsp;
+  bool get isMinified => configuration.isMinified;
+  bool get noPreviewDart2 => !configuration.previewDart2;
+  bool get useBlobs => configuration.useBlobs;
+  bool get useSdk => configuration.useSdk;
+  bool get useFastStartup => configuration.useFastStartup;
+  bool get useEnableAsserts => configuration.enableAsserts;
+  bool get useDart2JSWithKernel => configuration.useDart2JSWithKernel;
+  bool get useDart2JSOldFrontend => configuration.useDart2JSOldFrontEnd;
 
   // Various file paths.
 
@@ -162,7 +146,7 @@
   final List<String> dart2jsOptions;
 
   /// Extra VM options passed to the testing script.
-  final List<String> vmOptions;
+  List<String> get vmOptions => configuration.vmOptions;
 
   String _packages;
 
@@ -178,7 +162,7 @@
   final String outputDirectory;
   final String packageRoot;
   final String suiteDirectory;
-  final String builderTag;
+  String get builderTag => configuration.builderTag;
   final List<String> reproducingArguments;
 
   TestingServers _servers;
@@ -226,10 +210,11 @@
   ///     build/none_vm_release_x64
   String get buildDirectory => system.outputDirectory + configurationDirectory;
 
-  int _timeout;
-
+  // TODO(whesse): Put non-default timeouts explicitly in configs, not this.
+  /// Calculates a default timeout based on the compiler and runtime used,
+  /// and the mode, architecture, etc.
   int get timeout {
-    if (_timeout == null) {
+    if (configuration.timeout == null) {
       var isReload = hotReload || hotReloadRollback;
 
       var compilerMulitiplier = compilerConfiguration.timeoutMultiplier;
@@ -239,10 +224,10 @@
           isReload: isReload,
           arch: architecture);
 
-      _timeout = 60 * compilerMulitiplier * runtimeMultiplier;
+      configuration.timeout = 60 * compilerMulitiplier * runtimeMultiplier;
     }
 
-    return _timeout;
+    return configuration.timeout;
   }
 
   List<String> get standardOptions {
diff --git a/tools/testing/dart/launch_browser.dart b/tools/testing/dart/launch_browser.dart
index 54c676f..b4f598e 100644
--- a/tools/testing/dart/launch_browser.dart
+++ b/tools/testing/dart/launch_browser.dart
@@ -34,7 +34,9 @@
   }
 
   var runtime = Runtime.find(name);
-  var configuration = new TestConfiguration(runtime: runtime);
+  var configuration = new TestConfiguration(
+      configuration: new Configuration(
+          "dummy configuration", null, null, null, runtime, null));
   var executable = configuration.browserLocation;
   var browser = new Browser.byRuntime(runtime, executable);
   browser.start(arguments[1]);
diff --git a/tools/testing/dart/options.dart b/tools/testing/dart/options.dart
index 441301b..dd6d7bc 100644
--- a/tools/testing/dart/options.dart
+++ b/tools/testing/dart/options.dart
@@ -4,7 +4,7 @@
 
 import 'dart:io';
 
-import 'package:smith/smith.dart' as smith;
+import 'package:smith/smith.dart';
 
 import 'configuration.dart';
 import 'path.dart';
@@ -638,29 +638,42 @@
                 mode,
                 architecture,
                 system);
-            print(namedConfiguration);
+            print(namedConfiguration); // TODO(whesse): remove
+            var innerConfiguration = new Configuration(
+                namedConfiguration?.name ?? "custom configuration",
+                architecture,
+                compiler,
+                mode,
+                runtime,
+                system,
+                timeout: data["timeout"] as int,
+                enableAsserts: data["enable_asserts"] as bool,
+                useBlobs: data["use_blobs"] as bool,
+                useSdk: data["use_sdk"] as bool,
+                useFastStartup: data["fast_startup"] as bool,
+                useDart2JSWithKernel: data["dart2js_with_kernel"] as bool,
+                useDart2JSOldFrontEnd: data["dart2js_old_frontend"] as bool,
+                useHotReload: data["hot_reload"] as bool,
+                useHotReloadRollback: data["hot_reload_rollback"] as bool,
+                isChecked: data["checked"] as bool,
+                isHostChecked: data["host_checked"] as bool,
+                isCsp: data["csp"] as bool,
+                isMinified: data["minified"] as bool,
+                vmOptions: vmOptions,
+                builderTag: data["builder_tag"] as String,
+                previewDart2: !(data["no_preview_dart_2"] as bool));
             var configuration = new TestConfiguration(
-                architecture: architecture,
-                compiler: compiler,
-                mode: mode,
+                configuration: innerConfiguration,
+                namedConfiguration: namedConfiguration,
                 progress: Progress.find(data["progress"] as String),
-                runtime: runtime,
-                system: System.find(data["system"] as String),
                 selectors: selectors,
                 appendLogs: data["append_logs"] as bool,
                 batch: !(data["noBatch"] as bool),
                 batchDart2JS: data["dart2js_batch"] as bool,
                 copyCoreDumps: data["copy_coredumps"] as bool,
-                hotReload: data["hot_reload"] as bool,
-                hotReloadRollback: data["hot_reload_rollback"] as bool,
-                isChecked: data["checked"] as bool,
-                isHostChecked: data["host_checked"] as bool,
-                isCsp: data["csp"] as bool,
-                isMinified: data["minified"] as bool,
                 isVerbose: data["verbose"] as bool,
                 listTests: data["list"] as bool,
                 listStatusFiles: data["list_status_files"] as bool,
-                noPreviewDart2: data["no_preview_dart_2"] as bool,
                 printTiming: data["time"] as bool,
                 printReport: data["report"] as bool,
                 reportInJson: data["report_in_json"] as bool,
@@ -669,17 +682,10 @@
                 useAnalyzerCfe: data["use_cfe"] as bool,
                 useAnalyzerFastaParser:
                     data["analyzer_use_fasta_parser"] as bool,
-                useBlobs: data["use_blobs"] as bool,
-                useSdk: data["use_sdk"] as bool,
-                useFastStartup: data["fast_startup"] as bool,
-                useEnableAsserts: data["enable_asserts"] as bool,
-                useDart2JSWithKernel: data["dart2js_with_kernel"] as bool,
-                useDart2JSOldFrontend: data["dart2js_old_frontend"] as bool,
                 useKernelBytecode: compiler == Compiler.dartkb,
                 writeDebugLog: data["write_debug_log"] as bool,
                 writeTestOutcomeLog: data["write_test_outcome_log"] as bool,
                 writeResultLog: data["write_result_log"] as bool,
-                namedConfiguration: namedConfiguration,
                 drtPath: data["drt"] as String,
                 chromePath: data["chrome"] as String,
                 safariPath: data["safari"] as String,
@@ -688,7 +694,6 @@
                 dartPrecompiledPath: data["dart_precompiled"] as String,
                 flutterPath: data["flutter"] as String,
                 taskCount: data["tasks"] as int,
-                timeout: data["timeout"] as int,
                 shardCount: data["shards"] as int,
                 shard: data["shard"] as int,
                 stepName: data["step_name"] as String,
@@ -698,11 +703,9 @@
                 testDriverErrorPort: data["test_driver_error_port"] as int,
                 localIP: data["local_ip"] as String,
                 dart2jsOptions: dart2jsOptions,
-                vmOptions: vmOptions,
                 packages: data["packages"] as String,
                 packageRoot: data["package_root"] as String,
                 suiteDirectory: data["suite_dir"] as String,
-                builderTag: data["builder_tag"] as String,
                 outputDirectory: data["output_directory"] as String,
                 reproducingArguments: _reproducingCommand(data),
                 fastTestsOnly: data["fast_tests"] as bool,
@@ -859,7 +862,7 @@
   }
 }
 
-smith.Configuration getNamedConfiguration(String template, Runtime runtime,
+Configuration getNamedConfiguration(String template, Runtime runtime,
     Compiler compiler, Mode mode, Architecture architecture, System system) {
   print(template);
   if (template == null) return null;
@@ -880,8 +883,7 @@
     template = template.replaceFirst(r"${system}", name);
   }
 
-  smith.TestMatrix testMatrix =
-      smith.TestMatrix.fromPath("tools/bots/test_matrix.json");
+  TestMatrix testMatrix = TestMatrix.fromPath("tools/bots/test_matrix.json");
   print("Expanded namedConfiguration name:$template");
   return testMatrix.configurations
       .singleWhere((c) => c.name == template, orElse: () => null);
