diff --git a/.gitignore b/.gitignore
index d82160d..1632934 100644
--- a/.gitignore
+++ b/.gitignore
@@ -57,3 +57,7 @@
 # Generated files.
 tools/out
 tools/xcodebuild
+pkg/shadow_dom/tool/node_modules
+
+
+
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index f850b03..9206a32 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -14,5 +14,6 @@
       input_api,
       output_api,
       json_url='http://dart-status.appspot.com/current?format=json')
-  results.extend(status_check)
+  # TODO(ricow): reenable when status page is back in shape
+  # results.extend(status_check)
   return results
diff --git a/WATCHLISTS b/WATCHLISTS
new file mode 100644
index 0000000..ceb0027
--- /dev/null
+++ b/WATCHLISTS
@@ -0,0 +1,19 @@
+# Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+# Watchlist Rules
+# Refer: http://dev.chromium.org/developers/contributing-code/watchlists
+
+{
+  'WATCHLIST_DEFINITIONS': {
+    'runtime': {
+      'filepath': 'runtime/',
+    },
+  },
+
+  'WATCHLISTS': {
+    'runtime': ['vm-dev@dartlang.org'],
+  },
+}
+
diff --git a/pkg/analyzer_experimental/lib/analyzer.dart b/pkg/analyzer_experimental/lib/analyzer.dart
index 644009c..a88c94c 100644
--- a/pkg/analyzer_experimental/lib/analyzer.dart
+++ b/pkg/analyzer_experimental/lib/analyzer.dart
@@ -11,7 +11,6 @@
 import 'src/error.dart';
 import 'src/generated/ast.dart';
 import 'src/generated/error.dart';
-import 'src/generated/java_io.dart';
 import 'src/generated/parser.dart';
 import 'src/generated/scanner.dart';
 import 'src/generated/source_io.dart';
@@ -49,13 +48,7 @@
 
 /// Converts an AST node representing a string literal into a [String].
 String stringLiteralToString(StringLiteral literal) {
-  if (literal is AdjacentStrings) {
-    return literal.strings.map(stringLiteralToString).join();
-  } else if (literal is SimpleStringLiteral) {
-    return literal.value;
-  } else {
-    throw new ArgumentError("Can't convert $literal to a Dart string.");
-  }
+  return literal.stringValue;
 }
 
 /// A simple error listener that collects errors into an [AnalysisErrorGroup].
diff --git a/pkg/analyzer_experimental/lib/options.dart b/pkg/analyzer_experimental/lib/options.dart
index dd841f0..37c6c8d 100644
--- a/pkg/analyzer_experimental/lib/options.dart
+++ b/pkg/analyzer_experimental/lib/options.dart
@@ -5,6 +5,7 @@
 library options;
 
 import 'package:args/args.dart';
+import 'package:path/path.dart';
 
 import 'dart:io';
 
@@ -153,9 +154,8 @@
 
   static String _getVersion() {
     try {
-      Path path = new Path(Platform.script);
-      Path versionPath = path.directoryPath.append('..').append('version');
-      File versionFile = new File.fromPath(versionPath);
+      String versionPath = join(dirname(Platform.script), '..', 'version');;
+      File versionFile = new File(versionPath);
       return versionFile.readAsStringSync().trim();
     } catch (_) {
       // This happens when the script is not running in the context of an SDK.
diff --git a/pkg/barback/lib/src/asset_cascade.dart b/pkg/barback/lib/src/asset_cascade.dart
index af48a47..341480d 100644
--- a/pkg/barback/lib/src/asset_cascade.dart
+++ b/pkg/barback/lib/src/asset_cascade.dart
@@ -113,8 +113,10 @@
   /// Gets the asset identified by [id].
   ///
   /// If [id] is for a generated or transformed asset, this will wait until it
-  /// has been created and return it. If the asset cannot be found, returns
-  /// null.
+  /// has been created and return it. This means that the returned asset will
+  /// always be [AssetState.AVAILABLE].
+  ///
+  /// If the asset cannot be found, returns null.
   Future<AssetNode> getAssetNode(AssetId id) {
     assert(id.package == package);
 
@@ -126,11 +128,9 @@
     // * If [id] has never been generated and all active transformers provide
     //   metadata about the file names of assets it can emit, we can prove that
     //   none of them can emit [id] and fail early.
-    return newFuture(() {
-      var node = _getAssetNode(id);
-
+    return _phases.last.getInput(id).then((node) {
       // If the requested asset is available, we can just return it.
-      if (node != null) return node;
+      if (node != null && node.state.isAvailable) return node;
 
       // If there's a build running, that build might generate the asset, so we
       // wait for it to complete and then try again.
@@ -144,24 +144,6 @@
     });
   }
 
-  // Returns the post-transformation asset node for [id], if one is available.
-  //
-  // This will only return a node that has an asset available, and only if that
-  // node is guaranteed not to be consumed by any transforms. If the phase is
-  // still working to figure out if a node will be consumed by a transformer,
-  // that node won't be returned.
-  AssetNode _getAssetNode(AssetId id) {
-    // Each phase's inputs are the outputs of the previous phase. Find the last
-    // phase that contains the asset. Since the last phase has no transformers,
-    // this will find the latest output for that id.
-    for (var i = _phases.length - 1; i >= 0; i--) {
-      var node = _phases[i].getUnconsumedInput(id);
-      if (node != null) return node;
-    }
-
-    return null;
-  }
-
   /// Adds [sources] to the graph's known set of source assets.
   ///
   /// Begins applying any transforms that can consume any of the sources. If a
diff --git a/pkg/barback/lib/src/barback.dart b/pkg/barback/lib/src/barback.dart
index 27c4d47..3dcb23e 100644
--- a/pkg/barback/lib/src/barback.dart
+++ b/pkg/barback/lib/src/barback.dart
@@ -73,7 +73,7 @@
   Future<Asset> getAssetById(AssetId id) {
     return _graph.getAssetNode(id).then((node) {
       if (node == null) throw new AssetNotFoundException(id);
-      return node.whenAvailable;
+      return node.asset;
     });
   }
 
diff --git a/pkg/barback/lib/src/errors.dart b/pkg/barback/lib/src/errors.dart
index a379ae5..f356066 100644
--- a/pkg/barback/lib/src/errors.dart
+++ b/pkg/barback/lib/src/errors.dart
@@ -29,6 +29,10 @@
 /// Error thrown when two or more transformers both output an asset with [id].
 class AssetCollisionException implements BarbackException {
   /// All the transforms that output an asset with [id].
+  ///
+  /// If this only contains a single transform, that indicates that a
+  /// transformer produced an output that collides with a source asset or an
+  /// asset from a previous phase.
   final Set<TransformInfo> transforms;
   final AssetId id;
 
diff --git a/pkg/barback/lib/src/package_graph.dart b/pkg/barback/lib/src/package_graph.dart
index 307a870..c46ed55 100644
--- a/pkg/barback/lib/src/package_graph.dart
+++ b/pkg/barback/lib/src/package_graph.dart
@@ -85,8 +85,10 @@
   /// Gets the asset node identified by [id].
   ///
   /// If [id] is for a generated or transformed asset, this will wait until it
-  /// has been created and return it. If the asset cannot be found, returns
-  /// null.
+  /// has been created and return it. This means that the returned asset will
+  /// always be [AssetState.AVAILABLE].
+  ///
+  /// If the asset cannot be found, returns null.
   Future<AssetNode> getAssetNode(AssetId id) {
     var cascade = _cascades[id.package];
     if (cascade != null) return cascade.getAssetNode(id);
diff --git a/pkg/barback/lib/src/phase.dart b/pkg/barback/lib/src/phase.dart
index cf817ca..86444ad 100644
--- a/pkg/barback/lib/src/phase.dart
+++ b/pkg/barback/lib/src/phase.dart
@@ -56,6 +56,13 @@
   /// is a transformer. "dart2js on web/main.dart" is a transform.
   final _transforms = new Map<AssetId, Set<TransformNode>>();
 
+  /// Controllers for assets that aren't consumed by transforms in this phase.
+  ///
+  /// These assets are passed to the next phase unmodified. They need
+  /// intervening controllers to ensure that the outputs can be marked dirty
+  /// when determining whether transforms apply, and removed if they do.
+  final _passThroughControllers = new Map<AssetId, AssetNodeController>();
+
   /// Futures that will complete once the transformers that can consume a given
   /// asset are determined.
   ///
@@ -73,10 +80,10 @@
   /// transforms that produced those asset nodes.
   ///
   /// Usually there's only one node for a given output id. However, it's
-  /// possible for multiple transformers in this phase to output an asset with
-  /// the same id. In that case, the chronologically first output emitted is
-  /// passed forward. We keep track of the other nodes so that if that output is
-  /// removed, we know which asset to replace it with.
+  /// possible for multiple transformers to output an asset with the same id. In
+  /// that case, the chronologically first output emitted is passed forward. We
+  /// keep track of the other nodes so that if that output is removed, we know
+  /// which asset to replace it with.
   final _outputs = new Map<AssetId, Queue<AssetNode>>();
 
   /// A stream that emits an event whenever this phase becomes dirty and needs
@@ -163,36 +170,11 @@
     });
   }
 
-  /// Returns the input for this phase with the given [id], but only if that
-  /// input is known not to be consumed as a transformer's primary input.
-  ///
-  /// If the input is unavailable, or if the phase hasn't determined whether or
-  /// not any transformers will consume it as a primary input, null will be
-  /// returned instead. This means that the return value is guaranteed to always
-  /// be [AssetState.AVAILABLE].
-  AssetNode getUnconsumedInput(AssetId id) {
-    if (!_inputs.containsKey(id)) return null;
-
-    // If the asset has transforms, it's not unconsumed.
-    if (!_transforms[id].isEmpty) return null;
-
-    // If we're working on figuring out if the asset has transforms, we can't
-    // prove that it's unconsumed.
-    if (_adjustTransformersFutures.containsKey(id)) return null;
-
-    // The asset should be available. If it were removed, it wouldn't be in
-    // _inputs, and if it were dirty, it'd be in _adjustTransformersFutures.
-    assert(_inputs[id].state.isAvailable);
-    return _inputs[id];
-  }
-
   /// Gets the asset node for an input [id].
   ///
   /// If an input with that ID cannot be found, returns null.
   Future<AssetNode> getInput(AssetId id) {
     return newFuture(() {
-      // TODO(rnystrom): Need to handle passthrough where an asset from a
-      // previous phase can be found.
       if (id.package == cascade.package) return _inputs[id];
       return cascade.graph.getAssetNode(id);
     });
@@ -210,6 +192,11 @@
     // kick off a build, even if that build does nothing.
     _onDirtyController.add(null);
 
+    // If there's a pass-through for this node, mark it dirty while we figure
+    // out whether we need to add any transforms for it.
+    var controller = _passThroughControllers[node.id];
+    if (controller != null) controller.setDirty();
+
     // Once the input is available, hook up transformers for it. If it changes
     // while that's happening, try again.
     _adjustTransformersFutures[node.id] = node.tryUntilStable((asset) {
@@ -219,6 +206,8 @@
       return _removeStaleTransforms(asset)
           .then((_) => _addFreshTransforms(node, oldTransformers));
     }).then((_) {
+      _adjustPassThrough(node);
+
       // Now all the transforms are set up correctly and the asset is available
       // for the time being. Set up handlers for when the asset changes in the
       // future.
@@ -226,6 +215,8 @@
         if (state.isRemoved) {
           _onDirtyController.add(null);
           _transforms.remove(node.id);
+          var passThrough = _passThroughControllers.remove(node.id);
+          if (passThrough != null) passThrough.setRemoved();
         } else {
           _adjustTransformers(node);
         }
@@ -237,8 +228,10 @@
 
       // If the asset is removed, [tryUntilStable] will throw an
       // [AssetNotFoundException]. In that case, just remove all transforms for
-      // the node.
+      // the node, and its pass-through.
       _transforms.remove(node.id);
+      var passThrough = _passThroughControllers.remove(node.id);
+      if (passThrough != null) passThrough.setRemoved();
     }).whenComplete(() {
       _adjustTransformersFutures.remove(node.id);
     });
@@ -291,6 +284,28 @@
     }));
   }
 
+  /// Adjust whether [node] is passed through the phase unmodified, based on
+  /// whether it's consumed by other transforms in this phase.
+  ///
+  /// If [node] was already passed-through, this will update the passed-through
+  /// value.
+  void _adjustPassThrough(AssetNode node) {
+    assert(node.state.isAvailable);
+
+    if (_transforms[node.id].isEmpty) {
+      var controller = _passThroughControllers[node.id];
+      if (controller != null) {
+        controller.setAvailable(node.asset);
+      } else {
+        _passThroughControllers[node.id] =
+            new AssetNodeController.available(node.asset, node.transform);
+      }
+    } else {
+      var controller = _passThroughControllers.remove(node.id);
+      if (controller != null) controller.setRemoved();
+    }
+  }
+
   /// Processes this phase.
   ///
   /// Returns a future that completes when processing is done. If there is
@@ -308,14 +323,24 @@
 
   /// Applies all currently wired up and dirty transforms.
   Future _processTransforms() {
+    if (_next == null) return;
+
+    var newPassThroughs = _passThroughControllers.values
+        .map((controller) => controller.node)
+        .where((output) {
+      return !_outputs.containsKey(output.id) ||
+        !_outputs[output.id].contains(output);
+    }).toSet();
+
     // Convert this to a list so we can safely modify _transforms while
     // iterating over it.
     var dirtyTransforms =
         flatten(_transforms.values.map((transforms) => transforms.toList()))
         .where((transform) => transform.isDirty).toList();
-    if (dirtyTransforms.isEmpty) return null;
 
-    var collisions = new Set<AssetId>();
+    if (dirtyTransforms.isEmpty && newPassThroughs.isEmpty) return null;
+
+    var collisions = _passAssetsThrough(newPassThroughs);
     return Future.wait(dirtyTransforms.map((transform) {
       return transform.apply().then((outputs) {
         for (var output in outputs) {
@@ -346,6 +371,30 @@
     });
   }
 
+  /// Pass all new assets that aren't consumed by transforms through to the next
+  /// phase.
+  ///
+  /// Returns a set of asset ids that have collisions between new passed-through
+  /// assets and pre-existing transform outputs.
+  Set<AssetId> _passAssetsThrough(Set<AssetId> newPassThroughs) {
+    var collisions = new Set<AssetId>();
+    for (var output in newPassThroughs) {
+      if (_outputs.containsKey(output.id)) {
+        // There shouldn't be another pass-through asset with the same id.
+        assert(!_outputs[output.id].any((asset) => asset.transform == null));
+
+        _outputs[output.id].add(output);
+        collisions.add(output.id);
+      } else {
+        _outputs[output.id] = new Queue<AssetNode>.from([output]);
+        _next.addInput(output);
+      }
+
+      _handleOutputRemoval(output);
+    }
+    return collisions;
+  }
+
   /// Properly resolve collisions when [output] is removed.
   void _handleOutputRemoval(AssetNode output) {
     output.whenRemoved.then((_) {
diff --git a/pkg/barback/test/package_graph/errors_test.dart b/pkg/barback/test/package_graph/errors_test.dart
index 46ff289..8e4fd89 100644
--- a/pkg/barback/test/package_graph/errors_test.dart
+++ b/pkg/barback/test/package_graph/errors_test.dart
@@ -284,4 +284,53 @@
     expectAsset("app|foo.out", "two.out");
     buildShouldFail([isAssetCollisionException("app|foo.out")]);
   });
+
+  test("a collision with a pass-through asset returns the pass-through asset",
+      () {
+    initGraph([
+      "app|foo.txt",
+      "app|foo.in"
+    ], {"app": [
+      [new RewriteTransformer("in", "txt")]
+    ]});
+
+    updateSources(["app|foo.txt", "app|foo.in"]);
+    expectAsset("app|foo.txt", "foo");
+    buildShouldFail([isAssetCollisionException("app|foo.txt")]);
+  });
+
+  test("a new pass-through asset that collides returns the previous asset", () {
+    initGraph([
+      "app|foo.txt",
+      "app|foo.in"
+    ], {"app": [
+      [new RewriteTransformer("in", "txt")]
+    ]});
+
+    updateSources(["app|foo.in"]);
+    expectAsset("app|foo.txt", "foo.txt");
+    buildShouldSucceed();
+
+    updateSources(["app|foo.txt"]);
+    expectAsset("app|foo.txt", "foo.txt");
+    buildShouldFail([isAssetCollisionException("app|foo.txt")]);
+  });
+
+  test("a new transform output that collides with a pass-through asset returns "
+      "the pass-through asset", () {
+    initGraph([
+      "app|foo.txt",
+      "app|foo.in"
+    ], {"app": [
+      [new RewriteTransformer("in", "txt")]
+    ]});
+
+    updateSources(["app|foo.txt"]);
+    expectAsset("app|foo.txt", "foo");
+    buildShouldSucceed();
+
+    updateSources(["app|foo.in"]);
+    expectAsset("app|foo.txt", "foo");
+    buildShouldFail([isAssetCollisionException("app|foo.txt")]);
+  });
 }
diff --git a/pkg/barback/test/package_graph/transform_test.dart b/pkg/barback/test/package_graph/transform_test.dart
index c24bae8..4d7b97e 100644
--- a/pkg/barback/test/package_graph/transform_test.dart
+++ b/pkg/barback/test/package_graph/transform_test.dart
@@ -603,7 +603,7 @@
 
   test("doesn't transform an asset that goes from primary to non-primary "
       "during isPrimary", () {
-    var check = new CheckContentTransformer("do", "ne");
+    var check = new CheckContentTransformer(new RegExp(r"^do$"), "ne");
     initGraph({
       "app|foo.txt": "do"
     }, {"app": [[check]]});
@@ -662,7 +662,7 @@
   test("doesn't transform an asset that goes from primary to non-primary "
       "during another transformer's isPrimary", () {
     var rewrite = new RewriteTransformer("md", "md");
-    var check = new CheckContentTransformer("do", "ne");
+    var check = new CheckContentTransformer(new RegExp(r"^do$"), "ne");
     initGraph({
       "app|foo.txt": "do",
       "app|foo.md": "foo"
@@ -809,6 +809,138 @@
     buildShouldSucceed();
   });
 
+  group("pass-through", () {
+    test("passes an asset through a phase in which no transforms apply", () {
+      initGraph([
+        "app|foo.in",
+        "app|bar.zip",
+      ], {"app": [
+        [new RewriteTransformer("in", "mid")],
+        [new RewriteTransformer("zip", "zap")],
+        [new RewriteTransformer("mid", "out")],
+      ]});
+
+      updateSources(["app|foo.in", "app|bar.zip"]);
+      expectAsset("app|foo.out", "foo.mid.out");
+      expectAsset("app|bar.zap", "bar.zap");
+      buildShouldSucceed();
+    });
+
+    test("doesn't pass an asset through a phase in which a transform consumes "
+        "it", () {
+      initGraph([
+        "app|foo.in",
+      ], {"app": [
+        [new RewriteTransformer("in", "mid")],
+        [new RewriteTransformer("mid", "phase2")],
+        [new RewriteTransformer("mid", "phase3")],
+      ]});
+
+      updateSources(["app|foo.in"]);
+      expectAsset("app|foo.phase2", "foo.mid.phase2");
+      expectNoAsset("app|foo.phase3");
+      buildShouldSucceed();
+    });
+
+    test("removes a pass-through asset when the source is removed", () {
+      initGraph([
+        "app|foo.in",
+        "app|bar.zip",
+      ], {"app": [
+        [new RewriteTransformer("zip", "zap")],
+        [new RewriteTransformer("in", "out")],
+      ]});
+
+      updateSources(["app|foo.in", "app|bar.zip"]);
+      expectAsset("app|foo.out", "foo.out");
+      buildShouldSucceed();
+
+      removeSources(["app|foo.in"]);
+      expectNoAsset("app|foo.in");
+      expectNoAsset("app|foo.out");
+      buildShouldSucceed();
+    });
+
+    test("updates a pass-through asset when the source is updated", () {
+      initGraph([
+        "app|foo.in",
+        "app|bar.zip",
+      ], {"app": [
+        [new RewriteTransformer("zip", "zap")],
+        [new RewriteTransformer("in", "out")],
+      ]});
+
+      updateSources(["app|foo.in", "app|bar.zip"]);
+      expectAsset("app|foo.out", "foo.out");
+      buildShouldSucceed();
+
+      modifyAsset("app|foo.in", "boo");
+      updateSources(["app|foo.in"]);
+      expectAsset("app|foo.out", "boo.out");
+      buildShouldSucceed();
+    });
+
+    test("passes an asset through a phase in which transforms have ceased to "
+        "apply", () {
+      initGraph([
+        "app|foo.in",
+      ], {"app": [
+        [new RewriteTransformer("in", "mid")],
+        [new CheckContentTransformer("foo.mid", ".phase2")],
+        [new CheckContentTransformer(new RegExp(r"\.mid$"), ".phase3")],
+      ]});
+
+      updateSources(["app|foo.in"]);
+      expectAsset("app|foo.mid", "foo.mid.phase2");
+      buildShouldSucceed();
+
+      modifyAsset("app|foo.in", "bar");
+      updateSources(["app|foo.in"]);
+      expectAsset("app|foo.mid", "bar.mid.phase3");
+      buildShouldSucceed();
+    });
+
+    test("doesn't pass an asset through a phase in which transforms have "
+        "started to apply", () {
+      initGraph([
+        "app|foo.in",
+      ], {"app": [
+        [new RewriteTransformer("in", "mid")],
+        [new CheckContentTransformer("bar.mid", ".phase2")],
+        [new CheckContentTransformer(new RegExp(r"\.mid$"), ".phase3")],
+      ]});
+
+      updateSources(["app|foo.in"]);
+      expectAsset("app|foo.mid", "foo.mid.phase3");
+      buildShouldSucceed();
+
+      modifyAsset("app|foo.in", "bar");
+      updateSources(["app|foo.in"]);
+      expectAsset("app|foo.mid", "bar.mid.phase2");
+      buildShouldSucceed();
+    });
+
+    test("doesn't pass an asset through if it's removed during isPrimary", () {
+      var check = new CheckContentTransformer("bar", " modified");
+      initGraph(["app|foo.txt"], {"app": [[check]]});
+
+      updateSources(["app|foo.txt"]);
+      expectAsset("app|foo.txt", "foo");
+      buildShouldSucceed();
+
+      check.pauseIsPrimary("app|foo.txt");
+      modifyAsset("app|foo.txt", "bar");
+      updateSources(["app|foo.txt"]);
+      // Ensure we're waiting on [check.isPrimary]
+      schedule(pumpEventQueue);
+
+      removeSources(["app|foo.txt"]);
+      check.resumeIsPrimary("app|foo.txt");
+      expectNoAsset("app|foo.txt");
+      buildShouldSucceed();
+    });
+  });
+
   group('cross-package transforms', () {
     test("can access other packages' source assets", () {
       initGraph({
diff --git a/pkg/barback/test/transformer/check_content.dart b/pkg/barback/test/transformer/check_content.dart
index 252ee1c..445e86f 100644
--- a/pkg/barback/test/transformer/check_content.dart
+++ b/pkg/barback/test/transformer/check_content.dart
@@ -10,15 +10,15 @@
 
 import 'mock.dart';
 
-/// A transformer that modifies assets with the given content.
+/// A transformer that modifies assets that contains the given content.
 class CheckContentTransformer extends MockTransformer {
-  final String content;
+  final Pattern content;
   final String addition;
 
   CheckContentTransformer(this.content, this.addition);
 
   Future<bool> doIsPrimary(Asset asset) =>
-    asset.readAsString().then((value) => value == content);
+    asset.readAsString().then((value) => value.contains(content));
 
   Future doApply(Transform transform) {
     return getPrimary(transform).then((primary) {
diff --git a/pkg/browser/lib/dart.js b/pkg/browser/lib/dart.js
index e14bfbb..b96581c 100644
--- a/pkg/browser/lib/dart.js
+++ b/pkg/browser/lib/dart.js
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+(function() {
 // Bootstrap support for Dart scripts on the page as this script.
 if (navigator.webkitStartDart) {
   if (!navigator.webkitStartDart()) {
@@ -35,3 +36,4 @@
     }
   }
 }
+})();
diff --git a/pkg/docgen/README.md b/pkg/docgen/README.md
index 1af9ebe..24ba58a 100644
--- a/pkg/docgen/README.md
+++ b/pkg/docgen/README.md
@@ -38,6 +38,9 @@
 - `--parse-sdk` Parses the SDK libraries only. (Ignores the path passed in.)
 - `--package-root` Sets the package root of the library being analyzed.
 - `--append` Appends to the docs folder, library_list.txt, and index.txt.
+- `--introduction` Adds the provided markdown text file as the introduction
+for the outputted documentation.
+
 
 ###### Output Directory
 Documented libraries will be located at bin/docs in either YAML or JSON format 
diff --git a/pkg/docgen/bin/docgen.dart b/pkg/docgen/bin/docgen.dart
index 48b9071..ca4f780 100644
--- a/pkg/docgen/bin/docgen.dart
+++ b/pkg/docgen/bin/docgen.dart
@@ -23,7 +23,9 @@
       includePrivate: results['include-private'], 
       includeSdk: results['parse-sdk'] || results['include-sdk'], 
       parseSdk: results['parse-sdk'],
-      append: results['append'] && new Directory('docs').existsSync());
+      append: results['append'] && new Directory('docs').existsSync(),
+      introduction: results['parse-sdk'] ? 
+          'sdk-introduction.md' : results['introduction']);
 }
 
 /**
@@ -57,10 +59,13 @@
       help: 'Parses the SDK libraries only.', 
       defaultsTo: false, negatable: false);
   parser.addOption('package-root', 
-      help: "Sets the package root of the library being analyzed.");
+      help: 'Sets the package root of the library being analyzed.');
   parser.addFlag('append', 
       help: 'Append to the docs folder, library_list.txt and index.txt', 
       defaultsTo: false, negatable: false);
+  parser.addOption('introduction', 
+      help: 'Adds the provided markdown text file as the introduction' 
+        ' for the outputted documentation.', defaultsTo: '');
   
   return parser;
 }
diff --git a/pkg/docgen/bin/sdk-introduction.md b/pkg/docgen/bin/sdk-introduction.md
new file mode 100644
index 0000000..1362e5b
--- /dev/null
+++ b/pkg/docgen/bin/sdk-introduction.md
@@ -0,0 +1,19 @@
+Welcome to the Dart API reference documentation,
+covering the official Dart APIs (dart:*)
+as well as other packages that live in the Dart project.
+For help using the Dart APIs, also see
+[www.dartlang.org](https://www.dartlang.org)
+pages such as the following:
+
+  * [Programmer's Guide](https://www.dartlang.org/docs/)
+  * [A Tour of the Dart Libraries](https://www.dartlang.org/docs/dart-up-and-running/contents/ch03.html)
+  * [Dart Cookbook](https://www.dartlang.org/docs/cookbook/)
+  * [Articles](https://www.dartlang.org/articles/)
+  
+The API reference is automatically generated from the source code in the
+[Dart project](https://code.google.com/p/dart/).
+If you'd like to contribute to this documentation, see
+[Guidelines for Dart Doc Comments](http://www.dartlang.org/articles/doc-comment-guidelines/),
+[Contributing](https://code.google.com/p/dart/wiki/Contributing),
+and, if you're contributing to DOM-related docs such as dart:html,
+[Contributing HTML Documentation](https://code.google.com/p/dart/wiki/ContributingHTMLDocumentation).
\ No newline at end of file
diff --git a/pkg/docgen/lib/docgen.dart b/pkg/docgen/lib/docgen.dart
index b67a321..a51ab86 100644
--- a/pkg/docgen/lib/docgen.dart
+++ b/pkg/docgen/lib/docgen.dart
@@ -65,6 +65,11 @@
 /// This is set from the command line arguments flag --include-private
 bool _includePrivate = false;
 
+// TODO(janicejl): Make MDN content generic or pluggable. Maybe move 
+// MDN-specific code to its own library that is imported into the default impl?
+/// Map of all the comments for dom elements from MDN. 
+Map _mdn;
+
 /**
  * Docgen constructor initializes the link resolver for markdown parsing.
  * Also initializes the command line arguments.
@@ -79,7 +84,7 @@
  */
 Future<bool> docgen(List<String> files, {String packageRoot,
     bool outputToYaml: true, bool includePrivate: false, bool includeSdk: false,
-    bool parseSdk: false, bool append: false}) {
+    bool parseSdk: false, bool append: false, String introduction: ''}) {
   _includePrivate = includePrivate;
   if (!append) {
     var dir = new Directory('docs');
@@ -96,7 +101,6 @@
     }
   }
   logger.info('Package Root: ${packageRoot}');
-
   linkResolver = (name) =>
       fixReference(name, _currentLibrary, _currentClass, _currentMember);
 
@@ -106,7 +110,8 @@
         throw new StateError('No library mirrors were created.');
       }
       _documentLibraries(mirrorSystem.libraries.values,includeSdk: includeSdk,
-          outputToYaml: outputToYaml, append: append, parseSdk: parseSdk);
+          outputToYaml: outputToYaml, append: append, parseSdk: parseSdk, 
+          introduction: introduction);
 
       return true;
     });
@@ -222,7 +227,8 @@
  * Creates documentation for filtered libraries.
  */
 void _documentLibraries(List<LibraryMirror> libs, {bool includeSdk: false,
-    bool outputToYaml: true, bool append: false, bool parseSdk: false}) {
+    bool outputToYaml: true, bool append: false, bool parseSdk: false, 
+    String introduction: ''}) {
   libs.forEach((lib) {
     // Files belonging to the SDK have a uri that begins with 'dart:'.
     if (includeSdk || !lib.uri.toString().startsWith('dart:')) {
@@ -242,12 +248,22 @@
   filteredEntities.where((e) => e is Class || e is Library).forEach((output) {
     _writeIndexableToFile(output, outputToYaml);
   });
-  // Outputs a yaml file with all libraries and their preview comments after 
-  // creating all libraries. This will help the viewer know what libraries are 
-  // available to read in.
-  var libraryMap = {'libraries' : filteredEntities.where((e) => 
-      e is Library).map((e) => e.previewMap).toList()};
-  _writeToFile(getYamlString(libraryMap), 'library_list.yaml', append: append);
+  // Outputs a YAML or JSON file with all libraries and their preview comments 
+  // after creating all libraries. This will help the viewer know what 
+  // libraries are available to read in.
+  var libraryMap = {
+    'libraries' : filteredEntities.where((e) => 
+        e is Library).map((e) => e.previewMap).toList(),
+    'introduction' : introduction == '' ? 
+        '' : markdown.markdownToHtml(new File(introduction).readAsStringSync(),
+            linkResolver: linkResolver, inlineSyntaxes: markdownSyntaxes)
+  };
+  if (outputToYaml) {
+    _writeToFile(getYamlString(libraryMap), 'library_list.yaml', 
+        append: append);
+  } else {
+    _writeToFile(stringify(libraryMap), 'library_list.json', append: append);
+  }
   // Outputs all the qualified names documented with their type.
   // This will help generate search results.
   _writeToFile(filteredEntities.map((e) => 
@@ -313,7 +329,7 @@
 /**
  * Returns a list of meta annotations assocated with a mirror.
  */
-List<String> _annotations(DeclarationMirror mirror) {
+List<Annotation> _annotations(DeclarationMirror mirror) {
   var annotationMirrors = mirror.metadata.where((e) =>
       e is dart2js.Dart2JsConstructedConstantMirror);
   var annotations = [];
@@ -357,6 +373,58 @@
 }
 
 /**
+ * Generates MDN comments from database.json. 
+ */
+void _mdnComment(Indexable item) {
+  //Check if MDN is loaded. 
+  if (_mdn == null) {
+    // Reading in MDN related json file. 
+    var mdnDir = path.join(path.dirname(path.dirname(path.dirname(path.dirname(
+        path.absolute(new Options().script))))), 'utils', 'apidoc', 'mdn');
+    _mdn = parse(new File(path.join(mdnDir, 'database.json'))
+        .readAsStringSync());
+  }
+  if (item.comment.isNotEmpty) return;
+  var domAnnotation = item.annotations.firstWhere(
+      (e) => e.qualifiedName == 'metadata.DomName', orElse: () => null);
+  if (domAnnotation == null) return;
+  var domName = domAnnotation.parameters.single;
+  var parts = domName.split('.');
+  if (parts.length == 2) item.comment = _mdnMemberComment(parts[0], parts[1]);
+  if (parts.length == 1) item.comment = _mdnTypeComment(parts[0]);
+}
+
+/**
+ * Generates the MDN Comment for variables and method DOM elements. 
+ */
+String _mdnMemberComment(String type, String member) {
+  var mdnType = _mdn[type];
+  if (mdnType == null) return '';
+  var mdnMember = mdnType['members'].firstWhere((e) => e['name'] == member, 
+      orElse: () => null);
+  if (mdnMember == null) return '';
+  if (mdnMember['help'] == null || mdnMember['help'] == '') return '';
+  if (mdnMember['url'] == null) return '';
+  return _htmlMdn(mdnMember['help'], mdnMember['url']);
+}
+
+/**
+ * Generates the MDN Comment for class DOM elements. 
+ */
+String _mdnTypeComment(String type) {
+  var mdnType = _mdn[type];
+  if (mdnType == null) return '';
+  if (mdnType['summary'] == null || mdnType['summary'] == "") return '';
+  if (mdnType['srcUrl'] == null) return '';
+  return _htmlMdn(mdnType['summary'], mdnType['srcUrl']);
+}
+
+String _htmlMdn(String content, String url) {
+  return '<div class="mdn">' + content.trim() + '<p class="mdn-note">'
+      '<a href="' + url.trim() + '">from Mdn</a></p></div>';
+}
+
+/**
  * Converts all [foo] references in comments to <a>libraryName.foo</a>.
  */
 markdown.Node fixReference(String name, LibraryMirror currentLibrary,
@@ -406,7 +474,7 @@
 MethodGroup _methods(Map<String, MethodMirror> mirrorMap) {
   var group = new MethodGroup();
   mirrorMap.forEach((String mirrorName, MethodMirror mirror) {
-    if (_includePrivate || !_isHidden(mirror)) {
+    if (_includePrivate || !mirror.isPrivate) {
       group.addMethod(mirror);
     }
   });
@@ -429,11 +497,8 @@
         _methods(mirror.methods), _annotations(mirror), _generics(mirror),
         mirror.qualifiedName, _isHidden(mirror), mirror.owner.qualifiedName,
         mirror.isAbstract);
-    if (superclass != null)
-      clazz.addInherited(superclass);
-    interfaces.forEach((interface) {
-      clazz.addInherited(interface);
-    });
+    if (superclass != null) clazz.addInherited(superclass);
+    interfaces.forEach((interface) => clazz.addInherited(interface));
     entityMap[mirror.qualifiedName] = clazz;
   }
   return clazz;
@@ -621,12 +686,14 @@
   bool isAbstract;
 
   /// List of the meta annotations on the class.
-  List<String> annotations;
+  List<Annotation> annotations;
 
   Class(String name, this.superclass, String comment, this.interfaces,
       this.variables, this.methods, this.annotations, this.generics,
       String qualifiedName, bool isPrivate, String owner, this.isAbstract) 
-      : super(name, comment, qualifiedName, isPrivate, owner);
+      : super(name, comment, qualifiedName, isPrivate, owner) {
+    _mdnComment(this);
+  }
 
   String get typeName => 'class';
   
@@ -646,9 +713,7 @@
    */
   void addInherited(Class superclass) {
     inheritedVariables.addAll(superclass.inheritedVariables);
-    if (_isVisible(superclass)) {
-      inheritedVariables.addAll(superclass.variables);
-    }
+    inheritedVariables.addAll(superclass.variables);
     inheritedMethods.addInherited(superclass);
   }
 
@@ -808,7 +873,7 @@
   Map<String, Generic> generics;
 
   /// List of the meta annotations on the typedef.
-  List<String> annotations;
+  List<Annotation> annotations;
 
   Typedef(String name, this.returnType, String comment, this.generics,
       this.parameters, this.annotations,
@@ -839,11 +904,13 @@
   Type type;
 
   /// List of the meta annotations on the variable.
-  List<String> annotations;
+  List<Annotation> annotations;
 
   Variable(String name, this.isFinal, this.isStatic, this.isConst, this.type,
       String comment, this.annotations, String qualifiedName, bool isPrivate,
-      String owner) : super(name, comment, qualifiedName, isPrivate, owner);
+      String owner) : super(name, comment, qualifiedName, isPrivate, owner) {
+    _mdnComment(this);
+  }
 
   /// Generates a map describing the [Variable] object.
   Map toMap() => {
@@ -881,13 +948,15 @@
   String commentInheritedFrom = "";
 
   /// List of the meta annotations on the method.
-  List<String> annotations;
+  List<Annotation> annotations;
 
   Method(String name, this.isStatic, this.isAbstract, this.isConst,
       this.returnType, String comment, this.parameters, this.annotations,
       String qualifiedName, bool isPrivate, String owner, this.isConstructor,
       this.isGetter, this.isSetter, this.isOperator) 
-        : super(name, comment, qualifiedName, isPrivate, owner);
+        : super(name, comment, qualifiedName, isPrivate, owner) {
+    _mdnComment(this);
+  }
 
   /**
    * Makes sure that the method with an inherited equivalent have comments.
@@ -956,15 +1025,13 @@
 
   void addInherited(Class parent) {
     setters.addAll(parent.inheritedMethods.setters);
+    setters.addAll(parent.methods.setters);
     getters.addAll(parent.inheritedMethods.getters);
+    getters.addAll(parent.methods.getters);
     operators.addAll(parent.inheritedMethods.operators);
+    operators.addAll(parent.methods.operators);
     regularMethods.addAll(parent.inheritedMethods.regularMethods);
-    if (_isVisible(parent)) {
-      setters.addAll(parent.methods.setters);
-      getters.addAll(parent.methods.getters);
-      operators.addAll(parent.methods.operators);
-      regularMethods.addAll(parent.methods.regularMethods);
-    }
+    regularMethods.addAll(parent.methods.regularMethods);
   }
 
   Map toMap() => {
@@ -1006,7 +1073,7 @@
   String defaultValue;
 
   /// List of the meta annotations on the parameter.
-  List<String> annotations;
+  List<Annotation> annotations;
 
   Parameter(this.name, this.isOptional, this.isNamed, this.hasDefaultValue,
       this.type, this.defaultValue, this.annotations);
diff --git a/pkg/http_server/lib/http_server.dart b/pkg/http_server/lib/http_server.dart
index 1f10eb8..123ff7c 100644
--- a/pkg/http_server/lib/http_server.dart
+++ b/pkg/http_server/lib/http_server.dart
@@ -9,6 +9,7 @@
 import 'dart:json' as JSON;
 
 import 'package:mime/mime.dart';
+import "package:path/path.dart";
 
 part 'src/http_body.dart';
 part 'src/http_body_impl.dart';
diff --git a/pkg/http_server/lib/src/virtual_directory.dart b/pkg/http_server/lib/src/virtual_directory.dart
index f608eb9..42b0c026 100644
--- a/pkg/http_server/lib/src/virtual_directory.dart
+++ b/pkg/http_server/lib/src/virtual_directory.dart
@@ -77,7 +77,7 @@
   }
 
   void serveRequest(HttpRequest request) {
-    _locateResource(new Path('.'), request.uri.pathSegments.iterator..moveNext())
+    _locateResource('.', request.uri.pathSegments.iterator..moveNext())
         .then((entity) {
           if (entity == null) {
             _serveErrorPage(HttpStatus.NOT_FOUND, request);
@@ -101,39 +101,39 @@
     _errorCallback = callback;
   }
 
-  Future<FileSystemEntity> _locateResource(Path path,
+  Future<FileSystemEntity> _locateResource(String path,
                                            Iterator<String> segments) {
-    path = path.canonicalize();
-    if (path.segments().first == "..") return new Future.value(null);
-    Path fullPath() => new Path(root).join(path);
-    return FileSystemEntity.type(fullPath().toNativePath(), followLinks: false)
+    path = normalize(path);
+    if (split(path).first == "..") return new Future.value(null);
+    String fullPath() => join(root, path);
+    return FileSystemEntity.type(fullPath(), followLinks: false)
         .then((type) {
           switch (type) {
             case FileSystemEntityType.FILE:
               if (segments.current == null) {
-                return new File.fromPath(fullPath());
+                return new File(fullPath());
               }
               break;
 
             case FileSystemEntityType.DIRECTORY:
               if (segments.current == null) {
                 if (allowDirectoryListing) {
-                  return new Directory.fromPath(fullPath());
+                  return new Directory(fullPath());
                 }
               } else {
                 if (_invalidPathRegExp.hasMatch(segments.current)) break;
-                return _locateResource(path.append(segments.current),
+                return _locateResource(join(path, segments.current),
                                        segments..moveNext());
               }
               break;
 
             case FileSystemEntityType.LINK:
               if (followLinks) {
-                return new Link.fromPath(fullPath()).target()
+                return new Link(fullPath()).target()
                     .then((target) {
-                      var targetPath = new Path(target).canonicalize();
-                      if (targetPath.isAbsolute) return null;
-                      targetPath = path.directoryPath.join(targetPath);
+                      String targetPath = normalize(target);
+                      if (isAbsolute(targetPath)) return null;
+                      targetPath = join(dirname(path), targetPath);
                       return _locateResource(targetPath, segments);
                     });
               }
@@ -254,7 +254,7 @@
       void add(String name, String modified, var size) {
         if (size == null) size = "-";
         if (modified == null) modified = "";
-        var p = new Path(path).append(name).canonicalize().toString();
+        var p = normalize(join(path, name));
         var entry =
 '''  <tr>
     <td><a href="$p">$name</a></td>
@@ -272,11 +272,11 @@
         // TODO(ajohnsen): Consider async dir listing.
         if (entity is File) {
           var stat = entity.statSync();
-          add(new Path(entity.path).filename,
+          add(basename(entity.path),
               stat.modified.toString(),
               stat.size);
         } else if (entity is Directory) {
-          add(new Path(entity.path).filename + '/',
+          add(basename(entity.path) + '/',
               entity.statSync().modified.toString(),
               null);
         }
diff --git a/pkg/http_server/test/utils.dart b/pkg/http_server/test/utils.dart
index 498d159..6a46696 100644
--- a/pkg/http_server/test/utils.dart
+++ b/pkg/http_server/test/utils.dart
@@ -6,7 +6,7 @@
 
 import 'dart:async';
 import 'dart:io';
-
+import "package:path/path.dart";
 
 Future<int> getStatusCode(int port,
                           String path,
@@ -57,8 +57,8 @@
 
 
 setupSecure() {
-  Path scriptDir = new Path(new Options().script).directoryPath;
-  Path certificateDatabase = scriptDir.append('pkcert');
-  SecureSocket.initialize(database: certificateDatabase.toNativePath(),
+  String scriptDir = dirname(new Options().script);
+  String certificateDatabase = join(scriptDir, 'pkcert');
+  SecureSocket.initialize(database: certificateDatabase,
                           password: 'dartdart');
 }
diff --git a/pkg/http_server/test/virtual_directory_test.dart b/pkg/http_server/test/virtual_directory_test.dart
index 0136b62..4b59f2c 100644
--- a/pkg/http_server/test/virtual_directory_test.dart
+++ b/pkg/http_server/test/virtual_directory_test.dart
@@ -5,8 +5,9 @@
 import 'dart:async';
 import 'dart:io';
 
-import "package:unittest/unittest.dart";
 import "package:http_server/http_server.dart";
+import "package:path/path.dart";
+import "package:unittest/unittest.dart";
 
 import 'utils.dart';
 
@@ -296,7 +297,7 @@
           test('relative-parent-link', () {
             expect(HttpServer.bind('localhost', 0).then((server) {
               var dir = new Directory('').createTempSync();
-              var name = new Path(dir.path).filename;
+              var name = basename(dir.path);
               var file = new File('${dir.path}/file')..createSync();
               var link = new Link('${dir.path}/dir3')
                   ..createSync('../$name/file');
diff --git a/pkg/intl/lib/generate_localized.dart b/pkg/intl/lib/generate_localized.dart
index a232fd3..9516372 100644
--- a/pkg/intl/lib/generate_localized.dart
+++ b/pkg/intl/lib/generate_localized.dart
@@ -85,7 +85,7 @@
  * We can't use a hyphen in a Dart library name, so convert the locale
  * separator to an underscore.
  */
-String asLibraryName(String x) => x.replaceAll('-', '_');
+String _libraryName(String x) => x.replaceAll('-', '_');
 
 /**
  * Generate a file <[generated_file_prefix]>_messages_<[locale]>.dart
@@ -146,6 +146,9 @@
   get localeName => '$locale';
 """;
 
+
+_deferredName(locale) => "lazy_${_libraryName(locale)}";
+
 /**
  * This section generates the messages_all.dart file based on the list of
  * [allLocales].
@@ -153,17 +156,28 @@
 String generateMainImportFile() {
   var output = new StringBuffer();
   output.write(mainPrologue);
-  for (var each in allLocales) {
-    var baseFile = '${generatedFilePrefix}messages_$each.dart';
+  for (var locale in allLocales) {
+    var baseFile = '${generatedFilePrefix}messages_$locale.dart';
     var file = importForGeneratedFile(baseFile);
-    output.write("import '$file' as ${asLibraryName(each)};\n");
+    output.write("@${_deferredName(locale)} ");
+    output.write("import '$file' as ${_libraryName(locale)};\n");
   }
+  output.write("\n");
+  for (var locale in allLocales) {
+    output.write("const ${_deferredName(locale)} = const DeferredLibrary");
+    output.write("('${_libraryName(locale)}');\n");
+  }
+  output.write("\nconst deferredLibraries = const {\n");
+  for (var locale in allLocales) {
+    output.write("  '$locale' : ${_deferredName(locale)},\n");
+  }
+  output.write("};\n");
   output.write(
     "\nMessageLookupByLibrary _findExact(localeName) {\n"
     "  switch (localeName) {\n");
-  for (var each in allLocales) {
+  for (var locale in allLocales) {
     output.write(
-        "    case '$each' : return ${asLibraryName(each)}.messages;\n");
+        "    case '$locale' : return ${_libraryName(locale)}.messages;\n");
   }
   output.write(closing);
   return output.toString();
@@ -198,10 +212,10 @@
 }
 
 /** User programs should call this before using [localeName] for messages.*/
-initializeMessages(localeName) {
+Future initializeMessages(String localeName) {
   initializeInternalMessageLookup(() => new CompositeMessageLookup());
   messageLookup.addLocale(localeName, _findGeneratedMessagesFor);
-  return new Future.value();
+  return deferredLibraries[localeName].load();
 }
 
 MessageLookupByLibrary _findGeneratedMessagesFor(locale) {
diff --git a/pkg/intl/lib/intl.dart b/pkg/intl/lib/intl.dart
index e91c2b2..a15abed 100644
--- a/pkg/intl/lib/intl.dart
+++ b/pkg/intl/lib/intl.dart
@@ -249,8 +249,8 @@
     // top-level message, so look up our translation by calling Intl.message
     // with ourselves as an argument.
     if (name != null) {
-      return Intl.message(
-        Intl.plural(howMany,
+      return message(
+        plural(howMany,
             zero: zero, one: one, two: two, few: few, many: many, other: other),
         name: name,
         args: args,
@@ -273,10 +273,10 @@
   }
 
   /**
-   * Format a message differently depending on [gender]. Normally used as part
-   * of an Intl.message message that is to be translated.
+   * Format a message differently depending on [targetGender]. Normally used as
+   * part of an Intl.message message that is to be translated.
    */
-  static String gender(String gender,
+  static String gender(String targetGender,
       {String male, String female, String other,
        String desc, Map examples, String locale, String name,
        List<String>args}) {
@@ -284,8 +284,8 @@
     // top-level message, so look up our translation by calling Intl.message
     // with ourselves as an argument.
     if (name != null) {
-      return Intl.message(
-        Intl.gender(gender, male: male, female: female, other: other),
+      return message(
+        gender(targetGender, male: male, female: female, other: other),
         name: name,
         args: args,
         locale: locale);
@@ -294,7 +294,7 @@
     if (other == null) {
       throw new ArgumentError("The 'other' named argument must be specified");
     }
-    switch(gender) {
+    switch(targetGender) {
       case "female" : return female == null ? other : female;
       case "male" : return male == null ? other : male;
       default: return other;
@@ -314,8 +314,8 @@
     // top-level message, so look up our translation by calling Intl.message
     // with ourselves as an argument.
     if (name != null) {
-      return Intl.message(
-          Intl.select(choice, cases),
+      return message(
+          select(choice, cases),
           name: name,
           args: args,
           locale: locale);
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 81660c1..39486e0 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -20,10 +20,14 @@
 
 [ $compiler == dart2js && $runtime == d8 ]
 unmodifiable_collection/test/unmodifiable_collection_test: Pass, Fail # Issue 12429
+csslib/test/declaration_test: Pass, Crash # V8 issue 2846
 
 [ $compiler == dart2js ]
 analyzer_experimental/test/generated/ast_test: Fail #Issue 12341
 
+[ $compiler == dart2js && $checked && $runtime == ie9 ]
+crypto/test/base64_test: Timeout # Issue 12486
+
 [ $compiler == dart2js && ($runtime == d8 || $runtime == drt) ]
 crypto/test/hmac_sha256_test: Pass, Fail # v8 bug: Issue 12293
 crypto/test/sha1_test: Pass, Fail # v8 bug: Issue 12293
@@ -56,6 +60,7 @@
 crypto/test/hmac_sha1_test: Fail # Issue 11407.
 crypto/test/sha1_test: Fail # Issue 11407.
 stack_trace/test/trace_test: Fail # http://dartbug.com/12380
+crypto/test/sha256_test: Pass, Fail # Issue 12502
 
 # Skip browser-specific tests on VM
 [ $runtime == vm ]
@@ -199,6 +204,7 @@
 custom_element: Skip
 mdv: Skip
 mutation_observer: Skip
+polymer_expressions/test/syntax_test: Skip
 third_party/html5lib/test/browser/browser_test: Skip
 
 [ $runtime == safari || $runtime == chrome || $runtime == ie9 || $runtime == ff || $runtime == dartium || $runtime == drt ]
diff --git a/pkg/polymer_expressions/README.md b/pkg/polymer_expressions/README.md
new file mode 100644
index 0000000..5a7e9b2
--- /dev/null
+++ b/pkg/polymer_expressions/README.md
@@ -0,0 +1,282 @@
+polymer_expressions
+===================
+
+Polymer Expressions are an expressive syntax that can be used in templates in
+Dart. Polymer Expressions allow you to write complex binding expressions, with
+property access, function invocation, list/map indexing, and two-way filtering
+like:
+
+```html
+    {{ person.title + " " + person.getFullName() | upppercase }}
+```
+
+## Overview
+
+### Model-Driven Views (MDV)
+[MDV][mdv] allows you to define templates directly in HTML that are rendered by the
+browser into the DOM. Templates are bound to a data model, and changes to the
+data are automatically reflected in the DOM, and changes in HTML inputs are
+assigned back into the model. The template and model are bound together via
+binding expressions that are evaluated against the model. These binding
+expressions are placed in double-curly-braces, or "mustaches".
+
+Example:
+
+```html
+    <template>
+      <p>Hello {{ person.name }}</p>
+    </template>
+```
+
+MDV includes a very basic binding syntax which only allows a series of
+dot-separate property names.
+
+[mdv]: http://www.polymer-project.org/platform/mdv.html
+
+### Custom Binding Syntaxes with BindingDelegate
+
+While MDV's built-in syntax is very basic, it does allow custom syntaxes called
+"binding delegates" to be installed and used. A binding delegate can interpret
+the contents of mustaches however it likes. PolymerExpressions is such a
+binding delegate.
+
+Example:
+
+```html
+    <template bind>
+      <p>Hello {{ person.title + " " + person.getFullName() | uppercase }}</p>
+    </template>
+```
+
+## Usage
+
+### Installing from Pub
+
+Add the following to your pubspec.yaml file:
+
+```yaml
+    dependencies:
+      polymer_expressions: any
+```
+
+Hint: check https://pub.dartlang.org/packages/polymer_expressions for the latest
+version number.
+
+Then import polymer_expressions.dart:
+
+    import 'package:polymer_expressions/polymer_expressions.dart';
+
+### Registering a Binding Delegate
+
+**Polymer Expressions are now the default syntax for `<polymer-element>` custom
+elements.**
+
+You do not need to manually register the bindingDelegate if your bindings are
+inside a custom element. However, if you want to use polymer_expressions outside
+a custom element, read on:
+
+Binding delegates must be installed on a template before they can be used.
+For example, set the bindingDelegate property of your template
+elements to an instance of PolymerExpressions. The templates will then use the
+PolymerExpressions instance to interpret
+binding expressions.
+
+```dart
+    import 'dart:html';
+    import 'package:polymer_expressions/polymer_expressions.dart';
+
+    main() {
+      var template = query('#my_template');
+      template.bindingDelegate = new PolymerExpressions();
+    }
+```
+
+### Registering Top-Level Variables
+
+Before a top-level variable can be used, it must be registered. The
+PolymerExpressions constructor takes a map of named values to use as variables.
+
+```dart
+    main() {
+      var globals = {
+        'uppercase': (String v) => v.toUpperCase(),
+        'app_id': 'my_app_123',
+      };
+      var template = query('#my_template');
+      template.bindingDelegate = new PolymerExpressions(globals: globals);
+    }
+```
+
+## Features
+
+### The Model and Scope
+
+Polymer Expressions allow binding to more than just the model assigned to a
+template instance. Top-level variables can be defined so that you can use
+filters, global variables and constants, functions, etc. These variables and the
+model are held together in a container called a Scope. Scopes can be nested,
+which happens when template tags are nested.
+
+### Two-way Bindings
+
+Bindings can be used to modify the data model based on events in the DOM. The
+most common case is to bind an &lt;input&gt; element's value field to a model
+property and have the property update when the input changes. For this to work,
+the binding expression must be "assignable". Only a subset of expressions are
+assignable. Assignable expressions cannot contain function calls, operators, and
+any index operator must have a literal argument. Assignable expressions can
+contain filter operators as long as all the filters are two-way transformers.
+
+Some restrictions may be relaxed further as allowed.
+
+Assignable Expressions:
+
+ * `foo`
+ * `foo.bar`
+ * `items[0].description`
+ * `people['john'].name`
+ * `product.cost | convertCurrency('ZWD')` where `convertCurrency` evaluates to
+   a Tranformer object.
+
+Non-Assignable Expressions:
+
+ * `a + 1`
+ * `!c`
+ * `foo()`
+ * `person.lastName | uppercase` where `uppercase` is a filter function.
+
+### Null-Safety
+
+Expressions are generally null-safe. If an intermediate expression yields `null`
+the entire expression will return null, rather than throwing an exception.
+Property access, method invocation and operators are null-safe. Passing null to
+a function that doesn't handle null will not be null safe.
+
+### Streams
+
+Polymer Expressions have experimental support for binding to streams, and when
+new values are passed to the stream, the template updates. The feature is not
+fully implemented yet.
+
+See the examples in /example/streams for more details.
+
+## Syntax
+
+### Property Access
+
+Properties on the model and in the scope are looked up via simple property
+names, like `foo`. Property names are looked up first in the top-level
+variables, next in the model, then recursively in parent scopes. Properties on
+objects can be access with dot notation like `foo.bar`.
+
+The keyword `this` always refers to the model if there is one, otherwise `this`
+is `null`. If you have model properties and top-level variables with the same
+name, you can use `this` to refer to the model property.
+
+### Literals
+
+Polymer Expressions support number, boolean, string, and map literals. Strings
+can use either single or double quotes.
+
+ * Numbers: `1`, `1.0`
+ * Booleans: `true`, `false`
+ * Strings: `'abc'`, `"xyz"`
+ * Maps: `{ 'a': 1, 'b': 2 }`
+
+List literals are planned, see [issue 9](https://github.com/dart-lang/polymer_expressions/issues/9)
+
+### Functions and Methods
+
+If a property is a function in the scope, a method on the model, or a method on
+an object, it can be invoked with standard function syntax. Functions and
+Methods can take arguments. Named arguments are not supported. Arguments can be
+literals or variables.
+
+Examples:
+
+ * Top-level function: `myFunction()`
+ * Top-level function with arguments: `myFunction(a, b, 42)`
+ * Model method: `aMethod()`
+ * Method on nested-property: `a.b.anotherMethod()`
+
+### Operators
+
+Polymer Expressions supports the following binary and unary operators:
+
+ * Arithmetic operators: +, -, *, /, %, unary + and -
+ * Comparison operators: ==, !=, <=, <, >, >=
+ * Boolean operators: &&, ||, unary !
+
+Expressions do not support bitwise operators such as &, |, << and >>, or increment/decrement operators (++ and --)
+
+### List and Map Indexing
+
+List and Map like objects can be accessed via the index operator: []
+
+Examples:
+
+ * `items[2]`
+ * `people['john']`
+
+Unlike JavaScript, list and map contents are not generally available via
+property access. That is, the previous examples are not equivalent to `items.2`
+and `people.john`. This ensures that access to properties and methods on Lists
+and Maps is preserved.
+
+### Filters and Transformers
+
+A filter is a function that transforms a value into another, used via the pipe
+syntax: `value | filter` Any function that takes exactly one argument can be
+used as a filter.
+
+Example:
+
+If `person.name` is "John", and a top-level function named `uppercase` has been
+registered, then `person.name | uppercase` will have the value "JOHN".
+
+The pipe syntax is used rather than a regular function call so that we can
+support two-way bindings through transformers. A transformer is a filter that
+has an inverse function. Transformers must extend or implement the `Transformer`
+class, which has `forward()` and `reverse()` methods.
+
+### Repeating Templates
+
+A template can be repeated by using the "repeat" attribute with a binding. The
+binding can either evaluate to an Iterable, in which case the template is
+instantiated for each item in the iterable and the model of the instance is
+set to the item, or the binding can be a "in" iterator expression, in which
+case a new variable is added to each scope.
+
+The following examples produce the same output.
+
+Evaluate to an iterable:
+
+```html
+    <template repeat="{{ items }}">
+      <div>{{ }}</div>
+    </template>
+```
+
+"in" expression:
+
+```html
+    <template repeat="{{ item in items }}">
+      <div>{{ item }}</div>
+    </template>
+```
+
+## Status
+
+The syntax implemented is experimental and subject to change, in fact, it
+**will** change soon. The goal is to be compatible with Polymer's binding
+syntax. We will announce breaking changes on the
+[web-ui@dartlang.org mailing list][web-ui-list].
+
+Please [file issues on Dart project page](http://dartbug.com/new)
+for any bugs you find or for feature requests. Make a note that it applies to
+"package:polymer_expressions"
+
+You can discuss Polymer Expressions on the
+[web-ui@dartlang.org mailing list][web-ui-list].
+
+[web-ui-list]: https://groups.google.com/a/dartlang.org/forum/#!forum/web-ui
diff --git a/pkg/polymer_expressions/example/example.dart b/pkg/polymer_expressions/example/example.dart
new file mode 100644
index 0000000..f3ad658
--- /dev/null
+++ b/pkg/polymer_expressions/example/example.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:html';
+
+import 'package:polymer_expressions/polymer_expressions.dart';
+import 'package:mdv/mdv.dart' as mdv;
+
+import 'person.dart';
+
+main() {
+  mdv.initialize();
+  var john = new Person('John', 'Messerly', ['A', 'B', 'C']);
+  var justin = new Person('Justin', 'Fagnani', ['D', 'E', 'F']);
+  var globals = {
+    'uppercase': (String v) => v.toUpperCase(),
+    'people': [john, justin],
+  };
+
+  query('#test')
+      ..bindingDelegate = new PolymerExpressions(globals: globals)
+      ..model = john;
+
+  query('#test2').model = john;
+}
diff --git a/pkg/polymer_expressions/example/example.html b/pkg/polymer_expressions/example/example.html
new file mode 100644
index 0000000..50a2ef8
--- /dev/null
+++ b/pkg/polymer_expressions/example/example.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+for details. All rights reserved. Use of this source code is governed by a
+BSD-style license that can be found in the LICENSE file.
+-->
+
+<html>
+  <head>
+    <title>example</title>
+    <style>
+      .jname {
+        background: #faa;
+      }
+      .fname {
+        border: solid 1px #88f;
+      }
+    </style>
+  </head>
+
+  <body>
+    <template id="test" bind>
+      <h1>Polymer Expression Syntax</h1>
+      <label> first name: <input value="{{ firstName }}"></label>
+      <label> last name: <input value="{{ lastName }}"></label>
+      <div>Hello {{ getFullName() }}!</div>
+      <div>{{ firstName }} {{ lastName }}</div>
+      <div>
+        <h2>Iteration</h2>
+        <ul>
+          <template repeat="{{ item in items.take(2) }}">
+            <li>{{ item }}</li>
+          </template>
+        </ul>
+        <ul>
+          <template repeat="{{ people }}">
+            <li class="{{ {'jname': firstName.startsWith('J'),
+                'fname': lastName.startsWith('F')} }}">
+              {{ firstName }} {{ lastName }}
+            </li>
+            <ul>
+              <template repeat="{{ item in items }}">
+                <li checked?="{{ item == 'A'}}">{{ firstName }} {{ item }}</li>
+              </template>
+            </ul>
+          </template>
+        </ul>
+      </div>
+    </template>
+
+    <template id="test2" bind>
+      <h1>Default  Syntax</h1>
+      <label> first name: <input value="{{ firstName }}"></label>
+      <label> last name: <input value="{{ lastName }}"></label>
+    </template>
+
+    <script type="application/dart" src="example.dart"></script>
+    <script src="packages/browser/dart.js"></script>
+  </body>
+</html>
diff --git a/pkg/polymer_expressions/example/person.dart b/pkg/polymer_expressions/example/person.dart
new file mode 100644
index 0000000..d561fac
--- /dev/null
+++ b/pkg/polymer_expressions/example/person.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library person;
+
+import 'package:observe/observe.dart';
+
+class Person extends ChangeNotifierBase {
+  static const _FIRST_NAME = const Symbol('firstName');
+  static const _LAST_NAME = const Symbol('lastName');
+  static const _ITEMS = const Symbol('items');
+  static const _GET_FULL_NAME = const Symbol('getFullName');
+
+  String _firstName;
+  String _lastName;
+  List<String> _items;
+
+  Person(this._firstName, this._lastName, this._items);
+
+  String get firstName => _firstName;
+
+  void set firstName(String value) {
+    _firstName = value;
+    notifyChange(new PropertyChangeRecord(_FIRST_NAME));
+  }
+
+  String get lastName => _lastName;
+
+  void set lastName(String value) {
+    _lastName = value;
+    notifyChange(new PropertyChangeRecord(_LAST_NAME));
+  }
+
+  String getFullName() => '$_firstName $_lastName';
+
+  List<String> get items => _items;
+
+  void set items(List<String> value) {
+    _items = value;
+    notifyChange(new PropertyChangeRecord(_ITEMS));
+  }
+
+  String toString() => "Person(firstName: $_firstName, lastName: $_lastName)";
+
+}
diff --git a/pkg/polymer_expressions/example/streams/collect_key_press.html b/pkg/polymer_expressions/example/streams/collect_key_press.html
new file mode 100644
index 0000000..48221c1
--- /dev/null
+++ b/pkg/polymer_expressions/example/streams/collect_key_press.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+for details. All rights reserved. Use of this source code is governed by a
+BSD-style license that can be found in the LICENSE file.
+-->
+
+<html>
+  <body>
+    <template id="test" repeat="{{ keyPress | collect }}">
+      <div>key: {{ }}</div>
+    </template>
+    <script type="application/dart">
+      import 'dart:async';
+      import 'dart:html';
+      import 'package:polymer_expressions/polymer_expressions.dart';
+      import 'package:polymer_expressions/async.dart';
+      import 'package:mdv/mdv.dart' as mdv;
+      import 'package:observe/observe.dart';
+
+      Iterable collect(StreamBinding s) {
+        var list = new ObservableList();
+        s.stream.listen((e) { list.add(e); });
+        return list;
+      }
+
+      main() {
+        mdv.initialize();
+
+        var globals = {
+          'keyPress': document.onKeyPress
+              .map((e) => new String.fromCharCode(e.charCode)),
+          'collect': collect,
+        };
+
+        query('#test')
+            ..bindingDelegate = new PolymerExpressions(globals: globals)
+            ..model = null;
+      }
+    </script>
+    <script src="packages/browser/dart.js"></script>
+  </body>
+</html>
diff --git a/pkg/polymer_expressions/example/streams/count_clicks.html b/pkg/polymer_expressions/example/streams/count_clicks.html
new file mode 100644
index 0000000..e164719
--- /dev/null
+++ b/pkg/polymer_expressions/example/streams/count_clicks.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+for details. All rights reserved. Use of this source code is governed by a
+BSD-style license that can be found in the LICENSE file.
+-->
+
+<html>
+  <body>
+    <template id="test" bind="{{ mouseDown | count }}">
+      Clicks: {{ value }}
+    </template>
+    <script type="application/dart">
+      import 'dart:async';
+      import 'dart:html';
+      import 'package:polymer_expressions/polymer_expressions.dart';
+      import 'package:polymer_expressions/async.dart';
+      import 'package:mdv/mdv.dart' as mdv;
+      import 'package:observe/observe.dart';
+
+      count(StreamBinding s) {
+        var box = new ObservableBox();
+        box.value = 0;
+        s.stream.listen((e) { box.value++; });
+        return box;
+      }
+
+      main() {
+        mdv.initialize();
+
+        var globals = {
+          'mouseDown': document.onMouseDown,
+          'count': count,
+        };
+
+        query('#test')
+            ..bindingDelegate = new PolymerExpressions(globals: globals)
+            ..model = null;
+      }
+    </script>
+    <script src="packages/browser/dart.js"></script>
+  </body>
+</html>
diff --git a/pkg/polymer_expressions/example/streams/mouse_move.html b/pkg/polymer_expressions/example/streams/mouse_move.html
new file mode 100644
index 0000000..c6cd1cc
--- /dev/null
+++ b/pkg/polymer_expressions/example/streams/mouse_move.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+for details. All rights reserved. Use of this source code is governed by a
+BSD-style license that can be found in the LICENSE file.
+-->
+
+<html>
+  <body>
+    <template id="test" bind="{{ mouse }}">
+      ({{ value.offsetX }}, {{ value.offsetY }})
+    </template>
+    <script type="application/dart">
+      import 'dart:html';
+      import 'package:polymer_expressions/polymer_expressions.dart';
+      import 'package:mdv/mdv.dart' as mdv;
+
+      main() {
+        mdv.initialize();
+
+        var globals = {
+          'mouse': document.onMouseMove,
+        };
+
+        query('#test')
+            ..bindingDelegate = new PolymerExpressions(globals: globals)
+            ..model = null;
+      }
+    </script>
+    <script src="packages/browser/dart.js"></script>
+  </body>
+</html>
diff --git a/pkg/polymer_expressions/example/streams/mouse_resize_image.html b/pkg/polymer_expressions/example/streams/mouse_resize_image.html
new file mode 100644
index 0000000..a056d2e
--- /dev/null
+++ b/pkg/polymer_expressions/example/streams/mouse_resize_image.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+for details. All rights reserved. Use of this source code is governed by a
+BSD-style license that can be found in the LICENSE file.
+-->
+
+<html>
+  <body>
+    <template id="test" bind="{{ mouseMax }}">
+      <img src="http://www.dartlang.org/logos/dart-logo.png"
+           width="{{ value }}"
+           height="{{ value }}">
+    </template>
+    <script type="application/dart">
+      import 'dart:html';
+      import 'dart:math';
+      import 'package:polymer_expressions/polymer_expressions.dart';
+      import 'package:mdv/mdv.dart' as mdv;
+
+      main() {
+        mdv.initialize();
+
+        var globals = {
+          'mouse': document.onMouseMove,
+          'mouseMax':
+              document.onMouseMove.map((e) => max(e.offsetX, e.offsetY)),
+        };
+
+        query('#test')
+            ..bindingDelegate = new PolymerExpressions(globals: globals)
+            ..model = null;
+      }
+    </script>
+    <script src="packages/browser/dart.js"></script>
+  </body>
+</html>
diff --git a/pkg/polymer_expressions/lib/async.dart b/pkg/polymer_expressions/lib/async.dart
new file mode 100644
index 0000000..23e9846
--- /dev/null
+++ b/pkg/polymer_expressions/lib/async.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library polymer_expressions.async;
+
+import 'dart:async';
+import 'package:observe/observe.dart';
+
+class StreamBinding<T> extends ObservableBox {
+  final Stream<T> stream;
+
+  StreamBinding(this.stream) {
+    stream.listen((T i) { value = i; });
+  }
+
+}
diff --git a/pkg/polymer_expressions/lib/eval.dart b/pkg/polymer_expressions/lib/eval.dart
new file mode 100644
index 0000000..dbf1f88
--- /dev/null
+++ b/pkg/polymer_expressions/lib/eval.dart
@@ -0,0 +1,613 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library polymer_expressions.eval;
+
+import 'dart:async';
+import 'dart:collection';
+import 'dart:mirrors';
+
+import 'package:observe/observe.dart';
+
+import 'async.dart';
+import 'expression.dart';
+import 'filter.dart';
+import 'visitor.dart';
+import 'src/mirrors.dart';
+
+final _BINARY_OPERATORS = {
+  '+':  (a, b) => a + b,
+  '-':  (a, b) => a - b,
+  '*':  (a, b) => a * b,
+  '/':  (a, b) => a / b,
+  '==': (a, b) => a == b,
+  '!=': (a, b) => a != b,
+  '>':  (a, b) => a > b,
+  '>=': (a, b) => a >= b,
+  '<':  (a, b) => a < b,
+  '<=': (a, b) => a <= b,
+  '||': (a, b) => a || b,
+  '&&': (a, b) => a && b,
+  '|':  (a, f) {
+    if (f is Transformer) return f.forward(a);
+    if (f is Filter) return f(a);
+    throw new EvalException("Filters must be a one-argument function.");
+  }
+};
+
+final _UNARY_OPERATORS = {
+  '+': (a) => a,
+  '-': (a) => -a,
+  '!': (a) => !a,
+};
+
+final _BOOLEAN_OPERATORS = ['!', '||', '&&'];
+
+/**
+ * Evaluation [expr] in the context of [scope].
+ */
+Object eval(Expression expr, Scope scope) => observe(expr, scope)._value;
+
+
+ExpressionObserver observe(Expression expr, Scope scope) {
+  var observer = new ObserverBuilder(scope).visit(expr);
+  new Updater(scope).visit(observer);
+  return observer;
+}
+
+/**
+ * Assign [value] to the variable or field referenced by [expr] in the context
+ * of [scope].
+ *
+ * [expr] must be an /assignable/ expression, it must not contain
+ * operators or function invocations, and any index operations must use a
+ * literal index.
+ */
+void assign(Expression expr, Object value, Scope scope) {
+
+  notAssignable() =>
+      throw new EvalException("Expression is not assignable: $expr");
+
+  Expression expression;
+  var property;
+  bool isIndex = false;
+  var filters = <Expression>[]; // reversed order for assignment
+
+  while (expr is BinaryOperator && expr.operator == '|') {
+    filters.add(expr.right);
+    expr = expr.left;
+  }
+
+  if (expr is Identifier) {
+    expression = empty();
+    property = expr.value;
+  } else if (expr is Invoke) {
+    expression = expr.receiver;
+    if (expr.method == '[]') {
+      if (expr.arguments[0] is! Literal) notAssignable();
+      Literal l = expr.arguments[0];
+      property = l.value;
+      isIndex = true;
+    } else if (expr.method != null) {
+      if (expr.arguments != null) notAssignable();
+      property = expr.method;
+    } else {
+      notAssignable();
+    }
+  } else {
+    notAssignable();
+  }
+
+  // transform the values backwards through the filters
+  for (var filterExpr in filters) {
+    var filter = eval(filterExpr, scope);
+    if (filter is! Transformer) {
+      throw new EvalException("filter must implement Transformer: $filterExpr");
+    }
+    value = filter.reverse(value);
+  }
+  // make the assignment
+  var o = eval(expression, scope);
+  if (o == null) throw new EvalException("Can't assign to null: $expression");
+  if (isIndex) {
+    o[property] = value;
+  } else {
+    reflect(o).setField(new Symbol(property), value);
+  }
+}
+
+/**
+ * A mapping of names to objects. Scopes contain a set of named [variables] and
+ * a single [model] object (which can be thought of as the "this" reference).
+ * Names are currently looked up in [variables] first, then the [model].
+ *
+ * Scopes can be nested by giving them a [parent]. If a name in not found in a
+ * Scope, it will look for it in it's parent.
+ */
+class Scope extends Object {
+  final Scope parent;
+  final Object model;
+  // TODO(justinfagnani): disallow adding/removing names
+  final ObservableMap<String, Object> _variables;
+  InstanceMirror __modelMirror;
+
+  Scope({this.model, Map<String, Object> variables: const {}, this.parent})
+      : _variables = new ObservableMap.from(variables);
+
+  InstanceMirror get _modelMirror {
+    if (__modelMirror != null) return __modelMirror;
+    __modelMirror = reflect(model);
+    return __modelMirror;
+  }
+
+  Object operator[](String name) {
+    if (name == 'this') {
+      return model;
+    } else if (_variables.containsKey(name)) {
+      return _convert(_variables[name]);
+    } else if (model != null) {
+      var symbol = new Symbol(name);
+      var classMirror = _modelMirror.type;
+      var memberMirror = getMemberMirror(classMirror, symbol);
+      if (memberMirror is VariableMirror ||
+          (memberMirror is MethodMirror && memberMirror.isGetter)) {
+        return _convert(_modelMirror.getField(symbol).reflectee);
+      } else if (memberMirror is MethodMirror) {
+        return new Method(_modelMirror, symbol);
+      }
+    }
+    if (parent != null) {
+      return _convert(parent[name]);
+    } else {
+      throw new EvalException("variable not found: $name in $hashCode");
+    }
+  }
+
+  Object ownerOf(String name) {
+    if (name == 'this') {
+      // we could return the Scope if it were Observable, but since assigning
+      // a model to a template destroys and recreates the instance, it doesn't
+      // seem neccessary
+      return null;
+    } else if (_variables.containsKey(name)) {
+      return _variables;
+    } else {
+      var symbol = new Symbol(name);
+      var classMirror = _modelMirror.type;
+      if (getMemberMirror(classMirror, symbol) != null) {
+        return model;
+      }
+    }
+    if (parent != null) {
+      return parent.ownerOf(name);
+    }
+  }
+
+  bool contains(String name) {
+    if (_variables.containsKey(name)) {
+      return true;
+    } else {
+      var symbol = new Symbol(name);
+      var classMirror = _modelMirror.type;
+      if (getMemberMirror(classMirror, symbol) != null) {
+        return true;
+      }
+    }
+    if (parent != null) {
+      return parent.contains(name);
+    }
+    return false;
+  }
+
+  String toString() => 'Scope($hashCode $parent)';
+}
+
+Object _convert(v) {
+  if (v is Stream) return new StreamBinding(v);
+  return v;
+}
+
+abstract class ExpressionObserver<E extends Expression> implements Expression {
+  final E _expr;
+  ExpressionObserver _parent;
+
+  StreamSubscription _subscription;
+  Object _value;
+
+  StreamController _controller = new StreamController.broadcast();
+  Stream get onUpdate => _controller.stream;
+
+  ExpressionObserver(this._expr);
+
+  Object get currentValue => _value;
+
+  update(Scope scope) => _updateSelf(scope);
+
+  _updateSelf(Scope scope) {}
+
+  _invalidate(Scope scope) {
+    _observe(scope);
+    if (_parent != null) {
+      _parent._invalidate(scope);
+    }
+  }
+
+  _observe(Scope scope) {
+    // unobserve last value
+    if (_subscription != null) {
+      _subscription.cancel();
+      _subscription = null;
+    }
+
+    var _oldValue = _value;
+
+    // evaluate
+    _updateSelf(scope);
+
+    if (!identical(_value, _oldValue)) {
+      _controller.add(_value);
+    }
+  }
+
+  String toString() => _expr.toString();
+}
+
+class Updater extends RecursiveVisitor<ExpressionObserver> {
+  final Scope scope;
+
+  Updater(this.scope);
+
+  visitExpression(ExpressionObserver e) {
+    e._observe(scope);
+  }
+
+  visitInExpression(InObserver c) {
+    visit(c.right);
+    visitExpression(c);
+  }
+}
+
+class ObserverBuilder extends Visitor {
+  final Scope scope;
+  final Queue parents = new Queue();
+
+  ObserverBuilder(this.scope);
+
+  visitEmptyExpression(EmptyExpression e) => new EmptyObserver(e);
+
+  visitParenthesizedExpression(ParenthesizedExpression e) => visit(e.child);
+
+  visitInvoke(Invoke i) {
+    var receiver = visit(i.receiver);
+    var args = (i.arguments == null)
+        ? null
+        : i.arguments.map(visit).toList(growable: false);
+    var invoke =  new InvokeObserver(i, receiver, args);
+    receiver._parent = invoke;
+    if (args != null) args.forEach((a) => a._parent = invoke);
+    return invoke;
+  }
+
+  visitLiteral(Literal l) => new LiteralObserver(l);
+
+  visitMapLiteral(MapLiteral l) {
+    var entries = l.entries.map(visit).toList(growable: false);
+    var map = new MapLiteralObserver(l, entries);
+    entries.forEach((e) => e._parent = map);
+    return map;
+  }
+
+  visitMapLiteralEntry(MapLiteralEntry e) {
+    var key = visit(e.key);
+    var value = visit(e.entryValue);
+    var entry = new MapLiteralEntryObserver(e, key, value);
+    key._parent = entry;
+    value._parent = entry;
+    return entry;
+  }
+
+  visitIdentifier(Identifier i) => new IdentifierObserver(i);
+
+  visitBinaryOperator(BinaryOperator o) {
+    var left = visit(o.left);
+    var right = visit(o.right);
+    var binary = new BinaryObserver(o, left, right);
+    left._parent = binary;
+    right._parent = binary;
+    return binary;
+  }
+
+  visitUnaryOperator(UnaryOperator o) {
+    var expr = visit(o.child);
+    var unary = new UnaryObserver(o, expr);
+    expr._parent = unary;
+    return unary;
+  }
+
+  visitInExpression(InExpression i) {
+    // don't visit the left. It's an identifier, but we don't want to evaluate
+    // it, we just want to add it to the comprehension object
+    var left = visit(i.left);
+    var right = visit(i.right);
+    var inexpr = new InObserver(i, left, right);
+    right._parent = inexpr;
+    return inexpr;
+  }
+}
+
+class EmptyObserver extends ExpressionObserver<EmptyExpression>
+    implements EmptyExpression {
+
+  EmptyObserver(EmptyExpression value) : super(value);
+
+  _updateSelf(Scope scope) {
+    _value = scope.model;
+    // TODO(justin): listen for scope.model changes?
+  }
+
+  accept(Visitor v) => v.visitEmptyExpression(this);
+}
+
+class LiteralObserver extends ExpressionObserver<Literal> implements Literal {
+
+  LiteralObserver(Literal value) : super(value);
+
+  dynamic get value => _expr.value;
+
+  _updateSelf(Scope scope) {
+    _value = _expr.value;
+  }
+
+  accept(Visitor v) => v.visitLiteral(this);
+}
+
+class MapLiteralObserver extends ExpressionObserver<MapLiteral>
+    implements MapLiteral {
+
+  final List<MapLiteralEntryObserver> entries;
+
+  MapLiteralObserver(MapLiteral value, this.entries) : super(value);
+
+  _updateSelf(Scope scope) {
+    _value = entries.fold(new Map(),
+        (m, e) => m..[e.key._value] = e.entryValue._value);
+  }
+
+  accept(Visitor v) => v.visitMapLiteral(this);
+}
+
+class MapLiteralEntryObserver extends ExpressionObserver<MapLiteralEntry>
+    implements MapLiteralEntry {
+
+  final LiteralObserver key;
+  final ExpressionObserver entryValue;
+
+  MapLiteralEntryObserver(MapLiteralEntry value, this.key, this.entryValue)
+      : super(value);
+
+  accept(Visitor v) => v.visitMapLiteralEntry(this);
+}
+
+class IdentifierObserver extends ExpressionObserver<Identifier>
+    implements Identifier {
+
+  IdentifierObserver(Identifier value) : super(value);
+
+  dynamic get value => _expr.value;
+
+  _updateSelf(Scope scope) {
+    _value = scope[_expr.value];
+
+    var owner = scope.ownerOf(_expr.value);
+    if (owner is Observable) {
+      _subscription = (owner as Observable).changes.listen(
+          (List<ChangeRecord> changes) {
+            var symbol = new Symbol(_expr.value);
+            if (changes.any((c) => c.changes(symbol))) {
+              _invalidate(scope);
+            }
+          });
+    }
+  }
+
+  accept(Visitor v) => v.visitIdentifier(this);
+}
+
+class ParenthesizedObserver extends ExpressionObserver<ParenthesizedExpression>
+    implements ParenthesizedExpression {
+  final ExpressionObserver child;
+
+  ParenthesizedObserver(ExpressionObserver expr, this.child) : super(expr);
+
+
+  _updateSelf(Scope scope) {
+    _value = child._value;
+  }
+
+  accept(Visitor v) => v.visitParenthesizedExpression(this);
+}
+
+class UnaryObserver extends ExpressionObserver<UnaryOperator>
+    implements UnaryOperator {
+  final ExpressionObserver child;
+
+  UnaryObserver(UnaryOperator expr, this.child) : super(expr);
+
+  String get operator => _expr.operator;
+
+  _updateSelf(Scope scope) {
+    var f = _UNARY_OPERATORS[_expr.operator];
+    if (operator == '!') {
+      _value = f(_toBool(child._value));
+    } else {
+      _value = (child._value == null) ? null : f(child._value);
+    }
+  }
+
+  accept(Visitor v) => v.visitUnaryOperator(this);
+}
+
+class BinaryObserver extends ExpressionObserver<BinaryOperator>
+    implements BinaryOperator {
+
+  final ExpressionObserver left;
+  final ExpressionObserver right;
+
+  BinaryObserver(BinaryOperator expr, this.left, this.right)
+      : super(expr);
+
+  String get operator => _expr.operator;
+
+  _updateSelf(Scope scope) {
+    var f = _BINARY_OPERATORS[operator];
+    if (operator == '&&' || operator == '||') {
+      _value = f(_toBool(left._value), _toBool(right._value));
+    } else {
+      _value = (left._value == null || right._value == null)
+          ? null : f(left._value, right._value);
+    }
+  }
+
+  accept(Visitor v) => v.visitBinaryOperator(this);
+
+}
+
+class InvokeObserver extends ExpressionObserver<Invoke> implements Invoke {
+  final ExpressionObserver receiver;
+  List<ExpressionObserver> arguments;
+
+  InvokeObserver(Expression expr, this.receiver, [this.arguments])
+      : super(expr);
+
+  bool get isGetter => _expr.isGetter;
+
+  String get method => _expr.method;
+
+  _updateSelf(Scope scope) {
+    var args = (arguments == null)
+        ? []
+        : arguments.map((a) => a._value)
+            .toList(growable: false);
+    var receiverValue = receiver._value;
+    if (receiverValue == null) {
+      _value = null;
+    } else if (_expr.method == null) {
+      if (_expr.isGetter) {
+        // getter, but not a top-level identifier
+        // TODO(justin): listen to the receiver's owner
+        _value = receiverValue;
+      } else {
+        // top-level function or model method
+        // TODO(justin): listen to model changes to see if the method has
+        // changed? listen to the scope to see if the top-level method has
+        // changed?
+        assert(receiverValue is Function);
+        _value = call(receiverValue, args);
+      }
+    } else {
+      // special case [] because we don't need mirrors
+      if (_expr.method == '[]') {
+        assert(args.length == 1);
+        var key = args[0];
+        _value = receiverValue[key];
+
+        if (receiverValue is Observable) {
+          _subscription = (receiverValue as Observable).changes.listen(
+              (List<ChangeRecord> changes) {
+                if (changes.any((c) =>
+                    c is MapChangeRecord && c.changes(key))) {
+                  _invalidate(scope);
+                }
+              });
+        }
+      } else {
+        var mirror = reflect(receiverValue);
+        var symbol = new Symbol(_expr.method);
+        _value = (_expr.isGetter)
+            ? mirror.getField(symbol).reflectee
+            : mirror.invoke(symbol, args, null).reflectee;
+
+        if (receiverValue is Observable) {
+          _subscription = (receiverValue as Observable).changes.listen(
+              (List<ChangeRecord> changes) {
+                if (changes.any((c) => c.changes(symbol))) {
+                  _invalidate(scope);
+                }
+              });
+        }
+      }
+    }
+  }
+
+  accept(Visitor v) => v.visitInvoke(this);
+}
+
+class InObserver extends ExpressionObserver<InExpression>
+    implements InExpression {
+  IdentifierObserver left;
+  ExpressionObserver right;
+
+  InObserver(Expression expr, this.left, this.right) : super(expr);
+
+  _updateSelf(Scope scope) {
+    Identifier identifier = left;
+    var iterable = right._value;
+
+    if (iterable is! Iterable && iterable != null) {
+      throw new EvalException("right side of 'in' is not an iterator");
+    }
+
+    if (iterable is ObservableList) {
+      _subscription = (iterable as ObservableList).changes.listen(
+          (List<ChangeRecord> changes) {
+            if (changes.any((c) => c is ListChangeRecord)) {
+              _invalidate(scope);
+            }
+          });
+    }
+
+    // TODO: make Comprehension observable and update it
+    _value = new Comprehension(identifier.value, iterable);
+  }
+
+  accept(Visitor v) => v.visitInExpression(this);
+}
+
+_toBool(v) => (v == null) ? false : v;
+
+call(dynamic receiver, List args) {
+  if (receiver is Method) {
+    return
+        _convert(receiver.mirror.invoke(receiver.symbol, args, null).reflectee);
+  } else {
+    return _convert(Function.apply(receiver, args, null));
+  }
+}
+
+/**
+ * A comprehension declaration ("a in b").
+ */
+class Comprehension {
+  final String identifier;
+  final Iterable iterable;
+  Comprehension(this.identifier, this.iterable);
+}
+
+/**
+ * A method on a model object in a [Scope].
+ */
+class Method { //implements _FunctionWrapper {
+  final InstanceMirror mirror;
+  final Symbol symbol;
+
+  Method(this.mirror, this.symbol);
+
+  dynamic call(List args) => mirror.invoke(symbol, args, null).reflectee;
+}
+
+class EvalException implements Exception {
+  final String message;
+  EvalException(this.message);
+  String toString() => "EvalException: $message";
+}
diff --git a/pkg/polymer_expressions/lib/expression.dart b/pkg/polymer_expressions/lib/expression.dart
new file mode 100644
index 0000000..516e85b
--- /dev/null
+++ b/pkg/polymer_expressions/lib/expression.dart
@@ -0,0 +1,208 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library polymer_expressions.expression;
+
+import 'visitor.dart';
+
+// Helper functions for building expression trees programmatically
+
+EmptyExpression empty() => new EmptyExpression();
+Literal literal(v) => new Literal(v);
+MapLiteral mapLiteral(List<MapLiteralEntry> entries) => new MapLiteral(entries);
+MapLiteralEntry mapLiteralEntry(Literal key, Expression value) =>
+    new MapLiteralEntry(key, value);
+Identifier ident(String v) => new Identifier(v);
+ParenthesizedExpression paren(Expression e) => new ParenthesizedExpression(e);
+UnaryOperator unary(String op, Expression e) => new UnaryOperator(op, e);
+BinaryOperator binary(Expression l, String op, Expression r) =>
+    new BinaryOperator(l, op, r);
+Invoke invoke(Expression e, String m, [List<Expression> a]) =>
+    new Invoke(e, m, a);
+InExpression inExpr(Expression l, Expression r) => new InExpression(l, r);
+
+
+class AstFactory {
+  EmptyExpression empty() => new EmptyExpression();
+
+  Literal literal(v) => new Literal(v);
+
+  MapLiteral mapLiteral(List<MapLiteralEntry> entries) =>
+      new MapLiteral(entries);
+
+  MapLiteralEntry mapLiteralEntry(Literal key, Expression value) =>
+      new MapLiteralEntry(key, value);
+
+  Identifier identifier(String v) => new Identifier(v);
+
+  ParenthesizedExpression parenthesized(Expression e) =>
+      new ParenthesizedExpression(e);
+
+  UnaryOperator unary(String op, Expression e) => new UnaryOperator(op, e);
+
+  BinaryOperator binary(Expression l, String op, Expression r) =>
+      new BinaryOperator(l, op, r);
+
+  Invoke invoke(Expression e, String m, [List<Expression> a]) =>
+      new Invoke(e, m, a);
+
+  InExpression inExpr(Expression l, Expression r) => new InExpression(l, r);
+}
+
+/// Base class for all expressions
+abstract class Expression {
+  accept(Visitor v);
+}
+
+class EmptyExpression extends Expression {
+  accept(Visitor v) => v.visitEmptyExpression(this);
+  bool operator ==(o) => o is EmptyExpression;
+}
+
+class Literal<T> extends Expression {
+  final T value;
+
+  Literal(this.value);
+
+  accept(Visitor v) => v.visitLiteral(this);
+
+  String toString() => (value is String) ? '"$value"' : '$value';
+
+  bool operator ==(o) => o is Literal<T> && o.value == value;
+
+  int get hashCode => value.hashCode;
+}
+
+class MapLiteral extends Expression {
+  final List<MapLiteralEntry> entries;
+
+  MapLiteral(this.entries);
+
+  accept(Visitor v) => v.visitMapLiteral(this);
+
+  String toString() => "{$entries}";
+
+  bool operator ==(o) => o is MapLiteral && _listEquals(o.entries, entries);
+}
+
+class MapLiteralEntry extends Expression {
+  final Literal key;
+  final Expression entryValue;
+
+  MapLiteralEntry(this.key, this.entryValue);
+
+  accept(Visitor v) => v.visitMapLiteralEntry(this);
+
+  String toString() => "$key: $entryValue";
+
+  bool operator ==(o) => o is MapLiteralEntry && o.key == key
+      && o.entryValue == entryValue;
+}
+
+class ParenthesizedExpression extends Expression {
+  final Expression child;
+
+  ParenthesizedExpression(this.child);
+
+  accept(Visitor v) => v.visitParenthesizedExpression(this);
+
+  String toString() => '($child)';
+
+  bool operator ==(o) => o is ParenthesizedExpression && o.child == child;
+
+  int get hashCode => child.hashCode;
+}
+
+class Identifier extends Expression {
+  final String value;
+
+  Identifier(this.value);
+
+  accept(Visitor v) => v.visitIdentifier(this);
+
+  String toString() => value;
+
+  bool operator ==(o) => o is Identifier && o.value == value;
+
+  int get hashCode => value.hashCode;
+}
+
+class UnaryOperator extends Expression {
+  final String operator;
+  final Expression child;
+
+  UnaryOperator(this.operator, this.child);
+
+  accept(Visitor v) => v.visitUnaryOperator(this);
+
+  String toString() => '$operator $child';
+
+  bool operator ==(o) => o is UnaryOperator && o.operator == operator
+      && o.child == child;
+}
+
+class BinaryOperator extends Expression {
+  final String operator;
+  final Expression left;
+  final Expression right;
+
+  BinaryOperator(this.left, this.operator, this.right);
+
+  accept(Visitor v) => v.visitBinaryOperator(this);
+
+  String toString() => '($left $operator $right)';
+
+  bool operator ==(o) => o is BinaryOperator && o.operator == operator
+      && o.left == left && o.right == right;
+}
+
+class InExpression extends Expression {
+  final Expression left;
+  final Expression right;
+
+  InExpression(this.left, this.right);
+
+  accept(Visitor v) => v.visitInExpression(this);
+
+  String toString() => '($left in $right)';
+
+  bool operator ==(o) => o is InExpression && o.left == left
+      && o.right == right;
+}
+
+/**
+ * Represents a function or method invocation. If [method] is null, then
+ * [receiver] is an expression that should evaluate to a function. If [method]
+ * is not null, then [receiver] is an expression that should evaluate to an
+ * object that has an appropriate method.
+ */
+class Invoke extends Expression {
+  final Expression receiver;
+  final String method;
+  final List<Expression> arguments;
+
+  Invoke(this.receiver, this.method, [this.arguments]);
+
+  accept(Visitor v) => v.visitInvoke(this);
+
+  bool get isGetter => arguments == null;
+
+  String toString() => '$receiver.$method($arguments)';
+
+  bool operator ==(o) =>
+      o is Invoke
+      && o.receiver == receiver
+      && o.method == method
+      && _listEquals(o.arguments, arguments);
+}
+
+bool _listEquals(List a, List b) {
+  if (a == b) return true;
+  if (a == null || b == null) return false;
+  if (a.length != b.length) return false;
+  for (int i = 0; i < a.length; i++) {
+    if (a[i] != b[i]) return false;
+  }
+  return true;
+}
\ No newline at end of file
diff --git a/pkg/polymer_expressions/lib/filter.dart b/pkg/polymer_expressions/lib/filter.dart
new file mode 100644
index 0000000..ab808ed
--- /dev/null
+++ b/pkg/polymer_expressions/lib/filter.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library polymer_expressions.filter;
+
+typedef Object Filter(Object value);
+
+abstract class Transformer<T, V> {
+
+  T forward(V v);
+  V reverse(T t);
+  Transformer<V, T> get inverse => new _InverseTransformer(this);
+}
+
+class _InverseTransformer<T, V> implements Transformer<T, V> {
+  final Transformer<V, T> _t;
+  _InverseTransformer(this._t);
+
+  T forward(V v) => _t.reverse(v);
+  V reverse(T t) => _t.forward(t);
+  Transformer<V, T> get inverse => _t;
+}
diff --git a/pkg/polymer_expressions/lib/parser.dart b/pkg/polymer_expressions/lib/parser.dart
new file mode 100644
index 0000000..c02d656
--- /dev/null
+++ b/pkg/polymer_expressions/lib/parser.dart
@@ -0,0 +1,282 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library polymer_expressions.parser;
+
+import 'tokenizer.dart';
+import 'expression.dart';
+
+const _UNARY_OPERATORS = const ['+', '-', '!'];
+
+Expression parse(String expr) => new Parser(expr).parse();
+
+class Parser {
+  final AstFactory _astFactory;
+  final Tokenizer _tokenizer;
+  List<Token> _tokens;
+  Iterator _iterator;
+  Token _token;
+
+  Parser(String input, {AstFactory astFactory})
+      : _tokenizer = new Tokenizer(input),
+        _astFactory = (astFactory == null) ? new AstFactory() : astFactory;
+
+  Expression parse() {
+    _tokens = _tokenizer.tokenize();
+    _iterator = _tokens.iterator;
+    _advance();
+    return _parseExpression();
+  }
+
+  _advance([int kind, String value]) {
+    if ((kind != null && _token.kind != kind)
+        || (value != null && _token.value != value)) {
+      throw new ParseException("Expected $value: $_token");
+    }
+    _token = _iterator.moveNext() ? _iterator.current : null;
+  }
+
+  Expression _parseExpression() {
+    if (_token == null) return _astFactory.empty();
+    var expr = _parseUnary();
+    return (expr == null) ? null : _parsePrecedence(expr, 0);
+  }
+
+  // _parsePrecedence and _parseBinary implement the precedence climbing
+  // algorithm as described in:
+  // http://en.wikipedia.org/wiki/Operator-precedence_parser#Precedence_climbing_method
+  Expression _parsePrecedence(Expression left, int precedence) {
+    assert(left != null);
+    while (_token != null) {
+      if (_token.kind == GROUPER_TOKEN) {
+        if (_token.value == '(') {
+          var args = _parseArguments();
+          left = _astFactory.invoke(left, null, args);
+        } else if (_token.value == '[') {
+          var indexExpr = _parseIndex();
+          var args = indexExpr == null ? [] : [indexExpr];
+          left = _astFactory.invoke(left, '[]', args);
+        } else {
+          break;
+        }
+      } else if (_token.kind == DOT_TOKEN) {
+        _advance();
+        var right = _parseUnary();
+        left = _makeInvoke(left, right);
+      } else if (_token.kind == KEYWORD_TOKEN && _token.value == 'in') {
+        left = _parseComprehension(left);
+      } else if (_token.kind == OPERATOR_TOKEN
+          && _token.precedence >= precedence) {
+        left = _parseBinary(left);
+      } else {
+        break;
+      }
+    }
+    return left;
+  }
+
+  Invoke _makeInvoke(left, right) {
+    if (right is Identifier) {
+      return _astFactory.invoke(left, right.value);
+    } else if (right is Invoke && right.receiver is Identifier) {
+      Identifier method = right.receiver;
+      return _astFactory.invoke(left, method.value, right.arguments);
+    } else {
+      throw new ParseException("expected identifier: $right");
+    }
+  }
+
+  Expression _parseBinary(left) {
+    var op = _token;
+    _advance();
+    var right = _parseUnary();
+    while (_token != null
+        && (_token.kind == OPERATOR_TOKEN
+        || _token.kind == DOT_TOKEN
+        || _token.kind == GROUPER_TOKEN)
+        && _token.precedence > op.precedence) {
+      right = _parsePrecedence(right, _token.precedence);
+    }
+    return _astFactory.binary(left, op.value, right);
+  }
+
+  Expression _parseUnary() {
+    if (_token.kind == OPERATOR_TOKEN) {
+      var value = _token.value;
+      if (value == '+' || value == '-') {
+        _advance();
+        if (_token.kind == INTEGER_TOKEN) {
+          return _parseInteger(value);
+        } else if (_token.kind == DECIMAL_TOKEN) {
+          return _parseDecimal(value);
+        } else {
+          var expr = _parsePrecedence(_parsePrimary(), POSTFIX_PRECEDENCE);
+          return _astFactory.unary(value, expr);
+        }
+      } else if (value == '!') {
+        _advance();
+        var expr = _parsePrecedence(_parsePrimary(), POSTFIX_PRECEDENCE);
+        return _astFactory.unary(value, expr);
+      }
+    }
+    return _parsePrimary();
+  }
+
+  Expression _parsePrimary() {
+    var kind = _token.kind;
+    switch (kind) {
+      case KEYWORD_TOKEN:
+        var keyword = _token.value;
+        if (keyword == 'this') {
+          _advance();
+          // TODO(justin): return keyword node
+          return _astFactory.identifier('this');
+        } else if (keyword == 'in') {
+          return null;
+        } else {
+          throw new ArgumentError('unrecognized keyword: $keyword');
+        }
+        break;
+      case IDENTIFIER_TOKEN:
+        return _parseInvokeOrIdentifier();
+        break;
+      case STRING_TOKEN:
+        return _parseString();
+        break;
+      case INTEGER_TOKEN:
+        return _parseInteger();
+        break;
+      case DECIMAL_TOKEN:
+        return _parseDecimal();
+        break;
+      case GROUPER_TOKEN:
+        if (_token.value == '(') {
+          return _parseParenthesized();
+        } else if (_token.value == '{') {
+          return _parseMapLiteral();
+        }
+        return null;
+        break;
+      default:
+        return null;
+    }
+  }
+
+  MapLiteral _parseMapLiteral() {
+    var entries = [];
+    do {
+      _advance();
+      if (_token.kind == GROUPER_TOKEN && _token.value == '}') {
+        break;
+      }
+      entries.add(_parseMapLiteralEntry());
+    } while(_token != null && _token.value == ',');
+    _advance(GROUPER_TOKEN, '}');
+    return new MapLiteral(entries);
+  }
+
+  MapLiteralEntry _parseMapLiteralEntry() {
+    var key = _parseString();
+    _advance(COLON_TOKEN, ':');
+    var value = _parseExpression();
+    return _astFactory.mapLiteralEntry(key, value);
+  }
+
+  InExpression _parseComprehension(Expression left) {
+    assert(_token.value == 'in');
+    if (left is! Identifier) {
+      throw new ParseException(
+          "in... statements must start with an identifier");
+    }
+    _advance();
+    var right = _parseExpression();
+    return _astFactory.inExpr(left, right);
+  }
+
+  Expression _parseInvokeOrIdentifier() {
+    if (_token.value == 'true') {
+      _advance();
+      return _astFactory.literal(true);
+    }
+    if (_token.value == 'false') {
+      _advance();
+      return _astFactory.literal(false);
+    }
+    var identifier = _parseIdentifier();
+    var args = _parseArguments();
+    if (args == null) {
+      return identifier;
+    } else {
+      return _astFactory.invoke(identifier, null, args);
+    }
+  }
+
+  Invoke _parseInvoke() {
+    var identifier = _parseIdentifier();
+    var args = _parseArguments();
+    return _astFactory.invoke(null, identifier, args);
+  }
+
+  Identifier _parseIdentifier() {
+    if (_token.kind != IDENTIFIER_TOKEN) {
+      throw new ParseException("expected identifier: $_token.value");
+    }
+    var value = _token.value;
+    _advance();
+    return _astFactory.identifier(value);
+  }
+
+  List<Expression> _parseArguments() {
+    if (_token != null && _token.kind == GROUPER_TOKEN && _token.value == '(') {
+      var args = [];
+      do {
+        _advance();
+        if (_token.kind == GROUPER_TOKEN && _token.value == ')') {
+          break;
+        }
+        var expr = _parseExpression();
+        args.add(expr);
+      } while(_token != null && _token.value == ',');
+      _advance(GROUPER_TOKEN, ')');
+      return args;
+    }
+    return null;
+  }
+
+  Expression _parseIndex() {
+    if (_token != null && _token.kind == GROUPER_TOKEN && _token.value == '[') {
+      _advance();
+      var expr = _parseExpression();
+      _advance(GROUPER_TOKEN, ']');
+      return expr;
+    }
+    return null;
+  }
+
+  ParenthesizedExpression _parseParenthesized() {
+    _advance();
+    var expr = _parseExpression();
+    _advance(GROUPER_TOKEN, ')');
+    return _astFactory.parenthesized(expr);
+  }
+
+  Literal<String> _parseString() {
+    var value = _astFactory.literal(_token.value);
+    _advance();
+    return value;
+  }
+
+  Literal<int> _parseInteger([String prefix = '']) {
+    var value = _astFactory.literal(int.parse('$prefix${_token.value}'));
+    _advance();
+    return value;
+  }
+
+  Literal<double> _parseDecimal([String prefix = '']) {
+    var value = _astFactory.literal(double.parse('$prefix${_token.value}'));
+    _advance();
+    return value;
+  }
+
+}
diff --git a/pkg/polymer_expressions/lib/polymer_expressions.dart b/pkg/polymer_expressions/lib/polymer_expressions.dart
new file mode 100644
index 0000000..dd7d7af
--- /dev/null
+++ b/pkg/polymer_expressions/lib/polymer_expressions.dart
@@ -0,0 +1,109 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library polymer_expressions;
+
+import 'dart:async';
+import 'dart:html';
+
+import 'package:observe/observe.dart';
+
+import 'eval.dart';
+import 'expression.dart';
+import 'parser.dart';
+
+// TODO(justin): Investigate XSS protection
+Object _classAttributeConverter(v) =>
+    (v is Map) ? v.keys.where((k) => v[k] == true).join(' ') :
+    (v is Iterable) ? v.join(' ') :
+    v;
+
+Object _styleAttributeConverter(v) =>
+    (v is Map) ? v.keys.map((k) => '$k: ${v[k]}').join(';') :
+    (v is Iterable) ? v.join(';') :
+    v;
+
+class PolymerExpressions extends BindingDelegate {
+
+  final Map<String, Object> globals;
+
+  PolymerExpressions({Map<String, Object> globals})
+      : globals = (globals == null) ? new Map<String, Object>() : globals;
+
+  _Binding getBinding(model, String path, name, node) {
+    if (path == null) return null;
+    var expr = new Parser(path).parse();
+    if (model is! Scope) {
+      model = new Scope(model: model, variables: globals);
+    }
+    if (node is Element && name == "class") {
+      return new _Binding(expr, model, _classAttributeConverter);
+    }
+    if (node is Element && name == "style") {
+      return new _Binding(expr, model, _styleAttributeConverter);
+    }
+    return new _Binding(expr, model);
+  }
+
+  getInstanceModel(Element template, model) {
+    if (model is! Scope) {
+      var _scope = new Scope(model: model, variables: globals);
+      return _scope;
+    }
+    return model;
+  }
+}
+
+class _Binding extends Object with ChangeNotifierMixin {
+  static const _VALUE = const Symbol('value');
+
+  final Scope _scope;
+  final ExpressionObserver _expr;
+  final _converter;
+  var _value;
+
+
+  _Binding(Expression expr, Scope scope, [this._converter])
+      : _expr = observe(expr, scope),
+        _scope = scope {
+    _expr.onUpdate.listen(_setValue);
+    _setValue(_expr.currentValue);
+  }
+
+  _setValue(v) {
+    if (v is Comprehension) {
+      // convert the Comprehension into a list of scopes with the loop
+      // variable added to the scope
+      _value = v.iterable.map((i) {
+        var vars = new Map();
+        vars[v.identifier] = i;
+        Scope childScope = new Scope(parent: _scope, variables: vars);
+        return childScope;
+      }).toList(growable: false);
+    } else {
+      _value = (_converter == null) ? v : _converter(v);
+    }
+    notifyChange(new PropertyChangeRecord(_VALUE));
+  }
+
+  get value => _value;
+
+  set value(v) {
+    try {
+      assign(_expr, v, _scope);
+      notifyChange(new PropertyChangeRecord(_VALUE));
+    } on EvalException catch (e) {
+      // silently swallow binding errors
+    }
+  }
+
+  getValueWorkaround(key) {
+    if (key == _VALUE) return value;
+  }
+
+  setValueWorkaround(key, v) {
+    if (key == _VALUE) value = v;
+  }
+
+}
diff --git a/pkg/polymer_expressions/lib/src/mirrors.dart b/pkg/polymer_expressions/lib/src/mirrors.dart
new file mode 100644
index 0000000..c2a6c47
--- /dev/null
+++ b/pkg/polymer_expressions/lib/src/mirrors.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library polymer_expressions.mirrors;
+
+import 'dart:mirrors';
+
+/**
+ * Walks up the class hierarchy to find a method declaration with the given
+ * [name].
+ *
+ * Note that it's not possible to tell if there's an implementation via
+ * noSuchMethod().
+ */
+Mirror getMemberMirror(ClassMirror classMirror, Symbol name) {
+  if (classMirror.members.containsKey(name)) {
+    return classMirror.members[name];
+  }
+  if (hasSuperclass(classMirror)) {
+    var mirror = getMemberMirror(classMirror.superclass, name);
+    if (mirror != null) {
+      return mirror;
+    }
+  }
+  for (ClassMirror supe in classMirror.superinterfaces) {
+    var mirror = getMemberMirror(supe, name);
+    if (mirror != null) {
+      return mirror;
+    }
+  }
+  return null;
+}
+
+/**
+ * Work-around for http://dartbug.com/5794
+ */
+bool hasSuperclass(ClassMirror classMirror) {
+  var superclass = classMirror.superclass;
+  return (superclass != null) &&
+      (superclass.qualifiedName != const Symbol('dart.core.Object'));
+}
diff --git a/pkg/polymer_expressions/lib/tokenizer.dart b/pkg/polymer_expressions/lib/tokenizer.dart
new file mode 100644
index 0000000..4e03167
--- /dev/null
+++ b/pkg/polymer_expressions/lib/tokenizer.dart
@@ -0,0 +1,300 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library polymer_expressions.tokenizer;
+
+const int _TAB = 9;
+const int _LF = 10;
+const int _VTAB = 11;
+const int _FF = 12;
+const int _CR = 13;
+const int _SPACE = 32;
+const int _BANG = 33;
+const int _DQ = 34;
+const int _$ = 36;
+const int _AMPERSAND = 38;
+const int _SQ = 39;
+const int _OPEN_PAREN = 40;
+const int _CLOSE_PAREN = 41;
+const int _STAR = 42;
+const int _PLUS = 43;
+const int _COMMA = 44;
+const int _MINUS = 45;
+const int _PERIOD = 46;
+const int _SLASH = 47;
+const int _0 = 48;
+const int _9 = 57;
+const int _COLON = 58;
+const int _LT = 60;
+const int _EQ = 61;
+const int _GT = 62;
+const int _QUESTION = 63;
+const int _A = 65;
+const int _Z = 90;
+const int _OPEN_SQUARE_BRACKET = 91;
+const int _BACKSLASH = 92;
+const int _CLOSE_SQUARE_BRACKET = 93;
+const int _CARET = 94;
+const int _US = 95;
+const int _a = 97;
+const int _f = 102;
+const int _n = 110;
+const int _r = 114;
+const int _t = 116;
+const int _v = 118;
+const int _z = 122;
+const int _OPEN_CURLY_BRACKET = 123;
+const int _BAR = 124;
+const int _CLOSE_CURLY_BRACKET = 125;
+const int _NBSP = 160;
+
+const _OPERATORS = const [_PLUS, _MINUS, _STAR, _SLASH, _BANG, _AMPERSAND,
+                          /*_COMMA,*/ _LT, _EQ, _GT, _QUESTION, _CARET, _BAR];
+
+const _GROUPERS = const [_OPEN_PAREN, _CLOSE_PAREN,
+                         _OPEN_SQUARE_BRACKET, _CLOSE_SQUARE_BRACKET,
+                         _OPEN_CURLY_BRACKET, _CLOSE_CURLY_BRACKET];
+
+const _TWO_CHAR_OPS = const ['==', '!=', '<=', '>=', '||', '&&'];
+
+const _KEYWORDS = const ['in', 'this'];
+
+const _PRECEDENCE = const {
+  '!':  0,
+  ':':  0,
+  ',':  0,
+  ')':  0,
+  ']':  0,
+  '}':  0, // ?
+  '?':  1,
+  '||': 2,
+  '&&': 3,
+  '|':  4,
+  '^':  5,
+  '&':  6,
+
+  // equality
+  '!=': 7,
+  '==': 7,
+
+  // relational
+  '>=': 8,
+  '>':  8,
+  '<=': 8,
+  '<':  8,
+
+  // additive
+  '+':  9,
+  '-':  9,
+
+  // multiplicative
+  '%':  10,
+  '/':  10,
+  '*':  10,
+
+  // postfix
+  '(':  11,
+  '[':  11,
+  '.':  11,
+  '{': 11, //not sure this is correct
+};
+
+const POSTFIX_PRECEDENCE = 11;
+
+const int STRING_TOKEN = 1;
+const int IDENTIFIER_TOKEN = 2;
+const int DOT_TOKEN = 3;
+const int COMMA_TOKEN = 4;
+const int COLON_TOKEN = 5;
+const int INTEGER_TOKEN = 6;
+const int DECIMAL_TOKEN = 7;
+const int OPERATOR_TOKEN = 8;
+const int GROUPER_TOKEN = 9;
+const int KEYWORD_TOKEN = 10;
+
+bool isWhitespace(int next) => next == _SPACE || next == _TAB || next == _NBSP;
+
+bool isIdentifierOrKeywordStart(int next) => (_a <= next && next <= _z) ||
+    (_A <= next && next <= _Z) || next == _US || next == _$ || next > 127;
+
+bool isIdentifier(int next) => (_a <= next && next <= _z) ||
+    (_A <= next && next <= _Z) || (_0 <= next && next <= _9) ||
+    next == _US || next == _$ || next > 127;
+
+bool isQuote(int next) => next == _DQ || next == _SQ;
+
+bool isNumber(int next) => _0 <= next && next <= _9;
+
+bool isOperator(int next) => _OPERATORS.contains(next);
+
+bool isGrouper(int next) => _GROUPERS.contains(next);
+
+int escape(int c) {
+  switch (c) {
+    case _f: return _FF; break;
+    case _n: return _LF; break;
+    case _r: return _CR; break;
+    case _t: return _TAB; break;
+    case _v: return _VTAB; break;
+    default: return c;
+  }
+}
+
+class Token {
+  final int kind;
+  final String value;
+  final int precedence;
+
+  Token(this.kind, this.value, [this.precedence = 0]);
+
+  String toString() => "($kind, '$value')";
+}
+
+class Tokenizer {
+  final List<Token> _tokens = <Token>[];
+  final StringBuffer _sb = new StringBuffer();
+  final RuneIterator _iterator;
+
+  int _next;
+
+  Tokenizer(String input) : _iterator = new RuneIterator(input);
+
+  _advance() {
+    _next = _iterator.moveNext() ? _iterator.current : null;
+  }
+
+  List<Token> tokenize() {
+    _advance();
+    while(_next != null) {
+      if (isWhitespace(_next)) {
+        _advance();
+      } else if (isQuote(_next)) {
+        tokenizeString();
+      } else if (isIdentifierOrKeywordStart(_next)) {
+        tokenizeIdentifierOrKeyword();
+      } else if (isNumber(_next)) {
+        tokenizeNumber();
+      } else if (_next == _PERIOD) {
+        tokenizeDot();
+      } else if (_next == _COMMA) {
+        tokenizeComma();
+      } else if (_next == _COLON) {
+        tokenizeColon();
+      } else if (isOperator(_next)) {
+        tokenizeOperator();
+      } else if (isGrouper(_next)) {
+        tokenizeGrouper();
+      } else {
+        _advance();
+      }
+    }
+    return _tokens;
+  }
+
+  tokenizeString() {
+    int quoteChar = _next;
+    _advance();
+    while (_next != quoteChar) {
+      if (_next == null) throw new ParseException("unterminated string");
+      if (_next == _BACKSLASH) {
+        _advance();
+        if (_next == null) throw new ParseException("unterminated string");
+        _sb.writeCharCode(escape(_next));
+      } else {
+        _sb.writeCharCode(_next);
+      }
+      _advance();
+    }
+    _tokens.add(new Token(STRING_TOKEN, _sb.toString()));
+    _sb.clear();
+    _advance();
+  }
+
+  tokenizeIdentifierOrKeyword() {
+    while (_next != null && isIdentifier(_next)) {
+      _sb.writeCharCode(_next);
+      _advance();
+    }
+    var value = _sb.toString();
+    if (_KEYWORDS.contains(value)) {
+      _tokens.add(new Token(KEYWORD_TOKEN, value));
+    } else {
+      _tokens.add(new Token(IDENTIFIER_TOKEN, value));
+    }
+    _sb.clear();
+  }
+
+  tokenizeNumber() {
+    while (_next != null && isNumber(_next)) {
+      _sb.writeCharCode(_next);
+      _advance();
+    }
+    if (_next == _PERIOD) {
+      tokenizeDot();
+    } else {
+      _tokens.add(new Token(INTEGER_TOKEN, _sb.toString()));
+      _sb.clear();
+    }
+  }
+
+  tokenizeDot() {
+    _advance();
+    if (isNumber(_next)) {
+      tokenizeFraction();
+    } else {
+      _tokens.add(new Token(DOT_TOKEN, '.', POSTFIX_PRECEDENCE));
+    }
+  }
+
+  tokenizeComma() {
+    _advance();
+    _tokens.add(new Token(COMMA_TOKEN, ','));
+  }
+
+  tokenizeColon() {
+    _advance();
+    _tokens.add(new Token(COLON_TOKEN, ':'));
+  }
+
+  tokenizeFraction() {
+    _sb.writeCharCode(_PERIOD);
+    while (_next != null && isNumber(_next)) {
+      _sb.writeCharCode(_next);
+      _advance();
+    }
+    _tokens.add(new Token(DECIMAL_TOKEN, _sb.toString()));
+    _sb.clear();
+  }
+
+  tokenizeOperator() {
+    int startChar = _next;
+    _advance();
+    var op;
+    // check for 2 character operators
+    if (isOperator(_next)) {
+      var op2 = new String.fromCharCodes([startChar, _next]);
+      if (_TWO_CHAR_OPS.contains(op2)) {
+        op = op2;
+        _advance();
+      } else {
+        op = new String.fromCharCode(startChar);
+      }
+    } else {
+      op = new String.fromCharCode(startChar);
+    }
+    _tokens.add(new Token(OPERATOR_TOKEN, op, _PRECEDENCE[op]));
+  }
+
+  tokenizeGrouper() {
+    var value = new String.fromCharCode(_next);
+    _tokens.add(new Token(GROUPER_TOKEN, value, _PRECEDENCE[value]));
+    _advance();
+  }
+}
+
+class ParseException implements Exception {
+  final String message;
+  ParseException(this.message);
+  String toString() => "ParseException: $message";
+}
diff --git a/pkg/polymer_expressions/lib/visitor.dart b/pkg/polymer_expressions/lib/visitor.dart
new file mode 100644
index 0000000..a11a0d4
--- /dev/null
+++ b/pkg/polymer_expressions/lib/visitor.dart
@@ -0,0 +1,76 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library polymer_expressions.visitor;
+
+import 'expression.dart';
+
+abstract class Visitor<E extends Expression> {
+  visit(E s) => s.accept(this);
+  visitEmptyExpression(EmptyExpression e);
+  visitParenthesizedExpression(ParenthesizedExpression e);
+  visitInvoke(Invoke i);
+  visitLiteral(Literal l);
+  visitMapLiteral(MapLiteral l);
+  visitMapLiteralEntry(MapLiteralEntry l);
+  visitIdentifier(Identifier i);
+  visitBinaryOperator(BinaryOperator o);
+  visitUnaryOperator(UnaryOperator o);
+  visitInExpression(InExpression c);
+}
+
+abstract class RecursiveVisitor<E> extends Visitor<E> {
+  visitExpression(E e);
+
+  visitEmptyExpression(EmptyExpression e) => visitExpression(e);
+
+  visitParenthesizedExpression(ParenthesizedExpression e) {
+    visit(e);
+    visitExpression(e);
+  }
+
+  visitInvoke(Invoke i) {
+    visit(i.receiver);
+    if (i.arguments != null) {
+      for (var a in i.arguments) {
+        visit(a);
+      }
+    }
+    visitExpression(i);
+  }
+
+  visitLiteral(Literal l) => visitExpression(l);
+
+  visitMapLiteral(MapLiteral l) {
+    for (var e in l.entries) {
+      visit(e);
+    }
+    visitExpression(l);
+  }
+
+  visitMapLiteralEntry(MapLiteralEntry e) {
+    visit(e.key);
+    visit(e.entryValue);
+    visitExpression(e);
+  }
+
+  visitIdentifier(Identifier i) => visitExpression(i);
+
+  visitBinaryOperator(BinaryOperator o) {
+    visit(o.left);
+    visit(o.right);
+    visitExpression(o);
+  }
+
+  visitUnaryOperator(UnaryOperator o) {
+    visit(o.child);
+    visitExpression(o);
+  }
+
+  visitInExpression(InExpression c) {
+    visit(c.left);
+    visit(c.right);
+    visitExpression(c);
+  }
+}
\ No newline at end of file
diff --git a/pkg/polymer_expressions/pubspec.yaml b/pkg/polymer_expressions/pubspec.yaml
new file mode 100644
index 0000000..d6322cf
--- /dev/null
+++ b/pkg/polymer_expressions/pubspec.yaml
@@ -0,0 +1,10 @@
+name: polymer_expressions
+author: Web UI Authors <html-dev@dartlang.org>
+description: An expressive custom binding syntax for MDV templates
+homepage: http://www.dartlang.org/
+dependencies:
+  browser: any
+  mdv: any
+  observe: any
+dev_dependencies:
+  unittest: any
diff --git a/pkg/polymer_expressions/test/all_tests.dart b/pkg/polymer_expressions/test/all_tests.dart
new file mode 100644
index 0000000..bbfccba
--- /dev/null
+++ b/pkg/polymer_expressions/test/all_tests.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library all_tests;
+
+import 'eval_test.dart' as eval;
+import 'parser_test.dart' as parser;
+import 'tokenizer_test.dart' as tokenizer;
+
+main() {
+  tokenizer.main();
+  parser.main();
+  eval.main();
+}
diff --git a/pkg/polymer_expressions/test/eval_test.dart b/pkg/polymer_expressions/test/eval_test.dart
new file mode 100644
index 0000000..b2d9123
--- /dev/null
+++ b/pkg/polymer_expressions/test/eval_test.dart
@@ -0,0 +1,378 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library eval_test;
+
+import 'dart:async';
+
+import 'package:polymer_expressions/eval.dart';
+import 'package:polymer_expressions/filter.dart';
+import 'package:polymer_expressions/parser.dart';
+import 'package:unittest/unittest.dart';
+import 'package:observe/observe.dart';
+
+main() {
+
+  group('eval', () {
+    test('should return the model for an empty expression', () {
+      expectEval('', 'model', 'model');
+    });
+
+    test('should handle the "this" keyword', () {
+      expectEval('this', 'model', 'model');
+      expectEval('this.name', 'foo', new Foo(name: 'foo'));
+      expectEval('this["a"]', 'x', {'a': 'x'});
+    });
+
+    test('should return a literal int', () {
+      expectEval('1', 1);
+      expectEval('+1', 1);
+      expectEval('-1', -1);
+    });
+
+    test('should return a literal double', () {
+      expectEval('1.2', 1.2);
+      expectEval('+1.2', 1.2);
+      expectEval('-1.2', -1.2);
+    });
+
+    test('should return a literal string', () {
+      expectEval('"hello"', "hello");
+      expectEval("'hello'", "hello");
+    });
+
+    test('should return a literal boolean', () {
+      expectEval('true', true);
+      expectEval('false', false);
+    });
+
+    test('should return a literal map', () {
+      expectEval('{"a": 1}', equals(new Map.from({'a': 1})));
+      expectEval('{"a": 1}', containsPair('a', 1));
+    });
+
+    test('should call methods on a literal map', () {
+      expectEval('{"a": 1}.length', 1);
+    });
+
+    test('should evaluate unary operators', () {
+      expectEval('+a', 2, null, {'a': 2});
+      expectEval('-a', -2, null, {'a': 2});
+      expectEval('!a', false, null, {'a': true});
+    });
+
+    test('should evaluate binary operators', () {
+      expectEval('1 + 2', 3);
+      expectEval('2 - 1', 1);
+      expectEval('4 / 2', 2);
+      expectEval('2 * 3', 6);
+
+      expectEval('1 == 1', true);
+      expectEval('1 == 2', false);
+      expectEval('1 != 1', false);
+      expectEval('1 != 2', true);
+
+      expectEval('1 > 1', false);
+      expectEval('1 > 2', false);
+      expectEval('2 > 1', true);
+      expectEval('1 >= 1', true);
+      expectEval('1 >= 2', false);
+      expectEval('2 >= 1', true);
+      expectEval('1 < 1', false);
+      expectEval('1 < 2', true);
+      expectEval('2 < 1', false);
+      expectEval('1 <= 1', true);
+      expectEval('1 <= 2', true);
+      expectEval('2 <= 1', false);
+
+      expectEval('true || true', true);
+      expectEval('true || false', true);
+      expectEval('false || true', true);
+      expectEval('false || false', false);
+
+      expectEval('true && true', true);
+      expectEval('true && false', false);
+      expectEval('false && true', false);
+      expectEval('false && false', false);
+    });
+
+    test('should invoke a method on the model', () {
+      var foo = new Foo(name: 'foo', age: 2);
+      expectEval('x()', foo.x(), foo);
+      expectEval('name', foo.name, foo);
+    });
+
+    test('should invoke chained methods', () {
+      var foo = new Foo(name: 'foo', age: 2);
+      expectEval('name.length', foo.name.length, foo);
+      expectEval('x().toString()', foo.x().toString(), foo);
+      expectEval('name.substring(2)', foo.name.substring(2), foo);
+      expectEval('a()()', 1, null, {'a': () => () => 1});
+    });
+
+    test('should invoke a top-level function', () {
+      expectEval('x()', 42, null, {'x': () => 42});
+      expectEval('x(5)', 5, null, {'x': (i) => i});
+      expectEval('y(5, 10)', 50, null, {'y': (i, j) => i * j});
+    });
+
+    test('should give precedence to top-level functions over methods', () {
+      var foo = new Foo(name: 'foo', age: 2);
+      expectEval('x()', 42, foo, {'x': () => 42});
+    });
+
+    test('should invoke the [] operator', () {
+      var map = {'a': 1, 'b': 2};
+      expectEval('map["a"]', 1, null, {'map': map});
+      expectEval('map["a"] + map["b"]', 3, null, {'map': map});
+    });
+
+    test('should call a filter', () {
+      var topLevel = {
+        'a': 'foo',
+        'uppercase': (s) => s.toUpperCase(),
+      };
+      expectEval('a | uppercase', 'FOO', null, topLevel);
+    });
+
+    test('should call a transformer', () {
+      var topLevel = {
+        'a': '42',
+        'parseInt': parseInt,
+        'add': add,
+      };
+      expectEval('a | parseInt()', 42, null, topLevel);
+      expectEval('a | parseInt(8)', 34, null, topLevel);
+      expectEval('a | parseInt() | add(10)', 52, null, topLevel);
+    });
+
+    test('should return null if the receiver of a method is null', () {
+      expectEval('a.b', null, null, {'a': null});
+      expectEval('a.b()', null, null, {'a': null});
+    });
+
+    test('should return null if null is invoked', () {
+      expectEval('a()', null, null, {'a': null});
+    });
+
+    test('should return null if an operand is null', () {
+      expectEval('a + b', null, null, {'a': null, 'b': null});
+      expectEval('+a', null, null, {'a': null});
+    });
+
+    test('should treat null as false', () {
+      expectEval('!a', true, null, {'a': null});
+
+      expectEval('a && b', false, null, {'a': null, 'b': true});
+      expectEval('a && b', false, null, {'a': true, 'b': null});
+      expectEval('a && b', false, null, {'a': null, 'b': false});
+      expectEval('a && b', false, null, {'a': false, 'b': null});
+      expectEval('a && b', false, null, {'a': null, 'b': null});
+
+      expectEval('a || b', true, null, {'a': null, 'b': true});
+      expectEval('a || b', true, null, {'a': true, 'b': null});
+      expectEval('a || b', false, null, {'a': null, 'b': false});
+      expectEval('a || b', false, null, {'a': false, 'b': null});
+      expectEval('a || b', false, null, {'a': null, 'b': null});
+    });
+
+    test('should evaluate an "in" expression', () {
+      var scope = new Scope(variables: {'items': [1, 2, 3]});
+      var comprehension = eval(parse('item in items'), scope);
+      expect(comprehension.iterable, orderedEquals([1, 2, 3]));
+    });
+
+    test('should handle null iterators in "in" expressions', () {
+      var scope = new Scope(variables: {'items': null});
+      var comprehension = eval(parse('item in items'), scope);
+      expect(comprehension, isNotNull);
+      expect(comprehension.iterable, null);
+    });
+
+  });
+
+  group('assign', () {
+
+    test('should assign a single identifier', () {
+      var foo = new Foo(name: 'a');
+      assign(parse('name'), 'b', new Scope(model: foo));
+      expect(foo.name, 'b');
+    });
+
+    test('should assign a sub-property', () {
+      var child = new Foo(name: 'child');
+      var parent = new Foo(child: child);
+      assign(parse('child.name'), 'Joe', new Scope(model: parent));
+      expect(parent.child.name, 'Joe');
+    });
+
+    test('should assign an index', () {
+      var foo = new Foo(items: [1, 2, 3]);
+      assign(parse('items[0]'), 4, new Scope(model: foo));
+      expect(foo.items[0], 4);
+    });
+
+    test('should assign through transformers', () {
+      var foo = new Foo(name: '42', age: 32);
+      var globals = {
+        'a': '42',
+        'parseInt': parseInt,
+        'add': add,
+      };
+      var scope = new Scope(model: foo, variables: globals);
+      assign(parse('age | add(7)'), 29, scope);
+      expect(foo.age, 22);
+      assign(parse('name | parseInt() | add(10)'), 29, scope);
+      expect(foo.name, '19');
+    });
+
+  });
+
+  group('scope', () {
+    test('should return fields on the model', () {
+      var foo = new Foo(name: 'a', age: 1);
+      var scope = new Scope(model: foo);
+      expect(scope['name'], 'a');
+      expect(scope['age'], 1);
+    });
+
+    test('should throw for undefined names', () {
+      var scope = new Scope();
+      expect(() => scope['a'], throwsException);
+    });
+
+    test('should return variables', () {
+      var scope = new Scope(variables: {'a': 'A'});
+      expect(scope['a'], 'A');
+    });
+
+    test("should a field from the parent's model", () {
+      var parent = new Scope(variables: {'a': 'A', 'b': 'B'});
+      var child = new Scope(variables: {'a': 'a'}, parent: parent);
+      expect(child['a'], 'a');
+      expect(parent['a'], 'A');
+      expect(child['b'], 'B');
+    });
+
+  });
+
+  group('observe', () {
+    test('should observe an identifier', () {
+      var foo = new Foo(name: 'foo');
+      return expectObserve('name',
+          model: foo,
+          beforeMatcher: 'foo',
+          mutate: () {
+            foo.name = 'fooz';
+          },
+          afterMatcher: 'fooz'
+      );
+    });
+
+    test('should observe an invocation', () {
+      var foo = new Foo(name: 'foo');
+      return expectObserve('foo.name',
+          variables: {'foo': foo},
+          beforeMatcher: 'foo',
+          mutate: () {
+            foo.name = 'fooz';
+          },
+          afterMatcher: 'fooz'
+      );
+    });
+
+    test('should observe map access', () {
+      var foo = toObservable({'one': 'one', 'two': 'two'});
+      return expectObserve('foo["one"]',
+          variables: {'foo': foo},
+          beforeMatcher: 'one',
+          mutate: () {
+            foo['one'] = '1';
+          },
+          afterMatcher: '1'
+      );
+    });
+
+    test('should observe an comprehension', () {
+      var items = new ObservableList();
+      var foo = new Foo(name: 'foo');
+      return expectObserve('item in items',
+          variables: {'items': items},
+          beforeMatcher: (c) => c.iterable.isEmpty,
+          mutate: () {
+            items.add(foo);
+          },
+          afterMatcher: (c) => c.iterable.contains(foo)
+      );
+    });
+
+  });
+
+}
+
+class Foo extends Object with ChangeNotifierMixin {
+  String _name;
+  String get name => _name;
+  void set name(String n) {
+    _name = notifyPropertyChange(const Symbol('name'), _name, n);
+  }
+
+  int age;
+  Foo child;
+  List<int> items;
+
+  Foo({name, this.age, this.child, this.items}) : _name = name;
+
+  int x() => age * age;
+}
+
+parseInt([int radix = 10]) => new IntToString(radix: radix);
+
+class IntToString extends Transformer<int, String> {
+  final int radix;
+  IntToString({this.radix: 10});
+  int forward(String s) => int.parse(s, radix: radix);
+  String reverse(int i) => '$i';
+}
+
+add(int i) => new Add(i);
+
+class Add extends Transformer<int, int> {
+  final int i;
+  Add(this.i);
+  int forward(int x) => x + i;
+  int reverse(int x) => x - i;
+}
+
+Object evalString(String s, [Object model, Map vars]) =>
+    eval(new Parser(s).parse(), new Scope(model: model, variables: vars));
+
+expectEval(String s, dynamic matcher, [Object model, Map vars = const {}]) =>
+    expect(
+        eval(new Parser(s).parse(), new Scope(model: model, variables: vars)),
+        matcher,
+        reason: s);
+
+expectObserve(String s, {
+    Object model,
+    Map variables: const {},
+    dynamic beforeMatcher,
+    mutate(),
+    dynamic afterMatcher}) {
+
+  var observer = observe(new Parser(s).parse(),
+      new Scope(model: model, variables: variables));
+  expect(observer.currentValue, beforeMatcher);
+  var passed = false;
+  var future = observer.onUpdate.first.then((value) {
+    expect(value, afterMatcher);
+    expect(observer.currentValue, afterMatcher);
+    passed = true;
+  });
+  mutate();
+  // fail if we don't receive an update by the next event loop
+  return Future.wait([future, new Future(() {
+    expect(passed, true, reason: "Didn't receive a change notification on $s");
+  })]);
+}
diff --git a/pkg/polymer_expressions/test/parser_test.dart b/pkg/polymer_expressions/test/parser_test.dart
new file mode 100644
index 0000000..21b11fb
--- /dev/null
+++ b/pkg/polymer_expressions/test/parser_test.dart
@@ -0,0 +1,199 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library parser_test;
+
+import 'package:polymer_expressions/parser.dart';
+import 'package:polymer_expressions/expression.dart';
+import 'package:unittest/unittest.dart';
+
+expectParse(String s, Expression e) =>
+    expect(new Parser(s).parse(), e, reason: s);
+
+main() {
+
+  group('parser', () {
+
+    test('should parse an empty expression', () {
+      expectParse('', empty());
+    });
+
+    test('should parse an identifier', () {
+      expectParse('abc', ident('abc'));
+    });
+
+    test('should parse a string literal', () {
+      expectParse('"abc"', literal('abc'));
+    });
+
+    test('should parse an integer literal', () {
+      expectParse('123', literal(123));
+    });
+
+    test('should parse a double literal', () {
+      expectParse('1.23', literal(1.23));
+    });
+
+    test('should parse a positive double literal', () {
+      expectParse('+1.23', literal(1.23));
+    });
+
+    test('should parse a negative double literal', () {
+      expectParse('-1.23', literal(-1.23));
+    });
+
+    test('should parse a plus operator with literals', () {
+      expectParse('1 + 2', binary(literal(1), '+', literal(2)));
+    });
+
+    test('should parse binary operators', () {
+      expectParse('a && b', binary(ident('a'), '&&', ident('b')));
+      expectParse('1 && 2', binary(literal(1), '&&', literal(2)));
+      expectParse('false && true', binary(literal(false), '&&', literal(true)));
+      expectParse('false || true', binary(literal(false), '||', literal(true)));
+    });
+
+    test('should give multiply higher associativity than plus', () {
+      expectParse('a + b * c',
+          binary(
+              ident('a'),
+              '+',
+              binary(ident('b'), '*', ident('c'))));
+    });
+
+    test('should give multiply higher associativity than plus 2', () {
+      expectParse('a * b + c',
+          binary(
+              binary(ident('a'), '*', ident('b')),
+              '+',
+              ident('c')));
+    });
+
+    test('should parse a dot operator', () {
+      expectParse('a.b', invoke(ident('a'), 'b'));
+    });
+
+    test('should parse chained dot operators', () {
+      expectParse('a.b.c', invoke(invoke(ident('a'), 'b'), 'c'));
+    });
+
+    test('should give dot high associativity', () {
+      expectParse('a * b.c', binary(ident('a'), '*', invoke(ident('b'), 'c')));
+    });
+
+    test('should parse a function with no arguments', () {
+      expectParse('a()', invoke(ident('a'), null, []));
+    });
+
+    test('should parse a single function argument', () {
+      expectParse('a(b)', invoke(ident('a'), null, [ident('b')]));
+    });
+
+    test('should parse a function call as a subexpression', () {
+      expectParse('a() + 1',
+          binary(
+              invoke(ident('a'), null, []),
+              '+',
+              literal(1)));
+    });
+
+    test('should parse multiple function arguments', () {
+      expectParse('a(b, c)',
+          invoke(ident('a'), null, [ident('b'), ident('c')]));
+    });
+
+    test('should parse nested function calls', () {
+      expectParse('a(b(c))', invoke(ident('a'), null, [
+          invoke(ident('b'), null, [ident('c')])]));
+    });
+
+    test('should parse an empty method call', () {
+      expectParse('a.b()', invoke(ident('a'), 'b', []));
+    });
+
+    test('should parse a method call with a single argument', () {
+      expectParse('a.b(c)', invoke(ident('a'), 'b', [ident('c')]));
+    });
+
+    test('should parse a method call with multiple arguments', () {
+      expectParse('a.b(c, d)',
+          invoke(ident('a'), 'b', [ident('c'), ident('d')]));
+    });
+
+    test('should parse chained method calls', () {
+      expectParse('a.b().c()', invoke(invoke(ident('a'), 'b', []), 'c', []));
+    });
+
+    test('should parse chained function calls', () {
+      expectParse('a()()', invoke(invoke(ident('a'), null, []), null, []));
+    });
+
+    test('should parse parenthesized expression', () {
+      expectParse('(a)', paren(ident('a')));
+      expectParse('(( 3 * ((1 + 2)) ))', paren(paren(
+          binary(literal(3), '*', paren(paren(
+              binary(literal(1), '+', literal(2))))))));
+    });
+
+    test('should parse an index operator', () {
+      expectParse('a[b]', invoke(ident('a'), '[]', [ident('b')]));
+      expectParse('a.b[c]', invoke(invoke(ident('a'), 'b', null),
+          '[]', [ident('c')]));
+    });
+
+    test('should parse chained index operators', () {
+      expectParse('a[][]', invoke(invoke(ident('a'), '[]', []), '[]', []));
+    });
+
+    test('should parse multiple index operators', () {
+      expectParse('a[b] + c[d]', binary(
+          invoke(ident('a'), '[]', [ident('b')]),
+          '+',
+          invoke(ident('c'), '[]', [ident('d')])));
+    });
+
+    test('should parse a filter chain', () {
+      expectParse('a | b | c', binary(binary(ident('a'), '|', ident('b')),
+          '|', ident('c')));
+    });
+
+    test('should parse comprehension', () {
+      expectParse('a in b', inExpr(ident('a'), ident('b')));
+      expectParse('a in b.c',
+          inExpr(ident('a'), invoke(ident('b'), 'c', null)));
+      expectParse('a in b + c',
+          inExpr(ident('a'), binary(ident('b'), '+', ident('c'))));
+    });
+
+    test('should reject comprehension with non-assignable left expression', () {
+      expect(() => parse('a + 1 in b'), throwsException);
+    });
+
+    test('should reject keywords as identifiers', () {
+      expect(() => parse('a.in'), throwsException);
+    });
+
+    test('should parse map literals', () {
+      expectParse("{'a': 1}",
+          mapLiteral([mapLiteralEntry(literal('a'), literal(1))]));
+      expectParse("{'a': 1, 'b': 2 + 3}",
+          mapLiteral([
+              mapLiteralEntry(literal('a'), literal(1)),
+              mapLiteralEntry(literal('b'),
+                  binary(literal(2), '+', literal(3)))]));
+      expectParse("{'a': foo()}",
+          mapLiteral([mapLiteralEntry(
+              literal('a'), invoke(ident('foo'), null, []))]));
+      expectParse("{'a': foo('a')}",
+          mapLiteral([mapLiteralEntry(
+              literal('a'), invoke(ident('foo'), null, [literal('a')]))]));
+    });
+
+    test('should parse map literals with method calls', () {
+      expectParse("{'a': 1}.length",
+          invoke(mapLiteral([mapLiteralEntry(literal('a'), literal(1))]),
+              'length'));
+    });
+  });
+}
diff --git a/pkg/polymer_expressions/test/syntax_test.dart b/pkg/polymer_expressions/test/syntax_test.dart
new file mode 100644
index 0000000..791a021
--- /dev/null
+++ b/pkg/polymer_expressions/test/syntax_test.dart
@@ -0,0 +1,87 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:html';
+
+import 'package:polymer_expressions/polymer_expressions.dart';
+import 'package:unittest/unittest.dart';
+import 'package:unittest/html_enhanced_config.dart';
+import 'package:observe/observe.dart';
+import 'package:mdv/mdv.dart' as mdv;
+
+main() {
+  mdv.initialize();
+  useHtmlEnhancedConfiguration();
+
+  group('syntax', () {
+    setUp(() {
+      document.body.nodes.add(new Element.html('''
+          <template id="test" bind>
+            <input id="input" value="{{ firstName }}">
+          </template>'''));
+    });
+
+    tearDown(() {
+      query('#test')..unbindAll()..remove();
+    });
+
+    test('should make two-way bindings to inputs', () {
+      var person = new Person('John', 'Messerly', ['A', 'B', 'C']);
+      query('#test')
+          ..bindingDelegate = new PolymerExpressions()
+          ..model = person;
+      return new Future.delayed(new Duration()).then((_) {
+        InputElement input = query('#input');
+        expect(input.value, 'John');
+        input.focus();
+        input.value = 'Justin';
+        input.blur();
+        var event = new Event('change');
+        // TODO(justin): figure out how to trigger keyboard events to test
+        // two-way bindings
+      });
+    });
+
+  });
+}
+
+class Person extends Object with ChangeNotifierMixin {
+  static const _FIRST_NAME = const Symbol('firstName');
+  static const _LAST_NAME = const Symbol('lastName');
+  static const _ITEMS = const Symbol('items');
+  static const _GET_FULL_NAME = const Symbol('getFullName');
+
+  String _firstName;
+  String _lastName;
+  List<String> _items;
+
+  Person(this._firstName, this._lastName, this._items);
+
+  String get firstName => _firstName;
+
+  void set firstName(String value) {
+    _firstName = value;
+    notifyChange(new PropertyChangeRecord(_FIRST_NAME));
+  }
+
+  String get lastName => _lastName;
+
+  void set lastName(String value) {
+    _lastName = value;
+    notifyChange(new PropertyChangeRecord(_LAST_NAME));
+  }
+
+  String getFullName() => '$_firstName $_lastName';
+
+  List<String> get items => _items;
+
+  void set items(List<String> value) {
+    _items = value;
+    notifyChange(new PropertyChangeRecord(_ITEMS));
+  }
+
+  String toString() => "Person(firstName: $_firstName, lastName: $_lastName)";
+
+}
diff --git a/pkg/polymer_expressions/test/syntax_test.html b/pkg/polymer_expressions/test/syntax_test.html
new file mode 100644
index 0000000..4f494a6
--- /dev/null
+++ b/pkg/polymer_expressions/test/syntax_test.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+
+<html>
+  <head>
+    <title>syntax_test</title>
+  </head>
+
+  <body>
+    <script type="application/dart" src="syntax_test.dart"></script>
+    <script src="packages/browser/dart.js"></script>
+  </body>
+</html>
diff --git a/pkg/polymer_expressions/test/tokenizer_test.dart b/pkg/polymer_expressions/test/tokenizer_test.dart
new file mode 100644
index 0000000..6c40514
--- /dev/null
+++ b/pkg/polymer_expressions/test/tokenizer_test.dart
@@ -0,0 +1,190 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library tokenizer_test;
+
+import 'package:polymer_expressions/tokenizer.dart';
+import 'package:unittest/unittest.dart';
+
+main() {
+
+  group('tokenizer', () {
+
+    test('should tokenize an empty expression', () {
+      expectTokens('', []);
+    });
+
+    test('should tokenize an identifier', () {
+      expectTokens('abc', [t(IDENTIFIER_TOKEN, 'abc')]);
+    });
+
+    test('should tokenize a double quoted String', () {
+      expectTokens('"abc"', [t(STRING_TOKEN, 'abc')]);
+    });
+
+    test('should tokenize a single quoted String', () {
+      expectTokens("'abc'", [t(STRING_TOKEN, 'abc')]);
+    });
+
+    test('should tokenize a String with escaping', () {
+      expectTokens('"a\\b\\\\c\\\'\\""', [t(STRING_TOKEN, 'ab\\c\'"')]);
+    });
+
+    test('should tokenize a dot operator', () {
+      expectTokens('a.b', [
+          t(IDENTIFIER_TOKEN, 'a'),
+          t(DOT_TOKEN, '.'),
+          t(IDENTIFIER_TOKEN, 'b')]);
+    });
+
+    test('should tokenize a unary plus operator', () {
+      expectTokens('+a', [
+          t(OPERATOR_TOKEN, '+'),
+          t(IDENTIFIER_TOKEN, 'a')]);
+    });
+
+    test('should tokenize a binary plus operator', () {
+      expectTokens('a + b', [
+          t(IDENTIFIER_TOKEN, 'a'),
+          t(OPERATOR_TOKEN, '+'),
+          t(IDENTIFIER_TOKEN, 'b')]);
+    });
+
+    test('should tokenize a logical and operator', () {
+      expectTokens('a && b', [
+          t(IDENTIFIER_TOKEN, 'a'),
+          t(OPERATOR_TOKEN, '&&'),
+          t(IDENTIFIER_TOKEN, 'b')]);
+    });
+
+    test('should tokenize an iterate expression with "in" keyword', () {
+      expectTokens('item in items', [
+          t(IDENTIFIER_TOKEN, 'item'),
+          t(KEYWORD_TOKEN, 'in'),
+          t(IDENTIFIER_TOKEN, 'items')]);
+    });
+
+    test('should tokenize keywords', () {
+      expectTokens('in', [t(KEYWORD_TOKEN, 'in')]);
+      expectTokens('this', [t(KEYWORD_TOKEN, 'this')]);
+    });
+
+    test('should tokenize groups', () {
+      expectTokens('a(b)[]{}', [
+          t(IDENTIFIER_TOKEN, 'a'),
+          t(GROUPER_TOKEN, '('),
+          t(IDENTIFIER_TOKEN, 'b'),
+          t(GROUPER_TOKEN, ')'),
+          t(GROUPER_TOKEN, '['),
+          t(GROUPER_TOKEN, ']'),
+          t(GROUPER_TOKEN, '{'),
+          t(GROUPER_TOKEN, '}')]);
+    });
+
+    test('should tokenize argument lists', () {
+      expectTokens('(a, b)', [
+          t(GROUPER_TOKEN, '('),
+          t(IDENTIFIER_TOKEN, 'a'),
+          t(COMMA_TOKEN, ','),
+          t(IDENTIFIER_TOKEN, 'b'),
+          t(GROUPER_TOKEN, ')')]);
+    });
+
+    test('should tokenize maps', () {
+      expectTokens("{'a': b}", [
+          t(GROUPER_TOKEN, '{'),
+          t(STRING_TOKEN, 'a'),
+          t(COLON_TOKEN, ':'),
+          t(IDENTIFIER_TOKEN, 'b'),
+          t(GROUPER_TOKEN, '}')]);
+    });
+
+    test('should tokenize integers', () {
+      expectTokens('123', [t(INTEGER_TOKEN, '123')]);
+      expectTokens('+123', [t(OPERATOR_TOKEN, '+'), t(INTEGER_TOKEN, '123')]);
+      expectTokens('-123', [t(OPERATOR_TOKEN, '-'), t(INTEGER_TOKEN, '123')]);
+    });
+
+    test('should tokenize decimals', () {
+      expectTokens('1.23', [t(DECIMAL_TOKEN, '1.23')]);
+      expectTokens('+1.23', [t(OPERATOR_TOKEN, '+'), t(DECIMAL_TOKEN, '1.23')]);
+      expectTokens('-1.23', [t(OPERATOR_TOKEN, '-'), t(DECIMAL_TOKEN, '1.23')]);
+    });
+
+    test('should tokenize booleans as identifiers', () {
+      expectTokens('true', [t(IDENTIFIER_TOKEN, 'true')]);
+      expectTokens('false', [t(IDENTIFIER_TOKEN, 'false')]);
+    });
+
+  });
+}
+
+TokenMatcher isToken(int index, String text) => new TokenMatcher(index, text);
+
+class TokenMatcher extends Matcher {
+  final int kind;
+  final String value;
+
+  TokenMatcher(this.kind, this.value);
+
+  bool matches(Token t, Map m) => t.kind == kind && t.value == value;
+
+  Description describe(Description d) => d.add('isToken($kind, $value) ');
+}
+
+expectTokens(String s, List<Token> expected) {
+  var tokens = new Tokenizer(s).tokenize();
+  var matchers = expected.map((t) => isToken(t.kind, t.value)).toList();
+  expect(tokens, matchList(matchers), reason: s);
+}
+
+Token t(int kind, String value) => new Token(kind, value);
+
+MatcherList matchList(List matchers) => new MatcherList(matchers);
+
+class MatcherList extends Matcher {
+  final List<Matcher> matchers;
+
+  MatcherList(this.matchers);
+
+  bool matches(List o, Map matchState) {
+    if (o.length != matchers.length) return false;
+    for (int i = 0; i < o.length; i++) {
+      var state = new Map();
+      if (!matchers[i].matches(o[i], state)) {
+        matchState = {
+          'index': i,
+          'value': o[i],
+          'state': state,
+        };
+        return false;
+      }
+    }
+    return true;
+  }
+
+  Description describe(Description d) {
+    d.add('matches all: ');
+    matchers.forEach((m) => m.describe(d));
+  }
+
+  Description describeMismatch(item, Description mismatchDescription,
+      Map matchState, bool verbose) {
+    if (matchState != null) {
+      var index = matchState['index'];
+      var value = matchState['value'];
+      var state = matchState['state'];
+      var matcher = matchers[index];
+      mismatchDescription.add("Mismatch at index $index: ");
+      matcher.describeMismatch(value, mismatchDescription, state, verbose);
+    } else {
+      if (item.length != matchers.length) {
+        mismatchDescription.add('wrong lengths');
+      } else {
+        mismatchDescription.add('was ').addDescriptionOf(item);
+      }
+    }
+  }
+
+}
diff --git a/pkg/scheduled_test/test/metatest.dart b/pkg/scheduled_test/test/metatest.dart
index cc77069..4834b6e 100644
--- a/pkg/scheduled_test/test/metatest.dart
+++ b/pkg/scheduled_test/test/metatest.dart
@@ -200,7 +200,7 @@
 
 /// Special test configuration for use within the child isolates. This hides all
 /// output and reports data back to the parent isolate.
-class _MetaConfiguration extends Configuration {
+class _MetaConfiguration extends SimpleConfiguration {
   final name = "MetaConfiguration";
 
   void logTestCaseMesssage(TestCase testCase, String message) {}
diff --git a/pkg/shadow_dom/lib/shadow_dom.debug.js b/pkg/shadow_dom/lib/shadow_dom.debug.js
index 4ea1ab8..eff86b3 100644
--- a/pkg/shadow_dom/lib/shadow_dom.debug.js
+++ b/pkg/shadow_dom/lib/shadow_dom.debug.js
@@ -3204,4 +3204,528 @@
   };
 })();
 
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+var Platform = {};
+
+/*
+ * Copyright 2012 The Polymer Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style
+ * license that can be found in the LICENSE file.
+ */
+
+/*
+  This is a limited shim for ShadowDOM css styling.
+  https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#styles
+
+  The intention here is to support only the styling features which can be
+  relatively simply implemented. The goal is to allow users to avoid the
+  most obvious pitfalls and do so without compromising performance significantly.
+  For ShadowDOM styling that's not covered here, a set of best practices
+  can be provided that should allow users to accomplish more complex styling.
+
+  The following is a list of specific ShadowDOM styling features and a brief
+  discussion of the approach used to shim.
+
+  Shimmed features:
+
+  * @host: ShadowDOM allows styling of the shadowRoot's host element using the
+  @host rule. To shim this feature, the @host styles are reformatted and
+  prefixed with a given scope name and promoted to a document level stylesheet.
+  For example, given a scope name of .foo, a rule like this:
+
+    @host {
+      * {
+        background: red;
+      }
+    }
+
+  becomes:
+
+    .foo {
+      background: red;
+    }
+
+  * encapsultion: Styles defined within ShadowDOM, apply only to
+  dom inside the ShadowDOM. Polymer uses one of two techniques to imlement
+  this feature.
+
+  By default, rules are prefixed with the host element tag name
+  as a descendant selector. This ensures styling does not leak out of the 'top'
+  of the element's ShadowDOM. For example,
+
+  div {
+      font-weight: bold;
+    }
+
+  becomes:
+
+  x-foo div {
+      font-weight: bold;
+    }
+
+  becomes:
+
+
+  Alternatively, if Platform.ShadowCSS.strictStyling is set to true then
+  selectors are scoped by adding an attribute selector suffix to each
+  simple selector that contains the host element tag name. Each element
+  in the element's ShadowDOM template is also given the scope attribute.
+  Thus, these rules match only elements that have the scope attribute.
+  For example, given a scope name of x-foo, a rule like this:
+
+    div {
+      font-weight: bold;
+    }
+
+  becomes:
+
+    div[x-foo] {
+      font-weight: bold;
+    }
+
+  Note that elements that are dynamically added to a scope must have the scope
+  selector added to them manually.
+
+  * ::pseudo: These rules are converted to rules that take advantage of the
+  pseudo attribute. For example, a shadowRoot like this inside an x-foo
+
+    <div pseudo="x-special">Special</div>
+
+  with a rule like this:
+
+    x-foo::x-special { ... }
+
+  becomes:
+
+    x-foo [pseudo=x-special] { ... }
+
+  Unaddressed ShadowDOM styling features:
+
+  * upper/lower bound encapsulation: Styles which are defined outside a
+  shadowRoot should not cross the ShadowDOM boundary and should not apply
+  inside a shadowRoot.
+
+  This styling behavior is not emulated. Some possible ways to do this that
+  were rejected due to complexity and/or performance concerns include: (1) reset
+  every possible property for every possible selector for a given scope name;
+  (2) re-implement css in javascript.
+
+  As an alternative, users should make sure to use selectors
+  specific to the scope in which they are working.
+
+  * ::distributed: This behavior is not emulated. It's often not necessary
+  to style the contents of a specific insertion point and instead, descendants
+  of the host element can be styled selectively. Users can also create an
+  extra node around an insertion point and style that node's contents
+  via descendent selectors. For example, with a shadowRoot like this:
+
+    <style>
+      content::-webkit-distributed(div) {
+        background: red;
+      }
+    </style>
+    <content></content>
+
+  could become:
+
+    <style>
+      / *@polyfill .content-container div * /
+      content::-webkit-distributed(div) {
+        background: red;
+      }
+    </style>
+    <div class="content-container">
+      <content></content>
+    </div>
+
+  Note the use of @polyfill in the comment above a ShadowDOM specific style
+  declaration. This is a directive to the styling shim to use the selector
+  in comments in lieu of the next selector when running under polyfill.
+*/
+(function(scope) {
+
+var ShadowCSS = {
+  strictStyling: false,
+  registry: {},
+  // Shim styles for a given root associated with a name and extendsName
+  // 1. cache root styles by name
+  // 2. optionally tag root nodes with scope name
+  // 3. shim polyfill directives /* @polyfill */
+  // 4. shim @host and scoping
+  shimStyling: function(root, name, extendsName) {
+    if (root) {
+      // use caching to make working with styles nodes easier and to facilitate
+      // lookup of extendee
+      var def = this.registerDefinition(root, name, extendsName);
+      // find styles and apply shimming...
+      if (this.strictStyling) {
+        this.applyScopeToContent(root, name);
+      }
+      this.shimPolyfillDirectives(def.rootStyles, name);
+      this.applyShimming(def.scopeStyles, name);
+    }
+  },
+  // Shim styles to be placed inside a shadowRoot.
+  // 1. shim polyfill directives /* @polyfill */
+  // 2. shim @host and scoping
+  shimShadowDOMStyling: function(styles, name) {
+    this.shimPolyfillDirectives(styles, name);
+    this.applyShimming(styles, name);
+  },
+  registerDefinition: function(root, name, extendsName) {
+    var def = this.registry[name] = {
+      root: root,
+      name: name,
+      extendsName: extendsName
+    }
+    var styles = root.querySelectorAll('style');
+    styles = styles ? Array.prototype.slice.call(styles, 0) : [];
+    def.rootStyles = styles;
+    def.scopeStyles = def.rootStyles;
+    var extendee = this.registry[def.extendsName];
+    if (extendee) {
+      def.scopeStyles = def.scopeStyles.concat(extendee.scopeStyles);
+    }
+    return def;
+  },
+  applyScopeToContent: function(root, name) {
+    if (root) {
+      // add the name attribute to each node in root.
+      Array.prototype.forEach.call(root.querySelectorAll('*'),
+          function(node) {
+            node.setAttribute(name, '');
+          });
+      // and template contents too
+      Array.prototype.forEach.call(root.querySelectorAll('template'),
+          function(template) {
+            this.applyScopeToContent(template.content, name);
+          },
+          this);
+    }
+  },
+  /*
+   * Process styles to convert native ShadowDOM rules that will trip
+   * up the css parser; we rely on decorating the stylesheet with comments.
+   *
+   * For example, we convert this rule:
+   *
+   * (comment start) @polyfill @host g-menu-item (comment end)
+   * shadow::-webkit-distributed(g-menu-item) {
+   *
+   * to this:
+   *
+   * scopeName g-menu-item {
+   *
+  **/
+  shimPolyfillDirectives: function(styles, name) {
+    if (styles) {
+      Array.prototype.forEach.call(styles, function(s) {
+        s.textContent = this.convertPolyfillDirectives(s.textContent, name);
+      }, this);
+    }
+  },
+  convertPolyfillDirectives: function(cssText, name) {
+    var r = '', l = 0, matches, selector;
+    while (matches = cssPolyfillCommentRe.exec(cssText)) {
+      r += cssText.substring(l, matches.index);
+      // remove end comment delimiter (*/)
+      selector = matches[1].slice(0, -2).replace(hostRe, name);
+      r += this.scopeSelector(selector, name) + '{';
+      l = cssPolyfillCommentRe.lastIndex;
+    }
+    r += cssText.substring(l, cssText.length);
+    return r;
+  },
+  // apply @host and scope shimming
+  applyShimming: function(styles, name) {
+    var cssText = this.shimAtHost(styles, name);
+    cssText += this.shimScoping(styles, name);
+    addCssToDocument(cssText);
+  },
+  // form: @host { .foo { declarations } }
+  // becomes: scopeName.foo { declarations }
+  shimAtHost: function(styles, name) {
+    if (styles) {
+      return this.convertAtHostStyles(styles, name);
+    }
+  },
+  convertAtHostStyles: function(styles, name) {
+    var cssText = stylesToCssText(styles);
+    var r = '', l=0, matches;
+    while (matches = hostRuleRe.exec(cssText)) {
+      r += cssText.substring(l, matches.index);
+      r += this.scopeHostCss(matches[1], name);
+      l = hostRuleRe.lastIndex;
+    }
+    r += cssText.substring(l, cssText.length);
+    var re = new RegExp('^' + name + selectorReSuffix, 'm');
+    var cssText = rulesToCss(this.findAtHostRules(cssToRules(r),
+      re));
+    return cssText;
+  },
+  scopeHostCss: function(cssText, name) {
+    var r = '', matches;
+    while (matches = selectorRe.exec(cssText)) {
+      r += this.scopeHostSelector(matches[1], name) +' ' + matches[2] + '\n\t';
+    }
+    return r;
+  },
+  // supports scopig by name and  [is=name] syntax
+  scopeHostSelector: function(selector, name) {
+    var r = [], parts = selector.split(','), is = '[is=' + name + ']';
+    parts.forEach(function(p) {
+      p = p.trim();
+      // selector: *|:scope -> name
+      if (p.match(hostElementRe)) {
+        p = p.replace(hostElementRe, name + '$1$3, ' + is + '$1$3');
+      // selector: .foo -> name.foo, [bar] -> name[bar]
+      } else if (p.match(hostFixableRe)) {
+        p = name + p + ', ' + is + p;
+      }
+      r.push(p);
+    }, this);
+    return r.join(', ');
+  },
+  // consider styles that do not include component name in the selector to be
+  // unscoped and in need of promotion;
+  // for convenience, also consider keyframe rules this way.
+  findAtHostRules: function(cssRules, matcher) {
+    return Array.prototype.filter.call(cssRules,
+      this.isHostRule.bind(this, matcher));
+  },
+  isHostRule: function(matcher, cssRule) {
+    return (cssRule.selectorText && cssRule.selectorText.match(matcher)) ||
+      (cssRule.cssRules && this.findAtHostRules(cssRule.cssRules, matcher).length) ||
+      (cssRule.type == CSSRule.WEBKIT_KEYFRAMES_RULE);
+  },
+  /* Ensure styles are scoped. Pseudo-scoping takes a rule like:
+   *
+   *  .foo {... }
+   *
+   *  and converts this to
+   *
+   *  scopeName .foo { ... }
+  */
+  shimScoping: function(styles, name) {
+    if (styles) {
+      return this.convertScopedStyles(styles, name);
+    }
+  },
+  convertScopedStyles: function(styles, name) {
+    Array.prototype.forEach.call(styles, function(s) {
+      if (s.parentNode) {
+        s.parentNode.removeChild(s);
+      }
+    });
+    var cssText = stylesToCssText(styles).replace(hostRuleRe, '');
+    cssText = this.convertPseudos(cssText);
+    var rules = cssToRules(cssText);
+    cssText = this.scopeRules(rules, name);
+    return cssText;
+  },
+  convertPseudos: function(cssText) {
+    return cssText.replace(cssPseudoRe, ' [pseudo=$1]');
+  },
+  // change a selector like 'div' to 'name div'
+  scopeRules: function(cssRules, name) {
+    var cssText = '';
+    Array.prototype.forEach.call(cssRules, function(rule) {
+      if (rule.selectorText && (rule.style && rule.style.cssText)) {
+        cssText += this.scopeSelector(rule.selectorText, name,
+          this.strictStyling) + ' {\n\t';
+        cssText += this.propertiesFromRule(rule) + '\n}\n\n';
+      } else if (rule.media) {
+        cssText += '@media ' + rule.media.mediaText + ' {\n';
+        cssText += this.scopeRules(rule.cssRules, name);
+        cssText += '\n}\n\n';
+      } else if (rule.cssText) {
+        cssText += rule.cssText + '\n\n';
+      }
+    }, this);
+    return cssText;
+  },
+  scopeSelector: function(selector, name, strict) {
+    var r = [], parts = selector.split(',');
+    parts.forEach(function(p) {
+      p = p.trim();
+      if (this.selectorNeedsScoping(p, name)) {
+        p = strict ? this.applyStrictSelectorScope(p, name) :
+          this.applySimpleSelectorScope(p, name);
+      }
+      r.push(p);
+    }, this);
+    return r.join(', ');
+  },
+  selectorNeedsScoping: function(selector, name) {
+    var matchScope = '(' + name + '|\\[is=' + name + '\\])';
+    var re = new RegExp('^' + matchScope + selectorReSuffix, 'm');
+    return !selector.match(re);
+  },
+  // scope via name and [is=name]
+  applySimpleSelectorScope: function(selector, name) {
+    return name + ' ' + selector + ', ' + '[is=' + name + '] ' + selector;
+  },
+  // return a selector with [name] suffix on each simple selector
+  // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name]
+  applyStrictSelectorScope: function(selector, name) {
+    var splits = [' ', '>', '+', '~'],
+      scoped = selector,
+      attrName = '[' + name + ']';
+    splits.forEach(function(sep) {
+      var parts = scoped.split(sep);
+      scoped = parts.map(function(p) {
+        var t = p.trim();
+        if (t && (splits.indexOf(t) < 0) && (t.indexOf(attrName) < 0)) {
+          p = t.replace(/([^:]*)(:*)(.*)/, '$1' + attrName + '$2$3')
+        }
+        return p;
+      }).join(sep);
+    });
+    return scoped;
+  },
+  propertiesFromRule: function(rule) {
+    var properties = rule.style.cssText;
+    // TODO(sorvell): Chrome cssom incorrectly removes quotes from the content
+    // property. (https://code.google.com/p/chromium/issues/detail?id=247231)
+    if (rule.style.content && !rule.style.content.match(/['"]+/)) {
+      properties = 'content: \'' + rule.style.content + '\';\n' +
+        rule.style.cssText.replace(/content:[^;]*;/g, '');
+    }
+    return properties;
+  }
+};
+
+var hostRuleRe = /@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,
+    selectorRe = /([^{]*)({[\s\S]*?})/gim,
+    hostElementRe = /(.*)((?:\*)|(?:\:scope))(.*)/,
+    hostFixableRe = /^[.\[:]/,
+    cssCommentRe = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,
+    cssPolyfillCommentRe = /\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,
+    cssPseudoRe = /::(x-[^\s{,(]*)/gim,
+    selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$',
+    hostRe = /@host/gim;
+
+function stylesToCssText(styles, preserveComments) {
+  var cssText = '';
+  Array.prototype.forEach.call(styles, function(s) {
+    cssText += s.textContent + '\n\n';
+  });
+  // strip comments for easier processing
+  if (!preserveComments) {
+    cssText = cssText.replace(cssCommentRe, '');
+  }
+  return cssText;
+}
+
+function cssToRules(cssText) {
+  var style = document.createElement('style');
+  style.textContent = cssText;
+  document.head.appendChild(style);
+  var rules = style.sheet.cssRules;
+  style.parentNode.removeChild(style);
+  return rules;
+}
+
+function rulesToCss(cssRules) {
+  for (var i=0, css=[]; i < cssRules.length; i++) {
+    css.push(cssRules[i].cssText);
+  }
+  return css.join('\n\n');
+}
+
+function addCssToDocument(cssText) {
+  if (cssText) {
+    getSheet().appendChild(document.createTextNode(cssText));
+  }
+}
+
+var sheet;
+function getSheet() {
+  if (!sheet) {
+    sheet = document.createElement("style");
+    sheet.setAttribute('ShadowCSSShim', '');
+  }
+  return sheet;
+}
+
+// add polyfill stylesheet to document
+if (window.ShadowDOMPolyfill) {
+  addCssToDocument('style { display: none !important; }\n');
+  var head = document.querySelector('head');
+  head.insertBefore(getSheet(), head.childNodes[0]);
+}
+
+// exports
+scope.ShadowCSS = ShadowCSS;
+
+})(window.Platform);
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+(function(scope) {
+  // TODO(terry): Remove shimShadowDOMStyling2 until wrap/unwrap from a
+  //              dart:html Element to a JS DOM node is available.
+  /**
+   * Given the content of a STYLE tag and the name of a component shim the CSS
+   * and return the new scoped CSS to replace the STYLE's content.  The content
+   * is replaced in Dart's implementation of PolymerElement.
+   */
+  function shimShadowDOMStyling2(styleContent, name) {
+    if (window.ShadowDOMPolyfill) {
+      var content = this.convertPolyfillDirectives(styleContent, name);
+
+      // applyShimming calls shimAtHost and shipScoping
+      // shimAtHost code:
+      var r = '', l=0, matches;
+      while (matches = hostRuleRe.exec(content)) {
+        r += content.substring(l, matches.index);
+        r += this.scopeHostCss(matches[1], name);
+        l = hostRuleRe.lastIndex;
+      }
+      r += content.substring(l, content.length);
+      var re = new RegExp('^' + name + selectorReSuffix, 'm');
+      var atHostCssText = rulesToCss(this.findAtHostRules(cssToRules(r), re));
+
+      // shimScoping code:
+      // strip comments for easier processing
+      content = content.replace(cssCommentRe, '');
+
+      content = this.convertPseudos(content);
+      var rules = cssToRules(content);
+      var cssText = this.scopeRules(rules, name);
+
+      return atHostCssText + cssText;
+    }
+  }
+
+  // Minimal copied code from ShadowCSS, that is not exposed in
+  // PlatForm.ShadowCSS (local code).
+  var hostRuleRe = /@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,
+    cssCommentRe = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,
+    selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$';
+
+  function cssToRules(cssText) {
+    var style = document.createElement('style');
+    style.textContent = cssText;
+    document.head.appendChild(style);
+    var rules = style.sheet.cssRules;
+    style.parentNode.removeChild(style);
+    return rules;
+  }
+
+  function rulesToCss(cssRules) {
+    for (var i=0, css=[]; i < cssRules.length; i++) {
+      css.push(cssRules[i].cssText);
+    }
+    return css.join('\n\n');
+  }
+
+  // exports
+  scope.ShadowCSS.shimShadowDOMStyling2 = shimShadowDOMStyling2;
+})(window.Platform);
+
 }
\ No newline at end of file
diff --git a/pkg/shadow_dom/lib/shadow_dom.min.js b/pkg/shadow_dom/lib/shadow_dom.min.js
index e9d570e..888ec35 100644
--- a/pkg/shadow_dom/lib/shadow_dom.min.js
+++ b/pkg/shadow_dom/lib/shadow_dom.min.js
@@ -1,2 +1,2 @@
-if(!HTMLElement.prototype.createShadowRoot&&!HTMLElement.prototype.webkitCreateShadowRoot||window.__forceShadowDomPolyfill){(function(){Element.prototype.webkitCreateShadowRoot&&(Element.prototype.webkitCreateShadowRoot=function(){return window.ShadowDOMPolyfill.wrapIfNeeded(this).createShadowRoot()})})();var SideTable;"undefined"!=typeof WeakMap&&0>navigator.userAgent.indexOf("Firefox/")?SideTable=WeakMap:function(){var e=Object.defineProperty,t=Object.hasOwnProperty,n=(new Date).getTime()%1e9;SideTable=function(){this.name="__st"+(1e9*Math.random()>>>0)+(n++ +"__")},SideTable.prototype={set:function(t,n){e(t,this.name,{value:n,writable:!0})},get:function(e){return t.call(e,this.name)?e[this.name]:void 0},"delete":function(e){this.set(e,void 0)}}}();var ShadowDOMPolyfill={};(function(e){"use strict";function t(e){if(!e)throw new Error("Assertion failed")}function n(e,t){return Object.getOwnPropertyNames(t).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function r(e,t){return Object.getOwnPropertyNames(t).forEach(function(n){switch(n){case"arguments":case"caller":case"length":case"name":case"prototype":case"toString":return}Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function i(e){var t=e.__proto__||Object.getPrototypeOf(e),n=M.get(t);if(n)return n;var r=i(t),o=p(r);return u(t,o,e),o}function o(e,t){l(e,t,!0)}function a(e,t){l(t,e,!1)}function l(e,t,n){Object.getOwnPropertyNames(e).forEach(function(r){if(!(r in t)){L&&e.__lookupGetter__(r);var i;try{i=Object.getOwnPropertyDescriptor(e,r)}catch(o){i=C}var a,l;if(n&&"function"==typeof i.value)return t[r]=function(){return this.impl[r].apply(this.impl,arguments)},void 0;a=function(){return this.impl[r]},(i.writable||i.set)&&(l=function(e){this.impl[r]=e}),Object.defineProperty(t,r,{get:a,set:l,configurable:i.configurable,enumerable:i.enumerable})}})}function s(e,t,n){var i=e.prototype;u(i,t,n),r(t,e)}function u(e,n,r){var i=n.prototype;t(void 0===M.get(e)),M.set(e,n),o(e,i),r&&a(i,r)}function c(e,t){return M.get(t.prototype)===e}function d(e){var t=Object.getPrototypeOf(e),n=i(t),r=p(n);return u(t,r,e),r}function p(e){function t(t){e.call(this,t)}return t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t._ShadowDOMPolyfill$isGeneratedWrapper=!0,t}function h(e){return e instanceof N.EventTarget||e instanceof N.Event||e instanceof N.DOMImplementation}function f(e){return e instanceof D||e instanceof O||e instanceof _||e instanceof H}function m(e){if(null===e)return null;t(f(e));var n=S.get(e);if(!n){var r=i(e);n=new r(e),S.set(e,n)}return n}function g(e){return null===e?null:(t(h(e)),e.impl)}function w(e){return e&&h(e)?g(e):e}function v(e){return e&&!h(e)?m(e):e}function E(e,n){null!==n&&(t(f(e)),t(void 0===n||h(n)),S.set(e,n))}function y(e,t,n){Object.defineProperty(e.prototype,t,{get:n,configurable:!0,enumerable:!0})}function T(e,t){y(e,t,function(){return m(this.impl[t])})}function b(e,t){e.forEach(function(e){t.forEach(function(t){e.prototype[t]=function(){var e=m(this);return e[t].apply(e,arguments)}})})}var S=new SideTable,M=new SideTable,N=Object.create(null);Object.getOwnPropertyNames(window);var L=/Firefox/.test(navigator.userAgent),C={get:function(){},set:function(){},configurable:!0,enumerable:!0},H=DOMImplementation,O=Event,D=Node,_=Window;e.assert=t,e.defineGetter=y,e.defineWrapGetter=T,e.forwardMethodsToWrapper=b,e.isWrapper=h,e.isWrapperFor=c,e.mixin=n,e.registerObject=d,e.registerWrapper=s,e.rewrap=E,e.unwrap=g,e.unwrapIfNeeded=w,e.wrap=m,e.wrapIfNeeded=v,e.wrappers=N})(this.ShadowDOMPolyfill),function(e){"use strict";function t(e){return e instanceof I.ShadowRoot}function n(e){var t=e.localName;return"content"===t||"shadow"===t}function r(e){return!!e.shadowRoot}function i(e){var t;return e.parentNode||(t=e.defaultView)&&R(t)||null}function o(o,a,l){if(l.length)return l.shift();if(t(o))return o.insertionParent||e.getHostForShadowRoot(o);var s=e.eventParentsTable.get(o);if(s){for(var u=1;s.length>u;u++)l[u-1]=s[u];return s[0]}if(a&&n(o)){var c=o.parentNode;if(c&&r(c))for(var d=e.getShadowTrees(c),p=a.insertionParent,u=0;d.length>u;u++)if(d[u].contains(p))return p}return i(o)}function a(e){for(var r=[],i=e,a=[],s=[];i;){var u=null;if(n(i)){u=l(r);var c=r[r.length-1]||i;r.push(c)}else r.length||r.push(i);var d=r[r.length-1];a.push({target:d,currentTarget:i}),t(i)&&r.pop(),i=o(i,u,s)}return a}function l(e){for(var t=e.length-1;t>=0;t--)if(!n(e[t]))return e[t];return null}function s(r,i){for(var a=[];r;){for(var s=[],c=i,p=void 0;c;){var h=null;if(s.length){if(n(c)&&(h=l(s),u(p))){var f=s[s.length-1];s.push(f)}}else s.push(c);if(d(c,r))return s[s.length-1];t(c)&&s.pop(),p=c,c=o(c,h,a)}r=t(r)?e.getHostForShadowRoot(r):r.parentNode}}function u(e){return e.insertionParent}function c(e){for(var t;t=e.parentNode;)e=t;return e}function d(e,t){return c(e)===c(t)}function p(e){switch(e){case"DOMAttrModified":case"DOMAttributeNameChanged":case"DOMCharacterDataModified":case"DOMElementNameChanged":case"DOMNodeInserted":case"DOMNodeInsertedIntoDocument":case"DOMNodeRemoved":case"DOMNodeRemovedFromDocument":case"DOMSubtreeModified":return!0}return!1}function h(t){if(!F.get(t)){F.set(t,!0),p(t.type)||e.renderAllPending();var n=R(t.target),r=R(t);return f(r,n)}}function f(e,t){var n=a(t);return"load"===e.type&&2===n.length&&n[0].target instanceof I.Document&&n.shift(),m(e,n)&&g(e,n)&&w(e,n),k.set(e,y.NONE),W.set(e,null),e.defaultPrevented}function m(e,t){for(var n,r=t.length-1;r>0;r--){var i=t[r].target,o=t[r].currentTarget;if(i!==o&&(n=y.CAPTURING_PHASE,!v(t[r],e,n)))return!1}return!0}function g(e,t){var n=y.AT_TARGET;return v(t[0],e,n)}function w(e,t){for(var n,r=e.bubbles,i=1;t.length>i;i++){var o=t[i].target,a=t[i].currentTarget;if(o===a)n=y.AT_TARGET;else{if(!r||q.get(e))continue;n=y.BUBBLING_PHASE}if(!v(t[i],e,n))return}}function v(e,t,n){var r=e.target,i=e.currentTarget,o=A.get(i);if(!o)return!0;if("relatedTarget"in t){var a=x(t),l=R(a.relatedTarget),u=s(i,l);if(u===r)return!0;B.set(t,u)}k.set(t,n);var c=t.type,d=!1;j.set(t,r),W.set(t,i);for(var p=0;o.length>p;p++){var h=o[p];if(h.removed)d=!0;else if(!(h.type!==c||!h.capture&&n===y.CAPTURING_PHASE||h.capture&&n===y.BUBBLING_PHASE))try{if("function"==typeof h.handler?h.handler.call(i,t):h.handler.handleEvent(t),q.get(t))return!1}catch(f){window.onerror?window.onerror(f.message):console.error(f)}}if(d){var m=o.slice();o.length=0;for(var p=0;m.length>p;p++)m[p].removed||o.push(m[p])}return!G.get(t)}function E(e,t,n){this.type=e,this.handler=t,this.capture=Boolean(n)}function y(e,t){return e instanceof U?(this.impl=e,void 0):R(M(U,"Event",e,t))}function T(e){return e&&e.relatedTarget?Object.create(e,{relatedTarget:{value:x(e.relatedTarget)}}):e}function b(e,t,n){var r=window[e],i=function(t,n){return t instanceof r?(this.impl=t,void 0):R(M(r,e,t,n))};return i.prototype=Object.create(t.prototype),n&&_(i.prototype,n),r&&P(r,i,document.createEvent(e)),i}function S(e,t){return function(){arguments[t]=x(arguments[t]);var n=x(this);n[e].apply(n,arguments)}}function M(e,t,n,r){if(et)return new e(n,T(r));var i=x(document.createEvent(t)),o=J[t],a=[n];return Object.keys(o).forEach(function(e){var t=null!=r&&e in r?r[e]:o[e];"relatedTarget"===e&&(t=x(t)),a.push(t)}),i["init"+t].apply(i,a),i}function N(e){return"function"==typeof e?!0:e&&e.handleEvent}function L(e){this.impl=e}function C(t){return t instanceof I.ShadowRoot&&(t=e.getHostForShadowRoot(t)),x(t)}function H(e){D(e,rt)}function O(t,n,r,i){e.renderAllPending();for(var o=R(it.call(n.impl,r,i)),l=a(o,this),s=0;l.length>s;s++){var u=l[s];if(u.currentTarget===t)return u.target}return null}var D=e.forwardMethodsToWrapper,_=e.mixin,P=e.registerWrapper,x=e.unwrap,R=e.wrap,I=e.wrappers;new SideTable;var A=new SideTable,F=new SideTable,j=new SideTable,W=new SideTable,B=new SideTable,k=new SideTable,G=new SideTable,q=new SideTable;E.prototype={equals:function(e){return this.handler===e.handler&&this.type===e.type&&this.capture===e.capture},get removed(){return null===this.handler},remove:function(){this.handler=null}};var U=window.Event;y.prototype={get target(){return j.get(this)},get currentTarget(){return W.get(this)},get eventPhase(){return k.get(this)},stopPropagation:function(){G.set(this,!0)},stopImmediatePropagation:function(){G.set(this,!0),q.set(this,!0)}},P(U,y,document.createEvent("Event"));var V=b("UIEvent",y),K=b("CustomEvent",y),$={get relatedTarget(){return B.get(this)||R(x(this).relatedTarget)}},z=_({initMouseEvent:S("initMouseEvent",14)},$),X=_({initFocusEvent:S("initFocusEvent",5)},$),Y=b("MouseEvent",V,z),Q=b("FocusEvent",V,X),Z=b("MutationEvent",y,{initMutationEvent:S("initMutationEvent",3),get relatedNode(){return R(this.impl.relatedNode)}}),J=Object.create(null),et=function(){try{new window.MouseEvent("click")}catch(e){return!1}return!0}();if(!et){var tt=function(e,t,n){if(n){var r=J[n];t=_(_({},r),t)}J[e]=t};tt("Event",{bubbles:!1,cancelable:!1}),tt("CustomEvent",{detail:null},"Event"),tt("UIEvent",{view:null,detail:0},"Event"),tt("MouseEvent",{screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null},"UIEvent"),tt("FocusEvent",{relatedTarget:null},"UIEvent")}var nt=window.EventTarget,rt=["addEventListener","removeEventListener","dispatchEvent"];[Element,Window,Document].forEach(function(e){var t=e.prototype;rt.forEach(function(e){Object.defineProperty(t,e+"_",{value:t[e]})})}),L.prototype={addEventListener:function(e,t,n){if(N(t)){var r=new E(e,t,n),i=A.get(this);if(i){for(var o=0;i.length>o;o++)if(r.equals(i[o]))return}else i=[],A.set(this,i);i.push(r);var a=C(this);a.addEventListener_(e,h,!0)}},removeEventListener:function(e,t,n){n=Boolean(n);var r=A.get(this);if(r){for(var i=0,o=!1,a=0;r.length>a;a++)r[a].type===e&&r[a].capture===n&&(i++,r[a].handler===t&&(o=!0,r[a].remove()));if(o&&1===i){var l=C(this);l.removeEventListener_(e,h,!0)}}},dispatchEvent:function(t){e.renderAllPending();var n=C(this);return n.dispatchEvent_(x(t))}},nt&&P(nt,L);var it=document.elementFromPoint;e.adjustRelatedTarget=s,e.elementFromPoint=O,e.wrapEventTargetMethods=H,e.wrappers.CustomEvent=K,e.wrappers.Event=y,e.wrappers.EventTarget=L,e.wrappers.FocusEvent=Q,e.wrappers.MouseEvent=Y,e.wrappers.MutationEvent=Z,e.wrappers.UIEvent=V}(this.ShadowDOMPolyfill),function(e){"use strict";function t(e,t){Object.defineProperty(e,t,{enumerable:!1})}function n(){this.length=0,t(this,"length")}function r(e){if(null==e)return e;for(var t=new n,r=0,i=e.length;i>r;r++)t[r]=o(e[r]);return t.length=i,t}function i(e,t){e.prototype[t]=function(){return r(this.impl[t].apply(this.impl,arguments))}}var o=e.wrap;n.prototype={item:function(e){return this[e]}},t(n.prototype,"item"),e.wrappers.NodeList=n,e.addWrapNodeListMethod=i,e.wrapNodeList=r}(this.ShadowDOMPolyfill),function(e){"use strict";function t(e){s(e instanceof o)}function n(e,t,n,r){if(e.nodeType!==o.DOCUMENT_FRAGMENT_NODE)return e.parentNode&&e.parentNode.removeChild(e),e.parentNode_=t,e.previousSibling_=n,e.nextSibling_=r,n&&(n.nextSibling_=e),r&&(r.previousSibling_=e),[e];for(var i,a=[];i=e.firstChild;)e.removeChild(i),a.push(i),i.parentNode_=t;for(var l=0;a.length>l;l++)a[l].previousSibling_=a[l-1]||n,a[l].nextSibling_=a[l+1]||r;return n&&(n.nextSibling_=a[0]),r&&(r.previousSibling_=a[a.length-1]),a}function r(e){if(1===e.length)return d(e[0]);for(var t=d(document.createDocumentFragment()),n=0;e.length>n;n++)t.appendChild(d(e[n]));return t}function i(e){for(var t=e.firstChild;t;){s(t.parentNode===e);var n=t.nextSibling,r=d(t),i=r.parentNode;i&&w.call(i,r),t.previousSibling_=t.nextSibling_=t.parentNode_=null,t=n}e.firstChild_=e.lastChild_=null}function o(e){s(e instanceof h),a.call(this,e),this.parentNode_=void 0,this.firstChild_=void 0,this.lastChild_=void 0,this.nextSibling_=void 0,this.previousSibling_=void 0}var a=e.wrappers.EventTarget,l=e.wrappers.NodeList;e.defineWrapGetter;var s=e.assert,u=e.mixin,c=e.registerWrapper,d=e.unwrap,p=e.wrap,h=window.Node,f=h.prototype.appendChild,m=h.prototype.insertBefore,g=h.prototype.replaceChild,w=h.prototype.removeChild,v=h.prototype.compareDocumentPosition;o.prototype=Object.create(a.prototype),u(o.prototype,{appendChild:function(e){t(e),this.invalidateShadowRenderer();var i=this.lastChild,o=null,a=n(e,this,i,o);return this.lastChild_=a[a.length-1],i||(this.firstChild_=a[0]),f.call(this.impl,r(a)),e},insertBefore:function(e,i){if(!i)return this.appendChild(e);t(e),t(i),s(i.parentNode===this),this.invalidateShadowRenderer();var o=i.previousSibling,a=i,l=n(e,this,o,a);this.firstChild===i&&(this.firstChild_=l[0]);var u=d(i),c=u.parentNode;return c&&m.call(c,r(l),u),e},removeChild:function(e){if(t(e),e.parentNode!==this)throw new Error("NotFoundError");this.invalidateShadowRenderer();var n=this.firstChild,r=this.lastChild,i=e.nextSibling,o=e.previousSibling,a=d(e),l=a.parentNode;return l&&w.call(l,a),n===e&&(this.firstChild_=i),r===e&&(this.lastChild_=o),o&&(o.nextSibling_=i),i&&(i.previousSibling_=o),e.previousSibling_=e.nextSibling_=e.parentNode_=null,e},replaceChild:function(e,i){if(t(e),t(i),i.parentNode!==this)throw new Error("NotFoundError");this.invalidateShadowRenderer();var o=i.previousSibling,a=i.nextSibling;a===e&&(a=e.nextSibling);var l=n(e,this,o,a);this.firstChild===i&&(this.firstChild_=l[0]),this.lastChild===i&&(this.lastChild_=l[l.length-1]),i.previousSibling_=null,i.nextSibling_=null,i.parentNode_=null;var s=d(i);return s.parentNode&&g.call(s.parentNode,r(l),s),i},hasChildNodes:function(){return null===this.firstChild},get parentNode(){return void 0!==this.parentNode_?this.parentNode_:p(this.impl.parentNode)},get firstChild(){return void 0!==this.firstChild_?this.firstChild_:p(this.impl.firstChild)},get lastChild(){return void 0!==this.lastChild_?this.lastChild_:p(this.impl.lastChild)},get nextSibling(){return void 0!==this.nextSibling_?this.nextSibling_:p(this.impl.nextSibling)},get previousSibling(){return void 0!==this.previousSibling_?this.previousSibling_:p(this.impl.previousSibling)},get parentElement(){for(var e=this.parentNode;e&&e.nodeType!==o.ELEMENT_NODE;)e=e.parentNode;return e},get textContent(){for(var e="",t=this.firstChild;t;t=t.nextSibling)e+=t.textContent;return e},set textContent(e){if(i(this),this.invalidateShadowRenderer(),""!==e){var t=this.impl.ownerDocument.createTextNode(e);this.appendChild(t)}},get childNodes(){for(var e=new l,t=0,n=this.firstChild;n;n=n.nextSibling)e[t++]=n;return e.length=t,e},cloneNode:function(e){if(!this.invalidateShadowRenderer())return p(this.impl.cloneNode(e));var t=p(this.impl.cloneNode(!1));if(e)for(var n=this.firstChild;n;n=n.nextSibling)t.appendChild(n.cloneNode(!0));return t},contains:function(e){if(!e)return!1;if(e===this)return!0;var t=e.parentNode;return t?this.contains(t):!1},compareDocumentPosition:function(e){return v.call(this.impl,d(e))},get ownerDocument(){return e.renderAllPending(),p(this.impl.ownerDocument)}}),c(h,o,document.createDocumentFragment()),delete o.prototype.querySelector,delete o.prototype.querySelectorAll,o.prototype=u(Object.create(a.prototype),o.prototype),e.wrappers.Node=o}(this.ShadowDOMPolyfill),function(e){"use strict";function t(e,n){for(var r,i=e.firstElementChild;i;){if(i.matches(n))return i;if(r=t(i,n))return r;i=i.nextElementSibling}return null}function n(e,t,r){for(var i=e.firstElementChild;i;)i.matches(t)&&(r[r.length++]=i),n(i,t,r),i=i.nextElementSibling;return r}var r={querySelector:function(e){return t(this,e)},querySelectorAll:function(e){return n(this,e,new NodeList)}},i={getElementsByTagName:function(e){return this.querySelectorAll(e)},getElementsByClassName:function(e){return this.querySelectorAll("."+e)},getElementsByTagNameNS:function(e,t){if("*"===e)return this.getElementsByTagName(t);for(var n=new NodeList,r=this.getElementsByTagName(t),i=0,o=0;r.length>i;i++)r[i].namespaceURI===e&&(n[o++]=r[i]);return n.length=o,n}};e.GetElementsByInterface=i,e.SelectorsInterface=r}(this.ShadowDOMPolyfill),function(e){"use strict";function t(e){for(;e&&e.nodeType!==Node.ELEMENT_NODE;)e=e.nextSibling;return e}function n(e){for(;e&&e.nodeType!==Node.ELEMENT_NODE;)e=e.previousSibling;return e}var r=e.wrappers.NodeList,i={get firstElementChild(){return t(this.firstChild)},get lastElementChild(){return n(this.lastChild)},get childElementCount(){for(var e=0,t=this.firstElementChild;t;t=t.nextElementSibling)e++;return e},get children(){for(var e=new r,t=0,n=this.firstElementChild;n;n=n.nextElementSibling)e[t++]=n;return e.length=t,e}},o={get nextElementSibling(){return t(this.nextSibling)},get previousElementSibling(){return n(this.nextSibling)}};e.ChildNodeInterface=o,e.ParentNodeInterface=i}(this.ShadowDOMPolyfill),function(e){"use strict";function t(e){r.call(this,e)}var n=e.ChildNodeInterface,r=e.wrappers.Node,i=e.mixin,o=e.registerWrapper,a=window.CharacterData;t.prototype=Object.create(r.prototype),i(t.prototype,{get textContent(){return this.data},set textContent(e){this.data=e}}),i(t.prototype,n),o(a,t,document.createTextNode("")),e.wrappers.CharacterData=t}(this.ShadowDOMPolyfill),function(e){"use strict";function t(e){i.call(this,e)}var n=e.ChildNodeInterface,r=e.GetElementsByInterface,i=e.wrappers.Node,o=e.ParentNodeInterface,a=e.SelectorsInterface;e.addWrapNodeListMethod;var l=e.mixin,s=e.registerWrapper,u=e.wrappers,c=new SideTable,d=window.Element,p=d.prototype.matches||d.prototype.mozMatchesSelector||d.prototype.msMatchesSelector||d.prototype.webkitMatchesSelector;t.prototype=Object.create(i.prototype),l(t.prototype,{createShadowRoot:function(){var t=new u.ShadowRoot(this);return c.set(this,t),e.getRendererForHost(this),this.invalidateShadowRenderer(!0),t},get shadowRoot(){return c.get(this)||null},setAttribute:function(e,t){this.impl.setAttribute(e,t),this.invalidateShadowRenderer()},matches:function(e){return p.call(this.impl,e)}}),l(t.prototype,n),l(t.prototype,r),l(t.prototype,o),l(t.prototype,a),s(d,t),e.wrappers.Element=t}(this.ShadowDOMPolyfill),function(e){"use strict";function t(e){switch(e){case"&":return"&amp;";case"<":return"&lt;";case'"':return"&quot;"}}function n(e){return e.replace(m,t)}function r(e){switch(e.nodeType){case Node.ELEMENT_NODE:for(var t,r=e.tagName.toLowerCase(),o="<"+r,a=e.attributes,l=0;t=a[l];l++)o+=" "+t.name+'="'+n(t.value)+'"';return o+=">",g[r]?o:o+i(e)+"</"+r+">";case Node.TEXT_NODE:return n(e.nodeValue);case Node.COMMENT_NODE:return"<!--"+n(e.nodeValue)+"-->";default:throw console.error(e),new Error("not implemented")}}function i(e){for(var t="",n=e.firstChild;n;n=n.nextSibling)t+=r(n);return t}function o(e,t,n){var r=n||"div";e.textContent="";var i=h(e.ownerDocument.createElement(r));i.innerHTML=t;for(var o;o=i.firstChild;)e.appendChild(f(o))}function a(e){u.call(this,e)}function l(t){c(a,t,function(){return e.renderAllPending(),this.impl[t]})}function s(t){Object.defineProperty(a.prototype,t,{value:function(){return e.renderAllPending(),this.impl[t].apply(this.impl,arguments)},configurable:!0,enumerable:!0})}var u=e.wrappers.Element,c=e.defineGetter,d=e.mixin,p=e.registerWrapper,h=e.unwrap,f=e.wrap,m=/&|<|"/g,g={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},w=window.HTMLElement;a.prototype=Object.create(u.prototype),d(a.prototype,{get innerHTML(){return i(this)},set innerHTML(e){o(this,e,this.tagName)},get outerHTML(){return r(this)},set outerHTML(e){if(this.invalidateShadowRenderer())throw new Error("not implemented");this.impl.outerHTML=e}}),["clientHeight","clientLeft","clientTop","clientWidth","offsetHeight","offsetLeft","offsetTop","offsetWidth","scrollHeight","scrollLeft","scrollTop","scrollWidth"].forEach(l),["getBoundingClientRect","getClientRects","scrollIntoView"].forEach(s),p(w,a,document.createElement("b")),e.wrappers.HTMLElement=a,e.getInnerHTML=i,e.setInnerHTML=o}(this.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=e.mixin,i=e.registerWrapper,o=window.HTMLContentElement;t.prototype=Object.create(n.prototype),r(t.prototype,{get select(){return this.getAttribute("select")},set select(e){this.setAttribute("select",e)},setAttribute:function(e,t){n.prototype.setAttribute.call(this,e,t),"select"===String(e).toLowerCase()&&this.invalidateShadowRenderer(!0)}}),o&&i(o,t),e.wrappers.HTMLContentElement=t}(this.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e),this.olderShadowRoot_=null}var n=e.wrappers.HTMLElement,r=e.mixin,i=e.registerWrapper,o=window.HTMLShadowElement;t.prototype=Object.create(n.prototype),r(t.prototype,{get olderShadowRoot(){return this.olderShadowRoot_},invalidateShadowRenderer:function(){n.prototype.invalidateShadowRenderer.call(this,!0)}}),o&&i(o,t),e.wrappers.HTMLShadowElement=t}(this.ShadowDOMPolyfill),function(e){"use strict";function t(e){if(!e.defaultView)return e;var t=d.get(e);if(!t){for(t=e.implementation.createHTMLDocument("");t.lastChild;)t.removeChild(t.lastChild);d.set(e,t)}return t}function n(e){for(var n,r=t(e.ownerDocument),i=r.createDocumentFragment();n=e.firstChild;)i.appendChild(n);return i}function r(e){i.call(this,e)}var i=e.wrappers.HTMLElement,o=e.getInnerHTML,a=e.mixin,l=e.registerWrapper,s=e.setInnerHTML,u=e.wrap,c=new SideTable,d=new SideTable,p=window.HTMLTemplateElement;r.prototype=Object.create(i.prototype),a(r.prototype,{get content(){if(p)return u(this.impl.content);var e=c.get(this);return e||(e=n(this),c.set(this,e)),e},get innerHTML(){return o(this.content)},set innerHTML(e){s(this.content,e),this.invalidateShadowRenderer()}}),p&&l(p,r),e.wrappers.HTMLTemplateElement=r}(this.ShadowDOMPolyfill),function(e){"use strict";function t(e){switch(e.localName){case"content":return new n(e);case"shadow":return new i(e);case"template":return new o(e)}r.call(this,e)}var n=e.wrappers.HTMLContentElement,r=e.wrappers.HTMLElement,i=e.wrappers.HTMLShadowElement,o=e.wrappers.HTMLTemplateElement;e.mixin;var a=e.registerWrapper,l=window.HTMLUnknownElement;t.prototype=Object.create(r.prototype),a(l,t),e.wrappers.HTMLUnknownElement=t}(this.ShadowDOMPolyfill),function(e){"use strict";var t=e.GetElementsByInterface,n=e.ParentNodeInterface,r=e.SelectorsInterface,i=e.mixin,o=e.registerObject,a=o(document.createDocumentFragment());i(a.prototype,n),i(a.prototype,r),i(a.prototype,t);var l=o(document.createTextNode("")),s=o(document.createComment(""));e.wrappers.Comment=s,e.wrappers.DocumentFragment=a,e.wrappers.Text=l}(this.ShadowDOMPolyfill),function(e){"use strict";function t(t){var r=s(t.impl.ownerDocument.createDocumentFragment());n.call(this,r),a(r,this);var i=t.shadowRoot;e.nextOlderShadowTreeTable.set(this,i),u.set(this,t)}var n=e.wrappers.DocumentFragment,r=e.elementFromPoint,i=e.getInnerHTML,o=e.mixin,a=e.rewrap,l=e.setInnerHTML,s=e.unwrap,u=new SideTable;t.prototype=Object.create(n.prototype),o(t.prototype,{get innerHTML(){return i(this)},set innerHTML(e){l(this,e),this.invalidateShadowRenderer()},invalidateShadowRenderer:function(){return u.get(this).invalidateShadowRenderer()},elementFromPoint:function(e,t){return r(this,this.ownerDocument,e,t)},getElementById:function(e){return this.querySelector("#"+e)}}),e.wrappers.ShadowRoot=t,e.getHostForShadowRoot=function(e){return u.get(e)}}(this.ShadowDOMPolyfill),function(e){"use strict";function t(e){e.previousSibling_=e.previousSibling,e.nextSibling_=e.nextSibling,e.parentNode_=e.parentNode}function n(e){e.firstChild_=e.firstChild,e.lastChild_=e.lastChild}function r(e){_(e instanceof D);for(var r=e.firstChild;r;r=r.nextSibling)t(r);n(e)}function i(e){var t=x(e);r(e),t.textContent=""}function o(e,n){var i=x(e),o=x(n);o.nodeType===D.DOCUMENT_FRAGMENT_NODE?r(n):(l(n),t(n)),e.lastChild_=e.lastChild,e.lastChild===e.firstChild&&(e.firstChild_=e.firstChild);var a=R(i.lastChild);a&&(a.nextSibling_=a.nextSibling),i.appendChild(o)}function a(e,n){var r=x(e),i=x(n);t(n),n.previousSibling&&(n.previousSibling.nextSibling_=n),n.nextSibling&&(n.nextSibling.previousSibling_=n),e.lastChild===n&&(e.lastChild_=n),e.firstChild===n&&(e.firstChild_=n),r.removeChild(i)}function l(e){var t=x(e),n=t.parentNode;n&&a(R(n),e)}function s(e,t){c(t).push(e),F.set(e,t);var n=A.get(e);n||A.set(e,n=[]),n.push(t)}function u(e){I.set(e,[])}function c(e){return I.get(e)}function d(e){for(var t=[],n=0,r=e.firstChild;r;r=r.nextSibling)t[n++]=r;return t}function p(e,t,n){for(var r=d(e),i=0;r.length>i;i++){var o=r[i];if(t(o)){if(n(o)===!1)return}else p(o,t,n)}}function h(e,t){var n=!1;return p(e,y,function(e){u(e);for(var r=0;t.length>r;r++){var i=t[r];void 0!==i&&m(i,e)&&(s(i,e),t[r]=void 0,n=!0)}}),n?t.filter(function(e){return void 0!==e}):t}function f(e,t){for(var n=0;t.length>n;n++)if(t[n]in e)return t[n]}function m(e,t){var n=t.getAttribute("select");if(!n)return!0;if(n=n.trim(),!n)return!0;if(e.nodeType!==D.ELEMENT_NODE)return!1;if(!k.test(n))return!1;if(":"===n[0]&&!G.test(n))return!1;try{return e.matches(n)}catch(r){return!1}}function g(){H=null,U.forEach(function(e){e.render()}),U=[]}function w(e){this.host=e,this.dirty=!1,this.associateNode(e)}function v(e){var t=W.get(e);return t||(t=new w(e),W.set(e,t)),t}function E(e){return"content"===e.localName}function y(e){return"content"===e.localName}function T(e){return"shadow"===e.localName}function b(e){return"shadow"===e.localName}function S(e){return!!e.shadowRoot}function M(e){return j.get(e)}function N(e){for(var t=[],n=e.shadowRoot;n;n=j.get(n))t.push(n);return t}function L(e,t){F.set(e,t)}function C(e){new w(e).render()}var H,O=e.wrappers.HTMLContentElement,D=e.wrappers.Node,_=e.assert,P=e.mixin,x=e.unwrap,R=e.wrap,I=new SideTable,A=new SideTable,F=new SideTable,j=new SideTable,W=new SideTable,B=new SideTable,k=/^[*.:#[a-zA-Z_|]/,G=new RegExp("^:("+["link","visited","target","enabled","disabled","checked","indeterminate","nth-child","nth-last-child","nth-of-type","nth-last-of-type","first-child","last-child","first-of-type","last-of-type","only-of-type"].join("|")+")"),q=f(window,["requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","setTimeout"]),U=[];w.prototype={render:function(){if(this.dirty){var e=this.host;this.treeComposition();var t=e.shadowRoot;if(t){this.removeAllChildNodes(this.host);var n=d(t);n.forEach(function(n){this.renderNode(e,t,n,!1)},this),this.dirty=!1}}},invalidate:function(){if(!this.dirty){if(this.dirty=!0,U.push(this),H)return;H=window[q](g,0)}},renderNode:function(e,t,n,r){if(S(n)){this.appendChild(e,n);var i=v(n);i.dirty=!0,i.render()}else E(n)?this.renderInsertionPoint(e,t,n,r):T(n)?this.renderShadowInsertionPoint(e,t,n):this.renderAsAnyDomTree(e,t,n,r)},renderAsAnyDomTree:function(e,t,n,r){if(this.appendChild(e,n),S(n))C(n);else{var i=n,o=d(i);o.forEach(function(e){this.renderNode(i,t,e,r)},this)}},renderInsertionPoint:function(e,t,n,r){var i=c(n);i.length?(this.removeAllChildNodes(n),i.forEach(function(n){E(n)&&r?this.renderInsertionPoint(e,t,n,r):this.renderAsAnyDomTree(e,t,n,r)},this)):this.renderFallbackContent(e,n),this.remove(n)},renderShadowInsertionPoint:function(e,t,n){var r=M(t);if(r){F.set(r,n),n.olderShadowRoot_=r,this.remove(n);var i=d(r);i.forEach(function(t){this.renderNode(e,r,t,!0)},this)}else this.renderFallbackContent(e,n)},renderFallbackContent:function(e,t){var n=d(t);n.forEach(function(t){this.appendChild(e,t)},this)},treeComposition:function(){var e=this.host,t=e.shadowRoot,n=[],r=d(e);r.forEach(function(e){if(E(e)){var t=c(e);t&&t.length||(t=d(e)),n.push.apply(n,t)}else n.push(e)});for(var i,o;t;){if(i=void 0,p(t,b,function(e){return i=e,!1}),o=i,n=h(t,n),o){var a=M(t);if(a){t=a,L(t,o);continue}break}break}},appendChild:function(e,t){o(e,t),this.associateNode(t)},remove:function(e){l(e),this.associateNode(e)},removeAllChildNodes:function(e){i(e)},associateNode:function(e){B.set(e,this)}},D.prototype.invalidateShadowRenderer=function(e){var t=B.get(this);if(!t)return!1;var n;return(e||this.shadowRoot||(n=this.parentNode)&&(n.shadowRoot||n instanceof ShadowRoot))&&t.invalidate(),!0},O.prototype.getDistributedNodes=function(){return g(),c(this)},P(D.prototype,{get insertionParent(){return F.get(this)||null}}),e.eventParentsTable=A,e.getRendererForHost=v,e.getShadowTrees=N,e.nextOlderShadowTreeTable=j,e.renderAllPending=g,e.visual={removeAllChildNodes:i,appendChild:o,removeChild:a}}(this.ShadowDOMPolyfill),function(e){"use strict";function t(e){l.call(this,e)}function n(e){var n=document[e];t.prototype[e]=function(){return g(n.apply(this.impl,arguments))}}function r(e){this.impl=e}function i(e,t){var n=document.implementation[t];e.prototype[t]=function(){return g(n.apply(this.impl,arguments))}}function o(e,t){var n=document.implementation[t];e.prototype[t]=function(){return n.apply(this.impl,arguments)}}var a=e.GetElementsByInterface,l=e.wrappers.Node,s=e.ParentNodeInterface,u=e.SelectorsInterface,c=e.defineWrapGetter,d=e.elementFromPoint,p=e.forwardMethodsToWrapper,h=e.mixin,f=e.registerWrapper,m=e.unwrap,g=e.wrap,w=e.wrapEventTargetMethods;e.wrapNodeList;var v=new SideTable;t.prototype=Object.create(l.prototype),c(t,"documentElement"),c(t,"body"),c(t,"head"),["getElementById","createElement","createElementNS","createTextNode","createDocumentFragment","createEvent","createEventNS"].forEach(n);var E=document.adoptNode,y=document.write;h(t.prototype,{adoptNode:function(e){return E.call(this.impl,m(e)),e},elementFromPoint:function(e,t){return d(this,this,e,t)},write:function(e){for(var t=this.querySelectorAll("*"),n=t[t.length-1];n.nextSibling;)n=n.nextSibling;var r=n.parentNode;r.lastChild_=void 0,n.nextSibling_=void 0,y.call(this.impl,e)}}),p([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement],["appendChild","compareDocumentPosition","getElementsByClassName","getElementsByTagName","getElementsByTagNameNS","insertBefore","querySelector","querySelectorAll","removeChild","replaceChild"]),p([window.HTMLDocument||window.Document],["adoptNode","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createTextNode","elementFromPoint","getElementById","write"]),h(t.prototype,a),h(t.prototype,s),h(t.prototype,u),h(t.prototype,{get implementation(){var e=v.get(this);return e?e:(e=new r(m(this).implementation),v.set(this,e),e)}}),f(window.Document,t,document.implementation.createHTMLDocument("")),window.HTMLDocument&&f(window.HTMLDocument,t),w([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement]),i(r,"createDocumentType"),i(r,"createDocument"),i(r,"createHTMLDocument"),o(r,"hasFeature"),f(window.DOMImplementation,r),p([window.DOMImplementation],["createDocumentType","createDocument","createHTMLDocument","hasFeature"]),e.wrappers.Document=t,e.wrappers.DOMImplementation=r}(this.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.EventTarget,r=e.mixin,i=e.registerWrapper,o=e.unwrap,a=e.unwrapIfNeeded,l=e.wrap,s=window.Window;t.prototype=Object.create(n.prototype);var u=window.getComputedStyle;s.prototype.getComputedStyle=function(e,t){return u.call(this||window,a(e),t)},["addEventListener","removeEventListener","dispatchEvent"].forEach(function(e){s.prototype[e]=function(){var t=l(this||window);return t[e].apply(t,arguments)}}),r(t.prototype,{getComputedStyle:function(e,t){return u.call(o(this),a(e),t)}}),i(s,t),e.wrappers.Window=t}(this.ShadowDOMPolyfill),function(e){"use strict";function t(e){this.impl=e}function n(e){return new t(e)}function r(e){return e.map(n)}function i(e){var t=this;this.impl=new c(function(n){e.call(t,r(n),t)})}var o=e.defineGetter,a=e.defineWrapGetter,l=e.registerWrapper,s=e.unwrapIfNeeded,u=e.wrapNodeList;e.wrappers;var c=window.MutationObserver||window.WebKitMutationObserver;if(c){var d=window.MutationRecord;t.prototype={get addedNodes(){return u(this.impl.addedNodes)},get removedNodes(){return u(this.impl.removedNodes)}},["target","previousSibling","nextSibling"].forEach(function(e){a(t,e)}),["type","attributeName","attributeNamespace","oldValue"].forEach(function(e){o(t,e,function(){return this.impl[e]
-})}),d&&l(d,t),window.Node,i.prototype={observe:function(e,t){this.impl.observe(s(e),t)},disconnect:function(){this.impl.disconnect()},takeRecords:function(){return r(this.impl.takeRecords())}},e.wrappers.MutationObserver=i,e.wrappers.MutationRecord=t}}(this.ShadowDOMPolyfill),function(e){"use strict";function t(e){var t=n[e],r=window[t];if(r){var i=document.createElement(e),o=i.constructor;window[t]=o}}e.isWrapperFor;var n={a:"HTMLAnchorElement",applet:"HTMLAppletElement",area:"HTMLAreaElement",audio:"HTMLAudioElement",br:"HTMLBRElement",base:"HTMLBaseElement",body:"HTMLBodyElement",button:"HTMLButtonElement",canvas:"HTMLCanvasElement",dl:"HTMLDListElement",datalist:"HTMLDataListElement",dir:"HTMLDirectoryElement",div:"HTMLDivElement",embed:"HTMLEmbedElement",fieldset:"HTMLFieldSetElement",font:"HTMLFontElement",form:"HTMLFormElement",frame:"HTMLFrameElement",frameset:"HTMLFrameSetElement",hr:"HTMLHRElement",head:"HTMLHeadElement",h1:"HTMLHeadingElement",html:"HTMLHtmlElement",iframe:"HTMLIFrameElement",input:"HTMLInputElement",li:"HTMLLIElement",label:"HTMLLabelElement",legend:"HTMLLegendElement",link:"HTMLLinkElement",map:"HTMLMapElement",menu:"HTMLMenuElement",menuitem:"HTMLMenuItemElement",meta:"HTMLMetaElement",meter:"HTMLMeterElement",del:"HTMLModElement",ol:"HTMLOListElement",object:"HTMLObjectElement",optgroup:"HTMLOptGroupElement",option:"HTMLOptionElement",output:"HTMLOutputElement",p:"HTMLParagraphElement",param:"HTMLParamElement",pre:"HTMLPreElement",progress:"HTMLProgressElement",q:"HTMLQuoteElement",script:"HTMLScriptElement",select:"HTMLSelectElement",source:"HTMLSourceElement",span:"HTMLSpanElement",style:"HTMLStyleElement",caption:"HTMLTableCaptionElement",col:"HTMLTableColElement",table:"HTMLTableElement",tr:"HTMLTableRowElement",thead:"HTMLTableSectionElement",tbody:"HTMLTableSectionElement",textarea:"HTMLTextAreaElement",title:"HTMLTitleElement",ul:"HTMLUListElement",video:"HTMLVideoElement"};Object.keys(n).forEach(t),Object.getOwnPropertyNames(e.wrappers).forEach(function(t){window[t]=e.wrappers[t]}),e.knownElements=n}(this.ShadowDOMPolyfill),function(){var e=window.ShadowDOMPolyfill;e.wrap,Object.defineProperties(HTMLElement.prototype,{webkitShadowRoot:{get:function(){return this.shadowRoot}}}),HTMLElement.prototype.webkitCreateShadowRoot=HTMLElement.prototype.createShadowRoot,window.dartExperimentalFixupGetTag=function(t){function n(e){if(e instanceof r)return"NodeList";if(e instanceof i)return"ShadowRoot";if(e instanceof MutationRecord)return"MutationRecord";if(e instanceof MutationObserver)return"MutationObserver";if(o(e)){e=a(e);var n=e.constructor;if(n&&n._ShadowDOMPolyfill$isGeneratedWrapper){var l=n._ShadowDOMPolyfill$cacheTag_;return l||(l=Object.prototype.toString.call(e),l=l.substring(8,l.length-1),n._ShadowDOMPolyfill$cacheTag_=l),l}}return t(e)}var r=e.wrappers.NodeList,i=e.wrappers.ShadowRoot,o=e.isWrapper,a=e.unwrap;return n}}()}
\ No newline at end of file
+if(!HTMLElement.prototype.createShadowRoot&&!HTMLElement.prototype.webkitCreateShadowRoot||window.__forceShadowDomPolyfill){!function(){Element.prototype.webkitCreateShadowRoot&&(Element.prototype.webkitCreateShadowRoot=function(){return window.ShadowDOMPolyfill.wrapIfNeeded(this).createShadowRoot()})}();var SideTable;"undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0?SideTable=WeakMap:function(){var a=Object.defineProperty,b=Object.hasOwnProperty,c=(new Date).getTime()%1e9;SideTable=function(){this.name="__st"+(1e9*Math.random()>>>0)+(c++ +"__")},SideTable.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}();var ShadowDOMPolyfill={};!function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function d(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){switch(c){case"arguments":case"caller":case"length":case"name":case"prototype":case"toString":return}Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function e(a){var b=a.__proto__||Object.getPrototypeOf(a),c=y.get(b);if(c)return c;var d=e(b),f=m(d);return j(b,f,a),f}function f(a,b){h(a,b,!0)}function g(a,b){h(b,a,!1)}function h(a,b,c){Object.getOwnPropertyNames(a).forEach(function(d){if(!(d in b)){A&&a.__lookupGetter__(d);var e;try{e=Object.getOwnPropertyDescriptor(a,d)}catch(f){e=B}var g,h;if(c&&"function"==typeof e.value)return b[d]=function(){return this.impl[d].apply(this.impl,arguments)},void 0;g=function(){return this.impl[d]},(e.writable||e.set)&&(h=function(a){this.impl[d]=a}),Object.defineProperty(b,d,{get:g,set:h,configurable:e.configurable,enumerable:e.enumerable})}})}function i(a,b,c){var e=a.prototype;j(e,b,c),d(b,a)}function j(a,c,d){var e=c.prototype;b(void 0===y.get(a)),y.set(a,c),f(a,e),d&&g(e,d)}function k(a,b){return y.get(b.prototype)===a}function l(a){var b=Object.getPrototypeOf(a),c=e(b),d=m(c);return j(b,d,a),d}function m(a){function b(b){a.call(this,b)}return b.prototype=Object.create(a.prototype),b.prototype.constructor=b,b._ShadowDOMPolyfill$isGeneratedWrapper=!0,b}function n(a){return a instanceof z.EventTarget||a instanceof z.Event||a instanceof z.DOMImplementation}function o(a){return a instanceof E||a instanceof D||a instanceof F||a instanceof C}function p(a){if(null===a)return null;b(o(a));var c=x.get(a);if(!c){var d=e(a);c=new d(a),x.set(a,c)}return c}function q(a){return null===a?null:(b(n(a)),a.impl)}function r(a){return a&&n(a)?q(a):a}function s(a){return a&&!n(a)?p(a):a}function t(a,c){null!==c&&(b(o(a)),b(void 0===c||n(c)),x.set(a,c))}function u(a,b,c){Object.defineProperty(a.prototype,b,{get:c,configurable:!0,enumerable:!0})}function v(a,b){u(a,b,function(){return p(this.impl[b])})}function w(a,b){a.forEach(function(a){b.forEach(function(b){a.prototype[b]=function(){var a=p(this);return a[b].apply(a,arguments)}})})}var x=new SideTable,y=new SideTable,z=Object.create(null);Object.getOwnPropertyNames(window);var A=/Firefox/.test(navigator.userAgent),B={get:function(){},set:function(){},configurable:!0,enumerable:!0},C=DOMImplementation,D=Event,E=Node,F=Window;a.assert=b,a.defineGetter=u,a.defineWrapGetter=v,a.forwardMethodsToWrapper=w,a.isWrapper=n,a.isWrapperFor=k,a.mixin=c,a.registerObject=l,a.registerWrapper=i,a.rewrap=t,a.unwrap=q,a.unwrapIfNeeded=r,a.wrap=p,a.wrapIfNeeded=s,a.wrappers=z}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a instanceof J.ShadowRoot}function c(a){var b=a.localName;return"content"===b||"shadow"===b}function d(a){return!!a.shadowRoot}function e(a){var b;return a.parentNode||(b=a.defaultView)&&I(b)||null}function f(f,g,h){if(h.length)return h.shift();if(b(f))return f.insertionParent||a.getHostForShadowRoot(f);var i=a.eventParentsTable.get(f);if(i){for(var j=1;j<i.length;j++)h[j-1]=i[j];return i[0]}if(g&&c(f)){var k=f.parentNode;if(k&&d(k))for(var l=a.getShadowTrees(k),m=g.insertionParent,j=0;j<l.length;j++)if(l[j].contains(m))return m}return e(f)}function g(a){for(var d=[],e=a,g=[],i=[];e;){var j=null;if(c(e)){j=h(d);var k=d[d.length-1]||e;d.push(k)}else d.length||d.push(e);var l=d[d.length-1];g.push({target:l,currentTarget:e}),b(e)&&d.pop(),e=f(e,j,i)}return g}function h(a){for(var b=a.length-1;b>=0;b--)if(!c(a[b]))return a[b];return null}function i(d,e){for(var g=[];d;){for(var i=[],k=e,m=void 0;k;){var n=null;if(i.length){if(c(k)&&(n=h(i),j(m))){var o=i[i.length-1];i.push(o)}}else i.push(k);if(l(k,d))return i[i.length-1];b(k)&&i.pop(),m=k,k=f(k,n,g)}d=b(d)?a.getHostForShadowRoot(d):d.parentNode}}function j(a){return a.insertionParent}function k(a){for(var b;b=a.parentNode;)a=b;return a}function l(a,b){return k(a)===k(b)}function m(a){switch(a){case"DOMAttrModified":case"DOMAttributeNameChanged":case"DOMCharacterDataModified":case"DOMElementNameChanged":case"DOMNodeInserted":case"DOMNodeInsertedIntoDocument":case"DOMNodeRemoved":case"DOMNodeRemovedFromDocument":case"DOMSubtreeModified":return!0}return!1}function n(b){if(!L.get(b)){L.set(b,!0),m(b.type)||a.renderAllPending();var c=I(b.target),d=I(b);return o(d,c)}}function o(a,b){var c=g(b);return"load"===a.type&&2===c.length&&c[0].target instanceof J.Document&&c.shift(),p(a,c)&&q(a,c)&&r(a,c),P.set(a,u.NONE),N.set(a,null),a.defaultPrevented}function p(a,b){for(var c,d=b.length-1;d>0;d--){var e=b[d].target,f=b[d].currentTarget;if(e!==f&&(c=u.CAPTURING_PHASE,!s(b[d],a,c)))return!1}return!0}function q(a,b){var c=u.AT_TARGET;return s(b[0],a,c)}function r(a,b){for(var c,d=a.bubbles,e=1;e<b.length;e++){var f=b[e].target,g=b[e].currentTarget;if(f===g)c=u.AT_TARGET;else{if(!d||R.get(a))continue;c=u.BUBBLING_PHASE}if(!s(b[e],a,c))return}}function s(a,b,c){var d=a.target,e=a.currentTarget,f=K.get(e);if(!f)return!0;if("relatedTarget"in b){var g=H(b),h=I(g.relatedTarget),j=i(e,h);if(j===d)return!0;O.set(b,j)}P.set(b,c);var k=b.type,l=!1;M.set(b,d),N.set(b,e);for(var m=0;m<f.length;m++){var n=f[m];if(n.removed)l=!0;else if(!(n.type!==k||!n.capture&&c===u.CAPTURING_PHASE||n.capture&&c===u.BUBBLING_PHASE))try{if("function"==typeof n.handler?n.handler.call(e,b):n.handler.handleEvent(b),R.get(b))return!1}catch(o){window.onerror?window.onerror(o.message):console.error(o)}}if(l){var p=f.slice();f.length=0;for(var m=0;m<p.length;m++)p[m].removed||f.push(p[m])}return!Q.get(b)}function t(a,b,c){this.type=a,this.handler=b,this.capture=Boolean(c)}function u(a,b){return a instanceof S?(this.impl=a,void 0):I(y(S,"Event",a,b))}function v(a){return a&&a.relatedTarget?Object.create(a,{relatedTarget:{value:H(a.relatedTarget)}}):a}function w(a,b,c){var d=window[a],e=function(b,c){return b instanceof d?(this.impl=b,void 0):I(y(d,a,b,c))};return e.prototype=Object.create(b.prototype),c&&F(e.prototype,c),d&&G(d,e,document.createEvent(a)),e}function x(a,b){return function(){arguments[b]=H(arguments[b]);var c=H(this);c[a].apply(c,arguments)}}function y(a,b,c,d){if(ab)return new a(c,v(d));var e=H(document.createEvent(b)),f=_[b],g=[c];return Object.keys(f).forEach(function(a){var b=null!=d&&a in d?d[a]:f[a];"relatedTarget"===a&&(b=H(b)),g.push(b)}),e["init"+b].apply(e,g),e}function z(a){return"function"==typeof a?!0:a&&a.handleEvent}function A(a){this.impl=a}function B(b){return b instanceof J.ShadowRoot&&(b=a.getHostForShadowRoot(b)),H(b)}function C(a){E(a,db)}function D(b,c,d,e){a.renderAllPending();for(var f=I(eb.call(c.impl,d,e)),h=g(f,this),i=0;i<h.length;i++){var j=h[i];if(j.currentTarget===b)return j.target}return null}var E=a.forwardMethodsToWrapper,F=a.mixin,G=a.registerWrapper,H=a.unwrap,I=a.wrap,J=a.wrappers;new SideTable;var K=new SideTable,L=new SideTable,M=new SideTable,N=new SideTable,O=new SideTable,P=new SideTable,Q=new SideTable,R=new SideTable;t.prototype={equals:function(a){return this.handler===a.handler&&this.type===a.type&&this.capture===a.capture},get removed(){return null===this.handler},remove:function(){this.handler=null}};var S=window.Event;u.prototype={get target(){return M.get(this)},get currentTarget(){return N.get(this)},get eventPhase(){return P.get(this)},stopPropagation:function(){Q.set(this,!0)},stopImmediatePropagation:function(){Q.set(this,!0),R.set(this,!0)}},G(S,u,document.createEvent("Event"));var T=w("UIEvent",u),U=w("CustomEvent",u),V={get relatedTarget(){return O.get(this)||I(H(this).relatedTarget)}},W=F({initMouseEvent:x("initMouseEvent",14)},V),X=F({initFocusEvent:x("initFocusEvent",5)},V),Y=w("MouseEvent",T,W),Z=w("FocusEvent",T,X),$=w("MutationEvent",u,{initMutationEvent:x("initMutationEvent",3),get relatedNode(){return I(this.impl.relatedNode)}}),_=Object.create(null),ab=function(){try{new window.MouseEvent("click")}catch(a){return!1}return!0}();if(!ab){var bb=function(a,b,c){if(c){var d=_[c];b=F(F({},d),b)}_[a]=b};bb("Event",{bubbles:!1,cancelable:!1}),bb("CustomEvent",{detail:null},"Event"),bb("UIEvent",{view:null,detail:0},"Event"),bb("MouseEvent",{screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null},"UIEvent"),bb("FocusEvent",{relatedTarget:null},"UIEvent")}var cb=window.EventTarget,db=["addEventListener","removeEventListener","dispatchEvent"];[Element,Window,Document].forEach(function(a){var b=a.prototype;db.forEach(function(a){Object.defineProperty(b,a+"_",{value:b[a]})})}),A.prototype={addEventListener:function(a,b,c){if(z(b)){var d=new t(a,b,c),e=K.get(this);if(e){for(var f=0;f<e.length;f++)if(d.equals(e[f]))return}else e=[],K.set(this,e);e.push(d);var g=B(this);g.addEventListener_(a,n,!0)}},removeEventListener:function(a,b,c){c=Boolean(c);var d=K.get(this);if(d){for(var e=0,f=!1,g=0;g<d.length;g++)d[g].type===a&&d[g].capture===c&&(e++,d[g].handler===b&&(f=!0,d[g].remove()));if(f&&1===e){var h=B(this);h.removeEventListener_(a,n,!0)}}},dispatchEvent:function(b){a.renderAllPending();var c=B(this);return c.dispatchEvent_(H(b))}},cb&&G(cb,A);var eb=document.elementFromPoint;a.adjustRelatedTarget=i,a.elementFromPoint=D,a.wrapEventTargetMethods=C,a.wrappers.CustomEvent=U,a.wrappers.Event=u,a.wrappers.EventTarget=A,a.wrappers.FocusEvent=Z,a.wrappers.MouseEvent=Y,a.wrappers.MutationEvent=$,a.wrappers.UIEvent=T}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a,b){Object.defineProperty(a,b,{enumerable:!1})}function c(){this.length=0,b(this,"length")}function d(a){if(null==a)return a;for(var b=new c,d=0,e=a.length;e>d;d++)b[d]=f(a[d]);return b.length=e,b}function e(a,b){a.prototype[b]=function(){return d(this.impl[b].apply(this.impl,arguments))}}var f=a.wrap;c.prototype={item:function(a){return this[a]}},b(c.prototype,"item"),a.wrappers.NodeList=c,a.addWrapNodeListMethod=e,a.wrapNodeList=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){i(a instanceof f)}function c(a,b,c,d){if(a.nodeType!==f.DOCUMENT_FRAGMENT_NODE)return a.parentNode&&a.parentNode.removeChild(a),a.parentNode_=b,a.previousSibling_=c,a.nextSibling_=d,c&&(c.nextSibling_=a),d&&(d.previousSibling_=a),[a];for(var e,g=[];e=a.firstChild;)a.removeChild(e),g.push(e),e.parentNode_=b;for(var h=0;h<g.length;h++)g[h].previousSibling_=g[h-1]||c,g[h].nextSibling_=g[h+1]||d;return c&&(c.nextSibling_=g[0]),d&&(d.previousSibling_=g[g.length-1]),g}function d(a){if(1===a.length)return l(a[0]);for(var b=l(document.createDocumentFragment()),c=0;c<a.length;c++)b.appendChild(l(a[c]));return b}function e(a){for(var b=a.firstChild;b;){i(b.parentNode===a);var c=b.nextSibling,d=l(b),e=d.parentNode;e&&r.call(e,d),b.previousSibling_=b.nextSibling_=b.parentNode_=null,b=c}a.firstChild_=a.lastChild_=null}function f(a){i(a instanceof n),g.call(this,a),this.parentNode_=void 0,this.firstChild_=void 0,this.lastChild_=void 0,this.nextSibling_=void 0,this.previousSibling_=void 0}var g=a.wrappers.EventTarget,h=a.wrappers.NodeList;a.defineWrapGetter;var i=a.assert,j=a.mixin,k=a.registerWrapper,l=a.unwrap,m=a.wrap,n=window.Node,o=n.prototype.appendChild,p=n.prototype.insertBefore,q=n.prototype.replaceChild,r=n.prototype.removeChild,s=n.prototype.compareDocumentPosition;f.prototype=Object.create(g.prototype),j(f.prototype,{appendChild:function(a){b(a),this.invalidateShadowRenderer();var e=this.lastChild,f=null,g=c(a,this,e,f);return this.lastChild_=g[g.length-1],e||(this.firstChild_=g[0]),o.call(this.impl,d(g)),a},insertBefore:function(a,e){if(!e)return this.appendChild(a);b(a),b(e),i(e.parentNode===this),this.invalidateShadowRenderer();var f=e.previousSibling,g=e,h=c(a,this,f,g);this.firstChild===e&&(this.firstChild_=h[0]);var j=l(e),k=j.parentNode;return k&&p.call(k,d(h),j),a},removeChild:function(a){if(b(a),a.parentNode!==this)throw new Error("NotFoundError");this.invalidateShadowRenderer();var c=this.firstChild,d=this.lastChild,e=a.nextSibling,f=a.previousSibling,g=l(a),h=g.parentNode;return h&&r.call(h,g),c===a&&(this.firstChild_=e),d===a&&(this.lastChild_=f),f&&(f.nextSibling_=e),e&&(e.previousSibling_=f),a.previousSibling_=a.nextSibling_=a.parentNode_=null,a},replaceChild:function(a,e){if(b(a),b(e),e.parentNode!==this)throw new Error("NotFoundError");this.invalidateShadowRenderer();var f=e.previousSibling,g=e.nextSibling;g===a&&(g=a.nextSibling);var h=c(a,this,f,g);this.firstChild===e&&(this.firstChild_=h[0]),this.lastChild===e&&(this.lastChild_=h[h.length-1]),e.previousSibling_=null,e.nextSibling_=null,e.parentNode_=null;var i=l(e);return i.parentNode&&q.call(i.parentNode,d(h),i),e},hasChildNodes:function(){return null===this.firstChild},get parentNode(){return void 0!==this.parentNode_?this.parentNode_:m(this.impl.parentNode)},get firstChild(){return void 0!==this.firstChild_?this.firstChild_:m(this.impl.firstChild)},get lastChild(){return void 0!==this.lastChild_?this.lastChild_:m(this.impl.lastChild)},get nextSibling(){return void 0!==this.nextSibling_?this.nextSibling_:m(this.impl.nextSibling)},get previousSibling(){return void 0!==this.previousSibling_?this.previousSibling_:m(this.impl.previousSibling)},get parentElement(){for(var a=this.parentNode;a&&a.nodeType!==f.ELEMENT_NODE;)a=a.parentNode;return a},get textContent(){for(var a="",b=this.firstChild;b;b=b.nextSibling)a+=b.textContent;return a},set textContent(a){if(e(this),this.invalidateShadowRenderer(),""!==a){var b=this.impl.ownerDocument.createTextNode(a);this.appendChild(b)}},get childNodes(){for(var a=new h,b=0,c=this.firstChild;c;c=c.nextSibling)a[b++]=c;return a.length=b,a},cloneNode:function(a){if(!this.invalidateShadowRenderer())return m(this.impl.cloneNode(a));var b=m(this.impl.cloneNode(!1));if(a)for(var c=this.firstChild;c;c=c.nextSibling)b.appendChild(c.cloneNode(!0));return b},contains:function(a){if(!a)return!1;if(a===this)return!0;var b=a.parentNode;return b?this.contains(b):!1},compareDocumentPosition:function(a){return s.call(this.impl,l(a))},get ownerDocument(){return a.renderAllPending(),m(this.impl.ownerDocument)}}),k(n,f,document.createDocumentFragment()),delete f.prototype.querySelector,delete f.prototype.querySelectorAll,f.prototype=j(Object.create(g.prototype),f.prototype),a.wrappers.Node=f}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a,c){for(var d,e=a.firstElementChild;e;){if(e.matches(c))return e;if(d=b(e,c))return d;e=e.nextElementSibling}return null}function c(a,b,d){for(var e=a.firstElementChild;e;)e.matches(b)&&(d[d.length++]=e),c(e,b,d),e=e.nextElementSibling;return d}var d={querySelector:function(a){return b(this,a)},querySelectorAll:function(a){return c(this,a,new NodeList)}},e={getElementsByTagName:function(a){return this.querySelectorAll(a)},getElementsByClassName:function(a){return this.querySelectorAll("."+a)},getElementsByTagNameNS:function(a,b){if("*"===a)return this.getElementsByTagName(b);for(var c=new NodeList,d=this.getElementsByTagName(b),e=0,f=0;e<d.length;e++)d[e].namespaceURI===a&&(c[f++]=d[e]);return c.length=f,c}};a.GetElementsByInterface=e,a.SelectorsInterface=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){for(;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.nextSibling;return a}function c(a){for(;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.previousSibling;return a}var d=a.wrappers.NodeList,e={get firstElementChild(){return b(this.firstChild)},get lastElementChild(){return c(this.lastChild)},get childElementCount(){for(var a=0,b=this.firstElementChild;b;b=b.nextElementSibling)a++;return a},get children(){for(var a=new d,b=0,c=this.firstElementChild;c;c=c.nextElementSibling)a[b++]=c;return a.length=b,a}},f={get nextElementSibling(){return b(this.nextSibling)},get previousElementSibling(){return c(this.nextSibling)}};a.ChildNodeInterface=f,a.ParentNodeInterface=e}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}var c=a.ChildNodeInterface,d=a.wrappers.Node,e=a.mixin,f=a.registerWrapper,g=window.CharacterData;b.prototype=Object.create(d.prototype),e(b.prototype,{get textContent(){return this.data},set textContent(a){this.data=a}}),e(b.prototype,c),f(g,b,document.createTextNode("")),a.wrappers.CharacterData=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){e.call(this,a)}var c=a.ChildNodeInterface,d=a.GetElementsByInterface,e=a.wrappers.Node,f=a.ParentNodeInterface,g=a.SelectorsInterface;a.addWrapNodeListMethod;var h=a.mixin,i=a.registerWrapper,j=a.wrappers,k=new SideTable,l=window.Element,m=l.prototype.matches||l.prototype.mozMatchesSelector||l.prototype.msMatchesSelector||l.prototype.webkitMatchesSelector;b.prototype=Object.create(e.prototype),h(b.prototype,{createShadowRoot:function(){var b=new j.ShadowRoot(this);return k.set(this,b),a.getRendererForHost(this),this.invalidateShadowRenderer(!0),b},get shadowRoot(){return k.get(this)||null},setAttribute:function(a,b){this.impl.setAttribute(a,b),this.invalidateShadowRenderer()},matches:function(a){return m.call(this.impl,a)}}),h(b.prototype,c),h(b.prototype,d),h(b.prototype,f),h(b.prototype,g),i(l,b),a.wrappers.Element=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a){case"&":return"&amp;";case"<":return"&lt;";case'"':return"&quot;"}}function c(a){return a.replace(p,b)}function d(a){switch(a.nodeType){case Node.ELEMENT_NODE:for(var b,d=a.tagName.toLowerCase(),f="<"+d,g=a.attributes,h=0;b=g[h];h++)f+=" "+b.name+'="'+c(b.value)+'"';return f+=">",q[d]?f:f+e(a)+"</"+d+">";case Node.TEXT_NODE:return c(a.nodeValue);case Node.COMMENT_NODE:return"<!--"+c(a.nodeValue)+"-->";default:throw console.error(a),new Error("not implemented")}}function e(a){for(var b="",c=a.firstChild;c;c=c.nextSibling)b+=d(c);return b}function f(a,b,c){var d=c||"div";a.textContent="";var e=n(a.ownerDocument.createElement(d));e.innerHTML=b;for(var f;f=e.firstChild;)a.appendChild(o(f))}function g(a){j.call(this,a)}function h(b){k(g,b,function(){return a.renderAllPending(),this.impl[b]})}function i(b){Object.defineProperty(g.prototype,b,{value:function(){return a.renderAllPending(),this.impl[b].apply(this.impl,arguments)},configurable:!0,enumerable:!0})}var j=a.wrappers.Element,k=a.defineGetter,l=a.mixin,m=a.registerWrapper,n=a.unwrap,o=a.wrap,p=/&|<|"/g,q={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},r=window.HTMLElement;g.prototype=Object.create(j.prototype),l(g.prototype,{get innerHTML(){return e(this)},set innerHTML(a){f(this,a,this.tagName)},get outerHTML(){return d(this)},set outerHTML(a){if(this.invalidateShadowRenderer())throw new Error("not implemented");this.impl.outerHTML=a}}),["clientHeight","clientLeft","clientTop","clientWidth","offsetHeight","offsetLeft","offsetTop","offsetWidth","scrollHeight","scrollLeft","scrollTop","scrollWidth"].forEach(h),["getBoundingClientRect","getClientRects","scrollIntoView"].forEach(i),m(r,g,document.createElement("b")),a.wrappers.HTMLElement=g,a.getInnerHTML=e,a.setInnerHTML=f}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLContentElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get select(){return this.getAttribute("select")},set select(a){this.setAttribute("select",a)},setAttribute:function(a,b){c.prototype.setAttribute.call(this,a,b),"select"===String(a).toLowerCase()&&this.invalidateShadowRenderer(!0)}}),f&&e(f,b),a.wrappers.HTMLContentElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a),this.olderShadowRoot_=null}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLShadowElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get olderShadowRoot(){return this.olderShadowRoot_},invalidateShadowRenderer:function(){c.prototype.invalidateShadowRenderer.call(this,!0)}}),f&&e(f,b),a.wrappers.HTMLShadowElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){if(!a.defaultView)return a;var b=l.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);l.set(a,b)}return b}function c(a){for(var c,d=b(a.ownerDocument),e=d.createDocumentFragment();c=a.firstChild;)e.appendChild(c);return e}function d(a){e.call(this,a)}var e=a.wrappers.HTMLElement,f=a.getInnerHTML,g=a.mixin,h=a.registerWrapper,i=a.setInnerHTML,j=a.wrap,k=new SideTable,l=new SideTable,m=window.HTMLTemplateElement;d.prototype=Object.create(e.prototype),g(d.prototype,{get content(){if(m)return j(this.impl.content);var a=k.get(this);return a||(a=c(this),k.set(this,a)),a},get innerHTML(){return f(this.content)},set innerHTML(a){i(this.content,a),this.invalidateShadowRenderer()}}),m&&h(m,d),a.wrappers.HTMLTemplateElement=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a.localName){case"content":return new c(a);case"shadow":return new e(a);case"template":return new f(a)}d.call(this,a)}var c=a.wrappers.HTMLContentElement,d=a.wrappers.HTMLElement,e=a.wrappers.HTMLShadowElement,f=a.wrappers.HTMLTemplateElement;a.mixin;var g=a.registerWrapper,h=window.HTMLUnknownElement;b.prototype=Object.create(d.prototype),g(h,b),a.wrappers.HTMLUnknownElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";var b=a.GetElementsByInterface,c=a.ParentNodeInterface,d=a.SelectorsInterface,e=a.mixin,f=a.registerObject,g=f(document.createDocumentFragment());e(g.prototype,c),e(g.prototype,d),e(g.prototype,b);var h=f(document.createTextNode("")),i=f(document.createComment(""));a.wrappers.Comment=i,a.wrappers.DocumentFragment=g,a.wrappers.Text=h}(this.ShadowDOMPolyfill),function(a){"use strict";function b(b){var d=i(b.impl.ownerDocument.createDocumentFragment());c.call(this,d),g(d,this);var e=b.shadowRoot;a.nextOlderShadowTreeTable.set(this,e),j.set(this,b)}var c=a.wrappers.DocumentFragment,d=a.elementFromPoint,e=a.getInnerHTML,f=a.mixin,g=a.rewrap,h=a.setInnerHTML,i=a.unwrap,j=new SideTable;b.prototype=Object.create(c.prototype),f(b.prototype,{get innerHTML(){return e(this)},set innerHTML(a){h(this,a),this.invalidateShadowRenderer()},invalidateShadowRenderer:function(){return j.get(this).invalidateShadowRenderer()},elementFromPoint:function(a,b){return d(this,this.ownerDocument,a,b)},getElementById:function(a){return this.querySelector("#"+a)}}),a.wrappers.ShadowRoot=b,a.getHostForShadowRoot=function(a){return j.get(a)}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){a.previousSibling_=a.previousSibling,a.nextSibling_=a.nextSibling,a.parentNode_=a.parentNode}function c(a){a.firstChild_=a.firstChild,a.lastChild_=a.lastChild}function d(a){F(a instanceof E);for(var d=a.firstChild;d;d=d.nextSibling)b(d);c(a)}function e(a){var b=H(a);d(a),b.textContent=""}function f(a,c){var e=H(a),f=H(c);f.nodeType===E.DOCUMENT_FRAGMENT_NODE?d(c):(h(c),b(c)),a.lastChild_=a.lastChild,a.lastChild===a.firstChild&&(a.firstChild_=a.firstChild);var g=I(e.lastChild);g&&(g.nextSibling_=g.nextSibling),e.appendChild(f)}function g(a,c){var d=H(a),e=H(c);b(c),c.previousSibling&&(c.previousSibling.nextSibling_=c),c.nextSibling&&(c.nextSibling.previousSibling_=c),a.lastChild===c&&(a.lastChild_=c),a.firstChild===c&&(a.firstChild_=c),d.removeChild(e)}function h(a){var b=H(a),c=b.parentNode;c&&g(I(c),a)}function i(a,b){k(b).push(a),L.set(a,b);var c=K.get(a);c||K.set(a,c=[]),c.push(b)}function j(a){J.set(a,[])}function k(a){return J.get(a)}function l(a){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}function m(a,b,c){for(var d=l(a),e=0;e<d.length;e++){var f=d[e];if(b(f)){if(c(f)===!1)return}else m(f,b,c)}}function n(a,b){var c=!1;return m(a,u,function(a){j(a);for(var d=0;d<b.length;d++){var e=b[d];void 0!==e&&p(e,a)&&(i(e,a),b[d]=void 0,c=!0)}}),c?b.filter(function(a){return void 0!==a}):b}function o(a,b){for(var c=0;c<b.length;c++)if(b[c]in a)return b[c]}function p(a,b){var c=b.getAttribute("select");if(!c)return!0;if(c=c.trim(),!c)return!0;if(a.nodeType!==E.ELEMENT_NODE)return!1;if(!P.test(c))return!1;if(":"===c[0]&&!Q.test(c))return!1;try{return a.matches(c)}catch(d){return!1}}function q(){C=null,S.forEach(function(a){a.render()}),S=[]}function r(a){this.host=a,this.dirty=!1,this.associateNode(a)}function s(a){var b=N.get(a);return b||(b=new r(a),N.set(a,b)),b}function t(a){return"content"===a.localName}function u(a){return"content"===a.localName}function v(a){return"shadow"===a.localName}function w(a){return"shadow"===a.localName}function x(a){return!!a.shadowRoot}function y(a){return M.get(a)}function z(a){for(var b=[],c=a.shadowRoot;c;c=M.get(c))b.push(c);return b}function A(a,b){L.set(a,b)}function B(a){new r(a).render()}var C,D=a.wrappers.HTMLContentElement,E=a.wrappers.Node,F=a.assert,G=a.mixin,H=a.unwrap,I=a.wrap,J=new SideTable,K=new SideTable,L=new SideTable,M=new SideTable,N=new SideTable,O=new SideTable,P=/^[*.:#[a-zA-Z_|]/,Q=new RegExp("^:("+["link","visited","target","enabled","disabled","checked","indeterminate","nth-child","nth-last-child","nth-of-type","nth-last-of-type","first-child","last-child","first-of-type","last-of-type","only-of-type"].join("|")+")"),R=o(window,["requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","setTimeout"]),S=[];r.prototype={render:function(){if(this.dirty){var a=this.host;this.treeComposition();var b=a.shadowRoot;if(b){this.removeAllChildNodes(this.host);var c=l(b);c.forEach(function(c){this.renderNode(a,b,c,!1)},this),this.dirty=!1}}},invalidate:function(){if(!this.dirty){if(this.dirty=!0,S.push(this),C)return;C=window[R](q,0)}},renderNode:function(a,b,c,d){if(x(c)){this.appendChild(a,c);var e=s(c);e.dirty=!0,e.render()}else t(c)?this.renderInsertionPoint(a,b,c,d):v(c)?this.renderShadowInsertionPoint(a,b,c):this.renderAsAnyDomTree(a,b,c,d)},renderAsAnyDomTree:function(a,b,c,d){if(this.appendChild(a,c),x(c))B(c);else{var e=c,f=l(e);f.forEach(function(a){this.renderNode(e,b,a,d)},this)}},renderInsertionPoint:function(a,b,c,d){var e=k(c);e.length?(this.removeAllChildNodes(c),e.forEach(function(c){t(c)&&d?this.renderInsertionPoint(a,b,c,d):this.renderAsAnyDomTree(a,b,c,d)},this)):this.renderFallbackContent(a,c),this.remove(c)},renderShadowInsertionPoint:function(a,b,c){var d=y(b);if(d){L.set(d,c),c.olderShadowRoot_=d,this.remove(c);var e=l(d);e.forEach(function(b){this.renderNode(a,d,b,!0)},this)}else this.renderFallbackContent(a,c)},renderFallbackContent:function(a,b){var c=l(b);c.forEach(function(b){this.appendChild(a,b)},this)},treeComposition:function(){var a=this.host,b=a.shadowRoot,c=[],d=l(a);d.forEach(function(a){if(t(a)){var b=k(a);b&&b.length||(b=l(a)),c.push.apply(c,b)}else c.push(a)});for(var e,f;b;){if(e=void 0,m(b,w,function(a){return e=a,!1}),f=e,c=n(b,c),f){var g=y(b);if(g){b=g,A(b,f);continue}break}break}},appendChild:function(a,b){f(a,b),this.associateNode(b)},remove:function(a){h(a),this.associateNode(a)},removeAllChildNodes:function(a){e(a)},associateNode:function(a){O.set(a,this)}},E.prototype.invalidateShadowRenderer=function(a){var b=O.get(this);if(!b)return!1;var c;return(a||this.shadowRoot||(c=this.parentNode)&&(c.shadowRoot||c instanceof ShadowRoot))&&b.invalidate(),!0},D.prototype.getDistributedNodes=function(){return q(),k(this)},G(E.prototype,{get insertionParent(){return L.get(this)||null}}),a.eventParentsTable=K,a.getRendererForHost=s,a.getShadowTrees=z,a.nextOlderShadowTreeTable=M,a.renderAllPending=q,a.visual={removeAllChildNodes:e,appendChild:f,removeChild:g}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){h.call(this,a)}function c(a){var c=document[a];b.prototype[a]=function(){return q(c.apply(this.impl,arguments))}}function d(a){this.impl=a}function e(a,b){var c=document.implementation[b];a.prototype[b]=function(){return q(c.apply(this.impl,arguments))}}function f(a,b){var c=document.implementation[b];a.prototype[b]=function(){return c.apply(this.impl,arguments)}}var g=a.GetElementsByInterface,h=a.wrappers.Node,i=a.ParentNodeInterface,j=a.SelectorsInterface,k=a.defineWrapGetter,l=a.elementFromPoint,m=a.forwardMethodsToWrapper,n=a.mixin,o=a.registerWrapper,p=a.unwrap,q=a.wrap,r=a.wrapEventTargetMethods;a.wrapNodeList;var s=new SideTable;b.prototype=Object.create(h.prototype),k(b,"documentElement"),k(b,"body"),k(b,"head"),["getElementById","createElement","createElementNS","createTextNode","createDocumentFragment","createEvent","createEventNS"].forEach(c);var t=document.adoptNode,u=document.write;n(b.prototype,{adoptNode:function(a){return t.call(this.impl,p(a)),a},elementFromPoint:function(a,b){return l(this,this,a,b)},write:function(a){for(var b=this.querySelectorAll("*"),c=b[b.length-1];c.nextSibling;)c=c.nextSibling;var d=c.parentNode;d.lastChild_=void 0,c.nextSibling_=void 0,u.call(this.impl,a)}}),m([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement],["appendChild","compareDocumentPosition","getElementsByClassName","getElementsByTagName","getElementsByTagNameNS","insertBefore","querySelector","querySelectorAll","removeChild","replaceChild"]),m([window.HTMLDocument||window.Document],["adoptNode","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createTextNode","elementFromPoint","getElementById","write"]),n(b.prototype,g),n(b.prototype,i),n(b.prototype,j),n(b.prototype,{get implementation(){var a=s.get(this);return a?a:(a=new d(p(this).implementation),s.set(this,a),a)}}),o(window.Document,b,document.implementation.createHTMLDocument("")),window.HTMLDocument&&o(window.HTMLDocument,b),r([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement]),e(d,"createDocumentType"),e(d,"createDocument"),e(d,"createHTMLDocument"),f(d,"hasFeature"),o(window.DOMImplementation,d),m([window.DOMImplementation],["createDocumentType","createDocument","createHTMLDocument","hasFeature"]),a.wrappers.Document=b,a.wrappers.DOMImplementation=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.EventTarget,d=a.mixin,e=a.registerWrapper,f=a.unwrap,g=a.unwrapIfNeeded,h=a.wrap,i=window.Window;b.prototype=Object.create(c.prototype);var j=window.getComputedStyle;i.prototype.getComputedStyle=function(a,b){return j.call(this||window,g(a),b)},["addEventListener","removeEventListener","dispatchEvent"].forEach(function(a){i.prototype[a]=function(){var b=h(this||window);return b[a].apply(b,arguments)}}),d(b.prototype,{getComputedStyle:function(a,b){return j.call(f(this),g(a),b)}}),e(i,b),a.wrappers.Window=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}function c(a){return new b(a)}function d(a){return a.map(c)}function e(a){var b=this;this.impl=new k(function(c){a.call(b,d(c),b)})}var f=a.defineGetter,g=a.defineWrapGetter,h=a.registerWrapper,i=a.unwrapIfNeeded,j=a.wrapNodeList;a.wrappers;var k=window.MutationObserver||window.WebKitMutationObserver;if(k){var l=window.MutationRecord;b.prototype={get addedNodes(){return j(this.impl.addedNodes)},get removedNodes(){return j(this.impl.removedNodes)}},["target","previousSibling","nextSibling"].forEach(function(a){g(b,a)}),["type","attributeName","attributeNamespace","oldValue"].forEach(function(a){f(b,a,function(){return this.impl[a]
+})}),l&&h(l,b),window.Node,e.prototype={observe:function(a,b){this.impl.observe(i(a),b)},disconnect:function(){this.impl.disconnect()},takeRecords:function(){return d(this.impl.takeRecords())}},a.wrappers.MutationObserver=e,a.wrappers.MutationRecord=b}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=c[a],d=window[b];if(d){var e=document.createElement(a),f=e.constructor;window[b]=f}}a.isWrapperFor;var c={a:"HTMLAnchorElement",applet:"HTMLAppletElement",area:"HTMLAreaElement",audio:"HTMLAudioElement",br:"HTMLBRElement",base:"HTMLBaseElement",body:"HTMLBodyElement",button:"HTMLButtonElement",canvas:"HTMLCanvasElement",dl:"HTMLDListElement",datalist:"HTMLDataListElement",dir:"HTMLDirectoryElement",div:"HTMLDivElement",embed:"HTMLEmbedElement",fieldset:"HTMLFieldSetElement",font:"HTMLFontElement",form:"HTMLFormElement",frame:"HTMLFrameElement",frameset:"HTMLFrameSetElement",hr:"HTMLHRElement",head:"HTMLHeadElement",h1:"HTMLHeadingElement",html:"HTMLHtmlElement",iframe:"HTMLIFrameElement",input:"HTMLInputElement",li:"HTMLLIElement",label:"HTMLLabelElement",legend:"HTMLLegendElement",link:"HTMLLinkElement",map:"HTMLMapElement",menu:"HTMLMenuElement",menuitem:"HTMLMenuItemElement",meta:"HTMLMetaElement",meter:"HTMLMeterElement",del:"HTMLModElement",ol:"HTMLOListElement",object:"HTMLObjectElement",optgroup:"HTMLOptGroupElement",option:"HTMLOptionElement",output:"HTMLOutputElement",p:"HTMLParagraphElement",param:"HTMLParamElement",pre:"HTMLPreElement",progress:"HTMLProgressElement",q:"HTMLQuoteElement",script:"HTMLScriptElement",select:"HTMLSelectElement",source:"HTMLSourceElement",span:"HTMLSpanElement",style:"HTMLStyleElement",caption:"HTMLTableCaptionElement",col:"HTMLTableColElement",table:"HTMLTableElement",tr:"HTMLTableRowElement",thead:"HTMLTableSectionElement",tbody:"HTMLTableSectionElement",textarea:"HTMLTextAreaElement",title:"HTMLTitleElement",ul:"HTMLUListElement",video:"HTMLVideoElement"};Object.keys(c).forEach(b),Object.getOwnPropertyNames(a.wrappers).forEach(function(b){window[b]=a.wrappers[b]}),a.knownElements=c}(this.ShadowDOMPolyfill),function(){var a=window.ShadowDOMPolyfill;a.wrap,Object.defineProperties(HTMLElement.prototype,{webkitShadowRoot:{get:function(){return this.shadowRoot}}}),HTMLElement.prototype.webkitCreateShadowRoot=HTMLElement.prototype.createShadowRoot,window.dartExperimentalFixupGetTag=function(b){function c(a){if(a instanceof d)return"NodeList";if(a instanceof e)return"ShadowRoot";if(a instanceof MutationRecord)return"MutationRecord";if(a instanceof MutationObserver)return"MutationObserver";if(f(a)){a=g(a);var c=a.constructor;if(c&&c._ShadowDOMPolyfill$isGeneratedWrapper){var h=c._ShadowDOMPolyfill$cacheTag_;return h||(h=Object.prototype.toString.call(a),h=h.substring(8,h.length-1),c._ShadowDOMPolyfill$cacheTag_=h),h}}return b(a)}var d=a.wrappers.NodeList,e=a.wrappers.ShadowRoot,f=a.isWrapper,g=a.unwrap;return c}}();var Platform={};!function(a){function b(a,b){var c="";return Array.prototype.forEach.call(a,function(a){c+=a.textContent+"\n\n"}),b||(c=c.replace(m,"")),c}function c(a){var b=document.createElement("style");b.textContent=a,document.head.appendChild(b);var c=b.sheet.cssRules;return b.parentNode.removeChild(b),c}function d(a){for(var b=0,c=[];b<a.length;b++)c.push(a[b].cssText);return c.join("\n\n")}function e(a){a&&f().appendChild(document.createTextNode(a))}function f(){return g||(g=document.createElement("style"),g.setAttribute("ShadowCSSShim","")),g}var g,h={strictStyling:!1,registry:{},shimStyling:function(a,b,c){if(a){var d=this.registerDefinition(a,b,c);this.strictStyling&&this.applyScopeToContent(a,b),this.shimPolyfillDirectives(d.rootStyles,b),this.applyShimming(d.scopeStyles,b)}},shimShadowDOMStyling:function(a,b){this.shimPolyfillDirectives(a,b),this.applyShimming(a,b)},registerDefinition:function(a,b,c){var d=this.registry[b]={root:a,name:b,extendsName:c},e=a.querySelectorAll("style");e=e?Array.prototype.slice.call(e,0):[],d.rootStyles=e,d.scopeStyles=d.rootStyles;var f=this.registry[d.extendsName];return f&&(d.scopeStyles=d.scopeStyles.concat(f.scopeStyles)),d},applyScopeToContent:function(a,b){a&&(Array.prototype.forEach.call(a.querySelectorAll("*"),function(a){a.setAttribute(b,"")}),Array.prototype.forEach.call(a.querySelectorAll("template"),function(a){this.applyScopeToContent(a.content,b)},this))},shimPolyfillDirectives:function(a,b){a&&Array.prototype.forEach.call(a,function(a){a.textContent=this.convertPolyfillDirectives(a.textContent,b)},this)},convertPolyfillDirectives:function(a,b){for(var c,d,e="",f=0;c=n.exec(a);)e+=a.substring(f,c.index),d=c[1].slice(0,-2).replace(q,b),e+=this.scopeSelector(d,b)+"{",f=n.lastIndex;return e+=a.substring(f,a.length)},applyShimming:function(a,b){var c=this.shimAtHost(a,b);c+=this.shimScoping(a,b),e(c)},shimAtHost:function(a,b){return a?this.convertAtHostStyles(a,b):void 0},convertAtHostStyles:function(a,e){for(var f,g=b(a),h="",j=0;f=i.exec(g);)h+=g.substring(j,f.index),h+=this.scopeHostCss(f[1],e),j=i.lastIndex;h+=g.substring(j,g.length);var k=new RegExp("^"+e+p,"m"),g=d(this.findAtHostRules(c(h),k));return g},scopeHostCss:function(a,b){for(var c,d="";c=j.exec(a);)d+=this.scopeHostSelector(c[1],b)+" "+c[2]+"\n	";return d},scopeHostSelector:function(a,b){var c=[],d=a.split(","),e="[is="+b+"]";return d.forEach(function(a){a=a.trim(),a.match(k)?a=a.replace(k,b+"$1$3, "+e+"$1$3"):a.match(l)&&(a=b+a+", "+e+a),c.push(a)},this),c.join(", ")},findAtHostRules:function(a,b){return Array.prototype.filter.call(a,this.isHostRule.bind(this,b))},isHostRule:function(a,b){return b.selectorText&&b.selectorText.match(a)||b.cssRules&&this.findAtHostRules(b.cssRules,a).length||b.type==CSSRule.WEBKIT_KEYFRAMES_RULE},shimScoping:function(a,b){return a?this.convertScopedStyles(a,b):void 0},convertScopedStyles:function(a,d){Array.prototype.forEach.call(a,function(a){a.parentNode&&a.parentNode.removeChild(a)});var e=b(a).replace(i,"");e=this.convertPseudos(e);var f=c(e);return e=this.scopeRules(f,d)},convertPseudos:function(a){return a.replace(o," [pseudo=$1]")},scopeRules:function(a,b){var c="";return Array.prototype.forEach.call(a,function(a){a.selectorText&&a.style&&a.style.cssText?(c+=this.scopeSelector(a.selectorText,b,this.strictStyling)+" {\n	",c+=this.propertiesFromRule(a)+"\n}\n\n"):a.media?(c+="@media "+a.media.mediaText+" {\n",c+=this.scopeRules(a.cssRules,b),c+="\n}\n\n"):a.cssText&&(c+=a.cssText+"\n\n")},this),c},scopeSelector:function(a,b,c){var d=[],e=a.split(",");return e.forEach(function(a){a=a.trim(),this.selectorNeedsScoping(a,b)&&(a=c?this.applyStrictSelectorScope(a,b):this.applySimpleSelectorScope(a,b)),d.push(a)},this),d.join(", ")},selectorNeedsScoping:function(a,b){var c="("+b+"|\\[is="+b+"\\])",d=new RegExp("^"+c+p,"m");return!a.match(d)},applySimpleSelectorScope:function(a,b){return b+" "+a+", "+"[is="+b+"] "+a},applyStrictSelectorScope:function(a,b){var c=[" ",">","+","~"],d=a,e="["+b+"]";return c.forEach(function(a){var b=d.split(a);d=b.map(function(a){var b=a.trim();return b&&c.indexOf(b)<0&&b.indexOf(e)<0&&(a=b.replace(/([^:]*)(:*)(.*)/,"$1"+e+"$2$3")),a}).join(a)}),d},propertiesFromRule:function(a){var b=a.style.cssText;return a.style.content&&!a.style.content.match(/['"]+/)&&(b="content: '"+a.style.content+"';\n"+a.style.cssText.replace(/content:[^;]*;/g,"")),b}},i=/@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,j=/([^{]*)({[\s\S]*?})/gim,k=/(.*)((?:\*)|(?:\:scope))(.*)/,l=/^[.\[:]/,m=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,n=/\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,o=/::(x-[^\s{,(]*)/gim,p="([>\\s~+[.,{:][\\s\\S]*)?$",q=/@host/gim;if(window.ShadowDOMPolyfill){e("style { display: none !important; }\n");var r=document.querySelector("head");r.insertBefore(f(),r.childNodes[0])}a.ShadowCSS=h}(window.Platform),function(a){function b(a,b){if(window.ShadowDOMPolyfill){for(var h,i=this.convertPolyfillDirectives(a,b),j="",k=0;h=e.exec(i);)j+=i.substring(k,h.index),j+=this.scopeHostCss(h[1],b),k=e.lastIndex;j+=i.substring(k,i.length);var l=new RegExp("^"+b+g,"m"),m=d(this.findAtHostRules(c(j),l));i=i.replace(f,""),i=this.convertPseudos(i);var n=c(i),o=this.scopeRules(n,b);return m+o}}function c(a){var b=document.createElement("style");b.textContent=a,document.head.appendChild(b);var c=b.sheet.cssRules;return b.parentNode.removeChild(b),c}function d(a){for(var b=0,c=[];b<a.length;b++)c.push(a[b].cssText);return c.join("\n\n")}var e=/@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,f=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,g="([>\\s~+[.,{:][\\s\\S]*)?$";a.ShadowCSS.shimShadowDOMStyling2=b}(window.Platform)}
\ No newline at end of file
diff --git a/pkg/shadow_dom/lib/src/platform/ShadowCSS.js b/pkg/shadow_dom/lib/src/platform/ShadowCSS.js
new file mode 100644
index 0000000..96861a1
--- /dev/null
+++ b/pkg/shadow_dom/lib/src/platform/ShadowCSS.js
@@ -0,0 +1,452 @@
+/*
+ * Copyright 2012 The Polymer Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style
+ * license that can be found in the LICENSE file.
+ */
+
+/*
+  This is a limited shim for ShadowDOM css styling.
+  https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#styles
+
+  The intention here is to support only the styling features which can be
+  relatively simply implemented. The goal is to allow users to avoid the
+  most obvious pitfalls and do so without compromising performance significantly.
+  For ShadowDOM styling that's not covered here, a set of best practices
+  can be provided that should allow users to accomplish more complex styling.
+
+  The following is a list of specific ShadowDOM styling features and a brief
+  discussion of the approach used to shim.
+
+  Shimmed features:
+
+  * @host: ShadowDOM allows styling of the shadowRoot's host element using the
+  @host rule. To shim this feature, the @host styles are reformatted and
+  prefixed with a given scope name and promoted to a document level stylesheet.
+  For example, given a scope name of .foo, a rule like this:
+
+    @host {
+      * {
+        background: red;
+      }
+    }
+
+  becomes:
+
+    .foo {
+      background: red;
+    }
+
+  * encapsultion: Styles defined within ShadowDOM, apply only to
+  dom inside the ShadowDOM. Polymer uses one of two techniques to imlement
+  this feature.
+
+  By default, rules are prefixed with the host element tag name
+  as a descendant selector. This ensures styling does not leak out of the 'top'
+  of the element's ShadowDOM. For example,
+
+  div {
+      font-weight: bold;
+    }
+
+  becomes:
+
+  x-foo div {
+      font-weight: bold;
+    }
+
+  becomes:
+
+
+  Alternatively, if Platform.ShadowCSS.strictStyling is set to true then
+  selectors are scoped by adding an attribute selector suffix to each
+  simple selector that contains the host element tag name. Each element
+  in the element's ShadowDOM template is also given the scope attribute.
+  Thus, these rules match only elements that have the scope attribute.
+  For example, given a scope name of x-foo, a rule like this:
+
+    div {
+      font-weight: bold;
+    }
+
+  becomes:
+
+    div[x-foo] {
+      font-weight: bold;
+    }
+
+  Note that elements that are dynamically added to a scope must have the scope
+  selector added to them manually.
+
+  * ::pseudo: These rules are converted to rules that take advantage of the
+  pseudo attribute. For example, a shadowRoot like this inside an x-foo
+
+    <div pseudo="x-special">Special</div>
+
+  with a rule like this:
+
+    x-foo::x-special { ... }
+
+  becomes:
+
+    x-foo [pseudo=x-special] { ... }
+
+  Unaddressed ShadowDOM styling features:
+
+  * upper/lower bound encapsulation: Styles which are defined outside a
+  shadowRoot should not cross the ShadowDOM boundary and should not apply
+  inside a shadowRoot.
+
+  This styling behavior is not emulated. Some possible ways to do this that
+  were rejected due to complexity and/or performance concerns include: (1) reset
+  every possible property for every possible selector for a given scope name;
+  (2) re-implement css in javascript.
+
+  As an alternative, users should make sure to use selectors
+  specific to the scope in which they are working.
+
+  * ::distributed: This behavior is not emulated. It's often not necessary
+  to style the contents of a specific insertion point and instead, descendants
+  of the host element can be styled selectively. Users can also create an
+  extra node around an insertion point and style that node's contents
+  via descendent selectors. For example, with a shadowRoot like this:
+
+    <style>
+      content::-webkit-distributed(div) {
+        background: red;
+      }
+    </style>
+    <content></content>
+
+  could become:
+
+    <style>
+      / *@polyfill .content-container div * /
+      content::-webkit-distributed(div) {
+        background: red;
+      }
+    </style>
+    <div class="content-container">
+      <content></content>
+    </div>
+
+  Note the use of @polyfill in the comment above a ShadowDOM specific style
+  declaration. This is a directive to the styling shim to use the selector
+  in comments in lieu of the next selector when running under polyfill.
+*/
+(function(scope) {
+
+var ShadowCSS = {
+  strictStyling: false,
+  registry: {},
+  // Shim styles for a given root associated with a name and extendsName
+  // 1. cache root styles by name
+  // 2. optionally tag root nodes with scope name
+  // 3. shim polyfill directives /* @polyfill */
+  // 4. shim @host and scoping
+  shimStyling: function(root, name, extendsName) {
+    if (root) {
+      // use caching to make working with styles nodes easier and to facilitate
+      // lookup of extendee
+      var def = this.registerDefinition(root, name, extendsName);
+      // find styles and apply shimming...
+      if (this.strictStyling) {
+        this.applyScopeToContent(root, name);
+      }
+      this.shimPolyfillDirectives(def.rootStyles, name);
+      this.applyShimming(def.scopeStyles, name);
+    }
+  },
+  // Shim styles to be placed inside a shadowRoot.
+  // 1. shim polyfill directives /* @polyfill */
+  // 2. shim @host and scoping
+  shimShadowDOMStyling: function(styles, name) {
+    this.shimPolyfillDirectives(styles, name);
+    this.applyShimming(styles, name);
+  },
+  registerDefinition: function(root, name, extendsName) {
+    var def = this.registry[name] = {
+      root: root,
+      name: name,
+      extendsName: extendsName
+    }
+    var styles = root.querySelectorAll('style');
+    styles = styles ? Array.prototype.slice.call(styles, 0) : [];
+    def.rootStyles = styles;
+    def.scopeStyles = def.rootStyles;
+    var extendee = this.registry[def.extendsName];
+    if (extendee) {
+      def.scopeStyles = def.scopeStyles.concat(extendee.scopeStyles);
+    }
+    return def;
+  },
+  applyScopeToContent: function(root, name) {
+    if (root) {
+      // add the name attribute to each node in root.
+      Array.prototype.forEach.call(root.querySelectorAll('*'),
+          function(node) {
+            node.setAttribute(name, '');
+          });
+      // and template contents too
+      Array.prototype.forEach.call(root.querySelectorAll('template'),
+          function(template) {
+            this.applyScopeToContent(template.content, name);
+          },
+          this);
+    }
+  },
+  /*
+   * Process styles to convert native ShadowDOM rules that will trip
+   * up the css parser; we rely on decorating the stylesheet with comments.
+   *
+   * For example, we convert this rule:
+   *
+   * (comment start) @polyfill @host g-menu-item (comment end)
+   * shadow::-webkit-distributed(g-menu-item) {
+   *
+   * to this:
+   *
+   * scopeName g-menu-item {
+   *
+  **/
+  shimPolyfillDirectives: function(styles, name) {
+    if (styles) {
+      Array.prototype.forEach.call(styles, function(s) {
+        s.textContent = this.convertPolyfillDirectives(s.textContent, name);
+      }, this);
+    }
+  },
+  convertPolyfillDirectives: function(cssText, name) {
+    var r = '', l = 0, matches, selector;
+    while (matches = cssPolyfillCommentRe.exec(cssText)) {
+      r += cssText.substring(l, matches.index);
+      // remove end comment delimiter (*/)
+      selector = matches[1].slice(0, -2).replace(hostRe, name);
+      r += this.scopeSelector(selector, name) + '{';
+      l = cssPolyfillCommentRe.lastIndex;
+    }
+    r += cssText.substring(l, cssText.length);
+    return r;
+  },
+  // apply @host and scope shimming
+  applyShimming: function(styles, name) {
+    var cssText = this.shimAtHost(styles, name);
+    cssText += this.shimScoping(styles, name);
+    addCssToDocument(cssText);
+  },
+  // form: @host { .foo { declarations } }
+  // becomes: scopeName.foo { declarations }
+  shimAtHost: function(styles, name) {
+    if (styles) {
+      return this.convertAtHostStyles(styles, name);
+    }
+  },
+  convertAtHostStyles: function(styles, name) {
+    var cssText = stylesToCssText(styles);
+    var r = '', l=0, matches;
+    while (matches = hostRuleRe.exec(cssText)) {
+      r += cssText.substring(l, matches.index);
+      r += this.scopeHostCss(matches[1], name);
+      l = hostRuleRe.lastIndex;
+    }
+    r += cssText.substring(l, cssText.length);
+    var re = new RegExp('^' + name + selectorReSuffix, 'm');
+    var cssText = rulesToCss(this.findAtHostRules(cssToRules(r),
+      re));
+    return cssText;
+  },
+  scopeHostCss: function(cssText, name) {
+    var r = '', matches;
+    while (matches = selectorRe.exec(cssText)) {
+      r += this.scopeHostSelector(matches[1], name) +' ' + matches[2] + '\n\t';
+    }
+    return r;
+  },
+  // supports scopig by name and  [is=name] syntax
+  scopeHostSelector: function(selector, name) {
+    var r = [], parts = selector.split(','), is = '[is=' + name + ']';
+    parts.forEach(function(p) {
+      p = p.trim();
+      // selector: *|:scope -> name
+      if (p.match(hostElementRe)) {
+        p = p.replace(hostElementRe, name + '$1$3, ' + is + '$1$3');
+      // selector: .foo -> name.foo, [bar] -> name[bar]
+      } else if (p.match(hostFixableRe)) {
+        p = name + p + ', ' + is + p;
+      }
+      r.push(p);
+    }, this);
+    return r.join(', ');
+  },
+  // consider styles that do not include component name in the selector to be
+  // unscoped and in need of promotion;
+  // for convenience, also consider keyframe rules this way.
+  findAtHostRules: function(cssRules, matcher) {
+    return Array.prototype.filter.call(cssRules,
+      this.isHostRule.bind(this, matcher));
+  },
+  isHostRule: function(matcher, cssRule) {
+    return (cssRule.selectorText && cssRule.selectorText.match(matcher)) ||
+      (cssRule.cssRules && this.findAtHostRules(cssRule.cssRules, matcher).length) ||
+      (cssRule.type == CSSRule.WEBKIT_KEYFRAMES_RULE);
+  },
+  /* Ensure styles are scoped. Pseudo-scoping takes a rule like:
+   *
+   *  .foo {... }
+   *
+   *  and converts this to
+   *
+   *  scopeName .foo { ... }
+  */
+  shimScoping: function(styles, name) {
+    if (styles) {
+      return this.convertScopedStyles(styles, name);
+    }
+  },
+  convertScopedStyles: function(styles, name) {
+    Array.prototype.forEach.call(styles, function(s) {
+      if (s.parentNode) {
+        s.parentNode.removeChild(s);
+      }
+    });
+    var cssText = stylesToCssText(styles).replace(hostRuleRe, '');
+    cssText = this.convertPseudos(cssText);
+    var rules = cssToRules(cssText);
+    cssText = this.scopeRules(rules, name);
+    return cssText;
+  },
+  convertPseudos: function(cssText) {
+    return cssText.replace(cssPseudoRe, ' [pseudo=$1]');
+  },
+  // change a selector like 'div' to 'name div'
+  scopeRules: function(cssRules, name) {
+    var cssText = '';
+    Array.prototype.forEach.call(cssRules, function(rule) {
+      if (rule.selectorText && (rule.style && rule.style.cssText)) {
+        cssText += this.scopeSelector(rule.selectorText, name,
+          this.strictStyling) + ' {\n\t';
+        cssText += this.propertiesFromRule(rule) + '\n}\n\n';
+      } else if (rule.media) {
+        cssText += '@media ' + rule.media.mediaText + ' {\n';
+        cssText += this.scopeRules(rule.cssRules, name);
+        cssText += '\n}\n\n';
+      } else if (rule.cssText) {
+        cssText += rule.cssText + '\n\n';
+      }
+    }, this);
+    return cssText;
+  },
+  scopeSelector: function(selector, name, strict) {
+    var r = [], parts = selector.split(',');
+    parts.forEach(function(p) {
+      p = p.trim();
+      if (this.selectorNeedsScoping(p, name)) {
+        p = strict ? this.applyStrictSelectorScope(p, name) :
+          this.applySimpleSelectorScope(p, name);
+      }
+      r.push(p);
+    }, this);
+    return r.join(', ');
+  },
+  selectorNeedsScoping: function(selector, name) {
+    var matchScope = '(' + name + '|\\[is=' + name + '\\])';
+    var re = new RegExp('^' + matchScope + selectorReSuffix, 'm');
+    return !selector.match(re);
+  },
+  // scope via name and [is=name]
+  applySimpleSelectorScope: function(selector, name) {
+    return name + ' ' + selector + ', ' + '[is=' + name + '] ' + selector;
+  },
+  // return a selector with [name] suffix on each simple selector
+  // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name]
+  applyStrictSelectorScope: function(selector, name) {
+    var splits = [' ', '>', '+', '~'],
+      scoped = selector,
+      attrName = '[' + name + ']';
+    splits.forEach(function(sep) {
+      var parts = scoped.split(sep);
+      scoped = parts.map(function(p) {
+        var t = p.trim();
+        if (t && (splits.indexOf(t) < 0) && (t.indexOf(attrName) < 0)) {
+          p = t.replace(/([^:]*)(:*)(.*)/, '$1' + attrName + '$2$3')
+        }
+        return p;
+      }).join(sep);
+    });
+    return scoped;
+  },
+  propertiesFromRule: function(rule) {
+    var properties = rule.style.cssText;
+    // TODO(sorvell): Chrome cssom incorrectly removes quotes from the content
+    // property. (https://code.google.com/p/chromium/issues/detail?id=247231)
+    if (rule.style.content && !rule.style.content.match(/['"]+/)) {
+      properties = 'content: \'' + rule.style.content + '\';\n' +
+        rule.style.cssText.replace(/content:[^;]*;/g, '');
+    }
+    return properties;
+  }
+};
+
+var hostRuleRe = /@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,
+    selectorRe = /([^{]*)({[\s\S]*?})/gim,
+    hostElementRe = /(.*)((?:\*)|(?:\:scope))(.*)/,
+    hostFixableRe = /^[.\[:]/,
+    cssCommentRe = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,
+    cssPolyfillCommentRe = /\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,
+    cssPseudoRe = /::(x-[^\s{,(]*)/gim,
+    selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$',
+    hostRe = /@host/gim;
+
+function stylesToCssText(styles, preserveComments) {
+  var cssText = '';
+  Array.prototype.forEach.call(styles, function(s) {
+    cssText += s.textContent + '\n\n';
+  });
+  // strip comments for easier processing
+  if (!preserveComments) {
+    cssText = cssText.replace(cssCommentRe, '');
+  }
+  return cssText;
+}
+
+function cssToRules(cssText) {
+  var style = document.createElement('style');
+  style.textContent = cssText;
+  document.head.appendChild(style);
+  var rules = style.sheet.cssRules;
+  style.parentNode.removeChild(style);
+  return rules;
+}
+
+function rulesToCss(cssRules) {
+  for (var i=0, css=[]; i < cssRules.length; i++) {
+    css.push(cssRules[i].cssText);
+  }
+  return css.join('\n\n');
+}
+
+function addCssToDocument(cssText) {
+  if (cssText) {
+    getSheet().appendChild(document.createTextNode(cssText));
+  }
+}
+
+var sheet;
+function getSheet() {
+  if (!sheet) {
+    sheet = document.createElement("style");
+    sheet.setAttribute('ShadowCSSShim', '');
+  }
+  return sheet;
+}
+
+// add polyfill stylesheet to document
+if (window.ShadowDOMPolyfill) {
+  addCssToDocument('style { display: none !important; }\n');
+  var head = document.querySelector('head');
+  head.insertBefore(getSheet(), head.childNodes[0]);
+}
+
+// exports
+scope.ShadowCSS = ShadowCSS;
+
+})(window.Platform);
\ No newline at end of file
diff --git a/pkg/shadow_dom/lib/src/platform/patches-shadow-css.js b/pkg/shadow_dom/lib/src/platform/patches-shadow-css.js
new file mode 100644
index 0000000..9525570
--- /dev/null
+++ b/pkg/shadow_dom/lib/src/platform/patches-shadow-css.js
@@ -0,0 +1,65 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+(function(scope) {
+  // TODO(terry): Remove shimShadowDOMStyling2 until wrap/unwrap from a
+  //              dart:html Element to a JS DOM node is available.
+  /**
+   * Given the content of a STYLE tag and the name of a component shim the CSS
+   * and return the new scoped CSS to replace the STYLE's content.  The content
+   * is replaced in Dart's implementation of PolymerElement.
+   */
+  function shimShadowDOMStyling2(styleContent, name) {
+    if (window.ShadowDOMPolyfill) {
+      var content = this.convertPolyfillDirectives(styleContent, name);
+
+      // applyShimming calls shimAtHost and shipScoping
+      // shimAtHost code:
+      var r = '', l=0, matches;
+      while (matches = hostRuleRe.exec(content)) {
+        r += content.substring(l, matches.index);
+        r += this.scopeHostCss(matches[1], name);
+        l = hostRuleRe.lastIndex;
+      }
+      r += content.substring(l, content.length);
+      var re = new RegExp('^' + name + selectorReSuffix, 'm');
+      var atHostCssText = rulesToCss(this.findAtHostRules(cssToRules(r), re));
+
+      // shimScoping code:
+      // strip comments for easier processing
+      content = content.replace(cssCommentRe, '');
+
+      content = this.convertPseudos(content);
+      var rules = cssToRules(content);
+      var cssText = this.scopeRules(rules, name);
+
+      return atHostCssText + cssText;
+    }
+  }
+
+  // Minimal copied code from ShadowCSS, that is not exposed in
+  // PlatForm.ShadowCSS (local code).
+  var hostRuleRe = /@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,
+    cssCommentRe = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,
+    selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$';
+
+  function cssToRules(cssText) {
+    var style = document.createElement('style');
+    style.textContent = cssText;
+    document.head.appendChild(style);
+    var rules = style.sheet.cssRules;
+    style.parentNode.removeChild(style);
+    return rules;
+  }
+
+  function rulesToCss(cssRules) {
+    for (var i=0, css=[]; i < cssRules.length; i++) {
+      css.push(cssRules[i].cssText);
+    }
+    return css.join('\n\n');
+  }
+
+  // exports
+  scope.ShadowCSS.shimShadowDOMStyling2 = shimShadowDOMStyling2;
+})(window.Platform);
diff --git a/pkg/shadow_dom/lib/src/platform/patches-shadowdom-polyfill-before.js b/pkg/shadow_dom/lib/src/platform/patches-shadowdom-polyfill-before.js
new file mode 100644
index 0000000..fe15015
--- /dev/null
+++ b/pkg/shadow_dom/lib/src/platform/patches-shadowdom-polyfill-before.js
@@ -0,0 +1,13 @@
+/*
+ * Copyright 2013 The Polymer Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style
+ * license that can be found in the LICENSE file.
+ */
+(function() {
+  // TODO(jmesserly): fix dart:html to use unprefixed name
+  if (Element.prototype.webkitCreateShadowRoot) {
+    Element.prototype.webkitCreateShadowRoot = function() {
+      return window.ShadowDOMPolyfill.wrapIfNeeded(this).createShadowRoot();
+    };
+  }
+})();
diff --git a/pkg/shadow_dom/lib/src/platform/patches-shadowdom-polyfill.js b/pkg/shadow_dom/lib/src/platform/patches-shadowdom-polyfill.js
new file mode 100644
index 0000000..cafb597
--- /dev/null
+++ b/pkg/shadow_dom/lib/src/platform/patches-shadowdom-polyfill.js
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2013 The Polymer Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style
+ * license that can be found in the LICENSE file.
+ */
+(function() {
+  var ShadowDOMPolyfill = window.ShadowDOMPolyfill;
+  var wrap = ShadowDOMPolyfill.wrap;
+
+  // patch in prefixed name
+  Object.defineProperties(HTMLElement.prototype, {
+    //TODO(sjmiles): review accessor alias with Arv
+    webkitShadowRoot: {
+      get: function() {
+        return this.shadowRoot;
+      }
+    }
+  });
+
+  //TODO(sjmiles): review method alias with Arv
+  HTMLElement.prototype.webkitCreateShadowRoot =
+      HTMLElement.prototype.createShadowRoot;
+
+  // TODO(jmesserly): we need to wrap document somehow (a dart:html hook?)
+  window.dartExperimentalFixupGetTag = function(originalGetTag) {
+    var NodeList = ShadowDOMPolyfill.wrappers.NodeList;
+    var ShadowRoot = ShadowDOMPolyfill.wrappers.ShadowRoot;
+    var isWrapper = ShadowDOMPolyfill.isWrapper;
+    var unwrap = ShadowDOMPolyfill.unwrap;
+    function getTag(obj) {
+      if (obj instanceof NodeList) return 'NodeList';
+      if (obj instanceof ShadowRoot) return 'ShadowRoot';
+      if (obj instanceof MutationRecord) return 'MutationRecord';
+      if (obj instanceof MutationObserver) return 'MutationObserver';
+
+      if (isWrapper(obj)) {
+        obj = unwrap(obj);
+
+        // Fix up class names for Firefox. For some of them like
+        // HTMLFormElement and HTMLInputElement, the "constructor" property of
+        // the unwrapped nodes points at the wrapper for some reason.
+        // TODO(jmesserly): figure out why this is happening.
+        var ctor = obj.constructor;
+        if (ctor && ctor._ShadowDOMPolyfill$isGeneratedWrapper) {
+          var name = ctor._ShadowDOMPolyfill$cacheTag_;
+          if (!name) {
+            name = Object.prototype.toString.call(obj);
+            name = name.substring(8, name.length - 1);
+            ctor._ShadowDOMPolyfill$cacheTag_ = name;
+          }
+          return name;
+        }
+      }
+      return originalGetTag(obj);
+    }
+
+    return getTag;
+  };
+})();
diff --git a/pkg/shadow_dom/lib/src/platform/platform-init.js b/pkg/shadow_dom/lib/src/platform/platform-init.js
new file mode 100644
index 0000000..4e83afc
--- /dev/null
+++ b/pkg/shadow_dom/lib/src/platform/platform-init.js
@@ -0,0 +1,5 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+var Platform = {};
diff --git a/pkg/shadow_dom/test/runner.html b/pkg/shadow_dom/test/runner.html
new file mode 100644
index 0000000..83dd0ee
--- /dev/null
+++ b/pkg/shadow_dom/test/runner.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<!--
+Copyright 2012 The Polymer Authors. All rights reserved.
+Use of this source code is governed by a BSD-style
+license that can be found in the LICENSE file.
+-->
+<meta charset="utf-8">
+<link rel="stylesheet" href="../tool/node_modules/mocha/mocha.css">
+<script src="../tool/node_modules/chai/chai.js"></script>
+<script src="../tool/node_modules/mocha/mocha.js"></script>
+<script src="../tools/test/mocha-htmltest.js"></script>
+<script src="../tool/shadowdom.js"></script>
+<script src="../../../third_party/polymer/ShadowDOM/test/test.main.js"></script>
+<div id="mocha"></div>
+<script>
+mocha.run();
+</script>
diff --git a/pkg/shadow_dom/test/runner.min.html b/pkg/shadow_dom/test/runner.min.html
new file mode 100644
index 0000000..6c45525
--- /dev/null
+++ b/pkg/shadow_dom/test/runner.min.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<!--
+Copyright 2012 The Polymer Authors. All rights reserved.
+Use of this source code is governed by a BSD-style
+license that can be found in the LICENSE file.
+-->
+<meta charset="utf-8">
+<link rel="stylesheet" href="../tool/node_modules/mocha/mocha.css">
+<script src="../tool/node_modules/chai/chai.js"></script>
+<script src="../tool/node_modules/mocha/mocha.js"></script>
+<script src="../tools/test/mocha-htmltest.js"></script>
+<script src="../tool/shadowdom.min.js"></script>
+<script src="../../../third_party/polymer/ShadowDOM/test/test.main.js"></script>
+<div id="mocha"></div>
+<script>
+mocha.run();
+</script>
+
diff --git a/pkg/shadow_dom/tool/build/else.js b/pkg/shadow_dom/tool/build/else.js
new file mode 100644
index 0000000..dacd762
--- /dev/null
+++ b/pkg/shadow_dom/tool/build/else.js
@@ -0,0 +1 @@
+} else {
\ No newline at end of file
diff --git a/pkg/shadow_dom/tool/build/end-if.js b/pkg/shadow_dom/tool/build/end-if.js
new file mode 100644
index 0000000..ff30235
--- /dev/null
+++ b/pkg/shadow_dom/tool/build/end-if.js
@@ -0,0 +1 @@
+}
\ No newline at end of file
diff --git a/pkg/shadow_dom/tool/build/if-poly.js b/pkg/shadow_dom/tool/build/if-poly.js
new file mode 100644
index 0000000..7503d65
--- /dev/null
+++ b/pkg/shadow_dom/tool/build/if-poly.js
@@ -0,0 +1,3 @@
+if ((!HTMLElement.prototype.createShadowRoot &&
+    !HTMLElement.prototype.webkitCreateShadowRoot) ||
+    window.__forceShadowDomPolyfill) {
diff --git a/pkg/shadow_dom/tool/conf/karma.conf.js b/pkg/shadow_dom/tool/conf/karma.conf.js
new file mode 100644
index 0000000..382e2c7
--- /dev/null
+++ b/pkg/shadow_dom/tool/conf/karma.conf.js
@@ -0,0 +1,89 @@
+// Sample Karma configuration file, that contain pretty much all the available options
+// It's used for running client tests on Travis (http://travis-ci.org/#!/karma-runner/karma)
+// Most of the options can be overriden by cli arguments (see karma --help)
+//
+// For all available config options and default values, see:
+// https://github.com/karma-runner/karma/blob/stable/lib/config.js#L54
+
+
+// base path, that will be used to resolve files and exclude
+basePath = '../';
+
+// list of files / patterns to load in the browser
+files = [
+  'tools/test/mocha-htmltest.js',
+  'conf/mocha.conf.js',
+  'node_modules/chai/chai.js',
+  'shadowdom.js',
+  'test/test.main.js',
+  {pattern: 'src/**/*.js', included: false},
+  {pattern: 'test/**/*.js', included: false},
+  {pattern: 'test/**/*.html', included: false},
+  {pattern: 'tools/**/*.js', included: false}
+];
+
+// list of files to exclude
+exclude = [];
+
+frameworks = ['mocha'];
+
+// use dots reporter, as travis terminal does not support escaping sequences
+// possible values: 'dots', 'progress', 'junit', 'teamcity'
+// CLI --reporters progress
+reporters = ['progress'];
+
+// web server port
+// CLI --port 9876
+port = 9876;
+
+// cli runner port
+// CLI --runner-port 9100
+runnerPort = 9100;
+
+// enable / disable colors in the output (reporters and logs)
+// CLI --colors --no-colors
+colors = true;
+
+// level of logging
+// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
+// CLI --log-level debug
+logLevel = LOG_INFO;
+
+// enable / disable watching file and executing tests whenever any file changes
+// CLI --auto-watch --no-auto-watch
+autoWatch = true;
+
+// Start these browsers, currently available:
+// - Chrome
+// - ChromeCanary
+// - Firefox
+// - Opera
+// - Safari (only Mac)
+// - PhantomJS
+// - IE (only Windows)
+// CLI --browsers Chrome,Firefox,Safari
+browsers = ['ChromeCanary'];
+
+// If browser does not capture in given timeout [ms], kill it
+// CLI --capture-timeout 5000
+captureTimeout = 50000;
+
+// Auto run tests on start (when browsers are captured) and exit
+// CLI --single-run --no-single-run
+singleRun = true;
+
+// report which specs are slower than 500ms
+// CLI --report-slower-than 500
+reportSlowerThan = 500;
+
+// compile coffee scripts
+preprocessors = {
+};
+
+plugins = [
+  'karma-mocha',
+  'karma-chrome-launcher',
+  'karma-firefox-launcher',
+  'karma-script-launcher',
+  'karma-crbot-reporter'
+]
diff --git a/pkg/shadow_dom/tool/conf/mocha.conf.js b/pkg/shadow_dom/tool/conf/mocha.conf.js
new file mode 100644
index 0000000..11dd0d6
--- /dev/null
+++ b/pkg/shadow_dom/tool/conf/mocha.conf.js
@@ -0,0 +1 @@
+mocha.setup({ui:'tdd',htmlbase: '/base/test/'});
diff --git a/pkg/shadow_dom/tool/gruntfile.js b/pkg/shadow_dom/tool/gruntfile.js
new file mode 100644
index 0000000..f245d73
--- /dev/null
+++ b/pkg/shadow_dom/tool/gruntfile.js
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2013 The Polymer Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style
+ * license that can be found in the LICENSE file.
+ */
+module.exports = function(grunt) {
+  ShadowDOMPolyfill = [
+    'sidetable.js',
+    'wrappers.js',
+    'wrappers/events.js',
+    'wrappers/NodeList.js',
+    'wrappers/Node.js',
+    'querySelector.js',
+    'wrappers/node-interfaces.js',
+    'wrappers/CharacterData.js',
+    'wrappers/Element.js',
+    'wrappers/HTMLElement.js',
+    'wrappers/HTMLContentElement.js',
+    'wrappers/HTMLShadowElement.js',
+    'wrappers/HTMLTemplateElement.js',
+    'wrappers/HTMLUnknownElement.js',
+    'wrappers/generic.js',
+    'wrappers/ShadowRoot.js',
+    'ShadowRenderer.js',
+    'wrappers/Document.js',
+    'wrappers/Window.js',
+    'wrappers/MutationObserver.js',
+    'wrappers/override-constructors.js'
+  ];
+  ShadowDOMPolyfill = ShadowDOMPolyfill.map(function(p) {
+    return '../../../third_party/polymer/ShadowDOM/src/' + p;
+  });
+
+  // Apply partial patch from Polymer/Platform, dart2js, CSS
+  // polyfill from platform and dart2js CSS patches:
+  ShadowDOMPolyfill.unshift(
+    '../lib/src/platform/patches-shadowdom-polyfill-before.js'
+    );
+  ShadowDOMPolyfill.push(
+    '../lib/src/platform/patches-shadowdom-polyfill.js',
+    '../lib/src/platform/platform-init.js',
+    '../lib/src/platform/ShadowCSS.js',
+    '../lib/src/platform/patches-shadow-css.js'
+    );
+
+  // Only load polyfill if not natively present.
+  ConditionalShadowDOM = [].concat(
+    'build/if-poly.js',
+    ShadowDOMPolyfill,
+    'build/end-if.js'
+  );
+
+  // karma setup
+  var browsers;
+  (function() {
+    try {
+      var config = grunt.file.readJSON('local.json');
+      if (config.browsers) {
+        browsers = config.browsers;
+      }
+    } catch (e) {
+      var os = require('os');
+      browsers = ['Chrome', 'Firefox'];
+      if (os.type() === 'Darwin') {
+        browsers.push('ChromeCanary');
+      }
+      if (os.type() === 'Windows_NT') {
+        browsers.push('IE');
+      }
+    }
+  })();
+  grunt.initConfig({
+    karma: {
+      options: {
+        configFile: 'conf/karma.conf.js',
+        keepalive: true,
+        browsers: browsers
+      },
+      buildbot: {
+        browsers: browsers,
+        reporters: ['crbot'],
+        logLevel: 'OFF'
+      },
+      ShadowDOM: {
+        browsers: browsers
+      }
+    },
+    concat: {
+      ShadowDOM: {
+        src: ConditionalShadowDOM,
+        dest: '../lib/shadow_dom.debug.js',
+        nonull: true
+      }
+    },
+    uglify: {
+      ShadowDOM: {
+        options: {
+          compress: {
+            // TODO(sjmiles): should be false by default (?)
+            // https://github.com/mishoo/UglifyJS2/issues/165
+            unsafe: false
+          }
+          //compress: true, Xmangle: true, beautify: true, unsafe: false
+        },
+        files: {
+          '../lib/shadow_dom.min.js': ['../lib/shadow_dom.debug.js']
+        }
+      }
+    },
+
+    yuidoc: {
+      compile: {
+        name: '<%= pkg.name %>',
+        description: '<%= pkg.description %>',
+        version: '<%= pkg.version %>',
+        url: '<%= pkg.homepage %>',
+        options: {
+          exclude: 'third_party',
+          paths: '.',
+          outdir: 'docs',
+          linkNatives: 'true',
+          tabtospace: 2,
+          themedir: '../docs/doc_themes/simple'
+        }
+      }
+    },
+    pkg: grunt.file.readJSON('package.json')
+  });
+
+  // plugins
+  grunt.loadNpmTasks('grunt-contrib-concat');
+  grunt.loadNpmTasks('grunt-contrib-uglify');
+  grunt.loadNpmTasks('grunt-contrib-yuidoc');
+  grunt.loadNpmTasks('grunt-karma-0.9.1');
+
+  // tasks
+  grunt.registerTask('default', ['concat', 'uglify']);
+  grunt.registerTask('minify', ['concat', 'uglify']);
+  grunt.registerTask('docs', ['yuidoc']);
+  grunt.registerTask('test', ['karma:ShadowDOM']);
+  grunt.registerTask('test-buildbot', ['karma:buildbot']);
+};
+
diff --git a/pkg/shadow_dom/tool/package.json b/pkg/shadow_dom/tool/package.json
new file mode 100644
index 0000000..766ca28
--- /dev/null
+++ b/pkg/shadow_dom/tool/package.json
@@ -0,0 +1,16 @@
+{
+  "name": "ShadowDOM",
+  "version": "0.0.1",
+  "devDependencies": {
+    "mocha": ">=1.9",
+    "chai": "*",
+    "grunt": "*",
+    "grunt-contrib-concat": "*",
+    "grunt-contrib-uglify": "*",
+    "grunt-contrib-yuidoc": "~0.4.0",
+    "grunt-karma-0.9.1": "~0.4.3",
+    "karma-mocha": "*",
+    "karma-script-launcher": "*",
+    "karma-crbot-reporter": "*"
+  }
+}
diff --git a/pkg/shadow_dom/tool/play.html b/pkg/shadow_dom/tool/play.html
new file mode 100644
index 0000000..f17b471
--- /dev/null
+++ b/pkg/shadow_dom/tool/play.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!--
+Copyright 2012 The Polymer Authors. All rights reserved.
+Use of this source code is goverened by a BSD-style
+license that can be found in the LICENSE file.
+-->
+<meta charset="utf-8">
+<script src="shadowdom.js"></script>
+<style>
+
+.el,
+.sr {
+  height: 300px;
+  width: 300px;
+}
+
+</style>
+<textarea class="el" placeholder="Element host"></textarea>
+<textarea class="sr" placeholder="Shadow Root"></textarea>
+<button onclick="update()">Update</button>
+
+<div class="test">Real</div>
+
+<script>
+
+var el = document.querySelector('.test');
+var sr = el.createShadowRoot();
+
+sr.innerHTML = 'Before <content></content> After';
+
+function update() {
+  el.innerHTML = document.querySelector('.el').value;
+  sr.innerHTML = document.querySelector('.sr').value;
+}
+
+document.querySelector('.el').value = el.innerHTML;
+document.querySelector('.sr').value = sr.innerHTML;
+
+</script>
diff --git a/pkg/shadow_dom/tool/readme.txt b/pkg/shadow_dom/tool/readme.txt
new file mode 100644
index 0000000..829c697
--- /dev/null
+++ b/pkg/shadow_dom/tool/readme.txt
@@ -0,0 +1,18 @@
+How to build shadow_dom package:
+
+- Install nodejs and npm
+     sudo apt-get install nodejs
+     sudo apt-get install npm
+- Install grunt http://gruntjs.com/getting-started
+
+- Change to the shadow_dom tool directory
+     cd pkg/shadow_dom/tool
+
+- Install project dependencies
+     npm install
+
+- Run grunt to generate the shadow_dom packages in pkg/shadow_dom/lib
+     grunt
+
+
+
diff --git a/pkg/shadow_dom/tool/shadowdom.js b/pkg/shadow_dom/tool/shadowdom.js
new file mode 100644
index 0000000..91f5819
--- /dev/null
+++ b/pkg/shadow_dom/tool/shadowdom.js
@@ -0,0 +1,44 @@
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function() {
+  var thisFile = 'shadowdom.js';
+  var base = '';
+  Array.prototype.forEach.call(document.querySelectorAll('script[src]'), function(s) {
+    var src = s.getAttribute('src');
+    var re = new RegExp(thisFile + '[^\\\\]*');
+    var match = src.match(re);
+    if (match) {
+      base = src.slice(0, -match[0].length);
+    }
+  });
+  base += '../../../third_party/polymer/ShadowDOM/src/';
+
+  [
+    'sidetable.js',
+    'wrappers.js',
+    'wrappers/events.js',
+    'wrappers/NodeList.js',
+    'wrappers/Node.js',
+    'querySelector.js',
+    'wrappers/node-interfaces.js',
+    'wrappers/CharacterData.js',
+    'wrappers/Element.js',
+    'wrappers/HTMLElement.js',
+    'wrappers/HTMLContentElement.js',
+    'wrappers/HTMLShadowElement.js',
+    'wrappers/HTMLTemplateElement.js',
+    'wrappers/HTMLUnknownElement.js',
+    'wrappers/generic.js',
+    'wrappers/ShadowRoot.js',
+    'ShadowRenderer.js',
+    'wrappers/Document.js',
+    'wrappers/Window.js',
+    'wrappers/MutationObserver.js',
+    'wrappers/override-constructors.js'
+  ].forEach(function(src) {
+    document.write('<script src="' + base + src + '"></script>');
+  });
+
+})();
diff --git a/pkg/unittest/lib/html_config.dart b/pkg/unittest/lib/html_config.dart
index 86123cf..2dde44b 100644
--- a/pkg/unittest/lib/html_config.dart
+++ b/pkg/unittest/lib/html_config.dart
@@ -95,7 +95,7 @@
                .replaceAll('>','&gt;');
 }
 
-class HtmlConfiguration extends Configuration {
+class HtmlConfiguration extends SimpleConfiguration {
   /** Whether this is run within dartium layout tests. */
   final bool _isLayoutTest;
   HtmlConfiguration(this._isLayoutTest);
diff --git a/pkg/unittest/lib/html_enhanced_config.dart b/pkg/unittest/lib/html_enhanced_config.dart
index 5cc5fe5..723fc0c 100644
--- a/pkg/unittest/lib/html_enhanced_config.dart
+++ b/pkg/unittest/lib/html_enhanced_config.dart
@@ -15,7 +15,7 @@
 import 'dart:html';
 import 'unittest.dart';
 
-class HtmlEnhancedConfiguration extends Configuration {
+class HtmlEnhancedConfiguration extends SimpleConfiguration {
   /** Whether this is run within dartium layout tests. */
   final bool _isLayoutTest;
   HtmlEnhancedConfiguration(this._isLayoutTest);
diff --git a/pkg/unittest/lib/interactive_html_config.dart b/pkg/unittest/lib/interactive_html_config.dart
index 106b071..27791ee 100644
--- a/pkg/unittest/lib/interactive_html_config.dart
+++ b/pkg/unittest/lib/interactive_html_config.dart
@@ -64,7 +64,7 @@
 }
 
 
-class HtmlConfiguration extends Configuration {
+class HtmlConfiguration extends SimpleConfiguration {
   StreamSubscription _errorSubscription;
 
   void _installErrorHandler() {
diff --git a/pkg/unittest/lib/src/configuration.dart b/pkg/unittest/lib/src/configuration.dart
new file mode 100644
index 0000000..4571b90
--- /dev/null
+++ b/pkg/unittest/lib/src/configuration.dart
@@ -0,0 +1,76 @@
+// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of unittest;
+
+/**
+ * Describes the interface used by the unit test system for communicating the
+ * results of a test run.
+ */
+abstract class Configuration {
+
+  /**
+   * Creates an instance of [SimpleConfiguration].
+   */
+  factory Configuration() => new SimpleConfiguration();
+
+  /**
+   * If [true], tests are started automatically. Otherwise [runTests]
+   * must be called explicitly after tests are set up.
+   */
+  bool get autoStart;
+
+  /**
+   * Called as soon as the unittest framework becomes initialized. This is done
+   * even before tests are added to the test framework. It might be used to
+   * determine/debug errors that occur before the test harness starts executing.
+   * It is also used to tell the vm or browser that tests are going to be run
+   * asynchronously and that the process should wait until they are done.
+   */
+  void onInit();
+
+  /** Called as soon as the unittest framework starts running. */
+  void onStart() {}
+
+  /**
+   * Called when each test starts. Useful to show intermediate progress on
+   * a test suite.
+   */
+  void onTestStart(TestCase testCase);
+
+  /**
+   * Called when each test is first completed. Useful to show intermediate
+   * progress on a test suite.
+   */
+  void onTestResult(TestCase testCase);
+
+  /**
+   * Called when an already completed test changes state. For example: a test
+   * that was marked as passing may later be marked as being in error because
+   * it still had callbacks being invoked.
+   */
+  void onTestResultChanged(TestCase testCase);
+
+  /**
+   * Handles the logging of messages by a test case.
+   */
+  void onLogMessage(TestCase testCase, String message);
+
+  /**
+   * Called when the unittest framework is done running. [success] indicates
+   * whether all tests passed successfully.
+   */
+  void onDone(bool success);
+
+  /**
+   * Called with the result of all test cases. Browser tests commonly override
+   * this to reformat the output.
+   *
+   * When [uncaughtError] is not null, it contains an error that occured outside
+   * of tests (e.g. setting up the test).
+   */
+  void onSummary(int passed, int failed, int errors, List<TestCase> results,
+      String uncaughtError);
+}
+
diff --git a/pkg/unittest/lib/src/expect.dart b/pkg/unittest/lib/src/expect.dart
index 0df9068..76151c0 100644
--- a/pkg/unittest/lib/src/expect.dart
+++ b/pkg/unittest/lib/src/expect.dart
@@ -5,15 +5,12 @@
 part of matcher;
 
 /** The objects thrown by the default failure handler. */
-class TestFailure {
-  String _message;
+class TestFailure extends Error {
+  final String message;
 
-  get message => _message;
-  set message(String value) => _message = value;
+  TestFailure(this.message);
 
-  TestFailure(String message) : _message = message;
-
-  String toString() => _message;
+  String toString() => message;
 }
 
 /**
@@ -30,7 +27,7 @@
 /**
  * Some matchers, like those for Futures and exception testing,
  * can fail in asynchronous sections, and throw exceptions.
- * A user of this library will typically want to catch and handle 
+ * A user of this library will typically want to catch and handle
  * such exceptions. The [wrapAsync] property is a function that
  * can wrap callbacks used by these Matchers so that they can be
  * used safely. For example, the unittest library will set this
diff --git a/pkg/unittest/lib/src/config.dart b/pkg/unittest/lib/src/simple_configuration.dart
similarity index 79%
rename from pkg/unittest/lib/src/config.dart
rename to pkg/unittest/lib/src/simple_configuration.dart
index d79306f..b9d3a02 100644
--- a/pkg/unittest/lib/src/config.dart
+++ b/pkg/unittest/lib/src/simple_configuration.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -7,9 +7,9 @@
 // A custom failure handler for [expect] that routes expect failures
 // to the config.
 class _ExpectFailureHandler extends DefaultFailureHandler {
-  Configuration _config;
+  final SimpleConfiguration _config;
 
-  _ExpectFailureHandler(this._config) : super();
+  _ExpectFailureHandler(this._config);
 
   void fail(String reason) {
     _config.onExpectFailure(reason);
@@ -22,8 +22,7 @@
  * advantage of the platform can create a subclass and override methods from
  * this class.
  */
-
-class Configuration {
+class SimpleConfiguration implements Configuration {
   // The VM won't shut down if a receive port is open. Use this to make sure
   // we correctly wait for asynchronous tests.
   ReceivePort _receivePort;
@@ -35,11 +34,7 @@
    */
   final String name = 'Configuration';
 
-  /**
-   * If true, then tests are started automatically (otherwise [runTests]
-   * must be called explicitly after the tests are set up.
-   */
-  final bool autoStart = true;
+  bool get autoStart => true;
 
   /**
    * If true (the default), throw an exception at the end if any tests failed.
@@ -61,22 +56,15 @@
    * The constructor sets up a failure handler for [expect] that redirects
    * [expect] failures to [onExpectFailure].
    */
-  Configuration() {
+  SimpleConfiguration() {
     configureExpectFailureHandler(new _ExpectFailureHandler(this));
   }
-  /**
-   * Called as soon as the unittest framework becomes initialized. This is done
-   * even before tests are added to the test framework. It might be used to
-   * determine/debug errors that occur before the test harness starts executing.
-   * It is also used to tell the vm or browser that tests are going to be run
-   * asynchronously and that the process should wait until they are done.
-   */
+
   void onInit() {
     _receivePort = new ReceivePort();
     _postMessage('unittest-suite-wait-for-done');
   }
 
-  /** Called as soon as the unittest framework starts running. */
   void onStart() {}
 
   /**
@@ -91,7 +79,7 @@
 
   /**
    * Called when each test is first completed. Useful to show intermediate
-   * progress on a test suite. Derived classes should call this first 
+   * progress on a test suite. Derived classes should call this first
    * before their own override code.
    */
   void onTestResult(TestCase testCase) {
@@ -112,25 +100,20 @@
       if (testCase.result == PASS) {
         testCase._result = FAIL;
         testCase._message = reason.toString();
-        // Use the last stack as the overall failure stack.    
+        // Use the last stack as the overall failure stack.
         testCase._stackTrace = lastReasonAndTrace.last;
       } else {
         // Add the last stack to the message; we have a further stack
         // caused by some other failure.
         reason.write(lastReasonAndTrace.last);
         reason.write('\n');
-        // Add the existing reason to the end of the expect log to 
+        // Add the existing reason to the end of the expect log to
         // create the final message.
         testCase._message = '${reason.toString()}\n${testCase._message}';
       }
     }
   }
 
-  /**
-   * Called when an already completed test changes state; for example a test
-   * that was marked as passing may later be marked as being in error because
-   * it still had callbacks being invoked.
-   */
   void onTestResultChanged(TestCase testCase) {
     assert(testCase != null);
   }
@@ -159,7 +142,7 @@
       }
     }
   }
-  
+
   /**
    * Format a test result.
    */
@@ -213,10 +196,6 @@
     }
   }
 
-  /**
-   * Called when the unittest framework is done running. [success] indicates
-   * whether all tests passed successfully.
-   */
   void onDone(bool success) {
     if (success) {
       _postMessage('unittest-suite-success');
@@ -229,13 +208,7 @@
     }
   }
 
-  /** Handle errors that happen outside the tests. */
-  // TODO(vsm): figure out how to expose the stack trace here
-  // Currently e.message works in dartium, but not in dartc.
-  void handleExternalError(e, String message, [stack]) =>
-      _reportTestError('$message\nCaught $e', stack);
-
-  _postMessage(String message) {
+  void _postMessage(String message) {
     // In dart2js browser tests, the JavaScript-based test controller
     // intercepts calls to print and listens for "secret" messages.
     print(message);
diff --git a/pkg/unittest/lib/unittest.dart b/pkg/unittest/lib/unittest.dart
index 43365f4..eb186bd 100644
--- a/pkg/unittest/lib/unittest.dart
+++ b/pkg/unittest/lib/unittest.dart
@@ -146,13 +146,15 @@
 import 'dart:async';
 import 'dart:collection';
 import 'dart:isolate';
+import 'package:stack_trace/stack_trace.dart';
+
 import 'matcher.dart';
 export 'matcher.dart';
 
-import 'package:stack_trace/stack_trace.dart';
-
 import 'src/utils.dart';
-part 'src/config.dart';
+
+part 'src/configuration.dart';
+part 'src/simple_configuration.dart';
 part 'src/test_case.dart';
 
 Configuration _config;
@@ -656,16 +658,16 @@
   _runTest();
 }
 
-/**
- * Utility function that can be used to notify the test framework that an
- *  error was caught outside of this library.
- */
-void _reportTestError(String msg, trace) {
- if (_currentTestCaseIndex < testCases.length) {
-    final testCase = testCases[_currentTestCaseIndex];
-    testCase.error(msg, trace);
+/** Handle errors that happen outside the tests. */
+// TODO(vsm): figure out how to expose the stack trace here
+// Currently e.message works in dartium, but not in dartc.
+void handleExternalError(e, String message, [stack]) {
+  var msg = '$message\nCaught $e';
+
+  if (currentTestCase != null) {
+    currentTestCase.error(msg, stack);
   } else {
-    _uncaughtErrorMessage = "$msg: $trace";
+    _uncaughtErrorMessage = "$msg: $stack";
   }
 }
 
diff --git a/pkg/unittest/lib/vm_config.dart b/pkg/unittest/lib/vm_config.dart
index 7ff2154..0133186 100644
--- a/pkg/unittest/lib/vm_config.dart
+++ b/pkg/unittest/lib/vm_config.dart
@@ -11,7 +11,7 @@
 import 'dart:io';
 import 'unittest.dart';
 
-class VMConfiguration extends Configuration {
+class VMConfiguration extends SimpleConfiguration {
   // Color constants used for generating messages.
   final String GREEN_COLOR = '\u001b[32m';
   final String RED_COLOR = '\u001b[31m';
diff --git a/pkg/unittest/test/unittest_test_utils.dart b/pkg/unittest/test/unittest_test_utils.dart
index 7b171f1..03fc8d6 100644
--- a/pkg/unittest/test/unittest_test_utils.dart
+++ b/pkg/unittest/test/unittest_test_utils.dart
@@ -33,7 +33,7 @@
       '$setup:$teardown:$uncaughtError$testDetails';
 }
 
-class TestConfiguration extends Configuration {
+class TestConfiguration extends SimpleConfiguration {
 
   // Some test state that is captured.
   int count = 0; // A count of callbacks.
diff --git a/runtime/bin/builtin.dart b/runtime/bin/builtin.dart
index 700eed7..2cc50c3 100644
--- a/runtime/bin/builtin.dart
+++ b/runtime/bin/builtin.dart
@@ -77,6 +77,7 @@
 
 // Are we running on Windows?
 var _isWindows = false;
+var _workingWindowsDrivePrefix;
 // The current working directory
 var _workingDirectoryUri;
 // The URI that the entry point script was loaded from. Remembered so that
@@ -115,6 +116,7 @@
   return fixedPath;
 }
 
+
 _enforceTrailingSlash(uri) {
   // Ensure we have a trailing slash character.
   if (!uri.endsWith('/')) {
@@ -124,7 +126,19 @@
 }
 
 
+_extractDriveLetterPrefix(cwd) {
+  if (!_isWindows) {
+    return null;
+  }
+  if (cwd.length > 1 && cwd[1] == ':') {
+    return '/${cwd[0]}:';
+  }
+  return null;
+}
+
+
 void _setWorkingDirectory(cwd) {
+  _workingWindowsDrivePrefix = _extractDriveLetterPrefix(cwd);
   cwd = _sanitizeWindowsPath(cwd);
   cwd = _enforceTrailingSlash(cwd);
   _workingDirectoryUri = new Uri(scheme: 'file', path: cwd);
@@ -227,8 +241,20 @@
     throw "URIs using the 'file:' scheme may not contain a host.";
   }
 
-  _logResolution('# Path: $uri -> ${uri.path}');
-  return uri.path;
+  String path = uri.path;
+  _logResolution('# Path: $uri -> ${path}');
+  // Check that the path is not already in the form of /X:.
+  if (_isWindows && (path.length > 2) && path.startsWith('/') &&
+      (path[2] != ':')) {
+    // Absolute path on Windows without a drive letter.
+    if (_workingWindowsDrivePrefix == null) {
+      throw 'Could not determine windows drive letter prefix.';
+    }
+    _logResolution('# Path: Windows absolute path needs a drive letter.'
+                   ' Prepending $_workingWindowsDrivePrefix.');
+    path = '$_workingWindowsDrivePrefix$path';
+  }
+  return path;
 }
 
 
diff --git a/runtime/bin/io_natives.cc b/runtime/bin/io_natives.cc
index a5c7170..ff790d6 100644
--- a/runtime/bin/io_natives.cc
+++ b/runtime/bin/io_natives.cc
@@ -51,12 +51,7 @@
   V(SecureSocket_RegisterBadCertificateCallback, 2)                            \
   V(SecureSocket_RegisterHandshakeCompleteCallback, 2)                         \
   V(SecureSocket_Renegotiate, 4)                                               \
-  V(SecureSocket_InitializeLibrary, 4)                                         \
-  V(SecureSocket_AddCertificate, 2)                                            \
-  V(SecureSocket_ChangeTrust, 2)                                               \
-  V(SecureSocket_ImportCertificatesWithPrivateKeys, 2)                         \
-  V(SecureSocket_GetCertificate, 1)                                            \
-  V(SecureSocket_RemoveCertificate, 1)                                         \
+  V(SecureSocket_InitializeLibrary, 3)                                         \
   V(SecureSocket_NewServicePort, 0)                                            \
   V(SecureSocket_FilterPointer, 1)                                             \
   V(ServerSocket_CreateBindListen, 5)                                          \
diff --git a/runtime/bin/net/nss.gyp b/runtime/bin/net/nss.gyp
index dbc685a..e1c64e1 100644
--- a/runtime/bin/net/nss.gyp
+++ b/runtime/bin/net/nss.gyp
@@ -17,7 +17,6 @@
   'variables': {
     # Added by Dart.
     'nss_directory': '../../../third_party/nss',
-    'pkcs12_directory': '../../../third_party/nss_pkcs12',
     'conditions': [
       ['OS=="ios"', {
         'exclude_nss_root_certs%': 0,
@@ -1069,19 +1068,6 @@
         '<(nss_directory)/nss/lib/util/utilpars.h',
         '<(nss_directory)/nss/lib/util/utilparst.h',
         '<(nss_directory)/nss/lib/util/utilrename.h',
-        '<(pkcs12_directory)/p12creat.c',
-        '<(pkcs12_directory)/p12d.c',
-        '<(pkcs12_directory)/p12dec.c',
-        '<(pkcs12_directory)/p12e.c',
-        '<(pkcs12_directory)/p12.h',
-        '<(pkcs12_directory)/p12local.c',
-        '<(pkcs12_directory)/p12local.h',
-        '<(pkcs12_directory)/p12plcy.c',
-        '<(pkcs12_directory)/p12plcy.h',
-        '<(pkcs12_directory)/p12t.h',
-        '<(pkcs12_directory)/p12tmpl.c',
-        '<(pkcs12_directory)/pkcs12.h',
-        '<(pkcs12_directory)/pkcs12t.h',
       ],
       'sources!': [
         # mpi_arm.c is included by mpi_arm_mac.c.
@@ -1147,7 +1133,6 @@
         '<(nss_directory)/nss/lib/softoken',
         '<(nss_directory)/nss/lib/ssl',
         '<(nss_directory)/nss/lib/util',
-        '<(pkcs12_directory)',
       ],
       'direct_dependent_settings': {
         'defines': [
@@ -1174,7 +1159,6 @@
           '<(nss_directory)/nss/lib/smime',
           '<(nss_directory)/nss/lib/softoken',
           '<(nss_directory)/nss/lib/util',
-          '<(pkcs12_directory)',
         ],
       },
       'msvs_disabled_warnings': [4018, 4101, 4267, ],
diff --git a/runtime/bin/secure_socket.cc b/runtime/bin/secure_socket.cc
index 2bfa94f..5038266 100644
--- a/runtime/bin/secure_socket.cc
+++ b/runtime/bin/secure_socket.cc
@@ -10,12 +10,9 @@
 #include <stdio.h>
 #include <string.h>
 
-#include <certdb.h>
 #include <key.h>
 #include <keyt.h>
 #include <nss.h>
-#include <p12.h>
-#include <p12plcy.h>
 #include <pk11pub.h>
 #include <prerror.h>
 #include <prinit.h>
@@ -40,10 +37,10 @@
 
 bool SSLFilter::library_initialized_ = false;
 // To protect library initialization.
-dart::Mutex* SSLFilter::mutex = new dart::Mutex();
+dart::Mutex* SSLFilter::mutex_ = new dart::Mutex();
 // The password is needed when creating secure server sockets.  It can
 // be null if only secure client sockets are used.
-char* SSLFilter::password_ = NULL;
+const char* SSLFilter::password_ = NULL;
 
 // Forward declaration.
 static void ProcessFilter(Dart_Port dest_port_id,
@@ -232,7 +229,7 @@
                                       &certificate_database));
   } else if (!Dart_IsNull(certificate_database_object)) {
     Dart_ThrowException(DartUtils::NewDartArgumentError(
-        "SecureSocket.initialize: database argument is not a String or null"));
+        "Non-String certificate directory argument to SetCertificateDatabase"));
   }
   // Leave certificate_database as NULL if no value was provided.
 
@@ -247,7 +244,7 @@
     password = "";
   } else {
     Dart_ThrowException(DartUtils::NewDartArgumentError(
-        "SecureSocket.initialize: password argument is not a String or null"));
+        "Password argument to SetCertificateDatabase is not a String or null"));
   }
 
   Dart_Handle builtin_roots_object =
@@ -258,322 +255,10 @@
     ThrowIfError(Dart_BooleanValue(builtin_roots_object, &builtin_roots));
   } else {
     Dart_ThrowException(DartUtils::NewDartArgumentError(
-        "SecureSocket.initialize: useBuiltinRoots argument is not a bool"));
+        "UseBuiltinRoots argument to SetCertificateDatabase is not a bool"));
   }
 
-  Dart_Handle read_only_object =
-      ThrowIfError(Dart_GetNativeArgument(args, 3));
-  // Check that the type is boolean, and get the boolean value from it.
-  bool read_only = true;
-  if (Dart_IsBoolean(read_only_object)) {
-    ThrowIfError(Dart_BooleanValue(read_only_object, &read_only));
-  } else {
-    Dart_ThrowException(DartUtils::NewDartArgumentError(
-        "SecureSocket.initialize: readOnly argument is not a bool"));
-  }
-
-  SSLFilter::InitializeLibrary(
-      certificate_database, password, builtin_roots, read_only);
-}
-
-
-static Dart_Handle X509FromCertificate(CERTCertificate* certificate) {
-  PRTime start_validity;
-  PRTime end_validity;
-  SECStatus status =
-      CERT_GetCertTimes(certificate, &start_validity, &end_validity);
-  if (status != SECSuccess) {
-    ThrowPRException("CertificateException",
-                     "Cannot get validity times from certificate");
-  }
-  int64_t start_epoch_ms = start_validity / PR_USEC_PER_MSEC;
-  int64_t end_epoch_ms = end_validity / PR_USEC_PER_MSEC;
-  Dart_Handle subject_name_object =
-      DartUtils::NewString(certificate->subjectName);
-  Dart_Handle issuer_name_object =
-      DartUtils::NewString(certificate->issuerName);
-  Dart_Handle start_epoch_ms_int = Dart_NewInteger(start_epoch_ms);
-  Dart_Handle end_epoch_ms_int = Dart_NewInteger(end_epoch_ms);
-
-  Dart_Handle date_type =
-      DartUtils::GetDartType(DartUtils::kCoreLibURL, "DateTime");
-  Dart_Handle from_milliseconds =
-      DartUtils::NewString("fromMillisecondsSinceEpoch");
-
-  Dart_Handle start_validity_date =
-      Dart_New(date_type, from_milliseconds, 1, &start_epoch_ms_int);
-  Dart_Handle end_validity_date =
-      Dart_New(date_type, from_milliseconds, 1, &end_epoch_ms_int);
-
-  Dart_Handle x509_type =
-      DartUtils::GetDartType(DartUtils::kIOLibURL, "X509Certificate");
-  Dart_Handle arguments[] = { subject_name_object,
-                              issuer_name_object,
-                              start_validity_date,
-                              end_validity_date };
-  return Dart_New(x509_type, Dart_Null(), 4, arguments);
-}
-
-
-char* PasswordCallback(PK11SlotInfo* slot, PRBool retry, void* arg) {
-  if (!retry) {
-    return PL_strdup(static_cast<char*>(arg));  // Freed by NSS internals.
-  }
-  return NULL;
-}
-
-
-void FUNCTION_NAME(SecureSocket_AddCertificate)
-    (Dart_NativeArguments args) {
-  Dart_Handle certificate_object =
-      ThrowIfError(Dart_GetNativeArgument(args, 0));
-  Dart_Handle trust_object = ThrowIfError(Dart_GetNativeArgument(args, 1));
-
-  if (!Dart_IsList(certificate_object) || !Dart_IsString(trust_object)) {
-    Dart_ThrowException(DartUtils::NewDartArgumentError(
-        "Bad argument to SecureSocket.addCertificate"));
-  }
-
-  intptr_t length;
-  ThrowIfError(Dart_ListLength(certificate_object, &length));
-  uint8_t* certificate = reinterpret_cast<uint8_t*>(malloc(length + 1));
-  if (certificate == NULL) {
-    FATAL("Out of memory in SecureSocket.addCertificate");
-  }
-  ThrowIfError(Dart_ListGetAsBytes(
-      certificate_object, 0, certificate, length));
-
-  const char* trust_string;
-  ThrowIfError(Dart_StringToCString(trust_object,
-                                    &trust_string));
-
-  PK11SlotInfo* slot = PK11_GetInternalKeySlot();
-  SECStatus status = PK11_Authenticate(slot, PR_TRUE, SSLFilter::GetPassword());
-  PK11_FreeSlot(slot);
-  if (status == SECFailure) {
-    ThrowPRException("CertificateException",
-                     "Could not authenticate to certificate database");
-  }
-
-  CERTCertificate* cert = CERT_DecodeCertFromPackage(
-      reinterpret_cast<char*>(certificate), length);
-  if (cert == NULL) {
-    ThrowPRException("CertificateException", "Certificate cannot be decoded");
-  }
-  CERTCertTrust trust;
-  status = CERT_DecodeTrustString(&trust, trust_string);
-  if (status != SECSuccess) {
-    ThrowPRException("CertificateException", "Trust string cannot be decoded");
-  }
-  {
-    MutexLocker locker(SSLFilter::mutex);
-    status = CERT_ChangeCertTrust(CERT_GetDefaultCertDB(), cert, &trust);
-  }
-  if (status != SECSuccess) {
-    ThrowPRException("CertificateException", "Cannot set trust attributes");
-  }
-
-  Dart_SetReturnValue(args, X509FromCertificate(cert));
-  return;
-}
-
-
-/*
- * Called by the PKCS#12 decoder if a certificate's nickname collides with
- * the nickname of a different existing certificate in the database.
- */
-SECItem* nickname_callback(SECItem *old_nickname,
-                           PRBool *cancel,
-                           void *arg) {
-  *cancel = PR_TRUE;
-  return NULL;
-}
-
-
-void FUNCTION_NAME(SecureSocket_ImportCertificatesWithPrivateKeys)
-    (Dart_NativeArguments args) {
-  Dart_Handle pk12_object = ThrowIfError(Dart_GetNativeArgument(args, 0));
-  if (!Dart_IsList(pk12_object)) {
-    Dart_ThrowException(DartUtils::NewDartArgumentError(
-        "SecureSocket.importPrivateCertificates: certificates is not a List"));
-  }
-
-  Dart_Handle password_object = ThrowIfError(Dart_GetNativeArgument(args, 1));
-  if (!Dart_IsString(password_object)) {
-    Dart_ThrowException(DartUtils::NewDartArgumentError(
-        "SecureSocket.importPrivateCertificates: password is not a String"));
-  }
-
-  intptr_t length;
-  ThrowIfError(Dart_ListLength(pk12_object, &length));
-  uint8_t* pk12 = Dart_ScopeAllocate(length);
-  if (pk12 == NULL) {
-    FATAL("Out of memory in SecureSocket.importPrivateCertificates");
-  }
-  ThrowIfError(Dart_ListGetAsBytes(pk12_object, 0, pk12, length));
-
-  // A big-endian Unicode (UTF16) password.
-  intptr_t password_length;
-  ThrowIfError(Dart_StringLength(password_object, &password_length));
-  password_length++;
-  uint16_t* password = reinterpret_cast<uint16_t*>(
-      Dart_ScopeAllocate(sizeof(uint16_t) * password_length));
-  if (password == NULL) {
-    FATAL("Out of memory in SecureSocket.importPrivateCertificates");
-  }
-  intptr_t returned_length = password_length;
-  ThrowIfError(Dart_StringToUTF16(password_object, password, &returned_length));
-  ASSERT(password_length == returned_length + 1);
-  password[password_length - 1] = 0;
-  for (int i = 0; i < password_length; ++i) {
-    password[i] = Utils::HostToBigEndian16(password[i]);
-  }
-  SECItem p12_password;
-  p12_password.type = siBuffer;
-  p12_password.data = reinterpret_cast<unsigned char*>(password);
-  p12_password.len = sizeof(uint16_t) * password_length;
-
-  Dart_SetReturnValue(args, Dart_Null());
-  // Set the password callback for the certificate database we are importing to.
-  // The password for a slot is gotten from a callback, and it is freed by the
-  // caller of the callback.  The argument to the callback comes from the wincx
-  // argument to a PK11 function.
-  PK11SlotInfo* slot = PK11_GetInternalKeySlot();
-  SECStatus status = PK11_Authenticate(slot, PR_TRUE, SSLFilter::GetPassword());
-  if (status == SECFailure) {
-    PK11_FreeSlot(slot);
-    ThrowPRException("CertificateException",
-                     "Could not authenticate to certificate database");
-  }
-
-  SEC_PKCS12DecoderContext* context = SEC_PKCS12DecoderStart(
-      &p12_password,
-      slot,
-      SSLFilter::GetPassword(),
-      NULL,
-      NULL,
-      NULL,
-      NULL,
-      NULL);
-  PK11_FreeSlot(slot);
-  if (!context) {
-    FATAL("Unexpected error: SecureSocket.addPrivateCertificates DecoderStart");
-  }
-  bool success;
-  {
-    MutexLocker locker(SSLFilter::mutex);
-    success =
-        SECSuccess == SEC_PKCS12DecoderUpdate(context, pk12, length) &&
-        SECSuccess == SEC_PKCS12DecoderVerify(context) &&
-        SECSuccess == SEC_PKCS12DecoderValidateBags(context,
-                                                    nickname_callback) &&
-        SECSuccess == SEC_PKCS12DecoderImportBags(context);
-  }
-  SEC_PKCS12DecoderFinish(context);
-  if (!success) {
-    ThrowPRException("CertificateException", "Could not import PKCS#12 file");
-  }
-}
-
-
-void FUNCTION_NAME(SecureSocket_ChangeTrust)(Dart_NativeArguments args) {
-  Dart_Handle nickname_object = ThrowIfError(Dart_GetNativeArgument(args, 0));
-  if (!Dart_IsString(nickname_object)) {
-    Dart_ThrowException(DartUtils::NewDartArgumentError(
-        "SecureSocket.changeTrust: nickname argument is not a String"));
-  }
-  const char* nickname;
-  ThrowIfError(Dart_StringToCString(nickname_object, &nickname));
-
-  Dart_Handle trust_object = ThrowIfError(Dart_GetNativeArgument(args, 1));
-  if (!Dart_IsString(trust_object)) {
-    Dart_ThrowException(DartUtils::NewDartArgumentError(
-        "SecureSocket.changeTrust: trust argument is not a String"));
-  }
-  const char* trust_string;
-  ThrowIfError(Dart_StringToCString(trust_object, &trust_string));
-
-  PK11SlotInfo* slot = PK11_GetInternalKeySlot();
-  SECStatus status = PK11_Authenticate(slot, PR_TRUE, SSLFilter::GetPassword());
-  if (status == SECFailure) {
-    ThrowPRException("CertificateException",
-                     "Could not authenticate to certificate database");
-  }
-  PK11_FreeSlot(slot);
-
-  CERTCertificate* certificate =
-      PK11_FindCertFromNickname(nickname, SSLFilter::GetPassword());
-  if (certificate == NULL) {
-    ThrowCertificateException("Cannot find certificate with nickname %s",
-                              nickname);
-  }
-  CERTCertTrust trust;
-  if (SECSuccess != CERT_DecodeTrustString(&trust, trust_string)) {
-    CERT_DestroyCertificate(certificate);
-    ThrowPRException("CertificateException", "Trust string cannot be decoded");
-  }
-  {
-    MutexLocker locker(SSLFilter::mutex);
-    status = CERT_ChangeCertTrust(CERT_GetDefaultCertDB(), certificate, &trust);
-  }
-  if (status != SECSuccess) {
-    CERT_DestroyCertificate(certificate);
-    ThrowCertificateException("Cannot set trust on certificate %s", nickname);
-  }
-  Dart_SetReturnValue(args, X509FromCertificate(certificate));
-  CERT_DestroyCertificate(certificate);
-}
-
-
-void FUNCTION_NAME(SecureSocket_GetCertificate)(Dart_NativeArguments args) {
-  Dart_Handle nickname_object = ThrowIfError(Dart_GetNativeArgument(args, 0));
-  if (!Dart_IsString(nickname_object)) {
-    Dart_ThrowException(DartUtils::NewDartArgumentError(
-        "SecureSocket.getCertificate: nickname argument is not a String"));
-  }
-  const char* nickname;
-  ThrowIfError(Dart_StringToCString(nickname_object, &nickname));
-
-  CERTCertificate* certificate = PK11_FindCertFromNickname(
-                                     nickname, SSLFilter::GetPassword());
-  if (certificate != NULL) {
-    Dart_SetReturnValue(args, X509FromCertificate(certificate));
-    CERT_DestroyCertificate(certificate);
-  }
-}
-
-
-void FUNCTION_NAME(SecureSocket_RemoveCertificate)(Dart_NativeArguments args) {
-  Dart_Handle nickname_object =
-      ThrowIfError(Dart_GetNativeArgument(args, 0));
-  if (!Dart_IsString(nickname_object)) {
-    Dart_ThrowException(DartUtils::NewDartArgumentError(
-        "SecureSocket.removeCertificate: nickname is not a String"));
-  }
-  const char* nickname;
-  ThrowIfError(Dart_StringToCString(nickname_object, &nickname));
-
-  CERTCertificate* certificate =
-      PK11_FindCertFromNickname(nickname, SSLFilter::GetPassword());
-  if (certificate == NULL) {
-    ThrowCertificateException("Cannot find certificate with nickname %s",
-                              nickname);
-  }
-  SECKEYPrivateKey* key =
-      PK11_FindKeyByAnyCert(certificate, SSLFilter::GetPassword());
-  // Free the copy returned from FindKeyByAnyCert.
-  SECKEY_DestroyPrivateKey(key);
-  SECStatus status;
-  {
-    MutexLocker locker(SSLFilter::mutex);
-    status = (key == NULL) ?
-        SEC_DeletePermCertificate(certificate) :
-        PK11_DeleteTokenCertAndKey(certificate, SSLFilter::GetPassword());
-  }
-  CERT_DestroyCertificate(certificate);
-  if (status != SECSuccess) {
-    ThrowCertificateException("Cannot remove certificate %s", nickname);
-  }
+  SSLFilter::InitializeLibrary(certificate_database, password, builtin_roots);
 }
 
 
@@ -723,9 +408,47 @@
 }
 
 
+static Dart_Handle X509FromCertificate(CERTCertificate* certificate) {
+  PRTime start_validity;
+  PRTime end_validity;
+  SECStatus status =
+      CERT_GetCertTimes(certificate, &start_validity, &end_validity);
+  if (status != SECSuccess) {
+    ThrowPRException("CertificateException",
+                     "Cannot get validity times from certificate");
+  }
+  int64_t start_epoch_ms = start_validity / PR_USEC_PER_MSEC;
+  int64_t end_epoch_ms = end_validity / PR_USEC_PER_MSEC;
+  Dart_Handle subject_name_object =
+      DartUtils::NewString(certificate->subjectName);
+  Dart_Handle issuer_name_object =
+      DartUtils::NewString(certificate->issuerName);
+  Dart_Handle start_epoch_ms_int = Dart_NewInteger(start_epoch_ms);
+  Dart_Handle end_epoch_ms_int = Dart_NewInteger(end_epoch_ms);
+
+  Dart_Handle date_type =
+      DartUtils::GetDartType(DartUtils::kCoreLibURL, "DateTime");
+  Dart_Handle from_milliseconds =
+      DartUtils::NewString("fromMillisecondsSinceEpoch");
+
+  Dart_Handle start_validity_date =
+      Dart_New(date_type, from_milliseconds, 1, &start_epoch_ms_int);
+  Dart_Handle end_validity_date =
+      Dart_New(date_type, from_milliseconds, 1, &end_epoch_ms_int);
+
+  Dart_Handle x509_type =
+      DartUtils::GetDartType(DartUtils::kIOLibURL, "X509Certificate");
+  Dart_Handle arguments[] = { subject_name_object,
+                              issuer_name_object,
+                              start_validity_date,
+                              end_validity_date };
+  return Dart_New(x509_type, Dart_Null(), 4, arguments);
+}
+
+
 void SSLFilter::Init(Dart_Handle dart_this) {
   if (!library_initialized_) {
-    InitializeLibrary(NULL, "", true, true, false);
+    InitializeLibrary(NULL, "", true, false);
   }
   ASSERT(string_start_ == NULL);
   string_start_ = Dart_NewPersistentHandle(DartUtils::NewString("start"));
@@ -798,6 +521,14 @@
 }
 
 
+char* PasswordCallback(PK11SlotInfo* slot, PRBool retry, void* arg) {
+  if (!retry) {
+    return PL_strdup(static_cast<char*>(arg));  // Freed by NSS internals.
+  }
+  return NULL;
+}
+
+
 static const char* builtin_roots_module =
 #if defined(TARGET_OS_LINUX) || defined(TARGET_OS_ANDROID)
     "name=\"Root Certs\" library=\"libnssckbi.so\"";
@@ -814,9 +545,8 @@
 void SSLFilter::InitializeLibrary(const char* certificate_database,
                                   const char* password,
                                   bool use_builtin_root_certificates,
-                                  bool read_only,
                                   bool report_duplicate_initialization) {
-  MutexLocker locker(mutex);
+  MutexLocker locker(mutex_);
   SECStatus status;
   if (!library_initialized_) {
     PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 0);
@@ -824,7 +554,7 @@
     if (certificate_database == NULL || certificate_database[0] == '\0') {
       status = NSS_NoDB_Init(NULL);
       if (status != SECSuccess) {
-        mutex->Unlock();  // MutexLocker destructor not called when throwing.
+        mutex_->Unlock();  // MutexLocker destructor not called when throwing.
         ThrowPRException("TlsException",
                          "Failed NSS_NoDB_Init call.");
       }
@@ -832,13 +562,13 @@
         SECMODModule* module = SECMOD_LoadUserModule(
             const_cast<char*>(builtin_roots_module), NULL, PR_FALSE);
         if (!module) {
-          mutex->Unlock();  // MutexLocker destructor not called when throwing.
+          mutex_->Unlock();  // MutexLocker destructor not called when throwing.
           ThrowPRException("TlsException",
                            "Failed to load builtin root certificates.");
         }
       }
     } else {
-      PRUint32 init_flags = read_only ? NSS_INIT_READONLY : 0;
+      PRUint32 init_flags = NSS_INIT_READONLY;
       if (!use_builtin_root_certificates) {
         init_flags |= NSS_INIT_NOMODDB;
       }
@@ -848,7 +578,7 @@
                               SECMOD_DB,
                               init_flags);
       if (status != SECSuccess) {
-        mutex->Unlock();  // MutexLocker destructor not called when throwing.
+        mutex_->Unlock();  // MutexLocker destructor not called when throwing.
         ThrowPRException("TlsException",
                          "Failed NSS_Init call.");
       }
@@ -857,34 +587,28 @@
     }
     library_initialized_ = true;
 
-    // Allow encoding and decoding of private keys in PKCS#12 files.
-    SEC_PKCS12EnableCipher(PKCS12_RC2_CBC_40, 1);
-    SEC_PKCS12EnableCipher(PKCS12_DES_EDE3_168, 1);
-    SEC_PKCS12SetPreferredCipher(PKCS12_DES_EDE3_168, 1);
-
     status = NSS_SetDomesticPolicy();
     if (status != SECSuccess) {
-      mutex->Unlock();  // MutexLocker destructor not called when throwing.
+      mutex_->Unlock();  // MutexLocker destructor not called when throwing.
       ThrowPRException("TlsException",
                        "Failed NSS_SetDomesticPolicy call.");
     }
-
     // Enable TLS, as well as SSL3 and SSL2.
     status = SSL_OptionSetDefault(SSL_ENABLE_TLS, PR_TRUE);
     if (status != SECSuccess) {
-      mutex->Unlock();  // MutexLocker destructor not called when throwing.
+      mutex_->Unlock();  // MutexLocker destructor not called when throwing.
       ThrowPRException("TlsException",
                        "Failed SSL_OptionSetDefault enable TLS call.");
     }
     status = SSL_ConfigServerSessionIDCache(0, 0, 0, NULL);
     if (status != SECSuccess) {
-      mutex->Unlock();  // MutexLocker destructor not called when throwing.
+      mutex_->Unlock();  // MutexLocker destructor not called when throwing.
       ThrowPRException("TlsException",
                        "Failed SSL_ConfigServerSessionIDCache call.");
     }
 
   } else if (report_duplicate_initialization) {
-    mutex->Unlock();  // MutexLocker destructor not called when throwing.
+    mutex_->Unlock();  // MutexLocker destructor not called when throwing.
     // Like ThrowPRException, without adding an OSError.
     Dart_ThrowException(DartUtils::NewDartIOException("TlsException",
         "Called SecureSocket.initialize more than once",
@@ -959,20 +683,23 @@
           const_cast<char*>(certificate_name));
       if (certificate == NULL) {
         ThrowCertificateException(
-            "Cannot find server certificate with distinguished name %s",
+            "Cannot find server certificate by distinguished name: %s",
             certificate_name);
       }
     } else {
       // Look up certificate using the nickname certificate_name.
       certificate = PK11_FindCertFromNickname(
-          const_cast<char*>(certificate_name), GetPassword());
+          const_cast<char*>(certificate_name),
+          static_cast<void*>(const_cast<char*>(password_)));
       if (certificate == NULL) {
         ThrowCertificateException(
-            "Cannot find server certificate with nickname %s",
+            "Cannot find server certificate by nickname: %s",
             certificate_name);
       }
     }
-    SECKEYPrivateKey* key = PK11_FindKeyByAnyCert(certificate, GetPassword());
+    SECKEYPrivateKey* key = PK11_FindKeyByAnyCert(
+        certificate,
+        static_cast<void*>(const_cast<char*>(password_)));
     if (key == NULL) {
       CERT_DestroyCertificate(certificate);
       if (PR_GetError() == -8177) {
diff --git a/runtime/bin/secure_socket.h b/runtime/bin/secure_socket.h
index cdb4f65..304ccd5 100644
--- a/runtime/bin/secure_socket.h
+++ b/runtime/bin/secure_socket.h
@@ -46,8 +46,6 @@
     kFirstEncrypted = kReadEncrypted
   };
 
-  static dart::Mutex* mutex;  // To protect library initialization.
-
   SSLFilter()
       : callback_error(NULL),
         string_start_(NULL),
@@ -89,17 +87,15 @@
   static void InitializeLibrary(const char* certificate_database,
                                 const char* password,
                                 bool use_builtin_root_certificates,
-                                bool read_only,
                                 bool report_duplicate_initialization = true);
   static Dart_Port GetServicePort();
   Dart_Handle callback_error;
 
-  static char* GetPassword() { return password_; }
-
  private:
   static const int kMemioBufferSize = 20 * KB;
   static bool library_initialized_;
-  static char* password_;
+  static const char* password_;
+  static dart::Mutex* mutex_;  // To protect library initialization.
   static NativeService filter_service_;
 
   uint8_t* buffers_[kNumBuffers];
@@ -119,6 +115,7 @@
     return static_cast<BufferIndex>(i) >= kFirstEncrypted;
   }
   void InitializeBuffers(Dart_Handle dart_this);
+  void InitializePlatformData();
 
   DISALLOW_COPY_AND_ASSIGN(SSLFilter);
 };
diff --git a/runtime/bin/secure_socket_patch.dart b/runtime/bin/secure_socket_patch.dart
index 13640b2..104f562 100644
--- a/runtime/bin/secure_socket_patch.dart
+++ b/runtime/bin/secure_socket_patch.dart
@@ -8,27 +8,8 @@
 
   /* patch */ static void initialize({String database,
                                       String password,
-                                      bool useBuiltinRoots: true,
-                                      bool readOnly: true})
-      native "SecureSocket_InitializeLibrary";
-
-  /* patch */ static X509Certificate addCertificate(List<int> certificate,
-                                                    String trust)
-      native "SecureSocket_AddCertificate";
-
-  /* patch */ static importCertificatesWithPrivateKeys(List<int> certificates,
-                                                       String password)
-      native "SecureSocket_ImportCertificatesWithPrivateKeys";
-
-  /* patch */ static X509Certificate changeTrust(String nickname,
-                                                 String trust)
-      native "SecureSocket_ChangeTrust";
-
-  /* patch */ static X509Certificate getCertificate(String nickname)
-      native "SecureSocket_GetCertificate";
-
-  /* patch */ static removeCertificate(String nickname)
-      native "SecureSocket_RemoveCertificate";
+                                      bool useBuiltinRoots: true})
+  native "SecureSocket_InitializeLibrary";
 }
 
 
diff --git a/runtime/bin/socket_patch.dart b/runtime/bin/socket_patch.dart
index 4d9225d..55f9224e 100644
--- a/runtime/bin/socket_patch.dart
+++ b/runtime/bin/socket_patch.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-patch class RawServerSocket  {
+patch class RawServerSocket {
   /* patch */ static Future<RawServerSocket> bind(address,
                                                   int port,
                                                   {int backlog: 0,
@@ -145,7 +145,7 @@
   static Uint8List _fixed(int id) native "InternetAddress_Fixed";
 }
 
-class _NetworkInterface implements NetworkInterface{
+class _NetworkInterface implements NetworkInterface {
   final String name;
   final List<InternetAddress> addresses;
 
diff --git a/runtime/lib/bool_patch.dart b/runtime/lib/bool_patch.dart
index f5020c3..d5594e2 100644
--- a/runtime/lib/bool_patch.dart
+++ b/runtime/lib/bool_patch.dart
@@ -10,4 +10,7 @@
     return this ? 1231 : 1237;
   }
 
+  String toString() {
+  	return this ? "true" : "false";
+  }
 }
diff --git a/runtime/lib/corelib_sources.gypi b/runtime/lib/corelib_sources.gypi
index 14a53b2..3d50b40 100644
--- a/runtime/lib/corelib_sources.gypi
+++ b/runtime/lib/corelib_sources.gypi
@@ -35,6 +35,7 @@
     'invocation_mirror.h',
     'invocation_mirror_patch.dart',
     'map_patch.dart',
+    'null_patch.dart',
     'object.cc',
     'object_patch.dart',
     'print_patch.dart',
diff --git a/runtime/lib/double_patch.dart b/runtime/lib/double_patch.dart
index 8fb5560..9e2abeb 100644
--- a/runtime/lib/double_patch.dart
+++ b/runtime/lib/double_patch.dart
@@ -39,11 +39,11 @@
   }
 
   /* patch */ static double parse(String str,
-                                  [double handleError(String str)]) {
+                                  [double onError(String str)]) {
     var result = _parse(str);
     if (result == null) {
-      if (handleError == null) throw new FormatException(str);
-      return handleError(str);
+      if (onError == null) throw new FormatException(str);
+      return onError(str);
     }
     return result;
   }
diff --git a/runtime/lib/null_patch.dart b/runtime/lib/null_patch.dart
new file mode 100644
index 0000000..cfc1f33
--- /dev/null
+++ b/runtime/lib/null_patch.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Dart core library.
+
+patch class Null {
+
+  factory Null._uninstantiable() {
+    throw new UnsupportedError(
+        "class Null cannot be instantiated");
+  }
+
+  int get hashCode {
+    return 2011;  // The year Dart was announced and a prime.
+  }
+
+  String toString() {
+    return 'null';
+  }
+}
diff --git a/runtime/lib/object_patch.dart b/runtime/lib/object_patch.dart
index e2b4933..2d42da7 100644
--- a/runtime/lib/object_patch.dart
+++ b/runtime/lib/object_patch.dart
@@ -13,9 +13,6 @@
   static _setHash(obj, hash) native "Object_setHash";
 
   /* patch */ int get hashCode {
-    if (this == null) {
-      return 2011;  // The year Dart was announced and a prime.
-    }
     var result = _getHash(this);
     if (result == 0) {
       // We want the hash to be a Smi value greater than 0.
diff --git a/runtime/lib/simd128.cc b/runtime/lib/simd128.cc
index 0ff6da4..9b79412 100644
--- a/runtime/lib/simd128.cc
+++ b/runtime/lib/simd128.cc
@@ -233,6 +233,13 @@
   GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, mask, arguments->NativeArgAt(1));
   int64_t m = mask.AsInt64Value();
+  if (m < 0 || m > 255) {
+    const String& error = String::Handle(
+      String::NewFormatted("mask (%"Pd64") must be in the range [0..256)", m));
+    const Array& args = Array::Handle(Array::New(1));
+    args.SetAt(0, error);
+    Exceptions::ThrowByType(Exceptions::kRange, args);
+  }
   float data[4] = { self.x(), self.y(), self.z(), self.w() };
   float _x = data[m & 0x3];
   float _y = data[(m >> 2) & 0x3];
diff --git a/runtime/lib/typed_data.dart b/runtime/lib/typed_data.dart
index de61ae0..4e76c27 100644
--- a/runtime/lib/typed_data.dart
+++ b/runtime/lib/typed_data.dart
@@ -2022,263 +2022,8 @@
   double get y native "Float32x4_getY";
   double get z native "Float32x4_getZ";
   double get w native "Float32x4_getW";
-  Float32x4 get xxxx => _shuffle(0x0);
-  Float32x4 get xxxy => _shuffle(0x40);
-  Float32x4 get xxxz => _shuffle(0x80);
-  Float32x4 get xxxw => _shuffle(0xC0);
-  Float32x4 get xxyx => _shuffle(0x10);
-  Float32x4 get xxyy => _shuffle(0x50);
-  Float32x4 get xxyz => _shuffle(0x90);
-  Float32x4 get xxyw => _shuffle(0xD0);
-  Float32x4 get xxzx => _shuffle(0x20);
-  Float32x4 get xxzy => _shuffle(0x60);
-  Float32x4 get xxzz => _shuffle(0xA0);
-  Float32x4 get xxzw => _shuffle(0xE0);
-  Float32x4 get xxwx => _shuffle(0x30);
-  Float32x4 get xxwy => _shuffle(0x70);
-  Float32x4 get xxwz => _shuffle(0xB0);
-  Float32x4 get xxww => _shuffle(0xF0);
-  Float32x4 get xyxx => _shuffle(0x4);
-  Float32x4 get xyxy => _shuffle(0x44);
-  Float32x4 get xyxz => _shuffle(0x84);
-  Float32x4 get xyxw => _shuffle(0xC4);
-  Float32x4 get xyyx => _shuffle(0x14);
-  Float32x4 get xyyy => _shuffle(0x54);
-  Float32x4 get xyyz => _shuffle(0x94);
-  Float32x4 get xyyw => _shuffle(0xD4);
-  Float32x4 get xyzx => _shuffle(0x24);
-  Float32x4 get xyzy => _shuffle(0x64);
-  Float32x4 get xyzz => _shuffle(0xA4);
-  Float32x4 get xyzw => _shuffle(0xE4);
-  Float32x4 get xywx => _shuffle(0x34);
-  Float32x4 get xywy => _shuffle(0x74);
-  Float32x4 get xywz => _shuffle(0xB4);
-  Float32x4 get xyww => _shuffle(0xF4);
-  Float32x4 get xzxx => _shuffle(0x8);
-  Float32x4 get xzxy => _shuffle(0x48);
-  Float32x4 get xzxz => _shuffle(0x88);
-  Float32x4 get xzxw => _shuffle(0xC8);
-  Float32x4 get xzyx => _shuffle(0x18);
-  Float32x4 get xzyy => _shuffle(0x58);
-  Float32x4 get xzyz => _shuffle(0x98);
-  Float32x4 get xzyw => _shuffle(0xD8);
-  Float32x4 get xzzx => _shuffle(0x28);
-  Float32x4 get xzzy => _shuffle(0x68);
-  Float32x4 get xzzz => _shuffle(0xA8);
-  Float32x4 get xzzw => _shuffle(0xE8);
-  Float32x4 get xzwx => _shuffle(0x38);
-  Float32x4 get xzwy => _shuffle(0x78);
-  Float32x4 get xzwz => _shuffle(0xB8);
-  Float32x4 get xzww => _shuffle(0xF8);
-  Float32x4 get xwxx => _shuffle(0xC);
-  Float32x4 get xwxy => _shuffle(0x4C);
-  Float32x4 get xwxz => _shuffle(0x8C);
-  Float32x4 get xwxw => _shuffle(0xCC);
-  Float32x4 get xwyx => _shuffle(0x1C);
-  Float32x4 get xwyy => _shuffle(0x5C);
-  Float32x4 get xwyz => _shuffle(0x9C);
-  Float32x4 get xwyw => _shuffle(0xDC);
-  Float32x4 get xwzx => _shuffle(0x2C);
-  Float32x4 get xwzy => _shuffle(0x6C);
-  Float32x4 get xwzz => _shuffle(0xAC);
-  Float32x4 get xwzw => _shuffle(0xEC);
-  Float32x4 get xwwx => _shuffle(0x3C);
-  Float32x4 get xwwy => _shuffle(0x7C);
-  Float32x4 get xwwz => _shuffle(0xBC);
-  Float32x4 get xwww => _shuffle(0xFC);
-  Float32x4 get yxxx => _shuffle(0x1);
-  Float32x4 get yxxy => _shuffle(0x41);
-  Float32x4 get yxxz => _shuffle(0x81);
-  Float32x4 get yxxw => _shuffle(0xC1);
-  Float32x4 get yxyx => _shuffle(0x11);
-  Float32x4 get yxyy => _shuffle(0x51);
-  Float32x4 get yxyz => _shuffle(0x91);
-  Float32x4 get yxyw => _shuffle(0xD1);
-  Float32x4 get yxzx => _shuffle(0x21);
-  Float32x4 get yxzy => _shuffle(0x61);
-  Float32x4 get yxzz => _shuffle(0xA1);
-  Float32x4 get yxzw => _shuffle(0xE1);
-  Float32x4 get yxwx => _shuffle(0x31);
-  Float32x4 get yxwy => _shuffle(0x71);
-  Float32x4 get yxwz => _shuffle(0xB1);
-  Float32x4 get yxww => _shuffle(0xF1);
-  Float32x4 get yyxx => _shuffle(0x5);
-  Float32x4 get yyxy => _shuffle(0x45);
-  Float32x4 get yyxz => _shuffle(0x85);
-  Float32x4 get yyxw => _shuffle(0xC5);
-  Float32x4 get yyyx => _shuffle(0x15);
-  Float32x4 get yyyy => _shuffle(0x55);
-  Float32x4 get yyyz => _shuffle(0x95);
-  Float32x4 get yyyw => _shuffle(0xD5);
-  Float32x4 get yyzx => _shuffle(0x25);
-  Float32x4 get yyzy => _shuffle(0x65);
-  Float32x4 get yyzz => _shuffle(0xA5);
-  Float32x4 get yyzw => _shuffle(0xE5);
-  Float32x4 get yywx => _shuffle(0x35);
-  Float32x4 get yywy => _shuffle(0x75);
-  Float32x4 get yywz => _shuffle(0xB5);
-  Float32x4 get yyww => _shuffle(0xF5);
-  Float32x4 get yzxx => _shuffle(0x9);
-  Float32x4 get yzxy => _shuffle(0x49);
-  Float32x4 get yzxz => _shuffle(0x89);
-  Float32x4 get yzxw => _shuffle(0xC9);
-  Float32x4 get yzyx => _shuffle(0x19);
-  Float32x4 get yzyy => _shuffle(0x59);
-  Float32x4 get yzyz => _shuffle(0x99);
-  Float32x4 get yzyw => _shuffle(0xD9);
-  Float32x4 get yzzx => _shuffle(0x29);
-  Float32x4 get yzzy => _shuffle(0x69);
-  Float32x4 get yzzz => _shuffle(0xA9);
-  Float32x4 get yzzw => _shuffle(0xE9);
-  Float32x4 get yzwx => _shuffle(0x39);
-  Float32x4 get yzwy => _shuffle(0x79);
-  Float32x4 get yzwz => _shuffle(0xB9);
-  Float32x4 get yzww => _shuffle(0xF9);
-  Float32x4 get ywxx => _shuffle(0xD);
-  Float32x4 get ywxy => _shuffle(0x4D);
-  Float32x4 get ywxz => _shuffle(0x8D);
-  Float32x4 get ywxw => _shuffle(0xCD);
-  Float32x4 get ywyx => _shuffle(0x1D);
-  Float32x4 get ywyy => _shuffle(0x5D);
-  Float32x4 get ywyz => _shuffle(0x9D);
-  Float32x4 get ywyw => _shuffle(0xDD);
-  Float32x4 get ywzx => _shuffle(0x2D);
-  Float32x4 get ywzy => _shuffle(0x6D);
-  Float32x4 get ywzz => _shuffle(0xAD);
-  Float32x4 get ywzw => _shuffle(0xED);
-  Float32x4 get ywwx => _shuffle(0x3D);
-  Float32x4 get ywwy => _shuffle(0x7D);
-  Float32x4 get ywwz => _shuffle(0xBD);
-  Float32x4 get ywww => _shuffle(0xFD);
-  Float32x4 get zxxx => _shuffle(0x2);
-  Float32x4 get zxxy => _shuffle(0x42);
-  Float32x4 get zxxz => _shuffle(0x82);
-  Float32x4 get zxxw => _shuffle(0xC2);
-  Float32x4 get zxyx => _shuffle(0x12);
-  Float32x4 get zxyy => _shuffle(0x52);
-  Float32x4 get zxyz => _shuffle(0x92);
-  Float32x4 get zxyw => _shuffle(0xD2);
-  Float32x4 get zxzx => _shuffle(0x22);
-  Float32x4 get zxzy => _shuffle(0x62);
-  Float32x4 get zxzz => _shuffle(0xA2);
-  Float32x4 get zxzw => _shuffle(0xE2);
-  Float32x4 get zxwx => _shuffle(0x32);
-  Float32x4 get zxwy => _shuffle(0x72);
-  Float32x4 get zxwz => _shuffle(0xB2);
-  Float32x4 get zxww => _shuffle(0xF2);
-  Float32x4 get zyxx => _shuffle(0x6);
-  Float32x4 get zyxy => _shuffle(0x46);
-  Float32x4 get zyxz => _shuffle(0x86);
-  Float32x4 get zyxw => _shuffle(0xC6);
-  Float32x4 get zyyx => _shuffle(0x16);
-  Float32x4 get zyyy => _shuffle(0x56);
-  Float32x4 get zyyz => _shuffle(0x96);
-  Float32x4 get zyyw => _shuffle(0xD6);
-  Float32x4 get zyzx => _shuffle(0x26);
-  Float32x4 get zyzy => _shuffle(0x66);
-  Float32x4 get zyzz => _shuffle(0xA6);
-  Float32x4 get zyzw => _shuffle(0xE6);
-  Float32x4 get zywx => _shuffle(0x36);
-  Float32x4 get zywy => _shuffle(0x76);
-  Float32x4 get zywz => _shuffle(0xB6);
-  Float32x4 get zyww => _shuffle(0xF6);
-  Float32x4 get zzxx => _shuffle(0xA);
-  Float32x4 get zzxy => _shuffle(0x4A);
-  Float32x4 get zzxz => _shuffle(0x8A);
-  Float32x4 get zzxw => _shuffle(0xCA);
-  Float32x4 get zzyx => _shuffle(0x1A);
-  Float32x4 get zzyy => _shuffle(0x5A);
-  Float32x4 get zzyz => _shuffle(0x9A);
-  Float32x4 get zzyw => _shuffle(0xDA);
-  Float32x4 get zzzx => _shuffle(0x2A);
-  Float32x4 get zzzy => _shuffle(0x6A);
-  Float32x4 get zzzz => _shuffle(0xAA);
-  Float32x4 get zzzw => _shuffle(0xEA);
-  Float32x4 get zzwx => _shuffle(0x3A);
-  Float32x4 get zzwy => _shuffle(0x7A);
-  Float32x4 get zzwz => _shuffle(0xBA);
-  Float32x4 get zzww => _shuffle(0xFA);
-  Float32x4 get zwxx => _shuffle(0xE);
-  Float32x4 get zwxy => _shuffle(0x4E);
-  Float32x4 get zwxz => _shuffle(0x8E);
-  Float32x4 get zwxw => _shuffle(0xCE);
-  Float32x4 get zwyx => _shuffle(0x1E);
-  Float32x4 get zwyy => _shuffle(0x5E);
-  Float32x4 get zwyz => _shuffle(0x9E);
-  Float32x4 get zwyw => _shuffle(0xDE);
-  Float32x4 get zwzx => _shuffle(0x2E);
-  Float32x4 get zwzy => _shuffle(0x6E);
-  Float32x4 get zwzz => _shuffle(0xAE);
-  Float32x4 get zwzw => _shuffle(0xEE);
-  Float32x4 get zwwx => _shuffle(0x3E);
-  Float32x4 get zwwy => _shuffle(0x7E);
-  Float32x4 get zwwz => _shuffle(0xBE);
-  Float32x4 get zwww => _shuffle(0xFE);
-  Float32x4 get wxxx => _shuffle(0x3);
-  Float32x4 get wxxy => _shuffle(0x43);
-  Float32x4 get wxxz => _shuffle(0x83);
-  Float32x4 get wxxw => _shuffle(0xC3);
-  Float32x4 get wxyx => _shuffle(0x13);
-  Float32x4 get wxyy => _shuffle(0x53);
-  Float32x4 get wxyz => _shuffle(0x93);
-  Float32x4 get wxyw => _shuffle(0xD3);
-  Float32x4 get wxzx => _shuffle(0x23);
-  Float32x4 get wxzy => _shuffle(0x63);
-  Float32x4 get wxzz => _shuffle(0xA3);
-  Float32x4 get wxzw => _shuffle(0xE3);
-  Float32x4 get wxwx => _shuffle(0x33);
-  Float32x4 get wxwy => _shuffle(0x73);
-  Float32x4 get wxwz => _shuffle(0xB3);
-  Float32x4 get wxww => _shuffle(0xF3);
-  Float32x4 get wyxx => _shuffle(0x7);
-  Float32x4 get wyxy => _shuffle(0x47);
-  Float32x4 get wyxz => _shuffle(0x87);
-  Float32x4 get wyxw => _shuffle(0xC7);
-  Float32x4 get wyyx => _shuffle(0x17);
-  Float32x4 get wyyy => _shuffle(0x57);
-  Float32x4 get wyyz => _shuffle(0x97);
-  Float32x4 get wyyw => _shuffle(0xD7);
-  Float32x4 get wyzx => _shuffle(0x27);
-  Float32x4 get wyzy => _shuffle(0x67);
-  Float32x4 get wyzz => _shuffle(0xA7);
-  Float32x4 get wyzw => _shuffle(0xE7);
-  Float32x4 get wywx => _shuffle(0x37);
-  Float32x4 get wywy => _shuffle(0x77);
-  Float32x4 get wywz => _shuffle(0xB7);
-  Float32x4 get wyww => _shuffle(0xF7);
-  Float32x4 get wzxx => _shuffle(0xB);
-  Float32x4 get wzxy => _shuffle(0x4B);
-  Float32x4 get wzxz => _shuffle(0x8B);
-  Float32x4 get wzxw => _shuffle(0xCB);
-  Float32x4 get wzyx => _shuffle(0x1B);
-  Float32x4 get wzyy => _shuffle(0x5B);
-  Float32x4 get wzyz => _shuffle(0x9B);
-  Float32x4 get wzyw => _shuffle(0xDB);
-  Float32x4 get wzzx => _shuffle(0x2B);
-  Float32x4 get wzzy => _shuffle(0x6B);
-  Float32x4 get wzzz => _shuffle(0xAB);
-  Float32x4 get wzzw => _shuffle(0xEB);
-  Float32x4 get wzwx => _shuffle(0x3B);
-  Float32x4 get wzwy => _shuffle(0x7B);
-  Float32x4 get wzwz => _shuffle(0xBB);
-  Float32x4 get wzww => _shuffle(0xFB);
-  Float32x4 get wwxx => _shuffle(0xF);
-  Float32x4 get wwxy => _shuffle(0x4F);
-  Float32x4 get wwxz => _shuffle(0x8F);
-  Float32x4 get wwxw => _shuffle(0xCF);
-  Float32x4 get wwyx => _shuffle(0x1F);
-  Float32x4 get wwyy => _shuffle(0x5F);
-  Float32x4 get wwyz => _shuffle(0x9F);
-  Float32x4 get wwyw => _shuffle(0xDF);
-  Float32x4 get wwzx => _shuffle(0x2F);
-  Float32x4 get wwzy => _shuffle(0x6F);
-  Float32x4 get wwzz => _shuffle(0xAF);
-  Float32x4 get wwzw => _shuffle(0xEF);
-  Float32x4 get wwwx => _shuffle(0x3F);
-  Float32x4 get wwwy => _shuffle(0x7F);
-  Float32x4 get wwwz => _shuffle(0xBF);
-  Float32x4 get wwww => _shuffle(0xFF);
-  Float32x4 _shuffle(int mask) native "Float32x4_shuffle";
+
+  Float32x4 shuffle(int mask) native "Float32x4_shuffle";
 
   Float32x4 withZWInXY(Float32x4 other) native "Float32x4_withZWInXY";
   Float32x4 interleaveXY(Float32x4 other) native "Float32x4_interleaveXY";
diff --git a/runtime/platform/thread_win.cc b/runtime/platform/thread_win.cc
index 6265f6f..7b3ca56 100644
--- a/runtime/platform/thread_win.cc
+++ b/runtime/platform/thread_win.cc
@@ -71,7 +71,7 @@
 ThreadLocalKey Thread::CreateThreadLocal() {
   ThreadLocalKey key = TlsAlloc();
   if (key == kUnsetThreadLocalKey) {
-    FATAL("TlsAlloc failed");
+    FATAL1("TlsAlloc failed %d", GetLastError());
   }
   return key;
 }
@@ -81,7 +81,7 @@
   ASSERT(key != kUnsetThreadLocalKey);
   BOOL result = TlsFree(key);
   if (!result) {
-    FATAL("TlsFree failed");
+    FATAL1("TlsFree failed %d", GetLastError());
   }
 }
 
@@ -96,7 +96,7 @@
   ASSERT(key != kUnsetThreadLocalKey);
   BOOL result = TlsSetValue(key, reinterpret_cast<void*>(value));
   if (!result) {
-    FATAL("TlsSetValue failed");
+    FATAL1("TlsSetValue failed %d", GetLastError());
   }
 }
 
@@ -105,7 +105,7 @@
   // Allocate unnamed semaphore with initial count 1 and max count 1.
   data_.semaphore_ = CreateSemaphore(NULL, 1, 1, NULL);
   if (data_.semaphore_ == NULL) {
-    FATAL("Mutex allocation failed");
+    FATAL1("Mutex allocation failed %d", GetLastError());
   }
 }
 
@@ -118,7 +118,7 @@
 void Mutex::Lock() {
   DWORD result = WaitForSingleObject(data_.semaphore_, INFINITE);
   if (result != WAIT_OBJECT_0) {
-    FATAL("Mutex lock failed");
+    FATAL1("Mutex lock failed %d", GetLastError());
   }
 }
 
@@ -130,7 +130,7 @@
     return true;
   }
   if (result == WAIT_ABANDONED || result == WAIT_FAILED) {
-    FATAL("Mutex try lock failed");
+    FATAL1("Mutex try lock failed %d", GetLastError());
   }
   ASSERT(result == WAIT_TIMEOUT);
   return false;
@@ -140,7 +140,7 @@
 void Mutex::Unlock() {
   BOOL result = ReleaseSemaphore(data_.semaphore_, 1, NULL);
   if (result == 0) {
-    FATAL("Mutex unlock failed");
+    FATAL1("Mutex unlock failed", GetLastError());
   }
 }
 
@@ -244,7 +244,7 @@
     // Signal event.
     BOOL result = SetEvent(first->event_);
     if (result == 0) {
-      FATAL("Monitor::Notify failed to signal event");
+      FATAL1("Monitor::Notify failed to signal event", GetLastError());
     }
   }
   LeaveCriticalSection(&waiters_cs_);
@@ -261,7 +261,7 @@
   while (current != NULL) {
     BOOL result = SetEvent(current->event_);
     if (result == 0) {
-      FATAL("Failed to set event for NotifyAll");
+      FATAL1("Failed to set event for NotifyAll", GetLastError());
     }
     current = current->next_;
   }
@@ -315,14 +315,14 @@
     // Wait forever for a Notify or a NotifyAll event.
     result = WaitForSingleObject(wait_data->event_, INFINITE);
     if (result == WAIT_FAILED) {
-      FATAL("Monitor::Wait failed");
+      FATAL1("Monitor::Wait failed", GetLastError());
     }
   } else {
     // Wait for the given period of time for a Notify or a NotifyAll
     // event.
     result = WaitForSingleObject(wait_data->event_, millis);
     if (result == WAIT_FAILED) {
-      FATAL("Monitor::Wait with timeout failed");
+      FATAL1("Monitor::Wait with timeout failed", GetLastError());
     }
     if (result == WAIT_TIMEOUT) {
       // No longer waiting. Remove from the list of waiters.
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index f59a048..5b4a370 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -1938,6 +1938,7 @@
       case kExternalOneByteStringCid:
       case kExternalTwoByteStringCid:
       case kBoolCid:
+      case kNullCid:
       case kArrayCid:
       case kImmutableArrayCid:
       case kGrowableObjectArrayCid:
@@ -1996,11 +1997,12 @@
                   String::Handle(interface_class.Name()).ToCString());
     }
     // Verify that unless cls belongs to core lib, it cannot extend or implement
-    // any of bool, num, int, double, String, Function, dynamic.
+    // any of Null, bool, num, int, double, String, Function, dynamic.
     // The exception is signature classes, which are compiler generated and
     // represent a function type, therefore implementing the Function interface.
     if (!cls_belongs_to_core_lib) {
       if (interface.IsBoolType() ||
+          interface.IsNullType() ||
           interface.IsNumberType() ||
           interface.IsIntType() ||
           interface.IsDoubleType() ||
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index 7aaf5bc..2f72473 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -1032,11 +1032,6 @@
   const MegamorphicCache& cache = MegamorphicCache::Handle(
       isolate->megamorphic_cache_table()->Lookup(name, descriptor));
   Class& cls = Class::Handle(receiver.clazz());
-  const bool is_null = cls.IsNullClass();
-  // For lookups treat null as an instance of class Object.
-  if (is_null) {
-    cls = isolate->object_store()->object_class();
-  }
   ASSERT(!cls.IsNull());
   if (FLAG_trace_ic || FLAG_trace_ic_miss_in_optimized) {
     OS::PrintErr("Megamorphic IC miss, class=%s, function=%s\n",
@@ -1064,8 +1059,7 @@
   if (instructions.IsNull()) return;
 
   cache.EnsureCapacity();
-  const Smi& class_id = Smi::Handle(Smi::New(
-      is_null ? static_cast<intptr_t>(kNullCid) : cls.id()));
+  const Smi& class_id = Smi::Handle(Smi::New(cls.id()));
   cache.Insert(class_id, target);
   return;
 }
@@ -1217,11 +1211,7 @@
   const Array& args_descriptor = Array::CheckedHandle(arguments.ArgAt(2));
   const Array& args = Array::CheckedHandle(arguments.ArgAt(3));
 
-  Class& receiver_class = Class::Handle(receiver.clazz());
-  // For lookups treat null as an instance of class Object.
-  if (receiver_class.IsNullClass()) {
-    receiver_class = isolate->object_store()->object_class();
-  }
+  const Class& receiver_class = Class::Handle(receiver.clazz());
   const String& target_name = String::Handle(ic_data.target_name());
 
   Object& result = Object::Handle();
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index aa88e83..fdc7e50 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -240,26 +240,44 @@
 }
 
 
+#define GET_PEER(type, ctype, raw_obj, peer)                                   \
+
+
+#define EXTERNAL_PEER_HELPER(cid, raw_obj, peer)                               \
+  switch (cid) {                                                               \
+    case kExternalOneByteStringCid: {                                          \
+      RawExternalOneByteString* raw_string =                                   \
+          reinterpret_cast<RawExternalOneByteString*>(raw_obj)->ptr();         \
+      ExternalStringData<uint8_t>* data = raw_string->external_data_;          \
+      *peer = data->peer();                                                    \
+      return true;                                                             \
+    }                                                                          \
+    case kExternalTwoByteStringCid: {                                          \
+      RawExternalTwoByteString* raw_string =                                   \
+          reinterpret_cast<RawExternalTwoByteString*>(raw_obj)->ptr();         \
+      ExternalStringData<uint16_t>* data = raw_string->external_data_;         \
+      *peer = data->peer();                                                    \
+      return true;                                                             \
+    }                                                                          \
+  }                                                                            \
+  return false;                                                                \
+
+
+bool Api::ExternalStringGetPeerHelper(Dart_NativeArguments args,
+                                      int arg_index,
+                                      void** peer) {
+  NoGCScope no_gc_scope;
+  NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args);
+  RawObject* raw_obj = arguments->NativeArgAt(arg_index);
+  intptr_t cid = raw_obj->GetClassId();
+  EXTERNAL_PEER_HELPER(cid, raw_obj, peer);
+}
+
+
 bool Api::ExternalStringGetPeerHelper(Dart_Handle object, void** peer) {
   NoGCScope no_gc_scope;
   RawObject* raw_obj = Api::UnwrapHandle(object);
-  switch (Api::ClassId(object)) {
-    case kExternalOneByteStringCid: {
-      RawExternalOneByteString* raw_string =
-          reinterpret_cast<RawExternalOneByteString*>(raw_obj)->ptr();
-      ExternalStringData<uint8_t>* data = raw_string->external_data_;
-      *peer = data->peer();
-      return true;
-    }
-    case kExternalTwoByteStringCid: {
-      RawExternalTwoByteString* raw_string =
-          reinterpret_cast<RawExternalTwoByteString*>(raw_obj)->ptr();
-      ExternalStringData<uint16_t>* data = raw_string->external_data_;
-      *peer = data->peer();
-      return true;
-    }
-  }
-  return false;
+  EXTERNAL_PEER_HELPER(Api::ClassId(object), raw_obj, peer);
 }
 
 
@@ -3686,18 +3704,14 @@
   NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args);
   Isolate* isolate = arguments->isolate();
   CHECK_ISOLATE(isolate);
-  ReusableObjectHandleScope reused_obj_handle(isolate);
-  Object& obj = reused_obj_handle.Handle();
-  obj = arguments->NativeArgAt(arg_index);
-  intptr_t cid = obj.GetClassId();
-  if (RawObject::IsExternalStringClassId(cid)) {
-    const String& str = String::Cast(obj);
-    *peer = str.GetPeer();
-    ASSERT(*peer != NULL);
+  if (Api::ExternalStringGetPeerHelper(args, arg_index, peer)) {
     return Api::Success();
   }
   *peer = NULL;
-  if (RawObject::IsStringClassId(cid)) {
+  ReusableObjectHandleScope reused_obj_handle(isolate);
+  Object& obj = reused_obj_handle.Handle();
+  obj = arguments->NativeArgAt(arg_index);
+  if (RawObject::IsStringClassId(obj.GetClassId())) {
     return Api::NewHandle(isolate, obj.raw());
   }
   return Api::NewError("%s expects argument to be of"
diff --git a/runtime/vm/dart_api_impl.h b/runtime/vm/dart_api_impl.h
index d549b8f..dc2f88c 100644
--- a/runtime/vm/dart_api_impl.h
+++ b/runtime/vm/dart_api_impl.h
@@ -191,6 +191,9 @@
   static void InitHandles();
 
   // Helper function to get the peer value of an external string object.
+  static bool ExternalStringGetPeerHelper(Dart_NativeArguments args,
+                                          int arg_index,
+                                          void** peer);
   static bool ExternalStringGetPeerHelper(Dart_Handle object, void** peer);
 
   // Helper function to set the return value of native functions.
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index c1717ec..e818aa2 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -1222,27 +1222,20 @@
       node->left()->IsLiteralNode() &&
       type.IsInstantiated()) {
     const Instance& literal_value = node->left()->AsLiteralNode()->literal();
-    const Class& cls = Class::Handle(literal_value.clazz());
     ConstantInstr* result = NULL;
-    if (cls.IsNullClass()) {
-      // A null object is only an instance of Object and dynamic, which has
-      // already been checked above (if the type is instantiated). So we can
-      // return false here if the instance is null (and if the type is
-      // instantiated).
-      result = new ConstantInstr(negate_result ? Bool::True() : Bool::False());
+
+    Error& malformed_error = Error::Handle();
+    if (literal_value.IsInstanceOf(type,
+                                   TypeArguments::Handle(),
+                                   &malformed_error)) {
+      result = new ConstantInstr(negate_result ?
+                                 Bool::False() : Bool::True());
     } else {
-      Error& malformed_error = Error::Handle();
-      if (literal_value.IsInstanceOf(type,
-                                     TypeArguments::Handle(),
-                                     &malformed_error)) {
-        result = new ConstantInstr(negate_result ?
-                                   Bool::False() : Bool::True());
-      } else {
-        result = new ConstantInstr(negate_result ?
-                                   Bool::True() : Bool::False());
-      }
-      ASSERT(malformed_error.IsNull());
+      result = new ConstantInstr(negate_result ?
+                                 Bool::True() : Bool::False());
     }
+    ASSERT(malformed_error.IsNull());
+
     ReturnDefinition(result);
     return;
   }
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
index 74137bc..84879f5 100644
--- a/runtime/vm/flow_graph_optimizer.cc
+++ b/runtime/vm/flow_graph_optimizer.cc
@@ -46,6 +46,8 @@
 static bool ShouldInlineSimd() {
 #if defined(TARGET_ARCH_MIPS)
   return false;
+#elif defined(TARGET_ARCH_ARM)
+  return CPUFeatures::neon_supported() && FLAG_enable_simd_inline;
 #endif
   return FLAG_enable_simd_inline;
 }
@@ -398,20 +400,49 @@
   } else if ((from == kUnboxedUint32x4) && (to == kTagged)) {
     converted = new BoxUint32x4Instr(use->CopyWithType());
   } else {
+    // We have failed to find a suitable conversion instruction.
+    // Insert two "dummy" conversion instructions with the correct
+    // "from" and "to" representation. The inserted instructions will
+    // trigger a deoptimization if executed. See #12417 for a discussion.
     const intptr_t deopt_id = (deopt_target != NULL) ?
         deopt_target->DeoptimizationTarget() : Isolate::kNoDeoptId;
-    // We have failed to find a suitable conversion instruction.
-    // Insert a "dummy" conversion instruction with the correct
-    // "to" representation. The inserted instruction will trigger a
-    // a deoptimization if executed. See issue #12417 for a discussion.
+    ASSERT(from != kTagged);
+    ASSERT(to != kTagged);
+    Value* to_value = NULL;
+    if (from == kUnboxedDouble) {
+      BoxDoubleInstr* boxed = new BoxDoubleInstr(use->CopyWithType());
+      use->BindTo(boxed);
+      InsertBefore(insert_before, boxed, NULL, Definition::kValue);
+      to_value = new Value(boxed);
+    } else if (from == kUnboxedUint32x4) {
+      BoxUint32x4Instr* boxed = new BoxUint32x4Instr(use->CopyWithType());
+      use->BindTo(boxed);
+      InsertBefore(insert_before, boxed, NULL, Definition::kValue);
+      to_value = new Value(boxed);
+    } else if (from == kUnboxedFloat32x4) {
+      BoxFloat32x4Instr* boxed = new BoxFloat32x4Instr(use->CopyWithType());
+      use->BindTo(boxed);
+      InsertBefore(insert_before, boxed, NULL, Definition::kValue);
+      to_value = new Value(boxed);
+    } else if (from == kUnboxedMint) {
+      BoxIntegerInstr* boxed = new BoxIntegerInstr(use->CopyWithType());
+      use->BindTo(boxed);
+      InsertBefore(insert_before, boxed, NULL, Definition::kValue);
+      to_value = new Value(boxed);
+    } else {
+      UNIMPLEMENTED();
+    }
+    ASSERT(to_value != NULL);
     if (to == kUnboxedDouble) {
-      converted = new UnboxDoubleInstr(use->CopyWithType(), deopt_id);
+      converted = new UnboxDoubleInstr(to_value, deopt_id);
     } else if (to == kUnboxedUint32x4) {
-      converted = new UnboxDoubleInstr(use->CopyWithType(), deopt_id);
+      converted = new UnboxUint32x4Instr(to_value, deopt_id);
     } else if (to == kUnboxedFloat32x4) {
-      converted = new UnboxDoubleInstr(use->CopyWithType(), deopt_id);
+      converted = new UnboxFloat32x4Instr(to_value, deopt_id);
     } else if (to == kUnboxedMint) {
-      converted = new UnboxIntegerInstr(use->CopyWithType(), deopt_id);
+      converted = new UnboxIntegerInstr(to_value, deopt_id);
+    } else {
+      UNIMPLEMENTED();
     }
   }
   ASSERT(converted != NULL);
@@ -1236,15 +1267,12 @@
   } else if (HasOnlyOneDouble(*call->ic_data()) &&
              (op_kind == Token::kNEGATE)) {
     AddReceiverCheck(call);
-    ConstantInstr* minus_one =
-        flow_graph()->GetConstant(Double::ZoneHandle(Double::NewCanonical(-1)));
-    unary_op = new BinaryDoubleOpInstr(Token::kMUL,
-                                       new Value(input),
-                                       new Value(minus_one),
-                                       call->deopt_id());
+    unary_op = new UnaryDoubleOpInstr(
+        Token::kNEGATE, new Value(input), call->deopt_id());
+  } else {
+    return false;
   }
-  if (unary_op == NULL) return false;
-
+  ASSERT(unary_op != NULL);
   ReplaceCall(call, unary_op);
   return true;
 }
@@ -1480,13 +1508,23 @@
     ASSERT(call->ArgumentCount() == 2);
     // Extract shuffle mask.
     Definition* mask_definition = call->ArgumentAt(1);
+    if (!mask_definition->IsConstant()) {
+      // Not a constant.
+      return false;
+    }
     ASSERT(mask_definition->IsConstant());
     ConstantInstr* constant_instruction = mask_definition->AsConstant();
     const Object& constant_mask = constant_instruction->value();
+    if (!constant_mask.IsSmi()) {
+      // Not a smi.
+      return false;
+    }
     ASSERT(constant_mask.IsSmi());
     mask = Smi::Cast(constant_mask).Value();
-    ASSERT(mask >= 0);
-    ASSERT(mask <= 255);
+    if (mask < 0 || mask > 255) {
+      // Not a valid mask.
+      return false;
+    }
   }
   Float32x4ShuffleInstr* instr = new Float32x4ShuffleInstr(
       getter,
@@ -6372,6 +6410,17 @@
 }
 
 
+void ConstantPropagator::VisitUnaryDoubleOp(UnaryDoubleOpInstr* instr) {
+  const Object& value = instr->value()->definition()->constant_value();
+  if (IsNonConstant(value)) {
+    SetValue(instr, non_constant_);
+  } else if (IsConstant(value)) {
+    // TODO(kmillikin): Handle unary operations.
+    SetValue(instr, non_constant_);
+  }
+}
+
+
 void ConstantPropagator::VisitSmiToDouble(SmiToDoubleInstr* instr) {
   const Object& value = instr->value()->definition()->constant_value();
   if (IsConstant(value) && value.IsInteger()) {
diff --git a/runtime/vm/flow_graph_type_propagator.cc b/runtime/vm/flow_graph_type_propagator.cc
index bbd7cd3..41e83b6 100644
--- a/runtime/vm/flow_graph_type_propagator.cc
+++ b/runtime/vm/flow_graph_type_propagator.cc
@@ -567,9 +567,6 @@
     return false;
   }
 
-  // We should never test for an instance of null.
-  ASSERT(!type.IsNullType());
-
   // Consider the compile type of the value.
   const AbstractType& compile_type = *ToAbstractType();
   if (compile_type.IsMalformed()) {
@@ -981,6 +978,11 @@
 }
 
 
+CompileType UnaryDoubleOpInstr::ComputeType() const {
+  return CompileType::FromCid(kDoubleCid);
+}
+
+
 CompileType DoubleToSmiInstr::ComputeType() const {
   return CompileType::FromCid(kSmiCid);
 }
diff --git a/runtime/vm/il_printer.cc b/runtime/vm/il_printer.cc
index 02880071..2aab9ba 100644
--- a/runtime/vm/il_printer.cc
+++ b/runtime/vm/il_printer.cc
@@ -783,6 +783,12 @@
 }
 
 
+void UnaryDoubleOpInstr::PrintOperandsTo(BufferFormatter* f) const {
+  f->Print("%s, ", Token::Str(op_kind()));
+  value()->PrintTo(f);
+}
+
+
 void CheckClassInstr::PrintOperandsTo(BufferFormatter* f) const {
   value()->PrintTo(f);
   PrintICData(f, unary_checks());
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index e71aba8..a3b7fc7 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.h
@@ -89,7 +89,7 @@
   V(Float32x4, Float32x4., Float32x4Constructor, 1876089990)                   \
   V(Float32x4, Float32x4.zero, Float32x4Zero, 1903586222)                      \
   V(Float32x4, Float32x4.splat, Float32x4Splat, 38462589)                      \
-  V(_Float32x4, _shuffle, Float32x4Shuffle, 2044955136)                        \
+  V(_Float32x4, shuffle, Float32x4Shuffle, 713523911)                          \
   V(_Float32x4, get:x, Float32x4ShuffleX, 1019523296)                          \
   V(_Float32x4, get:y, Float32x4ShuffleY, 710282243)                           \
   V(_Float32x4, get:z, Float32x4ShuffleZ, 1612806041)                          \
@@ -581,6 +581,7 @@
   M(CloneContext)                                                              \
   M(BinarySmiOp)                                                               \
   M(UnarySmiOp)                                                                \
+  M(UnaryDoubleOp)                                                             \
   M(CheckStackOverflow)                                                        \
   M(SmiToDouble)                                                               \
   M(DoubleToInteger)                                                           \
@@ -920,6 +921,7 @@
   friend class BinaryMintOpInstr;
   friend class BinarySmiOpInstr;
   friend class UnarySmiOpInstr;
+  friend class UnaryDoubleOpInstr;
   friend class ShiftMintOpInstr;
   friend class UnaryMintOpInstr;
   friend class MathUnaryInstr;
@@ -4714,7 +4716,7 @@
       : op_kind_(op_kind) {
     SetInputAt(0, left);
     SetInputAt(1, right);
-    // Overrided generated deopt_id.
+    // Overriden generated deopt_id.
     deopt_id_ = deopt_id;
   }
 
@@ -6053,6 +6055,58 @@
 };
 
 
+// Handles only NEGATE.
+class UnaryDoubleOpInstr : public TemplateDefinition<1> {
+ public:
+  UnaryDoubleOpInstr(Token::Kind op_kind,
+                     Value* value,
+                     intptr_t deopt_id)
+      : op_kind_(op_kind) {
+    ASSERT(op_kind == Token::kNEGATE);
+    SetInputAt(0, value);
+    // Overriden generated deopt_id.
+    deopt_id_ = deopt_id;
+  }
+
+  Value* value() const { return inputs_[0]; }
+  Token::Kind op_kind() const { return op_kind_; }
+
+  virtual void PrintOperandsTo(BufferFormatter* f) const;
+
+  DECLARE_INSTRUCTION(UnaryDoubleOp)
+  virtual CompileType ComputeType() const;
+
+  virtual bool CanDeoptimize() const { return false; }
+
+  virtual intptr_t DeoptimizationTarget() const {
+    // Direct access since this instruction cannot deoptimize, and the deopt-id
+    // was inherited from another instruction that could deoptimize.
+    return deopt_id_;
+  }
+
+  virtual Representation representation() const {
+    return kUnboxedDouble;
+  }
+
+  virtual Representation RequiredInputRepresentation(intptr_t idx) const {
+    ASSERT(idx == 0);
+    return kUnboxedDouble;
+  }
+
+  virtual bool AllowsCSE() const { return true; }
+  virtual EffectSet Effects() const { return EffectSet::None(); }
+  virtual EffectSet Dependencies() const { return EffectSet::None(); }
+  virtual bool AttributesEqual(Instruction* other) const { return true; }
+
+  virtual bool MayThrow() const { return false; }
+
+ private:
+  const Token::Kind op_kind_;
+
+  DISALLOW_COPY_AND_ASSIGN(UnaryDoubleOpInstr);
+};
+
+
 class CheckStackOverflowInstr : public TemplateInstruction<0> {
  public:
   CheckStackOverflowInstr(intptr_t token_pos, intptr_t loop_depth)
diff --git a/runtime/vm/intermediate_language_arm.cc b/runtime/vm/intermediate_language_arm.cc
index ffa5755..04edbc1 100644
--- a/runtime/vm/intermediate_language_arm.cc
+++ b/runtime/vm/intermediate_language_arm.cc
@@ -3779,6 +3779,24 @@
 }
 
 
+LocationSummary* UnaryDoubleOpInstr::MakeLocationSummary() const {
+  const intptr_t kNumInputs = 1;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* summary =
+      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  summary->set_in(0, Location::RequiresFpuRegister());
+  summary->set_out(Location::RequiresFpuRegister());
+  return summary;
+}
+
+
+void UnaryDoubleOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  DRegister result = EvenDRegisterOf(locs()->out().fpu_reg());
+  DRegister value = EvenDRegisterOf(locs()->in(0).fpu_reg());
+  __ vnegd(result, value);
+}
+
+
 LocationSummary* SmiToDoubleInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index 69e744c..412248c 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -3844,6 +3844,24 @@
 }
 
 
+LocationSummary* UnaryDoubleOpInstr::MakeLocationSummary() const {
+  const intptr_t kNumInputs = 1;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* summary =
+      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  summary->set_in(0, Location::RequiresFpuRegister());
+  summary->set_out(Location::SameAsFirstInput());
+  return summary;
+}
+
+
+void UnaryDoubleOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  XmmRegister value = locs()->in(0).fpu_reg();
+  ASSERT(locs()->out().fpu_reg() == value);
+  __ DoubleNegate(value);
+}
+
+
 LocationSummary* SmiToDoubleInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
diff --git a/runtime/vm/intermediate_language_mips.cc b/runtime/vm/intermediate_language_mips.cc
index 6740dbb..e84f418 100644
--- a/runtime/vm/intermediate_language_mips.cc
+++ b/runtime/vm/intermediate_language_mips.cc
@@ -3230,6 +3230,31 @@
 }
 
 
+LocationSummary* UnaryDoubleOpInstr::MakeLocationSummary() const {
+  const intptr_t kNumInputs = 1;
+  const intptr_t kNumTemps = 1;
+  LocationSummary* summary =
+      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  summary->set_in(0, Location::RequiresFpuRegister());
+  summary->set_out(Location::RequiresFpuRegister());
+  summary->set_temp(0, Location::RequiresFpuRegister());
+  return summary;
+}
+
+
+void UnaryDoubleOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  // TODO(zra): Implement vneg.
+  const Double& minus_one = Double::ZoneHandle(Double::NewCanonical(-1));
+  __ LoadObject(TMP, minus_one);
+  FpuRegister result = locs()->out().fpu_reg();
+  FpuRegister value = locs()->in(0).fpu_reg();
+  FpuRegister temp_fp = locs()->temp(0).fpu_reg();
+  __ LoadDFromOffset(temp_fp, TMP, Double::value_offset() - kHeapObjectTag);
+  __ muld(result, value, temp_fp);
+}
+
+
+
 LocationSummary* SmiToDoubleInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index a7303de..2a1a546 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -3776,6 +3776,48 @@
 }
 
 
+void UnarySmiOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  Register value = locs()->in(0).reg();
+  ASSERT(value == locs()->out().reg());
+  switch (op_kind()) {
+    case Token::kNEGATE: {
+      Label* deopt = compiler->AddDeoptStub(deopt_id(),
+                                            kDeoptUnaryOp);
+      __ negq(value);
+      __ j(OVERFLOW, deopt);
+      if (FLAG_throw_on_javascript_int_overflow) {
+        EmitJavascriptOverflowCheck(compiler, range(), deopt, value);
+      }
+      break;
+    }
+    case Token::kBIT_NOT:
+      __ notq(value);
+      __ andq(value, Immediate(~kSmiTagMask));  // Remove inverted smi-tag.
+      break;
+    default:
+      UNREACHABLE();
+  }
+}
+
+
+LocationSummary* UnaryDoubleOpInstr::MakeLocationSummary() const {
+  const intptr_t kNumInputs = 1;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* summary =
+      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  summary->set_in(0, Location::RequiresFpuRegister());
+  summary->set_out(Location::SameAsFirstInput());
+  return summary;
+}
+
+
+void UnaryDoubleOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  XmmRegister value = locs()->in(0).fpu_reg();
+  ASSERT(locs()->out().fpu_reg() == value);
+  __ DoubleNegate(value);
+}
+
+
 LocationSummary* MathMinMaxInstr::MakeLocationSummary() const {
   if (result_cid() == kDoubleCid) {
     const intptr_t kNumInputs = 2;
@@ -3865,30 +3907,6 @@
 }
 
 
-void UnarySmiOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  Register value = locs()->in(0).reg();
-  ASSERT(value == locs()->out().reg());
-  switch (op_kind()) {
-    case Token::kNEGATE: {
-      Label* deopt = compiler->AddDeoptStub(deopt_id(),
-                                            kDeoptUnaryOp);
-      __ negq(value);
-      __ j(OVERFLOW, deopt);
-      if (FLAG_throw_on_javascript_int_overflow) {
-        EmitJavascriptOverflowCheck(compiler, range(), deopt, value);
-      }
-      break;
-    }
-    case Token::kBIT_NOT:
-      __ notq(value);
-      __ andq(value, Immediate(~kSmiTagMask));  // Remove inverted smi-tag.
-      break;
-    default:
-      UNREACHABLE();
-  }
-}
-
-
 LocationSummary* SmiToDoubleInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index b92355e..ca2a64d 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -417,8 +417,6 @@
 
   // Allocate and initialize the null class.
   cls = Class::New<Instance>(kNullCid);
-  cls.set_is_finalized();
-  cls.set_is_type_finalized();
   isolate->object_store()->set_null_class(cls);
 
   // Allocate and initialize the free list element class.
@@ -850,27 +848,6 @@
   // well as the core implementation dictionary have been setup, preallocate
   // remaining classes and register them by name in the dictionaries.
   String& name = String::Handle();
-  cls = Class::New<Bool>();
-  object_store->set_bool_class(cls);
-  RegisterClass(cls, Symbols::Bool(), core_lib);
-  pending_classes.Add(cls, Heap::kOld);
-
-  // TODO(12364): The class 'Null' is not registered in the class dictionary
-  // because it is not exported by dart:core.
-  cls = Class::New<Instance>(kNullCid);
-  cls.set_name(Symbols::Null());
-  // We immediately mark Null as finalized because it has no corresponding
-  // source.
-  cls.set_is_finalized();
-  cls.set_is_type_finalized();
-  object_store->set_null_class(cls);
-  cls.set_library(core_lib);  // A sort of fiction for the mirrors.
-  // When/if we promote Null to an ordinary class, it should be added to the
-  // core library, given source and added to the list of classes pending
-  // finalization.
-  // RegisterClass(cls, Symbols::Null(), core_lib);
-  // pending_classes.Add(cls, Heap::kOld);
-
   cls = object_store->array_class();  // Was allocated above.
   RegisterPrivateClass(cls, Symbols::ObjectArray(), core_lib);
   pending_classes.Add(cls, Heap::kOld);
@@ -938,6 +915,17 @@
   type = Type::NewNonParameterizedType(cls);
   object_store->set_object_type(type);
 
+  cls = Class::New<Bool>();
+  object_store->set_bool_class(cls);
+  RegisterClass(cls, Symbols::Bool(), core_lib);
+  pending_classes.Add(cls, Heap::kOld);
+
+  cls = Class::New<Instance>(kNullCid);
+  cls.set_is_prefinalized();
+  object_store->set_null_class(cls);
+  RegisterClass(cls, Symbols::Null(), core_lib);
+  pending_classes.Add(cls, Heap::kOld);
+
   cls = object_store->type_class();
   RegisterPrivateClass(cls, Symbols::Type(), core_lib);
   pending_classes.Add(cls, Heap::kOld);
@@ -10476,14 +10464,14 @@
 
 
 bool AbstractType::IsNullType() const {
-  ASSERT(Type::Handle(Type::NullType()).IsCanonical());
-  return raw() == Type::NullType();
+  return HasResolvedTypeClass() &&
+      (type_class() == Isolate::Current()->object_store()->null_class());
 }
 
 
 bool AbstractType::IsBoolType() const {
   return HasResolvedTypeClass() &&
-      (type_class() == Type::Handle(Type::BoolType()).type_class());
+      (type_class() == Isolate::Current()->object_store()->bool_class());
 }
 
 
diff --git a/runtime/vm/resolver.cc b/runtime/vm/resolver.cc
index b7c4901..1150b81 100644
--- a/runtime/vm/resolver.cc
+++ b/runtime/vm/resolver.cc
@@ -26,14 +26,7 @@
                                       const String& function_name,
                                       const ArgumentsDescriptor& args_desc) {
   // Figure out type of receiver first.
-  Class& cls = Class::Handle();
-  cls = receiver.clazz();
-  // For lookups treat null as an instance of class Object.
-  if (cls.IsNullClass()) {
-    cls = Isolate::Current()->object_store()->object_class();
-  }
-  ASSERT(!cls.IsNull());
-
+  const Class& cls = Class::Handle(receiver.clazz());
   return ResolveDynamicForReceiverClass(cls, function_name, args_desc);
 }
 
diff --git a/sdk/lib/_internal/compiler/implementation/compiler.dart b/sdk/lib/_internal/compiler/implementation/compiler.dart
index 3401be7..c5d9bb0 100644
--- a/sdk/lib/_internal/compiler/implementation/compiler.dart
+++ b/sdk/lib/_internal/compiler/implementation/compiler.dart
@@ -129,30 +129,69 @@
   bool classNeedsRti(ClassElement cls);
   bool methodNeedsRti(FunctionElement function);
 
-  // The following methods are hooks for the backend to register its
-  // helper methods.
+  /// Called during resolution to notify to the backend that a class is
+  /// being instantiated.
   void registerInstantiatedClass(ClassElement cls,
                                  Enqueuer enqueuer,
                                  TreeElements elements) {}
+
+  /// Called during resolution to notify to the backend that the
+  /// program uses string interpolation.
   void registerStringInterpolation(TreeElements elements) {}
+
+  /// Called during resolution to notify to the backend that the
+  /// program has a catch statement.
   void registerCatchStatement(Enqueuer enqueuer,
                               TreeElements elements) {}
-  void registerWrapException(TreeElements elements) {}
+
+  /// Called during resolution to notify to the backend that the
+  /// program explicitly throws an exception.
   void registerThrowExpression(TreeElements elements) {}
+
+  /// Called during resolution to notify to the backend that the
+  /// program has a global variable with a lazy initializer.
   void registerLazyField(TreeElements elements) {}
+
+  /// Called during resolution to notify to the backend that the
+  /// program uses a type variable as an expression.
   void registerTypeVariableExpression(TreeElements elements) {}
+
+  /// Called during resolution to notify to the backend that the
+  /// program uses a type literal.
   void registerTypeLiteral(Element element, TreeElements elements) {}
+
+  /// Called during resolution to notify to the backend that the
+  /// program has a catch statement with a stack trace.
   void registerStackTraceInCatch(TreeElements elements) {}
+
+  /// Register an is check to the backend.
   void registerIsCheck(DartType type,
                        Enqueuer enqueuer,
                        TreeElements elements) {}
+
+  /// Register an as check to the backend.
   void registerAsCheck(DartType type, TreeElements elements) {}
+
+  /// Register that the application may throw a [NoSuchMethodError].
   void registerThrowNoSuchMethod(TreeElements elements) {}
+
+  /// Register that the application may throw a [RuntimeError].
   void registerThrowRuntimeError(TreeElements elements) {}
+
+  /// Register that the application may throw an
+  /// [AbstractClassInstantiationError].
   void registerAbstractClassInstantiation(TreeElements elements) {}
+
+  /// Register that the application may throw a [FallThroughError].
   void registerFallThroughError(TreeElements elements) {}
+
+  /// Register that a super call will end up calling
+  /// [: super.noSuchMethod :].
   void registerSuperNoSuchMethod(TreeElements elements) {}
+
+  /// Register that the application creates a constant map.
   void registerConstantMap(TreeElements elements) {}
+
   /**
    * Call this to register that an instantiated generic class has a call
    * method.
@@ -222,6 +261,12 @@
   /// Returns true if this element should be retained for reflection even if it
   /// would normally be tree-shaken away.
   bool isNeededForReflection(Element element) => false;
+
+  /// Returns true if global optimizations such as type inferencing
+  /// can apply to this element. One category of elements that do not
+  /// apply is runtime helpers that the backend calls, but the
+  /// optimizations don't see those calls.
+  bool canBeUsedForGlobalOptimizations(Element element) => true;
 }
 
 /**
@@ -780,6 +825,7 @@
     listClass = lookupCoreClass('List');
     typeClass = lookupCoreClass('Type');
     mapClass = lookupCoreClass('Map');
+    nullClass = lookupCoreClass('Null');
     stackTraceClass = lookupCoreClass('StackTrace');
     if (!missingCoreClasses.isEmpty) {
       internalErrorOnElement(coreLibrary,
@@ -804,7 +850,6 @@
     boundClosureClass = lookupHelperClass('BoundClosure');
     closureClass = lookupHelperClass('Closure');
     dynamicClass = lookupHelperClass('Dynamic_');
-    nullClass = lookupHelperClass('Null');
     if (!missingHelperClasses.isEmpty) {
       internalErrorOnElement(jsHelperLibrary,
           'dart:_js_helper library does not contain required classes: '
diff --git a/sdk/lib/_internal/compiler/implementation/elements/elements.dart b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
index 235a943..65a4c56 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/elements.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
@@ -332,6 +332,12 @@
            && (identical(element.kind, ElementKind.FUNCTION));
   }
 
+  static bool isNativeOrExtendsNative(ClassElement element) {
+    if (element == null) return false;
+    if (element.isNative()) return true;
+    return isNativeOrExtendsNative(element.superclass);
+  }
+
   static bool isInstanceSend(Send send, TreeElements elements) {
     Element element = elements[send];
     if (element == null) return !isClosureSend(send, element);
@@ -358,7 +364,7 @@
       return new SourceString(reconstructConstructorName(element));
     }
   }
-  
+
   // TODO(johnniwinther): Remove this method.
   static String reconstructConstructorName(Element element) {
     String className = element.getEnclosingClass().name.slowToString();
diff --git a/sdk/lib/_internal/compiler/implementation/elements/modelx.dart b/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
index 3bdbe46..3ab0a44 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
@@ -1419,16 +1419,17 @@
   FunctionElement get targetConstructor => superMember;
 
   FunctionSignature computeSignature(compiler) {
+    if (functionSignature != null) return functionSignature;
     if (isDefaultConstructor) {
-      return new FunctionSignatureX(
+      return functionSignature = new FunctionSignatureX(
           const Link<Element>(), const Link<Element>(), 0, 0, false,
           getEnclosingClass().thisType);
     }
     if (superMember.isErroneous()) {
-      return compiler.objectClass.localLookup(
+      return functionSignature = compiler.objectClass.localLookup(
           const SourceString('')).computeSignature(compiler);
     }
-    return superMember.computeSignature(compiler);
+    return functionSignature = superMember.computeSignature(compiler);
   }
 
   get declaration => this;
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
index c4b8f52..ee46294 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
@@ -201,6 +201,14 @@
   Element getInterceptorMethod;
   Element interceptedNames;
 
+  /**
+   * This element is a top-level variable (in generated output) that the
+   * compiler initializes to a datastructure used to map from a Type to the
+   * interceptor.  See declaration of `mapTypeToInterceptor` in
+   * `interceptors.dart`.
+   */
+  Element mapTypeToInterceptor;
+
   HType stringType;
   HType indexablePrimitiveType;
   HType readableArrayType;
@@ -333,6 +341,9 @@
   /// element must be retained.
   final Set<Element> metaTargetsUsed = new Set<Element>();
 
+  /// List of elements that the backend may use.
+  final Set<Element> helpersUsed = new Set<Element>();
+
   JavaScriptBackend(Compiler compiler, bool generateSourceMap, bool disableEval)
       : namer = determineNamer(compiler),
         oneShotInterceptors = new Map<String, Selector>(),
@@ -354,9 +365,16 @@
         new Namer(compiler);
   }
 
+  bool canBeUsedForGlobalOptimizations(Element element) {
+    if (element.isParameter() || element.isFieldParameter()) {
+      element = element.enclosingElement;
+    }
+    return !helpersUsed.contains(element.declaration);
+  }
+
   bool isInterceptorClass(ClassElement element) {
     if (element == null) return false;
-    if (element.isNative()) return true;
+    if (Elements.isNativeOrExtendsNative(element)) return true;
     if (interceptedClasses.contains(element)) return true;
     if (classesMixedIntoNativeClasses.contains(element)) return true;
     return false;
@@ -412,7 +430,7 @@
       Set<ClassElement> result = new Set<ClassElement>();
       for (Element element in intercepted) {
         ClassElement classElement = element.getEnclosingClass();
-        if (classElement.isNative()
+        if (Elements.isNativeOrExtendsNative(classElement)
             || interceptedClasses.contains(classElement)) {
           result.add(classElement);
         }
@@ -434,7 +452,7 @@
       Iterable<ClassElement> subclasses = compiler.world.subclassesOf(use);
       if (subclasses != null) {
         for (ClassElement subclass in subclasses) {
-          if (subclass.isNative()) {
+          if (Elements.isNativeOrExtendsNative(subclass)) {
             if (result == null) result = new Set<ClassElement>();
             result.add(subclass);
           }
@@ -454,6 +472,8 @@
         compiler.findInterceptor(const SourceString('getInterceptor'));
     interceptedNames =
         compiler.findInterceptor(const SourceString('interceptedNames'));
+    mapTypeToInterceptor =
+        compiler.findInterceptor(const SourceString('mapTypeToInterceptor'));
     dispatchPropertyName =
         compiler.findInterceptor(const SourceString('dispatchPropertyName'));
     getDispatchPropertyMethod =
@@ -594,7 +614,7 @@
             member.name, () => new Set<Element>());
         set.add(member);
         if (classElement == jsInterceptorClass) return;
-        if (!classElement.isNative()) {
+        if (classElement.isMixinApplication) {
           MixinApplicationElement mixinApplication = classElement;
           assert(member.getEnclosingClass() == mixinApplication.mixin);
           classesMixedIntoNativeClasses.add(mixinApplication.mixin);
@@ -703,7 +723,7 @@
       addInterceptors(jsPlainJavaScriptObjectClass, enqueuer, elements);
     } else if (cls == jsUnknownJavaScriptObjectClass) {
       addInterceptors(jsUnknownJavaScriptObjectClass, enqueuer, elements);
-    } else if (cls.isNative()) {
+    } else if (Elements.isNativeOrExtendsNative(cls)) {
       addInterceptorsForNativeClassMembers(cls, enqueuer);
     }
   }
@@ -741,7 +761,7 @@
       // TODO(ngeoffray): Should we have the resolver register those instead?
       Element e =
           compiler.findHelper(const SourceString('boolConversionCheck'));
-      if (e != null) world.addToWorkList(e);
+      if (e != null) enqueue(world, e, elements);
     }
   }
 
@@ -762,11 +782,11 @@
     ensure(jsUnknownJavaScriptObjectClass);
   }
 
-  void registerWrapException(TreeElements elements) {
-    enqueueInResolution(getWrapExceptionHelper(), elements);
-  }
-
   void registerThrowExpression(TreeElements elements) {
+    // We don't know ahead of time whether we will need the throw in a
+    // statement context or an expression context, so we register both
+    // here, even though we may not need the throwExpression helper.
+    enqueueInResolution(getWrapExceptionHelper(), elements);
     enqueueInResolution(getThrowExpressionHelper(), elements);
   }
 
@@ -845,10 +865,10 @@
     // need to register checked mode helpers.
     if (inCheckedMode) {
       CheckedModeHelper helper = getCheckedModeHelper(type, typeCast: false);
-      if (helper != null) world.addToWorkList(helper.getElement(compiler));
+      if (helper != null) enqueue(world, helper.getElement(compiler), elements);
       // We also need the native variant of the check (for DOM types).
       helper = getNativeCheckedModeHelper(type, typeCast: false);
-      if (helper != null) world.addToWorkList(helper.getElement(compiler));
+      if (helper != null) enqueue(world, helper.getElement(compiler), elements);
     }
     bool isTypeVariable = type.kind == TypeKind.TYPE_VARIABLE;
     if (!type.isRaw || type.containsTypeVariables) {
@@ -874,8 +894,9 @@
       // We will neeed to add the "$is" and "$as" properties on the
       // JavaScript object prototype, so we make sure
       // [:defineProperty:] is compiled.
-      world.addToWorkList(
-          compiler.findHelper(const SourceString('defineProperty')));
+      enqueue(world,
+              compiler.findHelper(const SourceString('defineProperty')),
+              elements);
     }
    }
 
@@ -892,14 +913,25 @@
 
   void registerThrowNoSuchMethod(TreeElements elements) {
     enqueueInResolution(getThrowNoSuchMethod(), elements);
+    // Also register the types of the arguments passed to this method.
+    compiler.enqueuer.resolution.registerInstantiatedClass(
+        compiler.listClass, elements);
+    compiler.enqueuer.resolution.registerInstantiatedClass(
+        compiler.stringClass, elements);
   }
 
   void registerThrowRuntimeError(TreeElements elements) {
     enqueueInResolution(getThrowRuntimeError(), elements);
+    // Also register the types of the arguments passed to this method.
+    compiler.enqueuer.resolution.registerInstantiatedClass(
+        compiler.stringClass, elements);
   }
 
   void registerAbstractClassInstantiation(TreeElements elements) {
     enqueueInResolution(getThrowAbstractClassInstantiationError(), elements);
+    // Also register the types of the arguments passed to this method.
+    compiler.enqueuer.resolution.registerInstantiatedClass(
+        compiler.stringClass, elements);
   }
 
   void registerFallThroughError(TreeElements elements) {
@@ -976,7 +1008,15 @@
            compiler.enabledRuntimeType;
   }
 
+  // Enqueue [e] in [enqueuer].
+  //
+  // The backend must *always* call this method when enqueuing an
+  // element. Calls done by the backend are not seen by global
+  // optimizations, so they would make these optimizations unsound.
+  // Therefore we need to collect the list of helpers the backend may
+  // use.
   void enqueue(Enqueuer enqueuer, Element e, TreeElements elements) {
+    helpersUsed.add(e.declaration);
     enqueuer.addToWorkList(e);
     elements.registerDependency(e);
   }
@@ -1329,19 +1369,6 @@
     return compiler.findHelper(const SourceString("throwCyclicInit"));
   }
 
-  /**
-   * Remove [element] from the set of generated code, and put it back
-   * into the worklist.
-   *
-   * Invariant: [element] must be a declaration element.
-   */
-  void eagerRecompile(Element element) {
-    assert(invariant(element, element.isDeclaration));
-    generatedCode.remove(element);
-    generatedBailoutCode.remove(element);
-    compiler.enqueuer.codegen.addToWorkList(element);
-  }
-
   bool isNullImplementation(ClassElement cls) {
     return cls == jsNullClass;
   }
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart b/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
index 32d3ab8..965822e 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
@@ -1296,6 +1296,8 @@
   /// O is the named arguments.
   /// The reflection name of a constructor is similar to a regular method but
   /// starts with 'new '.
+  /// The reflection name of class 'C' is 'C'.
+  /// An anonymous mixin application has no reflection name.
   /// This is used by js_mirrors.dart.
   String getReflectionName(elementOrSelector, String mangledName) {
     SourceString name = elementOrSelector.name;
@@ -1982,7 +1984,11 @@
     buffer.write(jsAst.prettyPrint(builder.toObjectInitializer(), compiler));
     if (backend.shouldRetainName(classElement.name)) {
       String reflectionName = getReflectionName(classElement, className);
-      buffer.write(',$n$n"+$reflectionName": 0');
+      List<int> interfaces = <int>[];
+      for (DartType interface in classElement.interfaces) {
+        interfaces.add(reifyType(interface));
+      }
+      buffer.write(',$n$n"+$reflectionName": $interfaces');
     }
   }
 
@@ -2631,6 +2637,8 @@
     for (Element element in Elements.sortedByPosition(staticNonFinalFields)) {
       // [:interceptedNames:] is handled in [emitInterceptedNames].
       if (element == backend.interceptedNames) continue;
+      // `mapTypeToInterceptor` is handled in [emitMapTypeToInterceptor].
+      if (element == backend.mapTypeToInterceptor) continue;
       compiler.withCurrentElement(element, () {
         Constant initialValue = handler.getInitialValueFor(element);
         jsAst.Expression init =
@@ -2984,7 +2992,7 @@
   }
 
   var scripts = document.scripts;
-  function onLoad() {
+  function onLoad(event) {
     for (var i = 0; i < scripts.length; ++i) {
       scripts[i].removeEventListener('load', onLoad, false);
     }
@@ -3008,8 +3016,7 @@
   } else {
     ${mainCall};
   }
-});
-""");
+})$N""");
     addComment('END invoke [main].', buffer);
   }
 
@@ -3056,6 +3063,9 @@
     bool hasNumber = false;
     bool hasString = false;
     bool hasNative = false;
+    bool anyNativeClasses = compiler.enqueuer.codegen.nativeEnqueuer
+          .hasInstantiatedNativeClasses();
+
     for (ClassElement cls in classes) {
       if (cls == backend.jsArrayClass ||
           cls == backend.jsMutableArrayClass ||
@@ -3068,10 +3078,18 @@
       else if (cls == backend.jsNumberClass) hasNumber = true;
       else if (cls == backend.jsStringClass) hasString = true;
       else {
-        // TODO(sra): The set of classes includes classes mixed-in to
-        // interceptor classes.
-        // assert(cls == compiler.objectClass || cls.isNative());
-        if (cls.isNative()) hasNative = true;
+        // The set of classes includes classes mixed-in to interceptor classes
+        // and user extensions of native classes.
+        //
+        // The set of classes also includes the 'primitive' interceptor
+        // PlainJavaScriptObject even when it has not been resolved, since it is
+        // only resolved through the reference in getNativeInterceptor when
+        // getNativeInterceptor is marked as used.  Guard against probing
+        // unresolved PlainJavaScriptObject by testing for anyNativeClasses.
+
+        if (anyNativeClasses) {
+          if (Elements.isNativeOrExtendsNative(cls)) hasNative = true;
+        }
       }
     }
     if (hasDouble) {
@@ -3081,8 +3099,7 @@
 
     if (classes == backend.interceptedClasses) {
       // I.e. this is the general interceptor.
-      hasNative = compiler.enqueuer.codegen.nativeEnqueuer
-          .hasInstantiatedNativeClasses();
+      hasNative = anyNativeClasses;
     }
 
     jsAst.Block block = new jsAst.Block.empty();
@@ -3245,9 +3262,13 @@
     for (ClassElement element in sortedClasses) {
       if (rtiNeededClasses.contains(element)) {
         regularClasses.add(element);
-      } else if (element.isNative()) {
-        // For now, native classes cannot be deferred.
+      } else if (Elements.isNativeOrExtendsNative(element)) {
+        // For now, native classes and related classes cannot be deferred.
         nativeClasses.add(element);
+        if (!element.isNative()) {
+          assert(invariant(element, !isDeferred(element)));
+          regularClasses.add(element);
+        }
       } else if (isDeferred(element)) {
         deferredClasses.add(element);
       } else {
@@ -3305,8 +3326,10 @@
     return rtiNeededClasses;
   }
 
-  // Optimize performance critical one shot interceptors.
-  jsAst.Statement tryOptimizeOneShotInterceptor(Selector selector,
+  // Returns a statement that takes care of performance critical
+  // common case for a one-shot interceptor, or null if there is no
+  // fast path.
+  jsAst.Statement fastPathForOneShotInterceptor(Selector selector,
                                                 Set<ClassElement> classes) {
     jsAst.Expression isNumber(String variable) {
       return js('typeof $variable == "number"');
@@ -3329,11 +3352,10 @@
       String name = selector.name.stringValue;
       if (name == '==') {
         // Unfolds to:
-        // [: if (receiver == null) return a0 == null;
+        //    if (receiver == null) return a0 == null;
         //    if (typeof receiver != 'object') {
         //      return a0 != null && receiver === a0;
         //    }
-        // :].
         List<jsAst.Statement> body = <jsAst.Statement>[];
         body.add(js.if_('receiver == null', js.return_(js('a0 == null'))));
         body.add(js.if_(
@@ -3349,23 +3371,21 @@
       if (selector.argumentCount == 1) {
         // The following operators do not map to a JavaScript
         // operator.
-        if (name != '~/' && name != '<<' && name != '%' && name != '>>') {
-          jsAst.Expression result = js('receiver').binary(name, js('a0'));
-          if (name == '&' || name == '|' || name == '^') {
-            result = tripleShiftZero(result);
-          }
-          // Unfolds to:
-          // [: if (typeof receiver == "number" && typeof a0 == "number")
-          //      return receiver op a0;
-          // :].
-          return js.if_(
-              isNumber('receiver').binary('&&', isNumber('a0')),
-              js.return_(result));
+        if (name == '~/' || name == '<<' || name == '%' || name == '>>') {
+          return null;
         }
-      } else if (name == 'unary-') {
-        // operator~ does not map to a JavaScript operator.
+        jsAst.Expression result = js('receiver').binary(name, js('a0'));
+        if (name == '&' || name == '|' || name == '^') {
+          result = tripleShiftZero(result);
+        }
         // Unfolds to:
-        // [: if (typeof receiver == "number") return -receiver:].
+        //    if (typeof receiver == "number" && typeof a0 == "number")
+        //      return receiver op a0;
+        return js.if_(
+            isNumber('receiver').binary('&&', isNumber('a0')),
+            js.return_(result));
+      } else if (name == 'unary-') {
+        // [: if (typeof receiver == "number") return -receiver :].
         return js.if_(isNumber('receiver'),
                       js.return_(js('-receiver')));
       } else {
@@ -3376,21 +3396,19 @@
     } else if (selector.isIndex() || selector.isIndexSet()) {
       // For an index operation, this code generates:
       //
-      // [: if (receiver.constructor == Array || typeof receiver == "string") {
+      //    if (receiver.constructor == Array || typeof receiver == "string") {
       //      if (a0 >>> 0 === a0 && a0 < receiver.length) {
       //        return receiver[a0];
       //      }
       //    }
-      // :]
       //
       // For an index set operation, this code generates:
       //
-      // [: if (receiver.constructor == Array && !receiver.immutable$list) {
+      //    if (receiver.constructor == Array && !receiver.immutable$list) {
       //      if (a0 >>> 0 === a0 && a0 < receiver.length) {
       //        return receiver[a0] = a1;
       //      }
       //    }
-      // :]
       bool containsArray = classes.contains(backend.jsArrayClass);
       bool containsString = classes.contains(backend.jsStringClass);
       // The index set operator requires a check on its set value in
@@ -3463,7 +3481,7 @@
 
       List<jsAst.Statement> body = <jsAst.Statement>[];
       jsAst.Statement optimizedPath =
-          tryOptimizeOneShotInterceptor(selector, classes);
+          fastPathForOneShotInterceptor(selector, classes);
       if (optimizedPath != null) {
         body.add(optimizedPath);
       }
@@ -3511,6 +3529,37 @@
     buffer.write(N);
   }
 
+  /**
+   * Emit initializer for [mapTypeToInterceptor] data structure used by
+   * [findInterceptorForType].  See declaration of [mapTypeToInterceptor] in
+   * `interceptors.dart`.
+   */
+  void emitMapTypeToInterceptor(CodeBuffer buffer) {
+    // TODO(sra): Perhaps inject a constant instead?
+    // TODO(sra): Filter by subclasses of native types.
+    List<jsAst.Expression> elements = <jsAst.Expression>[];
+    ConstantHandler handler = compiler.constantHandler;
+    List<Constant> constants = handler.getConstantsForEmission();
+    for (Constant constant in constants) {
+      if (constant is TypeConstant) {
+        TypeConstant typeConstant = constant;
+        Element element = typeConstant.representedType.element;
+        if (element is ClassElement) {
+          ClassElement classElement = element;
+          elements.add(backend.emitter.constantReference(constant));
+          elements.add(js(namer.isolateAccess(classElement)));
+        }
+      }
+    }
+
+    jsAst.ArrayInitializer array = new jsAst.ArrayInitializer.from(elements);
+    String name = backend.namer.getName(backend.mapTypeToInterceptor);
+    jsAst.Expression assignment = js('$isolateProperties.$name = #', array);
+
+    buffer.write(jsAst.prettyPrint(assignment, compiler));
+    buffer.write(N);
+  }
+
   void emitInitFunction(CodeBuffer buffer) {
     jsAst.Fun fun = js.fun([], [
       js('$isolateProperties = {}'),
@@ -3587,7 +3636,7 @@
     if (!backend.retainMetadataOf(element)) return code;
     return compiler.withCurrentElement(element, () {
       List<int> metadata = <int>[];
-      FunctionSignature signature = element.computeSignature(compiler);
+      FunctionSignature signature = element.functionSignature;
       if (element.isConstructor()) {
         metadata.add(reifyType(element.getEnclosingClass().thisType));
       } else {
@@ -3843,6 +3892,7 @@
       emitStaticNonFinalFieldInitializations(mainBuffer);
       emitOneShotInterceptors(mainBuffer);
       emitInterceptedNames(mainBuffer);
+      emitMapTypeToInterceptor(mainBuffer);
       emitLazilyInitializedStaticFields(mainBuffer);
 
       mainBuffer.add(nativeBuffer);
@@ -4013,10 +4063,17 @@
     String metadataField = '"${namer.metadataField}"';
     return '''
 (function (reflectionData) {
+'''
+// [map] returns an object literal that V8 shouldn't try to optimize with a
+// hidden class. This prevents a potential performance problem where V8 tries
+// to build a hidden class for an object used as a hashMap.
+'''
+  function map(x){x={x:x};delete x.x;return x}
   if (!init.libraries) init.libraries = [];
-  if (!init.mangledNames) init.mangledNames = {};
-  if (!init.mangledGlobalNames) init.mangledGlobalNames = {};
-  if (!init.statics) init.statics = {};
+  if (!init.mangledNames) init.mangledNames = map();
+  if (!init.mangledGlobalNames) init.mangledGlobalNames = map();
+  if (!init.statics) init.statics = map();
+  if (!init.interfaces) init.interfaces = map();
   var libraries = init.libraries;
   var mangledNames = init.mangledNames;
   var mangledGlobalNames = init.mangledGlobalNames;
@@ -4052,6 +4109,8 @@
         var previousProperty;
         if (firstChar === "+") {
           mangledGlobalNames[previousProperty] = property.substring(1);
+          if (element && element.length) ''' // Breaking long line.
+'''init.interfaces[previousProperty] = element;
         } else if (firstChar === "@") {
           property = property.substring(1);
           ${namer.CURRENT_ISOLATE}[property][$metadataField] = element;
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart b/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart
index 7d14262..7a6e6f3 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart
@@ -569,11 +569,11 @@
       return cls.name.slowToString();
     }
     List<String> names = classes
-        .where((cls) => !cls.isNative())
+        .where((cls) => !Elements.isNativeOrExtendsNative(cls))
         .map(abbreviate)
         .toList();
     // There is one dispatch mechanism for all native classes.
-    if (classes.any((cls) => cls.isNative())) {
+    if (classes.any((cls) => Elements.isNativeOrExtendsNative(cls))) {
       names.add("x");
     }
     // Sort the names of the classes after abbreviating them to ensure
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart
index 53fc608..9b3ac22 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart
@@ -93,6 +93,12 @@
     return backend.namer.isolateAccess(element);
   }
 
+  String get defineNativeMethodsExtendedName {
+    Element element = compiler.findHelper(
+        const SourceString('defineNativeMethodsExtended'));
+    return backend.namer.isolateAccess(element);
+  }
+
   String get defineNativeMethodsFinishName {
     Element element = compiler.findHelper(
         const SourceString('defineNativeMethodsFinish'));
@@ -118,6 +124,10 @@
    * benefit), due to how [getNativeInterceptor] works.  Finding the interceptor
    * of a leaf class in the hierarchy is more efficient that a non-leaf, so it
    * improves performance when more classes can be treated as leaves.
+   *
+   * [classes] contains native classes, mixin applications, and user subclasses
+   * of native classes.  ONLY the native classes are generated here.  [classes]
+   * is sorted in desired output order.
    */
   void generateNativeClasses(List<ClassElement> classes,
                              CodeBuffer mainBuffer) {
@@ -127,8 +137,10 @@
 
     List<ClassElement> preOrder = <ClassElement>[];
     Set<ClassElement> seen = new Set<ClassElement>();
+    seen..add(compiler.objectClass)
+        ..add(backend.jsInterceptorClass);
     void walk(ClassElement element) {
-      if (seen.contains(element) || element == compiler.objectClass) return;
+      if (seen.contains(element)) return;
       seen.add(element);
       walk(element.superclass);
       preOrder.add(element);
@@ -140,8 +152,10 @@
     Map<ClassElement, ClassBuilder> builders =
         new Map<ClassElement, ClassBuilder>();
     for (ClassElement classElement in classes) {
-      ClassBuilder builder = generateNativeClass(classElement);
-      builders[classElement] = builder;
+      if (classElement.isNative()) {
+        ClassBuilder builder = generateNativeClass(classElement);
+        builders[classElement] = builder;
+      }
     }
 
     // Find which classes are needed and which are non-leaf classes.  Any class
@@ -150,6 +164,10 @@
 
     Set<ClassElement> neededClasses = new Set<ClassElement>();
     Set<ClassElement> nonleafClasses = new Set<ClassElement>();
+
+    Map<ClassElement, List<ClassElement>> extensionPoints =
+        computeExtensionPoints(preOrder);
+
     neededClasses.add(compiler.objectClass);
 
     Set<ClassElement> neededByConstant =
@@ -176,6 +194,8 @@
         // TODO(9556): Remove this test when [emitRuntimeTypeSupport] no longer
         // adds information to a class prototype or constructor.
         needed = true;
+      } else if (extensionPoints.containsKey(classElement)) {
+        needed = true;
       }
 
       if (needed || neededClasses.contains(classElement)) {
@@ -185,7 +205,7 @@
       }
     }
 
-    // Collect all the tags that map to each class.
+    // Collect all the tags that map to each native class.
 
     Map<ClassElement, Set<String>> leafTags =
         new Map<ClassElement, Set<String>>();
@@ -193,9 +213,11 @@
         new Map<ClassElement, Set<String>>();
 
     for (ClassElement classElement in classes) {
+      if (!classElement.isNative()) continue;
       List<String> nativeTags = nativeTagsOfClass(classElement);
 
-      if (nonleafClasses.contains(classElement)) {
+      if (nonleafClasses.contains(classElement) ||
+          extensionPoints.containsKey(classElement)) {
         nonleafTags
             .putIfAbsent(classElement, () => new Set<String>())
             .addAll(nativeTags);
@@ -218,10 +240,19 @@
     if (compiler.enqueuer.codegen.nativeEnqueuer
         .hasInstantiatedNativeClasses()) {
       void generateDefines(ClassElement classElement) {
-        generateDefineNativeMethods(leafTags[classElement], classElement,
-            defineNativeMethodsName);
-        generateDefineNativeMethods(nonleafTags[classElement], classElement,
-            defineNativeMethodsNonleafName);
+        generateDefineNativeMethods(leafTags[classElement],
+            null,
+            classElement, defineNativeMethodsName);
+        List<ClassElement> extensions = extensionPoints[classElement];
+        if (extensions == null) {
+          generateDefineNativeMethods(nonleafTags[classElement],
+              null,
+              classElement, defineNativeMethodsNonleafName);
+        } else {
+          generateDefineNativeMethods(nonleafTags[classElement],
+              makeSubclassList(extensions),
+              classElement, defineNativeMethodsExtendedName);
+        }
       }
       generateDefines(backend.jsInterceptorClass);
       for (ClassElement classElement in classes) {
@@ -231,6 +262,7 @@
 
     // Emit the native class interceptors that were actually used.
     for (ClassElement classElement in classes) {
+      if (!classElement.isNative()) continue;
       if (neededClasses.contains(classElement)) {
         // Define interceptor class for [classElement].
         emitter.emitClassBuilderWithReflectionData(
@@ -242,6 +274,38 @@
     }
   }
 
+  /**
+   * Computes the native classes that are extended (subclassed) by non-native
+   * classes and the set non-mative classes that extend them.  (A List is used
+   * instead of a Set for out stability).
+   */
+  Map<ClassElement, List<ClassElement>> computeExtensionPoints(
+      List<ClassElement> classes) {
+    ClassElement nativeSuperclassOf(ClassElement element) {
+      if (element == null) return null;
+      if (element.isNative()) return element;
+      return nativeSuperclassOf(element.superclass);
+    }
+
+    ClassElement nativeAncestorOf(ClassElement element) {
+      return nativeSuperclassOf(element.superclass);
+    }
+
+    Map<ClassElement, List<ClassElement>> map =
+        new Map<ClassElement, List<ClassElement>>();
+
+    for (ClassElement classElement in classes) {
+      if (classElement.isNative()) continue;
+      ClassElement nativeAncestor = nativeAncestorOf(classElement);
+      if (nativeAncestor != null) {
+        map
+          .putIfAbsent(nativeAncestor, () => <ClassElement>[])
+          .add(classElement);
+      }
+    }
+    return map;
+  }
+
   ClassBuilder generateNativeClass(ClassElement classElement) {
     assert(!classElement.hasBackendMembers);
     nativeClasses.add(classElement);
@@ -249,6 +313,7 @@
     ClassElement superclass = classElement.superclass;
     assert(superclass != null);
     // Fix superclass.  TODO(sra): make native classes inherit from Interceptor.
+    assert(superclass != compiler.objectClass);
     if (superclass == compiler.objectClass) {
       superclass = backend.jsInterceptorClass;
     }
@@ -275,18 +340,28 @@
   }
 
   void generateDefineNativeMethods(
-      Set<String> tags, ClassElement classElement, String definer) {
+      Set<String> tags, jsAst.Expression extraArgument,
+      ClassElement classElement, String definer) {
     if (tags == null) return;
     String tagsString = (tags.toList()..sort()).join('|');
-    jsAst.Expression definition =
-        js(definer)(
-            [js.string(tagsString),
-             js(backend.namer.isolateAccess(classElement))]);
+
+    List arguments = [
+        js.string(tagsString),
+        js(backend.namer.isolateAccess(classElement))];
+    if (extraArgument != null) {
+      arguments.add(extraArgument);
+    }
+    jsAst.Expression definition = js(definer)(arguments);
 
     nativeBuffer.add(jsAst.prettyPrint(definition, compiler));
     nativeBuffer.add('$N$n');
   }
 
+  jsAst.Expression makeSubclassList(List<ClassElement> classes) {
+    return new jsAst.ArrayInitializer.from(
+        classes.map((ClassElement classElement) =>
+            js(backend.namer.isolateAccess(classElement))));
+  }
 
   void finishGenerateNativeClasses() {
     // TODO(sra): Put specialized version of getNativeMethods on
diff --git a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart
index 2910563..74b6e56 100644
--- a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart
@@ -90,11 +90,12 @@
     return <Dart2JsMemberMirror>[new Dart2JsMethodMirror(library, element)];
   } else if (element is AbstractFieldElement) {
     var members = <Dart2JsMemberMirror>[];
-    if (element.getter != null) {
-      members.add(new Dart2JsMethodMirror(library, element.getter));
+    AbstractFieldElement field = element;
+    if (field.getter != null) {
+      members.add(new Dart2JsMethodMirror(library, field.getter));
     }
-    if (element.setter != null) {
-      members.add(new Dart2JsMethodMirror(library, element.setter));
+    if (field.setter != null) {
+      members.add(new Dart2JsMethodMirror(library, field.setter));
     }
     return members;
   }
@@ -882,7 +883,7 @@
     return _typeVariables;
   }
 
-  bool operator ==(Object other) {
+  bool operator ==(other) {
     if (identical(this, other)) {
       return true;
     }
@@ -1138,7 +1139,7 @@
   // TODO(johnniwinther): Substitute type arguments for type variables.
   Map<String, VariableMirror> get variables => originalDeclaration.variables;
 
-  bool operator ==(Object other) {
+  bool operator ==(other) {
     if (identical(this, other)) {
       return true;
     }
@@ -1257,7 +1258,7 @@
 
   bool get isVoid => true;
 
-  bool operator ==(Object other) {
+  bool operator ==(other) {
     if (identical(this, other)) {
       return true;
     }
@@ -1289,7 +1290,7 @@
 
   bool get isDynamic => true;
 
-  bool operator ==(Object other) {
+  bool operator ==(other) {
     if (identical(this, other)) {
       return true;
     }
diff --git a/sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart b/sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart
index 182a83f..81fcc90 100644
--- a/sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart
@@ -105,7 +105,8 @@
   if (owner is LibraryMirror) {
     return owner;
   } else if (owner is TypeMirror) {
-    return owner.library;
+    TypeMirror mirror = owner;
+    return mirror.library;
   }
   throw new Exception('Unexpected owner: ${owner}');
 }
@@ -250,16 +251,19 @@
 DeclarationMirror _lookupLocal(Mirror mirror, String id) {
   DeclarationMirror result;
   if (mirror is ContainerMirror) {
+    ContainerMirror containerMirror = mirror;
     // Try member lookup.
-    result = mirror.members[id];
+    result = containerMirror.members[id];
   }
   if (result != null) return result;
   if (mirror is ClassMirror) {
+    ClassMirror classMirror = mirror;
     // Try type variables.
-    result = mirror.typeVariables.firstWhere(
+    result = classMirror.typeVariables.firstWhere(
         (TypeVariableMirror v) => v.simpleName == id, orElse: () => null);
   } else if (mirror is MethodMirror) {
-    result = mirror.parameters.firstWhere(
+    MethodMirror methodMirror = mirror;
+    result = methodMirror.parameters.firstWhere(
         (ParameterMirror p) => p.simpleName == id, orElse: () => null);
   }
   return result;
diff --git a/sdk/lib/_internal/compiler/implementation/native_handler.dart b/sdk/lib/_internal/compiler/implementation/native_handler.dart
index ed7fb1f..724383c 100644
--- a/sdk/lib/_internal/compiler/implementation/native_handler.dart
+++ b/sdk/lib/_internal/compiler/implementation/native_handler.dart
@@ -86,6 +86,11 @@
 
   bool hasInstantiatedNativeClasses() => !registeredClasses.isEmpty;
 
+  final Set<ClassElement> nativeClassesAndSubclasses = new Set<ClassElement>();
+
+  final Map<ClassElement, Set<ClassElement>> nonNativeSubclasses =
+      new Map<ClassElement, Set<ClassElement>>();
+
   /**
    * Records matched constraints ([SpecialType] or [DartType]).  Once a type
    * constraint has been matched, there is no need to match it again.
@@ -115,6 +120,9 @@
   void processNativeClasses(Iterable<LibraryElement> libraries) {
     libraries.forEach(processNativeClassesInLibrary);
     processNativeClassesInLibrary(compiler.isolateHelperLibrary);
+
+    processSubclassesOfNativeClasses(libraries);
+
     if (!enableLiveTypeAnalysis) {
       nativeClasses.forEach((c) => enqueueClass(c, 'forced'));
       flushQueue();
@@ -137,6 +145,124 @@
     classElement.ensureResolved(compiler);
   }
 
+  void processSubclassesOfNativeClasses(Iterable<LibraryElement> libraries) {
+    // Collect potential subclasses, e.g.
+    //
+    //     class B extends foo.A {}
+    //
+    // SourceString "A" has a potential subclass B.
+
+    var potentialExtends = new Map<SourceString, Set<ClassElement>>();
+
+    libraries.forEach((library) {
+      library.implementation.forEachLocalMember((element) {
+        if (element.isClass()) {
+          SourceString name = element.name;
+          SourceString extendsName = findExtendsNameOfClass(element);
+          if (extendsName != null) {
+            Set<ClassElement> potentialSubclasses =
+                potentialExtends.putIfAbsent(
+                    extendsName,
+                    () => new Set<ClassElement>());
+            potentialSubclasses.add(element);
+          }
+        }
+      });
+    });
+
+    // Resolve all the native classes and any classes that might extend them in
+    // [potentialExtends], and then check that the properly resolved class is in
+    // fact a subclass of a native class.
+
+    ClassElement nativeSuperclassOf(ClassElement classElement) {
+      if (classElement.isNative()) return classElement;
+      if (classElement.superclass == null) return null;
+      return nativeSuperclassOf(classElement.superclass);
+    }
+
+    void walkPotentialSubclasses(ClassElement element) {
+      if (nativeClassesAndSubclasses.contains(element)) return;
+      element.ensureResolved(compiler);
+      ClassElement nativeSuperclass = nativeSuperclassOf(element);
+      if (nativeSuperclass != null) {
+        nativeClassesAndSubclasses.add(element);
+        if (!element.isNative()) {
+          nonNativeSubclasses.putIfAbsent(nativeSuperclass,
+              () => new Set<ClassElement>())
+            .add(element);
+        }
+        Set<ClassElement> potentialSubclasses = potentialExtends[element.name];
+        if (potentialSubclasses != null) {
+          potentialSubclasses.forEach(walkPotentialSubclasses);
+        }
+      }
+    }
+
+    nativeClasses.forEach(walkPotentialSubclasses);
+
+    nativeClasses.addAll(nativeClassesAndSubclasses);
+    unusedClasses.addAll(nativeClassesAndSubclasses);
+  }
+
+  /**
+   * Returns the source string of the class named in the extends clause, or
+   * `null` if there is no extends clause.
+   */
+  SourceString findExtendsNameOfClass(ClassElement classElement) {
+    //  "class B extends A ... {}"  --> "A"
+    //  "class B extends foo.A ... {}"  --> "A"
+    //  "class B<T> extends foo.A<T,T> with M1, M2 ... {}"  --> "A"
+
+    // We want to avoid calling classElement.parseNode on every class.  Doing so
+    // will slightly increase parse time and size and cause compiler errors and
+    // warnings to me emitted in more unused code.
+
+    // An alternative to this code is to extend the API of ClassElement to
+    // expose the name of the extended element.
+
+    // Pattern match the above cases in the token stream.
+    //  [abstract] class X extends [id.]* id
+
+    Token skipTypeParameters(Token token) {
+      BeginGroupToken beginGroupToken = token;
+      Token endToken = beginGroupToken.endGroup;
+      return endToken.next;
+      //for (;;) {
+      //  token = token.next;
+      //  if (token.stringValue == '>') return token.next;
+      //  if (token.stringValue == '<') return skipTypeParameters(token);
+      //}
+    }
+
+    SourceString scanForExtendsName(Token token) {
+      if (token.stringValue == 'abstract') token = token.next;
+      if (token.stringValue != 'class') return null;
+      token = token.next;
+      if (!token.isIdentifier()) return null;
+      token = token.next;
+      //  class F<X extends B<X>> extends ...
+      if (token.stringValue == '<') {
+        token = skipTypeParameters(token);
+      }
+      if (token.stringValue != 'extends') return null;
+      token = token.next;
+      Token id = token;
+      while (token.kind != EOF_TOKEN) {
+        token = token.next;
+        if (token.stringValue != '.') break;
+        token = token.next;
+        if (!token.isIdentifier()) return null;
+        id = token;
+      }
+      // Should be at '{', 'with', 'implements', '<' or 'native'.
+      return id.value;
+    }
+
+    return compiler.withCurrentElement(classElement, () {
+      return scanForExtendsName(classElement.position());
+    });
+  }
+
   ClassElement get annotationCreatesClass {
     findAnnotationClasses();
     return _annotationCreatesClass;
@@ -385,6 +511,7 @@
     staticUse(const SourceString('convertDartClosureToJS'));
     staticUse(const SourceString('defineNativeMethods'));
     staticUse(const SourceString('defineNativeMethodsNonleaf'));
+    staticUse(const SourceString('defineNativeMethodsExtended'));
     // TODO(9577): Registering `defineNativeMethodsFinish` seems redundant with
     // respect to the registering in the backend. When the backend registering
     // is removed as part of fixing Issue 9577, this can be the sole place
diff --git a/sdk/lib/_internal/compiler/implementation/resolution/members.dart b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
index f21f244..a2c9d1d 100644
--- a/sdk/lib/_internal/compiler/implementation/resolution/members.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
@@ -341,6 +341,10 @@
       }
       if (element.isSynthesized) {
         Element target = element.targetConstructor;
+        // Ensure the signature of the synthesized element is
+        // resolved. This is the only place where the resolver is
+        // seeing this element.
+        element.computeSignature(compiler);
         if (!target.isErroneous()) {
           compiler.enqueuer.resolution.registerStaticUse(
               element.targetConstructor);
@@ -1467,6 +1471,7 @@
       if (malformedIsError) {
         visitor.error(node, messageKind.error, messageArguments);
       } else {
+        compiler.backend.registerThrowRuntimeError(visitor.mapping);
         visitor.warning(node, messageKind.warning, messageArguments);
       }
       var erroneousElement = new ErroneousElementX(
@@ -1702,9 +1707,9 @@
       // The type annotations on a typedef do not imply type checks.
       // TODO(karlklose): clean this up (dartbug.com/8870).
       inCheckContext = compiler.enableTypeAssertions &&
+          !element.isLibrary() &&
           !element.isTypedef() &&
-          (element.enclosingElement == null ||
-           !element.enclosingElement.isTypedef()),
+          !element.enclosingElement.isTypedef(),
       inCatchBlock = false,
       super(compiler, mapping);
 
@@ -2280,14 +2285,14 @@
     bool resolvedArguments = false;
     if (node.isOperator) {
       String operatorString = node.selector.asOperator().source.stringValue;
-      if (operatorString == 'is') {
+      if (identical(operatorString, 'is')) {
         DartType type =
             resolveTypeExpression(node.typeAnnotationFromIsCheckOrCast);
         if (type != null) {
           compiler.enqueuer.resolution.registerIsCheck(type, mapping);
         }
         resolvedArguments = true;
-      } else if (operatorString == 'as') {
+      } else if (identical(operatorString, 'as')) {
         DartType type = resolveTypeExpression(node.arguments.head);
         if (type != null) {
           compiler.enqueuer.resolution.registerAsCheck(type, mapping);
@@ -2577,10 +2582,6 @@
   }
 
   visitThrow(Throw node) {
-    // We don't know ahead of time whether we will need the throw in a
-    // statement context or an expression context, so we register both
-    // here, even though we may not need ThrowExpression.
-    compiler.backend.registerWrapException(mapping);
     compiler.backend.registerThrowExpression(mapping);
     visit(node.expression);
   }
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
index acf5cb9..9169282 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
@@ -1153,7 +1153,9 @@
     // Create the inlining state after evaluating the arguments, that
     // may have an impact on the state of the current method.
     InliningState state = new InliningState(
-        function, returnElement, returnType, elements, stack, localsHandler);
+        function, returnElement, returnType, elements, stack,
+        localsHandler, inTryStatement);
+    inTryStatement = false;
     LocalsHandler newLocalsHandler = new LocalsHandler(this);
     newLocalsHandler.closureData =
         compiler.closureToClassMapper.computeClosureToClassMapping(
@@ -1206,6 +1208,7 @@
     state.oldStack.add(stack[0]);
     stack = state.oldStack;
     localsHandler = state.oldLocalsHandler;
+    inTryStatement = state.inTryStatement;
   }
 
   /**
@@ -3187,6 +3190,9 @@
     } else if (name == const SourceString('JS_OBJECT_CLASS_NAME')) {
       String name = backend.namer.getRuntimeTypeName(compiler.objectClass);
       stack.add(addConstantString(node, name));
+    } else if (name == const SourceString('JS_NULL_CLASS_NAME')) {
+      String name = backend.namer.getRuntimeTypeName(compiler.nullClass);
+      stack.add(addConstantString(node, name));
     } else if (name == const SourceString('JS_FUNCTION_CLASS_NAME')) {
       String name = backend.namer.getRuntimeTypeName(compiler.functionClass);
       stack.add(addConstantString(node, name));
@@ -3224,6 +3230,8 @@
       handleForeignJsCurrentIsolate(node);
     } else if (name == const SourceString('JS_GET_NAME')) {
       handleForeignJsGetName(node);
+    } else if (name == const SourceString('JS_EFFECT')) {
+      stack.add(graph.addConstantNull(compiler));
     } else {
       throw "Unknown foreign: ${selector}";
     }
@@ -5214,13 +5222,15 @@
   final TreeElements oldElements;
   final List<HInstruction> oldStack;
   final LocalsHandler oldLocalsHandler;
+  final bool inTryStatement;
 
   InliningState(this.function,
                 this.oldReturnElement,
                 this.oldReturnType,
                 this.oldElements,
                 this.oldStack,
-                this.oldLocalsHandler) {
+                this.oldLocalsHandler,
+                this.inTryStatement) {
     assert(function.isImplementation);
   }
 }
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
index f9d8e6a..0e592f3 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
@@ -2346,8 +2346,13 @@
       LibraryElement coreLibrary = compiler.coreLibrary;
       ClassElement objectClass = compiler.objectClass;
       Element element = type.element;
-
-      if (identical(element, objectClass) || type.treatAsDynamic) {
+      if (element == compiler.nullClass) {
+        if (negative) {
+          checkNonNull(input);
+        } else {
+          checkNull(input);
+        }
+      } else if (identical(element, objectClass) || type.treatAsDynamic) {
         // The constant folder also does this optimization, but we make
         // it safe by assuming it may have not run.
         push(newLiteralBool(!negative), node);
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/interceptor_simplifier.dart b/sdk/lib/_internal/compiler/implementation/ssa/interceptor_simplifier.dart
index 2af8285..1ea358d 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/interceptor_simplifier.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/interceptor_simplifier.dart
@@ -168,7 +168,7 @@
     // If there is an instruction that dominates all others, we can
     // use only the selector of that instruction.
     if (dominator != null) {
-      interceptedClasses = 
+      interceptedClasses =
             backend.getInterceptedClassesOn(dominator.selector.name);
 
       // If we found that we need number, we must still go through all
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
index 2b01077..e89ba47 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
@@ -34,21 +34,18 @@
     JavaScriptItemCompilationContext context = work.compilationContext;
     measure(() {
       List<OptimizationPhase> phases = <OptimizationPhase>[
-          // Run trivial constant folding first to optimize
+          // Run trivial instruction simplification first to optimize
           // some patterns useful for type conversion.
-          new SsaConstantFolder(constantSystem, backend, work),
+          new SsaInstructionSimplifier(constantSystem, backend, work),
           new SsaTypeConversionInserter(compiler),
           new SsaNonSpeculativeTypePropagator(compiler),
-          new SsaConstantFolder(constantSystem, backend, work),
-          // The constant folder affects the types of instructions, so
-          // we run the type propagator again. Note that this would
-          // not be necessary if types were directly stored on
-          // instructions.
-          new SsaNonSpeculativeTypePropagator(compiler),
+          // After type propagation, more instructions can be
+          // simplified.
+          new SsaInstructionSimplifier(constantSystem, backend, work),
           new SsaCheckInserter(backend, work, context.boundsChecked),
           new SsaRedundantPhiEliminator(),
           new SsaDeadPhiEliminator(),
-          new SsaConstantFolder(constantSystem, backend, work),
+          new SsaInstructionSimplifier(constantSystem, backend, work),
           new SsaNonSpeculativeTypePropagator(compiler),
           // Run a dead code eliminator before LICM because dead
           // interceptors are often in the way of LICM'able instructions.
@@ -57,8 +54,8 @@
           new SsaCodeMotion(),
           new SsaValueRangeAnalyzer(compiler, constantSystem, work),
           // Previous optimizations may have generated new
-          // opportunities for constant folding.
-          new SsaConstantFolder(constantSystem, backend, work),
+          // opportunities for instruction simplification.
+          new SsaInstructionSimplifier(constantSystem, backend, work),
           new SsaSimplifyInterceptors(compiler, constantSystem, work),
           new SsaDeadCodeEliminator()];
       runPhases(graph, phases);
@@ -122,15 +119,16 @@
  * If both inputs to known operations are available execute the operation at
  * compile-time.
  */
-class SsaConstantFolder extends HBaseVisitor implements OptimizationPhase {
-  final String name = "SsaConstantFolder";
+class SsaInstructionSimplifier extends HBaseVisitor
+    implements OptimizationPhase {
+  final String name = "SsaInstructionSimplifier";
   final JavaScriptBackend backend;
   final CodegenWorkItem work;
   final ConstantSystem constantSystem;
   HGraph graph;
   Compiler get compiler => backend.compiler;
 
-  SsaConstantFolder(this.constantSystem, this.backend, this.work);
+  SsaInstructionSimplifier(this.constantSystem, this.backend, this.work);
 
   void visitGraph(HGraph visitee) {
     graph = visitee;
@@ -583,7 +581,8 @@
     // raw type.
     } else if (!RuntimeTypes.hasTypeArguments(type)) {
       TypeMask expressionMask = expressionType.computeMask(compiler);
-      TypeMask typeMask = new TypeMask.nonNullSubtype(type);
+      TypeMask typeMask = (element == compiler.nullClass)
+          ? new TypeMask.subtype(type) : new TypeMask.nonNullSubtype(type);
       if (expressionMask.union(typeMask, compiler) == typeMask) {
         return graph.addConstantBool(true, compiler);
       } else if (expressionMask.intersection(typeMask, compiler).isEmpty) {
@@ -1039,7 +1038,17 @@
     HBasicBlock preheader = loopHeader.predecessors[0];
     int dependsFlags = SideEffects.computeDependsOnFlags(changesFlags);
     HInstruction instruction = block.first;
-    bool firstInstructionInLoop = block == loopHeader;
+    bool isLoopAlwaysTaken() {
+      HInstruction instruction = loopHeader.last;
+      assert(instruction is HGoto || instruction is HLoopBranch);
+      return instruction is HGoto
+          || instruction.inputs[0].isConstantTrue();
+    }
+    bool firstInstructionInLoop = block == loopHeader
+        // Compensate for lack of code motion.
+        || (blockChangesFlags[loopHeader.id] == 0
+            && isLoopAlwaysTaken()
+            && loopHeader.successors[0] == block);
     while (instruction != null) {
       HInstruction next = instruction.next;
       if (instruction.useGvn()
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/value_range_analyzer.dart b/sdk/lib/_internal/compiler/implementation/ssa/value_range_analyzer.dart
index 7cddf8f..257864c 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/value_range_analyzer.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/value_range_analyzer.dart
@@ -56,7 +56,7 @@
  */
 abstract class Value {
   final ValueRangeInfo info;
-  const Value([this.info = null]);
+  const Value(this.info);
 
   Value operator +(Value other) => const UnknownValue();
   Value operator -(Value other) => const UnknownValue();
diff --git a/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart b/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
index ab7226b..c13d7a4 100644
--- a/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
@@ -2,7 +2,18 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of types;
+library concrete_types_inferrer;
+
+import 'dart:collection' show Queue, IterableBase;
+import '../dart2jslib.dart' hide Selector, TypedSelector;
+import '../dart_types.dart';
+import '../elements/elements.dart';
+import '../native_handler.dart' as native;
+import '../tree/tree.dart';
+import '../universe/universe.dart';
+import '../util/util.dart';
+
+import 'types.dart' show TypeMask, TypesInferrer;
 
 class CancelTypeInferenceException {
   final Node node;
diff --git a/sdk/lib/_internal/compiler/implementation/types/container_tracer.dart b/sdk/lib/_internal/compiler/implementation/types/container_tracer.dart
index ab3f998..caf28f0 100644
--- a/sdk/lib/_internal/compiler/implementation/types/container_tracer.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/container_tracer.dart
@@ -12,6 +12,7 @@
 import 'simple_types_inferrer.dart'
     show InferrerEngine, InferrerVisitor, LocalsHandler;
 import 'types.dart';
+import 'inferrer_visitor.dart';
 
 /**
  * A set of selector names that [List] implements, that we know do not
@@ -179,7 +180,7 @@
 
   /**
    * A set of selectors that both use and update the list, for example
-   * [: list[0]++; :] or [: list[0] |= 42; :]. 
+   * [: list[0]++; :] or [: list[0] |= 42; :].
    */
   final Set<Selector> constraints = new Set<Selector>();
 
@@ -326,7 +327,7 @@
       return analyzedNode == resolved;
     } else {
       assert(resolved is Element);
-      return escapingElements.contains(resolved); 
+      return escapingElements.contains(resolved);
     }
   }
 
@@ -335,7 +336,8 @@
   }
 }
 
-class ContainerTracerVisitor extends InferrerVisitor<TypeMask> {
+class ContainerTracerVisitor
+    extends InferrerVisitor<TypeMask, InferrerEngine<TypeMask>> {
   final Element analyzedElement;
   final TracerForConcreteContainer tracer;
   final bool visitingClosure;
@@ -746,7 +748,7 @@
     if (node.expression == null) {
       return types.nullType;
     }
-    
+
     TypeMask type;
     bool isEscaping = visitAndCatchEscaping(() {
       type = visit(node.expression);
@@ -761,7 +763,7 @@
     }
     return type;
   }
-  
+
   TypeMask visitForIn(ForIn node) {
     visit(node.expression);
     Selector iteratorSelector = elements.getIteratorSelector(node);
diff --git a/sdk/lib/_internal/compiler/implementation/types/inferrer_visitor.dart b/sdk/lib/_internal/compiler/implementation/types/inferrer_visitor.dart
index ce86ef6..00c9295 100644
--- a/sdk/lib/_internal/compiler/implementation/types/inferrer_visitor.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/inferrer_visitor.dart
@@ -2,7 +2,14 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of simple_types_inferrer;
+library inferrer_visitor;
+
+import '../dart2jslib.dart' hide Selector, TypedSelector;
+import '../dart_types.dart';
+import '../elements/elements.dart';
+import '../tree/tree.dart';
+import '../universe/universe.dart';
+import '../util/util.dart';
 
 /**
  * The interface [InferrerVisitor] will use when working on types.
@@ -75,106 +82,6 @@
 }
 
 /**
- * An implementation of [TypeSystem] for [TypeMask].
- */
-class TypeMaskSystem implements TypeSystem<TypeMask> {
-  final Compiler compiler;
-  TypeMaskSystem(this.compiler);
-
-  TypeMask narrowType(TypeMask type,
-                      DartType annotation,
-                      {bool isNullable: true}) {
-    if (annotation.treatAsDynamic) return type;
-    if (annotation.isVoid) return nullType;
-    if (annotation.element == compiler.objectClass) return type;
-    TypeMask otherType;
-    if (annotation.kind == TypeKind.TYPEDEF
-        || annotation.kind == TypeKind.FUNCTION) {
-      otherType = functionType;
-    } else if (annotation.kind == TypeKind.TYPE_VARIABLE) {
-      // TODO(ngeoffray): Narrow to bound.
-      return type;
-    } else {
-      assert(annotation.kind == TypeKind.INTERFACE);
-      otherType = new TypeMask.nonNullSubtype(annotation);
-    }
-    if (isNullable) otherType = otherType.nullable();
-    if (type == null) return otherType;
-    return type.intersection(otherType, compiler);
-  }
-
-  TypeMask computeLUB(TypeMask firstType, TypeMask secondType) {
-    if (firstType == null) {
-      return secondType;
-    } else if (secondType == dynamicType || firstType == dynamicType) {
-      return dynamicType;
-    } else if (firstType == secondType) {
-      return firstType;
-    } else {
-      TypeMask union = firstType.union(secondType, compiler);
-      // TODO(kasperl): If the union isn't nullable it seems wasteful
-      // to use dynamic. Fix that.
-      return union.containsAll(compiler) ? dynamicType : union;
-    }
-  }
-
-  TypeMask allocateDiamondPhi(TypeMask firstType, TypeMask secondType) {
-    return computeLUB(firstType, secondType);
-  }
-
-  TypeMask get dynamicType => compiler.typesTask.dynamicType;
-  TypeMask get nullType => compiler.typesTask.nullType;
-  TypeMask get intType => compiler.typesTask.intType;
-  TypeMask get doubleType => compiler.typesTask.doubleType;
-  TypeMask get numType => compiler.typesTask.numType;
-  TypeMask get boolType => compiler.typesTask.boolType;
-  TypeMask get functionType => compiler.typesTask.functionType;
-  TypeMask get listType => compiler.typesTask.listType;
-  TypeMask get constListType => compiler.typesTask.constListType;
-  TypeMask get fixedListType => compiler.typesTask.fixedListType;
-  TypeMask get growableListType => compiler.typesTask.growableListType;
-  TypeMask get mapType => compiler.typesTask.mapType;
-  TypeMask get constMapType => compiler.typesTask.constMapType;
-  TypeMask get stringType => compiler.typesTask.stringType;
-  TypeMask get typeType => compiler.typesTask.typeType;
-
-  TypeMask nonNullSubtype(DartType type) => new TypeMask.nonNullSubtype(type);
-  TypeMask nonNullSubclass(DartType type) => new TypeMask.nonNullSubclass(type);
-  TypeMask nonNullExact(DartType type) => new TypeMask.nonNullExact(type);
-  TypeMask nonNullEmpty() => new TypeMask.nonNullEmpty();
-
-  TypeMask nullable(TypeMask type) {
-    return type.nullable();
-  }
-
-  TypeMask allocateContainer(TypeMask type,
-                             Node node,
-                             Element enclosing,
-                             [TypeMask elementType, int length]) {
-    ContainerTypeMask mask = new ContainerTypeMask(type, node, enclosing);
-    mask.elementType = elementType;
-    mask.length = length;
-    return mask;
-  }
-
-  Selector newTypedSelector(TypeMask receiver, Selector selector) {
-    return new TypedSelector(receiver, selector);
-  }
-
-  TypeMask addPhiInput(Element element, TypeMask phiType, TypeMask newType) {
-    return computeLUB(phiType, newType);
-  }
-
-  TypeMask allocatePhi(Node node, Element element, TypeMask inputType) {
-    return inputType;
-  }
-
-  TypeMask simplifyPhi(Node node, Element element, TypeMask phiType) {
-    return phiType;
-  }
-}
-
-/**
  * A variable scope holds types for variables. It has a link to a
  * parent scope, but never changes the types in that parent. Instead,
  * updates to locals of a parent scope are put in the current scope.
@@ -243,8 +150,9 @@
     forEachLocalUntilNode(null, f);
   }
 
-  void remove(Element element) {
-    variables.remove(element);
+  bool updates(Element element) {
+    if (variables == null) return false;
+    return variables.containsKey(element);
   }
 
   String toString() {
@@ -303,12 +211,73 @@
 }
 
 /**
+ * Placeholder for inferred arguments types on sends.
+ */
+class ArgumentsTypes<T> {
+  final List<T> positional;
+  final Map<SourceString, T> named;
+  ArgumentsTypes(this.positional, named)
+    : this.named = (named == null) ? new Map<SourceString, T>() : named;
+
+  int get length => positional.length + named.length;
+
+  String toString() => "{ positional = $positional, named = $named }";
+
+  bool operator==(other) {
+    if (positional.length != other.positional.length) return false;
+    if (named.length != other.named.length) return false;
+    for (int i = 0; i < positional.length; i++) {
+      if (positional[i] != other.positional[i]) return false;
+    }
+    named.forEach((name, type) {
+      if (other.named[name] != type) return false;
+    });
+    return true;
+  }
+
+  int get hashCode => throw new UnsupportedError('ArgumentsTypes.hashCode');
+
+  bool hasNoArguments() => positional.isEmpty && named.isEmpty;
+
+  bool hasOnePositionalArgumentWithType(T type) {
+    return named.isEmpty && positional.length == 1 && positional[0] == type;
+  }
+}
+
+class CallSite {
+  final Selector selector;
+  final ArgumentsTypes arguments;
+  CallSite(this.selector, this.arguments) {
+    assert(selector != null);
+  }
+}
+
+abstract class MinimalInferrerEngine<T> {
+  /**
+   * Returns the type of [element].
+   */
+  T typeOfElement(Element element);
+
+  /**
+   * Records that [node] sets non-final field [element] to be of type
+   * [type].
+   *
+   * [constraint] is a field assignment constraint, as described in
+   * [InternalSimpleTypesInferrer].
+   */
+  void recordTypeOfNonFinalField(Node node,
+                                 Element field,
+                                 T type,
+                                 CallSite constraint);
+}
+
+/**
  * Placeholder for inferred types of local variables.
  */
 class LocalsHandler<T> {
   final Compiler compiler;
   final TypeSystem<T> types;
-  final InferrerEngine<T> inferrer;
+  final MinimalInferrerEngine<T> inferrer;
   final VariableScope<T> locals;
   final Map<Element, Element> capturedAndBoxed;
   final FieldInitializationScope<T> fieldScope;
@@ -399,21 +368,43 @@
         && elseBranch != null
         && elseBranch.seenBreakOrContinue;
     if (aborts) return;
-    if (thenBranch.aborts) {
-      thenBranch = this;
-      if (elseBranch == null) return;
-    } else if (elseBranch == null || elseBranch.aborts) {
-      elseBranch = this;
+
+    void mergeOneBranch(LocalsHandler<T> other) {
+      other.locals.forEachOwnLocal((Element local, T type) {
+        T myType = locals[local];
+        if (myType == null) return;
+        if (type == myType) return;
+        locals[local] = types.allocateDiamondPhi(myType, type);
+      });
     }
 
-    thenBranch.locals.forEachOwnLocal((Element local, T type) {
-      T otherType = elseBranch.locals[local];
-      if (otherType == null) return;
-      T existing = locals[local];
-      if (type == existing && otherType == existing) return;
-      locals[local] = types.allocateDiamondPhi(type, otherType);
-    });
+    if (thenBranch.aborts) {
+      if (elseBranch == null) return;
+      mergeOneBranch(elseBranch);
+    } else if (elseBranch == null || elseBranch.aborts) {
+      mergeOneBranch(thenBranch);
+    } else {
+      void mergeLocal(Element local) {
+        T myType = locals[local];
+        if (myType == null) return;
+        T elseType = elseBranch.locals[local];
+        T thenType = thenBranch.locals[local];
+        if (thenType == elseType) {
+          locals[local] = thenType;
+        } else {
+          locals[local] = types.allocateDiamondPhi(thenType, elseType);
+        }
+      }
 
+      thenBranch.locals.forEachOwnLocal((Element local, _) {
+        mergeLocal(local);
+      });
+      elseBranch.locals.forEachOwnLocal((Element local, _) {
+        // Discard locals we already processed when iterating over
+        // [thenBranch]'s locals.
+        if (!thenBranch.locals.updates(local)) mergeLocal(local);
+      });
+    }
   }
 
   /**
@@ -512,10 +503,11 @@
   }
 }
 
-abstract class InferrerVisitor<T> extends ResolvedVisitor<T> {
+abstract class InferrerVisitor
+    <T, E extends MinimalInferrerEngine<T>> extends ResolvedVisitor<T> {
   final Element analyzedElement;
   final TypeSystem<T> types;
-  final InferrerEngine<T> inferrer;
+  final E inferrer;
   final Compiler compiler;
   final Map<TargetElement, List<LocalsHandler<T>>> breaksFor =
       new Map<TargetElement, List<LocalsHandler<T>>>();
diff --git a/sdk/lib/_internal/compiler/implementation/types/simple_types_inferrer.dart b/sdk/lib/_internal/compiler/implementation/types/simple_types_inferrer.dart
index 5bae1d7..6fe350d 100644
--- a/sdk/lib/_internal/compiler/implementation/types/simple_types_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/simple_types_inferrer.dart
@@ -15,7 +15,8 @@
 import '../util/util.dart' show Link;
 import 'types.dart'
     show TypesInferrer, FlatTypeMask, TypeMask, ContainerTypeMask,
-         ElementTypeMask;
+         ElementTypeMask, TypeSystem, MinimalInferrerEngine;
+import 'inferrer_visitor.dart';
 
 // BUG(8802): There's a bug in the analyzer that makes the re-export
 // of Selector from dart2jslib.dart fail. For now, we work around that
@@ -23,7 +24,105 @@
 import '../dart2jslib.dart' hide Selector, TypedSelector;
 import '../universe/universe.dart' show Selector, SideEffects, TypedSelector;
 
-part 'inferrer_visitor.dart';
+/**
+ * An implementation of [TypeSystem] for [TypeMask].
+ */
+class TypeMaskSystem implements TypeSystem<TypeMask> {
+  final Compiler compiler;
+  TypeMaskSystem(this.compiler);
+
+  TypeMask narrowType(TypeMask type,
+                      DartType annotation,
+                      {bool isNullable: true}) {
+    if (annotation.treatAsDynamic) return type;
+    if (annotation.isVoid) return nullType;
+    if (annotation.element == compiler.objectClass) return type;
+    TypeMask otherType;
+    if (annotation.kind == TypeKind.TYPEDEF
+        || annotation.kind == TypeKind.FUNCTION) {
+      otherType = functionType;
+    } else if (annotation.kind == TypeKind.TYPE_VARIABLE) {
+      // TODO(ngeoffray): Narrow to bound.
+      return type;
+    } else {
+      assert(annotation.kind == TypeKind.INTERFACE);
+      otherType = new TypeMask.nonNullSubtype(annotation);
+    }
+    if (isNullable) otherType = otherType.nullable();
+    if (type == null) return otherType;
+    return type.intersection(otherType, compiler);
+  }
+
+  TypeMask computeLUB(TypeMask firstType, TypeMask secondType) {
+    if (firstType == null) {
+      return secondType;
+    } else if (secondType == dynamicType || firstType == dynamicType) {
+      return dynamicType;
+    } else if (firstType == secondType) {
+      return firstType;
+    } else {
+      TypeMask union = firstType.union(secondType, compiler);
+      // TODO(kasperl): If the union isn't nullable it seems wasteful
+      // to use dynamic. Fix that.
+      return union.containsAll(compiler) ? dynamicType : union;
+    }
+  }
+
+  TypeMask allocateDiamondPhi(TypeMask firstType, TypeMask secondType) {
+    return computeLUB(firstType, secondType);
+  }
+
+  TypeMask get dynamicType => compiler.typesTask.dynamicType;
+  TypeMask get nullType => compiler.typesTask.nullType;
+  TypeMask get intType => compiler.typesTask.intType;
+  TypeMask get doubleType => compiler.typesTask.doubleType;
+  TypeMask get numType => compiler.typesTask.numType;
+  TypeMask get boolType => compiler.typesTask.boolType;
+  TypeMask get functionType => compiler.typesTask.functionType;
+  TypeMask get listType => compiler.typesTask.listType;
+  TypeMask get constListType => compiler.typesTask.constListType;
+  TypeMask get fixedListType => compiler.typesTask.fixedListType;
+  TypeMask get growableListType => compiler.typesTask.growableListType;
+  TypeMask get mapType => compiler.typesTask.mapType;
+  TypeMask get constMapType => compiler.typesTask.constMapType;
+  TypeMask get stringType => compiler.typesTask.stringType;
+  TypeMask get typeType => compiler.typesTask.typeType;
+
+  TypeMask nonNullSubtype(DartType type) => new TypeMask.nonNullSubtype(type);
+  TypeMask nonNullSubclass(DartType type) => new TypeMask.nonNullSubclass(type);
+  TypeMask nonNullExact(DartType type) => new TypeMask.nonNullExact(type);
+  TypeMask nonNullEmpty() => new TypeMask.nonNullEmpty();
+
+  TypeMask nullable(TypeMask type) {
+    return type.nullable();
+  }
+
+  TypeMask allocateContainer(TypeMask type,
+                             Node node,
+                             Element enclosing,
+                             [TypeMask elementType, int length]) {
+    ContainerTypeMask mask = new ContainerTypeMask(type, node, enclosing);
+    mask.elementType = elementType;
+    mask.length = length;
+    return mask;
+  }
+
+  Selector newTypedSelector(TypeMask receiver, Selector selector) {
+    return new TypedSelector(receiver, selector);
+  }
+
+  TypeMask addPhiInput(Element element, TypeMask phiType, TypeMask newType) {
+    return computeLUB(phiType, newType);
+  }
+
+  TypeMask allocatePhi(Node node, Element element, TypeMask inputType) {
+    return inputType;
+  }
+
+  TypeMask simplifyPhi(Node node, Element element, TypeMask phiType) {
+    return phiType;
+  }
+}
 
 /**
  * A work queue that ensures there are no duplicates, and adds and
@@ -223,7 +322,7 @@
  * type information about visited nodes, as well as to request type
  * information of elements.
  */
-abstract class InferrerEngine<T> {
+abstract class InferrerEngine<T> implements MinimalInferrerEngine<T> {
   final Compiler compiler;
   final TypeSystem<T> types;
   final Map<Node, T> concreteTypes = new Map<Node, T>();
@@ -859,6 +958,9 @@
 
   bool recordType(Element analyzedElement, TypeMask type) {
     if (isNativeElement(analyzedElement)) return false;
+    if (!compiler.backend.canBeUsedForGlobalOptimizations(analyzedElement)) {
+      return false;
+    }
     assert(type != null);
     assert(analyzedElement.isField()
            || analyzedElement.isParameter()
@@ -1111,8 +1213,8 @@
   }
 
   bool updateParameterType(Element parameter) {
-    FunctionTypeInformation functionInfo =
-        typeInformationOf(parameter.enclosingElement);
+    Element function = parameter.enclosingElement;
+    FunctionTypeInformation functionInfo = typeInformationOf(function);
     if (functionInfo.canBeClosurized) return false;
     if (!isNotClosure(parameter.enclosingElement)) return false;
 
@@ -1472,49 +1574,8 @@
   }
 }
 
-class CallSite {
-  final Selector selector;
-  final ArgumentsTypes arguments;
-  CallSite(this.selector, this.arguments) {
-    assert(selector != null);
-  }
-}
-
-/**
- * Placeholder for inferred arguments types on sends.
- */
-class ArgumentsTypes<T> {
-  final List<T> positional;
-  final Map<SourceString, T> named;
-  ArgumentsTypes(this.positional, named)
-    : this.named = (named == null) ? new Map<SourceString, T>() : named;
-
-  int get length => positional.length + named.length;
-
-  String toString() => "{ positional = $positional, named = $named }";
-
-  bool operator==(other) {
-    if (positional.length != other.positional.length) return false;
-    if (named.length != other.named.length) return false;
-    for (int i = 0; i < positional.length; i++) {
-      if (positional[i] != other.positional[i]) return false;
-    }
-    named.forEach((name, type) {
-      if (other.named[name] != type) return false;
-    });
-    return true;
-  }
-
-  int get hashCode => throw new UnsupportedError('ArgumentsTypes.hashCode');
-
-  bool hasNoArguments() => positional.isEmpty && named.isEmpty;
-
-  bool hasOnePositionalArgumentWithType(T type) {
-    return named.isEmpty && positional.length == 1 && positional[0] == type;
-  }
-}
-
-class SimpleTypeInferrerVisitor<T> extends InferrerVisitor<T> {
+class SimpleTypeInferrerVisitor<T>
+    extends InferrerVisitor<T, InferrerEngine<T>> {
   T returnType;
   bool visitingInitializers = false;
   bool isConstructorRedirect = false;
@@ -2000,7 +2061,8 @@
       return inferrer.typeOfNativeBehavior(nativeBehavior);
     } else if (name == const SourceString('JS_OPERATOR_IS_PREFIX')
                || name == const SourceString('JS_OPERATOR_AS_PREFIX')
-               || name == const SourceString('JS_OBJECT_CLASS_NAME')) {
+               || name == const SourceString('JS_OBJECT_CLASS_NAME')
+               || name == const SourceString('JS_NULL_CLASS_NAME')) {
       return types.stringType;
     } else {
       sideEffects.setAllSideEffects();
diff --git a/sdk/lib/_internal/compiler/implementation/types/types.dart b/sdk/lib/_internal/compiler/implementation/types/types.dart
index 538b44e..3e2178a 100644
--- a/sdk/lib/_internal/compiler/implementation/types/types.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/types.dart
@@ -4,8 +4,6 @@
 
 library types;
 
-import 'dart:collection' show Queue, IterableBase;
-
 import '../dart2jslib.dart' hide Selector, TypedSelector;
 import '../tree/tree.dart';
 import '../elements/elements.dart';
@@ -13,9 +11,9 @@
 import '../util/util.dart';
 import '../universe/universe.dart';
 import 'simple_types_inferrer.dart' show SimpleTypesInferrer;
+import 'concrete_types_inferrer.dart' show ConcreteTypesInferrer;
 import '../dart_types.dart';
 
-part 'concrete_types_inferrer.dart';
 part 'container_type_mask.dart';
 part 'element_type_mask.dart';
 part 'flat_type_mask.dart';
diff --git a/sdk/lib/_internal/dartdoc/lib/dartdoc.dart b/sdk/lib/_internal/dartdoc/lib/dartdoc.dart
index 11ef337..f005351 100644
--- a/sdk/lib/_internal/dartdoc/lib/dartdoc.dart
+++ b/sdk/lib/_internal/dartdoc/lib/dartdoc.dart
@@ -2128,15 +2128,15 @@
     write("# VERSION: ${new DateTime.now()}\n\n");
     write("NETWORK:\n*\n\n");
     write("CACHE:\n");
-    var toCache = new Directory.fromPath(outputDir);
+    var toCache = new Directory(outputDir);
     toCache.list(recursive: true).listen(
         (FileSystemEntity entity) {
-          if (entity.isFile) {
+          if (entity is File) {
             var filename = entity.path;
             if (filename.endsWith('appcache.manifest')) {
               return;
             }
-            Path relativeFilePath = new Path(filename).relativeTo(outputDir);
+            String relativeFilePath = path.relative(filename, from: outputDir);
             write("$relativeFilePath\n");
           }
         },
diff --git a/sdk/lib/_internal/lib/core_patch.dart b/sdk/lib/_internal/lib/core_patch.dart
index 207800a..3a4f7ac 100644
--- a/sdk/lib/_internal/lib/core_patch.dart
+++ b/sdk/lib/_internal/lib/core_patch.dart
@@ -105,8 +105,8 @@
 
 patch class double {
   patch static double parse(String source,
-                            [double handleError(String source)]) {
-    return Primitives.parseDouble(source, handleError);
+                            [double onError(String source)]) {
+    return Primitives.parseDouble(source, onError);
   }
 }
 
diff --git a/sdk/lib/_internal/lib/foreign_helper.dart b/sdk/lib/_internal/lib/foreign_helper.dart
index 73e3c09..9ba05eb 100644
--- a/sdk/lib/_internal/lib/foreign_helper.dart
+++ b/sdk/lib/_internal/lib/foreign_helper.dart
@@ -177,6 +177,9 @@
 /// Returns the name of the class `Object` in the generated code.
 String JS_OBJECT_CLASS_NAME() {}
 
+/// Returns the name of the class `Null` in the generated code.
+String JS_NULL_CLASS_NAME() {}
+
 /// Returns the name of the class `Function` in the generated code.
 String JS_FUNCTION_CLASS_NAME() {}
 
@@ -236,3 +239,19 @@
  * Obtain [name] from Namer.
  */
 String JS_GET_NAME(String name) {}
+
+/**
+ * Pretend [code] is executed.  Generates no executable code.  This is used to
+ * model effects at some other point in external code.  For example, the
+ * following models an assignment to foo with an unknown value.
+ *
+ *     var foo;
+ *
+ *     main() {
+ *       JS_EFFECT((_){ foo = _; })
+ *     }
+ *
+ * TODO(sra): Replace this hack with something to mark the volatile or
+ * externally initialized elements.
+ */
+void JS_EFFECT(Function code) { code(null); }
diff --git a/sdk/lib/_internal/lib/interceptors.dart b/sdk/lib/_internal/lib/interceptors.dart
index 27c2edf..fedc0f6 100644
--- a/sdk/lib/_internal/lib/interceptors.dart
+++ b/sdk/lib/_internal/lib/interceptors.dart
@@ -25,7 +25,7 @@
                               lookupDispatchRecord,
                               StringMatch,
                               firstMatchAfter;
-import 'dart:_foreign_helper' show JS;
+import 'dart:_foreign_helper' show JS, JS_EFFECT;
 
 part 'js_array.dart';
 part 'js_number.dart';
@@ -247,6 +247,37 @@
  */
 var interceptedNames;
 
+
+/**
+ * Data structure used to map a [Type] to the [Interceptor] for that type.  It
+ * is JavaScript array of 2N entries of adjacent slots containing a [Type]
+ * followed by an [Interceptor] class for the type.
+ *
+ * The value of this variable is set by the compiler and contains only types
+ * that are user extensions of native classes where the type occurs as a
+ * constant in the program.
+ */
+// TODO(sra): Mark this as initialized to a constant with unknown value.
+var mapTypeToInterceptor;
+
+findInterceptorConstructorForType(Type type) {
+  JS_EFFECT((_){ mapTypeToInterceptor = _; });
+  if (mapTypeToInterceptor == null) return null;
+  List map = JS('JSFixedArray', '#', mapTypeToInterceptor);
+  for (int i = 0; i + 1 < map.length; i += 2) {
+    if (type == map[i]) {
+      return map[i + 1];
+    }
+  }
+  return null;
+}
+
+findInterceptorForType(Type type) {
+  var constructor = findInterceptorConstructorForType(type);
+  if (constructor == null) return null;
+  return JS('', '#.prototype', constructor);
+}
+
 /**
  * The base interceptor class.
  *
diff --git a/sdk/lib/_internal/lib/io_patch.dart b/sdk/lib/_internal/lib/io_patch.dart
index 6aed3a2..e41a2ce 100644
--- a/sdk/lib/_internal/lib/io_patch.dart
+++ b/sdk/lib/_internal/lib/io_patch.dart
@@ -289,33 +289,9 @@
 
   patch static void initialize({String database,
                                 String password,
-                                bool useBuiltinRoots: true,
-                                bool readOnly: true}) {
+                                bool useBuiltinRoots: true}) {
     throw new UnsupportedError("SecureSocket.initialize");
   }
-
-  patch static X509Certificate addCertificate(List<int> certificate,
-                                              String trust) {
-    throw new UnsupportedError("SecureSocket.addCertificate");
-  }
-
-  patch static importCertificatesWithPrivateKeys(List<int> certificates,
-                                                 String password) {
-    throw new UnsupportedError(
-        "SecureSocket.importCertificatesWithPrivateKeys");
-  }
-
-  patch static X509Certificate getCertificate(String nickname) {
-    throw new UnsupportedError("SecureSocket.getCertificate");
-  }
-
-  patch static removeCertificate(String nickname) {
-    throw new UnsupportedError("SecureSocket.removeCertificate");
-  }
-
-  patch static X509Certificate changeTrust(String nickname, String trust) {
-    throw new UnsupportedError("SecureSocket.changeTrust");
-  }
 }
 
 patch class _SecureFilter {
diff --git a/sdk/lib/_internal/lib/js_helper.dart b/sdk/lib/_internal/lib/js_helper.dart
index ab69f61..e5ec91f 100644
--- a/sdk/lib/_internal/lib/js_helper.dart
+++ b/sdk/lib/_internal/lib/js_helper.dart
@@ -23,13 +23,17 @@
                                    JS_HAS_EQUALS,
                                    JS_IS_INDEXABLE_FIELD_NAME,
                                    JS_OBJECT_CLASS_NAME,
+                                   JS_NULL_CLASS_NAME,
                                    JS_OPERATOR_AS_PREFIX,
                                    JS_OPERATOR_IS_PREFIX,
                                    JS_SIGNATURE_NAME,
                                    RAW_DART_FUNCTION_REF;
 import 'dart:_interceptors';
 import 'dart:_collection-dev' as _symbol_dev;
-import 'dart:_js_names' show mangledNames, mangledGlobalNames;
+
+import 'dart:_js_names' show
+    mangledNames,
+    unmangleGlobalNameIfPreservedAnyways;
 
 part 'constant_map.dart';
 part 'native_helper.dart';
@@ -1611,18 +1615,6 @@
 }
 
 /**
- * Represents the type of Null. The compiler treats this specially.
- * TODO(lrn): Null should be defined in core. It's a class, like int.
- * It just happens to act differently in assignability tests and,
- * like int, can't be extended or implemented.
- */
-class Null {
-  factory Null() {
-    throw new UnsupportedError('new Null()');
-  }
-}
-
-/**
  * The following methods are called by the runtime to implement
  * checked mode and casts. We specialize each primitive type (eg int, bool), and
  * use the compiler's convention to do is-checks on regular objects.
diff --git a/sdk/lib/_internal/lib/js_mirrors.dart b/sdk/lib/_internal/lib/js_mirrors.dart
index 3914b20..52aca10 100644
--- a/sdk/lib/_internal/lib/js_mirrors.dart
+++ b/sdk/lib/_internal/lib/js_mirrors.dart
@@ -24,6 +24,7 @@
     RuntimeError,
     createRuntimeType,
     createUnmangledInvocationMirror,
+    getMangledTypeName,
     runtimeTypeToString;
 import 'dart:_interceptors' show
     Interceptor,
@@ -398,7 +399,7 @@
   // TODO(ahe): Don't discard type arguments to support
   // [ClassMirror.isOriginalDeclaration] and [ClassMirror.originalDeclaration]
   // correctly.
-  return reflectClassByMangledName('$key'.split('<')[0]);
+  return reflectClassByMangledName(getMangledTypeName(key).split('<')[0]);
 }
 
 ClassMirror reflectClassByMangledName(String mangledName) {
@@ -522,7 +523,7 @@
     throw new NoSuchMethodError(this, '${n(fieldName)}=', [arg], null);
   }
 
-  List<ClassMirror> get superinterfaces => mixin.superinterfaces;
+  List<ClassMirror> get superinterfaces => [mixin];
 
   Map<Symbol, MethodMirror> get constructors => mixin.constructors;
 
@@ -688,6 +689,7 @@
   UnmodifiableMapView<Symbol, VariableMirror> _cachedVariables;
   UnmodifiableMapView<Symbol, Mirror> _cachedMembers;
   UnmodifiableListView<InstanceMirror> _cachedMetadata;
+  UnmodifiableListView<ClassMirror> _cachedSuperinterfaces;
 
   // Set as side-effect of accessing JsLibraryMirror.classes.
   JsLibraryMirror _owner;
@@ -868,6 +870,8 @@
         // Filter-out setters corresponding to variables.
         if (result[s(name)] is VariableMirror) continue;
       }
+      // Constructors aren't 'members'.
+      if (method.isConstructor) continue;
       // Use putIfAbsent to filter-out getters corresponding to variables.
       result.putIfAbsent(method.simpleName, () => method);
     }
@@ -1013,8 +1017,22 @@
 
   ClassMirror get originalDeclaration => this;
 
+  List<ClassMirror> get superinterfaces {
+    if (_cachedSuperinterfaces != null) return _cachedSuperinterfaces;
+    List<int> interfaces = JS('List|Null', 'init.interfaces[#]', _mangledName);
+    var result = const [];
+    if (interfaces != null) {
+      ClassMirror lookupType(int i) {
+        var type = JS('=Object', 'init.metadata[#]', i);
+        return typeMirrorFromRuntimeTypeRepresentation(type);
+      }
+      result = interfaces.map(lookupType).toList();
+    }
+    return _cachedSuperinterfaces =
+        new UnmodifiableListView<ClassMirror>(result);
+  }
+
   // TODO(ahe): Implement these.
-  List<ClassMirror> get superinterfaces => throw new UnimplementedError();
   Map<Symbol, TypeVariableMirror> get typeVariables
       => throw new UnimplementedError();
   Map<Symbol, TypeMirror> get typeArguments => throw new UnimplementedError();
diff --git a/sdk/lib/_internal/lib/js_names.dart b/sdk/lib/_internal/lib/js_names.dart
index 4b3e9a9..9eaf777 100644
--- a/sdk/lib/_internal/lib/js_names.dart
+++ b/sdk/lib/_internal/lib/js_names.dart
@@ -6,6 +6,8 @@
 
 import 'dart:_foreign_helper' show JS, JS_GET_NAME;
 
+import 'dart:_js_helper' show JsCache;
+
 /// No-op method that is called to inform the compiler that unmangled named
 /// must be preserved.
 preserveNames() {}
@@ -14,7 +16,7 @@
 /// with some additional information, such as, number of required arguments.
 /// This map is for mangled names used as instance members.
 final Map<String, String> mangledNames =
-    computeMangledNames(JS('', 'init.mangledNames'), false);
+    computeMangledNames(JS('=Object', 'init.mangledNames'), false);
 
 /// A map from "reflective" names to mangled names (the reverse of
 /// [mangledNames]).
@@ -24,7 +26,7 @@
 /// A map from mangled names to "reflective" names (see [mangledNames]).  This
 /// map is for globals, that is, static and top-level members.
 final Map<String, String> mangledGlobalNames =
-    computeMangledNames(JS('', 'init.mangledGlobalNames'), true);
+    computeMangledNames(JS('=Object', 'init.mangledGlobalNames'), true);
 
 /// A map from "reflective" names to mangled names (the reverse of
 /// [mangledGlobalNames]).
@@ -71,3 +73,19 @@
   return result;
 })(#, Object.prototype.hasOwnProperty)''', victim);
 }
+
+/**
+ * Returns the (global) unmangled version of [name].
+ *
+ * Normally, you should use [mangledGlobalNames] directly, but this method
+ * doesn't tell the compiler to preserve names. So this method only returns a
+ * non-null value if some other component has made the compiler preserve names.
+ *
+ * This is used, for example, to return unmangled names from TypeImpl.toString
+ * *if* names are being preserved for other reasons (use of dart:mirrors, for
+ * example).
+ */
+String unmangleGlobalNameIfPreservedAnyways(String name) {
+  var names = JS('=Object', 'init.mangledGlobalNames');
+  return JsCache.fetch(names, name);
+}
diff --git a/sdk/lib/_internal/lib/js_rti.dart b/sdk/lib/_internal/lib/js_rti.dart
index 4441214..f582c1a 100644
--- a/sdk/lib/_internal/lib/js_rti.dart
+++ b/sdk/lib/_internal/lib/js_rti.dart
@@ -46,10 +46,17 @@
 
 class TypeImpl implements Type {
   final String _typeName;
+  String _unmangledName;
 
   TypeImpl(this._typeName);
 
-  String toString() => _typeName;
+  String toString() {
+    if (_unmangledName != null) return _unmangledName;
+    String unmangledName = unmangleGlobalNameIfPreservedAnyways(_typeName);
+    // TODO(ahe): Handle type arguments.
+    if (unmangledName == null) unmangledName = _typeName;
+    return _unmangledName = unmangledName;
+  }
 
   // TODO(ahe): This is a poor hashCode as it collides with its name.
   int get hashCode => _typeName.hashCode;
@@ -59,6 +66,8 @@
   }
 }
 
+getMangledTypeName(TypeImpl type) => type._typeName;
+
 /**
  * Sets the runtime type information on [target]. [typeInfo] is a type
  * representation of type 4 or 5, that is, either a JavaScript array or
@@ -383,7 +392,8 @@
  */
 bool isSupertypeOfNull(var type) {
   // `null` means `dynamic`.
-  return isNull(type) || getConstructorName(type) == JS_OBJECT_CLASS_NAME();
+  return isNull(type) || getConstructorName(type) == JS_OBJECT_CLASS_NAME()
+                      || getConstructorName(type) == JS_NULL_CLASS_NAME();
 }
 
 /**
@@ -677,9 +687,9 @@
   return value is JSArray;
 }
 
-hasField(var object, var name) => JS('bool', r'#[#] != null', object, name);
+hasField(var object, var name) => JS('bool', r'# in #', name, object);
 
-hasNoField(var object, var name) => JS('bool', r'#[#] == null', object, name);
+hasNoField(var object, var name) => !hasField(object, name);
 
 /// Returns [:true:] if [o] is a JavaScript function.
 bool isJsFunction(var o) => JS('bool', r'typeof # == "function"', o);
diff --git a/sdk/lib/_internal/lib/native_helper.dart b/sdk/lib/_internal/lib/native_helper.dart
index 5c311f4..5470611 100644
--- a/sdk/lib/_internal/lib/native_helper.dart
+++ b/sdk/lib/_internal/lib/native_helper.dart
@@ -240,10 +240,17 @@
 /// A JavaScript object mapping tags to `true` or `false`.
 var leafTags;
 
+/// A JavaScript list mapping subclass interceptor constructors to the native
+/// superclass tag.
+var interceptorToTag;
+
 /**
- * Associates tags with an interceptor.  Called from generated code.  The tags
- * are all 'leaf' tags representing classes that have no subclasses with
- * different behaviour.
+ * Associates dispatch tags (JavaScript constructor names e.g. DOM interface
+ * names like HTMLDivElement) with an interceptor.  Called from generated code
+ * during initial isolate definition.
+ *
+ * The tags are all 'leaf' tags representing classes that have no subclasses
+ * with different behaviour.
  *
  * [tags] is a string of `|`-separated tags.
  */
@@ -252,14 +259,45 @@
 }
 
 /**
- * Associates tags with an interceptor.  Called from generated code.  The tags
- * are all non-'leaf' tags, representing classes that have a subclass with
- * different behaviour.
+ * Associates dispatch tags (JavaScript constructor names e.g. DOM interface
+ * names like HTMLElement) with an interceptor.  Called from generated code
+ * during initial isolate definition.
+ *
+ * The tags are all non-'leaf' tags, representing classes that have a subclass
+ * with different behaviour.
  */
 void defineNativeMethodsNonleaf(String tags, interceptorClass) {
   defineNativeMethodsCommon(tags, interceptorClass, false);
 }
 
+/**
+ * Associates dispatch tags (JavaScript constructor names e.g. DOM interface
+ * names like HTMLElement) with an interceptor.  Called from generated code
+ * during initial isolate definition.
+ *
+ * The tags are all non-'leaf' tags, representing classes that have a user
+ * defined subclass that requires additional dispatch.
+ * [subclassInterceptorClasses] is a list of interceptor classes
+ * (i.e. constructors) for the user defined subclasses.
+ */
+void defineNativeMethodsExtended(String tags, interceptorClass,
+                                 subclassInterceptorClasses) {
+  if (interceptorToTag == null) {
+    interceptorToTag = [];
+  }
+  List classes = JS('JSFixedArray', '#', subclassInterceptorClasses);
+  for (int i = 0; i < classes.length; i++) {
+    interceptorToTag.add(classes[i]);
+    // 'tags' is a single tag.
+    interceptorToTag.add(tags);
+  }
+
+  defineNativeMethodsCommon(tags, interceptorClass, false);
+}
+
+// TODO(sra): Try to encode all the calls to defineNativeMethodsXXX as pure
+// data.  The challenge is that the calls remove a lot of redundancy that is
+// expanded by the loops in these methods.
 void defineNativeMethodsCommon(String tags, var interceptorClass, bool isLeaf) {
   var methods = JS('', '#.prototype', interceptorClass);
   if (interceptorsByTag == null) interceptorsByTag = JS('=Object', '{}');
@@ -280,6 +318,14 @@
   // classes over unknown.
 }
 
+String findDispatchTagForInterceptorClass(interceptorClassConstructor) {
+  if (interceptorToTag == null) return null;
+  int i =
+      JS('int', '#.indexOf(#)', interceptorToTag, interceptorClassConstructor);
+  if (i < 0) return null;
+  return JS('', '#[#]', interceptorToTag, i + 1);
+}
+
 lookupInterceptor(var hasOwnPropertyFunction, String tag) {
   var map = interceptorsByTag;
   if (map == null) return null;
@@ -313,11 +359,23 @@
   var isLeaf =
       (leafTags != null) && JS('bool', '(#[#]) === true', leafTags, tag);
   if (isLeaf) {
-    var fieldName = JS_IS_INDEXABLE_FIELD_NAME();
-    bool indexability = JS('bool', r'!!#[#]', interceptor, fieldName);
-    return makeDispatchRecord(interceptor, false, null, indexability);
+    return makeLeafDispatchRecord(interceptor);
   } else {
     var proto = JS('', 'Object.getPrototypeOf(#)', obj);
     return makeDispatchRecord(interceptor, proto, null, null);
   }
 }
+
+makeLeafDispatchRecord(interceptor) {
+  var fieldName = JS_IS_INDEXABLE_FIELD_NAME();
+  bool indexability = JS('bool', r'!!#[#]', interceptor, fieldName);
+  return makeDispatchRecord(interceptor, false, null, indexability);
+}
+
+/**
+ * [proto] should have no shadowing prototypes that are not also assigned a
+ * dispatch rescord.
+ */
+setNativeSubclassDispatchRecord(proto, interceptor) {
+  setDispatchProperty(proto, makeLeafDispatchRecord(interceptor));
+}
diff --git a/sdk/lib/_internal/pub/bin/pub.dart b/sdk/lib/_internal/pub/bin/pub.dart
index f8491d1..1a3e16c 100644
--- a/sdk/lib/_internal/pub/bin/pub.dart
+++ b/sdk/lib/_internal/pub/bin/pub.dart
@@ -151,6 +151,10 @@
   for (var command in PubCommand.commands.keys) {
     // Hide aliases.
     if (PubCommand.commands[command].aliases.indexOf(command) >= 0) continue;
+
+    // Hide undocumented commands.
+    if (PubCommand.commands[command].hidden) continue;
+
     length = math.max(length, command.length);
     names.add(command);
   }
diff --git a/sdk/lib/_internal/pub/lib/src/command.dart b/sdk/lib/_internal/pub/lib/src/command.dart
index 97ad11ce..5c72d58 100644
--- a/sdk/lib/_internal/pub/lib/src/command.dart
+++ b/sdk/lib/_internal/pub/lib/src/command.dart
@@ -15,6 +15,7 @@
 import 'command/help.dart';
 import 'command/install.dart';
 import 'command/lish.dart';
+import 'command/list_package_dirs.dart';
 import 'command/serve.dart';
 import 'command/update.dart';
 import 'command/uploader.dart';
@@ -42,6 +43,10 @@
   /// A one-line description of this command.
   String get description;
 
+  /// If the command is undocumented and should not appear in command listings,
+  /// this will be `true`.
+  bool get hidden => false;
+
   /// How to invoke this command (e.g. `"pub install [package]"`).
   String get usage;
 
@@ -193,6 +198,7 @@
     'deploy': new DeployCommand(),
     'help': new HelpCommand(),
     'install': new InstallCommand(),
+    'list-package-dirs': new ListPackageDirsCommand(),
     'publish': new LishCommand(),
     'serve': new ServeCommand(),
     'update': new UpdateCommand(),
diff --git a/sdk/lib/_internal/pub/lib/src/command/cache.dart b/sdk/lib/_internal/pub/lib/src/command/cache.dart
index b33a045..24c5124 100644
--- a/sdk/lib/_internal/pub/lib/src/command/cache.dart
+++ b/sdk/lib/_internal/pub/lib/src/command/cache.dart
@@ -16,6 +16,7 @@
 class CacheCommand extends PubCommand {
   String get description => "Inspect the system cache.";
   String get usage => 'pub cache list';
+  bool get hidden => true;
   bool get requiresEntrypoint => false;
 
   Future onRun() {
diff --git a/sdk/lib/_internal/pub/lib/src/command/list_package_dirs.dart b/sdk/lib/_internal/pub/lib/src/command/list_package_dirs.dart
new file mode 100644
index 0000000..ea5b140
--- /dev/null
+++ b/sdk/lib/_internal/pub/lib/src/command/list_package_dirs.dart
@@ -0,0 +1,48 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library pub.command.list_package_dirs;
+
+import 'dart:async';
+import 'dart:io';
+import 'dart:json' as json;
+
+import '../command.dart';
+import '../exit_codes.dart' as exit_codes;
+import '../log.dart' as log;
+
+/// Handles the `list-package-dirs` pub command.
+class ListPackageDirsCommand extends PubCommand {
+  String get description => "Print local paths to dependencies.";
+  String get usage => "pub list-package-dirs";
+  bool get hidden => true;
+
+  ListPackageDirsCommand() {
+    commandParser.addOption("format",
+        help: "How output should be displayed.",
+        allowed: ["json"]);
+  }
+
+  Future onRun() {
+    if (!entrypoint.lockFileExists) {
+      log.error(json.stringify(
+          'Package "myapp" has no lockfile. Please run "pub install" first.'));
+      exit(exit_codes.NO_INPUT);
+    }
+
+    var output = {};
+    var futures = [];
+    entrypoint.loadLockFile().packages.forEach((name, package) {
+      var source = entrypoint.cache.sources[package.source];
+      futures.add(source.getDirectory(package).then((packageDir) {
+        output[name] = packageDir;
+      }));
+    });
+
+    return Future.wait(futures).then((_) {
+      log.message(json.stringify(output));
+    });
+  }
+}
+
diff --git a/sdk/lib/_internal/pub/lib/src/command/serve.dart b/sdk/lib/_internal/pub/lib/src/command/serve.dart
index 69d92a1..ad891dc 100644
--- a/sdk/lib/_internal/pub/lib/src/command/serve.dart
+++ b/sdk/lib/_internal/pub/lib/src/command/serve.dart
@@ -9,10 +9,12 @@
 
 import 'package:barback/barback.dart';
 import 'package:path/path.dart' as path;
+import 'package:watcher/watcher.dart';
 
 import '../command.dart';
 import '../entrypoint.dart';
 import '../exit_codes.dart' as exit_codes;
+import '../io.dart';
 import '../log.dart' as log;
 import '../pub_package_provider.dart';
 import '../utils.dart';
@@ -26,18 +28,58 @@
   String get description => "Run a local web development server.";
   String get usage => 'pub serve';
 
+  PubPackageProvider _provider;
+  Barback _barback;
+
+  /// The completer for the top-level future returned by the command.
+  ///
+  /// Only used to keep pub running (by not completing) and to pipe fatal
+  /// errors to pub's top-level error-handling machinery.
+  final _commandCompleter = new Completer();
+
   ServeCommand() {
     commandParser.addOption('port', defaultsTo: '8080',
         help: 'The port to listen on.');
   }
 
   Future onRun() {
-    // The completer for the top-level future returned by the command. Only
-    // used to keep pub running (by not completing) and to pipe fatal errors
-    // to pub's top-level error-handling machinery.
-    var completer = new Completer();
+    var port = parsePort();
 
-    return new Future.value().then((_) {
+    return ensureLockFileIsUpToDate().then((_) {
+      return PubPackageProvider.create(entrypoint);
+    }).then((provider) {
+      _provider = provider;
+
+      initBarback();
+
+      HttpServer.bind("localhost", port).then((server) {
+        watchSources();
+
+        log.message("Serving ${entrypoint.root.name} "
+            "on http://localhost:${server.port}");
+
+        server.listen(handleRequest);
+      });
+
+      return _commandCompleter.future;
+    });
+  }
+
+  /// Parses the `--port` command-line argument and exits if it isn't valid.
+  int parsePort() {
+    try {
+      return int.parse(commandOptions['port']);
+    } on FormatException catch(_) {
+      log.error('Could not parse port "${commandOptions['port']}"');
+      this.printUsage();
+      exit(exit_codes.USAGE);
+    }
+  }
+
+  /// Installs dependencies is the lockfile is out of date with respect to the
+  /// pubspec.
+  Future ensureLockFileIsUpToDate() {
+    return new Future.sync(() {
       // The server relies on an up-to-date lockfile, so install first if
       // needed.
       if (!entrypoint.isLockFileUpToDate()) {
@@ -46,91 +88,50 @@
           log.message("Dependencies installed!");
         });
       }
-    }).then((_) {
-      return PubPackageProvider.create(entrypoint);
-    }).then((provider) {
-      var port;
-      try {
-        port = int.parse(commandOptions['port']);
-      } on FormatException catch(_) {
-        log.error('Could not parse port "${commandOptions['port']}"');
-        this.printUsage();
-        exit(exit_codes.USAGE);
+    });
+  }
+
+  void handleRequest(HttpRequest request) {
+    var id = getIdFromUri(request.uri);
+    if (id == null) {
+      notFound(request, "Path ${request.uri.path} is not valid.");
+      return;
+    }
+
+    _barback.getAssetById(id).then((asset) {
+      return validateStream(asset.read()).then((stream) {
+        log.message(
+            "$_green${request.method}$_none ${request.uri} -> $asset");
+        // TODO(rnystrom): Set content-type based on asset type.
+        return request.response.addStream(stream).then((_) {
+          request.response.close();
+        });
+      }).catchError((error) {
+        log.error("$_red${request.method}$_none "
+            "${request.uri} -> $error");
+
+        // If we couldn't read the asset, handle the error gracefully.
+        if (error is FileException) {
+          // Assume this means the asset was a file-backed source asset
+          // and we couldn't read it, so treat it like a missing asset.
+          notFound(request, error);
+          return;
+        }
+
+        // Otherwise, it's some internal error.
+        request.response.statusCode = 500;
+        request.response.reasonPhrase = "Internal Error";
+        request.response.write(error);
+        request.response.close();
+      });
+    }).catchError((error) {
+      log.error("$_red${request.method}$_none ${request.uri} -> $error");
+      if (error is! AssetNotFoundException) {
+        _commandCompleter.completeError(error);
+        return;
       }
 
-      var barback = new Barback(provider);
-
-      barback.results.listen((result) {
-        if (result.succeeded) {
-          // TODO(rnystrom): Report using growl/inotify-send where available.
-          log.message("Build completed ${_green}successfully$_none");
-        } else {
-          log.message("Build completed with "
-              "${_red}${result.errors.length}$_none errors.");
-        }
-      });
-
-      barback.errors.listen((error) {
-        log.error("${_red}Build error:\n$error$_none");
-      });
-
-      // TODO(rnystrom): Watch file system and update sources again when they
-      // are added or modified.
-
-      HttpServer.bind("localhost", port).then((server) {
-        // Add all of the visible files.
-        for (var package in provider.packages) {
-          barback.updateSources(provider.listAssets(package));
-        }
-
-        log.message("Serving ${entrypoint.root.name} "
-            "on http://localhost:${server.port}");
-
-        server.listen((request) {
-          var id = getIdFromUri(request.uri);
-          if (id == null) {
-            return notFound(request, "Path ${request.uri.path} is not valid.");
-          }
-
-          barback.getAssetById(id).then((asset) {
-            return validateStream(asset.read()).then((stream) {
-              log.message(
-                  "$_green${request.method}$_none ${request.uri} -> $asset");
-              // TODO(rnystrom): Set content-type based on asset type.
-              return request.response.addStream(stream).then((_) {
-                request.response.close();
-              });
-            }).catchError((error) {
-              log.error("$_red${request.method}$_none "
-                  "${request.uri} -> $error");
-
-              // If we couldn't read the asset, handle the error gracefully.
-              if (error is FileException) {
-                // Assume this means the asset was a file-backed source asset
-                // and we couldn't read it, so treat it like a missing asset.
-                notFound(request, error);
-                return;
-              }
-
-              // Otherwise, it's some internal error.
-              request.response.statusCode = 500;
-              request.response.reasonPhrase = "Internal Error";
-              request.response.write(error);
-              request.response.close();
-            });
-          }).catchError((error) {
-            log.error("$_red${request.method}$_none ${request.uri} -> $error");
-            if (error is! AssetNotFoundException) {
-              completer.completeError(error);
-              return;
-            }
-
-            notFound(request, error);
-          });
-        });
-      });
-
-      return completer.future;
+      notFound(request, error);
     });
   }
 
@@ -186,4 +187,97 @@
     return new AssetId(entrypoint.root.name,
         path.url.join("web", path.url.joinAll(parts)));
   }
+
+  /// Creates the [Barback] instance and listens to its outputs.
+  void initBarback() {
+    assert(_provider != null);
+
+    _barback = new Barback(_provider);
+
+    _barback.results.listen((result) {
+      if (result.succeeded) {
+        // TODO(rnystrom): Report using growl/inotify-send where available.
+        log.message("Build completed ${_green}successfully$_none");
+      } else {
+        log.message("Build completed with "
+            "${_red}${result.errors.length}$_none errors.");
+      }
+    });
+
+    _barback.errors.listen((error) {
+      log.error("${_red}Build error:\n$error$_none");
+    });
+  }
+
+  /// Adds all of the source assets in the provided packages to barback and
+  /// then watches the public directories for changes.
+  void watchSources() {
+    assert(_provider != null);
+    assert(_barback != null);
+
+    for (var package in _provider.packages) {
+      // Add the initial sources.
+      _barback.updateSources(listAssets(package));
+
+      // Watch the visible package directories for changes.
+      var packageDir = _provider.getPackageDir(package);
+
+      for (var name in getPublicDirectories(package)) {
+        var subdirectory = path.join(packageDir, name);
+        var watcher = new DirectoryWatcher(subdirectory);
+        watcher.events.listen((event) {
+          var id = pathToAssetId(package, packageDir, event.path);
+          if (event.type == ChangeType.REMOVE) {
+            _barback.removeSources([id]);
+          } else {
+            _barback.updateSources([id]);
+          }
+        });
+      }
+    }
+  }
+
+  /// Lists all of the visible files in [package].
+  ///
+  /// This is the recursive contents of the "asset" and "lib" directories (if
+  /// present). If [package] is the entrypoint package, it also includes the
+  /// contents of "web".
+  List<AssetId> listAssets(String package) {
+    var files = <AssetId>[];
+
+    for (var dirPath in getPublicDirectories(package)) {
+      var packageDir = _provider.getPackageDir(package);
+      var dir = path.join(packageDir, dirPath);
+      if (!dirExists(dir)) continue;
+      for (var entry in listDir(dir, recursive: true)) {
+        // Ignore "packages" symlinks if there.
+        if (path.split(entry).contains("packages")) continue;
+
+        // Skip directories.
+        if (!fileExists(entry)) continue;
+
+        files.add(pathToAssetId(package, packageDir, entry));
+      }
+    }
+
+    return files;
+  }
+
+  /// Gets the names of the top-level directories in [package] whose contents
+  /// should be provided as source assets.
+  Iterable<String> getPublicDirectories(String package) {
+    var directories = ["asset", "lib"];
+    if (package == entrypoint.root.name) directories.add("web");
+    return directories;
+  }
+
+  /// Converts a local file path to an [AssetId].
+  AssetId pathToAssetId(String package, String packageDir, String filePath) {
+    var relative = path.relative(filePath, from: packageDir);
+
+    // AssetId paths use "/" on all platforms.
+    relative = path.toUri(relative).path;
+
+    return new AssetId(package, relative);
+  }
 }
diff --git a/sdk/lib/_internal/pub/lib/src/entrypoint.dart b/sdk/lib/_internal/pub/lib/src/entrypoint.dart
index 30f42f7..9ec81ec 100644
--- a/sdk/lib/_internal/pub/lib/src/entrypoint.dart
+++ b/sdk/lib/_internal/pub/lib/src/entrypoint.dart
@@ -53,6 +53,9 @@
   /// The path to the entrypoint's "packages" directory.
   String get packagesDir => path.join(root.dir, 'packages');
 
+  /// `true` if the entrypoint package currently has a lock file.
+  bool get lockFileExists => entryExists(_lockFilePath);
+
   /// Ensures that the package identified by [id] is installed to the directory.
   /// Returns the resolved [PackageId].
   ///
@@ -146,9 +149,8 @@
   /// Loads the list of concrete package versions from the `pubspec.lock`, if it
   /// exists. If it doesn't, this completes to an empty [LockFile].
   LockFile loadLockFile() {
-    var lockFilePath = path.join(root.dir, 'pubspec.lock');
-    if (!entryExists(lockFilePath)) return new LockFile.empty();
-    return new LockFile.load(lockFilePath, cache.sources);
+    if (!lockFileExists) return new LockFile.empty();
+    return new LockFile.load(_lockFilePath, cache.sources);
   }
 
   /// Determines whether or not the lockfile is out of date with respect to the
@@ -181,6 +183,9 @@
     return true;
   }
 
+  /// The path to the entrypoint package's lockfile.
+  String get _lockFilePath => path.join(root.dir, 'pubspec.lock');
+
   /// Saves a list of concrete package versions to the `pubspec.lock` file.
   void _saveLockFile(List<PackageId> packageIds) {
     var lockFile = new LockFile.empty();
diff --git a/sdk/lib/_internal/pub/lib/src/pub_package_provider.dart b/sdk/lib/_internal/pub/lib/src/pub_package_provider.dart
index b1c2821..0c43571 100644
--- a/sdk/lib/_internal/pub/lib/src/pub_package_provider.dart
+++ b/sdk/lib/_internal/pub/lib/src/pub_package_provider.dart
@@ -10,14 +10,10 @@
 import 'package:path/path.dart' as path;
 
 import 'entrypoint.dart';
-import 'io.dart';
 
 /// An implementation of barback's [PackageProvider] interface so that barback
 /// can assets within pub packages.
 class PubPackageProvider implements PackageProvider {
-  /// The [Entrypoint] package being served.
-  final Entrypoint _entrypoint;
-
   /// Maps the names of all of the packages in [_entrypoint]'s transitive
   /// dependency graph to the local path of the directory for that package.
   final Map<String, String> _packageDirs;
@@ -30,7 +26,6 @@
 
     // Cache package directories up front so we can have synchronous access
     // to them.
-    // TODO(rnystrom): Handle missing or out of date lockfile.
     var futures = [];
     entrypoint.loadLockFile().packages.forEach((name, package) {
       var source = entrypoint.cache.sources[package.source];
@@ -40,51 +35,16 @@
     });
 
     return Future.wait(futures).then((_) {
-      return new PubPackageProvider._(entrypoint, packageDirs);
+      return new PubPackageProvider._(packageDirs);
     });
   }
 
-  PubPackageProvider._(this._entrypoint, this._packageDirs);
+  PubPackageProvider._(this._packageDirs);
 
   Iterable<String> get packages => _packageDirs.keys;
 
-  /// Lists all of the visible files in [package].
-  ///
-  /// This is the recursive contents of the "asset" and "lib" directories (if
-  /// present). If [package] is the entrypoint package, it also includes the
-  /// contents of "web".
-  List<AssetId> listAssets(String package) {
-    var files = <AssetId>[];
-
-    addFiles(String dirPath) {
-      var packageDir = _packageDirs[package];
-      var dir = path.join(packageDir, dirPath);
-      if (!dirExists(dir)) return;
-      for (var entry in listDir(dir, recursive: true)) {
-        // Ignore "packages" symlinks if there.
-        if (path.split(entry).contains("packages")) continue;
-
-        // Skip directories.
-        if (!fileExists(entry)) continue;
-
-        // AssetId paths use "/" on all platforms.
-        var relative = path.relative(entry, from: packageDir);
-        relative = path.toUri(relative).path;
-        files.add(new AssetId(package, relative));
-      }
-    }
-
-    // Expose the "asset" and "lib" directories.
-    addFiles("asset");
-    addFiles("lib");
-
-    // The entrypoint's "web" directory is also visible.
-    if (package == _entrypoint.root.name) {
-      addFiles("web");
-    }
-
-    return files;
-  }
+  /// Gets the root directory of [package].
+  String getPackageDir(String package) => _packageDirs[package];
 
   // TODO(rnystrom): Actually support transformers.
   Iterable<Iterable<Transformer>> getTransformers(String package) => [];
diff --git a/sdk/lib/_internal/pub/test/list_package_dirs/ignores_updated_pubspec_test.dart b/sdk/lib/_internal/pub/test/list_package_dirs/ignores_updated_pubspec_test.dart
new file mode 100644
index 0000000..bc13c27
--- /dev/null
+++ b/sdk/lib/_internal/pub/test/list_package_dirs/ignores_updated_pubspec_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS d.file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE d.file.
+
+import 'package:path/path.dart' as path;
+
+import '../../lib/src/exit_codes.dart' as exit_codes;
+
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+
+main() {
+  initConfig();
+  integration("uses what's in the lockfile regardless of the pubspec", () {
+    d.dir("foo", [
+      d.libDir("foo"),
+      d.libPubspec("foo", "1.0.0")
+    ]).create();
+
+    d.dir(appPath, [
+      d.appPubspec({
+        "foo": {"path": path.join(sandboxDir, "foo")}
+      })
+    ]).create();
+
+    pubInstall();
+
+    // Add a dependency on "bar" and remove "foo", but don't run "pub install".
+    d.dir(appPath, [
+      d.appPubspec({
+        "bar": "any"
+      })
+    ]).create();
+
+    schedulePub(args: ["list-package-dirs", "--format=json"],
+        outputJson: {
+          "foo": path.join(sandboxDir, "foo")
+        });
+  });
+}
\ No newline at end of file
diff --git a/sdk/lib/_internal/pub/test/list_package_dirs/includes_dev_dependencies_test.dart b/sdk/lib/_internal/pub/test/list_package_dirs/includes_dev_dependencies_test.dart
new file mode 100644
index 0000000..60c7786
--- /dev/null
+++ b/sdk/lib/_internal/pub/test/list_package_dirs/includes_dev_dependencies_test.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS d.file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE d.file.
+
+import 'package:path/path.dart' as path;
+
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+
+main() {
+  initConfig();
+  integration('includes dev dependencies in the results', () {
+    d.dir("foo", [
+      d.libDir("foo"),
+      d.libPubspec("foo", "1.0.0")
+    ]).create();
+
+    d.dir(appPath, [
+      d.pubspec({
+        "name": "myapp",
+        "dev_dependencies": {
+          "foo": {"path": path.join(sandboxDir, "foo")}
+        }
+      })
+    ]).create();
+
+    pubInstall();
+
+    schedulePub(args: ["list-package-dirs", "--format=json"],
+        outputJson: {
+          "foo": path.join(sandboxDir, "foo")
+        });
+  });
+}
\ No newline at end of file
diff --git a/sdk/lib/_internal/pub/test/list_package_dirs/lists_dependency_directories_test.dart b/sdk/lib/_internal/pub/test/list_package_dirs/lists_dependency_directories_test.dart
new file mode 100644
index 0000000..b3ac39b
--- /dev/null
+++ b/sdk/lib/_internal/pub/test/list_package_dirs/lists_dependency_directories_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS d.file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE d.file.
+
+import 'package:path/path.dart' as path;
+
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+
+main() {
+  initConfig();
+  integration('prints the local paths to all packages in the lockfile', () {
+    servePackages([packageMap("bar", "1.0.0")]);
+
+    d.dir("foo", [
+      d.libDir("foo"),
+      d.libPubspec("foo", "1.0.0")
+    ]).create();
+
+    d.dir(appPath, [
+      d.appPubspec({
+        "foo": {"path": path.join(sandboxDir, "foo")},
+        "bar": "any"
+      })
+    ]).create();
+
+    pubInstall();
+
+    schedulePub(args: ["list-package-dirs", "--format=json"],
+        outputJson: {
+          "foo": path.join(sandboxDir, "foo"),
+          "bar": port.then((p) => path.join(sandboxDir, cachePath, "hosted",
+              "localhost%58$p", "bar-1.0.0"))
+        });
+  });
+}
\ No newline at end of file
diff --git a/sdk/lib/_internal/pub/test/list_package_dirs/no_lockfile_test.dart b/sdk/lib/_internal/pub/test/list_package_dirs/no_lockfile_test.dart
new file mode 100644
index 0000000..554edd7
--- /dev/null
+++ b/sdk/lib/_internal/pub/test/list_package_dirs/no_lockfile_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS d.file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE d.file.
+
+import '../../lib/src/exit_codes.dart' as exit_codes;
+
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+
+main() {
+  initConfig();
+  integration('with no lockfile, exits with error', () {
+    d.dir(appPath, [
+      d.appPubspec()
+    ]).create();
+
+    schedulePub(args: ["list-package-dirs", "--format=json"],
+        error: '''
+        "Package \\"myapp\\" has no lockfile. Please run \\"pub install\\" first."
+        ''',
+        exitCode: exit_codes.NO_INPUT);
+  });
+}
\ No newline at end of file
diff --git a/sdk/lib/_internal/pub/test/pub_cache_test.dart b/sdk/lib/_internal/pub/test/pub_cache_test.dart
index 39bb79b..91bc4a0 100644
--- a/sdk/lib/_internal/pub/test/pub_cache_test.dart
+++ b/sdk/lib/_internal/pub/test/pub_cache_test.dart
@@ -4,12 +4,19 @@
 
 library pub_cache_test;
 
+import 'package:path/path.dart' as path;
+
 import 'descriptor.dart' as d;
 import 'test_pub.dart';
 
 main() {
   initConfig();
 
+  hostedDir(package) {
+    return path.join(sandboxDir, cachePath, "hosted",
+        "pub.dartlang.org", package);
+  }
+
   integration('running pub cache displays error message', () {
     schedulePub(args: ['cache'],
         output: '''
@@ -47,7 +54,7 @@
       ])
     ]).create();
 
-    schedulePub(args: ['cache', 'list'], output: '{"packages":{}}');
+    schedulePub(args: ['cache', 'list'], outputJson: {"packages":{}});
   });
 
   integration('running pub cache list', () {
@@ -66,10 +73,12 @@
       ])
     ]).create();
 
-    schedulePub(args: ['cache', 'list'], output:
-      new RegExp(r'\{"packages":\{"bar":\{"2\.0\.0":\{"location":'
-          r'"[^"]+bar-2\.0\.0"\}},"foo":\{"1\.2\.3":\{"location":'
-          r'"[^"]+foo-1\.2\.3"\}\}\}\}$'));
+    schedulePub(args: ['cache', 'list'], outputJson: {
+      "packages": {
+        "bar": {"2.0.0": {"location": hostedDir('bar-2.0.0')}},
+        "foo": {"1.2.3": {"location": hostedDir('foo-1.2.3')}}
+      }
+    });
   });
 
   integration('includes packages containing deps with bad sources', () {
@@ -85,8 +94,10 @@
       ])
     ]).create();
 
-    schedulePub(args: ['cache', 'list'], output:
-      new RegExp(r'\{"packages":\{"foo":\{"1\.2\.3":\{"location":'
-          r'"[^"]+foo-1\.2\.3"\}\}\}\}$'));
+    schedulePub(args: ['cache', 'list'], outputJson: {
+      "packages": {
+        "foo": {"1.2.3": {"location": hostedDir('foo-1.2.3')}}
+      }
+    });
   });
 }
\ No newline at end of file
diff --git a/sdk/lib/_internal/pub/test/pub_test.dart b/sdk/lib/_internal/pub/test/pub_test.dart
index ce4a4c5..f9b5c57 100644
--- a/sdk/lib/_internal/pub/test/pub_test.dart
+++ b/sdk/lib/_internal/pub/test/pub_test.dart
@@ -28,7 +28,6 @@
     -v, --verbose         Shortcut for "--verbosity=all".
 
     Available commands:
-      cache      Inspect the system cache.
       deploy     Copy and compile all Dart entrypoints in the 'web' directory.
       help       Display help information for Pub.
       install    Install the current package's dependencies.
diff --git a/sdk/lib/_internal/pub/test/serve/missing_asset_test.dart b/sdk/lib/_internal/pub/test/serve/missing_asset_test.dart
index 1f69b6c..39efa26 100644
--- a/sdk/lib/_internal/pub/test/serve/missing_asset_test.dart
+++ b/sdk/lib/_internal/pub/test/serve/missing_asset_test.dart
@@ -4,8 +4,6 @@
 
 library pub_tests;
 
-import 'dart:io';
-
 import '../descriptor.dart' as d;
 import '../test_pub.dart';
 import 'utils.dart';
diff --git a/sdk/lib/_internal/pub/test/serve/serve_from_dependency_asset_test.dart b/sdk/lib/_internal/pub/test/serve/serve_from_dependency_asset_test.dart
index ff25e6a..0d41296 100644
--- a/sdk/lib/_internal/pub/test/serve/serve_from_dependency_asset_test.dart
+++ b/sdk/lib/_internal/pub/test/serve/serve_from_dependency_asset_test.dart
@@ -27,8 +27,7 @@
       })
     ]).create();
 
-    pubInstall();
-    startPubServe();
+    startPubServe(shouldInstallFirst: true);
     requestShouldSucceed("assets/foo/foo.txt", "foo");
     requestShouldSucceed("assets/foo/sub/bar.txt", "bar");
 
diff --git a/sdk/lib/_internal/pub/test/serve/serve_from_dependency_lib_test.dart b/sdk/lib/_internal/pub/test/serve/serve_from_dependency_lib_test.dart
index 7067525..ae7db1b 100644
--- a/sdk/lib/_internal/pub/test/serve/serve_from_dependency_lib_test.dart
+++ b/sdk/lib/_internal/pub/test/serve/serve_from_dependency_lib_test.dart
@@ -27,8 +27,7 @@
       })
     ]).create();
 
-    pubInstall();
-    startPubServe();
+    startPubServe(shouldInstallFirst: true);
     requestShouldSucceed("packages/foo/lib.dart", "foo() => 'foo';");
     requestShouldSucceed("packages/foo/sub/lib.dart", "bar() => 'bar';");
 
diff --git a/sdk/lib/_internal/pub/test/serve/utils.dart b/sdk/lib/_internal/pub/test/serve/utils.dart
index 3a08392..128917a 100644
--- a/sdk/lib/_internal/pub/test/serve/utils.dart
+++ b/sdk/lib/_internal/pub/test/serve/utils.dart
@@ -67,4 +67,22 @@
       expect(response.statusCode, equals(404));
     });
   }, "request $urlPath");
-}
\ No newline at end of file
+}
+
+/// Reads lines from pub serve's stdout until it prints the build success
+/// message.
+///
+/// The schedule will not proceed until the output is found. If not found, it
+/// will eventually time out.
+void waitForBuildSuccess() {
+  nextLine() {
+    return _pubServer.nextLine().then((line) {
+      if (line.contains("successfully")) return;
+
+      // This line wasn't it, so ignore it and keep trying.
+      return nextLine();
+    });
+  }
+
+  schedule(nextLine);
+}
diff --git a/sdk/lib/_internal/pub/test/serve/watch_added_file_test.dart b/sdk/lib/_internal/pub/test/serve/watch_added_file_test.dart
new file mode 100644
index 0000000..75a1718
--- /dev/null
+++ b/sdk/lib/_internal/pub/test/serve/watch_added_file_test.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS d.file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library pub_tests;
+
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+
+main() {
+  initConfig();
+  integration("picks up files added after serving started", () {
+    d.dir(appPath, [
+      d.appPubspec(),
+      d.dir("web", [
+        d.file("index.html", "body")
+      ])
+    ]).create();
+
+    startPubServe();
+    waitForBuildSuccess();
+    requestShouldSucceed("index.html", "body");
+
+    d.dir(appPath, [
+      d.dir("web", [
+        d.file("other.html", "added")
+      ])
+    ]).create();
+
+    waitForBuildSuccess();
+    requestShouldSucceed("other.html", "added");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub/test/serve/watch_modified_file_test.dart b/sdk/lib/_internal/pub/test/serve/watch_modified_file_test.dart
new file mode 100644
index 0000000..6cf610d
--- /dev/null
+++ b/sdk/lib/_internal/pub/test/serve/watch_modified_file_test.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS d.file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library pub_tests;
+
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+
+main() {
+  initConfig();
+  integration("watches modifications to files", () {
+    d.dir(appPath, [
+      d.appPubspec(),
+      d.dir("web", [
+        d.file("index.html", "before")
+      ])
+    ]).create();
+
+    startPubServe();
+    requestShouldSucceed("index.html", "before");
+
+    d.dir(appPath, [
+      d.dir("web", [
+        d.file("index.html", "after")
+      ])
+    ]).create();
+
+    waitForBuildSuccess();
+    requestShouldSucceed("index.html", "after");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub/test/serve/watch_removed_file_test.dart b/sdk/lib/_internal/pub/test/serve/watch_removed_file_test.dart
new file mode 100644
index 0000000..46fdc4c
--- /dev/null
+++ b/sdk/lib/_internal/pub/test/serve/watch_removed_file_test.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS d.file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library pub_tests;
+
+import 'package:path/path.dart' as path;
+import 'package:scheduled_test/scheduled_test.dart';
+
+import '../../lib/src/io.dart';
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+import 'utils.dart';
+
+main() {
+  initConfig();
+  integration("stop serving a file that is removed", () {
+    d.dir(appPath, [
+      d.appPubspec(),
+      d.dir("web", [
+        d.file("index.html", "body")
+      ])
+    ]).create();
+
+    startPubServe();
+    requestShouldSucceed("index.html", "body");
+
+    schedule(() => deleteEntry(
+        path.join(sandboxDir, appPath, "web", "index.html")));
+
+    waitForBuildSuccess();
+    requestShould404("index.html");
+    endPubServe();
+  });
+}
diff --git a/sdk/lib/_internal/pub/test/test_pub.dart b/sdk/lib/_internal/pub/test/test_pub.dart
index b018be1..f1358a9 100644
--- a/sdk/lib/_internal/pub/test/test_pub.dart
+++ b/sdk/lib/_internal/pub/test/test_pub.dart
@@ -366,20 +366,40 @@
       'symlinking $target to $symlink');
 }
 
-/// Schedules a call to the Pub command-line utility. Runs Pub with [args] and
-/// validates that its results match [output], [error], and [exitCode].
-void schedulePub({List args, Pattern output, Pattern error,
+/// Schedules a call to the Pub command-line utility.
+///
+/// Runs Pub with [args] and validates that its results match [output] (or
+/// [outputJson]), [error], and [exitCode]. If [outputJson] is given, validates
+/// that pub outputs stringified JSON matching that object.
+void schedulePub({List args, Pattern output, Pattern error, outputJson,
     Future<Uri> tokenEndpoint, int exitCode: 0}) {
+  // Cannot pass both output and outputJson.
+  assert(output == null || outputJson == null);
+
   var pub = startPub(args: args, tokenEndpoint: tokenEndpoint);
   pub.shouldExit(exitCode);
 
+  var failures = [];
+  var stderr;
+
   expect(Future.wait([
     pub.remainingStdout(),
     pub.remainingStderr()
   ]).then((results) {
-    var failures = [];
-    _validateOutput(failures, 'stdout', output, results[0].split('\n'));
-    _validateOutput(failures, 'stderr', error, results[1].split('\n'));
+    stderr = results[1];
+
+    if (outputJson == null) {
+      _validateOutput(failures, 'stdout', output, results[0]);
+      return;
+    }
+
+    // Allow the expected JSON to contain futures.
+    return awaitObject(outputJson).then((resolved) {
+      _validateOutputJson(failures, 'stdout', resolved, results[0]);
+    });
+  }).then((_) {
+    _validateOutput(failures, 'stderr', error, stderr);
+
     if (!failures.isEmpty) throw new TestFailure(failures.join('\n'));
   }), completes);
 }
@@ -647,13 +667,14 @@
 /// report the offending difference in a nice way. For other [Pattern]s, just
 /// reports whether the output contained the pattern.
 void _validateOutput(List<String> failures, String pipe, Pattern expected,
-                     List<String> actual) {
+                     String actual) {
   if (expected == null) return;
 
+  var actualLines = actual.split("\n");
   if (expected is RegExp) {
-    _validateOutputRegex(failures, pipe, expected, actual);
+    _validateOutputRegex(failures, pipe, expected, actualLines);
   } else {
-    _validateOutputString(failures, pipe, expected, actual);
+    _validateOutputString(failures, pipe, expected, actualLines);
   }
 }
 
@@ -719,6 +740,22 @@
   }
 }
 
+void _validateOutputJson(List<String> failures, String pipe,
+                         expected, String actualText) {
+  var actual;
+  try {
+    actual = json.parse(actualText);
+  } on FormatException catch(error) {
+    failures.add('Expected $pipe JSON:');
+    failures.add(expected);
+    failures.add('Got invalid JSON:');
+    failures.add(actualText);
+  }
+
+  // Do a deep comparison of the JSON objects.
+  expect(actual, equals(expected));
+}
+
 /// A function that creates a [Validator] subclass.
 typedef Validator ValidatorCreator(Entrypoint entrypoint);
 
diff --git a/sdk/lib/async/async.dart b/sdk/lib/async/async.dart
index 5f843b2..76c2b42 100644
--- a/sdk/lib/async/async.dart
+++ b/sdk/lib/async/async.dart
@@ -2,6 +2,19 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+/**
+ * Support for asynchronous programming,
+ * with classes such as Future and Stream.
+ *
+ * For an introduction to using dart:async, see the
+ * [dart:async section of the language tour]
+ * (https://www.dartlang.org/docs/dart-up-and-running/contents/ch03.html#ch03-asynchronous-programming).
+ * Also see
+ * [articles](https://www.dartlang.org/articles/)
+ * such as
+ * [Using Future Based APIs]
+ * (https://www.dartlang.org/articles/using-future-based-apis/).
+ */
 library dart.async;
 
 import "dart:collection";
diff --git a/sdk/lib/async/stream_impl.dart b/sdk/lib/async/stream_impl.dart
index c8fbe70..7f26c4f 100644
--- a/sdk/lib/async/stream_impl.dart
+++ b/sdk/lib/async/stream_impl.dart
@@ -548,7 +548,7 @@
 }
 
 /** A delayed data event. */
-class _DelayedData<T> extends _DelayedEvent{
+class _DelayedData<T> extends _DelayedEvent {
   final T value;
   _DelayedData(this.value);
   void perform(_EventDispatch<T> dispatch) {
diff --git a/sdk/lib/chrome/dart2js/chrome_dart2js.dart b/sdk/lib/chrome/dart2js/chrome_dart2js.dart
index 0bca602..77338a8 100644
--- a/sdk/lib/chrome/dart2js/chrome_dart2js.dart
+++ b/sdk/lib/chrome/dart2js/chrome_dart2js.dart
@@ -1,10 +1,10 @@
-/// Native wrappers for the Chrome Packaged App APIs.
+/// Native wrappers for the Chrome packaged app APIs.
 ///
-/// These functions allow direct access to the Packaged App APIs, allowing
-/// Chrome Packaged Apps to be written using Dart.
+/// These functions allow direct access to the chrome.* APIs, allowing
+/// Chrome packaged apps to be written using Dart.
 ///
-/// For more information on these APIs, see the Chrome.* APIs Documentation:
-///   http://developer.chrome.com/extensions/api_index.html
+/// For more information on these APIs, see the
+/// [chrome.* API documentation](http://developer.chrome.com/apps/api_index.html).
 library chrome;
 
 import 'dart:_foreign_helper' show JS;
@@ -363,6 +363,7 @@
    * Members
    */
   API_ChromeApp app;
+  API_file_system fileSystem;
 
   /*
    * Constructor
@@ -376,6 +377,11 @@
     if (app_object == null)
       throw new UnsupportedError('Not supported by current browser.');
     app = new API_ChromeApp(app_object);
+
+    var file_system_object = JS('', '#.fileSystem', this._jsObject);
+    if (file_system_object == null)
+      throw new UnsupportedError('Not supported by current browser.');
+    fileSystem = new API_file_system(file_system_object);
   }
 }
 
diff --git a/sdk/lib/collection/collection.dart b/sdk/lib/collection/collection.dart
index f77fc23..ba07414 100644
--- a/sdk/lib/collection/collection.dart
+++ b/sdk/lib/collection/collection.dart
@@ -2,6 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+/**
+ * Classes and utilities that supplement the collection support in dart:core.
+ */
 library dart.collection;
 
 import 'dart:_collection-dev';
diff --git a/sdk/lib/convert/convert.dart b/sdk/lib/convert/convert.dart
index 4003684..3e9b6f5 100644
--- a/sdk/lib/convert/convert.dart
+++ b/sdk/lib/convert/convert.dart
@@ -2,6 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+/**
+ * Converters for JSON and UTF-8, as well as support for creating additional 
+ * converters.
+ */
 library dart.convert;
 
 import 'dart:async';
diff --git a/sdk/lib/core/bool.dart b/sdk/lib/core/bool.dart
index 2c5da00..6155d6a 100644
--- a/sdk/lib/core/bool.dart
+++ b/sdk/lib/core/bool.dart
@@ -4,9 +4,22 @@
 
 part of dart.core;
 
+/**
+ * The reserved words [:true:] and [:false:] denote objects that are the only
+ * instances of this class.
+ * 
+ * It is a compile-time error for a class to attempt to extend or implement
+ * bool.
+ */
 class bool {
   factory bool._uninstantiable() {
     throw new UnsupportedError(
         "class bool cannot be instantiated");
   }
+
+  /**
+   * Returns [:"true":] if the receiver is [:true:], or [:"false":] if the
+   * receiver is [:false:].
+   */
+  String toString();
 }
diff --git a/sdk/lib/core/core.dart b/sdk/lib/core/core.dart
index de7fc4a..89208f8 100644
--- a/sdk/lib/core/core.dart
+++ b/sdk/lib/core/core.dart
@@ -25,6 +25,7 @@
 part "iterator.dart";
 part "list.dart";
 part "map.dart";
+part "null.dart";
 part "num.dart";
 part "object.dart";
 part "pattern.dart";
diff --git a/sdk/lib/core/corelib_sources.gypi b/sdk/lib/core/corelib_sources.gypi
index faafe0a..172f2e8 100644
--- a/sdk/lib/core/corelib_sources.gypi
+++ b/sdk/lib/core/corelib_sources.gypi
@@ -22,6 +22,7 @@
     'iterator.dart',
     'list.dart',
     'map.dart',
+    'null.dart',
     'num.dart',
     'object.dart',
     'pattern.dart',
diff --git a/sdk/lib/core/double.dart b/sdk/lib/core/double.dart
index 0028f91..409e294 100644
--- a/sdk/lib/core/double.dart
+++ b/sdk/lib/core/double.dart
@@ -11,10 +11,14 @@
 /**
  * Representation of Dart doubles containing double specific constants
  * and operations and specializations of operations inherited from
- * [num].
+ * [num]. Dart doubles are 64-bit floating-point numbers as specified in the
+ * IEEE 754 standard.
  *
  * The [double] type is contagious. Operations on [double]s return
  * [double] results.
+ *
+ * It is a compile-time error for a class to attempt to extend or implement
+ * double.
  */
 abstract class double extends num {
   static const double NAN = 0.0 / 0.0;
@@ -142,15 +146,16 @@
    * (optional) exponent part consists of the character "e" or "E", an optional
    * sign, and one or more digits.
    *
-   * The input string is trimmed (see [String.trim]) before conversion.
+   * Leading and trailing whitespace is ignored.
    *
-   * If the [source] is not a valid double literal, the [handleError]
+   * If the [source] is not a valid double literal, the [onError]
    * is called with the [source] as argument, and its return value is
-   * used instead. If no handleError is provided, a [FormatException]
-   * is thrown.
+   * used instead. If no `onError` is provided, a [FormatException]
+   * is thrown instead.
    *
-   * The [onError] function is only invoked if [source] is a [String]. It is
-   * not invoked if the [source] is, for example, `null`.
+   * The [onError] function is only invoked if [source] is a [String] with an
+   * invalid format. It is not invoked if the [source] is invalid for some
+   * other reason, for example by being `null`.
    *
    * Examples of accepted strings:
    *
@@ -164,5 +169,5 @@
    *     "-NaN"
    */
   external static double parse(String source,
-                               [double handleError(String source)]);
+                               [double onError(String source)]);
 }
diff --git a/sdk/lib/core/errors.dart b/sdk/lib/core/errors.dart
index f61cdfe..1ce7193 100644
--- a/sdk/lib/core/errors.dart
+++ b/sdk/lib/core/errors.dart
@@ -16,15 +16,48 @@
       return object.toString();
     }
     if (object is String) {
-      // TODO(ahe): Remove backslash when http://dartbug.com/4995 is fixed.
       String string = object;
-      const backslash = '\\';
-      String escaped = string
-        .replaceAll('$backslash', '$backslash$backslash')
-        .replaceAll('\n', '${backslash}n')
-        .replaceAll('\r', '${backslash}r')
-        .replaceAll('"',  '$backslash"');
-      return '"$escaped"';
+      StringBuffer buffer = new StringBuffer('"');
+      const int TAB = 0x09;
+      const int NEWLINE = 0x0a;
+      const int CARRIGE_RETURN = 0x0d;
+      const int BACKSLASH = 0x5c;
+      const int DOUBLE_QUOTE = 0x22;
+      const int DIGIT_ZERO = 0x30;
+      const int LOWERCASE_A = 0x61;
+      const int MAX_CONTROL = 0x1f;
+      for (int i = 0; i < string.length; i++) {
+        int codeUnit = string.codeUnitAt(i);
+        if (codeUnit <= MAX_CONTROL) {
+          if (codeUnit == NEWLINE) {
+            buffer.write(r"\n");
+          } else if (codeUnit == CARRIGE_RETURN) {
+            buffer.write(r"\r");
+          } else if (codeUnit == TAB) {
+            buffer.write(r"\t");
+          } else {
+            buffer.write(r"\x");
+            // Convert code in range 0x00 .. 0x1f to hex a two-digit hex string.
+            if (codeUnit < 0x10) {
+              buffer.write("0");
+            } else {
+              buffer.write("1");
+              codeUnit -= 0x10;
+            }
+            // Single digit to hex.
+            buffer.writeCharCode(codeUnit < 10 ? DIGIT_ZERO + codeUnit
+                                               : LOWERCASE_A - 10 + codeUnit);
+          }
+        } else if (codeUnit == BACKSLASH) {
+          buffer.write(r"\\");
+        } else if (codeUnit == DOUBLE_QUOTE) {
+          buffer.write(r'\"');
+        } else {
+          buffer.writeCharCode(codeUnit);
+        }
+      }
+      buffer.write('"');
+      return buffer.toString();
     }
     return _objectToString(object);
   }
diff --git a/sdk/lib/core/int.dart b/sdk/lib/core/int.dart
index 2dd2be2..5d7f79a 100644
--- a/sdk/lib/core/int.dart
+++ b/sdk/lib/core/int.dart
@@ -17,6 +17,8 @@
  * values. The behavior of the operators and methods in the [int]
  * class therefore sometimes differs between the Dart VM and Dart code
  * compiled to JavaScript.*
+ *
+ * It is a compile-time error for a class to attempt to extend or implement int.
  */
 abstract class int extends num {
   /** The bit-wise and operator. */
diff --git a/sdk/lib/core/null.dart b/sdk/lib/core/null.dart
new file mode 100644
index 0000000..dd914a3
--- /dev/null
+++ b/sdk/lib/core/null.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of dart.core;
+
+/**
+ * The reserved word [:null:] denotes an object that is the sole instance of 
+ * this class.
+ * 
+ * It is a compile-time error for a class to attempt to extend or implement
+ * Null.
+ */
+class Null {
+  factory Null._uninstantiable() {
+    throw new UnsupportedError('class Null cannot be instantiated');
+  }
+
+  /** Returns the string `"null"`. */
+  String toString() => "null";
+}
diff --git a/sdk/lib/core/num.dart b/sdk/lib/core/num.dart
index 57bf59e..b35a5ad 100644
--- a/sdk/lib/core/num.dart
+++ b/sdk/lib/core/num.dart
@@ -6,6 +6,9 @@
 
 /**
  * All numbers in dart are instances of [num].
+ *
+ * It is a compile-time error for any type other than the types int and double
+ * to attempt to extend or implement num.
  */
 abstract class num implements Comparable<num> {
   /** Addition operator. */
diff --git a/sdk/lib/core/object.dart b/sdk/lib/core/object.dart
index 3b61927..737f916 100644
--- a/sdk/lib/core/object.dart
+++ b/sdk/lib/core/object.dart
@@ -23,6 +23,25 @@
    * The default behavior for all [Object]s is to return true if and
    * only if [:this:] and [other] are the same object.
    *
+   * Override this method to specify a different equality relation on
+   * a class. The overriding method must still be an equivalence relation.
+   * That is, it must be:
+   *
+   *  * Total: It must return a boolean for all arguments. It should never throw
+   *    or return `null`.
+   *
+   *  * Reflexive: For all objects `o`, `o == o` must be true.
+   *
+   *  * Symmetric: For all objects `o1` and `o2`, `o1 == o2` and `o2 == o1` must
+   *    either both be true, or both be false.
+   *
+   *  * Transitive: For all objects `o1`, `o2`, and `o3`, if `o1 == o2` and
+   *    `o2 == o3` are true, then `o1 == o3` must be true.
+   *
+   * The method should also be consistent over time, so equality of two objects
+   * should not change over time, or at least only change if one of the objects
+   * was modified.
+   *
    * If a subclass overrides the equality operator it should override
    * the [hashCode] method as well to maintain consistency.
    */
diff --git a/sdk/lib/core/regexp.dart b/sdk/lib/core/regexp.dart
index dd29d51..a515692 100644
--- a/sdk/lib/core/regexp.dart
+++ b/sdk/lib/core/regexp.dart
@@ -69,7 +69,7 @@
 
 
 /**
- * [RegExp] represents regular expressions.
+ * A class for working with regular expressions.
  *
  * Dart regular expressions have the same syntax and semantics as
  * JavaScript regular expressions. See
diff --git a/sdk/lib/core/string.dart b/sdk/lib/core/string.dart
index e2ffc23..3f1a7cc 100644
--- a/sdk/lib/core/string.dart
+++ b/sdk/lib/core/string.dart
@@ -16,6 +16,9 @@
  * terminology to Go we use the name "rune" for an integer representing a
  * Unicode code point. The runes of a string are accessible through the [runes]
  * getter.
+ *
+ * It is a compile-time error for a class to attempt to extend or implement
+ * String.
  */
 abstract class String implements Comparable<String>, Pattern {
   /**
diff --git a/sdk/lib/core/uri.dart b/sdk/lib/core/uri.dart
index 02573c2..47d6327 100644
--- a/sdk/lib/core/uri.dart
+++ b/sdk/lib/core/uri.dart
@@ -738,10 +738,29 @@
     return output.join("/");
   }
 
-  Uri resolve(String uri) {
-    return resolveUri(Uri.parse(uri));
+  /**
+   * Resolve [reference] as an URI relative to `this`.
+   *
+   * First turn [reference] into a URI using [Uri.parse]. Then resolve the
+   * resulting URI relative to `this`.
+   *
+   * Returns the resolved URI.
+   *
+   * See [resolveUri] for details.
+   */
+  Uri resolve(String reference) {
+    return resolveUri(Uri.parse(reference));
   }
 
+  /**
+   * Resolve [reference] as an URI relative to `this`.
+   *
+   * Returns the resolved URI.
+   *
+   * The algorithm for resolving a reference is described in
+   * [RFC-3986 Section 5]
+   * (http://tools.ietf.org/html/rfc3986#section-5 "RFC-1123").
+   */
   Uri resolveUri(Uri reference) {
     // From RFC 3986.
     String targetScheme;
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 1ff5ad4..15b960c 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -18,8 +18,6 @@
 import 'dart:web_audio' as web_audio;
 import 'dart:web_gl' as gl;
 import 'dart:web_sql';
-import 'dart:_js_helper' show convertDartClosureToJS, Creates, JavaScriptIndexingBehavior, JSName, Null, Returns;
-import 'dart:_interceptors' show Interceptor, JSExtendableArray;
 import 'dart:_isolate_helper' show IsolateNatives;
 import 'dart:_foreign_helper' show JS;
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -32,6 +30,12 @@
 
 
 // Not actually used, but imported since dart:html can generate these objects.
+import 'dart:_js_helper' show
+    convertDartClosureToJS, Creates, JavaScriptIndexingBehavior,
+    JSName, Null, Returns,
+    findDispatchTagForInterceptorClass, setNativeSubclassDispatchRecord;
+import 'dart:_interceptors' show
+    Interceptor, JSExtendableArray, findInterceptorConstructorForType;
 
 
 
@@ -62,8 +66,8 @@
 
 // Workaround for tags like <cite> that lack their own Element subclass --
 // Dart issue 1990.
-class _HTMLElement extends Element native "HTMLElement" {
-  factory _HTMLElement() { throw new UnsupportedError("Not supported"); }
+class HtmlElement extends Element native "HTMLElement" {
+  factory HtmlElement() { throw new UnsupportedError("Not supported"); }
 }
 
 // Support for Send/ReceivePortSync.
@@ -154,7 +158,7 @@
 
 @DocsEditable()
 @DomName('HTMLAnchorElement')
-class AnchorElement extends _HTMLElement native "HTMLAnchorElement" {
+class AnchorElement extends HtmlElement native "HTMLAnchorElement" {
   // To suppress missing implicit constructor warnings.
   factory AnchorElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -403,7 +407,7 @@
  * on MDN.
  */
 @DomName('HTMLAreaElement')
-class AreaElement extends _HTMLElement native "HTMLAreaElement" {
+class AreaElement extends HtmlElement native "HTMLAreaElement" {
   // To suppress missing implicit constructor warnings.
   factory AreaElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -511,7 +515,7 @@
 
 @DocsEditable()
 @DomName('HTMLBRElement')
-class BRElement extends _HTMLElement native "HTMLBRElement" {
+class BRElement extends HtmlElement native "HTMLBRElement" {
   // To suppress missing implicit constructor warnings.
   factory BRElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -541,7 +545,7 @@
 
 @DocsEditable()
 @DomName('HTMLBaseElement')
-class BaseElement extends _HTMLElement native "HTMLBaseElement" {
+class BaseElement extends HtmlElement native "HTMLBaseElement" {
   // To suppress missing implicit constructor warnings.
   factory BaseElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -620,7 +624,7 @@
 
 @DocsEditable()
 @DomName('HTMLBodyElement')
-class BodyElement extends _HTMLElement native "HTMLBodyElement" {
+class BodyElement extends HtmlElement native "HTMLBodyElement" {
   // To suppress missing implicit constructor warnings.
   factory BodyElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -731,7 +735,7 @@
 
 @DocsEditable()
 @DomName('HTMLButtonElement')
-class ButtonElement extends _HTMLElement native "HTMLButtonElement" {
+class ButtonElement extends HtmlElement native "HTMLButtonElement" {
   // To suppress missing implicit constructor warnings.
   factory ButtonElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -844,7 +848,7 @@
 
 
 @DomName('HTMLCanvasElement')
-class CanvasElement extends _HTMLElement implements CanvasImageSource native "HTMLCanvasElement" {
+class CanvasElement extends HtmlElement implements CanvasImageSource native "HTMLCanvasElement" {
   // To suppress missing implicit constructor warnings.
   factory CanvasElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -1926,7 +1930,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME, '26')
 @Experimental()
 // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#content-element
-class ContentElement extends _HTMLElement native "HTMLContentElement" {
+class ContentElement extends HtmlElement native "HTMLContentElement" {
   // To suppress missing implicit constructor warnings.
   factory ContentElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6295,7 +6299,7 @@
 
 @DocsEditable()
 @DomName('HTMLDListElement')
-class DListElement extends _HTMLElement native "HTMLDListElement" {
+class DListElement extends HtmlElement native "HTMLDListElement" {
   // To suppress missing implicit constructor warnings.
   factory DListElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6314,7 +6318,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
-class DataListElement extends _HTMLElement native "HTMLDataListElement" {
+class DataListElement extends HtmlElement native "HTMLDataListElement" {
   // To suppress missing implicit constructor warnings.
   factory DataListElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6523,7 +6527,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental()
-class DetailsElement extends _HTMLElement native "HTMLDetailsElement" {
+class DetailsElement extends HtmlElement native "HTMLDetailsElement" {
   // To suppress missing implicit constructor warnings.
   factory DetailsElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6664,7 +6668,7 @@
 @DocsEditable()
 @DomName('HTMLDialogElement')
 @Unstable()
-class DialogElement extends _HTMLElement native "HTMLDialogElement" {
+class DialogElement extends HtmlElement native "HTMLDialogElement" {
   // To suppress missing implicit constructor warnings.
   factory DialogElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6913,7 +6917,7 @@
  * * [Inline-level element](http://www.w3.org/TR/CSS2/visuren.html#inline-boxes) from W3C.
  */
 @DomName('HTMLDivElement')
-class DivElement extends _HTMLElement native "HTMLDivElement" {
+class DivElement extends HtmlElement native "HTMLDivElement" {
   // To suppress missing implicit constructor warnings.
   factory DivElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6976,7 +6980,7 @@
   /// Moved to [HtmlDocument].
   @DomName('Document.body')
   @DocsEditable()
-  Element $dom_body;
+  HtmlElement $dom_body;
 
   @DomName('Document.charset')
   @DocsEditable()
@@ -10574,7 +10578,7 @@
 @SupportedBrowser(SupportedBrowser.IE)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-class EmbedElement extends _HTMLElement native "HTMLEmbedElement" {
+class EmbedElement extends HtmlElement native "HTMLEmbedElement" {
   // To suppress missing implicit constructor warnings.
   factory EmbedElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -11196,7 +11200,7 @@
 @DocsEditable()
 @DomName('HTMLFieldSetElement')
 @Unstable()
-class FieldSetElement extends _HTMLElement native "HTMLFieldSetElement" {
+class FieldSetElement extends HtmlElement native "HTMLFieldSetElement" {
   // To suppress missing implicit constructor warnings.
   factory FieldSetElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -11872,7 +11876,7 @@
 
 @DocsEditable()
 @DomName('HTMLFormElement')
-class FormElement extends _HTMLElement native "HTMLFormElement" {
+class FormElement extends HtmlElement native "HTMLFormElement" {
   // To suppress missing implicit constructor warnings.
   factory FormElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -12144,7 +12148,7 @@
  * An `<hr>` tag.
  */
 @DomName('HTMLHRElement')
-class HRElement extends _HTMLElement native "HTMLHRElement" {
+class HRElement extends HtmlElement native "HTMLHRElement" {
   // To suppress missing implicit constructor warnings.
   factory HRElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -12200,7 +12204,7 @@
 
 @DocsEditable()
 @DomName('HTMLHeadElement')
-class HeadElement extends _HTMLElement native "HTMLHeadElement" {
+class HeadElement extends HtmlElement native "HTMLHeadElement" {
   // To suppress missing implicit constructor warnings.
   factory HeadElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -12215,7 +12219,7 @@
 
 @DocsEditable()
 @DomName('HTMLHeadingElement')
-class HeadingElement extends _HTMLElement native "HTMLHeadingElement" {
+class HeadingElement extends HtmlElement native "HTMLHeadingElement" {
   // To suppress missing implicit constructor warnings.
   factory HeadingElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -12625,6 +12629,10 @@
   @Experimental()
   String get visibilityState => $dom_webkitVisibilityState;
 
+  @Experimental
+  void register(String tag, Type customElementClass) {
+    _registerCustomElement(JS('', 'window'), this, tag, customElementClass);
+  }
 
   @Creates('Null')  // Set from Dart code; does not instantiate a native type.
   // Note: used to polyfill <template>
@@ -12636,21 +12644,6 @@
 
 
 @DocsEditable()
-@DomName('HTMLHtmlElement')
-class HtmlElement extends _HTMLElement native "HTMLHtmlElement" {
-  // To suppress missing implicit constructor warnings.
-  factory HtmlElement._() { throw new UnsupportedError("Not supported"); }
-
-  @DomName('HTMLHtmlElement.HTMLHtmlElement')
-  @DocsEditable()
-  factory HtmlElement() => document.$dom_createElement("html");
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-
-@DocsEditable()
 @DomName('HTMLFormControlsCollection')
 class HtmlFormControlsCollection extends HtmlCollection native "HTMLFormControlsCollection" {
   // To suppress missing implicit constructor warnings.
@@ -12666,6 +12659,21 @@
 
 
 @DocsEditable()
+@DomName('HTMLHtmlElement')
+class HtmlHtmlElement extends HtmlElement native "HTMLHtmlElement" {
+  // To suppress missing implicit constructor warnings.
+  factory HtmlHtmlElement._() { throw new UnsupportedError("Not supported"); }
+
+  @DomName('HTMLHtmlElement.HTMLHtmlElement')
+  @DocsEditable()
+  factory HtmlHtmlElement() => document.$dom_createElement("html");
+}
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+
+@DocsEditable()
 @DomName('HTMLOptionsCollection')
 class HtmlOptionsCollection extends HtmlCollection native "HTMLOptionsCollection" {
   // To suppress missing implicit constructor warnings.
@@ -13320,7 +13328,7 @@
 
 @DocsEditable()
 @DomName('HTMLIFrameElement')
-class IFrameElement extends _HTMLElement native "HTMLIFrameElement" {
+class IFrameElement extends HtmlElement native "HTMLIFrameElement" {
   // To suppress missing implicit constructor warnings.
   factory IFrameElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -13421,7 +13429,7 @@
 
 
 @DomName('HTMLImageElement')
-class ImageElement extends _HTMLElement implements CanvasImageSource native "HTMLImageElement" {
+class ImageElement extends HtmlElement implements CanvasImageSource native "HTMLImageElement" {
   // To suppress missing implicit constructor warnings.
   factory ImageElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -13502,7 +13510,7 @@
 
 
 @DomName('HTMLInputElement')
-class InputElement extends _HTMLElement implements
+class InputElement extends HtmlElement implements
     HiddenInputElement,
     SearchInputElement,
     TextInputElement,
@@ -13641,7 +13649,7 @@
 
   @DomName('HTMLInputElement.list')
   @DocsEditable()
-  final Element list;
+  final HtmlElement list;
 
   @DomName('HTMLInputElement.max')
   @DocsEditable()
@@ -14404,7 +14412,7 @@
   @DomName('InputMethodContext.target')
   @DocsEditable()
   @Experimental() // untriaged
-  final Element target;
+  final HtmlElement target;
 
   @DomName('InputMethodContext.confirmComposition')
   @DocsEditable()
@@ -14521,7 +14529,7 @@
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental()
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-keygen-element
-class KeygenElement extends _HTMLElement native "HTMLKeygenElement" {
+class KeygenElement extends HtmlElement native "HTMLKeygenElement" {
   // To suppress missing implicit constructor warnings.
   factory KeygenElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -14594,7 +14602,7 @@
 
 @DocsEditable()
 @DomName('HTMLLIElement')
-class LIElement extends _HTMLElement native "HTMLLIElement" {
+class LIElement extends HtmlElement native "HTMLLIElement" {
   // To suppress missing implicit constructor warnings.
   factory LIElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -14619,7 +14627,7 @@
 
 @DocsEditable()
 @DomName('HTMLLabelElement')
-class LabelElement extends _HTMLElement native "HTMLLabelElement" {
+class LabelElement extends HtmlElement native "HTMLLabelElement" {
   // To suppress missing implicit constructor warnings.
   factory LabelElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -14629,7 +14637,7 @@
 
   @DomName('HTMLLabelElement.control')
   @DocsEditable()
-  final Element control;
+  final HtmlElement control;
 
   @DomName('HTMLLabelElement.form')
   @DocsEditable()
@@ -14646,7 +14654,7 @@
 
 @DocsEditable()
 @DomName('HTMLLegendElement')
-class LegendElement extends _HTMLElement native "HTMLLegendElement" {
+class LegendElement extends HtmlElement native "HTMLLegendElement" {
   // To suppress missing implicit constructor warnings.
   factory LegendElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -14665,7 +14673,7 @@
 
 @DocsEditable()
 @DomName('HTMLLinkElement')
-class LinkElement extends _HTMLElement native "HTMLLinkElement" {
+class LinkElement extends HtmlElement native "HTMLLinkElement" {
   // To suppress missing implicit constructor warnings.
   factory LinkElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -14812,7 +14820,7 @@
 
 @DocsEditable()
 @DomName('HTMLMapElement')
-class MapElement extends _HTMLElement native "HTMLMapElement" {
+class MapElement extends HtmlElement native "HTMLMapElement" {
   // To suppress missing implicit constructor warnings.
   factory MapElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -14912,7 +14920,7 @@
 @DocsEditable()
 @DomName('HTMLMediaElement')
 @Unstable()
-class MediaElement extends _HTMLElement native "HTMLMediaElement" {
+class MediaElement extends HtmlElement native "HTMLMediaElement" {
   // To suppress missing implicit constructor warnings.
   factory MediaElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -16029,7 +16037,7 @@
  *  * [Menu Element](http://www.w3.org/TR/html5/the-menu-element.html#the-menu-element) from the W3C.
  */
 @DomName('HTMLMenuElement')
-class MenuElement extends _HTMLElement native "HTMLMenuElement" {
+class MenuElement extends HtmlElement native "HTMLMenuElement" {
   // To suppress missing implicit constructor warnings.
   factory MenuElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -16179,7 +16187,7 @@
 
 @DocsEditable()
 @DomName('HTMLMetaElement')
-class MetaElement extends _HTMLElement native "HTMLMetaElement" {
+class MetaElement extends HtmlElement native "HTMLMetaElement" {
   // To suppress missing implicit constructor warnings.
   factory MetaElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -16243,7 +16251,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-class MeterElement extends _HTMLElement native "HTMLMeterElement" {
+class MeterElement extends HtmlElement native "HTMLMeterElement" {
   // To suppress missing implicit constructor warnings.
   factory MeterElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -16558,7 +16566,7 @@
 @DocsEditable()
 @DomName('HTMLModElement')
 @Unstable()
-class ModElement extends _HTMLElement native "HTMLModElement" {
+class ModElement extends HtmlElement native "HTMLModElement" {
   // To suppress missing implicit constructor warnings.
   factory ModElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -18155,7 +18163,7 @@
 
 @DocsEditable()
 @DomName('HTMLOListElement')
-class OListElement extends _HTMLElement native "HTMLOListElement" {
+class OListElement extends HtmlElement native "HTMLOListElement" {
   // To suppress missing implicit constructor warnings.
   factory OListElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -18186,7 +18194,7 @@
 @SupportedBrowser(SupportedBrowser.IE)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-class ObjectElement extends _HTMLElement native "HTMLObjectElement" {
+class ObjectElement extends HtmlElement native "HTMLObjectElement" {
   // To suppress missing implicit constructor warnings.
   factory ObjectElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -18266,7 +18274,7 @@
 
 @DocsEditable()
 @DomName('HTMLOptGroupElement')
-class OptGroupElement extends _HTMLElement native "HTMLOptGroupElement" {
+class OptGroupElement extends HtmlElement native "HTMLOptGroupElement" {
   // To suppress missing implicit constructor warnings.
   factory OptGroupElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -18289,7 +18297,7 @@
 
 @DocsEditable()
 @DomName('HTMLOptionElement')
-class OptionElement extends _HTMLElement native "HTMLOptionElement" {
+class OptionElement extends HtmlElement native "HTMLOptionElement" {
   // To suppress missing implicit constructor warnings.
   factory OptionElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -18354,7 +18362,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
-class OutputElement extends _HTMLElement native "HTMLOutputElement" {
+class OutputElement extends HtmlElement native "HTMLOutputElement" {
   // To suppress missing implicit constructor warnings.
   factory OutputElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -18476,7 +18484,7 @@
 
 @DocsEditable()
 @DomName('HTMLParagraphElement')
-class ParagraphElement extends _HTMLElement native "HTMLParagraphElement" {
+class ParagraphElement extends HtmlElement native "HTMLParagraphElement" {
   // To suppress missing implicit constructor warnings.
   factory ParagraphElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -18492,7 +18500,7 @@
 @DocsEditable()
 @DomName('HTMLParamElement')
 @Unstable()
-class ParamElement extends _HTMLElement native "HTMLParamElement" {
+class ParamElement extends HtmlElement native "HTMLParamElement" {
   // To suppress missing implicit constructor warnings.
   factory ParamElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -19116,7 +19124,7 @@
 
 @DocsEditable()
 @DomName('HTMLPreElement')
-class PreElement extends _HTMLElement native "HTMLPreElement" {
+class PreElement extends HtmlElement native "HTMLPreElement" {
   // To suppress missing implicit constructor warnings.
   factory PreElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -19166,7 +19174,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
-class ProgressElement extends _HTMLElement native "HTMLProgressElement" {
+class ProgressElement extends HtmlElement native "HTMLProgressElement" {
   // To suppress missing implicit constructor warnings.
   factory ProgressElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -19291,7 +19299,7 @@
 
 @DocsEditable()
 @DomName('HTMLQuoteElement')
-class QuoteElement extends _HTMLElement native "HTMLQuoteElement" {
+class QuoteElement extends HtmlElement native "HTMLQuoteElement" {
   // To suppress missing implicit constructor warnings.
   factory QuoteElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -20242,7 +20250,7 @@
 
 @DocsEditable()
 @DomName('HTMLScriptElement')
-class ScriptElement extends _HTMLElement native "HTMLScriptElement" {
+class ScriptElement extends HtmlElement native "HTMLScriptElement" {
   // To suppress missing implicit constructor warnings.
   factory ScriptElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -20429,7 +20437,7 @@
 
 
 @DomName('HTMLSelectElement')
-class SelectElement extends _HTMLElement native "HTMLSelectElement" {
+class SelectElement extends HtmlElement native "HTMLSelectElement" {
   // To suppress missing implicit constructor warnings.
   factory SelectElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -20672,7 +20680,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME, '26')
 @Experimental()
 // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#shadow-element
-class ShadowElement extends _HTMLElement native "HTMLShadowElement" {
+class ShadowElement extends HtmlElement native "HTMLShadowElement" {
   // To suppress missing implicit constructor warnings.
   factory ShadowElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -20890,7 +20898,7 @@
 
 @DocsEditable()
 @DomName('HTMLSourceElement')
-class SourceElement extends _HTMLElement native "HTMLSourceElement" {
+class SourceElement extends HtmlElement native "HTMLSourceElement" {
   // To suppress missing implicit constructor warnings.
   factory SourceElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -20947,7 +20955,7 @@
 
 @DocsEditable()
 @DomName('HTMLSpanElement')
-class SpanElement extends _HTMLElement native "HTMLSpanElement" {
+class SpanElement extends HtmlElement native "HTMLSpanElement" {
   // To suppress missing implicit constructor warnings.
   factory SpanElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -21846,7 +21854,7 @@
 
 @DocsEditable()
 @DomName('HTMLStyleElement')
-class StyleElement extends _HTMLElement native "HTMLStyleElement" {
+class StyleElement extends HtmlElement native "HTMLStyleElement" {
   // To suppress missing implicit constructor warnings.
   factory StyleElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -22025,7 +22033,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableCaptionElement')
-class TableCaptionElement extends _HTMLElement native "HTMLTableCaptionElement" {
+class TableCaptionElement extends HtmlElement native "HTMLTableCaptionElement" {
   // To suppress missing implicit constructor warnings.
   factory TableCaptionElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -22040,7 +22048,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableCellElement')
-class TableCellElement extends _HTMLElement native "HTMLTableCellElement,HTMLTableDataCellElement,HTMLTableHeaderCellElement" {
+class TableCellElement extends HtmlElement native "HTMLTableCellElement,HTMLTableDataCellElement,HTMLTableHeaderCellElement" {
   // To suppress missing implicit constructor warnings.
   factory TableCellElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -22071,7 +22079,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableColElement')
-class TableColElement extends _HTMLElement native "HTMLTableColElement" {
+class TableColElement extends HtmlElement native "HTMLTableColElement" {
   // To suppress missing implicit constructor warnings.
   factory TableColElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -22090,7 +22098,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableElement')
-class TableElement extends _HTMLElement native "HTMLTableElement" {
+class TableElement extends HtmlElement native "HTMLTableElement" {
 
   @DomName('HTMLTableElement.tBodies')
   List<TableSectionElement> get tBodies =>
@@ -22160,17 +22168,17 @@
   @JSName('createCaption')
   @DomName('HTMLTableElement.createCaption')
   @DocsEditable()
-  Element $dom_createCaption() native;
+  HtmlElement $dom_createCaption() native;
 
   @JSName('createTFoot')
   @DomName('HTMLTableElement.createTFoot')
   @DocsEditable()
-  Element $dom_createTFoot() native;
+  HtmlElement $dom_createTFoot() native;
 
   @JSName('createTHead')
   @DomName('HTMLTableElement.createTHead')
   @DocsEditable()
-  Element $dom_createTHead() native;
+  HtmlElement $dom_createTHead() native;
 
   @DomName('HTMLTableElement.deleteCaption')
   @DocsEditable()
@@ -22191,7 +22199,7 @@
   @JSName('insertRow')
   @DomName('HTMLTableElement.insertRow')
   @DocsEditable()
-  Element $dom_insertRow(int index) native;
+  HtmlElement $dom_insertRow(int index) native;
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -22200,7 +22208,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableRowElement')
-class TableRowElement extends _HTMLElement native "HTMLTableRowElement" {
+class TableRowElement extends HtmlElement native "HTMLTableRowElement" {
 
   @DomName('HTMLTableRowElement.cells')
   List<TableCellElement> get cells =>
@@ -22239,7 +22247,7 @@
   @JSName('insertCell')
   @DomName('HTMLTableRowElement.insertCell')
   @DocsEditable()
-  Element $dom_insertCell(int index) native;
+  HtmlElement $dom_insertCell(int index) native;
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -22248,7 +22256,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableSectionElement')
-class TableSectionElement extends _HTMLElement native "HTMLTableSectionElement" {
+class TableSectionElement extends HtmlElement native "HTMLTableSectionElement" {
 
   @DomName('HTMLTableSectionElement.rows')
   List<TableRowElement> get rows =>
@@ -22275,7 +22283,7 @@
   @JSName('insertRow')
   @DomName('HTMLTableSectionElement.insertRow')
   @DocsEditable()
-  Element $dom_insertRow(int index) native;
+  HtmlElement $dom_insertRow(int index) native;
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -22371,7 +22379,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @Experimental()
 // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html#template-element
-class TemplateElement extends _HTMLElement native "HTMLTemplateElement" {
+class TemplateElement extends HtmlElement native "HTMLTemplateElement" {
   // To suppress missing implicit constructor warnings.
   factory TemplateElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -22621,7 +22629,7 @@
 
 @DocsEditable()
 @DomName('HTMLTextAreaElement')
-class TextAreaElement extends _HTMLElement native "HTMLTextAreaElement" {
+class TextAreaElement extends HtmlElement native "HTMLTextAreaElement" {
   // To suppress missing implicit constructor warnings.
   factory TextAreaElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -23126,7 +23134,7 @@
 
 @DocsEditable()
 @DomName('HTMLTitleElement')
-class TitleElement extends _HTMLElement native "HTMLTitleElement" {
+class TitleElement extends HtmlElement native "HTMLTitleElement" {
   // To suppress missing implicit constructor warnings.
   factory TitleElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -23390,7 +23398,7 @@
 @SupportedBrowser(SupportedBrowser.SAFARI)
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#the-track-element
 @Experimental()
-class TrackElement extends _HTMLElement native "HTMLTrackElement" {
+class TrackElement extends HtmlElement native "HTMLTrackElement" {
   // To suppress missing implicit constructor warnings.
   factory TrackElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -23665,7 +23673,7 @@
 
 @DocsEditable()
 @DomName('HTMLUListElement')
-class UListElement extends _HTMLElement native "HTMLUListElement" {
+class UListElement extends HtmlElement native "HTMLUListElement" {
   // To suppress missing implicit constructor warnings.
   factory UListElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -23680,7 +23688,7 @@
 
 @DocsEditable()
 @DomName('HTMLUnknownElement')
-class UnknownElement extends _HTMLElement native "HTMLUnknownElement" {
+class UnknownElement extends HtmlElement native "HTMLUnknownElement" {
   // To suppress missing implicit constructor warnings.
   factory UnknownElement._() { throw new UnsupportedError("Not supported"); }
 }
@@ -26828,7 +26836,7 @@
 @DomName('HTMLAppletElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#the-applet-element
 @deprecated // deprecated
-abstract class _HTMLAppletElement extends _HTMLElement native "HTMLAppletElement" {
+abstract class _HTMLAppletElement extends HtmlElement native "HTMLAppletElement" {
   // To suppress missing implicit constructor warnings.
   factory _HTMLAppletElement._() { throw new UnsupportedError("Not supported"); }
 }
@@ -26841,7 +26849,7 @@
 @DomName('HTMLBaseFontElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#basefont
 @deprecated // deprecated
-abstract class _HTMLBaseFontElement extends _HTMLElement native "HTMLBaseFontElement" {
+abstract class _HTMLBaseFontElement extends HtmlElement native "HTMLBaseFontElement" {
   // To suppress missing implicit constructor warnings.
   factory _HTMLBaseFontElement._() { throw new UnsupportedError("Not supported"); }
 }
@@ -26854,7 +26862,7 @@
 @DomName('HTMLDirectoryElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#dir
 @deprecated // deprecated
-abstract class _HTMLDirectoryElement extends _HTMLElement native "HTMLDirectoryElement" {
+abstract class _HTMLDirectoryElement extends HtmlElement native "HTMLDirectoryElement" {
   // To suppress missing implicit constructor warnings.
   factory _HTMLDirectoryElement._() { throw new UnsupportedError("Not supported"); }
 }
@@ -26867,7 +26875,7 @@
 @DomName('HTMLFontElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#htmlfontelement
 @deprecated // deprecated
-abstract class _HTMLFontElement extends _HTMLElement native "HTMLFontElement" {
+abstract class _HTMLFontElement extends HtmlElement native "HTMLFontElement" {
   // To suppress missing implicit constructor warnings.
   factory _HTMLFontElement._() { throw new UnsupportedError("Not supported"); }
 }
@@ -26880,7 +26888,7 @@
 @DomName('HTMLFrameElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#htmlframeelement
 @deprecated // deprecated
-abstract class _HTMLFrameElement extends _HTMLElement native "HTMLFrameElement" {
+abstract class _HTMLFrameElement extends HtmlElement native "HTMLFrameElement" {
   // To suppress missing implicit constructor warnings.
   factory _HTMLFrameElement._() { throw new UnsupportedError("Not supported"); }
 }
@@ -26893,7 +26901,7 @@
 @DomName('HTMLFrameSetElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#frameset
 @deprecated // deprecated
-abstract class _HTMLFrameSetElement extends _HTMLElement native "HTMLFrameSetElement" {
+abstract class _HTMLFrameSetElement extends HtmlElement native "HTMLFrameSetElement" {
   // To suppress missing implicit constructor warnings.
   factory _HTMLFrameSetElement._() { throw new UnsupportedError("Not supported"); }
 }
@@ -26906,7 +26914,7 @@
 @DomName('HTMLMarqueeElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#the-marquee-element
 @deprecated // deprecated
-abstract class _HTMLMarqueeElement extends _HTMLElement native "HTMLMarqueeElement" {
+abstract class _HTMLMarqueeElement extends HtmlElement native "HTMLMarqueeElement" {
   // To suppress missing implicit constructor warnings.
   factory _HTMLMarqueeElement._() { throw new UnsupportedError("Not supported"); }
 }
@@ -30806,6 +30814,73 @@
     return e;
   }
 }
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+
+_callOnCreated(receiver) {
+  return receiver.onCreated();
+}
+
+_makeCreatedCallbackMethod() {
+  return JS('',
+      '''((function(invokeCallback) {
+             return function() {
+               return invokeCallback(this);
+             };
+          })(#))''',
+      convertDartClosureToJS(_callOnCreated, 1));
+}
+
+void _registerCustomElement(context, document, String tag, Type type) {
+  // Function follows the same pattern as the following JavaScript code for
+  // registering a custom element.
+  //
+  //    var proto = Object.create(HTMLElement.prototype, {
+  //        createdCallback: {
+  //          value: function() {
+  //            window.console.log('here');
+  //          }
+  //        }
+  //    });
+  //    document.register('x-foo', { prototype: proto });
+  //    ...
+  //    var e = document.createElement('x-foo');
+
+  var interceptorClass = findInterceptorConstructorForType(type);
+  if (interceptorClass == null) {
+    throw new ArgumentError(type);
+  }
+
+  String baseClassName = findDispatchTagForInterceptorClass(interceptorClass);
+  if (baseClassName == null) {
+    throw new ArgumentError(type);
+  }
+  if (baseClassName == 'Element') baseClassName = 'HTMLElement';
+
+  var baseConstructor = JS('=Object', '#[#]', context, baseClassName);
+  if (JS('bool', "typeof(#) != 'function'", baseConstructor)) {
+    throw new ArgumentError(type);
+  }
+
+  var properties = JS('=Object', '{}');
+
+  var jsCreatedCallback = _makeCreatedCallbackMethod();
+
+  JS('void', '#.createdCallback = #', properties,
+      JS('=Object', '{value: #}', jsCreatedCallback));
+
+  var baseProto = JS('=Object', '#.prototype', baseConstructor);
+  var proto = JS('=Object', 'Object.create(#, #)', baseProto, properties);
+
+  var interceptor = JS('=Object', '#.prototype', interceptorClass);
+
+  setNativeSubclassDispatchRecord(proto, interceptor);
+
+  JS('void', '#.register(#, #)',
+      document, tag, JS('', '{prototype: #}', proto));
+}
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 843ea2c..1daeb79 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -13,6 +13,7 @@
 import 'dart:isolate';
 import 'dart:json' as json;
 import 'dart:math';
+import 'dart:mirrors';
 import 'dart:nativewrappers';
 import 'dart:typed_data';
 import 'dart:web_gl' as gl;
@@ -27,6 +28,8 @@
 // Auto-generated dart:html library.
 
 
+// TODO(vsm): Remove this when we can do the proper checking in
+// native code for custom elements.
 // Not actually used, but imported since dart:html can generate these objects.
 
 
@@ -175,7 +178,7 @@
 
 @DocsEditable()
 @DomName('HTMLAnchorElement')
-class AnchorElement extends _HTMLElement {
+class AnchorElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory AnchorElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -509,7 +512,7 @@
  * on MDN.
  */
 @DomName('HTMLAreaElement')
-class AreaElement extends _HTMLElement {
+class AreaElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory AreaElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -650,7 +653,7 @@
 
 @DocsEditable()
 @DomName('HTMLBRElement')
-class BRElement extends _HTMLElement {
+class BRElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory BRElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -686,7 +689,7 @@
 
 @DocsEditable()
 @DomName('HTMLBaseElement')
-class BaseElement extends _HTMLElement {
+class BaseElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory BaseElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -785,7 +788,7 @@
 
 @DocsEditable()
 @DomName('HTMLBodyElement')
-class BodyElement extends _HTMLElement {
+class BodyElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory BodyElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -899,7 +902,7 @@
 
 @DocsEditable()
 @DomName('HTMLButtonElement')
-class ButtonElement extends _HTMLElement {
+class ButtonElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory ButtonElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -1061,7 +1064,7 @@
 
 
 @DomName('HTMLCanvasElement')
-class CanvasElement extends _HTMLElement implements CanvasImageSource {
+class CanvasElement extends HtmlElement implements CanvasImageSource {
   // To suppress missing implicit constructor warnings.
   factory CanvasElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2308,7 +2311,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME, '26')
 @Experimental()
 // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#content-element
-class ContentElement extends _HTMLElement {
+class ContentElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory ContentElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6846,7 +6849,7 @@
 
 @DocsEditable()
 @DomName('HTMLDListElement')
-class DListElement extends _HTMLElement {
+class DListElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory DListElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6868,7 +6871,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
-class DataListElement extends _HTMLElement {
+class DataListElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory DataListElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -7103,7 +7106,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental()
-class DetailsElement extends _HTMLElement {
+class DetailsElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory DetailsElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -7259,7 +7262,7 @@
 @DocsEditable()
 @DomName('HTMLDialogElement')
 @Unstable()
-class DialogElement extends _HTMLElement {
+class DialogElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory DialogElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -7441,7 +7444,7 @@
  * * [Inline-level element](http://www.w3.org/TR/CSS2/visuren.html#inline-boxes) from W3C.
  */
 @DomName('HTMLDivElement')
-class DivElement extends _HTMLElement {
+class DivElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory DivElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -7504,12 +7507,12 @@
   /// Moved to [HtmlDocument].
   @DomName('Document.body')
   @DocsEditable()
-  Element get $dom_body native "Document_body_Getter";
+  HtmlElement get $dom_body native "Document_body_Getter";
 
   /// Moved to [HtmlDocument].
   @DomName('Document.body')
   @DocsEditable()
-  void set $dom_body(Element value) native "Document_body_Setter";
+  void set $dom_body(HtmlElement value) native "Document_body_Setter";
 
   @DomName('Document.charset')
   @DocsEditable()
@@ -10970,7 +10973,7 @@
 @SupportedBrowser(SupportedBrowser.IE)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-class EmbedElement extends _HTMLElement {
+class EmbedElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory EmbedElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -11627,7 +11630,7 @@
 @DocsEditable()
 @DomName('HTMLFieldSetElement')
 @Unstable()
-class FieldSetElement extends _HTMLElement {
+class FieldSetElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory FieldSetElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -12365,7 +12368,7 @@
 
 @DocsEditable()
 @DomName('HTMLFormElement')
-class FormElement extends _HTMLElement {
+class FormElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory FormElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -12663,7 +12666,7 @@
  * An `<hr>` tag.
  */
 @DomName('HTMLHRElement')
-class HRElement extends _HTMLElement {
+class HRElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory HRElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -12719,7 +12722,7 @@
 
 @DocsEditable()
 @DomName('HTMLHeadElement')
-class HeadElement extends _HTMLElement {
+class HeadElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory HeadElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -12737,7 +12740,7 @@
 
 @DocsEditable()
 @DomName('HTMLHeadingElement')
-class HeadingElement extends _HTMLElement {
+class HeadingElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory HeadingElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -13157,6 +13160,10 @@
   @Experimental()
   String get visibilityState => $dom_webkitVisibilityState;
 
+  @Experimental
+  void register(String tag, Type custom) {
+    _Utils.register(tag, custom);
+  }
 
   // Note: used to polyfill <template>
   Document _templateContentsOwner;
@@ -13169,14 +13176,150 @@
 
 
 @DocsEditable()
-@DomName('HTMLHtmlElement')
-class HtmlElement extends _HTMLElement {
+@DomName('HTMLElement')
+class HtmlElement extends Element {
   // To suppress missing implicit constructor warnings.
   factory HtmlElement._() { throw new UnsupportedError("Not supported"); }
 
-  @DomName('HTMLHtmlElement.HTMLHtmlElement')
+  @DomName('HTMLElement.contentEditable')
   @DocsEditable()
-  factory HtmlElement() => document.$dom_createElement("html");
+  String get contentEditable native "HTMLElement_contentEditable_Getter";
+
+  @DomName('HTMLElement.contentEditable')
+  @DocsEditable()
+  void set contentEditable(String value) native "HTMLElement_contentEditable_Setter";
+
+  @DomName('HTMLElement.dir')
+  @DocsEditable()
+  String get dir native "HTMLElement_dir_Getter";
+
+  @DomName('HTMLElement.dir')
+  @DocsEditable()
+  void set dir(String value) native "HTMLElement_dir_Setter";
+
+  @DomName('HTMLElement.draggable')
+  @DocsEditable()
+  bool get draggable native "HTMLElement_draggable_Getter";
+
+  @DomName('HTMLElement.draggable')
+  @DocsEditable()
+  void set draggable(bool value) native "HTMLElement_draggable_Setter";
+
+  @DomName('HTMLElement.hidden')
+  @DocsEditable()
+  bool get hidden native "HTMLElement_hidden_Getter";
+
+  @DomName('HTMLElement.hidden')
+  @DocsEditable()
+  void set hidden(bool value) native "HTMLElement_hidden_Setter";
+
+  @DomName('HTMLElement.id')
+  @DocsEditable()
+  String get id native "HTMLElement_id_Getter";
+
+  @DomName('HTMLElement.id')
+  @DocsEditable()
+  void set id(String value) native "HTMLElement_id_Setter";
+
+  @DomName('HTMLElement.innerHTML')
+  @DocsEditable()
+  String get innerHtml native "HTMLElement_innerHTML_Getter";
+
+  @DomName('HTMLElement.innerHTML')
+  @DocsEditable()
+  void set innerHtml(String value) native "HTMLElement_innerHTML_Setter";
+
+  @DomName('HTMLElement.isContentEditable')
+  @DocsEditable()
+  bool get isContentEditable native "HTMLElement_isContentEditable_Getter";
+
+  @DomName('HTMLElement.lang')
+  @DocsEditable()
+  String get lang native "HTMLElement_lang_Getter";
+
+  @DomName('HTMLElement.lang')
+  @DocsEditable()
+  void set lang(String value) native "HTMLElement_lang_Setter";
+
+  @DomName('HTMLElement.outerHTML')
+  @DocsEditable()
+  String get outerHtml native "HTMLElement_outerHTML_Getter";
+
+  @DomName('HTMLElement.spellcheck')
+  @DocsEditable()
+  // http://blog.whatwg.org/the-road-to-html-5-spellchecking
+  @Experimental() // nonstandard
+  bool get spellcheck native "HTMLElement_spellcheck_Getter";
+
+  @DomName('HTMLElement.spellcheck')
+  @DocsEditable()
+  // http://blog.whatwg.org/the-road-to-html-5-spellchecking
+  @Experimental() // nonstandard
+  void set spellcheck(bool value) native "HTMLElement_spellcheck_Setter";
+
+  @DomName('HTMLElement.tabIndex')
+  @DocsEditable()
+  int get tabIndex native "HTMLElement_tabIndex_Getter";
+
+  @DomName('HTMLElement.tabIndex')
+  @DocsEditable()
+  void set tabIndex(int value) native "HTMLElement_tabIndex_Setter";
+
+  @DomName('HTMLElement.title')
+  @DocsEditable()
+  String get title native "HTMLElement_title_Getter";
+
+  @DomName('HTMLElement.title')
+  @DocsEditable()
+  void set title(String value) native "HTMLElement_title_Setter";
+
+  @DomName('HTMLElement.translate')
+  @DocsEditable()
+  bool get translate native "HTMLElement_translate_Getter";
+
+  @DomName('HTMLElement.translate')
+  @DocsEditable()
+  void set translate(bool value) native "HTMLElement_translate_Setter";
+
+  @DomName('HTMLElement.webkitdropzone')
+  @DocsEditable()
+  @SupportedBrowser(SupportedBrowser.CHROME)
+  @SupportedBrowser(SupportedBrowser.SAFARI)
+  @Experimental()
+  // http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dropzone-attribute
+  String get dropzone native "HTMLElement_webkitdropzone_Getter";
+
+  @DomName('HTMLElement.webkitdropzone')
+  @DocsEditable()
+  @SupportedBrowser(SupportedBrowser.CHROME)
+  @SupportedBrowser(SupportedBrowser.SAFARI)
+  @Experimental()
+  // http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dropzone-attribute
+  void set dropzone(String value) native "HTMLElement_webkitdropzone_Setter";
+
+  @DomName('HTMLElement.click')
+  @DocsEditable()
+  void click() native "HTMLElement_click_Callback";
+
+  @DomName('HTMLElement.getInputContext')
+  @DocsEditable()
+  // http://www.w3.org/TR/ime-api/#the-getinputcontext-method
+  @Experimental()
+  InputMethodContext getInputContext() native "HTMLElement_getInputContext_Callback";
+
+  @DomName('HTMLElement.insertAdjacentElement')
+  @DocsEditable()
+  @Experimental() // non-standard
+  Element insertAdjacentElement(String where, Element element) native "HTMLElement_insertAdjacentElement_Callback";
+
+  @DomName('HTMLElement.insertAdjacentHTML')
+  @DocsEditable()
+  void insertAdjacentHtml(String where, String html) native "HTMLElement_insertAdjacentHTML_Callback";
+
+  @DomName('HTMLElement.insertAdjacentText')
+  @DocsEditable()
+  @Experimental() // non-standard
+  void insertAdjacentText(String where, String text) native "HTMLElement_insertAdjacentText_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13209,6 +13352,24 @@
 
 
 @DocsEditable()
+@DomName('HTMLHtmlElement')
+class HtmlHtmlElement extends HtmlElement {
+  // To suppress missing implicit constructor warnings.
+  factory HtmlHtmlElement._() { throw new UnsupportedError("Not supported"); }
+
+  @DomName('HTMLHtmlElement.HTMLHtmlElement')
+  @DocsEditable()
+  factory HtmlHtmlElement() => document.$dom_createElement("html");
+
+}
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
+@DocsEditable()
 @DomName('HTMLOptionsCollection')
 class HtmlOptionsCollection extends HtmlCollection {
   // To suppress missing implicit constructor warnings.
@@ -13919,7 +14080,7 @@
 
 @DocsEditable()
 @DomName('HTMLIFrameElement')
-class IFrameElement extends _HTMLElement {
+class IFrameElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory IFrameElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -14056,7 +14217,7 @@
 
 
 @DomName('HTMLImageElement')
-class ImageElement extends _HTMLElement implements CanvasImageSource {
+class ImageElement extends HtmlElement implements CanvasImageSource {
   // To suppress missing implicit constructor warnings.
   factory ImageElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -14175,7 +14336,7 @@
 
 
 @DomName('HTMLInputElement')
-class InputElement extends _HTMLElement implements
+class InputElement extends HtmlElement implements
     HiddenInputElement,
     SearchInputElement,
     TextInputElement,
@@ -14389,7 +14550,7 @@
 
   @DomName('HTMLInputElement.list')
   @DocsEditable()
-  Element get list native "HTMLInputElement_list_Getter";
+  HtmlElement get list native "HTMLInputElement_list_Getter";
 
   @DomName('HTMLInputElement.max')
   @DocsEditable()
@@ -15285,7 +15446,7 @@
   @DomName('InputMethodContext.target')
   @DocsEditable()
   @Experimental() // untriaged
-  Element get target native "InputMethodContext_target_Getter";
+  HtmlElement get target native "InputMethodContext_target_Getter";
 
   @DomName('InputMethodContext.confirmComposition')
   @DocsEditable()
@@ -15379,7 +15540,7 @@
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Experimental()
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-keygen-element
-class KeygenElement extends _HTMLElement {
+class KeygenElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory KeygenElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -15473,7 +15634,7 @@
 
 @DocsEditable()
 @DomName('HTMLLIElement')
-class LIElement extends _HTMLElement {
+class LIElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory LIElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -15511,7 +15672,7 @@
 
 @DocsEditable()
 @DomName('HTMLLabelElement')
-class LabelElement extends _HTMLElement {
+class LabelElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory LabelElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -15521,7 +15682,7 @@
 
   @DomName('HTMLLabelElement.control')
   @DocsEditable()
-  Element get control native "HTMLLabelElement_control_Getter";
+  HtmlElement get control native "HTMLLabelElement_control_Getter";
 
   @DomName('HTMLLabelElement.form')
   @DocsEditable()
@@ -15545,7 +15706,7 @@
 
 @DocsEditable()
 @DomName('HTMLLegendElement')
-class LegendElement extends _HTMLElement {
+class LegendElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory LegendElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -15567,7 +15728,7 @@
 
 @DocsEditable()
 @DomName('HTMLLinkElement')
-class LinkElement extends _HTMLElement {
+class LinkElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory LinkElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -15774,7 +15935,7 @@
 
 @DocsEditable()
 @DomName('HTMLMapElement')
-class MapElement extends _HTMLElement {
+class MapElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory MapElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -15918,7 +16079,7 @@
 @DocsEditable()
 @DomName('HTMLMediaElement')
 @Unstable()
-class MediaElement extends _HTMLElement {
+class MediaElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory MediaElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -17233,7 +17394,7 @@
  *  * [Menu Element](http://www.w3.org/TR/html5/the-menu-element.html#the-menu-element) from the W3C.
  */
 @DomName('HTMLMenuElement')
-class MenuElement extends _HTMLElement {
+class MenuElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory MenuElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -17377,7 +17538,7 @@
 
 @DocsEditable()
 @DomName('HTMLMetaElement')
-class MetaElement extends _HTMLElement {
+class MetaElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory MetaElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -17456,7 +17617,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-class MeterElement extends _HTMLElement {
+class MeterElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory MeterElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -17857,7 +18018,7 @@
 @DocsEditable()
 @DomName('HTMLModElement')
 @Unstable()
-class ModElement extends _HTMLElement {
+class ModElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory ModElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -19450,7 +19611,7 @@
 
 @DocsEditable()
 @DomName('HTMLOListElement')
-class OListElement extends _HTMLElement {
+class OListElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory OListElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -19496,7 +19657,7 @@
 @SupportedBrowser(SupportedBrowser.IE)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-class ObjectElement extends _HTMLElement {
+class ObjectElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory ObjectElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -19609,7 +19770,7 @@
 
 @DocsEditable()
 @DomName('HTMLOptGroupElement')
-class OptGroupElement extends _HTMLElement {
+class OptGroupElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory OptGroupElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -19643,7 +19804,7 @@
 
 @DocsEditable()
 @DomName('HTMLOptionElement')
-class OptionElement extends _HTMLElement {
+class OptionElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory OptionElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -19717,7 +19878,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
-class OutputElement extends _HTMLElement {
+class OutputElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory OutputElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -19858,7 +20019,7 @@
 
 @DocsEditable()
 @DomName('HTMLParagraphElement')
-class ParagraphElement extends _HTMLElement {
+class ParagraphElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory ParagraphElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -19877,7 +20038,7 @@
 @DocsEditable()
 @DomName('HTMLParamElement')
 @Unstable()
-class ParamElement extends _HTMLElement {
+class ParamElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory ParamElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -20564,7 +20725,7 @@
 
 @DocsEditable()
 @DomName('HTMLPreElement')
-class PreElement extends _HTMLElement {
+class PreElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory PreElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -20630,7 +20791,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.IE, '10')
 @SupportedBrowser(SupportedBrowser.SAFARI)
-class ProgressElement extends _HTMLElement {
+class ProgressElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory ProgressElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -20773,7 +20934,7 @@
 
 @DocsEditable()
 @DomName('HTMLQuoteElement')
-class QuoteElement extends _HTMLElement {
+class QuoteElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory QuoteElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -21718,7 +21879,7 @@
 
 @DocsEditable()
 @DomName('HTMLScriptElement')
-class ScriptElement extends _HTMLElement {
+class ScriptElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory ScriptElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -21952,7 +22113,7 @@
 
 
 @DomName('HTMLSelectElement')
-class SelectElement extends _HTMLElement {
+class SelectElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory SelectElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -22234,7 +22395,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME, '26')
 @Experimental()
 // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#shadow-element
-class ShadowElement extends _HTMLElement {
+class ShadowElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory ShadowElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -22504,7 +22665,7 @@
 
 @DocsEditable()
 @DomName('HTMLSourceElement')
-class SourceElement extends _HTMLElement {
+class SourceElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory SourceElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -22579,7 +22740,7 @@
 
 @DocsEditable()
 @DomName('HTMLSpanElement')
-class SpanElement extends _HTMLElement {
+class SpanElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory SpanElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -23642,7 +23803,7 @@
 
 @DocsEditable()
 @DomName('HTMLStyleElement')
-class StyleElement extends _HTMLElement {
+class StyleElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory StyleElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -23805,7 +23966,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableCaptionElement')
-class TableCaptionElement extends _HTMLElement {
+class TableCaptionElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory TableCaptionElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -23823,7 +23984,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableCellElement')
-class TableCellElement extends _HTMLElement {
+class TableCellElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory TableCellElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -23869,7 +24030,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableColElement')
-class TableColElement extends _HTMLElement {
+class TableColElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory TableColElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -23893,7 +24054,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableElement')
-class TableElement extends _HTMLElement {
+class TableElement extends HtmlElement {
 
   @DomName('HTMLTableElement.tBodies')
   List<TableSectionElement> get tBodies =>
@@ -23967,19 +24128,19 @@
 
   @DomName('HTMLTableElement.createCaption')
   @DocsEditable()
-  Element $dom_createCaption() native "HTMLTableElement_createCaption_Callback";
+  HtmlElement $dom_createCaption() native "HTMLTableElement_createCaption_Callback";
 
   @DomName('HTMLTableElement.createTBody')
   @DocsEditable()
-  Element $dom_createTBody() native "HTMLTableElement_createTBody_Callback";
+  HtmlElement $dom_createTBody() native "HTMLTableElement_createTBody_Callback";
 
   @DomName('HTMLTableElement.createTFoot')
   @DocsEditable()
-  Element $dom_createTFoot() native "HTMLTableElement_createTFoot_Callback";
+  HtmlElement $dom_createTFoot() native "HTMLTableElement_createTFoot_Callback";
 
   @DomName('HTMLTableElement.createTHead')
   @DocsEditable()
-  Element $dom_createTHead() native "HTMLTableElement_createTHead_Callback";
+  HtmlElement $dom_createTHead() native "HTMLTableElement_createTHead_Callback";
 
   @DomName('HTMLTableElement.deleteCaption')
   @DocsEditable()
@@ -23999,7 +24160,7 @@
 
   @DomName('HTMLTableElement.insertRow')
   @DocsEditable()
-  Element $dom_insertRow(int index) native "HTMLTableElement_insertRow_Callback";
+  HtmlElement $dom_insertRow(int index) native "HTMLTableElement_insertRow_Callback";
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24008,7 +24169,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableRowElement')
-class TableRowElement extends _HTMLElement {
+class TableRowElement extends HtmlElement {
 
   @DomName('HTMLTableRowElement.cells')
   List<TableCellElement> get cells =>
@@ -24045,7 +24206,7 @@
 
   @DomName('HTMLTableRowElement.insertCell')
   @DocsEditable()
-  Element $dom_insertCell(int index) native "HTMLTableRowElement_insertCell_Callback";
+  HtmlElement $dom_insertCell(int index) native "HTMLTableRowElement_insertCell_Callback";
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24054,7 +24215,7 @@
 
 @DocsEditable()
 @DomName('HTMLTableSectionElement')
-class TableSectionElement extends _HTMLElement {
+class TableSectionElement extends HtmlElement {
 
   @DomName('HTMLTableSectionElement.rows')
   List<TableRowElement> get rows =>
@@ -24079,7 +24240,7 @@
 
   @DomName('HTMLTableSectionElement.insertRow')
   @DocsEditable()
-  Element $dom_insertRow(int index) native "HTMLTableSectionElement_insertRow_Callback";
+  HtmlElement $dom_insertRow(int index) native "HTMLTableSectionElement_insertRow_Callback";
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -24175,7 +24336,7 @@
 @SupportedBrowser(SupportedBrowser.CHROME)
 @Experimental()
 // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html#template-element
-class TemplateElement extends _HTMLElement {
+class TemplateElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory TemplateElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -24426,7 +24587,7 @@
 
 @DocsEditable()
 @DomName('HTMLTextAreaElement')
-class TextAreaElement extends _HTMLElement {
+class TextAreaElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory TextAreaElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -25133,7 +25294,7 @@
 
 @DocsEditable()
 @DomName('HTMLTitleElement')
-class TitleElement extends _HTMLElement {
+class TitleElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory TitleElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -25386,7 +25547,7 @@
 @SupportedBrowser(SupportedBrowser.SAFARI)
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#the-track-element
 @Experimental()
-class TrackElement extends _HTMLElement {
+class TrackElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory TrackElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -25681,7 +25842,7 @@
 
 @DocsEditable()
 @DomName('HTMLUListElement')
-class UListElement extends _HTMLElement {
+class UListElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory UListElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -25699,7 +25860,7 @@
 
 @DocsEditable()
 @DomName('HTMLUnknownElement')
-class UnknownElement extends _HTMLElement {
+class UnknownElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory UnknownElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -28697,7 +28858,7 @@
 @DomName('HTMLAppletElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#the-applet-element
 @deprecated // deprecated
-abstract class _HTMLAppletElement extends _HTMLElement {
+abstract class _HTMLAppletElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory _HTMLAppletElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -28713,7 +28874,7 @@
 @DomName('HTMLBaseFontElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#basefont
 @deprecated // deprecated
-abstract class _HTMLBaseFontElement extends _HTMLElement {
+abstract class _HTMLBaseFontElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory _HTMLBaseFontElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -28729,7 +28890,7 @@
 @DomName('HTMLDirectoryElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#dir
 @deprecated // deprecated
-abstract class _HTMLDirectoryElement extends _HTMLElement {
+abstract class _HTMLDirectoryElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory _HTMLDirectoryElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -28742,164 +28903,10 @@
 
 
 @DocsEditable()
-@DomName('HTMLElement')
-class _HTMLElement extends Element {
-  // To suppress missing implicit constructor warnings.
-  factory _HTMLElement._() { throw new UnsupportedError("Not supported"); }
-
-  @DomName('HTMLElement.contentEditable')
-  @DocsEditable()
-  String get contentEditable native "HTMLElement_contentEditable_Getter";
-
-  @DomName('HTMLElement.contentEditable')
-  @DocsEditable()
-  void set contentEditable(String value) native "HTMLElement_contentEditable_Setter";
-
-  @DomName('HTMLElement.dir')
-  @DocsEditable()
-  String get dir native "HTMLElement_dir_Getter";
-
-  @DomName('HTMLElement.dir')
-  @DocsEditable()
-  void set dir(String value) native "HTMLElement_dir_Setter";
-
-  @DomName('HTMLElement.draggable')
-  @DocsEditable()
-  bool get draggable native "HTMLElement_draggable_Getter";
-
-  @DomName('HTMLElement.draggable')
-  @DocsEditable()
-  void set draggable(bool value) native "HTMLElement_draggable_Setter";
-
-  @DomName('HTMLElement.hidden')
-  @DocsEditable()
-  bool get hidden native "HTMLElement_hidden_Getter";
-
-  @DomName('HTMLElement.hidden')
-  @DocsEditable()
-  void set hidden(bool value) native "HTMLElement_hidden_Setter";
-
-  @DomName('HTMLElement.id')
-  @DocsEditable()
-  String get id native "HTMLElement_id_Getter";
-
-  @DomName('HTMLElement.id')
-  @DocsEditable()
-  void set id(String value) native "HTMLElement_id_Setter";
-
-  @DomName('HTMLElement.innerHTML')
-  @DocsEditable()
-  String get innerHtml native "HTMLElement_innerHTML_Getter";
-
-  @DomName('HTMLElement.innerHTML')
-  @DocsEditable()
-  void set innerHtml(String value) native "HTMLElement_innerHTML_Setter";
-
-  @DomName('HTMLElement.isContentEditable')
-  @DocsEditable()
-  bool get isContentEditable native "HTMLElement_isContentEditable_Getter";
-
-  @DomName('HTMLElement.lang')
-  @DocsEditable()
-  String get lang native "HTMLElement_lang_Getter";
-
-  @DomName('HTMLElement.lang')
-  @DocsEditable()
-  void set lang(String value) native "HTMLElement_lang_Setter";
-
-  @DomName('HTMLElement.outerHTML')
-  @DocsEditable()
-  String get outerHtml native "HTMLElement_outerHTML_Getter";
-
-  @DomName('HTMLElement.spellcheck')
-  @DocsEditable()
-  // http://blog.whatwg.org/the-road-to-html-5-spellchecking
-  @Experimental() // nonstandard
-  bool get spellcheck native "HTMLElement_spellcheck_Getter";
-
-  @DomName('HTMLElement.spellcheck')
-  @DocsEditable()
-  // http://blog.whatwg.org/the-road-to-html-5-spellchecking
-  @Experimental() // nonstandard
-  void set spellcheck(bool value) native "HTMLElement_spellcheck_Setter";
-
-  @DomName('HTMLElement.tabIndex')
-  @DocsEditable()
-  int get tabIndex native "HTMLElement_tabIndex_Getter";
-
-  @DomName('HTMLElement.tabIndex')
-  @DocsEditable()
-  void set tabIndex(int value) native "HTMLElement_tabIndex_Setter";
-
-  @DomName('HTMLElement.title')
-  @DocsEditable()
-  String get title native "HTMLElement_title_Getter";
-
-  @DomName('HTMLElement.title')
-  @DocsEditable()
-  void set title(String value) native "HTMLElement_title_Setter";
-
-  @DomName('HTMLElement.translate')
-  @DocsEditable()
-  bool get translate native "HTMLElement_translate_Getter";
-
-  @DomName('HTMLElement.translate')
-  @DocsEditable()
-  void set translate(bool value) native "HTMLElement_translate_Setter";
-
-  @DomName('HTMLElement.webkitdropzone')
-  @DocsEditable()
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dropzone-attribute
-  String get dropzone native "HTMLElement_webkitdropzone_Getter";
-
-  @DomName('HTMLElement.webkitdropzone')
-  @DocsEditable()
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dropzone-attribute
-  void set dropzone(String value) native "HTMLElement_webkitdropzone_Setter";
-
-  @DomName('HTMLElement.click')
-  @DocsEditable()
-  void click() native "HTMLElement_click_Callback";
-
-  @DomName('HTMLElement.getInputContext')
-  @DocsEditable()
-  // http://www.w3.org/TR/ime-api/#the-getinputcontext-method
-  @Experimental()
-  InputMethodContext getInputContext() native "HTMLElement_getInputContext_Callback";
-
-  @DomName('HTMLElement.insertAdjacentElement')
-  @DocsEditable()
-  @Experimental() // non-standard
-  Element insertAdjacentElement(String where, Element element) native "HTMLElement_insertAdjacentElement_Callback";
-
-  @DomName('HTMLElement.insertAdjacentHTML')
-  @DocsEditable()
-  void insertAdjacentHtml(String where, String html) native "HTMLElement_insertAdjacentHTML_Callback";
-
-  @DomName('HTMLElement.insertAdjacentText')
-  @DocsEditable()
-  @Experimental() // non-standard
-  void insertAdjacentText(String where, String text) native "HTMLElement_insertAdjacentText_Callback";
-
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-
-@DocsEditable()
 @DomName('HTMLFontElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#htmlfontelement
 @deprecated // deprecated
-abstract class _HTMLFontElement extends _HTMLElement {
+abstract class _HTMLFontElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory _HTMLFontElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -28915,7 +28922,7 @@
 @DomName('HTMLFrameElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#htmlframeelement
 @deprecated // deprecated
-abstract class _HTMLFrameElement extends _HTMLElement {
+abstract class _HTMLFrameElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory _HTMLFrameElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -28931,7 +28938,7 @@
 @DomName('HTMLFrameSetElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#frameset
 @deprecated // deprecated
-abstract class _HTMLFrameSetElement extends _HTMLElement {
+abstract class _HTMLFrameSetElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory _HTMLFrameSetElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -28947,7 +28954,7 @@
 @DomName('HTMLMarqueeElement')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#the-marquee-element
 @deprecated // deprecated
-abstract class _HTMLMarqueeElement extends _HTMLElement {
+abstract class _HTMLMarqueeElement extends HtmlElement {
   // To suppress missing implicit constructor warnings.
   factory _HTMLMarqueeElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -33270,6 +33277,39 @@
   // TODO(jacobr): we need a failsafe way to determine that a Node is really a
   // DOM node rather than just a class that extends Node.
   static bool isNode(obj) => obj is Node;
+
+  static void register(String tag, Type type) {
+    // TODO(vsm): Move these checks into native code.
+    if (type == null) {
+      throw new UnsupportedError("Invalid null type.");
+    }
+    ClassMirror cls = reflectClass(type);
+    LibraryMirror lib = cls.owner;
+    String libName = lib.uri.toString();
+    if (libName.startsWith('dart:')) {
+      throw new UnsupportedError("Invalid custom element from $libName.");
+    }
+    ClassMirror superClass = cls.superclass;
+
+    Symbol objectName = reflectClass(Object).qualifiedName;
+    bool isRoot(ClassMirror cls) =>
+      cls == null || cls.qualifiedName == objectName;
+    // TODO(vsm): Support extending SvgElement as well.
+    Symbol elementName = reflectClass(HtmlElement).qualifiedName;
+    bool isElement(ClassMirror cls) =>
+      cls != null && cls.qualifiedName == elementName;
+
+    while(!isRoot(superClass) && !isElement(superClass)) {
+      superClass = superClass.superclass;
+    }
+
+    if (isRoot(superClass)) {
+      throw new UnsupportedError("Invalid custom element doesn't inherit from HtmlElement.");
+    }
+    _register(tag, type);
+  }
+
+  static void _register(String tag, Type type) native "Utils_register";
 }
 
 class _NPObject extends NativeFieldWrapperClass1 {
@@ -33397,7 +33437,7 @@
 
 final _forwardingPrintClosure = _Utils.forwardingPrint;
 
- class _Timer implements Timer{
+ class _Timer implements Timer {
   var _canceler;
 
   _Timer(int milliSeconds, void callback(Timer timer), bool repeating) {
diff --git a/sdk/lib/io/directory.dart b/sdk/lib/io/directory.dart
index 7bae578..57b6568 100644
--- a/sdk/lib/io/directory.dart
+++ b/sdk/lib/io/directory.dart
@@ -16,14 +16,6 @@
   factory Directory(String path) => new _Directory(path);
 
   /**
-   * Creates a directory object from a Path object. The path is either
-   * an absolute path, or it is a relative path which is interpreted
-   * relative to the directory in which the Dart VM was started.
-   */
-  @deprecated
-  factory Directory.fromPath(Path path) => new _Directory.fromPath(path);
-
-  /**
    * Creates a directory object pointing to the current working
    * directory.
    */
diff --git a/sdk/lib/io/directory_impl.dart b/sdk/lib/io/directory_impl.dart
index e27b610..39d36cf 100644
--- a/sdk/lib/io/directory_impl.dart
+++ b/sdk/lib/io/directory_impl.dart
@@ -24,8 +24,6 @@
     }
   }
 
-  _Directory.fromPath(Path path) : this(path.toNativePath());
-
   external static String _current();
   external static _setCurrent(path);
   external static _createTemp(String template);
@@ -98,11 +96,11 @@
   }
 
   Future<Directory> createRecursively() {
-    var path = new Path(this.path);
+    var path = new _Path(this.path);
     var dirsToCreate = [];
     var terminator = path.isAbsolute ? '/' : '';
     while (path.toString() != terminator) {
-      dirsToCreate.add(new Directory.fromPath(path));
+      dirsToCreate.add(new Directory(path.toNativePath()));
       path = path.directoryPath;
     }
     return _computeExistingIndex(dirsToCreate).then((index) {
@@ -139,11 +137,11 @@
   }
 
   void createRecursivelySync() {
-    var path = new Path(this.path);
+    var path = new _Path(this.path);
     var dirsToCreate = [];
     var terminator = path.isAbsolute ? '/' : '';
     while (path.toString() != terminator) {
-      var dir = new Directory.fromPath(path);
+      var dir = new Directory(path.toNativePath());
       if (dir.existsSync()) break;
       dirsToCreate.add(dir);
       path = path.directoryPath;
diff --git a/sdk/lib/io/file.dart b/sdk/lib/io/file.dart
index dba6931..5cbff1c 100644
--- a/sdk/lib/io/file.dart
+++ b/sdk/lib/io/file.dart
@@ -41,12 +41,6 @@
   factory File(String path) => new _File(path);
 
   /**
-   * Create a File object from a Path object.
-   */
-  @deprecated
-  factory File.fromPath(Path path) => new _File.fromPath(path);
-
-  /**
    * Create the file. Returns a [:Future<File>:] that completes with
    * the file when it has been created.
    *
diff --git a/sdk/lib/io/file_impl.dart b/sdk/lib/io/file_impl.dart
index cf9a7ef..f621360 100644
--- a/sdk/lib/io/file_impl.dart
+++ b/sdk/lib/io/file_impl.dart
@@ -246,9 +246,6 @@
     }
   }
 
-  // Constructor from Path for file.
-  _File.fromPath(Path path) : this(path.toNativePath());
-
   Future<bool> exists() {
     _ensureFileService();
     List request = new List(2);
@@ -346,8 +343,8 @@
   }
 
   Directory get directory {
-    Path path = new Path(this.path).directoryPath;
-    return new Directory.fromPath(path);
+    _Path path = new _Path(this.path).directoryPath;
+    return new Directory(path.toNativePath());
   }
 
   Future<RandomAccessFile> open({FileMode mode: FileMode.READ}) {
diff --git a/sdk/lib/io/http_impl.dart b/sdk/lib/io/http_impl.dart
index 1a5e3a5..615c59a 100644
--- a/sdk/lib/io/http_impl.dart
+++ b/sdk/lib/io/http_impl.dart
@@ -1590,8 +1590,8 @@
       scheme = previous.uri.scheme;
     }
     if (!uri.path.startsWith('/')) {
-      var absolute = new Path.raw(previous.uri.path).directoryPath;
-      absolute = absolute.join(new Path.raw(u.path));
+      var absolute = new _Path.raw(previous.uri.path).directoryPath;
+      absolute = absolute.join(new _Path.raw(u.path));
       path = absolute.canonicalize().toString();
     }
     replaceComponents(scheme: scheme, host: host, port: port, path: path);
diff --git a/sdk/lib/io/io.dart b/sdk/lib/io/io.dart
index 4f61b2b..37a65c1 100644
--- a/sdk/lib/io/io.dart
+++ b/sdk/lib/io/io.dart
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /**
+ * File, socket, HTTP, and other I/O support for server applications.
+ * 
  * The IO library is used for Dart server applications,
  * which run on a stand-alone Dart VM from the command line.
  * *This library does not work in browser based applications.*
diff --git a/sdk/lib/io/link.dart b/sdk/lib/io/link.dart
index 8b726ed..d774fa2 100644
--- a/sdk/lib/io/link.dart
+++ b/sdk/lib/io/link.dart
@@ -15,12 +15,6 @@
   factory Link(String path) => new _Link(path);
 
   /**
-   * Creates a Link object from a Path object.
-   */
-  @deprecated
-  factory Link.fromPath(Path path) => new _Link.fromPath(path);
-
-  /**
    * Creates a symbolic link. Returns a [:Future<Link>:] that completes with
    * the link when it has been created. If the link exists,
    * the future will complete with an error.
@@ -144,8 +138,6 @@
   }
 
 
-  _Link.fromPath(Path inputPath) : path = inputPath.toNativePath();
-
   String toString() => "Link: '$path'";
 
   Future<bool> exists() => FileSystemEntity.isLink(path);
diff --git a/sdk/lib/io/path.dart b/sdk/lib/io/path.dart
index 702e42e..0262e4b 100644
--- a/sdk/lib/io/path.dart
+++ b/sdk/lib/io/path.dart
@@ -16,7 +16,7 @@
  * August 2013.*
  */
 @deprecated
-abstract class Path {
+abstract class _Path {
   /**
    * Creates a Path from a String that uses the native filesystem's conventions.
    *
@@ -26,7 +26,7 @@
    * If the path starts with a drive letter, like 'C:',  a '/' is added
    * before the drive letter.
    *
-   *     new Path(r'c:\a\b').toString() == '/c:/a/b'
+   *     new _Path(r'c:\a\b').toString() == '/c:/a/b'
    *
    * A path starting with a drive letter is
    * treated specially.  Backwards links ('..') cannot cancel the drive letter.
@@ -34,14 +34,14 @@
    * If the path is a share path this is recorded in the Path object and
    * maintained in operations on the Path object.
    *
-   *     var share = new Path(r'\\share\a\b\c');
+   *     var share = new _Path(r'\\share\a\b\c');
    *     share.isWindowsShare == true
    *     share.toString() == '/share/a/b/c'
    *     share.toNativePath() == r'\\share\a\b\c'
    *     share.append('final').isWindowsShare == true
    */
   @deprecated
-  factory Path(String source) => new _Path(source);
+  factory _Path(String source) => new __Path(source);
 
   /**
    * Creates a Path from the String [source].  [source] is used as-is, so if
@@ -49,7 +49,7 @@
    * behavior may not be as expected.  Paths are immutable.
    */
   @deprecated
-  factory Path.raw(String source) => new _Path.raw(source);
+  factory _Path.raw(String source) => new __Path.raw(source);
 
   /**
    * Is this path the empty string?
@@ -86,7 +86,7 @@
    * and combining consecutive '/'s.  Leading '..' segments
    * are kept on relative paths, and dropped from absolute paths.
    */
-  Path canonicalize();
+  _Path canonicalize();
 
   /**
    * Joins the relative path [further] to this path.  Canonicalizes the
@@ -97,13 +97,13 @@
    * If [further] is an absolute path, an IllegalArgument exception is thrown.
    *
    * Examples:
-   *   `new Path('/a/b/c').join(new Path('d/e'))` returns the Path object
+   *   `new _Path('/a/b/c').join(new _Path('d/e'))` returns the Path object
    *   containing `'a/b/c/d/e'`.
    *
-   *   `new Path('a/b/../c/').join(new Path('d/./e//')` returns the Path
+   *   `new _Path('a/b/../c/').join(new _Path('d/./e//')` returns the Path
    *   containing `'a/c/d/e/'`.
    *
-   *   `new Path('a/b/c').join(new Path('d/../../e')` returns the Path
+   *   `new _Path('a/b/c').join(new _Path('d/../../e')` returns the Path
    *   containing `'a/b/e'`.
    *
    * Note that the join operation does not drop the last segment of the
@@ -115,7 +115,7 @@
    * parent directories in the base, you can check whether
    * `further.canonicalize()` starts with '../' or equals '..'.
    */
-  Path join(Path further);
+  _Path join(_Path further);
 
 
   /**
@@ -129,7 +129,7 @@
    * path component of the base is dropped unless it ends with a slash,
    * call [: a.relativeTo(b.directoryPath) :] instead of [: a.relativeTo(b) :].
    */
-  Path relativeTo(Path base);
+  _Path relativeTo(_Path base);
 
   /**
    * Converts a path to a string using the native filesystem's conventions.
@@ -138,14 +138,14 @@
    * On Windows, converts '/'s to backwards slashes, and removes
    * the leading '/' if the path starts with a drive specification.
    * For most valid Windows paths, this should be the inverse of the
-   * conversion that the constructor new Path() performs.  If the path is
+   * conversion that the constructor new _Path() performs.  If the path is
    * a Windows share, restores the '\\' at the start of the path.
    */
   String toNativePath();
 
   /**
    * Returns the path as a string.  If this path is constructed using
-   * new Path.raw(), or new Path() on a non-Windows system, the
+   * new _Path.raw(), or new _Path() on a non-Windows system, the
    * returned value is the original string argument to the constructor.
    */
   String toString();
@@ -156,8 +156,8 @@
    * beginning does not create an empty segment before it, and a '/' at
    * the end does not create an empty segment after it.
    *
-   *     new Path('/a/b/c/d').segments() == ['a', 'b', 'c', d'];
-   *     new Path(' foo bar //../') == [' foo bar ', '', '..'];
+   *     new _Path('/a/b/c/d').segments() == ['a', 'b', 'c', d'];
+   *     new _Path(' foo bar //../') == [' foo bar ', '', '..'];
    */
   List<String> segments();
 
@@ -167,7 +167,7 @@
    * a '/'.  The path is not canonicalized, and [finalSegment] may
    * contain '/'s.
    */
-  Path append(String finalSegment);
+  _Path append(String finalSegment);
 
   /**
    * Drops the final '/' and whatever follows it from this Path,
@@ -175,20 +175,20 @@
    * this Path is the first character, returns '/' instead of the empty string.
    * If there is no '/' in the Path, returns the empty string.
    *
-   *     new Path('../images/dot.gif').directoryPath == '../images'
-   *     new Path('/usr/geoffrey/www/').directoryPath == '/usr/geoffrey/www'
-   *     new Path('lost_file_old').directoryPath == ''
-   *     new Path('/src').directoryPath == '/'
-   *     Note: new Path('/D:/src').directoryPath == '/D:'
+   *     new _Path('../images/dot.gif').directoryPath == '../images'
+   *     new _Path('/usr/geoffrey/www/').directoryPath == '/usr/geoffrey/www'
+   *     new _Path('lost_file_old').directoryPath == ''
+   *     new _Path('/src').directoryPath == '/'
+   *     Note: new _Path('/D:/src').directoryPath == '/D:'
    */
-  Path get directoryPath;
+  _Path get directoryPath;
 
   /**
    * The part of the path after the last '/', or the entire path if
    * it contains no '/'.
    *
-   *     new Path('images/DSC_0027.jpg).filename == 'DSC_0027.jpg'
-   *     new Path('users/fred/').filename == ''
+   *     new _Path('images/DSC_0027.jpg).filename == 'DSC_0027.jpg'
+   *     new _Path('users/fred/').filename == ''
    */
   String get filename;
 
@@ -196,9 +196,9 @@
    * The part of [filename] before the last '.', or the entire filename if it
    * contains no '.'.  If [filename] is '.' or '..' it is unchanged.
    *
-   *     new Path('/c:/My Documents/Heidi.txt').filenameWithoutExtension
+   *     new _Path('/c:/My Documents/Heidi.txt').filenameWithoutExtension
    *     would return 'Heidi'.
-   *     new Path('not what I would call a path').filenameWithoutExtension
+   *     new _Path('not what I would call a path').filenameWithoutExtension
    *     would return 'not what I would call a path'.
    */
   String get filenameWithoutExtension;
@@ -207,8 +207,8 @@
    * The part of [filename] after the last '.', or '' if [filename]
    * contains no '.'.  If [filename] is '.' or '..', returns ''.
    *
-   *     new Path('tiger.svg').extension == 'svg'
-   *     new Path('/src/dart/dart_secrets').extension == ''
+   *     new _Path('tiger.svg').extension == 'svg'
+   *     new _Path('/src/dart/dart_secrets').extension == ''
    */
   String get extension;
 }
diff --git a/sdk/lib/io/path_impl.dart b/sdk/lib/io/path_impl.dart
index 50e4d38..9915863 100644
--- a/sdk/lib/io/path_impl.dart
+++ b/sdk/lib/io/path_impl.dart
@@ -4,16 +4,16 @@
 
 part of dart.io;
 
-class _Path implements Path {
+class __Path implements _Path {
   final String _path;
   final bool isWindowsShare;
 
-  _Path(String source)
+  __Path(String source)
       : _path = _clean(source), isWindowsShare = _isWindowsShare(source);
 
-  _Path.raw(String source) : _path = source, isWindowsShare = false;
+  __Path.raw(String source) : _path = source, isWindowsShare = false;
 
-  _Path._internal(String this._path, bool this.isWindowsShare);
+  __Path._internal(String this._path, bool this.isWindowsShare);
 
   static String _clean(String source) {
     if (Platform.operatingSystem == 'windows') return _cleanWindows(source);
@@ -44,14 +44,14 @@
 
   String toString() => _path;
 
-  Path relativeTo(Path base) {
+  _Path relativeTo(_Path base) {
     // Returns a path "relative" such that
     // base.join(relative) == this.canonicalize.
     // Throws exception if an impossible case is reached.
     if (base.isAbsolute != isAbsolute ||
         base.isWindowsShare != isWindowsShare) {
       throw new ArgumentError(
-          "Invalid case of Path.relativeTo(base):\n"
+          "Invalid case of _Path.relativeTo(base):\n"
           "  Path and base must both be relative, or both absolute.\n"
           "  Arguments: $_path.relativeTo($base)");
     }
@@ -71,17 +71,17 @@
           if(basePath[1] != _path[1]) {
             // Replace the drive letter in basePath with that from _path.
             basePath = '/${_path[1]}:/${basePath.substring(4)}';
-            base = new Path(basePath);
+            base = new _Path(basePath);
           }
         } else {
           throw new ArgumentError(
-              "Invalid case of Path.relativeTo(base):\n"
+              "Invalid case of _Path.relativeTo(base):\n"
               "  Base path and target path are on different Windows drives.\n"
               "  Arguments: $_path.relativeTo($base)");
         }
       } else if (baseHasDrive != pathHasDrive) {
         throw new ArgumentError(
-            "Invalid case of Path.relativeTo(base):\n"
+            "Invalid case of _Path.relativeTo(base):\n"
             "  Base path must start with a drive letter if and "
             "only if target path does.\n"
             "  Arguments: $_path.relativeTo($base)");
@@ -89,7 +89,7 @@
 
     }
     if (_path.startsWith(basePath)) {
-      if (_path == basePath) return new Path('.');
+      if (_path == basePath) return new _Path('.');
       // There must be a '/' at the end of the match, or immediately after.
       int matchEnd = basePath.length;
       if (_path[matchEnd - 1] == '/' || _path[matchEnd] == '/') {
@@ -97,7 +97,7 @@
         while (matchEnd < _path.length && _path[matchEnd] == '/') {
           matchEnd++;
         }
-        return new Path(_path.substring(matchEnd)).canonicalize();
+        return new _Path(_path.substring(matchEnd)).canonicalize();
       }
     }
 
@@ -118,7 +118,7 @@
 
     if (common < baseSegments.length && baseSegments[common] == '..') {
       throw new ArgumentError(
-          "Invalid case of Path.relativeTo(base):\n"
+          "Invalid case of _Path.relativeTo(base):\n"
           "  Base path has more '..'s than path does.\n"
           "  Arguments: $_path.relativeTo($base)");
     }
@@ -134,11 +134,11 @@
     if (hasTrailingSeparator) {
         segments.add('');
     }
-    return new Path(segments.join('/'));
+    return new _Path(segments.join('/'));
   }
 
 
-  Path join(Path further) {
+  _Path join(_Path further) {
     if (further.isAbsolute) {
       throw new ArgumentError(
           "Path.join called with absolute Path as argument.");
@@ -147,17 +147,17 @@
       return further.canonicalize();
     }
     if (hasTrailingSeparator) {
-      var joined = new _Path._internal('$_path${further}', isWindowsShare);
+      var joined = new __Path._internal('$_path${further}', isWindowsShare);
       return joined.canonicalize();
     }
-    var joined = new _Path._internal('$_path/${further}', isWindowsShare);
+    var joined = new __Path._internal('$_path/${further}', isWindowsShare);
     return joined.canonicalize();
   }
 
   // Note: The URI RFC names for canonicalize, join, and relativeTo
   // are normalize, resolve, and relativize.  But resolve and relativize
   // drop the last segment of the base path (the filename), on URIs.
-  Path canonicalize() {
+  _Path canonicalize() {
     if (isCanonical) return this;
     return makeCanonical();
   }
@@ -184,7 +184,7 @@
     return !segs.any((s) => s == '' || s == '.' || s == '..');
   }
 
-  Path makeCanonical() {
+  _Path makeCanonical() {
     bool isAbs = isAbsolute;
     List segs = segments();
     String drive;
@@ -242,7 +242,7 @@
         segmentsToJoin.add('');
       }
     }
-    return new _Path._internal(segmentsToJoin.join('/'), isWindowsShare);
+    return new __Path._internal(segmentsToJoin.join('/'), isWindowsShare);
   }
 
   String toNativePath() {
@@ -271,13 +271,13 @@
     return result;
   }
 
-  Path append(String finalSegment) {
+  _Path append(String finalSegment) {
     if (isEmpty) {
-      return new _Path._internal(finalSegment, isWindowsShare);
+      return new __Path._internal(finalSegment, isWindowsShare);
     } else if (hasTrailingSeparator) {
-      return new _Path._internal('$_path$finalSegment', isWindowsShare);
+      return new __Path._internal('$_path$finalSegment', isWindowsShare);
     } else {
-      return new _Path._internal('$_path/$finalSegment', isWindowsShare);
+      return new __Path._internal('$_path/$finalSegment', isWindowsShare);
     }
   }
 
@@ -294,12 +294,12 @@
     return (pos < 0) ? '' : name.substring(pos + 1);
   }
 
-  Path get directoryPath {
+  _Path get directoryPath {
     int pos = _path.lastIndexOf('/');
-    if (pos < 0) return new Path('');
+    if (pos < 0) return new _Path('');
     while (pos > 0 && _path[pos - 1] == '/') --pos;
     var dirPath = (pos > 0) ? _path.substring(0, pos) : '/';
-    return new _Path._internal(dirPath, isWindowsShare);
+    return new __Path._internal(dirPath, isWindowsShare);
   }
 
   String get filename {
diff --git a/sdk/lib/io/secure_socket.dart b/sdk/lib/io/secure_socket.dart
index f2a33e2..1867050 100644
--- a/sdk/lib/io/secure_socket.dart
+++ b/sdk/lib/io/secure_socket.dart
@@ -204,117 +204,7 @@
    */
   external static void initialize({String database,
                                    String password,
-                                   bool useBuiltinRoots: true,
-                                   bool readOnly: true});
-
-  /**
-   * Trust strings for use in [addCertificate] and [changeTrust].
-   */
-  static const String TRUST_ISSUE_SERVER_CERTIFICATES = 'C,,';
-  static const String TRUST_ISSUE_CLIENT_CERTIFICATES = 'T,,';
-  static const String TRUST_ISSUE_CLIENT_SERVER_CERTIFICATES = 'TC,,';
-  static const String TRUST_CERTIFICATE = 'P,,';
-
-  /**
-   * Adds a X509 certificate (for SSL and TLS secure networking) to the
-   * in-memory certificate cache.  Returns an X509Certificate object
-   * with information about the added certificate.
-   *
-   * The in-memory certificate cache is different from the certificate
-   * database opened by `SecureSocket.initialize`, and certificates added
-   * by [addCertificate] cannot be modified or removed by [changeTrust]
-   * or [removeCertificate].  However, if the certificate is already in the
-   * database, then [removeCertificate] will remove it from both the database
-   * and the in-memory cache.
-   *
-   * [certificate] must be a list of bytes encoding a certificate in
-   *  PEM format: a base64 encoded DER certificate, enclosed between
-   * "-----BEGIN CERTIFICATE-----" and "-----END CERTIFICATE-----".
-   *
-   * [trust] is a string specifying the allowed uses of this certificate.
-   * For example, 'TC,,' specifies that the certificate is for a certificate
-   * authority that is trusted to issue server and client certificates, so
-   * that a server or client certificate signed by this authority will be
-   * accepted.
-   *
-   * See the documentation of NSS certutil at
-   * http://developer.mozilla.org/en-US/docs/NSS_reference/NSS_tools_:_certutil
-   * or
-   * http://blogs.oracle.com/meena/entry/notes_about_trust_flags
-   * for more information about trust attributes.
-   */
-  external static X509Certificate addCertificate(List<int> certificate,
-                                                 String trust);
-
-  /**
-   * Adds a X509 certificates (for SSL and TLS secure networking) with
-   * their private keys to the certificate database.  SecureSocket.initialize
-   * must have been called with the path to a certificate database, and with
-   * readOnly set to `false`.
-   *
-   * [certificates] must be a list containing the bytes of a PKCS #12 encoded
-   * list of certificates and private keys.  These are commonly called
-   * `.pfx` or `.p12` files.  Only PKCS #12 files using
-   * 3-key triple-DES and 40 bit RC2 encryption are accepted.
-   *
-   * All certificates are imported with no default trust, and the appropriate
-   * uses of each certificate must be added with `SecureSocket.changeTrust`.
-   *
-   * See the documentation of NSS certutil at
-   * http://developer.mozilla.org/en-US/docs/NSS_reference/NSS_tools_:_certutil
-   * or
-   * http://blogs.oracle.com/meena/entry/notes_about_trust_flags
-   * for more information about trust attributes.
-   *
-   * Returns a CertificateError if it fails. The error code -8183 does not
-   * indicate that the PKCS #12 file is corrupt.  It also is returned if
-   * the certificate database is read-only, or is the default internal database,
-   * or if the password for the file or database is incorrect.
-   */
-  external static importCertificatesWithPrivateKeys(List<int> certificates,
-                                                    String password);
-
-  /**
-   * Changes the trust settings for the certificate with nickname [nickname].
-   * This certificate must exist in the certificate database.
-   * SecureSocket.initialize must have been called with the path to a
-   * certificate database, and with readOnly set to false.
-   *
-   * [trust] is a string specifying the allowed uses of this certificate.
-   * For example, 'TC,,' specifies that the certificate is for a certificate
-   * authority that is trusted to issue server and client certificates, so
-   * that a server or client certificate signed by this authority will be
-   * accepted.
-   *
-   * See the documentation of NSS certutil at
-   * http://developer.mozilla.org/en-US/docs/NSS_reference/NSS_tools_:_certutil
-   * or
-   * http://blogs.oracle.com/meena/entry/notes_about_trust_flags
-   * for more information about trust attributes.
-   */
-  external static X509Certificate changeTrust(String nickname,
-                                              String trust);
-
-  /**
-   * Gets the certificate with nickname [nickname] from
-   * the certificate database.  Returns an X509Certificate object with
-   * information about the certificate.
-   *
-   * Throws a CertificateException if it cannot find the certificate with
-   * the given nickname.
-   */
-  external static X509Certificate getCertificate(String nickname);
-
-  /**
-   * Removes the certificate with nickname [nickname] permanently from
-   * the certificate database.
-   * This certificate must exist in the certificate database.
-   * SecureSocket.initialize must have been called with the path to a
-   * certificate database, and with readOnly set to false.
-   *
-   * Returns null if it cannot find the certificate with that nickname.
-   */
-  external static removeCertificate(String nickname);
+                                   bool useBuiltinRoots: true});
 }
 
 
@@ -522,8 +412,7 @@
   static final int NUM_BUFFERS = 4;
 
   // Is a buffer identifier for an encrypted buffer?
-  static bool _isBufferEncrypted(int identifier) =>
-      identifier >= READ_ENCRYPTED;
+  static bool _isBufferEncrypted(int identifier) => identifier >= READ_ENCRYPTED;
 
   RawSocket _socket;
   final Completer<_RawSecureSocket> _handshakeComplete =
diff --git a/sdk/lib/io/socket.dart b/sdk/lib/io/socket.dart
index 8c2a21b..c5b4b8d 100644
--- a/sdk/lib/io/socket.dart
+++ b/sdk/lib/io/socket.dart
@@ -417,9 +417,10 @@
 }
 
 /**
- * A high-level class for communicating over a TCP socket. The [Socket] exposes
- * both a [Stream] and a [IOSink] interface, making it ideal for
- * using together with other [Stream]s.
+ * A high-level class for communicating over a TCP socket. 
+ *
+ * The [Socket] exposes both a [Stream] and a [IOSink] interface, making it 
+ * ideal for using together with other [Stream]s.
  */
 abstract class Socket implements Stream<List<int>>, IOSink {
   /**
diff --git a/sdk/lib/io/websocket.dart b/sdk/lib/io/websocket.dart
index b67f89e..a3f2b25 100644
--- a/sdk/lib/io/websocket.dart
+++ b/sdk/lib/io/websocket.dart
@@ -76,9 +76,10 @@
 
 
 /**
- * A client or server web socket connection. The stream exposes the
- * messages received. A text message will be of type [:String:] and a
- * binary message will be of type [:List<int>:].
+ * A two-way HTTP communication object for client or server applications.
+ *
+ * The stream exposes the messages received. A text message will be of type 
+ * [:String:] and a binary message will be of type [:List<int>:].
  */
 abstract class WebSocket implements Stream, StreamSink {
   /**
diff --git a/sdk/lib/json/json.dart b/sdk/lib/json/json.dart
index 28d3df9..5fd3a6a 100644
--- a/sdk/lib/json/json.dart
+++ b/sdk/lib/json/json.dart
@@ -2,6 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+/**
+ * Utilities for encoding and decoding JSON (JavaScript Object Notation) data.
+ */
+
 library dart.json;
 
 // JSON parsing and serialization.
@@ -57,7 +61,7 @@
  * The optional [reviver] function, if provided, is called once for each
  * object or list property parsed. The arguments are the property name
  * ([String]) or list index ([int]), and the value is the parsed value.
- * The return value of the revivier will be used as the value of that property
+ * The return value of the reviver will be used as the value of that property
  * instead the parsed value.
  *
  * Throws [FormatException] if the input is not valid JSON text.
@@ -177,7 +181,7 @@
   void handleString(String value) { this.value = value; }
   void handleNumber(num value) { this.value = value; }
   void handleBool(bool value) { this.value = value; }
-  void handleNull() { this.value = value; }
+  void handleNull() { this.value = null; }
 
   void beginObject() {
     pushContainer();
diff --git a/sdk/lib/math/math.dart b/sdk/lib/math/math.dart
index 6cea069..0c1f67f 100644
--- a/sdk/lib/math/math.dart
+++ b/sdk/lib/math/math.dart
@@ -2,6 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+/**
+ * Mathematical constants and functions, plus a random number generator.
+ */
 library dart.math;
 
 part "random.dart";
diff --git a/sdk/lib/mirrors/mirrors.dart b/sdk/lib/mirrors/mirrors.dart
index c41c6c2..b0d39d9 100644
--- a/sdk/lib/mirrors/mirrors.dart
+++ b/sdk/lib/mirrors/mirrors.dart
@@ -13,37 +13,37 @@
 // setters for the purposes of member lookup.
 
 /**
- * The mirrors library provides basic reflection support for Dart.
- * Reflection here is limited to introspection and dynamic
- * evaluation.
+ * Basic reflection in Dart,
+ * with support for introspection and dynamic evaluation.
  *
- * Introspection is that subset of reflection by which a running
+ * *Introspection* is that subset of reflection by which a running
  * program can examine its own structure. For example, a function
  * that prints out the names of all the members of an arbitrary object.
  *
- * Dynamic evaluation refers the ability to evaluate code that
+ * *Dynamic evaluation* refers the ability to evaluate code that
  * has not been literally specified at compile time, such as calling a method
  * whose name is provided as an argument (because it is looked up
  * in a database, or provided interactively by the user).
  *
- * How to Interpret the Dartdoc specifications below
+ * ## How to interpret this library's documentation
  *
  * As a rule, the names of Dart declarations are represented using
- * instances of class [Symbol]. Whenever we speak of an object *s*
- * of class [Symbol] denoting a name, we mean the string that
+ * instances of class [Symbol]. Whenever the doc speaks of an object *s*
+ * of class [Symbol] denoting a name, it means the string that
  * was used to construct *s*.
  *
- * We will also frequently abuse notation and write
- * Dart pseudo-code such as [:o.x(a):], where we have defined
- * o and a to be objects; what is actually meant in these
+ * The documentation frequently abuses notation with
+ * Dart pseudo-code such as [:o.x(a):], where
+ * o and a are defined to be objects; what is actually meant in these
  * cases is [:o'.x(a'):] where *o'* and *a'* are Dart variables
  * bound to *o* and *a* respectively. Furthermore, *o'* and *a'*
  * are assumed to be fresh variables (meaning that they are
  * distinct from any other variables in the program).
  *
+ * Sometimes the documentation refers to *serializable* objects.
  * An object is serializable across isolates if and only if it is an instance of
- * either num, bool, String, a list of objects that are serializable
- * across isolates or a map whose keys and values are all serializable across
+ * num, bool, String, a list of objects that are serializable
+ * across isolates, or a map with keys and values that are all serializable across
  * isolates.
  */
 library dart.mirrors;
diff --git a/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart b/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart
index 0c761ff..a145ff2 100644
--- a/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart
+++ b/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart
@@ -2,7 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/// The Dart TypedData library.
+/**
+ * Specialized integers and floating point numbers,
+ * with SIMD support and efficient lists.
+ */
 library dart.typed_data;
 
 import 'dart:collection';
@@ -931,264 +934,270 @@
   /// Extracted w value.
   double get w => _storage[3];
 
-  Float32x4 get xxxx => _shuffle(0x0);
-  Float32x4 get xxxy => _shuffle(0x40);
-  Float32x4 get xxxz => _shuffle(0x80);
-  Float32x4 get xxxw => _shuffle(0xC0);
-  Float32x4 get xxyx => _shuffle(0x10);
-  Float32x4 get xxyy => _shuffle(0x50);
-  Float32x4 get xxyz => _shuffle(0x90);
-  Float32x4 get xxyw => _shuffle(0xD0);
-  Float32x4 get xxzx => _shuffle(0x20);
-  Float32x4 get xxzy => _shuffle(0x60);
-  Float32x4 get xxzz => _shuffle(0xA0);
-  Float32x4 get xxzw => _shuffle(0xE0);
-  Float32x4 get xxwx => _shuffle(0x30);
-  Float32x4 get xxwy => _shuffle(0x70);
-  Float32x4 get xxwz => _shuffle(0xB0);
-  Float32x4 get xxww => _shuffle(0xF0);
-  Float32x4 get xyxx => _shuffle(0x4);
-  Float32x4 get xyxy => _shuffle(0x44);
-  Float32x4 get xyxz => _shuffle(0x84);
-  Float32x4 get xyxw => _shuffle(0xC4);
-  Float32x4 get xyyx => _shuffle(0x14);
-  Float32x4 get xyyy => _shuffle(0x54);
-  Float32x4 get xyyz => _shuffle(0x94);
-  Float32x4 get xyyw => _shuffle(0xD4);
-  Float32x4 get xyzx => _shuffle(0x24);
-  Float32x4 get xyzy => _shuffle(0x64);
-  Float32x4 get xyzz => _shuffle(0xA4);
-  Float32x4 get xyzw => _shuffle(0xE4);
-  Float32x4 get xywx => _shuffle(0x34);
-  Float32x4 get xywy => _shuffle(0x74);
-  Float32x4 get xywz => _shuffle(0xB4);
-  Float32x4 get xyww => _shuffle(0xF4);
-  Float32x4 get xzxx => _shuffle(0x8);
-  Float32x4 get xzxy => _shuffle(0x48);
-  Float32x4 get xzxz => _shuffle(0x88);
-  Float32x4 get xzxw => _shuffle(0xC8);
-  Float32x4 get xzyx => _shuffle(0x18);
-  Float32x4 get xzyy => _shuffle(0x58);
-  Float32x4 get xzyz => _shuffle(0x98);
-  Float32x4 get xzyw => _shuffle(0xD8);
-  Float32x4 get xzzx => _shuffle(0x28);
-  Float32x4 get xzzy => _shuffle(0x68);
-  Float32x4 get xzzz => _shuffle(0xA8);
-  Float32x4 get xzzw => _shuffle(0xE8);
-  Float32x4 get xzwx => _shuffle(0x38);
-  Float32x4 get xzwy => _shuffle(0x78);
-  Float32x4 get xzwz => _shuffle(0xB8);
-  Float32x4 get xzww => _shuffle(0xF8);
-  Float32x4 get xwxx => _shuffle(0xC);
-  Float32x4 get xwxy => _shuffle(0x4C);
-  Float32x4 get xwxz => _shuffle(0x8C);
-  Float32x4 get xwxw => _shuffle(0xCC);
-  Float32x4 get xwyx => _shuffle(0x1C);
-  Float32x4 get xwyy => _shuffle(0x5C);
-  Float32x4 get xwyz => _shuffle(0x9C);
-  Float32x4 get xwyw => _shuffle(0xDC);
-  Float32x4 get xwzx => _shuffle(0x2C);
-  Float32x4 get xwzy => _shuffle(0x6C);
-  Float32x4 get xwzz => _shuffle(0xAC);
-  Float32x4 get xwzw => _shuffle(0xEC);
-  Float32x4 get xwwx => _shuffle(0x3C);
-  Float32x4 get xwwy => _shuffle(0x7C);
-  Float32x4 get xwwz => _shuffle(0xBC);
-  Float32x4 get xwww => _shuffle(0xFC);
-  Float32x4 get yxxx => _shuffle(0x1);
-  Float32x4 get yxxy => _shuffle(0x41);
-  Float32x4 get yxxz => _shuffle(0x81);
-  Float32x4 get yxxw => _shuffle(0xC1);
-  Float32x4 get yxyx => _shuffle(0x11);
-  Float32x4 get yxyy => _shuffle(0x51);
-  Float32x4 get yxyz => _shuffle(0x91);
-  Float32x4 get yxyw => _shuffle(0xD1);
-  Float32x4 get yxzx => _shuffle(0x21);
-  Float32x4 get yxzy => _shuffle(0x61);
-  Float32x4 get yxzz => _shuffle(0xA1);
-  Float32x4 get yxzw => _shuffle(0xE1);
-  Float32x4 get yxwx => _shuffle(0x31);
-  Float32x4 get yxwy => _shuffle(0x71);
-  Float32x4 get yxwz => _shuffle(0xB1);
-  Float32x4 get yxww => _shuffle(0xF1);
-  Float32x4 get yyxx => _shuffle(0x5);
-  Float32x4 get yyxy => _shuffle(0x45);
-  Float32x4 get yyxz => _shuffle(0x85);
-  Float32x4 get yyxw => _shuffle(0xC5);
-  Float32x4 get yyyx => _shuffle(0x15);
-  Float32x4 get yyyy => _shuffle(0x55);
-  Float32x4 get yyyz => _shuffle(0x95);
-  Float32x4 get yyyw => _shuffle(0xD5);
-  Float32x4 get yyzx => _shuffle(0x25);
-  Float32x4 get yyzy => _shuffle(0x65);
-  Float32x4 get yyzz => _shuffle(0xA5);
-  Float32x4 get yyzw => _shuffle(0xE5);
-  Float32x4 get yywx => _shuffle(0x35);
-  Float32x4 get yywy => _shuffle(0x75);
-  Float32x4 get yywz => _shuffle(0xB5);
-  Float32x4 get yyww => _shuffle(0xF5);
-  Float32x4 get yzxx => _shuffle(0x9);
-  Float32x4 get yzxy => _shuffle(0x49);
-  Float32x4 get yzxz => _shuffle(0x89);
-  Float32x4 get yzxw => _shuffle(0xC9);
-  Float32x4 get yzyx => _shuffle(0x19);
-  Float32x4 get yzyy => _shuffle(0x59);
-  Float32x4 get yzyz => _shuffle(0x99);
-  Float32x4 get yzyw => _shuffle(0xD9);
-  Float32x4 get yzzx => _shuffle(0x29);
-  Float32x4 get yzzy => _shuffle(0x69);
-  Float32x4 get yzzz => _shuffle(0xA9);
-  Float32x4 get yzzw => _shuffle(0xE9);
-  Float32x4 get yzwx => _shuffle(0x39);
-  Float32x4 get yzwy => _shuffle(0x79);
-  Float32x4 get yzwz => _shuffle(0xB9);
-  Float32x4 get yzww => _shuffle(0xF9);
-  Float32x4 get ywxx => _shuffle(0xD);
-  Float32x4 get ywxy => _shuffle(0x4D);
-  Float32x4 get ywxz => _shuffle(0x8D);
-  Float32x4 get ywxw => _shuffle(0xCD);
-  Float32x4 get ywyx => _shuffle(0x1D);
-  Float32x4 get ywyy => _shuffle(0x5D);
-  Float32x4 get ywyz => _shuffle(0x9D);
-  Float32x4 get ywyw => _shuffle(0xDD);
-  Float32x4 get ywzx => _shuffle(0x2D);
-  Float32x4 get ywzy => _shuffle(0x6D);
-  Float32x4 get ywzz => _shuffle(0xAD);
-  Float32x4 get ywzw => _shuffle(0xED);
-  Float32x4 get ywwx => _shuffle(0x3D);
-  Float32x4 get ywwy => _shuffle(0x7D);
-  Float32x4 get ywwz => _shuffle(0xBD);
-  Float32x4 get ywww => _shuffle(0xFD);
-  Float32x4 get zxxx => _shuffle(0x2);
-  Float32x4 get zxxy => _shuffle(0x42);
-  Float32x4 get zxxz => _shuffle(0x82);
-  Float32x4 get zxxw => _shuffle(0xC2);
-  Float32x4 get zxyx => _shuffle(0x12);
-  Float32x4 get zxyy => _shuffle(0x52);
-  Float32x4 get zxyz => _shuffle(0x92);
-  Float32x4 get zxyw => _shuffle(0xD2);
-  Float32x4 get zxzx => _shuffle(0x22);
-  Float32x4 get zxzy => _shuffle(0x62);
-  Float32x4 get zxzz => _shuffle(0xA2);
-  Float32x4 get zxzw => _shuffle(0xE2);
-  Float32x4 get zxwx => _shuffle(0x32);
-  Float32x4 get zxwy => _shuffle(0x72);
-  Float32x4 get zxwz => _shuffle(0xB2);
-  Float32x4 get zxww => _shuffle(0xF2);
-  Float32x4 get zyxx => _shuffle(0x6);
-  Float32x4 get zyxy => _shuffle(0x46);
-  Float32x4 get zyxz => _shuffle(0x86);
-  Float32x4 get zyxw => _shuffle(0xC6);
-  Float32x4 get zyyx => _shuffle(0x16);
-  Float32x4 get zyyy => _shuffle(0x56);
-  Float32x4 get zyyz => _shuffle(0x96);
-  Float32x4 get zyyw => _shuffle(0xD6);
-  Float32x4 get zyzx => _shuffle(0x26);
-  Float32x4 get zyzy => _shuffle(0x66);
-  Float32x4 get zyzz => _shuffle(0xA6);
-  Float32x4 get zyzw => _shuffle(0xE6);
-  Float32x4 get zywx => _shuffle(0x36);
-  Float32x4 get zywy => _shuffle(0x76);
-  Float32x4 get zywz => _shuffle(0xB6);
-  Float32x4 get zyww => _shuffle(0xF6);
-  Float32x4 get zzxx => _shuffle(0xA);
-  Float32x4 get zzxy => _shuffle(0x4A);
-  Float32x4 get zzxz => _shuffle(0x8A);
-  Float32x4 get zzxw => _shuffle(0xCA);
-  Float32x4 get zzyx => _shuffle(0x1A);
-  Float32x4 get zzyy => _shuffle(0x5A);
-  Float32x4 get zzyz => _shuffle(0x9A);
-  Float32x4 get zzyw => _shuffle(0xDA);
-  Float32x4 get zzzx => _shuffle(0x2A);
-  Float32x4 get zzzy => _shuffle(0x6A);
-  Float32x4 get zzzz => _shuffle(0xAA);
-  Float32x4 get zzzw => _shuffle(0xEA);
-  Float32x4 get zzwx => _shuffle(0x3A);
-  Float32x4 get zzwy => _shuffle(0x7A);
-  Float32x4 get zzwz => _shuffle(0xBA);
-  Float32x4 get zzww => _shuffle(0xFA);
-  Float32x4 get zwxx => _shuffle(0xE);
-  Float32x4 get zwxy => _shuffle(0x4E);
-  Float32x4 get zwxz => _shuffle(0x8E);
-  Float32x4 get zwxw => _shuffle(0xCE);
-  Float32x4 get zwyx => _shuffle(0x1E);
-  Float32x4 get zwyy => _shuffle(0x5E);
-  Float32x4 get zwyz => _shuffle(0x9E);
-  Float32x4 get zwyw => _shuffle(0xDE);
-  Float32x4 get zwzx => _shuffle(0x2E);
-  Float32x4 get zwzy => _shuffle(0x6E);
-  Float32x4 get zwzz => _shuffle(0xAE);
-  Float32x4 get zwzw => _shuffle(0xEE);
-  Float32x4 get zwwx => _shuffle(0x3E);
-  Float32x4 get zwwy => _shuffle(0x7E);
-  Float32x4 get zwwz => _shuffle(0xBE);
-  Float32x4 get zwww => _shuffle(0xFE);
-  Float32x4 get wxxx => _shuffle(0x3);
-  Float32x4 get wxxy => _shuffle(0x43);
-  Float32x4 get wxxz => _shuffle(0x83);
-  Float32x4 get wxxw => _shuffle(0xC3);
-  Float32x4 get wxyx => _shuffle(0x13);
-  Float32x4 get wxyy => _shuffle(0x53);
-  Float32x4 get wxyz => _shuffle(0x93);
-  Float32x4 get wxyw => _shuffle(0xD3);
-  Float32x4 get wxzx => _shuffle(0x23);
-  Float32x4 get wxzy => _shuffle(0x63);
-  Float32x4 get wxzz => _shuffle(0xA3);
-  Float32x4 get wxzw => _shuffle(0xE3);
-  Float32x4 get wxwx => _shuffle(0x33);
-  Float32x4 get wxwy => _shuffle(0x73);
-  Float32x4 get wxwz => _shuffle(0xB3);
-  Float32x4 get wxww => _shuffle(0xF3);
-  Float32x4 get wyxx => _shuffle(0x7);
-  Float32x4 get wyxy => _shuffle(0x47);
-  Float32x4 get wyxz => _shuffle(0x87);
-  Float32x4 get wyxw => _shuffle(0xC7);
-  Float32x4 get wyyx => _shuffle(0x17);
-  Float32x4 get wyyy => _shuffle(0x57);
-  Float32x4 get wyyz => _shuffle(0x97);
-  Float32x4 get wyyw => _shuffle(0xD7);
-  Float32x4 get wyzx => _shuffle(0x27);
-  Float32x4 get wyzy => _shuffle(0x67);
-  Float32x4 get wyzz => _shuffle(0xA7);
-  Float32x4 get wyzw => _shuffle(0xE7);
-  Float32x4 get wywx => _shuffle(0x37);
-  Float32x4 get wywy => _shuffle(0x77);
-  Float32x4 get wywz => _shuffle(0xB7);
-  Float32x4 get wyww => _shuffle(0xF7);
-  Float32x4 get wzxx => _shuffle(0xB);
-  Float32x4 get wzxy => _shuffle(0x4B);
-  Float32x4 get wzxz => _shuffle(0x8B);
-  Float32x4 get wzxw => _shuffle(0xCB);
-  Float32x4 get wzyx => _shuffle(0x1B);
-  Float32x4 get wzyy => _shuffle(0x5B);
-  Float32x4 get wzyz => _shuffle(0x9B);
-  Float32x4 get wzyw => _shuffle(0xDB);
-  Float32x4 get wzzx => _shuffle(0x2B);
-  Float32x4 get wzzy => _shuffle(0x6B);
-  Float32x4 get wzzz => _shuffle(0xAB);
-  Float32x4 get wzzw => _shuffle(0xEB);
-  Float32x4 get wzwx => _shuffle(0x3B);
-  Float32x4 get wzwy => _shuffle(0x7B);
-  Float32x4 get wzwz => _shuffle(0xBB);
-  Float32x4 get wzww => _shuffle(0xFB);
-  Float32x4 get wwxx => _shuffle(0xF);
-  Float32x4 get wwxy => _shuffle(0x4F);
-  Float32x4 get wwxz => _shuffle(0x8F);
-  Float32x4 get wwxw => _shuffle(0xCF);
-  Float32x4 get wwyx => _shuffle(0x1F);
-  Float32x4 get wwyy => _shuffle(0x5F);
-  Float32x4 get wwyz => _shuffle(0x9F);
-  Float32x4 get wwyw => _shuffle(0xDF);
-  Float32x4 get wwzx => _shuffle(0x2F);
-  Float32x4 get wwzy => _shuffle(0x6F);
-  Float32x4 get wwzz => _shuffle(0xAF);
-  Float32x4 get wwzw => _shuffle(0xEF);
-  Float32x4 get wwwx => _shuffle(0x3F);
-  Float32x4 get wwwy => _shuffle(0x7F);
-  Float32x4 get wwwz => _shuffle(0xBF);
-  Float32x4 get wwww => _shuffle(0xFF);
+  /// Mask passed to [shuffle].
+  static const int XXXX = 0x0;
+  static const int XXXY = 0x40;
+  static const int XXXZ = 0x80;
+  static const int XXXW = 0xC0;
+  static const int XXYX = 0x10;
+  static const int XXYY = 0x50;
+  static const int XXYZ = 0x90;
+  static const int XXYW = 0xD0;
+  static const int XXZX = 0x20;
+  static const int XXZY = 0x60;
+  static const int XXZZ = 0xA0;
+  static const int XXZW = 0xE0;
+  static const int XXWX = 0x30;
+  static const int XXWY = 0x70;
+  static const int XXWZ = 0xB0;
+  static const int XXWW = 0xF0;
+  static const int XYXX = 0x4;
+  static const int XYXY = 0x44;
+  static const int XYXZ = 0x84;
+  static const int XYXW = 0xC4;
+  static const int XYYX = 0x14;
+  static const int XYYY = 0x54;
+  static const int XYYZ = 0x94;
+  static const int XYYW = 0xD4;
+  static const int XYZX = 0x24;
+  static const int XYZY = 0x64;
+  static const int XYZZ = 0xA4;
+  static const int XYZW = 0xE4;
+  static const int XYWX = 0x34;
+  static const int XYWY = 0x74;
+  static const int XYWZ = 0xB4;
+  static const int XYWW = 0xF4;
+  static const int XZXX = 0x8;
+  static const int XZXY = 0x48;
+  static const int XZXZ = 0x88;
+  static const int XZXW = 0xC8;
+  static const int XZYX = 0x18;
+  static const int XZYY = 0x58;
+  static const int XZYZ = 0x98;
+  static const int XZYW = 0xD8;
+  static const int XZZX = 0x28;
+  static const int XZZY = 0x68;
+  static const int XZZZ = 0xA8;
+  static const int XZZW = 0xE8;
+  static const int XZWX = 0x38;
+  static const int XZWY = 0x78;
+  static const int XZWZ = 0xB8;
+  static const int XZWW = 0xF8;
+  static const int XWXX = 0xC;
+  static const int XWXY = 0x4C;
+  static const int XWXZ = 0x8C;
+  static const int XWXW = 0xCC;
+  static const int XWYX = 0x1C;
+  static const int XWYY = 0x5C;
+  static const int XWYZ = 0x9C;
+  static const int XWYW = 0xDC;
+  static const int XWZX = 0x2C;
+  static const int XWZY = 0x6C;
+  static const int XWZZ = 0xAC;
+  static const int XWZW = 0xEC;
+  static const int XWWX = 0x3C;
+  static const int XWWY = 0x7C;
+  static const int XWWZ = 0xBC;
+  static const int XWWW = 0xFC;
+  static const int YXXX = 0x1;
+  static const int YXXY = 0x41;
+  static const int YXXZ = 0x81;
+  static const int YXXW = 0xC1;
+  static const int YXYX = 0x11;
+  static const int YXYY = 0x51;
+  static const int YXYZ = 0x91;
+  static const int YXYW = 0xD1;
+  static const int YXZX = 0x21;
+  static const int YXZY = 0x61;
+  static const int YXZZ = 0xA1;
+  static const int YXZW = 0xE1;
+  static const int YXWX = 0x31;
+  static const int YXWY = 0x71;
+  static const int YXWZ = 0xB1;
+  static const int YXWW = 0xF1;
+  static const int YYXX = 0x5;
+  static const int YYXY = 0x45;
+  static const int YYXZ = 0x85;
+  static const int YYXW = 0xC5;
+  static const int YYYX = 0x15;
+  static const int YYYY = 0x55;
+  static const int YYYZ = 0x95;
+  static const int YYYW = 0xD5;
+  static const int YYZX = 0x25;
+  static const int YYZY = 0x65;
+  static const int YYZZ = 0xA5;
+  static const int YYZW = 0xE5;
+  static const int YYWX = 0x35;
+  static const int YYWY = 0x75;
+  static const int YYWZ = 0xB5;
+  static const int YYWW = 0xF5;
+  static const int YZXX = 0x9;
+  static const int YZXY = 0x49;
+  static const int YZXZ = 0x89;
+  static const int YZXW = 0xC9;
+  static const int YZYX = 0x19;
+  static const int YZYY = 0x59;
+  static const int YZYZ = 0x99;
+  static const int YZYW = 0xD9;
+  static const int YZZX = 0x29;
+  static const int YZZY = 0x69;
+  static const int YZZZ = 0xA9;
+  static const int YZZW = 0xE9;
+  static const int YZWX = 0x39;
+  static const int YZWY = 0x79;
+  static const int YZWZ = 0xB9;
+  static const int YZWW = 0xF9;
+  static const int YWXX = 0xD;
+  static const int YWXY = 0x4D;
+  static const int YWXZ = 0x8D;
+  static const int YWXW = 0xCD;
+  static const int YWYX = 0x1D;
+  static const int YWYY = 0x5D;
+  static const int YWYZ = 0x9D;
+  static const int YWYW = 0xDD;
+  static const int YWZX = 0x2D;
+  static const int YWZY = 0x6D;
+  static const int YWZZ = 0xAD;
+  static const int YWZW = 0xED;
+  static const int YWWX = 0x3D;
+  static const int YWWY = 0x7D;
+  static const int YWWZ = 0xBD;
+  static const int YWWW = 0xFD;
+  static const int ZXXX = 0x2;
+  static const int ZXXY = 0x42;
+  static const int ZXXZ = 0x82;
+  static const int ZXXW = 0xC2;
+  static const int ZXYX = 0x12;
+  static const int ZXYY = 0x52;
+  static const int ZXYZ = 0x92;
+  static const int ZXYW = 0xD2;
+  static const int ZXZX = 0x22;
+  static const int ZXZY = 0x62;
+  static const int ZXZZ = 0xA2;
+  static const int ZXZW = 0xE2;
+  static const int ZXWX = 0x32;
+  static const int ZXWY = 0x72;
+  static const int ZXWZ = 0xB2;
+  static const int ZXWW = 0xF2;
+  static const int ZYXX = 0x6;
+  static const int ZYXY = 0x46;
+  static const int ZYXZ = 0x86;
+  static const int ZYXW = 0xC6;
+  static const int ZYYX = 0x16;
+  static const int ZYYY = 0x56;
+  static const int ZYYZ = 0x96;
+  static const int ZYYW = 0xD6;
+  static const int ZYZX = 0x26;
+  static const int ZYZY = 0x66;
+  static const int ZYZZ = 0xA6;
+  static const int ZYZW = 0xE6;
+  static const int ZYWX = 0x36;
+  static const int ZYWY = 0x76;
+  static const int ZYWZ = 0xB6;
+  static const int ZYWW = 0xF6;
+  static const int ZZXX = 0xA;
+  static const int ZZXY = 0x4A;
+  static const int ZZXZ = 0x8A;
+  static const int ZZXW = 0xCA;
+  static const int ZZYX = 0x1A;
+  static const int ZZYY = 0x5A;
+  static const int ZZYZ = 0x9A;
+  static const int ZZYW = 0xDA;
+  static const int ZZZX = 0x2A;
+  static const int ZZZY = 0x6A;
+  static const int ZZZZ = 0xAA;
+  static const int ZZZW = 0xEA;
+  static const int ZZWX = 0x3A;
+  static const int ZZWY = 0x7A;
+  static const int ZZWZ = 0xBA;
+  static const int ZZWW = 0xFA;
+  static const int ZWXX = 0xE;
+  static const int ZWXY = 0x4E;
+  static const int ZWXZ = 0x8E;
+  static const int ZWXW = 0xCE;
+  static const int ZWYX = 0x1E;
+  static const int ZWYY = 0x5E;
+  static const int ZWYZ = 0x9E;
+  static const int ZWYW = 0xDE;
+  static const int ZWZX = 0x2E;
+  static const int ZWZY = 0x6E;
+  static const int ZWZZ = 0xAE;
+  static const int ZWZW = 0xEE;
+  static const int ZWWX = 0x3E;
+  static const int ZWWY = 0x7E;
+  static const int ZWWZ = 0xBE;
+  static const int ZWWW = 0xFE;
+  static const int WXXX = 0x3;
+  static const int WXXY = 0x43;
+  static const int WXXZ = 0x83;
+  static const int WXXW = 0xC3;
+  static const int WXYX = 0x13;
+  static const int WXYY = 0x53;
+  static const int WXYZ = 0x93;
+  static const int WXYW = 0xD3;
+  static const int WXZX = 0x23;
+  static const int WXZY = 0x63;
+  static const int WXZZ = 0xA3;
+  static const int WXZW = 0xE3;
+  static const int WXWX = 0x33;
+  static const int WXWY = 0x73;
+  static const int WXWZ = 0xB3;
+  static const int WXWW = 0xF3;
+  static const int WYXX = 0x7;
+  static const int WYXY = 0x47;
+  static const int WYXZ = 0x87;
+  static const int WYXW = 0xC7;
+  static const int WYYX = 0x17;
+  static const int WYYY = 0x57;
+  static const int WYYZ = 0x97;
+  static const int WYYW = 0xD7;
+  static const int WYZX = 0x27;
+  static const int WYZY = 0x67;
+  static const int WYZZ = 0xA7;
+  static const int WYZW = 0xE7;
+  static const int WYWX = 0x37;
+  static const int WYWY = 0x77;
+  static const int WYWZ = 0xB7;
+  static const int WYWW = 0xF7;
+  static const int WZXX = 0xB;
+  static const int WZXY = 0x4B;
+  static const int WZXZ = 0x8B;
+  static const int WZXW = 0xCB;
+  static const int WZYX = 0x1B;
+  static const int WZYY = 0x5B;
+  static const int WZYZ = 0x9B;
+  static const int WZYW = 0xDB;
+  static const int WZZX = 0x2B;
+  static const int WZZY = 0x6B;
+  static const int WZZZ = 0xAB;
+  static const int WZZW = 0xEB;
+  static const int WZWX = 0x3B;
+  static const int WZWY = 0x7B;
+  static const int WZWZ = 0xBB;
+  static const int WZWW = 0xFB;
+  static const int WWXX = 0xF;
+  static const int WWXY = 0x4F;
+  static const int WWXZ = 0x8F;
+  static const int WWXW = 0xCF;
+  static const int WWYX = 0x1F;
+  static const int WWYY = 0x5F;
+  static const int WWYZ = 0x9F;
+  static const int WWYW = 0xDF;
+  static const int WWZX = 0x2F;
+  static const int WWZY = 0x6F;
+  static const int WWZZ = 0xAF;
+  static const int WWZW = 0xEF;
+  static const int WWWX = 0x3F;
+  static const int WWWY = 0x7F;
+  static const int WWWZ = 0xBF;
+  static const int WWWW = 0xFF;
 
-  Float32x4 _shuffle(int m) {
+
+  /// Shuffle the lane values. [mask] must be one of the 256 shuffle constants.
+  Float32x4 shuffle(int m) {
+    if (m < 0 || m > 255) {
+      throw new RangeError('mask $m must be in the range [0..256)');
+    }
     double _x = _storage[m & 0x3];
     double _y = _storage[(m >> 2) & 0x3];
     double _z = _storage[(m >> 4) & 0x3];
@@ -1246,6 +1255,7 @@
     return new Float32x4(_x, _y, _z, _w);
   }
 
+  /// Copy [this] and replace the [x] lane.
   Float32x4 withX(double x) {
     double _x = x;
     double _y = _storage[1];
@@ -1254,6 +1264,7 @@
     return new Float32x4(_x, _y, _z, _w);
   }
 
+  /// Copy [this] and replace the [y] lane.
   Float32x4 withY(double y) {
     double _x = _storage[0];
     double _y = y;
@@ -1262,6 +1273,7 @@
     return new Float32x4(_x, _y, _z, _w);
   }
 
+  /// Copy [this] and replace the [z] lane.
   Float32x4 withZ(double z) {
     double _x = _storage[0];
     double _y = _storage[1];
@@ -1270,6 +1282,7 @@
     return new Float32x4(_x, _y, _z, _w);
   }
 
+  /// Copy [this] and replace the [w] lane.
   Float32x4 withW(double w) {
     double _x = _storage[0];
     double _y = _storage[1];
diff --git a/sdk/lib/typed_data/typed_data.dart b/sdk/lib/typed_data/typed_data.dart
index f75b4bb..7184e47 100644
--- a/sdk/lib/typed_data/typed_data.dart
+++ b/sdk/lib/typed_data/typed_data.dart
@@ -876,518 +876,266 @@
   /// Extracted w value.
   double get w;
 
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xxxx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xxxy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xxxz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xxxw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xxyx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xxyy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xxyz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xxyw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xxzx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xxzy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xxzz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xxzw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xxwx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xxwy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xxwz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xxww;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xyxx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xyxy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xyxz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xyxw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xyyx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xyyy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xyyz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xyyw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xyzx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xyzy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xyzz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xyzw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xywx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xywy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xywz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xyww;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xzxx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xzxy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xzxz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xzxw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xzyx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xzyy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xzyz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xzyw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xzzx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xzzy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xzzz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xzzw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xzwx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xzwy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xzwz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xzww;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xwxx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xwxy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xwxz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xwxw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xwyx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xwyy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xwyz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xwyw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xwzx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xwzy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xwzz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xwzw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xwwx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xwwy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xwwz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get xwww;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yxxx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yxxy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yxxz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yxxw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yxyx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yxyy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yxyz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yxyw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yxzx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yxzy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yxzz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yxzw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yxwx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yxwy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yxwz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yxww;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yyxx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yyxy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yyxz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yyxw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yyyx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yyyy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yyyz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yyyw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yyzx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yyzy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yyzz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yyzw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yywx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yywy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yywz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yyww;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yzxx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yzxy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yzxz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yzxw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yzyx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yzyy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yzyz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yzyw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yzzx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yzzy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yzzz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yzzw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yzwx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yzwy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yzwz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get yzww;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get ywxx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get ywxy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get ywxz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get ywxw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get ywyx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get ywyy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get ywyz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get ywyw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get ywzx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get ywzy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get ywzz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get ywzw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get ywwx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get ywwy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get ywwz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get ywww;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zxxx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zxxy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zxxz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zxxw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zxyx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zxyy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zxyz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zxyw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zxzx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zxzy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zxzz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zxzw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zxwx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zxwy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zxwz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zxww;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zyxx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zyxy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zyxz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zyxw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zyyx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zyyy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zyyz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zyyw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zyzx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zyzy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zyzz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zyzw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zywx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zywy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zywz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zyww;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zzxx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zzxy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zzxz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zzxw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zzyx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zzyy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zzyz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zzyw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zzzx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zzzy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zzzz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zzzw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zzwx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zzwy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zzwz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zzww;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zwxx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zwxy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zwxz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zwxw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zwyx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zwyy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zwyz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zwyw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zwzx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zwzy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zwzz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zwzw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zwwx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zwwy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zwwz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get zwww;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wxxx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wxxy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wxxz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wxxw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wxyx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wxyy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wxyz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wxyw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wxzx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wxzy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wxzz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wxzw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wxwx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wxwy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wxwz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wxww;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wyxx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wyxy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wyxz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wyxw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wyyx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wyyy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wyyz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wyyw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wyzx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wyzy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wyzz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wyzw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wywx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wywy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wywz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wyww;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wzxx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wzxy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wzxz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wzxw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wzyx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wzyy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wzyz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wzyw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wzzx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wzzy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wzzz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wzzw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wzwx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wzwy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wzwz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wzww;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wwxx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wwxy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wwxz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wwxw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wwyx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wwyy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wwyz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wwyw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wwzx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wwzy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wwzz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wwzw;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wwwx;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wwwy;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wwwz;
-  /// Returns a new [Float32x4] with lane values reordered.
-  Float32x4 get wwww;
+  /// Mask passed to [shuffle].
+  static const int XXXX = 0x0;
+  static const int XXXY = 0x40;
+  static const int XXXZ = 0x80;
+  static const int XXXW = 0xC0;
+  static const int XXYX = 0x10;
+  static const int XXYY = 0x50;
+  static const int XXYZ = 0x90;
+  static const int XXYW = 0xD0;
+  static const int XXZX = 0x20;
+  static const int XXZY = 0x60;
+  static const int XXZZ = 0xA0;
+  static const int XXZW = 0xE0;
+  static const int XXWX = 0x30;
+  static const int XXWY = 0x70;
+  static const int XXWZ = 0xB0;
+  static const int XXWW = 0xF0;
+  static const int XYXX = 0x4;
+  static const int XYXY = 0x44;
+  static const int XYXZ = 0x84;
+  static const int XYXW = 0xC4;
+  static const int XYYX = 0x14;
+  static const int XYYY = 0x54;
+  static const int XYYZ = 0x94;
+  static const int XYYW = 0xD4;
+  static const int XYZX = 0x24;
+  static const int XYZY = 0x64;
+  static const int XYZZ = 0xA4;
+  static const int XYZW = 0xE4;
+  static const int XYWX = 0x34;
+  static const int XYWY = 0x74;
+  static const int XYWZ = 0xB4;
+  static const int XYWW = 0xF4;
+  static const int XZXX = 0x8;
+  static const int XZXY = 0x48;
+  static const int XZXZ = 0x88;
+  static const int XZXW = 0xC8;
+  static const int XZYX = 0x18;
+  static const int XZYY = 0x58;
+  static const int XZYZ = 0x98;
+  static const int XZYW = 0xD8;
+  static const int XZZX = 0x28;
+  static const int XZZY = 0x68;
+  static const int XZZZ = 0xA8;
+  static const int XZZW = 0xE8;
+  static const int XZWX = 0x38;
+  static const int XZWY = 0x78;
+  static const int XZWZ = 0xB8;
+  static const int XZWW = 0xF8;
+  static const int XWXX = 0xC;
+  static const int XWXY = 0x4C;
+  static const int XWXZ = 0x8C;
+  static const int XWXW = 0xCC;
+  static const int XWYX = 0x1C;
+  static const int XWYY = 0x5C;
+  static const int XWYZ = 0x9C;
+  static const int XWYW = 0xDC;
+  static const int XWZX = 0x2C;
+  static const int XWZY = 0x6C;
+  static const int XWZZ = 0xAC;
+  static const int XWZW = 0xEC;
+  static const int XWWX = 0x3C;
+  static const int XWWY = 0x7C;
+  static const int XWWZ = 0xBC;
+  static const int XWWW = 0xFC;
+  static const int YXXX = 0x1;
+  static const int YXXY = 0x41;
+  static const int YXXZ = 0x81;
+  static const int YXXW = 0xC1;
+  static const int YXYX = 0x11;
+  static const int YXYY = 0x51;
+  static const int YXYZ = 0x91;
+  static const int YXYW = 0xD1;
+  static const int YXZX = 0x21;
+  static const int YXZY = 0x61;
+  static const int YXZZ = 0xA1;
+  static const int YXZW = 0xE1;
+  static const int YXWX = 0x31;
+  static const int YXWY = 0x71;
+  static const int YXWZ = 0xB1;
+  static const int YXWW = 0xF1;
+  static const int YYXX = 0x5;
+  static const int YYXY = 0x45;
+  static const int YYXZ = 0x85;
+  static const int YYXW = 0xC5;
+  static const int YYYX = 0x15;
+  static const int YYYY = 0x55;
+  static const int YYYZ = 0x95;
+  static const int YYYW = 0xD5;
+  static const int YYZX = 0x25;
+  static const int YYZY = 0x65;
+  static const int YYZZ = 0xA5;
+  static const int YYZW = 0xE5;
+  static const int YYWX = 0x35;
+  static const int YYWY = 0x75;
+  static const int YYWZ = 0xB5;
+  static const int YYWW = 0xF5;
+  static const int YZXX = 0x9;
+  static const int YZXY = 0x49;
+  static const int YZXZ = 0x89;
+  static const int YZXW = 0xC9;
+  static const int YZYX = 0x19;
+  static const int YZYY = 0x59;
+  static const int YZYZ = 0x99;
+  static const int YZYW = 0xD9;
+  static const int YZZX = 0x29;
+  static const int YZZY = 0x69;
+  static const int YZZZ = 0xA9;
+  static const int YZZW = 0xE9;
+  static const int YZWX = 0x39;
+  static const int YZWY = 0x79;
+  static const int YZWZ = 0xB9;
+  static const int YZWW = 0xF9;
+  static const int YWXX = 0xD;
+  static const int YWXY = 0x4D;
+  static const int YWXZ = 0x8D;
+  static const int YWXW = 0xCD;
+  static const int YWYX = 0x1D;
+  static const int YWYY = 0x5D;
+  static const int YWYZ = 0x9D;
+  static const int YWYW = 0xDD;
+  static const int YWZX = 0x2D;
+  static const int YWZY = 0x6D;
+  static const int YWZZ = 0xAD;
+  static const int YWZW = 0xED;
+  static const int YWWX = 0x3D;
+  static const int YWWY = 0x7D;
+  static const int YWWZ = 0xBD;
+  static const int YWWW = 0xFD;
+  static const int ZXXX = 0x2;
+  static const int ZXXY = 0x42;
+  static const int ZXXZ = 0x82;
+  static const int ZXXW = 0xC2;
+  static const int ZXYX = 0x12;
+  static const int ZXYY = 0x52;
+  static const int ZXYZ = 0x92;
+  static const int ZXYW = 0xD2;
+  static const int ZXZX = 0x22;
+  static const int ZXZY = 0x62;
+  static const int ZXZZ = 0xA2;
+  static const int ZXZW = 0xE2;
+  static const int ZXWX = 0x32;
+  static const int ZXWY = 0x72;
+  static const int ZXWZ = 0xB2;
+  static const int ZXWW = 0xF2;
+  static const int ZYXX = 0x6;
+  static const int ZYXY = 0x46;
+  static const int ZYXZ = 0x86;
+  static const int ZYXW = 0xC6;
+  static const int ZYYX = 0x16;
+  static const int ZYYY = 0x56;
+  static const int ZYYZ = 0x96;
+  static const int ZYYW = 0xD6;
+  static const int ZYZX = 0x26;
+  static const int ZYZY = 0x66;
+  static const int ZYZZ = 0xA6;
+  static const int ZYZW = 0xE6;
+  static const int ZYWX = 0x36;
+  static const int ZYWY = 0x76;
+  static const int ZYWZ = 0xB6;
+  static const int ZYWW = 0xF6;
+  static const int ZZXX = 0xA;
+  static const int ZZXY = 0x4A;
+  static const int ZZXZ = 0x8A;
+  static const int ZZXW = 0xCA;
+  static const int ZZYX = 0x1A;
+  static const int ZZYY = 0x5A;
+  static const int ZZYZ = 0x9A;
+  static const int ZZYW = 0xDA;
+  static const int ZZZX = 0x2A;
+  static const int ZZZY = 0x6A;
+  static const int ZZZZ = 0xAA;
+  static const int ZZZW = 0xEA;
+  static const int ZZWX = 0x3A;
+  static const int ZZWY = 0x7A;
+  static const int ZZWZ = 0xBA;
+  static const int ZZWW = 0xFA;
+  static const int ZWXX = 0xE;
+  static const int ZWXY = 0x4E;
+  static const int ZWXZ = 0x8E;
+  static const int ZWXW = 0xCE;
+  static const int ZWYX = 0x1E;
+  static const int ZWYY = 0x5E;
+  static const int ZWYZ = 0x9E;
+  static const int ZWYW = 0xDE;
+  static const int ZWZX = 0x2E;
+  static const int ZWZY = 0x6E;
+  static const int ZWZZ = 0xAE;
+  static const int ZWZW = 0xEE;
+  static const int ZWWX = 0x3E;
+  static const int ZWWY = 0x7E;
+  static const int ZWWZ = 0xBE;
+  static const int ZWWW = 0xFE;
+  static const int WXXX = 0x3;
+  static const int WXXY = 0x43;
+  static const int WXXZ = 0x83;
+  static const int WXXW = 0xC3;
+  static const int WXYX = 0x13;
+  static const int WXYY = 0x53;
+  static const int WXYZ = 0x93;
+  static const int WXYW = 0xD3;
+  static const int WXZX = 0x23;
+  static const int WXZY = 0x63;
+  static const int WXZZ = 0xA3;
+  static const int WXZW = 0xE3;
+  static const int WXWX = 0x33;
+  static const int WXWY = 0x73;
+  static const int WXWZ = 0xB3;
+  static const int WXWW = 0xF3;
+  static const int WYXX = 0x7;
+  static const int WYXY = 0x47;
+  static const int WYXZ = 0x87;
+  static const int WYXW = 0xC7;
+  static const int WYYX = 0x17;
+  static const int WYYY = 0x57;
+  static const int WYYZ = 0x97;
+  static const int WYYW = 0xD7;
+  static const int WYZX = 0x27;
+  static const int WYZY = 0x67;
+  static const int WYZZ = 0xA7;
+  static const int WYZW = 0xE7;
+  static const int WYWX = 0x37;
+  static const int WYWY = 0x77;
+  static const int WYWZ = 0xB7;
+  static const int WYWW = 0xF7;
+  static const int WZXX = 0xB;
+  static const int WZXY = 0x4B;
+  static const int WZXZ = 0x8B;
+  static const int WZXW = 0xCB;
+  static const int WZYX = 0x1B;
+  static const int WZYY = 0x5B;
+  static const int WZYZ = 0x9B;
+  static const int WZYW = 0xDB;
+  static const int WZZX = 0x2B;
+  static const int WZZY = 0x6B;
+  static const int WZZZ = 0xAB;
+  static const int WZZW = 0xEB;
+  static const int WZWX = 0x3B;
+  static const int WZWY = 0x7B;
+  static const int WZWZ = 0xBB;
+  static const int WZWW = 0xFB;
+  static const int WWXX = 0xF;
+  static const int WWXY = 0x4F;
+  static const int WWXZ = 0x8F;
+  static const int WWXW = 0xCF;
+  static const int WWYX = 0x1F;
+  static const int WWYY = 0x5F;
+  static const int WWYZ = 0x9F;
+  static const int WWYW = 0xDF;
+  static const int WWZX = 0x2F;
+  static const int WWZY = 0x6F;
+  static const int WWZZ = 0xAF;
+  static const int WWZW = 0xEF;
+  static const int WWWX = 0x3F;
+  static const int WWWY = 0x7F;
+  static const int WWWZ = 0xBF;
+  static const int WWWW = 0xFF;
+
+  /// Shuffle the lane values. [mask] must be one of the 256 shuffle constants.
+  Float32x4 shuffle(int mask);
 
   /// Returns a new [Float32x4] with values in the X and Y lanes
   /// replaced with the values in the Z and W lanes of [other].
diff --git a/sdk/lib/utf/utf.dart b/sdk/lib/utf/utf.dart
index 940ce68..43a2944 100644
--- a/sdk/lib/utf/utf.dart
+++ b/sdk/lib/utf/utf.dart
@@ -2,6 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+/**
+ * Support for encoding and decoding Unicode characters in UTF-8, UTF-16, and 
+ * UTF-32.
+ */
 library dart.utf;
 import "dart:async";
 import "dart:collection";
diff --git a/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart b/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
index d69253a1..08ddefd 100644
--- a/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
+++ b/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
@@ -1,3 +1,6 @@
+/**
+ * High-fidelity audio programming in the browser.
+ */
 library dart.dom.web_audio;
 
 import 'dart:async';
diff --git a/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart b/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
index 65c742b..010c2db 100644
--- a/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
+++ b/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
@@ -1,3 +1,6 @@
+/**
+ * 3D programming in the browser.
+ */
 library dart.dom.web_gl;
 
 import 'dart:collection';
diff --git a/tests/co19/co19-analyzer.status b/tests/co19/co19-analyzer.status
index a7f309b..cb4f01a 100644
--- a/tests/co19/co19-analyzer.status
+++ b/tests/co19/co19-analyzer.status
@@ -12,52 +12,21 @@
 
 # invalid argument for constant constructor
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t02: fail
-Language/11_Expressions/01_Constants_A16_t03: fail
-
-# final instance variable created instance of the enclosing class
-Language/11_Expressions/01_Constants_A17_t03: fail
-
-# analyzer problem: forward reference of typedef with type parameters
-Language/13_Libraries_and_Scripts/3_Parts_A02_t03: skip
-
-# not clear: typedef int func2(int);
-Language/14_Types/6_Type_dynamic_A04_t01: fail
 
 # TBF: _f is private, so does not collide
 Language/07_Classes/1_Instance_Methods_A05_t08: fail
 
-# TBF: return without value is not a warning
-Language/12_Statements/11_Return_A07_t01: fail
-
-
 # co19 issue #380, Strings class has been removed
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: fail, OK
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A04_t01: fail, OK
 
-# co19 issue #382, Deprecated parts of String interface is being removed.
-LibTest/core/String/charCodes_A01_t01: fail, OK
-LibTest/core/String/charCodeAt_A02_t01: fail, OK
-LibTest/core/String/charCodeAt_A03_t01: fail, OK
-LibTest/core/String/charCodeAt_A01_t01: fail, OK
-LibTest/core/String/splitChars_A01_t01: fail, OK
-
 # co19 issue #389, ceil, floor, truncate and round return integers
 LibTest/core/int/operator_division_A01_t01: fail, OK
 
-# co19 issue #395, uses dart:io API (outdated)
-Language/15_Reference/1_Lexical_Rules_A01_t10: Fail, OK
-
 # co19 issue #397, List.addLast removed
-Language/11_Expressions/06_Lists_A06_t01: fail, OK
 LibTest/core/Iterable/where_A01_t07: fail, OK
-LibTest/core/List/addLast_A01_t01: fail, OK
-LibTest/core/List/addLast_A01_t03: fail, OK
-LibTest/core/List/addLast_A02_t01: fail, OK
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A06_t02: fail, OK
 
 # co19 issue #400, collection library reorg
-LibTest/core/List/List.fixedLength_A01_t01: fail, OK
-LibTest/core/List/operator_subscript_A01_t02: fail, OK
 LibTest/core/String/String_class_A01_t01: fail, OK
 LibTest/core/String/concat_A01_t01: fail, OK
 LibTest/core/String/concat_A02_t01: fail, OK
@@ -66,51 +35,20 @@
 LibTest/core/Set/isSubsetOf_A01_t02: fail, OK
 
 # co19 issue #403
-LibTest/core/List/List_A01_t02: fail, OK
 LibTest/core/List/every_A01_t01: fail, OK
-LibTest/core/List/insertRange_A01_t01: fail, OK
-LibTest/core/List/insertRange_A02_t01: fail, OK
-LibTest/core/List/insertRange_A03_t01: fail, OK
-LibTest/core/List/insertRange_A04_t01: fail, OK
-LibTest/core/List/insertRange_A05_t01: fail, OK
-LibTest/core/List/insertRange_A06_t01: fail, OK
-LibTest/core/List/insertRange_A07_t01: fail, OK
-LibTest/core/List/insertRange_A08_t01: fail, OK
-
-# co19 issue #412, using 'null' as operand
-Language/11_Expressions/01_Constants_A11_t01: fail, OK
-Language/11_Expressions/01_Constants_A12_t01: fail, OK
-Language/11_Expressions/01_Constants_A13_t06: fail, OK
 
 # co19 issue #414, extra @compile-error
 Language/03_Overview/1_Scoping_A02_t28: fail, OK
 
 # co19 issue #416, function name is declared the parameter scope
 Language/03_Overview/1_Scoping_A02_t07: fail, OK
-Language/12_Statements/04_Local_Function_Declaration_A01_t01: fail, OK
-
-# co19 issue #420, 'throw' without exception; deprecated; rethrow should be used
-Language/11_Expressions/08_Throw_A05_t01: fail, OK
-Language/11_Expressions/08_Throw_A05_t02: fail, OK
-Language/11_Expressions/08_Throw_A05_t03: fail, OK
-
-# analyzer issue https://code.google.com/p/dart/issues/detail?id=11534
-Language/14_Types/4_Interface_Types_A11_t01: skip
-Language/14_Types/4_Interface_Types_A11_t02: skip
 
 # co19 issue #424, Uninitialized finals are warnings not errors
-Language/05_Variables/05_Variables_A05_t05: fail, OK
-Language/05_Variables/05_Variables_A05_t06: fail, OK
-Language/05_Variables/05_Variables_A05_t07: fail, OK
-Language/05_Variables/05_Variables_A05_t08: fail, OK
-Language/05_Variables/05_Variables_A05_t09: fail, OK
-Language/05_Variables/05_Variables_A05_t10: fail, OK
 Language/05_Variables/05_Variables_A07_t05: fail, OK
 Language/05_Variables/05_Variables_A07_t06: fail, OK
 Language/05_Variables/05_Variables_A07_t07: fail, OK
 Language/05_Variables/05_Variables_A07_t08: fail, OK
 Language/05_Variables/05_Variables_A08_t01: fail, OK
-Language/11_Expressions/11_Instance_Creation/2_Const_A01_t02: fail, OK
 
 # co19 issue #425, Only static fields can be declared as 'const'
 Language/05_Variables/05_Variables_A12_t01: fail, OK
@@ -128,242 +66,24 @@
 
 # co19 issue #431, it is OK to use 'double' argument for const constructor
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t01: fail, OK
-Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: fail, OK
 
 # co19 issue #428, number literals with a + prefix
-Language/11_Expressions/01_Constants_A01_t01: fail, OK
-Language/11_Expressions/03_Numbers_A01_t01: fail, OK
-Language/11_Expressions/03_Numbers_A01_t02: fail, OK
-Language/11_Expressions/03_Numbers_A01_t03: fail, OK
-Language/11_Expressions/03_Numbers_A01_t04: fail, OK
-Language/11_Expressions/03_Numbers_A01_t08: fail, OK
-Language/11_Expressions/03_Numbers_A01_t10: fail, OK
-Language/12_Statements/02_Expression_Statements_A01_t06: fail, OK
 LibTest/core/double/ceil_A01_t05: fail, OK
 LibTest/core/double/floor_A01_t05: fail, OK
 
-# co19 issue #385, library name is not required
-Language/13_Libraries_and_Scripts/1_Imports_A04_t03: fail, OK
-Language/13_Libraries_and_Scripts/2_Exports_A05_t01: fail, OK
-
-# co19 issue #388, StringBuffer renamed add to write
-Language/11_Expressions/05_Strings/1_String_Interpolation_A03_t01: fail, OK
-Language/11_Expressions/05_Strings/1_String_Interpolation_A04_t01: fail, OK
-Language/11_Expressions/14_Function_Invocation/1_Actual_Argument_List_Evaluation_A02_t01: fail, OK
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A04_t01: fail, OK
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t05: fail, OK
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: fail, OK
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t02: fail, OK
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A04_t01: fail, OK
-LibTest/core/StringBuffer/addAll_A03_t01: fail, OK
-LibTest/core/StringBuffer/add_A01_t01: fail, OK
-LibTest/core/StringBuffer/add_A01_t02: fail, OK
-LibTest/core/StringBuffer/addAll_A01_t01: fail, OK
-LibTest/core/StringBuffer/addAll_A01_t02: fail, OK
-LibTest/core/StringBuffer/isEmpty_A01_t01: fail, OK
-LibTest/core/StringBuffer/toString_A01_t01: fail, OK
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A07_t01: fail, OK
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A08_t01: fail, OK
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A08_t02: fail, OK
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A09_t01: fail, OK
-
-#co19 issue #432, missing @static-warning annotation
-Language/14_Types/8_Parameterized_Types_A03_t03: fail, OK
-Language/14_Types/8_Parameterized_Types_A03_t05: fail, OK
-
-# co19 issue #433, missing @static-warning annotation
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t01: fail, OK
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t07: fail, OK
-
-# co19 issue #434, argument definition was dropped
-Language/11_Expressions/33_Argument_Definition_Test_A01_t02: fail, OK
-#Language/11_Expressions/33_Argument_Definition_Test_A01_t14: fail, OK (this is passing for the wrong reason)
-#Language/11_Expressions/33_Argument_Definition_Test_A01_t18: fail, OK (this is passing for the wrong reason)
-Language/11_Expressions/33_Argument_Definition_Test_A02_t01: fail, OK
-Language/11_Expressions/33_Argument_Definition_Test_A02_t02: fail, OK
-Language/11_Expressions/33_Argument_Definition_Test_A03_t01: fail, OK
-Language/11_Expressions/33_Argument_Definition_Test_A03_t02: fail, OK
-
-# co19 issue #435, AssertionError has not properties
-LibTest/core/AssertionError/column_A01_t02: fail, OK
-LibTest/core/AssertionError/failedAssertion_A01_t01: fail, OK
-LibTest/core/AssertionError/line_A01_t02: fail, OK
-LibTest/core/AssertionError/url_A01_t01: fail, OK
-
 # co19 issue 459, FallThroughError is no longer const
-LibTest/core/FallThroughError/toString_A01_t01: fail, OK
 LibTest/core/FallThroughError/FallThroughError_A01_t01: Fail, OK
 
 # co19 issue #437, annotation should be constant _variable_ or constant constructor invocation
 Language/07_Classes/07_Classes_A01_t20: fail, OK
 Language/07_Classes/07_Classes_A02_t34: fail, OK
 Language/07_Classes/07_Classes_A03_t10: fail, OK
-Language/13_Libraries_and_Scripts/2_Exports_A01_t17: fail, OK
-
-# co19 issue 438, Static variables are initialized lazily, need not be constants
-Language/11_Expressions/01_Constants_A16_t01: fail, OK
-Language/11_Expressions/01_Constants_A16_t02: fail, OK
-
-# co19 issue 439, it is warning, not error to import two different libraries with the same name
-Language/13_Libraries_and_Scripts/1_Imports_A05_t01: fail, OK
-
-# co19 issue #440, adj strings is not a string interpolation
-Language/13_Libraries_and_Scripts/5_URIs_A01_t24: fail, OK
-Language/13_Libraries_and_Scripts/5_URIs_A01_t25: fail, OK
-
-# co19 issue #441, assignment in constructor is not initializing
-Language/05_Variables/05_Variables_A05_t04: fail, OK
-
-# co19 issue #462, const instance creation with invalid arguments is error
-Language/11_Expressions/11_Instance_Creation/2_Const_A09_t02: fail, OK
-Language/11_Expressions/11_Instance_Creation/2_Const_A09_t03: fail, OK
 
 # co19 issue #464, not initialized final instance variable is warning, not error
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A09_t01: fail
 
 # co19 issue #442, undefined name "Expect"
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t04: fail, OK
-Language/07_Classes/6_Constructors/2_Factories_A06_t03: fail, OK
-Language/09_Generics/09_Generics_A05_t02: fail, OK
-Language/09_Generics/09_Generics_A05_t01: fail, OK
-Language/11_Expressions/04_Booleans/1_Boolean_Conversion_A01_t01: fail, OK
-Language/11_Expressions/04_Booleans/1_Boolean_Conversion_A02_t01: fail, OK
-Language/11_Expressions/06_Lists_A09_t01: fail, OK
-Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A02_t01: fail, OK
-Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A03_t01: fail, OK
-Language/11_Expressions/18_Assignment_A02_t01: fail, OK
-Language/11_Expressions/18_Assignment_A04_t06: fail, OK
-Language/11_Expressions/18_Assignment_A06_t01: fail, OK
-Language/11_Expressions/19_Conditional_A02_t03: fail, OK
-Language/11_Expressions/19_Conditional_A02_t04: fail, OK
-Language/11_Expressions/19_Conditional_A04_t03: fail, OK
-Language/11_Expressions/27_Unary_Expressions_A02_t03: fail, OK
-Language/12_Statements/03_Variable_Declaration_A01_t01: fail, OK
-Language/12_Statements/03_Variable_Declaration_A01_t02: fail, OK
-Language/12_Statements/05_If_A02_t01: fail, OK
-Language/12_Statements/05_If_A02_t02: fail, OK
-Language/12_Statements/10_Try_A01_t01: fail, OK
-Language/12_Statements/11_Return_A03_t02: fail, OK
-Language/12_Statements/11_Return_A04_t01: fail, OK
-Language/12_Statements/15_Assert_A03_t03: fail, OK
-Language/12_Statements/15_Assert_A03_t09: fail, OK
-Language/12_Statements/15_Assert_A03_t08: fail, OK
-Language/12_Statements/15_Assert_A04_t02: fail, OK
-Language/14_Types/2_Dynamic_Type_System_A01_t01: fail, OK
-Language/14_Types/4_Interface_Types_A08_t03: fail, OK
-Language/14_Types/7_Type_Void_A04_t02: fail, OK
-Language/15_Reference/1_Lexical_Rules/2_Comments_A04_t03: fail, OK
-LibTest/core/AssertionError/toString_A01_t01: fail, OK
-LibTest/core/Date/add_A01_t01: fail, OK
-LibTest/core/Date/add_A03_t01: fail, OK
-LibTest/core/Date/add_A02_t01: fail, OK
-LibTest/core/Date/add_A05_t01: fail, OK
-LibTest/core/Date/compareTo_A01_t01: fail, OK
-LibTest/core/Date/compareTo_A02_t01: fail, OK
-LibTest/core/Date/compareTo_A03_t01: fail, OK
-LibTest/core/Date/compareTo_A01_t02: fail, OK
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t01: fail, OK
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t02: fail, OK
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A02_t01: fail, OK
-LibTest/core/Date/Date.fromString_A01_t01: fail, OK
-LibTest/core/Date/Date.fromString_A01_t02: fail, OK
-LibTest/core/Date/Date.fromString_A02_t01: fail, OK
-LibTest/core/Date/Date.fromString_A03_t01: fail, OK
-LibTest/core/Date/Date.now_A01_t01: fail, OK
-LibTest/core/Date/Date.now_A01_t02: fail, OK
-LibTest/core/Date/Date.now_A01_t03: fail, OK
-LibTest/core/Date/Date.utc_A01_t01: fail, OK
-LibTest/core/Date/Date_A01_t01: fail, OK
-LibTest/core/Date/Date_A01_t03: fail, OK
-LibTest/core/Date/Date_A01_t02: fail, OK
-LibTest/core/Date/Date_A01_t04: fail, OK
-LibTest/core/Date/day_A01_t01: fail, OK
-LibTest/core/Date/difference_A01_t01: fail, OK
-LibTest/core/Date/difference_A01_t02: fail, OK
-LibTest/core/Date/difference_A02_t01: fail, OK
-LibTest/core/Date/hour_A01_t01: fail, OK
-LibTest/core/Date/isUtc_A01_t01: fail, OK
-LibTest/core/Date/millisecond_A01_t01: fail, OK
-LibTest/core/Date/millisecondsSinceEpoch_A01_t01: fail, OK
-LibTest/core/Date/minute_A01_t01: fail, OK
-LibTest/core/Date/month_A01_t01: fail, OK
-LibTest/core/Date/operator_equality_A01_t01: fail, OK
-LibTest/core/Date/operator_GE_A01_t01: fail, OK
-LibTest/core/Date/operator_GT_A01_t01: fail, OK
-LibTest/core/Date/operator_LE_A01_t01: fail, OK
-LibTest/core/Date/operator_LT_A01_t01: fail, OK
-LibTest/core/Date/second_A01_t01: fail, OK
-LibTest/core/Date/subtract_A01_t01: fail, OK
-LibTest/core/Date/subtract_A03_t01: fail, OK
-LibTest/core/Date/subtract_A02_t01: fail, OK
-LibTest/core/Date/subtract_A05_t01: fail, OK
-LibTest/core/Date/timeZoneName_A01_t01: fail, OK
-LibTest/core/Date/timeZoneOffset_A01_t01: fail, OK
-LibTest/core/Date/toLocal_A01_t01: fail, OK
-LibTest/core/Date/toString_A01_t01: fail, OK
-LibTest/core/Date/toString_A02_t01: fail, OK
-LibTest/core/Date/toUtc_A01_t01: fail, OK
-LibTest/core/Date/year_A01_t01: fail, OK
-LibTest/core/Date/weekday_A01_t01: fail, OK
-LibTest/core/List/getRange_A06_t01: fail, OK
-LibTest/core/List/indexOf_A06_t01: fail, OK
-LibTest/core/List/operator_subscript_A03_t01: fail, OK
-LibTest/core/List/operator_subscripted_assignment_A03_t01: fail, OK
-LibTest/core/Map/putIfAbsent_A01_t04: fail, OK
-LibTest/core/Strings/concatAll_A04_t01: fail, OK
-LibTest/core/Strings/join_A04_t01: fail, OK
-
-# co19 issue #443, Undefined class 'InvocationMirror'
-Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A01_t02: fail, OK
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t02: fail, OK
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: fail, OK
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t06: fail, OK
-Language/11_Expressions/17_Getter_Invocation_A02_t01: fail, OK
-Language/11_Expressions/17_Getter_Invocation_A02_t02: fail, OK
-
-# co19 issue #444, AsyncError has been removed
-LibTest/async/Completer/complete_A02_t02: fail, OK
-LibTest/async/Completer/completeError_A01_t01: fail, OK
-LibTest/async/Completer/completeError_A03_t02: fail, OK
-LibTest/async/Future/catchError_A01_t01: fail, OK
-LibTest/async/Future/catchError_A01_t02: fail, OK
-LibTest/async/Future/catchError_A02_t01: fail, OK
-LibTest/async/Future/catchError_A03_t01: fail, OK
-LibTest/async/Future/catchError_A03_t02: fail, OK
-LibTest/async/Future/catchError_A03_t03: fail, OK
-LibTest/async/Future/forEach_A03_t01: fail, OK
-LibTest/async/Future/Future.delayed_A02_t01: fail, OK
-LibTest/async/Future/then_A02_t01: fail, OK
-LibTest/async/Future/then_A02_t02: fail, OK
-LibTest/async/Future/then_A03_t01: fail, OK
-LibTest/async/Future/then_A04_t01: fail, OK
-LibTest/async/Future/whenComplete_A03_t01: fail, OK
-LibTest/async/Future/whenComplete_A04_t02: fail, OK
-
-# co19 issue #445, Future.immediate was repalce with Future.value
-LibTest/async/Future/asStream_A01_t01: fail, OK
-LibTest/async/Future/asStream_A01_t02: fail, OK
-LibTest/async/Future/asStream_A02_t01: fail, OK
-LibTest/async/Future/Future.immediate_A01_t01: fail, OK
-LibTest/async/Future/Future.immediateError_A01_t01: fail, OK
-LibTest/async/Future/then_A01_t03: fail, OK
-
-# co19 issue #446, Date was replaced with DateTime
-Language/14_Types/6_Type_dynamic_A03_t01: fail, OK
-
-# co19 issue 447, In Future delayed int replaced with Duration
-LibTest/async/Future/asStream_A01_t02: fail, OK
-LibTest/async/Future/asStream_A02_t01: fail, OK
-LibTest/async/Future/forEach_A01_t01: fail, OK
-LibTest/async/Future/forEach_A02_t01: fail, OK
-LibTest/async/Future/then_A01_t03: fail, OK
-LibTest/async/Future/wait_A01_t01: fail, OK
-LibTest/async/Future/wait_A01_t04: fail, OK
-LibTest/async/Future/wait_A01_t05: fail, OK
-LibTest/async/Future/wait_A01_t06: fail, OK
-LibTest/async/Future/whenComplete_A01_t01: fail, OK
-LibTest/async/Future/whenComplete_A02_t01: fail, OK
-LibTest/async/Future/whenComplete_A04_t01: fail, OK
+Language/15_Types/4_Interface_Types_A08_t03: fail, OK
 
 # co19 issue #448, Collection was removed
 LibTest/collection/Queue/Queue.from_A01_t01: fail, OK
@@ -374,83 +94,14 @@
 LibTest/core/RegExp/allMatches_A01_t01: fail, OK
 LibTest/core/Set/intersection_A01_t02: fail, OK
 
-# co19 issue #449, Strings was removed
-LibTest/core/Strings/concatAll_A01_t01: fail, OK
-LibTest/core/Strings/concatAll_A02_t01: fail, OK
-LibTest/core/Strings/concatAll_A03_t01: fail, OK
-LibTest/core/Strings/join_A01_t01: fail, OK
-LibTest/core/Strings/join_A02_t01: fail, OK
-LibTest/core/Strings/join_A03_t01: fail, OK
-
-# co19 issue #450, The class 'List' does not have a constructor 'fixedLength'
-LibTest/core/List/add_A02_t01: fail, OK
-LibTest/core/List/addAll_A02_t01: fail, OK
-LibTest/core/List/clear_A02_t01: fail, OK
-LibTest/core/List/length_A04_t01: fail, OK
-LibTest/core/List/removeLast_A02_t01: fail, OK
-LibTest/core/List/removeRange_A02_t01: fail, OK
-
-# co19 issue 451, Set.intersection() requires Set argument
-LibTest/core/Set/intersection_A01_t01: fail, OK
-LibTest/core/Set/intersection_A01_t03: fail, OK
-LibTest/core/Set/intersection_A03_t01: fail, OK
-
 # co19 issue 452, more method in Iterable
 LibTest/core/Set/Set.from_A01_t02: fail, OK
 
-# co19 issue #453, abstract member in concrete class
-Language/07_Classes/07_Classes_A07_t10: fail, OK
-
-# co19 issue #454, should be static warning
-Language/11_Expressions/11_Instance_Creation/1_New_A01_t04: fail, OK
-
 # co19 issue #455, undeclared identifier is static warning
-Language/13_Libraries_and_Scripts/1_Imports_A02_t14: fail, OK
-
-# co19 issue #456
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t04: fail, OK
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t05: fail, OK
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t08: fail, OK
-
-# co19 issue 457, malformed type is static warning
-Language/11_Expressions/31_Type_Test_A05_t01: fail, OK
-Language/11_Expressions/31_Type_Test_A05_t02: fail, OK
-Language/11_Expressions/31_Type_Test_A05_t03: fail, OK
-Language/11_Expressions/32_Type_Cast_A04_t01: fail, OK
-Language/11_Expressions/32_Type_Cast_A04_t02: fail, OK
-
-# co19 issue #465, any use of a malbounded type gives rise to a static warning.
-Language/11_Expressions/11_Instance_Creation/1_New_A05_t01: fail, OK
-Language/11_Expressions/11_Instance_Creation/1_New_A05_t02: fail, OK
-Language/11_Expressions/11_Instance_Creation/1_New_A05_t03: fail, OK
-Language/11_Expressions/11_Instance_Creation_A03_t01: fail, OK
-Language/11_Expressions/11_Instance_Creation_A04_t01: fail, OK
-Language/11_Expressions/11_Instance_Creation_A04_t02: fail, OK
-
-# co19 issue #481
-Language/13_Libraries_and_Scripts/1_Imports_A03_t02: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t05: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t08: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t09: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t10: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t22: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t25: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t29: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t28: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t30: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t42: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t45: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t48: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t49: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t50: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t62: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t65: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t68: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t69: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t70: fail, OK
-
-# co19 issue 483, instance access to static member
-Language/11_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A01_t19: fail, OK
+Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t10: fail, OK
+Language/13_Statements/04_Local_Function_Declaration_A02_t02: fail, OK
+Language/14_Libraries_and_Scripts/1_Imports_A02_t12: fail, OK
+Language/14_Libraries_and_Scripts/1_Imports_A02_t15: fail, OK
 
 # co19 issue #486, some override errors are now warnings
 Language/07_Classes/1_Instance_Methods_A01_t01: fail, OK
@@ -472,5 +123,190 @@
 Language/07_Classes/4_Abstract_Instance_Members_A04_t05: fail, OK
 Language/07_Classes/4_Abstract_Instance_Members_A04_t06: fail, OK
 
-# co19 issue #487, Function type T may be assigned to function type T iff T <: S
-Language/14_Types/5_Function_Types_A01_t01: fail, OK
+# co19-roll r546 (11.08.2013) caused these failures
+Language/05_Variables/05_Variables_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t01: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t02: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t03: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t04: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/00_Object_Identity/1_Object_Identity_A04_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/00_Object_Identity/1_Object_Identity_A04_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A11_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A12_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A13_t06: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A16_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A16_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A16_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A17_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t08: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t10: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/06_Lists_A06_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/08_Throw_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/08_Throw_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/08_Throw_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A01_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t07: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t06: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t07: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t08: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t09: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t12: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/2_Const_A09_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/2_Const_A09_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation_A01_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation_A01_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation_A01_t06: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation_A01_t08: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A01_t19: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t07: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/32_Type_Test_A04_t02: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/02_Expression_Statements_A01_t06: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/04_Local_Function_Declaration_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Return_A07_t01: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A02_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A03_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A04_t03: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t27: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t47: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t67: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/2_Exports_A01_t17: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/2_Exports_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t24: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t25: fail # co19-roll r546: Please triage this failure
+Language/15_Types/1_Static_Types_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/15_Types/5_Function_Types_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/15_Types/6_Type_dynamic_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/15_Types/6_Type_dynamic_A04_t01: fail # co19-roll r546: Please triage this failure
+Language/16_Reference/1_Lexical_Rules/2_Comments_A04_t03: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/asBroadcastStream_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/distinct_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/distinct_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/drain_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/drain_A02_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/EventTransformStream_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/expand_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/first_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/handleError_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/listen_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/listen_A04_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/transform_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/where_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Future/asStream_A01_t02: pass # co19-roll r546: Please triage this failure
+LibTest/async/Future/asStream_A02_t01: pass # co19-roll r546: Please triage this failure
+LibTest/async/Future/whenComplete_A03_t01: pass # co19-roll r546: Please triage this failure
+LibTest/async/Stream/asBroadcastStream_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/asBroadcastStream_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/contains_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamController/hasListener_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamController/hasListener_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamController/isClosed_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamController/isClosed_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamController/isPaused_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamController/isPaused_A01_t03: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamController/sink_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamController/StreamController.broadcast_A04_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/distinct_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/distinct_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/drain_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/drain_A02_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamEventTransformer/handleData_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamEventTransformer/handleDone_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamEventTransformer/handleError_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/expand_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/handleError_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/isBroadcast_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/isBroadcast_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamIterator/cancel_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/listen_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/listen_A04_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamSink/close_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.fromFuture_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.fromFuture_A02_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.fromIterable_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.periodic_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/transform_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/where_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Timer/cancel_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Timer/Timer.periodic_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Timer/Timer.periodic_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/compareTo_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/isAtSameMomentAs_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/subtract_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/double/parse_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_div_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_eq_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_gt_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_gte_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_lt_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_lte_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_minus_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_mult_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_plus_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/FallThroughError/toString_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/int/ceilToDouble_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/int/floorToDouble_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/int/roundToDouble_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/int/truncateToDouble_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/asMap_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/every_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/forEach_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/join_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/lastWhere_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/List_A01_t03: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/List.filled_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/List.from_A01_t03: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/List.generate_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/List.generate_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/List.generate_A01_t03: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/map_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/removeAt_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/replaceRange_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/replaceRange_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/skipWhile_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/takeWhile_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/toList_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/toList_A01_t03: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/toSet_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/StringBuffer/writeAll_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/spawnFunction_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/streamSpawnFunction_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateSink/add_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateSink/addError_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateSink/addError_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateSink/operator_equality_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/any_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/asBroadcastStream_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/contains_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/contains_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/isBroadcast_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/last_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/length_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/single_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/SendPort/send_A02_t02: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/SendPort/send_A02_t03: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/SendPort/send_A02_t04: fail # co19-roll r546: Please triage this failure
diff --git a/tests/co19/co19-analyzer2.status b/tests/co19/co19-analyzer2.status
index 116302e..67c183c 100644
--- a/tests/co19/co19-analyzer2.status
+++ b/tests/co19/co19-analyzer2.status
@@ -12,52 +12,21 @@
 
 # invalid argument for constant constructor
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t02: fail
-Language/11_Expressions/01_Constants_A16_t03: fail
-
-# final instance variable created instance of the enclosing class
-Language/11_Expressions/01_Constants_A17_t03: fail
-
-# analyzer problem: forward reference of typedef with type parameters
-Language/13_Libraries_and_Scripts/3_Parts_A02_t03: skip
-
-# not clear: typedef int func2(int);
-Language/14_Types/6_Type_dynamic_A04_t01: fail
 
 # TBF: _f is private, so does not collide
 Language/07_Classes/1_Instance_Methods_A05_t08: fail
 
-# TBF: return without value is not a warning
-Language/12_Statements/11_Return_A07_t01: fail
-
-
 # co19 issue #380, Strings class has been removed
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: fail, OK
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A04_t01: fail, OK
 
-# co19 issue #382, Deprecated parts of String interface is being removed.
-LibTest/core/String/charCodes_A01_t01: fail, OK
-LibTest/core/String/charCodeAt_A02_t01: fail, OK
-LibTest/core/String/charCodeAt_A03_t01: fail, OK
-LibTest/core/String/charCodeAt_A01_t01: fail, OK
-LibTest/core/String/splitChars_A01_t01: fail, OK
-
 # co19 issue #389, ceil, floor, truncate and round return integers
-LibTest/core/int/operator_division_A01_t01: fail
-
-# co19 issue #395, uses dart:io API (outdated)
-Language/15_Reference/1_Lexical_Rules_A01_t10: Fail, OK
+LibTest/core/int/operator_division_A01_t01: fail, OK
 
 # co19 issue #397, List.addLast removed
-Language/11_Expressions/06_Lists_A06_t01: fail, OK
 LibTest/core/Iterable/where_A01_t07: fail, OK
-LibTest/core/List/addLast_A01_t01: fail, OK
-LibTest/core/List/addLast_A01_t03: fail, OK
-LibTest/core/List/addLast_A02_t01: fail, OK
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A06_t02: fail, OK
 
 # co19 issue #400, collection library reorg
-LibTest/core/List/List.fixedLength_A01_t01: fail, OK
-LibTest/core/List/operator_subscript_A01_t02: fail, OK
 LibTest/core/String/String_class_A01_t01: fail, OK
 LibTest/core/String/concat_A01_t01: fail, OK
 LibTest/core/String/concat_A02_t01: fail, OK
@@ -66,51 +35,24 @@
 LibTest/core/Set/isSubsetOf_A01_t02: fail, OK
 
 # co19 issue #403
-LibTest/core/List/List_A01_t02: fail, OK
 LibTest/core/List/every_A01_t01: fail, OK
-LibTest/core/List/insertRange_A01_t01: fail, OK
-LibTest/core/List/insertRange_A02_t01: fail, OK
-LibTest/core/List/insertRange_A03_t01: fail, OK
-LibTest/core/List/insertRange_A04_t01: fail, OK
-LibTest/core/List/insertRange_A05_t01: fail, OK
-LibTest/core/List/insertRange_A06_t01: fail, OK
-LibTest/core/List/insertRange_A07_t01: fail, OK
-LibTest/core/List/insertRange_A08_t01: fail, OK
-
-# co19 issue #412, using 'null' as operand
-Language/11_Expressions/01_Constants_A11_t01: fail, OK
-Language/11_Expressions/01_Constants_A12_t01: fail, OK
-Language/11_Expressions/01_Constants_A13_t06: fail, OK
 
 # co19 issue #414, extra @compile-error
 Language/03_Overview/1_Scoping_A02_t28: fail, OK
 
 # co19 issue #416, function name is declared the parameter scope
 Language/03_Overview/1_Scoping_A02_t07: fail, OK
-Language/12_Statements/04_Local_Function_Declaration_A01_t01: fail, OK
-
-# co19 issue #420, 'throw' without exception; deprecated; rethrow should be used
-Language/11_Expressions/08_Throw_A05_t01: fail, OK
-Language/11_Expressions/08_Throw_A05_t02: fail, OK
-Language/11_Expressions/08_Throw_A05_t03: fail, OK
 
 # analyzer issue https://code.google.com/p/dart/issues/detail?id=11534
-Language/14_Types/4_Interface_Types_A11_t01: skip
-Language/14_Types/4_Interface_Types_A11_t02: skip
+Language/15_Types/4_Interface_Types_A11_t01: Skip
+Language/15_Types/4_Interface_Types_A11_t02: Skip
 
 # co19 issue #424, Uninitialized finals are warnings not errors
-Language/05_Variables/05_Variables_A05_t05: fail, OK
-Language/05_Variables/05_Variables_A05_t06: fail, OK
-Language/05_Variables/05_Variables_A05_t07: fail, OK
-Language/05_Variables/05_Variables_A05_t08: fail, OK
-Language/05_Variables/05_Variables_A05_t09: fail, OK
-Language/05_Variables/05_Variables_A05_t10: fail, OK
 Language/05_Variables/05_Variables_A07_t05: fail, OK
 Language/05_Variables/05_Variables_A07_t06: fail, OK
 Language/05_Variables/05_Variables_A07_t07: fail, OK
 Language/05_Variables/05_Variables_A07_t08: fail, OK
 Language/05_Variables/05_Variables_A08_t01: fail, OK
-Language/11_Expressions/11_Instance_Creation/2_Const_A01_t02: fail, OK
 
 # co19 issue #425, Only static fields can be declared as 'const'
 Language/05_Variables/05_Variables_A12_t01: fail, OK
@@ -128,243 +70,26 @@
 
 # co19 issue #431, it is OK to use 'double' argument for const constructor
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t01: fail, OK
-Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: fail, OK
 
 # co19 issue #428, number literals with a + prefix
-Language/11_Expressions/01_Constants_A01_t01: fail, OK
-Language/11_Expressions/03_Numbers_A01_t01: fail, OK
-Language/11_Expressions/03_Numbers_A01_t02: fail, OK
-Language/11_Expressions/03_Numbers_A01_t03: fail, OK
-Language/11_Expressions/03_Numbers_A01_t04: fail, OK
-Language/11_Expressions/03_Numbers_A01_t08: fail, OK
-Language/11_Expressions/03_Numbers_A01_t10: fail, OK
-Language/12_Statements/02_Expression_Statements_A01_t06: fail, OK
 LibTest/core/double/ceil_A01_t05: fail, OK
 LibTest/core/double/floor_A01_t05: fail, OK
 
-# co19 issue #385, library name is not required
-Language/13_Libraries_and_Scripts/1_Imports_A04_t03: fail, OK
-Language/13_Libraries_and_Scripts/2_Exports_A05_t01: fail, OK
-
-# co19 issue #388, StringBuffer renamed add to write
-Language/11_Expressions/05_Strings/1_String_Interpolation_A03_t01: fail, OK
-Language/11_Expressions/05_Strings/1_String_Interpolation_A04_t01: fail, OK
-Language/11_Expressions/14_Function_Invocation/1_Actual_Argument_List_Evaluation_A02_t01: fail, OK
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A04_t01: fail, OK
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t05: fail, OK
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: fail, OK
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t02: fail, OK
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A04_t01: fail, OK
-LibTest/core/StringBuffer/addAll_A03_t01: fail, OK
-LibTest/core/StringBuffer/add_A01_t01: fail, OK
-LibTest/core/StringBuffer/add_A01_t02: fail, OK
-LibTest/core/StringBuffer/addAll_A01_t01: fail, OK
-LibTest/core/StringBuffer/addAll_A01_t02: fail, OK
-LibTest/core/StringBuffer/isEmpty_A01_t01: fail, OK
-LibTest/core/StringBuffer/toString_A01_t01: fail, OK
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A07_t01: fail, OK
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A08_t01: fail, OK
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A08_t02: fail, OK
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A09_t01: fail, OK
-
-#co19 issue #432, missing @static-warning annotation
-Language/14_Types/8_Parameterized_Types_A03_t03: fail,OK
-Language/14_Types/8_Parameterized_Types_A03_t05: fail,OK
-
-# co19 issue #433, missing @static-warning annotation
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t01: fail, OK
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t07: fail, OK
-
 # co19 issue #434, argument definition was dropped
-Language/11_Expressions/33_Argument_Definition_Test_A01_t02: fail, OK
 #Language/11_Expressions/33_Argument_Definition_Test_A01_t14: fail, OK (this is passing for the wrong reason)
 #Language/11_Expressions/33_Argument_Definition_Test_A01_t18: fail, OK (this is passing for the wrong reason)
-Language/11_Expressions/33_Argument_Definition_Test_A02_t01: fail, OK
-Language/11_Expressions/33_Argument_Definition_Test_A02_t02: fail, OK
-Language/11_Expressions/33_Argument_Definition_Test_A03_t01: fail, OK
-Language/11_Expressions/33_Argument_Definition_Test_A03_t02: fail, OK
-
-# co19 issue #435, AssertionError has not properties
-LibTest/core/AssertionError/column_A01_t02: fail, OK
-LibTest/core/AssertionError/failedAssertion_A01_t01: fail, OK
-LibTest/core/AssertionError/line_A01_t02: fail, OK
-LibTest/core/AssertionError/url_A01_t01: fail, OK
 
 # co19 issue 459, FallThroughError is no longer const
-LibTest/core/FallThroughError/toString_A01_t01: Fail
-LibTest/core/FallThroughError/FallThroughError_A01_t01: Fail
+LibTest/core/FallThroughError/FallThroughError_A01_t01: Fail, OK
 
 # co19 issue #437, annotation should be constant _variable_ or constant constructor invocation
 Language/07_Classes/07_Classes_A01_t20: fail, OK
 Language/07_Classes/07_Classes_A02_t34: fail, OK
 Language/07_Classes/07_Classes_A03_t10: fail, OK
-Language/13_Libraries_and_Scripts/2_Exports_A01_t17: fail, OK
-
-# co19 issue 438, Static variables are initialized lazily, need not be constants
-Language/11_Expressions/01_Constants_A16_t01: fail, OK
-Language/11_Expressions/01_Constants_A16_t02: fail, OK
-
-# co19 issue 439, it is warning, not error to import two different libraries with the same name
-Language/13_Libraries_and_Scripts/1_Imports_A05_t01: fail, OK
-
-# co19 issue #440, adj strings is not a string interpolation
-Language/13_Libraries_and_Scripts/5_URIs_A01_t24: fail, OK
-Language/13_Libraries_and_Scripts/5_URIs_A01_t25: fail, OK
-
-# co19 issue #441, assignment in constructor is not initializing
-Language/05_Variables/05_Variables_A05_t04: fail, OK
-
-# co19 issue #462, const instance creation with invalid arguments is error
-Language/11_Expressions/11_Instance_Creation/2_Const_A09_t02: fail, OK
-Language/11_Expressions/11_Instance_Creation/2_Const_A09_t03: fail, OK
 
 # co19 issue #464, not initialized final instance variable is warning, not error
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A09_t01: fail
 
-# co19 issue #442, undefined name "Expect"
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t04: fail, OK
-Language/07_Classes/6_Constructors/2_Factories_A06_t03: fail, OK
-Language/09_Generics/09_Generics_A05_t02: fail, OK
-Language/09_Generics/09_Generics_A05_t01: fail, OK
-Language/11_Expressions/04_Booleans/1_Boolean_Conversion_A01_t01: fail, OK
-Language/11_Expressions/04_Booleans/1_Boolean_Conversion_A02_t01: fail, OK
-Language/11_Expressions/06_Lists_A09_t01: fail, OK
-Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A02_t01: fail, OK
-Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A03_t01: fail, OK
-Language/11_Expressions/18_Assignment_A02_t01: fail, OK
-Language/11_Expressions/18_Assignment_A04_t06: fail, OK
-Language/11_Expressions/18_Assignment_A06_t01: fail, OK
-Language/11_Expressions/19_Conditional_A02_t03: fail, OK
-Language/11_Expressions/19_Conditional_A02_t04: fail, OK
-Language/11_Expressions/19_Conditional_A04_t03: fail, OK
-Language/11_Expressions/27_Unary_Expressions_A02_t03: fail, OK
-Language/12_Statements/03_Variable_Declaration_A01_t01: fail, OK
-Language/12_Statements/03_Variable_Declaration_A01_t02: fail, OK
-Language/12_Statements/05_If_A02_t01: fail, OK
-Language/12_Statements/05_If_A02_t02: fail, OK
-Language/12_Statements/10_Try_A01_t01: fail, OK
-Language/12_Statements/11_Return_A03_t02: fail, OK
-Language/12_Statements/11_Return_A04_t01: fail, OK
-Language/12_Statements/15_Assert_A03_t03: fail, OK
-Language/12_Statements/15_Assert_A03_t09: fail, OK
-Language/12_Statements/15_Assert_A03_t08: fail, OK
-Language/12_Statements/15_Assert_A04_t02: fail, OK
-Language/14_Types/2_Dynamic_Type_System_A01_t01: fail, OK
-Language/14_Types/4_Interface_Types_A08_t03: fail, OK
-Language/14_Types/7_Type_Void_A04_t02: fail, OK
-Language/15_Reference/1_Lexical_Rules/2_Comments_A04_t03: fail, OK
-LibTest/core/AssertionError/toString_A01_t01: fail, OK
-LibTest/core/Date/add_A01_t01: fail, OK
-LibTest/core/Date/add_A03_t01: fail, OK
-LibTest/core/Date/add_A02_t01: fail, OK
-LibTest/core/Date/add_A05_t01: fail, OK
-LibTest/core/Date/compareTo_A01_t01: fail, OK
-LibTest/core/Date/compareTo_A02_t01: fail, OK
-LibTest/core/Date/compareTo_A03_t01: fail, OK
-LibTest/core/Date/compareTo_A01_t02: fail, OK
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t01: fail, OK
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t02: fail, OK
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A02_t01: fail, OK
-LibTest/core/Date/Date.fromString_A01_t01: fail, OK
-LibTest/core/Date/Date.fromString_A01_t02: fail, OK
-LibTest/core/Date/Date.fromString_A02_t01: fail, OK
-LibTest/core/Date/Date.fromString_A03_t01: fail, OK
-LibTest/core/Date/Date.now_A01_t01: fail, OK
-LibTest/core/Date/Date.now_A01_t02: fail, OK
-LibTest/core/Date/Date.now_A01_t03: fail, OK
-LibTest/core/Date/Date.utc_A01_t01: fail, OK
-LibTest/core/Date/Date_A01_t01: fail, OK
-LibTest/core/Date/Date_A01_t03: fail, OK
-LibTest/core/Date/Date_A01_t02: fail, OK
-LibTest/core/Date/Date_A01_t04: fail, OK
-LibTest/core/Date/day_A01_t01: fail, OK
-LibTest/core/Date/difference_A01_t01: fail, OK
-LibTest/core/Date/difference_A01_t02: fail, OK
-LibTest/core/Date/difference_A02_t01: fail, OK
-LibTest/core/Date/hour_A01_t01: fail, OK
-LibTest/core/Date/isUtc_A01_t01: fail, OK
-LibTest/core/Date/millisecond_A01_t01: fail, OK
-LibTest/core/Date/millisecondsSinceEpoch_A01_t01: fail, OK
-LibTest/core/Date/minute_A01_t01: fail, OK
-LibTest/core/Date/month_A01_t01: fail, OK
-LibTest/core/Date/operator_equality_A01_t01: fail, OK
-LibTest/core/Date/operator_GE_A01_t01: fail, OK
-LibTest/core/Date/operator_GT_A01_t01: fail, OK
-LibTest/core/Date/operator_LE_A01_t01: fail, OK
-LibTest/core/Date/operator_LT_A01_t01: fail, OK
-LibTest/core/Date/second_A01_t01: fail, OK
-LibTest/core/Date/subtract_A01_t01: fail, OK
-LibTest/core/Date/subtract_A03_t01: fail, OK
-LibTest/core/Date/subtract_A02_t01: fail, OK
-LibTest/core/Date/subtract_A05_t01: fail, OK
-LibTest/core/Date/timeZoneName_A01_t01: fail, OK
-LibTest/core/Date/timeZoneOffset_A01_t01: fail, OK
-LibTest/core/Date/toLocal_A01_t01: fail, OK
-LibTest/core/Date/toString_A01_t01: fail, OK
-LibTest/core/Date/toString_A02_t01: fail, OK
-LibTest/core/Date/toUtc_A01_t01: fail, OK
-LibTest/core/Date/year_A01_t01: fail, OK
-LibTest/core/Date/weekday_A01_t01: fail, OK
-LibTest/core/List/getRange_A06_t01: fail, OK
-LibTest/core/List/indexOf_A06_t01: fail, OK
-LibTest/core/List/operator_subscript_A03_t01: fail, OK
-LibTest/core/List/operator_subscripted_assignment_A03_t01: fail, OK
-LibTest/core/Map/putIfAbsent_A01_t04: fail, OK
-LibTest/core/Strings/concatAll_A04_t01: fail, OK
-LibTest/core/Strings/join_A04_t01: fail, OK
-
-# co19 issue #443, Undefined class 'InvocationMirror'
-Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A01_t02: fail, OK
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t02: fail, OK
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: fail, OK
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t06: fail, OK
-Language/11_Expressions/17_Getter_Invocation_A02_t01: fail, OK
-Language/11_Expressions/17_Getter_Invocation_A02_t02: fail, OK
-
-# co19 issue #444, AsyncError has been removed
-LibTest/async/Completer/complete_A02_t02: fail, OK
-LibTest/async/Completer/completeError_A01_t01: fail, OK
-LibTest/async/Completer/completeError_A03_t02: fail, OK
-LibTest/async/Future/catchError_A01_t01: fail, OK
-LibTest/async/Future/catchError_A01_t02: fail, OK
-LibTest/async/Future/catchError_A02_t01: fail, OK
-LibTest/async/Future/catchError_A03_t01: fail, OK
-LibTest/async/Future/catchError_A03_t02: fail, OK
-LibTest/async/Future/catchError_A03_t03: fail, OK
-LibTest/async/Future/forEach_A03_t01: fail, OK
-LibTest/async/Future/Future.delayed_A02_t01: fail, OK
-LibTest/async/Future/then_A02_t01: fail, OK
-LibTest/async/Future/then_A02_t02: fail, OK
-LibTest/async/Future/then_A03_t01: fail, OK
-LibTest/async/Future/then_A04_t01: fail, OK
-LibTest/async/Future/whenComplete_A03_t01: fail, OK
-LibTest/async/Future/whenComplete_A04_t02: fail, OK
-
-# co19 issue #445, Future.immediate was repalce with Future.value
-LibTest/async/Future/asStream_A01_t01: fail, OK
-LibTest/async/Future/asStream_A01_t02: fail, OK
-LibTest/async/Future/asStream_A02_t01: fail, OK
-LibTest/async/Future/Future.immediate_A01_t01: fail, OK
-LibTest/async/Future/Future.immediateError_A01_t01: fail, OK
-LibTest/async/Future/then_A01_t03: fail, OK
-
-# co19 issue #446, Date was replaced with DateTime
-Language/14_Types/6_Type_dynamic_A03_t01: fail, OK
-
-# co19 issue 447, In Future delayed int replaced with Duration
-LibTest/async/Future/asStream_A01_t02: fail, OK
-LibTest/async/Future/asStream_A02_t01: fail, OK
-LibTest/async/Future/forEach_A01_t01: fail, OK
-LibTest/async/Future/forEach_A02_t01: fail, OK
-LibTest/async/Future/then_A01_t03: fail, OK
-LibTest/async/Future/wait_A01_t01: fail, OK
-LibTest/async/Future/wait_A01_t04: fail, OK
-LibTest/async/Future/wait_A01_t05: fail, OK
-LibTest/async/Future/wait_A01_t06: fail, OK
-LibTest/async/Future/whenComplete_A01_t01: fail, OK
-LibTest/async/Future/whenComplete_A02_t01: fail, OK
-LibTest/async/Future/whenComplete_A04_t01: fail, OK
-
 # co19 issue #448, Collection was removed
 LibTest/collection/Queue/Queue.from_A01_t01: fail, OK
 LibTest/collection/Queue/Queue.from_A01_t02: fail, OK
@@ -374,81 +99,189 @@
 LibTest/core/RegExp/allMatches_A01_t01: fail, OK
 LibTest/core/Set/intersection_A01_t02: fail, OK
 
-# co19 issue #449, Strings was removed
-LibTest/core/Strings/concatAll_A01_t01: fail, OK
-LibTest/core/Strings/concatAll_A02_t01: fail, OK
-LibTest/core/Strings/concatAll_A03_t01: fail, OK
-LibTest/core/Strings/join_A01_t01: fail, OK
-LibTest/core/Strings/join_A02_t01: fail, OK
-LibTest/core/Strings/join_A03_t01: fail, OK
-
-# co19 issue #450, The class 'List' does not have a constructor 'fixedLength'
-LibTest/core/List/add_A02_t01: fail, OK
-LibTest/core/List/addAll_A02_t01: fail, OK
-LibTest/core/List/clear_A02_t01: fail, OK
-LibTest/core/List/length_A04_t01: fail, OK
-LibTest/core/List/removeLast_A02_t01: fail, OK
-LibTest/core/List/removeRange_A02_t01: fail, OK
-
-# co19 issue 451, Set.intersection() requires Set argument
-LibTest/core/Set/intersection_A01_t01: fail, OK
-LibTest/core/Set/intersection_A01_t03: fail, OK
-LibTest/core/Set/intersection_A03_t01: fail, OK
-
 # co19 issue 452, more method in Iterable
 LibTest/core/Set/Set.from_A01_t02: fail, OK
 
-# co19 issue #453, abstract member in concrete class
-Language/07_Classes/07_Classes_A07_t10: fail, OK
-
-# co19 issue #454, should be static warning
-Language/11_Expressions/11_Instance_Creation/1_New_A01_t04: fail, OK
-
-# co19 issue #455, undeclared identifier is static warning
-Language/11_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t10: fail, OK
-Language/12_Statements/04_Local_Function_Declaration_A02_t02: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A02_t12: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A02_t14: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A02_t15: fail, OK
-
-# co19 issue #456
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t04: fail, OK
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t05: fail, OK
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t08: fail, OK
-
-# co19 issue 457, malformed type is static warning
-Language/11_Expressions/31_Type_Test_A05_t01: fail, OK
-Language/11_Expressions/31_Type_Test_A05_t02: fail, OK
-Language/11_Expressions/31_Type_Test_A05_t03: fail, OK
-Language/11_Expressions/32_Type_Cast_A04_t01: fail, OK
-Language/11_Expressions/32_Type_Cast_A04_t02: fail, OK
-
-# co19 issue #465, any use of a malbounded type gives rise to a static warning.
-Language/11_Expressions/11_Instance_Creation/1_New_A05_t01: fail, OK
-Language/11_Expressions/11_Instance_Creation/1_New_A05_t02: fail, OK
-Language/11_Expressions/11_Instance_Creation/1_New_A05_t03: fail, OK
-Language/11_Expressions/11_Instance_Creation_A03_t01: fail, OK
-Language/11_Expressions/11_Instance_Creation_A04_t01: fail, OK
-Language/11_Expressions/11_Instance_Creation_A04_t02: fail, OK
-
-# co19 issue #481
-Language/13_Libraries_and_Scripts/1_Imports_A03_t02: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t05: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t08: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t09: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t10: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t22: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t25: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t29: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t28: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t30: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t42: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t45: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t48: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t49: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t50: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t62: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t65: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t68: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t69: fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t70: fail, OK
+# co19-roll r546 (11.08.2013) caused these failures
+Language/05_Variables/05_Variables_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t01: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t02: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t03: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t04: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/00_Object_Identity/1_Object_Identity_A04_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/00_Object_Identity/1_Object_Identity_A04_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A11_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A12_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A13_t06: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A16_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A16_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A16_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A17_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t08: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t10: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/06_Lists_A06_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/08_Throw_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/08_Throw_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/08_Throw_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A01_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t07: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t06: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t07: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t08: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t09: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t12: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/2_Const_A09_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/2_Const_A09_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation_A01_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation_A01_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation_A01_t06: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation_A01_t08: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t07: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/32_Type_Test_A04_t02: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/02_Expression_Statements_A01_t06: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/04_Local_Function_Declaration_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Return_A07_t01: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A02_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A03_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A04_t03: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t27: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t47: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t67: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/2_Exports_A01_t17: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/2_Exports_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t24: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t25: fail # co19-roll r546: Please triage this failure
+Language/15_Types/1_Static_Types_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/15_Types/6_Type_dynamic_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/15_Types/6_Type_dynamic_A04_t01: fail # co19-roll r546: Please triage this failure
+Language/16_Reference/1_Lexical_Rules/2_Comments_A04_t03: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/asBroadcastStream_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/distinct_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/distinct_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/drain_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/drain_A02_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/EventTransformStream_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/expand_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/first_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/listen_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/listen_A04_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/transform_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/where_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Future/asStream_A01_t02: pass # co19-roll r546: Please triage this failure
+LibTest/async/Future/asStream_A02_t01: pass # co19-roll r546: Please triage this failure
+LibTest/async/Future/whenComplete_A03_t01: pass # co19-roll r546: Please triage this failure
+LibTest/async/Stream/asBroadcastStream_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/asBroadcastStream_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/contains_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamController/hasListener_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamController/hasListener_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamController/isClosed_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamController/isClosed_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamController/isPaused_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamController/isPaused_A01_t03: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamController/sink_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamController/StreamController.broadcast_A04_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/distinct_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/distinct_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/drain_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/drain_A02_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamEventTransformer/handleData_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamEventTransformer/handleDone_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamEventTransformer/handleError_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/expand_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/isBroadcast_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/isBroadcast_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamIterator/cancel_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/listen_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/listen_A04_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamSink/close_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.fromFuture_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.fromFuture_A02_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.fromIterable_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.periodic_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/transform_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/where_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Timer/cancel_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Timer/Timer.periodic_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Timer/Timer.periodic_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/compareTo_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/isAtSameMomentAs_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/subtract_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/double/parse_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_div_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_eq_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_gt_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_gte_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_lt_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_lte_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_minus_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_mult_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_plus_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/FallThroughError/toString_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/int/ceilToDouble_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/int/floorToDouble_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/int/roundToDouble_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/int/truncateToDouble_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/asMap_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/every_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/forEach_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/join_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/lastWhere_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/List_A01_t03: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/List.filled_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/List.from_A01_t03: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/List.generate_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/List.generate_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/List.generate_A01_t03: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/map_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/removeAt_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/replaceRange_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/replaceRange_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/skipWhile_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/takeWhile_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/toList_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/toList_A01_t03: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/toSet_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/StringBuffer/writeAll_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/spawnFunction_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/streamSpawnFunction_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateSink/add_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateSink/addError_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateSink/addError_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateSink/operator_equality_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/any_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/asBroadcastStream_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/contains_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/contains_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/isBroadcast_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/last_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/length_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/single_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/SendPort/send_A02_t02: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/SendPort/send_A02_t03: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/SendPort/send_A02_t04: fail # co19-roll r546: Please triage this failure
diff --git a/tests/co19/co19-dart2dart.status b/tests/co19/co19-dart2dart.status
index 2e5df38..13a1129 100644
--- a/tests/co19/co19-dart2dart.status
+++ b/tests/co19/co19-dart2dart.status
@@ -4,96 +4,24 @@
 
 [ $compiler == dart2dart ]
 
-Language/11_Expressions/08_Throw_A05_t01: Fail # co19 issue 420
-Language/11_Expressions/08_Throw_A05_t02: Fail # co19 issue 420
-Language/11_Expressions/08_Throw_A05_t03: Fail # co19 issue 420
-
 LibTest/math/max_A01_t03: Fail # co19 issue 467
 LibTest/math/min_A01_t03: Fail # co19 issue 467
 
 # The following tests fail because they contain number literals with a + prefix (co19 issue 428)
 LibTest/core/double/floor_A01_t05: Fail # issue 428
 LibTest/core/double/ceil_A01_t05: Fail # issue 428
-Language/12_Statements/02_Expression_Statements_A01_t06: Fail # co19 issue 428
-Language/11_Expressions/03_Numbers_A01_t10: Fail # co19 issue 428
-Language/11_Expressions/03_Numbers_A01_t08: Fail # co19 issue 428
-Language/11_Expressions/03_Numbers_A01_t04: Fail # co19 issue 428
-Language/11_Expressions/03_Numbers_A01_t03: Fail # co19 issue 428
-Language/11_Expressions/03_Numbers_A01_t02: Fail # co19 issue 428
-Language/11_Expressions/03_Numbers_A01_t01: Fail # co19 issue 428
-Language/11_Expressions/01_Constants_A01_t01: Fail # co19 issue 428
 
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t15: Fail # TODO(dart2dart-team): Please triage this failure.
 Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A01_t03: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/11_Expressions/01_Constants_A18_t06: Fail # # co19 issue 468
-Language/11_Expressions/11_Instance_Creation_A05_t02: Fail # co19 issue 478
-Language/11_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t10: Fail # Issue 7025
-Language/12_Statements/03_Variable_Declaration_A04_t07: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/12_Statements/03_Variable_Declaration_A04_t08: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/12_Statements/09_Switch_A04_t01: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/12_Statements/10_Try_A03_t01: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/12_Statements/10_Try_A03_t02: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/12_Statements/10_Try_A03_t03: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t12: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t15: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t29: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/15_Reference/1_Lexical_Rules_A01_t10: Fail # co19 issue 470
-LibTest/async/Future/Future.delayed_A01_t01: Fail # co19 issue 471
-LibTest/async/Future/Future.delayed_A01_t02: Fail # co19 issue 471
-LibTest/async/Future/Future.delayed_A02_t01: Fail # co19 issue 471
-LibTest/async/Future/asStream_A01_t01: Fail # co19 issue 472
-LibTest/async/Future/asStream_A01_t02: Fail # co19 issue 472
-LibTest/async/Future/asStream_A02_t01: Fail # co19 issue 472
-LibTest/async/Future/catchError_A03_t01: Fail # co19 issue 471
-LibTest/async/Future/catchError_A03_t02: Fail # co19 issue 471
-LibTest/async/Future/catchError_A03_t03: Fail # co19 issue 471
-LibTest/async/Future/forEach_A01_t01: Fail # co19 issue 471
-LibTest/async/Future/forEach_A02_t01: Fail # co19 issue 471
-LibTest/async/Future/forEach_A03_t01: Fail # co19 issue 471
-LibTest/async/Future/then_A01_t03: Fail # co19 issue 472
-LibTest/async/Future/then_A02_t01: Fail # co19 issue 471
-LibTest/async/Future/then_A02_t02: Fail # co19 issue 473
-LibTest/async/Future/then_A03_t01: Fail # co19 issue 471
-LibTest/async/Future/then_A04_t01: Fail # co19 issue 471
-LibTest/async/Future/wait_A01_t01: Fail # co19 issue 471
-LibTest/async/Future/wait_A01_t04: Fail # co19 issue 471
-LibTest/async/Future/wait_A01_t05: Fail # co19 issue 471
-LibTest/async/Future/wait_A01_t06: Fail # co19 issue 471
-LibTest/async/Future/wait_A02_t01: Fail # co19 issue 474
-LibTest/async/Future/wait_A02_t02: Fail # co19 issue 474
-LibTest/async/Future/whenComplete_A01_t01: Fail # co19 issue 471
-LibTest/async/Future/whenComplete_A02_t01: Fail # co19 issue 471
-LibTest/async/Future/whenComplete_A03_t01: Fail # co19 issue 471
-LibTest/async/Future/whenComplete_A04_t01: Fail # co19 issue 471
-LibTest/async/Future/whenComplete_A04_t02: Fail # co19 issue 471
 LibTest/collection/Queue/iterator_current_A01_t02: Fail # co19 issue 475
 LibTest/collection/Queue/iterator_moveNext_A01_t02: Fail # co19 issue 475
-LibTest/core/List/List_A01_t02: Fail # co19 issue 476
-LibTest/core/double/toStringAsExponential_A02_t01: Fail # co19 issue 477
 LibTest/core/int/toStringAsExponential_A02_t01: Fail # co19 issue 477
 
-Language/14_Types/5_Function_Types_A01_t10: Fail # co19 issue 392
-Language/14_Types/5_Function_Types_A02_t06: Fail # co19 issue 392
-
 Language/03_Overview/1_Scoping_A01_t39: Fail # http://dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A06_t01: Fail # http://dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A06_t02: Fail # http://dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A06_t03: Fail # http://dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A06_t04: Fail # http://dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A06_t05: Fail # http://dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A07_t01: Fail # http://dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A07_t02: Fail # http://dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A07_t03: Fail # http://dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A07_t04: Fail # http://dartbug.com/7202
-
-Language/12_Statements/02_Expression_Statements_A01_t08: Fail # co 19 issue 370
 
 Language/03_Overview/2_Privacy_A01_t19: Fail # Calling unresolved class constructor.
 Language/03_Overview/2_Privacy_A01_t20: Fail # Calling unresolved class constructor.
 Language/07_Classes/6_Constructors_A03_t03: Fail # Calling unresolved class constructor.
-Language/11_Expressions/11_Instance_Creation/1_New_A06_t04: Fail # Calling unresolved class constructor.
-Language/11_Expressions/11_Instance_Creation/1_New_A06_t05: Fail # Calling unresolved class constructor.
-Language/11_Expressions/11_Instance_Creation/1_New_A06_t06: Fail # Calling unresolved class constructor.
 
 Language/03_Overview/1_Scoping_A01_t39: Fail # http://dartbug.com/5519
 Language/03_Overview/1_Scoping_A01_t40: Fail # http://dartbug.com/5519
@@ -108,13 +36,6 @@
 Language/05_Variables/05_Variables_A01_t13: Fail # http://dartbug.com/5519
 Language/05_Variables/05_Variables_A01_t14: Fail # http://dartbug.com/5519
 Language/05_Variables/05_Variables_A01_t15: Fail # http://dartbug.com/5519
-Language/05_Variables/05_Variables_A05_t04: Fail # Inherited from dart2js
-Language/05_Variables/05_Variables_A05_t05: Fail # Inherited from dart2js
-Language/05_Variables/05_Variables_A05_t06: Fail # Inherited from dart2js
-Language/05_Variables/05_Variables_A05_t07: Fail # Inherited from dart2js
-Language/05_Variables/05_Variables_A05_t08: Fail # Inherited from dart2js
-Language/05_Variables/05_Variables_A05_t09: Fail # Inherited from dart2js
-Language/05_Variables/05_Variables_A05_t10: Fail # Inherited from dart2js
 Language/05_Variables/05_Variables_A07_t05: Fail # Inherited from dart2js
 Language/05_Variables/05_Variables_A07_t06: Fail # Inherited from dart2js
 Language/05_Variables/05_Variables_A07_t07: Fail # Inherited from dart2js
@@ -179,141 +100,6 @@
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t02: Fail # inherited from VM
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: Fail # inherited from VM
 Language/07_Classes/6_Constructors_A02_t01: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A03_t02: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A03_t03: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A03_t04: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A03_t05: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A05_t02: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A05_t03: Fail # http://dartbug.com/5810
-Language/11_Expressions/01_Constants_A05_t04: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A08_t02: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A09_t02: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A10_t02: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A10_t03: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A11_t02: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A11_t03: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A11_t04: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A12_t02: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A12_t03: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A13_t02: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A13_t03: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A13_t04: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A13_t05: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A14_t02: Fail # http://dartbug.com/5810
-Language/11_Expressions/01_Constants_A15_t06: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A15_t07: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A15_t08: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A15_t09: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A15_t10: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A15_t11: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A15_t12: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A15_t13: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A15_t14: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A15_t15: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A15_t16: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A15_t17: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A15_t18: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A15_t20: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A15_t21: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A15_t31: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A16_t01: Fail # inherited from VM
-Language/11_Expressions/01_Constants_A16_t02: Crash, Pass # inherited from VM
-Language/11_Expressions/01_Constants_A16_t02: Fail # inherited from VM
-Language/11_Expressions/01_Constants_A16_t03: Fail # inherited from VM
-Language/11_Expressions/01_Constants_A17_t01: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A17_t02: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A17_t03: Crash # inherited from VM
-Language/11_Expressions/01_Constants_A17_t03: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A19_t02: Fail # http://dartbug.com/5810
-Language/11_Expressions/01_Constants_A19_t03: Fail # http://dartbug.com/5810
-Language/11_Expressions/01_Constants_A19_t04: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A20_t02: Fail # http://dartbug.com/5810
-Language/11_Expressions/01_Constants_A20_t03: Fail # http://dartbug.com/5810
-Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t09: Fail, OK # co19 issue 210
-Language/11_Expressions/05_Strings_A02_t01: Skip # co19 issue 90.
-Language/11_Expressions/05_Strings_A02_t46: Fail # inherited from VM
-Language/11_Expressions/05_Strings_A02_t48: Fail # inherited from VM
-Language/11_Expressions/05_Strings_A20_t01: Fail # inherited from VM
-Language/11_Expressions/06_Lists_A03_t01: Fail # http://dartbug.com/5519
-Language/11_Expressions/06_Lists_A03_t02: Fail # http://dartbug.com/5519
-Language/11_Expressions/07_Maps_A01_t01: Skip # co19 issue 91: map literals illegal at statement beginning.
-Language/11_Expressions/07_Maps_A02_t01: Fail # http://dartbug.com/5519
-Language/11_Expressions/07_Maps_A02_t02: Fail # http://dartbug.com/5519
-Language/11_Expressions/11_Instance_Creation/1_New_A01_t04: Fail, OK # co19 issue 241
-Language/11_Expressions/11_Instance_Creation/1_New_A02_t03: Fail # inherited from dart2js
-Language/11_Expressions/11_Instance_Creation/1_New_A02_t05: Fail # inherited from dart2js
-Language/11_Expressions/11_Instance_Creation/1_New_A02_t06: Fail # inherited from dart2js
-Language/11_Expressions/11_Instance_Creation/1_New_A02_t07: Fail # inherited from dart2js
-Language/11_Expressions/11_Instance_Creation/1_New_A03_t01: Fail # http://dartbug.com/6895
-Language/11_Expressions/11_Instance_Creation/1_New_A03_t02: Fail # http://dartbug.com/6895
-Language/11_Expressions/11_Instance_Creation/1_New_A04_t01: Fail # http://dartbug.com/6895
-Language/11_Expressions/11_Instance_Creation/1_New_A09_t09: Fail # inherited from VM
-Language/11_Expressions/11_Instance_Creation/2_Const_A01_t02: Fail # http://dartbug.com/5519
-Language/11_Expressions/11_Instance_Creation/2_Const_A06_t01: Fail # http://dartbug.com/5519
-Language/11_Expressions/11_Instance_Creation/2_Const_A06_t02: Fail # http://dartbug.com/5519
-Language/11_Expressions/11_Instance_Creation/2_Const_A10_t01: Fail # inherited from VM
-Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t01: Fail # inherited from VM
-Language/11_Expressions/18_Assignment_A05_t04: Fail, Pass, OK # Fails in minified, depends on method names.
-Language/11_Expressions/22_Equality_A01_t01: Fail # inherited from VM
-Language/11_Expressions/22_Equality_A01_t15: Fail # http://dartbug.com/5519
-Language/11_Expressions/22_Equality_A01_t16: Fail # http://dartbug.com/5519
-Language/11_Expressions/22_Equality_A01_t19: Fail # http://dartbug.com/5519
-Language/11_Expressions/22_Equality_A01_t20: Fail, OK # co19 issue 241
-Language/11_Expressions/22_Equality_A05_t01: Fail # inherited from VM
-Language/11_Expressions/23_Relational_Expressions_A01_t10: Fail # http://dartbug.com/5519
-Language/11_Expressions/23_Relational_Expressions_A01_t11: Fail # http://dartbug.com/5519
-Language/11_Expressions/23_Relational_Expressions_A01_t12: Fail # http://dartbug.com/5519
-Language/11_Expressions/23_Relational_Expressions_A01_t13: Fail # http://dartbug.com/5519
-Language/11_Expressions/27_Unary_Expressions_A01_t01: Fail # inherited from VM
-Language/11_Expressions/30_Identifier_Reference_A02_t01: Fail # Pseudo keyword "abstract".
-Language/11_Expressions/30_Identifier_Reference_A04_t09: Fail # Inherited from dart2js
-Language/11_Expressions/30_Identifier_Reference_A05_t01: Fail # Inherited from dart2js
-Language/11_Expressions/30_Identifier_Reference_A05_t12: Fail # Inherited from dart2js
-Language/11_Expressions/30_Identifier_Reference_A08_t02: Fail # Inhertited from VM.
-Language/12_Statements/03_Variable_Declaration_A04_t01: Fail # http://dartbug.com/5519
-Language/12_Statements/03_Variable_Declaration_A04_t02: Fail # Inherited from dart2js
-Language/12_Statements/03_Variable_Declaration_A04_t03: Fail # Inherited from dart2js
-Language/12_Statements/03_Variable_Declaration_A04_t04: Fail # Inherited from dart2js
-Language/12_Statements/03_Variable_Declaration_A04_t05: Fail # Inherited from dart2js
-Language/12_Statements/03_Variable_Declaration_A04_t06: Fail # Inherited from dart2js
-Language/12_Statements/04_Local_Function_Declaration_A01_t01: Fail # Inherited from dart2js
-Language/12_Statements/04_Local_Function_Declaration_A02_t02: Fail # Inherited from dart2js
-Language/12_Statements/06_For_A01_t11: Fail # Inherited from dart2js
-Language/12_Statements/09_Switch_A01_t02: Fail # Inherited from VM (switch case with several labels).
-Language/12_Statements/09_Switch_A06_t02: Fail # Inherited from VM (does not throw NSME).
-Language/12_Statements/10_Try_A06_t01: Fail, Pass # Passes in conservative renaming mode. Test depends on function names.
-Language/12_Statements/10_Try_A07_t03: Fail # Test depends on out file name.
-Language/12_Statements/11_Return_A05_t01: Fail # Inherited from dart2js
-Language/12_Statements/11_Return_A05_t02: Fail # Inherited from dart2js
-Language/12_Statements/11_Return_A05_t03: Fail # Inherited from dart2js
-Language/12_Statements/12_Labels_A01_t03: Fail # Inherited from VM (Multiple labels fail).
-Language/13_Libraries_and_Scripts/1_Imports_A02_t14: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/1_Imports_A02_t28: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/1_Imports_A05_t01: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/3_Parts_A03_t02: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/4_Scripts_A03_t01: Fail # http://dartbug.com/5519
-Language/13_Libraries_and_Scripts/4_Scripts_A03_t03: Fail # http://dartbug.com/5519
-Language/13_Libraries_and_Scripts/5_URIs_A01_t01: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/5_URIs_A01_t11: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/5_URIs_A01_t21: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/5_URIs_A01_t24: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/5_URIs_A01_t25: Fail # Inherited from dart2js
-Language/14_Types/3_Type_Declarations/1_Typedef_A06_t01: Fail # http://dartbug.com/5519
-Language/14_Types/3_Type_Declarations/1_Typedef_A06_t02: Fail # http://dartbug.com/5519
-Language/14_Types/3_Type_Declarations/1_Typedef_A06_t03: Fail # http://dartbug.com/5519
-Language/14_Types/3_Type_Declarations/1_Typedef_A06_t04: Fail # http://dartbug.com/5519
-Language/14_Types/3_Type_Declarations/1_Typedef_A06_t05: Fail # Inherited from dart2js
-Language/14_Types/3_Type_Declarations/1_Typedef_A07_t01: Fail, Pass # inherited from dart2js: fails in minify, self-reference typedef check not performed
-Language/14_Types/3_Type_Declarations/1_Typedef_A07_t02: Fail, Pass # inherited from dart2js: fails in minify, self-reference typedef check not performed
-Language/14_Types/3_Type_Declarations/1_Typedef_A07_t03: Fail, Pass # inherited from dart2js: fails in minify, self-reference typedef check not performed
-Language/14_Types/3_Type_Declarations/1_Typedef_A07_t04: Fail # Inherited from dart2js
-Language/14_Types/5_Function_Types_A06_t01: Fail # Inherited from dart2js
-Language/15_Reference/1_Lexical_Rules/1_Reserved_Words_A40_t04: Fail # inherited from dart2js
-Language/15_Reference/1_Lexical_Rules_A02_t06: Fail # inherited from dart2js
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A03_t01: Fail # Inherited from dart2js
-LibTest/core/Date/Date.fromString_A03_t01: Pass, OK # Issue co19 - 121 (currently passing due to co19 issues 373 and 374)
-LibTest/core/Date/toString_A02_t01: Fail, OK # inherited from VM
-LibTest/core/Date/year_A01_t01: Fail, OK # inherited from VM
 LibTest/core/Match/operator_subscript_A01_t01: Fail # inherited from VM
 LibTest/core/Match/operator_subscript_A01_t01: Fail, OK # co19 issue 294
 LibTest/core/Match/pattern_A01_t01: Fail, OK # Issue 400
@@ -337,7 +123,6 @@
 LibTest/core/int/toRadixString_A01_t01: Fail # inherited from VM
 LibTest/isolate/ReceivePort/receive_A01_t02: Fail, OK # co19 issue 276
 LibTest/isolate/isolate_api/port_A01_t01: Skip # Times out.
-LibTest/isolate/isolate_api/spawnFunction_A02_t01: Fail  # Inherited from VM.
 LibTest/isolate/isolate_api/spawnUri_A01_t01: Fail, OK # Problems with the test: encoded file name
 LibTest/isolate/isolate_api/spawnUri_A01_t02: Fail, OK # Problems with the test: encoded file name
 LibTest/isolate/isolate_api/spawnUri_A01_t03: Fail, OK # Problems with the test: encoded file name
@@ -350,43 +135,11 @@
 LibTest/math/sin_A01_t01: Fail # Inherited from VM.
 LibTest/math/tan_A01_t01: Fail # Issue co19 - 44
 
-LibTest/core/StringBuffer/isEmpty_A01_t01:  Fail, OK # co19 issue 355
 
-Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A01_t02: Fail, OK # co19 issue 409
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t02: Fail, OK # co19 issue 409
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: Fail, OK # co19 issue 409
-Language/11_Expressions/17_Getter_Invocation_A02_t01: Fail, OK # co19 issue 409
-Language/11_Expressions/18_Assignment_A05_t02: Fail, OK # co19 issue 409
-Language/11_Expressions/18_Assignment_A05_t05: Fail, OK # co19 issue 409
-Language/11_Expressions/18_Assignment_A08_t04: Fail, OK # co19 issue 409
 
 LibTest/core/String/indexOf_A01_t02: Fail # Issue 427
 LibTest/core/String/lastIndexOf_A01_t02: Fail # Issue 427
 
-Language/11_Expressions/31_Type_Test_A05_t01: Fail # co19 issue 463
-Language/11_Expressions/31_Type_Test_A05_t02: Fail # co19 issue 463
-Language/11_Expressions/31_Type_Test_A05_t03: Fail # co19 issue 463
-Language/11_Expressions/32_Type_Cast_A04_t01: Fail # co19 issue 463
-Language/11_Expressions/32_Type_Cast_A04_t02: Fail # co19 issue 463
-
-Language/11_Expressions/11_Instance_Creation/1_New_A05_t01: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation/1_New_A05_t02: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation/1_New_A05_t03: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation/2_Const_A07_t01: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation/2_Const_A07_t02: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation/2_Const_A07_t03: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation_A03_t01: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation_A03_t02: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation_A04_t01: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation_A04_t02: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation_A04_t03: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation_A04_t04: Fail # co19 issue 466
-
-[ $compiler == dart2dart && $minified ]
-Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A01_t02: Fail, OK # co19 issue 396
-Language/11_Expressions/17_Getter_Invocation_A02_t01: Fail, OK # co19 issue 396
-Language/11_Expressions/18_Assignment_A05_t02: Fail, OK # co19 issue 396
-
 
 [ $compiler == dart2dart && $system == windows ]
 LibTest/core/double/operator_remainder_A01_t04: Fail # Result is NaN
@@ -401,96 +154,6 @@
 
 [ $compiler == dart2dart ]
 Language/03_Overview/2_Privacy_A01_t06: Fail # co19 issue 463
-Language/09_Generics/09_Generics_A05_t01: Fail # co19 issue 463
-Language/11_Expressions/31_Type_Test_A04_t01: Fail # co19 issue 463
-Language/11_Expressions/32_Type_Cast_A03_t01: Fail # co19 issue 463
-Language/11_Expressions/32_Type_Cast_A03_t02: Fail # co19 issue 463
-Language/14_Types/2_Dynamic_Type_System_A02_t01: Fail # co19 issue 463
-Language/14_Types/4_Interface_Types_A11_t01: Pass, Crash # Issue 8857
-Language/14_Types/4_Interface_Types_A11_t02: Pass, Crash # Issue 8857
-
-LibTest/core/Date/operator_equality_A01_t01: Fail # DateTime.== now looks at timezone, co19 issue 379
-
-Language/14_Types/6_Type_dynamic_A03_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t02: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A03_t01: pass
-LibTest/core/Date/Date.fromString_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.fromString_A01_t02: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.fromString_A03_t01: pass
-LibTest/core/Date/Date.now_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.now_A01_t02: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.now_A01_t03: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.utc_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date_A01_t03: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date_A01_t04: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/add_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/add_A02_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/add_A03_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/compareTo_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/compareTo_A01_t02: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/day_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/difference_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/difference_A01_t02: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/hour_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/isUtc_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/millisecond_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/millisecondsSinceEpoch_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/minute_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/month_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/operator_GE_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/operator_GT_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/operator_LE_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/operator_LT_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/second_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/subtract_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/subtract_A02_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/subtract_A03_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/timeZoneName_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/timeZoneOffset_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/toLocal_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/toString_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/toUtc_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/weekday_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-
-LibTest/core/Strings/join_A01_t01: Fail # Strings class has been removed. co19 issue 380
-LibTest/core/Strings/join_A04_t01: Fail # Strings class has been removed. co19 issue 380
-LibTest/core/Strings/concatAll_A01_t01: Fail # Strings class has been removed. co19 issue 380
-LibTest/core/Strings/concatAll_A04_t01: Fail # Strings class has been removed. co19 issue 380
-
-LibTest/core/String/charCodes_A01_t01: Fail # Deprecated string members removed (issue 382).
-LibTest/core/String/charCodeAt_A02_t01: Fail # Deprecated string members removed (issue 382).
-LibTest/core/String/charCodeAt_A03_t01: Fail # Deprecated string members removed (issue 382).
-LibTest/core/String/charCodeAt_A01_t01: Fail # Deprecated string members removed (issue 382).
-LibTest/core/String/splitChars_A01_t01: Fail # Deprecated string members removed (issue 382).
-
-LibTest/core/StringBuffer/addAll_A01_t02: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/StringBuffer/add_A01_t02: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/StringBuffer/add_A01_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/StringBuffer/addAll_A01_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/StringBuffer/toString_A01_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t02: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A04_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/12_Statements/01_Blocks_A01_t03: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/14_Function_Invocation/1_Actual_Argument_List_Evaluation_A02_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/11_Instance_Creation/1_New_A09_t12: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/11_Instance_Creation/1_New_A09_t05: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/11_Instance_Creation/1_New_A13_t03: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/11_Instance_Creation/1_New_A09_t06: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A04_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t05: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/05_Strings/1_String_Interpolation_A03_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/05_Strings/1_String_Interpolation_A04_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-
-Language/15_Reference/1_Lexical_Rules/2_Comments_A04_t03: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A02_t01: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/Date.fromString_A04_t01: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/add_A06_t01: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/compareTo_A03_t01: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/difference_A03_t01: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/subtract_A06_t01: Fail # Uses deprecated Expect class, issue 398
 
 LibTest/core/double/ceil_A01_t03: Fail # truncate/ceil/floor/round returns ints, issue 389
 LibTest/core/double/ceil_A01_t04: Fail # truncate/ceil/floor/round returns ints, issue 389
@@ -501,68 +164,10 @@
 LibTest/core/double/truncate_A01_t03: Fail # truncate/ceil/floor/round returns ints, issue 389
 LibTest/core/double/truncate_A01_t04: Fail # truncate/ceil/floor/round returns ints, issue 389
 
-LibTest/core/List/getRange_A02_t01: Fail # issue 391, and Issue 399
-LibTest/core/List/getRange_A01_t01: Fail # getRange now takes end-argument and returns Iterable. Issue 399
-LibTest/core/List/getRange_A04_t01: Fail # getRange now takes end-argument and returns Iterable. Issue 399
-LibTest/core/List/operator_subscript_A01_t02: Fail # getRange now takes end-argument and returns Iterable. Issue 399
-
-LibTest/async/Future/catchError_A01_t01: Fail # Future constructors have changed # issues 408
-LibTest/async/Future/Future.immediateError_A01_t01: Fail # Future constructors have changed # issues 408
-LibTest/async/Future/asStream_A01_t01: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/Future.immediate_A01_t01: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/then_A01_t03: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/catchError_A01_t01: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/forEach_A03_t01: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/asStream_A01_t02: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/Future.immediateError_A01_t01: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/asStream_A02_t01: Fail # Future constructors have changed # issue 408
-
 LibTest/core/Iterable/any_A01_t04: Fail # setRange now takes end-argument. Issue 402
-LibTest/core/List/setRange_A01_t02: Fail # setRange now takes end-argument. Issue 402
-LibTest/core/List/setRange_A02_t01: Fail # setRange now takes end-argument. Issue 402
-LibTest/core/List/setRange_A02_t02: Fail # setRange now takes end-argument. Issue 402
-LibTest/core/List/setRange_A05_t01: Fail # setRange now takes end-argument. Issue 402
-LibTest/core/List/setRange_A03_t01: Fail # setRange throws StateError if there aren't enough elements in the iterable. Issue 402
-LibTest/core/List/setRange_A03_t02: Fail # setRange throws StateError if there aren't enough elements in the iterable. Issue 402
 
-LibTest/core/List/removeRange_A01_t01: Fail # removeRange now takes end-argument. Issue 404
-LibTest/core/List/removeRange_A03_t01: Fail # removeRange now takes end-argument. Issue 404
-LibTest/core/List/removeRange_A05_t01: Fail # removeRange now takes end-argument. Issue 404
-
-LibTest/core/List/insertRange_A01_t01: Fail # insertRange is removed. Issue 403
-LibTest/core/List/insertRange_A03_t01: Fail # insertRange is removed. Issue 403
-LibTest/core/List/insertRange_A04_t01: Fail # insertRange is removed. Issue 403
-LibTest/core/List/insertRange_A05_t01: Fail # insertRange is removed. Issue 403
-LibTest/core/List/insertRange_A06_t01: Fail # insertRange is removed. Issue 403
-LibTest/core/List/every_A01_t01: Fail # insertRange is removed. Issue 403
-
-LibTest/async/Completer/completeError_A01_t01: Fail # No AsyncError anymore. Issue 407
-LibTest/async/Future/Future.immediateError_A01_t01: Fail # No AsyncError anymore. Issue 407
-LibTest/async/Future/catchError_A02_t01: Fail # No AsyncError anymore. Issue 407
-
-LibTest/async/Completer/complete_A01_t03: Fail # Completer is now asynchronous. Issue 419
-LibTest/async/Completer/complete_A01_t04: Fail # Completer is now asynchronous. Issue 419
-LibTest/async/Future/then_A01_t01: Fail # Completer is now asynchronous. Issue 419
-LibTest/async/Future/then_A01_t04: Fail # Completer is now asynchronous. Issue 419
-
-Language/11_Expressions/05_Strings/1_String_Interpolation_A03_t02: Fail # Issue 397
-Language/11_Expressions/05_Strings/1_String_Interpolation_A04_t02: Fail # Issue 397
-Language/11_Expressions/11_Instance_Creation/1_New_A08_t01: Fail # Issue 397
-Language/11_Expressions/11_Instance_Creation/1_New_A08_t02: Fail # Issue 397
-Language/11_Expressions/11_Instance_Creation/1_New_A08_t03: Fail # Issue 397
 LibTest/core/Iterable/where_A01_t07: Fail # Issue 397
-LibTest/core/List/addLast_A01_t01: Fail # Issue 397
-LibTest/core/List/addLast_A01_t03: Fail # Issue 397
-LibTest/core/List/addLast_A02_t01: Fail # Issue 397
 
-LibTest/core/List/List.fixedLength_A01_t01: Fail # Issue 400
-LibTest/core/List/addAll_A02_t01: Fail # Issue 400
-LibTest/core/List/add_A02_t01: Fail # Issue 400
-LibTest/core/List/clear_A02_t01: Fail # Issue 400
-LibTest/core/List/insertRange_A02_t01: Fail # Issue 400
-LibTest/core/List/length_A04_t01: Fail # Issue 400
-LibTest/core/List/removeLast_A02_t01: Fail # Issue 400
-LibTest/core/List/removeRange_A02_t01: Fail # Issue 400
 LibTest/core/Set/isSubsetOf_A01_t01: Fail # Issue 400
 LibTest/core/Set/isSubsetOf_A01_t02: Fail # Issue 400
 
@@ -573,17 +178,240 @@
 Language/07_Classes/1_Instance_Methods_A02_t02: Fail # Override rules have been relaxed. Issue
 Language/07_Classes/1_Instance_Methods_A02_t05: Fail # Override rules have been relaxed. Issue
 
-Language/11_Expressions/33_Argument_Definition_Test_A01_t02: Fail, OK # co19 issue 436
-Language/11_Expressions/33_Argument_Definition_Test_A02_t01: Fail, OK # co19 issue 436
-Language/11_Expressions/33_Argument_Definition_Test_A02_t02: Fail, OK # co19 issue 436
-Language/11_Expressions/33_Argument_Definition_Test_A03_t01: Fail, OK # co19 issue 436
-Language/11_Expressions/33_Argument_Definition_Test_A03_t02: Fail, OK # co19 issue 436
 
-Language/13_Libraries_and_Scripts/1_Imports_A03_t02: Fail # 481
-Language/13_Libraries_and_Scripts/1_Imports_A03_t05: Fail # 481
-Language/13_Libraries_and_Scripts/1_Imports_A03_t22: Fail # 481
-Language/13_Libraries_and_Scripts/1_Imports_A03_t25: Fail # 481
-Language/13_Libraries_and_Scripts/1_Imports_A03_t42: Fail # 481
-Language/13_Libraries_and_Scripts/1_Imports_A03_t45: Fail # 481
-Language/13_Libraries_and_Scripts/1_Imports_A03_t62: Fail # 481
-Language/13_Libraries_and_Scripts/1_Imports_A03_t65: Fail # 481
+# co19-roll r546 (11.08.2013) caused these failures
+[ $compiler == dart2dart ]
+Language/05_Variables/05_Variables_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A06_t01: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A06_t02: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A06_t03: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A06_t04: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A06_t05: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A06_t06: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/07_Classes_A11_t01: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/07_Classes_A11_t03: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t01: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t02: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t03: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/00_Object_Identity/1_Object_Identity_A04_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A03_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A03_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A03_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A03_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A05_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A08_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A09_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A10_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A10_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A11_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A11_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A11_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A12_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A12_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A13_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A13_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A13_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A13_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A14_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A15_t06: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A15_t07: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A15_t08: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A15_t09: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A15_t10: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A15_t11: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A15_t12: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A15_t13: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A15_t14: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A15_t15: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A15_t16: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A15_t17: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A15_t18: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A15_t20: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A15_t21: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A15_t31: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A16_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A16_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A16_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A17_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A17_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A17_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A19_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A19_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A19_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A20_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A20_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t08: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t10: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/05_Strings/1_String_Interpolation_A01_t09: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/05_Strings/1_String_Interpolation_A03_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/05_Strings/1_String_Interpolation_A04_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/05_Strings_A02_t46: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/05_Strings_A02_t48: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/05_Strings_A20_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/06_Lists_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/06_Lists_A03_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A02_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A02_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A08_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A12_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A12_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A12_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A12_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A12_t06: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A12_t07: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/08_Throw_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/08_Throw_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/08_Throw_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t06: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t07: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A03_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A04_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t06: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t12: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A08_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A08_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A08_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A09_t09: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/2_Const_A06_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/2_Const_A06_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/2_Const_A09_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/2_Const_A10_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A01_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t09: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/17_Getter_Invocation_A02_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/18_Assignment_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/18_Assignment_A05_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/18_Assignment_A05_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/18_Assignment_A08_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/22_Equality_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/22_Equality_A01_t15: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/22_Equality_A01_t16: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/22_Equality_A01_t19: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/22_Equality_A01_t20: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/22_Equality_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/23_Relational_Expressions_A01_t10: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/23_Relational_Expressions_A01_t11: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/23_Relational_Expressions_A01_t12: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/23_Relational_Expressions_A01_t13: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/27_Unary_Expressions_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/30_Identifier_Reference_A02_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/30_Identifier_Reference_A04_t09: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/30_Identifier_Reference_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/30_Identifier_Reference_A05_t12: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/30_Identifier_Reference_A08_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/32_Type_Test_A04_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/32_Type_Test_A04_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/32_Type_Test_A04_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/33_Type_Cast_A03_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/33_Type_Cast_A03_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/02_Expression_Statements_A01_t06: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/02_Expression_Statements_A01_t08: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t01: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t02: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t04: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t05: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t06: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t07: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t08: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/04_Local_Function_Declaration_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/06_For_A01_t11: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/09_Switch_A01_t02: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/09_Switch_A04_t01: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/09_Switch_A06_t02: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Return_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Return_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Return_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A02_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A03_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A04_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A07_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/12_Labels_A01_t03: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A02_t28: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A02_t29: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t08: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t09: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t10: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t27: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t28: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t29: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t30: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t47: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t48: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t49: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t50: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t67: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t68: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t69: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t70: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A04_t03: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/3_Parts_A03_t02: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/4_Scripts_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/4_Scripts_A03_t03: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t11: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t21: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t24: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t25: fail # co19-roll r546: Please triage this failure
+Language/15_Types/1_Static_Types_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A06_t01: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A06_t02: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A06_t03: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A06_t04: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A06_t05: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A07_t01: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A07_t02: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A07_t03: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A07_t04: fail # co19-roll r546: Please triage this failure
+Language/15_Types/4_Interface_Types_A11_t01: crash # co19-roll r546: Please triage this failure
+Language/15_Types/4_Interface_Types_A11_t02: crash # co19-roll r546: Please triage this failure
+Language/15_Types/5_Function_Types_A06_t01: fail # co19-roll r546: Please triage this failure
+Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A40_t04: fail # co19-roll r546: Please triage this failure
+Language/16_Reference/1_Lexical_Rules/2_Comments_A04_t03: fail # co19-roll r546: Please triage this failure
+Language/16_Reference/1_Lexical_Rules_A02_t06: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.periodic_A03_t01: fail, pass # co19-roll r546: Please triage this failure
+LibTest/async/Timer/Timer.periodic_A02_t01: fail, pass # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/isAtSameMomentAs_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/parse_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/year_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/double/parse_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/skip_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/take_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/spawnFunction_A04_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/spawnUri_A02_t02: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/spawnUri_A02_t03: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/streamSpawnFunction_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateSink/addError_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateSink/addError_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/any_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/SendPort/send_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/SendPort/send_A02_t02: timeout # co19-roll r546: Please triage this failure
+LibTest/isolate/SendPort/send_A02_t03: timeout # co19-roll r546: Please triage this failure
+LibTest/isolate/SendPort/send_A02_t04: fail # co19-roll r546: Please triage this failure
+Utils/tests/Expect/listEquals_A02_t01: fail # co19-roll r546: Please triage this failure
+Utils/tests/Expect/listEquals_A03_t01: fail # co19-roll r546: Please triage this failure
+Utils/tests/Expect/setEquals_A02_t01: fail # co19-roll r546: Please triage this failure
+
+[ $compiler == dart2dart && $minified ]
+Language/13_Statements/11_Try_A06_t01: fail # co19-roll r546: Please triage this failure
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 335f686..1cbc686 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -22,13 +22,6 @@
 
 Language/03_Overview/1_Scoping_A02_t05: Fail # TODO(ahe): Please triage this failure.
 Language/03_Overview/1_Scoping_A02_t06: Fail # TODO(ahe): Please triage this failure.
-Language/05_Variables/05_Variables_A05_t04: Fail # TODO(ahe): Please triage this failure.
-Language/05_Variables/05_Variables_A05_t05: Fail # TODO(ahe): Please triage this failure.
-Language/05_Variables/05_Variables_A05_t06: Fail # TODO(ahe): Please triage this failure.
-Language/05_Variables/05_Variables_A05_t07: Fail # TODO(ahe): Please triage this failure.
-Language/05_Variables/05_Variables_A05_t08: Fail # TODO(ahe): Please triage this failure.
-Language/05_Variables/05_Variables_A05_t09: Fail # TODO(ahe): Please triage this failure.
-Language/05_Variables/05_Variables_A05_t10: Fail # TODO(ahe): Please triage this failure.
 Language/05_Variables/05_Variables_A07_t05: Fail # TODO(ahe): Please triage this failure.
 Language/05_Variables/05_Variables_A07_t06: Fail # TODO(ahe): Please triage this failure.
 Language/05_Variables/05_Variables_A07_t07: Fail # TODO(ahe): Please triage this failure.
@@ -40,97 +33,11 @@
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t15: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/6_Constructors/2_Factories_A07_t01: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t01: Fail # TODO(ahe): Please triage this failure.
-Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/01_Constants_A13_t06: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/01_Constants_A18_t07: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/01_Constants_A20_t03: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/08_Throw_A05_t02: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/08_Throw_A05_t03: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/11_Instance_Creation/1_New_A02_t03: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/11_Instance_Creation/1_New_A02_t05: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/11_Instance_Creation/1_New_A02_t06: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/11_Instance_Creation/1_New_A02_t07: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/11_Instance_Creation/2_Const_A01_t02: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/11_Instance_Creation/2_Const_A11_t01: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/11_Instance_Creation/2_Const_A11_t03: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/11_Instance_Creation_A05_t02: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t10: Fail # Issue 7025
-Language/11_Expressions/17_Getter_Invocation_A02_t01: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/18_Assignment_A05_t02: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/18_Assignment_A05_t05: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/30_Identifier_Reference_A04_t09: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/30_Identifier_Reference_A05_t01: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/30_Identifier_Reference_A05_t12: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/32_Type_Cast_A02_t03: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/32_Type_Cast_A03_t01: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/32_Type_Cast_A03_t02: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/02_Expression_Statements_A01_t08: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/03_Variable_Declaration_A04_t02: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/03_Variable_Declaration_A04_t03: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/03_Variable_Declaration_A04_t04: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/03_Variable_Declaration_A04_t05: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/03_Variable_Declaration_A04_t06: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/03_Variable_Declaration_A04_t07: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/03_Variable_Declaration_A04_t08: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/04_Local_Function_Declaration_A01_t01: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/04_Local_Function_Declaration_A02_t02: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/09_Switch_A06_t02: Fail # co19 issue 413
-Language/12_Statements/10_Try_A06_t01: Fail # Issue 11850: dart2js inlining results in stack traces not as accurate
-Language/12_Statements/10_Try_A07_t03: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/11_Return_A05_t01: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/11_Return_A05_t02: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/11_Return_A05_t03: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t03: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t12: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t14: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t15: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t28: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t29: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A05_t01: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/3_Parts_A03_t02: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/5_URIs_A01_t01: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/5_URIs_A01_t11: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/5_URIs_A01_t21: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/5_URIs_A01_t24: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/5_URIs_A01_t25: Fail # TODO(ahe): Please triage this failure.
-Language/14_Types/5_Function_Types_A01_t10: Pass # co19 issue 392, issue 9058
-Language/14_Types/5_Function_Types_A02_t06: Pass # co19 issue 392, issue 9058
-Language/15_Reference/1_Lexical_Rules/1_Reserved_Words_A40_t04: Fail # TODO(ahe): Please triage this failure.
-LibTest/async/Future/Future.delayed_A01_t01: Fail # co19 issue 471
-LibTest/async/Future/Future.delayed_A01_t02: Fail # co19 issue 471
-LibTest/async/Future/Future.delayed_A02_t01: Fail # co19 issue 471
-LibTest/async/Future/asStream_A01_t01: Fail # co19 issue 472
-LibTest/async/Future/asStream_A01_t02: Fail # co19 issue 472
-LibTest/async/Future/asStream_A02_t01: Fail # co19 issue 472
-LibTest/async/Future/catchError_A03_t01: Fail # co19 issue 471
-LibTest/async/Future/catchError_A03_t02: Fail # co19 issue 471
-LibTest/async/Future/catchError_A03_t03: Fail # co19 issue 471
-LibTest/async/Future/forEach_A01_t01: Fail # co19 issue 471
-LibTest/async/Future/forEach_A02_t01: Fail # co19 issue 471
-LibTest/async/Future/forEach_A03_t01: Fail # co19 issue 471
-LibTest/async/Future/then_A01_t03: Fail # co19 issue 472
-LibTest/async/Future/then_A02_t01: Fail # co19 issue 471
-LibTest/async/Future/then_A02_t02: Fail # co19 issue 473
-LibTest/async/Future/then_A03_t01: Fail # co19 issue 471
-LibTest/async/Future/then_A04_t01: Fail # co19 issue 471
-LibTest/async/Future/wait_A01_t01: Fail # co19 issue 471
-LibTest/async/Future/wait_A01_t04: Fail # co19 issue 471
-LibTest/async/Future/wait_A01_t05: Fail # co19 issue 471
-LibTest/async/Future/wait_A01_t06: Fail # co19 issue 471
-LibTest/async/Future/wait_A02_t01: Fail # co19 issue 474
-LibTest/async/Future/wait_A02_t02: Fail # co19 issue 474
-LibTest/async/Future/whenComplete_A01_t01: Fail # co19 issue 471
-LibTest/async/Future/whenComplete_A02_t01: Fail # co19 issue 471
-LibTest/async/Future/whenComplete_A03_t01: Fail # co19 issue 471
-LibTest/async/Future/whenComplete_A04_t01: Fail # co19 issue 471
-LibTest/async/Future/whenComplete_A04_t02: Fail # co19 issue 471
 LibTest/collection/Queue/iterator_current_A01_t02: Fail # co19 issue 475
 LibTest/collection/Queue/iterator_moveNext_A01_t02: Fail # co19 issue 475
-LibTest/core/List/List_A01_t02: Fail # co19 issue 476
 LibTest/core/List/List_A03_t01: Fail # TODO(kasperl): Please triage this failure.
 LibTest/core/double/INFINITY_A01_t04: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/double/NEGATIVE_INFINITY_A01_t04: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/double/toStringAsExponential_A02_t01: Fail # co19 issue 477
 LibTest/core/int/toStringAsExponential_A02_t01: Fail # co19 issue 477.
 LibTest/math/pow_A01_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/math/pow_A11_t01: Fail # TODO(ahe): Please triage this failure.
@@ -139,7 +46,6 @@
 
 
 [ $compiler == dart2js && $runtime == jsshell ]
-Language/11_Expressions/12_Spawning_an_Isolate_A01_t01: Fail, Pass # TODO(ahe): Please triage this failure.
 LibTest/isolate/SendPort/send_A02_t05: Fail, Pass # TODO(ahe): Please triage this failure.
 LibTest/isolate/SendPort/send_A02_t06: Fail, Pass # TODO(ahe): Please triage this failure.
 LibTest/isolate/isolate_api/spawnFunction_A01_t01: Fail, Pass # TODO(ahe): Please triage this failure.
@@ -157,28 +63,16 @@
 
 
 [ $compiler == dart2js ]
-Language/14_Types/4_Interface_Types_A11_t01: Pass, Crash # Issue 8857
-Language/14_Types/4_Interface_Types_A11_t02: Pass, Crash # Issue 8857
 
 LibTest/isolate/ReceivePort/receive_A01_t02: Fail # Issue 6750
 
-LibTest/core/StringBuffer/isEmpty_A01_t01:  Fail, OK # co19 issue 355
-
 Language/07_Classes/6_Constructors/2_Factories_A01_t05: Fail # Partially implemented rediriecting constructors makes this fail.
 
 [ $compiler == dart2js && $runtime == ie9 ]
-Language/11_Expressions/03_Numbers_A01_t06: Fail # Issue: 8920
-Language/11_Expressions/03_Numbers_A01_t09: Fail # Issue: 8920
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: Fail # Issue: 8920
-LibTest/core/Date/Date_A01_t03: Fail # Issue: 8920
-LibTest/core/Date/Date.fromString_A03_t01: Fail # Issue: 8920
-LibTest/core/Date/timeZoneName_A01_t01: Fail # Issue: 8920
-LibTest/core/Date/year_A01_t01: Fail # Issue: 8920
 LibTest/core/double/round_A01_t01: Fail # Issue: 8920
 LibTest/core/double/toRadixString_A01_t01: Fail # Issue: 8920
 LibTest/core/double/toStringAsExponential_A01_t04: Fail # Issue: 8920
 LibTest/core/double/toStringAsPrecision_A01_t04: Fail # Issue: 8920
-LibTest/core/Expect/identical_A01_t01: Fail # Issue: 8920
 LibTest/core/int/compareTo_A01_t01: Fail # Issue: 8920
 LibTest/core/int/operator_left_shift_A01_t01: Fail # Issue: 8920
 LibTest/core/int/operator_remainder_A01_t03: Fail # Issue: 8920
@@ -204,8 +98,6 @@
 
 [ $compiler == dart2js && $runtime == jsshell ]
 LibTest/core/Map/Map_class_A01_t04: Pass, Slow # Issue 8096
-Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A03_t01: Fail # TODO(ngeoaffray): Please triage these failure.
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: Fail # TODO(ngeoaffray): Please triage these failure.
 LibTest/core/double/round_A01_t01: Fail # TODO(ngeoaffray): Please triage these failure.
 LibTest/core/int/operator_truncating_division_A01_t01: Fail # TODO(ngeoaffray): Please triage these failure.
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: Fail # TODO(ngeoaffray): Please triage these failure.
@@ -213,49 +105,9 @@
 LibTest/math/acos_A01_t01: Fail # TODO(ngeoaffray): Please triage these failure.
 LibTest/math/asin_A01_t01: Fail # TODO(ngeoaffray): Please triage these failure.
 
-[ $compiler == dart2js && $minified ]
-# These tests assume that the invocation mirror gets the original name of the
-# method, but that information is not present when minifying.  They could be
-# fixed by using the invocation mirror to invoke a method on a different object
-# and checking that the correct method is invoked.
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t02: Fail, OK
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: Fail, OK
-Language/11_Expressions/18_Assignment_A08_t04: Fail, OK
-
-[ $compiler == dart2js && ($minified || $runtime == ie9) ]
-Language/12_Statements/10_Try_A06_t01: Fail # BUG(11480): Triage.
-
 [ $compiler == dart2js && $checked ]
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t03: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t04: Fail # TODO(ahe): Please triage this failure.
-Language/09_Generics/09_Generics_A03_t01: Fail # TODO(ahe): Please triage this failure.
-Language/09_Generics/09_Generics_A04_t06: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/03_Numbers_A05_t02: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/06_Lists_A09_t01: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/06_Lists_A09_t04: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/07_Maps_A10_t05: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/07_Maps_A11_t01: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/11_Instance_Creation/1_New_A07_t01: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/11_Instance_Creation/1_New_A11_t01: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/11_Instance_Creation/2_Const_A09_t02: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/11_Instance_Creation/2_Const_A09_t03: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/11_Instance_Creation_A05_t01: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/19_Conditional_A04_t03: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/20_Logical_Boolean_Expressions_A03_t01: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A02_t03: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/32_Type_Cast_A05_t03: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/32_Type_Cast_A05_t05: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/06_For/1_For_Loop_A01_t08: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/09_Switch_A05_t01: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t06: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t26: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t46: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t66: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/AssertionError/column_A01_t02: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/AssertionError/failedAssertion_A01_t01: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/AssertionError/line_A01_t02: Fail # co19 issue 479
-LibTest/core/AssertionError/url_A01_t01: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/Set/intersection_A03_t01: Fail # co19 issue 480
 LibTest/core/TypeError/column_A01_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/TypeError/dstName_A01_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/TypeError/dstType_A01_t01: Fail # TODO(ahe): Please triage this failure.
@@ -264,15 +116,6 @@
 LibTest/core/TypeError/srcType_A01_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/TypeError/url_A01_t01: Fail # TODO(ahe): Please triage this failure.
 
-Language/11_Expressions/11_Instance_Creation/1_New_A12_t02: Fail # http://dartbug.com/3970
-
-
-Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A01_t02: Fail, OK # co19 issue 405
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: Fail, OK # co19 issue 405
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t02: Fail, OK # co19 issue 405
-Language/11_Expressions/18_Assignment_A05_t04: Fail, OK # co19 issue 405
-Language/11_Expressions/18_Assignment_A08_t04: Fail, OK # co19 issue 405
-
 
 [ $compiler == dart2js ]
 LibTest/core/int/operator_GT_A01_t01: Fail, OK # co19 issue 200
@@ -304,14 +147,10 @@
 Language/06_Functions/2_Formal_Parameters_A03_t04: Fail # TODO(ahe): Enforce optional parameter semantics.
 Language/06_Functions/2_Formal_Parameters_A03_t06: Fail # TODO(ahe): Enforce optional parameter semantics.
 
-Language/11_Expressions/01_Constants_A03_t01: Fail # Compile-time error: error: not a compile-time constant
-Language/11_Expressions/01_Constants_A11_t01: Fail # Compile-time error: error: not a compile-time constant
 LibTest/isolate/SendPort/send_A02_t01: Fail # Compile-time error: error: not a compile-time constant
 LibTest/isolate/SendPort/send_A02_t02: Fail # Compile-time error: error: not a compile-time constant
 LibTest/isolate/SendPort/send_A02_t03: Fail # Compile-time error: error: not a compile-time constant
 
-Language/11_Expressions/01_Constants_A18_t03: Fail # Compile-time error: unexpected token 'equals'
-Language/11_Expressions/05_Strings_A20_t01: Fail # Runtime error: Expect.identical(expected: <abyr, abyr
 LibTest/isolate/isolate_api/spawnUri_A02_t01: Fail # Runtime error: Expect.throws() fails
 LibTest/isolate/isolate_api/spawnUri_A01_t01: Fail # Runtime error: UnsupportedError: Currently spawnUri is not supported without web workers.
 LibTest/isolate/isolate_api/spawnUri_A01_t02: Fail # Runtime error: UnsupportedError: Currently spawnUri is not supported without web workers.
@@ -327,7 +166,6 @@
 LibTest/core/int/operator_OR_A01_t01: Fail, OK # Requires bigints.
 LibTest/core/int/operator_remainder_A01_t01: Fail, OK # Requires bigints.
 
-LibTest/core/Date/toString_A02_t01: Fail # Argument error. Year 999999 is out of range. Needs to be specified (and then potentially reported to co19): issue 1878.
 
 LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A04_t01: Fail, OK # co19 issue 212
 
@@ -340,34 +178,15 @@
 # can understand so he can file a bug later.
 #
 [ $compiler == dart2js ]
-LibTest/core/List/List.fixedLength_A01_t01: fail # Issue 400
-LibTest/core/List/addAll_A02_t01: fail # Issue 400
-LibTest/core/List/add_A02_t01: fail # Issue 400
-LibTest/core/List/clear_A02_t01: fail # Issue 400
-LibTest/core/List/insertRange_A02_t01: fail # Issue 400
-LibTest/core/List/length_A04_t01: fail # Issue 400
-LibTest/core/List/removeLast_A02_t01: fail # Issue 400
-LibTest/core/List/removeRange_A02_t01: fail # Issue 400
 LibTest/core/Set/isSubsetOf_A01_t01: fail # Issue 400
 LibTest/core/Set/isSubsetOf_A01_t02: fail # Issue 400
 
-Language/11_Expressions/11_Instance_Creation/1_New_A01_t04: Fail, OK # co19 issue 241
-
-Language/11_Expressions/22_Equality_A01_t01: Fail, OK # Function declaration takes precedence over function expression.
-
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t14: Fail, OK # co19 issue 210
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t15: Fail, OK # co19 issue 210
-Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t09: Fail, OK # co19 issue 210
 
 Language/03_Overview/1_Scoping_A01_t40: Fail, OK # co19 issue 188
 Language/03_Overview/1_Scoping_A01_t41: Fail, OK # co19 issue 188
 
-Language/11_Expressions/33_Argument_Definition_Test_A01_t02: Fail, OK # co19 issue 436
-Language/11_Expressions/33_Argument_Definition_Test_A02_t01: Fail, OK # co19 issue 436
-Language/11_Expressions/33_Argument_Definition_Test_A02_t02: Fail, OK # co19 issue 436
-Language/11_Expressions/33_Argument_Definition_Test_A03_t01: Fail, OK # co19 issue 436
-Language/11_Expressions/33_Argument_Definition_Test_A03_t02: Fail, OK # co19 issue 436
-
 Language/06_Functions/4_External_Functions_A01_t01: Fail, OK # http://dartbug.com/5021
 
 Language/03_Overview/2_Privacy_A01_t09: Fail, OK # co19 issue 198
@@ -375,87 +194,6 @@
 LibTest/core/int/hashCode_A01_t01: Fail, OK # co19 issue 308
 
 Language/03_Overview/2_Privacy_A01_t11: Pass, OK # co19 issue 316
-Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A03_t01: Pass, OK # co19 issue 316
-
-LibTest/core/Date/operator_equality_A01_t01: Fail # DateTime.== now looks at timezone, co19 issue 379.
-
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t02: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A03_t01: pass
-LibTest/core/Date/Date.fromString_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.fromString_A01_t02: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.fromString_A03_t01: pass
-LibTest/core/Date/Date.now_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.now_A01_t02: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.now_A01_t03: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.utc_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date_A01_t03: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date_A01_t04: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/add_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/add_A02_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/add_A03_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/compareTo_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/compareTo_A01_t02: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/day_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/difference_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/difference_A01_t02: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/hour_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/isUtc_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/millisecond_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/millisecondsSinceEpoch_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/minute_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/month_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/operator_GE_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/operator_GT_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/operator_LE_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/operator_LT_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/second_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/subtract_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/subtract_A02_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/subtract_A03_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/timeZoneName_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/timeZoneOffset_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/toLocal_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/toString_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/toUtc_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/weekday_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-
-Language/12_Statements/10_Try_A03_t01: Fail # co19 issue 381
-Language/12_Statements/10_Try_A03_t02: Fail # co19 issue 381
-Language/12_Statements/10_Try_A03_t03: Fail # co19 issue 381
-
-LibTest/core/Strings/join_A01_t01: Fail # Strings class has been removed. co19 issue 380
-LibTest/core/Strings/join_A04_t01: Fail # Strings class has been removed. co19 issue 380
-LibTest/core/Strings/concatAll_A01_t01: Fail # Strings class has been removed. co19 issue 380
-LibTest/core/Strings/concatAll_A04_t01: Fail # Strings class has been removed. co19 issue 380
-
-LibTest/core/StringBuffer/addAll_A01_t02: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/StringBuffer/add_A01_t02: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/StringBuffer/add_A01_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/StringBuffer/addAll_A01_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/StringBuffer/toString_A01_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t02: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A04_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/12_Statements/01_Blocks_A01_t03: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/14_Function_Invocation/1_Actual_Argument_List_Evaluation_A02_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/11_Instance_Creation/1_New_A09_t12: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/11_Instance_Creation/1_New_A09_t05: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/11_Instance_Creation/1_New_A13_t03: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/11_Instance_Creation/1_New_A09_t06: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A04_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t05: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/05_Strings/1_String_Interpolation_A03_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/05_Strings/1_String_Interpolation_A04_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-
-Language/15_Reference/1_Lexical_Rules/2_Comments_A04_t03: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A02_t01: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/Date.fromString_A04_t01: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/add_A06_t01: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/compareTo_A03_t01: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/difference_A03_t01: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/subtract_A06_t01: Fail # Uses deprecated Expect class, issue 398
 
 LibTest/core/double/ceil_A01_t03: Fail # truncate/ceil/floor/round returns ints, issue 389
 LibTest/core/double/ceil_A01_t04: Fail # truncate/ceil/floor/round returns ints, issue 389
@@ -466,76 +204,15 @@
 LibTest/core/double/truncate_A01_t03: Fail # truncate/ceil/floor/round returns ints, issue 389
 LibTest/core/double/truncate_A01_t04: Fail # truncate/ceil/floor/round returns ints, issue 389
 
-Language/11_Expressions/05_Strings/1_String_Interpolation_A03_t02: Fail # Issue 397
-Language/11_Expressions/05_Strings/1_String_Interpolation_A04_t02: Fail # Issue 397
-Language/11_Expressions/11_Instance_Creation/1_New_A08_t01: Fail # Issue 397
-Language/11_Expressions/11_Instance_Creation/1_New_A08_t02: Fail # Issue 397
-Language/11_Expressions/11_Instance_Creation/1_New_A08_t03: Fail # Issue 397
 LibTest/core/Iterable/where_A01_t07: Fail # Issue 397
-LibTest/core/List/addLast_A01_t01: Fail # Issue 397
-LibTest/core/List/addLast_A01_t03: Fail # Issue 397
-LibTest/core/List/addLast_A02_t01: Fail # Issue 397
-
-LibTest/core/List/getRange_A02_t01: Fail # issue 391, and Issue 399
-LibTest/core/List/getRange_A01_t01: Fail # getRange now takes end-argument and returns Iterable. Issue 399
-LibTest/core/List/getRange_A04_t01: Fail # getRange now takes end-argument and returns Iterable. Issue 399
-LibTest/core/List/operator_subscript_A01_t02: Fail # getRange now takes end-argument and returns Iterable. Issue 399
-
-LibTest/async/Future/catchError_A01_t01: Fail # Future constructors have changed # issues 408
-LibTest/async/Future/Future.immediateError_A01_t01: Fail # Future constructors have changed # issues 408
-LibTest/async/Future/asStream_A01_t01: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/Future.immediate_A01_t01: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/then_A01_t03: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/catchError_A01_t01: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/forEach_A03_t01: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/asStream_A01_t02: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/Future.immediateError_A01_t01: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/asStream_A02_t01: Fail # Future constructors have changed # issue 408
 
 LibTest/core/Iterable/any_A01_t04: Fail # setRange now takes end-argument. Issue 402
-LibTest/core/List/setRange_A01_t02: Fail # setRange now takes end-argument. Issue 402
-LibTest/core/List/setRange_A02_t01: Fail # setRange now takes end-argument. Issue 402
-LibTest/core/List/setRange_A02_t02: Fail # setRange now takes end-argument. Issue 402
-LibTest/core/List/setRange_A03_t01: Fail # setRange throws StateError if there aren't enough elements in the iterable. Issue 402
-LibTest/core/List/setRange_A03_t02: Fail # setRange throws StateError if there aren't enough elements in the iterable. Issue 402
-
-LibTest/core/List/removeRange_A01_t01: Fail # removeRange now takes end-argument. Issue 404
-LibTest/core/List/removeRange_A03_t01: Fail # removeRange now takes end-argument. Issue 404
-LibTest/core/List/removeRange_A05_t01: Fail # removeRange now takes end-argument. Issue 404
-
-LibTest/core/List/insertRange_A01_t01: Fail # insertRange is removed. Issue 403
-LibTest/core/List/insertRange_A03_t01: Fail # insertRange is removed. Issue 403
-LibTest/core/List/insertRange_A04_t01: Fail # insertRange is removed. Issue 403
-LibTest/core/List/insertRange_A05_t01: Fail # insertRange is removed. Issue 403
-LibTest/core/List/insertRange_A06_t01: Fail # insertRange is removed. Issue 403
-LibTest/core/List/every_A01_t01: Fail # insertRange is removed. Issue 403
-
-LibTest/async/Completer/completeError_A01_t01: Fail # No AsyncError anymore. Issue 407
-LibTest/async/Future/Future.immediateError_A01_t01: Fail # No AsyncError anymore. Issue 407
-LibTest/async/Future/catchError_A02_t01: Fail # No AsyncError anymore. Issue 407
-
-LibTest/async/Completer/complete_A01_t03: Fail # Completer is now asynchronous. Issue 419
-LibTest/async/Completer/complete_A01_t04: Fail # Completer is now asynchronous. Issue 419
-LibTest/async/Future/then_A01_t01: Fail # Completer is now asynchronous. Issue 419
-LibTest/async/Future/then_A01_t04: Fail # Completer is now asynchronous. Issue 419
 
 LibTest/core/double/parse_A02_t01: Fail # Issue 418
 
-Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A01_t02: Fail, OK # co19 issue 409
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t02: Fail, OK # co19 issue 409
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: Fail, OK # co19 issue 409
-Language/11_Expressions/18_Assignment_A05_t04: Fail, OK # co19 issue 409
-Language/11_Expressions/18_Assignment_A08_t04: Fail, OK # co19 issue 409
-
-Language/14_Types/5_Function_Types_A01_t10: Fail # co19 issue 410
-Language/14_Types/5_Function_Types_A02_t06: Fail # co19 issue 410
-
 LibTest/core/Match/pattern_A01_t01: Fail # co19 Issue 400, 422
 LibTest/core/RegExp/allMatches_A01_t01: Fail # co19 Issue 400, 422
 
-Language/11_Expressions/08_Throw_A05_t01: Fail # co19 issue 420
-Language/11_Expressions/08_Throw_A05_t02: Fail # co19 issue 420
-Language/11_Expressions/08_Throw_A05_t03: Fail # co19 issue 420
 
 LibTest/core/String/indexOf_A01_t02: Fail # Issue 427
 LibTest/core/String/lastIndexOf_A01_t02: Fail # Issue 427
@@ -543,81 +220,9 @@
 LibTest/core/FallThroughError/toString_A01_t01: Fail # FallThroughError is no longer const. Issue 459
 LibTest/core/FallThroughError/FallThroughError_A01_t01: Fail # FallThroughError is no longer const. Issue 459
 
-Language/09_Generics/09_Generics_A05_t01: Fail # co19 issue 463
-Language/11_Expressions/31_Type_Test_A04_t01: Fail # co19 issue 463
-Language/11_Expressions/31_Type_Test_A05_t01: Fail # co19 issue 463
-Language/11_Expressions/31_Type_Test_A05_t02: Fail # co19 issue 463
-Language/11_Expressions/31_Type_Test_A05_t03: Fail # co19 issue 463
-Language/11_Expressions/32_Type_Cast_A03_t01: Fail # co19 issue 463
-Language/11_Expressions/32_Type_Cast_A03_t02: Fail # co19 issue 463
-Language/11_Expressions/32_Type_Cast_A04_t01: Fail # co19 issue 463
-Language/11_Expressions/32_Type_Cast_A04_t02: Fail # co19 issue 463
-
-Language/11_Expressions/11_Instance_Creation/1_New_A05_t01: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation/1_New_A05_t02: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation/1_New_A05_t03: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation/2_Const_A07_t01: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation/2_Const_A07_t02: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation/2_Const_A07_t03: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation_A03_t01: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation_A03_t02: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation_A04_t01: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation_A04_t02: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation_A04_t03: Fail # co19 issue 466
-Language/11_Expressions/11_Instance_Creation_A04_t04: Fail # co19 issue 466
-
-Language/13_Libraries_and_Scripts/1_Imports_A03_t02: Fail # 481
-Language/13_Libraries_and_Scripts/1_Imports_A03_t05: Fail # 481
-Language/13_Libraries_and_Scripts/1_Imports_A03_t22: Fail # 481
-Language/13_Libraries_and_Scripts/1_Imports_A03_t25: Fail # 481
-Language/13_Libraries_and_Scripts/1_Imports_A03_t42: Fail # 481
-Language/13_Libraries_and_Scripts/1_Imports_A03_t45: Fail # 481
-Language/13_Libraries_and_Scripts/1_Imports_A03_t62: Fail # 481
-Language/13_Libraries_and_Scripts/1_Imports_A03_t65: Fail # 481
-
-Language/14_Types/2_Dynamic_Type_System_A02_t01: Fail # co19 issue 481
-
-[ $compiler == dart2js && $checked ]
-
-Language/03_Overview/1_Scoping_A02_t30: Fail # co19 issue 463
-Language/09_Generics/09_Generics_A05_t02: Fail # co19 issue 463
-Language/11_Expressions/32_Type_Cast_A05_t01: Fail # co19 issue 463
-Language/11_Expressions/32_Type_Cast_A05_t02: Fail # co19 issue 463
-Language/11_Expressions/32_Type_Cast_A05_t04: Fail # co19 issue 463
-Language/14_Types/8_Parameterized_Types_A02_t01: Fail # co19 issue 463
-
-Language/13_Libraries_and_Scripts/1_Imports_A03_t31: Fail # 481
-
-[ $compiler == dart2js && $unchecked ]
-LibTest/core/List/setRange_A05_t01: Fail # setRange throws StateError if there aren't enough elements in the iterable. Issue 402
-
-# Issues with co19 test suite in checked mode.
-[ $compiler == dart2js && $checked ]
-Language/11_Expressions/30_Identifier_Reference_A07_t01: Fail, OK # test should be marked type-error
-LibTest/core/Set/intersection_A01_t01: Fail # issue 390
-LibTest/core/Set/intersection_A01_t02: Fail # issue 390
-LibTest/core/Set/intersection_A01_t03: Fail # issue 390
-LibTest/core/List/every_A01_t01: fail # Issue 400
-
-
-# Issues with co19 test suite in browsers.
-[ $compiler == dart2js && $browser ]
-Language/15_Reference/1_Lexical_Rules_A01_t10: Fail, OK # co19 issue 395
-
-# Issues with co19 test suite in minified mode.
-[ $compiler == dart2js && $minified ]
-Language/11_Expressions/18_Assignment_A05_t04: Fail, OK # co19 issue 396
-Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A01_t02: Fail, OK # co19 issue 396
-
-
 [ $compiler == dart2js && $jscl ]
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A04_t01: Fail, Pass # issue 3333
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: Fail, Pass # issue 3333
-
-Language/11_Expressions/03_Numbers_A01_t06: Fail, OK # Requires bigint.
-Language/11_Expressions/03_Numbers_A01_t09: Fail, OK # Requires bigint.
-LibTest/core/Date/Date_A01_t03: Fail, OK # co19 issue 180
-LibTest/core/Date/year_A01_t01: Fail, OK # Requires big int.
 LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: Fail, OK # This is not rejected by V8.
 LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A04_t01: Fail, OK # co19 issue 92.
 LibTest/core/RegExp/firstMatch_A01_t01: Fail, OK # Bad test, use Match.regexp, not Match.pattern.
@@ -652,39 +257,15 @@
 Language/03_Overview/1_Scoping_A02_t07: Fail # duplicate definition of f(var f){f();}
 Language/03_Overview/2_Privacy_A01_t06: Fail # cannot resolve type _inaccessibleFuncType
 
-Language/11_Expressions/01_Constants_A12_t01: Fail # internal error: CompileTimeConstantEvaluator not implemented
-Language/11_Expressions/22_Equality_A05_t01: Fail # != cannot be called on super
-Language/11_Expressions/30_Identifier_Reference_A02_t01: Fail # Pseudo keyword "abstract".
-
-Language/12_Statements/06_For_A01_t11: Fail # http://dartbug.com/9824
-
-
-# BUG(11331): Renamed Date to DateTime (issue 373, 374) but this only has an
-# impact on V8, because of the way method calls are evaluated. Needs more
-# investigation.
-[ $compiler == dart2js && $runtime == d8 ]
-Language/14_Types/6_Type_dynamic_A03_t01: Fail
-
-
 [ $compiler == dart2js && $jscl ]
-LibTest/core/Date/Date.fromString_A03_t01: Pass # Issue co19 - 121 (currently passing due to co19 issues 373 and 374)
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A06_t02: Fail # IllegalJSRegExpException: '\c(' 'SyntaxError: Invalid regular expression: /\c(/: Unterminated group'
 LibTest/core/RegExp/Pattern_semantics/firstMatch_DecimalEscape_A01_t02: Fail # Expect.fail('Some exception expected')
 LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: Fail # Expect.fail('Some exception expected')
 LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: Fail # Expect.fail('Some exception expected')
 
-
-#
-# The following tests may be broken, but require further review.
-#
-[ $compiler == dart2js && $jscl ]
-LibTest/core/Expect/identical_A01_t01: Fail # TODO(floitsch): Is NaN identical to NaN?
-
-
 [ $compiler == dart2js && ($runtime == ie10 || $runtime == ff || $runtime == chrome || $runtime == drt || $runtime == safari || $runtime == opera) ]
 *: Skip
 
-
 #
 # Missing compile-time errors.
 #
@@ -720,21 +301,7 @@
 Language/07_Classes/4_Abstract_Instance_Members_A04_t01: Fail # Checks that a compile-time error is produced when the overriding abstract method has fewer named parameters than the instance method being overridden (2 vs 3) and neither  have any required parameters.
 Language/07_Classes/4_Abstract_Instance_Members_A04_t05: Fail # Checks that a compile-time error is produced when the overriding non-abstract  instance method has the same set of named parameters as the abstract method being overriden,  but in a different order.
 Language/07_Classes/4_Abstract_Instance_Members_A04_t06: Fail # Checks that a compile-time error is produced when the overriding non-abstract  instance method has almost the same set of named parameters as the abstract method being overriden,  except for one that has a different name.
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A09_t01: Fail # Checks that error is produced if a final variable is not initialized in one  of the specified ways.
-Language/07_Classes/6_Constructors/3_Constant_Constructors_A03_t01: Fail # Checks that a compile-time error is produced when a class with constant  constructor also declares a non-final instance variable.
 Language/07_Classes/6_Constructors_A02_t01: Fail # Checks that a compile-error is produced when a named constructor definition does not begin with the name of its class.
-Language/11_Expressions/01_Constants_A16_t01: Fail # Checks that an IntegerDivisionByZeroException raised during evaluation  of a compile-time constant causes a compile-time error.
-Language/11_Expressions/01_Constants_A16_t02: Fail # Checks that an OutOfMemoryException raised during evaluation of a compile-time constant causes a compile-time error.
-Language/11_Expressions/05_Strings_A02_t46: Fail # Checks that multi-line strings that contain characters and sequences prohibited by this grammar, cause compile-time errors.
-Language/11_Expressions/05_Strings_A02_t48: Fail # Checks that multi-line strings that contain characters and sequences prohibited by this grammar, cause compile-time errors.
-Language/11_Expressions/22_Equality_A01_t15: Fail # Checks that equality expressions cannot be operands of another equality expression.
-Language/11_Expressions/22_Equality_A01_t16: Fail # Checks that equality expressions cannot be operands of another equality expression.
-Language/11_Expressions/23_Relational_Expressions_A01_t10: Fail # Checks that a relational expression cannot be the operand of another relational expression.
-Language/11_Expressions/23_Relational_Expressions_A01_t11: Fail # Checks that a relational expression cannot be the operand of another relational expression.
-Language/11_Expressions/23_Relational_Expressions_A01_t12: Fail # Checks that a relational expression cannot be the operand of another relational expression.
-Language/11_Expressions/23_Relational_Expressions_A01_t13: Fail # Checks that a relational expression cannot be the operand of another relational expression.
-Language/12_Statements/03_Variable_Declaration_A04_t01: Fail # Checks that if the variable declaration is prefixed with the const modifier, then variable must be initialized to a constant expression.
-Language/15_Reference/1_Lexical_Rules_A02_t06: Fail # Checks that Unicode whitespaces other than WHITESPACE are not permitted in the source code. Checks symbol U+00a0.
 
 #
 # Unexpected compile-time errors.
@@ -748,9 +315,6 @@
 Language/07_Classes/3_Setters_A04_t06: Fail # http://dartbug.com/5023
 Language/07_Classes/3_Setters_A04_t07: Fail # http://dartbug.com/5023
 
-Language/13_Libraries_and_Scripts/4_Scripts_A03_t01: Fail # http://dartbug.com/5683
-Language/13_Libraries_and_Scripts/4_Scripts_A03_t03: Fail # http://dartbug.com/5683
-
 Language/07_Classes/07_Classes_A03_t10: Fail # http://dartbug.com/6687
 
 
@@ -758,26 +322,280 @@
 # Unexpected runtime errors.
 #
 [ $compiler == dart2js ]
-#Language/11_Expressions/32_Type_Cast_A01_t01: Fail # http://dartbug.com/9074
-
-#Language/14_Types/4_Interface_Types_A08_t06: Fail # class Queue cannot be resolved.
-
-Language/14_Types/4_Interface_Types_A11_t04: Fail # http://dartbug.com/5020
-Language/14_Types/4_Interface_Types_A12_t10: Fail # http://dartbug.com/5020
-
 Language/03_Overview/1_Scoping_A01_t39: Fail # dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A06_t01: Fail # dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A06_t02: Fail # dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A06_t03: Fail # dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A06_t04: Fail # dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A06_t05: Fail # dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A07_t01: Fail # dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A07_t02: Fail # dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A07_t03: Fail # dartbug.com/7202
-Language/14_Types/3_Type_Declarations/1_Typedef_A07_t04: Fail # dartbug.com/7202
 
-LibTest/core/String/charCodes_A01_t01: Fail # Deprecated string members removed (issue 382).
-LibTest/core/String/charCodeAt_A02_t01: Fail # Deprecated string members removed (issue 382).
-LibTest/core/String/charCodeAt_A03_t01: Fail # Deprecated string members removed (issue 382).
-LibTest/core/String/charCodeAt_A01_t01: Fail # Deprecated string members removed (issue 382).
-LibTest/core/String/splitChars_A01_t01: Fail # Deprecated string members removed (issue 382).
+
+# co19-roll r546 (11.08.2013) caused these failures
+[ $compiler == dart2js ]
+Language/05_Variables/05_Variables_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/07_Classes_A11_t01: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/07_Classes_A11_t03: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t01: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t02: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t03: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t04: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/6_Constructors/3_Constant_Constructors_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/00_Object_Identity/1_Object_Identity_A02_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/00_Object_Identity/1_Object_Identity_A04_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/00_Object_Identity/1_Object_Identity_A04_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/00_Object_Identity/1_Object_Identity_A06_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/00_Object_Identity/1_Object_Identity_A06_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A11_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A12_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A13_t06: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A16_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A16_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A20_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t06: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t09: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/05_Strings/1_String_Interpolation_A01_t09: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/05_Strings/1_String_Interpolation_A03_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/05_Strings/1_String_Interpolation_A04_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/05_Strings_A02_t46: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/05_Strings_A02_t48: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/05_Strings_A20_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A08_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A12_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A12_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A12_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A12_t06: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A12_t07: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/08_Throw_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/08_Throw_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/08_Throw_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t06: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A02_t07: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A08_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A08_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A08_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/2_Const_A09_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/2_Const_A11_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/2_Const_A11_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A01_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t09: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/17_Getter_Invocation_A02_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/18_Assignment_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/18_Assignment_A05_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/18_Assignment_A05_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/18_Assignment_A08_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/22_Equality_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/22_Equality_A01_t15: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/22_Equality_A01_t16: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/22_Equality_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/23_Relational_Expressions_A01_t10: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/23_Relational_Expressions_A01_t11: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/23_Relational_Expressions_A01_t12: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/23_Relational_Expressions_A01_t13: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/30_Identifier_Reference_A02_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/30_Identifier_Reference_A04_t09: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/30_Identifier_Reference_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/30_Identifier_Reference_A05_t12: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/32_Type_Test_A04_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/32_Type_Test_A04_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/32_Type_Test_A04_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/33_Type_Cast_A02_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/33_Type_Cast_A03_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/33_Type_Cast_A03_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/02_Expression_Statements_A01_t08: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t01: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t02: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t04: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t05: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t06: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t07: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t08: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/04_Local_Function_Declaration_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/06_For_A01_t11: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/09_Switch_A06_t02: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Return_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Return_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Return_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A02_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A03_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A04_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A06_t01: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A07_t03: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A02_t28: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A02_t29: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t08: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t09: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t10: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t27: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t28: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t29: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t30: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t47: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t48: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t49: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t50: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t67: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t68: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t69: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t70: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A04_t03: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/3_Parts_A03_t02: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/4_Scripts_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/4_Scripts_A03_t03: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t11: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t21: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t24: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t25: fail # co19-roll r546: Please triage this failure
+Language/15_Types/1_Static_Types_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A06_t01: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A06_t02: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A06_t03: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A06_t04: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A06_t05: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A07_t01: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A07_t02: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A07_t03: fail # co19-roll r546: Please triage this failure
+Language/15_Types/3_Type_Declarations/1_Typedef_A07_t04: fail # co19-roll r546: Please triage this failure
+Language/15_Types/4_Interface_Types_A11_t01: crash # co19-roll r546: Please triage this failure
+Language/15_Types/4_Interface_Types_A11_t02: crash # co19-roll r546: Please triage this failure
+Language/15_Types/4_Interface_Types_A11_t04: fail # co19-roll r546: Please triage this failure
+Language/15_Types/4_Interface_Types_A12_t10: fail # co19-roll r546: Please triage this failure
+Language/16_Reference/1_Lexical_Rules/1_Reserved_Words_A40_t04: fail # co19-roll r546: Please triage this failure
+Language/16_Reference/1_Lexical_Rules/2_Comments_A04_t03: fail # co19-roll r546: Please triage this failure
+Language/16_Reference/1_Lexical_Rules_A02_t06: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.periodic_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.periodic_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Timer/run_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Timer/Timer.periodic_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/DateTime_A01_t03: fail # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/isAtSameMomentAs_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/parse_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/year_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/double/parse_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Duration/operator_div_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/List_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/skip_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/take_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/spawnFunction_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/spawnFunction_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/spawnFunction_A04_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/spawnFunction_A04_t02: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/spawnFunction_A04_t03: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/spawnUri_A02_t02: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/spawnUri_A02_t03: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/streamSpawnFunction_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/streamSpawnFunction_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/streamSpawnFunction_A02_t02: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/streamSpawnFunction_A02_t03: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateSink/add_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateSink/add_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateSink/addError_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateSink/addError_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateSink/operator_equality_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/any_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/contains_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/SendPort/send_A01_t01: fail # co19-roll r546: Please triage this failure
+Utils/tests/Expect/identical_A01_t01: fail # co19-roll r546: Please triage this failure
+Utils/tests/Expect/listEquals_A02_t01: fail # co19-roll r546: Please triage this failure
+Utils/tests/Expect/listEquals_A03_t01: fail # co19-roll r546: Please triage this failure
+Utils/tests/Expect/setEquals_A02_t01: fail # co19-roll r546: Please triage this failure
+
+# co19-roll r546 (11.08.2013) caused these failures
+[ $compiler == dart2js && $checked ]
+Language/10_Generics/09_Generics_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/10_Generics/09_Generics_A04_t06: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/06_Lists_A09_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/06_Lists_A09_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A10_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A11_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A07_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A12_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/2_Const_A09_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation_A01_t07: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/19_Conditional_A04_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/20_Logical_Boolean_Expressions_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/27_Unary_Expressions_A02_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/06_For/1_For_Loop_A01_t08: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/09_Switch_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t26: fail # co19-roll r546: Please triage this failure
+Language/15_Types/1_Static_Types_A03_t03: fail # co19-roll r546: Please triage this failure
+Language/15_Types/1_Static_Types_A03_t04: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/asBroadcastStream_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/contains_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/contains_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/distinct_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/drain_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/firstWhere_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/firstWhere_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/first_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/fold_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/fold_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/forEach_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/forEach_A02_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/handleError_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/isBroadcast_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/lastWhere_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/lastWhere_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/listen_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/listen_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/listen_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/map_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/reduce_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/reduce_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/singleWhere_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/skip_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/take_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/take_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/toList_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/toSet_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/transform_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/where_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/where_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/drain_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/firstWhere_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/firstWhere_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/fold_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/fold_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/lastWhere_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/lastWhere_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/reduce_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/reduce_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/singleWhere_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/take_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/transform_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/where_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/where_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamEventTransformer/bind_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/compareTo_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/getRange_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/join_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/removeAt_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Set/intersection_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/last_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/length_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/single_A01_t01: fail # co19-roll r546: Please triage this failure
+
+
+# Could this be dart issue 7728?
+# co19-roll r546 (11.08.2013) caused these failures
+[ $compiler == dart2js && ($runtime == d8 || $runtime == jsshell) ]
+LibTest/async/Future/Future.delayed_A01_t01: Fail # co19-roll r546: Please triage this failure
+LibTest/async/Future/Future.delayed_A01_t02: Fail # co19-roll r546: Please triage this failure
+LibTest/async/Future/Future.delayed_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/first_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/first_A02_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.fromFuture_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.fromFuture_A02_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.fromIterable_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.periodic_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Timer/cancel_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Timer/Timer_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Timer/Timer.periodic_A01_t01: fail # co19-roll r546: Please triage this failure
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index 94e2291..96d4ddb 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -3,12 +3,6 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == none]
-Language/11_Expressions/33_Argument_Definition_Test_A01_t02: Fail, OK # co19 issue 436
-Language/11_Expressions/33_Argument_Definition_Test_A02_t01: Fail, OK # co19 issue 436
-Language/11_Expressions/33_Argument_Definition_Test_A02_t02: Fail, OK # co19 issue 436
-Language/11_Expressions/33_Argument_Definition_Test_A03_t01: Fail, OK # co19 issue 436
-Language/11_Expressions/33_Argument_Definition_Test_A03_t02: Fail, OK # co19 issue 436
-
 LibTest/math/max_A01_t03: Fail # co19 issue 467
 LibTest/math/min_A01_t03: Fail # co19 issue 467
 
@@ -17,72 +11,20 @@
 LibTest/core/Stopwatch/elapsed_A01_t03: Pass, Fail # Issue 12383.
 
 [ $runtime == vm ]
-Language/11_Expressions/33_Argument_Definition_Test_A02_t02: Crash, Pass # Issue 9597 (question-mark operator)
 Language/07_Classes/6_Constructors_A02_t01: Skip # co19 issue 415.
 
 [ $compiler == none && $runtime == vm ]
-
 # The following tests fail because they contain number literals with a + prefix (co19 issue 428)
 LibTest/core/double/floor_A01_t05: Fail # co19 issue 428
 LibTest/core/double/ceil_A01_t05: Fail # co19 issue 428
-Language/12_Statements/02_Expression_Statements_A01_t06: Fail # co19 issue 428
-Language/11_Expressions/03_Numbers_A01_t10: Fail # co19 issue 428
-Language/11_Expressions/03_Numbers_A01_t08: Fail # co19 issue 428
-Language/11_Expressions/03_Numbers_A01_t04: Fail # co19 issue 428
-Language/11_Expressions/03_Numbers_A01_t03: Fail # co19 issue 428
-Language/11_Expressions/03_Numbers_A01_t02: Fail # co19 issue 428
-Language/11_Expressions/03_Numbers_A01_t01: Fail # co19 issue 428
-Language/11_Expressions/01_Constants_A01_t01: Fail # co19 issue 428
 
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t04: Fail # Dart issue 5743
-Language/11_Expressions/01_Constants_A18_t06: Fail # co19 issue 468
-Language/11_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t10: Fail # co19 issue 469
-Language/12_Statements/03_Variable_Declaration_A04_t08: Fail # Issue 6871
-Language/13_Libraries_and_Scripts/1_Imports_A02_t12: Fail # Issue 11982
-Language/13_Libraries_and_Scripts/1_Imports_A02_t15: Fail # Issue 11982
-Language/15_Reference/1_Lexical_Rules_A01_t10: Fail # co19 issue 470
-LibTest/async/Future/Future.delayed_A01_t01: Fail # co19 issue 471
-LibTest/async/Future/Future.delayed_A01_t02: Fail # co19 issue 471
-LibTest/async/Future/Future.delayed_A02_t01: Fail # co19 issue 471
-LibTest/async/Future/asStream_A01_t01: Fail # co19 issue 472
-LibTest/async/Future/asStream_A01_t02: Fail # co19 issue 472
-LibTest/async/Future/asStream_A02_t01: Fail # co19 issue 472
-LibTest/async/Future/catchError_A03_t01: Fail # co19 issue 471
-LibTest/async/Future/catchError_A03_t02: Fail # co19 issue 471
-LibTest/async/Future/catchError_A03_t03: Fail # co19 issue 471
-LibTest/async/Future/forEach_A01_t01: Fail # co19 issue 471
-LibTest/async/Future/forEach_A02_t01: Fail # co19 issue 471
-LibTest/async/Future/forEach_A03_t01: Fail # co19 issue 471
-LibTest/async/Future/then_A01_t03: Fail # co19 issue 472
-LibTest/async/Future/then_A02_t01: Fail # co19 issue 471
-LibTest/async/Future/then_A02_t02: Fail # co19 issue 473
-LibTest/async/Future/then_A03_t01: Fail # co19 issue 471
-LibTest/async/Future/then_A04_t01: Fail # co19 issue 471
-LibTest/async/Future/wait_A01_t01: Fail # co19 issue 471
-LibTest/async/Future/wait_A01_t04: Fail # co19 issue 471
-LibTest/async/Future/wait_A01_t05: Fail # co19 issue 471
-LibTest/async/Future/wait_A01_t06: Fail # co19 issue 471
-LibTest/async/Future/wait_A02_t01: Fail # co19 issue 474
-LibTest/async/Future/wait_A02_t02: Fail # co19 issue 474
-LibTest/async/Future/whenComplete_A01_t01: Fail # co19 issue 471
-LibTest/async/Future/whenComplete_A02_t01: Fail # co19 issue 471
-LibTest/async/Future/whenComplete_A03_t01: Fail # co19 issue 471
-LibTest/async/Future/whenComplete_A04_t01: Fail # co19 issue 471
-LibTest/async/Future/whenComplete_A04_t02: Fail # co19 issue 471
 LibTest/collection/Queue/iterator_current_A01_t02: Fail # co19 issue 475
 LibTest/collection/Queue/iterator_moveNext_A01_t02: Fail # co19 issue 475
-LibTest/core/List/List_A01_t02: Fail # co19 issue 476
-LibTest/core/double/toStringAsExponential_A02_t01: Fail # co19 issue 477
 LibTest/core/int/toStringAsExponential_A02_t01: Fail # co19 issue 477
 
-LibTest/core/Match/pattern_A01_t01: Fail # Issue 422
-LibTest/core/RegExp/allMatches_A01_t01: Fail # Issue 422
-
-Language/13_Libraries_and_Scripts/1_Imports_A02_t21: Crash # Dart issue 6060
-Language/13_Libraries_and_Scripts/1_Imports_A02_t22: Crash # Dart issue 6060
-
-Language/13_Libraries_and_Scripts/1_Imports_A04_t03: Fail # co19 issue 385
-Language/13_Libraries_and_Scripts/2_Exports_A05_t01: Fail # co19 issue 385
+LibTest/core/Match/pattern_A01_t01: Fail # co19 issue 422
+LibTest/core/RegExp/allMatches_A01_t01: Fail # co19 issue 422
 
 Language/07_Classes/4_Abstract_Instance_Members_A03_t02: Fail # Dart issue 978
 Language/07_Classes/4_Abstract_Instance_Members_A03_t03: Fail # Dart issue 978
@@ -92,296 +34,71 @@
 Language/07_Classes/4_Abstract_Instance_Members_A04_t06: Fail # Dart issue 978
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t15: Fail # Dart issue 6954
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t01: Fail # co19 issue 426
-Language/11_Expressions/05_Strings_A02_t46: Fail # Dart issue 4009
-Language/11_Expressions/05_Strings_A02_t48: Fail # Dart issue 4009
-Language/11_Expressions/11_Instance_Creation/1_New_A09_t09: Fail # Dart issue 1372
-Language/11_Expressions/11_Instance_Creation/2_Const_A10_t01: Fail # Dart issue 5775
-Language/11_Expressions/30_Identifier_Reference_A05_t02: Fail # Dart issue 2492
-Language/11_Expressions/30_Identifier_Reference_A08_t02: Fail # Dart issue 5802
-Language/12_Statements/03_Variable_Declaration_A04_t07: Fail # Dart issue 7305
-Language/12_Statements/04_Local_Function_Declaration_A02_t02: Fail # Dart issue 5773
-Language/12_Statements/06_For_A01_t11: Fail # Dart issue 5675
-Language/12_Statements/09_Switch_A01_t02: Fail # Dart issue 2238
-Language/12_Statements/09_Switch_A02_t01: Fail # Dart issue 7306
-Language/12_Statements/09_Switch_A02_t02: Fail # Dart issue 7307
-Language/12_Statements/09_Switch_A03_t01: Fail # Dart issue 7307
-Language/12_Statements/09_Switch_A03_t02: Fail # Dart issue 7307
-Language/12_Statements/09_Switch_A04_t01: Fail # Dart issue 6897
-Language/12_Statements/09_Switch_A06_t02: Fail # Dart issue 5837
-Language/12_Statements/10_Try_A03_t01: Fail # Dart issue 7311
-Language/12_Statements/10_Try_A03_t02: Fail # Dart issue 7311
-Language/12_Statements/10_Try_A03_t03: Fail # Dart issue 7311
-Language/12_Statements/12_Labels_A01_t03: Fail # Dart issue 2238
-Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t04: Fail # Dart issue 5839
-Language/13_Libraries_and_Scripts/1_Imports_A05_t01: Fail # Dart issue 3206
-Language/13_Libraries_and_Scripts/2_Exports_A04_t02: Fail # Dart issue 6134
-Language/13_Libraries_and_Scripts/2_Exports_A04_t03: Fail # Dart issue 6134
-Language/13_Libraries_and_Scripts/5_URIs_A01_t01: Fail # Dart issue 6352
-Language/13_Libraries_and_Scripts/5_URIs_A01_t04: Fail # Dart issue 7317
-Language/13_Libraries_and_Scripts/5_URIs_A01_t05: Fail # Dart issue 7317
-Language/13_Libraries_and_Scripts/5_URIs_A01_t11: Fail # Dart issue 6352
-Language/13_Libraries_and_Scripts/5_URIs_A01_t14: Fail # Dart issue 7317
-Language/13_Libraries_and_Scripts/5_URIs_A01_t15: Fail # Dart issue 7317
-Language/13_Libraries_and_Scripts/5_URIs_A01_t21: Fail # Dart issue 6352
-Language/14_Types/5_Function_Types_A01_t10: Fail # co19 issue 392
-Language/14_Types/5_Function_Types_A02_t06: Fail # co19 issue 392
 LibTest/core/double/parse_A02_t01: Fail # co19 issue 418
-LibTest/math/pow_A01_t01: Fail # Dart issue 7318
+LibTest/math/pow_A01_t01: Fail # co19 issue 44
 LibTest/math/pow_A11_t01: Fail # Dart issue 449
 LibTest/math/pow_A13_t01: Fail # Dart issue 449
 
-Language/05_Variables/05_Variables_A05_t04: Fail # Dart issue 5881
 Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t02: Fail # Dart issue 5802
 Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t05: Fail # Dart issue 5894
 
-LibTest/core/double/truncate_A01_t03: Fail # truncate/ceil/floor/round returns ints, issue 389
-LibTest/core/double/truncate_A01_t04: Fail # truncate/ceil/floor/round returns ints, issue 389
-LibTest/core/double/ceil_A01_t03: Fail # truncate/ceil/floor/round returns ints, issue 389
-LibTest/core/double/ceil_A01_t04: Fail # truncate/ceil/floor/round returns ints, issue 389
-LibTest/core/double/floor_A01_t03: Fail # truncate/ceil/floor/round returns ints, issue 389
-LibTest/core/double/floor_A01_t04: Fail # truncate/ceil/floor/round returns ints, issue 389
-LibTest/core/double/round_A01_t02: Fail # truncate/ceil/floor/round returns ints, issue 389
-LibTest/core/double/round_A01_t04: Fail # truncate/ceil/floor/round returns ints, issue 389
+LibTest/core/double/truncate_A01_t03: Fail # truncate/ceil/floor/round returns ints, co19 issue 389
+LibTest/core/double/truncate_A01_t04: Fail # truncate/ceil/floor/round returns ints, co19 issue 389
+LibTest/core/double/ceil_A01_t03: Fail # truncate/ceil/floor/round returns ints, co19 issue 389
+LibTest/core/double/ceil_A01_t04: Fail # truncate/ceil/floor/round returns ints, co19 issue 389
+LibTest/core/double/floor_A01_t03: Fail # truncate/ceil/floor/round returns ints, co19 issue 389
+LibTest/core/double/floor_A01_t04: Fail # truncate/ceil/floor/round returns ints, co19 issue 389
+LibTest/core/double/round_A01_t02: Fail # truncate/ceil/floor/round returns ints, co19 issue 389
+LibTest/core/double/round_A01_t04: Fail # truncate/ceil/floor/round returns ints, co19 issue 389
 
-Language/15_Reference/1_Lexical_Rules/2_Comments_A04_t03: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A02_t01: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/Date.fromString_A04_t01: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/add_A06_t01: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/compareTo_A03_t01: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/difference_A03_t01: Fail # Uses deprecated Expect class, issue 398
-LibTest/core/Date/subtract_A06_t01: Fail # Uses deprecated Expect class, issue 398
+Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t03: Fail # Issue 6085
 
-LibTest/core/Date/operator_equality_A01_t01: Fail # DateTime.== now looks at timezone, co19 issue 379
-
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t03: Fail # issue 6085
-
-LibTest/async/Future/catchError_A01_t01: Fail # Future constructors have changed # issues 408
-LibTest/async/Future/Future.immediateError_A01_t01: Fail # Future constructors have changed # issues 408
-LibTest/async/Future/asStream_A01_t01: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/Future.immediate_A01_t01: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/then_A01_t03: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/catchError_A01_t01: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/forEach_A03_t01: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/asStream_A01_t02: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/Future.immediateError_A01_t01: Fail # Future constructors have changed # issue 408
-LibTest/async/Future/asStream_A02_t01: Fail # Future constructors have changed # issue 408
-
-Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A01_t02: Fail, OK # co19 issue 409
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t02: Fail, OK # co19 issue 409
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: Fail, OK # co19 issue 409
-Language/11_Expressions/17_Getter_Invocation_A02_t01: Fail, OK # co19 issue 409
-Language/11_Expressions/18_Assignment_A05_t02: Fail, OK # co19 issue 409
-Language/11_Expressions/18_Assignment_A05_t04: Fail, OK # co19 issue 409
-Language/11_Expressions/18_Assignment_A05_t05: Fail, OK # co19 issue 409
-Language/11_Expressions/18_Assignment_A08_t04: Fail, OK # co19 issue 409
-
-Language/11_Expressions/01_Constants_A16_t01: Fail # Not properly reporting exception in initializer expressions
-Language/11_Expressions/01_Constants_A16_t02: Fail # Not properly reporting exception in initializer expressions
-
-Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: Fail # co19 issue 458, potentially constant expression analysis
-
-Language/11_Expressions/01_Constants_A17_t03: Crash # issue 1681 (recursion in compile-time constant expression)
-Language/11_Expressions/01_Constants_A16_t02: Crash, Pass # Should result in OOM
+LibTest/async/Future/asStream_A01_t01: Fail # Future constructors have changed # co19 issue 408
+LibTest/async/Future/forEach_A03_t01: Fail # Future constructors have changed # co19 issue 408
+LibTest/async/Future/asStream_A01_t02: Fail # Future constructors have changed # co19 issue 408
+LibTest/async/Future/asStream_A02_t01: Fail # Future constructors have changed # co19 issue 408
 
 # Some of these tests are expected to fail for another reason. These are marked as Skip.
-Language/07_Classes/07_Classes_A02_t29: Skip # must not instantiate an abstract class, co19 issue 183
-Language/07_Classes/07_Classes_A02_t31: Skip # must not instantiate an abstract class, co19 issue 183
+Language/07_Classes/07_Classes_A02_t29: Skip # co19 issue 490
+Language/07_Classes/07_Classes_A02_t31: Skip # co19 issue 490
 
-# co19 175 - related to issue 4522, all need fixing, some passes because of temporary warning.
-Language/11_Expressions/07_Maps_A03_t01: Pass, Fail # co19 175
-Language/11_Expressions/07_Maps_A04_t01: Pass, Fail # co19 175
-Language/11_Expressions/07_Maps_A04_t02: Pass, Fail # co19 175
-Language/11_Expressions/07_Maps_A06_t01: Pass, Fail # co19 175
-Language/11_Expressions/07_Maps_A06_t02: Pass, Fail # co19 175
-Language/11_Expressions/07_Maps_A07_t04: Pass, Fail # co19 175
-Language/11_Expressions/07_Maps_A07_t03: Pass, Fail # co19 175
-Language/11_Expressions/07_Maps_A08_t01: Pass, Fail # co19 175
-Language/11_Expressions/07_Maps_A10_t01: Pass, Fail # co19 175
-Language/11_Expressions/07_Maps_A10_t02: Pass, Fail # co19 175
-Language/11_Expressions/07_Maps_A10_t03: Pass, Fail # co19 175
-Language/11_Expressions/07_Maps_A10_t04: Pass, Fail # co19 175
-Language/11_Expressions/07_Maps_A10_t05: Pass, Fail # co19 175
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A03_t01: Fail # Issue 12508
+LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A02_t01: Fail # Issue 12508
+LibTest/core/RegExp/Pattern_semantics/firstMatch_DecimalEscape_A01_t02: Fail # Issue 12508
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: Fail # Issue 12508
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A04_t01: Fail # Issue 12508
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: Fail # Issue 12508
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A06_t02: Fail # Issue 12508
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: Fail # Issue 12508
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: Fail # Issue 12508
 
-Language/11_Expressions/05_Strings_A02_t01: Skip # co19 issue 90.
-Language/11_Expressions/07_Maps_A01_t01: Skip # co19 issue 91: map literals illegal at statement beginning.
+LibTest/core/Match/operator_subscript_A01_t01: Fail # Issue 12508
+LibTest/core/RegExp/firstMatch_A01_t01: Fail # Issue 12508
+LibTest/core/double/toRadixString_A01_t01: Fail # co19 issue 491
+LibTest/core/int/toRadixString_A01_t01: Fail # co19 issue 492
 
-Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t01: Fail # issue 1604.
+LibTest/math/sin_A01_t01: Pass, Fail, OK # co19 issue 44
 
-LibTest/core/List/every_A03_t01: Skip # Promise removed (co19 issue #79)
+LibTest/isolate/SendPort/send_A02_t02: Skip # co19 issue 493
 
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A03_t01: Fail
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A02_t01: Fail
-LibTest/core/RegExp/Pattern_semantics/firstMatch_DecimalEscape_A01_t02: Fail
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: Fail
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A04_t01: Fail
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: Fail
+LibTest/core/String/contains_A01_t02: Fail  # Issue 12508
 
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A06_t02: Fail
+LibTest/isolate/SendPort/send_A02_t03: Skip # co19 issue 495
 
-LibTest/core/Date/Date.fromString_A03_t01: Pass # Issue co19 - 121  (currently passing due to co19 issues 373 and 374)
-LibTest/core/Match/operator_subscript_A01_t01: Fail
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: Fail
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: Fail
-LibTest/core/RegExp/firstMatch_A01_t01: Fail
-LibTest/core/double/toRadixString_A01_t01: Fail # Issue 463
-LibTest/core/int/toRadixString_A01_t01: Fail # Issue 461
+LibTest/isolate/ReceivePort/receive_A01_t02: Fail # VM triage, check spec.
+LibTest/isolate/isolate_api/spawnUri_A02_t02: Fail # VM triage, check spec.
+LibTest/isolate/isolate_api/spawnUri_A02_t03: Fail # VM triage, check spec.
 
-LibTest/math/sin_A01_t01: Pass, Fail, OK # Issue co19 - 44
 
-LibTest/core/Date/toString_A02_t01: Fail # Argument error. Year 999999 is out of range. Needs to be specified (and then potentially reported to co19): issue 1878.
-LibTest/core/Date/year_A01_t01: Fail # Year out of range. Needs to be specified: issue 8808. Possibly a co19 bug.
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A15_t07: Fail $ co19 issue 494
 
-LibTest/isolate/SendPort/send_A02_t02: Skip # co19 issue 293
-LibTest/isolate/SendPort/send_A02_t03: Skip # co19 issue 293
-
-LibTest/core/Match/operator_subscript_A01_t01: Fail, OK # co19 issue 294
-LibTest/core/RegExp/firstMatch_A01_t01: Fail, OK # co19 issue 294
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A02_t01: Fail, OK # co19 issue 294
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A03_t01: Fail, OK # co19 issue 294
-
-Language/11_Expressions/07_Maps_A07_t03: Fail, OK # co19 issue 287
-Language/11_Expressions/07_Maps_A04_t02: Fail, OK # co19 issue 287
-
-LibTest/core/String/contains_A01_t03: Skip # Times out.
-
-LibTest/core/String/contains_A01_t02: Fail
-
-Language/07_Classes/07_Classes_A02_t29: Fail
-Language/07_Classes/07_Classes_A02_t31: Fail
-Language/11_Expressions/05_Strings_A20_t01: Fail
-LibTest/isolate/ReceivePort/receive_A01_t02: Fail
-LibTest/isolate/isolate_api/spawnFunction_A02_t01: Fail
-LibTest/isolate/isolate_api/spawnUri_A02_t02: Fail
-LibTest/isolate/isolate_api/spawnUri_A02_t03: Fail
-
-LibTest/core/StringBuffer/isEmpty_A01_t01:  Fail, OK # co19 issue 355
-
-# parameter name or type expected
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A15_t07: Fail
-
-LibTest/core/Strings/join_A01_t01: Fail # Strings class has been removed. co19 issue 380
-LibTest/core/Strings/join_A04_t01: Fail # Strings class has been removed. co19 issue 380
-LibTest/core/Strings/concatAll_A01_t01: Fail # Strings class has been removed. co19 issue 380
-LibTest/core/Strings/concatAll_A04_t01: Fail # Strings class has been removed. co19 issue 380
-
-LibTest/core/String/charCodes_A01_t01: Fail # Deprecated string members removed (issue 382).
-LibTest/core/String/charCodeAt_A02_t01: Fail # Deprecated string members removed (issue 382).
-LibTest/core/String/charCodeAt_A03_t01: Fail # Deprecated string members removed (issue 382).
-LibTest/core/String/charCodeAt_A01_t01: Fail # Deprecated string members removed (issue 382).
-LibTest/core/String/splitChars_A01_t01: Fail # Deprecated string members removed (issue 382).
-
-Language/14_Types/6_Type_dynamic_A03_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A01_t02: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.fromString_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.fromString_A01_t02: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.now_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.now_A01_t02: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.now_A01_t03: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date.utc_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date_A01_t03: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/Date_A01_t04: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/add_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/add_A02_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/add_A03_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/compareTo_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/compareTo_A01_t02: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/day_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/difference_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/difference_A01_t02: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/hour_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/isUtc_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/millisecond_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/millisecondsSinceEpoch_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/minute_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/month_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/operator_GE_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/operator_GT_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/operator_LE_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/operator_LT_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/second_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/subtract_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/subtract_A02_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/subtract_A03_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/timeZoneName_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/timeZoneOffset_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/toLocal_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/toString_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/toUtc_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-LibTest/core/Date/weekday_A01_t01: Fail # Renamed Date to DateTime (issue 373, 374)
-
-LibTest/core/StringBuffer/addAll_A01_t02: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/StringBuffer/add_A01_t02: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/StringBuffer/add_A01_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/StringBuffer/addAll_A01_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/StringBuffer/toString_A01_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A03_t02: Fail # StringBuffer renamed add to write. co19 issue 388.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A04_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/12_Statements/01_Blocks_A01_t03: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/14_Function_Invocation/1_Actual_Argument_List_Evaluation_A02_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/11_Instance_Creation/1_New_A01_t04: Fail # co19 issue 461
-Language/11_Expressions/11_Instance_Creation/1_New_A09_t12: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/11_Instance_Creation/1_New_A09_t05: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/11_Instance_Creation/1_New_A13_t03: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/11_Instance_Creation/1_New_A09_t06: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A04_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t05: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/05_Strings/1_String_Interpolation_A03_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-Language/11_Expressions/05_Strings/1_String_Interpolation_A04_t01: Fail # StringBuffer renamed add to write. co19 issue 388.
-
-Language/11_Expressions/05_Strings/1_String_Interpolation_A03_t02: Fail # Issue 397
-Language/11_Expressions/05_Strings/1_String_Interpolation_A04_t02: Fail # Issue 397
-Language/11_Expressions/11_Instance_Creation/1_New_A08_t01: Fail # Issue 397
-Language/11_Expressions/11_Instance_Creation/1_New_A08_t02: Fail # Issue 397
-Language/11_Expressions/11_Instance_Creation/1_New_A08_t03: Fail # Issue 397
 LibTest/core/Iterable/where_A01_t07: Fail # Issue 397
-LibTest/core/List/addLast_A01_t01: Fail # Issue 397
-LibTest/core/List/addLast_A01_t03: Fail # Issue 397
-LibTest/core/List/addLast_A02_t01: Fail # Issue 397
 
-LibTest/core/List/getRange_A02_t01: Fail # issue 391, and Issue 399
-LibTest/core/List/getRange_A01_t01: Fail # getRange now takes end-argument and returns Iterable. Issue 399
 LibTest/core/List/getRange_A04_t01: Fail # getRange now takes end-argument and returns Iterable. Issue 399
-LibTest/core/List/operator_subscript_A01_t02: Fail # getRange now takes end-argument and returns Iterable. Issue 399
-LibTest/core/List/List.fixedLength_A01_t01: fail # Issue 400
-LibTest/core/List/addAll_A02_t01: fail # Issue 400
-LibTest/core/List/add_A02_t01: fail # Issue 400
-LibTest/core/List/clear_A02_t01: fail # Issue 400
-LibTest/core/List/insertRange_A02_t01: fail # Issue 400
-LibTest/core/List/length_A04_t01: fail # Issue 400
-LibTest/core/List/removeLast_A02_t01: fail # Issue 400
-LibTest/core/List/removeRange_A02_t01: fail # Issue 400
 LibTest/core/Set/isSubsetOf_A01_t01: fail # Issue 400
 LibTest/core/Set/isSubsetOf_A01_t02: fail # Issue 400
 
 LibTest/core/Iterable/any_A01_t04: Fail # setRange now takes end-argument. Issue 402
-LibTest/core/List/setRange_A01_t02: Fail # setRange now takes end-argument. Issue 402
-LibTest/core/List/setRange_A02_t01: Fail # setRange now takes end-argument. Issue 402
-LibTest/core/List/setRange_A02_t02: Fail # setRange now takes end-argument. Issue 402
-LibTest/core/List/setRange_A03_t01: Fail # setRange throws StateError if there aren't enough elements in the iterable. Issue 402
-LibTest/core/List/setRange_A03_t02: Fail # setRange throws StateError if there aren't enough elements in the iterable. Issue 402
-
-LibTest/core/List/removeRange_A01_t01: Fail # removeRange now takes end-argument. Issue 404
-LibTest/core/List/removeRange_A03_t01: Fail # removeRange now takes end-argument. Issue 404
-LibTest/core/List/removeRange_A05_t01: Fail # removeRange now takes end-argument. Issue 404
-
-LibTest/core/List/insertRange_A01_t01: Fail # insertRange is removed. Issue 403
-LibTest/core/List/insertRange_A03_t01: Fail # insertRange is removed. Issue 403
-LibTest/core/List/insertRange_A04_t01: Fail # insertRange is removed. Issue 403
-LibTest/core/List/insertRange_A05_t01: Fail # insertRange is removed. Issue 403
-LibTest/core/List/insertRange_A06_t01: Fail # insertRange is removed. Issue 403
-LibTest/core/List/every_A01_t01: Fail # insertRange is removed. Issue 403
-
-LibTest/async/Completer/completeError_A01_t01: Fail # No AsyncError anymore. Issue 407
-LibTest/async/Future/Future.immediateError_A01_t01: Fail # No AsyncError anymore. Issue 407
-LibTest/async/Future/catchError_A02_t01: Fail # No AsyncError anymore. Issue 407
-
-LibTest/async/Completer/complete_A01_t03: Fail # Completer is now asynchronous. Issue 419
-LibTest/async/Completer/complete_A01_t04: Fail # Completer is now asynchronous. Issue 419
-LibTest/async/Future/then_A01_t01: Fail # Completer is now asynchronous. Issue 419
-LibTest/async/Future/then_A01_t04: Fail # Completer is now asynchronous. Issue 419
 
 LibTest/core/String/indexOf_A01_t02: Fail # Issue 427
 LibTest/core/String/lastIndexOf_A01_t02: Fail # Issue 427
@@ -404,66 +121,15 @@
 
 Language/03_Overview/1_Scoping_A02_t28: Fail # Issue 463
 Language/03_Overview/2_Privacy_A01_t06: Fail # Issue 463
-Language/09_Generics/09_Generics_A05_t01: Fail # Issue 463
-Language/11_Expressions/11_Instance_Creation/1_New_A05_t01: Fail # Issue 463
-Language/11_Expressions/11_Instance_Creation/1_New_A05_t02: Fail # Issue 463
-Language/11_Expressions/11_Instance_Creation/1_New_A05_t03: Fail # Issue 463
-Language/11_Expressions/11_Instance_Creation/2_Const_A07_t01: Fail # Issue 463
-Language/11_Expressions/11_Instance_Creation/2_Const_A07_t02: Fail # Issue 463
-Language/11_Expressions/11_Instance_Creation/2_Const_A07_t03: Fail # Issue 463
-Language/11_Expressions/11_Instance_Creation_A03_t01: Fail # Issue 463
-Language/11_Expressions/11_Instance_Creation_A03_t02: Fail # Issue 463
-Language/11_Expressions/11_Instance_Creation_A04_t01: Fail # Issue 463
-Language/11_Expressions/11_Instance_Creation_A04_t02: Fail # Issue 463
-Language/11_Expressions/11_Instance_Creation_A04_t03: Fail # Issue 463
-Language/11_Expressions/11_Instance_Creation_A04_t04: Fail # Issue 463
-Language/11_Expressions/31_Type_Test_A04_t01: Fail # Issue 463
-Language/11_Expressions/31_Type_Test_A05_t01: Fail # Issue 463
-Language/11_Expressions/31_Type_Test_A05_t02: Fail # Issue 463
-Language/11_Expressions/31_Type_Test_A05_t03: Fail # Issue 463
-Language/11_Expressions/32_Type_Cast_A03_t01: Fail # Issue 463
-Language/11_Expressions/32_Type_Cast_A03_t02: Fail # Issue 463
-Language/11_Expressions/32_Type_Cast_A04_t01: Fail # Issue 463
-Language/11_Expressions/32_Type_Cast_A04_t02: Fail # Issue 463
-Language/13_Libraries_and_Scripts/1_Imports_A03_t02: Fail # Issue 463
-Language/13_Libraries_and_Scripts/1_Imports_A03_t05: Fail # Issue 463
-Language/13_Libraries_and_Scripts/1_Imports_A03_t08: Fail # Issue 463
-Language/13_Libraries_and_Scripts/1_Imports_A03_t22: Fail # Issue 463
-Language/13_Libraries_and_Scripts/1_Imports_A03_t25: Fail # Issue 463
-Language/13_Libraries_and_Scripts/1_Imports_A03_t28: Fail # Issue 463
-Language/13_Libraries_and_Scripts/1_Imports_A03_t42: Fail # Issue 463
-Language/13_Libraries_and_Scripts/1_Imports_A03_t45: Fail # Issue 463
-Language/13_Libraries_and_Scripts/1_Imports_A03_t48: Fail # Issue 463
-Language/13_Libraries_and_Scripts/1_Imports_A03_t62: Fail # Issue 463
-Language/13_Libraries_and_Scripts/1_Imports_A03_t65: Fail # Issue 463
-Language/13_Libraries_and_Scripts/1_Imports_A03_t68: Fail # Issue 463
-Language/14_Types/2_Dynamic_Type_System_A02_t01: Fail # Issue 463
 
 # end [ $compiler == none && $runtime == vm ]
 
 
-[ $compiler == none && $runtime == vm && $unchecked ]
-Language/11_Expressions/11_Instance_Creation_A05_t02: Fail # co19 issue 478
-
-LibTest/core/List/setRange_A05_t01: Fail # setRange now takes end-argument. Issue 402
-
-
 [ $compiler == none && $runtime == vm && $checked ]
-Language/03_Overview/1_Scoping_A02_t30: Fail # co19 issue 463
-Language/09_Generics/09_Generics_A05_t02: Fail # co19 issue 463
-Language/13_Libraries_and_Scripts/1_Imports_A03_t06: Fail # co19 issue 463, bound is mapped to dynamic, no error.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t26: Fail # co19 issue 463, bound is mapped to dynamic, no error.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t46: Fail # co19 issue 463, bound is mapped to dynamic, no error.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t66: Fail # co19 issue 463, bound is mapped to dynamic, no error.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t31: Fail # co19 issue 463
-Language/14_Types/8_Parameterized_Types_A02_t01: Fail # co19 issue 463
-
+LibTest/async/Future/catchError_A01_t01: Fail # Future constructors have changed # issue 408
+LibTest/core/List/every_A01_t01: Fail # insertRange is removed. Issue 403
+LibTest/core/List/getRange_A01_t01: Fail # getRange now takes end-argument and returns Iterable. Issue 399
 LibTest/core/Set/intersection_A03_t01: Fail # co19 issue 480
-
-LibTest/core/AssertionError/column_A01_t02: Fail # co19 issue 479
-LibTest/core/AssertionError/failedAssertion_A01_t01: Fail # co19 issue 479
-LibTest/core/AssertionError/line_A01_t02: Fail # co19 issue 479
-LibTest/core/AssertionError/url_A01_t01: Fail # co19 issue 479
 LibTest/core/TypeError/column_A01_t01: Fail # co19 issue 479
 LibTest/core/TypeError/dstName_A01_t01: Fail # co19 issue 479
 LibTest/core/TypeError/dstType_A01_t01: Fail # co19 issue 479
@@ -471,38 +137,8 @@
 LibTest/core/TypeError/line_A01_t01: Fail # co19 issue 479
 LibTest/core/TypeError/srcType_A01_t01: Fail # co19 issue 479
 LibTest/core/TypeError/url_A01_t01: Fail # co19 issue 479
-
-LibTest/core/Strings/concatAll_A04_t01: Fail, OK # checks for ArgumentError. TypeError is ok too. co19 issue 366
-LibTest/core/Strings/join_A04_t01: Fail, OK # checks for ArgumentError. TypeError is ok too. co19 issue 366
-
 LibTest/core/int/operator_division_A01_t01: Fail # ~/ returns ints, issue 361
 
-Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A01_t02: Fail, OK # co19 issue 405
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t02: Fail, OK # co19 issue 405
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: Fail, OK # co19 issue 405
-Language/11_Expressions/17_Getter_Invocation_A02_t01: Fail, OK # co19 issue 405
-Language/11_Expressions/18_Assignment_A05_t02: Fail, OK # co19 issue 405
-Language/11_Expressions/18_Assignment_A05_t04: Fail, OK # co19 issue 405
-Language/11_Expressions/18_Assignment_A05_t05: Fail, OK # co19 issue 405
-Language/11_Expressions/18_Assignment_A08_t04: Fail, OK # co19 issue 405
-Language/11_Expressions/30_Identifier_Reference_A07_t01: Fail, OK # co19 issue 460
-
-# Passing for the wrong reasons:
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t01: Pass # co19 issues 405 and 463
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t02: Pass # co19 issues 405 and 463
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t03: Pass # co19 issues 405 and 463
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A04_t04: Pass # co19 issues 405 and 463
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t06: Pass # co19 issues 405 and 463
-Language/11_Expressions/17_Getter_Invocation_A02_t02: Pass # co19 issues 405 and 463
-
-Language/11_Expressions/32_Type_Cast_A05_t01: Fail # co19 issue 463
-Language/11_Expressions/32_Type_Cast_A05_t02: Fail # co19 issue 463
-Language/11_Expressions/32_Type_Cast_A05_t03: Fail # co19 issue 463
-Language/11_Expressions/32_Type_Cast_A05_t04: Fail # co19 issue 463
-Language/11_Expressions/32_Type_Cast_A05_t05: Fail # co19 issue 463
-
-Language/12_Statements/09_Switch_A05_t01: Fail # co19 issue 442
-
 LibTest/core/Set/intersection_A01_t01: Fail # issue 390
 LibTest/core/Set/intersection_A01_t02: Fail # issue 390
 LibTest/core/Set/intersection_A01_t03: Fail # issue 390
@@ -520,9 +156,12 @@
 
 #end [ $compiler == none && $runtime == vm && $checked ]
 
-
 [ $compiler == none && $runtime == vm && $mode == debug ]
 LibTest/isolate/isolate_api/spawnFunction_A02_t01: Crash
+Language/12_Expressions/00_Object_Identity/1_Object_Identity_A04_t02: Crash # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.periodic_A01_t01: Fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.periodic_A03_t01: Fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/contains_A02_t01: Fail # co19-roll r546: Please triage this failure
 
 [ $compiler == none && $runtime == vm && $system == macos ]
 LibTest/math/exp_A01_t01: Fail, OK # Issue co19 - 44
@@ -552,3 +191,211 @@
 
 [ $compiler == none && $runtime == vm && $arch == simmips ]
 LibTest/math/cos_A01_t01: Pass, Fail # Fail on Mac
+
+# co19-roll r546 (11.08.2013) caused these failures
+[ $compiler == none && $runtime == vm ]
+Language/05_Variables/05_Variables_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A06_t01: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A06_t02: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A06_t03: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A06_t04: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A06_t05: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A06_t06: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A16_t02: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/07_Classes_A11_t02: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/07_Classes_A11_t04: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t01: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t02: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t03: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t04: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/3_Setters_A08_t05: fail # co19-roll r546: Please triage this failure
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A09_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A16_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A16_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/01_Constants_A17_t03: crash # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t08: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/03_Numbers_A01_t10: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/05_Strings/1_String_Interpolation_A03_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/05_Strings/1_String_Interpolation_A04_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/05_Strings_A02_t46: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/05_Strings_A02_t48: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/05_Strings_A20_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/07_Maps_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A06_t12: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A08_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A08_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A08_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/1_New_A09_t09: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/12_Instance_Creation/2_Const_A10_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A01_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t09: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/17_Getter_Invocation_A02_t01: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/18_Assignment_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/18_Assignment_A05_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/18_Assignment_A05_t05: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/18_Assignment_A08_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/30_Identifier_Reference_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/30_Identifier_Reference_A08_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/32_Type_Test_A04_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/32_Type_Test_A04_t03: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/32_Type_Test_A04_t04: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/33_Type_Cast_A03_t02: fail # co19-roll r546: Please triage this failure
+Language/12_Expressions/33_Type_Cast_A03_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/02_Expression_Statements_A01_t06: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t07: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/03_Variable_Declaration_A04_t08: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/06_For_A01_t11: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/09_Switch_A01_t02: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/09_Switch_A02_t01: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/09_Switch_A02_t02: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/09_Switch_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/09_Switch_A03_t02: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/09_Switch_A04_t01: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/09_Switch_A06_t02: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A02_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A03_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A04_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/11_Try_A07_t03: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/12_Labels_A01_t03: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t04: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A02_t21: crash # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A02_t22: crash # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t09: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t10: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t27: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t29: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t30: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t47: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t49: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t50: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t67: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t69: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t70: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/2_Exports_A04_t02: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/2_Exports_A04_t03: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/2_Exports_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t01: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t04: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t05: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t11: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t14: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t15: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/5_URIs_A01_t21: fail # co19-roll r546: Please triage this failure
+Language/15_Types/1_Static_Types_A03_t01: fail # co19-roll r546: Please triage this failure
+Language/16_Reference/1_Lexical_Rules/2_Comments_A04_t03: fail # co19-roll r546: Please triage this failure
+LibTest/async/Future/asStream_A01_t01: pass # co19-roll r546: Please triage this failure
+LibTest/async/Future/asStream_A01_t02: pass # co19-roll r546: Please triage this failure
+LibTest/async/Future/asStream_A02_t01: pass # co19-roll r546: Please triage this failure
+LibTest/async/Future/forEach_A03_t01: pass # co19-roll r546: Please triage this failure
+LibTest/async/StreamSink/close_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.periodic_A01_t01: fail, pass # co19-roll r546: Please triage this failure
+LibTest/async/Stream/Stream.periodic_A03_t01: fail, pass # co19-roll r546: Please triage this failure
+LibTest/async/Timer/run_A01_t01: fail, pass # co19-roll r546: Please triage this failure
+LibTest/async/Timer/Timer_A02_t01: fail, pass # co19-roll r546: Please triage this failure
+LibTest/async/Timer/Timer_A02_t01: fail, pass # co19-roll r546: Please triage this failure
+LibTest/async/Timer/Timer.periodic_A02_t01: fail, pass # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/isAtSameMomentAs_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/parse_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/year_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/double/parse_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/getRange_A04_t01: pass # co19-roll r546: Please triage this failure
+LibTest/core/List/skip_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/take_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/spawnFunction_A04_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/streamSpawnFunction_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateSink/addError_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateSink/addError_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/any_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/contains_A02_t01: fail, pass # co19-roll r546: Please triage this failure
+LibTest/isolate/SendPort/send_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/SendPort/send_A02_t04: fail # co19-roll r546: Please triage this failure
+Utils/tests/Expect/listEquals_A02_t01: fail # co19-roll r546: Please triage this failure
+Utils/tests/Expect/listEquals_A03_t01: fail # co19-roll r546: Please triage this failure
+Utils/tests/Expect/setEquals_A02_t01: fail # co19-roll r546: Please triage this failure
+
+
+
+# co19-roll r546 (11.08.2013) caused these failures
+[ $compiler == none && $runtime == vm && $checked ]
+Language/12_Expressions/12_Instance_Creation_A01_t08: fail # co19-roll r546: Please triage this failure
+Language/13_Statements/09_Switch_A05_t01: fail # co19-roll r546: Please triage this failure
+Language/14_Libraries_and_Scripts/1_Imports_A03_t26: fail # co19-roll r546: Please triage this failure
+Language/15_Types/1_Static_Types_A03_t03: fail # co19-roll r546: Please triage this failure
+Language/15_Types/1_Static_Types_A03_t04: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/asBroadcastStream_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/contains_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/contains_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/distinct_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/drain_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/firstWhere_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/firstWhere_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/first_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/fold_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/fold_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/forEach_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/forEach_A02_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/handleError_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/isBroadcast_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/lastWhere_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/lastWhere_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/listen_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/listen_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/listen_A03_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/map_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/reduce_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/reduce_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/singleWhere_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/skip_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/take_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/take_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/toList_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/toSet_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/transform_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/where_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/EventTransformStream/where_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/drain_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/firstWhere_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/firstWhere_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/fold_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/fold_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/lastWhere_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/lastWhere_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/reduce_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/reduce_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/singleWhere_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/take_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/transform_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/where_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/async/Stream/where_A01_t02: fail # co19-roll r546: Please triage this failure
+LibTest/async/StreamEventTransformer/bind_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/DateTime/compareTo_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/join_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/List/removeAt_A02_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/Set/intersection_A01_t01: pass # co19-roll r546: Please triage this failure
+LibTest/core/Set/intersection_A01_t03: pass # co19-roll r546: Please triage this failure
+LibTest/core/Set/intersection_A03_t01: pass # co19-roll r546: Please triage this failure
+LibTest/core/int/ceilToDouble_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/int/floorToDouble_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/int/roundToDouble_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/core/int/truncateToDouble_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/last_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/length_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/single_A01_t01: fail # co19-roll r546: Please triage this failure
+LibTest/isolate/isolate_api/spawnFunction_A03_t01: fail # co19-roll r546: Please triage this failure
+
+# co19-roll r546 (11.08.2013) caused these failures
+[ $compiler == none && $runtime == vm && $unchecked ]
+Language/12_Expressions/12_Instance_Creation/2_Const_A09_t02: Fail # co19-roll r546: Please triage this failure
+
diff --git a/tests/compiler/dart2js/cpa_inference_test.dart b/tests/compiler/dart2js/cpa_inference_test.dart
index abb669a..bbe7d38 100644
--- a/tests/compiler/dart2js/cpa_inference_test.dart
+++ b/tests/compiler/dart2js/cpa_inference_test.dart
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import "package:expect/expect.dart";
-import '../../../sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart';
 import '../../../sdk/lib/_internal/compiler/implementation/source_file.dart';
 import '../../../sdk/lib/_internal/compiler/implementation/types/types.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart';
 
 import "parser_helper.dart";
 import "compiler_helper.dart";
diff --git a/tests/compiler/dart2js/licm_test.dart b/tests/compiler/dart2js/licm_test.dart
new file mode 100644
index 0000000..0b16cba
--- /dev/null
+++ b/tests/compiler/dart2js/licm_test.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Check that we hoist instructions in a loop condition, even if that
+// condition involves control flow.
+
+import 'package:expect/expect.dart';
+
+import 'compiler_helper.dart';
+
+const String TEST = '''
+var a = [1];
+
+main() {
+  int count = int.parse('42') == 42 ? 42 : null;
+  for (int i = 0; i < count && i < a[0]; i++) {
+    print(i);
+  }
+  a.removeLast();
+  // Ensure we don't try to generate a bailout method based on a check
+  // of [count].
+  count.removeLast();
+}
+''';
+
+main() {
+  compileAndMatch(
+      TEST, 'main', new RegExp("if \\(count == null\\)(.|\\n)*while"));
+}
diff --git a/tests/compiler/dart2js/list_tracer_test.dart b/tests/compiler/dart2js/list_tracer_test.dart
index 691c95b..c9b9791 100644
--- a/tests/compiler/dart2js/list_tracer_test.dart
+++ b/tests/compiler/dart2js/list_tracer_test.dart
@@ -154,14 +154,14 @@
   listOnlySetWithConstraint[0]++;
 
   listEscapingInSetterValue[0] = anInt;
-  new A().callSetter = listEscapingInSetterValue;
+  new A(null).callSetter = listEscapingInSetterValue;
 
   listEscapingInIndex[0] = anInt;
-  new A()[listEscapingInIndex];
+  new A(null)[listEscapingInIndex];
 
-  new A()[listEscapingInIndexSet] = 42;
+  new A(null)[listEscapingInIndexSet] = 42;
 
-  new A()[listEscapingTwiceInIndexSet] = listEscapingTwiceInIndexSet;
+  new A(null)[listEscapingTwiceInIndexSet] = listEscapingTwiceInIndexSet;
 
   listPassedAsOptionalParameter[0] = anInt;
   takeOptional(listPassedAsOptionalParameter);
diff --git a/tests/compiler/dart2js/mock_compiler.dart b/tests/compiler/dart2js/mock_compiler.dart
index ec113a8..2d72fc5 100644
--- a/tests/compiler/dart2js/mock_compiler.dart
+++ b/tests/compiler/dart2js/mock_compiler.dart
@@ -164,6 +164,7 @@
   getInterceptor(x) {}
   getNativeInterceptor(x) {}
   var dispatchPropertyName;
+  var mapTypeToInterceptor;
   getDispatchProperty(o) {}
   initializeDispatchProperty(f,p,i) {}
   initializeDispatchPropertyCSP(f,p,i) {}
diff --git a/tests/compiler/dart2js/no_such_method_codegen_test.dart b/tests/compiler/dart2js/no_such_method_codegen_test.dart
new file mode 100644
index 0000000..85777ad
--- /dev/null
+++ b/tests/compiler/dart2js/no_such_method_codegen_test.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// The mock compiler of dart2js used to make the compiler crash on
+// this program.
+//
+// The SSA backend generates a call to a throwNoSuchMethod helper for
+// the access to `foo`, and we used to not infer return types of
+// helpers, so we did not know throwNoSuchMethod was not returning.
+// As a consequence, all operator[] had to be compiled, and due to
+// missing backend dependencies, some of them were not resolved.
+
+import 'compiler_helper.dart';
+
+const String TEST = '''
+main() => foo[42];
+''';
+
+main() {
+  Uri uri = new Uri(scheme: 'source');
+  var compiler = compilerFor(TEST, uri);
+  compiler.runCompiler(uri);
+}
diff --git a/tests/compiler/dart2js/resolver_test.dart b/tests/compiler/dart2js/resolver_test.dart
index 112ba50..8587e3e 100644
--- a/tests/compiler/dart2js/resolver_test.dart
+++ b/tests/compiler/dart2js/resolver_test.dart
@@ -76,6 +76,7 @@
   testIncrementsAndDecrements();
   testOverrideHashCodeCheck();
   testSupertypeOrder();
+  testConstructorArgumentMismatch();
 }
 
 testSupertypeOrder() {
@@ -575,6 +576,20 @@
   Expect.isTrue(element.isSynthesized);
 }
 
+testConstructorArgumentMismatch() {
+  String script = "class A {} foo() { print(new A(42)); }";
+  MockCompiler compiler = new MockCompiler();
+  compiler.parseScript(script);
+  FunctionElement fooElement = compiler.mainApp.find(buildSourceString('foo'));
+  Expect.isNotNull(fooElement);
+  fooElement.parseNode(compiler);
+  compiler.resolver.resolve(fooElement);
+
+  compareWarningKinds(
+      script, [MessageKind.INVALID_ARGUMENTS.warning], compiler.warnings);
+  compareWarningKinds(script, [], compiler.errors);
+}
+
 testTopLevelFields() {
   MockCompiler compiler = new MockCompiler();
   compiler.parseScript("int a;");
diff --git a/tests/compiler/dart2js/simple_inferrer_test.dart b/tests/compiler/dart2js/simple_inferrer_test.dart
index b62a220..74194b5 100644
--- a/tests/compiler/dart2js/simple_inferrer_test.dart
+++ b/tests/compiler/dart2js/simple_inferrer_test.dart
@@ -233,6 +233,24 @@
   }
 }
 
+testIf1(a) {
+  var c = null;
+  if (a) {
+    c = 10;
+  } else {
+  }
+  return c;
+}
+
+testIf2(a) {
+  var c = null;
+  if (a) {
+  } else {
+    c = 10;
+  }
+  return c;
+}
+
 returnAsString() {
   return topLevelGetter() as String;
 }
@@ -503,6 +521,8 @@
   testIsCheck18(topLevelGetter());
   testIsCheck19(topLevelGetter());
   testIsCheck20();
+  testIf1(topLevelGetter());
+  testIf2(topLevelGetter());
   returnAsString();
   returnIntAsNum();
   returnAsTypedef();
@@ -602,6 +622,8 @@
   checkReturn('testIsCheck18', typesTask.dynamicType);
   checkReturn('testIsCheck19', typesTask.dynamicType);
   checkReturn('testIsCheck20', typesTask.dynamicType.nonNullable());
+  checkReturn('testIf1', typesTask.intType.nullable());
+  checkReturn('testIf2', typesTask.intType.nullable());
   checkReturn('returnAsString',
       new TypeMask.subtype(compiler.stringClass.computeType(compiler)));
   checkReturn('returnIntAsNum', typesTask.intType);
diff --git a/tests/compiler/dart2js_native/inference_of_helper_methods_test.dart b/tests/compiler/dart2js_native/inference_of_helper_methods_test.dart
new file mode 100644
index 0000000..7d821c3
--- /dev/null
+++ b/tests/compiler/dart2js_native/inference_of_helper_methods_test.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+import 'dart:_js_helper' show intTypeCheck;
+
+bool get inCheckedMode {
+  try {
+    String a = 42;
+  } on TypeError catch (e) {
+    return true;
+  }
+  return false;
+}
+
+main() {
+  var a = [];
+  a.add(42);
+  a.add('foo');
+  // By calling direclty [intTypeCheck] with an int, we're making the
+  // type inferrer infer that the parameter type of [intTypeCheck] is
+  // always an int, and therefore the method will be compiled to
+  // never throw. So when the backend actually uses the helper for
+  // implementing checked mode semantics (like in the check below),
+  // the check won't fail at runtime.
+  intTypeCheck(42);
+  if (inCheckedMode) {
+    int value;
+    Expect.throws(() => value = a[1], (e) => e is TypeError);
+  }
+}
diff --git a/tests/compiler/dart2js_native/subclassing_1_test.dart b/tests/compiler/dart2js_native/subclassing_1_test.dart
new file mode 100644
index 0000000..b90366a
--- /dev/null
+++ b/tests/compiler/dart2js_native/subclassing_1_test.dart
@@ -0,0 +1,58 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+import 'dart:_js_helper' show Creates, setNativeSubclassDispatchRecord;
+import 'dart:_interceptors' show findInterceptorForType;
+
+// Test that subclasses of native classes can be defined by setting the dispatch
+// record.
+
+class A native "A" {
+  foo(x) =>  '$x,${this.oof()}';
+  oof() => 'A';
+}
+
+class B extends A {
+  oof() => 'B';
+}
+
+B makeB1() native;
+B makeB2() native;
+B makeC() native;
+
+@Creates('=Object')
+getBPrototype() native;
+
+@Creates('=Object')
+getCPrototype() native;
+
+void setup() native r"""
+function A() {}
+function B() {}
+function C() {}
+makeA = function(){return new A;};
+makeB1 = function(){return new B;};
+makeB2 = function(){return new B;};
+makeC = function(){return new C;};
+
+getBPrototype = function(){return B.prototype;};
+getCPrototype = function(){return C.prototype;};
+""";
+
+main() {
+  setup();
+
+  setNativeSubclassDispatchRecord(getBPrototype(), findInterceptorForType(B));
+  setNativeSubclassDispatchRecord(getCPrototype(), findInterceptorForType(B));
+
+  B b1 = makeB1();
+  Expect.equals('1,B', b1.foo(1));
+
+  B b2 = makeB2();
+  Expect.equals('2,B', b2.foo(2));
+
+  B b3 = makeC();
+  Expect.equals('3,B', b3.foo(3));
+}
diff --git a/tests/compiler/dart2js_native/subclassing_2_test.dart b/tests/compiler/dart2js_native/subclassing_2_test.dart
new file mode 100644
index 0000000..f8b93aa
--- /dev/null
+++ b/tests/compiler/dart2js_native/subclassing_2_test.dart
@@ -0,0 +1,45 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+import 'dart:_js_helper' show Creates, setNativeSubclassDispatchRecord;
+import 'dart:_interceptors' show findInterceptorForType;
+
+// Test calling convention of methods introduced on subclasses of native
+// classes.
+
+doFoo(r, x) => '$x,${r.oof()}';
+
+class A native "A" {
+  foo(x) => (doFoo)(this, x);
+}
+
+class B extends A {
+  // [oof] is introduced only on this subclass of a native class.  It should
+  // have interceptor calling convention.
+  oof() => 'B';
+}
+
+B makeB() native;
+
+@Creates('=Object')
+getBPrototype() native;
+
+void setup() native r"""
+function A() {}
+function B() {}
+makeA = function(){return new A;};
+makeB = function(){return new B;};
+
+getBPrototype = function(){return B.prototype;};
+""";
+
+main() {
+  setup();
+
+  setNativeSubclassDispatchRecord(getBPrototype(), findInterceptorForType(B));
+
+  B b = makeB();
+  Expect.equals('1,B', b.foo(1));
+}
diff --git a/tests/compiler/dart2js_native/subclassing_3_test.dart b/tests/compiler/dart2js_native/subclassing_3_test.dart
new file mode 100644
index 0000000..d73f0c8
--- /dev/null
+++ b/tests/compiler/dart2js_native/subclassing_3_test.dart
@@ -0,0 +1,50 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+import 'dart:_js_helper' show Creates, setNativeSubclassDispatchRecord;
+import 'dart:_interceptors' show Interceptor, findInterceptorForType;
+
+// Test calling convention of methods introduced on subclasses of native
+// class of mixin.
+
+doFoo(r, x) => '$x,${r.oof()},${r.miz()}';
+
+class M {
+  miz() => 'M';
+}
+
+class N native "N" {
+  foo(x) => (doFoo)(this, x);
+}
+
+class A extends N {}
+
+class B extends A with M {
+  // [oof] is introduced only on this subclass of a native class.  It should
+  // have interceptor calling convention.
+  oof() => 'B';
+  // [miz] is introduced only on the mixin-application A+M.
+}
+
+B makeB() native;
+
+@Creates('=Object')
+getBPrototype() native;
+
+void setup() native r"""
+function B() {}
+makeB = function(){return new B;};
+
+getBPrototype = function(){return B.prototype;};
+""";
+
+main() {
+  setup();
+
+  setNativeSubclassDispatchRecord(getBPrototype(), findInterceptorForType(B));
+
+  B b = makeB();
+  Expect.equals('1,B,M', b.foo(1));
+}
diff --git a/tests/compiler/dart2js_native/subclassing_4_test.dart b/tests/compiler/dart2js_native/subclassing_4_test.dart
new file mode 100644
index 0000000..9d25e1a
--- /dev/null
+++ b/tests/compiler/dart2js_native/subclassing_4_test.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+import 'dart:_js_helper' show Creates, setNativeSubclassDispatchRecord;
+import 'dart:_interceptors' show Interceptor, findInterceptorForType;
+
+// Test calling convention on subclasses of native classes.
+
+class M {
+  miz() => 'M';
+}
+
+class N native "N" {}
+
+class A extends N {}
+
+class B extends A with M {
+  // The call to [miz] has a know type [B].  The call is in an intercepted
+  // method and to an intercepted method, so the ambient interceptor can be
+  // used.  For correct optimization of the interceptor, the compiler needs to
+  // (1) correctly determine that B is an intercepted type (because it extends a
+  // native class) and (2) realize that the intersection of [B] and subclasses
+  // of mixin applications of [M] is non-empty.
+  callMiz() => this.miz();
+}
+
+B makeB() native;
+
+@Creates('=Object')
+getBPrototype() native;
+
+void setup() native r"""
+function B() {}
+makeB = function(){return new B;};
+getBPrototype = function(){return B.prototype;};
+""";
+
+main() {
+  setup();
+
+  setNativeSubclassDispatchRecord(getBPrototype(), findInterceptorForType(B));
+
+  B b = makeB();
+  Expect.equals('M', b.callMiz());
+}
diff --git a/tests/corelib/safe_to_string_test.dart b/tests/corelib/safe_to_string_test.dart
index 10be1f7..233eb5d 100644
--- a/tests/corelib/safe_to_string_test.dart
+++ b/tests/corelib/safe_to_string_test.dart
@@ -15,6 +15,16 @@
 
   Expect.stringEquals(r'"\\\"\n\r"', Error.safeToString('\\"\n\r'));
 
+  Expect.stringEquals(r'"\x00\x01\x02\x03\x04\x05\x06\x07"',
+                      Error.safeToString('\x00\x01\x02\x03\x04\x05\x06\x07'));
+  Expect.stringEquals(r'"\x08\t\n\x0b\x0c\r\x0e\x0f"',
+                      Error.safeToString('\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'));
+  Expect.stringEquals(r'"\x10\x11\x12\x13\x14\x15\x16\x17"',
+                      Error.safeToString('\x10\x11\x12\x13\x14\x15\x16\x17'));
+  Expect.stringEquals(r'"\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"',
+                      Error.safeToString('\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f'));
+  Expect.stringEquals('" "', Error.safeToString(" "));
+
   Expect.stringEquals('null', Error.safeToString(null));
   Expect.stringEquals('true', Error.safeToString(true));
   Expect.stringEquals('false', Error.safeToString(false));
diff --git a/tests/html/custom_elements_test.dart b/tests/html/custom_elements_test.dart
index 666a0a3..a78892b 100644
--- a/tests/html/custom_elements_test.dart
+++ b/tests/html/custom_elements_test.dart
@@ -7,18 +7,32 @@
 import '../../pkg/unittest/lib/html_individual_config.dart';
 import 'dart:html';
 
-class CustomType extends Element {
-  factory CustomType() => null;
+class CustomMixin {
+  var mixinMethodCalled;
 
-  bool onCreatedCalled = false;
+  void mixinMethod() {
+    mixinMethodCalled = true;
+  }
+}
+
+class CustomType extends HtmlElement with CustomMixin{
+  factory CustomType() => null;
+  bool onCreatedCalled; // = false;
   void onCreated() {
     onCreatedCalled = true;
     customCreatedCount++;
   }
+
+  void invokeMixinMethod() {
+    mixinMethod();
+  }
 }
 
 int customCreatedCount = 0;
 
+int nextTagId = 0;
+String get nextTag => 'x-type${nextTagId++}';
+
 class NotAnElement {}
 
 main() {
@@ -26,42 +40,45 @@
 
   group('register', () {
     test('register', () {
-      document.register('x-type1', CustomType);
+      var tag = nextTag;
+      document.register(tag, CustomType);
 
-      var element = new Element.tag('x-type1');
+      var element = new Element.tag(tag);
       expect(element, isNotNull);
       expect(element is CustomType, isTrue);
       expect(element.onCreatedCalled, isTrue);
     });
 
     test('register twice', () {
-      document.register('x-type2', CustomType);
+      var tag = nextTag;
+      document.register(tag, CustomType);
       expect(() {
-        document.register('x-type2', CustomType);
+        document.register(tag, CustomType);
       }, throws, reason: 'Cannot register a tag more than once.');
 
-      document.register('x-type3', CustomType);
+      var newTag = nextTag;
+      document.register(newTag, CustomType);
 
-      var element = new Element.tag('x-type3');
+      var element = new Element.tag(newTag);
       expect(element, isNotNull);
       expect(element is CustomType, isTrue);
     });
 
     test('register null', () {
       expect(() {
-        document.register('x-type4', null);
+        document.register(nextTag, null);
       }, throws, reason: 'Cannot register a null type.');
     });
 
     test('register native', () {
       expect(() {
-        document.register('x-type5', BodyElement);
+        document.register(nextTag, BodyElement);
       }, throws, reason: 'Cannot register a native element.');
     });
 
     test('register non-element', () {
       expect(() {
-        document.register('x-type6', NotAnElement);
+        document.register(nextTag, NotAnElement);
       }, throws, reason: 'Cannot register a non-element.');
     });
   });
@@ -69,16 +86,18 @@
   group('preregister', () {
     // TODO(vsm): Modify this test once we agree on the proper semantics.
     test('pre-registration construction', () {
-      var dom = new Element.html('<div><x-type7></x-type7></div>');
+      var tag = nextTag;
+      var dom = new Element.html('<div><$tag></$tag></div>');
       var preElement = dom.children[0];
       expect(preElement, isNotNull);
-      expect(preElement is UnknownElement, isTrue);
+      expect(preElement is HtmlElement, isTrue);
+      expect(preElement is CustomType, isFalse);
       var firedOnPre = false;
       preElement.onFocus.listen((_) {
         firedOnPre = true;
       });
 
-      document.register('x-type7', CustomType);
+      document.register(tag, CustomType);
 
       var postElement = dom.children[0];
       expect(postElement, isNotNull);
@@ -86,44 +105,69 @@
       expect(postElement.onCreatedCalled, isTrue);
 
       // Element from first query remains an UnknownElement.
-      expect(preElement is UnknownElement, isTrue);
-      expect(preElement.parent, isNull);
+      expect(preElement is HtmlElement, isTrue);
+      expect(preElement.parent, dom);
       expect(dom.children.length, 1);
 
       var firedOnPost = false;
       postElement.onFocus.listen((_) {
         firedOnPost = true;
       });
-      // Event handlers should not persist to new element.
+      // Event handlers persist on old and new element.
       postElement.dispatchEvent(new Event('focus'));
-      expect(firedOnPre, isFalse);
+      expect(firedOnPre, isTrue);
       expect(firedOnPost, isTrue);
     });
   });
 
   group('innerHtml', () {
     test('query', () {
-      document.register('x-type8', CustomType);
+      var tag = nextTag;
+      document.register(tag, CustomType);
       var element = new DivElement();
-      element.innerHtml = '<x-type8></x-type8>';
+      element.innerHtml = '<$tag></$tag>';
       document.body.nodes.add(element);
-      var queried = query('x-type8');
+      var queried = query(tag);
 
       expect(queried, isNotNull);
       expect(queried is CustomType, isTrue);
       expect(queried.onCreatedCalled, isTrue);
     });
+
+    test('query id', () {
+      var tag = nextTag;
+      document.register(tag, CustomType);
+      var element = new DivElement();
+      element.innerHtml = '<$tag id="someid"></$tag>';
+      document.body.nodes.add(element);
+      var queried = query('#someid');
+
+      expect(queried, isNotNull);
+      expect(queried is CustomType, isTrue);
+      expect(queried.id, "someid");
+    });
   });
 
   group('lifecycle', () {
     test('onCreated', () {
       int oldCount = customCreatedCount;
-
-      document.register('x-type9', CustomType);
+      var tag = nextTag;
+      document.register(tag, CustomType);
       var element = new DivElement();
-      element.innerHtml = '<x-type9></x-type9>';
+      element.innerHtml = '<$tag></$tag>';
       document.body.nodes.add(element);
       expect(customCreatedCount, oldCount + 1);
     });
   });
+
+  group('mixins', () {
+    test('can invoke mixin methods', () {
+      var tag = nextTag;
+      document.register(tag, CustomType);
+
+      var element = new Element.tag(tag);
+      element.invokeMixinMethod();
+      expect(element.mixinMethodCalled, isTrue);
+    });
+  });
 }
diff --git a/tests/html/element_types_test.dart b/tests/html/element_types_test.dart
index 2638d3a..960bb16 100644
--- a/tests/html/element_types_test.dart
+++ b/tests/html/element_types_test.dart
@@ -116,7 +116,7 @@
     check('form', () => new FormElement() is FormElement);
     check('head', () => new HeadElement() is HeadElement);
     check('hr', () => new HRElement() is HRElement);
-    check('html', () => new HtmlElement() is HtmlElement);
+    check('html', () => new HtmlHtmlElement() is HtmlHtmlElement);
     check('h1', () => new HeadingElement.h1() is HeadingElement);
     check('h2', () => new HeadingElement.h2() is HeadingElement);
     check('h3', () => new HeadingElement.h3() is HeadingElement);
diff --git a/tests/html/html.status b/tests/html/html.status
index a39b862..8cdf46d 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -6,16 +6,7 @@
 event_test: Skip  # Issue 1996
 interactive_test: Skip # Must be run manually.
 
-# Issue 9326
-custom_elements_test/preregister: Fail
-custom_elements_test/lifecycle: Fail
-
-[ $compiler == dart2js ]
-# Document.register is unimplemented.
-custom_elements_test: Skip
-
-[ $compiler == dartanalyzer || $compiler == dart2analyzer ]
-# Document.register is unimplemented.
+[ $compiler == dart2js && $runtime != drt ]
 custom_elements_test: Skip
 
 [ $compiler == none && ($runtime == drt || $runtime == dartium) && $mode == debug && $system == macos]
@@ -24,6 +15,8 @@
 [ $compiler == none && ($runtime == drt || $runtime == dartium) ]
 # postMessage in dartium always transfers the typed array buffer, never a view
 postmessage_structured_test/typed_arrays: Fail
+events_test: Pass, Fail # Issue 12489
+custom_elements_test/lifecycle: Fail   # Issue 9326 - Implement "extends Element" in dartium
 
 [ $compiler == none && $runtime == drt && $system == windows ]
 worker_test/functional: Pass, Crash # Issue 9929.
diff --git a/tests/language/closure_in_initializer2_test.dart b/tests/language/closure_in_initializer2_test.dart
index b44b0c7..a782c64 100644
--- a/tests/language/closure_in_initializer2_test.dart
+++ b/tests/language/closure_in_initializer2_test.dart
@@ -2,12 +2,16 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// Test that a parameter used in a closure is properly boxed.
+
 import "package:expect/expect.dart";
 
-class S {
+abstract class S {
   S() {
     Expect.equals(2, this.f());
   }
+
+  get f;
 }
 
 class A extends S {
diff --git a/tests/language/closure_in_initializer_test.dart b/tests/language/closure_in_initializer_test.dart
index 04f1033..7697bbe 100644
--- a/tests/language/closure_in_initializer_test.dart
+++ b/tests/language/closure_in_initializer_test.dart
@@ -2,6 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// Test that a parameter used in two different closures defined in a
+// constructor initializer, is properly boxed.
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/language/create_unresolved_type_test.dart b/tests/language/create_unresolved_type_test.dart
new file mode 100644
index 0000000..ceaf6dc
--- /dev/null
+++ b/tests/language/create_unresolved_type_test.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+main() {
+  new F<int>();  /// 01: runtime error, static type warning
+}
diff --git a/tests/language/language.status b/tests/language/language.status
index 97d31b4..a16ddfb 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -299,3 +299,12 @@
 prefix22_test: Pass
 invocation_mirror_test: Fail, OK # hardcoded names.
 super_call4_test: Fail, OK # hardcoded names.
+
+[ $compiler == dart2js || $compiler == dart2dart]
+null_test/03: Fail    # Issue 12445.
+
+[ $compiler == dart2js ]
+null_test/none: Fail  # Issue 12482
+
+[ $compiler == dartanalyzer ]
+null_test/03: Fail  # Issue 12484
diff --git a/tests/language/no_such_constructor2_test.dart b/tests/language/no_such_constructor2_test.dart
new file mode 100644
index 0000000..1c2236e
--- /dev/null
+++ b/tests/language/no_such_constructor2_test.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class A {
+  A();
+}
+
+main() {
+  Expect.throws(() => new A(42), (e) => e is NoSuchMethodError);
+}
diff --git a/tests/language/no_such_constructor_test.dart b/tests/language/no_such_constructor_test.dart
new file mode 100644
index 0000000..40ade74
--- /dev/null
+++ b/tests/language/no_such_constructor_test.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+class A {
+  A();
+}
+
+main() {
+  new A(42); /// 01: static type warning, runtime error
+}
diff --git a/tests/language/null_is_test.dart b/tests/language/null_is_test.dart
index 395d474..380dbce 100644
--- a/tests/language/null_is_test.dart
+++ b/tests/language/null_is_test.dart
@@ -6,10 +6,41 @@
 
 main() {
   Expect.isTrue(null is Object);
+  Expect.isTrue(null is Null);
   Expect.isFalse(null is int);
   Expect.isFalse(null is bool);
   Expect.isFalse(null is num);
   Expect.isFalse(null is String);
   Expect.isFalse(null is List);
   Expect.isFalse(null is Expect);
+
+  test(null);
+
+  Expect.isFalse(1 is Null);
+  Expect.isFalse("1" is Null);
+  Expect.isFalse(true is Null);
+  Expect.isFalse(false is Null);
+  Expect.isFalse(new Object() is Null);
+
+  testNegative(1);
+  testNegative("1");
+  testNegative(true);
+  testNegative(false);
+  testNegative(new Object());
+}
+
+test(n) {
+  // Test where the argument is not a compile-time constant.
+  Expect.isTrue(n is Object);
+  Expect.isTrue(n is Null);
+  Expect.isFalse(n is int);
+  Expect.isFalse(n is bool);
+  Expect.isFalse(n is num);
+  Expect.isFalse(n is String);
+  Expect.isFalse(n is List);
+  Expect.isFalse(n is Expect);
+}
+
+testNegative(n){
+  Expect.isFalse(n is Null);
 }
diff --git a/tests/language/null_test.dart b/tests/language/null_test.dart
index 6ce22ee..c499c50 100644
--- a/tests/language/null_test.dart
+++ b/tests/language/null_test.dart
@@ -1,54 +1,204 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 // Second dart test program.
 
+// VMOptions=--optimization-counter-threshold=5
+
+import "dart:mirrors";
 import "package:expect/expect.dart";
 
-class NullTest {
-  static int foo(var obj) {
-    Expect.equals(null, obj);
-  }
+class BadInherit
+  extends Null     /// 01: compile-time error
+  implements Null  /// 02: compile-time error
+  extends Object with Null  /// 03: compile-time error
+    {}
 
-  static bool compareToNull(var value) {
-    return null == value;
-  }
-
-  static bool compareWithNull(var value) {
-    return value == null;
-  }
-
-  static int testMain() {
-    var val = 1;
-    var obj = null;
-
-    Expect.equals(null, obj);
-    Expect.equals(null, null);
-
-    foo(obj);
-    foo(null);
-
-    if (obj != null) {
-      foo(null);
-    } else {
-      foo(obj);
-    }
-
-    Expect.isFalse(compareToNull(val));
-    Expect.isTrue(compareToNull(obj));
-    Expect.isFalse(compareWithNull(val));
-    Expect.isTrue(compareWithNull(obj));
-    Expect.isTrue(obj is Object);
-    Expect.isFalse(obj is String);
-    Expect.isTrue(obj is !String);
-    Expect.isFalse(obj is !Object);
-    Expect.isFalse(val is !Object);
-
-    return 0;
+class EqualsNotCalled {
+  int get hashCode => throw "And don't warn!";
+  bool operator==(Object other) {
+    throw "SHOULD NOT GET HERE";
   }
 }
 
+class Generic<T> {
+  bool test(o) => o is T;
+  T cast(o) => o as T;
+  Type get type => T;
+}
 
-main() {
-  NullTest.testMain();
+class Generic2<T, S> {
+  bool test(o) => new Generic<T>().test(o);
+  T cast(o) => new Generic<T>().cast(o);
+  Type get type => new Generic<T>().type;
+}
+
+// Magic incantation to avoid the compiler recognizing the constant values
+// at compile time. If the result is computed at compile time, the dynamic code
+// will not be tested.
+confuse(x) {
+  try { throw [x]; } on dynamic catch (e) { return e[0]; }
+  return 42;
+}
+
+void main() {
+  for (int i = 0; i < 10; i++) {
+    test();
+  }
+}
+
+void test() {
+  new BadInherit();  // Make sure class is referenced.
+
+  int foo(var obj) {
+    Expect.equals(null, obj);
+  }
+
+  bool compareToNull(var value) {
+    return null == value;
+  }
+
+  bool compareWithNull(var value) {
+    return value == null;
+  }
+
+  var val = 1;
+  var obj = confuse(null);  // Null value that isn't known at compile-time.
+  Expect.isTrue(identical(obj, null), "identical");
+
+  Expect.isTrue(null == null);
+  Expect.isTrue(null == obj);
+  Expect.isTrue(obj == null);
+  Expect.isTrue(obj == obj);
+
+  // Using  == null  or  null ==  will not call any equality method.
+  Expect.isFalse(new EqualsNotCalled() == null);
+  Expect.isFalse(null == new EqualsNotCalled());
+  Expect.isFalse(new EqualsNotCalled() == obj);
+  Expect.isFalse(obj == new EqualsNotCalled());
+
+  Expect.isFalse(null == false);
+  Expect.isFalse(null == 0);
+  Expect.isFalse(null == "");
+  Expect.isFalse(null == []);
+  Expect.isFalse(null == 0.0);
+  Expect.isFalse(null == -0.0);
+  Expect.isFalse(null == double.NAN);
+
+  Expect.isFalse(obj == false);
+  Expect.isFalse(obj == 0);
+  Expect.isFalse(obj == "");
+  Expect.isFalse(obj == []);
+  Expect.isFalse(obj == 0.0);
+  Expect.isFalse(obj == -0.0);
+  Expect.isFalse(obj == double.NAN);
+
+  // Explicit constant expressions.
+  const t1 = null == null;
+  const t2 = null == 0;
+  const t3 = false == null;
+  Expect.isTrue(t1);
+  Expect.isFalse(t2);
+  Expect.isFalse(t3);
+
+  foo(obj);
+  foo(null);
+  if (obj != null) {
+    foo(null);
+  } else {
+    foo(obj);
+  }
+
+  // Test "is" operator.
+  Expect.isTrue(null is Null);
+  Expect.isTrue(obj is Null);
+  Expect.isTrue(null is Object);
+  Expect.isTrue(obj is Object);
+  Expect.isTrue(null is dynamic);
+  Expect.isTrue(obj is dynamic);
+  Expect.isFalse(null is String);
+  Expect.isFalse(obj is String);
+  Expect.isFalse(0 is Null);  // It's only assignable.
+  Expect.isFalse(null is! Null);
+  Expect.isFalse(obj is! Null);
+  Expect.isFalse(null is! Object);
+  Expect.isFalse(obj is! Object);
+  Expect.isFalse(null is! dynamic);
+  Expect.isFalse(obj is! dynamic);
+  Expect.isTrue(null is! String);
+  Expect.isTrue(obj is! String);
+  Expect.isTrue(0 is! Null);  // It's only assignable.
+
+  // Test "is" operator with generic type variable.
+  Expect.isTrue(new Generic<Null>().test(null));
+  Expect.isFalse(new Generic<Null>().test(42));
+  Expect.isTrue(new Generic2<Null, int>().test(null));
+  Expect.isFalse(new Generic2<Null, int>().test(42));
+
+  // Test cast, "as", operator.
+  Expect.equals(null, null as Null);
+  Expect.equals(null, null as Object);
+  Expect.equals(null, null as int);
+  Expect.throws(() => 42 as Null, (e) => e is CastError);
+  Expect.equals(null, new Generic<Null>().cast(null));
+  Expect.equals(null, new Generic<Object>().cast(null));
+  Expect.equals(null, new Generic<int>().cast(null));
+
+  Expect.equals(null, obj as Null);
+  Expect.equals(null, obj as Object);
+  Expect.equals(null, obj as int);
+  Expect.equals(null, new Generic<Null>().cast(obj));
+  Expect.equals(null, new Generic<Object>().cast(obj));
+  Expect.equals(null, new Generic<int>().cast(obj));
+
+  Expect.equals("null", null.toString());
+  Expect.equals("null", "${null}");
+  Expect.equals("null", obj.toString());
+  Expect.equals("null", "${obj}");
+
+  Expect.equals(Null, null.runtimeType);
+  Expect.equals(Null, obj.runtimeType);
+  Expect.equals(Null, new Generic<Null>().type);
+  Expect.equals(Null, new Generic2<Null, int>().type);
+
+  Expect.isFalse(compareToNull(val));
+  Expect.isTrue(compareToNull(obj));
+  Expect.isFalse(compareWithNull(val));
+  Expect.isTrue(compareWithNull(obj));
+
+  ClassMirror cm = reflectClass(Null);
+
+  InstanceMirror im1 = reflect(null);
+  Expect.equals(cm, im1.type);
+  Expect.isTrue(im1.invoke(const Symbol("=="), [null]).reflectee);
+  Expect.isFalse(im1.invoke(const Symbol("=="), [42]).reflectee);
+
+  InstanceMirror im2 = reflect(obj);
+  Expect.equals(cm, im2.type);
+  Expect.isTrue(im2.invoke(const Symbol("=="), [null]).reflectee);
+  Expect.isFalse(im2.invoke(const Symbol("=="), [42]).reflectee);
+
+  // Method/value extraction. The runtimeType was checked above, and operator==
+  // cannot be extracted.
+  // Currently fails in VM.
+  Expect.equals(null.toString, obj.toString);
+  Expect.equals(null.noSuchMethod, obj.noSuchMethod);
+  Expect.equals(null.hashCode, obj.hashCode);
+
+  var toString = null.toString;
+  Expect.equals("null", toString());
+  Expect.equals("null", Function.apply(toString, []));
+
+  Expect.throws(() => obj.notDeclared());
+  var noSuchMethod = null.noSuchMethod;
+  // Assing to "var" to prevent warning.
+  var capture = new CaptureInvocationMirror();
+  var mirror = capture.notDeclared();
+  Expect.throws(() => noSuchMethod(mirror));
+  Expect.throws(() => Function.apply(noSuchMethod, [mirror]));
+}
+
+
+class CaptureInvocationMirror {
+  noSuchMethod(mirror) => mirror;
 }
diff --git a/tests/lib/analyzer/analyze_tests.status b/tests/lib/analyzer/analyze_tests.status
index ca318fe..de9d41a 100644
--- a/tests/lib/analyzer/analyze_tests.status
+++ b/tests/lib/analyzer/analyze_tests.status
@@ -17,6 +17,7 @@
 standalone/io/secure_socket_argument_test: fail
 standalone/io/stdout_bad_argument_test: fail
 standalone/io/skipping_dart2js_compilations_test: fail
+standalone/io/dependency_graph_test: fail # http/dartbug.com/12449
 standalone/io/url_encoding_test: fail
 standalone/io/web_socket_protocol_processor_test: fail
 standalone/io/test_runner_test: fail
@@ -45,6 +46,7 @@
 standalone/io/secure_socket_argument_test: fail
 standalone/io/stdout_bad_argument_test: fail
 standalone/io/skipping_dart2js_compilations_test: fail
+standalone/io/dependency_graph_test: fail # http/dartbug.com/12449
 standalone/io/url_encoding_test: fail
 standalone/io/web_socket_protocol_processor_test: fail
 standalone/io/test_runner_test: fail
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 41d369f..97c4189 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -17,7 +17,6 @@
 mirrors/method_mirror_name_test: Fail # Issue 6335
 mirrors/method_mirror_properties_test: Fail # Issue 11861
 mirrors/method_mirror_returntype_test : Fail # Issue 11928
-mirrors/mixin_members_test : Fail # Issue 11863
 mirrors/mirrors_test: Fail # TODO(ahe): I'm working on fixing this.
 mirrors/null_test : Fail # Issue 12129
 mirrors/library_metadata_test: Fail # Issue 10905
@@ -102,6 +101,7 @@
 async/run_async3_test: Fail # _enqueueImmediate runs after Timer. http://dartbug.com/9001.
 mirrors/operator_test: Fail # http://dartbug.com/11944
 mirrors/mixin_test: Fail # TODO(ahe): This test is slightly broken. http://dartbug.com/12464
+mirrors/hierarchy_test: Fail # TODO(ahe): This test is slightly broken. http://dartbug.com/12464
 
 [ $compiler == none && $runtime == drt ]
 async/timer_isolate_test: Skip # See Issue 4997
diff --git a/tests/lib/mirrors/hierarchy_test.dart b/tests/lib/mirrors/hierarchy_test.dart
new file mode 100644
index 0000000..44ad0f2
--- /dev/null
+++ b/tests/lib/mirrors/hierarchy_test.dart
@@ -0,0 +1,56 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library hierarchy_test;
+
+@MirrorsUsed(targets: 'hierarchy_test, Object')
+import 'dart:mirrors';
+
+import 'package:expect/expect.dart';
+
+class FooMixin {
+  foo() => print('foo');
+}
+
+class Qux {
+  qux() => print('qux');
+}
+
+class Bar extends Qux implements FooMixin {
+  bar() => print('bar');
+  foo() => print('foo');
+}
+
+class Baz extends Qux with FooMixin {
+  bar() => print('bar');
+}
+
+stringifyHierarchy(mirror) {
+  var sb = new StringBuffer();
+  for (var type = mirror.type; type != null; type = type.superclass) {
+    sb.write('> ${MirrorSystem.getName(type.qualifiedName)}\n');
+    for (var i in type.superinterfaces) {
+      sb.write('  + ${MirrorSystem.getName(i.qualifiedName)}\n');
+    }
+  }
+  return '$sb';
+}
+
+main() {
+  Expect.stringEquals('''
+> hierarchy_test.Bar
+  + hierarchy_test.FooMixin
+> hierarchy_test.Qux
+> dart.core.Object
+''', stringifyHierarchy(reflect(new Bar()..foo()..bar()..qux())));
+
+  // TODO(ahe): Using wrong mixin syntax, see http://dartbug.com/12464.
+  Expect.stringEquals('''
+> hierarchy_test.Baz
+> hierarchy_test.FooMixin(hierarchy_test.Qux)
+  + hierarchy_test.FooMixin
+> hierarchy_test.Qux
+> dart.core.Object
+''', stringifyHierarchy(reflect(new Baz()..foo()..bar()..qux())));
+}
diff --git a/tests/lib/mirrors/library_uri_io_test.dart b/tests/lib/mirrors/library_uri_io_test.dart
index 1ee7b4c..c7ff851 100644
--- a/tests/lib/mirrors/library_uri_io_test.dart
+++ b/tests/lib/mirrors/library_uri_io_test.dart
@@ -24,10 +24,8 @@
   var mirrors = currentMirrorSystem();
   test("Test current library uri", () {
     String appendSlash(String path) => path.endsWith('/') ? path : '$path/';
-    Uri cwd = new Uri(
-        scheme: 'file',
-        path: appendSlash(new Path(new File('.').fullPathSync()).toString()));
-    Uri uri = cwd.resolve(new Path(Platform.script).toString());
+    Uri cwd = new Uri.file(appendSlash(new File('.').fullPathSync()));
+    Uri uri = cwd.resolveUri(new Uri.file(Platform.script));
     testLibraryUri(new Class(), uri);
   });
 }
diff --git a/tests/lib/mirrors/mixin_members_test.dart b/tests/lib/mirrors/mixin_members_test.dart
index 4b82534..eca7166 100644
--- a/tests/lib/mirrors/mixin_members_test.dart
+++ b/tests/lib/mirrors/mixin_members_test.dart
@@ -2,10 +2,16 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+library mixin_members_test;
+
+// TODO(ahe): Don't add mirrors used, the test doesn't work without it.
+@MirrorsUsed(targets: 'mixin_members_test', override: '*')
 import "dart:mirrors";
 
 import "package:expect/expect.dart";
 
+import 'stringify.dart';
+
 class Fooer {
   foo1();
 }
@@ -29,21 +35,24 @@
 
 main() {
   ClassMirror cm = reflectClass(C);
-  Classmirror sM1M2 = cm.superclass;
-  Classmirror sM1 = sM1M2.superclass;
+  ClassMirror sM1M2 = cm.superclass;
+  ClassMirror sM1 = sM1M2.superclass;
   ClassMirror s = sM1.superclass;
-  Expect.equals(0, cm.members.length);
-  Expect.setEquals(sM1M2.members.keys,
-                   [const Symbol("baz1"), const Symbol("baz2")]);
-  Expect.setEquals(sM1M2.superinterfaces.map((e) => e.simpleName),
-                   [const Symbol("M2")]);
-  Expect.setEquals(sM1.members.keys,
-                   [const Symbol("bar1"), const Symbol("bar2")]);
-  Expect.setEquals(sM1.superinterfaces.map((e) => e.simpleName),
-                   [const Symbol("M1")]);
-  Expect.setEquals(s.members.keys.toSet(),
-                   [const Symbol("foo1"), const Symbol("foo2")]);
-  Expect.setEquals(s.superinterfaces.map((e) => e.simpleName),
-                   [const Symbol("Fooer")]);
-  Expect.equals(true, reflectClass(S) == s);
+  expect('{}', cm.members);
+  expect('[s(baz1), s(baz2)]',
+         // TODO(ahe): Shouldn't have to sort.
+         sort(sM1M2.members.keys),
+         '(S with M1, M2).members');
+  expect('[s(M2)]', simpleNames(sM1M2.superinterfaces),
+         '(S with M1, M2).superinterfaces');
+  expect('[s(bar1), s(bar2)]',
+         // TODO(ahe): Shouldn't have to sort.
+         sort(sM1.members.keys), '(S with M1).members');
+  expect('[s(M1)]', simpleNames(sM1.superinterfaces),
+         '(S with M1).superinterfaces');
+  expect('[s(foo1), s(foo2)]',
+         // TODO(ahe): Shouldn't have to sort.
+         sort(s.members.keys), 's.members');
+  expect('[s(Fooer)]', simpleNames(s.superinterfaces), 's.superinterfaces');
+  Expect.equals(s, reflectClass(S));
 }
diff --git a/tests/lib/mirrors/mixin_test.dart b/tests/lib/mirrors/mixin_test.dart
index 86ca0c8..eb70034 100644
--- a/tests/lib/mirrors/mixin_test.dart
+++ b/tests/lib/mirrors/mixin_test.dart
@@ -65,11 +65,14 @@
       'Class(s(Mixin) in s(test.mixin_test), top-level)',
       'Class(s(Object) in s(dart.core), top-level)',
   ]);
+
   expect(
-      '{Mixin: Method(s(Mixin) in s(Mixin), constructor),'
-      ' i: Variable(s(i) in s(Mixin)),'
+      '{i: Variable(s(i) in s(Mixin)),'
       ' m: Method(s(m) in s(Mixin))}',
       reflectClass(Mixin).members);
+
+  expect('{Mixin: Method(s(Mixin) in s(Mixin), constructor)}',
+         reflectClass(Mixin).constructors);
 }
 
 testMixin2() {
@@ -77,11 +80,14 @@
       'Class(s(Mixin2) in s(test.mixin_test), top-level)',
       'Class(s(Object) in s(dart.core), top-level)',
   ]);
+
   expect(
-      '{Mixin2: Method(s(Mixin2) in s(Mixin2), constructor),'
-      ' i2: Variable(s(i2) in s(Mixin2)),'
+      '{i2: Variable(s(i2) in s(Mixin2)),'
       ' m2: Method(s(m2) in s(Mixin2))}',
       reflectClass(Mixin2).members);
+
+  expect('{Mixin2: Method(s(Mixin2) in s(Mixin2), constructor)}',
+         reflectClass(Mixin2).constructors);
 }
 
 testMixinApplication() {
@@ -94,12 +100,14 @@
   ]);
 
   expect(
-      '{MixinApplication: Method(s(MixinApplication) in s(MixinApplication),'
-      ' constructor),'
-      ' i: Variable(s(i) in s(MixinApplication)),'
+      '{i: Variable(s(i) in s(MixinApplication)),'
       ' m: Method(s(m) in s(MixinApplication))}',
       reflectClass(MixinApplication).members);
 
+  expect('{MixinApplication: Method(s(MixinApplication) in s(MixinApplication),'
+         ' constructor)}',
+         reflectClass(MixinApplication).constructors);
+
   expectSame(reflectClass(C), reflectClass(MixinApplication).superclass);
 }
 
@@ -114,19 +122,26 @@
   ]);
 
   expect(
-      '{MixinApplicationA: Method(s(MixinApplicationA) in s(MixinApplicationA),'
-      ' constructor),'
-      ' i2: Variable(s(i2) in s(MixinApplicationA)),'
+      // TODO(ahe): The owner should be the mixin.
+      '{i2: Variable(s(i2) in s(MixinApplicationA)),'
       ' m2: Method(s(m2) in s(MixinApplicationA))}',
       reflectClass(MixinApplicationA).members);
 
   expect(
-       // TODO(ahe): The owner should probably be the mixin application.
-      '{Mixin: Method(s(Mixin) in s(Mixin), constructor),'
-      ' i: Variable(s(i) in s(Mixin)),'
+      '{MixinApplicationA: Method(s(MixinApplicationA) in s(MixinApplicationA),'
+      ' constructor)}',
+      reflectClass(MixinApplicationA).constructors);
+
+  expect(
+      '{i: Variable(s(i) in s(Mixin)),'
       ' m: Method(s(m) in s(Mixin))}',
       reflectClass(MixinApplicationA).superclass.members);
 
+  expect(
+      // TODO(ahe): The owner should be the mixin application.
+      '{Mixin: Method(s(Mixin) in s(Mixin), constructor)}',
+      reflectClass(MixinApplicationA).superclass.constructors);
+
   expectSame(
       reflectClass(C),
       reflectClass(MixinApplicationA).superclass.superclass);
@@ -142,12 +157,15 @@
   ]);
 
   expect(
-      '{UnusedMixinApplication: Method(s(UnusedMixinApplication)'
-      ' in s(UnusedMixinApplication), constructor),'
-      ' i: Variable(s(i) in s(UnusedMixinApplication)),'
+      '{i: Variable(s(i) in s(UnusedMixinApplication)),'
       ' m: Method(s(m) in s(UnusedMixinApplication))}',
       reflectClass(UnusedMixinApplication).members);
 
+  expect(
+      '{UnusedMixinApplication: Method(s(UnusedMixinApplication)'
+      ' in s(UnusedMixinApplication), constructor)}',
+      reflectClass(UnusedMixinApplication).constructors);
+
   expectSame(reflectClass(C), reflectClass(UnusedMixinApplication).superclass);
 }
 
@@ -162,17 +180,23 @@
   ]);
 
   expect(
-      '{Subclass: Method(s(Subclass) in s(Subclass), constructor),'
-      ' f: Method(s(f) in s(Subclass))}',
+      '{f: Method(s(f) in s(Subclass))}',
       reflectClass(Subclass).members);
 
   expect(
-       // TODO(ahe): The owner should probably be the mixin application.
-      '{Mixin: Method(s(Mixin) in s(Mixin), constructor),'
-      ' i: Variable(s(i) in s(Mixin)),'
+      '{Subclass: Method(s(Subclass) in s(Subclass), constructor)}',
+      reflectClass(Subclass).constructors);
+
+  expect(
+      '{i: Variable(s(i) in s(Mixin)),'
       ' m: Method(s(m) in s(Mixin))}',
       reflectClass(Subclass).superclass.members);
 
+  expect(
+       // TODO(ahe): The owner should be the mixin application.
+      '{Mixin: Method(s(Mixin) in s(Mixin), constructor)}',
+      reflectClass(Subclass).superclass.constructors);
+
   expectSame(
       reflectClass(C),
       reflectClass(Subclass).superclass.superclass);
@@ -189,10 +213,13 @@
   ]);
 
   expect(
-      '{Subclass2: Method(s(Subclass2) in s(Subclass2), constructor),'
-      ' g: Method(s(g) in s(Subclass2))}',
+      '{g: Method(s(g) in s(Subclass2))}',
       reflectClass(Subclass2).members);
 
+  expect(
+      '{Subclass2: Method(s(Subclass2) in s(Subclass2), constructor)}',
+      reflectClass(Subclass2).constructors);
+
   expectSame(
       reflectClass(MixinApplication),
       reflectClass(Subclass2).superclass);
@@ -211,24 +238,33 @@
   ]);
 
   expect(
-      '{SubclassA: Method(s(SubclassA) in s(SubclassA), constructor),'
-      ' fa: Method(s(fa) in s(SubclassA))}',
+      '{fa: Method(s(fa) in s(SubclassA))}',
       reflectClass(SubclassA).members);
 
   expect(
-       // TODO(ahe): The owner should probably be the mixin application.
-      '{Mixin2: Method(s(Mixin2) in s(Mixin2), constructor),'
-      ' i2: Variable(s(i2) in s(Mixin2)),'
+      '{SubclassA: Method(s(SubclassA) in s(SubclassA), constructor)}',
+      reflectClass(SubclassA).constructors);
+
+  expect(
+      '{i2: Variable(s(i2) in s(Mixin2)),'
       ' m2: Method(s(m2) in s(Mixin2))}',
       reflectClass(SubclassA).superclass.members);
 
   expect(
-       // TODO(ahe): The owner should probably be the mixin application.
-      '{Mixin: Method(s(Mixin) in s(Mixin), constructor),'
-      ' i: Variable(s(i) in s(Mixin)),'
+       // TODO(ahe): The owner should be the mixin application.
+      '{Mixin2: Method(s(Mixin2) in s(Mixin2), constructor)}',
+      reflectClass(SubclassA).superclass.constructors);
+
+  expect(
+      '{i: Variable(s(i) in s(Mixin)),'
       ' m: Method(s(m) in s(Mixin))}',
       reflectClass(SubclassA).superclass.superclass.members);
 
+  expect(
+       // TODO(ahe): The owner should be the mixin application.
+      '{Mixin: Method(s(Mixin) in s(Mixin), constructor)}',
+      reflectClass(SubclassA).superclass.superclass.constructors);
+
   expectSame(
       reflectClass(C),
       reflectClass(SubclassA).superclass.superclass.superclass);
@@ -246,10 +282,13 @@
   ]);
 
   expect(
-      '{Subclass2A: Method(s(Subclass2A) in s(Subclass2A), constructor),'
-      ' ga: Method(s(ga) in s(Subclass2A))}',
+      '{ga: Method(s(ga) in s(Subclass2A))}',
       reflectClass(Subclass2A).members);
 
+  expect(
+      '{Subclass2A: Method(s(Subclass2A) in s(Subclass2A), constructor)}',
+      reflectClass(Subclass2A).constructors);
+
   expectSame(reflectClass(MixinApplicationA),
              reflectClass(Subclass2A).superclass);
 }
diff --git a/tests/lib/mirrors/null_test.dart b/tests/lib/mirrors/null_test.dart
index 2a8a8ba..10b92f3 100644
--- a/tests/lib/mirrors/null_test.dart
+++ b/tests/lib/mirrors/null_test.dart
@@ -26,6 +26,7 @@
                 'noSuchMethod');
 
   ClassMirror NullMirror = nullMirror.type;
+  Expect.equals(reflectClass(Null), NullMirror);
   Expect.equals(const Symbol('Null'), NullMirror.simpleName);
   Expect.equals(const Symbol('Object'), NullMirror.superclass.simpleName);
   Expect.equals(null, NullMirror.superclass.superclass);
diff --git a/tests/lib/mirrors/stringify.dart b/tests/lib/mirrors/stringify.dart
index 731403b..9778772 100644
--- a/tests/lib/mirrors/stringify.dart
+++ b/tests/lib/mirrors/stringify.dart
@@ -26,7 +26,7 @@
   return '{$buffer}';
 }
 
-stringifyList(List list) {
+stringifyIterable(Iterable list) {
   var buffer = new StringBuffer();
   bool first = true;
   for (String value in list.map(stringify)) {
@@ -100,7 +100,7 @@
 
 stringify(value) {
   if (value is Map) return stringifyMap(value);
-  if (value is List) return stringifyList(value);
+  if (value is Iterable) return stringifyIterable(value);
   if (value is ParameterMirror) return stringifyParameter(value);
   if (value is VariableMirror) return stringifyVariable(value);
   if (value is MethodMirror) return stringifyMethod(value);
@@ -111,8 +111,14 @@
   throw 'Unexpected value: $value';
 }
 
-expect(expected, actual) => Expect.stringEquals(expected, stringify(actual));
+expect(expected, actual, [String reason]) {
+  Expect.stringEquals(expected, stringify(actual), reason);
+}
 
 compareSymbols(Symbol a, Symbol b) {
   return MirrorSystem.getName(a).compareTo(MirrorSystem.getName(b));
 }
+
+simpleNames(Iterable<Mirror> i) => i.map((e) => e.simpleName);
+
+sort(Iterable<Symbol> symbols) => symbols.toList()..sort(compareSymbols);
diff --git a/tests/lib/mirrors/unmangled_type_test.dart b/tests/lib/mirrors/unmangled_type_test.dart
new file mode 100644
index 0000000..dbc6b62
--- /dev/null
+++ b/tests/lib/mirrors/unmangled_type_test.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:mirrors';
+
+import 'package:expect/expect.dart';
+
+class Foo {
+}
+
+main() {
+  Expect.stringEquals('Foo', '${new Foo().runtimeType}');
+  Expect.stringEquals('foo', MirrorSystem.getName(new Symbol('foo')));
+}
diff --git a/tests/lib/typed_data/float32x4_cross_test.dart b/tests/lib/typed_data/float32x4_cross_test.dart
index 0816846..3268488 100644
--- a/tests/lib/typed_data/float32x4_cross_test.dart
+++ b/tests/lib/typed_data/float32x4_cross_test.dart
@@ -10,11 +10,11 @@
 import 'package:expect/expect.dart';
 
 Float32x4 cross(Float32x4 a, Float32x4 b) {
-  var t0 = a.yzxw;
-  var t1 = b.zxyw;
+  var t0 = a.shuffle(Float32x4.YZXW);
+  var t1 = b.shuffle(Float32x4.ZXYW);
   var l = t0 * t1;
-  t0 = a.zxyw;
-  t1 = b.yzxw;
+  t0 = a.shuffle(Float32x4.ZXYW);
+  t1 = b.shuffle(Float32x4.YZXW);
   var r = t0 * t1;
   return l-r;
 }
diff --git a/tests/lib/typed_data/float32x4_shuffle_test.dart b/tests/lib/typed_data/float32x4_shuffle_test.dart
index a863f12..d12f86d 100644
--- a/tests/lib/typed_data/float32x4_shuffle_test.dart
+++ b/tests/lib/typed_data/float32x4_shuffle_test.dart
@@ -9,1300 +9,1360 @@
 import "package:expect/expect.dart";
 import 'dart:typed_data';
 
-void testShuffle0() {
+void testShuffle00() {
   var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
   var c;
-  c = m.xxxx;
+  c = m.shuffle(Float32x4.XXXX);
   Expect.equals(1.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.xxxy;
+  c = m.shuffle(Float32x4.XXXY);
   Expect.equals(1.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.xxxz;
+  c = m.shuffle(Float32x4.XXXZ);
   Expect.equals(1.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.xxxw;
+  c = m.shuffle(Float32x4.XXXW);
   Expect.equals(1.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.xxyx;
+  c = m.shuffle(Float32x4.XXYX);
   Expect.equals(1.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.xxyy;
+  c = m.shuffle(Float32x4.XXYY);
   Expect.equals(1.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.xxyz;
+  c = m.shuffle(Float32x4.XXYZ);
   Expect.equals(1.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.xxyw;
+  c = m.shuffle(Float32x4.XXYW);
   Expect.equals(1.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.xxzx;
+  c = m.shuffle(Float32x4.XXZX);
   Expect.equals(1.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.xxzy;
+  c = m.shuffle(Float32x4.XXZY);
   Expect.equals(1.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.xxzz;
+  c = m.shuffle(Float32x4.XXZZ);
   Expect.equals(1.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.xxzw;
+  c = m.shuffle(Float32x4.XXZW);
   Expect.equals(1.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.xxwx;
+  c = m.shuffle(Float32x4.XXWX);
   Expect.equals(1.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.xxwy;
+  c = m.shuffle(Float32x4.XXWY);
   Expect.equals(1.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.xxwz;
+  c = m.shuffle(Float32x4.XXWZ);
   Expect.equals(1.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.xxww;
+  c = m.shuffle(Float32x4.XXWW);
   Expect.equals(1.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.xyxx;
+}
+
+void testShuffle01() {
+  var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  var c;
+  c = m.shuffle(Float32x4.XYXX);
   Expect.equals(1.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.xyxy;
+  c = m.shuffle(Float32x4.XYXY);
   Expect.equals(1.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.xyxz;
+  c = m.shuffle(Float32x4.XYXZ);
   Expect.equals(1.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.xyxw;
+  c = m.shuffle(Float32x4.XYXW);
   Expect.equals(1.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.xyyx;
+  c = m.shuffle(Float32x4.XYYX);
   Expect.equals(1.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.xyyy;
+  c = m.shuffle(Float32x4.XYYY);
   Expect.equals(1.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.xyyz;
+  c = m.shuffle(Float32x4.XYYZ);
   Expect.equals(1.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.xyyw;
+  c = m.shuffle(Float32x4.XYYW);
   Expect.equals(1.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.xyzx;
+  c = m.shuffle(Float32x4.XYZX);
   Expect.equals(1.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.xyzy;
+  c = m.shuffle(Float32x4.XYZY);
   Expect.equals(1.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.xyzz;
+  c = m.shuffle(Float32x4.XYZZ);
   Expect.equals(1.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.xyzw;
+  c = m.shuffle(Float32x4.XYZW);
   Expect.equals(1.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.xywx;
+  c = m.shuffle(Float32x4.XYWX);
   Expect.equals(1.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.xywy;
+  c = m.shuffle(Float32x4.XYWY);
   Expect.equals(1.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.xywz;
+  c = m.shuffle(Float32x4.XYWZ);
   Expect.equals(1.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.xyww;
+  c = m.shuffle(Float32x4.XYWW);
   Expect.equals(1.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.xzxx;
+}
+
+void testShuffle02() {
+  var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  var c;
+  c = m.shuffle(Float32x4.XZXX);
   Expect.equals(1.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.xzxy;
+  c = m.shuffle(Float32x4.XZXY);
   Expect.equals(1.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.xzxz;
+  c = m.shuffle(Float32x4.XZXZ);
   Expect.equals(1.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.xzxw;
+  c = m.shuffle(Float32x4.XZXW);
   Expect.equals(1.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.xzyx;
+  c = m.shuffle(Float32x4.XZYX);
   Expect.equals(1.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.xzyy;
+  c = m.shuffle(Float32x4.XZYY);
   Expect.equals(1.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.xzyz;
+  c = m.shuffle(Float32x4.XZYZ);
   Expect.equals(1.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.xzyw;
+  c = m.shuffle(Float32x4.XZYW);
   Expect.equals(1.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.xzzx;
+  c = m.shuffle(Float32x4.XZZX);
   Expect.equals(1.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.xzzy;
+  c = m.shuffle(Float32x4.XZZY);
   Expect.equals(1.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.xzzz;
+  c = m.shuffle(Float32x4.XZZZ);
   Expect.equals(1.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.xzzw;
+  c = m.shuffle(Float32x4.XZZW);
   Expect.equals(1.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.xzwx;
+  c = m.shuffle(Float32x4.XZWX);
   Expect.equals(1.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.xzwy;
+  c = m.shuffle(Float32x4.XZWY);
   Expect.equals(1.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.xzwz;
+  c = m.shuffle(Float32x4.XZWZ);
   Expect.equals(1.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.xzww;
+  c = m.shuffle(Float32x4.XZWW);
   Expect.equals(1.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.xwxx;
+}
+
+void testShuffle03() {
+  var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  var c;
+  c = m.shuffle(Float32x4.XWXX);
   Expect.equals(1.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.xwxy;
+  c = m.shuffle(Float32x4.XWXY);
   Expect.equals(1.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.xwxz;
+  c = m.shuffle(Float32x4.XWXZ);
   Expect.equals(1.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.xwxw;
+  c = m.shuffle(Float32x4.XWXW);
   Expect.equals(1.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.xwyx;
+  c = m.shuffle(Float32x4.XWYX);
   Expect.equals(1.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.xwyy;
+  c = m.shuffle(Float32x4.XWYY);
   Expect.equals(1.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.xwyz;
+  c = m.shuffle(Float32x4.XWYZ);
   Expect.equals(1.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.xwyw;
+  c = m.shuffle(Float32x4.XWYW);
   Expect.equals(1.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.xwzx;
+  c = m.shuffle(Float32x4.XWZX);
   Expect.equals(1.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.xwzy;
+  c = m.shuffle(Float32x4.XWZY);
   Expect.equals(1.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.xwzz;
+  c = m.shuffle(Float32x4.XWZZ);
   Expect.equals(1.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.xwzw;
+  c = m.shuffle(Float32x4.XWZW);
   Expect.equals(1.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.xwwx;
+  c = m.shuffle(Float32x4.XWWX);
   Expect.equals(1.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.xwwy;
+  c = m.shuffle(Float32x4.XWWY);
   Expect.equals(1.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.xwwz;
+  c = m.shuffle(Float32x4.XWWZ);
   Expect.equals(1.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.xwww;
+  c = m.shuffle(Float32x4.XWWW);
   Expect.equals(1.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(4.0, c.w);
 }
 
-void testShuffle1() {
+void testShuffle10() {
   var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
   var c;
-  c = m.yxxx;
+  c = m.shuffle(Float32x4.YXXX);
   Expect.equals(2.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.yxxy;
+  c = m.shuffle(Float32x4.YXXY);
   Expect.equals(2.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.yxxz;
+  c = m.shuffle(Float32x4.YXXZ);
   Expect.equals(2.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.yxxw;
+  c = m.shuffle(Float32x4.YXXW);
   Expect.equals(2.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.yxyx;
+  c = m.shuffle(Float32x4.YXYX);
   Expect.equals(2.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.yxyy;
+  c = m.shuffle(Float32x4.YXYY);
   Expect.equals(2.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.yxyz;
+  c = m.shuffle(Float32x4.YXYZ);
   Expect.equals(2.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.yxyw;
+  c = m.shuffle(Float32x4.YXYW);
   Expect.equals(2.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.yxzx;
+  c = m.shuffle(Float32x4.YXZX);
   Expect.equals(2.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.yxzy;
+  c = m.shuffle(Float32x4.YXZY);
   Expect.equals(2.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.yxzz;
+  c = m.shuffle(Float32x4.YXZZ);
   Expect.equals(2.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.yxzw;
+  c = m.shuffle(Float32x4.YXZW);
   Expect.equals(2.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.yxwx;
+  c = m.shuffle(Float32x4.YXWX);
   Expect.equals(2.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.yxwy;
+  c = m.shuffle(Float32x4.YXWY);
   Expect.equals(2.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.yxwz;
+  c = m.shuffle(Float32x4.YXWZ);
   Expect.equals(2.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.yxww;
+  c = m.shuffle(Float32x4.YXWW);
   Expect.equals(2.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.yyxx;
+}
+
+void testShuffle11() {
+  var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  var c;
+  c = m.shuffle(Float32x4.YYXX);
   Expect.equals(2.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.yyxy;
+  c = m.shuffle(Float32x4.YYXY);
   Expect.equals(2.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.yyxz;
+  c = m.shuffle(Float32x4.YYXZ);
   Expect.equals(2.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.yyxw;
+  c = m.shuffle(Float32x4.YYXW);
   Expect.equals(2.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.yyyx;
+  c = m.shuffle(Float32x4.YYYX);
   Expect.equals(2.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.yyyy;
+  c = m.shuffle(Float32x4.YYYY);
   Expect.equals(2.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.yyyz;
+  c = m.shuffle(Float32x4.YYYZ);
   Expect.equals(2.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.yyyw;
+  c = m.shuffle(Float32x4.YYYW);
   Expect.equals(2.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.yyzx;
+  c = m.shuffle(Float32x4.YYZX);
   Expect.equals(2.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.yyzy;
+  c = m.shuffle(Float32x4.YYZY);
   Expect.equals(2.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.yyzz;
+  c = m.shuffle(Float32x4.YYZZ);
   Expect.equals(2.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.yyzw;
+  c = m.shuffle(Float32x4.YYZW);
   Expect.equals(2.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.yywx;
+  c = m.shuffle(Float32x4.YYWX);
   Expect.equals(2.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.yywy;
+  c = m.shuffle(Float32x4.YYWY);
   Expect.equals(2.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.yywz;
+  c = m.shuffle(Float32x4.YYWZ);
   Expect.equals(2.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.yyww;
+  c = m.shuffle(Float32x4.YYWW);
   Expect.equals(2.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.yzxx;
+}
+
+void testShuffle12() {
+  var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  var c;
+  c = m.shuffle(Float32x4.YZXX);
   Expect.equals(2.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.yzxy;
+  c = m.shuffle(Float32x4.YZXY);
   Expect.equals(2.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.yzxz;
+  c = m.shuffle(Float32x4.YZXZ);
   Expect.equals(2.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.yzxw;
+  c = m.shuffle(Float32x4.YZXW);
   Expect.equals(2.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.yzyx;
+  c = m.shuffle(Float32x4.YZYX);
   Expect.equals(2.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.yzyy;
+  c = m.shuffle(Float32x4.YZYY);
   Expect.equals(2.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.yzyz;
+  c = m.shuffle(Float32x4.YZYZ);
   Expect.equals(2.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.yzyw;
+  c = m.shuffle(Float32x4.YZYW);
   Expect.equals(2.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.yzzx;
+  c = m.shuffle(Float32x4.YZZX);
   Expect.equals(2.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.yzzy;
+  c = m.shuffle(Float32x4.YZZY);
   Expect.equals(2.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.yzzz;
+  c = m.shuffle(Float32x4.YZZZ);
   Expect.equals(2.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.yzzw;
+  c = m.shuffle(Float32x4.YZZW);
   Expect.equals(2.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.yzwx;
+  c = m.shuffle(Float32x4.YZWX);
   Expect.equals(2.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.yzwy;
+  c = m.shuffle(Float32x4.YZWY);
   Expect.equals(2.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.yzwz;
+  c = m.shuffle(Float32x4.YZWZ);
   Expect.equals(2.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.yzww;
+  c = m.shuffle(Float32x4.YZWW);
   Expect.equals(2.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.ywxx;
+}
+
+void testShuffle13() {
+  var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  var c;
+  c = m.shuffle(Float32x4.YWXX);
   Expect.equals(2.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.ywxy;
+  c = m.shuffle(Float32x4.YWXY);
   Expect.equals(2.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.ywxz;
+  c = m.shuffle(Float32x4.YWXZ);
   Expect.equals(2.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.ywxw;
+  c = m.shuffle(Float32x4.YWXW);
   Expect.equals(2.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.ywyx;
+  c = m.shuffle(Float32x4.YWYX);
   Expect.equals(2.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.ywyy;
+  c = m.shuffle(Float32x4.YWYY);
   Expect.equals(2.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.ywyz;
+  c = m.shuffle(Float32x4.YWYZ);
   Expect.equals(2.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.ywyw;
+  c = m.shuffle(Float32x4.YWYW);
   Expect.equals(2.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.ywzx;
+  c = m.shuffle(Float32x4.YWZX);
   Expect.equals(2.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.ywzy;
+  c = m.shuffle(Float32x4.YWZY);
   Expect.equals(2.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.ywzz;
+  c = m.shuffle(Float32x4.YWZZ);
   Expect.equals(2.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.ywzw;
+  c = m.shuffle(Float32x4.YWZW);
   Expect.equals(2.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.ywwx;
+  c = m.shuffle(Float32x4.YWWX);
   Expect.equals(2.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.ywwy;
+  c = m.shuffle(Float32x4.YWWY);
   Expect.equals(2.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.ywwz;
+  c = m.shuffle(Float32x4.YWWZ);
   Expect.equals(2.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.ywww;
+  c = m.shuffle(Float32x4.YWWW);
   Expect.equals(2.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(4.0, c.w);
 }
 
-void testShuffle2() {
+void testShuffle20() {
   var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
   var c;
-  c = m.zxxx;
+  c = m.shuffle(Float32x4.ZXXX);
   Expect.equals(3.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.zxxy;
+  c = m.shuffle(Float32x4.ZXXY);
   Expect.equals(3.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.zxxz;
+  c = m.shuffle(Float32x4.ZXXZ);
   Expect.equals(3.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.zxxw;
+  c = m.shuffle(Float32x4.ZXXW);
   Expect.equals(3.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.zxyx;
+  c = m.shuffle(Float32x4.ZXYX);
   Expect.equals(3.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.zxyy;
+  c = m.shuffle(Float32x4.ZXYY);
   Expect.equals(3.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.zxyz;
+  c = m.shuffle(Float32x4.ZXYZ);
   Expect.equals(3.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.zxyw;
+  c = m.shuffle(Float32x4.ZXYW);
   Expect.equals(3.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.zxzx;
+  c = m.shuffle(Float32x4.ZXZX);
   Expect.equals(3.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.zxzy;
+  c = m.shuffle(Float32x4.ZXZY);
   Expect.equals(3.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.zxzz;
+  c = m.shuffle(Float32x4.ZXZZ);
   Expect.equals(3.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.zxzw;
+  c = m.shuffle(Float32x4.ZXZW);
   Expect.equals(3.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.zxwx;
+  c = m.shuffle(Float32x4.ZXWX);
   Expect.equals(3.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.zxwy;
+  c = m.shuffle(Float32x4.ZXWY);
   Expect.equals(3.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.zxwz;
+  c = m.shuffle(Float32x4.ZXWZ);
   Expect.equals(3.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.zxww;
+  c = m.shuffle(Float32x4.ZXWW);
   Expect.equals(3.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.zyxx;
+}
+
+void testShuffle21() {
+  var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  var c;
+  c = m.shuffle(Float32x4.ZYXX);
   Expect.equals(3.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.zyxy;
+  c = m.shuffle(Float32x4.ZYXY);
   Expect.equals(3.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.zyxz;
+  c = m.shuffle(Float32x4.ZYXZ);
   Expect.equals(3.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.zyxw;
+  c = m.shuffle(Float32x4.ZYXW);
   Expect.equals(3.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.zyyx;
+  c = m.shuffle(Float32x4.ZYYX);
   Expect.equals(3.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.zyyy;
+  c = m.shuffle(Float32x4.ZYYY);
   Expect.equals(3.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.zyyz;
+  c = m.shuffle(Float32x4.ZYYZ);
   Expect.equals(3.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.zyyw;
+  c = m.shuffle(Float32x4.ZYYW);
   Expect.equals(3.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.zyzx;
+  c = m.shuffle(Float32x4.ZYZX);
   Expect.equals(3.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.zyzy;
+  c = m.shuffle(Float32x4.ZYZY);
   Expect.equals(3.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.zyzz;
+  c = m.shuffle(Float32x4.ZYZZ);
   Expect.equals(3.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.zyzw;
+  c = m.shuffle(Float32x4.ZYZW);
   Expect.equals(3.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.zywx;
+  c = m.shuffle(Float32x4.ZYWX);
   Expect.equals(3.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.zywy;
+  c = m.shuffle(Float32x4.ZYWY);
   Expect.equals(3.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.zywz;
+  c = m.shuffle(Float32x4.ZYWZ);
   Expect.equals(3.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.zyww;
+  c = m.shuffle(Float32x4.ZYWW);
   Expect.equals(3.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.zzxx;
+}
+
+void testShuffle22() {
+  var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  var c;
+  c = m.shuffle(Float32x4.ZZXX);
   Expect.equals(3.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.zzxy;
+  c = m.shuffle(Float32x4.ZZXY);
   Expect.equals(3.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.zzxz;
+  c = m.shuffle(Float32x4.ZZXZ);
   Expect.equals(3.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.zzxw;
+  c = m.shuffle(Float32x4.ZZXW);
   Expect.equals(3.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.zzyx;
+  c = m.shuffle(Float32x4.ZZYX);
   Expect.equals(3.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.zzyy;
+  c = m.shuffle(Float32x4.ZZYY);
   Expect.equals(3.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.zzyz;
+  c = m.shuffle(Float32x4.ZZYZ);
   Expect.equals(3.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.zzyw;
+  c = m.shuffle(Float32x4.ZZYW);
   Expect.equals(3.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.zzzx;
+  c = m.shuffle(Float32x4.ZZZX);
   Expect.equals(3.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.zzzy;
+  c = m.shuffle(Float32x4.ZZZY);
   Expect.equals(3.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.zzzz;
+  c = m.shuffle(Float32x4.ZZZZ);
   Expect.equals(3.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.zzzw;
+  c = m.shuffle(Float32x4.ZZZW);
   Expect.equals(3.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.zzwx;
+  c = m.shuffle(Float32x4.ZZWX);
   Expect.equals(3.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.zzwy;
+  c = m.shuffle(Float32x4.ZZWY);
   Expect.equals(3.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.zzwz;
+  c = m.shuffle(Float32x4.ZZWZ);
   Expect.equals(3.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.zzww;
+  c = m.shuffle(Float32x4.ZZWW);
   Expect.equals(3.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.zwxx;
+}
+
+void testShuffle23() {
+  var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  var c;
+  c = m.shuffle(Float32x4.ZWXX);
   Expect.equals(3.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.zwxy;
+  c = m.shuffle(Float32x4.ZWXY);
   Expect.equals(3.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.zwxz;
+  c = m.shuffle(Float32x4.ZWXZ);
   Expect.equals(3.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.zwxw;
+  c = m.shuffle(Float32x4.ZWXW);
   Expect.equals(3.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.zwyx;
+  c = m.shuffle(Float32x4.ZWYX);
   Expect.equals(3.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.zwyy;
+  c = m.shuffle(Float32x4.ZWYY);
   Expect.equals(3.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.zwyz;
+  c = m.shuffle(Float32x4.ZWYZ);
   Expect.equals(3.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.zwyw;
+  c = m.shuffle(Float32x4.ZWYW);
   Expect.equals(3.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.zwzx;
+  c = m.shuffle(Float32x4.ZWZX);
   Expect.equals(3.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.zwzy;
+  c = m.shuffle(Float32x4.ZWZY);
   Expect.equals(3.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.zwzz;
+  c = m.shuffle(Float32x4.ZWZZ);
   Expect.equals(3.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.zwzw;
+  c = m.shuffle(Float32x4.ZWZW);
   Expect.equals(3.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.zwwx;
+  c = m.shuffle(Float32x4.ZWWX);
   Expect.equals(3.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.zwwy;
+  c = m.shuffle(Float32x4.ZWWY);
   Expect.equals(3.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.zwwz;
+  c = m.shuffle(Float32x4.ZWWZ);
   Expect.equals(3.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.zwww;
+  c = m.shuffle(Float32x4.ZWWW);
   Expect.equals(3.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(4.0, c.w);
 }
 
-void testShuffle3() {
+void testShuffle30() {
   var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
   var c;
-  c = m.wxxx;
+  c = m.shuffle(Float32x4.WXXX);
   Expect.equals(4.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.wxxy;
+  c = m.shuffle(Float32x4.WXXY);
   Expect.equals(4.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.wxxz;
+  c = m.shuffle(Float32x4.WXXZ);
   Expect.equals(4.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.wxxw;
+  c = m.shuffle(Float32x4.WXXW);
   Expect.equals(4.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.wxyx;
+  c = m.shuffle(Float32x4.WXYX);
   Expect.equals(4.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.wxyy;
+  c = m.shuffle(Float32x4.WXYY);
   Expect.equals(4.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.wxyz;
+  c = m.shuffle(Float32x4.WXYZ);
   Expect.equals(4.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.wxyw;
+  c = m.shuffle(Float32x4.WXYW);
   Expect.equals(4.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.wxzx;
+  c = m.shuffle(Float32x4.WXZX);
   Expect.equals(4.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.wxzy;
+  c = m.shuffle(Float32x4.WXZY);
   Expect.equals(4.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.wxzz;
+  c = m.shuffle(Float32x4.WXZZ);
   Expect.equals(4.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.wxzw;
+  c = m.shuffle(Float32x4.WXZW);
   Expect.equals(4.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.wxwx;
+  c = m.shuffle(Float32x4.WXWX);
   Expect.equals(4.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.wxwy;
+  c = m.shuffle(Float32x4.WXWY);
   Expect.equals(4.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.wxwz;
+  c = m.shuffle(Float32x4.WXWZ);
   Expect.equals(4.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.wxww;
+  c = m.shuffle(Float32x4.WXWW);
   Expect.equals(4.0, c.x);
   Expect.equals(1.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.wyxx;
+}
+
+void testShuffle31() {
+  var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  var c;
+  c = m.shuffle(Float32x4.WYXX);
   Expect.equals(4.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.wyxy;
+  c = m.shuffle(Float32x4.WYXY);
   Expect.equals(4.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.wyxz;
+  c = m.shuffle(Float32x4.WYXZ);
   Expect.equals(4.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.wyxw;
+  c = m.shuffle(Float32x4.WYXW);
   Expect.equals(4.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.wyyx;
+  c = m.shuffle(Float32x4.WYYX);
   Expect.equals(4.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.wyyy;
+  c = m.shuffle(Float32x4.WYYY);
   Expect.equals(4.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.wyyz;
+  c = m.shuffle(Float32x4.WYYZ);
   Expect.equals(4.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.wyyw;
+  c = m.shuffle(Float32x4.WYYW);
   Expect.equals(4.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.wyzx;
+  c = m.shuffle(Float32x4.WYZX);
   Expect.equals(4.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.wyzy;
+  c = m.shuffle(Float32x4.WYZY);
   Expect.equals(4.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.wyzz;
+  c = m.shuffle(Float32x4.WYZZ);
   Expect.equals(4.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.wyzw;
+  c = m.shuffle(Float32x4.WYZW);
   Expect.equals(4.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.wywx;
+  c = m.shuffle(Float32x4.WYWX);
   Expect.equals(4.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.wywy;
+  c = m.shuffle(Float32x4.WYWY);
   Expect.equals(4.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.wywz;
+  c = m.shuffle(Float32x4.WYWZ);
   Expect.equals(4.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.wyww;
+  c = m.shuffle(Float32x4.WYWW);
   Expect.equals(4.0, c.x);
   Expect.equals(2.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.wzxx;
+}
+
+void testShuffle32() {
+  var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  var c;
+  c = m.shuffle(Float32x4.WZXX);
   Expect.equals(4.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.wzxy;
+  c = m.shuffle(Float32x4.WZXY);
   Expect.equals(4.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.wzxz;
+  c = m.shuffle(Float32x4.WZXZ);
   Expect.equals(4.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.wzxw;
+  c = m.shuffle(Float32x4.WZXW);
   Expect.equals(4.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.wzyx;
+  c = m.shuffle(Float32x4.WZYX);
   Expect.equals(4.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.wzyy;
+  c = m.shuffle(Float32x4.WZYY);
   Expect.equals(4.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.wzyz;
+  c = m.shuffle(Float32x4.WZYZ);
   Expect.equals(4.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.wzyw;
+  c = m.shuffle(Float32x4.WZYW);
   Expect.equals(4.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.wzzx;
+  c = m.shuffle(Float32x4.WZZX);
   Expect.equals(4.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.wzzy;
+  c = m.shuffle(Float32x4.WZZY);
   Expect.equals(4.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.wzzz;
+  c = m.shuffle(Float32x4.WZZZ);
   Expect.equals(4.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.wzzw;
+  c = m.shuffle(Float32x4.WZZW);
   Expect.equals(4.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.wzwx;
+  c = m.shuffle(Float32x4.WZWX);
   Expect.equals(4.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.wzwy;
+  c = m.shuffle(Float32x4.WZWY);
   Expect.equals(4.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.wzwz;
+  c = m.shuffle(Float32x4.WZWZ);
   Expect.equals(4.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.wzww;
+  c = m.shuffle(Float32x4.WZWW);
   Expect.equals(4.0, c.x);
   Expect.equals(3.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.wwxx;
+}
+
+void testShuffle33() {
+  var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  var c;
+  c = m.shuffle(Float32x4.WWXX);
   Expect.equals(4.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.wwxy;
+  c = m.shuffle(Float32x4.WWXY);
   Expect.equals(4.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.wwxz;
+  c = m.shuffle(Float32x4.WWXZ);
   Expect.equals(4.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.wwxw;
+  c = m.shuffle(Float32x4.WWXW);
   Expect.equals(4.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(1.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.wwyx;
+  c = m.shuffle(Float32x4.WWYX);
   Expect.equals(4.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.wwyy;
+  c = m.shuffle(Float32x4.WWYY);
   Expect.equals(4.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.wwyz;
+  c = m.shuffle(Float32x4.WWYZ);
   Expect.equals(4.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.wwyw;
+  c = m.shuffle(Float32x4.WWYW);
   Expect.equals(4.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(2.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.wwzx;
+  c = m.shuffle(Float32x4.WWZX);
   Expect.equals(4.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.wwzy;
+  c = m.shuffle(Float32x4.WWZY);
   Expect.equals(4.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.wwzz;
+  c = m.shuffle(Float32x4.WWZZ);
   Expect.equals(4.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.wwzw;
+  c = m.shuffle(Float32x4.WWZW);
   Expect.equals(4.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(3.0, c.z);
   Expect.equals(4.0, c.w);
-  c = m.wwwx;
+  c = m.shuffle(Float32x4.WWWX);
   Expect.equals(4.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(1.0, c.w);
-  c = m.wwwy;
+  c = m.shuffle(Float32x4.WWWY);
   Expect.equals(4.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(2.0, c.w);
-  c = m.wwwz;
+  c = m.shuffle(Float32x4.WWWZ);
   Expect.equals(4.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(4.0, c.z);
   Expect.equals(3.0, c.w);
-  c = m.wwww;
+  c = m.shuffle(Float32x4.WWWW);
   Expect.equals(4.0, c.x);
   Expect.equals(4.0, c.y);
   Expect.equals(4.0, c.z);
@@ -1310,11 +1370,68 @@
 }
 
 
+void testShuffleNonConstant(mask) {
+  var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  var c;
+  c = m.shuffle(mask);
+  if (mask == 1) {
+    Expect.equals(2.0, c.x);
+    Expect.equals(1.0, c.y);
+    Expect.equals(1.0, c.z);
+    Expect.equals(1.0, c.w);
+  } else {
+    Expect.equals(Float32x4.YYYY + 1, mask);
+    Expect.equals(3.0, c.x);
+    Expect.equals(2.0, c.y);
+    Expect.equals(2.0, c.z);
+    Expect.equals(2.0, c.w);
+  }
+}
+
+void testInvalidShuffle(mask) {
+  // Not a valid mask.
+  Expect.isFalse(mask <= 255 && mask >= 0);
+  var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  var c;
+  Expect.throws(() {
+    c = m.shuffle(mask);
+  });
+}
+
+void testShuffle() {
+  var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  var c;
+  c = m.shuffle(Float32x4.WZYX);
+  Expect.equals(4.0, c.x);
+  Expect.equals(3.0, c.y);
+  Expect.equals(2.0, c.z);
+  Expect.equals(1.0, c.w);
+}
+
 main() {
+  var xxxx = Float32x4.XXXX + 1;
+  var yyyy = Float32x4.YYYY + 1;
   for (int i = 0; i < 20; i++) {
-    testShuffle0();
-    testShuffle1();
-    testShuffle2();
-    testShuffle3();
+    testShuffle();
+    testShuffle00();
+    testShuffle01();
+    testShuffle02();
+    testShuffle03();
+    testShuffle10();
+    testShuffle11();
+    testShuffle12();
+    testShuffle13();
+    testShuffle20();
+    testShuffle21();
+    testShuffle22();
+    testShuffle23();
+    testShuffle30();
+    testShuffle31();
+    testShuffle32();
+    testShuffle33();
+    testShuffleNonConstant(xxxx);
+    testShuffleNonConstant(yyyy);
+    testInvalidShuffle(256);
+    testInvalidShuffle(-1);
   }
 }
diff --git a/tests/lib/typed_data/float32x4_test.dart b/tests/lib/typed_data/float32x4_test.dart
index cc24455..41401b8 100644
--- a/tests/lib/typed_data/float32x4_test.dart
+++ b/tests/lib/typed_data/float32x4_test.dart
@@ -130,42 +130,42 @@
 
 testShuffle() {
   var m = new Float32x4(1.0, 2.0, 3.0, 4.0);
-  var xxxx = m.xxxx;
+  var xxxx = m.shuffle(Float32x4.XXXX);
   Expect.equals(1.0, xxxx.x);
   Expect.equals(1.0, xxxx.y);
   Expect.equals(1.0, xxxx.z);
   Expect.equals(1.0, xxxx.w);
-  var yyyy = m.yyyy;
+  var yyyy = m.shuffle(Float32x4.YYYY);
   Expect.equals(2.0, yyyy.x);
   Expect.equals(2.0, yyyy.y);
   Expect.equals(2.0, yyyy.z);
   Expect.equals(2.0, yyyy.w);
-  var zzzz = m.zzzz;
+  var zzzz = m.shuffle(Float32x4.ZZZZ);
   Expect.equals(3.0, zzzz.x);
   Expect.equals(3.0, zzzz.y);
   Expect.equals(3.0, zzzz.z);
   Expect.equals(3.0, zzzz.w);
-  var wwww = m.wwww;
+  var wwww = m.shuffle(Float32x4.WWWW);
   Expect.equals(4.0, wwww.x);
   Expect.equals(4.0, wwww.y);
   Expect.equals(4.0, wwww.z);
   Expect.equals(4.0, wwww.w);
-  var wzyx = m.wzyx;
+  var wzyx = m.shuffle(Float32x4.WZYX);
   Expect.equals(4.0, wzyx.x);
   Expect.equals(3.0, wzyx.y);
   Expect.equals(2.0, wzyx.z);
   Expect.equals(1.0, wzyx.w);
-  var wwzz = m.wwzz;
+  var wwzz = m.shuffle(Float32x4.WWZZ);
   Expect.equals(4.0, wwzz.x);
   Expect.equals(4.0, wwzz.y);
   Expect.equals(3.0, wwzz.z);
   Expect.equals(3.0, wwzz.w);
-  var xxyy = m.xxyy;
+  var xxyy = m.shuffle(Float32x4.XXYY);
   Expect.equals(1.0, xxyy.x);
   Expect.equals(1.0, xxyy.y);
   Expect.equals(2.0, xxyy.z);
   Expect.equals(2.0, xxyy.w);
-  var yyww = m.yyww;
+  var yyww = m.shuffle(Float32x4.YYWW);
   Expect.equals(2.0, yyww.x);
   Expect.equals(2.0, yyww.y);
   Expect.equals(4.0, yyww.z);
diff --git a/tests/standalone/io/certificate_test.dart b/tests/standalone/io/certificate_test.dart
deleted file mode 100644
index b4c8796..0000000
--- a/tests/standalone/io/certificate_test.dart
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// This test verifies that a server certificate can be verified by a client
-// that loads the certificate authority certificate it depends on at runtime.
-
-import "package:path/path.dart";
-import "dart:io";
-import "dart:async";
-
-String scriptDir = dirname(new Options().script);
-
-void main() {
-  SecureSocket.initialize(database: join(scriptDir, 'pkcert'),
-                          password: 'dartdart');
-  runServer().then((SecureServerSocket server) {
-    return Process.run(new Options().executable,
-                       ['--checked',
-                        join(scriptDir, 'certificate_test_client.dart'),
-                        server.port.toString(),
-                        join(scriptDir, 'pkcert', 'myauthority.pem')]);
-  }).then((ProcessResult result) {
-    if (result.exitCode != 0 || !result.stdout.contains("SUCCESS")) {
-      print("Client failed with exit code ${result.exitCode}");
-      print("  stdout (expects \"SUCCESS\\n\"):");
-      print(result.stdout);
-      print("  stderr:");
-      print(result.stderr);
-      throw new AssertionError();
-    }
-  });
-}
-
-Future<SecureServerSocket> runServer() =>
-  SecureServerSocket.bind("localhost", 0, "localhost_cert")
-    .then((server) => server..listen(
-        (socket) => socket.pipe(socket).then((_) => server.close())));
diff --git a/tests/standalone/io/certificate_test_client.dart b/tests/standalone/io/certificate_test_client.dart
deleted file mode 100644
index 4e3262d..0000000
--- a/tests/standalone/io/certificate_test_client.dart
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-//
-// Client that tests that a certificate authority certificate loaded
-// at runtime can be used to verify a certificate chain. The server it
-// connects to uses localhost_cert, signed by myauthority_cert, to connect
-// securely.
-
-import 'dart:io';
-
-void main() {
-  int port = int.parse(new Options().arguments[0]);
-  String certificate = new Options().arguments[1];
-  SecureSocket.initialize();
-  var mycert = new File(certificate).readAsBytesSync();
-  bool threw = false;
-  try {
-    SecureSocket.addCertificate("I am not a cert".codeUnits,
-                                SecureSocket.TRUST_ISSUE_SERVER_CERTIFICATES);
-  } on CertificateException catch (e) {
-    threw = true;
-  }
-  if (!threw) throw "Expected bad certificate to throw";
-
-  threw = false;
-  try {
-    SecureSocket.addCertificate(mycert, "Trust me, I'm a string");
-  } on CertificateException catch (e) {
-    threw = true;
-  }
-  if (!threw) throw "Expected bad trust string to throw";
-
-  SecureSocket.addCertificate(mycert,
-                              SecureSocket.TRUST_ISSUE_SERVER_CERTIFICATES);
-
-  SecureSocket.connect('localhost', port).then((SecureSocket socket) {
-    socket.writeln('hello world');
-    socket.listen((data) { });
-    return socket.close();
-  }).then((_) {
-    SecureSocket.changeTrust('myauthority_cert', ',,');
-    return SecureSocket.connect('localhost', port);
-  }).then((_) {
-    throw "Expected untrusted authority to stop connection";
-  }, onError: (e) {
-    if (e is! CertificateException) throw e;
-  }).then((_) {
-    SecureSocket.changeTrust('myauthority_cert', 'C,,');
-    return SecureSocket.connect('localhost', port);
-  }).then((SecureSocket socket) {
-    socket.writeln('hello world');
-    socket.listen((data) { });
-    return socket.close();
-  }).then((_) {
-    SecureSocket.removeCertificate('myauthority_cert');
-    return SecureSocket.connect('localhost', port);
-  }).then((_) {
-    throw "Expected untrusted root to stop connection";
-  }, onError: (e) {
-    if (e is! CertificateException) throw e;
-  }).then((_) {
-    print('SUCCESS');  // Checked by parent process.
-  });
-}
diff --git a/tests/standalone/io/certificate_test_client_database.dart b/tests/standalone/io/certificate_test_client_database.dart
deleted file mode 100644
index 9723a6a..0000000
--- a/tests/standalone/io/certificate_test_client_database.dart
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-//
-// Client that tests that a certificate authority certificate loaded
-// at runtime can be used to verify a certificate chain. The server it
-// connects to uses localhost_cert, signed by myauthority_cert, to connect
-// securely.  This client tests that addCertificate works if a certificate
-// database has been specified.
-
-import 'dart:io';
-
-void main() {
-  int port = int.parse(new Options().arguments[0]);
-  String certificate = new Options().arguments[1];
-  String database = new Options().arguments[2];
-  SecureSocket.initialize(database: database,
-                          password: 'dartdart',
-                          readOnly: false);
-  SecureSocket.removeCertificate('localhost_cert');
-  SecureSocket.removeCertificate('myauthority_cert');
-  var mycert = new File(certificate).readAsBytesSync();
-  SecureSocket.addCertificate(mycert,
-                              SecureSocket.TRUST_ISSUE_SERVER_CERTIFICATES);
-  if (null != SecureSocket.getCertificate('myauthority_cert')) {
-    throw "Expected getCertificate to return null";
-  }
-  SecureSocket.connect('localhost', port).then((SecureSocket socket) {
-    socket.writeln('hello world');
-    socket.listen((data) { });
-    return socket.close();
-  }).then((_) {
-    // The certificate is only in the in-memory cache, so cannot be removed.
-    try {
-      SecureSocket.removeCertificate('myauthority_cert');
-    } catch (e) {
-      if (e is! CertificateException) throw "error $e";
-    }
-  }).then((_) {
-    print('SUCCESS');  // Checked by parent process.
-  });
-}
diff --git a/tests/standalone/io/delete_a_directory_later.dart b/tests/standalone/io/delete_a_directory_later.dart
deleted file mode 100644
index 5e6da0d..0000000
--- a/tests/standalone/io/delete_a_directory_later.dart
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "dart:io";
-import "dart:async";
-
-main() {
-  new Timer(new Duration(seconds: 2), () {
-    new Directory(new Options().arguments[0]).delete(recursive: true);
-  });
-}
diff --git a/tests/standalone/io/pkcert/myauthority.pem b/tests/standalone/io/pkcert/myauthority.pem
deleted file mode 100644
index 3aebea4..0000000
--- a/tests/standalone/io/pkcert/myauthority.pem
+++ /dev/null
@@ -1,11 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBpDCCAQ2gAwIBAgIFAJq4IS0wDQYJKoZIhvcNAQEFBQAwFjEUMBIGA1UEAxML
-bXlhdXRob3JpdHkwHhcNMTMwMjE1MTA0MzA5WhcNMTgwMjE1MTA0MzA5WjAWMRQw
-EgYDVQQDEwtteWF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-tnrkyrXF1SEUeOdIiULWs0dOEUlX6t73UDVbbTorF6R66fkjkEK3vW9ekZFUWq5+
-HVku4LUViJR140+F+CzUYtN73Ur28GqLa6LY4XtzHfPSfgecgayI1mEU+0f/2l8B
-4RiE9V8mW9RqPM6Lb69QrwXSYdzStl6ltuLJhgPGqAMCAwEAATANBgkqhkiG9w0B
-AQUFAAOBgQBdBUQTUR5oIRdqBGR87qW7caLAuPoVmzikOrSBNoyamVF0lwFFxgNw
-sj5VWdMn0SJhXd3EUMVlHr+4B/c3jUy1PlvBQGURn2cp5c4tj3FMOqkemuA0ywOF
-gbt2lqi7/RW4bHITqfPi7CDzE36n25vXc64Ylk7vEi3hUfjYfIqNcA==
------END CERTIFICATE-----
diff --git a/tests/standalone/io/user_certificate_test.dart b/tests/standalone/io/user_certificate_test.dart
deleted file mode 100644
index c44ca96..0000000
--- a/tests/standalone/io/user_certificate_test.dart
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// This test verifies the SecureSocket functions addCertificate,
-// importCertificatesWithPrivateKeys, changeTrust, getCertificate, and
-// removeCertificate.
-
-// It loads a copy of the test certificate database,
-// removes all certificates and keys, then imports the certificates and keys
-// again.  Then it runs a secure server, using the user certificate (a
-// certificate with private key), and starts client processes that use
-// addCertificate to trust the certificate that signed the server's certificate.
-// The clients then test that they can successfully connect to the server.
-
-import "package:expect/expect.dart";
-import "package:path/path.dart";
-import "dart:io";
-import "dart:async";
-
-void main() {
-  Directory tempDirectory = new Directory('').createTempSync();
-  String scriptDirectory = dirname(Platform.script);
-  String database = join(scriptDirectory, 'pkcert');
-  String serverDatabase = join(tempDirectory.path, 'server');
-  String clientDatabase = join(tempDirectory.path, 'client');
-  new Directory(serverDatabase).createSync();
-  new Directory(clientDatabase).createSync();
-
-  cleanUp() {
-    if (Platform.isWindows) {
-      // Delay directory deletion until after this script exits.
-      // The certificate database files are locked until then.
-      Process.start('start',  // Starts a detatched process.
-                    [Platform.executable,
-                     join(scriptDirectory, 'delete_a_directory_later.dart'),
-                     tempDirectory.path],
-                     runInShell: true);
-    } else {
-      tempDirectory.delete(recursive: true);
-    }
-  }
-
-  Future.wait([
-      copyFileToDirectory(join(database, 'cert9.db'), serverDatabase),
-      copyFileToDirectory(join(database, 'key4.db'), serverDatabase),
-      copyFileToDirectory(join(database, 'cert9.db'), clientDatabase),
-      copyFileToDirectory(join(database, 'key4.db'), clientDatabase),
-  ]).then((_) {
-    SecureSocket.initialize(database: serverDatabase,
-                            password: 'dartdart',
-                            readOnly: false);
-    for (var nickname in ['localhost_cert', 'myauthority_cert']) {
-      Expect.isNotNull(SecureSocket.getCertificate(nickname));
-      SecureSocket.removeCertificate(nickname);
-      Expect.isNull(SecureSocket.getCertificate(nickname));
-    }
-
-    var mycerts = new File(join(database, 'localhost.p12')).readAsBytesSync();
-    SecureSocket.importCertificatesWithPrivateKeys(mycerts, 'dartdart');
-
-    checkCertificate('localhost_cert', 'CN=localhost', 'CN=myauthority');
-    checkCertificate('myauthority_cert', 'CN=myauthority', 'CN=myauthority');
-
-    SecureSocket.removeCertificate('myauthority_cert');
-    return runServer().then((server) {
-      var tests = ['certificate_test_client.dart',
-                   'certificate_test_client_database.dart'];
-      return Future.wait(tests.map((test) =>
-          Process.run(Platform.executable,
-                      ['--checked',
-                       join(scriptDirectory, test),
-                       server.port.toString(),
-                       join(database, 'myauthority.pem'),
-                       clientDatabase])))
-      .then(verifyResults)
-      .whenComplete(server.close);
-    });
-  })
-  .whenComplete(cleanUp);
-}
-
-checkCertificate(nickname, subject, issuer) {
-  var cert = SecureSocket.getCertificate(nickname);
-  Expect.isTrue(cert is X509Certificate);
-  Expect.equals(subject, cert.subject);
-  Expect.equals(issuer, cert.issuer);
-}
-
-Future<SecureServerSocket> runServer() =>
-  SecureServerSocket.bind("localhost", 0, "localhost_cert")
-    .then((server) => server..listen((socket) => socket.pipe(socket)));
-
-verifyResults(results) => results.map(verifyResult);
-verifyResult(ProcessResult result) {
-  if (result.exitCode != 0 ||  !result.stdout.contains('SUCCESS')) {
-    print("Client failed with exit code ${result.exitCode}");
-    print("  stdout (expected \"SUCCESS\\n\"):");
-    print(result.stdout);
-    print("  stderr:");
-    print(result.stderr);
-    Expect.fail("Client failed");
-  }
-}
-
-Future copyFileToDirectory(String file, String directory) {
-  switch (Platform.operatingSystem) {
-    case 'linux':
-    case 'macos':
-      return Process.run('cp', [file, directory]);
-    case 'windows':
-      return Process.run('cmd.exe', ['/C', 'copy $file $directory']);
-    default:
-      Expect.fail('Unknown operating system ${Platform.operatingSystem}');
-  }
-}
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 25e362a4..e15eaf5 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -7,6 +7,10 @@
 # listed in tests/lib/analyzer/analyze_tests.status without the "standalone"
 # prefix.
 
+# The testing infrastructure is using the dart:io Path class.
+io/skipping_dart2js_compilations_test: Skip # http/dartbug.com/12449
+io/dependency_graph_test: Skip # http/dartbug.com/12449
+
 package/invalid_uri_test: Fail, OK # Fails intentionally
 
 [ $runtime == vm ]
@@ -147,7 +151,7 @@
 *: Skip
 
 [ $arch == arm ]
-*: Skip # Shared libraries problem.
+io/internet_address_test: Fail  # localhost is an Unknown name?
 
 [ $arch == simarm ]
 out_of_memory_test: Skip # passes on Mac, crashes on Linux
diff --git a/tests/utils/dummy_compiler_test.dart b/tests/utils/dummy_compiler_test.dart
index f341977..f95a289 100644
--- a/tests/utils/dummy_compiler_test.dart
+++ b/tests/utils/dummy_compiler_test.dart
@@ -76,7 +76,8 @@
 class JSBool {}
 getInterceptor(o){}
 getDispatchProperty(o) {}
-setDispatchProperty(o, v) {}""";
+setDispatchProperty(o, v) {}
+var mapTypeToInterceptor;""";
     } else if (uri.path.endsWith('js_helper.dart')) {
       source = 'library jshelper; class JSInvocationMirror {} '
                'class ConstantMap {} class TypeImpl {} '
diff --git a/tests/utils/recursive_import_test.dart b/tests/utils/recursive_import_test.dart
index f827089..db0eff3 100644
--- a/tests/utils/recursive_import_test.dart
+++ b/tests/utils/recursive_import_test.dart
@@ -47,7 +47,7 @@
   add(x) { }
 }
 class JSMutableArray extends JSArray {}
-class JSExtendableArray extends JSMutableArray{}
+class JSExtendableArray extends JSMutableArray {}
 class JSFixedArray extends JSMutableArray {}
 class JSString {
   split(x) => null;
diff --git a/tests/utils/utils.status b/tests/utils/utils.status
index 7bc1414..6fdf0e2 100644
--- a/tests/utils/utils.status
+++ b/tests/utils/utils.status
@@ -11,6 +11,9 @@
 dart2js_test: Skip # Uses dart:io.
 txt_layout_test: Skip # Might just go away.
 
+[ $compiler == none && $runtime == drt && $mode == debug ]
+recursive_import_test: Fail # 12501
+
 [ $compiler == dart2js && $browser ]
 *: Skip
 
diff --git a/tools/VERSION b/tools/VERSION
index 5265791..01d318f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,4 @@
 MAJOR 0
 MINOR 6
-BUILD 18
+BUILD 19
 PATCH 0
diff --git a/tools/coverage.dart b/tools/coverage.dart
index 3f51f00..20811d1 100644
--- a/tools/coverage.dart
+++ b/tools/coverage.dart
@@ -104,7 +104,7 @@
       }
     });
 
-    String srcPath = new Path(Uri.parse(url).path).toNativePath();
+    String srcPath = Uri.parse(url).toFilePath();
     List lines = new File(srcPath).readAsLinesSync();
     for (int line = 1; line <= lines.length; line++) {
       String prefix = "      ";
diff --git a/tools/dom/dom.py b/tools/dom/dom.py
index 4e3240a..c362f55 100755
--- a/tools/dom/dom.py
+++ b/tools/dom/dom.py
@@ -96,18 +96,6 @@
   os.chdir(os.path.join('..', '..', '..'))
   return result
 
-def http_server():
-  print('Browse tests at '
-      '\033[94mhttp://localhost:5400/root_build/generated_tests/\033[0m')
-  return call([
-    utils.DartBinary(),
-    os.path.join('tools', 'testing', 'dart', 'http_server.dart'),
-    '--port=5400',
-    '--crossOriginPort=5401',
-    '--network=0.0.0.0',
-    '--build-directory=%s' % os.path.join('out', 'ReleaseIA32')
-  ])
-
 def size_check():
   ''' Displays the dart2js size of swarm. '''
   dart_file = os.path.join('samples', 'swarm', 'swarm.dart')
@@ -151,6 +139,25 @@
     cmd.append('html')
   return call(cmd)
 
+def test_server():
+  start_test_server(5400, os.path.join('out', 'ReleaseIA32'))
+
+def test_server_dartium():
+  start_test_server(5500, os.path.join('..', 'out', 'Release'))
+
+def start_test_server(port, build_directory):
+  print('Browse tests at '
+      '\033[94mhttp://localhost:%d/root_build/generated_tests/\033[0m' % port)
+  return call([
+    utils.DartBinary(),
+    os.path.join('tools', 'testing', 'dart', 'http_server.dart'),
+    '--port=%d' % port,
+    '--crossOriginPort=%d' % (port + 1),
+    '--network=0.0.0.0',
+    '--build-directory=%s' % build_directory
+  ])
+
+
 def call(args):
   print ' '.join(args)
   pipe = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
@@ -176,8 +183,10 @@
       '\t\tOptionally provide name of test to run.'],
   'test_ff': [test_ff, 'Run tests in checked mode in Firefox.\n'
       '\t\tOptionally provide name of test to run.'],
-  'http_server': [http_server, 'Starts the testing server for manually '
+  'test_server': [test_server, 'Starts the testing server for manually '
       'running browser tests.'],
+  'test_server_dartium': [test_server_dartium, 'Starts the testing server for '
+      'manually running browser tests from a dartium enlistment.'],
 }
 
 def main():
diff --git a/tools/dom/scripts/chromegenerator.py b/tools/dom/scripts/chromegenerator.py
index 2093d15..73d504c 100755
--- a/tools/dom/scripts/chromegenerator.py
+++ b/tools/dom/scripts/chromegenerator.py
@@ -36,13 +36,13 @@
 // DO NOT EDIT
 // Auto-generated dart:chrome library.
 
-/// Native wrappers for the Chrome Packaged App APIs.
+/// Native wrappers for the Chrome packaged app APIs.
 ///
-/// These functions allow direct access to the Packaged App APIs, allowing
-/// Chrome Packaged Apps to be written using Dart.
+/// These functions allow direct access to the chrome.* APIs, allowing
+/// Chrome packaged apps to be written using Dart.
 ///
-/// For more information on these APIs, see the Chrome.* APIs Documentation:
-///   http://developer.chrome.com/extensions/api_index.html
+/// For more information on these APIs, see the
+/// [chrome.* API documentation](http://developer.chrome.com/apps/api_index.html).
 library chrome;
 
 import 'dart:_foreign_helper' show JS;
diff --git a/tools/dom/scripts/generator.py b/tools/dom/scripts/generator.py
index d264a5c..396b7b3 100644
--- a/tools/dom/scripts/generator.py
+++ b/tools/dom/scripts/generator.py
@@ -736,8 +736,6 @@
 
   def implementation_name(self):
     implementation_name = self._dart_interface_name
-    if self.merged_into():
-      return '_%s' % self.idl_type()
 
     if not self.has_generated_interface():
       implementation_name = '_%s' % implementation_name
diff --git a/tools/dom/scripts/htmlrenamer.py b/tools/dom/scripts/htmlrenamer.py
index 23882c6..c58b21b 100644
--- a/tools/dom/scripts/htmlrenamer.py
+++ b/tools/dom/scripts/htmlrenamer.py
@@ -39,6 +39,8 @@
     'FileSystemCallback': '_FileSystemCallback',
     'FileWriterCallback': '_FileWriterCallback',
     'HTMLDocument' : 'HtmlDocument',
+    'HTMLElement' : 'HtmlElement',
+    'HTMLHtmlElement' : 'HtmlHtmlElement',
     'IDBFactory': 'IdbFactory', # Manual to avoid name conflicts.
     'Key': 'CryptoKey',
     'NamedNodeMap': '_NamedNodeMap',
diff --git a/tools/dom/src/chrome/chrome.dart b/tools/dom/src/chrome/chrome.dart
index 221ee5e..2c02ae9 100644
--- a/tools/dom/src/chrome/chrome.dart
+++ b/tools/dom/src/chrome/chrome.dart
@@ -44,6 +44,7 @@
    * Members
    */
   API_ChromeApp app;
+  API_file_system fileSystem;
 
   /*
    * Constructor
@@ -57,6 +58,11 @@
     if (app_object == null)
       throw new UnsupportedError('Not supported by current browser.');
     app = new API_ChromeApp(app_object);
+
+    var file_system_object = JS('', '#.fileSystem', this._jsObject);
+    if (file_system_object == null)
+      throw new UnsupportedError('Not supported by current browser.');
+    fileSystem = new API_file_system(file_system_object);
   }
 }
 
diff --git a/tools/dom/src/dart2js_CustomElementSupport.dart b/tools/dom/src/dart2js_CustomElementSupport.dart
new file mode 100644
index 0000000..a40e81c
--- /dev/null
+++ b/tools/dom/src/dart2js_CustomElementSupport.dart
@@ -0,0 +1,68 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of dart.dom.html;
+
+_callOnCreated(receiver) {
+  return receiver.onCreated();
+}
+
+_makeCreatedCallbackMethod() {
+  return JS('',
+      '''((function(invokeCallback) {
+             return function() {
+               return invokeCallback(this);
+             };
+          })(#))''',
+      convertDartClosureToJS(_callOnCreated, 1));
+}
+
+void _registerCustomElement(context, document, String tag, Type type) {
+  // Function follows the same pattern as the following JavaScript code for
+  // registering a custom element.
+  //
+  //    var proto = Object.create(HTMLElement.prototype, {
+  //        createdCallback: {
+  //          value: function() {
+  //            window.console.log('here');
+  //          }
+  //        }
+  //    });
+  //    document.register('x-foo', { prototype: proto });
+  //    ...
+  //    var e = document.createElement('x-foo');
+
+  var interceptorClass = findInterceptorConstructorForType(type);
+  if (interceptorClass == null) {
+    throw new ArgumentError(type);
+  }
+
+  String baseClassName = findDispatchTagForInterceptorClass(interceptorClass);
+  if (baseClassName == null) {
+    throw new ArgumentError(type);
+  }
+  if (baseClassName == 'Element') baseClassName = 'HTMLElement';
+
+  var baseConstructor = JS('=Object', '#[#]', context, baseClassName);
+  if (JS('bool', "typeof(#) != 'function'", baseConstructor)) {
+    throw new ArgumentError(type);
+  }
+
+  var properties = JS('=Object', '{}');
+
+  var jsCreatedCallback = _makeCreatedCallbackMethod();
+
+  JS('void', '#.createdCallback = #', properties,
+      JS('=Object', '{value: #}', jsCreatedCallback));
+
+  var baseProto = JS('=Object', '#.prototype', baseConstructor);
+  var proto = JS('=Object', 'Object.create(#, #)', baseProto, properties);
+
+  var interceptor = JS('=Object', '#.prototype', interceptorClass);
+
+  setNativeSubclassDispatchRecord(proto, interceptor);
+
+  JS('void', '#.register(#, #)',
+      document, tag, JS('', '{prototype: #}', proto));
+}
diff --git a/tools/dom/src/native_DOMImplementation.dart b/tools/dom/src/native_DOMImplementation.dart
index 8cdf24d..a7c0e97 100644
--- a/tools/dom/src/native_DOMImplementation.dart
+++ b/tools/dom/src/native_DOMImplementation.dart
@@ -211,7 +211,8 @@
     Symbol objectName = reflectClass(Object).qualifiedName;
     bool isRoot(ClassMirror cls) =>
       cls == null || cls.qualifiedName == objectName;
-    Symbol elementName = reflectClass(Element).qualifiedName;
+    // TODO(vsm): Support extending SvgElement as well.
+    Symbol elementName = reflectClass(HtmlElement).qualifiedName;
     bool isElement(ClassMirror cls) =>
       cls != null && cls.qualifiedName == elementName;
 
@@ -220,7 +221,7 @@
     }
 
     if (isRoot(superClass)) {
-      throw new UnsupportedError("Invalid custom element doesn't inherit from Element.");
+      throw new UnsupportedError("Invalid custom element doesn't inherit from HtmlElement.");
     }
     _register(tag, type);
   }
@@ -353,7 +354,7 @@
 
 final _forwardingPrintClosure = _Utils.forwardingPrint;
 
- class _Timer implements Timer{
+ class _Timer implements Timer {
   var _canceler;
 
   _Timer(int milliSeconds, void callback(Timer timer), bool repeating) {
diff --git a/tools/dom/templates/html/dart2js/chrome_dart2js.darttemplate b/tools/dom/templates/html/dart2js/chrome_dart2js.darttemplate
index 3798c9c..2ea934d 100644
--- a/tools/dom/templates/html/dart2js/chrome_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/chrome_dart2js.darttemplate
@@ -6,13 +6,13 @@
 // DO NOT EDIT
 // Auto-generated dart:chrome library.
 
-/// Native wrappers for the Chrome Packaged App APIs.
+/// Native wrappers for the Chrome packaged app APIs.
 ///
-/// These functions allow direct access to the Packaged App APIs, allowing
-/// Chrome Packaged Apps to be written using Dart.
+/// These functions allow direct access to the chrome.* APIs, allowing
+/// Chrome packaged apps to be written using Dart.
 ///
-/// For more information on these APIs, see the Chrome.* APIs Documentation:
-///   http://developer.chrome.com/extensions/api_index.html
+/// For more information on these APIs, see the
+/// [chrome.* API documentation](http://developer.chrome.com/apps/api_index.html).
 library chrome;
 
 import 'dart:_foreign_helper' show JS;
diff --git a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
index bfe368c..62fcb28 100644
--- a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
@@ -27,8 +27,12 @@
 import 'dart:web_audio' as web_audio;
 import 'dart:web_gl' as gl;
 import 'dart:web_sql';
-import 'dart:_js_helper' show convertDartClosureToJS, Creates, JavaScriptIndexingBehavior, JSName, Null, Returns;
-import 'dart:_interceptors' show Interceptor, JSExtendableArray;
+import 'dart:_js_helper' show
+    convertDartClosureToJS, Creates, JavaScriptIndexingBehavior,
+    JSName, Null, Returns,
+    findDispatchTagForInterceptorClass, setNativeSubclassDispatchRecord;
+import 'dart:_interceptors' show
+    Interceptor, JSExtendableArray, findInterceptorConstructorForType;
 import 'dart:_isolate_helper' show IsolateNatives;
 import 'dart:_foreign_helper' show JS;
 
@@ -57,6 +61,7 @@
 part '$AUXILIARY_DIR/WrappedEvent.dart';
 part '$AUXILIARY_DIR/WrappedList.dart';
 part '$AUXILIARY_DIR/dart2js_Conversions.dart';
+part '$AUXILIARY_DIR/dart2js_CustomElementSupport.dart';
 part '$AUXILIARY_DIR/dart2js_DOMImplementation.dart';
 part '$AUXILIARY_DIR/dart2js_KeyEvent.dart';
 part '$AUXILIARY_DIR/dart2js_LocationWrapper.dart';
@@ -89,8 +94,8 @@
 
 // Workaround for tags like <cite> that lack their own Element subclass --
 // Dart issue 1990.
-class _HTMLElement extends Element native "HTMLElement" {
-  factory _HTMLElement() { throw new UnsupportedError("Not supported"); }
+class HtmlElement extends Element native "HTMLElement" {
+  factory HtmlElement() { throw new UnsupportedError("Not supported"); }
 }
 
 // Support for Send/ReceivePortSync.
diff --git a/tools/dom/templates/html/dart2js/web_audio_dart2js.darttemplate b/tools/dom/templates/html/dart2js/web_audio_dart2js.darttemplate
index af28eef..7cb895e 100644
--- a/tools/dom/templates/html/dart2js/web_audio_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/web_audio_dart2js.darttemplate
@@ -2,6 +2,9 @@
 // https://code.google.com/p/dart/wiki/ContributingHTMLDocumentation
 // Auto-generated dart:audio library.
 
+/**
+ * High-fidelity audio programming in the browser.
+ */
 library dart.dom.web_audio;
 
 import 'dart:async';
diff --git a/tools/dom/templates/html/dart2js/web_gl_dart2js.darttemplate b/tools/dom/templates/html/dart2js/web_gl_dart2js.darttemplate
index 6383511..147f61c 100644
--- a/tools/dom/templates/html/dart2js/web_gl_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/web_gl_dart2js.darttemplate
@@ -2,6 +2,9 @@
 // https://code.google.com/p/dart/wiki/ContributingHTMLDocumentation
 // Auto-generated dart:web_gl library.
 
+/**
+ * 3D programming in the browser.
+ */
 library dart.dom.web_gl;
 
 import 'dart:collection';
diff --git a/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate b/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
index 227131a..8f1a4ca 100644
--- a/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
@@ -168,8 +168,8 @@
 
   @Experimental
 $if DART2JS
-  void register(String tag, Type custom) {
-    throw new UnsupportedError("Custom DOM types not supported");
+  void register(String tag, Type customElementClass) {
+    _registerCustomElement(JS('', 'window'), this, tag, customElementClass);
   }
 $else
   void register(String tag, Type custom) {
diff --git a/utils/compiler/create_snapshot.dart b/utils/compiler/create_snapshot.dart
index 5e429bd..37920a3 100644
--- a/utils/compiler/create_snapshot.dart
+++ b/utils/compiler/create_snapshot.dart
@@ -6,9 +6,9 @@
 
 Future<String> getVersion(var options, var rootPath) {
   var suffix = Platform.operatingSystem == 'windows' ? '.exe' : '';
-  var printVersionScript =
-      rootPath.append("tools").append("print_version.py").toNativePath();
-  return Process.run("python$suffix", [printVersionScript]).then((result) {
+  var printVersionScript = rootPath.resolve("tools/print_version.py");
+  return Process.run("python$suffix",
+                     [printVersionScript.toFilePath()]).then((result) {
     if (result.exitCode != 0) {
       throw "Could not generate version";
     }
@@ -17,14 +17,13 @@
 }
 
 Future<String> getSnapshotGenerationFile(var options, var args, var rootPath) {
-  var dart2js = rootPath.append(args["dart2js_main"]);
-  var dartdoc = rootPath.append(args["dartdoc_main"]);
-
+  var dart2js = rootPath.resolve(args["dart2js_main"]);
+  var dartdoc = rootPath.resolve(args["dartdoc_main"]);
   return getVersion(options, rootPath).then((version) {
     var snapshotGenerationText =
 """
-import '${dart2js}' as dart2jsMain;
-import '${dartdoc}' as dartdocMain;
+import '${dart2js.toFilePath(windows: false)}' as dart2jsMain;
+import '${dartdoc.toFilePath(windows: false)}' as dartdocMain;
 import 'dart:io';
 
 void main() {
@@ -86,9 +85,9 @@
   if (!args.containsKey("output_dir")) throw "Please specify output_dir";
   if (!args.containsKey("package_root")) throw "Please specify package_root";
 
-  var scriptFile = new File(new File(options.script).fullPathSync());
-  var path = new Path(scriptFile.directory.path);
-  var rootPath = path.directoryPath.directoryPath;
+  var scriptFile = new Uri.file(new File(options.script).fullPathSync());
+  var path = scriptFile.resolve(".");
+  var rootPath = path.resolve("../..");
   getSnapshotGenerationFile(options, args, rootPath).then((result) {
     var wrapper = "${args['output_dir']}/utils_wrapper.dart";
     writeSnapshotFile(wrapper, result);
diff --git a/utils/testrunner/standard_test_runner.dart b/utils/testrunner/standard_test_runner.dart
index 89fcc2f..7429259 100644
--- a/utils/testrunner/standard_test_runner.dart
+++ b/utils/testrunner/standard_test_runner.dart
@@ -41,7 +41,7 @@
 /**
  * A special marker string used to separate group names and
  * identify non-debug output.
- */ 
+ */
 final marker = '###';
 
 class Macros {
@@ -53,7 +53,7 @@
   static const String testStacktrace = '<STACK>';
 }
 
-class TestRunnerConfiguration extends Configuration {
+class TestRunnerConfiguration extends SimpleConfiguration {
   get name => 'Minimal test runner configuration';
   get autoStart => false;
 
@@ -191,7 +191,7 @@
 
 // Support for running in isolates.
 
-class TestRunnerChildConfiguration extends Configuration {
+class TestRunnerChildConfiguration extends SimpleConfiguration {
   get name => 'Test runner child configuration';
   get autoStart => false;
 
