Version 1.12.0-dev.4.0

Merge commit '0bf80c919bfa22c9535eac5e6175ae01476720c5' into dev
diff --git a/.gitignore b/.gitignore
index effef47..8672f82 100644
--- a/.gitignore
+++ b/.gitignore
@@ -56,6 +56,7 @@
 # Pub generated "packages" directories and files
 packages
 pubspec.lock
+.packages
 
 # Local pub storage
 .pub
diff --git a/AUTHORS b/AUTHORS
index 567d6fa..27c9033 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -32,3 +32,4 @@
 Anders Holmgren <andersmholmgren@gmail.com>
 K. Alex Gann <k.alexgann@gmail.com>
 Kenneth Endfinger <kaendfinger@gmail.com>
+Cristian Almstrand <cristian.almstrand@gmail.com>
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bb3f571..8383615 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,19 @@
 
 ### Core library changes
 
+* `dart:async`
+  * `StreamController`  added setters for the `onListen`, `onPause`, `onResume`
+    and `onCancel` callbacks.
+
+* `dart:convert`
+  * `LineSplitter` added a `split` static method returning an `Iterable`.
+
+* `dart:core`
+  * `Uri` class now perform path normalization when a URI is created.
+    This removes most `..` and `.` sequences from the URI path.
+    Purely relative paths (no scheme or authority) are allowed to retain
+    some leading "dot" segments.
+
 * `dart:html`
   * `NodeTreeSanitizer` added the `const trusted` field. It can be used
     instead of defining a `NullTreeSanitizer` class when calling
@@ -19,27 +32,57 @@
 
 * Pub
 
-  * Pub will now generate a ".packages" file in addition to the "packages"
-    directory when running `pub get` or similar operations, per the
-    [package spec proposal][]. Pub now has a `--no-package-symlinks` flag that
-    will stop "packages" directories from being generated at all.
+  * `pub run` and `pub global run`
 
-  * When `pub publish` finds a violation, it will emit a non-zero exit code.
+    * Faster start time for executables that don't import transformed code.
 
-  * `pub run` starts up faster for executables that don't import transformed
-    code.
+    * Binstubs for globally-activated executables are now written in the system
+      encoding, rather than always in `UTF-8`. To update existing executables,
+      run `pub cache repair`.
 
-  * An issue where HTTP requests were sometimes made even though `--offline` was
-    passed to `pub get` or `pub upgrade` has been fixed.
+  * `pub get` and `pub upgrade`
 
-  * A bug with `--offline` that caused an unhelpful error message has been
-    fixed.
+    * Pub will now generate a ".packages" file in addition to the "packages"
+      directory when running `pub get` or similar operations, per the
+      [package spec proposal][]. Pub now has a `--no-package-symlinks` flag that
+      will stop "packages" directories from being generated at all.
 
-  * A crashing bug involving transformers that only apply to non-public code has
-    been fixed.
+    * An issue where HTTP requests were sometimes made even though `--offline`
+      was passed has been fixed.
+
+    * A bug with `--offline` that caused an unhelpful error message has been
+      fixed.
+
+    * Pub will no longer time out when a package takes a long time to download.
+
+  * `pub publish`
+
+    * Pub will emit a non-zero exit code when it finds a violation while
+      publishing.
+
+    * `.gitignore` files will be respected even if the package isn't at the top
+      level of the Git repository.
+
+  * Barback integration
+
+    * A crashing bug involving transformers that only apply to non-public code
+      has been fixed.
+
+    * A stack overflow caused by a transformer being run multiple times on the
+      package that defines it has been fixed.
+
+    * A transformer that tries to read a non-existent asset in another package
+      will now be re-run if that asset is later created.
 
 [package spec proposal]: https://github.com/lrhn/dep-pkgspec
 
+## 1.11.2
+
+### Core library changes
+
+* Fix a bug where `WebSocket.close()` would crash if called after
+  `WebSocket.cancel()`.
+
 ## 1.11.1
 
 ### Tool changes
@@ -54,6 +97,8 @@
 * `dart:core`
   * `Iterable` added an `empty` constructor.
     [dcf0286](https://github.com/dart-lang/sdk/commit/dcf0286f5385187a68ce9e66318d3bf19abf454b)
+  * `Iterable` can now be extended directly. An alternative to extending
+    `IterableBase` from `dart:collection`.
   * `List` added an `unmodifiable` constructor.
     [r45334](https://code.google.com/p/dart/source/detail?r=45334)
   * `Map` added an `unmodifiable` constructor.
diff --git a/DEPS b/DEPS
index ee3e737..50369e4 100644
--- a/DEPS
+++ b/DEPS
@@ -38,10 +38,10 @@
 
   # Revisions of /third_party/* dependencies.
   "7zip_rev" : "@19997",
-  "analyzer_cli_rev" : "@5069b75f6ccef59b2ba4e2c382bc000037290125",
+  "analyzer_cli_rev" : "@7436b45b160f99e806bef2aafd1e971e1aedfc4d",
   "args_tag": "@0.13.0",
   "async_tag": "@1.2.0",
-  "barback_rev" : "@29ee90dbcf77cfd64632fa2797a4c8a4f29a4b51",
+  "barback_tag" : "@0.15.2+5",
   "charcode_tag": "@1.1.0",
   "chrome_rev" : "@19997",
   "clang_rev" : "@28450",
@@ -49,7 +49,7 @@
   "collection_rev": "@1da9a07f32efa2ba0c391b289e2037391e31da0e",
   "crypto_rev" : "@2df57a1e26dd88e8d0614207d4b062c73209917d",
   "csslib_tag" : "@0.12.0",
-  "dartdoc_tag" : "@v0.0.3",
+  "dartdoc_tag" : "@v0.1.0+5",
   "dart_services_rev" : "@7aea2574e6f3924bf409a80afb8ad52aa2be4f97",
   "dart_style_tag": "@0.1.8+1",
   "dev_compiler_rev": "@0.1.1",
@@ -77,15 +77,15 @@
   "nss_rev": "@87b96db4268293187d7cf741907a6d5d1d8080e0",
   "oauth2_rev": "@1bff41f4d54505c36f2d1a001b83b8b745c452f5",
   "observe_rev": "@eee2b8ec34236fa46982575fbccff84f61202ac6",
-  "observatory_pub_packages_rev": "@45565",
+  "observatory_pub_packages_rev": "@cdc4b3d4c15b9c0c8e7702dff127b440afbb7485",
   "package_config_tag": "@0.1.1",
   "path_tag": "@1.3.6",
   "petitparser_rev" : "@37878",
   "ply_rev": "@604b32590ffad5cbb82e4afef1d305512d06ae93",
   "plugin_tag": "@0.1.0",
   "pool_rev": "@e454b4b54d2987e8d2f0fbd3ac519641ada9bd0f",
-  "pub_rev": "@072c5d85f4741bd4eede3eb8d309669b887e3c54",
-  "pub_cache_tag": "@v0.0.1+2",
+  "pub_rev": "@bc776a2e1364b5004d8e2601b2bafb8f93c6a396",
+  "pub_cache_tag": "@v0.1.0",
   "pub_semver_tag": "@1.2.1",
   "quiver_tag": "@0.21.4",
   "scheduled_test_tag": "@0.12.1+2",
@@ -170,9 +170,6 @@
       Var("third_party") + "/petitparser" + Var("petitparser_rev"),
   Var("dart_root") + "/third_party/WebCore":
       Var("third_party") + "/WebCore" + Var("WebCore_rev"),
-  Var("dart_root") + "/third_party/observatory_pub_packages":
-      Var("third_party") + "/observatory_pub_packages" +
-      Var("observatory_pub_packages_rev"),
 
   Var("dart_root") + "/third_party/dart-services":
       (Var("github_mirror") % "dart-services") +
@@ -183,9 +180,9 @@
   Var("dart_root") + "/third_party/pkg/args":
       (Var("github_mirror") % "args") + Var("args_tag"),
   Var("dart_root") + "/third_party/pkg/async":
-      "https://github.com/dart-lang/async.git" + Var("async_tag"),
+      (Var("github_mirror") % "async") + Var("async_tag"),
   Var("dart_root") + "/third_party/pkg/barback":
-      (Var("github_mirror") % "barback") + Var("barback_rev"),
+      (Var("github_mirror") % "barback") + Var("barback_tag"),
   Var("dart_root") + "/third_party/pkg/charcode":
       (Var("github_mirror") % "charcode") + Var("charcode_tag"),
   Var("dart_root") + "/third_party/pkg/cli_util":
@@ -241,6 +238,9 @@
       (Var("github_mirror") % "oauth2") + Var("oauth2_rev"),
   Var("dart_root") + "/third_party/pkg/observe":
       (Var("github_mirror") % "observe") + Var("observe_rev"),
+  Var("dart_root") + "/third_party/observatory_pub_packages":
+     (Var("github_mirror") % "observatory_pub_packages") 
+      + Var("observatory_pub_packages_rev"),
   Var("dart_root") + "/third_party/pkg/package_config":
       (Var("github_mirror") % "package_config") +
       Var("package_config_tag"),
@@ -253,7 +253,7 @@
   Var("dart_root") + "/third_party/pkg/pub_semver":
       (Var("github_mirror") % "pub_semver") + Var("pub_semver_tag"),
   Var("dart_root") + "/third_party/pkg/pub":
-      ("https://github.com/dart-lang/pub.git") + Var("pub_rev"),
+      (Var("github_mirror") % "pub") + Var("pub_rev"),
   Var("dart_root") + "/third_party/pkg/pub_cache":  
       (Var("github_mirror") % "pub_cache") + Var("pub_cache_tag"),
   Var("dart_root") + "/third_party/pkg/quiver": 
@@ -278,7 +278,7 @@
   Var("dart_root") + "/third_party/pkg/source_span":
       (Var("github_mirror") % "source_span") + Var("source_span_tag"),
   Var("dart_root") + "/third_party/pkg/source_map_stack_trace":
-      "https://github.com/dart-lang/source_map_stack_trace.git" +
+      (Var("github_mirror") % "source_map_stack_trace") +
       Var("source_map_stack_trace_tag"),
   Var("dart_root") + "/third_party/pkg/stack_trace":
       (Var("github_mirror") % "stack_trace") + Var("stack_trace_tag"),
diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/api.html
index 38a28ab..8d2995c 100644
--- a/pkg/analysis_server/doc/api.html
+++ b/pkg/analysis_server/doc/api.html
@@ -43,7 +43,7 @@
 </style></head>
   <body>
     <h1>Analysis Server API Specification</h1>
-    <h1 style="color:#999999">Version 1.7.0</h1>
+    <h1 style="color:#999999">Version 1.9.0</h1>
     <p>
       This document contains a specification of the API provided by the
       analysis server.  The API in this document is currently under
@@ -384,6 +384,8 @@
       
       
       
+     
+      
       
       
       
@@ -506,6 +508,10 @@
           Return library dependency information for use in client-side indexing
           and package URI resolution.
         </p>
+        <p>
+        Clients that are only using the libraries field should consider using the
+        analyzedFiles notification instead.
+        </p>
         
       <h4>Returns</h4><dl><dt class="field"><b><i>libraries ( List&lt;<a href="#type_FilePath">FilePath</a>&gt; )</i></b></dt><dd>
             
@@ -705,6 +711,30 @@
               or the empty map is specified, that indicates that the
               normal pubspec.yaml mechanism should always be used.
             </p>
+          </dd></dl></dd><dt class="request"><a name="request_analysis.setGeneralSubscriptions">analysis.setGeneralSubscriptions</a> (<a href="#request_analysis.setGeneralSubscriptions">#</a>)</dt><dd><div class="box"><pre>request: {
+  "id": String
+  "method": "analysis.setGeneralSubscriptions"
+  "params": {
+    "<b>subscriptions</b>": List&lt;<a href="#type_GeneralAnalysisService">GeneralAnalysisService</a>&gt;
+  }
+}</pre><br><pre>response: {
+  "id": String
+  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
+}</pre></div>
+        <p>
+          Subscribe for general services (that is, services that are not
+          specific to individual files). All previous subscriptions are replaced
+          by the given set of services.
+        </p>
+        <p>
+          It is an error if any of the elements in the list are not valid
+          services. If there is an error, then the current subscriptions will
+          remain unchanged.
+        </p>
+        
+      <h4>Parameters</h4><dl><dt class="field"><b><i>subscriptions ( List&lt;<a href="#type_GeneralAnalysisService">GeneralAnalysisService</a>&gt; )</i></b></dt><dd>
+            
+            <p>A list of the services being subscribed to.</p>
           </dd></dl></dd><dt class="request"><a name="request_analysis.setPriorityFiles">analysis.setPriorityFiles</a> (<a href="#request_analysis.setPriorityFiles">#</a>)</dt><dd><div class="box"><pre>request: {
   "id": String
   "method": "analysis.setPriorityFiles"
@@ -757,11 +787,11 @@
   "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
 }</pre></div>
         <p>
-          Subscribe for services. All previous subscriptions are
-          replaced by the current set of subscriptions. If a given
-          service is not included as a key in the map then no files
-          will be subscribed to the service, exactly as if the service
-          had been included in the map with an explicit empty list of
+          Subscribe for services that are specific to individual files.
+          All previous subscriptions are replaced by the current set of
+          subscriptions. If a given service is not included as a key in the map
+          then no files will be subscribed to the service, exactly as if the
+          service had been included in the map with an explicit empty list of
           files.
         </p>
         <p>
@@ -849,7 +879,27 @@
             <p>
               The options that are to be used to control analysis.
             </p>
-          </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class="notification"><a name="notification_analysis.errors">analysis.errors</a> (<a href="#notification_analysis.errors">#</a>)</dt><dd><div class="box"><pre>notification: {
+          </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class="notification"><a name="notification_analysis.analyzedFiles">analysis.analyzedFiles</a> (<a href="#notification_analysis.analyzedFiles">#</a>)</dt><dd><div class="box"><pre>notification: {
+  "event": "analysis.analyzedFiles"
+  "params": {
+    "<b>directories</b>": List&lt;<a href="#type_FilePath">FilePath</a>&gt;
+  }
+}</pre></div>
+        <p>
+          Reports the paths of the files that are being analyzed.
+        </p>
+        <p>
+          This notification is not subscribed to by default. Clients can
+          subscribe by including the value <tt>"ANALYZED_FILES"</tt> in the list
+          of services passed in an analysis.setGeneralSubscriptions request.
+        </p>
+        
+      <h4>Parameters</h4><dl><dt class="field"><b><i>directories ( List&lt;<a href="#type_FilePath">FilePath</a>&gt; )</i></b></dt><dd>
+            
+              <p>
+                A list of the paths of the files that are being analyzed.
+              </p>
+            </dd></dl></dd><dt class="notification"><a name="notification_analysis.errors">analysis.errors</a> (<a href="#notification_analysis.errors">#</a>)</dt><dd><div class="box"><pre>notification: {
   "event": "analysis.errors"
   "params": {
     "<b>file</b>": <a href="#type_FilePath">FilePath</a>
@@ -2150,6 +2200,7 @@
       
       
       
+      
     <dl><dt class="typeDefinition"><a name="type_AddContentOverlay">AddContentOverlay: object</a></dt><dd>
         <p>
           A directive to begin overlaying the contents of a file.  The
@@ -2283,11 +2334,17 @@
             </p>
           </dd></dl></dd><dt class="typeDefinition"><a name="type_AnalysisService">AnalysisService: String</a></dt><dd>
         <p>
-          An enumeration of the services provided by the analysis
-          domain.
+          An enumeration of the services provided by the analysis domain that
+          are related to a specific list of files.
         </p>
         
-      <dl><dt class="value">FOLDING</dt><dt class="value">HIGHLIGHTS</dt><dt class="value">INVALIDATE</dt><dt class="value">NAVIGATION</dt><dt class="value">OCCURRENCES</dt><dt class="value">OUTLINE</dt><dt class="value">OVERRIDES</dt></dl></dd><dt class="typeDefinition"><a name="type_AnalysisStatus">AnalysisStatus: object</a></dt><dd>
+      <dl><dt class="value">FOLDING</dt><dt class="value">HIGHLIGHTS</dt><dt class="value">INVALIDATE</dt><dd>
+            
+            <p>
+              This service is not currently implemented and will become a
+              GeneralAnalysisService in a future release.
+            </p>
+          </dd><dt class="value">NAVIGATION</dt><dt class="value">OCCURRENCES</dt><dt class="value">OUTLINE</dt><dt class="value">OVERRIDES</dt></dl></dd><dt class="typeDefinition"><a name="type_AnalysisStatus">AnalysisStatus: object</a></dt><dd>
         <p>
           An indication of the current state of analysis.
         </p>
@@ -2633,7 +2690,13 @@
             <p>
               The length of the region to be folded.
             </p>
-          </dd></dl></dd><dt class="typeDefinition"><a name="type_HighlightRegion">HighlightRegion: object</a></dt><dd>
+          </dd></dl></dd><dt class="typeDefinition"><a name="type_GeneralAnalysisService">GeneralAnalysisService: String</a></dt><dd>
+        <p>
+          An enumeration of the services provided by the analysis domain that are
+          general in nature (that is, are not specific to some list of files).
+        </p>
+        
+      <dl><dt class="value">ANALYZED_FILES</dt></dl></dd><dt class="typeDefinition"><a name="type_HighlightRegion">HighlightRegion: object</a></dt><dd>
         <p>
           A description of a region that could have special highlighting
           associated with it.
@@ -2660,7 +2723,154 @@
           applied to files.
         </p>
         
-      <dl><dt class="value">ANNOTATION</dt><dt class="value">BUILT_IN</dt><dt class="value">CLASS</dt><dt class="value">COMMENT_BLOCK</dt><dt class="value">COMMENT_DOCUMENTATION</dt><dt class="value">COMMENT_END_OF_LINE</dt><dt class="value">CONSTRUCTOR</dt><dt class="value">DIRECTIVE</dt><dt class="value">DYNAMIC_TYPE</dt><dt class="value">ENUM</dt><dt class="value">ENUM_CONSTANT</dt><dt class="value">FIELD</dt><dt class="value">FIELD_STATIC</dt><dt class="value">FUNCTION</dt><dt class="value">FUNCTION_DECLARATION</dt><dt class="value">FUNCTION_TYPE_ALIAS</dt><dt class="value">GETTER_DECLARATION</dt><dt class="value">IDENTIFIER_DEFAULT</dt><dt class="value">IMPORT_PREFIX</dt><dt class="value">KEYWORD</dt><dt class="value">LABEL</dt><dt class="value">LITERAL_BOOLEAN</dt><dt class="value">LITERAL_DOUBLE</dt><dt class="value">LITERAL_INTEGER</dt><dt class="value">LITERAL_LIST</dt><dt class="value">LITERAL_MAP</dt><dt class="value">LITERAL_STRING</dt><dt class="value">LOCAL_VARIABLE</dt><dt class="value">LOCAL_VARIABLE_DECLARATION</dt><dt class="value">METHOD</dt><dt class="value">METHOD_DECLARATION</dt><dt class="value">METHOD_DECLARATION_STATIC</dt><dt class="value">METHOD_STATIC</dt><dt class="value">PARAMETER</dt><dt class="value">SETTER_DECLARATION</dt><dt class="value">TOP_LEVEL_VARIABLE</dt><dt class="value">TYPE_NAME_DYNAMIC</dt><dt class="value">TYPE_PARAMETER</dt></dl></dd><dt class="typeDefinition"><a name="type_HoverInformation">HoverInformation: object</a></dt><dd>
+      <dl><dt class="value">ANNOTATION</dt><dt class="value">BUILT_IN</dt><dt class="value">CLASS</dt><dt class="value">COMMENT_BLOCK</dt><dt class="value">COMMENT_DOCUMENTATION</dt><dt class="value">COMMENT_END_OF_LINE</dt><dt class="value">CONSTRUCTOR</dt><dt class="value">DIRECTIVE</dt><dt class="value">DYNAMIC_TYPE</dt><dd>
+            
+            <p>Only for version 1 of highlight.</p>
+          </dd><dt class="value">DYNAMIC_LOCAL_VARIABLE_DECLARATION</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">DYNAMIC_LOCAL_VARIABLE_REFERENCE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">DYNAMIC_PARAMETER_DECLARATION</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">DYNAMIC_PARAMETER_REFERENCE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">ENUM</dt><dt class="value">ENUM_CONSTANT</dt><dt class="value">FIELD</dt><dd>
+            
+            <p>Only for version 1 of highlight.</p>
+          </dd><dt class="value">FIELD_STATIC</dt><dd>
+            
+            <p>Only for version 1 of highlight.</p>
+          </dd><dt class="value">FUNCTION</dt><dd>
+            
+            <p>Only for version 1 of highlight.</p>
+          </dd><dt class="value">FUNCTION_DECLARATION</dt><dd>
+            
+            <p>Only for version 1 of highlight.</p>
+          </dd><dt class="value">FUNCTION_TYPE_ALIAS</dt><dt class="value">GETTER_DECLARATION</dt><dd>
+            
+            <p>Only for version 1 of highlight.</p>
+          </dd><dt class="value">IDENTIFIER_DEFAULT</dt><dt class="value">IMPORT_PREFIX</dt><dt class="value">INSTANCE_FIELD_DECLARATION</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">INSTANCE_FIELD_REFERENCE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">INSTANCE_GETTER_DECLARATION</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">INSTANCE_GETTER_REFERENCE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">INSTANCE_METHOD_DECLARATION</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">INSTANCE_METHOD_REFERENCE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">INSTANCE_SETTER_DECLARATION</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">INSTANCE_SETTER_REFERENCE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">INVALID_STRING_ESCAPE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">KEYWORD</dt><dt class="value">LABEL</dt><dt class="value">LIBRARY_NAME</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">LITERAL_BOOLEAN</dt><dt class="value">LITERAL_DOUBLE</dt><dt class="value">LITERAL_INTEGER</dt><dt class="value">LITERAL_LIST</dt><dt class="value">LITERAL_MAP</dt><dt class="value">LITERAL_STRING</dt><dt class="value">LOCAL_FUNCTION_DECLARATION</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">LOCAL_FUNCTION_REFERENCE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">LOCAL_VARIABLE</dt><dd>
+            
+            <p>Only for version 1 of highlight.</p>
+          </dd><dt class="value">LOCAL_VARIABLE_DECLARATION</dt><dt class="value">LOCAL_VARIABLE_REFERENCE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">METHOD</dt><dd>
+            
+            <p>Only for version 1 of highlight.</p>
+          </dd><dt class="value">METHOD_DECLARATION</dt><dd>
+            
+            <p>Only for version 1 of highlight.</p>
+          </dd><dt class="value">METHOD_DECLARATION_STATIC</dt><dd>
+            
+            <p>Only for version 1 of highlight.</p>
+          </dd><dt class="value">METHOD_STATIC</dt><dd>
+            
+            <p>Only for version 1 of highlight.</p>
+          </dd><dt class="value">PARAMETER</dt><dd>
+            
+            <p>Only for version 1 of highlight.</p>
+          </dd><dt class="value">SETTER_DECLARATION</dt><dd>
+            
+            <p>Only for version 1 of highlight.</p>
+          </dd><dt class="value">TOP_LEVEL_VARIABLE</dt><dd>
+            
+            <p>Only for version 1 of highlight.</p>
+          </dd><dt class="value">PARAMETER_DECLARATION</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">PARAMETER_REFERENCE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">STATIC_FIELD_DECLARATION</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">STATIC_GETTER_DECLARATION</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">STATIC_GETTER_REFERENCE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">STATIC_METHOD_DECLARATION</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">STATIC_METHOD_REFERENCE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">STATIC_SETTER_DECLARATION</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">STATIC_SETTER_REFERENCE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">TOP_LEVEL_FUNCTION_DECLARATION</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">TOP_LEVEL_FUNCTION_REFERENCE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">TOP_LEVEL_GETTER_DECLARATION</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">TOP_LEVEL_GETTER_REFERENCE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">TOP_LEVEL_SETTER_DECLARATION</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">TOP_LEVEL_SETTER_REFERENCE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">TOP_LEVEL_VARIABLE_DECLARATION</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">TYPE_NAME_DYNAMIC</dt><dt class="value">TYPE_PARAMETER</dt><dt class="value">UNRESOLVED_INSTANCE_MEMBER_REFERENCE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd><dt class="value">VALID_STRING_ESCAPE</dt><dd>
+            
+            <p>Only for version 2 of highlight.</p>
+          </dd></dl></dd><dt class="typeDefinition"><a name="type_HoverInformation">HoverInformation: object</a></dt><dd>
         <p>
           The hover information associated with a specific location.
         </p>
diff --git a/pkg/analysis_server/lib/completion/completion_core.dart b/pkg/analysis_server/lib/completion/completion_core.dart
index 691ab89..39d6a83 100644
--- a/pkg/analysis_server/lib/completion/completion_core.dart
+++ b/pkg/analysis_server/lib/completion/completion_core.dart
@@ -45,7 +45,8 @@
   AnalysisContext get context;
 
   /**
-   * The offset within the source at which the completion is being requested.
+   * Return the offset within the source at which the completion is being
+   * requested.
    */
   int get offset;
 
diff --git a/pkg/analysis_server/lib/completion/completion_dart.dart b/pkg/analysis_server/lib/completion/completion_dart.dart
index daeba77..ee21567 100644
--- a/pkg/analysis_server/lib/completion/completion_dart.dart
+++ b/pkg/analysis_server/lib/completion/completion_dart.dart
@@ -6,6 +6,8 @@
 
 import 'package:analysis_server/completion/completion_core.dart';
 import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/source.dart';
 
 /**
  * An object used to produce completions for a specific error within a Dart
@@ -17,9 +19,30 @@
 abstract class DartCompletionContributor extends CompletionContributor {
   @override
   CompletionResult computeSuggestions(CompletionRequest request) {
-    // TODO(brianwilkerson) Implement this by getting the information required
-    // to create a DartCompletionRequest and calling:
-    // return internalComputeSuggestions(dartRequest);
+    if (request is DartCompletionRequest) {
+      return internalComputeSuggestions(request);
+    }
+    AnalysisContext context = request.context;
+    Source source = request.source;
+    List<Source> libraries = context.getLibrariesContaining(source);
+    if (libraries.length < 1) {
+      return null;
+    }
+//    CompilationUnit unit =
+//        context.getResolvedCompilationUnit2(source, libraries[0]);
+//    bool isResolved = true;
+//    if (unit == null) {
+//      // TODO(brianwilkerson) Implement a method for getting a parsed
+//      // compilation unit without parsing the unit if it hasn't been parsed.
+//      unit = context.getParsedCompilationUnit(source);
+//      if (unit == null) {
+//        return null;
+//      }
+//      isResolved = false;
+//    }
+//    DartCompletionRequest dartRequest =
+//        new DartCompletionRequestImpl(request, unit, isResolved);
+//    return internalComputeSuggestions(dartRequest);
     return null;
   }
 
@@ -42,7 +65,7 @@
   bool get isResolved;
 
   /**
-   * The compilation unit in which the completion was requested.
+   * Return the compilation unit in which the completion was requested.
    */
   CompilationUnit get unit;
 
@@ -52,7 +75,7 @@
   //DartCompletionCache get cache;
 
   /**
-   * The completion target.  This determines what part of the parse tree
+   * Return the completion target.  This determines what part of the parse tree
    * will receive the newly inserted text.
    */
   //CompletionTarget get target;
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 7f135d2..57fd203 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -35,6 +35,7 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/source_io.dart';
 import 'package:analyzer/src/generated/utilities_general.dart';
+import 'package:package_config/packages.dart';
 import 'package:plugin/plugin.dart';
 
 typedef void OptionUpdater(AnalysisOptionsImpl options);
@@ -72,7 +73,7 @@
    * The version of the analysis server. The value should be replaced
    * automatically during the build.
    */
-  static final String VERSION = '1.7.0';
+  static final String VERSION = '1.9.0';
 
   /**
    * The number of milliseconds to perform operations before inserting
@@ -82,6 +83,11 @@
   static int performOperationDelayFreqency = 25;
 
   /**
+   * The options of this server instance.
+   */
+  AnalysisServerOptions options;
+
+  /**
    * The channel from which requests are received and to which responses should
    * be sent.
    */
@@ -108,10 +114,10 @@
   final ServerPlugin serverPlugin;
 
   /**
-   * [ContextManager] which handles the mapping from analysis roots
-   * to context directories.
+   * The [ContextManager] that handles the mapping from analysis roots to
+   * context directories.
    */
-  ServerContextManager contextDirectoryManager;
+  ServerContextManager contextManager;
 
   /**
    * A flag indicating whether the server is running.  When false, contexts
@@ -164,6 +170,12 @@
   Set<ServerService> serverServices = new HashSet<ServerService>();
 
   /**
+   * A set of the [GeneralAnalysisService]s to send notifications for.
+   */
+  Set<GeneralAnalysisService> generalAnalysisServices =
+      new HashSet<GeneralAnalysisService>();
+
+  /**
    * A table mapping [AnalysisService]s to the file paths for which these
    * notifications should be sent.
    */
@@ -251,9 +263,21 @@
   List<Plugin> userDefinedPlugins;
 
   /**
+   * If the "analysis.analyzedFiles" notification is currently being subscribed
+   * to (see [generalAnalysisServices]), and at least one such notification has
+   * been sent since the subscription was enabled, the set of analyzed files
+   * that was delivered in the most recently sent notification.  Otherwise
+   * `null`.
+   */
+  Set<String> prevAnalyzedFiles;
+
+  /**
    * Initialize a newly created server to receive requests from and send
    * responses to the given [channel].
    *
+   * If a [contextManager] is provided, then the [packageResolverProvider] will
+   * be ignored.
+   *
    * If [rethrowExceptions] is true, then any exceptions thrown by analysis are
    * propagated up the call stack.  The default is true to allow analysis
    * exceptions to show up in unit tests, but it should be set to false when
@@ -261,23 +285,31 @@
    */
   AnalysisServer(this.channel, this.resourceProvider,
       OptimizingPubPackageMapProvider packageMapProvider, Index _index,
-      this.serverPlugin, AnalysisServerOptions analysisServerOptions,
-      this.defaultSdk, this.instrumentationService,
-      {ResolverProvider packageResolverProvider: null,
+      this.serverPlugin, this.options, this.defaultSdk,
+      this.instrumentationService, {ContextManager contextManager: null,
+      ResolverProvider packageResolverProvider: null,
       this.rethrowExceptions: true})
       : index = _index,
         searchEngine = _index != null ? createSearchEngine(_index) : null {
     _performance = performanceDuringStartup;
     operationQueue = new ServerOperationQueue();
-    contextDirectoryManager = new ServerContextManager(this, resourceProvider,
-        packageResolverProvider, packageMapProvider, instrumentationService);
-    contextDirectoryManager.defaultOptions.incremental = true;
-    contextDirectoryManager.defaultOptions.incrementalApi =
-        analysisServerOptions.enableIncrementalResolutionApi;
-    contextDirectoryManager.defaultOptions.incrementalValidation =
-        analysisServerOptions.enableIncrementalResolutionValidation;
-    contextDirectoryManager.defaultOptions.generateImplicitErrors = false;
-    _noErrorNotification = analysisServerOptions.noErrorNotification;
+    if (contextManager == null) {
+      contextManager = new ServerContextManager(this, resourceProvider,
+          packageResolverProvider, packageMapProvider, instrumentationService);
+      AnalysisOptionsImpl analysisOptions =
+          (contextManager as ServerContextManager).defaultOptions;
+      analysisOptions.incremental = true;
+      analysisOptions.incrementalApi = options.enableIncrementalResolutionApi;
+      analysisOptions.incrementalValidation =
+          options.enableIncrementalResolutionValidation;
+      analysisOptions.generateImplicitErrors = false;
+    } else if (contextManager is! ServerContextManager) {
+      // TODO(brianwilkerson) Remove this when the interface is complete.
+      throw new StateError(
+          'The contextManager must be an instance of ServerContextManager');
+    }
+    this.contextManager = contextManager;
+    _noErrorNotification = options.noErrorNotification;
     AnalysisEngine.instance.logger = new AnalysisLogger();
     _onAnalysisStartedController = new StreamController.broadcast();
     _onFileAnalyzedController = new StreamController.broadcast();
@@ -321,7 +353,7 @@
    * The stream that is notified when contexts are added or removed.
    */
   Stream<ContextsChangedEvent> get onContextsChanged =>
-      contextDirectoryManager.onContextsChanged;
+      contextManager.onContextsChanged;
 
   /**
    * The stream that is notified when a single file has been analyzed.
@@ -374,7 +406,7 @@
    * analyzed.
    */
   void fileAnalyzed(ChangeNotice notice) {
-    if (contextDirectoryManager.isInAnalysisRoot(notice.source.fullName)) {
+    if (contextManager.isInAnalysisRoot(notice.source.fullName)) {
       _onFileAnalyzedController.add(notice);
     }
   }
@@ -465,14 +497,15 @@
     {
       AnalysisContext containingContext = getContainingContext(path);
       if (containingContext != null) {
-        Source source =
-            ContextManager.createSourceInContext(containingContext, file);
+        Source source = AbstractContextManager.createSourceInContext(
+            containingContext, file);
         return new ContextSourcePair(containingContext, source);
       }
     }
     // try to find a context that analysed the file
     for (AnalysisContext context in folderMap.values) {
-      Source source = ContextManager.createSourceInContext(context, file);
+      Source source =
+          AbstractContextManager.createSourceInContext(context, file);
       SourceKind kind = context.getKindOf(source);
       if (kind != SourceKind.UNKNOWN) {
         return new ContextSourcePair(context, source);
@@ -747,6 +780,10 @@
         ServerPerformanceStatistics.intertask.makeCurrent();
         _schedulePerformOperation();
       } else {
+        if (generalAnalysisServices
+            .contains(GeneralAnalysisService.ANALYZED_FILES)) {
+          sendAnalysisNotificationAnalyzedFiles(this);
+        }
         sendStatusNotification(null);
         if (_onAnalysisCompleteCompleter != null) {
           _onAnalysisCompleteCompleter.complete();
@@ -772,7 +809,7 @@
     }
     // Instruct the contextDirectoryManager to rebuild all contexts from
     // scratch.
-    contextDirectoryManager.refresh(roots);
+    contextManager.refresh(roots);
   }
 
   /**
@@ -834,7 +871,15 @@
     if (stackTrace != null) {
       stackTraceString = stackTrace.toString();
     } else {
-      stackTraceString = 'null stackTrace';
+      try {
+        throw 'ignored';
+      } catch (ignored, stackTrace) {
+        stackTraceString = stackTrace.toString();
+      }
+      if (stackTraceString == null) {
+        // This code should be unreachable.
+        stackTraceString = 'null stackTrace';
+      }
     }
     // send the notification
     channel.sendNotification(
@@ -877,8 +922,7 @@
   void setAnalysisRoots(String requestId, List<String> includedPaths,
       List<String> excludedPaths, Map<String, String> packageRoots) {
     try {
-      contextDirectoryManager.setRoots(
-          includedPaths, excludedPaths, packageRoots);
+      contextManager.setRoots(includedPaths, excludedPaths, packageRoots);
     } on UnimplementedError catch (e) {
       throw new RequestFailure(
           new Response.unsupportedFeature(requestId, e.message));
@@ -937,6 +981,25 @@
   }
 
   /**
+   * Implementation for `analysis.setGeneralSubscriptions`.
+   */
+  void setGeneralAnalysisSubscriptions(
+      List<GeneralAnalysisService> subscriptions) {
+    Set<GeneralAnalysisService> newServices = subscriptions.toSet();
+    if (newServices.contains(GeneralAnalysisService.ANALYZED_FILES) &&
+        !generalAnalysisServices
+            .contains(GeneralAnalysisService.ANALYZED_FILES) &&
+        isAnalysisComplete()) {
+      sendAnalysisNotificationAnalyzedFiles(this);
+    } else if (!newServices.contains(GeneralAnalysisService.ANALYZED_FILES) &&
+        generalAnalysisServices
+            .contains(GeneralAnalysisService.ANALYZED_FILES)) {
+      prevAnalyzedFiles = null;
+    }
+    generalAnalysisServices = newServices;
+  }
+
+  /**
    * Set the priority files to the given [files].
    */
   void setPriorityFiles(String requestId, List<String> files) {
@@ -962,7 +1025,8 @@
             Uri uri = context.sourceFactory.restoreUri(source);
             if (uri.scheme != 'file') {
               preferredContext = context;
-              source = ContextManager.createSourceInContext(context, resource);
+              source = AbstractContextManager.createSourceInContext(
+                  context, resource);
               break;
             }
           }
@@ -1009,8 +1073,7 @@
    * absolute path.
    */
   bool shouldSendErrorsNotificationFor(String file) {
-    return !_noErrorNotification &&
-        contextDirectoryManager.isInAnalysisRoot(file);
+    return !_noErrorNotification && contextManager.isInAnalysisRoot(file);
   }
 
   void shutdown() {
@@ -1157,11 +1220,13 @@
         optionUpdater(options);
       });
       context.analysisOptions = options;
+      // TODO(brianwilkerson) As far as I can tell, this doesn't cause analysis
+      // to be scheduled for this context.
     });
     //
     // Update the defaults used to create new contexts.
     //
-    AnalysisOptionsImpl options = contextDirectoryManager.defaultOptions;
+    AnalysisOptionsImpl options = contextManager.defaultOptions;
     optionUpdaters.forEach((OptionUpdater optionUpdater) {
       optionUpdater(options);
     });
@@ -1175,8 +1240,7 @@
     Set<AnalysisContext> contexts = new HashSet<AnalysisContext>();
     resources.forEach((Resource resource) {
       if (resource is Folder) {
-        contexts
-            .addAll(contextDirectoryManager.contextsInAnalysisRoot(resource));
+        contexts.addAll(contextManager.contextsInAnalysisRoot(resource));
       }
     });
     return contexts;
@@ -1239,38 +1303,11 @@
   bool enableIncrementalResolutionValidation = false;
   bool noErrorNotification = false;
   bool noIndex = false;
+  bool useAnalysisHighlight2 = false;
   String fileReadMode = 'as-is';
 }
 
 /**
- * A [ContextsChangedEvent] indicate what contexts were added or removed.
- *
- * No context should be added to the event more than once. It does not make
- * sense, for example, for a context to be both added and removed.
- */
-class ContextsChangedEvent {
-
-  /**
-   * The contexts that were added to the server.
-   */
-  final List<AnalysisContext> added;
-
-  /**
-   * The contexts that were changed.
-   */
-  final List<AnalysisContext> changed;
-
-  /**
-   * The contexts that were removed from the server.
-   */
-  final List<AnalysisContext> removed;
-
-  ContextsChangedEvent({this.added: AnalysisContext.EMPTY_LIST,
-      this.changed: AnalysisContext.EMPTY_LIST,
-      this.removed: AnalysisContext.EMPTY_LIST});
-}
-
-/**
  * Information about a file - an [AnalysisContext] that analyses the file,
  * and the [Source] representing the file in this context.
  */
@@ -1300,7 +1337,7 @@
   PriorityChangeEvent(this.firstSource);
 }
 
-class ServerContextManager extends ContextManager {
+class ServerContextManager extends AbstractContextManager {
   final AnalysisServer analysisServer;
 
   /**
@@ -1330,12 +1367,13 @@
       _onContextsChangedController.stream;
 
   @override
-  AnalysisContext addContext(Folder folder, UriResolver packageUriResolver) {
+  AnalysisContext addContext(
+      Folder folder, UriResolver packageUriResolver, Packages packages) {
     InternalAnalysisContext context =
         AnalysisEngine.instance.createAnalysisContext();
     context.contentCache = analysisServer.overlayState;
     analysisServer.folderMap[folder] = context;
-    context.sourceFactory = _createSourceFactory(packageUriResolver);
+    context.sourceFactory = _createSourceFactory(packageUriResolver, packages);
     context.analysisOptions = new AnalysisOptionsImpl.from(defaultOptions);
     _onContextsChangedController
         .add(new ContextsChangedEvent(added: [context]));
@@ -1408,9 +1446,9 @@
 
   @override
   void updateContextPackageUriResolver(
-      Folder contextFolder, UriResolver packageUriResolver) {
+      Folder contextFolder, UriResolver packageUriResolver, Packages packages) {
     AnalysisContext context = analysisServer.folderMap[contextFolder];
-    context.sourceFactory = _createSourceFactory(packageUriResolver);
+    context.sourceFactory = _createSourceFactory(packageUriResolver, packages);
     _onContextsChangedController
         .add(new ContextsChangedEvent(changed: [context]));
     analysisServer.schedulePerformAnalysisOperation(context);
@@ -1426,9 +1464,10 @@
 
   /**
    * Set up a [SourceFactory] that resolves packages using the given
-   * [packageUriResolver].
+   * [packageUriResolver] and [packages] resolution strategy.
    */
-  SourceFactory _createSourceFactory(UriResolver packageUriResolver) {
+  SourceFactory _createSourceFactory(
+      UriResolver packageUriResolver, Packages packages) {
     UriResolver dartResolver = new DartUriResolver(analysisServer.defaultSdk);
     UriResolver resourceResolver = new ResourceUriResolver(resourceProvider);
     List<UriResolver> resolvers = [];
@@ -1442,7 +1481,7 @@
       resolvers.add(packageUriResolver);
     }
     resolvers.add(resourceResolver);
-    return new SourceFactory(resolvers);
+    return new SourceFactory(resolvers, packages);
   }
 }
 
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights2.dart b/pkg/analysis_server/lib/src/computer/computer_highlights2.dart
new file mode 100644
index 0000000..f89d278
--- /dev/null
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights2.dart
@@ -0,0 +1,770 @@
+// Copyright (c) 2014, 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 computer.highlights2;
+
+import 'package:analysis_server/src/protocol.dart' hide Element;
+import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/element.dart';
+import 'package:analyzer/src/generated/scanner.dart';
+
+/**
+ * A computer for [HighlightRegion]s in a Dart [CompilationUnit].
+ */
+class DartUnitHighlightsComputer2 {
+  final CompilationUnit _unit;
+
+  final List<HighlightRegion> _regions = <HighlightRegion>[];
+
+  DartUnitHighlightsComputer2(this._unit);
+
+  /**
+   * Returns the computed highlight regions, not `null`.
+   */
+  List<HighlightRegion> compute() {
+    _unit.accept(new _DartUnitHighlightsComputerVisitor2(this));
+    _addCommentRanges();
+    return _regions;
+  }
+
+  void _addCommentRanges() {
+    Token token = _unit.beginToken;
+    while (token != null && token.type != TokenType.EOF) {
+      Token commentToken = token.precedingComments;
+      while (commentToken != null) {
+        HighlightRegionType highlightType = null;
+        if (commentToken.type == TokenType.MULTI_LINE_COMMENT) {
+          if (commentToken.lexeme.startsWith('/**')) {
+            highlightType = HighlightRegionType.COMMENT_DOCUMENTATION;
+          } else {
+            highlightType = HighlightRegionType.COMMENT_BLOCK;
+          }
+        }
+        if (commentToken.type == TokenType.SINGLE_LINE_COMMENT) {
+          highlightType = HighlightRegionType.COMMENT_END_OF_LINE;
+        }
+        if (highlightType != null) {
+          _addRegion_token(commentToken, highlightType);
+        }
+        commentToken = commentToken.next;
+      }
+      token = token.next;
+    }
+  }
+
+  void _addIdentifierRegion(SimpleIdentifier node) {
+    if (_addIdentifierRegion_keyword(node)) {
+      return;
+    }
+    if (_addIdentifierRegion_class(node)) {
+      return;
+    }
+    if (_addIdentifierRegion_constructor(node)) {
+      return;
+    }
+    if (_addIdentifierRegion_dynamicLocal(node)) {
+      return;
+    }
+    if (_addIdentifierRegion_getterSetterDeclaration(node)) {
+      return;
+    }
+    if (_addIdentifierRegion_field(node)) {
+      return;
+    }
+    if (_addIdentifierRegion_function(node)) {
+      return;
+    }
+    if (_addIdentifierRegion_functionTypeAlias(node)) {
+      return;
+    }
+    if (_addIdentifierRegion_importPrefix(node)) {
+      return;
+    }
+    if (_addIdentifierRegion_label(node)) {
+      return;
+    }
+    if (_addIdentifierRegion_localVariable(node)) {
+      return;
+    }
+    if (_addIdentifierRegion_method(node)) {
+      return;
+    }
+    if (_addIdentifierRegion_parameter(node)) {
+      return;
+    }
+    if (_addIdentifierRegion_typeParameter(node)) {
+      return;
+    }
+    _addRegion_node(node, HighlightRegionType.IDENTIFIER_DEFAULT);
+  }
+
+  void _addIdentifierRegion_annotation(Annotation node) {
+    ArgumentList arguments = node.arguments;
+    if (arguments == null) {
+      _addRegion_node(node, HighlightRegionType.ANNOTATION);
+    } else {
+      _addRegion_nodeStart_tokenEnd(
+          node, arguments.beginToken, HighlightRegionType.ANNOTATION);
+      _addRegion_token(arguments.endToken, HighlightRegionType.ANNOTATION);
+    }
+  }
+
+  bool _addIdentifierRegion_class(SimpleIdentifier node) {
+    Element element = node.staticElement;
+    if (element is! ClassElement) {
+      return false;
+    }
+    ClassElement classElement = element;
+    // prepare type
+    HighlightRegionType type;
+    if (classElement.isEnum) {
+      type = HighlightRegionType.ENUM;
+    } else {
+      type = HighlightRegionType.CLASS;
+    }
+    // add region
+    return _addRegion_node(node, type);
+  }
+
+  bool _addIdentifierRegion_constructor(SimpleIdentifier node) {
+    Element element = node.staticElement;
+    if (element is! ConstructorElement) {
+      return false;
+    }
+    return _addRegion_node(node, HighlightRegionType.CONSTRUCTOR);
+  }
+
+  bool _addIdentifierRegion_dynamicLocal(SimpleIdentifier node) {
+    // no propagated type
+    if (node.propagatedType != null) {
+      return false;
+    }
+    // has dynamic static type
+    DartType staticType = node.staticType;
+    if (staticType == null || !staticType.isDynamic) {
+      return false;
+    }
+    // OK
+    Element element = node.staticElement;
+    if (element is LocalVariableElement) {
+      HighlightRegionType type = node.inDeclarationContext()
+          ? HighlightRegionType.DYNAMIC_LOCAL_VARIABLE_DECLARATION
+          : HighlightRegionType.DYNAMIC_LOCAL_VARIABLE_REFERENCE;
+      return _addRegion_node(node, type);
+    }
+    if (element is ParameterElement) {
+      HighlightRegionType type = node.inDeclarationContext()
+          ? HighlightRegionType.DYNAMIC_PARAMETER_DECLARATION
+          : HighlightRegionType.DYNAMIC_PARAMETER_REFERENCE;
+      return _addRegion_node(node, type);
+    }
+    return false;
+  }
+
+  bool _addIdentifierRegion_field(SimpleIdentifier node) {
+    Element element = node.bestElement;
+    if (element is FieldFormalParameterElement) {
+      element = (element as FieldFormalParameterElement).field;
+    }
+    // prepare type
+    HighlightRegionType type;
+    if (element is FieldElement) {
+      Element enclosingElement = element.enclosingElement;
+      if (enclosingElement is ClassElement && enclosingElement.isEnum) {
+        type = HighlightRegionType.ENUM_CONSTANT;
+      } else if (element.isStatic) {
+        type = HighlightRegionType.STATIC_FIELD_DECLARATION;
+      } else {
+        type = node.inDeclarationContext()
+            ? HighlightRegionType.INSTANCE_FIELD_DECLARATION
+            : HighlightRegionType.INSTANCE_FIELD_REFERENCE;
+      }
+    } else if (element is TopLevelVariableElement) {
+      type = HighlightRegionType.TOP_LEVEL_VARIABLE_DECLARATION;
+    }
+    if (element is PropertyAccessorElement) {
+      PropertyAccessorElement accessor = element;
+      Element enclosingElement = element.enclosingElement;
+      if (accessor.variable is TopLevelVariableElement) {
+        type = accessor.isGetter
+            ? HighlightRegionType.TOP_LEVEL_GETTER_REFERENCE
+            : HighlightRegionType.TOP_LEVEL_SETTER_REFERENCE;
+      } else if (enclosingElement is ClassElement && enclosingElement.isEnum) {
+        type = HighlightRegionType.ENUM_CONSTANT;
+      } else if (accessor.isStatic) {
+        type = accessor.isGetter
+            ? HighlightRegionType.STATIC_GETTER_REFERENCE
+            : HighlightRegionType.STATIC_SETTER_REFERENCE;
+      } else {
+        type = accessor.isGetter
+            ? HighlightRegionType.INSTANCE_GETTER_REFERENCE
+            : HighlightRegionType.INSTANCE_SETTER_REFERENCE;
+      }
+    }
+    // add region
+    if (type != null) {
+      return _addRegion_node(node, type);
+    }
+    return false;
+  }
+
+  bool _addIdentifierRegion_function(SimpleIdentifier node) {
+    Element element = node.staticElement;
+    if (element is! FunctionElement) {
+      return false;
+    }
+    HighlightRegionType type;
+    bool isTopLevel = element.enclosingElement is CompilationUnitElement;
+    if (node.inDeclarationContext()) {
+      type = isTopLevel
+          ? HighlightRegionType.TOP_LEVEL_FUNCTION_DECLARATION
+          : HighlightRegionType.LOCAL_FUNCTION_DECLARATION;
+    } else {
+      type = isTopLevel
+          ? HighlightRegionType.TOP_LEVEL_FUNCTION_REFERENCE
+          : HighlightRegionType.LOCAL_FUNCTION_REFERENCE;
+    }
+    return _addRegion_node(node, type);
+  }
+
+  bool _addIdentifierRegion_functionTypeAlias(SimpleIdentifier node) {
+    Element element = node.staticElement;
+    if (element is! FunctionTypeAliasElement) {
+      return false;
+    }
+    return _addRegion_node(node, HighlightRegionType.FUNCTION_TYPE_ALIAS);
+  }
+
+  bool _addIdentifierRegion_getterSetterDeclaration(SimpleIdentifier node) {
+    // should be declaration
+    AstNode parent = node.parent;
+    if (!(parent is MethodDeclaration || parent is FunctionDeclaration)) {
+      return false;
+    }
+    // should be property accessor
+    Element element = node.staticElement;
+    if (element is! PropertyAccessorElement) {
+      return false;
+    }
+    // getter or setter
+    PropertyAccessorElement propertyAccessorElement =
+        element as PropertyAccessorElement;
+    bool isTopLevel = element.enclosingElement is CompilationUnitElement;
+    HighlightRegionType type;
+    if (propertyAccessorElement.isGetter) {
+      if (isTopLevel) {
+        type = HighlightRegionType.TOP_LEVEL_GETTER_DECLARATION;
+      } else if (propertyAccessorElement.isStatic) {
+        type = HighlightRegionType.STATIC_GETTER_DECLARATION;
+      } else {
+        type = HighlightRegionType.INSTANCE_GETTER_DECLARATION;
+      }
+    } else {
+      if (isTopLevel) {
+        type = HighlightRegionType.TOP_LEVEL_SETTER_DECLARATION;
+      } else if (propertyAccessorElement.isStatic) {
+        type = HighlightRegionType.STATIC_SETTER_DECLARATION;
+      } else {
+        type = HighlightRegionType.INSTANCE_SETTER_DECLARATION;
+      }
+    }
+    return _addRegion_node(node, type);
+  }
+
+  bool _addIdentifierRegion_importPrefix(SimpleIdentifier node) {
+    Element element = node.staticElement;
+    if (element is! PrefixElement) {
+      return false;
+    }
+    return _addRegion_node(node, HighlightRegionType.IMPORT_PREFIX);
+  }
+
+  bool _addIdentifierRegion_keyword(SimpleIdentifier node) {
+    String name = node.name;
+    if (name == "void") {
+      return _addRegion_node(node, HighlightRegionType.KEYWORD);
+    }
+    return false;
+  }
+
+  bool _addIdentifierRegion_label(SimpleIdentifier node) {
+    Element element = node.staticElement;
+    if (element is! LabelElement) {
+      return false;
+    }
+    return _addRegion_node(node, HighlightRegionType.LABEL);
+  }
+
+  bool _addIdentifierRegion_localVariable(SimpleIdentifier node) {
+    Element element = node.staticElement;
+    if (element is! LocalVariableElement) {
+      return false;
+    }
+    // OK
+    HighlightRegionType type = node.inDeclarationContext()
+        ? HighlightRegionType.LOCAL_VARIABLE_DECLARATION
+        : HighlightRegionType.LOCAL_VARIABLE_REFERENCE;
+    return _addRegion_node(node, type);
+  }
+
+  bool _addIdentifierRegion_method(SimpleIdentifier node) {
+    Element element = node.bestElement;
+    if (element is! MethodElement) {
+      return false;
+    }
+    MethodElement methodElement = element as MethodElement;
+    bool isStatic = methodElement.isStatic;
+    // OK
+    HighlightRegionType type;
+    if (node.inDeclarationContext()) {
+      if (isStatic) {
+        type = HighlightRegionType.STATIC_METHOD_DECLARATION;
+      } else {
+        type = HighlightRegionType.INSTANCE_METHOD_DECLARATION;
+      }
+    } else {
+      if (isStatic) {
+        type = HighlightRegionType.STATIC_METHOD_REFERENCE;
+      } else {
+        type = HighlightRegionType.INSTANCE_METHOD_REFERENCE;
+      }
+    }
+    return _addRegion_node(node, type);
+  }
+
+  bool _addIdentifierRegion_parameter(SimpleIdentifier node) {
+    Element element = node.staticElement;
+    if (element is! ParameterElement) {
+      return false;
+    }
+    HighlightRegionType type = node.inDeclarationContext()
+        ? HighlightRegionType.PARAMETER_DECLARATION
+        : HighlightRegionType.PARAMETER_REFERENCE;
+    return _addRegion_node(node, type);
+  }
+
+  bool _addIdentifierRegion_typeParameter(SimpleIdentifier node) {
+    Element element = node.staticElement;
+    if (element is! TypeParameterElement) {
+      return false;
+    }
+    return _addRegion_node(node, HighlightRegionType.TYPE_PARAMETER);
+  }
+
+  void _addRegion(int offset, int length, HighlightRegionType type) {
+    _regions.add(new HighlightRegion(type, offset, length));
+  }
+
+  bool _addRegion_node(AstNode node, HighlightRegionType type) {
+    int offset = node.offset;
+    int length = node.length;
+    _addRegion(offset, length, type);
+    return true;
+  }
+
+  void _addRegion_nodeStart_tokenEnd(
+      AstNode a, Token b, HighlightRegionType type) {
+    int offset = a.offset;
+    int end = b.end;
+    _addRegion(offset, end - offset, type);
+  }
+
+  void _addRegion_token(Token token, HighlightRegionType type) {
+    if (token != null) {
+      int offset = token.offset;
+      int length = token.length;
+      _addRegion(offset, length, type);
+    }
+  }
+
+  void _addRegion_tokenStart_tokenEnd(
+      Token a, Token b, HighlightRegionType type) {
+    int offset = a.offset;
+    int end = b.end;
+    _addRegion(offset, end - offset, type);
+  }
+}
+
+/**
+ * An AST visitor for [DartUnitHighlightsComputer2].
+ */
+class _DartUnitHighlightsComputerVisitor2 extends RecursiveAstVisitor<Object> {
+  final DartUnitHighlightsComputer2 computer;
+
+  _DartUnitHighlightsComputerVisitor2(this.computer);
+
+  @override
+  Object visitAnnotation(Annotation node) {
+    computer._addIdentifierRegion_annotation(node);
+    return super.visitAnnotation(node);
+  }
+
+  @override
+  Object visitAsExpression(AsExpression node) {
+    computer._addRegion_token(node.asOperator, HighlightRegionType.BUILT_IN);
+    return super.visitAsExpression(node);
+  }
+
+  @override
+  Object visitAssertStatement(AssertStatement node) {
+    computer._addRegion_token(node.assertKeyword, HighlightRegionType.KEYWORD);
+    return super.visitAssertStatement(node);
+  }
+
+  @override
+  Object visitAwaitExpression(AwaitExpression node) {
+    computer._addRegion_token(node.awaitKeyword, HighlightRegionType.BUILT_IN);
+    return super.visitAwaitExpression(node);
+  }
+
+  @override
+  Object visitBlockFunctionBody(BlockFunctionBody node) {
+    _addRegions_functionBody(node);
+    return super.visitBlockFunctionBody(node);
+  }
+
+  @override
+  Object visitBooleanLiteral(BooleanLiteral node) {
+    computer._addRegion_node(node, HighlightRegionType.KEYWORD);
+    computer._addRegion_node(node, HighlightRegionType.LITERAL_BOOLEAN);
+    return super.visitBooleanLiteral(node);
+  }
+
+  @override
+  Object visitBreakStatement(BreakStatement node) {
+    computer._addRegion_token(node.breakKeyword, HighlightRegionType.KEYWORD);
+    return super.visitBreakStatement(node);
+  }
+
+  @override
+  Object visitCatchClause(CatchClause node) {
+    computer._addRegion_token(node.catchKeyword, HighlightRegionType.KEYWORD);
+    computer._addRegion_token(node.onKeyword, HighlightRegionType.BUILT_IN);
+    return super.visitCatchClause(node);
+  }
+
+  @override
+  Object visitClassDeclaration(ClassDeclaration node) {
+    computer._addRegion_token(node.classKeyword, HighlightRegionType.KEYWORD);
+    computer._addRegion_token(
+        node.abstractKeyword, HighlightRegionType.BUILT_IN);
+    return super.visitClassDeclaration(node);
+  }
+
+  @override
+  Object visitClassTypeAlias(ClassTypeAlias node) {
+    computer._addRegion_token(
+        node.abstractKeyword, HighlightRegionType.BUILT_IN);
+    return super.visitClassTypeAlias(node);
+  }
+
+  @override
+  Object visitConstructorDeclaration(ConstructorDeclaration node) {
+    computer._addRegion_token(
+        node.externalKeyword, HighlightRegionType.BUILT_IN);
+    computer._addRegion_token(
+        node.factoryKeyword, HighlightRegionType.BUILT_IN);
+    return super.visitConstructorDeclaration(node);
+  }
+
+  @override
+  Object visitContinueStatement(ContinueStatement node) {
+    computer._addRegion_token(
+        node.continueKeyword, HighlightRegionType.KEYWORD);
+    return super.visitContinueStatement(node);
+  }
+
+  @override
+  Object visitDoStatement(DoStatement node) {
+    computer._addRegion_token(node.doKeyword, HighlightRegionType.KEYWORD);
+    computer._addRegion_token(node.whileKeyword, HighlightRegionType.KEYWORD);
+    return super.visitDoStatement(node);
+  }
+
+  @override
+  Object visitDoubleLiteral(DoubleLiteral node) {
+    computer._addRegion_node(node, HighlightRegionType.LITERAL_DOUBLE);
+    return super.visitDoubleLiteral(node);
+  }
+
+  @override
+  Object visitEnumDeclaration(EnumDeclaration node) {
+    computer._addRegion_token(node.enumKeyword, HighlightRegionType.KEYWORD);
+    return super.visitEnumDeclaration(node);
+  }
+
+  @override
+  Object visitExportDirective(ExportDirective node) {
+    computer._addRegion_node(node, HighlightRegionType.DIRECTIVE);
+    computer._addRegion_token(node.keyword, HighlightRegionType.BUILT_IN);
+    return super.visitExportDirective(node);
+  }
+
+  @override
+  Object visitExpressionFunctionBody(ExpressionFunctionBody node) {
+    _addRegions_functionBody(node);
+    return super.visitExpressionFunctionBody(node);
+  }
+
+  @override
+  Object visitFieldDeclaration(FieldDeclaration node) {
+    computer._addRegion_token(node.staticKeyword, HighlightRegionType.BUILT_IN);
+    return super.visitFieldDeclaration(node);
+  }
+
+  @override
+  Object visitForEachStatement(ForEachStatement node) {
+    computer._addRegion_token(node.awaitKeyword, HighlightRegionType.BUILT_IN);
+    computer._addRegion_token(node.forKeyword, HighlightRegionType.KEYWORD);
+    computer._addRegion_token(node.inKeyword, HighlightRegionType.KEYWORD);
+    return super.visitForEachStatement(node);
+  }
+
+  @override
+  Object visitForStatement(ForStatement node) {
+    computer._addRegion_token(node.forKeyword, HighlightRegionType.KEYWORD);
+    return super.visitForStatement(node);
+  }
+
+  @override
+  Object visitFunctionDeclaration(FunctionDeclaration node) {
+    computer._addRegion_token(
+        node.externalKeyword, HighlightRegionType.BUILT_IN);
+    computer._addRegion_token(
+        node.propertyKeyword, HighlightRegionType.BUILT_IN);
+    return super.visitFunctionDeclaration(node);
+  }
+
+  @override
+  Object visitFunctionTypeAlias(FunctionTypeAlias node) {
+    computer._addRegion_token(
+        node.typedefKeyword, HighlightRegionType.BUILT_IN);
+    return super.visitFunctionTypeAlias(node);
+  }
+
+  @override
+  Object visitHideCombinator(HideCombinator node) {
+    computer._addRegion_token(node.keyword, HighlightRegionType.BUILT_IN);
+    return super.visitHideCombinator(node);
+  }
+
+  @override
+  Object visitIfStatement(IfStatement node) {
+    computer._addRegion_token(node.ifKeyword, HighlightRegionType.KEYWORD);
+    return super.visitIfStatement(node);
+  }
+
+  @override
+  Object visitImplementsClause(ImplementsClause node) {
+    computer._addRegion_token(
+        node.implementsKeyword, HighlightRegionType.BUILT_IN);
+    return super.visitImplementsClause(node);
+  }
+
+  @override
+  Object visitImportDirective(ImportDirective node) {
+    computer._addRegion_node(node, HighlightRegionType.DIRECTIVE);
+    computer._addRegion_token(node.keyword, HighlightRegionType.BUILT_IN);
+    computer._addRegion_token(
+        node.deferredKeyword, HighlightRegionType.BUILT_IN);
+    computer._addRegion_token(node.asKeyword, HighlightRegionType.BUILT_IN);
+    return super.visitImportDirective(node);
+  }
+
+  @override
+  Object visitInstanceCreationExpression(InstanceCreationExpression node) {
+    computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+    return super.visitInstanceCreationExpression(node);
+  }
+
+  @override
+  Object visitIntegerLiteral(IntegerLiteral node) {
+    computer._addRegion_node(node, HighlightRegionType.LITERAL_INTEGER);
+    return super.visitIntegerLiteral(node);
+  }
+
+  @override
+  Object visitIsExpression(IsExpression node) {
+    computer._addRegion_token(node.isOperator, HighlightRegionType.KEYWORD);
+    return super.visitIsExpression(node);
+  }
+
+  @override
+  Object visitLibraryDirective(LibraryDirective node) {
+    computer._addRegion_node(node, HighlightRegionType.DIRECTIVE);
+    computer._addRegion_token(node.keyword, HighlightRegionType.BUILT_IN);
+    return super.visitLibraryDirective(node);
+  }
+
+  @override
+  Object visitListLiteral(ListLiteral node) {
+    computer._addRegion_node(node, HighlightRegionType.LITERAL_LIST);
+    computer._addRegion_token(node.constKeyword, HighlightRegionType.KEYWORD);
+    return super.visitListLiteral(node);
+  }
+
+  @override
+  Object visitMapLiteral(MapLiteral node) {
+    computer._addRegion_node(node, HighlightRegionType.LITERAL_MAP);
+    computer._addRegion_token(node.constKeyword, HighlightRegionType.KEYWORD);
+    return super.visitMapLiteral(node);
+  }
+
+  @override
+  Object visitMethodDeclaration(MethodDeclaration node) {
+    computer._addRegion_token(
+        node.externalKeyword, HighlightRegionType.BUILT_IN);
+    computer._addRegion_token(
+        node.modifierKeyword, HighlightRegionType.BUILT_IN);
+    computer._addRegion_token(
+        node.operatorKeyword, HighlightRegionType.BUILT_IN);
+    computer._addRegion_token(
+        node.propertyKeyword, HighlightRegionType.BUILT_IN);
+    return super.visitMethodDeclaration(node);
+  }
+
+  @override
+  Object visitNativeClause(NativeClause node) {
+    computer._addRegion_token(node.nativeKeyword, HighlightRegionType.BUILT_IN);
+    return super.visitNativeClause(node);
+  }
+
+  @override
+  Object visitNativeFunctionBody(NativeFunctionBody node) {
+    computer._addRegion_token(node.nativeKeyword, HighlightRegionType.BUILT_IN);
+    return super.visitNativeFunctionBody(node);
+  }
+
+  @override
+  Object visitPartDirective(PartDirective node) {
+    computer._addRegion_node(node, HighlightRegionType.DIRECTIVE);
+    computer._addRegion_token(node.keyword, HighlightRegionType.BUILT_IN);
+    return super.visitPartDirective(node);
+  }
+
+  @override
+  Object visitPartOfDirective(PartOfDirective node) {
+    computer._addRegion_node(node, HighlightRegionType.DIRECTIVE);
+    computer._addRegion_tokenStart_tokenEnd(
+        node.partKeyword, node.ofKeyword, HighlightRegionType.BUILT_IN);
+    return super.visitPartOfDirective(node);
+  }
+
+  @override
+  Object visitRethrowExpression(RethrowExpression node) {
+    computer._addRegion_token(node.rethrowKeyword, HighlightRegionType.KEYWORD);
+    return super.visitRethrowExpression(node);
+  }
+
+  @override
+  Object visitReturnStatement(ReturnStatement node) {
+    computer._addRegion_token(node.returnKeyword, HighlightRegionType.KEYWORD);
+    return super.visitReturnStatement(node);
+  }
+
+  @override
+  Object visitShowCombinator(ShowCombinator node) {
+    computer._addRegion_token(node.keyword, HighlightRegionType.BUILT_IN);
+    return super.visitShowCombinator(node);
+  }
+
+  @override
+  Object visitSimpleIdentifier(SimpleIdentifier node) {
+    computer._addIdentifierRegion(node);
+    return super.visitSimpleIdentifier(node);
+  }
+
+  @override
+  Object visitSimpleStringLiteral(SimpleStringLiteral node) {
+    computer._addRegion_node(node, HighlightRegionType.LITERAL_STRING);
+    return super.visitSimpleStringLiteral(node);
+  }
+
+  @override
+  Object visitSuperConstructorInvocation(SuperConstructorInvocation node) {
+    computer._addRegion_token(node.superKeyword, HighlightRegionType.KEYWORD);
+    return super.visitSuperConstructorInvocation(node);
+  }
+
+  @override
+  Object visitSwitchCase(SwitchCase node) {
+    computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+    return super.visitSwitchCase(node);
+  }
+
+  @override
+  Object visitSwitchDefault(SwitchDefault node) {
+    computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+    return super.visitSwitchDefault(node);
+  }
+
+  @override
+  Object visitSwitchStatement(SwitchStatement node) {
+    computer._addRegion_token(node.switchKeyword, HighlightRegionType.KEYWORD);
+    return super.visitSwitchStatement(node);
+  }
+
+  @override
+  Object visitThisExpression(ThisExpression node) {
+    computer._addRegion_token(node.thisKeyword, HighlightRegionType.KEYWORD);
+    return super.visitThisExpression(node);
+  }
+
+  @override
+  Object visitTryStatement(TryStatement node) {
+    computer._addRegion_token(node.tryKeyword, HighlightRegionType.KEYWORD);
+    computer._addRegion_token(node.finallyKeyword, HighlightRegionType.KEYWORD);
+    return super.visitTryStatement(node);
+  }
+
+  @override
+  Object visitTypeName(TypeName node) {
+    DartType type = node.type;
+    if (type != null) {
+      if (type.isDynamic && node.name.name == "dynamic") {
+        computer._addRegion_node(node, HighlightRegionType.TYPE_NAME_DYNAMIC);
+        return null;
+      }
+    }
+    return super.visitTypeName(node);
+  }
+
+  @override
+  Object visitVariableDeclarationList(VariableDeclarationList node) {
+    computer._addRegion_token(node.keyword, HighlightRegionType.KEYWORD);
+    return super.visitVariableDeclarationList(node);
+  }
+
+  @override
+  Object visitWhileStatement(WhileStatement node) {
+    computer._addRegion_token(node.whileKeyword, HighlightRegionType.KEYWORD);
+    return super.visitWhileStatement(node);
+  }
+
+  @override
+  Object visitWithClause(WithClause node) {
+    computer._addRegion_token(node.withKeyword, HighlightRegionType.KEYWORD);
+    return super.visitWithClause(node);
+  }
+
+  @override
+  Object visitYieldStatement(YieldStatement node) {
+    Token keyword = node.yieldKeyword;
+    Token star = node.star;
+    int offset = keyword.offset;
+    int end = star != null ? star.end : keyword.end;
+    computer._addRegion(offset, end - offset, HighlightRegionType.BUILT_IN);
+    return super.visitYieldStatement(node);
+  }
+
+  void _addRegions_functionBody(FunctionBody node) {
+    Token keyword = node.keyword;
+    if (keyword != null) {
+      Token star = node.star;
+      int offset = keyword.offset;
+      int end = star != null ? star.end : keyword.end;
+      computer._addRegion(offset, end - offset, HighlightRegionType.BUILT_IN);
+    }
+  }
+}
diff --git a/pkg/analysis_server/lib/src/computer/computer_navigation.dart b/pkg/analysis_server/lib/src/computer/computer_navigation.dart
index 1297379..b1caf9b 100644
--- a/pkg/analysis_server/lib/src/computer/computer_navigation.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_navigation.dart
@@ -262,7 +262,7 @@
     if (element != null) {
       Source source = element.source;
       if (element.context.exists(source)) {
-        computer._addRegion_tokenStart_nodeEnd(node.keyword, node.uri, element);
+        computer._addRegionForNode(node.uri, element);
       }
     }
   }
diff --git a/pkg/analysis_server/lib/src/constants.dart b/pkg/analysis_server/lib/src/constants.dart
index 63dc297..b4acd97 100644
--- a/pkg/analysis_server/lib/src/constants.dart
+++ b/pkg/analysis_server/lib/src/constants.dart
@@ -28,6 +28,8 @@
 const String ANALYSIS_GET_NAVIGATION = 'analysis.getNavigation';
 const String ANALYSIS_REANALYZE = 'analysis.reanalyze';
 const String ANALYSIS_SET_ANALYSIS_ROOTS = 'analysis.setAnalysisRoots';
+const String ANALYSIS_SET_GENERAL_SUBSCRIPTIONS =
+    'analysis.setGeneralSubscriptions';
 const String ANALYSIS_SET_PRIORITY_FILES = 'analysis.setPriorityFiles';
 const String ANALYSIS_SET_SUBSCRIPTIONS = 'analysis.setSubscriptions';
 const String ANALYSIS_UPDATE_CONTENT = 'analysis.updateContent';
@@ -36,6 +38,7 @@
 //
 // Analysis notifications
 //
+const String ANALYSIS_ANALYZED_FILES = 'analysis.analyzedFiles';
 const String ANALYSIS_ERRORS = 'analysis.errors';
 const String ANALYSIS_HIGHLIGHTS = 'analysis.highlights';
 const String ANALYSIS_NAVIGATION = 'analysis.navigation';
diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index f75b702..fb1c3b4 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -6,6 +6,7 @@
 
 import 'dart:async';
 import 'dart:collection';
+import 'dart:convert';
 import 'dart:core' hide Resource;
 
 import 'package:analysis_server/src/analysis_server.dart';
@@ -13,35 +14,52 @@
 import 'package:analysis_server/uri/resolver_provider.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
+import 'package:analyzer/source/analysis_options_provider.dart';
 import 'package:analyzer/source/package_map_resolver.dart';
+import 'package:analyzer/source/path_filter.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/java_io.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/source_io.dart';
+import 'package:package_config/packages.dart';
+import 'package:package_config/packages_file.dart' as pkgfile show parse;
+import 'package:package_config/src/packages_impl.dart' show MapPackages;
 import 'package:path/path.dart' as pathos;
 import 'package:watcher/watcher.dart';
-
-/**
- * The name of `packages` folders.
- */
-const String PACKAGES_NAME = 'packages';
-
-/**
- * File name of pubspec files.
- */
-const String PUBSPEC_NAME = 'pubspec.yaml';
+import 'package:yaml/yaml.dart';
 
 /**
  * Class that maintains a mapping from included/excluded paths to a set of
  * folders that should correspond to analysis contexts.
  */
-abstract class ContextManager {
+abstract class AbstractContextManager implements ContextManager {
+
+  /**
+   * Temporary flag to hide WIP .packages support (DEP 5).
+   */
+  static bool ENABLE_PACKAGESPEC_SUPPORT = false;
+
   /**
    * The name of the `lib` directory.
    */
   static const String LIB_DIR_NAME = 'lib';
 
   /**
+   * The name of `packages` folders.
+   */
+  static const String PACKAGES_NAME = 'packages';
+
+  /**
+   * File name of pubspec files.
+   */
+  static const String PUBSPEC_NAME = 'pubspec.yaml';
+
+  /**
+   * File name of package spec files.
+   */
+  static const String PACKAGE_SPEC_NAME = '.packages';
+
+  /**
    * [_ContextInfo] object for each included directory in the most
    * recent successful call to [setRoots].
    */
@@ -93,12 +111,16 @@
    */
   final OptimizingPubPackageMapProvider _packageMapProvider;
 
+  /// Provider of analysis options.
+  AnalysisOptionsProvider analysisOptionsProvider =
+      new AnalysisOptionsProvider();
+
   /**
    * The instrumentation service used to report instrumentation data.
    */
   final InstrumentationService _instrumentationService;
 
-  ContextManager(this.resourceProvider, this.packageResolverProvider,
+  AbstractContextManager(this.resourceProvider, this.packageResolverProvider,
       this._packageMapProvider, this._instrumentationService) {
     pathContext = resourceProvider.pathContext;
   }
@@ -106,7 +128,8 @@
   /**
    * Create and return a new analysis context.
    */
-  AnalysisContext addContext(Folder folder, UriResolver packageUriResolver);
+  AnalysisContext addContext(
+      Folder folder, UriResolver packageUriResolver, Packages packages);
 
   /**
    * Called when the set of files associated with a context have changed (or
@@ -145,10 +168,7 @@
     return flushedFiles.toList(growable: false);
   }
 
-  /**
-   * Return a list containing all of the contexts contained in the given
-   * [analysisRoot].
-   */
+  @override
   List<AnalysisContext> contextsInAnalysisRoot(Folder analysisRoot) {
     List<AnalysisContext> contexts = <AnalysisContext>[];
     _contexts.forEach((Folder contextFolder, _ContextInfo info) {
@@ -166,10 +186,7 @@
     // Do nothing.
   }
 
-  /**
-   * Returns `true` if the given absolute [path] is in one of the current
-   * root folders and is not excluded.
-   */
+  @override
   bool isInAnalysisRoot(String path) {
     // check if excluded
     if (_isExcluded(path)) {
@@ -185,12 +202,26 @@
     return false;
   }
 
-  /**
-   * Rebuild the set of contexts from scratch based on the data last sent to
-   * setRoots(). Only contexts contained in the given list of analysis [roots]
-   * will be rebuilt, unless the list is `null`, in which case every context
-   * will be rebuilt.
-   */
+  /// Process [options] for the context [folder].
+  void processOptionsForContext(Folder folder, Map<String, YamlNode> options) {
+    _ContextInfo info = _contexts[folder];
+    if (info == null) {
+      return;
+    }
+    YamlMap analyzer = options['analyzer'];
+    if (analyzer == null) {
+      // No options for analyzer.
+      return;
+    }
+
+    // Set ignore patterns.
+    YamlList exclude = analyzer['exclude'];
+    if (exclude != null) {
+      setIgnorePatternsForContext(folder, exclude);
+    }
+  }
+
+  @override
   void refresh(List<Resource> roots) {
     // Destroy old contexts
     List<Folder> contextFolders = _contexts.keys.toList();
@@ -215,10 +246,17 @@
    */
   void removeContext(Folder folder);
 
-  /**
-   * Change the set of paths which should be used as starting points to
-   * determine the context directories.
-   */
+  /// Sets the [ignorePatterns] for the context [folder].
+  void setIgnorePatternsForContext(Folder folder, List<String> ignorePatterns) {
+    _ContextInfo info = _contexts[folder];
+    if (info == null) {
+      return;
+    }
+    var pathFilter = info.pathFilter;
+    pathFilter.setIgnorePatterns(ignorePatterns);
+  }
+
+  @override
   void setRoots(List<String> includedPaths, List<String> excludedPaths,
       Map<String, String> packageRoots) {
     this.packageRoots = packageRoots;
@@ -312,7 +350,7 @@
    * Called when the package map for a context has changed.
    */
   void updateContextPackageUriResolver(
-      Folder contextFolder, UriResolver packageUriResolver);
+      Folder contextFolder, UriResolver packageUriResolver, Packages packages);
 
   /**
    * Resursively adds all Dart and HTML files to the [changeSet].
@@ -332,6 +370,10 @@
     }
     for (Resource child in children) {
       String path = child.path;
+      // Path is being ignored.
+      if (info.ignored(path)) {
+        continue;
+      }
       // add files, recurse into folders
       if (child is File) {
         // ignore if should not be analyzed at all
@@ -375,7 +417,7 @@
     for (Resource child in children) {
       String path = child.path;
       // ignore excluded files or folders
-      if (_isExcluded(path) || info.excludes(path)) {
+      if (_isExcluded(path) || info.excludes(path) || info.ignored(path)) {
         continue;
       }
       // add files, recurse into folders
@@ -405,6 +447,22 @@
     info.dependencySubscriptions.clear();
   }
 
+  void _checkForPackagespecUpdate(
+      String path, _ContextInfo info, Folder folder) {
+    // Check to see if this is the .packages file for this context and if so,
+    // update the context's source factory.
+    if (pathContext.basename(path) == PACKAGE_SPEC_NAME &&
+        info.isPathToPackageDescription(path)) {
+      File packagespec = resourceProvider.getFile(path);
+      if (packagespec.exists) {
+        Packages packages = _readPackagespec(packagespec);
+        if (packages != null) {
+          updateContextPackageUriResolver(folder, null, packages);
+        }
+      }
+    }
+  }
+
   /**
    * Compute the appropriate package URI resolver for [folder], and store
    * dependency information in [info]. Return `null` if no package map can
@@ -485,16 +543,32 @@
    * Create a new empty context associated with [folder].
    */
   _ContextInfo _createContext(
-      Folder folder, File pubspecFile, List<_ContextInfo> children) {
+      Folder folder, File packagespecFile, List<_ContextInfo> children) {
     _ContextInfo info = new _ContextInfo(
-        folder, pubspecFile, children, normalizedPackageRoots[folder.path]);
+        folder, packagespecFile, children, normalizedPackageRoots[folder.path]);
     _contexts[folder] = info;
+    var options = analysisOptionsProvider.getOptions(folder);
+    processOptionsForContext(folder, options);
     info.changeSubscription = folder.changes.listen((WatchEvent event) {
       _handleWatchEvent(folder, info, event);
     });
     try {
-      UriResolver packageUriResolver = _computePackageUriResolver(folder, info);
-      info.context = addContext(folder, packageUriResolver);
+      Packages packages;
+      UriResolver packageUriResolver;
+
+      if (ENABLE_PACKAGESPEC_SUPPORT) {
+        // Try .packages first.
+        if (pathos.basename(packagespecFile.path) == PACKAGE_SPEC_NAME) {
+          packages = _readPackagespec(packagespecFile);
+        }
+      }
+
+      // Next resort to a package uri resolver.
+      if (packages == null) {
+        packageUriResolver = _computePackageUriResolver(folder, info);
+      }
+
+      info.context = addContext(folder, packageUriResolver, packages);
       info.context.name = folder.path;
     } catch (_) {
       info.changeSubscription.cancel();
@@ -510,13 +584,13 @@
    * created for them and excluded from the context associated with the
    * [folder].
    *
-   * If [withPubspecOnly] is `true`, a context will be created only if there
-   * is a 'pubspec.yaml' file in the [folder].
+   * If [withPackageSpecOnly] is `true`, a context will be created only if there
+   * is a 'pubspec.yaml' or '.packages' file in the [folder].
    *
-   * Returns create pubspec-based contexts.
+   * Returns created contexts.
    */
-  List<_ContextInfo> _createContexts(Folder folder, bool withPubspecOnly) {
-    // try to find subfolders with pubspec files
+  List<_ContextInfo> _createContexts(Folder folder, bool withPackageSpecOnly) {
+    // Try to find subfolders with pubspecs or .packages files.
     List<_ContextInfo> children = <_ContextInfo>[];
     try {
       for (Resource child in folder.getChildren()) {
@@ -528,20 +602,31 @@
       // The directory either doesn't exist or cannot be read. Either way, there
       // are no subfolders that need to be added.
     }
-    // check whether there is a pubspec in the folder
-    File pubspecFile = folder.getChild(PUBSPEC_NAME);
-    if (pubspecFile.exists) {
+
+    File packageSpec;
+
+    if (ENABLE_PACKAGESPEC_SUPPORT) {
+      // Start by looking for .packages.
+      packageSpec = folder.getChild(PACKAGE_SPEC_NAME);
+    }
+
+    // Fall back to looking for a pubspec.
+    if (packageSpec == null || !packageSpec.exists) {
+      packageSpec = folder.getChild(PUBSPEC_NAME);
+    }
+
+    if (packageSpec.exists) {
       return <_ContextInfo>[
-        _createContextWithSources(folder, pubspecFile, children)
+        _createContextWithSources(folder, packageSpec, children)
       ];
     }
-    // no pubspec, done
-    if (withPubspecOnly) {
+    // No packagespec? Done.
+    if (withPackageSpecOnly) {
       return children;
     }
-    // OK, create a context without a pubspec
+    // OK, create a context without a packagespec.
     return <_ContextInfo>[
-      _createContextWithSources(folder, pubspecFile, children)
+      _createContextWithSources(folder, packageSpec, children)
     ];
   }
 
@@ -571,11 +656,11 @@
   }
 
   /**
-   * Extract a new [pubspecFile]-based context from [oldInfo].
+   * Extract a new [packagespecFile]-based context from [oldInfo].
    */
-  void _extractContext(_ContextInfo oldInfo, File pubspecFile) {
-    Folder newFolder = pubspecFile.parent;
-    _ContextInfo newInfo = _createContext(newFolder, pubspecFile, []);
+  void _extractContext(_ContextInfo oldInfo, File packagespecFile) {
+    Folder newFolder = packagespecFile.parent;
+    _ContextInfo newInfo = _createContext(newFolder, packagespecFile, []);
     newInfo.parent = oldInfo;
     // prepare sources to extract
     Map<String, Source> extractedSources = new HashMap<String, Source>();
@@ -620,18 +705,55 @@
     if (info.excludes(path)) {
       return;
     }
+    if (info.ignored(path)) {
+      return;
+    }
     // handle the change
     switch (event.type) {
       case ChangeType.ADD:
         if (_isInPackagesDir(path, folder)) {
           return;
         }
+
         Resource resource = resourceProvider.getResource(path);
-        // pubspec was added in a sub-folder, extract a new context
-        if (_isPubspec(path) && info.isRoot && !info.isPubspec(path)) {
-          _extractContext(info, resource);
-          return;
+
+        if (ENABLE_PACKAGESPEC_SUPPORT) {
+          String directoryPath = pathContext.dirname(path);
+
+          // Check to see if we need to create a new context.
+          if (info.isRoot) {
+
+            // Only create a new context if this is not the same directory
+            // described by our info object.
+            if (info.folder.path != directoryPath) {
+              if (_isPubspec(path)) {
+                // Check for a sibling .packages file.
+                if (!resourceProvider.getFile(
+                    pathos.join(directoryPath, PACKAGE_SPEC_NAME)).exists) {
+                  _extractContext(info, resource);
+                  return;
+                }
+              }
+              if (_isPackagespec(path)) {
+                // Check for a sibling pubspec.yaml file.
+                if (!resourceProvider
+                    .getFile(pathos.join(directoryPath, PUBSPEC_NAME)).exists) {
+                  _extractContext(info, resource);
+                  return;
+                }
+              }
+            }
+          }
+        } else {
+          // pubspec was added in a sub-folder, extract a new context
+          if (_isPubspec(path) &&
+              info.isRoot &&
+              !info.isPathToPackageDescription(path)) {
+            _extractContext(info, resource);
+            return;
+          }
         }
+
         // If the file went away and was replaced by a folder before we
         // had a chance to process the event, resource might be a Folder.  In
         // that case don't add it.
@@ -647,11 +769,41 @@
         }
         break;
       case ChangeType.REMOVE:
-        // pubspec was removed, merge the context into its parent
-        if (info.isPubspec(path) && !info.isRoot) {
-          _mergeContext(info);
-          return;
+
+        // If package spec info is removed, check to see if we can merge contexts.
+        // Note that it's important to verify that there is NEITHER a .packages nor a
+        // lingering pubspec.yaml before merging.
+        if (!info.isRoot) {
+          if (ENABLE_PACKAGESPEC_SUPPORT) {
+            String directoryPath = pathContext.dirname(path);
+
+            // Only merge if this is the same directory described by our info object.
+            if (info.folder.path == directoryPath) {
+              if (_isPubspec(path)) {
+                // Check for a sibling .packages file.
+                if (!resourceProvider.getFile(
+                    pathos.join(directoryPath, PACKAGE_SPEC_NAME)).exists) {
+                  _mergeContext(info);
+                  return;
+                }
+              }
+              if (_isPackagespec(path)) {
+                // Check for a sibling pubspec.yaml file.
+                if (!resourceProvider
+                    .getFile(pathos.join(directoryPath, PUBSPEC_NAME)).exists) {
+                  _mergeContext(info);
+                  return;
+                }
+              }
+            }
+          } else {
+            if (info.isPathToPackageDescription(path)) {
+              _mergeContext(info);
+              return;
+            }
+          }
         }
+
         List<Source> sources = info.context.getSourcesWithFullName(path);
         if (!sources.isEmpty) {
           ChangeSet changeSet = new ChangeSet();
@@ -674,6 +826,9 @@
         break;
     }
 
+    //TODO(pquitslund): find the right place for this
+    _checkForPackagespecUpdate(path, info, folder);
+
     if (info.packageMapInfo != null &&
         info.packageMapInfo.isChangedDependency(path, resourceProvider)) {
       _recomputePackageUriResolver(info);
@@ -683,9 +838,7 @@
   /**
    * Returns `true` if the given [path] is excluded by [excludedPaths].
    */
-  bool _isExcluded(String path) {
-    return _isExcludedBy(excludedPaths, path);
-  }
+  bool _isExcluded(String path) => _isExcludedBy(excludedPaths, path);
 
   /**
    * Returns `true` if the given [path] is excluded by [excludedPaths].
@@ -709,12 +862,10 @@
     return pathParts.contains(PACKAGES_NAME);
   }
 
-  /**
-   * Returns `true` if the given absolute [path] is a pubspec file.
-   */
-  bool _isPubspec(String path) {
-    return pathContext.basename(path) == PUBSPEC_NAME;
-  }
+  bool _isPackagespec(String path) =>
+      pathContext.basename(path) == PACKAGE_SPEC_NAME;
+
+  bool _isPubspec(String path) => pathContext.basename(path) == PUBSPEC_NAME;
 
   /**
    * Merges [info] context into its parent.
@@ -735,6 +886,18 @@
     }
   }
 
+  Packages _readPackagespec(File specFile) {
+    try {
+      String contents = specFile.readAsStringSync();
+      Map<String, Uri> map =
+          pkgfile.parse(UTF8.encode(contents), new Uri.file(specFile.path));
+      return new MapPackages(map);
+    } catch (_) {
+      //TODO(pquitslund): consider creating an error for the spec file.
+      return null;
+    }
+  }
+
   /**
    * Recompute the package URI resolver for the context described by [info],
    * and update the client appropriately.
@@ -746,7 +909,7 @@
     // "pub list" is in progress is just going to get thrown away anyhow.
     UriResolver packageUriResolver =
         _computePackageUriResolver(info.folder, info);
-    updateContextPackageUriResolver(info.folder, packageUriResolver);
+    updateContextPackageUriResolver(info.folder, packageUriResolver, null);
   }
 
   /**
@@ -766,6 +929,105 @@
 }
 
 /**
+ * Class that maintains a mapping from included/excluded paths to a set of
+ * folders that should correspond to analysis contexts.
+ */
+abstract class ContextManager {
+  // TODO(brianwilkerson) Support:
+  //   setting the default analysis options
+  //   setting the default content cache
+  //   setting the default SDK
+  //   maintaining AnalysisContext.folderMap (or remove it)
+  //   telling server when a context has been added or removed (see onContextsChanged)
+  //   telling server when a context needs to be re-analyzed
+  //   notifying the client when results should be flushed
+  //   using analyzeFileFunctions to determine which files to analyze
+  //
+  // TODO(brianwilkerson) Move this class to a public library.
+
+//  /**
+//   * The default options used to create new analysis contexts.
+//   */
+//  AnalysisOptionsImpl get defaultOptions;
+
+  /**
+   * Return the list of excluded paths (folders and files) most recently passed
+   * to [setRoots].
+   */
+  List<String> get excludedPaths;
+
+  /**
+   * Return the list of included paths (folders and files) most recently passed
+   * to [setRoots].
+   */
+  List<String> get includedPaths;
+
+//  /**
+//   * A stream that is notified when contexts are added or removed.
+//   */
+//  Stream<ContextsChangedEvent> get onContextsChanged;
+
+  /**
+   * Return a list containing all of the contexts contained in the given
+   * [analysisRoot].
+   */
+  List<AnalysisContext> contextsInAnalysisRoot(Folder analysisRoot);
+
+  /**
+   * Return `true` if the given absolute [path] is in one of the current
+   * root folders and is not excluded.
+   */
+  bool isInAnalysisRoot(String path);
+
+  /**
+   * Rebuild the set of contexts from scratch based on the data last sent to
+   * [setRoots]. Only contexts contained in the given list of analysis [roots]
+   * will be rebuilt, unless the list is `null`, in which case every context
+   * will be rebuilt.
+   */
+  void refresh(List<Resource> roots);
+
+  /**
+   * Change the set of paths which should be used as starting points to
+   * determine the context directories.
+   */
+  void setRoots(List<String> includedPaths, List<String> excludedPaths,
+      Map<String, String> packageRoots);
+}
+
+/**
+ * An indication that one or more contexts were added, changed, or removed.
+ *
+ * The lists of [added], [changed] and [removed] contexts will not contain
+ * duplications (that is, a single context will not be in any list multiple
+ * times), nor will there be any overlap between the lists (that is, a single
+ * context will not be in more than one list).
+ */
+class ContextsChangedEvent {
+  /**
+   * The contexts that were added to the server.
+   */
+  final List<AnalysisContext> added;
+
+  /**
+   * The contexts that were changed.
+   */
+  final List<AnalysisContext> changed;
+
+  /**
+   * The contexts that were removed from the server.
+   */
+  final List<AnalysisContext> removed;
+
+  /**
+   * Initialize a newly created event to indicate which contexts have changed.
+   */
+  ContextsChangedEvent({this.added: AnalysisContext.EMPTY_LIST,
+      this.changed: AnalysisContext.EMPTY_LIST,
+      this.removed: AnalysisContext.EMPTY_LIST});
+}
+
+/**
  * Information tracked by the [ContextManager] for each context.
  */
 class _ContextInfo {
@@ -774,6 +1036,9 @@
    */
   final Folder folder;
 
+  /// The [PathFilter] used to filter sources from being analyzed.
+  final PathFilter pathFilter;
+
   /**
    * The enclosed pubspec-based contexts.
    */
@@ -790,9 +1055,9 @@
   _ContextInfo parent;
 
   /**
-   * The `pubspec.yaml` file path for this context.
+   * The package description file path for this context.
    */
-  String pubspecPath;
+  String packageDescriptionPath;
 
   /**
    * Stream subscription we are using to watch the context's directory for
@@ -825,8 +1090,11 @@
    */
   OptimizingPubPackageMapInfo packageMapInfo;
 
-  _ContextInfo(this.folder, File pubspecFile, this.children, this.packageRoot) {
-    pubspecPath = pubspecFile.path;
+  _ContextInfo(
+      Folder folder, File packagespecFile, this.children, this.packageRoot)
+      : folder = folder,
+        pathFilter = new PathFilter(folder.path, null) {
+    packageDescriptionPath = packagespecFile.path;
     for (_ContextInfo child in children) {
       child.parent = this;
     }
@@ -849,14 +1117,15 @@
   /**
    * Returns `true` if [resource] is excluded, as it is in one of the children.
    */
-  bool excludesResource(Resource resource) {
-    return excludes(resource.path);
-  }
+  bool excludesResource(Resource resource) => excludes(resource.path);
+
+  /// Returns `true` if  [path] should be ignored.
+  bool ignored(String path) => pathFilter.ignored(path);
 
   /**
-   * Returns `true` if [path] is the pubspec file of this context.
+   * Returns `true` if [path] is the package description file for this context 
+   * (pubspec.yaml or .packages).
    */
-  bool isPubspec(String path) {
-    return path == pubspecPath;
-  }
+  bool isPathToPackageDescription(String path) =>
+      path == packageDescriptionPath;
 }
diff --git a/pkg/analysis_server/lib/src/domain_analysis.dart b/pkg/analysis_server/lib/src/domain_analysis.dart
index c09c511..42afae3 100644
--- a/pkg/analysis_server/lib/src/domain_analysis.dart
+++ b/pkg/analysis_server/lib/src/domain_analysis.dart
@@ -168,6 +168,8 @@
         return reanalyze(request);
       } else if (requestName == ANALYSIS_SET_ANALYSIS_ROOTS) {
         return setAnalysisRoots(request);
+      } else if (requestName == ANALYSIS_SET_GENERAL_SUBSCRIPTIONS) {
+        return setGeneralSubscriptions(request);
       } else if (requestName == ANALYSIS_SET_PRIORITY_FILES) {
         return setPriorityFiles(request);
       } else if (requestName == ANALYSIS_SET_SUBSCRIPTIONS) {
@@ -191,7 +193,7 @@
         new AnalysisReanalyzeParams.fromRequest(request);
     List<String> roots = params.roots;
     if (roots == null || roots.isNotEmpty) {
-      List<String> includedPaths = server.contextDirectoryManager.includedPaths;
+      List<String> includedPaths = server.contextManager.includedPaths;
       List<Resource> rootResources = null;
       if (roots != null) {
         rootResources = <Resource>[];
@@ -219,6 +221,16 @@
   }
 
   /**
+   * Implement the 'analysis.setGeneralSubscriptions' request.
+   */
+  Response setGeneralSubscriptions(Request request) {
+    AnalysisSetGeneralSubscriptionsParams params =
+        new AnalysisSetGeneralSubscriptionsParams.fromRequest(request);
+    server.setGeneralAnalysisSubscriptions(params.subscriptions);
+    return new AnalysisSetGeneralSubscriptionsResult().toResponse(request.id);
+  }
+
+  /**
    * Implement the 'analysis.setPriorityFiles' request.
    */
   Response setPriorityFiles(Request request) {
diff --git a/pkg/analysis_server/lib/src/domain_completion.dart b/pkg/analysis_server/lib/src/domain_completion.dart
index cd9b426..a956a7d 100644
--- a/pkg/analysis_server/lib/src/domain_completion.dart
+++ b/pkg/analysis_server/lib/src/domain_completion.dart
@@ -7,9 +7,10 @@
 import 'dart:async';
 
 import 'package:analysis_server/completion/completion_core.dart'
-    show CompletionRequest;
+    show CompletionRequest, CompletionResult;
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/constants.dart';
+import 'package:analysis_server/src/context_manager.dart';
 import 'package:analysis_server/src/protocol.dart';
 import 'package:analysis_server/src/services/completion/completion_manager.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
@@ -193,13 +194,13 @@
       ++notificationCount;
       performance.logElapseTime("notification $notificationCount send", () {
         sendCompletionNotification(completionId, result.replacementOffset,
-            result.replacementLength, result.suggestions, result.last);
+            result.replacementLength, result.suggestions, result.isLast);
       });
       if (notificationCount == 1) {
         performance.logFirstNotificationComplete('notification 1 complete');
         performance.suggestionCountFirst = result.suggestions.length;
       }
-      if (result.last) {
+      if (result.isLast) {
         performance.notificationCount = notificationCount;
         performance.suggestionCountLast = result.suggestions.length;
         performance.complete();
diff --git a/pkg/analysis_server/lib/src/domain_execution.dart b/pkg/analysis_server/lib/src/domain_execution.dart
index 1d9c2dd..f0b6677 100644
--- a/pkg/analysis_server/lib/src/domain_execution.dart
+++ b/pkg/analysis_server/lib/src/domain_execution.dart
@@ -193,7 +193,7 @@
    * analysis root.
    */
   bool _isInAnalysisRoot(String filePath) =>
-      server.contextDirectoryManager.isInAnalysisRoot(filePath);
+      server.contextManager.isInAnalysisRoot(filePath);
 
   void _reportCurrentFileStatus() {
     for (AnalysisContext context in server.getAnalysisContexts()) {
diff --git a/pkg/analysis_server/lib/src/generated_protocol.dart b/pkg/analysis_server/lib/src/generated_protocol.dart
index 66e92ba..5ecfe20 100644
--- a/pkg/analysis_server/lib/src/generated_protocol.dart
+++ b/pkg/analysis_server/lib/src/generated_protocol.dart
@@ -69,7 +69,7 @@
       }
       return new ServerGetVersionResult(version);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "server.getVersion result");
+      throw jsonDecoder.mismatch(jsonPath, "server.getVersion result", json);
     }
   }
 
@@ -189,7 +189,7 @@
       }
       return new ServerSetSubscriptionsParams(subscriptions);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "server.setSubscriptions params");
+      throw jsonDecoder.mismatch(jsonPath, "server.setSubscriptions params", json);
     }
   }
 
@@ -288,7 +288,7 @@
       }
       return new ServerConnectedParams(version);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "server.connected params");
+      throw jsonDecoder.mismatch(jsonPath, "server.connected params", json);
     }
   }
 
@@ -416,7 +416,7 @@
       }
       return new ServerErrorParams(isFatal, message, stackTrace);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "server.error params");
+      throw jsonDecoder.mismatch(jsonPath, "server.error params", json);
     }
   }
 
@@ -521,7 +521,7 @@
       }
       return new ServerStatusParams(analysis: analysis, pub: pub);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "server.status params");
+      throw jsonDecoder.mismatch(jsonPath, "server.status params", json);
     }
   }
 
@@ -606,7 +606,7 @@
       }
       return new AnalysisGetErrorsParams(file);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.getErrors params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.getErrors params", json);
     }
   }
 
@@ -684,7 +684,7 @@
       }
       return new AnalysisGetErrorsResult(errors);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.getErrors result");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.getErrors result", json);
     }
   }
 
@@ -785,7 +785,7 @@
       }
       return new AnalysisGetHoverParams(file, offset);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.getHover params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.getHover params", json);
     }
   }
 
@@ -874,7 +874,7 @@
       }
       return new AnalysisGetHoverResult(hovers);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.getHover result");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.getHover result", json);
     }
   }
 
@@ -1000,7 +1000,7 @@
       }
       return new AnalysisGetLibraryDependenciesResult(libraries, packageMap);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.getLibraryDependencies result");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.getLibraryDependencies result", json);
     }
   }
 
@@ -1131,7 +1131,7 @@
       }
       return new AnalysisGetNavigationParams(file, offset, length);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.getNavigation params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.getNavigation params", json);
     }
   }
 
@@ -1265,7 +1265,7 @@
       }
       return new AnalysisGetNavigationResult(files, targets, regions);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.getNavigation result");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.getNavigation result", json);
     }
   }
 
@@ -1346,7 +1346,7 @@
       }
       return new AnalysisReanalyzeParams(roots: roots);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.reanalyze params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.reanalyze params", json);
     }
   }
 
@@ -1514,7 +1514,7 @@
       }
       return new AnalysisSetAnalysisRootsParams(included, excluded, packageRoots: packageRoots);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.setAnalysisRoots params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.setAnalysisRoots params", json);
     }
   }
 
@@ -1582,6 +1582,105 @@
 }
 
 /**
+ * analysis.setGeneralSubscriptions params
+ *
+ * {
+ *   "subscriptions": List<GeneralAnalysisService>
+ * }
+ */
+class AnalysisSetGeneralSubscriptionsParams implements HasToJson {
+  List<GeneralAnalysisService> _subscriptions;
+
+  /**
+   * A list of the services being subscribed to.
+   */
+  List<GeneralAnalysisService> get subscriptions => _subscriptions;
+
+  /**
+   * A list of the services being subscribed to.
+   */
+  void set subscriptions(List<GeneralAnalysisService> value) {
+    assert(value != null);
+    this._subscriptions = value;
+  }
+
+  AnalysisSetGeneralSubscriptionsParams(List<GeneralAnalysisService> subscriptions) {
+    this.subscriptions = subscriptions;
+  }
+
+  factory AnalysisSetGeneralSubscriptionsParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json == null) {
+      json = {};
+    }
+    if (json is Map) {
+      List<GeneralAnalysisService> subscriptions;
+      if (json.containsKey("subscriptions")) {
+        subscriptions = jsonDecoder._decodeList(jsonPath + ".subscriptions", json["subscriptions"], (String jsonPath, Object json) => new GeneralAnalysisService.fromJson(jsonDecoder, jsonPath, json));
+      } else {
+        throw jsonDecoder.missingKey(jsonPath, "subscriptions");
+      }
+      return new AnalysisSetGeneralSubscriptionsParams(subscriptions);
+    } else {
+      throw jsonDecoder.mismatch(jsonPath, "analysis.setGeneralSubscriptions params", json);
+    }
+  }
+
+  factory AnalysisSetGeneralSubscriptionsParams.fromRequest(Request request) {
+    return new AnalysisSetGeneralSubscriptionsParams.fromJson(
+        new RequestDecoder(request), "params", request._params);
+  }
+
+  Map<String, dynamic> toJson() {
+    Map<String, dynamic> result = {};
+    result["subscriptions"] = subscriptions.map((GeneralAnalysisService value) => value.toJson()).toList();
+    return result;
+  }
+
+  Request toRequest(String id) {
+    return new Request(id, "analysis.setGeneralSubscriptions", toJson());
+  }
+
+  @override
+  String toString() => JSON.encode(toJson());
+
+  @override
+  bool operator==(other) {
+    if (other is AnalysisSetGeneralSubscriptionsParams) {
+      return _listEqual(subscriptions, other.subscriptions, (GeneralAnalysisService a, GeneralAnalysisService b) => a == b);
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode {
+    int hash = 0;
+    hash = _JenkinsSmiHash.combine(hash, subscriptions.hashCode);
+    return _JenkinsSmiHash.finish(hash);
+  }
+}
+/**
+ * analysis.setGeneralSubscriptions result
+ */
+class AnalysisSetGeneralSubscriptionsResult {
+  Response toResponse(String id) {
+    return new Response(id, result: null);
+  }
+
+  @override
+  bool operator==(other) {
+    if (other is AnalysisSetGeneralSubscriptionsResult) {
+      return true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode {
+    return 386759562;
+  }
+}
+
+/**
  * analysis.setPriorityFiles params
  *
  * {
@@ -1621,7 +1720,7 @@
       }
       return new AnalysisSetPriorityFilesParams(files);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.setPriorityFiles params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.setPriorityFiles params", json);
     }
   }
 
@@ -1722,7 +1821,7 @@
       }
       return new AnalysisSetSubscriptionsParams(subscriptions);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.setSubscriptions params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.setSubscriptions params", json);
     }
   }
 
@@ -1823,7 +1922,7 @@
       }
       return new AnalysisUpdateContentParams(files);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.updateContent params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.updateContent params", json);
     }
   }
 
@@ -1877,7 +1976,7 @@
     if (json is Map) {
       return new AnalysisUpdateContentResult();
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.updateContent result");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.updateContent result", json);
     }
   }
 
@@ -1953,7 +2052,7 @@
       }
       return new AnalysisUpdateOptionsParams(options);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.updateOptions params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.updateOptions params", json);
     }
   }
 
@@ -2013,6 +2112,84 @@
 }
 
 /**
+ * analysis.analyzedFiles params
+ *
+ * {
+ *   "directories": List<FilePath>
+ * }
+ */
+class AnalysisAnalyzedFilesParams implements HasToJson {
+  List<String> _directories;
+
+  /**
+   * A list of the paths of the files that are being analyzed.
+   */
+  List<String> get directories => _directories;
+
+  /**
+   * A list of the paths of the files that are being analyzed.
+   */
+  void set directories(List<String> value) {
+    assert(value != null);
+    this._directories = value;
+  }
+
+  AnalysisAnalyzedFilesParams(List<String> directories) {
+    this.directories = directories;
+  }
+
+  factory AnalysisAnalyzedFilesParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json == null) {
+      json = {};
+    }
+    if (json is Map) {
+      List<String> directories;
+      if (json.containsKey("directories")) {
+        directories = jsonDecoder._decodeList(jsonPath + ".directories", json["directories"], jsonDecoder._decodeString);
+      } else {
+        throw jsonDecoder.missingKey(jsonPath, "directories");
+      }
+      return new AnalysisAnalyzedFilesParams(directories);
+    } else {
+      throw jsonDecoder.mismatch(jsonPath, "analysis.analyzedFiles params", json);
+    }
+  }
+
+  factory AnalysisAnalyzedFilesParams.fromNotification(Notification notification) {
+    return new AnalysisAnalyzedFilesParams.fromJson(
+        new ResponseDecoder(null), "params", notification._params);
+  }
+
+  Map<String, dynamic> toJson() {
+    Map<String, dynamic> result = {};
+    result["directories"] = directories;
+    return result;
+  }
+
+  Notification toNotification() {
+    return new Notification("analysis.analyzedFiles", toJson());
+  }
+
+  @override
+  String toString() => JSON.encode(toJson());
+
+  @override
+  bool operator==(other) {
+    if (other is AnalysisAnalyzedFilesParams) {
+      return _listEqual(directories, other.directories, (String a, String b) => a == b);
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode {
+    int hash = 0;
+    hash = _JenkinsSmiHash.combine(hash, directories.hashCode);
+    return _JenkinsSmiHash.finish(hash);
+  }
+}
+
+/**
  * analysis.errors params
  *
  * {
@@ -2075,7 +2252,7 @@
       }
       return new AnalysisErrorsParams(file, errors);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.errors params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.errors params", json);
     }
   }
 
@@ -2156,7 +2333,7 @@
       }
       return new AnalysisFlushResultsParams(files);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.flushResults params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.flushResults params", json);
     }
   }
 
@@ -2257,7 +2434,7 @@
       }
       return new AnalysisFoldingParams(file, regions);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.folding params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.folding params", json);
     }
   }
 
@@ -2369,7 +2546,7 @@
       }
       return new AnalysisHighlightsParams(file, regions);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.highlights params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.highlights params", json);
     }
   }
 
@@ -2523,7 +2700,7 @@
       }
       return new AnalysisInvalidateParams(file, offset, length, delta);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.invalidate params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.invalidate params", json);
     }
   }
 
@@ -2695,7 +2872,7 @@
       }
       return new AnalysisNavigationParams(file, regions, targets, files);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.navigation params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.navigation params", json);
     }
   }
 
@@ -2805,7 +2982,7 @@
       }
       return new AnalysisOccurrencesParams(file, occurrences);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.occurrences params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.occurrences params", json);
     }
   }
 
@@ -2909,7 +3086,7 @@
       }
       return new AnalysisOutlineParams(file, outline);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.outline params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.outline params", json);
     }
   }
 
@@ -3013,7 +3190,7 @@
       }
       return new AnalysisOverridesParams(file, overrides);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "analysis.overrides params");
+      throw jsonDecoder.mismatch(jsonPath, "analysis.overrides params", json);
     }
   }
 
@@ -3117,7 +3294,7 @@
       }
       return new CompletionGetSuggestionsParams(file, offset);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "completion.getSuggestions params");
+      throw jsonDecoder.mismatch(jsonPath, "completion.getSuggestions params", json);
     }
   }
 
@@ -3198,7 +3375,7 @@
       }
       return new CompletionGetSuggestionsResult(id);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "completion.getSuggestions result");
+      throw jsonDecoder.mismatch(jsonPath, "completion.getSuggestions result", json);
     }
   }
 
@@ -3388,7 +3565,7 @@
       }
       return new CompletionResultsParams(id, replacementOffset, replacementLength, results, isLast);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "completion.results params");
+      throw jsonDecoder.mismatch(jsonPath, "completion.results params", json);
     }
   }
 
@@ -3528,7 +3705,7 @@
       }
       return new SearchFindElementReferencesParams(file, offset, includePotential);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.findElementReferences params");
+      throw jsonDecoder.mismatch(jsonPath, "search.findElementReferences params", json);
     }
   }
 
@@ -3641,7 +3818,7 @@
       }
       return new SearchFindElementReferencesResult(id: id, element: element);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.findElementReferences result");
+      throw jsonDecoder.mismatch(jsonPath, "search.findElementReferences result", json);
     }
   }
 
@@ -3726,7 +3903,7 @@
       }
       return new SearchFindMemberDeclarationsParams(name);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.findMemberDeclarations params");
+      throw jsonDecoder.mismatch(jsonPath, "search.findMemberDeclarations params", json);
     }
   }
 
@@ -3804,7 +3981,7 @@
       }
       return new SearchFindMemberDeclarationsResult(id);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.findMemberDeclarations result");
+      throw jsonDecoder.mismatch(jsonPath, "search.findMemberDeclarations result", json);
     }
   }
 
@@ -3882,7 +4059,7 @@
       }
       return new SearchFindMemberReferencesParams(name);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.findMemberReferences params");
+      throw jsonDecoder.mismatch(jsonPath, "search.findMemberReferences params", json);
     }
   }
 
@@ -3960,7 +4137,7 @@
       }
       return new SearchFindMemberReferencesResult(id);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.findMemberReferences result");
+      throw jsonDecoder.mismatch(jsonPath, "search.findMemberReferences result", json);
     }
   }
 
@@ -4040,7 +4217,7 @@
       }
       return new SearchFindTopLevelDeclarationsParams(pattern);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.findTopLevelDeclarations params");
+      throw jsonDecoder.mismatch(jsonPath, "search.findTopLevelDeclarations params", json);
     }
   }
 
@@ -4118,7 +4295,7 @@
       }
       return new SearchFindTopLevelDeclarationsResult(id);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.findTopLevelDeclarations result");
+      throw jsonDecoder.mismatch(jsonPath, "search.findTopLevelDeclarations result", json);
     }
   }
 
@@ -4221,7 +4398,7 @@
       }
       return new SearchGetTypeHierarchyParams(file, offset);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.getTypeHierarchy params");
+      throw jsonDecoder.mismatch(jsonPath, "search.getTypeHierarchy params", json);
     }
   }
 
@@ -4315,7 +4492,7 @@
       }
       return new SearchGetTypeHierarchyResult(hierarchyItems: hierarchyItems);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.getTypeHierarchy result");
+      throw jsonDecoder.mismatch(jsonPath, "search.getTypeHierarchy result", json);
     }
   }
 
@@ -4443,7 +4620,7 @@
       }
       return new SearchResultsParams(id, results, isLast);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "search.results params");
+      throw jsonDecoder.mismatch(jsonPath, "search.results params", json);
     }
   }
 
@@ -4593,7 +4770,7 @@
       }
       return new EditFormatParams(file, selectionOffset, selectionLength, lineLength: lineLength);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.format params");
+      throw jsonDecoder.mismatch(jsonPath, "edit.format params", json);
     }
   }
 
@@ -4730,7 +4907,7 @@
       }
       return new EditFormatResult(edits, selectionOffset, selectionLength);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.format result");
+      throw jsonDecoder.mismatch(jsonPath, "edit.format result", json);
     }
   }
 
@@ -4860,7 +5037,7 @@
       }
       return new EditGetAssistsParams(file, offset, length);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.getAssists params");
+      throw jsonDecoder.mismatch(jsonPath, "edit.getAssists params", json);
     }
   }
 
@@ -4944,7 +5121,7 @@
       }
       return new EditGetAssistsResult(assists);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.getAssists result");
+      throw jsonDecoder.mismatch(jsonPath, "edit.getAssists result", json);
     }
   }
 
@@ -5068,7 +5245,7 @@
       }
       return new EditGetAvailableRefactoringsParams(file, offset, length);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.getAvailableRefactorings params");
+      throw jsonDecoder.mismatch(jsonPath, "edit.getAvailableRefactorings params", json);
     }
   }
 
@@ -5152,7 +5329,7 @@
       }
       return new EditGetAvailableRefactoringsResult(kinds);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.getAvailableRefactorings result");
+      throw jsonDecoder.mismatch(jsonPath, "edit.getAvailableRefactorings result", json);
     }
   }
 
@@ -5253,7 +5430,7 @@
       }
       return new EditGetFixesParams(file, offset);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.getFixes params");
+      throw jsonDecoder.mismatch(jsonPath, "edit.getFixes params", json);
     }
   }
 
@@ -5334,7 +5511,7 @@
       }
       return new EditGetFixesResult(fixes);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.getFixes result");
+      throw jsonDecoder.mismatch(jsonPath, "edit.getFixes result", json);
     }
   }
 
@@ -5534,7 +5711,7 @@
       }
       return new EditGetRefactoringParams(kind, file, offset, length, validateOnly, options: options);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.getRefactoring params");
+      throw jsonDecoder.mismatch(jsonPath, "edit.getRefactoring params", json);
     }
   }
 
@@ -5771,7 +5948,7 @@
       }
       return new EditGetRefactoringResult(initialProblems, optionsProblems, finalProblems, feedback: feedback, change: change, potentialEdits: potentialEdits);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.getRefactoring result");
+      throw jsonDecoder.mismatch(jsonPath, "edit.getRefactoring result", json);
     }
   }
 
@@ -5870,7 +6047,7 @@
       }
       return new EditSortMembersParams(file);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.sortMembers params");
+      throw jsonDecoder.mismatch(jsonPath, "edit.sortMembers params", json);
     }
   }
 
@@ -5950,7 +6127,7 @@
       }
       return new EditSortMembersResult(edit);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "edit.sortMembers result");
+      throw jsonDecoder.mismatch(jsonPath, "edit.sortMembers result", json);
     }
   }
 
@@ -6030,7 +6207,7 @@
       }
       return new ExecutionCreateContextParams(contextRoot);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "execution.createContext params");
+      throw jsonDecoder.mismatch(jsonPath, "execution.createContext params", json);
     }
   }
 
@@ -6108,7 +6285,7 @@
       }
       return new ExecutionCreateContextResult(id);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "execution.createContext result");
+      throw jsonDecoder.mismatch(jsonPath, "execution.createContext result", json);
     }
   }
 
@@ -6186,7 +6363,7 @@
       }
       return new ExecutionDeleteContextParams(id);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "execution.deleteContext params");
+      throw jsonDecoder.mismatch(jsonPath, "execution.deleteContext params", json);
     }
   }
 
@@ -6325,7 +6502,7 @@
       }
       return new ExecutionMapUriParams(id, file: file, uri: uri);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "execution.mapUri params");
+      throw jsonDecoder.mismatch(jsonPath, "execution.mapUri params", json);
     }
   }
 
@@ -6434,7 +6611,7 @@
       }
       return new ExecutionMapUriResult(file: file, uri: uri);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "execution.mapUri result");
+      throw jsonDecoder.mismatch(jsonPath, "execution.mapUri result", json);
     }
   }
 
@@ -6519,7 +6696,7 @@
       }
       return new ExecutionSetSubscriptionsParams(subscriptions);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "execution.setSubscriptions params");
+      throw jsonDecoder.mismatch(jsonPath, "execution.setSubscriptions params", json);
     }
   }
 
@@ -6664,7 +6841,7 @@
       }
       return new ExecutionLaunchDataParams(file, kind: kind, referencedFiles: referencedFiles);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "execution.launchData params");
+      throw jsonDecoder.mismatch(jsonPath, "execution.launchData params", json);
     }
   }
 
@@ -6746,7 +6923,7 @@
     }
     if (json is Map) {
       if (json["type"] != "add") {
-        throw jsonDecoder.mismatch(jsonPath, "equal " + "add");
+        throw jsonDecoder.mismatch(jsonPath, "equal " + "add", json);
       }
       String content;
       if (json.containsKey("content")) {
@@ -6756,7 +6933,7 @@
       }
       return new AddContentOverlay(content);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "AddContentOverlay");
+      throw jsonDecoder.mismatch(jsonPath, "AddContentOverlay", json);
     }
   }
 
@@ -6922,7 +7099,7 @@
       }
       return new AnalysisError(severity, type, location, message, correction: correction);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "AnalysisError");
+      throw jsonDecoder.mismatch(jsonPath, "AnalysisError", json);
     }
   }
 
@@ -7032,7 +7209,7 @@
       }
       return new AnalysisErrorFixes(error, fixes: fixes);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "AnalysisErrorFixes");
+      throw jsonDecoder.mismatch(jsonPath, "AnalysisErrorFixes", json);
     }
   }
 
@@ -7109,7 +7286,7 @@
         // Fall through
       }
     }
-    throw jsonDecoder.mismatch(jsonPath, "AnalysisErrorSeverity");
+    throw jsonDecoder.mismatch(jsonPath, "AnalysisErrorSeverity", json);
   }
 
   @override
@@ -7188,7 +7365,7 @@
         // Fall through
       }
     }
-    throw jsonDecoder.mismatch(jsonPath, "AnalysisErrorType");
+    throw jsonDecoder.mismatch(jsonPath, "AnalysisErrorType", json);
   }
 
   @override
@@ -7376,7 +7553,7 @@
       }
       return new AnalysisOptions(enableAsync: enableAsync, enableDeferredLoading: enableDeferredLoading, enableEnums: enableEnums, enableNullAwareOperators: enableNullAwareOperators, generateDart2jsHints: generateDart2jsHints, generateHints: generateHints, generateLints: generateLints);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "AnalysisOptions");
+      throw jsonDecoder.mismatch(jsonPath, "AnalysisOptions", json);
     }
   }
 
@@ -7455,6 +7632,10 @@
 
   static const HIGHLIGHTS = const AnalysisService._("HIGHLIGHTS");
 
+  /**
+   * This service is not currently implemented and will become a
+   * GeneralAnalysisService in a future release.
+   */
   static const INVALIDATE = const AnalysisService._("INVALIDATE");
 
   static const NAVIGATION = const AnalysisService._("NAVIGATION");
@@ -7502,7 +7683,7 @@
         // Fall through
       }
     }
-    throw jsonDecoder.mismatch(jsonPath, "AnalysisService");
+    throw jsonDecoder.mismatch(jsonPath, "AnalysisService", json);
   }
 
   @override
@@ -7573,7 +7754,7 @@
       }
       return new AnalysisStatus(isAnalyzing, analysisTarget: analysisTarget);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "AnalysisStatus");
+      throw jsonDecoder.mismatch(jsonPath, "AnalysisStatus", json);
     }
   }
 
@@ -7641,7 +7822,7 @@
     }
     if (json is Map) {
       if (json["type"] != "change") {
-        throw jsonDecoder.mismatch(jsonPath, "equal " + "change");
+        throw jsonDecoder.mismatch(jsonPath, "equal " + "change", json);
       }
       List<SourceEdit> edits;
       if (json.containsKey("edits")) {
@@ -7651,7 +7832,7 @@
       }
       return new ChangeContentOverlay(edits);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "ChangeContentOverlay");
+      throw jsonDecoder.mismatch(jsonPath, "ChangeContentOverlay", json);
     }
   }
 
@@ -8142,7 +8323,7 @@
       }
       return new CompletionSuggestion(kind, relevance, completion, selectionOffset, selectionLength, isDeprecated, isPotential, docSummary: docSummary, docComplete: docComplete, declaringType: declaringType, element: element, returnType: returnType, parameterNames: parameterNames, parameterTypes: parameterTypes, requiredParameterCount: requiredParameterCount, hasNamedParameters: hasNamedParameters, parameterName: parameterName, parameterType: parameterType, importUri: importUri);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "CompletionSuggestion");
+      throw jsonDecoder.mismatch(jsonPath, "CompletionSuggestion", json);
     }
   }
 
@@ -8346,7 +8527,7 @@
         // Fall through
       }
     }
-    throw jsonDecoder.mismatch(jsonPath, "CompletionSuggestionKind");
+    throw jsonDecoder.mismatch(jsonPath, "CompletionSuggestionKind", json);
   }
 
   @override
@@ -8569,7 +8750,7 @@
       }
       return new Element(kind, name, flags, location: location, parameters: parameters, returnType: returnType, typeParameters: typeParameters);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "Element");
+      throw jsonDecoder.mismatch(jsonPath, "Element", json);
     }
   }
 
@@ -8771,7 +8952,7 @@
         // Fall through
       }
     }
-    throw jsonDecoder.mismatch(jsonPath, "ElementKind");
+    throw jsonDecoder.mismatch(jsonPath, "ElementKind", json);
   }
 
   @override
@@ -8843,7 +9024,7 @@
       }
       return new ExecutableFile(file, kind);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "ExecutableFile");
+      throw jsonDecoder.mismatch(jsonPath, "ExecutableFile", json);
     }
   }
 
@@ -8925,7 +9106,7 @@
         // Fall through
       }
     }
-    throw jsonDecoder.mismatch(jsonPath, "ExecutableKind");
+    throw jsonDecoder.mismatch(jsonPath, "ExecutableKind", json);
   }
 
   @override
@@ -8969,7 +9150,7 @@
         // Fall through
       }
     }
-    throw jsonDecoder.mismatch(jsonPath, "ExecutionService");
+    throw jsonDecoder.mismatch(jsonPath, "ExecutionService", json);
   }
 
   @override
@@ -9033,7 +9214,7 @@
         // Fall through
       }
     }
-    throw jsonDecoder.mismatch(jsonPath, "FoldingKind");
+    throw jsonDecoder.mismatch(jsonPath, "FoldingKind", json);
   }
 
   @override
@@ -9128,7 +9309,7 @@
       }
       return new FoldingRegion(kind, offset, length);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "FoldingRegion");
+      throw jsonDecoder.mismatch(jsonPath, "FoldingRegion", json);
     }
   }
 
@@ -9164,6 +9345,50 @@
 }
 
 /**
+ * GeneralAnalysisService
+ *
+ * enum {
+ *   ANALYZED_FILES
+ * }
+ */
+class GeneralAnalysisService implements Enum {
+  static const ANALYZED_FILES = const GeneralAnalysisService._("ANALYZED_FILES");
+
+  /**
+   * A list containing all of the enum values that are defined.
+   */
+  static const List<GeneralAnalysisService> VALUES = const <GeneralAnalysisService>[ANALYZED_FILES];
+
+  final String name;
+
+  const GeneralAnalysisService._(this.name);
+
+  factory GeneralAnalysisService(String name) {
+    switch (name) {
+      case "ANALYZED_FILES":
+        return ANALYZED_FILES;
+    }
+    throw new Exception('Illegal enum value: $name');
+  }
+
+  factory GeneralAnalysisService.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json is String) {
+      try {
+        return new GeneralAnalysisService(json);
+      } catch(_) {
+        // Fall through
+      }
+    }
+    throw jsonDecoder.mismatch(jsonPath, "GeneralAnalysisService", json);
+  }
+
+  @override
+  String toString() => "GeneralAnalysisService.$name";
+
+  String toJson() => name;
+}
+
+/**
  * HighlightRegion
  *
  * {
@@ -9249,7 +9474,7 @@
       }
       return new HighlightRegion(type, offset, length);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "HighlightRegion");
+      throw jsonDecoder.mismatch(jsonPath, "HighlightRegion", json);
     }
   }
 
@@ -9297,6 +9522,10 @@
  *   CONSTRUCTOR
  *   DIRECTIVE
  *   DYNAMIC_TYPE
+ *   DYNAMIC_LOCAL_VARIABLE_DECLARATION
+ *   DYNAMIC_LOCAL_VARIABLE_REFERENCE
+ *   DYNAMIC_PARAMETER_DECLARATION
+ *   DYNAMIC_PARAMETER_REFERENCE
  *   ENUM
  *   ENUM_CONSTANT
  *   FIELD
@@ -9307,16 +9536,29 @@
  *   GETTER_DECLARATION
  *   IDENTIFIER_DEFAULT
  *   IMPORT_PREFIX
+ *   INSTANCE_FIELD_DECLARATION
+ *   INSTANCE_FIELD_REFERENCE
+ *   INSTANCE_GETTER_DECLARATION
+ *   INSTANCE_GETTER_REFERENCE
+ *   INSTANCE_METHOD_DECLARATION
+ *   INSTANCE_METHOD_REFERENCE
+ *   INSTANCE_SETTER_DECLARATION
+ *   INSTANCE_SETTER_REFERENCE
+ *   INVALID_STRING_ESCAPE
  *   KEYWORD
  *   LABEL
+ *   LIBRARY_NAME
  *   LITERAL_BOOLEAN
  *   LITERAL_DOUBLE
  *   LITERAL_INTEGER
  *   LITERAL_LIST
  *   LITERAL_MAP
  *   LITERAL_STRING
+ *   LOCAL_FUNCTION_DECLARATION
+ *   LOCAL_FUNCTION_REFERENCE
  *   LOCAL_VARIABLE
  *   LOCAL_VARIABLE_DECLARATION
+ *   LOCAL_VARIABLE_REFERENCE
  *   METHOD
  *   METHOD_DECLARATION
  *   METHOD_DECLARATION_STATIC
@@ -9324,8 +9566,26 @@
  *   PARAMETER
  *   SETTER_DECLARATION
  *   TOP_LEVEL_VARIABLE
+ *   PARAMETER_DECLARATION
+ *   PARAMETER_REFERENCE
+ *   STATIC_FIELD_DECLARATION
+ *   STATIC_GETTER_DECLARATION
+ *   STATIC_GETTER_REFERENCE
+ *   STATIC_METHOD_DECLARATION
+ *   STATIC_METHOD_REFERENCE
+ *   STATIC_SETTER_DECLARATION
+ *   STATIC_SETTER_REFERENCE
+ *   TOP_LEVEL_FUNCTION_DECLARATION
+ *   TOP_LEVEL_FUNCTION_REFERENCE
+ *   TOP_LEVEL_GETTER_DECLARATION
+ *   TOP_LEVEL_GETTER_REFERENCE
+ *   TOP_LEVEL_SETTER_DECLARATION
+ *   TOP_LEVEL_SETTER_REFERENCE
+ *   TOP_LEVEL_VARIABLE_DECLARATION
  *   TYPE_NAME_DYNAMIC
  *   TYPE_PARAMETER
+ *   UNRESOLVED_INSTANCE_MEMBER_REFERENCE
+ *   VALID_STRING_ESCAPE
  * }
  */
 class HighlightRegionType implements Enum {
@@ -9345,32 +9605,120 @@
 
   static const DIRECTIVE = const HighlightRegionType._("DIRECTIVE");
 
+  /**
+   * Only for version 1 of highlight.
+   */
   static const DYNAMIC_TYPE = const HighlightRegionType._("DYNAMIC_TYPE");
 
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const DYNAMIC_LOCAL_VARIABLE_DECLARATION = const HighlightRegionType._("DYNAMIC_LOCAL_VARIABLE_DECLARATION");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const DYNAMIC_LOCAL_VARIABLE_REFERENCE = const HighlightRegionType._("DYNAMIC_LOCAL_VARIABLE_REFERENCE");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const DYNAMIC_PARAMETER_DECLARATION = const HighlightRegionType._("DYNAMIC_PARAMETER_DECLARATION");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const DYNAMIC_PARAMETER_REFERENCE = const HighlightRegionType._("DYNAMIC_PARAMETER_REFERENCE");
+
   static const ENUM = const HighlightRegionType._("ENUM");
 
   static const ENUM_CONSTANT = const HighlightRegionType._("ENUM_CONSTANT");
 
+  /**
+   * Only for version 1 of highlight.
+   */
   static const FIELD = const HighlightRegionType._("FIELD");
 
+  /**
+   * Only for version 1 of highlight.
+   */
   static const FIELD_STATIC = const HighlightRegionType._("FIELD_STATIC");
 
+  /**
+   * Only for version 1 of highlight.
+   */
   static const FUNCTION = const HighlightRegionType._("FUNCTION");
 
+  /**
+   * Only for version 1 of highlight.
+   */
   static const FUNCTION_DECLARATION = const HighlightRegionType._("FUNCTION_DECLARATION");
 
   static const FUNCTION_TYPE_ALIAS = const HighlightRegionType._("FUNCTION_TYPE_ALIAS");
 
+  /**
+   * Only for version 1 of highlight.
+   */
   static const GETTER_DECLARATION = const HighlightRegionType._("GETTER_DECLARATION");
 
   static const IDENTIFIER_DEFAULT = const HighlightRegionType._("IDENTIFIER_DEFAULT");
 
   static const IMPORT_PREFIX = const HighlightRegionType._("IMPORT_PREFIX");
 
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const INSTANCE_FIELD_DECLARATION = const HighlightRegionType._("INSTANCE_FIELD_DECLARATION");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const INSTANCE_FIELD_REFERENCE = const HighlightRegionType._("INSTANCE_FIELD_REFERENCE");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const INSTANCE_GETTER_DECLARATION = const HighlightRegionType._("INSTANCE_GETTER_DECLARATION");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const INSTANCE_GETTER_REFERENCE = const HighlightRegionType._("INSTANCE_GETTER_REFERENCE");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const INSTANCE_METHOD_DECLARATION = const HighlightRegionType._("INSTANCE_METHOD_DECLARATION");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const INSTANCE_METHOD_REFERENCE = const HighlightRegionType._("INSTANCE_METHOD_REFERENCE");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const INSTANCE_SETTER_DECLARATION = const HighlightRegionType._("INSTANCE_SETTER_DECLARATION");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const INSTANCE_SETTER_REFERENCE = const HighlightRegionType._("INSTANCE_SETTER_REFERENCE");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const INVALID_STRING_ESCAPE = const HighlightRegionType._("INVALID_STRING_ESCAPE");
+
   static const KEYWORD = const HighlightRegionType._("KEYWORD");
 
   static const LABEL = const HighlightRegionType._("LABEL");
 
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const LIBRARY_NAME = const HighlightRegionType._("LIBRARY_NAME");
+
   static const LITERAL_BOOLEAN = const HighlightRegionType._("LITERAL_BOOLEAN");
 
   static const LITERAL_DOUBLE = const HighlightRegionType._("LITERAL_DOUBLE");
@@ -9383,32 +9731,161 @@
 
   static const LITERAL_STRING = const HighlightRegionType._("LITERAL_STRING");
 
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const LOCAL_FUNCTION_DECLARATION = const HighlightRegionType._("LOCAL_FUNCTION_DECLARATION");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const LOCAL_FUNCTION_REFERENCE = const HighlightRegionType._("LOCAL_FUNCTION_REFERENCE");
+
+  /**
+   * Only for version 1 of highlight.
+   */
   static const LOCAL_VARIABLE = const HighlightRegionType._("LOCAL_VARIABLE");
 
   static const LOCAL_VARIABLE_DECLARATION = const HighlightRegionType._("LOCAL_VARIABLE_DECLARATION");
 
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const LOCAL_VARIABLE_REFERENCE = const HighlightRegionType._("LOCAL_VARIABLE_REFERENCE");
+
+  /**
+   * Only for version 1 of highlight.
+   */
   static const METHOD = const HighlightRegionType._("METHOD");
 
+  /**
+   * Only for version 1 of highlight.
+   */
   static const METHOD_DECLARATION = const HighlightRegionType._("METHOD_DECLARATION");
 
+  /**
+   * Only for version 1 of highlight.
+   */
   static const METHOD_DECLARATION_STATIC = const HighlightRegionType._("METHOD_DECLARATION_STATIC");
 
+  /**
+   * Only for version 1 of highlight.
+   */
   static const METHOD_STATIC = const HighlightRegionType._("METHOD_STATIC");
 
+  /**
+   * Only for version 1 of highlight.
+   */
   static const PARAMETER = const HighlightRegionType._("PARAMETER");
 
+  /**
+   * Only for version 1 of highlight.
+   */
   static const SETTER_DECLARATION = const HighlightRegionType._("SETTER_DECLARATION");
 
+  /**
+   * Only for version 1 of highlight.
+   */
   static const TOP_LEVEL_VARIABLE = const HighlightRegionType._("TOP_LEVEL_VARIABLE");
 
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const PARAMETER_DECLARATION = const HighlightRegionType._("PARAMETER_DECLARATION");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const PARAMETER_REFERENCE = const HighlightRegionType._("PARAMETER_REFERENCE");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const STATIC_FIELD_DECLARATION = const HighlightRegionType._("STATIC_FIELD_DECLARATION");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const STATIC_GETTER_DECLARATION = const HighlightRegionType._("STATIC_GETTER_DECLARATION");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const STATIC_GETTER_REFERENCE = const HighlightRegionType._("STATIC_GETTER_REFERENCE");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const STATIC_METHOD_DECLARATION = const HighlightRegionType._("STATIC_METHOD_DECLARATION");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const STATIC_METHOD_REFERENCE = const HighlightRegionType._("STATIC_METHOD_REFERENCE");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const STATIC_SETTER_DECLARATION = const HighlightRegionType._("STATIC_SETTER_DECLARATION");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const STATIC_SETTER_REFERENCE = const HighlightRegionType._("STATIC_SETTER_REFERENCE");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const TOP_LEVEL_FUNCTION_DECLARATION = const HighlightRegionType._("TOP_LEVEL_FUNCTION_DECLARATION");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const TOP_LEVEL_FUNCTION_REFERENCE = const HighlightRegionType._("TOP_LEVEL_FUNCTION_REFERENCE");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const TOP_LEVEL_GETTER_DECLARATION = const HighlightRegionType._("TOP_LEVEL_GETTER_DECLARATION");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const TOP_LEVEL_GETTER_REFERENCE = const HighlightRegionType._("TOP_LEVEL_GETTER_REFERENCE");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const TOP_LEVEL_SETTER_DECLARATION = const HighlightRegionType._("TOP_LEVEL_SETTER_DECLARATION");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const TOP_LEVEL_SETTER_REFERENCE = const HighlightRegionType._("TOP_LEVEL_SETTER_REFERENCE");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const TOP_LEVEL_VARIABLE_DECLARATION = const HighlightRegionType._("TOP_LEVEL_VARIABLE_DECLARATION");
+
   static const TYPE_NAME_DYNAMIC = const HighlightRegionType._("TYPE_NAME_DYNAMIC");
 
   static const TYPE_PARAMETER = const HighlightRegionType._("TYPE_PARAMETER");
 
   /**
+   * Only for version 2 of highlight.
+   */
+  static const UNRESOLVED_INSTANCE_MEMBER_REFERENCE = const HighlightRegionType._("UNRESOLVED_INSTANCE_MEMBER_REFERENCE");
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  static const VALID_STRING_ESCAPE = const HighlightRegionType._("VALID_STRING_ESCAPE");
+
+  /**
    * A list containing all of the enum values that are defined.
    */
-  static const List<HighlightRegionType> VALUES = const <HighlightRegionType>[ANNOTATION, BUILT_IN, CLASS, COMMENT_BLOCK, COMMENT_DOCUMENTATION, COMMENT_END_OF_LINE, CONSTRUCTOR, DIRECTIVE, DYNAMIC_TYPE, ENUM, ENUM_CONSTANT, FIELD, FIELD_STATIC, FUNCTION, FUNCTION_DECLARATION, FUNCTION_TYPE_ALIAS, GETTER_DECLARATION, IDENTIFIER_DEFAULT, IMPORT_PREFIX, KEYWORD, LABEL, LITERAL_BOOLEAN, LITERAL_DOUBLE, LITERAL_INTEGER, LITERAL_LIST, LITERAL_MAP, LITERAL_STRING, LOCAL_VARIABLE, LOCAL_VARIABLE_DECLARATION, METHOD, METHOD_DECLARATION, METHOD_DECLARATION_STATIC, METHOD_STATIC, PARAMETER, SETTER_DECLARATION, TOP_LEVEL_VARIABLE, TYPE_NAME_DYNAMIC, TYPE_PARAMETER];
+  static const List<HighlightRegionType> VALUES = const <HighlightRegionType>[ANNOTATION, BUILT_IN, CLASS, COMMENT_BLOCK, COMMENT_DOCUMENTATION, COMMENT_END_OF_LINE, CONSTRUCTOR, DIRECTIVE, DYNAMIC_TYPE, DYNAMIC_LOCAL_VARIABLE_DECLARATION, DYNAMIC_LOCAL_VARIABLE_REFERENCE, DYNAMIC_PARAMETER_DECLARATION, DYNAMIC_PARAMETER_REFERENCE, ENUM, ENUM_CONSTANT, FIELD, FIELD_STATIC, FUNCTION, FUNCTION_DECLARATION, FUNCTION_TYPE_ALIAS, GETTER_DECLARATION, IDENTIFIER_DEFAULT, IMPORT_PREFIX, INSTANCE_FIELD_DECLARATION, INSTANCE_FIELD_REFERENCE, INSTANCE_GETTER_DECLARATION, INSTANCE_GETTER_REFERENCE, INSTANCE_METHOD_DECLARATION, INSTANCE_METHOD_REFERENCE, INSTANCE_SETTER_DECLARATION, INSTANCE_SETTER_REFERENCE, INVALID_STRING_ESCAPE, KEYWORD, LABEL, LIBRARY_NAME, LITERAL_BOOLEAN, LITERAL_DOUBLE, LITERAL_INTEGER, LITERAL_LIST, LITERAL_MAP, LITERAL_STRING, LOCAL_FUNCTION_DECLARATION, LOCAL_FUNCTION_REFERENCE, LOCAL_VARIABLE, LOCAL_VARIABLE_DECLARATION, LOCAL_VARIABLE_REFERENCE, METHOD, METHOD_DECLARATION, METHOD_DECLARATION_STATIC, METHOD_STATIC, PARAMETER, SETTER_DECLARATION, TOP_LEVEL_VARIABLE, PARAMETER_DECLARATION, PARAMETER_REFERENCE, STATIC_FIELD_DECLARATION, STATIC_GETTER_DECLARATION, STATIC_GETTER_REFERENCE, STATIC_METHOD_DECLARATION, STATIC_METHOD_REFERENCE, STATIC_SETTER_DECLARATION, STATIC_SETTER_REFERENCE, TOP_LEVEL_FUNCTION_DECLARATION, TOP_LEVEL_FUNCTION_REFERENCE, TOP_LEVEL_GETTER_DECLARATION, TOP_LEVEL_GETTER_REFERENCE, TOP_LEVEL_SETTER_DECLARATION, TOP_LEVEL_SETTER_REFERENCE, TOP_LEVEL_VARIABLE_DECLARATION, TYPE_NAME_DYNAMIC, TYPE_PARAMETER, UNRESOLVED_INSTANCE_MEMBER_REFERENCE, VALID_STRING_ESCAPE];
 
   final String name;
 
@@ -9434,6 +9911,14 @@
         return DIRECTIVE;
       case "DYNAMIC_TYPE":
         return DYNAMIC_TYPE;
+      case "DYNAMIC_LOCAL_VARIABLE_DECLARATION":
+        return DYNAMIC_LOCAL_VARIABLE_DECLARATION;
+      case "DYNAMIC_LOCAL_VARIABLE_REFERENCE":
+        return DYNAMIC_LOCAL_VARIABLE_REFERENCE;
+      case "DYNAMIC_PARAMETER_DECLARATION":
+        return DYNAMIC_PARAMETER_DECLARATION;
+      case "DYNAMIC_PARAMETER_REFERENCE":
+        return DYNAMIC_PARAMETER_REFERENCE;
       case "ENUM":
         return ENUM;
       case "ENUM_CONSTANT":
@@ -9454,10 +9939,30 @@
         return IDENTIFIER_DEFAULT;
       case "IMPORT_PREFIX":
         return IMPORT_PREFIX;
+      case "INSTANCE_FIELD_DECLARATION":
+        return INSTANCE_FIELD_DECLARATION;
+      case "INSTANCE_FIELD_REFERENCE":
+        return INSTANCE_FIELD_REFERENCE;
+      case "INSTANCE_GETTER_DECLARATION":
+        return INSTANCE_GETTER_DECLARATION;
+      case "INSTANCE_GETTER_REFERENCE":
+        return INSTANCE_GETTER_REFERENCE;
+      case "INSTANCE_METHOD_DECLARATION":
+        return INSTANCE_METHOD_DECLARATION;
+      case "INSTANCE_METHOD_REFERENCE":
+        return INSTANCE_METHOD_REFERENCE;
+      case "INSTANCE_SETTER_DECLARATION":
+        return INSTANCE_SETTER_DECLARATION;
+      case "INSTANCE_SETTER_REFERENCE":
+        return INSTANCE_SETTER_REFERENCE;
+      case "INVALID_STRING_ESCAPE":
+        return INVALID_STRING_ESCAPE;
       case "KEYWORD":
         return KEYWORD;
       case "LABEL":
         return LABEL;
+      case "LIBRARY_NAME":
+        return LIBRARY_NAME;
       case "LITERAL_BOOLEAN":
         return LITERAL_BOOLEAN;
       case "LITERAL_DOUBLE":
@@ -9470,10 +9975,16 @@
         return LITERAL_MAP;
       case "LITERAL_STRING":
         return LITERAL_STRING;
+      case "LOCAL_FUNCTION_DECLARATION":
+        return LOCAL_FUNCTION_DECLARATION;
+      case "LOCAL_FUNCTION_REFERENCE":
+        return LOCAL_FUNCTION_REFERENCE;
       case "LOCAL_VARIABLE":
         return LOCAL_VARIABLE;
       case "LOCAL_VARIABLE_DECLARATION":
         return LOCAL_VARIABLE_DECLARATION;
+      case "LOCAL_VARIABLE_REFERENCE":
+        return LOCAL_VARIABLE_REFERENCE;
       case "METHOD":
         return METHOD;
       case "METHOD_DECLARATION":
@@ -9488,10 +9999,46 @@
         return SETTER_DECLARATION;
       case "TOP_LEVEL_VARIABLE":
         return TOP_LEVEL_VARIABLE;
+      case "PARAMETER_DECLARATION":
+        return PARAMETER_DECLARATION;
+      case "PARAMETER_REFERENCE":
+        return PARAMETER_REFERENCE;
+      case "STATIC_FIELD_DECLARATION":
+        return STATIC_FIELD_DECLARATION;
+      case "STATIC_GETTER_DECLARATION":
+        return STATIC_GETTER_DECLARATION;
+      case "STATIC_GETTER_REFERENCE":
+        return STATIC_GETTER_REFERENCE;
+      case "STATIC_METHOD_DECLARATION":
+        return STATIC_METHOD_DECLARATION;
+      case "STATIC_METHOD_REFERENCE":
+        return STATIC_METHOD_REFERENCE;
+      case "STATIC_SETTER_DECLARATION":
+        return STATIC_SETTER_DECLARATION;
+      case "STATIC_SETTER_REFERENCE":
+        return STATIC_SETTER_REFERENCE;
+      case "TOP_LEVEL_FUNCTION_DECLARATION":
+        return TOP_LEVEL_FUNCTION_DECLARATION;
+      case "TOP_LEVEL_FUNCTION_REFERENCE":
+        return TOP_LEVEL_FUNCTION_REFERENCE;
+      case "TOP_LEVEL_GETTER_DECLARATION":
+        return TOP_LEVEL_GETTER_DECLARATION;
+      case "TOP_LEVEL_GETTER_REFERENCE":
+        return TOP_LEVEL_GETTER_REFERENCE;
+      case "TOP_LEVEL_SETTER_DECLARATION":
+        return TOP_LEVEL_SETTER_DECLARATION;
+      case "TOP_LEVEL_SETTER_REFERENCE":
+        return TOP_LEVEL_SETTER_REFERENCE;
+      case "TOP_LEVEL_VARIABLE_DECLARATION":
+        return TOP_LEVEL_VARIABLE_DECLARATION;
       case "TYPE_NAME_DYNAMIC":
         return TYPE_NAME_DYNAMIC;
       case "TYPE_PARAMETER":
         return TYPE_PARAMETER;
+      case "UNRESOLVED_INSTANCE_MEMBER_REFERENCE":
+        return UNRESOLVED_INSTANCE_MEMBER_REFERENCE;
+      case "VALID_STRING_ESCAPE":
+        return VALID_STRING_ESCAPE;
     }
     throw new Exception('Illegal enum value: $name');
   }
@@ -9504,7 +10051,7 @@
         // Fall through
       }
     }
-    throw jsonDecoder.mismatch(jsonPath, "HighlightRegionType");
+    throw jsonDecoder.mismatch(jsonPath, "HighlightRegionType", json);
   }
 
   @override
@@ -9794,7 +10341,7 @@
       }
       return new HoverInformation(offset, length, containingLibraryPath: containingLibraryPath, containingLibraryName: containingLibraryName, containingClassDescription: containingClassDescription, dartdoc: dartdoc, elementDescription: elementDescription, elementKind: elementKind, parameter: parameter, propagatedType: propagatedType, staticType: staticType);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "HoverInformation");
+      throw jsonDecoder.mismatch(jsonPath, "HoverInformation", json);
     }
   }
 
@@ -9959,7 +10506,7 @@
       }
       return new LinkedEditGroup(positions, length, suggestions);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "LinkedEditGroup");
+      throw jsonDecoder.mismatch(jsonPath, "LinkedEditGroup", json);
     }
   }
 
@@ -10077,7 +10624,7 @@
       }
       return new LinkedEditSuggestion(value, kind);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "LinkedEditSuggestion");
+      throw jsonDecoder.mismatch(jsonPath, "LinkedEditSuggestion", json);
     }
   }
 
@@ -10159,7 +10706,7 @@
         // Fall through
       }
     }
-    throw jsonDecoder.mismatch(jsonPath, "LinkedEditSuggestionKind");
+    throw jsonDecoder.mismatch(jsonPath, "LinkedEditSuggestionKind", json);
   }
 
   @override
@@ -10304,7 +10851,7 @@
       }
       return new Location(file, offset, length, startLine, startColumn);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "Location");
+      throw jsonDecoder.mismatch(jsonPath, "Location", json);
     }
   }
 
@@ -10435,7 +10982,7 @@
       }
       return new NavigationRegion(offset, length, targets);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "NavigationRegion");
+      throw jsonDecoder.mismatch(jsonPath, "NavigationRegion", json);
     }
   }
 
@@ -10631,7 +11178,7 @@
       }
       return new NavigationTarget(kind, fileIndex, offset, length, startLine, startColumn);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "NavigationTarget");
+      throw jsonDecoder.mismatch(jsonPath, "NavigationTarget", json);
     }
   }
 
@@ -10761,7 +11308,7 @@
       }
       return new Occurrences(element, offsets, length);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "Occurrences");
+      throw jsonDecoder.mismatch(jsonPath, "Occurrences", json);
     }
   }
 
@@ -10910,7 +11457,7 @@
       }
       return new Outline(element, offset, length, children: children);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "Outline");
+      throw jsonDecoder.mismatch(jsonPath, "Outline", json);
     }
   }
 
@@ -11061,7 +11608,7 @@
       }
       return new Override(offset, length, superclassMember: superclassMember, interfaceMembers: interfaceMembers);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "Override");
+      throw jsonDecoder.mismatch(jsonPath, "Override", json);
     }
   }
 
@@ -11166,7 +11713,7 @@
       }
       return new OverriddenMember(element, className);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "OverriddenMember");
+      throw jsonDecoder.mismatch(jsonPath, "OverriddenMember", json);
     }
   }
 
@@ -11261,7 +11808,7 @@
       }
       return new Position(file, offset);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "Position");
+      throw jsonDecoder.mismatch(jsonPath, "Position", json);
     }
   }
 
@@ -11335,7 +11882,7 @@
       }
       return new PubStatus(isListingPackageDirs);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "PubStatus");
+      throw jsonDecoder.mismatch(jsonPath, "PubStatus", json);
     }
   }
 
@@ -11439,7 +11986,7 @@
         // Fall through
       }
     }
-    throw jsonDecoder.mismatch(jsonPath, "RefactoringKind");
+    throw jsonDecoder.mismatch(jsonPath, "RefactoringKind", json);
   }
 
   @override
@@ -11582,7 +12129,7 @@
       }
       return new RefactoringMethodParameter(kind, type, name, id: id, parameters: parameters);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "RefactoringMethodParameter");
+      throw jsonDecoder.mismatch(jsonPath, "RefactoringMethodParameter", json);
     }
   }
 
@@ -11744,7 +12291,7 @@
         // Fall through
       }
     }
-    throw jsonDecoder.mismatch(jsonPath, "RefactoringMethodParameterKind");
+    throw jsonDecoder.mismatch(jsonPath, "RefactoringMethodParameterKind", json);
   }
 
   @override
@@ -11840,7 +12387,7 @@
       }
       return new RefactoringProblem(severity, message, location: location);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "RefactoringProblem");
+      throw jsonDecoder.mismatch(jsonPath, "RefactoringProblem", json);
     }
   }
 
@@ -11927,7 +12474,7 @@
         // Fall through
       }
     }
-    throw jsonDecoder.mismatch(jsonPath, "RefactoringProblemSeverity");
+    throw jsonDecoder.mismatch(jsonPath, "RefactoringProblemSeverity", json);
   }
 
   /**
@@ -11958,11 +12505,11 @@
     }
     if (json is Map) {
       if (json["type"] != "remove") {
-        throw jsonDecoder.mismatch(jsonPath, "equal " + "remove");
+        throw jsonDecoder.mismatch(jsonPath, "equal " + "remove", json);
       }
       return new RemoveContentOverlay();
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "RemoveContentOverlay");
+      throw jsonDecoder.mismatch(jsonPath, "RemoveContentOverlay", json);
     }
   }
 
@@ -12076,7 +12623,7 @@
       }
       return new RequestError(code, message, stackTrace: stackTrace);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "RequestError");
+      throw jsonDecoder.mismatch(jsonPath, "RequestError", json);
     }
   }
 
@@ -12330,7 +12877,7 @@
         // Fall through
       }
     }
-    throw jsonDecoder.mismatch(jsonPath, "RequestErrorCode");
+    throw jsonDecoder.mismatch(jsonPath, "RequestErrorCode", json);
   }
 
   @override
@@ -12458,7 +13005,7 @@
       }
       return new SearchResult(location, kind, isPotential, path);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "SearchResult");
+      throw jsonDecoder.mismatch(jsonPath, "SearchResult", json);
     }
   }
 
@@ -12583,7 +13130,7 @@
         // Fall through
       }
     }
-    throw jsonDecoder.mismatch(jsonPath, "SearchResultKind");
+    throw jsonDecoder.mismatch(jsonPath, "SearchResultKind", json);
   }
 
   @override
@@ -12627,7 +13174,7 @@
         // Fall through
       }
     }
-    throw jsonDecoder.mismatch(jsonPath, "ServerService");
+    throw jsonDecoder.mismatch(jsonPath, "ServerService", json);
   }
 
   @override
@@ -12752,7 +13299,7 @@
       }
       return new SourceChange(message, edits: edits, linkedEditGroups: linkedEditGroups, selection: selection);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "SourceChange");
+      throw jsonDecoder.mismatch(jsonPath, "SourceChange", json);
     }
   }
 
@@ -12945,7 +13492,7 @@
       }
       return new SourceEdit(offset, length, replacement, id: id);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "SourceEdit");
+      throw jsonDecoder.mismatch(jsonPath, "SourceEdit", json);
     }
   }
 
@@ -13093,7 +13640,7 @@
       }
       return new SourceFileEdit(file, fileStamp, edits: edits);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "SourceFileEdit");
+      throw jsonDecoder.mismatch(jsonPath, "SourceFileEdit", json);
     }
   }
 
@@ -13342,7 +13889,7 @@
       }
       return new TypeHierarchyItem(classElement, displayName: displayName, memberElement: memberElement, superclass: superclass, interfaces: interfaces, mixins: mixins, subclasses: subclasses);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "TypeHierarchyItem");
+      throw jsonDecoder.mismatch(jsonPath, "TypeHierarchyItem", json);
     }
   }
 
@@ -13557,7 +14104,7 @@
       }
       return new ExtractLocalVariableFeedback(names, offsets, lengths);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "extractLocalVariable feedback");
+      throw jsonDecoder.mismatch(jsonPath, "extractLocalVariable feedback", json);
     }
   }
 
@@ -13661,7 +14208,7 @@
       }
       return new ExtractLocalVariableOptions(name, extractAll);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "extractLocalVariable options");
+      throw jsonDecoder.mismatch(jsonPath, "extractLocalVariable options", json);
     }
   }
 
@@ -13913,7 +14460,7 @@
       }
       return new ExtractMethodFeedback(offset, length, returnType, names, canCreateGetter, parameters, offsets, lengths);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "extractMethod feedback");
+      throw jsonDecoder.mismatch(jsonPath, "extractMethod feedback", json);
     }
   }
 
@@ -14119,7 +14666,7 @@
       }
       return new ExtractMethodOptions(returnType, createGetter, name, parameters, extractAll);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "extractMethod options");
+      throw jsonDecoder.mismatch(jsonPath, "extractMethod options", json);
     }
   }
 
@@ -14228,7 +14775,7 @@
       }
       return new InlineLocalVariableFeedback(name, occurrences);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "inlineLocalVariable feedback");
+      throw jsonDecoder.mismatch(jsonPath, "inlineLocalVariable feedback", json);
     }
   }
 
@@ -14364,7 +14911,7 @@
       }
       return new InlineMethodFeedback(methodName, isDeclaration, className: className);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "inlineMethod feedback");
+      throw jsonDecoder.mismatch(jsonPath, "inlineMethod feedback", json);
     }
   }
 
@@ -14468,7 +15015,7 @@
       }
       return new InlineMethodOptions(deleteSource, inlineAll);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "inlineMethod options");
+      throw jsonDecoder.mismatch(jsonPath, "inlineMethod options", json);
     }
   }
 
@@ -14562,7 +15109,7 @@
       }
       return new MoveFileOptions(newFile);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "moveFile options");
+      throw jsonDecoder.mismatch(jsonPath, "moveFile options", json);
     }
   }
 
@@ -14707,7 +15254,7 @@
       }
       return new RenameFeedback(offset, length, elementKindName, oldName);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "rename feedback");
+      throw jsonDecoder.mismatch(jsonPath, "rename feedback", json);
     }
   }
 
@@ -14785,7 +15332,7 @@
       }
       return new RenameOptions(newName);
     } else {
-      throw jsonDecoder.mismatch(jsonPath, "rename options");
+      throw jsonDecoder.mismatch(jsonPath, "rename options", json);
     }
   }
 
diff --git a/pkg/analysis_server/lib/src/get_handler.dart b/pkg/analysis_server/lib/src/get_handler.dart
index 983f689..7068b9d 100644
--- a/pkg/analysis_server/lib/src/get_handler.dart
+++ b/pkg/analysis_server/lib/src/get_handler.dart
@@ -1010,8 +1010,7 @@
     List<Folder> folders = folderMap.keys.toList();
     folders.sort((Folder first, Folder second) =>
         first.shortName.compareTo(second.shortName));
-    AnalysisOptionsImpl options =
-        analysisServer.contextDirectoryManager.defaultOptions;
+    AnalysisOptionsImpl options = analysisServer.contextManager.defaultOptions;
     ServerOperationQueue operationQueue = analysisServer.operationQueue;
 
     buffer.write('<h3>Analysis Domain</h3>');
diff --git a/pkg/analysis_server/lib/src/operation/operation_analysis.dart b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
index ebe71e7..70b1e9b 100644
--- a/pkg/analysis_server/lib/src/operation/operation_analysis.dart
+++ b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
@@ -6,12 +6,14 @@
 
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/computer/computer_highlights.dart';
+import 'package:analysis_server/src/computer/computer_highlights2.dart';
 import 'package:analysis_server/src/computer/computer_navigation.dart';
 import 'package:analysis_server/src/computer/computer_occurrences.dart';
 import 'package:analysis_server/src/computer/computer_outline.dart';
 import 'package:analysis_server/src/computer/computer_overrides.dart';
 import 'package:analysis_server/src/operation/operation.dart';
 import 'package:analysis_server/src/protocol_server.dart' as protocol;
+import 'package:analysis_server/src/services/dependencies/library_dependencies.dart';
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/engine.dart';
@@ -98,6 +100,30 @@
   }
 }
 
+void sendAnalysisNotificationAnalyzedFiles(AnalysisServer server) {
+  _sendNotification(server, () {
+    // TODO(paulberry): if it proves to be too inefficient to recompute the set
+    // of analyzed files each time analysis is complete, consider modifying the
+    // analysis engine to update this set incrementally as analysis is
+    // performed.
+    LibraryDependencyCollector collector =
+        new LibraryDependencyCollector(server.getAnalysisContexts().toList());
+    Set<String> analyzedFiles = collector.collectLibraryDependencies();
+    Set<String> prevAnalyzedFiles = server.prevAnalyzedFiles;
+    if (prevAnalyzedFiles != null &&
+        prevAnalyzedFiles.length == analyzedFiles.length &&
+        prevAnalyzedFiles.difference(analyzedFiles).isEmpty) {
+      // No change to the set of analyzed files.  No need to send another
+      // notification.
+      return;
+    }
+    server.prevAnalyzedFiles = analyzedFiles;
+    protocol.AnalysisAnalyzedFilesParams params =
+        new protocol.AnalysisAnalyzedFilesParams(analyzedFiles.toList());
+    server.sendNotification(params.toNotification());
+  });
+}
+
 void sendAnalysisNotificationErrors(AnalysisServer server, String file,
     LineInfo lineInfo, List<AnalysisError> errors) {
   _sendNotification(server, () {
@@ -124,7 +150,12 @@
 void sendAnalysisNotificationHighlights(
     AnalysisServer server, String file, CompilationUnit dartUnit) {
   _sendNotification(server, () {
-    var regions = new DartUnitHighlightsComputer(dartUnit).compute();
+    List<protocol.HighlightRegion> regions;
+    if (server.options.useAnalysisHighlight2) {
+      regions = new DartUnitHighlightsComputer2(dartUnit).compute();
+    } else {
+      regions = new DartUnitHighlightsComputer(dartUnit).compute();
+    }
     var params = new protocol.AnalysisHighlightsParams(file, regions);
     server.sendNotification(params.toNotification());
   });
diff --git a/pkg/analysis_server/lib/src/protocol.dart b/pkg/analysis_server/lib/src/protocol.dart
index f633eb8..aec8d71 100644
--- a/pkg/analysis_server/lib/src/protocol.dart
+++ b/pkg/analysis_server/lib/src/protocol.dart
@@ -281,7 +281,7 @@
    * Create an exception to throw if the JSON object at [jsonPath] fails to
    * match the API definition of [expected].
    */
-  dynamic mismatch(String jsonPath, String expected);
+  dynamic mismatch(String jsonPath, String expected, [Object actual]);
 
   /**
    * Create an exception to throw if the JSON object at [jsonPath] is missing
@@ -301,7 +301,7 @@
     } else if (json == 'false') {
       return false;
     }
-    throw mismatch(jsonPath, 'bool');
+    throw mismatch(jsonPath, 'bool', json);
   }
 
   /**
@@ -313,10 +313,10 @@
       return json;
     } else if (json is String) {
       return int.parse(json, onError: (String value) {
-        throw mismatch(jsonPath, 'int');
+        throw mismatch(jsonPath, 'int', json);
       });
     }
-    throw mismatch(jsonPath, 'int');
+    throw mismatch(jsonPath, 'int', json);
   }
 
   /**
@@ -334,7 +334,7 @@
       }
       return result;
     } else {
-      throw mismatch(jsonPath, 'List');
+      throw mismatch(jsonPath, 'List', json);
     }
   }
 
@@ -362,7 +362,7 @@
       });
       return result;
     } else {
-      throw mismatch(jsonPath, 'Map');
+      throw mismatch(jsonPath, 'Map', json);
     }
   }
 
@@ -373,7 +373,7 @@
     if (json is String) {
       return json;
     } else {
-      throw mismatch(jsonPath, 'String');
+      throw mismatch(jsonPath, 'String', json);
     }
   }
 
@@ -392,11 +392,11 @@
       var disambiguatorPath = '$jsonPath[${JSON.encode(field)}]';
       String disambiguator = _decodeString(disambiguatorPath, json[field]);
       if (!decoders.containsKey(disambiguator)) {
-        throw mismatch(disambiguatorPath, 'One of: ${decoders.keys.toList()}');
+        throw mismatch(disambiguatorPath, 'One of: ${decoders.keys.toList()}', json);
       }
       return decoders[disambiguator](jsonPath, json);
     } else {
-      throw mismatch(jsonPath, 'Map');
+      throw mismatch(jsonPath, 'Map', json);
     }
   }
 }
@@ -616,9 +616,17 @@
   }
 
   @override
-  dynamic mismatch(String jsonPath, String expected) {
+  dynamic mismatch(String jsonPath, String expected, [Object actual]) {
+    StringBuffer buffer = new StringBuffer();
+    buffer.write('Expected to be ');
+    buffer.write(expected);
+    if (actual != null) {
+      buffer.write('; found "');
+      buffer.write(JSON.encode(actual));
+      buffer.write('"');
+    }
     return new RequestFailure(new Response.invalidParameter(
-        _request, jsonPath, 'Expected to be $expected'));
+        _request, jsonPath, buffer.toString()));
   }
 
   @override
@@ -915,8 +923,18 @@
   ResponseDecoder(this.refactoringKind);
 
   @override
-  dynamic mismatch(String jsonPath, String expected) {
-    return new Exception('Expected $expected at $jsonPath');
+  dynamic mismatch(String jsonPath, String expected, [Object actual]) {
+    StringBuffer buffer = new StringBuffer();
+    buffer.write('Expected ');
+    buffer.write(expected);
+    if (actual != null) {
+      buffer.write(' found "');
+      buffer.write(JSON.encode(actual));
+      buffer.write('"');
+    }
+    buffer.write(' at ');
+    buffer.write(jsonPath);
+    return new Exception(buffer.toString());
   }
 
   @override
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index 7604fc0..8097f94 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -9,6 +9,7 @@
 import 'dart:math';
 
 import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/context_manager.dart';
 import 'package:analysis_server/src/plugin/server_plugin.dart';
 import 'package:analysis_server/src/server/http_server.dart';
 import 'package:analysis_server/src/server/stdio_server.dart';
@@ -265,6 +266,12 @@
   static const String NO_INDEX = "no-index";
 
   /**
+   * The name of the flag used to enable version 2 of semantic highlight
+   * notification.
+   */
+  static const String USE_ANALISYS_HIGHLIGHT2 = "useAnalysisHighlight2";
+
+  /**
    * The option for specifying the http diagnostic port.
    * If specified, users can review server status and performance information
    * by opening a web browser on http://localhost:<port>
@@ -284,9 +291,16 @@
   InstrumentationServer instrumentationServer;
 
   /**
+   * The context manager used to create analysis contexts within each of the
+   * analysis roots.
+   */
+  ContextManager contextManager;
+
+  /**
    * The package resolver provider used to override the way package URI's are
    * resolved in some contexts.
    */
+  @deprecated
   ResolverProvider packageResolverProvider;
 
   /**
@@ -349,6 +363,8 @@
         results[INCREMENTAL_RESOLUTION_VALIDATION];
     analysisServerOptions.noErrorNotification = results[NO_ERROR_NOTIFICATION];
     analysisServerOptions.noIndex = results[NO_INDEX];
+    analysisServerOptions.useAnalysisHighlight2 =
+        results[USE_ANALISYS_HIGHLIGHT2];
     analysisServerOptions.fileReadMode = results[FILE_READ_MODE];
 
     _initIncrementalLogger(results[INCREMENTAL_RESOLUTION_LOG]);
@@ -396,7 +412,7 @@
     // Create the sockets and start listening for requests.
     //
     socketServer = new SocketServer(analysisServerOptions, defaultSdk, service,
-        serverPlugin, packageResolverProvider);
+        serverPlugin, contextManager, packageResolverProvider);
     httpServer = new HttpAnalysisServer(socketServer);
     stdioServer = new StdioAnalysisServer(socketServer);
     socketServer.userDefinedPlugins = _userDefinedPlugins;
@@ -495,6 +511,10 @@
         negatable: false);
     parser.addFlag(NO_INDEX,
         help: "disable indexing sources", defaultsTo: false, negatable: false);
+    parser.addFlag(USE_ANALISYS_HIGHLIGHT2,
+        help: "enable version 2 of semantic highlight",
+        defaultsTo: false,
+        negatable: false);
     parser.addOption(FILE_READ_MODE,
         help: "an option of the ways files can be read from disk, " +
             "some clients normalize end of line characters which would make " +
diff --git a/pkg/analysis_server/lib/src/services/completion/completion_core.dart b/pkg/analysis_server/lib/src/services/completion/completion_core.dart
new file mode 100644
index 0000000..a8ed44b
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/completion/completion_core.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2015, 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 analysis_server.src.services.completion.completion_dart;
+
+import 'package:analysis_server/completion/completion_core.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/source.dart';
+
+/**
+ * The information about a requested list of completions.
+ */
+class CompletionRequestImpl implements CompletionRequest {
+  /**
+   * The analysis context in which the completion is being requested.
+   */
+  AnalysisContext context;
+
+  /**
+   * The resource provider associated with this request.
+   */
+  ResourceProvider resourceProvider;
+
+  /**
+   * The source in which the completion is being requested.
+   */
+  Source source;
+
+  /**
+   * The offset within the source at which the completion is being requested.
+   */
+  int offset;
+
+  /**
+   * Initialize a newly created completion request based on the given arguments.
+   */
+  CompletionRequestImpl(
+      this.context, this.resourceProvider, this.source, this.offset);
+}
diff --git a/pkg/analysis_server/lib/src/services/completion/completion_dart.dart b/pkg/analysis_server/lib/src/services/completion/completion_dart.dart
new file mode 100644
index 0000000..2dd4eeb
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/completion/completion_dart.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2015, 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 analysis_server.src.services.completion.completion_dart;
+
+import 'package:analysis_server/completion/completion_core.dart';
+import 'package:analysis_server/completion/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/completion_core.dart';
+import 'package:analyzer/src/generated/ast.dart';
+
+/**
+ * The information about a requested list of completions within a Dart file.
+ */
+class DartCompletionRequestImpl extends CompletionRequestImpl
+    implements DartCompletionRequest {
+  /**
+   * The compilation unit in which the completion was requested.
+   */
+  final CompilationUnit unit;
+
+  /**
+   * A flag indicating whether the compilation [unit] is resolved.
+   */
+  final bool isResolved;
+
+  /**
+   * Initialize a newly created completion request based on the given arguments.
+   */
+  DartCompletionRequestImpl(
+      CompletionRequest request, this.unit, this.isResolved)
+      : super(request.context, request.resourceProvider, request.source,
+          request.offset);
+}
diff --git a/pkg/analysis_server/lib/src/services/completion/completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/completion_manager.dart
index 5708274..986cc8b 100644
--- a/pkg/analysis_server/lib/src/services/completion/completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/completion_manager.dart
@@ -7,7 +7,7 @@
 import 'dart:async';
 
 import 'package:analysis_server/completion/completion_core.dart'
-    show CompletionRequest;
+    show CompletionRequest, CompletionResult;
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/protocol.dart';
 import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
@@ -246,7 +246,7 @@
 /**
  * Code completion result generated by an [CompletionManager].
  */
-class CompletionResult {
+class CompletionResultImpl implements CompletionResult {
 
   /**
    * The length of the text to be replaced if the remainder of the identifier
@@ -274,8 +274,15 @@
    */
   final bool last;
 
-  CompletionResult(this.replacementOffset, this.replacementLength,
+  CompletionResultImpl(this.replacementOffset, this.replacementLength,
       this.suggestions, this.last);
+
+  @override
+  // TODO(brianwilkerson) Figure out whether this is correct.
+  bool get hasNewSuggestions => suggestions.isNotEmpty;
+
+  @override
+  bool get isLast => last;
 }
 
 class NoOpCompletionManager extends CompletionManager {
@@ -283,7 +290,7 @@
 
   @override
   void computeSuggestions(CompletionRequest request) {
-    controller.add(new CompletionResult(request.offset, 0, [], true));
+    controller.add(new CompletionResultImpl(request.offset, 0, [], true));
   }
 }
 
diff --git a/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart
index 88b78a4..9fb70ba 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart
@@ -42,8 +42,8 @@
 const int DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE = 1056;
 const int DART_RELEVANCE_LOCAL_VARIABLE = 1059;
 const int DART_RELEVANCE_LOW = 500;
-const int DART_RELEVANCE_PARAMETER = 1059;
 const int DART_RELEVANCE_NAMED_PARAMETER = 1060;
+const int DART_RELEVANCE_PARAMETER = 1059;
 
 /**
  * The base class for contributing code completion suggestions.
@@ -222,7 +222,7 @@
     if (controller == null || controller.isClosed) {
       return;
     }
-    controller.add(new CompletionResult(request.replacementOffset,
+    controller.add(new CompletionResultImpl(request.replacementOffset,
         request.replacementLength, request.suggestions, last));
     if (last) {
       controller.close();
diff --git a/pkg/analysis_server/lib/src/socket_server.dart b/pkg/analysis_server/lib/src/socket_server.dart
index 36e7836..1968766 100644
--- a/pkg/analysis_server/lib/src/socket_server.dart
+++ b/pkg/analysis_server/lib/src/socket_server.dart
@@ -6,6 +6,7 @@
 
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/channel/channel.dart';
+import 'package:analysis_server/src/context_manager.dart';
 import 'package:analysis_server/src/plugin/server_plugin.dart';
 import 'package:analysis_server/src/protocol.dart';
 import 'package:analysis_server/src/services/index/index.dart';
@@ -28,6 +29,7 @@
   final DirectoryBasedDartSdk defaultSdk;
   final InstrumentationService instrumentationService;
   final ServerPlugin serverPlugin;
+  final ContextManager contextManager;
   final ResolverProvider packageResolverProvider;
 
   /**
@@ -42,7 +44,7 @@
   List<Plugin> userDefinedPlugins;
 
   SocketServer(this.analysisServerOptions, this.defaultSdk,
-      this.instrumentationService, this.serverPlugin,
+      this.instrumentationService, this.serverPlugin, this.contextManager,
       this.packageResolverProvider);
 
   /**
@@ -82,6 +84,7 @@
         new OptimizingPubPackageMapProvider(resourceProvider, defaultSdk),
         index, serverPlugin, analysisServerOptions, defaultSdk,
         instrumentationService,
+        contextManager: contextManager,
         packageResolverProvider: packageResolverProvider,
         rethrowExceptions: false);
     analysisServer.userDefinedPlugins = userDefinedPlugins;
diff --git a/pkg/analysis_server/lib/src/status/get_handler.dart b/pkg/analysis_server/lib/src/status/get_handler.dart
index 3e18f8a..0a053bd 100644
--- a/pkg/analysis_server/lib/src/status/get_handler.dart
+++ b/pkg/analysis_server/lib/src/status/get_handler.dart
@@ -1042,8 +1042,7 @@
     List<Folder> folders = folderMap.keys.toList();
     folders.sort((Folder first, Folder second) =>
         first.shortName.compareTo(second.shortName));
-    AnalysisOptionsImpl options =
-        analysisServer.contextDirectoryManager.defaultOptions;
+    AnalysisOptionsImpl options = analysisServer.contextManager.defaultOptions;
     ServerOperationQueue operationQueue = analysisServer.operationQueue;
 
     buffer.write('<h3>Analysis Domain</h3>');
diff --git a/pkg/analysis_server/lib/src/watch_manager.dart b/pkg/analysis_server/lib/src/watch_manager.dart
new file mode 100644
index 0000000..d4df4d5
--- /dev/null
+++ b/pkg/analysis_server/lib/src/watch_manager.dart
@@ -0,0 +1,287 @@
+// Copyright (c) 2015, 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 context.directory.manager;
+
+import 'dart:async';
+import 'dart:collection';
+import 'dart:core' hide Resource;
+
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:watcher/watcher.dart';
+
+/**
+ * A function called when a watch [event] associated with a watched resource is
+ * received. The list of [tokens] will contain all of the tokens associated with
+ * folders containing (or the same as) the watched resource.
+ */
+typedef void HandleWatchEvent<T>(WatchEvent event, List<T> tokens);
+
+/**
+ * An object that manages a collections of folders that need to be watched in
+ * order to ensure that we are watching the minimum number of folders.
+ *
+ * Each folder can be watched multiple times. In order to differenciate between
+ * the watch requests, each watch request has a *token* associated with it. The
+ * tokens that are used must correctly implement both [==] and [hashCode].
+ */
+class WatchManager<T> {
+  /**
+   * The resource provider used to convert paths to resources.
+   */
+  final ResourceProvider provider;
+
+  /**
+   * The function that is invoked when a watch event is received.
+   */
+  final HandleWatchEvent<T> handleWatchEvent;
+
+  /**
+   * A node representing the (conceptual) root of all other folders.
+   */
+  final WatchNode<T> rootNode = new WatchNode<T>(null);
+
+  /**
+   * A table mapping the folders that are being watched to the nodes
+   * representing those folders.
+   */
+  final Map<Folder, WatchNode<T>> _watchedFolders =
+      new HashMap<Folder, WatchNode<T>>();
+
+  /**
+   * Initialize a newly created watch manager to use the resource [provider] to
+   * convert file paths to resources and to call the [handleWatchEvent] function
+   * to notify the owner of the manager when resources have been changed.
+   */
+  WatchManager(this.provider, this.handleWatchEvent);
+
+  /**
+   * Record the fact that we are now watching the given [folder], and associate
+   * that folder with the given [token]. If the folder is already being watched
+   * and is already associated with the token, then this request is effectively
+   * ignored.
+   */
+  void addFolder(Folder folder, T token) {
+    WatchNode<T> folderNode = _watchedFolders[folder];
+    //
+    // If the folder was already being watched, just record the new token.
+    //
+    if (folderNode != null) {
+      folderNode.tokens.add(token);
+      return;
+    }
+    //
+    // Otherwise, add the folder to the tree.
+    //
+    folderNode = new WatchNode<T>(folder);
+    _watchedFolders[folder] = folderNode;
+    folderNode.tokens.add(token);
+    WatchNode<T> parentNode = rootNode.insert(folderNode);
+    //
+    // If we are not watching a folder that contains the folder, then create a
+    // subscription for it.
+    //
+    if (parentNode == rootNode) {
+      folderNode.subscription = folder.changes.listen(_handleWatchEvent);
+      //
+      // Any nodes that became children of the newly added folder would have
+      // been top-level folders and would have been watched. We need to cancel
+      // their subscriptions.
+      //
+      for (WatchNode<T> childNode in folderNode.children) {
+        assert(childNode.subscription != null);
+        if (childNode.subscription != null) {
+          childNode.subscription.cancel();
+          childNode.subscription = null;
+        }
+      }
+    }
+  }
+
+  /**
+   * Record that we are no longer watching the given [folder] with the given
+   * [token].
+   *
+   * Throws a [StateError] if the folder is not be watched or is not associated
+   * with the given token.
+   */
+  void removeFolder(Folder folder, T token) {
+    WatchNode<T> folderNode = _watchedFolders[folder];
+    if (folderNode == null) {
+      assert(false);
+      return;
+    }
+    Set<T> tokens = folderNode.tokens;
+    if (!tokens.remove(token)) {
+      assert(false);
+    }
+    //
+    // If this was the last token associated with this folder, then remove the
+    // folder from the tree.
+    //
+    if (tokens.isEmpty) {
+      //
+      // If the folder was a top-level folder, then we need to create
+      // subscriptions for all of its children and cancel its subscription.
+      //
+      if (folderNode.subscription != null) {
+        for (WatchNode<T> childNode in folderNode.children) {
+          assert(childNode.subscription == null);
+          childNode.subscription =
+              childNode.folder.changes.listen(_handleWatchEvent);
+        }
+        folderNode.subscription.cancel();
+        folderNode.subscription = null;
+      }
+      folderNode.delete();
+      _watchedFolders.remove(folder);
+    }
+  }
+
+  /**
+   * Dispatch the given event by finding all of the tokens that contain the
+   * resource and invoke the [handleWatchEvent] function.
+   */
+  void _handleWatchEvent(WatchEvent event) {
+    String path = event.path;
+    List<T> tokens = <T>[];
+    WatchNode<T> parent = rootNode.findParent(path);
+    while (parent != rootNode) {
+      tokens.addAll(parent.tokens);
+      parent = parent.parent;
+    }
+    if (tokens.isNotEmpty) {
+      handleWatchEvent(event, tokens);
+    }
+  }
+}
+
+/**
+ * The information kept by a [WatchManager] about a single folder that is being
+ * watched.
+ *
+ * Watch nodes form a tree in which one node is a child of another node if the
+ * child's folder is contained in the parent's folder and none of the folders
+ * between the parent's folder and the child's folder are being watched.
+ */
+class WatchNode<T> {
+  /**
+   * The folder for which information is being maintained. This is `null` for
+   * the unique "root" node that maintains references to all of the top-level
+   * folders being watched.
+   */
+  final Folder folder;
+
+  /**
+   * The parent of this node.
+   */
+  WatchNode parent;
+
+  /**
+   * The information for the children of this node.
+   */
+  final List<WatchNode> _children = <WatchNode>[];
+
+  /**
+   * The tokens that were used to register interest in watching this folder.
+   */
+  final Set<T> tokens = new HashSet<T>();
+
+  /**
+   * The subscription being used to watch the folder, or `null` if the folder
+   * is being watched as part of a containing folder (in other words, if the
+   * parent is not the special "root").
+   */
+  StreamSubscription<WatchEvent> subscription;
+
+  /**
+   * Initialize a newly created node to represent the given [folder].
+   */
+  WatchNode(this.folder);
+
+  /**
+   * Return a list containing the children of this node.
+   */
+  Iterable<WatchNode> get children => _children;
+
+  /**
+   * Remove this node from the tree of watched folders.
+   */
+  void delete() {
+    if (parent != null) {
+      parent._removeChild(this);
+      parent = null;
+    }
+  }
+
+  /**
+   * Return the highest node reachable from this node that contains the given
+   * [filePath]. If no other node is found, return this node, even if this node
+   * does not contain the path.
+   */
+  WatchNode findParent(String filePath) {
+    if (_children == null) {
+      return this;
+    }
+    for (WatchNode childNode in _children) {
+      if (childNode.folder.isOrContains(filePath)) {
+        return childNode.findParent(filePath);
+      }
+    }
+    return this;
+  }
+
+  /**
+   * Insert the given [node] into the tree of watched folders, either as a child
+   * of this node or as a descendent of one of this node's children. Return the
+   * immediate parent of the newly added node.
+   */
+  WatchNode insert(WatchNode node) {
+    WatchNode parentNode = findParent(node.folder.path);
+    parentNode._addChild(node, true);
+    return parentNode;
+  }
+
+  @override
+  String toString() => 'WatchNode ('
+      'folder = ${folder == null ? '<root>' : folder.path}, '
+      'tokens = $tokens, '
+      'subscription = ${subscription == null ? 'null' : 'non-null'})';
+
+  /**
+   * Add the given [newChild] as an immediate child of this node.
+   *
+   * If [checkChildren] is `true`, check to see whether any of the previously
+   * existing children of this node should now be children of the new child, and
+   * if so, move them.
+   */
+  void _addChild(WatchNode newChild, bool checkChildren) {
+    if (checkChildren) {
+      Folder folder = newChild.folder;
+      for (int i = _children.length - 1; i >= 0; i--) {
+        WatchNode existingChild = _children[i];
+        if (folder.contains(existingChild.folder.path)) {
+          newChild._addChild(existingChild, false);
+          _children.removeAt(i);
+        }
+      }
+    }
+    newChild.parent = this;
+    _children.add(newChild);
+  }
+
+  /**
+   * Remove the given [node] from the list of children of this node. Any
+   * children of the [node] will become children of this node.
+   */
+  void _removeChild(WatchNode child) {
+    _children.remove(child);
+    Iterable<WatchNode> grandchildren = child.children;
+    for (WatchNode grandchild in grandchildren) {
+      grandchild.parent = this;
+      _children.add(grandchild);
+    }
+    child._children.clear();
+  }
+}
diff --git a/pkg/analysis_server/lib/starter.dart b/pkg/analysis_server/lib/starter.dart
index e96c8b3..87821c1 100644
--- a/pkg/analysis_server/lib/starter.dart
+++ b/pkg/analysis_server/lib/starter.dart
@@ -4,6 +4,7 @@
 
 library driver;
 
+import 'package:analysis_server/src/context_manager.dart';
 import 'package:analysis_server/src/server/driver.dart';
 import 'package:analysis_server/uri/resolver_provider.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
@@ -19,6 +20,12 @@
   factory ServerStarter() = Driver;
 
   /**
+   * Set the context manager used to create analysis contexts within each of the
+   * analysis roots.
+   */
+  void set contextManager(ContextManager manager);
+
+  /**
    * Set the instrumentation [server] that is to be used by the analysis server.
    */
   void set instrumentationServer(InstrumentationServer server);
@@ -28,6 +35,7 @@
    * are resolved in some contexts. The provider should return `null` if the
    * default package resolution scheme should be used instead.
    */
+  @deprecated
   void set packageResolverProvider(ResolverProvider provider);
 
   /**
diff --git a/pkg/analysis_server/pubspec.yaml b/pkg/analysis_server/pubspec.yaml
index 6f5124c..a9cb19b 100644
--- a/pkg/analysis_server/pubspec.yaml
+++ b/pkg/analysis_server/pubspec.yaml
@@ -6,7 +6,7 @@
 environment:
   sdk: '>=1.9.0 <2.0.0'
 dependencies:
-  analyzer: '>=0.25.1-alpha.4 <0.26.0'
+  analyzer: '>=0.25.3-alpha.0 <0.26.0'
   args: '>=0.13.0 <0.14.0'
   dart_style: '>=0.1.7 <0.2.0'
   logging: any
diff --git a/pkg/analysis_server/test/analysis/get_errors_test.dart b/pkg/analysis_server/test/analysis/get_errors_test.dart
index 846990d..14203c9 100644
--- a/pkg/analysis_server/test/analysis/get_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/get_errors_test.dart
@@ -99,7 +99,7 @@
     // remove context, causes sending an "invalid file" error
     {
       Folder projectFolder = resourceProvider.getResource(projectPath);
-      server.contextDirectoryManager.removeContext(projectFolder);
+      server.contextManager.removeContext(projectFolder);
     }
     // wait for an error response
     return serverChannel.waitForResponse(request).then((Response response) {
diff --git a/pkg/analysis_server/test/analysis/get_navigation_test.dart b/pkg/analysis_server/test/analysis/get_navigation_test.dart
index b5c224e..1de99e4 100644
--- a/pkg/analysis_server/test/analysis/get_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/get_navigation_test.dart
@@ -82,7 +82,7 @@
     // remove context, causes sending an "invalid file" error
     {
       Folder projectFolder = resourceProvider.getResource(projectPath);
-      server.contextDirectoryManager.removeContext(projectFolder);
+      server.contextManager.removeContext(projectFolder);
     }
     // wait for an error response
     Response response = await serverChannel.waitForResponse(request);
diff --git a/pkg/analysis_server/test/analysis/notification_analyzedFiles_test.dart b/pkg/analysis_server/test/analysis/notification_analyzedFiles_test.dart
new file mode 100644
index 0000000..c4fbf14
--- /dev/null
+++ b/pkg/analysis_server/test/analysis/notification_analyzedFiles_test.dart
@@ -0,0 +1,118 @@
+// Copyright (c) 2014, 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 test.analysis.notification.analyzedDirectories;
+
+import 'dart:async';
+
+import 'package:analysis_server/src/constants.dart';
+import 'package:analysis_server/src/protocol.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+import 'package:unittest/unittest.dart';
+
+import '../analysis_abstract.dart';
+import '../mocks.dart';
+
+main() {
+  groupSep = ' | ';
+  defineReflectiveTests(AnalysisNotificationAnalyzedFilesTest);
+}
+
+@reflectiveTest
+class AnalysisNotificationAnalyzedFilesTest extends AbstractAnalysisTest {
+  List<String> analyzedFiles;
+  bool analyzedFilesReceived = false;
+
+  void assertHasFile(String filePath) {
+    expect(analyzedFilesReceived, isTrue);
+    expect(analyzedFiles, contains(filePath));
+  }
+
+  Future prepareAnalyzedFiles() {
+    addGeneralAnalysisSubscription(GeneralAnalysisService.ANALYZED_FILES);
+    return waitForTasksFinished();
+  }
+
+  void processNotification(Notification notification) {
+    if (notification.event == ANALYSIS_ANALYZED_FILES) {
+      AnalysisAnalyzedFilesParams params =
+          new AnalysisAnalyzedFilesParams.fromNotification(notification);
+      analyzedFilesReceived = true;
+      analyzedFiles = params.directories;
+    }
+  }
+
+  void setUp() {
+    super.setUp();
+    createProject();
+  }
+
+  test_afterAnalysis() {
+    addTestFile('''
+class A {}
+''');
+    return waitForTasksFinished().then((_) {
+      return prepareAnalyzedFiles().then((_) {
+        assertHasFile(testFile);
+      });
+    });
+  }
+
+  test_beforeAnalysis() {
+    addTestFile('''
+class A {}
+''');
+    return prepareAnalyzedFiles().then((_) {
+      assertHasFile(testFile);
+    });
+  }
+
+  test_insignificant_change() async {
+    // Making a change that doesn't affect the set of reachable files should
+    // not trigger the notification to be re-sent.
+    addTestFile('class A {}');
+    await prepareAnalyzedFiles();
+    await waitForTasksFinished();
+    expect(analyzedFilesReceived, isTrue);
+    analyzedFilesReceived = false;
+    modifyTestFile('class B {}');
+    await pumpEventQueue();
+    await waitForTasksFinished();
+    expect(analyzedFilesReceived, isFalse);
+  }
+
+  test_resubscribe_no_changes() async {
+    // Unsubscribing and resubscribing should cause the notification to be
+    // re-sent, even if nothing has changed.
+    addTestFile('class A {}');
+    await prepareAnalyzedFiles();
+    await waitForTasksFinished();
+    expect(analyzedFilesReceived, isTrue);
+    unsubscribeAnalyzedFiles();
+    analyzedFilesReceived = false;
+    await prepareAnalyzedFiles();
+    expect(analyzedFilesReceived, isTrue);
+    assertHasFile(testFile);
+  }
+
+  test_significant_change() async {
+    // Making a change that *does* affect the set of reachable files should
+    // trigger the notification to be re-sent.
+    addTestFile('class A {}');
+    addFile('/foo.dart', 'library foo');
+    await prepareAnalyzedFiles();
+    await waitForTasksFinished();
+    expect(analyzedFilesReceived, isTrue);
+    analyzedFilesReceived = false;
+    modifyTestFile('import "/foo.dart";');
+    await pumpEventQueue();
+    await waitForTasksFinished();
+    expect(analyzedFilesReceived, isTrue);
+    assertHasFile('/foo.dart');
+  }
+
+  void unsubscribeAnalyzedFiles() {
+    removeGeneralAnalysisSubscription(GeneralAnalysisService.ANALYZED_FILES);
+  }
+}
diff --git a/pkg/analysis_server/test/analysis/notification_highlights_test2.dart b/pkg/analysis_server/test/analysis/notification_highlights_test2.dart
new file mode 100644
index 0000000..7659125
--- /dev/null
+++ b/pkg/analysis_server/test/analysis/notification_highlights_test2.dart
@@ -0,0 +1,1087 @@
+// Copyright (c) 2014, 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 test.analysis.notification.highlights2;
+
+import 'dart:async';
+
+import 'package:analysis_server/src/constants.dart';
+import 'package:analysis_server/src/protocol.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+import 'package:unittest/unittest.dart';
+
+import '../analysis_abstract.dart';
+
+main() {
+  defineReflectiveTests(AnalysisNotificationHighlightsTest);
+  defineReflectiveTests(HighlightTypeTest);
+}
+
+@reflectiveTest
+class AnalysisNotificationHighlightsTest extends AbstractAnalysisTest {
+  List<HighlightRegion> regions;
+
+  void assertHasRawRegion(HighlightRegionType type, int offset, int length) {
+    for (HighlightRegion region in regions) {
+      if (region.offset == offset &&
+          region.length == length &&
+          region.type == type) {
+        return;
+      }
+    }
+    fail('Expected to find (offset=$offset; length=$length; type=$type) in\n'
+        '${regions.join('\n')}');
+  }
+
+  void assertHasRegion(HighlightRegionType type, String search,
+      [int length = -1]) {
+    int offset = findOffset(search);
+    length = findRegionLength(search, length);
+    assertHasRawRegion(type, offset, length);
+  }
+
+  void assertHasStringRegion(HighlightRegionType type, String str) {
+    int offset = findOffset(str);
+    int length = str.length;
+    assertHasRawRegion(type, offset, length);
+  }
+
+  void assertNoRawRegion(HighlightRegionType type, int offset, int length) {
+    for (HighlightRegion region in regions) {
+      if (region.offset == offset &&
+          region.length == length &&
+          region.type == type) {
+        fail(
+            'Not expected to find (offset=$offset; length=$length; type=$type) in\n'
+            '${regions.join('\n')}');
+      }
+    }
+  }
+
+  void assertNoRegion(HighlightRegionType type, String search,
+      [int length = -1]) {
+    int offset = findOffset(search);
+    length = findRegionLength(search, length);
+    assertNoRawRegion(type, offset, length);
+  }
+
+  int findRegionLength(String search, int length) {
+    if (length == -1) {
+      length = 0;
+      while (length < search.length) {
+        int c = search.codeUnitAt(length);
+        if (length == 0 && c == '@'.codeUnitAt(0)) {
+          length++;
+          continue;
+        }
+        if (!(c >= 'a'.codeUnitAt(0) && c <= 'z'.codeUnitAt(0) ||
+            c >= 'A'.codeUnitAt(0) && c <= 'Z'.codeUnitAt(0) ||
+            c >= '0'.codeUnitAt(0) && c <= '9'.codeUnitAt(0))) {
+          break;
+        }
+        length++;
+      }
+    }
+    return length;
+  }
+
+  Future prepareHighlights() {
+    addAnalysisSubscription(AnalysisService.HIGHLIGHTS, testFile);
+    return waitForTasksFinished();
+  }
+
+  void processNotification(Notification notification) {
+    if (notification.event == ANALYSIS_HIGHLIGHTS) {
+      var params = new AnalysisHighlightsParams.fromNotification(notification);
+      if (params.file == testFile) {
+        regions = params.regions;
+      }
+    }
+  }
+
+  @override
+  void setUp() {
+    super.setUp();
+    server.options.useAnalysisHighlight2 = true;
+    createProject();
+  }
+
+  test_ANNOTATION_hasArguments() {
+    addTestFile('''
+class AAA {
+  const AAA(a, b, c);
+}
+@AAA(1, 2, 3) main() {}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.ANNOTATION, '@AAA(', '@AAA('.length);
+      assertHasRegion(HighlightRegionType.ANNOTATION, ') main', ')'.length);
+    });
+  }
+
+  test_ANNOTATION_noArguments() {
+    addTestFile('''
+const AAA = 42;
+@AAA main() {}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.ANNOTATION, '@AAA');
+    });
+  }
+
+  test_BUILT_IN_abstract() {
+    addTestFile('''
+abstract class A {};
+abstract class B = Object with A;
+main() {
+  var abstract = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'abstract class A');
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'abstract class B');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'abstract = 42');
+    });
+  }
+
+  test_BUILT_IN_as() {
+    addTestFile('''
+import 'dart:math' as math;
+main() {
+  p as int;
+  var as = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'as math');
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'as int');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'as = 42');
+    });
+  }
+
+  test_BUILT_IN_async() {
+    addTestFile('''
+fa() async {}
+fb() async* {}
+main() {
+  bool async = false;
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasStringRegion(HighlightRegionType.BUILT_IN, 'async');
+      assertHasStringRegion(HighlightRegionType.BUILT_IN, 'async*');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'async = false');
+    });
+  }
+
+  test_BUILT_IN_await() {
+    addTestFile('''
+main() async {
+  await 42;
+  await for (var item in []) {
+    print(item);
+  }
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'await 42');
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'await for');
+    });
+  }
+
+  test_BUILT_IN_deferred() {
+    addTestFile('''
+import 'dart:math' deferred as math;
+main() {
+  var deferred = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'deferred as math');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'deferred = 42');
+    });
+  }
+
+  test_BUILT_IN_export() {
+    addTestFile('''
+export "dart:math";
+main() {
+  var export = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'export "dart:');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'export = 42');
+    });
+  }
+
+  test_BUILT_IN_external() {
+    addTestFile('''
+class A {
+  external A();
+  external aaa();
+}
+external main() {
+  var external = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'external A()');
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'external aaa()');
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'external main()');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'external = 42');
+    });
+  }
+
+  test_BUILT_IN_factory() {
+    addTestFile('''
+class A {
+  factory A() => null;
+}
+main() {
+  var factory = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'factory A()');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'factory = 42');
+    });
+  }
+
+  test_BUILT_IN_get() {
+    addTestFile('''
+get aaa => 1;
+class A {
+  get bbb => 2;
+}
+main() {
+  var get = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'get aaa =>');
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'get bbb =>');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'get = 42');
+    });
+  }
+
+  test_BUILT_IN_hide() {
+    addTestFile('''
+import 'foo.dart' hide Foo;
+main() {
+  var hide = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'hide Foo');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'hide = 42');
+    });
+  }
+
+  test_BUILT_IN_implements() {
+    addTestFile('''
+class A {}
+class B implements A {}
+main() {
+  var implements = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'implements A {}');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'implements = 42');
+    });
+  }
+
+  test_BUILT_IN_import() {
+    addTestFile('''
+import "foo.dart";
+main() {
+  var import = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'import "');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'import = 42');
+    });
+  }
+
+  test_BUILT_IN_library() {
+    addTestFile('''
+library lib;
+main() {
+  var library = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'library lib;');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'library = 42');
+    });
+  }
+
+  test_BUILT_IN_native() {
+    addTestFile('''
+class A native "A_native" {}
+class B {
+  bbb() native "bbb_native";
+}
+main() {
+  var native = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'native "A_');
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'native "bbb_');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'native = 42');
+    });
+  }
+
+  test_BUILT_IN_on() {
+    addTestFile('''
+main() {
+  try {
+  } on int catch (e) {
+  }
+  var on = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'on int');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'on = 42');
+    });
+  }
+
+  test_BUILT_IN_operator() {
+    addTestFile('''
+class A {
+  operator +(x) => null;
+}
+main() {
+  var operator = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'operator +(');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'operator = 42');
+    });
+  }
+
+  test_BUILT_IN_part() {
+    addTestFile('''
+part "my_part.dart";
+main() {
+  var part = 42;
+}''');
+    addFile('/project/bin/my_part.dart', 'part of lib;');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'part "my_');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'part = 42');
+    });
+  }
+
+  test_BUILT_IN_partOf() {
+    addTestFile('''
+part of lib;
+main() {
+  var part = 1;
+  var of = 2;
+}''');
+    _addLibraryForTestPart();
+    return prepareHighlights().then((_) {
+      assertHasRegion(
+          HighlightRegionType.BUILT_IN, 'part of', 'part of'.length);
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'part = 1');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'of = 2');
+    });
+  }
+
+  test_BUILT_IN_set() {
+    addTestFile('''
+set aaa(x) {}
+class A
+  set bbb(x) {}
+}
+main() {
+  var set = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'set aaa(');
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'set bbb(');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'set = 42');
+    });
+  }
+
+  test_BUILT_IN_show() {
+    addTestFile('''
+import 'foo.dart' show Foo;
+main() {
+  var show = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'show Foo');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'show = 42');
+    });
+  }
+
+  test_BUILT_IN_static() {
+    addTestFile('''
+class A {
+  static aaa;
+  static bbb() {}
+}
+main() {
+  var static = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'static aaa;');
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'static bbb()');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'static = 42');
+    });
+  }
+
+  test_BUILT_IN_sync() {
+    addTestFile('''
+fa() sync {}
+fb() sync* {}
+main() {
+  bool sync = false;
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasStringRegion(HighlightRegionType.BUILT_IN, 'sync');
+      assertHasStringRegion(HighlightRegionType.BUILT_IN, 'sync*');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'sync = false');
+    });
+  }
+
+  test_BUILT_IN_typedef() {
+    addTestFile('''
+typedef A();
+main() {
+  var typedef = 42;
+}''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'typedef A();');
+      assertNoRegion(HighlightRegionType.BUILT_IN, 'typedef = 42');
+    });
+  }
+
+  test_BUILT_IN_yield() {
+    addTestFile('''
+main() async* {
+  yield 42;
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.BUILT_IN, 'yield 42');
+    });
+  }
+
+  test_BUILT_IN_yieldStar() {
+    addTestFile('''
+main() async* {
+  yield* [];
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasStringRegion(HighlightRegionType.BUILT_IN, 'yield*');
+    });
+  }
+
+  test_CLASS() {
+    addTestFile('''
+class AAA {}
+AAA aaa;
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.CLASS, 'AAA {}');
+      assertHasRegion(HighlightRegionType.CLASS, 'AAA aaa');
+    });
+  }
+
+  test_CLASS_notDynamic() {
+    addTestFile('''
+dynamic f() {}
+''');
+    return prepareHighlights().then((_) {
+      assertNoRegion(HighlightRegionType.CLASS, 'dynamic f()');
+    });
+  }
+
+  test_CLASS_notVoid() {
+    addTestFile('''
+void f() {}
+''');
+    return prepareHighlights().then((_) {
+      assertNoRegion(HighlightRegionType.CLASS, 'void f()');
+    });
+  }
+
+  test_COMMENT() {
+    addTestFile('''
+/**
+ * documentation comment
+ */ 
+void main() {
+  // end-of-line comment
+  my_function(1);
+}
+
+void my_function(String a) {
+ /* block comment */
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.COMMENT_DOCUMENTATION, '/**', 32);
+      assertHasRegion(HighlightRegionType.COMMENT_END_OF_LINE, '//', 22);
+      assertHasRegion(HighlightRegionType.COMMENT_BLOCK, '/* b', 19);
+    });
+  }
+
+  test_CONSTRUCTOR() {
+    addTestFile('''
+class AAA {
+  AAA() {}
+  AAA.name(p) {}
+}
+main() {
+  new AAA();
+  new AAA.name(42);
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.CONSTRUCTOR, 'name(p)');
+      assertHasRegion(HighlightRegionType.CONSTRUCTOR, 'name(42)');
+      assertNoRegion(HighlightRegionType.CONSTRUCTOR, 'AAA() {}');
+      assertNoRegion(HighlightRegionType.CONSTRUCTOR, 'AAA();');
+    });
+  }
+
+  test_DIRECTIVE() {
+    addTestFile('''
+library lib;
+import 'dart:math';
+export 'dart:math';
+part 'part.dart';
+''');
+    return prepareHighlights().then((_) {
+      assertHasStringRegion(HighlightRegionType.DIRECTIVE, "library lib;");
+      assertHasStringRegion(
+          HighlightRegionType.DIRECTIVE, "import 'dart:math';");
+      assertHasStringRegion(
+          HighlightRegionType.DIRECTIVE, "export 'dart:math';");
+      assertHasStringRegion(HighlightRegionType.DIRECTIVE, "part 'part.dart';");
+    });
+  }
+
+  test_DIRECTIVE_partOf() {
+    addTestFile('''
+part of lib;
+''');
+    _addLibraryForTestPart();
+    return prepareHighlights().then((_) {
+      assertHasStringRegion(HighlightRegionType.DIRECTIVE, "part of lib;");
+    });
+  }
+
+  test_DYNAMIC_LOCAL_VARIABLE() {
+    addTestFile('''
+f() {}
+main(p) {
+  var v = f();
+  v;
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(
+          HighlightRegionType.DYNAMIC_LOCAL_VARIABLE_DECLARATION, 'v = f()');
+      assertHasRegion(
+          HighlightRegionType.DYNAMIC_LOCAL_VARIABLE_REFERENCE, 'v;');
+    });
+  }
+
+  test_DYNAMIC_PARAMETER() {
+    addTestFile('''
+main(p) {
+  print(p);
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.DYNAMIC_PARAMETER_DECLARATION, 'p)');
+      assertHasRegion(HighlightRegionType.DYNAMIC_PARAMETER_REFERENCE, 'p);');
+    });
+  }
+
+  test_DYNAMIC_VARIABLE_field() {
+    addTestFile('''
+class A {
+  var f;
+  m() {
+    f = 1;
+  }
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.INSTANCE_FIELD_DECLARATION, 'f;');
+      assertHasRegion(HighlightRegionType.INSTANCE_SETTER_REFERENCE, 'f = 1');
+    });
+  }
+
+  test_ENUM() {
+    addTestFile('''
+enum MyEnum {A, B, C}
+MyEnum value;
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.ENUM, 'MyEnum {');
+      assertHasRegion(HighlightRegionType.ENUM, 'MyEnum value;');
+    });
+  }
+
+  test_ENUM_CONSTANT() {
+    addTestFile('''
+enum MyEnum {AAA, BBB}
+main() {
+  print(MyEnum.AAA);
+  print(MyEnum.BBB);
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.ENUM_CONSTANT, 'AAA, ');
+      assertHasRegion(HighlightRegionType.ENUM_CONSTANT, 'BBB}');
+      assertHasRegion(HighlightRegionType.ENUM_CONSTANT, 'AAA);');
+      assertHasRegion(HighlightRegionType.ENUM_CONSTANT, 'BBB);');
+    });
+  }
+
+  test_FUNCTION_TYPE_ALIAS() {
+    addTestFile('''
+typedef FFF(p);
+main(FFF fff) {
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.FUNCTION_TYPE_ALIAS, 'FFF(p)');
+      assertHasRegion(HighlightRegionType.FUNCTION_TYPE_ALIAS, 'FFF fff)');
+    });
+  }
+
+  test_GETTER() {
+    addTestFile('''
+get aaa => null;
+class A {
+  get bbb => null;
+  static get ccc => null;
+}
+main(A a) {
+  aaa;
+  a.bbb;
+  A.ccc;
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(
+          HighlightRegionType.TOP_LEVEL_GETTER_DECLARATION, 'aaa => null');
+      assertHasRegion(
+          HighlightRegionType.INSTANCE_GETTER_DECLARATION, 'bbb => null');
+      assertHasRegion(
+          HighlightRegionType.STATIC_GETTER_DECLARATION, 'ccc => null');
+      assertHasRegion(HighlightRegionType.TOP_LEVEL_GETTER_REFERENCE, 'aaa;');
+      assertHasRegion(HighlightRegionType.INSTANCE_GETTER_REFERENCE, 'bbb;');
+      assertHasRegion(HighlightRegionType.STATIC_GETTER_REFERENCE, 'ccc;');
+    });
+  }
+
+  test_IDENTIFIER_DEFAULT() {
+    addTestFile('''
+main() {
+  aaa = 42;
+  bbb(84);
+  CCC ccc;
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.IDENTIFIER_DEFAULT, 'aaa = 42');
+      assertHasRegion(HighlightRegionType.IDENTIFIER_DEFAULT, 'bbb(84)');
+      assertHasRegion(HighlightRegionType.IDENTIFIER_DEFAULT, 'CCC ccc');
+    });
+  }
+
+  test_IMPORT_PREFIX() {
+    addTestFile('''
+import 'dart:math' as ma;
+main() {
+  ma.max(1, 2);
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.IMPORT_PREFIX, 'ma;');
+      assertHasRegion(HighlightRegionType.IMPORT_PREFIX, 'ma.max');
+    });
+  }
+
+  test_INSTANCE_FIELD() {
+    addTestFile('''
+class A {
+  int aaa = 1;
+  int bbb = 2;
+  A([this.bbb = 3]);
+}
+main(A a) {
+  a.aaa = 4;
+  a.bbb = 5;
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(
+          HighlightRegionType.INSTANCE_FIELD_DECLARATION, 'aaa = 1');
+      assertHasRegion(
+          HighlightRegionType.INSTANCE_FIELD_DECLARATION, 'bbb = 2');
+      assertHasRegion(HighlightRegionType.INSTANCE_FIELD_REFERENCE, 'bbb = 3');
+      assertHasRegion(HighlightRegionType.INSTANCE_SETTER_REFERENCE, 'aaa = 4');
+      assertHasRegion(HighlightRegionType.INSTANCE_SETTER_REFERENCE, 'bbb = 5');
+    });
+  }
+
+  test_KEYWORD() {
+    addTestFile('''
+main() {
+  assert(true);
+  for (;;) break;
+  switch (0) {
+    case 0: break;
+    default: break;
+  }
+  try {} catch (e) {}
+  const v1 = 0;
+  for (;;) continue;
+  do {} while (true);
+  if (true) {} else {}
+  var v2 = false;
+  final v3 = 1;
+  try {} finally {}
+  for (var v4 in []) {}
+  v3 is int;
+  new A();
+  try {} catch (e) {rethrow;}
+  var v5 = true;
+  while (true) {}
+}
+class A {}
+class B extends A {
+  B() : super();
+  m() {
+    return this;
+  }
+}
+class C = Object with A;
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.KEYWORD, 'assert(true)');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'for (;;)');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'for (var v4 in');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'break;');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'case 0:');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'catch (e) {}');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'class A {}');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'const v1');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'continue;');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'default:');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'do {} while');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'if (true)');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'false;');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'final v3 =');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'finally {}');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'in []');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'is int');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'new A();');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'rethrow;');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'return this');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'super();');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'switch (0)');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'this;');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'true;');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'try {');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'while (true) {}');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'while (true);');
+      assertHasRegion(HighlightRegionType.KEYWORD, 'with A;');
+    });
+  }
+
+  test_KEYWORD_void() {
+    addTestFile('''
+void main() {
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.KEYWORD, 'void main()');
+    });
+  }
+
+  test_LABEL() {
+    addTestFile('''
+main() {
+myLabel:
+  while (true) {
+    break myLabel;
+  }
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.LABEL, 'myLabel:');
+      assertHasRegion(HighlightRegionType.LABEL, 'myLabel;');
+    });
+  }
+
+  test_LITERAL_BOOLEAN() {
+    addTestFile('var V = true;');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.LITERAL_BOOLEAN, 'true;');
+    });
+  }
+
+  test_LITERAL_DOUBLE() {
+    addTestFile('var V = 4.2;');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.LITERAL_DOUBLE, '4.2;', '4.2'.length);
+    });
+  }
+
+  test_LITERAL_INTEGER() {
+    addTestFile('var V = 42;');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.LITERAL_INTEGER, '42;');
+    });
+  }
+
+  test_LITERAL_LIST() {
+    addTestFile('var V = <int>[1, 2, 3];');
+    return prepareHighlights().then((_) {
+      assertHasStringRegion(HighlightRegionType.LITERAL_LIST, '<int>[1, 2, 3]');
+    });
+  }
+
+  test_LITERAL_MAP() {
+    addTestFile("var V = const <int, String>{1: 'a', 2: 'b', 3: 'c'};");
+    return prepareHighlights().then((_) {
+      assertHasStringRegion(HighlightRegionType.LITERAL_MAP,
+          "const <int, String>{1: 'a', 2: 'b', 3: 'c'}");
+    });
+  }
+
+  test_LITERAL_STRING() {
+    addTestFile('var V = "abc";');
+    return prepareHighlights().then((_) {
+      assertHasRegion(
+          HighlightRegionType.LITERAL_STRING, '"abc";', '"abc"'.length);
+    });
+  }
+
+  test_LOCAL_FUNCTION() {
+    addTestFile('''
+main() {
+  fff() {}
+  fff();
+  fff;
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(
+          HighlightRegionType.LOCAL_FUNCTION_DECLARATION, 'fff() {}');
+      assertHasRegion(HighlightRegionType.LOCAL_FUNCTION_REFERENCE, 'fff();');
+      assertHasRegion(HighlightRegionType.LOCAL_FUNCTION_REFERENCE, 'fff;');
+    });
+  }
+
+  test_LOCAL_VARIABLE() {
+    addTestFile('''
+main() {
+  int vvv = 0;
+  vvv;
+  vvv = 1;
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(
+          HighlightRegionType.LOCAL_VARIABLE_DECLARATION, 'vvv = 0');
+      assertHasRegion(HighlightRegionType.LOCAL_VARIABLE_REFERENCE, 'vvv;');
+      assertHasRegion(HighlightRegionType.LOCAL_VARIABLE_REFERENCE, 'vvv = 1;');
+    });
+  }
+
+  test_METHOD() {
+    addTestFile('''
+class A {
+  aaa() {}
+  static bbb() {}
+}
+main(A a) {
+  a.aaa();
+  a.aaa;
+  A.bbb();
+  A.bbb;
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(
+          HighlightRegionType.INSTANCE_METHOD_DECLARATION, 'aaa() {}');
+      assertHasRegion(
+          HighlightRegionType.STATIC_METHOD_DECLARATION, 'bbb() {}');
+      assertHasRegion(HighlightRegionType.INSTANCE_METHOD_REFERENCE, 'aaa();');
+      assertHasRegion(HighlightRegionType.INSTANCE_METHOD_REFERENCE, 'aaa;');
+      assertHasRegion(HighlightRegionType.STATIC_METHOD_REFERENCE, 'bbb();');
+      assertHasRegion(HighlightRegionType.STATIC_METHOD_REFERENCE, 'bbb;');
+    });
+  }
+
+  test_METHOD_bestType() {
+    addTestFile('''
+main(p) {
+  if (p is List) {
+    p.add(null);
+  }
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(
+          HighlightRegionType.INSTANCE_METHOD_REFERENCE, 'add(null)');
+    });
+  }
+
+  test_PARAMETER() {
+    addTestFile('''
+main(int p) {
+  p;
+  p = 42;
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.PARAMETER_DECLARATION, 'p) {');
+      assertHasRegion(HighlightRegionType.PARAMETER_REFERENCE, 'p;');
+      assertHasRegion(HighlightRegionType.PARAMETER_REFERENCE, 'p = 42');
+    });
+  }
+
+  test_SETTER_DECLARATION() {
+    addTestFile('''
+set aaa(x) {}
+class A {
+  set bbb(x) {}
+  static set ccc(x) {}
+}
+main(A a) {
+  aaa = 1;
+  a.bbb = 2;
+  A.ccc = 3;
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(
+          HighlightRegionType.TOP_LEVEL_SETTER_DECLARATION, 'aaa(x)');
+      assertHasRegion(
+          HighlightRegionType.INSTANCE_SETTER_DECLARATION, 'bbb(x)');
+      assertHasRegion(HighlightRegionType.STATIC_SETTER_DECLARATION, 'ccc(x)');
+      assertHasRegion(
+          HighlightRegionType.TOP_LEVEL_SETTER_REFERENCE, 'aaa = 1');
+      assertHasRegion(HighlightRegionType.INSTANCE_SETTER_REFERENCE, 'bbb = 2');
+      assertHasRegion(HighlightRegionType.STATIC_SETTER_REFERENCE, 'ccc = 3');
+    });
+  }
+
+  test_STATIC_FIELD() {
+    addTestFile('''
+class A {
+  static aaa = 1;
+  static get bbb => null;
+  static set ccc(x) {}
+}
+main() {
+  A.aaa = 2;
+  A.bbb;
+  A.ccc = 3;
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.STATIC_FIELD_DECLARATION, 'aaa = 1');
+      assertHasRegion(HighlightRegionType.STATIC_SETTER_REFERENCE, 'aaa = 2');
+      assertHasRegion(HighlightRegionType.STATIC_GETTER_REFERENCE, 'bbb;');
+      assertHasRegion(HighlightRegionType.STATIC_SETTER_REFERENCE, 'ccc = 3');
+    });
+  }
+
+  test_TOP_LEVEL_FUNCTION() {
+    addTestFile('''
+fff(p) {}
+main() {
+  fff(42);
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(
+          HighlightRegionType.TOP_LEVEL_FUNCTION_DECLARATION, 'fff(p) {}');
+      assertHasRegion(
+          HighlightRegionType.TOP_LEVEL_FUNCTION_REFERENCE, 'fff(42)');
+    });
+  }
+
+  test_TOP_LEVEL_VARIABLE() {
+    addTestFile('''
+const V1 = 1;
+var V2 = 2;
+@V1 // annotation
+main() {
+  print(V1);
+  V2 = 3;
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(
+          HighlightRegionType.TOP_LEVEL_VARIABLE_DECLARATION, 'V1 = 1');
+      assertHasRegion(
+          HighlightRegionType.TOP_LEVEL_VARIABLE_DECLARATION, 'V2 = 2');
+      assertHasRegion(
+          HighlightRegionType.TOP_LEVEL_GETTER_REFERENCE, 'V1 // annotation');
+      assertHasRegion(HighlightRegionType.TOP_LEVEL_GETTER_REFERENCE, 'V1);');
+      assertHasRegion(HighlightRegionType.TOP_LEVEL_SETTER_REFERENCE, 'V2 = 3');
+    });
+  }
+
+  test_TYPE_NAME_DYNAMIC() {
+    addTestFile('''
+dynamic main() {
+  dynamic = 42;
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.TYPE_NAME_DYNAMIC, 'dynamic main()');
+      assertNoRegion(HighlightRegionType.IDENTIFIER_DEFAULT, 'dynamic main()');
+      assertNoRegion(HighlightRegionType.TYPE_NAME_DYNAMIC, 'dynamic = 42');
+    });
+  }
+
+  test_TYPE_PARAMETER() {
+    addTestFile('''
+class A<T> {
+  T fff;
+  T mmm(T p) => null;
+}
+''');
+    return prepareHighlights().then((_) {
+      assertHasRegion(HighlightRegionType.TYPE_PARAMETER, 'T> {');
+      assertHasRegion(HighlightRegionType.TYPE_PARAMETER, 'T fff;');
+      assertHasRegion(HighlightRegionType.TYPE_PARAMETER, 'T mmm(');
+      assertHasRegion(HighlightRegionType.TYPE_PARAMETER, 'T p)');
+    });
+  }
+
+  void _addLibraryForTestPart() {
+    addFile('$testFolder/my_lib.dart', '''
+library lib;
+part 'test.dart';
+    ''');
+  }
+}
+
+@reflectiveTest
+class HighlightTypeTest {
+  void test_constructor() {
+    expect(HighlightRegionType.CLASS,
+        new HighlightRegionType(HighlightRegionType.CLASS.name));
+  }
+
+  void test_toString() {
+    expect(HighlightRegionType.CLASS.toString(), 'HighlightRegionType.CLASS');
+  }
+
+  void test_valueOf_unknown() {
+    expect(() {
+      new HighlightRegionType('no-such-type');
+    }, throws);
+  }
+}
diff --git a/pkg/analysis_server/test/analysis/notification_navigation_test.dart b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
index 13d54cd..6c440471ca 100644
--- a/pkg/analysis_server/test/analysis/notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
@@ -506,7 +506,7 @@
     var libFile = addFile('$projectPath/bin/lib.dart', libCode);
     addTestFile('export "lib.dart";');
     return prepareNavigation().then((_) {
-      assertHasRegionString('export "lib.dart"');
+      assertHasRegionString('"lib.dart"');
       assertHasFileTarget(libFile, libCode.indexOf('lib;'), 'lib'.length);
     });
   }
@@ -514,7 +514,7 @@
   test_string_export_unresolvedUri() {
     addTestFile('export "no.dart";');
     return prepareNavigation().then((_) {
-      assertNoRegionString('export "no.dart"');
+      assertNoRegionString('"no.dart"');
     });
   }
 
@@ -523,7 +523,7 @@
     var libFile = addFile('$projectPath/bin/lib.dart', libCode);
     addTestFile('import "lib.dart";');
     return prepareNavigation().then((_) {
-      assertHasRegionString('import "lib.dart"');
+      assertHasRegionString('"lib.dart"');
       assertHasFileTarget(libFile, libCode.indexOf('lib;'), 'lib'.length);
     });
   }
@@ -538,7 +538,7 @@
   test_string_import_unresolvedUri() {
     addTestFile('import "no.dart";');
     return prepareNavigation().then((_) {
-      assertNoRegionString('import "no.dart"');
+      assertNoRegionString('"no.dart"');
     });
   }
 
@@ -550,7 +550,7 @@
 part "test_unit.dart";
 ''');
     return prepareNavigation().then((_) {
-      assertHasRegionString('part "test_unit.dart"');
+      assertHasRegionString('"test_unit.dart"');
       assertHasFileTarget(unitFile, 0, 0);
     });
   }
@@ -561,7 +561,7 @@
 part "test_unit.dart";
 ''');
     return prepareNavigation().then((_) {
-      assertNoRegionString('part "test_unit.dart"');
+      assertNoRegionString('"test_unit.dart"');
     });
   }
 
diff --git a/pkg/analysis_server/test/analysis/test_all.dart b/pkg/analysis_server/test/analysis/test_all.dart
index b28a687..69e0e9b 100644
--- a/pkg/analysis_server/test/analysis/test_all.dart
+++ b/pkg/analysis_server/test/analysis/test_all.dart
@@ -8,8 +8,11 @@
 import 'get_errors_test.dart' as get_errors_test;
 import 'get_hover_test.dart' as get_hover_test;
 import 'get_navigation_test.dart' as get_navigation_test;
+import 'notification_analyzedFiles_test.dart'
+    as notification_analyzedFiles_test;
 import 'notification_errors_test.dart' as notification_errors_test;
 import 'notification_highlights_test.dart' as notification_highlights_test;
+import 'notification_highlights_test2.dart' as notification_highlights_test2;
 import 'notification_navigation_test.dart' as notification_navigation_test;
 import 'notification_occurrences_test.dart' as notification_occurrences_test;
 import 'notification_outline_test.dart' as notification_outline_test;
@@ -25,8 +28,10 @@
     get_errors_test.main();
     get_hover_test.main();
     get_navigation_test.main();
+    notification_analyzedFiles_test.main();
     notification_errors_test.main();
     notification_highlights_test.main();
+    notification_highlights_test2.main();
     notification_navigation_test.main();
     notification_occurrences_test.main();
     notification_outline_test.main();
diff --git a/pkg/analysis_server/test/analysis_abstract.dart b/pkg/analysis_server/test/analysis_abstract.dart
index 2efad95..539f718 100644
--- a/pkg/analysis_server/test/analysis_abstract.dart
+++ b/pkg/analysis_server/test/analysis_abstract.dart
@@ -46,6 +46,8 @@
   RequestHandler handler;
 
   final List<ServerErrorParams> serverErrors = <ServerErrorParams>[];
+  final List<GeneralAnalysisService> generalServices =
+      <GeneralAnalysisService>[];
   final Map<AnalysisService, List<String>> analysisSubscriptions = {};
 
   String projectPath = '/project';
@@ -74,6 +76,13 @@
     return path;
   }
 
+  void addGeneralAnalysisSubscription(GeneralAnalysisService service) {
+    generalServices.add(service);
+    Request request = new AnalysisSetGeneralSubscriptionsParams(generalServices)
+        .toRequest('0');
+    handleSuccessfulRequest(request);
+  }
+
   String addTestFile(String content) {
     addFile(testFile, content);
     this.testCode = content;
@@ -147,6 +156,13 @@
     }
   }
 
+  void removeGeneralAnalysisSubscription(GeneralAnalysisService service) {
+    generalServices.remove(service);
+    Request request = new AnalysisSetGeneralSubscriptionsParams(generalServices)
+        .toRequest('0');
+    handleSuccessfulRequest(request);
+  }
+
   void setUp() {
     serverChannel = new MockServerChannel();
     resourceProvider = new MemoryResourceProvider();
diff --git a/pkg/analysis_server/test/analysis_server_test.dart b/pkg/analysis_server/test/analysis_server_test.dart
index d05602f..467a170 100644
--- a/pkg/analysis_server/test/analysis_server_test.dart
+++ b/pkg/analysis_server/test/analysis_server_test.dart
@@ -8,6 +8,7 @@
 
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/constants.dart';
+import 'package:analysis_server/src/context_manager.dart';
 import 'package:analysis_server/src/domain_server.dart';
 import 'package:analysis_server/src/operation/operation.dart';
 import 'package:analysis_server/src/plugin/server_plugin.dart';
diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart
index 092fc85..af43b51 100644
--- a/pkg/analysis_server/test/context_manager_test.dart
+++ b/pkg/analysis_server/test/context_manager_test.dart
@@ -8,6 +8,7 @@
 
 import 'package:analysis_server/src/context_manager.dart';
 import 'package:analysis_server/src/source/optimizing_pub_package_map_provider.dart';
+import 'package:analysis_server/uri/resolver_provider.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
@@ -15,20 +16,20 @@
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/source_io.dart';
+import 'package:package_config/packages.dart';
 import 'package:path/path.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 import 'package:unittest/unittest.dart';
 
 import 'mocks.dart';
-import 'package:analysis_server/uri/resolver_provider.dart';
 
 main() {
   groupSep = ' | ';
-  defineReflectiveTests(ContextManagerTest);
+  defineReflectiveTests(AbstractContextManagerTest);
 }
 
 @reflectiveTest
-class ContextManagerTest {
+class AbstractContextManagerTest {
   /**
    * The name of the 'bin' directory.
    */
@@ -83,8 +84,14 @@
   void setUp() {
     resourceProvider = new MemoryResourceProvider();
     packageMapProvider = new MockPackageMapProvider();
-    manager = new TestContextManager(resourceProvider, providePackageResolver, packageMapProvider);
+    manager = new TestContextManager(
+        resourceProvider, providePackageResolver, packageMapProvider);
     resourceProvider.newFolder(projPath);
+    AbstractContextManager.ENABLE_PACKAGESPEC_SUPPORT = true;
+  }
+
+  void tearDown() {
+    AbstractContextManager.ENABLE_PACKAGESPEC_SUPPORT = false;
   }
 
   test_ignoreFilesInPackagesFolder() {
@@ -128,6 +135,47 @@
     expect(manager.isInAnalysisRoot('/test.dart'), isFalse);
   }
 
+  test_refresh_folder_with_packagespec() {
+    // create a context with a .packages file
+    String packagespecFile = posix.join(projPath, '.packages');
+    resourceProvider.newFile(packagespecFile, '');
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+    return pumpEventQueue().then((_) {
+      expect(manager.currentContextPaths.toList(), [projPath]);
+      manager.now++;
+      manager.refresh(null);
+      return pumpEventQueue().then((_) {
+        expect(manager.currentContextPaths.toList(), [projPath]);
+        expect(manager.currentContextTimestamps[projPath], manager.now);
+      });
+    });
+  }
+
+  test_refresh_folder_with_packagespec_subfolders() {
+    // Create a folder with no .packages file, containing two subfolders with
+    // .packages files.
+    String subdir1Path = posix.join(projPath, 'subdir1');
+    String subdir2Path = posix.join(projPath, 'subdir2');
+    String packagespec1Path = posix.join(subdir1Path, '.packages');
+    String packagespec2Path = posix.join(subdir2Path, '.packages');
+    resourceProvider.newFile(packagespec1Path, '');
+    resourceProvider.newFile(packagespec2Path, '');
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+    return pumpEventQueue().then((_) {
+      expect(manager.currentContextPaths.toSet(),
+          [subdir1Path, subdir2Path, projPath].toSet());
+      manager.now++;
+      manager.refresh(null);
+      return pumpEventQueue().then((_) {
+        expect(manager.currentContextPaths.toSet(),
+            [subdir1Path, subdir2Path, projPath].toSet());
+        expect(manager.currentContextTimestamps[projPath], manager.now);
+        expect(manager.currentContextTimestamps[subdir1Path], manager.now);
+        expect(manager.currentContextTimestamps[subdir2Path], manager.now);
+      });
+    });
+  }
+
   test_refresh_folder_with_pubspec() {
     // create a context with a pubspec.yaml file
     String pubspecPath = posix.join(projPath, 'pubspec.yaml');
@@ -169,6 +217,59 @@
     });
   }
 
+  test_path_filter() async {
+    // Setup context.
+    Folder root = resourceProvider.newFolder(projPath);
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+    expect(manager.currentContextFilePaths[projPath], isEmpty);
+    // Set ignore patterns for context.
+    manager.setIgnorePatternsForContext(
+        root, ['sdk_ext/**', 'lib/ignoreme.dart']);
+    // Start creating files.
+    newFile([projPath, AbstractContextManager.PUBSPEC_NAME]);
+    String libPath = newFolder([projPath, LIB_NAME]);
+    newFile([libPath, 'main.dart']);
+    newFile([libPath, 'ignoreme.dart']);
+    String sdkExtPath = newFolder([projPath, 'sdk_ext']);
+    newFile([sdkExtPath, 'entry.dart']);
+    String sdkExtSrcPath = newFolder([projPath, 'sdk_ext', 'src']);
+    newFile([sdkExtSrcPath, 'part.dart']);
+    // Pump event loop so new files are discovered and added to context.
+    await pumpEventQueue();
+    // Verify that ignored files were ignored.
+    Map<String, int> fileTimestamps = manager.currentContextFilePaths[projPath];
+    expect(fileTimestamps, isNotEmpty);
+    List<String> files = fileTimestamps.keys.toList();
+    expect(files.length, equals(1));
+    expect(files[0], equals('/my/proj/lib/main.dart'));
+  }
+
+  test_path_filter_analysis_option() async {
+    // Create files.
+    String libPath = newFolder([projPath, LIB_NAME]);
+    newFile([libPath, 'main.dart']);
+    newFile([libPath, 'nope.dart']);
+    String sdkExtPath = newFolder([projPath, 'sdk_ext']);
+    newFile([sdkExtPath, 'entry.dart']);
+    String sdkExtSrcPath = newFolder([projPath, 'sdk_ext', 'src']);
+    newFile([sdkExtSrcPath, 'part.dart']);
+    // Setup analysis options file with ignore list.
+    newFile([projPath, '.analysis_options'], r'''
+analyzer:
+  exclude:
+    - lib/nope.dart
+    - 'sdk_ext/**'
+''');
+    // Setup context.
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+    // Verify that analysis options was parsed and the ignore patterns applied.
+    Map<String, int> fileTimestamps = manager.currentContextFilePaths[projPath];
+    expect(fileTimestamps, isNotEmpty);
+    List<String> files = fileTimestamps.keys.toList();
+    expect(files.length, equals(1));
+    expect(files[0], equals('/my/proj/lib/main.dart'));
+  }
+
   test_refresh_oneContext() {
     // create two contexts with pubspec.yaml files
     String pubspecPath = posix.join(projPath, 'pubspec.yaml');
@@ -202,7 +303,8 @@
     var filePaths = manager.currentContextFilePaths[projPath];
     expect(filePaths, hasLength(1));
     expect(filePaths, contains(filePath));
-    List<AnalysisContext> contextsInAnalysisRoot = manager.contextsInAnalysisRoot(resourceProvider.newFolder(projPath));
+    List<AnalysisContext> contextsInAnalysisRoot =
+        manager.contextsInAnalysisRoot(resourceProvider.newFolder(projPath));
     expect(contextsInAnalysisRoot, hasLength(1));
     AnalysisContext context = contextsInAnalysisRoot[0];
     expect(context, isNotNull);
@@ -211,22 +313,6 @@
     expect(result.exists(), isFalse);
   }
 
-  void test_setRoots_packageResolver() {
-    Uri uri = Uri.parse('package:foo/foo.dart');
-    Source source = new TestSource();
-    packageResolver = new TestUriResolver({uri : source});
-    String filePath = posix.join(projPath, 'foo.dart');
-    resourceProvider.newFile(filePath, 'contents');
-    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
-
-    List<AnalysisContext> contextsInAnalysisRoot = manager.contextsInAnalysisRoot(resourceProvider.newFolder(projPath));
-    expect(contextsInAnalysisRoot, hasLength(1));
-    AnalysisContext context = contextsInAnalysisRoot[0];
-    expect(context, isNotNull);
-    Source result = context.sourceFactory.forUri2(uri);
-    expect(result, same(source));
-  }
-
   void test_setRoots_addFolderWithDartFileInSubfolder() {
     String filePath = posix.join(projPath, 'foo', 'bar.dart');
     resourceProvider.newFile(filePath, 'contents');
@@ -246,13 +332,41 @@
     expect(filePaths, isEmpty);
   }
 
+  void test_setRoots_addFolderWithNestedPackageSpec() {
+    String examplePath = newFolder([projPath, EXAMPLE_NAME]);
+    String libPath = newFolder([projPath, LIB_NAME]);
+
+    newFile([projPath, AbstractContextManager.PACKAGE_SPEC_NAME]);
+    newFile([libPath, 'main.dart']);
+    newFile([examplePath, AbstractContextManager.PACKAGE_SPEC_NAME]);
+    newFile([examplePath, 'example.dart']);
+
+    packageMapProvider.packageMap['proj'] =
+        [resourceProvider.getResource(libPath)];
+
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+
+    expect(manager.currentContextPaths, hasLength(2));
+
+    expect(manager.currentContextPaths, contains(projPath));
+    Set<Source> projSources = manager.currentContextSources[projPath];
+    expect(projSources, hasLength(1));
+    expect(projSources.first.uri.toString(), 'file:///my/proj/lib/main.dart');
+
+    expect(manager.currentContextPaths, contains(examplePath));
+    Set<Source> exampleSources = manager.currentContextSources[examplePath];
+    expect(exampleSources, hasLength(1));
+    expect(exampleSources.first.uri.toString(),
+        'file:///my/proj/example/example.dart');
+  }
+
   void test_setRoots_addFolderWithNestedPubspec() {
     String examplePath = newFolder([projPath, EXAMPLE_NAME]);
     String libPath = newFolder([projPath, LIB_NAME]);
 
-    newFile([projPath, PUBSPEC_NAME]);
+    newFile([projPath, AbstractContextManager.PUBSPEC_NAME]);
     newFile([libPath, 'main.dart']);
-    newFile([examplePath, PUBSPEC_NAME]);
+    newFile([examplePath, AbstractContextManager.PUBSPEC_NAME]);
     newFile([examplePath, 'example.dart']);
 
     packageMapProvider.packageMap['proj'] =
@@ -283,6 +397,31 @@
     expect(manager.currentContextFilePaths[projPath], hasLength(0));
   }
 
+  void test_setRoots_addFolderWithPackagespec() {
+    String packagespecPath = posix.join(projPath, '.packages');
+    resourceProvider.newFile(packagespecPath,
+        'unittest:file:///home/somebody/.pub/cache/unittest-0.9.9/lib/');
+    String libPath = newFolder([projPath, LIB_NAME]);
+    File mainFile =
+        resourceProvider.newFile(posix.join(libPath, 'main.dart'), '');
+    Source source = mainFile.createSource();
+
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+
+    // verify
+    expect(manager.currentContextPaths, hasLength(1));
+    expect(manager.currentContextPaths, contains(projPath));
+    expect(manager.currentContextFilePaths[projPath], hasLength(1));
+
+    // smoketest resolution
+    SourceFactory sourceFactory = manager.currentContext.sourceFactory;
+    Source resolvedSource =
+        sourceFactory.resolveUri(source, 'package:unittest/unittest.dart');
+    expect(resolvedSource, isNotNull);
+    expect(resolvedSource.fullName,
+        equals('/home/somebody/.pub/cache/unittest-0.9.9/lib/unittest.dart'));
+  }
+
   void test_setRoots_addFolderWithPubspec() {
     String pubspecPath = posix.join(projPath, 'pubspec.yaml');
     resourceProvider.newFile(pubspecPath, 'pubspec');
@@ -293,13 +432,23 @@
     expect(manager.currentContextFilePaths[projPath], hasLength(0));
   }
 
+  void test_setRoots_addFolderWithPubspec_andPackagespec() {
+    String pubspecPath = posix.join(projPath, 'pubspec.yaml');
+    String packagespecPath = posix.join(projPath, '.packages');
+    resourceProvider.newFile(pubspecPath, 'pubspec');
+    resourceProvider.newFile(packagespecPath, '');
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+    // verify
+    manager.assertContextPaths([projPath]);
+  }
+
   void test_setRoots_addFolderWithPubspecAndLib() {
     String binPath = newFolder([projPath, BIN_NAME]);
     String libPath = newFolder([projPath, LIB_NAME]);
     String srcPath = newFolder([libPath, SRC_NAME]);
     String testPath = newFolder([projPath, TEST_NAME]);
 
-    newFile([projPath, PUBSPEC_NAME]);
+    newFile([projPath, AbstractContextManager.PUBSPEC_NAME]);
     String appPath = newFile([binPath, 'app.dart']);
     newFile([libPath, 'main.dart']);
     newFile([srcPath, 'internal.dart']);
@@ -322,6 +471,33 @@
     expect(uris, contains('file://$testFilePath'));
   }
 
+  void test_setRoots_addFolderWithPubspecAndPackagespecFolders() {
+    // prepare paths
+    String root = '/root';
+    String rootFile = '$root/root.dart';
+    String subProjectA = '$root/sub/aaa';
+    String subProjectB = '$root/sub/sub2/bbb';
+    String subProjectA_file = '$subProjectA/bin/a.dart';
+    String subProjectB_file = '$subProjectB/bin/b.dart';
+    // create files
+    resourceProvider.newFile('$subProjectA/pubspec.yaml', 'pubspec');
+    resourceProvider.newFile('$subProjectB/pubspec.yaml', 'pubspec');
+    resourceProvider.newFile('$subProjectA/.packages', '');
+    resourceProvider.newFile('$subProjectB/.packages', '');
+
+    resourceProvider.newFile(rootFile, 'library root;');
+    resourceProvider.newFile(subProjectA_file, 'library a;');
+    resourceProvider.newFile(subProjectB_file, 'library b;');
+
+    // set roots
+    manager.setRoots(<String>[root], <String>[], <String, String>{});
+    manager.assertContextPaths([root, subProjectA, subProjectB]);
+    // verify files
+    manager.assertContextFiles(root, [rootFile]);
+    manager.assertContextFiles(subProjectA, [subProjectA_file]);
+    manager.assertContextFiles(subProjectB, [subProjectB_file]);
+  }
+
   void test_setRoots_addFolderWithPubspecFolders() {
     // prepare paths
     String root = '/root';
@@ -526,6 +702,23 @@
     _checkPackageMap(projPath, equals(packageMapProvider.packageMap));
   }
 
+  void test_setRoots_packageResolver() {
+    Uri uri = Uri.parse('package:foo/foo.dart');
+    Source source = new TestSource();
+    packageResolver = new TestUriResolver({uri: source});
+    String filePath = posix.join(projPath, 'foo.dart');
+    resourceProvider.newFile(filePath, 'contents');
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+
+    List<AnalysisContext> contextsInAnalysisRoot =
+        manager.contextsInAnalysisRoot(resourceProvider.newFolder(projPath));
+    expect(contextsInAnalysisRoot, hasLength(1));
+    AnalysisContext context = contextsInAnalysisRoot[0];
+    expect(context, isNotNull);
+    Source result = context.sourceFactory.forUri2(uri);
+    expect(result, same(source));
+  }
+
   void test_setRoots_removeFolderWithoutPubspec() {
     packageMapProvider.packageMap = null;
     // add one root - there is a context
@@ -537,6 +730,53 @@
     expect(manager.currentContextFilePaths, hasLength(0));
   }
 
+  void test_setRoots_removeFolderWithPackagespec() {
+    // create a pubspec
+    String pubspecPath = posix.join(projPath, '.packages');
+    resourceProvider.newFile(pubspecPath, '');
+    // add one root - there is a context
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+    expect(manager.currentContextPaths, hasLength(1));
+    // set empty roots - no contexts
+    manager.setRoots(<String>[], <String>[], <String, String>{});
+    expect(manager.currentContextPaths, hasLength(0));
+    expect(manager.currentContextFilePaths, hasLength(0));
+  }
+
+  void test_setRoots_removeFolderWithPackagespecFolder() {
+    // prepare paths
+    String projectA = '/projectA';
+    String projectB = '/projectB';
+    String subProjectA = '$projectA/sub';
+    String subProjectB = '$projectB/sub';
+    String projectA_file = '$projectA/a.dart';
+    String projectB_file = '$projectB/a.dart';
+    String subProjectA_pubspec = '$subProjectA/.packages';
+    String subProjectB_pubspec = '$subProjectB/.packages';
+    String subProjectA_file = '$subProjectA/bin/sub_a.dart';
+    String subProjectB_file = '$subProjectB/bin/sub_b.dart';
+    // create files
+    resourceProvider.newFile(projectA_file, '// a');
+    resourceProvider.newFile(projectB_file, '// b');
+    resourceProvider.newFile(subProjectA_pubspec, '');
+    resourceProvider.newFile(subProjectB_pubspec, '');
+    resourceProvider.newFile(subProjectA_file, '// sub-a');
+    resourceProvider.newFile(subProjectB_file, '// sub-b');
+    // set roots
+    manager.setRoots(
+        <String>[projectA, projectB], <String>[], <String, String>{});
+    manager.assertContextPaths([projectA, subProjectA, projectB, subProjectB]);
+    manager.assertContextFiles(projectA, [projectA_file]);
+    manager.assertContextFiles(projectB, [projectB_file]);
+    manager.assertContextFiles(subProjectA, [subProjectA_file]);
+    manager.assertContextFiles(subProjectB, [subProjectB_file]);
+    // remove "projectB"
+    manager.setRoots(<String>[projectA], <String>[], <String, String>{});
+    manager.assertContextPaths([projectA, subProjectA]);
+    manager.assertContextFiles(projectA, [projectA_file]);
+    manager.assertContextFiles(subProjectA, [subProjectA_file]);
+  }
+
   void test_setRoots_removeFolderWithPubspec() {
     // create a pubspec
     String pubspecPath = posix.join(projPath, 'pubspec.yaml');
@@ -664,6 +904,107 @@
     });
   }
 
+  test_watch_addPackagespec_toRoot() {
+    // prepare paths
+    String root = '/root';
+    String rootFile = '$root/root.dart';
+    String rootPackagespec = '$root/.packages';
+    // create files
+    resourceProvider.newFile(rootFile, 'library root;');
+    // set roots
+    manager.setRoots(<String>[root], <String>[], <String, String>{});
+    manager.assertContextPaths([root]);
+    // verify files
+    manager.assertContextFiles(root, [rootFile]);
+    // add packagespec - still just one root
+    resourceProvider.newFile(rootPackagespec, '');
+    return pumpEventQueue().then((_) {
+      manager.assertContextPaths([root]);
+      manager.assertContextFiles(root, [rootFile]);
+      // TODO(pquitslund): verify that a new source factory is created --
+      // likely this will need to happen in a corresponding ServerContextManagerTest.
+    });
+  }
+
+  test_watch_addPackagespec_toSubFolder() {
+    // prepare paths
+    String root = '/root';
+    String rootFile = '$root/root.dart';
+    String subProject = '$root/sub/aaa';
+    String subPubspec = '$subProject/.packages';
+    String subFile = '$subProject/bin/a.dart';
+    // create files
+    resourceProvider.newFile(rootFile, 'library root;');
+    resourceProvider.newFile(subFile, 'library a;');
+    // set roots
+    manager.setRoots(<String>[root], <String>[], <String, String>{});
+    manager.assertContextPaths([root]);
+    // verify files
+    manager.assertContextFiles(root, [rootFile, subFile]);
+    // add .packages
+    resourceProvider.newFile(subPubspec, '');
+    return pumpEventQueue().then((_) {
+      manager.assertContextPaths([root, subProject]);
+      manager.assertContextFiles(root, [rootFile]);
+      manager.assertContextFiles(subProject, [subFile]);
+    });
+  }
+
+  test_watch_addPackagespec_toSubFolder_ofSubFolder() {
+    // prepare paths
+    String root = '/root';
+    String rootFile = '$root/root.dart';
+    String subProject = '$root/sub';
+    String subPubspec = '$subProject/.packages';
+    String subFile = '$subProject/bin/sub.dart';
+    String subSubPubspec = '$subProject/subsub/.packages';
+    // create files
+    resourceProvider.newFile(rootFile, 'library root;');
+    resourceProvider.newFile(subPubspec, '');
+    resourceProvider.newFile(subFile, 'library sub;');
+    // set roots
+    manager.setRoots(<String>[root], <String>[], <String, String>{});
+    manager.assertContextPaths([root, subProject]);
+    manager.assertContextFiles(root, [rootFile]);
+    manager.assertContextFiles(subProject, [subFile]);
+    // add pubspec - ignore, because is already in a packagespec-based context
+    resourceProvider.newFile(subSubPubspec, '');
+    return pumpEventQueue().then((_) {
+      manager.assertContextPaths([root, subProject]);
+      manager.assertContextFiles(root, [rootFile]);
+      manager.assertContextFiles(subProject, [subFile]);
+    });
+  }
+
+  test_watch_addPackagespec_toSubFolder_withPubspec() {
+    // prepare paths
+    String root = '/root';
+    String rootFile = '$root/root.dart';
+    String subProject = '$root/sub/aaa';
+    String subPackagespec = '$subProject/.packages';
+    String subPubspec = '$subProject/pubspec.yaml';
+    String subFile = '$subProject/bin/a.dart';
+    // create files
+    resourceProvider.newFile(subPubspec, 'pubspec');
+    resourceProvider.newFile(rootFile, 'library root;');
+    resourceProvider.newFile(subFile, 'library a;');
+    // set roots
+    manager.setRoots(<String>[root], <String>[], <String, String>{});
+    manager.assertContextPaths([root, subProject]);
+    // verify files
+    manager.assertContextFiles(root, [rootFile]);
+    manager.assertContextFiles(subProject, [subFile]);
+
+    // add .packages
+    resourceProvider.newFile(subPackagespec, '');
+    return pumpEventQueue().then((_) {
+      // Should NOT create another context.
+      manager.assertContextPaths([root, subProject]);
+      manager.assertContextFiles(root, [rootFile]);
+      manager.assertContextFiles(subProject, [subFile]);
+    });
+  }
+
   test_watch_addPubspec_toRoot() {
     // prepare paths
     String root = '/root';
@@ -776,6 +1117,79 @@
     });
   }
 
+  test_watch_deletePackagespec_fromRoot() {
+    // prepare paths
+    String root = '/root';
+    String rootPubspec = '$root/.packages';
+    String rootFile = '$root/root.dart';
+    // create files
+    resourceProvider.newFile(rootPubspec, '');
+    resourceProvider.newFile(rootFile, 'library root;');
+    // set roots
+    manager.setRoots(<String>[root], <String>[], <String, String>{});
+    manager.assertContextPaths([root]);
+    manager.assertContextFiles(root, [rootFile]);
+    // delete the pubspec
+    resourceProvider.deleteFile(rootPubspec);
+    return pumpEventQueue().then((_) {
+      manager.assertContextPaths([root]);
+      manager.assertContextFiles(root, [rootFile]);
+    });
+  }
+
+  test_watch_deletePackagespec_fromSubFolder() {
+    // prepare paths
+    String root = '/root';
+    String rootFile = '$root/root.dart';
+    String subProject = '$root/sub/aaa';
+    String subPubspec = '$subProject/.packages';
+    String subFile = '$subProject/bin/a.dart';
+    // create files
+    resourceProvider.newFile(subPubspec, '');
+    resourceProvider.newFile(rootFile, 'library root;');
+    resourceProvider.newFile(subFile, 'library a;');
+    // set roots
+    manager.setRoots(<String>[root], <String>[], <String, String>{});
+    manager.assertContextPaths([root, subProject]);
+    // verify files
+    manager.assertContextFiles(root, [rootFile]);
+    manager.assertContextFiles(subProject, [subFile]);
+    // delete the pubspec
+    resourceProvider.deleteFile(subPubspec);
+    return pumpEventQueue().then((_) {
+      manager.assertContextPaths([root]);
+      manager.assertContextFiles(root, [rootFile, subFile]);
+    });
+  }
+
+  test_watch_deletePackagespec_fromSubFolder_withPubspec() {
+    // prepare paths
+    String root = '/root';
+    String rootFile = '$root/root.dart';
+    String subProject = '$root/sub/aaa';
+    String subPackagespec = '$subProject/.packages';
+    String subPubspec = '$subProject/pubspec.yaml';
+    String subFile = '$subProject/bin/a.dart';
+    // create files
+    resourceProvider.newFile(subPackagespec, '');
+    resourceProvider.newFile(subPubspec, 'pubspec');
+    resourceProvider.newFile(rootFile, 'library root;');
+    resourceProvider.newFile(subFile, 'library a;');
+    // set roots
+    manager.setRoots(<String>[root], <String>[], <String, String>{});
+    manager.assertContextPaths([root, subProject]);
+    // verify files
+    manager.assertContextFiles(root, [rootFile]);
+    manager.assertContextFiles(subProject, [subFile]);
+    // delete the packagespec
+    resourceProvider.deleteFile(subPackagespec);
+    return pumpEventQueue().then((_) {
+      // Should NOT merge
+      manager.assertContextPaths([root, subProject]);
+      manager.assertContextFiles(subProject, [subFile]);
+    });
+  }
+
   test_watch_deletePubspec_fromRoot() {
     // prepare paths
     String root = '/root';
@@ -952,6 +1366,31 @@
     expect(packageMapProvider.computeCount, 2);
   }
 
+  test_watch_modifyPackagespec() {
+    String packagesPath = '$projPath/.packages';
+    String filePath = '$projPath/bin/main.dart';
+
+    resourceProvider.newFile(packagesPath, '');
+    resourceProvider.newFile(filePath, 'library main;');
+
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+
+    Map<String, int> filePaths = manager.currentContextFilePaths[projPath];
+    expect(filePaths, hasLength(1));
+    expect(filePaths, contains(filePath));
+    Packages packages = manager.currentContextPackagespecs[projPath];
+    expect(packages.packages, isEmpty);
+
+    // update .packages
+    manager.now++;
+    resourceProvider.modifyFile(packagesPath, 'main:./lib/');
+    return pumpEventQueue().then((_) {
+      // verify new package info
+      packages = manager.currentContextPackagespecs[projPath];
+      expect(packages.packages, unorderedEquals(['main']));
+    });
+  }
+
   /**
    * Verify that package URI's for source files in [path] will be resolved
    * using a package map matching [expectation].
@@ -975,7 +1414,7 @@
   }
 }
 
-class TestContextManager extends ContextManager {
+class TestContextManager extends AbstractContextManager {
   /**
    * Source of timestamps stored in [currentContextFilePaths].
    */
@@ -1010,8 +1449,13 @@
   final Map<String, UriResolver> currentContextPackageUriResolvers =
       <String, UriResolver>{};
 
+  /**
+   * Map from context to packages object.
+   */
+  final Map<String, Packages> currentContextPackagespecs = <String, Packages>{};
+
   TestContextManager(MemoryResourceProvider resourceProvider,
-                     ResolverProvider packageResolverProvider,
+      ResolverProvider packageResolverProvider,
       OptimizingPubPackageMapProvider packageMapProvider)
       : super(resourceProvider, packageResolverProvider, packageMapProvider,
           InstrumentationService.NULL_SERVICE);
@@ -1022,16 +1466,21 @@
   Iterable<String> get currentContextPaths => currentContextTimestamps.keys;
 
   @override
-  AnalysisContext addContext(Folder folder, UriResolver packageUriResolver) {
+  AnalysisContext addContext(
+      Folder folder, UriResolver packageUriResolver, Packages packages) {
     String path = folder.path;
     expect(currentContextPaths, isNot(contains(path)));
     currentContextTimestamps[path] = now;
     currentContextFilePaths[path] = <String, int>{};
     currentContextSources[path] = new HashSet<Source>();
     currentContextPackageUriResolvers[path] = packageUriResolver;
+    currentContextPackagespecs[path] = packages;
     currentContext = AnalysisEngine.instance.createAnalysisContext();
-    currentContext.sourceFactory = new SourceFactory(
-        packageUriResolver == null ? [] : [packageUriResolver]);
+    List<UriResolver> resolvers = [new FileUriResolver()];
+    if (packageUriResolver != null) {
+      resolvers.add(packageUriResolver);
+    }
+    currentContext.sourceFactory = new SourceFactory(resolvers, packages);
     return currentContext;
   }
 
@@ -1093,19 +1542,9 @@
 
   @override
   void updateContextPackageUriResolver(
-      Folder contextFolder, UriResolver packageUriResolver) {
+      Folder contextFolder, UriResolver packageUriResolver, Packages packages) {
     currentContextPackageUriResolvers[contextFolder.path] = packageUriResolver;
-  }
-}
-
-class TestUriResolver extends UriResolver {
-  Map<Uri, Source> uriMap;
-
-  TestUriResolver(this.uriMap);
-
-  @override
-  Source resolveAbsolute(Uri uri) {
-    return uriMap[uri];
+    currentContextPackagespecs[contextFolder.path] = packages;
   }
 }
 
@@ -1118,3 +1557,14 @@
   @override
   noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
+
+class TestUriResolver extends UriResolver {
+  Map<Uri, Source> uriMap;
+
+  TestUriResolver(this.uriMap);
+
+  @override
+  Source resolveAbsolute(Uri uri) {
+    return uriMap[uri];
+  }
+}
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index a51cdec..63cd20f 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -7,10 +7,11 @@
 import 'dart:async';
 
 import 'package:analysis_server/completion/completion_core.dart'
-    show CompletionRequest;
+    show CompletionRequest, CompletionResult;
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/channel/channel.dart';
 import 'package:analysis_server/src/constants.dart';
+import 'package:analysis_server/src/context_manager.dart';
 import 'package:analysis_server/src/domain_analysis.dart';
 import 'package:analysis_server/src/domain_completion.dart';
 import 'package:analysis_server/src/plugin/server_plugin.dart';
@@ -568,7 +569,7 @@
   @override
   void computeSuggestions(CompletionRequest request) {
     ++computeCallCount;
-    CompletionResult result = new CompletionResult(0, 0, [], true);
+    CompletionResult result = new CompletionResultImpl(0, 0, [], true);
     controller.add(result);
   }
 
diff --git a/pkg/analysis_server/test/domain_execution_test.dart b/pkg/analysis_server/test/domain_execution_test.dart
index 0bab760..8fa9234 100644
--- a/pkg/analysis_server/test/domain_execution_test.dart
+++ b/pkg/analysis_server/test/domain_execution_test.dart
@@ -230,7 +230,7 @@
 
       AnalysisServer server = new AnalysisServerMock();
       when(server.getAnalysisContexts()).thenReturn([context]);
-      when(server.contextDirectoryManager).thenReturn(manager);
+      when(server.contextManager).thenReturn(manager);
 
       StreamController controller = new StreamController.broadcast(sync: true);
       when(server.onFileAnalyzed).thenReturn(controller.stream);
diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test2.dart b/pkg/analysis_server/test/integration/analysis/highlights_test2.dart
new file mode 100644
index 0000000..71913f0
--- /dev/null
+++ b/pkg/analysis_server/test/integration/analysis/highlights_test2.dart
@@ -0,0 +1,165 @@
+// Copyright (c) 2014, 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 test.integration.analysis.highlights2;
+
+import 'dart:async';
+
+import 'package:analysis_server/src/protocol.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+import 'package:unittest/unittest.dart';
+
+import '../integration_tests.dart';
+
+main() {
+  defineReflectiveTests(AnalysisHighlightsTest);
+}
+
+@reflectiveTest
+class AnalysisHighlightsTest extends AbstractAnalysisServerIntegrationTest {
+  Future startServer() {
+    return server.start(useAnalysisHighlight2: true);
+  }
+
+  test_highlights() {
+    String pathname = sourcePath('test.dart');
+    String text = r'''
+import 'dart:async' as async;
+
+/**
+ * Doc comment
+ */
+class Class<TypeParameter> {
+  Class() {
+    field = {1.0: [].toList()};
+  }
+
+  Class.constructor() {
+    dynamic local = true;
+    field = {2: local};
+  }
+
+  Map field;
+  static int staticField;
+
+  method() {
+    // End of line comment
+    /* Block comment */
+  }
+
+  static staticMethod() {
+  }
+
+  get getter {
+  }
+
+  set setter(int parameter) {
+    print(parameter);
+  }
+}
+
+class Class2<TypeParameter> extends Class<TypeParameter> {
+  @override
+  method() {
+  }
+}
+
+typedef functionType();
+
+function(dynamicType) {
+  print('string');
+  unresolvedIdentifier = 42;
+  return async.Future.wait([]);
+}
+
+int topLevelVariable;
+''';
+    writeFile(pathname, text);
+    standardAnalysisSetup();
+    sendAnalysisSetSubscriptions({AnalysisService.HIGHLIGHTS: [pathname]});
+    // Map from highlight type to highlighted text
+    Map<HighlightRegionType, Set<String>> highlights;
+    onAnalysisHighlights.listen((AnalysisHighlightsParams params) {
+      expect(params.file, equals(pathname));
+      highlights = <HighlightRegionType, Set<String>>{};
+      for (HighlightRegion region in params.regions) {
+        int startIndex = region.offset;
+        int endIndex = startIndex + region.length;
+        String highlightedText = text.substring(startIndex, endIndex);
+        HighlightRegionType type = region.type;
+        if (!highlights.containsKey(type)) {
+          highlights[type] = new Set<String>();
+        }
+        highlights[type].add(highlightedText);
+      }
+    });
+    return analysisFinished.then((_) {
+      // There should be 1 error due to the fact that unresolvedIdentifier is
+      // unresolved.
+      expect(currentAnalysisErrors[pathname], hasLength(1));
+      void check(HighlightRegionType type, List<String> expected) {
+        expect(highlights[type], equals(expected.toSet()));
+        highlights.remove(type);
+      }
+      check(HighlightRegionType.ANNOTATION, ['@override']);
+      check(HighlightRegionType.BUILT_IN, [
+        'as',
+        'get',
+        'import',
+        'set',
+        'static',
+        'typedef'
+      ]);
+      check(HighlightRegionType.CLASS, [
+        'Class',
+        'Class2',
+        'Future',
+        'Map',
+        'int'
+      ]);
+      check(HighlightRegionType.COMMENT_BLOCK, ['/* Block comment */']);
+      check(HighlightRegionType.COMMENT_DOCUMENTATION,
+          ['/**\n * Doc comment\n */']);
+      check(
+          HighlightRegionType.COMMENT_END_OF_LINE, ['// End of line comment']);
+      check(HighlightRegionType.CONSTRUCTOR, ['constructor']);
+      check(HighlightRegionType.DIRECTIVE, ["import 'dart:async' as async;"]);
+      check(HighlightRegionType.DYNAMIC_PARAMETER_DECLARATION, ['dynamicType']);
+      check(HighlightRegionType.INSTANCE_FIELD_DECLARATION, ['field']);
+      check(HighlightRegionType.INSTANCE_SETTER_REFERENCE, ['field']);
+      check(HighlightRegionType.STATIC_FIELD_DECLARATION, ['staticField']);
+      check(HighlightRegionType.TOP_LEVEL_FUNCTION_REFERENCE, ['print']);
+      check(HighlightRegionType.TOP_LEVEL_FUNCTION_DECLARATION, ['function']);
+      check(HighlightRegionType.FUNCTION_TYPE_ALIAS, ['functionType']);
+      check(HighlightRegionType.INSTANCE_GETTER_DECLARATION, ['getter']);
+      check(HighlightRegionType.IDENTIFIER_DEFAULT, ['unresolvedIdentifier']);
+      check(HighlightRegionType.IMPORT_PREFIX, ['async']);
+      check(HighlightRegionType.KEYWORD, ['class', 'true', 'return']);
+      check(HighlightRegionType.LITERAL_BOOLEAN, ['true']);
+      check(HighlightRegionType.LITERAL_DOUBLE, ['1.0']);
+      check(HighlightRegionType.LITERAL_INTEGER, ['2', '42']);
+      check(HighlightRegionType.LITERAL_LIST, ['[]']);
+      check(HighlightRegionType.LITERAL_MAP, [
+        '{1.0: [].toList()}',
+        '{2: local}'
+      ]);
+      check(HighlightRegionType.LITERAL_STRING, ["'dart:async'", "'string'"]);
+      check(HighlightRegionType.LOCAL_VARIABLE_DECLARATION, ['local']);
+      check(HighlightRegionType.LOCAL_VARIABLE_REFERENCE, ['local']);
+      check(HighlightRegionType.INSTANCE_METHOD_REFERENCE, ['toList']);
+      check(HighlightRegionType.INSTANCE_METHOD_DECLARATION, ['method']);
+      check(HighlightRegionType.STATIC_METHOD_DECLARATION, ['staticMethod']);
+      check(HighlightRegionType.STATIC_METHOD_REFERENCE, ['wait']);
+      check(HighlightRegionType.PARAMETER_DECLARATION, ['parameter']);
+      check(HighlightRegionType.PARAMETER_REFERENCE, ['parameter']);
+      check(HighlightRegionType.INSTANCE_SETTER_DECLARATION, ['setter']);
+      check(HighlightRegionType.TOP_LEVEL_GETTER_REFERENCE, ['override']);
+      check(HighlightRegionType.TOP_LEVEL_VARIABLE_DECLARATION,
+          ['topLevelVariable']);
+      check(HighlightRegionType.TYPE_NAME_DYNAMIC, ['dynamic']);
+      check(HighlightRegionType.TYPE_PARAMETER, ['TypeParameter']);
+      expect(highlights, isEmpty);
+    });
+  }
+}
diff --git a/pkg/analysis_server/test/integration/analysis/navigation_test.dart b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
index 310e882..c633811 100644
--- a/pkg/analysis_server/test/integration/analysis/navigation_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
@@ -100,7 +100,7 @@
       // as a navigation target?
       checkLocal('Class<int>', 'Class<TypeParameter>', ElementKind.CLASS);
       checkRemote(
-          "part 'test2.dart';", r'test2.dart$', ElementKind.COMPILATION_UNIT);
+          "'test2.dart';", r'test2.dart$', ElementKind.COMPILATION_UNIT);
       checkLocal('Class<int>.constructor',
           'constructor(); /* constructor declaration */',
           ElementKind.CONSTRUCTOR);
@@ -113,7 +113,7 @@
       checkLocal('FunctionTypeAlias parameter', 'FunctionTypeAlias();',
           ElementKind.FUNCTION_TYPE_ALIAS);
       checkLocal('field)', 'field;', ElementKind.GETTER);
-      checkRemote("import 'dart:async'", r'async\.dart$', ElementKind.LIBRARY);
+      checkRemote("'dart:async'", r'async\.dart$', ElementKind.LIBRARY);
       checkLocal(
           'localVariable.field', 'localVariable =', ElementKind.LOCAL_VARIABLE);
       checkLocal('method();', 'method() {', ElementKind.METHOD);
diff --git a/pkg/analysis_server/test/integration/analysis/test_all.dart b/pkg/analysis_server/test/integration/analysis/test_all.dart
index b34e141..8b820e0 100644
--- a/pkg/analysis_server/test/integration/analysis/test_all.dart
+++ b/pkg/analysis_server/test/integration/analysis/test_all.dart
@@ -12,6 +12,7 @@
     as get_errors_before_analysis_test;
 import 'get_hover_test.dart' as get_hover_test;
 import 'highlights_test.dart' as highlights_test;
+import 'highlights_test2.dart' as highlights_test2;
 import 'navigation_test.dart' as navigation_test;
 import 'occurrences_test.dart' as occurrences_test;
 import 'outline_test.dart' as outline_test;
@@ -33,6 +34,7 @@
     get_errors_before_analysis_test.main();
     get_hover_test.main();
     highlights_test.main();
+    highlights_test2.main();
     navigation_test.main();
     occurrences_test.main();
     outline_test.main();
diff --git a/pkg/analysis_server/test/integration/integration_test_methods.dart b/pkg/analysis_server/test/integration/integration_test_methods.dart
index 5794acb..4da1b0c 100644
--- a/pkg/analysis_server/test/integration/integration_test_methods.dart
+++ b/pkg/analysis_server/test/integration/integration_test_methods.dart
@@ -240,6 +240,9 @@
    * Return library dependency information for use in client-side indexing and
    * package URI resolution.
    *
+   * Clients that are only using the libraries field should consider using the
+   * analyzedFiles notification instead.
+   *
    * Returns
    *
    * libraries ( List<FilePath> )
@@ -413,6 +416,30 @@
   }
 
   /**
+   * Subscribe for general services (that is, services that are not specific to
+   * individual files). All previous subscriptions are replaced by the given
+   * set of services.
+   *
+   * It is an error if any of the elements in the list are not valid services.
+   * If there is an error, then the current subscriptions will remain
+   * unchanged.
+   *
+   * Parameters
+   *
+   * subscriptions ( List<GeneralAnalysisService> )
+   *
+   *   A list of the services being subscribed to.
+   */
+  Future sendAnalysisSetGeneralSubscriptions(List<GeneralAnalysisService> subscriptions) {
+    var params = new AnalysisSetGeneralSubscriptionsParams(subscriptions).toJson();
+    return server.send("analysis.setGeneralSubscriptions", params)
+        .then((result) {
+      expect(result, isNull);
+      return null;
+    });
+  }
+
+  /**
    * Set the priority files to the files in the given list. A priority file is
    * a file that is given priority when scheduling which analysis work to do
    * first. The list typically contains those files that are visible to the
@@ -447,11 +474,11 @@
   }
 
   /**
-   * Subscribe for services. All previous subscriptions are replaced by the
-   * current set of subscriptions. If a given service is not included as a key
-   * in the map then no files will be subscribed to the service, exactly as if
-   * the service had been included in the map with an explicit empty list of
-   * files.
+   * Subscribe for services that are specific to individual files. All previous
+   * subscriptions are replaced by the current set of subscriptions. If a given
+   * service is not included as a key in the map then no files will be
+   * subscribed to the service, exactly as if the service had been included in
+   * the map with an explicit empty list of files.
    *
    * Note that this request determines the set of requested subscriptions. The
    * actual set of subscriptions at any given time is the intersection of this
@@ -536,6 +563,26 @@
   }
 
   /**
+   * Reports the paths of the files that are being analyzed.
+   *
+   * This notification is not subscribed to by default. Clients can subscribe
+   * by including the value "ANALYZED_FILES" in the list of services passed in
+   * an analysis.setGeneralSubscriptions request.
+   *
+   * Parameters
+   *
+   * directories ( List<FilePath> )
+   *
+   *   A list of the paths of the files that are being analyzed.
+   */
+  Stream<AnalysisAnalyzedFilesParams> onAnalysisAnalyzedFiles;
+
+  /**
+   * Stream controller for [onAnalysisAnalyzedFiles].
+   */
+  StreamController<AnalysisAnalyzedFilesParams> _onAnalysisAnalyzedFiles;
+
+  /**
    * Reports the errors associated with a given file. The set of errors
    * included in the notification is always a complete list that supersedes any
    * previously reported errors.
@@ -1512,6 +1559,8 @@
     onServerError = _onServerError.stream.asBroadcastStream();
     _onServerStatus = new StreamController<ServerStatusParams>(sync: true);
     onServerStatus = _onServerStatus.stream.asBroadcastStream();
+    _onAnalysisAnalyzedFiles = new StreamController<AnalysisAnalyzedFilesParams>(sync: true);
+    onAnalysisAnalyzedFiles = _onAnalysisAnalyzedFiles.stream.asBroadcastStream();
     _onAnalysisErrors = new StreamController<AnalysisErrorsParams>(sync: true);
     onAnalysisErrors = _onAnalysisErrors.stream.asBroadcastStream();
     _onAnalysisFlushResults = new StreamController<AnalysisFlushResultsParams>(sync: true);
@@ -1557,6 +1606,10 @@
         expect(params, isServerStatusParams);
         _onServerStatus.add(new ServerStatusParams.fromJson(decoder, 'params', params));
         break;
+      case "analysis.analyzedFiles":
+        expect(params, isAnalysisAnalyzedFilesParams);
+        _onAnalysisAnalyzedFiles.add(new AnalysisAnalyzedFilesParams.fromJson(decoder, 'params', params));
+        break;
       case "analysis.errors":
         expect(params, isAnalysisErrorsParams);
         _onAnalysisErrors.add(new AnalysisErrorsParams.fromJson(decoder, 'params', params));
diff --git a/pkg/analysis_server/test/integration/integration_tests.dart b/pkg/analysis_server/test/integration/integration_tests.dart
index faec89f..f46b338 100644
--- a/pkg/analysis_server/test/integration/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/integration_tests.dart
@@ -21,9 +21,9 @@
 
 const Matcher isInt = const isInstanceOf<int>('int');
 
-const Matcher isNotification = const MatchesJsonObject('notification', const {
-  'event': isString
-}, optionalFields: const {'params': isMap});
+const Matcher isNotification = const MatchesJsonObject(
+    'notification', const {'event': isString},
+    optionalFields: const {'params': isMap});
 
 const Matcher isObject = isMap;
 
@@ -154,7 +154,7 @@
       // A server error should never happen during an integration test.
       fail('${params.message}\n${params.stackTrace}');
     });
-    return server.start().then((_) {
+    return startServer().then((_) {
       server.listenToOutput(dispatchNotification);
       server.exitCode.then((_) {
         skipShutdown = true;
@@ -188,6 +188,11 @@
   }
 
   /**
+   * Start [server].
+   */
+  Future startServer() => server.start();
+
+  /**
    * After every test, the server is stopped and [sourceDirectory] is deleted.
    */
   Future tearDown() {
@@ -584,7 +589,8 @@
    * `true`, the server will be started with "--observe" and
    * "--pause-isolates-on-exit", allowing the observatory to be used.
    */
-  Future start({bool debugServer: false, int diagnosticPort, bool profileServer: false}) {
+  Future start({bool debugServer: false, int diagnosticPort,
+      bool profileServer: false, bool useAnalysisHighlight2: false}) {
     if (_process != null) {
       throw new Exception('Process already started');
     }
@@ -610,6 +616,9 @@
       arguments.add('--port');
       arguments.add(diagnosticPort.toString());
     }
+    if (useAnalysisHighlight2) {
+      arguments.add('--useAnalysisHighlight2');
+    }
     return Process.start(dartBinary, arguments).then((Process process) {
       _process = process;
       process.exitCode.then((int code) {
diff --git a/pkg/analysis_server/test/integration/protocol_matchers.dart b/pkg/analysis_server/test/integration/protocol_matchers.dart
index fbb40a8..0a5ae19 100644
--- a/pkg/analysis_server/test/integration/protocol_matchers.dart
+++ b/pkg/analysis_server/test/integration/protocol_matchers.dart
@@ -243,6 +243,23 @@
 final Matcher isAnalysisSetAnalysisRootsResult = isNull;
 
 /**
+ * analysis.setGeneralSubscriptions params
+ *
+ * {
+ *   "subscriptions": List<GeneralAnalysisService>
+ * }
+ */
+final Matcher isAnalysisSetGeneralSubscriptionsParams = new LazyMatcher(() => new MatchesJsonObject(
+  "analysis.setGeneralSubscriptions params", {
+    "subscriptions": isListOf(isGeneralAnalysisService)
+  }));
+
+/**
+ * analysis.setGeneralSubscriptions result
+ */
+final Matcher isAnalysisSetGeneralSubscriptionsResult = isNull;
+
+/**
  * analysis.setPriorityFiles params
  *
  * {
@@ -315,6 +332,18 @@
 final Matcher isAnalysisUpdateOptionsResult = isNull;
 
 /**
+ * analysis.analyzedFiles params
+ *
+ * {
+ *   "directories": List<FilePath>
+ * }
+ */
+final Matcher isAnalysisAnalyzedFilesParams = new LazyMatcher(() => new MatchesJsonObject(
+  "analysis.analyzedFiles params", {
+    "directories": isListOf(isFilePath)
+  }));
+
+/**
  * analysis.errors params
  *
  * {
@@ -1345,6 +1374,17 @@
   }));
 
 /**
+ * GeneralAnalysisService
+ *
+ * enum {
+ *   ANALYZED_FILES
+ * }
+ */
+final Matcher isGeneralAnalysisService = new MatchesEnum("GeneralAnalysisService", [
+  "ANALYZED_FILES"
+]);
+
+/**
  * HighlightRegion
  *
  * {
@@ -1373,6 +1413,10 @@
  *   CONSTRUCTOR
  *   DIRECTIVE
  *   DYNAMIC_TYPE
+ *   DYNAMIC_LOCAL_VARIABLE_DECLARATION
+ *   DYNAMIC_LOCAL_VARIABLE_REFERENCE
+ *   DYNAMIC_PARAMETER_DECLARATION
+ *   DYNAMIC_PARAMETER_REFERENCE
  *   ENUM
  *   ENUM_CONSTANT
  *   FIELD
@@ -1383,16 +1427,29 @@
  *   GETTER_DECLARATION
  *   IDENTIFIER_DEFAULT
  *   IMPORT_PREFIX
+ *   INSTANCE_FIELD_DECLARATION
+ *   INSTANCE_FIELD_REFERENCE
+ *   INSTANCE_GETTER_DECLARATION
+ *   INSTANCE_GETTER_REFERENCE
+ *   INSTANCE_METHOD_DECLARATION
+ *   INSTANCE_METHOD_REFERENCE
+ *   INSTANCE_SETTER_DECLARATION
+ *   INSTANCE_SETTER_REFERENCE
+ *   INVALID_STRING_ESCAPE
  *   KEYWORD
  *   LABEL
+ *   LIBRARY_NAME
  *   LITERAL_BOOLEAN
  *   LITERAL_DOUBLE
  *   LITERAL_INTEGER
  *   LITERAL_LIST
  *   LITERAL_MAP
  *   LITERAL_STRING
+ *   LOCAL_FUNCTION_DECLARATION
+ *   LOCAL_FUNCTION_REFERENCE
  *   LOCAL_VARIABLE
  *   LOCAL_VARIABLE_DECLARATION
+ *   LOCAL_VARIABLE_REFERENCE
  *   METHOD
  *   METHOD_DECLARATION
  *   METHOD_DECLARATION_STATIC
@@ -1400,8 +1457,26 @@
  *   PARAMETER
  *   SETTER_DECLARATION
  *   TOP_LEVEL_VARIABLE
+ *   PARAMETER_DECLARATION
+ *   PARAMETER_REFERENCE
+ *   STATIC_FIELD_DECLARATION
+ *   STATIC_GETTER_DECLARATION
+ *   STATIC_GETTER_REFERENCE
+ *   STATIC_METHOD_DECLARATION
+ *   STATIC_METHOD_REFERENCE
+ *   STATIC_SETTER_DECLARATION
+ *   STATIC_SETTER_REFERENCE
+ *   TOP_LEVEL_FUNCTION_DECLARATION
+ *   TOP_LEVEL_FUNCTION_REFERENCE
+ *   TOP_LEVEL_GETTER_DECLARATION
+ *   TOP_LEVEL_GETTER_REFERENCE
+ *   TOP_LEVEL_SETTER_DECLARATION
+ *   TOP_LEVEL_SETTER_REFERENCE
+ *   TOP_LEVEL_VARIABLE_DECLARATION
  *   TYPE_NAME_DYNAMIC
  *   TYPE_PARAMETER
+ *   UNRESOLVED_INSTANCE_MEMBER_REFERENCE
+ *   VALID_STRING_ESCAPE
  * }
  */
 final Matcher isHighlightRegionType = new MatchesEnum("HighlightRegionType", [
@@ -1414,6 +1489,10 @@
   "CONSTRUCTOR",
   "DIRECTIVE",
   "DYNAMIC_TYPE",
+  "DYNAMIC_LOCAL_VARIABLE_DECLARATION",
+  "DYNAMIC_LOCAL_VARIABLE_REFERENCE",
+  "DYNAMIC_PARAMETER_DECLARATION",
+  "DYNAMIC_PARAMETER_REFERENCE",
   "ENUM",
   "ENUM_CONSTANT",
   "FIELD",
@@ -1424,16 +1503,29 @@
   "GETTER_DECLARATION",
   "IDENTIFIER_DEFAULT",
   "IMPORT_PREFIX",
+  "INSTANCE_FIELD_DECLARATION",
+  "INSTANCE_FIELD_REFERENCE",
+  "INSTANCE_GETTER_DECLARATION",
+  "INSTANCE_GETTER_REFERENCE",
+  "INSTANCE_METHOD_DECLARATION",
+  "INSTANCE_METHOD_REFERENCE",
+  "INSTANCE_SETTER_DECLARATION",
+  "INSTANCE_SETTER_REFERENCE",
+  "INVALID_STRING_ESCAPE",
   "KEYWORD",
   "LABEL",
+  "LIBRARY_NAME",
   "LITERAL_BOOLEAN",
   "LITERAL_DOUBLE",
   "LITERAL_INTEGER",
   "LITERAL_LIST",
   "LITERAL_MAP",
   "LITERAL_STRING",
+  "LOCAL_FUNCTION_DECLARATION",
+  "LOCAL_FUNCTION_REFERENCE",
   "LOCAL_VARIABLE",
   "LOCAL_VARIABLE_DECLARATION",
+  "LOCAL_VARIABLE_REFERENCE",
   "METHOD",
   "METHOD_DECLARATION",
   "METHOD_DECLARATION_STATIC",
@@ -1441,8 +1533,26 @@
   "PARAMETER",
   "SETTER_DECLARATION",
   "TOP_LEVEL_VARIABLE",
+  "PARAMETER_DECLARATION",
+  "PARAMETER_REFERENCE",
+  "STATIC_FIELD_DECLARATION",
+  "STATIC_GETTER_DECLARATION",
+  "STATIC_GETTER_REFERENCE",
+  "STATIC_METHOD_DECLARATION",
+  "STATIC_METHOD_REFERENCE",
+  "STATIC_SETTER_DECLARATION",
+  "STATIC_SETTER_REFERENCE",
+  "TOP_LEVEL_FUNCTION_DECLARATION",
+  "TOP_LEVEL_FUNCTION_REFERENCE",
+  "TOP_LEVEL_GETTER_DECLARATION",
+  "TOP_LEVEL_GETTER_REFERENCE",
+  "TOP_LEVEL_SETTER_DECLARATION",
+  "TOP_LEVEL_SETTER_REFERENCE",
+  "TOP_LEVEL_VARIABLE_DECLARATION",
   "TYPE_NAME_DYNAMIC",
-  "TYPE_PARAMETER"
+  "TYPE_PARAMETER",
+  "UNRESOLVED_INSTANCE_MEMBER_REFERENCE",
+  "VALID_STRING_ESCAPE"
 ]);
 
 /**
diff --git a/pkg/analysis_server/test/services/completion/completion_computer_test.dart b/pkg/analysis_server/test/services/completion/completion_computer_test.dart
index 5b23689..e69eaba 100644
--- a/pkg/analysis_server/test/services/completion/completion_computer_test.dart
+++ b/pkg/analysis_server/test/services/completion/completion_computer_test.dart
@@ -7,7 +7,7 @@
 import 'dart:async';
 
 import 'package:analysis_server/completion/completion_core.dart'
-    show CompletionRequest;
+    show CompletionRequest, CompletionResult;
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/protocol.dart';
 import 'package:analysis_server/src/services/completion/completion_manager.dart';
@@ -93,7 +93,7 @@
         case 1:
           contributor1.assertCalls(context, source, 0, searchEngine);
           contributor2.assertCalls(context, source, 0, searchEngine);
-          expect(r.last, isFalse);
+          expect(r.isLast, isFalse);
           expect(r.suggestions, hasLength(1));
           expect(r.suggestions, contains(suggestion1));
           resolveLibrary();
@@ -101,7 +101,7 @@
         case 2:
           contributor1.assertFull(0);
           contributor2.assertFull(1);
-          expect(r.last, isTrue);
+          expect(r.isLast, isTrue);
           expect(r.suggestions, hasLength(2));
           expect(r.suggestions, contains(suggestion1));
           expect(r.suggestions, contains(suggestion2));
@@ -132,7 +132,7 @@
         case 1:
           contributor1.assertCalls(context, source, 0, searchEngine);
           contributor2.assertCalls(context, source, 0, searchEngine);
-          expect(r.last, isTrue);
+          expect(r.isLast, isTrue);
           expect(r.suggestions, hasLength(2));
           expect(r.suggestions, contains(suggestion1));
           expect(r.suggestions, contains(suggestion2));
diff --git a/pkg/analysis_server/test/socket_server_test.dart b/pkg/analysis_server/test/socket_server_test.dart
index 8e74cef..ba79457 100644
--- a/pkg/analysis_server/test/socket_server_test.dart
+++ b/pkg/analysis_server/test/socket_server_test.dart
@@ -111,7 +111,7 @@
     manager.processPlugins([serverPlugin]);
     return new SocketServer(new AnalysisServerOptions(),
         DirectoryBasedDartSdk.defaultSdk, InstrumentationService.NULL_SERVICE,
-        serverPlugin, null);
+        serverPlugin, null, null);
   }
 }
 
diff --git a/pkg/analysis_server/test/src/watch_manager_test.dart b/pkg/analysis_server/test/src/watch_manager_test.dart
new file mode 100644
index 0000000..8d1c4e2
--- /dev/null
+++ b/pkg/analysis_server/test/src/watch_manager_test.dart
@@ -0,0 +1,360 @@
+// Copyright (c) 2015, 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 test.src.watch_manager_test;
+
+import 'dart:async';
+
+import 'package:analysis_server/src/watch_manager.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+import 'package:unittest/unittest.dart';
+import 'package:watcher/watcher.dart';
+
+import '../mocks.dart';
+
+main() {
+  groupSep = ' | ';
+  defineReflectiveTests(WatchManagerTest);
+  defineReflectiveTests(WatchNodeTest);
+}
+
+/**
+ * Tokens that can be used for testing purposes.
+ */
+class Token {
+  /**
+   * A name used for debugging.
+   */
+  final String name;
+
+  /**
+   * Initialize a newly created token to have the given name.
+   */
+  Token(this.name);
+
+  @override
+  String toString() => name;
+}
+
+/**
+ * A listener that captures the state of watch events so that they can be
+ * tested.
+ */
+class WatchListener {
+  /**
+   * The event that was passed to the listener method.
+   */
+  WatchEvent event;
+
+  /**
+   * The tokens that were passed to the listener method.
+   */
+  List<Token> tokens;
+
+  /**
+   * Clear the state so that we can distinguish between not receiving an event
+   * and receiving the wrong event.
+   */
+  void clear() {
+    this.event = null;
+    this.tokens = null;
+  }
+
+  /**
+   * The listener method.
+   */
+  void handleWatchEvent(WatchEvent event, List<Token> tokens) {
+    this.event = event;
+    this.tokens = tokens;
+  }
+}
+
+@reflectiveTest
+class WatchManagerTest {
+  MemoryResourceProvider provider;
+  WatchListener listener;
+  WatchManager<Token> manager;
+
+  void setUp() {
+    provider = new MemoryResourceProvider();
+    listener = new WatchListener();
+    manager = new WatchManager<Token>(provider, listener.handleWatchEvent);
+  }
+
+  Future test_addFolder_folderAndSubfolder() async {
+    Folder topFolder = provider.getFolder('/a/b');
+    Folder childFolder = provider.getFolder('/a/b/c/d');
+    Token topToken = new Token('topToken');
+    Token childToken = new Token('childToken');
+    manager.addFolder(topFolder, topToken);
+    manager.addFolder(childFolder, childToken);
+
+    File newFile1 = provider.newFile('/a/b/c/lib.dart', '');
+    await _expectEvent(ChangeType.ADD, newFile1.path, [topToken]);
+
+    File newFile2 = provider.newFile('/a/b/c/d/lib.dart', '');
+    _expectEvent(ChangeType.ADD, newFile2.path, [topToken, childToken]);
+  }
+
+  Future test_addFolder_singleFolder_multipleTokens() {
+    Folder folder = provider.getFolder('/a/b');
+    Token token1 = new Token('token1');
+    Token token2 = new Token('token2');
+    manager.addFolder(folder, token1);
+    manager.addFolder(folder, token2);
+
+    File newFile = provider.newFile('/a/b/lib.dart', '');
+    return _expectEvent(ChangeType.ADD, newFile.path, [token1, token2]);
+  }
+
+  Future test_addFolder_singleFolder_singleToken() async {
+    Folder folder = provider.getFolder('/a/b');
+    Token token = new Token('token');
+    manager.addFolder(folder, token);
+
+    Folder newFolder = provider.newFolder('/a/b/c');
+    await _expectEvent(ChangeType.ADD, newFolder.path, [token]);
+
+    File newFile = provider.newFile('/a/b/c/lib.dart', '');
+    _expectEvent(ChangeType.ADD, newFile.path, [token]);
+  }
+
+  Future test_addFolder_unrelatedFolders() async {
+    Folder folder1 = provider.getFolder('/a/b');
+    Folder folder2 = provider.getFolder('/c/d');
+    Token token1 = new Token('token1');
+    Token token2 = new Token('token2');
+    manager.addFolder(folder1, token1);
+    manager.addFolder(folder2, token2);
+
+    File newFile1 = provider.newFile('/a/b/lib.dart', '');
+    await _expectEvent(ChangeType.ADD, newFile1.path, [token1]);
+
+    File newFile2 = provider.newFile('/c/d/lib.dart', '');
+    _expectEvent(ChangeType.ADD, newFile2.path, [token2]);
+  }
+
+  void test_creation() {
+    expect(manager, isNotNull);
+  }
+
+  Future test_removeFolder_multipleTokens() {
+    Folder folder = provider.getFolder('/a/b');
+    Token token1 = new Token('token1');
+    Token token2 = new Token('token2');
+    manager.addFolder(folder, token1);
+    manager.addFolder(folder, token2);
+    manager.removeFolder(folder, token2);
+
+    File newFile = provider.newFile('/a/b/lib.dart', '');
+    return _expectEvent(ChangeType.ADD, newFile.path, [token1]);
+  }
+
+  Future test_removeFolder_unadded() {
+    Folder folder = provider.getFolder('/a/b');
+    Token token = new Token('token');
+    expect(() => manager.removeFolder(folder, token), throws);
+
+    provider.newFile('/a/b/lib.dart', '');
+    return _expectNoEvent();
+  }
+
+  Future test_removeFolder_withChildren() async {
+    Folder topFolder = provider.getFolder('/a/b');
+    Folder childFolder = provider.getFolder('/a/b/c/d');
+    Token topToken = new Token('topToken');
+    Token childToken = new Token('childToken');
+    manager.addFolder(topFolder, topToken);
+    manager.addFolder(childFolder, childToken);
+    manager.removeFolder(topFolder, topToken);
+
+    File newFile = provider.newFile('/a/b/c/d/lib.dart', '');
+    await _expectEvent(ChangeType.ADD, newFile.path, [childToken]);
+
+    provider.newFile('/a/b/lib.dart', '');
+    _expectNoEvent();
+  }
+
+  Future test_removeFolder_withNoChildren() {
+    Folder folder = provider.getFolder('/a/b');
+    Token token = new Token('token');
+    manager.addFolder(folder, token);
+    manager.removeFolder(folder, token);
+
+    provider.newFile('/a/b/lib.dart', '');
+    return _expectNoEvent();
+  }
+
+  Future _expectEvent(ChangeType expectedType, String expectedPath,
+      List<Token> expectedTokens) async {
+    await pumpEventQueue();
+    WatchEvent event = listener.event;
+    expect(event, isNotNull);
+    expect(event.type, expectedType);
+    expect(event.path, expectedPath);
+    expect(listener.tokens, unorderedEquals(expectedTokens));
+    listener.clear();
+  }
+
+  Future _expectNoEvent() async {
+    await pumpEventQueue();
+    expect(listener.event, isNull);
+    expect(listener.tokens, isNull);
+  }
+}
+
+@reflectiveTest
+class WatchNodeTest {
+  MemoryResourceProvider provider = new MemoryResourceProvider();
+
+  void test_creation_folder() {
+    Folder folder = provider.getFolder('/a/b');
+    WatchNode node = new WatchNode(folder);
+    expect(node, isNotNull);
+    expect(node.children, isEmpty);
+    expect(node.folder, folder);
+    expect(node.parent, isNull);
+    expect(node.subscription, isNull);
+    expect(node.tokens, isEmpty);
+  }
+
+  void test_creation_noFolder() {
+    WatchNode node = new WatchNode(null);
+    expect(node, isNotNull);
+    expect(node.children, isEmpty);
+    expect(node.folder, isNull);
+    expect(node.parent, isNull);
+    expect(node.subscription, isNull);
+    expect(node.tokens, isEmpty);
+  }
+
+  void test_delete_nested_child() {
+    WatchNode rootNode = new WatchNode(null);
+    WatchNode topNode = new WatchNode(provider.getFolder('/a/b'));
+    WatchNode childNode = new WatchNode(provider.getFolder('/a/b/c/d'));
+    WatchNode grandchildNode = new WatchNode(provider.getFolder('/a/b/c/d/e'));
+    rootNode.insert(topNode);
+    rootNode.insert(childNode);
+    rootNode.insert(grandchildNode);
+
+    childNode.delete();
+    expect(rootNode.children, equals([topNode]));
+    expect(topNode.children, equals([grandchildNode]));
+    expect(topNode.parent, rootNode);
+    expect(grandchildNode.parent, topNode);
+  }
+
+  void test_delete_nested_noChild() {
+    WatchNode rootNode = new WatchNode(null);
+    WatchNode topNode = new WatchNode(provider.getFolder('/a/b'));
+    WatchNode childNode = new WatchNode(provider.getFolder('/a/b/c/d'));
+    rootNode.insert(topNode);
+    rootNode.insert(childNode);
+
+    childNode.delete();
+    expect(rootNode.children, equals([topNode]));
+    expect(topNode.children, isEmpty);
+    expect(topNode.parent, rootNode);
+  }
+
+  void test_delete_top_child() {
+    WatchNode rootNode = new WatchNode(null);
+    WatchNode topNode = new WatchNode(provider.getFolder('/a/b'));
+    WatchNode childNode = new WatchNode(provider.getFolder('/a/b/c/d'));
+    rootNode.insert(topNode);
+    rootNode.insert(childNode);
+
+    topNode.delete();
+    expect(rootNode.children, equals([childNode]));
+    expect(childNode.parent, rootNode);
+  }
+
+  void test_delete_top_noChild() {
+    WatchNode rootNode = new WatchNode(null);
+    WatchNode topNode = new WatchNode(provider.getFolder('/a/b'));
+    rootNode.insert(topNode);
+
+    topNode.delete();
+    expect(rootNode.children, isEmpty);
+  }
+
+  void test_findParent_childOfLeaf() {
+    WatchNode rootNode = new WatchNode(null);
+    WatchNode topNode = new WatchNode(provider.getFolder('/a/b'));
+    rootNode.insert(topNode);
+
+    expect(rootNode.findParent('/a/b/c'), topNode);
+  }
+
+  void test_findParent_childOfNonLeaf() {
+    WatchNode rootNode = new WatchNode(null);
+    WatchNode topNode = new WatchNode(provider.getFolder('/a/b'));
+    WatchNode childNode = new WatchNode(provider.getFolder('/a/b/c/d'));
+    rootNode.insert(topNode);
+    rootNode.insert(childNode);
+
+    expect(rootNode.findParent('/a/b/c'), topNode);
+  }
+
+  void test_findParent_noMatch() {
+    WatchNode rootNode = new WatchNode(null);
+    WatchNode topNode = new WatchNode(provider.getFolder('/a/b'));
+    rootNode.insert(topNode);
+
+    expect(rootNode.findParent('/c/d'), rootNode);
+  }
+
+  void test_insert_intermediate_afterParentAndChild() {
+    WatchNode rootNode = new WatchNode(null);
+    WatchNode topNode = new WatchNode(provider.getFolder('/a/b'));
+    WatchNode childNode = new WatchNode(provider.getFolder('/a/b/c/d'));
+    WatchNode intermediateNode = new WatchNode(provider.getFolder('/a/b/c'));
+
+    rootNode.insert(topNode);
+    rootNode.insert(childNode);
+    rootNode.insert(intermediateNode);
+    expect(topNode.parent, rootNode);
+    expect(topNode.children, equals([intermediateNode]));
+    expect(intermediateNode.parent, topNode);
+    expect(intermediateNode.children, equals([childNode]));
+    expect(childNode.parent, intermediateNode);
+    expect(childNode.children, isEmpty);
+  }
+
+  void test_insert_nested_afterParent() {
+    WatchNode rootNode = new WatchNode(null);
+    WatchNode topNode = new WatchNode(provider.getFolder('/a/b'));
+    WatchNode childNode = new WatchNode(provider.getFolder('/a/b/c/d'));
+
+    rootNode.insert(topNode);
+    rootNode.insert(childNode);
+    expect(childNode.parent, topNode);
+    expect(childNode.children, isEmpty);
+    expect(topNode.children, equals([childNode]));
+  }
+
+  void test_insert_nested_beforeParent() {
+    WatchNode rootNode = new WatchNode(null);
+    WatchNode topNode = new WatchNode(provider.getFolder('/a/b'));
+    WatchNode childNode = new WatchNode(provider.getFolder('/a/b/c/d'));
+
+    rootNode.insert(childNode);
+    rootNode.insert(topNode);
+    expect(childNode.parent, topNode);
+    expect(childNode.children, isEmpty);
+    expect(topNode.children, equals([childNode]));
+  }
+
+  void test_insert_top() {
+    WatchNode rootNode = new WatchNode(null);
+    WatchNode topNode = new WatchNode(provider.getFolder('/a/b'));
+
+    rootNode.insert(topNode);
+    expect(rootNode.children, equals([topNode]));
+    expect(topNode.parent, rootNode);
+    expect(topNode.children, isEmpty);
+  }
+}
diff --git a/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart b/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
index 88df36b..755ed52 100644
--- a/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
+++ b/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
@@ -349,7 +349,7 @@
       String humanReadableNameString =
           literalString(impliedType.humanReadableName);
       writeln(
-          'throw jsonDecoder.mismatch(jsonPath, $humanReadableNameString);');
+          'throw jsonDecoder.mismatch(jsonPath, $humanReadableNameString, json);');
     });
     writeln('}');
   }
@@ -590,7 +590,7 @@
             writeln('if ($fieldAccessor != $valueString) {');
             indent(() {
               writeln(
-                  'throw jsonDecoder.mismatch(jsonPath, "equal " + $valueString);');
+                  'throw jsonDecoder.mismatch(jsonPath, "equal " + $valueString, json);');
             });
             writeln('}');
             continue;
@@ -627,7 +627,7 @@
       writeln('} else {');
       indent(() {
         writeln(
-            'throw jsonDecoder.mismatch(jsonPath, $humanReadableNameString);');
+            'throw jsonDecoder.mismatch(jsonPath, $humanReadableNameString, json);');
       });
       writeln('}');
     });
diff --git a/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java b/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
index c6debb7..c398e4d 100644
--- a/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
+++ b/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
@@ -86,6 +86,9 @@
    *
    * Return library dependency information for use in client-side indexing and package URI
    * resolution.
+   *
+   * Clients that are only using the libraries field should consider using the analyzedFiles
+   * notification instead.
    */
   public void analysis_getLibraryDependencies(GetLibraryDependenciesConsumer consumer);
 
@@ -170,6 +173,19 @@
   public void analysis_setAnalysisRoots(List<String> included, List<String> excluded, Map<String, String> packageRoots);
 
   /**
+   * {@code analysis.setGeneralSubscriptions}
+   *
+   * Subscribe for general services (that is, services that are not specific to individual files).
+   * All previous subscriptions are replaced by the given set of services.
+   *
+   * It is an error if any of the elements in the list are not valid services. If there is an error,
+   * then the current subscriptions will remain unchanged.
+   *
+   * @param subscriptions A list of the services being subscribed to.
+   */
+  public void analysis_setGeneralSubscriptions(List<String> subscriptions);
+
+  /**
    * {@code analysis.setPriorityFiles}
    *
    * Set the priority files to the files in the given list. A priority file is a file that is given
@@ -195,10 +211,10 @@
   /**
    * {@code analysis.setSubscriptions}
    *
-   * Subscribe for services. All previous subscriptions are replaced by the current set of
-   * subscriptions. If a given service is not included as a key in the map then no files will be
-   * subscribed to the service, exactly as if the service had been included in the map with an
-   * explicit empty list of files.
+   * Subscribe for services that are specific to individual files. All previous subscriptions are
+   * replaced by the current set of subscriptions. If a given service is not included as a key in the
+   * map then no files will be subscribed to the service, exactly as if the service had been included
+   * in the map with an explicit empty list of files.
    *
    * Note that this request determines the set of requested subscriptions. The actual set of
    * subscriptions at any given time is the intersection of this set with the set of files currently
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisService.java b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisService.java
index 94c5418..ca3b8e9 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisService.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisService.java
@@ -17,7 +17,8 @@
 package org.dartlang.analysis.server.protocol;
 
 /**
- * An enumeration of the services provided by the analysis domain.
+ * An enumeration of the services provided by the analysis domain that are related to a specific
+ * list of files.
  *
  * @coverage dart.server.generated.types
  */
@@ -27,6 +28,10 @@
 
   public static final String HIGHLIGHTS = "HIGHLIGHTS";
 
+  /**
+   * This service is not currently implemented and will become a GeneralAnalysisService in a future
+   * release.
+   */
   public static final String INVALIDATE = "INVALIDATE";
 
   public static final String NAVIGATION = "NAVIGATION";
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/GeneralAnalysisService.java b/pkg/analysis_server/tool/spec/generated/java/types/GeneralAnalysisService.java
new file mode 100644
index 0000000..a1f0071
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/GeneralAnalysisService.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package org.dartlang.analysis.server.protocol;
+
+/**
+ * An enumeration of the services provided by the analysis domain that are general in nature (that
+ * is, are not specific to some list of files).
+ *
+ * @coverage dart.server.generated.types
+ */
+public class GeneralAnalysisService {
+
+  public static final String ANALYZED_FILES = "ANALYZED_FILES";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegionType.java b/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegionType.java
index 4927e4b..9eace11 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegionType.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegionType.java
@@ -39,32 +39,120 @@
 
   public static final String DIRECTIVE = "DIRECTIVE";
 
+  /**
+   * Only for version 1 of highlight.
+   */
   public static final String DYNAMIC_TYPE = "DYNAMIC_TYPE";
 
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String DYNAMIC_LOCAL_VARIABLE_DECLARATION = "DYNAMIC_LOCAL_VARIABLE_DECLARATION";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String DYNAMIC_LOCAL_VARIABLE_REFERENCE = "DYNAMIC_LOCAL_VARIABLE_REFERENCE";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String DYNAMIC_PARAMETER_DECLARATION = "DYNAMIC_PARAMETER_DECLARATION";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String DYNAMIC_PARAMETER_REFERENCE = "DYNAMIC_PARAMETER_REFERENCE";
+
   public static final String ENUM = "ENUM";
 
   public static final String ENUM_CONSTANT = "ENUM_CONSTANT";
 
+  /**
+   * Only for version 1 of highlight.
+   */
   public static final String FIELD = "FIELD";
 
+  /**
+   * Only for version 1 of highlight.
+   */
   public static final String FIELD_STATIC = "FIELD_STATIC";
 
+  /**
+   * Only for version 1 of highlight.
+   */
   public static final String FUNCTION = "FUNCTION";
 
+  /**
+   * Only for version 1 of highlight.
+   */
   public static final String FUNCTION_DECLARATION = "FUNCTION_DECLARATION";
 
   public static final String FUNCTION_TYPE_ALIAS = "FUNCTION_TYPE_ALIAS";
 
+  /**
+   * Only for version 1 of highlight.
+   */
   public static final String GETTER_DECLARATION = "GETTER_DECLARATION";
 
   public static final String IDENTIFIER_DEFAULT = "IDENTIFIER_DEFAULT";
 
   public static final String IMPORT_PREFIX = "IMPORT_PREFIX";
 
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String INSTANCE_FIELD_DECLARATION = "INSTANCE_FIELD_DECLARATION";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String INSTANCE_FIELD_REFERENCE = "INSTANCE_FIELD_REFERENCE";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String INSTANCE_GETTER_DECLARATION = "INSTANCE_GETTER_DECLARATION";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String INSTANCE_GETTER_REFERENCE = "INSTANCE_GETTER_REFERENCE";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String INSTANCE_METHOD_DECLARATION = "INSTANCE_METHOD_DECLARATION";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String INSTANCE_METHOD_REFERENCE = "INSTANCE_METHOD_REFERENCE";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String INSTANCE_SETTER_DECLARATION = "INSTANCE_SETTER_DECLARATION";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String INSTANCE_SETTER_REFERENCE = "INSTANCE_SETTER_REFERENCE";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String INVALID_STRING_ESCAPE = "INVALID_STRING_ESCAPE";
+
   public static final String KEYWORD = "KEYWORD";
 
   public static final String LABEL = "LABEL";
 
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String LIBRARY_NAME = "LIBRARY_NAME";
+
   public static final String LITERAL_BOOLEAN = "LITERAL_BOOLEAN";
 
   public static final String LITERAL_DOUBLE = "LITERAL_DOUBLE";
@@ -77,26 +165,155 @@
 
   public static final String LITERAL_STRING = "LITERAL_STRING";
 
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String LOCAL_FUNCTION_DECLARATION = "LOCAL_FUNCTION_DECLARATION";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String LOCAL_FUNCTION_REFERENCE = "LOCAL_FUNCTION_REFERENCE";
+
+  /**
+   * Only for version 1 of highlight.
+   */
   public static final String LOCAL_VARIABLE = "LOCAL_VARIABLE";
 
   public static final String LOCAL_VARIABLE_DECLARATION = "LOCAL_VARIABLE_DECLARATION";
 
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String LOCAL_VARIABLE_REFERENCE = "LOCAL_VARIABLE_REFERENCE";
+
+  /**
+   * Only for version 1 of highlight.
+   */
   public static final String METHOD = "METHOD";
 
+  /**
+   * Only for version 1 of highlight.
+   */
   public static final String METHOD_DECLARATION = "METHOD_DECLARATION";
 
+  /**
+   * Only for version 1 of highlight.
+   */
   public static final String METHOD_DECLARATION_STATIC = "METHOD_DECLARATION_STATIC";
 
+  /**
+   * Only for version 1 of highlight.
+   */
   public static final String METHOD_STATIC = "METHOD_STATIC";
 
+  /**
+   * Only for version 1 of highlight.
+   */
   public static final String PARAMETER = "PARAMETER";
 
+  /**
+   * Only for version 1 of highlight.
+   */
   public static final String SETTER_DECLARATION = "SETTER_DECLARATION";
 
+  /**
+   * Only for version 1 of highlight.
+   */
   public static final String TOP_LEVEL_VARIABLE = "TOP_LEVEL_VARIABLE";
 
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String PARAMETER_DECLARATION = "PARAMETER_DECLARATION";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String PARAMETER_REFERENCE = "PARAMETER_REFERENCE";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String STATIC_FIELD_DECLARATION = "STATIC_FIELD_DECLARATION";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String STATIC_GETTER_DECLARATION = "STATIC_GETTER_DECLARATION";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String STATIC_GETTER_REFERENCE = "STATIC_GETTER_REFERENCE";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String STATIC_METHOD_DECLARATION = "STATIC_METHOD_DECLARATION";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String STATIC_METHOD_REFERENCE = "STATIC_METHOD_REFERENCE";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String STATIC_SETTER_DECLARATION = "STATIC_SETTER_DECLARATION";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String STATIC_SETTER_REFERENCE = "STATIC_SETTER_REFERENCE";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String TOP_LEVEL_FUNCTION_DECLARATION = "TOP_LEVEL_FUNCTION_DECLARATION";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String TOP_LEVEL_FUNCTION_REFERENCE = "TOP_LEVEL_FUNCTION_REFERENCE";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String TOP_LEVEL_GETTER_DECLARATION = "TOP_LEVEL_GETTER_DECLARATION";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String TOP_LEVEL_GETTER_REFERENCE = "TOP_LEVEL_GETTER_REFERENCE";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String TOP_LEVEL_SETTER_DECLARATION = "TOP_LEVEL_SETTER_DECLARATION";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String TOP_LEVEL_SETTER_REFERENCE = "TOP_LEVEL_SETTER_REFERENCE";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String TOP_LEVEL_VARIABLE_DECLARATION = "TOP_LEVEL_VARIABLE_DECLARATION";
+
   public static final String TYPE_NAME_DYNAMIC = "TYPE_NAME_DYNAMIC";
 
   public static final String TYPE_PARAMETER = "TYPE_PARAMETER";
 
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String UNRESOLVED_INSTANCE_MEMBER_REFERENCE = "UNRESOLVED_INSTANCE_MEMBER_REFERENCE";
+
+  /**
+   * Only for version 2 of highlight.
+   */
+  public static final String VALID_STRING_ESCAPE = "VALID_STRING_ESCAPE";
+
 }
diff --git a/pkg/analysis_server/tool/spec/spec_input.html b/pkg/analysis_server/tool/spec/spec_input.html
index b88c8ac..1d61cb1 100644
--- a/pkg/analysis_server/tool/spec/spec_input.html
+++ b/pkg/analysis_server/tool/spec/spec_input.html
@@ -5,7 +5,7 @@
   </head>
   <body>
     <h1>Analysis Server API Specification</h1>
-    <h1 style="color:#999999">Version <version>1.7.0</version></h1>
+    <h1 style="color:#999999">Version <version>1.9.0</version></h1>
     <p>
       This document contains a specification of the API provided by the
       analysis server.  The API in this document is currently under
@@ -396,6 +396,10 @@
           Return library dependency information for use in client-side indexing
           and package URI resolution.
         </p>
+        <p>
+        Clients that are only using the libraries field should consider using the
+        analyzedFiles notification instead.
+        </p>
         <result>
           <field name="libraries">
             <list><ref>FilePath</ref></list>
@@ -591,6 +595,24 @@
           </field>
         </params>
       </request>
+     <request method="setGeneralSubscriptions">
+        <p>
+          Subscribe for general services (that is, services that are not
+          specific to individual files). All previous subscriptions are replaced
+          by the given set of services.
+        </p>
+        <p>
+          It is an error if any of the elements in the list are not valid
+          services. If there is an error, then the current subscriptions will
+          remain unchanged.
+        </p>
+        <params>
+          <field name="subscriptions">
+            <list><ref>GeneralAnalysisService</ref></list>
+            <p>A list of the services being subscribed to.</p>
+          </field>
+        </params>
+      </request>
       <request method="setPriorityFiles">
         <p>
           Set the priority files to the files in the given list. A
@@ -628,11 +650,11 @@
       </request>
       <request method="setSubscriptions">
         <p>
-          Subscribe for services. All previous subscriptions are
-          replaced by the current set of subscriptions. If a given
-          service is not included as a key in the map then no files
-          will be subscribed to the service, exactly as if the service
-          had been included in the map with an explicit empty list of
+          Subscribe for services that are specific to individual files.
+          All previous subscriptions are replaced by the current set of
+          subscriptions. If a given service is not included as a key in the map
+          then no files will be subscribed to the service, exactly as if the
+          service had been included in the map with an explicit empty list of
           files.
         </p>
         <p>
@@ -724,6 +746,24 @@
           </field>
         </params>
       </request>
+      <notification event="analyzedFiles">
+        <p>
+          Reports the paths of the files that are being analyzed.
+        </p>
+        <p>
+          This notification is not subscribed to by default. Clients can
+          subscribe by including the value <tt>"ANALYZED_FILES"</tt> in the list
+          of services passed in an analysis.setGeneralSubscriptions request.
+        </p>
+        <params>
+          <field name="directories">
+            <list><ref>FilePath</ref></list>
+              <p>
+                A list of the paths of the files that are being analyzed.
+              </p>
+            </field>
+        </params>
+      </notification>
       <notification event="errors">
         <p>
           Reports the errors associated with a given file. The set of
@@ -2002,13 +2042,19 @@
       </type>
       <type name="AnalysisService">
         <p>
-          An enumeration of the services provided by the analysis
-          domain.
+          An enumeration of the services provided by the analysis domain that
+          are related to a specific list of files.
         </p>
         <enum>
           <value><code>FOLDING</code></value>
           <value><code>HIGHLIGHTS</code></value>
-          <value><code>INVALIDATE</code></value>
+          <value>
+            <code>INVALIDATE</code>
+            <p>
+              This service is not currently implemented and will become a
+              GeneralAnalysisService in a future release.
+            </p>
+          </value>
           <value><code>NAVIGATION</code></value>
           <value><code>OCCURRENCES</code></value>
           <value><code>OUTLINE</code></value>
@@ -2461,6 +2507,15 @@
           </field>
         </object>
       </type>
+      <type name="GeneralAnalysisService">
+        <p>
+          An enumeration of the services provided by the analysis domain that are
+          general in nature (that is, are not specific to some list of files).
+        </p>
+        <enum>
+          <value><code>ANALYZED_FILES</code></value>
+        </enum>
+      </type>
       <type name="HighlightRegion">
         <p>
           A description of a region that could have special highlighting
@@ -2501,36 +2556,218 @@
           <value><code>COMMENT_END_OF_LINE</code></value>
           <value><code>CONSTRUCTOR</code></value>
           <value><code>DIRECTIVE</code></value>
-          <value><code>DYNAMIC_TYPE</code></value>
+          <value>
+            <code>DYNAMIC_TYPE</code>
+            <p>Only for version 1 of highlight.</p>
+          </value>
+          <value>
+            <code>DYNAMIC_LOCAL_VARIABLE_DECLARATION</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>DYNAMIC_LOCAL_VARIABLE_REFERENCE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>DYNAMIC_PARAMETER_DECLARATION</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>DYNAMIC_PARAMETER_REFERENCE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
           <value><code>ENUM</code></value>
           <value><code>ENUM_CONSTANT</code></value>
-          <value><code>FIELD</code></value>
-          <value><code>FIELD_STATIC</code></value>
-          <value><code>FUNCTION</code></value>
-          <value><code>FUNCTION_DECLARATION</code></value>
+          <value>
+            <code>FIELD</code>
+            <p>Only for version 1 of highlight.</p>
+          </value>
+          <value>
+            <code>FIELD_STATIC</code>
+            <p>Only for version 1 of highlight.</p>
+          </value>
+          <value>
+            <code>FUNCTION</code>
+            <p>Only for version 1 of highlight.</p>
+          </value>
+          <value>
+            <code>FUNCTION_DECLARATION</code>
+            <p>Only for version 1 of highlight.</p>
+          </value>
           <value><code>FUNCTION_TYPE_ALIAS</code></value>
-          <value><code>GETTER_DECLARATION</code></value>
+          <value>
+            <code>GETTER_DECLARATION</code>
+            <p>Only for version 1 of highlight.</p>
+          </value>
           <value><code>IDENTIFIER_DEFAULT</code></value>
           <value><code>IMPORT_PREFIX</code></value>
+          <value>
+            <code>INSTANCE_FIELD_DECLARATION</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>INSTANCE_FIELD_REFERENCE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>INSTANCE_GETTER_DECLARATION</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>INSTANCE_GETTER_REFERENCE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>INSTANCE_METHOD_DECLARATION</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>INSTANCE_METHOD_REFERENCE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>INSTANCE_SETTER_DECLARATION</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>INSTANCE_SETTER_REFERENCE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>INVALID_STRING_ESCAPE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
           <value><code>KEYWORD</code></value>
           <value><code>LABEL</code></value>
+          <value>
+            <code>LIBRARY_NAME</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
           <value><code>LITERAL_BOOLEAN</code></value>
           <value><code>LITERAL_DOUBLE</code></value>
           <value><code>LITERAL_INTEGER</code></value>
           <value><code>LITERAL_LIST</code></value>
           <value><code>LITERAL_MAP</code></value>
           <value><code>LITERAL_STRING</code></value>
-          <value><code>LOCAL_VARIABLE</code></value>
+          <value>
+            <code>LOCAL_FUNCTION_DECLARATION</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>LOCAL_FUNCTION_REFERENCE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>LOCAL_VARIABLE</code>
+            <p>Only for version 1 of highlight.</p>
+          </value>
           <value><code>LOCAL_VARIABLE_DECLARATION</code></value>
-          <value><code>METHOD</code></value>
-          <value><code>METHOD_DECLARATION</code></value>
-          <value><code>METHOD_DECLARATION_STATIC</code></value>
-          <value><code>METHOD_STATIC</code></value>
-          <value><code>PARAMETER</code></value>
-          <value><code>SETTER_DECLARATION</code></value>
-          <value><code>TOP_LEVEL_VARIABLE</code></value>
+          <value>
+            <code>LOCAL_VARIABLE_REFERENCE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>METHOD</code>
+            <p>Only for version 1 of highlight.</p>
+          </value>
+          <value>
+            <code>METHOD_DECLARATION</code>
+            <p>Only for version 1 of highlight.</p>
+          </value>
+          <value>
+            <code>METHOD_DECLARATION_STATIC</code>
+            <p>Only for version 1 of highlight.</p>
+          </value>
+          <value>
+            <code>METHOD_STATIC</code>
+            <p>Only for version 1 of highlight.</p>
+          </value>
+          <value>
+            <code>PARAMETER</code>
+            <p>Only for version 1 of highlight.</p>
+          </value>
+          <value>
+            <code>SETTER_DECLARATION</code>
+            <p>Only for version 1 of highlight.</p>
+          </value>
+          <value>
+            <code>TOP_LEVEL_VARIABLE</code>
+            <p>Only for version 1 of highlight.</p>
+          </value>
+          <value>
+            <code>PARAMETER_DECLARATION</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>PARAMETER_REFERENCE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>STATIC_FIELD_DECLARATION</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>STATIC_GETTER_DECLARATION</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>STATIC_GETTER_REFERENCE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>STATIC_METHOD_DECLARATION</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>STATIC_METHOD_REFERENCE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>STATIC_SETTER_DECLARATION</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>STATIC_SETTER_REFERENCE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>TOP_LEVEL_FUNCTION_DECLARATION</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>TOP_LEVEL_FUNCTION_REFERENCE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>TOP_LEVEL_GETTER_DECLARATION</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>TOP_LEVEL_GETTER_REFERENCE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>TOP_LEVEL_SETTER_DECLARATION</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>TOP_LEVEL_SETTER_REFERENCE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>TOP_LEVEL_VARIABLE_DECLARATION</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
           <value><code>TYPE_NAME_DYNAMIC</code></value>
           <value><code>TYPE_PARAMETER</code></value>
+          <value>
+            <code>UNRESOLVED_INSTANCE_MEMBER_REFERENCE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
+          <value>
+            <code>VALID_STRING_ESCAPE</code>
+            <p>Only for version 2 of highlight.</p>
+          </value>
         </enum>
       </type>
       <type name="HoverInformation">
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 6e22891..59a9606 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,3 +1,15 @@
+## 0.25.3-alpha.0
+
+* Add hook for listening to implicitly analyzed files
+* Add a PathFilter and AnalysisOptionsProvider utility classes to aid
+  clients in excluding files from analysis when directed to do so by an
+  options file.
+
+## 0.25.2
+
+* Enable null-aware operators (DEP 9) by default.
+* Generic method support in the element model.
+
 ## 0.25.2-alpha.1
 
 * `dart:sdk` extension `.sdkext` changed to `_sdkext` (to play nicer with pub).
diff --git a/pkg/analyzer/README.md b/pkg/analyzer/README.md
index 9dc9ce6..eb5c89e 100644
--- a/pkg/analyzer/README.md
+++ b/pkg/analyzer/README.md
@@ -7,7 +7,7 @@
 The analysis server is currently shipped as an executable in the SDK and will
 be released as a package in the near future. In the meantime, if you'd like to
 learn more about it, please look at the
-[Analysis Server API Specification](http://htmlpreview.github.io/?https://github.com/dart-lang/bleeding_edge/blob/master/dart/pkg/analysis_server/doc/api.html)
+[Analysis Server API Specification](http://htmlpreview.github.io/?https://github.com/dart-lang/sdk/blob/master/pkg/analysis_server/doc/api.html)
 or contact the mailing list (see below).
 
 The API's in this package are, quite frankly, a mess at the moment. They were
diff --git a/pkg/analyzer/lib/file_system/memory_file_system.dart b/pkg/analyzer/lib/file_system/memory_file_system.dart
index 8ce2472..cfc3aa2 100644
--- a/pkg/analyzer/lib/file_system/memory_file_system.dart
+++ b/pkg/analyzer/lib/file_system/memory_file_system.dart
@@ -108,7 +108,12 @@
 
   File newFile(String path, String content, [int stamp]) {
     path = posix.normalize(path);
-    newFolder(posix.dirname(path));
+    _MemoryResource folder = _pathToResource[posix.dirname(path)];
+    if (folder == null) {
+      newFolder(posix.dirname(path));
+    } else if (folder is! Folder) {
+      throw new ArgumentError('Cannot create file ($path) as child of file');
+    }
     _MemoryFile file = new _MemoryFile(this, path);
     _pathToResource[path] = file;
     _pathToContent[path] = content;
@@ -131,8 +136,10 @@
       _MemoryFolder folder = new _MemoryFolder(this, path);
       _pathToResource[path] = folder;
       _pathToTimestamp[path] = nextStamp++;
+      _notifyWatchers(path, ChangeType.ADD);
       return folder;
     } else if (resource is _MemoryFolder) {
+      _notifyWatchers(path, ChangeType.ADD);
       return resource;
     } else {
       String message =
diff --git a/pkg/analyzer/lib/source/analysis_options_provider.dart b/pkg/analyzer/lib/source/analysis_options_provider.dart
new file mode 100644
index 0000000..a3ac86b
--- /dev/null
+++ b/pkg/analyzer/lib/source/analysis_options_provider.dart
@@ -0,0 +1,65 @@
+// Copyright (c) 2015, 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 source.analysis_options_provider;
+
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:yaml/yaml.dart';
+
+/// Provide the options found in the `.analysis_options` file.
+class AnalysisOptionsProvider {
+  /// The name of the analysis options source file.
+  static const String ANALYSIS_OPTIONS_NAME = '.analysis_options';
+
+  /// Provide the options found in [root]/[ANALYSIS_OPTIONS_NAME].
+  /// Return an empty options map if the file does not exist.
+  Map<String, YamlNode> getOptions(Folder root) {
+    var optionsSource =
+        _readAnalysisOptionsFile(root.getChild(ANALYSIS_OPTIONS_NAME));
+    return getOptionsFromString(optionsSource);
+  }
+
+  /// Provide the options found in [file].
+  /// Return an empty options map if the file does not exist.
+  Map<String, YamlNode> getOptionsFromFile(File file) {
+    var optionsSource = _readAnalysisOptionsFile(file);
+    return getOptionsFromString(optionsSource);
+  }
+
+  /// Provide the options found in [optionsSource].
+  /// Return an empty options map if the source is null.
+  Map<String, YamlNode> getOptionsFromString(String optionsSource) {
+    var options = <String, YamlNode>{};
+    if (optionsSource == null) {
+      return options;
+    }
+    var doc = loadYaml(optionsSource);
+    if (doc is! YamlMap) {
+      throw new Exception(
+          'Bad options file format (expected map, got ${doc.runtimeType})');
+    }
+    if (doc is YamlMap) {
+      doc.forEach((k, v) {
+        if (k is! String) {
+          throw new Exception(
+              'Bad options file format (expected String scope key, '
+              'got ${k.runtimeType})');
+        }
+        options[k] = v;
+      });
+    }
+    return options;
+  }
+
+  /// Read the contents of [file] as a string.
+  /// Returns null if file does not exist.
+  String _readAnalysisOptionsFile(File file) {
+    try {
+      return file.readAsStringSync();
+    } on FileSystemException {
+      // File can't be read.
+      return null;
+    }
+  }
+}
diff --git a/pkg/analyzer/lib/source/path_filter.dart b/pkg/analyzer/lib/source/path_filter.dart
new file mode 100644
index 0000000..9ee0070
--- /dev/null
+++ b/pkg/analyzer/lib/source/path_filter.dart
@@ -0,0 +1,61 @@
+// Copyright (c) 2015, 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 source.path_filter;
+
+import 'package:glob/glob.dart' as glob;
+import 'package:path/path.dart' as pos;
+
+/// Filter paths against a set of [ignorePatterns] relative to a [root]
+/// directory. Paths outside of [root] are also ignored.
+class PathFilter {
+  /// Construct a new path filter rooted at [root] with [ignorePatterns].
+  PathFilter(this.root, List<String> ignorePatterns) {
+    setIgnorePatterns(ignorePatterns);
+  }
+
+  /// Set the ignore patterns.
+  void setIgnorePatterns(List<String> ignorePatterns) {
+    _ignorePatterns.clear();
+    if (ignorePatterns != null) {
+      for (var ignorePattern in ignorePatterns) {
+        _ignorePatterns.add(new glob.Glob(ignorePattern));
+      }
+    }
+  }
+
+  /// Returns true if [path] should be ignored. A path is ignored if it is not
+  /// contained in [root] or matches one of the ignore patterns.
+  /// [path] is absolute or relative to [root].
+  bool ignored(String path) {
+    path = _canonicalize(path);
+    return !_contained(path) || _match(path);
+  }
+
+  /// Returns the absolute path of [path], relative to [root].
+  String _canonicalize(String path) => pos.normalize(pos.join(root, path));
+
+  /// Returns the relative portion of [path] from [root].
+  String _relative(String path) => pos.relative(path, from:root);
+
+  /// Returns true when [path] is contained inside [root].
+  bool _contained(String path) => path.startsWith(root);
+
+  /// Returns true if [path] matches any ignore patterns.
+  bool _match(String path) {
+    path = _relative(path);
+    for (var glob in _ignorePatterns) {
+      if (glob.matches(path)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /// Path that all ignore patterns are relative to.
+  final String root;
+
+  /// List of ignore patterns that paths are tested against.
+  final List<glob.Glob> _ignorePatterns = new List<glob.Glob>();
+}
diff --git a/pkg/analyzer/lib/src/context/cache.dart b/pkg/analyzer/lib/src/context/cache.dart
index 0d67817..c12262d 100644
--- a/pkg/analyzer/lib/src/context/cache.dart
+++ b/pkg/analyzer/lib/src/context/cache.dart
@@ -216,8 +216,10 @@
 
   /**
    * Remove all information related to the given [target] from this cache.
+   * Return the entry associated with the target, or `null` if there was cache
+   * entry for the target.
    */
-  void remove(AnalysisTarget target) {
+  CacheEntry remove(AnalysisTarget target) {
     int count = _partitions.length;
     for (int i = 0; i < count; i++) {
       CachePartition partition = _partitions[i];
@@ -226,10 +228,10 @@
           AnalysisEngine.instance.logger
               .logInformation('Removed the cache entry for $target.');
         }
-        partition.remove(target);
-        return;
+        return partition.remove(target);
       }
     }
+    return null;
   }
 
   /**
@@ -896,9 +898,11 @@
   }
 
   /**
-   * Remove all information related to the given [target] from this cache.
+   * Remove all information related to the given [target] from this partition.
+   * Return the entry associated with the target, or `null` if there was cache
+   * entry for the target.
    */
-  void remove(AnalysisTarget target) {
+  CacheEntry remove(AnalysisTarget target) {
     for (CacheFlushManager flushManager in _flushManagerMap.values) {
       flushManager.targetRemoved(target);
     }
@@ -907,6 +911,7 @@
       entry._invalidateAll();
     }
     _removeIfSource(target);
+    return entry;
   }
 
   /**
@@ -981,19 +986,17 @@
   }
 
   /**
-   * If the given [target] is a [Source], removes it from [_sources].
+   * If the given [target] is a [Source], remove it from the list of [_sources].
    */
   void _removeIfSource(AnalysisTarget target) {
     if (target is Source) {
       _sources.remove(target);
-      {
-        String fullName = target.fullName;
-        List<Source> sources = _pathToSources[fullName];
-        if (sources != null) {
-          sources.remove(target);
-          if (sources.isEmpty) {
-            _pathToSources.remove(fullName);
-          }
+      String fullName = target.fullName;
+      List<Source> sources = _pathToSources[fullName];
+      if (sources != null) {
+        sources.remove(target);
+        if (sources.isEmpty) {
+          _pathToSources.remove(fullName);
         }
       }
     }
diff --git a/pkg/analyzer/lib/src/context/context.dart b/pkg/analyzer/lib/src/context/context.dart
index 095c293..1be6dfb 100644
--- a/pkg/analyzer/lib/src/context/context.dart
+++ b/pkg/analyzer/lib/src/context/context.dart
@@ -167,6 +167,12 @@
   StreamController<SourcesChangedEvent> _onSourcesChangedController;
 
   /**
+   * A subscription for a stream of events indicating when files are (and are
+   * not) being implicitly analyzed.
+   */
+  StreamController<ImplicitAnalysisEvent> _implicitAnalysisEventsController;
+
+  /**
    * The listeners that are to be notified when various analysis results are
    * produced in this context.
    */
@@ -220,6 +226,8 @@
         _taskManager, <WorkManager>[dartWorkManager, htmlWorkManager], this);
     _onSourcesChangedController =
         new StreamController<SourcesChangedEvent>.broadcast();
+    _implicitAnalysisEventsController =
+        new StreamController<ImplicitAnalysisEvent>.broadcast();
   }
 
   @override
@@ -239,8 +247,6 @@
         (this._options.hint && !options.hint) ||
         (this._options.lint && !options.lint) ||
         this._options.preserveComments != options.preserveComments ||
-        this._options.enableNullAwareOperators !=
-            options.enableNullAwareOperators ||
         this._options.enableStrictCallChecks != options.enableStrictCallChecks;
     int cacheSize = options.cacheSize;
     if (this._options.cacheSize != cacheSize) {
@@ -251,7 +257,6 @@
     this._options.generateImplicitErrors = options.generateImplicitErrors;
     this._options.generateSdkErrors = options.generateSdkErrors;
     this._options.dart2jsHint = options.dart2jsHint;
-    this._options.enableNullAwareOperators = options.enableNullAwareOperators;
     this._options.enableStrictCallChecks = options.enableStrictCallChecks;
     this._options.hint = options.hint;
     this._options.incremental = options.incremental;
@@ -307,6 +312,10 @@
   List<Source> get htmlSources => _getSources(SourceKind.HTML);
 
   @override
+  Stream<ImplicitAnalysisEvent> get implicitAnalysisEvents =>
+      _implicitAnalysisEventsController.stream;
+
+  @override
   bool get isDisposed => _disposed;
 
   @override
@@ -731,6 +740,10 @@
         entry.modificationTime = getModificationStamp(target);
       }
       _cache.put(entry);
+      if (target is Source) {
+        _implicitAnalysisEventsController
+            .add(new ImplicitAnalysisEvent(target, true));
+      }
     }
     return entry;
   }
@@ -1222,7 +1235,7 @@
     for (Source source in missingSources) {
       if (getLibrariesContaining(source).isEmpty &&
           getLibrariesDependingOn(source).isEmpty) {
-        _cache.remove(source);
+        _removeFromCache(source);
         removalCount++;
       }
     }
@@ -1430,6 +1443,10 @@
     entry.modificationTime = getModificationStamp(source);
     entry.explicitlyAdded = explicitlyAdded;
     _cache.put(entry);
+    if (!explicitlyAdded) {
+      _implicitAnalysisEventsController
+          .add(new ImplicitAnalysisEvent(source, true));
+    }
     return entry;
   }
 
@@ -1640,6 +1657,14 @@
     }
   }
 
+  void _removeFromCache(Source source) {
+    CacheEntry entry = _cache.remove(source);
+    if (entry != null && !entry.explicitlyAdded) {
+      _implicitAnalysisEventsController
+          .add(new ImplicitAnalysisEvent(source, false));
+    }
+  }
+
   /**
    * Remove the given [source] from the priority order if it is in the list.
    */
@@ -1661,6 +1686,10 @@
    * that referenced the source before it existed.
    */
   void _sourceAvailable(Source source) {
+    // TODO(brianwilkerson) This method needs to check whether the source was
+    // previously being implicitly analyzed. If so, the cache entry needs to be
+    // update to reflect the new status and an event needs to be generated to
+    // inform clients that it is no longer being implicitly analyzed.
     CacheEntry entry = _cache.get(source);
     if (entry == null) {
       _createCacheEntry(source, true);
@@ -1741,7 +1770,7 @@
    * Record that the give [source] has been deleted.
    */
   void _sourceDeleted(Source source) {
-    // TODO(brianwilkerson) Implement this.
+    // TODO(brianwilkerson) Implement or remove this.
 //    SourceEntry sourceEntry = _cache.get(source);
 //    if (sourceEntry is HtmlEntry) {
 //      HtmlEntry htmlEntry = sourceEntry;
@@ -1772,7 +1801,7 @@
    * Record that the given [source] has been removed.
    */
   void _sourceRemoved(Source source) {
-    _cache.remove(source);
+    _removeFromCache(source);
     _removeFromPriorityOrder(source);
   }
 
diff --git a/pkg/analyzer/lib/src/generated/engine.dart b/pkg/analyzer/lib/src/generated/engine.dart
index 5195922..649c2be 100644
--- a/pkg/analyzer/lib/src/generated/engine.dart
+++ b/pkg/analyzer/lib/src/generated/engine.dart
@@ -209,8 +209,10 @@
 
   /**
    * Remove all information related to the given [source] from this cache.
+   * Return the entry associated with the source, or `null` if there was cache
+   * entry for the source.
    */
-  void remove(Source source) {
+  SourceEntry remove(Source source) {
     int count = _partitions.length;
     for (int i = 0; i < count; i++) {
       if (_partitions[i].contains(source)) {
@@ -223,10 +225,10 @@
             JavaSystem.currentTimeMillis();
           }
         }
-        _partitions[i].remove(source);
-        return;
+        return _partitions[i].remove(source);
       }
     }
+    return null;
   }
 
   /**
@@ -353,6 +355,12 @@
   List<Source> get htmlSources;
 
   /**
+   * The stream that is notified when a source either starts or stops being
+   * analyzed implicitly.
+   */
+  Stream<ImplicitAnalysisEvent> get implicitAnalysisEvents;
+
+  /**
    * Returns `true` if this context was disposed using [dispose].
    */
   bool get isDisposed;
@@ -1034,6 +1042,12 @@
   StreamController<SourcesChangedEvent> _onSourcesChangedController;
 
   /**
+   * A subscription for a stream of events indicating when files are (and are
+   * not) being implicitly analyzed.
+   */
+  StreamController<ImplicitAnalysisEvent> _implicitAnalysisEventsController;
+
+  /**
    * The listeners that are to be notified when various analysis results are
    * produced in this context.
    */
@@ -1084,6 +1098,8 @@
     _cache = createCacheFromSourceFactory(null);
     _onSourcesChangedController =
         new StreamController<SourcesChangedEvent>.broadcast();
+    _implicitAnalysisEventsController =
+        new StreamController<ImplicitAnalysisEvent>.broadcast();
   }
 
   @override
@@ -1102,8 +1118,6 @@
         this._options.dart2jsHint != options.dart2jsHint ||
         (this._options.hint && !options.hint) ||
         this._options.preserveComments != options.preserveComments ||
-        this._options.enableNullAwareOperators !=
-            options.enableNullAwareOperators ||
         this._options.enableStrictCallChecks != options.enableStrictCallChecks;
     int cacheSize = options.cacheSize;
     if (this._options.cacheSize != cacheSize) {
@@ -1129,7 +1143,6 @@
     this._options.generateImplicitErrors = options.generateImplicitErrors;
     this._options.generateSdkErrors = options.generateSdkErrors;
     this._options.dart2jsHint = options.dart2jsHint;
-    this._options.enableNullAwareOperators = options.enableNullAwareOperators;
     this._options.enableStrictCallChecks = options.enableStrictCallChecks;
     this._options.hint = options.hint;
     this._options.incremental = options.incremental;
@@ -1201,6 +1214,10 @@
   List<Source> get htmlSources => _getSources(SourceKind.HTML);
 
   @override
+  Stream<ImplicitAnalysisEvent> get implicitAnalysisEvents =>
+      _implicitAnalysisEventsController.stream;
+
+  @override
   bool get isDisposed => _disposed;
 
   @override
@@ -2413,7 +2430,7 @@
         } else {
           unitEntry.recordResolutionError(thrownException);
         }
-        _cache.remove(unitSource);
+        _removeFromCache(unitSource);
         if (thrownException != null) {
           throw new AnalysisException('<rethrow>', thrownException);
         }
@@ -2486,7 +2503,7 @@
         } else {
           unitEntry.recordResolutionError(thrownException);
         }
-        _cache.remove(unitSource);
+        _removeFromCache(unitSource);
         if (thrownException != null) {
           throw new AnalysisException('<rethrow>', thrownException);
         }
@@ -2516,7 +2533,7 @@
           } else {
             dartEntry.recordResolutionErrorInLibrary(
                 librarySource, thrownException);
-            _cache.remove(source);
+            _removeFromCache(source);
           }
           if (source != librarySource) {
             _workManager.add(source, SourcePriority.PRIORITY_PART);
@@ -2618,7 +2635,7 @@
     for (Source source in missingSources) {
       if (getLibrariesContaining(source).isEmpty &&
           getLibrariesDependingOn(source).isEmpty) {
-        _cache.remove(source);
+        _removeFromCache(source);
         removalCount++;
       }
     }
@@ -3388,12 +3405,20 @@
       htmlEntry.modificationTime = getModificationStamp(source);
       htmlEntry.explicitlyAdded = explicitlyAdded;
       _cache.put(source, htmlEntry);
+      if (!explicitlyAdded) {
+        _implicitAnalysisEventsController
+            .add(new ImplicitAnalysisEvent(source, true));
+      }
       return htmlEntry;
     } else {
       DartEntry dartEntry = new DartEntry();
       dartEntry.modificationTime = getModificationStamp(source);
       dartEntry.explicitlyAdded = explicitlyAdded;
       _cache.put(source, dartEntry);
+      if (!explicitlyAdded) {
+        _implicitAnalysisEventsController
+            .add(new ImplicitAnalysisEvent(source, true));
+      }
       return dartEntry;
     }
   }
@@ -4111,6 +4136,16 @@
     AnalysisEngine.instance.logger.logInformation(message);
   }
 
+  /**
+   * Notify all of the analysis listeners that a task is about to be performed.
+   */
+  void _notifyAboutToPerformTask(String taskDescription) {
+    int count = _listeners.length;
+    for (int i = 0; i < count; i++) {
+      _listeners[i].aboutToPerformTask(this, taskDescription);
+    }
+  }
+
 //  /**
 //   * Notify all of the analysis listeners that the given source is no longer included in the set of
 //   * sources that are being analyzed.
@@ -4190,16 +4225,6 @@
 //  }
 
   /**
-   * Notify all of the analysis listeners that a task is about to be performed.
-   */
-  void _notifyAboutToPerformTask(String taskDescription) {
-    int count = _listeners.length;
-    for (int i = 0; i < count; i++) {
-      _listeners[i].aboutToPerformTask(this, taskDescription);
-    }
-  }
-
-  /**
    * Notify all of the analysis listeners that the errors associated with the
    * given [source] has been updated to the given [errors].
    */
@@ -4572,6 +4597,14 @@
     return dartEntry;
   }
 
+  void _removeFromCache(Source source) {
+    SourceEntry entry = _cache.remove(source);
+    if (entry != null && !entry.explicitlyAdded) {
+      _implicitAnalysisEventsController
+          .add(new ImplicitAnalysisEvent(source, false));
+    }
+  }
+
   /**
    * Remove the given [librarySource] from the list of containing libraries for
    * all of the parts referenced by the given [dartEntry].
@@ -4584,7 +4617,7 @@
       if (partEntry != null && !identical(partEntry, dartEntry)) {
         partEntry.removeContainingLibrary(librarySource);
         if (partEntry.containingLibraries.length == 0 && !exists(partSource)) {
-          _cache.remove(partSource);
+          _removeFromCache(partSource);
         }
       }
     }
@@ -4604,7 +4637,7 @@
             partEntry.removeContainingLibrary(librarySource);
             if (partEntry.containingLibraries.length == 0 &&
                 !exists(partSource)) {
-              _cache.remove(partSource);
+              _removeFromCache(partSource);
             }
           }
         }
@@ -4633,6 +4666,10 @@
    * that referenced the source before it existed.
    */
   void _sourceAvailable(Source source) {
+    // TODO(brianwilkerson) This method needs to check whether the source was
+    // previously being implicitly analyzed. If so, the cache entry needs to be
+    // update to reflect the new status and an event needs to be generated to
+    // inform clients that it is no longer being implicitly analyzed.
     SourceEntry sourceEntry = _cache.get(source);
     if (sourceEntry == null) {
       sourceEntry = _createSourceEntry(source, true);
@@ -4721,7 +4758,7 @@
         _invalidateLibraryResolution(librarySource);
       }
     }
-    _cache.remove(source);
+    _removeFromCache(source);
     _workManager.remove(source);
     _removeFromPriorityOrder(source);
   }
@@ -6102,6 +6139,7 @@
   /**
    * Return `true` to enable null-aware operators (DEP 9).
    */
+  @deprecated // Always true
   bool get enableNullAwareOperators;
 
   /**
@@ -6154,6 +6192,11 @@
    * Return `true` if analysis is to parse comments.
    */
   bool get preserveComments;
+
+  /**
+   * Return `true` if strong mode analysis should be used.
+   */
+  bool get strongMode;
 }
 
 /**
@@ -6203,11 +6246,6 @@
   bool enableGenericMethods = false;
 
   /**
-   * A flag indicating whether null-aware operators should be parsed (DEP 9).
-   */
-  bool enableNullAwareOperators = false;
-
-  /**
    * A flag indicating whether analysis is to strictly follow the specification
    * when generating warnings on "call" methods (fixes dartbug.com/21938).
    */
@@ -6259,6 +6297,11 @@
   bool preserveComments = true;
 
   /**
+   * A flag indicating whether strong-mode analysis should be used.
+   */
+  bool strongMode = false;
+
+  /**
    * Initialize a newly created set of analysis options to have their default
    * values.
    */
@@ -6273,7 +6316,6 @@
     analyzeFunctionBodiesPredicate = options.analyzeFunctionBodiesPredicate;
     cacheSize = options.cacheSize;
     dart2jsHint = options.dart2jsHint;
-    enableNullAwareOperators = options.enableNullAwareOperators;
     enableStrictCallChecks = options.enableStrictCallChecks;
     generateImplicitErrors = options.generateImplicitErrors;
     generateSdkErrors = options.generateSdkErrors;
@@ -6283,6 +6325,7 @@
     incrementalValidation = options.incrementalValidation;
     lint = options.lint;
     preserveComments = options.preserveComments;
+    strongMode = options.strongMode;
   }
 
   /**
@@ -6293,7 +6336,6 @@
     analyzeFunctionBodiesPredicate = options.analyzeFunctionBodiesPredicate;
     cacheSize = options.cacheSize;
     dart2jsHint = options.dart2jsHint;
-    enableNullAwareOperators = options.enableNullAwareOperators;
     enableStrictCallChecks = options.enableStrictCallChecks;
     generateImplicitErrors = options.generateImplicitErrors;
     generateSdkErrors = options.generateSdkErrors;
@@ -6303,6 +6345,7 @@
     incrementalValidation = options.incrementalValidation;
     lint = options.lint;
     preserveComments = options.preserveComments;
+    strongMode = options.strongMode;
   }
 
   bool get analyzeFunctionBodies {
@@ -6362,6 +6405,15 @@
     // Enum support cannot be disabled
   }
 
+  @deprecated
+  @override
+  bool get enableNullAwareOperators => true;
+
+  @deprecated
+  void set enableNullAwareOperators(bool enable) {
+    // Null-aware operator support cannot be disabled
+  }
+
   /**
    * Predicate used for [analyzeFunctionBodiesPredicate] when
    * [analyzeFunctionBodies] is set to `true`.
@@ -6752,11 +6804,13 @@
   }
 
   /**
-   * Remove all information related to the given [source] from this cache.
+   * Remove all information related to the given [source] from this partition.
+   * Return the entry associated with the source, or `null` if there was cache
+   * entry for the source.
    */
-  void remove(Source source) {
+  SourceEntry remove(Source source) {
     _recentlyUsed.remove(source);
-    _sourceMap.remove(source);
+    return _sourceMap.remove(source);
   }
 
   /**
@@ -8853,6 +8907,32 @@
 }
 
 /**
+ * An event indicating when a source either starts or stops being implicitly
+ * analyzed.
+ */
+class ImplicitAnalysisEvent {
+  /**
+   * The source whose status has changed.
+   */
+  final Source source;
+
+  /**
+   * A flag indicating whether the source is now being analyzed.
+   */
+  final bool isAnalyzed;
+
+  /**
+   * Initialize a newly created event to indicate that the given [source] has
+   * changed it status to match the [isAnalyzed] flag.
+   */
+  ImplicitAnalysisEvent(this.source, this.isAnalyzed);
+
+  @override
+  String toString() =>
+      '${isAnalyzed ? '' : 'not '}analyzing ${source.fullName}';
+}
+
+/**
  * Instances of the class `IncrementalAnalysisCache` hold information used to perform
  * incremental analysis.
  *
@@ -10996,8 +11076,6 @@
         Scanner scanner = new Scanner(
             source, new CharSequenceReader(_content), errorListener);
         scanner.preserveComments = context.analysisOptions.preserveComments;
-        scanner.enableNullAwareOperators =
-            context.analysisOptions.enableNullAwareOperators;
         _tokenStream = scanner.tokenize();
         _lineInfo = new LineInfo(scanner.lineStarts);
         _errors = errorListener.getErrorsForSource(source);
diff --git a/pkg/analyzer/lib/src/generated/html.dart b/pkg/analyzer/lib/src/generated/html.dart
index 222fdf8..99b0d51 100644
--- a/pkg/analyzer/lib/src/generated/html.dart
+++ b/pkg/analyzer/lib/src/generated/html.dart
@@ -416,7 +416,6 @@
       LineInfo_Location location = _lineInfo.getLocation(contentOffset);
       sc.Scanner scanner = new sc.Scanner(source,
           new sc.SubSequenceReader(contents, contentOffset), _errorListener);
-      scanner.enableNullAwareOperators = _options.enableNullAwareOperators;
       scanner.setSourceStart(location.lineNumber, location.columnNumber);
       sc.Token firstToken = scanner.tokenize();
       Parser parser = new Parser(source, _errorListener);
diff --git a/pkg/analyzer/lib/src/generated/incremental_resolver.dart b/pkg/analyzer/lib/src/generated/incremental_resolver.dart
index c4bc15a..78481ce 100644
--- a/pkg/analyzer/lib/src/generated/incremental_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/incremental_resolver.dart
@@ -1507,7 +1507,6 @@
     RecordingErrorListener errorListener = new RecordingErrorListener();
     CharSequenceReader reader = new CharSequenceReader(code);
     Scanner scanner = new Scanner(_unitSource, reader, errorListener);
-    scanner.enableNullAwareOperators = _options.enableNullAwareOperators;
     Token token = scanner.tokenize();
     _newScanErrors = errorListener.errors;
     return token;
diff --git a/pkg/analyzer/lib/src/generated/incremental_scanner.dart b/pkg/analyzer/lib/src/generated/incremental_scanner.dart
index eed2545..a2e4daf 100644
--- a/pkg/analyzer/lib/src/generated/incremental_scanner.dart
+++ b/pkg/analyzer/lib/src/generated/incremental_scanner.dart
@@ -224,7 +224,6 @@
   Token _scanRange(int start, int end) {
     Scanner scanner = new Scanner(
         source, new CharacterRangeReader(reader, start, end), errorListener);
-    scanner.enableNullAwareOperators = _options.enableNullAwareOperators;
     return scanner.tokenize();
   }
 
diff --git a/pkg/analyzer/lib/src/generated/scanner.dart b/pkg/analyzer/lib/src/generated/scanner.dart
index f79401e..9e028ca 100644
--- a/pkg/analyzer/lib/src/generated/scanner.dart
+++ b/pkg/analyzer/lib/src/generated/scanner.dart
@@ -723,12 +723,6 @@
   bool _hasUnmatchedGroups = false;
 
   /**
-   * A flag indicating whether null-aware operators ('?.', '??', and '??=')
-   * should be tokenized.
-   */
-  bool enableNullAwareOperators = false;
-
-  /**
    * Initialize a newly created scanner to scan characters from the given
    * [source]. The given character [_reader] will be used to read the characters
    * in the source. The given [_errorListener] will be informed of any errors
@@ -1664,11 +1658,11 @@
   int _tokenizeQuestion() {
     // ? ?. ?? ??=
     int next = _reader.advance();
-    if (enableNullAwareOperators && next == 0x2E) {
+    if (next == 0x2E) {
       // '.'
       _appendTokenOfType(TokenType.QUESTION_PERIOD);
       return _reader.advance();
-    } else if (enableNullAwareOperators && next == 0x3F) {
+    } else if (next == 0x3F) {
       // '?'
       next = _reader.advance();
       if (next == 0x3D) {
diff --git a/pkg/analyzer/lib/src/task/dart.dart b/pkg/analyzer/lib/src/task/dart.dart
index ff5b0cb..fa8daec 100644
--- a/pkg/analyzer/lib/src/task/dart.dart
+++ b/pkg/analyzer/lib/src/task/dart.dart
@@ -3115,8 +3115,6 @@
           errorListener);
       scanner.setSourceStart(fragment.line, fragment.column);
       scanner.preserveComments = context.analysisOptions.preserveComments;
-      scanner.enableNullAwareOperators =
-          context.analysisOptions.enableNullAwareOperators;
 
       outputs[TOKEN_STREAM] = scanner.tokenize();
       outputs[LINE_INFO] = new LineInfo(scanner.lineStarts);
@@ -3127,8 +3125,6 @@
       Scanner scanner =
           new Scanner(source, new CharSequenceReader(content), errorListener);
       scanner.preserveComments = context.analysisOptions.preserveComments;
-      scanner.enableNullAwareOperators =
-          context.analysisOptions.enableNullAwareOperators;
 
       outputs[TOKEN_STREAM] = scanner.tokenize();
       outputs[LINE_INFO] = new LineInfo(scanner.lineStarts);
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 99ad62c..32c8bf7 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: analyzer
-version: 0.25.2-alpha.1
+version: 0.25.3-alpha.1
 author: Dart Team <misc@dartlang.org>
 description: Static analyzer for Dart.
 homepage: http://www.dartlang.org
@@ -7,6 +7,7 @@
   sdk: '>=1.12.0-dev.1.0 <2.0.0'
 dependencies:
   args: '>=0.12.1 <0.14.0'
+  glob: ^1.0.3
   html: ^0.12.0
   package_config: ^0.1.1
   path: '>=0.9.0 <2.0.0'
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
index e212444..d941fcf 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
@@ -4757,9 +4757,6 @@
   }
 
   void test_prefix_conditionalPropertyAccess_call() {
-    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
-    options.enableNullAwareOperators = true;
-    resetWithOptions(options);
     addNamedSource('/lib.dart', '''
 library lib;
 g() {}
@@ -4777,9 +4774,6 @@
   }
 
   void test_prefix_conditionalPropertyAccess_call_loadLibrary() {
-    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
-    options.enableNullAwareOperators = true;
-    resetWithOptions(options);
     addNamedSource('/lib.dart', '''
 library lib;
 ''');
@@ -4796,9 +4790,6 @@
   }
 
   void test_prefix_conditionalPropertyAccess_get() {
-    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
-    options.enableNullAwareOperators = true;
-    resetWithOptions(options);
     addNamedSource('/lib.dart', '''
 library lib;
 var x;
@@ -4816,9 +4807,6 @@
   }
 
   void test_prefix_conditionalPropertyAccess_get_loadLibrary() {
-    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
-    options.enableNullAwareOperators = true;
-    resetWithOptions(options);
     addNamedSource('/lib.dart', '''
 library lib;
 ''');
@@ -4835,9 +4823,6 @@
   }
 
   void test_prefix_conditionalPropertyAccess_set() {
-    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
-    options.enableNullAwareOperators = true;
-    resetWithOptions(options);
     addNamedSource('/lib.dart', '''
 library lib;
 var x;
@@ -4855,9 +4840,6 @@
   }
 
   void test_prefix_conditionalPropertyAccess_set_loadLibrary() {
-    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
-    options.enableNullAwareOperators = true;
-    resetWithOptions(options);
     addNamedSource('/lib.dart', '''
 library lib;
 ''');
@@ -4988,9 +4970,6 @@
   }
 
   void test_prefixNotFollowedByDot_conditionalMethodInvocation() {
-    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
-    options.enableNullAwareOperators = true;
-    resetWithOptions(options);
     addNamedSource('/lib.dart', '''
 library lib;
 g() {}
diff --git a/pkg/analyzer/test/generated/engine_test.dart b/pkg/analyzer/test/generated/engine_test.dart
index 8d9365c..af6dac3 100644
--- a/pkg/analyzer/test/generated/engine_test.dart
+++ b/pkg/analyzer/test/generated/engine_test.dart
@@ -1333,6 +1333,21 @@
 //    assertLength(0, statistics.getSources());
   }
 
+  Future test_implicitAnalysisEvents_added() async {
+    AnalyzedSourcesListener listener = new AnalyzedSourcesListener();
+    _context.implicitAnalysisEvents.listen(listener.onData);
+    //
+    // Create a file that references an file that is not explicitly being
+    // analyzed and fully analyze it. Ensure that the listener is told about
+    // the implicitly analyzed file.
+    //
+    Source sourceA = _addSource('/a.dart', "library a; import 'b.dart';");
+    Source sourceB = _createSource('/b.dart', "library b;");
+    _context.computeErrors(sourceA);
+    await pumpEventQueue();
+    listener.expectAnalyzed(sourceB);
+  }
+
   void test_isClientLibrary_dart() {
     _context = AnalysisContextFactory.oldContextWithCore();
     _sourceFactory = _context.sourceFactory;
@@ -2151,6 +2166,12 @@
     _context.applyChanges(changeSet);
   }
 
+  Source _createSource(String fileName, String contents) {
+    Source source = new FileBasedSource(FileUtilities2.createFile(fileName));
+    _context.setContents(source, contents);
+    return source;
+  }
+
   /**
    * Search the given compilation unit for a class with the given name. Return the class with the
    * given name, or `null` if the class cannot be found.
@@ -2241,24 +2262,24 @@
       options.analyzeFunctionBodies = booleanValue;
       options.cacheSize = i;
       options.dart2jsHint = booleanValue;
-      options.enableNullAwareOperators = booleanValue;
       options.enableStrictCallChecks = booleanValue;
       options.generateImplicitErrors = booleanValue;
       options.generateSdkErrors = booleanValue;
       options.hint = booleanValue;
       options.incremental = booleanValue;
       options.preserveComments = booleanValue;
+      options.strongMode = booleanValue;
       AnalysisOptionsImpl copy = new AnalysisOptionsImpl.from(options);
       expect(copy.analyzeFunctionBodies, options.analyzeFunctionBodies);
       expect(copy.cacheSize, options.cacheSize);
       expect(copy.dart2jsHint, options.dart2jsHint);
-      expect(copy.enableNullAwareOperators, options.enableNullAwareOperators);
       expect(copy.enableStrictCallChecks, options.enableStrictCallChecks);
       expect(copy.generateImplicitErrors, options.generateImplicitErrors);
       expect(copy.generateSdkErrors, options.generateSdkErrors);
       expect(copy.hint, options.hint);
       expect(copy.incremental, options.incremental);
       expect(copy.preserveComments, options.preserveComments);
+      expect(copy.strongMode, options.strongMode);
     }
   }
 
@@ -2284,6 +2305,13 @@
     expect(options.dart2jsHint, value);
   }
 
+  void test_strongMode() {
+    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
+    bool value = !options.strongMode;
+    options.strongMode = value;
+    expect(options.strongMode, value);
+  }
+
   void test_generateImplicitErrors() {
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     bool value = !options.generateImplicitErrors;
@@ -2345,6 +2373,48 @@
   }
 }
 
+/**
+ * A listener used to gather the [ImplicitAnalysisEvent]s that are produced
+ * during analysis.
+ */
+class AnalyzedSourcesListener {
+  /**
+   * The events that have been gathered.
+   */
+  List<ImplicitAnalysisEvent> actualEvents = <ImplicitAnalysisEvent>[];
+
+  /**
+   * The sources that are being implicitly analyzed.
+   */
+  List<Source> analyzedSources = <Source>[];
+
+  /**
+   * Assert that the given source is currently being implicitly analyzed.
+   */
+  void expectAnalyzed(Source source) {
+    expect(analyzedSources, contains(source));
+  }
+
+  /**
+   * Assert that the given source is not currently being implicitly analyzed.
+   */
+  void expectNotAnalyzed(Source source) {
+    expect(analyzedSources, isNot(contains(source)));
+  }
+
+  /**
+   * Record that the given event was produced.
+   */
+  void onData(ImplicitAnalysisEvent event) {
+    actualEvents.add(event);
+    if (event.isAnalyzed) {
+      analyzedSources.add(event.source);
+    } else {
+      analyzedSources.remove(event.source);
+    }
+  }
+}
+
 class CompilationUnitMock extends TypedMock implements CompilationUnit {
   noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
@@ -5470,6 +5540,11 @@
     return null;
   }
   @override
+  Stream<ImplicitAnalysisEvent> get implicitAnalysisEvents {
+    fail("Unexpected invocation of analyzedSources");
+    return null;
+  }
+  @override
   bool get isDisposed {
     fail("Unexpected invocation of isDisposed");
     return false;
@@ -5513,6 +5588,7 @@
     fail("Unexpected invocation of getPrioritySources");
     return null;
   }
+
   @override
   List<AnalysisTarget> get priorityTargets {
     fail("Unexpected invocation of visitCacheItems");
@@ -5530,7 +5606,6 @@
     fail("Unexpected invocation of getResolverVisitorFactory");
     return null;
   }
-
   @override
   SourceFactory get sourceFactory {
     fail("Unexpected invocation of getSourceFactory");
@@ -5792,6 +5867,7 @@
     fail("Unexpected invocation of parseHtmlUnit");
     return null;
   }
+
   @override
   AnalysisResult performAnalysisTask() {
     fail("Unexpected invocation of performAnalysisTask");
@@ -5834,11 +5910,11 @@
       int oldLength, int newLength) {
     fail("Unexpected invocation of setChangedContents");
   }
-
   @override
   void setContents(Source source, String contents) {
     fail("Unexpected invocation of setContents");
   }
+
   @override
   bool shouldErrorsBeAnalyzed(Source source, Object entry) {
     fail("Unexpected invocation of shouldErrorsBeAnalyzed");
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 06336a4..c77d424 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -2372,9 +2372,6 @@
   }
 
   void test_invalidAssignment_ifNullAssignment_compatibleType() {
-    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
-    options.enableNullAwareOperators = true;
-    resetWithOptions(options);
     Source source = addSource('''
 void f(int i) {
   num n;
@@ -2387,9 +2384,6 @@
   }
 
   void test_invalidAssignment_ifNullAssignment_sameType() {
-    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
-    options.enableNullAwareOperators = true;
-    resetWithOptions(options);
     Source source = addSource('''
 void f(int i) {
   int j;
@@ -5011,9 +5005,6 @@
   void test_undefinedGetter_typeLiteral_conditionalAccess() {
     // When applied to a type literal, the conditional access operator '?.' can
     // be used to access instance getters of Type.
-    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
-    options.enableNullAwareOperators = true;
-    resetWithOptions(options);
     Source source = addSource('''
 class A {}
 f() => A?.hashCode;
@@ -5101,9 +5092,6 @@
   void test_undefinedMethod_typeLiteral_conditionalAccess() {
     // When applied to a type literal, the conditional access operator '?.' can
     // be used to access instance methods of Type.
-    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
-    options.enableNullAwareOperators = true;
-    resetWithOptions(options);
     Source source = addSource('''
 class A {}
 f() => A?.toString();
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 5816ab8..b85a20e 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -359,7 +359,6 @@
   }
 
   void test_conditionalExpression_precedence_ifNullExpression() {
-    _enableNullAwareOperators = true;
     ConditionalExpression expression = parseExpression('a ?? b ? y : z');
     EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
         BinaryExpression, expression.condition);
@@ -409,21 +408,18 @@
   }
 
   void test_ifNullExpression() {
-    _enableNullAwareOperators = true;
     BinaryExpression expression = parseExpression('x ?? y ?? z');
     EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
         BinaryExpression, expression.leftOperand);
   }
 
   void test_ifNullExpression_precedence_logicalOr_left() {
-    _enableNullAwareOperators = true;
     BinaryExpression expression = parseExpression('x || y ?? z');
     EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
         BinaryExpression, expression.leftOperand);
   }
 
   void test_ifNullExpression_precendce_logicalOr_right() {
-    _enableNullAwareOperators = true;
     BinaryExpression expression = parseExpression('x ?? y || z');
     EngineTestCase.assertInstanceOf((obj) => obj is BinaryExpression,
         BinaryExpression, expression.rightOperand);
@@ -1338,13 +1334,11 @@
   }
 
   void test_invalidOperatorAfterSuper_assignableExpression() {
-    _enableNullAwareOperators = true;
     parse3('parseAssignableExpression', <Object>[false], 'super?.v',
         [ParserErrorCode.INVALID_OPERATOR_FOR_SUPER]);
   }
 
   void test_invalidOperatorAfterSuper_primaryExpression() {
-    _enableNullAwareOperators = true;
     parse4('parsePrimaryExpression', 'super?.v',
         [ParserErrorCode.INVALID_OPERATOR_FOR_SUPER]);
   }
@@ -2586,12 +2580,6 @@
   bool enableGenericMethods = false;
 
   /**
-   * If non-null, this value is used to override the default value of
-   * [Scanner.enableNullAwareOperators] before scanning.
-   */
-  bool _enableNullAwareOperators;
-
-  /**
    * Return a CommentAndMetadata object with the given values that can be used for testing.
    *
    * @param comment the comment to be wrapped in the object
@@ -2634,9 +2622,6 @@
     //
     Scanner scanner =
         new Scanner(null, new CharSequenceReader(source), listener);
-    if (_enableNullAwareOperators != null) {
-      scanner.enableNullAwareOperators = _enableNullAwareOperators;
-    }
     Token tokenStream = scanner.tokenize();
     listener.setLineInfo(new TestSource(), scanner.lineStarts);
     //
@@ -2771,9 +2756,6 @@
     GatheringErrorListener listener = new GatheringErrorListener();
     Scanner scanner =
         new Scanner(null, new CharSequenceReader(source), listener);
-    if (_enableNullAwareOperators != null) {
-      scanner.enableNullAwareOperators = _enableNullAwareOperators;
-    }
     listener.setLineInfo(new TestSource(), scanner.lineStarts);
     Token token = scanner.tokenize();
     Parser parser = createParser(listener);
@@ -5076,7 +5058,6 @@
   }
 
   void test_parseAssignableExpression_expression_question_dot() {
-    _enableNullAwareOperators = true;
     PropertyAccess propertyAccess =
         parse("parseAssignableExpression", <Object>[false], "(x)?.y");
     expect(propertyAccess.target, isNotNull);
@@ -5136,7 +5117,6 @@
   }
 
   void test_parseAssignableExpression_identifier_question_dot() {
-    _enableNullAwareOperators = true;
     PropertyAccess propertyAccess =
         parse("parseAssignableExpression", <Object>[false], "x?.y");
     expect(propertyAccess.target, isNotNull);
@@ -5187,7 +5167,6 @@
   }
 
   void test_parseAssignableSelector_question_dot() {
-    _enableNullAwareOperators = true;
     PropertyAccess selector =
         parse("parseAssignableSelector", <Object>[null, true], "?.x");
     expect(selector.operator.type, TokenType.QUESTION_PERIOD);
@@ -9058,7 +9037,6 @@
   }
 
   void test_parsePostfixExpression_none_methodInvocation_question_dot() {
-    _enableNullAwareOperators = true;
     MethodInvocation expression = parse4('parsePostfixExpression', 'a?.m()');
     expect(expression.target, isNotNull);
     expect(expression.operator.type, TokenType.QUESTION_PERIOD);
@@ -9069,7 +9047,6 @@
 
   void test_parsePostfixExpression_none_methodInvocation_question_dot_typeArguments() {
     enableGenericMethods = true;
-    _enableNullAwareOperators = true;
     MethodInvocation expression = parse4('parsePostfixExpression', 'a?.m<E>()');
     expect(expression.target, isNotNull);
     expect(expression.operator.type, TokenType.QUESTION_PERIOD);
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 1e17493..89242b9 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -399,8 +399,6 @@
         currentOptions.dart2jsHint != options.dart2jsHint ||
         (currentOptions.hint && !options.hint) ||
         currentOptions.preserveComments != options.preserveComments ||
-        currentOptions.enableNullAwareOperators !=
-            options.enableNullAwareOperators ||
         currentOptions.enableStrictCallChecks != options.enableStrictCallChecks;
     if (needsRecompute) {
       fail(
@@ -6414,8 +6412,6 @@
         currentOptions.dart2jsHint != options.dart2jsHint ||
         (currentOptions.hint && !options.hint) ||
         currentOptions.preserveComments != options.preserveComments ||
-        currentOptions.enableNullAwareOperators !=
-            options.enableNullAwareOperators ||
         currentOptions.enableStrictCallChecks != options.enableStrictCallChecks;
     if (needsRecompute) {
       fail(
diff --git a/pkg/analyzer/test/generated/scanner_test.dart b/pkg/analyzer/test/generated/scanner_test.dart
index 24ca20e..c1a6603 100644
--- a/pkg/analyzer/test/generated/scanner_test.dart
+++ b/pkg/analyzer/test/generated/scanner_test.dart
@@ -170,12 +170,6 @@
 
 @reflectiveTest
 class ScannerTest {
-  /**
-   * If non-null, this value is used to override the default value of
-   * [Scanner.enableNullAwareOperators] before scanning.
-   */
-  bool _enableNullAwareOperators;
-
   void fail_incomplete_string_interpolation() {
     // https://code.google.com/p/dart/issues/detail?id=18073
     _assertErrorAndTokens(ScannerErrorCode.UNTERMINATED_STRING_LITERAL, 9,
@@ -727,17 +721,14 @@
   }
 
   void test_question_dot() {
-    _enableNullAwareOperators = true;
     _assertToken(TokenType.QUESTION_PERIOD, "?.");
   }
 
   void test_question_question() {
-    _enableNullAwareOperators = true;
     _assertToken(TokenType.QUESTION_QUESTION, "??");
   }
 
   void test_question_question_eq() {
-    _enableNullAwareOperators = true;
     _assertToken(TokenType.QUESTION_QUESTION_EQ, "??=");
   }
 
@@ -1229,9 +1220,6 @@
   Token _scanWithListener(String source, GatheringErrorListener listener) {
     Scanner scanner =
         new Scanner(null, new CharSequenceReader(source), listener);
-    if (_enableNullAwareOperators != null) {
-      scanner.enableNullAwareOperators = _enableNullAwareOperators;
-    }
     Token result = scanner.tokenize();
     listener.setLineInfo(new TestSource(), scanner.lineStarts);
     return result;
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
index f35d057..a346a87 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
@@ -385,9 +385,6 @@
   }
 
   void test_invalidAssignment_ifNullAssignment() {
-    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
-    options.enableNullAwareOperators = true;
-    resetWithOptions(options);
     Source source = addSource('''
 void f(int i) {
   double d;
@@ -1397,9 +1394,6 @@
   void test_undefinedGetter_static_conditionalAccess() {
     // The conditional access operator '?.' cannot be used to access static
     // fields.
-    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
-    options.enableNullAwareOperators = true;
-    resetWithOptions(options);
     Source source = addSource('''
 class A {
   static var x;
@@ -1571,9 +1565,6 @@
   void test_undefinedMethod_static_conditionalAccess() {
     // The conditional access operator '?.' cannot be used to access static
     // methods.
-    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
-    options.enableNullAwareOperators = true;
-    resetWithOptions(options);
     Source source = addSource('''
 class A {
   static void m() {}
@@ -1663,9 +1654,6 @@
   void test_undefinedSetter_static_conditionalAccess() {
     // The conditional access operator '?.' cannot be used to access static
     // fields.
-    AnalysisOptionsImpl options = new AnalysisOptionsImpl();
-    options.enableNullAwareOperators = true;
-    resetWithOptions(options);
     Source source = addSource('''
 class A {
   static var x;
diff --git a/pkg/analyzer/test/source/analysis_options_provider_test.dart b/pkg/analyzer/test/source/analysis_options_provider_test.dart
new file mode 100644
index 0000000..9033c8c
--- /dev/null
+++ b/pkg/analyzer/test/source/analysis_options_provider_test.dart
@@ -0,0 +1,64 @@
+// Copyright (c) 2015, 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 test.source.analysis_options_provider;
+
+import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/source/analysis_options_provider.dart';
+import 'package:unittest/unittest.dart';
+import 'package:yaml/yaml.dart';
+
+main() {
+  groupSep = ' | ';
+  group('AnalysisOptionsProvider', () {
+    setUp(() {
+      buildResourceProvider();
+    });
+    tearDown(() {
+      clearResourceProvider();
+    });
+    test('test_simple', () {
+      var optionsProvider = new AnalysisOptionsProvider();
+      Map<String, YamlNode> options =
+          optionsProvider.getOptions(resourceProvider.getFolder('/'));
+      expect(options.length, equals(1));
+      expect(options['analyzer'], isNotNull);
+      YamlMap analyzer = options['analyzer'];
+      expect(analyzer.length, equals(1));
+      expect(analyzer['ignore'], isNotNull);
+      YamlList ignore = analyzer['ignore'];
+      expect(ignore.length, equals(2));
+      expect(ignore[0], equals('ignoreme.dart'));
+      expect(ignore[1], equals('sdk_ext/**'));
+    });
+    test('test_doesnotexist', () {
+      var optionsProvider = new AnalysisOptionsProvider();
+      Map<String, YamlNode> options =
+          optionsProvider.getOptions(resourceProvider.getFolder('/empty'));
+      expect(options.length, equals(0));
+    });
+  });
+}
+
+MemoryResourceProvider resourceProvider;
+
+buildResourceProvider() {
+  resourceProvider = new MemoryResourceProvider();
+  resourceProvider.newFolder('/empty');
+  resourceProvider.newFolder('/tmp');
+  resourceProvider.newFile('/.analysis_options', r'''
+analyzer:
+  ignore:
+    - ignoreme.dart
+    - 'sdk_ext/**'
+''');
+}
+
+clearResourceProvider() {
+  resourceProvider = null;
+}
+
+emptyResourceProvider() {
+  resourceProvider = new MemoryResourceProvider();
+}
diff --git a/pkg/analyzer/test/source/path_filter_test.dart b/pkg/analyzer/test/source/path_filter_test.dart
new file mode 100644
index 0000000..6b0131a
--- /dev/null
+++ b/pkg/analyzer/test/source/path_filter_test.dart
@@ -0,0 +1,60 @@
+// Copyright (c) 2015, 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 test.source.path_filter;
+
+import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/source/path_filter.dart';
+import 'package:unittest/unittest.dart';
+
+main() {
+  groupSep = ' | ';
+  group('PathFilterTest', () {
+    setUp(() { });
+    tearDown(() { });
+    test('test_ignoreEverything', () {
+      var filter = new PathFilter('/', ['*']);
+      expect(filter.ignored('a'), isTrue);
+    });
+    test('test_ignoreFile', () {
+      var filter = new PathFilter('/', ['apple']);
+      expect(filter.ignored('apple'), isTrue);
+      expect(filter.ignored('banana'), isFalse);
+    });
+    test('test_ignoreMultipleFiles', () {
+      var filter = new PathFilter('/', ['apple', 'banana']);
+      expect(filter.ignored('apple'), isTrue);
+      expect(filter.ignored('banana'), isTrue);
+    });
+    test('test_ignoreSubDir', () {
+      var filter = new PathFilter('/', ['apple/*']);
+      expect(filter.ignored('apple/banana'), isTrue);
+      expect(filter.ignored('apple/banana/cantaloupe'), isFalse);
+    });
+    test('test_ignoreTree', () {
+      var filter = new PathFilter('/', ['apple/**']);
+      expect(filter.ignored('apple/banana'), isTrue);
+      expect(filter.ignored('apple/banana/cantaloupe'), isTrue);
+    });
+    test('test_ignoreSdkExt', () {
+      var filter = new PathFilter('/', ['sdk_ext/**']);
+      expect(filter.ignored('sdk_ext/entry.dart'), isTrue);
+      expect(filter.ignored('sdk_ext/lib/src/part.dart'), isTrue);
+    });
+    test('test_outsideRoot', () {
+      var filter = new PathFilter('/workspace/dart/sdk', ['sdk_ext/**']);
+      expect(filter.ignored('/'), isTrue);
+      expect(filter.ignored('/workspace'), isTrue);
+      expect(filter.ignored('/workspace/dart'), isTrue);
+      expect(filter.ignored('/workspace/dart/sdk'), isFalse);
+      expect(filter.ignored('/workspace/dart/../dart/sdk'), isFalse);
+    });
+    test('test_relativePaths', () {
+      var filter = new PathFilter('/workspace/dart/sdk', ['sdk_ext/**']);
+      expect(filter.ignored('../apple'), isTrue);
+      expect(filter.ignored('../sdk/main.dart'), isFalse);
+      expect(filter.ignored('../sdk/sdk_ext/entry.dart'), isTrue);
+    });
+  });
+}
diff --git a/pkg/analyzer/test/source/test_all.dart b/pkg/analyzer/test/source/test_all.dart
index b8c09bf..8530b7b4 100644
--- a/pkg/analyzer/test/source/test_all.dart
+++ b/pkg/analyzer/test/source/test_all.dart
@@ -6,16 +6,21 @@
 
 import 'package:unittest/unittest.dart';
 
+import 'analysis_options_provider_test.dart' as analysis_options_provider_test;
 import 'package_map_provider_test.dart' as package_map_provider_test;
 import 'package_map_resolver_test.dart' as package_map_resolver_test;
+import 'path_filter_test.dart' as path_filter_test;
 import 'sdk_ext_test.dart' as sdk_ext_test;
 
+
 /// Utility for manually running all tests.
 main() {
   groupSep = ' | ';
   group('source', () {
+    analysis_options_provider_test.main();
     package_map_provider_test.main();
     package_map_resolver_test.main();
     sdk_ext_test.main();
+    path_filter_test.main();
   });
 }
diff --git a/pkg/analyzer/test/src/context/cache_test.dart b/pkg/analyzer/test/src/context/cache_test.dart
index c6d9254..d5a31c4 100644
--- a/pkg/analyzer/test/src/context/cache_test.dart
+++ b/pkg/analyzer/test/src/context/cache_test.dart
@@ -176,7 +176,7 @@
     expect(entry2.getValue(result2), 222);
     expect(entry3.getValue(result3), 333);
     // remove entry1, invalidate result2 and remove empty entry2
-    cache.remove(target1);
+    expect(cache.remove(target1), entry1);
     expect(cache.get(target1), isNull);
     expect(cache.get(target2), isNull);
     expect(cache.get(target3), entry3);
@@ -197,7 +197,7 @@
     expect(entry.getValue(result1), 111);
     expect(entry.getValue(result2), 222);
     // remove target, invalidate result2
-    cache.remove(target);
+    expect(cache.remove(target), entry);
     expect(cache.get(target), isNull);
     expect(entry.getState(result2), CacheState.INVALID);
   }
@@ -945,13 +945,21 @@
     expect(partition.get(target), entry);
   }
 
-  void test_remove() {
+  void test_remove_absent() {
+    CachePartition partition = createPartition();
+    AnalysisTarget target = new TestSource();
+    expect(partition.get(target), isNull);
+    expect(partition.remove(target), isNull);
+    expect(partition.get(target), isNull);
+  }
+
+  void test_remove_present() {
     CachePartition partition = createPartition();
     AnalysisTarget target = new TestSource();
     CacheEntry entry = new CacheEntry(target);
     partition.put(entry);
     expect(partition.get(target), entry);
-    partition.remove(target);
+    expect(partition.remove(target), entry);
     expect(partition.get(target), isNull);
   }
 }
@@ -1004,6 +1012,12 @@
     return new UniversalCachePartition(null);
   }
 
+  void test_contains() {
+    UniversalCachePartition partition = new UniversalCachePartition(null);
+    TestSource source = new TestSource();
+    expect(partition.isResponsibleFor(source), isTrue);
+  }
+
   test_dispose() {
     InternalAnalysisContext context = new _InternalAnalysisContextMock();
     CachePartition partition1 = new UniversalCachePartition(context);
@@ -1034,12 +1048,6 @@
     // result2 is removed from result1
     expect(entry1.getResultData(descriptor1).dependentResults, isEmpty);
   }
-
-  void test_contains() {
-    UniversalCachePartition partition = new UniversalCachePartition(null);
-    TestSource source = new TestSource();
-    expect(partition.isResponsibleFor(source), isTrue);
-  }
 }
 
 class _InternalAnalysisContextMock extends TypedMock
diff --git a/pkg/analyzer/test/src/context/context_test.dart b/pkg/analyzer/test/src/context/context_test.dart
index 7bc47ba..908f08e 100644
--- a/pkg/analyzer/test/src/context/context_test.dart
+++ b/pkg/analyzer/test/src/context/context_test.dart
@@ -55,6 +55,32 @@
 
 @reflectiveTest
 class AnalysisContextImplTest extends AbstractContextTest {
+  Future fail_implicitAnalysisEvents_removed() async {
+    AnalyzedSourcesListener listener = new AnalyzedSourcesListener();
+    context.implicitAnalysisEvents.listen(listener.onData);
+    //
+    // Create a file that references an file that is not explicitly being
+    // analyzed and fully analyze it. Ensure that the listener is told about
+    // the implicitly analyzed file.
+    //
+    Source sourceA = newSource('/a.dart', "library a; import 'b.dart';");
+    Source sourceB = newSource('/b.dart', "library b;");
+    ChangeSet changeSet = new ChangeSet();
+    changeSet.addedSource(sourceA);
+    context.applyChanges(changeSet);
+    context.computeErrors(sourceA);
+    await pumpEventQueue();
+    listener.expectAnalyzed(sourceB);
+    //
+    // Remove the reference and ensure that the listener is told that we're no
+    // longer implicitly analyzing the file.
+    //
+    context.setContents(sourceA, "library a;");
+    context.computeErrors(sourceA);
+    await pumpEventQueue();
+    listener.expectNotAnalyzed(sourceB);
+  }
+
   void fail_performAnalysisTask_importedLibraryDelete_html() {
     // NOTE: This was failing before converting to the new task model.
     Source htmlSource = addSource("/page.html", r'''
@@ -1206,6 +1232,24 @@
     expect(analysisResult.changeNotices, isNotNull);
   }
 
+  Future test_implicitAnalysisEvents_added() async {
+    AnalyzedSourcesListener listener = new AnalyzedSourcesListener();
+    context.implicitAnalysisEvents.listen(listener.onData);
+    //
+    // Create a file that references an file that is not explicitly being
+    // analyzed and fully analyze it. Ensure that the listener is told about
+    // the implicitly analyzed file.
+    //
+    Source sourceA = newSource('/a.dart', "library a; import 'b.dart';");
+    Source sourceB = newSource('/b.dart', "library b;");
+    ChangeSet changeSet = new ChangeSet();
+    changeSet.addedSource(sourceA);
+    context.applyChanges(changeSet);
+    context.computeErrors(sourceA);
+    await pumpEventQueue();
+    listener.expectAnalyzed(sourceB);
+  }
+
   void test_isClientLibrary_dart() {
     Source source = addSource("/test.dart", r'''
 import 'dart:html';
diff --git a/pkg/compiler/lib/compiler.dart b/pkg/compiler/lib/compiler.dart
index 710ad44..763dc4a 100644
--- a/pkg/compiler/lib/compiler.dart
+++ b/pkg/compiler/lib/compiler.dart
@@ -6,7 +6,8 @@
 
 import 'dart:async';
 import 'package:package_config/packages.dart';
-import 'src/apiimpl.dart';
+import 'compiler_new.dart' as new_api;
+import 'src/old_to_new_api.dart';
 
 // Unless explicitly allowed, passing [:null:] for any argument to the
 // methods of library will result in an Error being thrown.
@@ -113,25 +114,26 @@
      Map<String, dynamic> environment = const {},
      Uri packageConfig,
      PackagesDiscoveryProvider packagesDiscoveryProvider]) {
-  if (!libraryRoot.path.endsWith("/")) {
-    throw new ArgumentError("libraryRoot must end with a /");
-  }
-  if (packageRoot != null && !packageRoot.path.endsWith("/")) {
-    throw new ArgumentError("packageRoot must end with a /");
-  }
-  // TODO(ahe): Consider completing the future with an exception if
-  // code is null.
-  Compiler compiler = new Compiler(inputProvider,
-                                   outputProvider,
-                                   handler,
-                                   libraryRoot,
-                                   packageRoot,
-                                   options,
-                                   environment,
-                                   packageConfig,
-                                   packagesDiscoveryProvider);
-  return compiler.run(script).then((bool success) {
-    return new CompilationResult(compiler, isSuccess: success);
+
+  new_api.CompilerOptions compilerOptions = new new_api.CompilerOptions(
+      entryPoint: script,
+      libraryRoot: libraryRoot,
+      packageRoot: packageRoot,
+      packageConfig: packageConfig,
+      packagesDiscoveryProvider: packagesDiscoveryProvider,
+      options: options,
+      environment: environment);
+
+  new_api.CompilerInput compilerInput = new LegacyCompilerInput(inputProvider);
+  new_api.CompilerDiagnostics compilerDiagnostics =
+      new LegacyCompilerDiagnostics(handler);
+  new_api.CompilerOutput compilerOutput =
+      new LegacyCompilerOutput(outputProvider);
+
+  return new_api.compile(compilerOptions, compilerInput,
+                         compilerDiagnostics, compilerOutput)
+      .then((new_api.CompilationResult result) {
+    return new CompilationResult(result.compiler, isSuccess: result.isSuccess);
   });
 }
 
diff --git a/pkg/compiler/lib/compiler_new.dart b/pkg/compiler/lib/compiler_new.dart
new file mode 100644
index 0000000..3ec05ec
--- /dev/null
+++ b/pkg/compiler/lib/compiler_new.dart
@@ -0,0 +1,179 @@
+// Copyright (c) 2015, 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.
+
+/// New Compiler API. This API is under construction, use only internally or
+/// in unittests.
+
+library compiler_new;
+
+import 'dart:async';
+import 'src/apiimpl.dart';
+import 'compiler.dart' show Diagnostic, PackagesDiscoveryProvider;
+export 'compiler.dart' show Diagnostic, PackagesDiscoveryProvider;
+
+// Unless explicitly allowed, passing `null` for any argument to the
+// methods of library will result in an Error being thrown.
+
+/// Interface for providing the compiler with input. That is, Dart source files,
+/// package config files, etc.
+abstract class CompilerInput {
+  /// Returns a future that completes to the source corresponding to [uri].
+  /// If an exception occurs, the future completes with this exception.
+  ///
+  /// The source can be represented either as a [:List<int>:] of UTF-8 bytes or
+  /// as a [String].
+  ///
+  /// The following text is non-normative:
+  ///
+  /// It is recommended to return a UTF-8 encoded list of bytes because the
+  /// scanner is more efficient in this case. In either case, the data structure
+  /// is expected to hold a zero element at the last position. If this is not
+  /// the case, the entire data structure is copied before scanning.
+  Future/*<String | List<int>>*/ readFromUri(Uri uri);
+}
+
+/// Interface for producing output from the compiler. That is, JavaScript target
+/// files, source map files, dump info files, etc.
+abstract class CompilerOutput {
+  /// Returns an [EventSink] that will serve as compiler output for the given
+  ///  component.
+  ///
+  ///  Components are identified by [name] and [extension]. By convention,
+  /// the empty string [:"":] will represent the main script
+  /// (corresponding to the script parameter of [compile]) even if the
+  /// main script is a library. For libraries that are compiled
+  /// separately, the library name is used.
+  ///
+  /// At least the following extensions can be expected:
+  ///
+  /// * "js" for JavaScript output.
+  /// * "js.map" for source maps.
+  /// * "dart" for Dart output.
+  /// * "dart.map" for source maps.
+  ///
+  /// As more features are added to the compiler, new names and
+  /// extensions may be introduced.
+  EventSink<String> createEventSink(String name, String extension);
+}
+
+/// Interface for receiving diagnostic message from the compiler. That is,
+/// errors, warnings, hints, etc.
+abstract class CompilerDiagnostics {
+  /// Invoked by the compiler to report diagnostics. If [uri] is `null`, so are
+  /// [begin] and [end]. No other arguments may be `null`. If [uri] is not
+  /// `null`, neither are [begin] and [end]. [uri] indicates the compilation
+  /// unit from where the diagnostic originates. [begin] and [end] are
+  /// zero-based character offsets from the beginning of the compilation unit.
+  /// [message] is the diagnostic message, and [kind] indicates indicates what
+  /// kind of diagnostic it is.
+  void report(Uri uri, int begin, int end, String message, Diagnostic kind);
+}
+
+/// Information resulting from the compilation.
+class CompilationResult {
+  /// `true` if the compilation succeeded, that is, compilation didn't fail due
+  /// to compile-time errors and/or internal errors.
+  final bool isSuccess;
+
+  /// The compiler object used for the compilation.
+  ///
+  /// Note: The type of [compiler] is implementation dependent and may vary.
+  /// Use only for debugging and testing.
+  final compiler;
+
+  CompilationResult(this.compiler, {this.isSuccess: true});
+}
+
+/// Object for passing options to the compiler.
+class CompilerOptions {
+  final Uri entryPoint;
+  final Uri libraryRoot;
+  final Uri packageRoot;
+  final Uri packageConfig;
+  final PackagesDiscoveryProvider packagesDiscoveryProvider;
+  final List<String> options;
+  final Map<String, dynamic> environment;
+
+  /// Creates an option object for the compiler.
+  // TODO(johnniwinther): Expand comment when [options] are explicit as named
+  // arguments.
+  factory CompilerOptions(
+      {Uri entryPoint,
+       Uri libraryRoot,
+       Uri packageRoot,
+       Uri packageConfig,
+       PackagesDiscoveryProvider packagesDiscoveryProvider,
+       List<String> options: const <String>[],
+       Map<String, dynamic> environment: const <String, dynamic>{}}) {
+    if (entryPoint == null) {
+      throw new ArgumentError("entryPoint must be non-null");
+    }
+    if (!libraryRoot.path.endsWith("/")) {
+      throw new ArgumentError("libraryRoot must end with a /");
+    }
+    if (packageRoot != null && !packageRoot.path.endsWith("/")) {
+      throw new ArgumentError("packageRoot must end with a /");
+    }
+    return new CompilerOptions._(
+        entryPoint,
+        libraryRoot,
+        packageRoot,
+        packageConfig,
+        packagesDiscoveryProvider,
+        options,
+        environment);
+  }
+
+  CompilerOptions._(
+      this.entryPoint,
+      this.libraryRoot,
+      this.packageRoot,
+      this.packageConfig,
+      this.packagesDiscoveryProvider,
+      this.options,
+      this.environment);
+}
+
+/// Returns a future that completes to a [CompilationResult] when the Dart
+/// sources in [options] have been compiled.
+///
+/// The generated compiler output is obtained by providing a [compilerOutput].
+///
+/// If the compilation fails, the future's `CompilationResult.isSuccess` is
+/// `false` and [CompilerDiagnostics.report] on [compilerDiagnostics]
+/// is invoked at least once with `kind == Diagnostic.ERROR` or
+/// `kind == Diagnostic.CRASH`.
+Future<CompilationResult> compile(
+    CompilerOptions compilerOptions,
+    CompilerInput compilerInput,
+    CompilerDiagnostics compilerDiagnostics,
+    CompilerOutput compilerOutput) {
+
+  if (compilerOptions == null) {
+    throw new ArgumentError("compilerOptions must be non-null");
+  }
+  if (compilerInput == null) {
+    throw new ArgumentError("compilerInput must be non-null");
+  }
+  if (compilerDiagnostics == null) {
+    throw new ArgumentError("compilerDiagnostics must be non-null");
+  }
+  if (compilerOutput == null) {
+    throw new ArgumentError("compilerOutput must be non-null");
+  }
+
+  Compiler compiler = new Compiler(
+      compilerInput,
+      compilerOutput,
+      compilerDiagnostics,
+      compilerOptions.libraryRoot,
+      compilerOptions.packageRoot,
+      compilerOptions.options,
+      compilerOptions.environment,
+      compilerOptions.packageConfig,
+      compilerOptions.packagesDiscoveryProvider);
+  return compiler.run(compilerOptions.entryPoint).then((bool success) {
+    return new CompilationResult(compiler, isSuccess: success);
+  });
+}
diff --git a/pkg/compiler/lib/src/apiimpl.dart b/pkg/compiler/lib/src/apiimpl.dart
index c65cbc5..cac25b1 100644
--- a/pkg/compiler/lib/src/apiimpl.dart
+++ b/pkg/compiler/lib/src/apiimpl.dart
@@ -7,7 +7,7 @@
 import 'dart:async';
 import 'dart:convert';
 
-import '../compiler.dart' as api;
+import '../compiler_new.dart' as api;
 import 'dart2jslib.dart' as leg;
 import 'tree/tree.dart' as tree;
 import 'elements/elements.dart' as elements;
@@ -24,8 +24,8 @@
     const bool.fromEnvironment('DART2JS_EXPERIMENTAL_INCREMENTAL_SUPPORT');
 
 class Compiler extends leg.Compiler {
-  api.CompilerInputProvider provider;
-  api.DiagnosticHandler handler;
+  api.CompilerInput provider;
+  api.CompilerDiagnostics handler;
   final Uri libraryRoot;
   final Uri packageConfig;
   final Uri packageRoot;
@@ -41,7 +41,7 @@
   leg.GenericTask userPackagesDiscoveryTask;
 
   Compiler(this.provider,
-           api.CompilerOutputProvider outputProvider,
+           api.CompilerOutput outputProvider,
            this.handler,
            this.libraryRoot,
            this.packageRoot,
@@ -196,7 +196,7 @@
   }
 
   void log(message) {
-    handler(null, null, null, message, api.Diagnostic.VERBOSE_INFO);
+    callUserHandler(null, null, null, message, api.Diagnostic.VERBOSE_INFO);
   }
 
   /// See [leg.Compiler.translateResolvedUri].
@@ -373,7 +373,7 @@
       // and we can't depend on 'dart:io' classes.
       packages = new NonFilePackagesDirectoryPackages(packageRoot);
     } else if (packageConfig != null) {
-      return provider(packageConfig).then((packageConfigContents) {
+      return callUserProvider(packageConfig).then((packageConfigContents) {
         if (packageConfigContents is String) {
           packageConfigContents = UTF8.encode(packageConfigContents);
         }
@@ -442,7 +442,7 @@
                        String message, api.Diagnostic kind) {
     try {
       userHandlerTask.measure(() {
-        handler(uri, begin, end, message, kind);
+        handler.report(uri, begin, end, message, kind);
       });
     } catch (ex, s) {
       diagnoseCrashInUserCode(
@@ -453,7 +453,7 @@
 
   Future callUserProvider(Uri uri) {
     try {
-      return userProviderTask.measure(() => provider(uri));
+      return userProviderTask.measure(() => provider.readFromUri(uri));
     } catch (ex, s) {
       diagnoseCrashInUserCode('Uncaught exception in input provider', ex, s);
       rethrow;
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index 0cc5a67..d35e501 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -255,6 +255,9 @@
 
   Backend(this.compiler);
 
+  /// Returns true if the backend supports reflection.
+  bool get supportsReflection;
+
   /// The [ConstantSystem] used to interpret compile-time constants for this
   /// backend.
   ConstantSystem get constantSystem;
@@ -792,7 +795,7 @@
   final bool allowNativeExtensions;
 
   /// Output provider from user of Compiler API.
-  api.CompilerOutputProvider userOutputProvider;
+  api.CompilerOutput userOutputProvider;
 
   /// Generate output even when there are compile-time errors.
   final bool generateCodeWithCompileTimeErrors;
@@ -1061,7 +1064,7 @@
             this.allowNativeExtensions: false,
             this.generateCodeWithCompileTimeErrors: false,
             this.testMode: false,
-            api.CompilerOutputProvider outputProvider,
+            api.CompilerOutput outputProvider,
             List<String> strips: const []})
       : this.disableTypeInferenceFlag =
           disableTypeInferenceFlag || !emitJavaScript,
@@ -1071,9 +1074,8 @@
         this.analyzeAllFlag = analyzeAllFlag,
         this.hasIncrementalSupport = hasIncrementalSupport,
         cacheStrategy = new CacheStrategy(hasIncrementalSupport),
-        this.userOutputProvider = (outputProvider == null)
-            ? NullSink.outputProvider
-            : outputProvider {
+        this.userOutputProvider = outputProvider == null
+            ? const NullCompilerOutput() : outputProvider {
     if (hasIncrementalSupport) {
       // TODO(ahe): This is too much. Any method from platform and package
       // libraries can be inlined.
@@ -1370,9 +1372,9 @@
           return true;
         });
 
-        if (const bool.fromEnvironment("dart2js.use.new.emitter")) {
+        if (!backend.supportsReflection) {
           reportError(NO_LOCATION_SPANNABLE,
-                      MessageKind.MIRRORS_LIBRARY_NEW_EMITTER);
+                      MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND);
         } else {
           reportWarning(NO_LOCATION_SPANNABLE,
              MessageKind.IMPORT_EXPERIMENTAL_MIRRORS,
@@ -2170,7 +2172,7 @@
         return new NullSink('$name.$extension');
       }
     }
-    return userOutputProvider(name, extension);
+    return userOutputProvider.createEventSink(name, extension);
   }
 }
 
@@ -2304,26 +2306,6 @@
 /// Returns `true` when [s] is public if used as an identifier.
 bool isPublicName(String s) => !isPrivateName(s);
 
-/// A sink that drains into /dev/null.
-class NullSink implements EventSink<String> {
-  final String name;
-
-  NullSink(this.name);
-
-  add(String value) {}
-
-  void addError(Object error, [StackTrace stackTrace]) {}
-
-  void close() {}
-
-  toString() => name;
-
-  /// Convenience method for getting an [api.CompilerOutputProvider].
-  static NullSink outputProvider(String name, String extension) {
-    return new NullSink('$name.$extension');
-  }
-}
-
 /// Information about suppressed warnings and hints for a given library.
 class SuppressionInfo {
   int warnings = 0;
diff --git a/pkg/compiler/lib/src/cps_ir/cps_fragment.dart b/pkg/compiler/lib/src/cps_ir/cps_fragment.dart
index 6eda707..db1ea0b 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_fragment.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_fragment.dart
@@ -273,14 +273,12 @@
 
   /// Reads the value of the given mutable variable.
   Primitive getMutable(MutableVariable variable) {
-    return letPrim(new GetMutableVariable(variable));
+    return letPrim(new GetMutable(variable));
   }
 
   /// Sets the value of the given mutable variable.
   void setMutable(MutableVariable variable, Primitive value) {
-    SetMutableVariable setter = new SetMutableVariable(variable, value);
-    put(setter);
-    context = setter;
+    letPrim(new SetMutable(variable, value));
   }
 
   /// Declare a new mutable variable.
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
index cca5f7b..7117c80 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
@@ -193,7 +193,7 @@
   }
 
   /// True if a jump inserted now will escape from a try block.
-  /// 
+  ///
   /// Concretely, this is true when [enterTry] has been called without
   /// its corresponding [leaveTry] call.
   bool get isEscapingTry => _boxedTryVariables.isNotEmpty;
@@ -546,7 +546,8 @@
 
   /// Creates a [ir.MutableVariable] for the given local.
   void makeMutableVariable(Local local) {
-    mutableVariables[local] = new ir.MutableVariable(local);
+    mutableVariables[local] =
+        new ir.MutableVariable(local);
   }
 
   /// Remove an [ir.MutableVariable] for a local.
@@ -1013,7 +1014,7 @@
   ir.Primitive buildStaticFieldSet(FieldElement field,
                                    ir.Primitive value,
                                    [SourceInformation sourceInformation]) {
-    add(new ir.SetStatic(field, value, sourceInformation));
+    addPrimitive(new ir.SetStatic(field, value, sourceInformation));
     return value;
   }
 
@@ -2290,9 +2291,10 @@
     state.functionParameters.add(parameter);
     ClosureLocation location = state.boxedVariables[parameterElement];
     if (location != null) {
-      add(new ir.SetField(environment.lookup(location.box),
-                          location.field,
-                          parameter));
+      addPrimitive(new ir.SetField(
+          environment.lookup(location.box),
+          location.field,
+          parameter));
     } else {
       environment.extend(parameterElement, parameter);
     }
@@ -2314,12 +2316,14 @@
     }
     ClosureLocation location = state.boxedVariables[variableElement];
     if (location != null) {
-      add(new ir.SetField(environment.lookup(location.box),
-                          location.field,
-                          initialValue));
+      addPrimitive(new ir.SetField(
+          environment.lookup(location.box),
+          location.field,
+          initialValue));
     } else if (isInMutableVariable(variableElement)) {
-      add(new ir.LetMutable(getMutableVariable(variableElement),
-                            initialValue));
+      add(new ir.LetMutable(
+          getMutableVariable(variableElement),
+          initialValue));
     } else {
       initialValue.useElementAsHint(variableElement);
       environment.extend(variableElement, initialValue);
@@ -2360,7 +2364,7 @@
       result.useElementAsHint(local);
       return addPrimitive(result);
     } else if (isInMutableVariable(local)) {
-      return addPrimitive(new ir.GetMutableVariable(getMutableVariable(local)));
+      return addPrimitive(new ir.GetMutable(getMutableVariable(local)));
     } else {
       return environment.lookup(local);
     }
@@ -2372,11 +2376,13 @@
     assert(isOpen);
     ClosureLocation location = state.boxedVariables[local];
     if (location != null) {
-      add(new ir.SetField(environment.lookup(location.box),
-                          location.field,
-                          value));
+      addPrimitive(new ir.SetField(
+          environment.lookup(location.box),
+          location.field,
+          value));
     } else if (isInMutableVariable(local)) {
-      add(new ir.SetMutableVariable(getMutableVariable(local), value));
+      addPrimitive(new ir.SetMutable(
+          getMutableVariable(local), value));
     } else {
       value.useElementAsHint(local);
       environment.update(local, value);
@@ -2420,7 +2426,7 @@
     for (VariableElement loopVar in scope.boxedLoopVariables) {
       ClosureLocation location = scope.capturedVariables[loopVar];
       ir.Primitive value = addPrimitive(new ir.GetField(box, location.field));
-      add(new ir.SetField(newBox, location.field, value));
+      addPrimitive(new ir.SetField(newBox, location.field, value));
     }
     environment.update(scope.box, newBox);
   }
@@ -2439,10 +2445,10 @@
     return addPrimitive(new ir.GetField(receiver, target));
   }
 
-  void buildFieldSet(ir.Primitive receiver, 
-                     FieldElement target, 
+  void buildFieldSet(ir.Primitive receiver,
+                     FieldElement target,
                      ir.Primitive value) {
-    add(new ir.SetField(receiver, target, value));
+    addPrimitive(new ir.SetField(receiver, target, value));
   }
 
   ir.Primitive buildSuperFieldGet(FieldElement target) {
@@ -2450,7 +2456,7 @@
   }
 
   ir.Primitive buildSuperFieldSet(FieldElement target, ir.Primitive value) {
-    add(new ir.SetField(buildThis(), target, value));
+    addPrimitive(new ir.SetField(buildThis(), target, value));
     return value;
   }
 
@@ -2581,21 +2587,19 @@
                                 NativeBehavior behavior,
                                 {Element dependency}) {
     types.TypeMask type = program.getTypeMaskForForeign(behavior);
-    if (codeTemplate.isExpression) {
-      return _continueWithExpression((k) => new ir.ForeignCode(
+    ir.Primitive result = _continueWithExpression((k) => new ir.ForeignCode(
         codeTemplate,
         type,
         arguments,
         behavior,
-        continuation: k,
+        k,
         dependency: dependency));
-    } else {
-      assert(isOpen);
-      add(new ir.ForeignCode(codeTemplate, type, arguments, behavior,
-          dependency: dependency));
+    if (!codeTemplate.isExpression) {
+      // Close the term if this is a "throw" expression.
+      add(new ir.Unreachable());
       _current = null;
-      return null;
     }
+    return result;
   }
 
   /// Creates a type test or type cast of [value] against [type].
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
index 2c4fa8e..2ce1b01 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
@@ -612,6 +612,11 @@
     }
   }
 
+  @override
+  void previsitDeferredAccess(ast.Send node, PrefixElement prefix, _) {
+    giveup(node, 'deferred access is not implemented');
+  }
+
   ir.Primitive visitNamedArgument(ast.NamedArgument node) {
     assert(irBuilder.isOpen);
     return visit(node.expression);
@@ -3207,7 +3212,7 @@
         }
         return irBuilder.buildForeignCode(
             js.js.expressionTemplateYielding(
-                        backend.emitter.staticFunctionAccess(function)),
+                backend.emitter.staticFunctionAccess(closure)),
             <ir.Primitive>[],
             NativeBehavior.PURE,
             dependency: closure);
@@ -3309,6 +3314,16 @@
             const <ir.Primitive>[],
             NativeBehavior.PURE);
 
+      case 'JS_SET_STATIC_STATE':
+        validateArgumentCount(exactly: 1);
+
+        ir.Primitive value = visit(argumentNodes.single);
+        String isolateName = backend.namer.staticStateHolder;
+        return irBuilder.buildForeignCode(
+            js.js.parseForeignJS("$isolateName = #"),
+            <ir.Primitive>[value],
+            NativeBehavior.PURE);
+
       case 'JS_CALL_IN_ISOLATE':
         validateArgumentCount(exactly: 2);
 
@@ -3384,18 +3399,6 @@
     node.body = replacementFor(node.body);
   }
 
-  processSetMutableVariable(ir.SetMutableVariable node) {
-    node.body = replacementFor(node.body);
-  }
-
-  processSetField(ir.SetField node) {
-    node.body = replacementFor(node.body);
-  }
-
-  processSetStatic(ir.SetStatic node) {
-    node.body = replacementFor(node.body);
-  }
-
   processContinuation(ir.Continuation node) {
     node.body = replacementFor(node.body);
   }
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
index 8c5bf34..98d9a35 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
@@ -36,10 +36,55 @@
 /// invoke a [Continuation] with the result as argument. Alternatively, values
 /// that can be obtained without side-effects, divergence, or throwing
 /// exceptions can be built using a [LetPrim].
+///
+/// All subclasses implement exactly one of [CallExpression],
+/// [InteriorExpression], or [TailExpression].
 abstract class Expression extends Node {
   InteriorNode get parent; // Only InteriorNodes may contain expressions.
 
   Expression plug(Expression expr) => throw 'impossible';
+
+  /// The next expression in the basic block.
+  /// 
+  /// For [InteriorExpression]s this is the body, for [CallExpressions] it is
+  /// the body of the continuation, and for [TailExpressions] it is `null`.
+  Expression get next;
+}
+
+/// Represents a node with a child node, which can be accessed through the
+/// `body` member. A typical usage is when removing a node from the CPS graph:
+///
+///     Node child          = node.body;
+///     InteriorNode parent = node.parent;
+///
+///     child.parent = parent;
+///     parent.body  = child;
+abstract class InteriorNode extends Node {
+  Expression get body;
+  void set body(Expression body);
+}
+
+/// An expression that creates new bindings and continues evaluation in
+/// a subexpression.
+/// 
+/// The interior expressions are [LetPrim], [LetCont], [LetHandler], and
+/// [LetMutable].
+abstract class InteriorExpression extends Expression implements InteriorNode {
+  Expression get next => body;
+}
+
+/// An expression that passes a continuation to a call.
+abstract class CallExpression extends Expression {
+  Reference<Continuation> get continuation;
+  Expression get next => continuation.definition.body;
+}
+
+/// An expression without a continuation or a subexpression body.
+///
+/// These break straight-line control flow and can be throught of as ending a
+/// basic block.
+abstract class TailExpression extends Expression {
+  Expression get next => null;
 }
 
 /// The base class of things that variables can refer to: primitives,
@@ -147,7 +192,7 @@
 ///
 /// During one-pass construction a LetPrim with an empty body is used to
 /// represent the one-hole context `let val x = V in []`.
-class LetPrim extends Expression implements InteriorNode {
+class LetPrim extends InteriorExpression {
   Primitive primitive;
   Expression body;
 
@@ -175,7 +220,7 @@
 /// During one-pass construction a LetCont whose first continuation has an empty
 /// body is used to represent the one-hole context
 /// `let cont ... k(v) = [] ... in E`.
-class LetCont extends Expression implements InteriorNode {
+class LetCont extends InteriorExpression {
   List<Continuation> continuations;
   Expression body;
 
@@ -206,7 +251,7 @@
 // [LetHandler] differs from a [LetCont] binding in that it (1) has the
 // runtime semantics of pushing/popping a handler from the dynamic exception
 // handler stack and (2) it does not have any explicit invocations.
-class LetHandler extends Expression implements InteriorNode {
+class LetHandler extends InteriorExpression {
   Continuation handler;
   Expression body;
 
@@ -224,7 +269,7 @@
 /// to prevent unrestricted use of references to them.  During one-pass
 /// construction, a [LetMutable] with an empty body is use to represent the
 /// one-hole context 'let mutable v = P in []'.
-class LetMutable extends Expression implements InteriorNode {
+class LetMutable extends InteriorExpression {
   final MutableVariable variable;
   final Reference<Primitive> value;
   Expression body;
@@ -239,25 +284,6 @@
   accept(Visitor visitor) => visitor.visitLetMutable(this);
 }
 
-abstract class Invoke implements Expression {
-  Selector get selector;
-  List<Reference<Primitive>> get arguments;
-  Reference<Continuation> get continuation;
-}
-
-/// Represents a node with a child node, which can be accessed through the
-/// `body` member. A typical usage is when removing a node from the CPS graph:
-///
-///     Node child          = node.body;
-///     InteriorNode parent = node.parent;
-///
-///     child.parent = parent;
-///     parent.body  = child;
-abstract class InteriorNode extends Node {
-  Expression get body;
-  void set body(Expression body);
-}
-
 /// Invoke a static function.
 ///
 /// All optional arguments declared by [target] are passed in explicitly, and
@@ -266,7 +292,7 @@
 /// Discussion:
 /// All information in the [selector] is technically redundant; it will likely
 /// be removed.
-class InvokeStatic extends Expression implements Invoke {
+class InvokeStatic extends CallExpression {
   final FunctionElement target;
   final Selector selector;
   final List<Reference<Primitive>> arguments;
@@ -299,7 +325,7 @@
 ///
 /// The [selector] records the names of named arguments. The value of named
 /// arguments occur at the end of the [arguments] list, in normalized order.
-class InvokeMethod extends Expression implements Invoke {
+class InvokeMethod extends CallExpression {
   Reference<Primitive> receiver;
   Selector selector;
   TypeMask mask;
@@ -349,7 +375,7 @@
 ///
 /// All optional arguments declared by [target] are passed in explicitly, and
 /// occur at the end of [arguments] list, in normalized order.
-class InvokeMethodDirectly extends Expression implements Invoke {
+class InvokeMethodDirectly extends CallExpression {
   Reference<Primitive> receiver;
   final FunctionElement target;
   final Selector selector;
@@ -385,7 +411,7 @@
 ///
 /// Note that [InvokeConstructor] does it itself allocate an object.
 /// The invoked constructor will do that using [CreateInstance].
-class InvokeConstructor extends Expression implements Invoke {
+class InvokeConstructor extends CallExpression {
   final DartType type;
   final ConstructorElement target;
   final List<Reference<Primitive>> arguments;
@@ -451,7 +477,7 @@
 /// [value], which is typically in scope in the continuation. However, it might
 /// simplify type propagation, since a better type can be computed for the
 /// continuation parameter without needing flow-sensitive analysis.
-class TypeCast extends Expression {
+class TypeCast extends CallExpression {
   Reference<Primitive> value;
   final DartType type;
 
@@ -490,7 +516,7 @@
 ///
 /// Throw is an expression, i.e., it always occurs in tail position with
 /// respect to a body or expression.
-class Throw extends Expression {
+class Throw extends TailExpression {
   Reference<Primitive> value;
 
   Throw(Primitive value) : value = new Reference<Primitive>(value);
@@ -503,7 +529,7 @@
 /// Rethrow can only occur inside a continuation bound by [LetHandler].  It
 /// implicitly throws the exception parameter of the enclosing handler with
 /// the same stack trace as the enclosing handler.
-class Rethrow extends Expression {
+class Rethrow extends TailExpression {
   accept(Visitor visitor) => visitor.visitRethrow(this);
 }
 
@@ -528,24 +554,24 @@
 ///
 /// This can be placed as the body of a call continuation, when the caller is
 /// known never to invoke it, e.g. because the calling expression always throws.
-class Unreachable extends Expression {
+class Unreachable extends TailExpression {
   accept(Visitor visitor) => visitor.visitUnreachable(this);
 }
 
 /// Gets the value from a [MutableVariable].
 ///
 /// [MutableVariable]s can be seen as ref cells that are not first-class
-/// values.  A [LetPrim] with a [GetMutableVariable] can then be seen as:
+/// values.  A [LetPrim] with a [GetMutable] can then be seen as:
 ///
 ///   let prim p = ![variable] in [body]
 ///
-class GetMutableVariable extends Primitive {
+class GetMutable extends Primitive {
   final Reference<MutableVariable> variable;
 
-  GetMutableVariable(MutableVariable variable)
+  GetMutable(MutableVariable variable)
       : this.variable = new Reference<MutableVariable>(variable);
 
-  accept(Visitor visitor) => visitor.visitGetMutableVariable(this);
+  accept(Visitor visitor) => visitor.visitGetMutable(this);
 
   bool get isSafeForElimination => true;
   bool get isSafeForReordering => false;
@@ -557,25 +583,22 @@
 /// values.  This can be seen as a dereferencing assignment:
 ///
 ///   { [variable] := [value]; [body] }
-class SetMutableVariable extends Expression implements InteriorNode {
+class SetMutable extends Primitive {
   final Reference<MutableVariable> variable;
   final Reference<Primitive> value;
-  Expression body;
 
-  SetMutableVariable(MutableVariable variable, Primitive value)
+  SetMutable(MutableVariable variable, Primitive value)
       : this.variable = new Reference<MutableVariable>(variable),
         this.value = new Reference<Primitive>(value);
 
-  accept(Visitor visitor) => visitor.visitSetMutableVariable(this);
+  accept(Visitor visitor) => visitor.visitSetMutable(this);
 
-  Expression plug(Expression expr) {
-    assert(body == null);
-    return body = expr;
-  }
+  bool get isSafeForElimination => false;
+  bool get isSafeForReordering => false;
 }
 
 /// Invoke a continuation in tail position.
-class InvokeContinuation extends Expression {
+class InvokeContinuation extends TailExpression {
   Reference<Continuation> continuation;
   List<Reference<Primitive>> arguments;
   SourceInformation sourceInformation;
@@ -627,7 +650,7 @@
 /// Choose between a pair of continuations based on a condition value.
 ///
 /// The two continuations must not declare any parameters.
-class Branch extends Expression {
+class Branch extends TailExpression {
   final Condition condition;
   final Reference<Continuation> trueContinuation;
   final Reference<Continuation> falseContinuation;
@@ -640,22 +663,19 @@
 }
 
 /// Directly assigns to a field on a given object.
-class SetField extends Expression implements InteriorNode {
+class SetField extends Primitive {
   final Reference<Primitive> object;
   FieldElement field;
   final Reference<Primitive> value;
-  Expression body;
 
   SetField(Primitive object, this.field, Primitive value)
       : this.object = new Reference<Primitive>(object),
         this.value = new Reference<Primitive>(value);
 
-  Expression plug(Expression expr) {
-    assert(body == null);
-    return body = expr;
-  }
-
   accept(Visitor visitor) => visitor.visitSetField(this);
+  
+  bool get isSafeForElimination => false;
+  bool get isSafeForReordering => false;
 }
 
 /// Directly reads from a field on a given object.
@@ -756,21 +776,18 @@
 }
 
 /// Sets the value of a static field.
-class SetStatic extends Expression implements InteriorNode {
+class SetStatic extends Primitive {
   final FieldElement element;
   final Reference<Primitive> value;
-  Expression body;
   final SourceInformation sourceInformation;
 
   SetStatic(this.element, Primitive value, [this.sourceInformation])
       : this.value = new Reference<Primitive>(value);
 
-  Expression plug(Expression expr) {
-    assert(body == null);
-    return body = expr;
-  }
-
   accept(Visitor visitor) => visitor.visitSetStatic(this);
+
+  bool get isSafeForElimination => false;
+  bool get isSafeForReordering => false;
 }
 
 /// Reads the value of a lazily initialized static field.
@@ -779,7 +796,7 @@
 /// and assigned to the field.
 ///
 /// [continuation] is then invoked with the value of the field as argument.
-class GetLazyStatic extends Expression {
+class GetLazyStatic extends CallExpression {
   final FieldElement element;
   final Reference<Continuation> continuation;
   final SourceInformation sourceInformation;
@@ -832,9 +849,11 @@
 
 class Interceptor extends Primitive {
   final Reference<Primitive> input;
-  final Set<ClassElement> interceptedClasses;
-  Interceptor(Primitive input, this.interceptedClasses)
+  final Set<ClassElement> interceptedClasses = new Set<ClassElement>();
+
+  Interceptor(Primitive input)
       : this.input = new Reference<Primitive>(input);
+  
   accept(Visitor visitor) => visitor.visitInterceptor(this);
 
   bool get isSafeForElimination => true;
@@ -855,22 +874,18 @@
   bool get isSafeForReordering => true;
 }
 
-class ForeignCode extends Expression {
+class ForeignCode extends CallExpression {
   final js.Template codeTemplate;
   final TypeMask type;
   final List<Reference<Primitive>> arguments;
   final native.NativeBehavior nativeBehavior;
   final FunctionElement dependency;
-
-  /// The continuation, if the foreign code is not a JavaScript 'throw',
-  /// otherwise null.
   final Reference<Continuation> continuation;
 
   ForeignCode(this.codeTemplate, this.type, List<Primitive> arguments,
-      this.nativeBehavior, {Continuation continuation, this.dependency})
-      : arguments = _referenceList(arguments),
-        continuation = continuation == null ? null
-            : new Reference<Continuation>(continuation);
+      this.nativeBehavior, Continuation continuation, {this.dependency})
+      : this.arguments = _referenceList(arguments),
+        this.continuation = new Reference<Continuation>(continuation);
 
   accept(Visitor visitor) => visitor.visitForeignCode(this);
 }
@@ -1107,7 +1122,7 @@
   T visitRethrow(Rethrow node);
   T visitBranch(Branch node);
   T visitTypeCast(TypeCast node);
-  T visitSetMutableVariable(SetMutableVariable node);
+  T visitSetMutable(SetMutable node);
   T visitSetStatic(SetStatic node);
   T visitGetLazyStatic(GetLazyStatic node);
   T visitSetField(SetField node);
@@ -1118,7 +1133,7 @@
   T visitLiteralMap(LiteralMap node);
   T visitConstant(Constant node);
   T visitCreateFunction(CreateFunction node);
-  T visitGetMutableVariable(GetMutableVariable node);
+  T visitGetMutable(GetMutable node);
   T visitParameter(Parameter node);
   T visitContinuation(Continuation node);
   T visitMutableVariable(MutableVariable node);
@@ -1265,12 +1280,11 @@
     node.typeArguments.forEach(processReference);
   }
 
-  processSetMutableVariable(SetMutableVariable node) {}
-  visitSetMutableVariable(SetMutableVariable node) {
-    processSetMutableVariable(node);
+  processSetMutable(SetMutable node) {}
+  visitSetMutable(SetMutable node) {
+    processSetMutable(node);
     processReference(node.variable);
     processReference(node.value);
-    visit(node.body);
   }
 
   processGetLazyStatic(GetLazyStatic node) {}
@@ -1310,9 +1324,9 @@
     processMutableVariable(node);
   }
 
-  processGetMutableVariable(GetMutableVariable node) {}
-  visitGetMutableVariable(GetMutableVariable node) {
-    processGetMutableVariable(node);
+  processGetMutable(GetMutable node) {}
+  visitGetMutable(GetMutable node) {
+    processGetMutable(node);
     processReference(node.variable);
   }
 
@@ -1352,7 +1366,6 @@
     processSetField(node);
     processReference(node.object);
     processReference(node.value);
-    visit(node.body);
   }
 
   processGetField(GetField node) {}
@@ -1370,7 +1383,6 @@
   visitSetStatic(SetStatic node) {
     processSetStatic(node);
     processReference(node.value);
-    visit(node.body);
   }
 
   processCreateBox(CreateBox node) {}
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart
index e200071..c6cdfc5 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart
@@ -7,6 +7,7 @@
 import '../constants/values.dart';
 import '../util/util.dart';
 import 'cps_ir_nodes.dart';
+import '../universe/universe.dart' show Selector, CallStructure;
 
 /// A [Decorator] is a function used by [SExpressionStringifier] to augment the
 /// output produced for a node or reference.  It can be provided to the
@@ -115,14 +116,15 @@
     return '$indentation(LetMutable ($name $value)\n$body)';
   }
 
-  String formatArguments(Invoke node) {
-    int positionalArgumentCount = node.selector.positionalArgumentCount;
+  String formatArguments(CallStructure call,
+                         List<Reference<Primitive>> arguments) {
+    int positionalArgumentCount = call.positionalArgumentCount;
     List<String> args = new List<String>();
-    args.addAll(
-        node.arguments.getRange(0, positionalArgumentCount).map(access));
-    for (int i = 0; i < node.selector.namedArgumentCount; ++i) {
-      String name = node.selector.namedArguments[i];
-      String arg = access(node.arguments[positionalArgumentCount + i]);
+    args.addAll(arguments.getRange(0, positionalArgumentCount).map(access));
+    List<String> argumentNames = call.getOrderedNamedArguments();
+    for (int i = 0; i < argumentNames.length; ++i) {
+      String name = argumentNames[i];
+      String arg = access(arguments[positionalArgumentCount + i]);
       args.add("($name: $arg)");
     }
     return '(${args.join(' ')})';
@@ -131,7 +133,7 @@
   String visitInvokeStatic(InvokeStatic node) {
     String name = node.target.name;
     String cont = access(node.continuation);
-    String args = formatArguments(node);
+    String args = formatArguments(node.selector.callStructure, node.arguments);
     return '$indentation(InvokeStatic $name $args $cont)';
   }
 
@@ -139,7 +141,7 @@
     String name = node.selector.name;
     String rcv = access(node.receiver);
     String cont = access(node.continuation);
-    String args = formatArguments(node);
+    String args = formatArguments(node.selector.callStructure, node.arguments);
     return '$indentation(InvokeMethod $rcv $name $args $cont)';
   }
 
@@ -147,7 +149,7 @@
     String receiver = access(node.receiver);
     String name = node.selector.name;
     String cont = access(node.continuation);
-    String args = formatArguments(node);
+    String args = formatArguments(node.selector.callStructure, node.arguments);
     return '$indentation(InvokeMethodDirectly $receiver $name $args $cont)';
   }
 
@@ -169,7 +171,7 @@
       callName = '${className}.${node.target.name}';
     }
     String cont = access(node.continuation);
-    String args = formatArguments(node);
+    String args = formatArguments(node.selector.callStructure, node.arguments);
     return '$indentation(InvokeConstructor $callName $args $cont)';
   }
 
@@ -216,15 +218,13 @@
     return '(Unexpected Continuation)';
   }
 
-  String visitGetMutableVariable(GetMutableVariable node) {
-    return '(GetMutableVariable ${access(node.variable)})';
+  String visitGetMutable(GetMutable node) {
+    return '(GetMutable ${access(node.variable)})';
   }
 
-  String visitSetMutableVariable(SetMutableVariable node) {
+  String visitSetMutable(SetMutable node) {
     String value = access(node.value);
-    String body = indentBlock(() => visit(node.body));
-    return '$indentation(SetMutableVariable ${access(node.variable)} '
-           '$value\n$body)';
+    return '(SetMutable ${access(node.variable)} $value)';
   }
 
   String visitTypeCast(TypeCast node) {
@@ -260,8 +260,7 @@
     String object = access(node.object);
     String field = node.field.name;
     String value = access(node.value);
-    String body = indentBlock(() => visit(node.body));
-    return '$indentation(SetField $object $field $value)\n$body';
+    return '(SetField $object $field $value)';
   }
 
   String visitGetField(GetField node) {
@@ -278,8 +277,7 @@
   String visitSetStatic(SetStatic node) {
     String element = node.element.name;
     String value = access(node.value);
-    String body = indentBlock(() => visit(node.body));
-    return '$indentation(SetStatic $element $value\n$body)';
+    return '(SetStatic $element $value)';
   }
 
   String visitGetLazyStatic(GetLazyStatic node) {
@@ -333,7 +331,6 @@
     return '(ApplyBuiltinOperator $operator ($args))';
   }
 
-  @override
   String visitForeignCode(ForeignCode node) {
     String arguments = node.arguments.map(access).join(' ');
     String continuation = node.continuation == null ? ''
@@ -341,20 +338,17 @@
     return '(JS ${node.type} ${node.codeTemplate} ($arguments)$continuation)';
   }
 
-  @override
   String visitGetLength(GetLength node) {
     String object = access(node.object);
     return '(GetLength $object)';
   }
 
-  @override
   String visitGetIndex(GetIndex node) {
     String object = access(node.object);
     String index = access(node.index);
     return '(GetIndex $object $index)';
   }
 
-  @override
   String visitSetIndex(SetIndex node) {
     String object = access(node.object);
     String index = access(node.index);
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart
index 0064b6b..a299237 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart
@@ -110,7 +110,13 @@
   visitLetCont(cps_ir.LetCont node) {
     if (IR_TRACE_LET_CONT) {
       String dummy = names.name(node);
-      String ids = node.continuations.map(names.name).join(', ');
+
+      String nameContinuation(cps_ir.Continuation cont) {
+        String name = names.name(cont);
+        return cont.isRecursive ? '$name*' : name;
+      }
+      
+      String ids = node.continuations.map(nameContinuation).join(', ');
       printStmt(dummy, "LetCont $ids");
     }
     visit(node.body);
@@ -227,12 +233,10 @@
     printStmt(dummy, "Branch $condition ($trueCont, $falseCont)");
   }
 
-  visitSetMutableVariable(cps_ir.SetMutableVariable node) {
-    String dummy = names.name(node);
+  visitSetMutable(cps_ir.SetMutable node) {
     String variable = names.name(node.variable.definition);
     String value = formatReference(node.value);
-    printStmt(dummy, 'SetMutableVariable $variable := $value');
-    visit(node.body);
+    return 'SetMutable $variable := $value';
   }
 
   String formatReference(cps_ir.Reference ref) {
@@ -267,12 +271,10 @@
   }
 
   visitSetField(cps_ir.SetField node) {
-    String dummy = names.name(node);
     String object = formatReference(node.object);
     String field = node.field.name;
     String value = formatReference(node.value);
-    printStmt(dummy, 'SetField $object.$field = $value');
-    visit(node.body);
+    return 'SetField $object.$field = $value';
   }
 
   visitGetField(cps_ir.GetField node) {
@@ -287,11 +289,9 @@
   }
 
   visitSetStatic(cps_ir.SetStatic node) {
-    String dummy = names.name(node);
     String element = node.element.name;
     String value = formatReference(node.value);
-    printStmt(dummy, 'SetStatic $element = $value');
-    visit(node.body);
+    return 'SetStatic $element = $value';
   }
 
   visitGetLazyStatic(cps_ir.GetLazyStatic node) {
@@ -320,9 +320,9 @@
     return "CreateFunction ${node.definition.element.name}";
   }
 
-  visitGetMutableVariable(cps_ir.GetMutableVariable node) {
+  visitGetMutable(cps_ir.GetMutable node) {
     String variable = names.name(node.variable.definition);
-    return 'GetMutableVariable $variable';
+    return 'GetMutable $variable';
   }
 
   visitReadTypeVariable(cps_ir.ReadTypeVariable node) {
@@ -523,18 +523,6 @@
   visitUnreachable(cps_ir.Unreachable node) {
   }
 
-  visitSetMutableVariable(cps_ir.SetMutableVariable exp) {
-    visit(exp.body);
-  }
-
-  visitSetField(cps_ir.SetField exp) {
-    visit(exp.body);
-  }
-
-  visitSetStatic(cps_ir.SetStatic exp) {
-    visit(exp.body);
-  }
-
   visitGetLazyStatic(cps_ir.GetLazyStatic exp) {
     addEdgeToContinuation(exp.continuation);
   }
@@ -583,7 +571,7 @@
     unexpectedNode(node);
   }
 
-  visitGetMutableVariable(cps_ir.GetMutableVariable node) {
+  visitGetMutable(cps_ir.GetMutable node) {
     unexpectedNode(node);
   }
 
@@ -659,6 +647,18 @@
     unexpectedNode(node);
   }
 
+  visitSetMutable(cps_ir.SetMutable node) {
+    unexpectedNode(node);
+  }
+
+  visitSetField(cps_ir.SetField node) {
+    unexpectedNode(node);
+  }
+
+  visitSetStatic(cps_ir.SetStatic node) {
+    unexpectedNode(node);
+  }
+
   @override
   visitForeignCode(cps_ir.ForeignCode node) {
     if (node.continuation != null) {
diff --git a/pkg/compiler/lib/src/cps_ir/let_sinking.dart b/pkg/compiler/lib/src/cps_ir/let_sinking.dart
new file mode 100644
index 0000000..c7f2c21
--- /dev/null
+++ b/pkg/compiler/lib/src/cps_ir/let_sinking.dart
@@ -0,0 +1,243 @@
+// Copyright (c) 2015, 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 dart2js.cps_ir.let_sinking;
+
+import 'cps_ir_nodes.dart';
+import 'optimizers.dart';
+
+/// Sinks single-use primitives to the use when this is safe and profitable.
+/// 
+/// To avoid sinking non-constant primitives into loops, this pass performs a
+/// control-flow analysis to determine the effective nesting of loops.
+/// 
+/// In the example below, the value 'p' can be sunk to its use site in the 
+/// 'else' branch because that branch is not effectively part of a loop,
+/// despite being lexically nested in a recursive continuation.
+/// 
+///   let prim p = getInterceptor(<something>)
+///   let rec kont x = 
+///     if (<loop condition>) 
+///       <loop body>
+///       InvokeContinuation kont x'
+///     else 
+///       <after loop>
+///       return p.foo()
+/// 
+class LetSinker extends RecursiveVisitor implements Pass {
+  String get passName => 'Let sinking';
+
+  LoopHierarchy loopHierarchy;
+  List<Continuation> stack = <Continuation>[];
+  Set<LetPrim> sunkNodes = new Set<LetPrim>();
+
+  void rewrite(FunctionDefinition node) {
+    new ParentVisitor().visit(node);
+    loopHierarchy = new LoopHierarchy(node);
+    visit(node.body);
+  }
+
+  void visitLetPrim(LetPrim node) {
+    // Visit the body, wherein this primitive may be sunk to its use site.
+    visit(node.body);
+
+    if (node.primitive != null) {
+      // The primitive could not be sunk. Sink dependencies to this location.
+      visit(node.primitive);
+    } else {
+      // The primitive was sunk. Destroy the old LetPrim.
+      InteriorNode parent = node.parent;
+      parent.body = node.body;
+      node.body.parent = parent;
+    }
+  }
+
+  void processReference(Reference ref) {
+    Definition definition = ref.definition;
+    if (definition is Primitive && 
+        definition is! Parameter &&
+        definition.hasExactlyOneUse &&
+        definition.isSafeForReordering) {
+      // Check if use is in the same loop.
+      LetPrim binding = definition.parent;
+      Continuation bindingLoop = loopHierarchy.getLoopHeader(binding);
+      Expression use = getEnclosingExpression(ref.parent);
+      Continuation useLoop = loopHierarchy.getLoopHeader(use);
+      if (bindingLoop == useLoop || definition is Constant) {
+        // Sink the definition.
+
+        binding.primitive = null;  // Mark old binding for deletion.
+        LetPrim newBinding = new LetPrim(definition);
+        definition.parent = newBinding;
+        InteriorNode useParent = use.parent;
+        useParent.body = newBinding;
+        newBinding.body = use;
+        use.parent = newBinding;
+        newBinding.parent = useParent;
+
+        // Now that the final binding location has been found, sink the
+        // dependencies of the definition down here as well.
+        visit(definition); 
+      }
+    }
+  }
+
+  Expression getEnclosingExpression(Node node) {
+    while (node is! Expression) {
+      node = node.parent;
+    }
+    return node;
+  }
+}
+
+/// Determines the effective nesting of loops.
+/// 
+/// The effective nesting of loops is different from the lexical nesting, since
+/// recursive continuations can generally contain all the code following 
+/// after the loop in addition to the looping code itself.
+/// 
+/// For example, the 'else' branch below is not effectively part of the loop:
+/// 
+///   let rec kont x = 
+///     if (<loop condition>) 
+///       <loop body>
+///       InvokeContinuation kont x'
+///     else 
+///       <after loop>
+///       return p.foo()
+/// 
+/// We use the term "loop" to mean recursive continuation.
+/// The `null` value is used to represent a context not part of any loop.
+class LoopHierarchy {
+  /// Nesting depth of the given loop.
+  Map<Continuation, int> loopDepth = <Continuation, int>{};
+
+  /// The innermost loop (other than itself) that may be invoked recursively
+  /// as a result of invoking the given continuation.
+  Map<Continuation, Continuation> loopTarget = <Continuation, Continuation>{};
+
+  /// Current nesting depth.
+  int currentDepth = 0;
+
+  /// Computes the loop hierarchy for the given function.
+  /// 
+  /// Parent pointers must be computed for [node].
+  LoopHierarchy(FunctionDefinition node) {
+    _processBlock(node.body, null);
+  }
+
+  /// Returns the innermost loop which [node] is effectively part of.
+  Continuation getLoopHeader(Expression exp) {
+    Node node = exp.parent;
+    while (node != null && node is! Continuation) {
+      node = node.parent;
+    }
+    if (node is Continuation) {
+      if (node.isRecursive) { 
+        return node;
+      } else {
+        return loopTarget[node];
+      }
+    }
+    return null;
+  }
+
+  /// Marks the innermost loop as a subloop of the other loop.
+  /// 
+  /// Returns the innermost loop.
+  /// 
+  /// Both continuations, [c1] and [c2] may be null (i.e. no loop).
+  /// 
+  /// A loop is said to be a subloop of an enclosing loop if it can invoke
+  /// that loop recursively. This information is stored in [loopTarget].
+  /// 
+  /// This method is only invoked with two distinct loops if there is a
+  /// point that can reach a recursive invocation of both loops.
+  /// This implies that one loop is nested in the other, because they must
+  /// both be in scope at that point.
+  Continuation _markInnerLoop(Continuation c1, Continuation c2) {
+    assert(c1 == null || c1.isRecursive);
+    assert(c2 == null || c2.isRecursive);
+    if (c1 == null) return c2;
+    if (c2 == null) return c1;
+    if (c1 == c2) return c1;
+    if (loopDepth[c1] > loopDepth[c2]) {
+      loopTarget[c1] = _markInnerLoop(loopTarget[c1], c2);
+      return c1;
+    } else {
+      loopTarget[c2] = _markInnerLoop(loopTarget[c2], c1);
+      return c2;
+    }
+  }
+
+  /// Analyzes the body of [cont] and returns the innermost loop
+  /// that can be invoked recursively from [cont] (other than [cont] itself).
+  /// 
+  /// [catchLoop] is the innermost loop that can be invoked recursively
+  /// from the current exception handler.
+  Continuation _processContinuation(Continuation cont, Continuation catchLoop) {
+    if (cont.isRecursive) {
+      ++currentDepth;
+      loopDepth[cont] = currentDepth;
+      Continuation target = _processBlock(cont.body, catchLoop);
+      _markInnerLoop(loopTarget[cont], target);
+      --currentDepth;
+    } else {
+      loopTarget[cont] = _processBlock(cont.body, catchLoop);
+    }
+    return loopTarget[cont];
+  }
+
+  bool _isCallContinuation(Continuation cont) {
+    return cont.hasExactlyOneUse && cont.firstRef.parent is CallExpression;
+  }
+
+  /// Analyzes a basic block and returns the innermost loop that
+  /// can be invoked recursively from that block.
+  Continuation _processBlock(Expression node, Continuation catchLoop) {
+    List<Continuation> callContinuations = <Continuation>[];
+    for (; node is! TailExpression; node = node.next) {
+      if (node is LetCont) {
+        for (Continuation cont in node.continuations) {
+          if (!_isCallContinuation(cont)) {
+            // Process non-call continuations at the binding site, so they
+            // their loop target is known at all use sites.
+            _processContinuation(cont, catchLoop);
+          } else {
+            // To avoid deep recursion, do not analyze call continuations
+            // recursively. This basic block traversal steps into the
+            // call contiunation after visiting its use site. We store the
+            // continuations in a list so we can set the loop target once
+            // it is known.
+            callContinuations.add(cont);
+          }
+        }
+      } else if (node is LetHandler) {
+        catchLoop = _processContinuation(node.handler, catchLoop);
+      }
+    }
+    Continuation target;
+    if (node is InvokeContinuation) {
+      if (node.isRecursive) {
+        target = node.continuation.definition;
+      } else {
+        target = loopTarget[node.continuation.definition];
+      }
+    } else if (node is Branch) {
+      target = _markInnerLoop(
+          loopTarget[node.trueContinuation.definition],
+          loopTarget[node.falseContinuation.definition]);
+    } else {
+      assert(node is Unreachable || node is Throw);
+    }
+    target = _markInnerLoop(target, catchLoop);
+    for (Continuation cont in callContinuations) {
+      // Store the loop target on each call continuation in the basic block.
+      // Because we walk over call continuations as part of the basic block
+      // traversal, these do not get their loop target set otherwise.
+      loopTarget[cont] = target;
+    }
+    return target;
+  }
+}
diff --git a/pkg/compiler/lib/src/cps_ir/mutable_ssa.dart b/pkg/compiler/lib/src/cps_ir/mutable_ssa.dart
new file mode 100644
index 0000000..c561e81
--- /dev/null
+++ b/pkg/compiler/lib/src/cps_ir/mutable_ssa.dart
@@ -0,0 +1,254 @@
+// Copyright (c) 2015, 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 dart2js.cps_ir.mutable_ssa;
+
+import 'cps_ir_nodes.dart';
+import 'optimizers.dart';
+
+/// Determines which mutable variables should be rewritten to phi assignments
+/// in this pass.
+///
+/// We do not rewrite variables that have an assignment inside a try block that
+/// does not contain its declaration.
+class MutableVariablePreanalysis extends RecursiveVisitor {
+  // Number of try blocks enclosing the current position.
+  int currentDepth = 0;
+
+  /// Number of try blocks enclosing the declaration of a given mutable
+  /// variable.
+  ///
+  /// All mutable variables seen will be present in the map after the analysis.
+  Map<MutableVariable, int> variableDepth = <MutableVariable, int>{};
+
+  /// Variables with an assignment inside a try block that does not contain
+  /// its declaration.
+  Set<MutableVariable> hasAssignmentInTry = new Set<MutableVariable>();
+
+  void visitLetHandler(LetHandler node) {
+    ++currentDepth;
+    visit(node.body);
+    --currentDepth;
+    visit(node.handler);
+  }
+
+  void processLetMutable(LetMutable node) {
+    variableDepth[node.variable] = currentDepth;
+  }
+
+  void processSetMutable(SetMutable node) {
+    MutableVariable variable = node.variable.definition;
+    if (currentDepth > variableDepth[variable]) {
+      hasAssignmentInTry.add(variable);
+    }
+  }
+
+  /// True if there are no mutable variables or they are all assigned inside
+  /// a try block. In this case, there is nothing to do and the pass should
+  /// be skipped.
+  bool get allMutablesAreAssignedInTryBlocks {
+    return hasAssignmentInTry.length == variableDepth.length;
+  }
+}
+
+/// Replaces mutable variables with continuation parameters, effectively
+/// bringing them into SSA form.
+///
+/// This pass is intended to clean up mutable variables that were introduced
+/// by an optimization in the type propagation pass.
+///
+/// This implementation potentially creates a lot of redundant and dead phi
+/// parameters. These will be cleaned up by redundant phi elimination and
+/// shrinking reductions.
+///
+/// Discussion:
+/// For methods with a lot of mutable variables, creating all the spurious
+/// parameters might be too expensive. If this is the case, we should
+/// improve this pass to avoid most spurious parameters in practice.
+class MutableVariableEliminator implements Pass {
+  String get passName => 'Mutable variable elimination';
+
+  /// Mutable variables currently in scope, in order of declaration.
+  /// This list determines the order of the corresponding phi parameters.
+  final List<MutableVariable> mutableVariables = <MutableVariable>[];
+
+  /// Number of phi parameters added to the given continuation.
+  final Map<Continuation, int> continuationPhiCount = <Continuation, int>{};
+
+  /// Stack of yet unprocessed continuations interleaved with the
+  /// mutable variables currently in scope.
+  ///
+  /// Continuations are processed when taken off the stack and mutable
+  /// variables fall out of scope (i.e. removed from [mutableVariables]) when
+  /// taken off the stack.
+  final List<StackItem> stack = <StackItem>[];
+
+  MutableVariablePreanalysis analysis;
+
+  void rewrite(FunctionDefinition node) {
+    analysis = new MutableVariablePreanalysis()..visit(node);
+    if (analysis.allMutablesAreAssignedInTryBlocks) {
+      // Skip the pass if there is nothing to do.
+      return;
+    }
+    processBlock(node.body, <MutableVariable, Primitive>{});
+    while (stack.isNotEmpty) {
+      StackItem item = stack.removeLast();
+      if (item is ContinuationItem) {
+        processBlock(item.continuation.body, item.environment);
+      } else {
+        assert(item is VariableItem);
+        mutableVariables.removeLast();
+      }
+    }
+  }
+
+  bool shouldRewrite(MutableVariable variable) {
+    return !analysis.hasAssignmentInTry.contains(variable);
+  }
+
+  bool isJoinContinuation(Continuation cont) {
+    return !cont.hasExactlyOneUse ||
+           cont.firstRef.parent is InvokeContinuation;
+  }
+
+  void removeNode(InteriorNode node) {
+    InteriorNode parent = node.parent;
+    parent.body = node.body;
+    node.body.parent = parent;
+  }
+
+  /// If some useful source information is attached to exactly one of the
+  /// two definitions, the information is copied onto the other.
+  void mergeHints(MutableVariable variable, Primitive value) {
+    if (variable.hint == null) {
+      variable.hint = value.hint;
+    } else if (value.hint == null) {
+      value.hint = variable.hint;
+    }
+  }
+
+  /// Processes a basic block, replacing mutable variable uses with direct
+  /// references to their values.
+  ///
+  /// [environment] is the current value of each mutable variable. The map
+  /// will be mutated during the processing.
+  ///
+  /// Continuations to be processed are put on the stack for later processing.
+  void processBlock(Expression node,
+                    Map<MutableVariable, Primitive> environment) {
+    for (; node is! TailExpression; node = node.next) {
+      if (node is LetMutable && shouldRewrite(node.variable)) {
+        // Put the new mutable variable on the stack while processing the body,
+        // and pop it off again when done with the body.
+        mutableVariables.add(node.variable);
+        stack.add(new VariableItem());
+
+        // Put the initial value into the environment.
+        Primitive value = node.value.definition;
+        environment[node.variable] = value;
+
+        // Preserve variable names.
+        mergeHints(node.variable, value);
+
+        // Remove the mutable variable binding.
+        node.value.unlink();
+        removeNode(node);
+      } else if (node is LetPrim && node.primitive is SetMutable) {
+        SetMutable setter = node.primitive;
+        MutableVariable variable = setter.variable.definition;
+        if (shouldRewrite(variable)) {
+          // As above, update the environment, preserve variables and remove
+          // the mutable variable assignment.
+          environment[variable] = setter.value.definition;
+          mergeHints(variable, setter.value.definition);
+          setter.value.unlink();
+          removeNode(node);
+        }
+      } else if (node is LetPrim && node.primitive is GetMutable) {
+        GetMutable getter = node.primitive;
+        MutableVariable variable = getter.variable.definition;
+        if (shouldRewrite(variable)) {
+          // Replace with the reaching definition from the environment.
+          Primitive value = environment[variable];
+          value.substituteFor(getter);
+          mergeHints(variable, value);
+          removeNode(node);
+        }
+      } else if (node is LetCont) {
+        // Create phi parameters for each join continuation bound here, and put
+        // them on the stack for later processing.
+        // Note that non-join continuations are handled at the use-site.
+        for (Continuation cont in node.continuations) {
+          if (!isJoinContinuation(cont)) continue;
+          // Create a phi parameter for every mutable variable in scope.
+          // At the same time, build the environment to use for processing
+          // the continuation (mapping mutables to phi parameters).
+          continuationPhiCount[cont] = mutableVariables.length;
+          Map<MutableVariable, Primitive> environment =
+              <MutableVariable, Primitive>{};
+          for (MutableVariable variable in mutableVariables) {
+            Parameter phi = new Parameter(variable.hint);
+            cont.parameters.add(phi);
+            phi.parent = cont;
+            environment[variable] = phi;
+          }
+          stack.add(new ContinuationItem(cont, environment));
+        }
+      } else if (node is LetHandler) {
+        // Process the catch block later and continue into the try block.
+        // We can use the same environment object for the try and catch blocks.
+        // The current environment bindings cannot change inside the try block
+        // because we exclude all variables assigned inside a try block.
+        // The environment might be extended with more bindings before we
+        // analyze the catch block, but that's ok.
+        stack.add(new ContinuationItem(node.handler, environment));
+      }
+    }
+
+    // Analyze the terminal node.
+    if (node is InvokeContinuation) {
+      Continuation cont = node.continuation.definition;
+      if (cont.isReturnContinuation) return;
+      // This is a call to a join continuation. Add arguments for the phi
+      // parameters that were added to this continuation.
+      int phiCount = continuationPhiCount[cont];
+      for (int i = 0; i < phiCount; ++i) {
+        Primitive value = environment[mutableVariables[i]];
+        Reference<Primitive> arg = new Reference<Primitive>(value);
+        node.arguments.add(arg);
+        arg.parent = node;
+      }
+    } else if (node is Branch) {
+      // Enqueue both branches with the current environment.
+      // Clone the environments once so the processing of one branch does not
+      // mutate the environment needed to process the other branch.
+      stack.add(new ContinuationItem(
+          node.trueContinuation.definition,
+          new Map<MutableVariable, Primitive>.from(environment)));
+      stack.add(new ContinuationItem(
+          node.falseContinuation.definition,
+          environment));
+    } else {
+      assert(node is Throw || node is Unreachable);
+    }
+  }
+}
+
+abstract class StackItem {}
+
+/// Represents a mutable variable that is in scope.
+///
+/// The topmost mutable variable falls out of scope when this item is
+/// taken off the stack.
+class VariableItem extends StackItem {}
+
+/// Represents a yet unprocessed continuation together with the
+/// environment in which to process it.
+class ContinuationItem extends StackItem {
+  final Continuation continuation;
+  final Map<MutableVariable, Primitive> environment;
+
+  ContinuationItem(this.continuation, this.environment);
+}
diff --git a/pkg/compiler/lib/src/cps_ir/optimizers.dart b/pkg/compiler/lib/src/cps_ir/optimizers.dart
index 3b48349..4371086 100644
--- a/pkg/compiler/lib/src/cps_ir/optimizers.dart
+++ b/pkg/compiler/lib/src/cps_ir/optimizers.dart
@@ -11,6 +11,8 @@
 export 'redundant_phi.dart' show RedundantPhiEliminator;
 export 'redundant_join.dart' show RedundantJoinEliminator;
 export 'shrinking_reductions.dart' show ShrinkingReducer, ParentVisitor;
+export 'mutable_ssa.dart' show MutableVariableEliminator;
+export 'let_sinking.dart' show LetSinker;
 
 /// An optimization pass over the CPS IR.
 abstract class Pass {
diff --git a/pkg/compiler/lib/src/cps_ir/shrinking_reductions.dart b/pkg/compiler/lib/src/cps_ir/shrinking_reductions.dart
index f1970de..0173804 100644
--- a/pkg/compiler/lib/src/cps_ir/shrinking_reductions.dart
+++ b/pkg/compiler/lib/src/cps_ir/shrinking_reductions.dart
@@ -574,9 +574,8 @@
     node.value.parent = node;
   }
 
-  processSetMutableVariable(SetMutableVariable node) {
+  processSetMutable(SetMutable node) {
     node.variable.parent = node;
-    node.body.parent = node;
     node.value.parent = node;
   }
 
@@ -623,7 +622,6 @@
   processSetField(SetField node) {
     node.object.parent = node;
     node.value.parent = node;
-    node.body.parent = node;
   }
 
   processGetField(GetField node) {
@@ -635,10 +633,9 @@
 
   processSetStatic(SetStatic node) {
     node.value.parent = node;
-    node.body.parent = node;
   }
 
-  processGetMutableVariable(GetMutableVariable node) {
+  processGetMutable(GetMutable node) {
     node.variable.parent = node;
   }
 
diff --git a/pkg/compiler/lib/src/cps_ir/type_propagation.dart b/pkg/compiler/lib/src/cps_ir/type_propagation.dart
index 50b77b1..60e9c4c 100644
--- a/pkg/compiler/lib/src/cps_ir/type_propagation.dart
+++ b/pkg/compiler/lib/src/cps_ir/type_propagation.dart
@@ -44,6 +44,8 @@
 
   TypeMask numStringBoolType;
 
+  ClassElement get jsNullClass => backend.jsNullClass;
+
   // TODO(karlklose): remove compiler here.
   TypeMaskSystem(dart2js.Compiler compiler)
     : inferrer = compiler.typesTask,
@@ -599,7 +601,7 @@
   }
 
   /// Inserts [insertedCode] before [node].
-  /// 
+  ///
   /// [node] will end up in the hole of [insertedCode], and [insertedCode]
   /// will become rooted where [node] was.
   void insertBefore(Expression node, CpsFragment insertedCode) {
@@ -614,7 +616,7 @@
     // We want to recompute the types for [insertedCode] without
     // traversing the entire subtree of [node]. Temporarily close the
     // term with a dummy node while recomputing types.
-    context.body = new Unreachable(); 
+    context.body = new Unreachable();
     new ParentVisitor().visit(insertedCode.root);
     reanalyze(insertedCode.root);
 
@@ -653,7 +655,7 @@
   /// The new expression will be visited.
   ///
   /// Returns true if the node was replaced.
-  bool constifyExpression(Invoke node) {
+  bool constifyExpression(CallExpression node) {
     Continuation continuation = node.continuation.definition;
     ConstantValue constant = replacements[node];
     if (constant == null) return false;
@@ -692,13 +694,13 @@
       return;
     }
 
-    if (condition is ApplyBuiltinOperator && 
+    if (condition is ApplyBuiltinOperator &&
         condition.operator == BuiltinOperator.LooseEq) {
       Primitive leftArg = condition.arguments[0].definition;
       Primitive rightArg = condition.arguments[1].definition;
       AbstractValue left = getValue(leftArg);
       AbstractValue right = getValue(rightArg);
-      if (right.isNullConstant && 
+      if (right.isNullConstant &&
           lattice.isDefinitelyNotNumStringBool(left)) {
         // Rewrite:
         //   if (x == null) S1 else S2
@@ -707,7 +709,7 @@
         Branch branch = new Branch(new IsTrue(leftArg), falseCont, trueCont);
         replaceSubtree(node, branch);
         return;
-      } else if (left.isNullConstant && 
+      } else if (left.isNullConstant &&
                  lattice.isDefinitelyNotNumStringBool(right)) {
         Branch branch = new Branch(new IsTrue(rightArg), falseCont, trueCont);
         replaceSubtree(node, branch);
@@ -832,18 +834,19 @@
       if (target.isFinal) return false;
       assert(cont.parameters.single.hasNoUses);
       cont.parameters.clear();
-      SetField set = new SetField(getDartReceiver(node),
-                                  target,
-                                  getDartArgument(node, 0));
-      set.body = new InvokeContinuation(cont, <Primitive>[]);
-      replaceSubtree(node, set);
-      visitSetField(set);
+      CpsFragment cps = new CpsFragment(node.sourceInformation);
+      cps.letPrim(new SetField(getDartReceiver(node),
+                               target,
+                               getDartArgument(node, 0)));
+      cps.invokeContinuation(cont);
+      replaceSubtree(node, cps.result);
+      visit(cps.result);
       return true;
     }
   }
 
   /// Create a check that throws if [index] is not a valid index on [list].
-  /// 
+  ///
   /// This function assumes that [index] is an integer.
   ///
   /// Returns a CPS fragment whose context is the branch where no error
@@ -894,7 +897,7 @@
     int count = 0;
     for (Reference ref = list.firstRef; ref != null; ref = ref.next) {
       Node use = ref.parent;
-      if (use is InvokeMethod && 
+      if (use is InvokeMethod &&
           (use.selector.isIndex || use.selector.isIndexSet) &&
           getDartReceiver(use) == list) {
         ++count;
@@ -918,7 +921,7 @@
     if (!lattice.isDefinitelyNativeList(listValue, allowNull: true)) {
       return false;
     }
-    bool isFixedLength = 
+    bool isFixedLength =
         lattice.isDefinitelyFixedNativeList(listValue, allowNull: true);
     bool isMutable =
         lattice.isDefinitelyMutableNativeList(listValue, allowNull: true);
@@ -1041,23 +1044,22 @@
         MutableVariable current = new MutableVariable(new LoopItemEntity());
 
         // Rewrite all uses of the iterator.
-        while (iterator.firstRef != null) { 
+        while (iterator.firstRef != null) {
           InvokeMethod use = iterator.firstRef.parent;
           Continuation useCont = use.continuation.definition;
-          if (use.selector == currentSelector) { 
+          if (use.selector == currentSelector) {
             // Rewrite iterator.current to a use of the 'current' variable.
             Parameter result = useCont.parameters.single;
             if (result.hint != null) {
               // If 'current' was originally moved into a named variable, use
               // that variable name for the mutable variable.
-              current.hint = result.hint; 
+              current.hint = result.hint;
             }
-            LetPrim let = 
-                makeLetPrimInvoke(new GetMutableVariable(current), useCont);
+            LetPrim let = makeLetPrimInvoke(new GetMutable(current), useCont);
             replaceSubtree(use, let);
           } else {
             assert (use.selector == moveNextSelector);
-            // Rewrite iterator.moveNext() to: 
+            // Rewrite iterator.moveNext() to:
             //
             //   if (index < list.length) {
             //     current = null;
@@ -1075,16 +1077,16 @@
 
             // We must check for concurrent modification when calling moveNext.
             // When moveNext is used as a loop condition, the check prevents
-            // `index < list.length` from becoming the loop condition, and we 
+            // `index < list.length` from becoming the loop condition, and we
             // get code like this:
             //
             //    while (true) {
             //      if (originalLength !== list.length) throw;
-            //      if (index < list.length) { 
+            //      if (index < list.length) {
             //        ...
-            //      } else { 
-            //        ... 
-            //        break; 
+            //      } else {
+            //        ...
+            //        break;
             //      }
             //    }
             //
@@ -1097,17 +1099,17 @@
             //      if (originalLength !== list.length) throw;
             //    }
             //
-            // The check before the loop can often be eliminated because it 
+            // The check before the loop can often be eliminated because it
             // follows immediately after the 'iterator' call.
             InteriorNode parent = getEffectiveParent(use);
             if (!isFixedLength) {
               if (parent is Continuation && parent.isRecursive) {
                 // Check for concurrent modification before every invocation
                 // of the continuation.
-                // TODO(asgerf): Do this in a continuation so multiple 
+                // TODO(asgerf): Do this in a continuation so multiple
                 //               continues can share the same code.
-                for (Reference ref = parent.firstRef; 
-                     ref != null; 
+                for (Reference ref = parent.firstRef;
+                     ref != null;
                      ref = ref.next) {
                   Expression invocationCaller = ref.parent;
                   if (getEffectiveParent(invocationCaller) == iteratorCont) {
@@ -1137,7 +1139,7 @@
               ..invokeContinuation(useCont, [falseBranch.makeFalse()]);
 
             // Return true if there are more element.
-            cps.setMutable(current, 
+            cps.setMutable(current,
                 cps.letPrim(new GetIndex(list, cps.getMutable(index))));
             cps.setMutable(index, cps.applyBuiltin(
                 BuiltinOperator.NumAdd,
@@ -1177,12 +1179,12 @@
 
   /// If [prim] is the parameter to a call continuation, returns the
   /// corresponding call.
-  Invoke getInvocationWithResult(Primitive prim) {
+  CallExpression getCallWithResult(Primitive prim) {
     if (prim is Parameter && prim.parent is Continuation) {
       Continuation cont = prim.parent;
       if (cont.hasExactlyOneUse) {
         Node use = cont.firstRef.parent;
-        if (use is Invoke) {
+        if (use is CallExpression) {
           return use;
         }
       }
@@ -1243,7 +1245,7 @@
       visitInvokeStatic(invoke);
       return true;
     }
-    Invoke tearOffInvoke = getInvocationWithResult(tearOff);
+    CallExpression tearOffInvoke = getCallWithResult(tearOff);
     if (tearOffInvoke is InvokeMethod && tearOffInvoke.selector.isGetter) {
       Selector getter = tearOffInvoke.selector;
 
@@ -1549,6 +1551,23 @@
       visit(body);
     }
   }
+
+  void visitInterceptor(Interceptor node) {
+    // Filter out intercepted classes that do not match the input type.
+    AbstractValue value = getValue(node.input.definition);
+    node.interceptedClasses.retainWhere((ClassElement clazz) {
+      if (clazz == typeSystem.jsNullClass) {
+        return value.isNullable;
+      } else {
+        TypeMask classMask = typeSystem.nonNullSubclass(clazz);
+        return !typeSystem.areDisjoint(value.type, classMask);
+      }
+    });
+    // Remove the interceptor call if it can only return its input.
+    if (node.interceptedClasses.isEmpty) {
+      node.input.definition.substituteFor(node);
+    }
+  }
 }
 
 /**
@@ -2006,9 +2025,8 @@
     }
   }
 
-  void visitSetMutableVariable(SetMutableVariable node) {
+  void visitSetMutable(SetMutable node) {
     setValue(node.variable.definition, getValue(node.value.definition));
-    setReachable(node.body);
   }
 
   void visitLiteralList(LiteralList node) {
@@ -2040,7 +2058,7 @@
     setValue(node, constantValue(constant, typeSystem.functionType));
   }
 
-  void visitGetMutableVariable(GetMutableVariable node) {
+  void visitGetMutable(GetMutable node) {
     setValue(node, getValue(node.variable.definition));
   }
 
@@ -2096,9 +2114,7 @@
     }
   }
 
-  void visitSetStatic(SetStatic node) {
-    setReachable(node.body);
-  }
+  void visitSetStatic(SetStatic node) {}
 
   void visitGetLazyStatic(GetLazyStatic node) {
     Continuation cont = node.continuation.definition;
@@ -2126,9 +2142,7 @@
     setValue(node, nonConstant(typeSystem.getFieldType(node.field)));
   }
 
-  void visitSetField(SetField node) {
-    setReachable(node.body);
-  }
+  void visitSetField(SetField node) {}
 
   void visitCreateBox(CreateBox node) {
     setValue(node, nonConstant(typeSystem.nonNullType));
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index 51cdae4..5e36769 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -502,7 +502,7 @@
 
 void fail(String message) {
   if (diagnosticHandler != null) {
-    diagnosticHandler.diagnosticHandler(
+    diagnosticHandler.report(
         null, -1, -1, message, api.Diagnostic.ERROR);
   } else {
     print('Error: $message');
diff --git a/pkg/compiler/lib/src/dart2jslib.dart b/pkg/compiler/lib/src/dart2jslib.dart
index fcbeecb..14dad6a 100644
--- a/pkg/compiler/lib/src/dart2jslib.dart
+++ b/pkg/compiler/lib/src/dart2jslib.dart
@@ -9,7 +9,7 @@
 import 'dart:profiler' show
     UserTag;
 
-import '../compiler.dart' as api;
+import '../compiler_new.dart' as api;
 import 'cache_strategy.dart';
 import 'closure.dart' as closureMapping;
 import 'compile_time_constants.dart';
@@ -43,6 +43,7 @@
          LibraryLoaderTask,
          LoadedLibraries;
 import 'mirrors_used.dart' show MirrorUsageAnalyzerTask;
+import 'null_compiler_output.dart';
 import 'native/native.dart' as native;
 import 'ordered_typeset.dart';
 import 'patch_parser.dart';
diff --git a/pkg/compiler/lib/src/dart_backend/backend.dart b/pkg/compiler/lib/src/dart_backend/backend.dart
index 2e9bad4..22b7e1e 100644
--- a/pkg/compiler/lib/src/dart_backend/backend.dart
+++ b/pkg/compiler/lib/src/dart_backend/backend.dart
@@ -18,6 +18,8 @@
   final List<CompilerTask> tasks;
   final bool stripAsserts;
 
+  bool get supportsReflection => true;
+
   // TODO(zarah) Maybe change this to a command-line option.
   // Right now, it is set by the tests.
   bool useMirrorHelperLibrary = false;
diff --git a/pkg/compiler/lib/src/deferred_load.dart b/pkg/compiler/lib/src/deferred_load.dart
index 3213f9f..e261ff6 100644
--- a/pkg/compiler/lib/src/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load.dart
@@ -280,6 +280,23 @@
 
         elements.add(dependency);
       }
+
+      void registerTypeArgumentsAsDependencies(DartType type) {
+        Element dependency = type.element;
+        if (dependency == null || dependency.isErroneous ||
+            dependency.isTypeVariable) {
+          return;
+        }
+        elements.add(dependency);
+        if (type is GenericType) {
+          type.typeArguments.forEach(registerTypeArgumentsAsDependencies);
+        }
+      }
+
+      treeElements.forEachType((Node node, DartType type) {
+        if (node is NewExpression) registerTypeArgumentsAsDependencies(type);
+      });
+
       treeElements.forEachConstantNode((Node node, _) {
         // Explicitly depend on the backend constants.
         ConstantValue value =
diff --git a/pkg/compiler/lib/src/elements/modelx.dart b/pkg/compiler/lib/src/elements/modelx.dart
index 1c5f782..85d7579 100644
--- a/pkg/compiler/lib/src/elements/modelx.dart
+++ b/pkg/compiler/lib/src/elements/modelx.dart
@@ -1120,6 +1120,8 @@
   void markAsDeferred(Import deferredImport) {
     _deferredImport = deferredImport;
   }
+
+  String toString() => '$kind($name)';
 }
 
 class TypedefElementX extends ElementX
@@ -1240,8 +1242,12 @@
       originVariable.constant = value;
       return null;
     }
-    assert(invariant(this, constantCache == null || constantCache == value,
-        message: "Constant has already been computed for $this."));
+    assert(invariant(
+        this, constantCache == null || constantCache == value,
+        message: "Constant has already been computed for $this. "
+                 "Existing constant: "
+                 "${constantCache != null ? constantCache.getText() : ''}, "
+                 "New constant: ${value != null ? value.getText() : ''}."));
     constantCache = value;
   }
 }
diff --git a/pkg/compiler/lib/src/inferrer/inferrer_visitor.dart b/pkg/compiler/lib/src/inferrer/inferrer_visitor.dart
index e8af978..e4725b2 100644
--- a/pkg/compiler/lib/src/inferrer/inferrer_visitor.dart
+++ b/pkg/compiler/lib/src/inferrer/inferrer_visitor.dart
@@ -816,6 +816,11 @@
     return types.dynamicType;
   }
 
+  @override
+  void previsitDeferredAccess(Send node, PrefixElement prefix, _) {
+    // Deferred access does not affect inference.
+  }
+
   T handleTypeLiteralGet() {
     return types.typeType;
   }
diff --git a/pkg/compiler/lib/src/js/rewrite_async.dart b/pkg/compiler/lib/src/js/rewrite_async.dart
index 41a8466..1282401 100644
--- a/pkg/compiler/lib/src/js/rewrite_async.dart
+++ b/pkg/compiler/lib/src/js/rewrite_async.dart
@@ -1281,12 +1281,20 @@
 
   @override
   void visitReturn(js.Return node) {
-    assert(node.value == null || (!isSyncStar && !isAsyncStar));
     js.Node target = analysis.targets[node];
     if (node.value != null) {
-      withExpression(node.value, (js.Expression value) {
-        addStatement(js.js.statement("# = #;", [returnValue, value]));
-      }, store: false);
+      if(isSyncStar || isAsyncStar) {
+        // Even though `return expr;` is not allowed in the dart sync* and
+        // async*  code, the backend sometimes generates code like this, but
+        // only when it is known that the 'expr' throws, and the return is just
+        // to tell the JavaScript VM that the code won't continue here.
+        // It is therefore interpreted as `expr; return;`
+        visitExpressionIgnoreResult(node.value);
+      } else {
+        withExpression(node.value, (js.Expression value) {
+          addStatement(js.js.statement("# = #;", [returnValue, value]));
+        }, store: false);
+      }
     }
     translateJump(target, exitLabel);
   }
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index bbe0c3b..ba39217 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -242,6 +242,8 @@
   static const String START_ROOT_ISOLATE = 'startRootIsolate';
 
 
+  bool get supportsReflection => emitter.emitter.supportsReflection;
+
   String get patchVersion => USE_LAZY_EMITTER ? 'lazy' : 'full';
 
   final Annotations annotations;
diff --git a/pkg/compiler/lib/src/js_backend/codegen/task.dart b/pkg/compiler/lib/src/js_backend/codegen/task.dart
index 9c4658c..de97137 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/task.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/task.dart
@@ -72,19 +72,7 @@
         // switch.
         if (element.isNative ||
             element.isPatched ||
-            libraryName == 'origin library(dart:typed_data)' ||
-            // Using switch or try-finally.
-            library.isInternalLibrary && name == 'unwrapException' ||
-            library.isPlatformLibrary && className == 'IterableBase' ||
-            library.isInternalLibrary && className == 'Closure' ||
-            libraryName == 'origin library(dart:collection)' &&
-               name == 'mapToString' ||
-            libraryName == 'library(dart:html)' && name == 'sanitizeNode' ||
-            className == '_IsolateContext' ||
-            className == 'IsolateNatives' ||
-            className == '_Deserializer' ||
-            name == '_rootRun' ||
-            name == '_microtaskLoopEntry') {
+            libraryName == 'origin library(dart:typed_data)') {
           compiler.log('Using SSA compiler for platform element $element');
           return fallbackCompiler.compile(work);
         }
@@ -130,6 +118,10 @@
       }
     }
     traceGraph("IR Builder", cpsNode);
+    // Eliminating redundant phis before the unsugaring pass will make it
+    // insert fewer getInterceptor calls.
+    new RedundantPhiEliminator().rewrite(cpsNode);
+    traceGraph("Redundant phi elimination", cpsNode);
     new UnsugarVisitor(glue).rewrite(cpsNode);
     traceGraph("Unsugaring", cpsNode);
     return cpsNode;
@@ -181,14 +173,15 @@
       assert(checkCpsIntegrity(cpsNode));
     }
 
-    applyCpsPass(new RedundantPhiEliminator());
     TypePropagator typePropagator = new TypePropagator(compiler);
     applyCpsPass(typePropagator);
     dumpTypedIR(cpsNode, typePropagator);
     applyCpsPass(new ShrinkingReducer());
+    applyCpsPass(new MutableVariableEliminator());
     applyCpsPass(new RedundantJoinEliminator());
     applyCpsPass(new RedundantPhiEliminator());
     applyCpsPass(new ShrinkingReducer());
+    applyCpsPass(new LetSinker());
 
     return cpsNode;
   }
diff --git a/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart b/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart
index bbe998f..110d156 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart
@@ -5,12 +5,7 @@
 import '../../cps_ir/optimizers.dart' show ParentVisitor;
 import '../../constants/expressions.dart';
 import '../../constants/values.dart';
-import '../../elements/elements.dart' show
-    ClassElement,
-    FieldElement,
-    FunctionElement,
-    Local,
-    ExecutableElement;
+import '../../elements/elements.dart';
 import '../../js_backend/codegen/glue.dart';
 import '../../dart2jslib.dart' show Selector, World;
 import '../../cps_ir/cps_ir_builder.dart' show ThisParameterLocal;
@@ -22,6 +17,16 @@
   toString() => 'ExplicitReceiverParameterEntity($executableContext)';
 }
 
+/// Suggested name for an interceptor.
+class InterceptorEntity extends Entity {
+  Entity interceptedVariable;
+
+  InterceptorEntity(this.interceptedVariable);
+
+  String get name => interceptedVariable.name + '_';
+}
+
+
 /// Rewrites the initial CPS IR to make Dart semantics explicit and inserts
 /// special nodes that respect JavaScript behavior.
 ///
@@ -38,6 +43,8 @@
   Parameter thisParameter;
   Parameter explicitReceiverParameter;
 
+  Map<Primitive, Interceptor> interceptors = <Primitive, Interceptor>{};
+
   // In a catch block, rethrow implicitly throws the block's exception
   // parameter.  This is the exception parameter when nested in a catch
   // block and null otherwise.
@@ -227,6 +234,32 @@
     // worry about unlinking.
   }
 
+  /// Returns an interceptor for the given value, capable of responding to
+  /// [selector].
+  /// 
+  /// A single getInterceptor call will be created per primitive, bound
+  /// immediately after the primitive is bound.
+  /// 
+  /// The type propagation pass will later narrow the set of interceptors
+  /// based on the input type, and the let sinking pass will propagate the
+  /// getInterceptor call closer to its use when this is profitable.
+  Interceptor getInterceptorFor(Primitive prim, Selector selector) {
+    Interceptor interceptor = interceptors[prim];
+    if (interceptor == null) {
+      interceptor = new Interceptor(prim);
+      interceptors[prim] = interceptor;
+      InteriorNode parent = prim.parent;
+      insertLetPrim(interceptor, parent.body);
+      if (prim.hint != null) {
+        interceptor.hint = new InterceptorEntity(prim.hint);
+      }
+    }
+    // Add the interceptor classes that can respond to the given selector.
+    interceptor.interceptedClasses.addAll(
+        _glue.getInterceptedClassesOn(selector));
+    return interceptor;
+  }
+
   processInvokeMethod(InvokeMethod node) {
     Selector selector = node.selector;
     if (!_glue.isInterceptedSelector(selector)) return;
@@ -240,13 +273,7 @@
       //  Change 'receiver.foo()'  to  'this.foo(receiver)'.
       newReceiver = thisParameter;
     } else {
-      // TODO(sra): Move the computation of interceptedClasses to a much later
-      // phase and take into account the remaining uses of the interceptor.
-      Set<ClassElement> interceptedClasses =
-        _glue.getInterceptedClassesOn(selector);
-      _glue.registerSpecializedGetInterceptor(interceptedClasses);
-      newReceiver = new Interceptor(receiver, interceptedClasses);
-      insertLetPrim(newReceiver, node);
+      newReceiver = getInterceptorFor(receiver, node.selector);
     }
 
     node.arguments.insert(0, node.receiver);
diff --git a/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart b/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
index 0b9cdb2..cdcc609 100644
--- a/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
+++ b/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
@@ -5,6 +5,8 @@
 part of dart2js.js_emitter;
 
 const USE_LAZY_EMITTER = const bool.fromEnvironment("dart2js.use.lazy.emitter");
+const USE_STARTUP_EMITTER =
+    const bool.fromEnvironment("dart2js.use.startup.emitter");
 
 /**
  * Generates the code for all used classes in the program. Static fields (even
@@ -38,9 +40,14 @@
         this.namer = namer,
         this.typeTestRegistry = new TypeTestRegistry(compiler) {
     nativeEmitter = new NativeEmitter(this);
-    emitter = USE_LAZY_EMITTER
-        ? new lazy_js_emitter.Emitter(compiler, namer, nativeEmitter)
-        : new full_js_emitter.Emitter(compiler, namer, generateSourceMap, this);
+    if (USE_LAZY_EMITTER) {
+      emitter = new lazy_js_emitter.Emitter(compiler, namer, nativeEmitter);
+    } else if (USE_STARTUP_EMITTER) {
+      emitter = new startup_js_emitter.Emitter(compiler, namer, nativeEmitter);
+    } else {
+      emitter =
+          new full_js_emitter.Emitter(compiler, namer, generateSourceMap, this);
+    }
     metadataCollector = new MetadataCollector(compiler, emitter);
   }
 
@@ -145,6 +152,9 @@
   /// the program, and returns the size of the generated output.
   int emitProgram(ProgramBuilder programBuilder);
 
+  /// Returns true, if the emitter supports reflection.
+  bool get supportsReflection;
+
   /// Returns the JS function that must be invoked to get the value of the
   /// lazily initialized static.
   jsAst.Expression isolateLazyInitializerAccess(FieldElement element);
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
index 278e356..02a0ac2 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
@@ -8,7 +8,9 @@
 import 'dart:collection' show HashMap;
 
 import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames;
-import 'package:js_runtime/shared/embedded_names.dart' show JsBuiltin;
+import 'package:js_runtime/shared/embedded_names.dart' show
+    JsBuiltin,
+    JsGetName;
 
 import '../js_emitter.dart' hide Emitter;
 import '../js_emitter.dart' as js_emitter show Emitter;
@@ -288,6 +290,9 @@
   String get globalsHolder => r"$globals$";
 
   @override
+  bool get supportsReflection => true;
+
+  @override
   jsAst.Expression generateEmbeddedGlobalAccess(String global) {
     return js(generateEmbeddedGlobalAccessString(global));
   }
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/setup_program_builder.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/setup_program_builder.dart
index aa30bd9..309e121 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/setup_program_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/setup_program_builder.dart
@@ -279,7 +279,7 @@
 
       #initializeEmptyInstance = function(name, o, fields) {
         #allClasses[name].apply(o, fields);
-        return o; //
+        return o;
       }
     }
 
@@ -747,6 +747,8 @@
           mangledNames[name] = reflectionName;
           funcs[0].$reflectionNameField = reflectionName;
           funcs[0].$metadataIndexField = unmangledNameIndex + 1;
+          // The following line installs the [${JsGetName.CALL_CATCH_ALL}]
+          // property for closures.
           if (optionalParameterCount) prototype[unmangledName + "*"] = funcs[0];
         }
       }
diff --git a/pkg/compiler/lib/src/js_emitter/js_emitter.dart b/pkg/compiler/lib/src/js_emitter/js_emitter.dart
index 4c642eb..fff722e 100644
--- a/pkg/compiler/lib/src/js_emitter/js_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/js_emitter.dart
@@ -50,8 +50,9 @@
 import 'model.dart';
 import 'program_builder/program_builder.dart';
 
-import 'lazy_emitter/emitter.dart' as lazy_js_emitter;
 import 'full_emitter/emitter.dart' as full_js_emitter;
+import 'lazy_emitter/emitter.dart' as lazy_js_emitter;
+import 'startup_emitter/emitter.dart' as startup_js_emitter;
 
 import '../universe/universe.dart' show
     TypeMaskSet,
diff --git a/pkg/compiler/lib/src/js_emitter/lazy_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/lazy_emitter/emitter.dart
index e8b7a5d..70431c1 100644
--- a/pkg/compiler/lib/src/js_emitter/lazy_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/lazy_emitter/emitter.dart
@@ -47,6 +47,9 @@
     return _emitter.emitProgram(program);
   }
 
+  @override
+  bool get supportsReflection => false;
+
   // TODO(floitsch): copied from full emitter. Adjust or share.
   @override
   bool isConstantInlinedOrAlreadyEmitted(ConstantValue constant) {
diff --git a/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
index 3423d30..f391ed9 100644
--- a/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
@@ -52,7 +52,9 @@
           callback(null);
           return;
         }
-        if (document.currentScript) {
+        // When running as a content-script of a chrome-extension the
+        // 'currentScript' is `null` (but not undefined).
+        if (typeof document.currentScript != 'undefined') {
           callback(document.currentScript);
           return;
         }
diff --git a/pkg/compiler/lib/src/js_emitter/model.dart b/pkg/compiler/lib/src/js_emitter/model.dart
index b43c51c..a76c63a 100644
--- a/pkg/compiler/lib/src/js_emitter/model.dart
+++ b/pkg/compiler/lib/src/js_emitter/model.dart
@@ -84,8 +84,10 @@
   final String name;
   final int index;
   final bool isStaticStateHolder;
+  final bool isConstantsHolder;
 
-  Holder(this.name, this.index, {this.isStaticStateHolder: false});
+  Holder(this.name, this.index,
+      {this.isStaticStateHolder: false, this.isConstantsHolder: false});
 }
 
 /**
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
index deadcb7..a526b48 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
@@ -100,8 +100,7 @@
         _registry.registerElements);
 
     // We always add the current isolate holder.
-    _registry.registerHolder(
-        namer.staticStateHolder, isStaticStateHolder: true);
+    _registerStaticStateHolder();
 
     // We need to run the native-preparation before we build the output. The
     // preparation code, in turn needs the classes to be set up.
@@ -208,6 +207,8 @@
   }
 
   js.Statement _buildInvokeMain() {
+    if (_compiler.isMockCompilation) return js.js.comment("Mock compilation");
+
     MainCallStubGenerator generator =
         new MainCallStubGenerator(_compiler, backend, backend.emitter);
     return generator.generateInvokeMain();
@@ -249,17 +250,19 @@
     ConstantValue initialValue = handler.getInitialValueFor(element);
     // TODO(zarah): The holder should not be registered during building of
     // a static field.
-    _registry.registerHolder(namer.globalObjectForConstant(initialValue));
+    _registry.registerHolder(
+        namer.globalObjectForConstant(initialValue), isConstantsHolder: true);
     js.Expression code = _task.emitter.constantReference(initialValue);
     js.Name name = namer.globalPropertyName(element);
     bool isFinal = false;
     bool isLazy = false;
 
     // TODO(floitsch): we shouldn't update the registry in the middle of
-    // building a static field. (Note that the $ holder is already registered
-    // earlier).
+    // building a static field. (Note that the static-state holder was
+    // already registered earlier, and that we just call the register to get
+    // the holder-instance.
     return new StaticField(element,
-                           name, _registry.registerHolder(r'$'), code,
+                           name, _registerStaticStateHolder(), code,
                            isFinal, isLazy);
   }
 
@@ -291,10 +294,11 @@
     bool isFinal = element.isFinal;
     bool isLazy = true;
     // TODO(floitsch): we shouldn't update the registry in the middle of
-    // building a static field. (Note that the $ holder is already registered
-    // earlier).
+    // building a static field. (Note that the static-state holder was
+    // already registered earlier, and that we just call the register to get
+    // the holder-instance.
     return new StaticField(element,
-                           name, _registry.registerHolder(r'$'), code,
+                           name, _registerStaticStateHolder(), code,
                            isFinal, isLazy);
   }
 
@@ -791,9 +795,15 @@
       assert(!_constants.containsKey(constantValue));
       js.Name name = namer.constantName(constantValue);
       String constantObject = namer.globalObjectForConstant(constantValue);
-      Holder holder = _registry.registerHolder(constantObject);
+      Holder holder =
+          _registry.registerHolder(constantObject, isConstantsHolder: true);
       Constant constant = new Constant(name, holder, constantValue);
       _constants[constantValue] = constant;
     }
   }
+
+  Holder _registerStaticStateHolder() {
+    return _registry.registerHolder(
+        namer.staticStateHolder, isStaticStateHolder: true);
+  }
 }
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/registry.dart b/pkg/compiler/lib/src/js_emitter/program_builder/registry.dart
index 2fe3e12..5614bf9 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/registry.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/registry.dart
@@ -113,10 +113,17 @@
     // Ignore for now.
   }
 
-  Holder registerHolder(String name, {bool isStaticStateHolder: false}) {
+  Holder registerHolder(
+      String name,
+      {bool isStaticStateHolder: false, bool isConstantsHolder: false}) {
+    assert(_holdersMap[name] == null ||
+        (_holdersMap[name].isStaticStateHolder == isStaticStateHolder &&
+         _holdersMap[name].isConstantsHolder == isConstantsHolder));
+
     return _holdersMap.putIfAbsent(name, () {
       return new Holder(name, _holdersMap.length,
-          isStaticStateHolder: isStaticStateHolder);
+          isStaticStateHolder: isStaticStateHolder,
+          isConstantsHolder: isConstantsHolder);
     });
   }
 }
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart
new file mode 100644
index 0000000..fb5b823
--- /dev/null
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart
@@ -0,0 +1,185 @@
+// Copyright (c) 2015, 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 dart2js.js_emitter.startup_emitter;
+
+import 'package:js_runtime/shared/embedded_names.dart' show
+    JsBuiltin,
+    METADATA,
+    TYPES;
+
+import '../program_builder/program_builder.dart' show ProgramBuilder;
+import '../model.dart';
+import 'model_emitter.dart';
+import '../../common.dart';
+import '../../elements/elements.dart' show FieldElement;
+import '../../js/js.dart' as js;
+
+import '../../js_backend/js_backend.dart' show
+JavaScriptBackend,
+Namer;
+
+import '../js_emitter.dart' show
+    NativeEmitter;
+
+import '../js_emitter.dart' as emitterTask show
+    Emitter;
+
+import '../../util/util.dart' show
+    NO_LOCATION_SPANNABLE;
+
+class Emitter implements emitterTask.Emitter {
+  final Compiler _compiler;
+  final Namer namer;
+  final ModelEmitter _emitter;
+
+  JavaScriptBackend get _backend => _compiler.backend;
+
+  Emitter(Compiler compiler, Namer namer, NativeEmitter nativeEmitter)
+      : this._compiler = compiler,
+        this.namer = namer,
+        _emitter = new ModelEmitter(compiler, namer, nativeEmitter);
+
+  @override
+  int emitProgram(ProgramBuilder programBuilder) {
+    Program program = programBuilder.buildProgram();
+    return _emitter.emitProgram(program);
+  }
+
+  @override
+  bool get supportsReflection => false;
+
+  @override
+  bool isConstantInlinedOrAlreadyEmitted(ConstantValue constant) {
+    return _emitter.isConstantInlinedOrAlreadyEmitted(constant);
+  }
+
+  @override
+  int compareConstants(ConstantValue a, ConstantValue b) {
+    return _emitter.compareConstants(a, b);
+  }
+
+  @override
+  js.Expression constantReference(ConstantValue value) {
+    return _emitter.generateConstantReference(value);
+  }
+
+  @override
+  js.Expression generateEmbeddedGlobalAccess(String global) {
+    return _emitter.generateEmbeddedGlobalAccess(global);
+  }
+
+  @override
+  // TODO(herhut): Use a single shared function.
+  js.Expression generateFunctionThatReturnsNull() {
+    return js.js('function() {}');
+  }
+
+  js.PropertyAccess _globalPropertyAccess(Element element) {
+    js.Name name = namer.globalPropertyName(element);
+    js.PropertyAccess pa = new js.PropertyAccess(
+        new js.VariableUse(namer.globalObjectFor(element)), name);
+    return pa;
+  }
+
+  @override
+  js.Expression isolateLazyInitializerAccess(FieldElement element) {
+    return js.js('#.#', [namer.globalObjectFor(element),
+    namer.lazyInitializerName(element)]);
+  }
+
+  @override
+  js.Expression isolateStaticClosureAccess(FunctionElement element) {
+    return _emitter.generateStaticClosureAccess(element);
+  }
+
+  @override
+  js.PropertyAccess staticFieldAccess(FieldElement element) {
+    return _globalPropertyAccess(element);
+  }
+
+  @override
+  js.PropertyAccess staticFunctionAccess(FunctionElement element) {
+    return _globalPropertyAccess(element);
+  }
+
+  @override
+  js.PropertyAccess constructorAccess(ClassElement element) {
+    return _globalPropertyAccess(element);
+  }
+
+  @override
+  js.PropertyAccess prototypeAccess(ClassElement element,
+                                    bool hasBeenInstantiated) {
+    js.Expression constructor =
+        hasBeenInstantiated ? constructorAccess(element) : typeAccess(element);
+    return js.js('#.prototype', constructor);
+  }
+
+  @override
+  js.Expression interceptorClassAccess(ClassElement element) {
+    return _globalPropertyAccess(element);
+  }
+
+  @override
+  js.Expression typeAccess(Element element) {
+    return _globalPropertyAccess(element);
+  }
+
+  @override
+  js.Template templateForBuiltin(JsBuiltin builtin) {
+    String typeNameProperty = ModelEmitter.typeNameProperty;
+
+    switch (builtin) {
+      case JsBuiltin.dartObjectConstructor:
+        return js.js.expressionTemplateYielding(
+            typeAccess(_compiler.objectClass));
+
+      case JsBuiltin.isCheckPropertyToJsConstructorName:
+        int isPrefixLength = namer.operatorIsPrefix.length;
+        return js.js.expressionTemplateFor('#.substring($isPrefixLength)');
+
+      case JsBuiltin.isFunctionType:
+        return _backend.rti.representationGenerator.templateForIsFunctionType;
+
+      case JsBuiltin.rawRtiToJsConstructorName:
+        return js.js.expressionTemplateFor("#.$typeNameProperty");
+
+      case JsBuiltin.rawRuntimeType:
+        return js.js.expressionTemplateFor("#.constructor");
+
+      case JsBuiltin.createFunctionTypeRti:
+        return _backend.rti.representationGenerator
+        .templateForCreateFunctionType;
+
+      case JsBuiltin.isSubtype:
+      // TODO(floitsch): move this closer to where is-check properties are
+      // built.
+        String isPrefix = namer.operatorIsPrefix;
+        return js.js.expressionTemplateFor("('$isPrefix' + #) in #.prototype");
+
+      case JsBuiltin.isGivenTypeRti:
+        return js.js.expressionTemplateFor('#.$typeNameProperty === #');
+
+      case JsBuiltin.getMetadata:
+        String metadataAccess =
+            _emitter.generateEmbeddedGlobalAccessString(METADATA);
+        return js.js.expressionTemplateFor("$metadataAccess[#]");
+
+      case JsBuiltin.getType:
+        String typesAccess =
+            _emitter.generateEmbeddedGlobalAccessString(TYPES);
+        return js.js.expressionTemplateFor("$typesAccess[#]");
+
+      default:
+        _compiler.internalError(NO_LOCATION_SPANNABLE,
+            "Unhandled Builtin: $builtin");
+        return null;
+    }
+  }
+
+  @override
+  void invalidateCaches() {
+  }
+}
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
new file mode 100644
index 0000000..390ecd6
--- /dev/null
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
@@ -0,0 +1,276 @@
+// Copyright (c) 2015, 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 dart2js.js_emitter.startup_emitter.model_emitter;
+
+/// The fast startup emitter's goal is to minimize the amount of work that the
+/// JavaScript engine has to do before it can start running user code.
+///
+/// Whenever possible, the emitter uses object literals instead of updating
+/// objects.
+///
+/// Example:
+///
+///     // Holders are initialized directly with the classes and static
+///     // functions.
+///     var A = { Point: function Point(x, y) { this.x = x; this.y = y },
+///               someStaticFunction: function someStaticFunction() { ... } };
+///
+///     // Class-behavior is emitted in a prototype object that is directly
+///     // assigned:
+///     A.Point.prototype = { distanceTo: function(other) { ... } };
+///
+///     // Inheritance is achieved by updating the prototype objects (hidden in
+///     // a helper function):
+///     A.Point.prototype.__proto__ = H.Object.prototype;
+///
+/// The emitter doesn't try to be clever and emits everything beforehand. This
+/// increases the output size, but improves performance.
+///
+// The code relies on the fact that all Dart code is inside holders. As such
+// we can use "global" names however we want. As long as we don't shadow
+// JavaScript variables (like `Array`) we are free to chose whatever variable
+// names we want. Furthermore, the minifier reduces the names of the variables.
+const String mainBoilerplate = '''
+{
+// Declare deferred-initializer global, which is used to keep track of the
+// loaded fragments.
+#deferredInitializer;
+
+(function() {
+// Copies the own properties from [from] to [to].
+function copyProperties(from, to) {
+  var keys = Object.keys(from);
+  for (var i = 0; i < keys.length; i++) {
+    to[keys[i]] = from[keys[i]];
+  }
+}
+
+// Makes [cls] inherit from [sup].
+// On Chrome, Firefox and recent IEs this happens by updating the internal
+// proto-property of the classes 'prototype' field.
+// Older IEs use `Object.create` and copy over the properties.
+function inherit(cls, sup) {
+  // TODO(floitsch): IE doesn't support changing the __proto__ property. There,
+  // we need to copy the properties instead.
+  cls.#typeNameProperty = cls.name;  // Needed for RTI.
+  cls.prototype.constructor = cls;
+  cls.prototype[#operatorIsPrefix + cls.name] = cls;
+  cls.prototype.__proto__ = sup.prototype;
+}
+
+// Mixes in the properties of [mixin] into [cls].
+function mixin(cls, mixin) {
+  copyProperties(mixin.prototype, cls.prototype);
+}
+
+// Creates a lazy field.
+//
+// A lazy field has a storage entry, [name], which holds the value, and a
+// getter ([getterName]) to access the field. If the field wasn't set before
+// the first access, it is initialized with the [initializer].
+function lazy(holder, name, getterName, initializer) {
+  holder[name] = null;
+  holder[getterName] = function() {
+    holder[getterName] = function() { #cyclicThrow(name) };
+    var result;
+    var sentinelInProgress = initializer;
+    try {
+      result = holder[name] = sentinelInProgress;
+      result = holder[name] = initializer();
+    } finally {
+      // Use try-finally, not try-catch/throw as it destroys the stack
+      // trace.
+      if (result === sentinelInProgress) {
+        // The lazy static (holder[name]) might have been set to a different
+        // value. According to spec we still have to reset it to null, if
+        // the initialization failed.
+        holder[name] = null;
+      }
+      // TODO(floitsch): for performance reasons the function should probably
+      // be unique for each static.
+      holder[getterName] = function() { return this[name]; };
+    }
+    return result;
+  };
+}
+
+// Given a list, marks it as constant.
+//
+// The runtime ensures that const-lists cannot be modified.
+function makeConstList(list) {
+  // By assigning a function to the properties they become part of the
+  // hidden class. The actual values of the fields don't matter, since we
+  // only check if they exist.
+  list.immutable\$list = Array;
+  list.fixed\$length = Array;
+  return list;
+}
+
+// TODO(floitsch): provide code for tear-offs.
+
+// Instead of setting the interceptor tags directly we use this update
+// function. This makes it easier for deferred fragments to contribute to the
+// embedded global.
+function setOrUpdateInterceptorsByTag(newTags) {
+  var tags = #embeddedInterceptorTags;
+  if (!tags) {
+    #embeddedInterceptorTags = newTags;
+    return;
+  }
+  copyProperties(newTags, tags);
+}
+
+// Instead of setting the leaf tags directly we use this update
+// function. This makes it easier for deferred fragments to contribute to the
+// embedded global.
+function setOrUpdateLeafTags(newTags) {
+  var tags = #embeddedLeafTags;
+  if (!tags) {
+    #embeddedLeafTags = newTags;
+    return;
+  }
+  copyProperties(newTags, tags);
+}
+
+// Updates the types embedded global.
+function updateTypes(newTypes) {
+  var types = #embeddedTypes;
+  types.push.apply(types, newTypes);
+}
+
+// Updates the given holder with the properties of the [newHolder].
+// This function is used when a deferred fragment is initialized.
+function updateHolder(holder, newHolder) {
+  // TODO(floitsch): updating the prototype (instead of copying) is
+  // *horribly* inefficient in Firefox. There we should just copy the
+  // properties.
+  var oldPrototype = holder.__proto__;
+  newHolder.__proto__ = oldPrototype;
+  holder.__proto__ = newHolder;
+  return holder;
+}
+
+// Every deferred hunk (i.e. fragment) is a function that we can invoke to
+// initialize it. At this moment it contributes its data to the main hunk.
+function initializeDeferredHunk(hunk) {
+  // TODO(floitsch): extend natives.
+  hunk(derive, mixin, lazy, makeConstList, installTearOff,
+       updateHolder, updateTypes, updateInterceptorsByTag, updateLeafTags,
+       #embeddedGlobalsObject, #holdersList, #currentIsolate);
+}
+
+// Creates the holders.
+#holders;
+// Sets the prototypes of classes.
+#prototypes;
+// Sets aliases of methods (on the prototypes of classes).
+#aliases;
+// Installs the tear-offs of functions.
+#tearOffs;
+// Builds the inheritance structure.
+#inheritance;
+
+// Emits the embedded globals.
+#embeddedGlobals;
+
+// Sets up the native support.
+// Native-support uses setOrUpdateInterceptorsByTag and setOrUpdateLeafTags.
+#nativeSupport;
+
+// Instantiates all constants.
+#constants;
+// Initializes the static non-final fields (with their constant values).
+#staticNonFinalFields;
+// Creates lazy getters for statics that must run initializers on first access.
+#lazyStatics;
+
+// Invokes main (making sure that it records the 'current-script' value).
+#invokeMain;
+})();
+}''';
+
+/// Deferred fragments (aka 'hunks') are built similarly to the main fragment.
+///
+/// However, at specific moments they need to contribute their data.
+/// For example, once the holders have been created, they are included into
+/// the main holders.
+const String deferredBoilerplate = '''
+{
+#deferredInitializers.current =
+function(derive, mixin, lazy, makeConstList, installTearOff,
+          updateHolder, updateTypes,
+          setOrUpdateInterceptorsByTag, setOrUpdateLeafTags,
+          #embeddedGlobalsObject, holdersList, #currentIsolate) {
+
+// Builds the holders. They only contain the data for new holders.
+#holders;
+// Updates the holders of the main-fragment. Uses the provided holdersList to
+// access the main holders.
+// The local holders are replaced by the combined holders. This is necessary
+// for the inheritance setup below.
+#updateHolders;
+// Sets the prototypes of the new classes.
+#prototypes;
+// Sets aliases of methods (on the prototypes of classes).
+#aliases;
+// Installs the tear-offs of functions.
+#tearOffs;
+// Builds the inheritance structure.
+#inheritance;
+
+updateTypes(#types);
+
+// Native-support uses setOrUpdateInterceptorsByTag and setOrUpdateLeafTags.
+#nativeSupport;
+
+// Instantiates all constants of this deferred fragment.
+// Note that the constant-holder has been updated earlier and storing the
+// constant values in the constant-holder makes them available globally.
+#constants;
+// Initializes the static non-final fields (with their constant values).
+#staticNonFinalFields;
+// Creates lazy getters for statics that must run initializers on first access.
+#lazyStatics;
+};
+// TODO(floitsch): this last line should be outside the AST, since it
+// requires to know the hash of the part of the code above this comment.
+#deferredInitializers[#hash] = #deferredInitializers.current;
+}''';
+
+/**
+ * This class builds a JavaScript tree for a given fragment.
+ *
+ * A fragment is generally written into a separate file so that it can be
+ * loaded dynamically when a deferred library is loaded.
+ *
+ * This class is stateless and can be reused for different fragments.
+ */
+class FragmentEmitter {
+  final Compiler compiler;
+  final Namer namer;
+  final JavaScriptBackend backend;
+  final ConstantEmitter constantEmitter;
+  final ModelEmitter modelEmitter;
+
+  FragmentEmitter(this.compiler, this.namer, this.backend, this.constantEmitter,
+      this.modelEmitter);
+
+  js.Expression generateEmbeddedGlobalAccess(String global) =>
+      modelEmitter.generateEmbeddedGlobalAccess(global);
+
+  js.Expression generateConstantReference(ConstantValue value) =>
+      modelEmitter.generateConstantReference(value);
+
+  js.Statement emitMainFragment(Program program) {
+    MainFragment fragment = program.fragments.first;
+    throw new UnimplementedError('emitMain');
+  }
+
+  js.Statement emitDeferredFragment(DeferredFragment fragment,
+                                    js.Expression deferredTypes,
+                                    List<Holder> holders) {
+    throw new UnimplementedError('emitDeferred');
+  }
+}
\ No newline at end of file
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
new file mode 100644
index 0000000..9797dbb
--- /dev/null
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
@@ -0,0 +1,180 @@
+// Copyright (c) 2015, 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 dart2js.js_emitter.startup_emitter.model_emitter;
+
+import '../../constants/values.dart' show ConstantValue, FunctionConstantValue;
+import '../../dart2jslib.dart' show Compiler;
+import '../../elements/elements.dart' show ClassElement, FunctionElement;
+import '../../js/js.dart' as js;
+import '../../js_backend/js_backend.dart' show
+    JavaScriptBackend,
+    Namer,
+    ConstantEmitter;
+
+import '../js_emitter.dart' show AstContainer, NativeEmitter;
+
+import 'package:js_runtime/shared/embedded_names.dart' show
+    CREATE_NEW_ISOLATE,
+    DEFERRED_INITIALIZED,
+    DEFERRED_LIBRARY_URIS,
+    DEFERRED_LIBRARY_HASHES,
+    GET_TYPE_FROM_NAME,
+    INITIALIZE_LOADED_HUNK,
+    INTERCEPTORS_BY_TAG,
+    IS_HUNK_INITIALIZED,
+    IS_HUNK_LOADED,
+    LEAF_TAGS,
+    MANGLED_GLOBAL_NAMES,
+    METADATA,
+    NATIVE_SUPERCLASS_TAG_NAME,
+    TYPE_TO_INTERCEPTOR_MAP,
+    TYPES;
+
+import '../js_emitter.dart' show NativeGenerator, buildTearOffCode;
+import '../model.dart';
+
+part 'fragment_emitter.dart';
+
+class ModelEmitter {
+  final Compiler compiler;
+  final Namer namer;
+  ConstantEmitter constantEmitter;
+  final NativeEmitter nativeEmitter;
+
+  JavaScriptBackend get backend => compiler.backend;
+
+  /// For deferred loading we communicate the initializers via this global var.
+  static const String deferredInitializersGlobal =
+      r"$__dart_deferred_initializers__";
+
+  static const String deferredExtension = "part.js";
+
+  static const String typeNameProperty = r"builtin$cls";
+
+  ModelEmitter(Compiler compiler, Namer namer, this.nativeEmitter)
+      : this.compiler = compiler,
+        this.namer = namer {
+    this.constantEmitter = new ConstantEmitter(
+        compiler, namer, this.generateConstantReference,
+        constantListGenerator);
+  }
+
+  js.Expression constantListGenerator(js.Expression array) {
+    // TODO(floitsch): remove hard-coded name.
+    return js.js('makeConstList(#)', [array]);
+  }
+
+  js.Expression generateEmbeddedGlobalAccess(String global) {
+    return js.js(generateEmbeddedGlobalAccessString(global));
+  }
+
+  String generateEmbeddedGlobalAccessString(String global) {
+    // TODO(floitsch): don't use 'init' as global embedder storage.
+    return 'init.$global';
+  }
+
+  bool isConstantInlinedOrAlreadyEmitted(ConstantValue constant) {
+    if (constant.isFunction) return true;    // Already emitted.
+    if (constant.isPrimitive) return true;   // Inlined.
+    if (constant.isDummy) return true;       // Inlined.
+    return false;
+  }
+
+  // TODO(floitsch): copied from OldEmitter. Adjust or share.
+  int compareConstants(ConstantValue a, ConstantValue b) {
+    // Inlined constants don't affect the order and sometimes don't even have
+    // names.
+    int cmp1 = isConstantInlinedOrAlreadyEmitted(a) ? 0 : 1;
+    int cmp2 = isConstantInlinedOrAlreadyEmitted(b) ? 0 : 1;
+    if (cmp1 + cmp2 < 2) return cmp1 - cmp2;
+
+    // Emit constant interceptors first. Constant interceptors for primitives
+    // might be used by code that builds other constants.  See Issue 18173.
+    if (a.isInterceptor != b.isInterceptor) {
+      return a.isInterceptor ? -1 : 1;
+    }
+
+    // Sorting by the long name clusters constants with the same constructor
+    // which compresses a tiny bit better.
+    int r = namer.constantLongName(a).compareTo(namer.constantLongName(b));
+    if (r != 0) return r;
+    // Resolve collisions in the long name by using the constant name (i.e. JS
+    // name) which is unique.
+    return namer.constantName(a).compareTo(namer.constantName(b));
+  }
+
+  js.Expression generateStaticClosureAccess(FunctionElement element) {
+    return js.js('#.#()',
+        [namer.globalObjectFor(element), namer.staticClosureName(element)]);
+  }
+
+  js.Expression generateConstantReference(ConstantValue value) {
+    if (value.isFunction) {
+      FunctionConstantValue functionConstant = value;
+      return generateStaticClosureAccess(functionConstant.element);
+    }
+
+    // We are only interested in the "isInlined" part, but it does not hurt to
+    // test for the other predicates.
+    if (isConstantInlinedOrAlreadyEmitted(value)) {
+      return constantEmitter.generate(value);
+    }
+    return js.js('#.#', [namer.globalObjectForConstant(value),
+    namer.constantName(value)]);
+  }
+
+  int emitProgram(Program program) {
+    List<Fragment> fragments = program.fragments;
+    MainFragment mainFragment = fragments.first;
+
+    int totalSize = 0;
+
+    FragmentEmitter fragmentEmitter =
+        new FragmentEmitter(compiler, namer, backend, constantEmitter, this);
+
+    // We have to emit the deferred fragments first, since we need their
+    // deferred hash (which depends on the output) when emitting the main
+    // fragment.
+    List<js.Expression> fragmentsCode = fragments.skip(1).map(
+            (DeferredFragment deferredFragment) {
+          js.Expression types =
+          program.metadataTypesForOutputUnit(deferredFragment.outputUnit);
+          return fragmentEmitter.emitDeferredFragment(
+              deferredFragment, types, program.holders);
+        }).toList();
+
+    js.Statement mainAst = fragmentEmitter.emitMainFragment(program);
+
+    js.TokenCounter counter = new js.TokenCounter();
+    fragmentsCode.forEach(counter.countTokens);
+    counter.countTokens(mainAst);
+
+    program.finalizers.forEach((js.TokenFinalizer f) => f.finalizeTokens());
+
+    for (int i = 0; i < fragmentsCode.length; ++i) {
+      String code = js.prettyPrint(fragmentsCode[i], compiler).getText();
+      totalSize += code.length;
+      compiler.outputProvider(fragments[i+1].outputFileName, deferredExtension)
+        ..add(code)
+        ..close();
+    }
+
+    String mainCode = js.prettyPrint(mainAst, compiler).getText();
+    compiler.outputProvider(mainFragment.outputFileName, 'js')
+      ..add(buildGeneratedBy(compiler))
+      ..add(mainCode)
+      ..close();
+    totalSize += mainCode.length;
+
+    return totalSize;
+  }
+
+  String buildGeneratedBy(compiler) {
+    var suffix = '';
+    if (compiler.hasBuildId) suffix = ' version: ${compiler.buildId}';
+    return '// Generated by dart2js (fast startup), '
+        'the Dart to JavaScript compiler$suffix.\n';
+  }
+}
diff --git a/pkg/compiler/lib/src/mirrors/analyze.dart b/pkg/compiler/lib/src/mirrors/analyze.dart
index 8932fff..96dc594 100644
--- a/pkg/compiler/lib/src/mirrors/analyze.dart
+++ b/pkg/compiler/lib/src/mirrors/analyze.dart
@@ -11,6 +11,7 @@
 import '../../compiler.dart' as api;
 import '../apiimpl.dart' as apiimpl;
 import '../dart2jslib.dart' show Compiler;
+import '../old_to_new_api.dart';
 
 //------------------------------------------------------------------------------
 // Analysis entry point.
@@ -53,15 +54,16 @@
     diagnosticHandler(uri, begin, end, message, kind);
   }
 
-  Compiler compiler = new apiimpl.Compiler(inputProvider,
-                                           null,
-                                           internalDiagnosticHandler,
-                                           libraryRoot,
-                                           packageRoot,
-                                           options,
-                                           const {},
-                                           packageConfig,
-                                           findPackages);
+  Compiler compiler = new apiimpl.Compiler(
+      new LegacyCompilerInput(inputProvider),
+      new LegacyCompilerOutput(),
+      new LegacyCompilerDiagnostics(internalDiagnosticHandler),
+      libraryRoot,
+      packageRoot,
+      options,
+      const {},
+      packageConfig,
+      findPackages);
   compiler.librariesToAnalyzeWhenRun = libraries;
   return compiler.run(null).then((bool success) {
     if (success && !compilationFailed) {
diff --git a/pkg/compiler/lib/src/null_compiler_output.dart b/pkg/compiler/lib/src/null_compiler_output.dart
new file mode 100644
index 0000000..acc323f
--- /dev/null
+++ b/pkg/compiler/lib/src/null_compiler_output.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2015, 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.
+
+/// Null pattern implementation of the [CompilerOutput] interface.
+
+library compiler.null_api;
+
+import '../compiler_new.dart';
+import 'dart:async';
+
+/// Null pattern implementation of the [CompilerOutput] interface.
+class NullCompilerOutput implements CompilerOutput {
+  const NullCompilerOutput();
+
+  @override
+  EventSink<String> createEventSink(String name, String extension) {
+    return NullSink.outputProvider(name, extension);
+  }
+}
+
+/// A sink that drains into /dev/null.
+class NullSink implements EventSink<String> {
+  final String name;
+
+  NullSink(this.name);
+
+  add(String value) {}
+
+  void addError(Object error, [StackTrace stackTrace]) {}
+
+  void close() {}
+
+  toString() => name;
+
+  /// Convenience method for getting an [api.CompilerOutputProvider].
+  static NullSink outputProvider(String name, String extension) {
+    return new NullSink('$name.$extension');
+  }
+}
diff --git a/pkg/compiler/lib/src/old_to_new_api.dart b/pkg/compiler/lib/src/old_to_new_api.dart
new file mode 100644
index 0000000..34d6e79
--- /dev/null
+++ b/pkg/compiler/lib/src/old_to_new_api.dart
@@ -0,0 +1,52 @@
+// Copyright (c) 2015, 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.
+
+/// Implementation of the new compiler API in '../compiler_new.dart' through the
+/// old compiler API in '../compiler.dart'.
+
+library compiler.api.legacy;
+
+import 'dart:async' show EventSink, Future;
+import 'null_compiler_output.dart' show NullSink;
+import '../compiler.dart';
+import '../compiler_new.dart';
+
+/// Implementation of [CompilerInput] using a [CompilerInputProvider].
+class LegacyCompilerInput implements CompilerInput {
+  final CompilerInputProvider _inputProvider;
+
+  LegacyCompilerInput(this._inputProvider);
+
+  @override
+  Future readFromUri(Uri uri) {
+    return _inputProvider(uri);
+  }
+}
+
+/// Implementation of [CompilerDiagnostics] using a [DiagnosticHandler].
+class LegacyCompilerDiagnostics implements CompilerDiagnostics {
+  final DiagnosticHandler _handler;
+
+  LegacyCompilerDiagnostics(this._handler);
+
+  @override
+  void report(Uri uri, int begin, int end,
+                        String message, Diagnostic kind) {
+    _handler(uri, begin, end, message, kind);
+  }
+}
+
+/// Implementation of [CompilerOutput] using an optional
+/// [CompilerOutputProvider].
+class LegacyCompilerOutput implements CompilerOutput {
+  final CompilerOutputProvider _outputProvider;
+
+  LegacyCompilerOutput([this._outputProvider]);
+
+  @override
+  EventSink<String> createEventSink(String name, String extension) {
+    if (_outputProvider != null) return _outputProvider(name, extension);
+    return NullSink.outputProvider(name, extension);
+  }
+}
diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart
index 96961f3..ea44ed2 100644
--- a/pkg/compiler/lib/src/resolution/members.dart
+++ b/pkg/compiler/lib/src/resolution/members.dart
@@ -327,7 +327,16 @@
         ClassElement classElement = element;
         classElement.ensureResolved(compiler);
       }
-      return new ElementResult(registry.useElement(node, element));
+      if (element != null) {
+        registry.useElement(node, element);
+        if (element.isPrefix) {
+          return new PrefixResult(element, null);
+        } else if (element.isClass && sendIsMemberAccess) {
+          return new PrefixResult(null, element);
+        }
+        return new ElementResult(element);
+      }
+      return const NoneResult();
     }
   }
 
@@ -1638,7 +1647,6 @@
                 message: "Unexpected unary operator '${operator}'."));
             return handleUserDefinableUnary(node, operator);
         }
-        return handleUserDefinableUnary(node, operator);
       }
     } else {
       BinaryOperator operator = BinaryOperator.parse(operatorText);
@@ -1907,29 +1915,60 @@
     cls.ensureResolved(compiler);
     if (sendIsMemberAccess) {
       registry.useElement(node, cls);
-      return new ElementResult(cls);
+      return new PrefixResult(null, cls);
     } else {
       // `C` or `C()` where 'C' is a class.
       return handleClassTypeLiteralAccess(node, name, cls);
     }
   }
 
+  /// Compute a [DeferredPrefixStructure] for [node].
+  ResolutionResult handleDeferredAccess(
+      Send node,
+      PrefixElement prefix,
+      ResolutionResult result) {
+    assert(invariant(node, prefix.isDeferred,
+        message: "Prefix $prefix is not deferred."));
+    SendStructure sendStructure = registry.getSendStructure(node);
+    assert(invariant(node, sendStructure !=  null,
+        message: "No SendStructure for $node."));
+    registry.registerSendStructure(node,
+        new DeferredPrefixStructure(prefix, sendStructure));
+    if (result.isConstant) {
+      ConstantExpression constant =
+          new DeferredConstantExpression(result.constant, prefix);
+      registry.setConstant(node, constant);
+      result = new ConstantResult(node, constant);
+    }
+    return result;
+  }
+
   /// Handle qualified [Send] where the receiver resolves to a [prefix],
   /// like `prefix.toplevelFunction()` or `prefix.Class.staticField` where
   /// `prefix` is a library prefix.
   ResolutionResult handleLibraryPrefixSend(
       Send node, PrefixElement prefix, Name name) {
+    ResolutionResult result;
     Element member = prefix.lookupLocalMember(name.text);
     if (member == null) {
       registry.registerThrowNoSuchMethod();
       Element error = reportAndCreateErroneousElement(
           node, name.text, MessageKind.NO_SUCH_LIBRARY_MEMBER,
           {'libraryName': prefix.name, 'memberName': name});
-      registry.useElement(node, error);
-      return new ElementResult(error);
+      result = handleUnresolvedAccess(node, name, error);
     } else {
-      return handleResolvedSend(node, name, member);
+      result = handleResolvedSend(node, name, member);
     }
+    if (result.kind == ResultKind.PREFIX) {
+      // [member] is a class prefix of a static access like `prefix.Class` of
+      // `prefix.Class.foo`. No need to call [handleDeferredAccess]; it will
+      // called on the parent `prefix.Class.foo` node.
+      result = new PrefixResult(prefix, result.element);
+    } else if (prefix.isDeferred &&
+               (member == null || !member.isDeferredLoaderGetter)) {
+      result = handleDeferredAccess(node, prefix, result);
+    }
+    return result;
   }
 
   /// Handle a [Send] that resolves to a [prefix]. Like `prefix` in
@@ -1952,20 +1991,24 @@
       registry.useElement(node.selector, prefix);
     }
     registry.useElement(node, prefix);
-    return new ElementResult(prefix);
+    return new PrefixResult(prefix, null);
   }
 
   /// Handle qualified [Send] where the receiver resolves to an [Element], like
-  /// `a.b` where `a` is a local, field, class, or prefix, etc.
-  ResolutionResult handleResolvedQualifiedSend(
-      Send node, Name name, Element element) {
+  /// `a.b` where `a` is a prefix or a class.
+  ResolutionResult handlePrefixSend(
+      Send node, Name name, PrefixResult prefixResult) {
+    Element element = prefixResult.element;
     if (element.isPrefix) {
       return handleLibraryPrefixSend(node, element, name);
-    } else if (element.isClass) {
-      return handleStaticMemberAccess(node, name, element);
+    } else {
+      assert(element.isClass);
+      ResolutionResult result = handleStaticMemberAccess(node, name, element);
+      if (prefixResult.isDeferred) {
+        result = handleDeferredAccess(node, prefixResult.prefix, result);
+      }
+      return result;
     }
-    // TODO(johnniwinther): Use the [element].
-    return handleDynamicPropertyAccess(node, name);
   }
 
   /// Handle dynamic access of [semantics].
@@ -2045,9 +2088,10 @@
       return handleConditionalAccess(node, name);
     }
     ResolutionResult result = visitExpressionPrefix(node.receiver);
-    if (result.element != null) {
-      return handleResolvedQualifiedSend(node, name, result.element);
+    if (result.kind == ResultKind.PREFIX) {
+      return handlePrefixSend(node, name, result);
     } else {
+      // TODO(johnniwinther): Use the `element` of [result].
       return handleDynamicPropertyAccess(node, name);
     }
   }
@@ -2448,7 +2492,7 @@
     }
   }
 
-  /// Regigster read access of [target] inside a closure.
+  /// Register read access of [target] inside a closure.
   void registerPotentialAccessInClosure(Send node, Element target) {
     if (isPotentiallyMutableTarget(target)) {
       if (enclosingElement != target.enclosingElement) {
diff --git a/pkg/compiler/lib/src/resolution/registry.dart b/pkg/compiler/lib/src/resolution/registry.dart
index d71e295..1f3e943 100644
--- a/pkg/compiler/lib/src/resolution/registry.dart
+++ b/pkg/compiler/lib/src/resolution/registry.dart
@@ -556,6 +556,12 @@
     mapping.setSendStructure(node, sendStructure);
   }
 
+  // TODO(johnniwinther): Remove this when [SendStructure]s are part of the
+  // [ResolutionResult].
+  SendStructure getSendStructure(Send node) {
+    return mapping.getSendStructure(node);
+  }
+
   void registerAsyncMarker(FunctionElement element) {
     backend.registerAsyncMarker(element, world, this);
   }
diff --git a/pkg/compiler/lib/src/resolution/resolution_result.dart b/pkg/compiler/lib/src/resolution/resolution_result.dart
index ba2b74c..4b12234 100644
--- a/pkg/compiler/lib/src/resolution/resolution_result.dart
+++ b/pkg/compiler/lib/src/resolution/resolution_result.dart
@@ -10,6 +10,7 @@
   TYPE,
   ASSERT,
   CONSTANT,
+  PREFIX,
 }
 
 /// The result of resolving a node.
@@ -30,13 +31,32 @@
   bool get isConstant => false;
 }
 
+/// The prefix of top level or member access, like `prefix.member`,
+/// `prefix.Class.member` or `Class.member`.
+class PrefixResult extends ResolutionResult {
+  final PrefixElement prefix;
+  final ClassElement cls;
+
+  PrefixResult(this.prefix, this.cls);
+
+  Element get element => cls != null ? cls : prefix;
+
+  bool get isDeferred => prefix != null && prefix.isDeferred;
+
+  ResultKind get kind => ResultKind.PREFIX;
+
+  String toString() => 'PrefixResult($prefix,$cls)';
+}
+
 /// The result for the resolution of a node that points to an [Element].
 class ElementResult extends ResolutionResult {
   final Element element;
 
   ResultKind get kind => ResultKind.ELEMENT;
 
-  ElementResult(this.element);
+  ElementResult(this.element) {
+    assert(element != null);
+  }
 
   String toString() => 'ElementResult($element)';
 }
diff --git a/pkg/compiler/lib/src/resolution/semantic_visitor.dart b/pkg/compiler/lib/src/resolution/semantic_visitor.dart
index 131f52d..3c265cc 100644
--- a/pkg/compiler/lib/src/resolution/semantic_visitor.dart
+++ b/pkg/compiler/lib/src/resolution/semantic_visitor.dart
@@ -4055,6 +4055,21 @@
       NodeList arguments,
       CallStructure callStructure,
       A arg);
+
+  /// Access of library through a deferred [prefix].
+  ///
+  /// For instance
+  ///   import 'lib.dart' deferred as prefix;
+  ///
+  ///   m() => prefix.foo;
+  ///
+  /// This visit method is special in that it is called as a pre-step to calling
+  /// the visit method for the actual access. Therefore this method cannot
+  /// return a result to its caller.
+  void previsitDeferredAccess(
+      Send node,
+      PrefixElement prefix,
+      A arg);
 }
 
 abstract class SemanticDeclarationVisitor<R, A> {
diff --git a/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart b/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart
index f366052..c1dfa54 100644
--- a/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart
+++ b/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart
@@ -2478,6 +2478,14 @@
       A arg) {
     return bulkHandleNode(node, 'Lazy or `#` unhandled.', arg);
   }
+
+  @override
+  void previsitDeferredAccess(
+      Send node,
+      PrefixElement prefix,
+      A arg) {
+    bulkHandleNode(node, 'Deferred access `#` unhandled.', arg);
+  }
 }
 
 /// Mixin that implements all visitor methods for `super` calls in
@@ -3510,6 +3518,13 @@
   }
 
   @override
+  void previsitDeferredAccess(
+      Send node,
+      PrefixElement prefix,
+      A arg) {
+  }
+
+  @override
   R errorInvalidAssert(
       Send node,
       NodeList arguments,
diff --git a/pkg/compiler/lib/src/resolution/send_structure.dart b/pkg/compiler/lib/src/resolution/send_structure.dart
index cc4a9ab..a64c293 100644
--- a/pkg/compiler/lib/src/resolution/send_structure.dart
+++ b/pkg/compiler/lib/src/resolution/send_structure.dart
@@ -2304,6 +2304,30 @@
   String toString() => 'postfix($operator,$semantics)';
 }
 
+
+/// The structure for a [Send] whose prefix is a prefix for a deferred library.
+/// For instance `deferred.a` where `deferred` is a deferred prefix.
+class DeferredPrefixStructure<R, A> implements SendStructure<R, A> {
+  /// The deferred prefix element.
+  final PrefixElement prefix;
+
+  /// The send structure for the whole [Send] node. For instance a
+  /// [GetStructure] for `deferred.a` where `a` is a top level member of the
+  /// deferred library.
+  final SendStructure sendStructure;
+
+  DeferredPrefixStructure(this.prefix, this.sendStructure) {
+    assert(sendStructure != null);
+  }
+
+  @override
+  R dispatch(SemanticSendVisitor<R, A> visitor, Send send, A arg) {
+    visitor.previsitDeferredAccess(send, prefix, arg);
+    return sendStructure.dispatch(visitor, send, arg);
+  }
+}
+
+
 /// The structure for a [NewExpression] of a new invocation.
 abstract class NewStructure<R, A> implements SemanticSendStructure<R, A> {
   /// Calls the matching visit method on [visitor] with [node] and [arg].
diff --git a/pkg/compiler/lib/src/resolution/tree_elements.dart b/pkg/compiler/lib/src/resolution/tree_elements.dart
index 993c3cc..48c5430 100644
--- a/pkg/compiler/lib/src/resolution/tree_elements.dart
+++ b/pkg/compiler/lib/src/resolution/tree_elements.dart
@@ -11,7 +11,9 @@
   /// Iterables of the dependencies that this [TreeElement] records of
   /// [analyzedElement].
   Iterable<Element> get allElements;
+
   void forEachConstantNode(f(Node n, ConstantExpression c));
+  void forEachType(f(Node n, DartType t));
 
   /// A set of additional dependencies.  See [registerDependency] below.
   Iterable<Element> get otherDependencies;
@@ -173,6 +175,12 @@
 
   DartType getType(Node node) => _types != null ? _types[node] : null;
 
+  void forEachType(f(Node n, DartType t)) {
+    if (_types != null) {
+      _types.forEach(f);
+    }
+  }
+
   Iterable<Node> get superUses {
     return _superUses != null ? _superUses : const <Node>[];
   }
diff --git a/pkg/compiler/lib/src/resolved_visitor.dart b/pkg/compiler/lib/src/resolved_visitor.dart
index b07c36d..dd60417 100644
--- a/pkg/compiler/lib/src/resolved_visitor.dart
+++ b/pkg/compiler/lib/src/resolved_visitor.dart
@@ -389,6 +389,13 @@
   }
 
   @override
+  void previsitDeferredAccess(
+      Send node,
+      PrefixElement prefix,
+      ResolvedKindVisitor<R> visitor) {
+  }
+
+  @override
   R errorInvalidAssert(
       Send node,
       NodeList arguments,
diff --git a/pkg/compiler/lib/src/source_file_provider.dart b/pkg/compiler/lib/src/source_file_provider.dart
index cbc6ff3..932864a 100644
--- a/pkg/compiler/lib/src/source_file_provider.dart
+++ b/pkg/compiler/lib/src/source_file_provider.dart
@@ -10,12 +10,14 @@
 import 'dart:math' as math;
 
 import '../compiler.dart' as api show Diagnostic, DiagnosticHandler;
+import '../compiler_new.dart' as api show CompilerInput, CompilerDiagnostics;
 import 'dart2js.dart' show AbortLeg;
 import 'colors.dart' as colors;
 import 'io/source_file.dart';
 import 'filenames.dart';
 import 'util/uri_extras.dart';
 import 'dart:typed_data';
+import '../compiler_new.dart';
 
 List<int> readAll(String filename) {
   var file = (new File(filename)).openSync();
@@ -27,7 +29,7 @@
   return buffer;
 }
 
-abstract class SourceFileProvider {
+abstract class SourceFileProvider implements CompilerInput {
   bool isWindows = (Platform.operatingSystem == 'windows');
   Uri cwd = currentDirectory;
   Map<Uri, SourceFile> sourceFiles = <Uri, SourceFile>{};
@@ -100,6 +102,8 @@
          });
   }
 
+  // TODO(johnniwinther): Remove this when no longer needed for the old compiler
+  // API.
   Future/*<List<int> | String>*/ call(Uri resourceUri);
 
   relativizeUri(Uri uri) => relativize(cwd, uri, isWindows);
@@ -110,10 +114,15 @@
 }
 
 class CompilerSourceFileProvider extends SourceFileProvider {
-  Future<List<int>> call(Uri resourceUri) => readUtf8BytesFromUri(resourceUri);
+  // TODO(johnniwinther): Remove this when no longer needed for the old compiler
+  // API.
+  Future<List<int>> call(Uri resourceUri) => readFromUri(resourceUri);
+
+  @override
+  Future readFromUri(Uri uri) => readUtf8BytesFromUri(uri);
 }
 
-class FormattingDiagnosticHandler {
+class FormattingDiagnosticHandler implements CompilerDiagnostics {
   final SourceFileProvider provider;
   bool showWarnings = true;
   bool showHints = true;
@@ -160,8 +169,9 @@
     throw 'Unexpected diagnostic kind: $kind (${kind.ordinal})';
   }
 
-  void diagnosticHandler(Uri uri, int begin, int end, String message,
-                         api.Diagnostic kind) {
+  @override
+  void report(Uri uri, int begin, int end, String message,
+                        api.Diagnostic kind) {
     // TODO(ahe): Remove this when source map is handled differently.
     if (identical(kind.name, 'source map')) return;
 
@@ -223,8 +233,10 @@
     }
   }
 
+  // TODO(johnniwinther): Remove this when no longer needed for the old compiler
+  // API.
   void call(Uri uri, int begin, int end, String message, api.Diagnostic kind) {
-    return diagnosticHandler(uri, begin, end, message, kind);
+    return report(uri, begin, end, message, kind);
   }
 }
 
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index 1335674..573bde0 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -3417,10 +3417,13 @@
     }
   }
 
+  @override
+  void previsitDeferredAccess(ast.Send node, PrefixElement prefix, _) {
+    generateIsDeferredLoadedCheckIfNeeded(prefix, node);
+  }
+
   /// Read a static or top level [field].
   void generateStaticFieldGet(ast.Send node, FieldElement field) {
-    generateIsDeferredLoadedCheckOfSend(node);
-
     ConstantExpression constant =
         backend.constants.getConstantForVariable(field);
     SourceInformation sourceInformation =
@@ -3455,7 +3458,6 @@
     if (getter.isDeferredLoaderGetter) {
       generateDeferredLoaderGet(node, getter, sourceInformation);
     } else {
-      generateIsDeferredLoadedCheckOfSend(node);
       pushInvokeStatic(node, getter, <HInstruction>[],
                        sourceInformation: sourceInformation);
     }
@@ -3470,7 +3472,6 @@
 
   /// Generate a closurization of the static or top level [function].
   void generateStaticFunctionGet(ast.Send node, MethodElement function) {
-    generateIsDeferredLoadedCheckOfSend(node);
     // TODO(5346): Try to avoid the need for calling [declaration] before
     // creating an [HStatic].
     SourceInformation sourceInformation =
@@ -5185,8 +5186,6 @@
       ast.Send node,
       FunctionElement function,
       CallStructure callStructure) {
-    generateIsDeferredLoadedCheckOfSend(node);
-
     List<HInstruction> inputs = makeStaticArgumentList(
         callStructure,
         node.arguments,
@@ -5457,7 +5456,6 @@
 
   /// Generate the constant value for a constant type literal.
   void generateConstantTypeLiteral(ast.Send node) {
-    generateIsDeferredLoadedCheckOfSend(node);
     // TODO(karlklose): add type representation
     if (node.isCall) {
       // The node itself is not a constant but we register the selector (the
diff --git a/pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart b/pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart
index 6fda009..1141665 100644
--- a/pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart
+++ b/pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart
@@ -165,7 +165,7 @@
 
   /// Binding environment for variables that are assigned to effectively
   /// constant expressions (see [isEffectivelyConstant]).
-  final Map<Variable, Expression> constantEnvironment;
+  Map<Variable, Expression> constantEnvironment;
 
   /// Substitution map for labels. Any break to a label L should be substituted
   /// for a break to L' if L maps to L'.
@@ -209,10 +209,13 @@
 
   void inEmptyEnvironment(void action()) {
     List oldEnvironment = environment;
+    Map oldConstantEnvironment = constantEnvironment;
     environment = <Expression>[];
+    constantEnvironment = <Variable, Expression>{};
     action();
     assert(environment.isEmpty);
     environment = oldEnvironment;
+    constantEnvironment = oldConstantEnvironment;
   }
 
   /// Left-hand side of the given assignment, or `null` if not an assignment.
@@ -352,6 +355,7 @@
            exp is This ||
            exp is CreateInvocationMirror ||
            exp is GetStatic && exp.element.isFunction ||
+           exp is GetField && exp.objectIsNotNull && exp.field.isFinal ||
            exp is Interceptor ||
            exp is ApplyBuiltinOperator ||
            exp is VariableUse && constantEnvironment.containsKey(exp.variable);
diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
index 47d7898..73e4cfe 100644
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
@@ -258,14 +258,12 @@
     internalError(CURRENT_ELEMENT_SPANNABLE, 'Unexpected IR node: $node');
   }
 
-  Statement visitSetField(cps_ir.SetField node) {
-    return new ExpressionStatement(
-        new SetField(getVariableUse(node.object),
-                     node.field,
-                     getVariableUse(node.value)),
-        visit(node.body));
+  Expression visitSetField(cps_ir.SetField node) {
+    return new SetField(getVariableUse(node.object),
+                        node.field,
+                        getVariableUse(node.value));
   }
-
+  
   Expression visitInterceptor(cps_ir.Interceptor node) {
     return new Interceptor(getVariableUse(node.input), node.interceptedClasses);
   }
@@ -279,7 +277,8 @@
   }
 
   Expression visitGetField(cps_ir.GetField node) {
-    return new GetField(getVariableUse(node.object), node.field);
+    return new GetField(getVariableUse(node.object), node.field,
+        objectIsNotNull: node.objectIsNotNull);
   }
 
   Expression visitCreateBox(cps_ir.CreateBox node) {
@@ -300,12 +299,12 @@
 
   Statement visitLetPrim(cps_ir.LetPrim node) {
     Variable variable = getVariable(node.primitive);
-
-    // Don't translate unused primitives.
-    if (variable == null) return visit(node.body);
-
     Expression value = visit(node.primitive);
-    return Assign.makeStatement(variable, value, visit(node.body));
+    if (node.primitive.hasAtLeastOneUse) {
+      return Assign.makeStatement(variable, value, visit(node.body));
+    } else {
+      return new ExpressionStatement(value, visit(node.body));
+    }
   }
 
   Statement visitLetCont(cps_ir.LetCont node) {
@@ -412,14 +411,14 @@
     return Assign.makeStatement(variable, value, body);
   }
 
-  Expression visitGetMutableVariable(cps_ir.GetMutableVariable node) {
+  Expression visitGetMutable(cps_ir.GetMutable node) {
     return getMutableVariableUse(node.variable);
   }
 
-  Statement visitSetMutableVariable(cps_ir.SetMutableVariable node) {
+  Expression visitSetMutable(cps_ir.SetMutable node) {
     Variable variable = getMutableVariable(node.variable.definition);
     Expression value = getVariableUse(node.value);
-    return Assign.makeStatement(variable, value, visit(node.body));
+    return new Assign(variable, value);
   }
 
   Statement visitTypeCast(cps_ir.TypeCast node) {
@@ -586,12 +585,11 @@
     return continueWithExpression(node.continuation, value);
   }
 
-  Statement visitSetStatic(cps_ir.SetStatic node) {
-    SetStatic setStatic = new SetStatic(
+  Expression visitSetStatic(cps_ir.SetStatic node) {
+    return new SetStatic(
         node.element,
         getVariableUse(node.value),
         node.sourceInformation);
-    return new ExpressionStatement(setStatic, visit(node.body));
   }
 
   Expression visitApplyBuiltinOperator(cps_ir.ApplyBuiltinOperator node) {
@@ -612,7 +610,7 @@
           node.dependency);
       return continueWithExpression(node.continuation, foreignCode);
     } else {
-      assert(node.continuation == null);
+      assert(node.continuation.definition.body is cps_ir.Unreachable);
       return new ForeignStatement(
           node.codeTemplate,
           node.type,
diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
index d922d09..07a5168 100644
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
@@ -695,8 +695,9 @@
 class GetField extends Expression {
   Expression object;
   Element field;
+  bool objectIsNotNull;
 
-  GetField(this.object, this.field);
+  GetField(this.object, this.field, {this.objectIsNotNull: false});
 
   accept(ExpressionVisitor visitor) => visitor.visitGetField(this);
   accept1(ExpressionVisitor1 visitor, arg) => visitor.visitGetField(this, arg);
diff --git a/pkg/compiler/lib/src/warnings.dart b/pkg/compiler/lib/src/warnings.dart
index 350af41..e2f2fb3 100644
--- a/pkg/compiler/lib/src/warnings.dart
+++ b/pkg/compiler/lib/src/warnings.dart
@@ -2524,10 +2524,9 @@
 ''');
 
 
-  static const MessageKind MIRRORS_LIBRARY_NEW_EMITTER =
+  static const MessageKind MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND =
       const MessageKind(
-          "dart:mirrors library is not supported when using the new emitter "
-            "(DART_VM_OPTIONS='-Ddart2js.use.new.emitter=true')");
+          "dart:mirrors library is not supported when using this backend.");
 
   static const MessageKind CALL_NOT_SUPPORTED_ON_NATIVE_CLASS =
       const MessageKind(
diff --git a/pkg/dart2js_incremental/lib/caching_compiler.dart b/pkg/dart2js_incremental/lib/caching_compiler.dart
index aeab05a..2bc2047 100644
--- a/pkg/dart2js_incremental/lib/caching_compiler.dart
+++ b/pkg/dart2js_incremental/lib/caching_compiler.dart
@@ -7,9 +7,9 @@
 /// Do not call this method directly. It will be made private.
 // TODO(ahe): Make this method private.
 Future<Compiler> reuseCompiler(
-    {DiagnosticHandler diagnosticHandler,
-     CompilerInputProvider inputProvider,
-     CompilerOutputProvider outputProvider,
+    {CompilerDiagnostics diagnosticHandler,
+     CompilerInput inputProvider,
+     CompilerOutput outputProvider,
      List<String> options: const [],
      Compiler cachedCompiler,
      Uri libraryRoot,
@@ -28,7 +28,7 @@
     throw 'Missing diagnosticHandler';
   }
   if (outputProvider == null) {
-    outputProvider = NullSink.outputProvider;
+    outputProvider = const NullCompilerOutput();
   }
   if (environment == null) {
     environment = {};
@@ -185,10 +185,10 @@
 }
 
 /// Output provider which collect output in [output].
-class OutputProvider {
+class OutputProvider implements CompilerOutput {
   final Map<String, String> output = new Map<String, String>();
 
-  EventSink<String> call(String name, String extension) {
+  EventSink<String> createEventSink(String name, String extension) {
     return new StringEventSink((String data) {
       output['$name.$extension'] = data;
     });
diff --git a/pkg/dart2js_incremental/lib/compiler.dart b/pkg/dart2js_incremental/lib/compiler.dart
index 6e86667..f0a195e 100644
--- a/pkg/dart2js_incremental/lib/compiler.dart
+++ b/pkg/dart2js_incremental/lib/compiler.dart
@@ -15,6 +15,13 @@
     IncrementalCompilationFailed,
     IncrementalCompiler;
 
+import 'package:compiler/compiler_new.dart' show
+    CompilerOutput;
+
+import 'package:compiler/src/old_to_new_api.dart' show
+    LegacyCompilerDiagnostics,
+    LegacyCompilerInput;
+
 import 'package:compiler/src/source_file_provider.dart' show
     FormattingDiagnosticHandler;
 
@@ -104,8 +111,9 @@
     IncrementalCompiler compiler = new IncrementalCompiler(
         libraryRoot: libraryRoot,
         packageRoot: packageRoot,
-        inputProvider: inputProvider,
-        diagnosticHandler: resilientDiagnosticHandler,
+        inputProvider: new LegacyCompilerInput(inputProvider),
+        diagnosticHandler:
+            new LegacyCompilerDiagnostics(resilientDiagnosticHandler),
         outputProvider: outputProvider);
 
     bool success = await compiler.compile(originalInput);
@@ -142,10 +150,10 @@
 }
 
 /// Output provider which collects output in [output].
-class OutputProvider {
+class OutputProvider implements CompilerOutput {
   final Map<String, String> output = new Map<String, String>();
 
-  EventSink<String> call(String name, String extension) {
+  EventSink<String> createEventSink(String name, String extension) {
     return new StringEventSink((String data) {
       output['$name.$extension'] = data;
     });
diff --git a/pkg/dart2js_incremental/lib/dart2js_incremental.dart b/pkg/dart2js_incremental/lib/dart2js_incremental.dart
index ee04336..bcbc760 100644
--- a/pkg/dart2js_incremental/lib/dart2js_incremental.dart
+++ b/pkg/dart2js_incremental/lib/dart2js_incremental.dart
@@ -14,14 +14,14 @@
 import 'package:compiler/src/apiimpl.dart' show
     Compiler;
 
-import 'package:compiler/compiler.dart' show
-    CompilerInputProvider,
-    CompilerOutputProvider,
-    Diagnostic,
-    DiagnosticHandler;
+import 'package:compiler/compiler_new.dart' show
+    CompilerDiagnostics,
+    CompilerInput,
+    CompilerOutput,
+    Diagnostic;
 
-import 'package:compiler/src/dart2jslib.dart' show
-    NullSink;
+import 'package:compiler/src/null_compiler_output.dart' show
+    NullCompilerOutput;
 
 import 'package:compiler/src/js_backend/js_backend.dart' show
     JavaScriptBackend;
@@ -51,10 +51,10 @@
 class IncrementalCompiler {
   final Uri libraryRoot;
   final Uri packageRoot;
-  final CompilerInputProvider inputProvider;
-  final DiagnosticHandler diagnosticHandler;
+  final CompilerInput inputProvider;
+  final CompilerDiagnostics diagnosticHandler;
   final List<String> options;
-  final CompilerOutputProvider outputProvider;
+  final CompilerOutput outputProvider;
   final Map<String, dynamic> environment;
   final List<String> _updates = <String>[];
   final IncrementalCompilerContext _context = new IncrementalCompilerContext();
diff --git a/pkg/docgen/lib/src/generator.dart b/pkg/docgen/lib/src/generator.dart
index 7df0260..18ed895 100644
--- a/pkg/docgen/lib/src/generator.dart
+++ b/pkg/docgen/lib/src/generator.dart
@@ -268,10 +268,10 @@
 Future<MirrorSystem> analyzeLibraries(List<Uri> libraries, String
     libraryRoot, {String packageRoot}) {
   SourceFileProvider provider = new CompilerSourceFileProvider();
-  api.DiagnosticHandler diagnosticHandler = (new FormattingDiagnosticHandler(
+  api.DiagnosticHandler diagnosticHandler = new FormattingDiagnosticHandler(
       provider)
       ..showHints = false
-      ..showWarnings = false).diagnosticHandler;
+      ..showWarnings = false;
   Uri libraryUri = new Uri.file(appendSlash(libraryRoot));
   Uri packageUri = null;
   if (packageRoot == null) {
diff --git a/pkg/pkg.status b/pkg/pkg.status
index bc0d302..d5a359a 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -162,7 +162,6 @@
 analyzer/test/generated/element_test: Crash # The null object does not have a getter '_element'.
 analyzer/test/generated/incremental_resolver_test: Crash # The null object does not have a getter '_element'.
 analyzer/test/generated/incremental_scanner_test: Crash # The null object does not have a getter '_element'.
-analyzer/test/generated/java_core_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
 analyzer/test/generated/non_error_resolver_test: Crash # The null object does not have a getter '_element'.
 analyzer/test/generated/parser_test: Crash # The null object does not have a getter '_element'.
 analyzer/test/generated/resolver_test: Crash # The null object does not have a getter '_element'.
@@ -174,8 +173,10 @@
 analyzer/test/generated/utilities_test: Crash # The null object does not have a getter '_element'.
 analyzer/test/instrumentation/instrumentation_test: Crash # The null object does not have a getter '_element'.
 analyzer/test/parse_compilation_unit_test: Crash # The null object does not have a getter '_element'.
+analyzer/test/source/analysis_options_provider_test: Crash # The null object does not have a getter '_element'.
 analyzer/test/source/package_map_provider_test: Crash # The null object does not have a getter '_element'.
 analyzer/test/source/package_map_resolver_test: Crash # The null object does not have a getter '_element'.
+analyzer/test/source/sdk_ext_test: Crash # The null object does not have a getter '_element'.
 analyzer/test/src/context/cache_test: Crash # The null object does not have a getter '_element'.
 analyzer/test/src/context/context_test: Crash # The null object does not have a getter '_element'.
 analyzer/test/src/task/dart_test: Crash # The null object does not have a getter '_element'.
@@ -190,7 +191,4 @@
 analyzer/test/src/task/model_test: Crash # The null object does not have a getter '_element'.
 analyzer/test/src/util/asserts_test: Crash # The null object does not have a getter '_element'.
 analyzer/test/src/util/lru_map_test: Crash # The null object does not have a getter '_element'.
-fixnum/test/int_32_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-fixnum/test/int_64_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-typed_data/test/typed_buffers_test/none: RuntimeError # receiver._addHashTableEntry$2 is not a function
-typed_mock/test/typed_mock_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
+typed_data/test/typed_buffers_test/none: RuntimeError # Please triage this failure.
diff --git a/runtime/bin/builtin_natives.cc b/runtime/bin/builtin_natives.cc
index 80a03cf..844e9db 100644
--- a/runtime/bin/builtin_natives.cc
+++ b/runtime/bin/builtin_natives.cc
@@ -7,6 +7,7 @@
 #include <string.h>
 
 #include "include/dart_api.h"
+#include "include/dart_tools_api.h"
 
 #include "platform/assert.h"
 
@@ -119,6 +120,9 @@
 }
 
 
+extern bool capture_stdout;
+
+
 // Implementation of native functions which are used for some
 // test/debug functionality in standalone dart mode.
 void FUNCTION_NAME(Builtin_PrintString)(Dart_NativeArguments args) {
@@ -126,18 +130,19 @@
   uint8_t* chars = NULL;
   Dart_Handle str = Dart_GetNativeArgument(args, 0);
   Dart_Handle result = Dart_StringToUTF8(str, &chars, &length);
-  if (Dart_IsError(result)) {
-    // TODO(turnidge): Consider propagating some errors here.  What if
-    // an isolate gets interrupted by the embedder in the middle of
-    // Dart_StringToUTF8?  We need to make sure not to swallow the
-    // interrupt.
-    fprintf(stdout, "%s\n", Dart_GetError(result));
-  } else {
-    // Uses fwrite to support printing NUL bytes.
-    fwrite(chars, 1, length, stdout);
-    fputs("\n", stdout);
-  }
+  if (Dart_IsError(result)) Dart_PropagateError(result);
+
+  // Uses fwrite to support printing NUL bytes.
+  fwrite(chars, 1, length, stdout);
+  fputs("\n", stdout);
   fflush(stdout);
+  if (capture_stdout) {
+    // For now we report print output on the Stdout stream.
+    uint8_t newline[] = { '\n' };
+    Dart_ServiceSendDataEvent("Stdout", "WriteEvent", chars, length);
+    Dart_ServiceSendDataEvent("Stdout", "WriteEvent",
+                              newline, sizeof(newline));
+  }
 }
 
 }  // namespace bin
diff --git a/runtime/bin/file.cc b/runtime/bin/file.cc
index 59f8300..8175d9b 100644
--- a/runtime/bin/file.cc
+++ b/runtime/bin/file.cc
@@ -10,12 +10,22 @@
 #include "bin/utils.h"
 
 #include "include/dart_api.h"
+#include "include/dart_tools_api.h"
 
 namespace dart {
 namespace bin {
 
 static const int kMSPerSecond = 1000;
 
+// Are we capturing output from either stdout or stderr for the VM Service?
+bool capture_stdio = false;
+
+// Are we capturing output from stdout for the VM service?
+bool capture_stdout = false;
+
+// Are we capturing output from stderr for the VM service?
+bool capture_stderr = false;
+
 
 // The file pointer has been passed into Dart as an intptr_t and it is safe
 // to pull it out of Dart as a 64-bit integer, cast it to an intptr_t and
@@ -52,6 +62,18 @@
     remaining -= bytes_written;  // Reduce the number of remaining bytes.
     current_buffer += bytes_written;  // Move the buffer forward.
   }
+  if (capture_stdio) {
+    intptr_t fd = GetFD();
+    if (fd == STDOUT_FILENO && capture_stdout) {
+      Dart_ServiceSendDataEvent("Stdout", "WriteEvent",
+                                reinterpret_cast<const uint8_t*>(buffer),
+                                num_bytes);
+    } else if (fd == STDERR_FILENO && capture_stderr) {
+      Dart_ServiceSendDataEvent("Stderr", "WriteEvent",
+                                reinterpret_cast<const uint8_t*>(buffer),
+                                num_bytes);
+    }
+  }
   return true;
 }
 
@@ -581,7 +603,7 @@
 
 void FUNCTION_NAME(File_OpenStdio)(Dart_NativeArguments args) {
   int64_t fd = DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0));
-  ASSERT(fd == 0 || fd == 1 || fd == 2);
+  ASSERT(fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO);
   File* file = File::OpenStdio(static_cast<int>(fd));
   Dart_SetReturnValue(args, Dart_NewInteger(reinterpret_cast<intptr_t>(file)));
 }
@@ -589,7 +611,7 @@
 
 void FUNCTION_NAME(File_GetStdioHandleType)(Dart_NativeArguments args) {
   int64_t fd = DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0));
-  ASSERT(fd == 0 || fd == 1 || fd == 2);
+  ASSERT(fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO);
   File::StdioHandleType type = File::GetStdioHandleType(static_cast<int>(fd));
   Dart_SetReturnValue(args, Dart_NewInteger(type));
 }
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index cebd7e6..5b14dff 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -859,6 +859,37 @@
 }
 
 
+extern bool capture_stdio;
+extern bool capture_stdout;
+extern bool capture_stderr;
+static const char* kStdoutStreamId = "Stdout";
+static const char* kStderrStreamId = "Stderr";
+
+
+static bool ServiceStreamListenCallback(const char* stream_id) {
+  if (strcmp(stream_id, kStdoutStreamId) == 0) {
+    capture_stdio = true;
+    capture_stdout = true;
+    return true;
+  } else if (strcmp(stream_id, kStderrStreamId) == 0) {
+    capture_stdio = true;
+    capture_stderr = true;
+    return true;
+  }
+  return false;
+}
+
+
+static void ServiceStreamCancelCallback(const char* stream_id) {
+  if (strcmp(stream_id, kStdoutStreamId) == 0) {
+    capture_stdout = false;
+  } else if (strcmp(stream_id, kStderrStreamId) == 0) {
+    capture_stderr = false;
+  }
+  capture_stdio = (capture_stdout || capture_stderr);
+}
+
+
 void main(int argc, char** argv) {
   char* script_name;
   const int EXTRA_VM_ARGUMENTS = 2;
@@ -947,6 +978,8 @@
 
   Dart_RegisterIsolateServiceRequestCallback(
         "getIO", &ServiceGetIOHandler, NULL);
+  Dart_SetServiceStreamCallbacks(&ServiceStreamListenCallback,
+                                 &ServiceStreamCancelCallback);
 
   // Call CreateIsolateAndSetup which creates an isolate and loads up
   // the specified application script.
diff --git a/runtime/include/dart_tools_api.h b/runtime/include/dart_tools_api.h
index f2bc2a4..cd096de 100644
--- a/runtime/include/dart_tools_api.h
+++ b/runtime/include/dart_tools_api.h
@@ -807,6 +807,74 @@
 
 /*
  * ========
+ * Event Streams
+ * ========
+ */
+
+/**
+ * A callback invoked when the VM service gets a request to listen to
+ * some stream.
+ *
+ * \return Returns true iff the embedder supports the named stream id.
+ */
+typedef bool (*Dart_ServiceStreamListenCallback)(const char* stream_id);
+
+/**
+ * A callback invoked when the VM service gets a request to cancel
+ * some stream.
+ */
+typedef void (*Dart_ServiceStreamCancelCallback)(const char* stream_id);
+
+/**
+ * Adds VM service stream callbacks.
+ *
+ * \param listen_callback A function pointer to a listen callback function.
+ *   A listen callback function should not be already set when this function
+ *   is called. A NULL value removes the existing listen callback function
+ *   if any.
+ *
+ * \param cancel_callback A function pointer to a cancel callback function.
+ *   A cancel callback function should not be already set when this function
+ *   is called. A NULL value removes the existing cancel callback function
+ *   if any.
+ *
+ * \return Success if the callbacks were added.  Otherwise, returns an
+ *   error handle.
+ */
+DART_EXPORT Dart_Handle Dart_SetServiceStreamCallbacks(
+    Dart_ServiceStreamListenCallback listen_callback,
+    Dart_ServiceStreamCancelCallback cancel_callback);
+
+/**
+ * Sends a data event to clients of the VM Service.
+ *
+ * A data event is used to pass an array of bytes to subscribed VM
+ * Service clients.  For example, in the standalone embedder, this is
+ * function used to provide WriteEvents on the Stdout and Stderr
+ * streams.
+ *
+ * If the embedder passes in a stream id for which no client is
+ * subscribed, then the event is ignored.
+ *
+ * \param stream_id The id of the stream on which to post the event.
+ *
+ * \param event_kind A string identifying what kind of event this is.
+ *   For example, 'WriteEvent'.
+ *
+ * \param bytes A pointer to an array of bytes.
+ *
+ * \param bytes_length The length of the byte array.
+ *
+ * \return Success if the arguments are well formed.  Otherwise, returns an
+ *   error handle.
+ */
+DART_EXPORT Dart_Handle Dart_ServiceSendDataEvent(const char* stream_id,
+                                                  const char* event_kind,
+                                                  const uint8_t* bytes,
+                                                  intptr_t bytes_length);
+
+/*
+ * ========
  * Timeline
  * ========
  */
diff --git a/runtime/lib/invocation_mirror_patch.dart b/runtime/lib/invocation_mirror_patch.dart
index e06c531..cc820cb 100644
--- a/runtime/lib/invocation_mirror_patch.dart
+++ b/runtime/lib/invocation_mirror_patch.dart
@@ -89,6 +89,7 @@
         _namedArguments[new internal.Symbol.unvalidated(arg_name)] =
             arg_value;
       }
+      _namedArguments = new Map.unmodifiable(_namedArguments);
     }
     return _namedArguments;
   }
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index 378e6eb..5199f19 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -217,11 +217,15 @@
 }
 
 
-DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 4) {
+DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 7) {
   GET_NON_NULL_NATIVE_ARGUMENT(SendPort, port, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Instance, closure, arguments->NativeArgAt(1));
   GET_NON_NULL_NATIVE_ARGUMENT(Instance, message, arguments->NativeArgAt(2));
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, paused, arguments->NativeArgAt(3));
+  GET_NATIVE_ARGUMENT(Bool, fatalErrors, arguments->NativeArgAt(4));
+  GET_NATIVE_ARGUMENT(SendPort, onExit, arguments->NativeArgAt(5));
+  GET_NATIVE_ARGUMENT(SendPort, onError, arguments->NativeArgAt(6));
+
   if (closure.IsClosure()) {
     Function& func = Function::Handle();
     func = Closure::function(closure);
@@ -233,10 +237,18 @@
 #endif
       // Get the parent function so that we get the right function name.
       func = func.parent_function();
+
+      bool fatal_errors = fatalErrors.IsNull() ? true : fatalErrors.value();
+      Dart_Port on_exit_port = onExit.IsNull() ? ILLEGAL_PORT : onExit.Id();
+      Dart_Port on_error_port = onError.IsNull() ? ILLEGAL_PORT : onError.Id();
+
       Spawn(isolate, new IsolateSpawnState(port.Id(),
                                            func,
                                            message,
-                                           paused.value()));
+                                           paused.value(),
+                                           fatal_errors,
+                                           on_exit_port,
+                                           on_error_port));
       return Object::null();
     }
   }
@@ -247,7 +259,7 @@
 }
 
 
-DEFINE_NATIVE_ENTRY(Isolate_spawnUri, 7) {
+DEFINE_NATIVE_ENTRY(Isolate_spawnUri, 10) {
   GET_NON_NULL_NATIVE_ARGUMENT(SendPort, port, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(String, uri, arguments->NativeArgAt(1));
   GET_NON_NULL_NATIVE_ARGUMENT(Instance, args, arguments->NativeArgAt(2));
@@ -255,6 +267,9 @@
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, paused, arguments->NativeArgAt(4));
   GET_NATIVE_ARGUMENT(Bool, checked, arguments->NativeArgAt(5));
   GET_NATIVE_ARGUMENT(String, package_root, arguments->NativeArgAt(6));
+  GET_NATIVE_ARGUMENT(Bool, fatalErrors, arguments->NativeArgAt(7));
+  GET_NATIVE_ARGUMENT(SendPort, onExit, arguments->NativeArgAt(8));
+  GET_NATIVE_ARGUMENT(SendPort, onError, arguments->NativeArgAt(9));
 
   // Canonicalize the uri with respect to the current isolate.
   char* error = NULL;
@@ -275,12 +290,19 @@
     utf8_package_root[len] = '\0';
   }
 
+  bool fatal_errors = fatalErrors.IsNull() ? true : fatalErrors.value();
+  Dart_Port on_exit_port = onExit.IsNull() ? ILLEGAL_PORT : onExit.Id();
+  Dart_Port on_error_port = onError.IsNull() ? ILLEGAL_PORT : onError.Id();
+
   IsolateSpawnState* state = new IsolateSpawnState(port.Id(),
                                                    canonical_uri,
                                                    utf8_package_root,
                                                    args,
                                                    message,
-                                                   paused.value());
+                                                   paused.value(),
+                                                   fatal_errors,
+                                                   on_exit_port,
+                                                   on_error_port);
   // If we were passed a value then override the default flags state for
   // checked mode.
   if (!checked.IsNull()) {
diff --git a/runtime/lib/isolate_patch.dart b/runtime/lib/isolate_patch.dart
index 1fd87bf..7e1c496 100644
--- a/runtime/lib/isolate_patch.dart
+++ b/runtime/lib/isolate_patch.dart
@@ -274,13 +274,16 @@
   /* patch */ static Isolate get current => _currentIsolate;
 
   /* patch */ static Future<Isolate> spawn(
-      void entryPoint(message), var message, { bool paused: false }) {
+      void entryPoint(message), var message,
+      {bool paused: false, bool errorsAreFatal,
+       SendPort onExit, SendPort onError}) {
     // `paused` isn't handled yet.
     RawReceivePort readyPort;
     try {
       // The VM will invoke [_startIsolate] with entryPoint as argument.
       readyPort = new RawReceivePort();
-      _spawnFunction(readyPort.sendPort, entryPoint, message, paused);
+      _spawnFunction(readyPort.sendPort, entryPoint, message,
+                     paused, errorsAreFatal, onExit, onError);
       Completer completer = new Completer<Isolate>.sync();
       readyPort.handler = (readyMessage) {
         readyPort.close();
@@ -303,7 +306,8 @@
 
   /* patch */ static Future<Isolate> spawnUri(
       Uri uri, List<String> args, var message,
-      { bool paused: false, bool checked, Uri packageRoot }) {
+      {bool paused: false, bool checked, Uri packageRoot, bool errorsAreFatal,
+       SendPort onExit, SendPort onError}) {
     RawReceivePort readyPort;
     try {
       // The VM will invoke [_startIsolate] and not `main`.
@@ -311,7 +315,8 @@
       var packageRootString =
           (packageRoot == null) ? null : packageRoot.toString();
       _spawnUri(readyPort.sendPort, uri.toString(), args, message,
-                paused, checked, packageRootString);
+                paused, checked, packageRootString,
+                errorsAreFatal, onExit, onError);
       Completer completer = new Completer<Isolate>.sync();
       readyPort.handler = (readyMessage) {
         readyPort.close();
@@ -348,12 +353,14 @@
 
 
   static void _spawnFunction(SendPort readyPort, Function topLevelFunction,
-                             var message, bool paused)
+                             var message, bool paused, bool errorsAreFatal,
+                             SendPort onExit, SendPort onError)
       native "Isolate_spawnFunction";
 
   static void _spawnUri(SendPort readyPort, String uri,
                         List<String> args, var message,
-                        bool paused, bool checked, String packageRoot)
+                        bool paused, bool checked, String packageRoot,
+                        bool errorsAreFatal, SendPort onExit, SendPort onError)
       native "Isolate_spawnUri";
 
   static void _sendOOB(port, msg) native "Isolate_sendOOB";
diff --git a/runtime/observatory/lib/object_graph.dart b/runtime/observatory/lib/object_graph.dart
index 0035580..60e720d 100644
--- a/runtime/observatory/lib/object_graph.dart
+++ b/runtime/observatory/lib/object_graph.dart
@@ -10,13 +10,83 @@
 
 import 'package:logging/logging.dart';
 
+class _JenkinsSmiHash {
+  static int combine(int hash, int value) {
+    hash = 0x1fffffff & (hash + value);
+    hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
+    return hash ^ (hash >> 6);
+  }
+
+  static int finish(int hash) {
+    hash = 0x1fffffff & (hash + ((0x03ffffff & hash) <<  3));
+    hash = hash ^ (hash >> 11);
+    return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
+  }
+
+  static int hash3(a, b, c) => finish(combine(combine(combine(0, a), b), c));
+}
+
+// Map<[uint32, uint32, uint32], uint32>
+class AddressMapper {
+  final Uint32List _table;
+
+  // * 4 ~/3 for 75% load factor
+  // * 4 for four-tuple entries
+  AddressMapper(int N) : _table = new Uint32List((N * 4 ~/ 3) * 4);
+
+  int _scanFor(int high, int mid, int low) {
+    var hash = _JenkinsSmiHash.hash3(high, mid, low);
+    var start = (hash % _table.length) & ~3;
+    var index = start;
+    do {
+      if (_table[index + 3] == 0) return index;
+      if (_table[index] == high &&
+          _table[index + 1] == mid &&
+          _table[index + 2] == low) return index;
+      index = (index + 4) % _table.length;
+    } while (index != start);
+
+    throw new Exception("Interal error: table full");
+  }
+
+  int get(int high, int mid, int low) {
+    int index = _scanFor(high, mid, low);
+    if (_table[index + 3] == 0) return null;
+    return _table[index + 3];
+  }
+
+  int put(int high, int mid, int low, int id) {
+    if (id == 0) throw new Exception("Internal error: invalid id");
+
+    int index = _scanFor(high, mid, low);
+    if ((_table[index + 3] != 0)) {
+      throw new Exception("Internal error: attempt to overwrite key");
+    }
+    _table[index] = high;
+    _table[index + 1] = mid;
+    _table[index + 2] = low;
+    _table[index + 3] = id;
+    return id;
+  }
+}
+
+
 // Port of dart::ReadStream from vm/datastream.h.
-class _ReadStream {
+//
+// The heap snapshot is a series of variable-length unsigned integers. For
+// each byte in the stream, the high bit marks the last byte of an integer and
+// the low 7 bits are the payload. The payloads are sent in little endian
+// order.
+// The largest values used are 64-bit addresses.
+// We read in 4 payload chunks (28-bits) to stay in Smi range on Javascript.
+// We read them into instance variables ('low', 'mid' and 'high') to avoid
+// allocating a container.
+class ReadStream {
   int position = 0;
   int _size = 0;
   final List<ByteData> _chunks;
 
-  _ReadStream(this._chunks) {
+  ReadStream(this._chunks) {
     int n = _chunks.length;
     for (var i = 0; i < n; i++) {
       var chunk = _chunks[i];
@@ -29,21 +99,109 @@
 
   int get pendingBytes => _size - position;
 
-  int getUint8(i) {
+  int _getUint8(i) {
     return _chunks[i >> 20].getUint8(i & 0xFFFFF);
   }
 
-  int readUnsigned() {
-    int result = 0;
-    int shift = 0;
-    while (getUint8(position) <= maxUnsignedDataPerByte) {
-      result |= getUint8(position) << shift;
-      shift += dataBitsPerByte;
-      position++;
+  int low = 0;
+  int mid = 0;
+  int high = 0;
+
+  int get clampedUint32 {
+    if (high != 0 || mid > 0xF) {
+      return 0xFFFFFFFF;
+    } else {
+      // Not shift as JS shifts are signed 32-bit.
+      return mid * 0x10000000 + low;
     }
-    result |= (getUint8(position) & byteMask) << shift;
-    position++;
-    return result;
+  }
+
+  bool get isZero {
+    return (high == 0) && (mid == 0) && (low == 0);
+  }
+
+  void readUnsigned() {
+    low = 0;
+    mid = 0;
+    high = 0;
+
+    // Low 28 bits.
+    var digit = _getUint8(position++);
+    if (digit > maxUnsignedDataPerByte) {
+      low |= (digit & byteMask << 0);
+      return;
+    }
+    low |= (digit << 0);
+
+    digit = _getUint8(position++);
+    if (digit > maxUnsignedDataPerByte) {
+      low |= ((digit & byteMask) << 7);
+      return;
+    }
+    low |= (digit << 7);
+
+    digit = _getUint8(position++);
+    if (digit > maxUnsignedDataPerByte) {
+      low |= ((digit & byteMask) << 14);
+      return;
+    }
+    low |= (digit << 14);
+
+    digit = _getUint8(position++);
+    if (digit > maxUnsignedDataPerByte) {
+      low |= ((digit & byteMask) << 21);
+      return;
+    }
+    low |= (digit << 21);
+
+    // Mid 28 bits.
+    digit = _getUint8(position++);
+    if (digit > maxUnsignedDataPerByte) {
+      mid |= (digit & byteMask << 0);
+      return;
+    }
+    mid |= (digit << 0);
+
+    digit = _getUint8(position++);
+    if (digit > maxUnsignedDataPerByte) {
+      mid |= ((digit & byteMask) << 7);
+      return;
+    }
+    mid |= (digit << 7);
+
+    digit = _getUint8(position++);
+    if (digit > maxUnsignedDataPerByte) {
+      mid |= ((digit & byteMask) << 14);
+      return;
+    }
+    mid |= (digit << 14);
+
+    digit = _getUint8(position++);
+    if (digit > maxUnsignedDataPerByte) {
+      mid |= ((digit & byteMask) << 21);
+      return;
+    }
+    mid |= (digit << 21);
+
+    // High 28 bits.
+    digit = _getUint8(position++);
+    if (digit > maxUnsignedDataPerByte) {
+      high |= (digit & byteMask << 0);
+      return;
+    }
+    high |= (digit << 0);
+
+    digit = _getUint8(position++);
+    if (digit > maxUnsignedDataPerByte) {
+      high |= ((digit & byteMask) << 7);
+      return;
+    }
+    high |= (digit << 7);
+    throw new Exception("Format error: snapshot field exceeds 64 bits");
+  }
+
+  void skipUnsigned() {
+    while (_getUint8(position++) <= maxUnsignedDataPerByte);
   }
 
   static const int dataBitsPerByte = 7;
@@ -67,30 +225,52 @@
   ObjectVertex get dominator => new ObjectVertex._(_graph._doms[_id], _graph);
 
   int get shallowSize {
-    var stream = new _ReadStream(_graph._chunks);
+    var stream = new ReadStream(_graph._chunks);
     stream.position = _graph._positions[_id];
-    stream.readUnsigned(); // addr
-    return stream.readUnsigned(); // shallowSize
+    stream.skipUnsigned(); // addr
+    stream.readUnsigned(); // shallowSize
+    return stream.clampedUint32;
   }
 
   int get vmCid {
-    var stream = new _ReadStream(_graph._chunks);
+    var stream = new ReadStream(_graph._chunks);
     stream.position = _graph._positions[_id];
-    stream.readUnsigned(); // addr
-    stream.readUnsigned(); // shallowSize
-    return stream.readUnsigned(); // cid
+    stream.skipUnsigned(); // addr
+    stream.skipUnsigned(); // shallowSize
+    stream.readUnsigned(); // cid
+    return stream.clampedUint32;
   }
 
   get successors => new _SuccessorsIterable(_graph, _id);
 
-  int get address {
+  String get address {
     // Note that everywhere else in this file, "address" really means an address
     // scaled down by kObjectAlignment. They were scaled down so they would fit
     // into Smis on the client.
-    var stream = new _ReadStream(_graph._chunks);
+    var stream = new ReadStream(_graph._chunks);
     stream.position = _graph._positions[_id];
-    var scaledAddr = stream.readUnsigned();
-    return scaledAddr * _graph._kObjectAlignment;
+    stream.readUnsigned();
+
+    // Complicated way to do (high:mid:low * _kObjectAlignment).toHexString()
+    // without intermediate values exceeding int32.
+
+    var strAddr = "";
+    var carry = 0;
+    combine4(nibble) {
+      nibble = nibble * _graph._kObjectAlignment + carry;
+      carry = nibble >> 4;
+      nibble = nibble & 0xF;
+      strAddr = nibble.toRadixString(16) + strAddr;
+    }
+    combine28(twentyEightBits) {
+      for (int shift = 0; shift < 28; shift += 4) {
+        combine4((twentyEightBits >> shift) & 0xF);
+      }
+    }
+    combine28(stream.low);
+    combine28(stream.mid);
+    combine28(stream.high);
+    return strAddr;
   }
 
   List<ObjectVertex> dominatorTreeChildren() {
@@ -121,24 +301,23 @@
 
 class _SuccessorsIterator implements Iterator<ObjectVertex> {
   final ObjectGraph _graph;
-  _ReadStream _stream;
+  ReadStream _stream;
 
   ObjectVertex current;
 
   _SuccessorsIterator(this._graph, int id) {
-    _stream = new _ReadStream(this._graph._chunks);
+    _stream = new ReadStream(this._graph._chunks);
     _stream.position = _graph._positions[id];
-    _stream.readUnsigned(); // addr
-    _stream.readUnsigned(); // shallowSize
-    var cid = _stream.readUnsigned();
-    assert((cid & ~0xFFFF) == 0); // Sanity check: cid's are 16 bit.
+    _stream.skipUnsigned(); // addr
+    _stream.skipUnsigned(); // shallowSize
+    _stream.skipUnsigned(); // cid
   }
 
   bool moveNext() {
     while (true) {
-      var nextAddr = _stream.readUnsigned();
-      if (nextAddr == 0) return false;
-      var nextId = _graph._addrToId[nextAddr];
+      _stream.readUnsigned();
+      if (_stream.isZero) return false;
+      var nextId = _graph._addrToId.get(_stream.high, _stream.mid, _stream.low);
       if (nextId == null) continue; // Reference to VM isolate's heap.
       current = new ObjectVertex._(nextId, _graph);
       return true;
@@ -232,7 +411,7 @@
   int _E;
   int _size;
 
-  Map<int, int> _addrToId = new Map<int, int>();
+  AddressMapper _addrToId;
 
   // Indexed by node id, with id 0 representing invalid/uninitialized.
   Uint32List _positions; // Position of the node in the snapshot.
@@ -245,32 +424,34 @@
 
   void _buildPositions() {
     var N = _N;
-    var addrToId = _addrToId;
+    var addrToId = new AddressMapper(N);
 
     var positions = new Uint32List(N + 1);
 
-    var stream = new _ReadStream(_chunks);
-    _kObjectAlignment = stream.readUnsigned();
+    var stream = new ReadStream(_chunks);
+    stream.readUnsigned();
+    _kObjectAlignment = stream.clampedUint32;
 
     var id = 1;
     while (stream.pendingBytes > 0) {
       positions[id] = stream.position;
-      var addr = stream.readUnsigned();
-      stream.readUnsigned(); // shallowSize
-      stream.readUnsigned(); // cid
-      addrToId[addr] = id;
+      stream.readUnsigned(); // addr
+      addrToId.put(stream.high, stream.mid, stream.low, id);
+      stream.skipUnsigned(); // shallowSize
+      stream.skipUnsigned(); // cid
 
-      var succAddr = stream.readUnsigned();
-      while (succAddr != 0) {
-        succAddr = stream.readUnsigned();
+      stream.readUnsigned();
+      while (!stream.isZero) {
+        stream.readUnsigned();
       }
       id++;
     }
     assert(id == (N + 1));
 
-    var root = addrToId[0];
+    var root = addrToId.get(0, 0, 0);
     assert(root == 1);
 
+    _addrToId = addrToId;
     _positions = positions;
   }
 
@@ -292,11 +473,11 @@
 
     stackNodes[0] = root;
 
-    var stream = new _ReadStream(_chunks);
+    var stream = new ReadStream(_chunks);
     stream.position = positions[root];
-    stream.readUnsigned(); // addr
-    stream.readUnsigned(); // shallowSize
-    stream.readUnsigned(); // cid
+    stream.skipUnsigned(); // addr
+    stream.skipUnsigned(); // shallowSize
+    stream.skipUnsigned(); // cid
     stackCurrentEdgePos[0] = stream.position;
     visited[root] = 1;
 
@@ -305,10 +486,10 @@
       var edgePos = stackCurrentEdgePos[stackTop];
 
       stream.position = edgePos;
-      var childAddr = stream.readUnsigned();
-      if (childAddr != 0) {
+      stream.readUnsigned();  // childAddr
+      if (!stream.isZero) {
         stackCurrentEdgePos[stackTop] = stream.position;
-        var childId = addrToId[childAddr];
+        var childId = addrToId.get(stream.high, stream.mid, stream.low);
         if (childId == null) continue; // Reference to VM isolate's heap.
         E++;
         if (visited[childId] == 1) continue;
@@ -317,9 +498,9 @@
         stackNodes[stackTop] = childId;
 
         stream.position = positions[childId];
-        stream.readUnsigned(); // addr
-        stream.readUnsigned(); // shallowSize
-        stream.readUnsigned(); // cid
+        stream.skipUnsigned(); // addr
+        stream.skipUnsigned(); // shallowSize
+        stream.skipUnsigned(); // cid
         stackCurrentEdgePos[stackTop] = stream.position; // i.e., first edge
         visited[childId] = 1;
       } else {
@@ -353,21 +534,21 @@
     var preds = new Uint32List(E);
 
     // Count predecessors of each node.
-    var stream = new _ReadStream(_chunks);
+    var stream = new ReadStream(_chunks);
     for (var i = 1; i <= N; i++) {
       stream.position = positions[i];
-      stream.readUnsigned(); // addr
-      stream.readUnsigned(); // shallowSize
-      stream.readUnsigned(); // cid
-      var succAddr = stream.readUnsigned();
-      while (succAddr != 0) {
-        var succId = addrToId[succAddr];
+      stream.skipUnsigned(); // addr
+      stream.skipUnsigned(); // shallowSize
+      stream.skipUnsigned(); // cid
+      stream.readUnsigned(); // succAddr
+      while (!stream.isZero) {
+        var succId = addrToId.get(stream.high, stream.mid, stream.low);
         if (succId != null) {
           numPreds[succId]++;
         } else {
           // Reference to VM isolate's heap.
         }
-        succAddr = stream.readUnsigned();
+        stream.readUnsigned(); // succAddr
       }
     }
 
@@ -387,19 +568,19 @@
     // Fill predecessors array.
     for (var i = 1; i <= N; i++) {
       stream.position = positions[i];
-      stream.readUnsigned(); // addr
-      stream.readUnsigned(); // shallowSize
-      stream.readUnsigned(); // cid
-      var succAddr = stream.readUnsigned();
-      while (succAddr != 0) {
-        var succId = addrToId[succAddr];
+      stream.skipUnsigned(); // addr
+      stream.skipUnsigned(); // shallowSize
+      stream.skipUnsigned(); // cid
+      stream.readUnsigned(); // succAddr
+      while (!stream.isZero) {
+        var succId = addrToId.get(stream.high, stream.mid, stream.low);
         if (succId != null) {
           var predIndex = nextPreds[succId]++;
           preds[predIndex] = i;
         } else {
           // Reference to VM isolate's heap.
         }
-        succAddr = stream.readUnsigned();
+        stream.readUnsigned(); // succAddr
       }
     }
 
@@ -495,11 +676,12 @@
     var retainedSizes = new Uint32List(N + 1);
 
     // Start with retained size as shallow size.
-    var reader = new _ReadStream(_chunks);
+    var reader = new ReadStream(_chunks);
     for (var i = 1; i <= N; i++) {
       reader.position = positions[i];
-      reader.readUnsigned(); // addr
-      var shallowSize = reader.readUnsigned();
+      reader.skipUnsigned(); // addr
+      reader.readUnsigned(); // shallowSize
+      var shallowSize = reader.clampedUint32;
       retainedSizes[i] = shallowSize;
       size += shallowSize;
     }
diff --git a/runtime/observatory/lib/service.dart b/runtime/observatory/lib/service.dart
index 62b99dd..d72af88 100644
--- a/runtime/observatory/lib/service.dart
+++ b/runtime/observatory/lib/service.dart
@@ -5,6 +5,7 @@
 library service;
 
 import 'dart:async';
+import 'dart:convert';
 import 'dart:typed_data';
 import 'dart:math' as math;
 
diff --git a/runtime/observatory/lib/src/app/analytics.dart b/runtime/observatory/lib/src/app/analytics.dart
index 74efc7f..cb6a91f 100644
--- a/runtime/observatory/lib/src/app/analytics.dart
+++ b/runtime/observatory/lib/src/app/analytics.dart
@@ -19,8 +19,13 @@
 
   /// Called whenever an Observatory page is viewed.
   static Future reportPageView(Uri uri) {
-    // The screen name is the uri's path. e.g. inspect, profile.
-    final screenName = uri.path;
-    return _googleAnalytics.sendScreenView(screenName);
+    // Only report analytics when running in JavaScript.
+    if (Utils.runningInJavaScript()) {
+      // The screen name is the uri's path. e.g. inspect, profile.
+      final screenName = uri.path;
+      return _googleAnalytics.sendScreenView(screenName);
+    } else {
+      return new Future.value(null);
+    }
   }
 }
diff --git a/runtime/observatory/lib/src/cli/command.dart b/runtime/observatory/lib/src/cli/command.dart
index 0f57376..d6be00d 100644
--- a/runtime/observatory/lib/src/cli/command.dart
+++ b/runtime/observatory/lib/src/cli/command.dart
@@ -170,12 +170,12 @@
     var commands =  _match(args, true);
     if (commands.isEmpty) {
       // TODO(turnidge): Add a proper exception class for this.
-      return new Future.error('notfound');
+      return new Future.error('No such command');
     } else if (commands.length == 1) {
       return commands[0].run(args.sublist(commands[0]._depth));
     } else {
       // TODO(turnidge): Add a proper exception class for this.
-      return new Future.error('ambiguous');
+      return new Future.error('Ambiguous command');
     }
   }
 
diff --git a/runtime/observatory/lib/src/cpu_profile/cpu_profile.dart b/runtime/observatory/lib/src/cpu_profile/cpu_profile.dart
index 7be5a01..c29b30e 100644
--- a/runtime/observatory/lib/src/cpu_profile/cpu_profile.dart
+++ b/runtime/observatory/lib/src/cpu_profile/cpu_profile.dart
@@ -598,6 +598,7 @@
 }
 
 
+// TODO(johnmccutchan): Rename to SampleProfile
 class CpuProfile {
   final double MICROSECONDS_PER_SECOND = 1000000.0;
   final double displayThreshold = 0.0002; // 0.02%.
diff --git a/runtime/observatory/lib/src/elements/class_view.dart b/runtime/observatory/lib/src/elements/class_view.dart
index d839614..7ca6fb8 100644
--- a/runtime/observatory/lib/src/elements/class_view.dart
+++ b/runtime/observatory/lib/src/elements/class_view.dart
@@ -6,6 +6,8 @@
 
 import 'dart:async';
 import 'observatory_element.dart';
+import 'package:observatory/cpu_profile.dart';
+import 'package:observatory/elements.dart';
 import 'package:observatory/service.dart';
 import 'package:polymer/polymer.dart';
 
@@ -61,4 +63,24 @@
   Future refreshCoverage() {
     return cls.refreshCoverage();
   }
+
+  final CpuProfile profile = new CpuProfile();
+
+  Future refreshAllocationProfile() async {
+    var profileResponse = await cls.getAllocationSamples('UserVM');
+    profile.load(profileResponse.isolate, profileResponse);
+    CpuProfileTreeElement cpuProfileTreeElement =
+        shadowRoot.querySelector('#cpuProfileTree');
+    cpuProfileTreeElement.profile = profile;
+    cpuProfileTreeElement.direction = ProfileTreeDirection.Exclusive;
+    cpuProfileTreeElement.mode = ProfileTreeMode.Function;
+    cpuProfileTreeElement.render();
+  }
+
+  Future toggleAllocationTrace() {
+    if (cls == null) {
+      return new Future(refresh);
+    }
+    return cls.setTraceAllocations(!cls.traceAllocations).whenComplete(refresh);
+  }
 }
diff --git a/runtime/observatory/lib/src/elements/class_view.html b/runtime/observatory/lib/src/elements/class_view.html
index ad85d16..beddb21 100644
--- a/runtime/observatory/lib/src/elements/class_view.html
+++ b/runtime/observatory/lib/src/elements/class_view.html
@@ -1,4 +1,6 @@
 <link rel="import" href="../../../../packages/polymer/polymer.html">
+<link rel="import" href="action_link.html">
+<link rel="import" href="cpu_profile.html">
 <link rel="import" href="curly_block.html">
 <link rel="import" href="eval_box.html">
 <link rel="import" href="eval_link.html">
@@ -21,6 +23,7 @@
       <isolate-nav-menu isolate="{{ cls.isolate }}"></isolate-nav-menu>
       <library-nav-menu library="{{ cls.library }}"></library-nav-menu>
       <class-nav-menu cls="{{ cls }}" last="{{ true }}"></class-nav-menu>
+      <nav-refresh callback="{{ refreshAllocationProfile }}" label="Refresh Allocation Profile"></nav-refresh>
       <nav-refresh callback="{{ refreshCoverage }}" label="Refresh Coverage"></nav-refresh>
       <nav-refresh callback="{{ refresh }}"></nav-refresh>
     </nav-bar>
@@ -206,6 +209,35 @@
 
     <hr>
 
+    <div class="content">
+      <h2>Allocations</h2>
+      <div class="memberList">
+        <template if="{{ cls.traceAllocations }}">
+          <div class="memberItem">
+            <div class="memberName">Tracing allocations?</div>
+            <div class="memberValue">
+              <span>Yes</span><action-link label="disable" callback="{{ toggleAllocationTrace }}"></action-link>
+            </div>
+          </div>
+        </template>
+        <template if="{{ !cls.traceAllocations }}">
+          <div class="memberItem">
+            <div class="memberName">Tracing allocations?</div>
+            <div class="memberValue">
+              <span>No</span><action-link label="enable" callback="{{ toggleAllocationTrace }}"></action-link>
+            </div>
+          </div>
+        </template>
+      </div>
+      <div class="flex-row centered">
+        <div class="flex-item-90-percent outlined" style="margin: 16px; margin-left: 8px; margin-right: 8px">
+          <cpu-profile-tree id="cpuProfileTree"></cpu-profile-tree>
+        </div>
+      </div>
+    </div>
+
+    <hr>
+
     <div class="content-centered-big">
       <source-inset location="{{ cls.location }}">
       </source-inset>
diff --git a/runtime/observatory/lib/src/elements/cpu_profile.dart b/runtime/observatory/lib/src/elements/cpu_profile.dart
index ed7651b..7652a4b 100644
--- a/runtime/observatory/lib/src/elements/cpu_profile.dart
+++ b/runtime/observatory/lib/src/elements/cpu_profile.dart
@@ -521,14 +521,6 @@
 
   Future _getCpuProfile() async {
     profile.clear();
-    if (functionTree != null) {
-      functionTree.clear();
-      functionTree = null;
-    }
-    if (codeTree != null) {
-      codeTree.clear();
-      codeTree = null;
-    }
     if (isolate == null) {
       return new Future.value(null);
     }
@@ -565,52 +557,20 @@
     stackDepth = profile.stackDepth.toString();
     sampleRate = profile.sampleRate.toStringAsFixed(0);
     timeSpan = formatTime(profile.timeSpan);
-    bool exclusive = directionSelector == 'Up';
-    if (functionTree != null) {
-      functionTree.clear();
-      functionTree = null;
+    CpuProfileTreeElement cpuProfileTreeElement =
+        shadowRoot.querySelector('#cpuProfileTree');
+    ProfileTreeDirection direction = ProfileTreeDirection.Exclusive;
+    if (directionSelector != 'Up') {
+      direction = ProfileTreeDirection.Inclusive;
     }
-    if (codeTree != null) {
-      codeTree.clear();
-      codeTree = null;
-    }
+    ProfileTreeMode mode = ProfileTreeMode.Function;
     if (modeSelector == 'Code') {
-      _buildCodeTree(exclusive);
-    } else {
-      _buildFunctionTree(exclusive);
+      mode = ProfileTreeMode.Code;
     }
-  }
-
-  TableTree codeTree;
-  TableTree functionTree;
-
-  void _buildFunctionTree(bool exclusive) {
-    if (functionTree == null) {
-      var tableBody = shadowRoot.querySelector('#treeBody');
-      assert(tableBody != null);
-      functionTree = new TableTree(tableBody, 2);
-    }
-    var tree = profile.loadFunctionTree(exclusive ? 'exclusive' : 'inclusive');
-    if (tree == null) {
-      return;
-    }
-    var rootRow =
-        new FunctionProfileTreeRow(functionTree, null, profile, tree.root);
-    functionTree.initialize(rootRow);
-  }
-
-  void _buildCodeTree(bool exclusive) {
-    if (codeTree == null) {
-      var tableBody = shadowRoot.querySelector('#treeBody');
-      assert(tableBody != null);
-      codeTree = new TableTree(tableBody, 2);
-    }
-    var tree = profile.loadCodeTree(exclusive ? 'exclusive' : 'inclusive');
-    if (tree == null) {
-      return;
-    }
-    var rootRow = new CodeProfileTreeRow(codeTree, null, profile, tree.root);
-    codeTree.initialize(rootRow);
+    cpuProfileTreeElement.profile = profile;
+    cpuProfileTreeElement.direction = direction;
+    cpuProfileTreeElement.mode = mode;
+    cpuProfileTreeElement.render();
   }
 }
 
@@ -1100,33 +1060,101 @@
   ///
   TableTree functionTree;
   _updateFunctionTreeView() {
+    CpuProfileTreeElement cpuProfileTreeElement =
+        shadowRoot.querySelector('#cpuProfileTree');
+    ProfileTreeDirection direction = ProfileTreeDirection.Exclusive;
+    if (directionSelector != 'Up') {
+      direction = ProfileTreeDirection.Inclusive;
+    }
+    ProfileTreeMode mode = ProfileTreeMode.Function;
+    cpuProfileTreeElement.profile = profile;
+    cpuProfileTreeElement.direction = direction;
+    cpuProfileTreeElement.mode = mode;
+    cpuProfileTreeElement.functionFilter = (FunctionCallTreeNode node) {
+      return node.profileFunction.function == focusedFunction;
+    };
+    cpuProfileTreeElement.render();
+  }
+}
+
+enum ProfileTreeDirection {
+  Exclusive,
+  Inclusive
+}
+
+enum ProfileTreeMode {
+  Code,
+  Function,
+}
+
+@CustomTag('cpu-profile-tree')
+class CpuProfileTreeElement extends ObservatoryElement {
+  ProfileTreeDirection direction = ProfileTreeDirection.Exclusive;
+  ProfileTreeMode mode = ProfileTreeMode.Function;
+  CpuProfile profile;
+  TableTree codeTree;
+  TableTree functionTree;
+  FunctionCallTreeNodeFilter functionFilter;
+
+  CpuProfileTreeElement.created() : super.created();
+
+  void render() {
+    _updateView();
+  }
+
+  void _updateView() {
     if (functionTree != null) {
       functionTree.clear();
       functionTree = null;
     }
-    _buildFunctionTree();
+    if (codeTree != null) {
+      codeTree.clear();
+      codeTree = null;
+    }
+    bool exclusive = direction == ProfileTreeDirection.Exclusive;
+    if (mode == ProfileTreeMode.Code) {
+      _buildCodeTree(exclusive);
+    } else {
+      assert(mode == ProfileTreeMode.Function);
+      _buildFunctionTree(exclusive);
+    }
   }
 
-  void _buildFunctionTree() {
+  void _buildFunctionTree(bool exclusive) {
     if (functionTree == null) {
       var tableBody = shadowRoot.querySelector('#treeBody');
       assert(tableBody != null);
       functionTree = new TableTree(tableBody, 2);
     }
-    if (focusedFunction == null) {
+    if (profile == null) {
       return;
     }
-    bool exclusive = directionSelector == 'Up';
     var tree = profile.loadFunctionTree(exclusive ? 'exclusive' : 'inclusive');
     if (tree == null) {
       return;
     }
-    var filter = (FunctionCallTreeNode node) {
-      return node.profileFunction.function == focusedFunction;
-    };
-    tree = tree.filtered(filter);
+    if (functionFilter != null) {
+      tree = tree.filtered(functionFilter);
+    }
     var rootRow =
         new FunctionProfileTreeRow(functionTree, null, profile, tree.root);
     functionTree.initialize(rootRow);
   }
+
+  void _buildCodeTree(bool exclusive) {
+    if (codeTree == null) {
+      var tableBody = shadowRoot.querySelector('#treeBody');
+      assert(tableBody != null);
+      codeTree = new TableTree(tableBody, 2);
+    }
+    if (profile == null) {
+      return;
+    }
+    var tree = profile.loadCodeTree(exclusive ? 'exclusive' : 'inclusive');
+    if (tree == null) {
+      return;
+    }
+    var rootRow = new CodeProfileTreeRow(codeTree, null, profile, tree.root);
+    codeTree.initialize(rootRow);
+  }
 }
diff --git a/runtime/observatory/lib/src/elements/cpu_profile.html b/runtime/observatory/lib/src/elements/cpu_profile.html
index 685ad86..891783f 100644
--- a/runtime/observatory/lib/src/elements/cpu_profile.html
+++ b/runtime/observatory/lib/src/elements/cpu_profile.html
@@ -6,6 +6,78 @@
 <link rel="import" href="sliding_checkbox.html">
 <link rel="import" href="view_footer.html">
 
+<polymer-element name="cpu-profile-tree" extends="observatory-element">
+  <template>
+    <link rel="stylesheet" href="css/shared.css">
+    <style>
+    .infoBox {
+      position: absolute;
+      top: 100%;
+      left: 0%;
+      z-index: 999;
+      opacity: 1;
+      padding: 1em;
+      background-color: #ffffff;
+      border-left: solid 2px #ECECEC;
+      border-bottom: solid 2px #ECECEC;
+      border-right: solid 2px #ECECEC;
+    }
+    .full-width {
+      width: 100%;
+    }
+    .tree {
+      border-spacing: 0px;
+      width: 100%;
+      margin-bottom: 20px
+      vertical-align: middle;
+    }
+    .tree tbody tr {
+      animation: fadeIn 0.5s;
+      -moz-animation: fadeIn 0.5s;
+      -webkit-animation: fadeIn 0.5s;
+    }
+    .tree tbody tr:hover {
+      background-color: #FAFAFA;
+    }
+    .tree tr td:first-child,
+    .tree tr th:first-child {
+      width: 100%;
+    }
+    .tree thead > tr > th {
+      padding: 8px;
+      vertical-align: bottom;
+      text-align: left;
+      border-bottom: 1px solid #ddd;
+    }
+    tr {
+      background-color: #FFFFFF;
+    }
+    tbody tr {
+      animation: fadeIn 0.5s;
+      -moz-animation: fadeIn 0.5s;
+      -webkit-animation: fadeIn 0.5s;
+    }
+    tbody tr:hover {
+      background-color: #FAFAFA;
+    }
+    tr td:first-child,
+    tr th:first-child {
+      width: 100%;
+    }
+    </style>
+    <table class="full-width tree">
+      <thead id="treeHeader">
+      <tr>
+        <th>Method</th>
+        <th>Executing</th>
+      </tr>
+      </thead>
+      <tbody id="treeBody">
+      </tbody>
+    </table>
+  </template>
+</polymer-element>
+
 <polymer-element name="cpu-profile-table" extends="observatory-element">
   <template>
     <link rel="stylesheet" href="css/shared.css">
@@ -269,16 +341,7 @@
     </div>
     <div class="flex-row centered">
       <div class="flex-item-90-percent outlined" style="margin: 16px; margin-left: 8px; margin-right: 8px">
-        <table class="full-width tree">
-          <thead id="treeHeader">
-          <tr>
-            <th>Method</th>
-            <th>Executing</th>
-          </tr>
-          </thead>
-          <tbody id="treeBody">
-          </tbody>
-        </table>
+        <cpu-profile-tree id="cpuProfileTree"></cpu-profile-tree>
       </div>
     </div>
   </template>
@@ -300,53 +363,6 @@
         background-color: #ECECEC;
         padding: 0.2em;
       }
-
-      .table {
-        border-spacing: 0px;
-        width: 100%;
-        margin-bottom: 20px
-        vertical-align: middle;
-      }
-
-      tr {
-        background-color: #FFFFFF;
-      }
-
-      tbody tr {
-        animation: fadeIn 0.5s;
-        -moz-animation: fadeIn 0.5s;
-        -webkit-animation: fadeIn 0.5s;
-      }
-
-      tbody tr:hover {
-        background-color: #FAFAFA;
-      }
-
-      tr td:first-child,
-      tr th:first-child {
-        width: 100%;
-      }
-
-      .table thead > tr > th {
-        padding: 8px;
-        vertical-align: bottom;
-        text-align: left;
-        border-bottom: 1px solid #ddd;
-      }
-
-      .infoBox {
-        position: absolute;
-        top: 100%;
-        left: 0%;
-        z-index: 999;
-        opacity: 1;
-        padding: 1em;
-        background-color: #ffffff;
-        border-left: solid 2px #ECECEC;
-        border-bottom: solid 2px #ECECEC;
-        border-right: solid 2px #ECECEC;
-      }
-
       .statusMessage {
         font-size: 150%;
         font-weight: bold;
@@ -479,16 +495,7 @@
       </template>
       <br><br>
       <div class="tableWell shadow">
-        <table class="table">
-          <thead id="treeHeader">
-          <tr>
-            <th>Method</th>
-            <th>Executing</th>
-          </tr>
-          </thead>
-          <tbody id="treeBody">
-          </tbody>
-        </table>
+        <cpu-profile-tree id="cpuProfileTree"></cpu-profile-tree>
       </div>
     </div>
     <view-footer></view-footer>
diff --git a/runtime/observatory/lib/src/elements/debugger.dart b/runtime/observatory/lib/src/elements/debugger.dart
index 31f064a..70a3208 100644
--- a/runtime/observatory/lib/src/elements/debugger.dart
+++ b/runtime/observatory/lib/src/elements/debugger.dart
@@ -349,6 +349,35 @@
       'Syntax: step\n';
 }
 
+class AsyncNextCommand extends DebuggerCommand {
+  AsyncNextCommand(Debugger debugger) : super(debugger, 'anext', []) {
+  }
+
+  Future run(List<String> args) async {
+    if (debugger.isolatePaused()) {
+      var event = debugger.isolate.pauseEvent;
+      if (event.asyncContinuation == null) {
+        debugger.console.print("No async continuation at this location");
+        return;
+      }
+      var bpt = await
+          debugger.isolate.addBreakOnActivation(event.asyncContinuation);
+      return debugger.isolate.resume();
+    } else {
+      debugger.console.print('The program is already running');
+    }
+  }
+
+  String helpShort =
+      'Step over await or yield';
+
+  String helpLong =
+      'Continue running the isolate until control returns to the current '
+      'activation of an async or async* function.\n'
+      '\n'
+      'Syntax: anext\n';
+}
+
 class FinishCommand extends DebuggerCommand {
   FinishCommand(Debugger debugger) : super(debugger, 'finish', []);
 
@@ -854,6 +883,67 @@
       'Syntax: refresh <subcommand>\n';
 }
 
+class _VMStreamPrinter {
+  ObservatoryDebugger _debugger;
+
+  _VMStreamPrinter(this._debugger);
+
+  String _savedStream;
+  String _savedIsolate;
+  String _savedLine;
+  List<String> _buffer = [];
+
+  void onEvent(String streamName, ServiceEvent event) {
+    String isolateName = event.isolate.name;
+    // If we get a line from a different isolate/stream, flush
+    // any pending output, even if it is not newline-terminated.
+    if ((_savedIsolate != null && isolateName != _savedIsolate) ||
+        (_savedStream != null && streamName != _savedStream)) {
+       flush();
+    }
+    String data = event.bytesAsString;
+    bool hasNewline = data.endsWith('\n');
+    if (_savedLine != null) {
+       data = _savedLine + data;
+      _savedIsolate = null;
+      _savedStream = null;
+      _savedLine = null;
+    }
+    var lines = data.split('\n').where((line) => line != '').toList();
+    if (lines.isEmpty) {
+      return;
+    }
+    int limit = (hasNewline ? lines.length : lines.length - 1);
+    for (int i = 0; i < limit; i++) {
+      _buffer.add(_format(isolateName, streamName, lines[i]));
+    }
+    // If there is no newline, we save the last line of output for next time.
+    if (!hasNewline) {
+      _savedIsolate = isolateName;
+      _savedStream = streamName;
+      _savedLine = lines[lines.length - 1];
+    }
+  }
+
+  void flush() {
+    // If there is any saved output, flush it now.
+    if (_savedLine != null) {
+      _buffer.add(_format(_savedIsolate, _savedStream, _savedLine));
+      _savedIsolate = null;
+      _savedStream = null;
+      _savedLine = null;
+    }
+    if (_buffer.isNotEmpty) {
+      _debugger.console.printStdio(_buffer);
+      _buffer.clear();
+    }
+  }
+
+  String _format(String isolateName, String streamName, String line) {
+    return '${isolateName}:${streamName}> ${line}';
+  }
+}
+
 // Tracks the state for an isolate debugging session.
 class ObservatoryDebugger extends Debugger {
   RootCommand cmd;
@@ -889,6 +979,7 @@
         new ContinueCommand(this),
         new NextCommand(this),
         new StepCommand(this),
+        new AsyncNextCommand(this),
         new FinishCommand(this),
         new BreakCommand(this),
         new SetCommand(this),
@@ -898,6 +989,7 @@
         new IsolateCommand(this),
         new RefreshCommand(this),
     ]);
+    _stdioPrinter = new _VMStreamPrinter(this);
   }
 
   VM get vm => page.app.vm;
@@ -997,6 +1089,7 @@
   }
 
   void reportStatus() {
+    flushStdio();
     if (_isolate == null) {
       console.print('No current isolate');
     } else if (_isolate.idle) {
@@ -1039,6 +1132,9 @@
         } else {
           console.print('Paused at ${script.name}:${line}:${col}');
         }
+        if (event.asyncContinuation != null) {
+          console.print("Paused in async function: 'astep' available");
+        }
       });
     }
   }
@@ -1116,6 +1212,7 @@
       case ServiceEvent.kPauseException:
         if (event.owner == isolate) {
           _refreshStack(event).then((_) {
+            flushStdio();
             _reportPause(event);
           });
         }
@@ -1123,6 +1220,7 @@
 
       case ServiceEvent.kResume:
         if (event.owner == isolate) {
+          flushStdio();
           console.print('Continuing...');
         }
         break;
@@ -1147,6 +1245,20 @@
     }
   }
 
+  _VMStreamPrinter _stdioPrinter;
+
+  void flushStdio() {
+    _stdioPrinter.flush();
+  }
+
+  void onStdout(ServiceEvent event) {
+    _stdioPrinter.onEvent('stdout', event);
+  }
+
+  void onStderr(ServiceEvent event) {
+    _stdioPrinter.onEvent('stderr', event);
+  }
+
   static String _commonPrefix(String a, String b) {
     int pos = 0;
     while (pos < a.length && pos < b.length) {
@@ -1236,6 +1348,8 @@
 
   Future<StreamSubscription> _isolateSubscriptionFuture;
   Future<StreamSubscription> _debugSubscriptionFuture;
+  Future<StreamSubscription> _stdoutSubscriptionFuture;
+  Future<StreamSubscription> _stderrSubscriptionFuture;
 
   @override
   void attached() {
@@ -1269,6 +1383,26 @@
         app.vm.listenEventStream(VM.kIsolateStream, debugger.onEvent);
     _debugSubscriptionFuture =
         app.vm.listenEventStream(VM.kDebugStream, debugger.onEvent);
+    _stdoutSubscriptionFuture =
+        app.vm.listenEventStream(VM.kStdoutStream, debugger.onStdout);
+    _stderrSubscriptionFuture =
+        app.vm.listenEventStream(VM.kStderrStream, debugger.onStderr);
+
+    // Turn on the periodic poll timer for this page.
+    pollPeriod = const Duration(milliseconds:100);
+
+    onClick.listen((event) {
+      // Random clicks should focus on the text box.  If the user selects
+      // a range, don't interfere.
+      var selection = window.getSelection();
+      if (selection == null || selection.type == 'Caret') {
+        debugger.input.focus();
+      }
+    });
+  }
+
+  void onPoll() {
+    debugger.flushStdio();
   }
 
   @override
@@ -1277,6 +1411,10 @@
     _isolateSubscriptionFuture = null;
     cancelFutureSubscription(_debugSubscriptionFuture);
     _debugSubscriptionFuture = null;
+    cancelFutureSubscription(_stdoutSubscriptionFuture);
+    _stdoutSubscriptionFuture = null;
+    cancelFutureSubscription(_stderrSubscriptionFuture);
+    _stderrSubscriptionFuture = null;
     super.detached();
   }
 }
@@ -1656,6 +1794,21 @@
     span.scrollIntoView();
   }
 
+  void printStdio(List<String> lines) {
+    var lastSpan;
+    for (var line in lines) {
+      var span = new SpanElement();
+      span.classes.add('green');
+      span.appendText(line);
+      span.appendText('\n');
+      $['consoleText'].children.add(span);
+      lastSpan = span;
+    }
+    if (lastSpan != null) {
+      lastSpan.scrollIntoView();
+    }
+  }
+
   void printRef(Instance ref, { bool newline:true }) {
     var refElement = new Element.tag('instance-ref');
     refElement.ref = ref;
diff --git a/runtime/observatory/lib/src/elements/debugger.html b/runtime/observatory/lib/src/elements/debugger.html
index 08948cf..b2e6bfe 100644
--- a/runtime/observatory/lib/src/elements/debugger.html
+++ b/runtime/observatory/lib/src/elements/debugger.html
@@ -420,13 +420,18 @@
         line-height: 125%;
         color: red;
       }
+      .green {
+        font: normal 14px consolas, courier, monospace;
+        white-space: pre;
+        line-height: 125%;
+        color: green;
+      }
       .spacer {
         height: 20px;
       }
     </style>
     <div id="consoleText" class="console">
-      <!-- Console output is added programmatically here using the 'normal'
-           and 'bold' styles. -->
+      <!-- Console output is added programmatically -->
     </div>
   </template>
 </polymer-element>
@@ -437,6 +442,7 @@
     <style>
       .textBox {
         margin: 20px;
+        padding: 5px;
         font: 400 16px consolas, courier, monospace;
         width: 95%;
       }
diff --git a/runtime/observatory/lib/src/elements/heap_snapshot.dart b/runtime/observatory/lib/src/elements/heap_snapshot.dart
index f75726f..1dee104 100644
--- a/runtime/observatory/lib/src/elements/heap_snapshot.dart
+++ b/runtime/observatory/lib/src/elements/heap_snapshot.dart
@@ -75,8 +75,7 @@
     firstColumn.children.add(gap);
 
     AnyServiceRefElement objectRef = new Element.tag("any-service-ref");
-    String hexAddress = vertex.address.toRadixString(16);
-    snapshot.isolate.getObjectByAddress(hexAddress).then((obj) {
+    snapshot.isolate.getObjectByAddress(vertex.address).then((obj) {
       objectRef.ref = obj;
     });
     objectRef.style.alignSelf = 'center';
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index 0eee58f..fa73cf6 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -697,6 +697,8 @@
   static const kIsolateStream = 'Isolate';
   static const kDebugStream = 'Debug';
   static const kGCStream = 'GC';
+  static const kStdoutStream = 'Stdout';
+  static const kStderrStream = 'Stderr';
   static const _kGraphStream = '_Graph';
 
   /// Returns a single-subscription Stream object for a VM event stream.
@@ -936,7 +938,7 @@
     var result = [];
     for (ObjectVertex v in graph.getMostRetained(classId: classId,
                                                  limit: limit)) {
-      result.add(isolate.getObjectByAddress(v.address.toRadixString(16))
+      result.add(isolate.getObjectByAddress(v.address)
                         .then((ServiceObject obj) {
         if (obj is Instance) {
           // TODO(rmacnak): size/retainedSize are properties of all heap
@@ -1620,11 +1622,13 @@
   @observable Breakpoint breakpoint;
   @observable Frame topFrame;
   @observable Instance exception;
+  @observable Instance asyncContinuation;
   @observable ServiceObject inspectee;
   @observable ByteData data;
   @observable int count;
   @observable String reason;
   @observable String exceptions;
+  @observable String bytesAsString;
   int chunkIndex, chunkCount, nodeCount;
 
   @observable bool get isPauseEvent {
@@ -1658,6 +1662,9 @@
     if (map['exception'] != null) {
       exception = map['exception'];
     }
+    if (map['_asyncContinuation'] != null) {
+      asyncContinuation = map['_asyncContinuation'];
+    }
     if (map['inspectee'] != null) {
       inspectee = map['inspectee'];
     }
@@ -1680,6 +1687,10 @@
         map['_debuggerSettings']['_exceptions'] != null) {
       exceptions = map['_debuggerSettings']['_exceptions'];
     }
+    if (map['bytes'] != null) {
+      var bytes = decodeBase64(map['bytes']);
+      bytesAsString = UTF8.decode(bytes);
+    }
   }
 
   String toString() {
@@ -1896,7 +1907,7 @@
   final AllocationCount promotedByLastNewGC = new AllocationCount();
 
   @observable bool get hasNoAllocations => newSpace.empty && oldSpace.empty;
-
+  @observable bool traceAllocations = false;
   @reflectable final fields = new ObservableList<Field>();
   @reflectable final functions = new ObservableList<ServiceFunction>();
 
@@ -1963,6 +1974,9 @@
     }
     error = map['error'];
 
+    traceAllocations =
+        (map['_traceAllocations'] != null) ? map['_traceAllocations'] : false;
+
     var allocationStats = map['_allocationStats'];
     if (allocationStats != null) {
       newSpace.update(allocationStats['new']);
@@ -1985,6 +1999,19 @@
     return isolate._eval(this, expression);
   }
 
+  Future<ServiceObject> setTraceAllocations(bool enable) {
+    return isolate.invokeRpc('_setTraceClassAllocation', {
+        'enable': enable,
+        'classId': id,
+      });
+  }
+
+  Future<ServiceObject> getAllocationSamples([String tags = 'None']) {
+    var params = { 'tags': tags,
+                   'classId': id };
+    return isolate.invokeRpc('_getAllocationSamples', params);
+  }
+
   String toString() => 'Class($vmName)';
 }
 
diff --git a/runtime/observatory/tests/service/address_mapper_test.dart b/runtime/observatory/tests/service/address_mapper_test.dart
new file mode 100644
index 0000000..05fbf36
--- /dev/null
+++ b/runtime/observatory/tests/service/address_mapper_test.dart
@@ -0,0 +1,55 @@
+// Copyright (c) 2015, 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.
+// VMOptions=--compile_all --error_on_bad_type --error_on_bad_override
+
+import 'package:observatory/object_graph.dart';
+import 'package:unittest/unittest.dart';
+
+dynamic confuse() {
+  if (true) {
+    return "5";
+  }
+  return 5;
+}
+
+main() {
+  var map = new AddressMapper(42);
+
+  expect(map.get(1, 2, 3), isNull);
+  expect(map.put(1, 2, 3, 4), equals(4));
+  expect(map.get(1, 2, 3), equals(4));
+
+  expect(map.get(2, 3, 1), isNull);
+  expect(map.get(3, 1, 2), isNull);
+
+  bool exceptionThrown = false;
+  try {
+    expect(exceptionThrown, isFalse);
+    map.put(1, 2, 3, 44);
+    expect(true, isFalse);
+  } catch (e) {
+    exceptionThrown = true;
+  }
+  expect(exceptionThrown, isTrue);
+
+  exceptionThrown = false;
+  try {
+    expect(exceptionThrown, isFalse);
+    map.put(5, 6, 7, 0);
+    expect(true, isFalse);
+  } catch (e) {
+    exceptionThrown = true;
+  }
+  expect(exceptionThrown, isTrue);
+
+  exceptionThrown = false;
+  try {
+    expect(exceptionThrown, isFalse);
+    map.put(confuse(), 6, 7, 0);
+    expect(true, isFalse);
+  } catch (e) {
+    exceptionThrown = true;
+  }
+  expect(exceptionThrown, isTrue);
+}
diff --git a/runtime/observatory/tests/service/async_continuation_test.dart b/runtime/observatory/tests/service/async_continuation_test.dart
new file mode 100644
index 0000000..5b65bf8
--- /dev/null
+++ b/runtime/observatory/tests/service/async_continuation_test.dart
@@ -0,0 +1,95 @@
+// Copyright (c) 2015, 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.
+// VMOptions=--compile_all --error_on_bad_type --error_on_bad_override --verbose-debug
+
+import 'dart:async';
+import 'dart:developer';
+import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
+import 'test_helper.dart';
+
+foo() {}
+
+doSync() {
+  foo();  // Line 15
+}
+
+doAsync() async {
+  foo();  // Line 19
+  await null;
+}
+
+doAsyncStar() async* {
+  foo();  // Line 24
+  yield null;
+}
+
+testeeDo() {
+  debugger();
+
+  doSync();
+
+  doAsync();
+
+  doAsyncStar().listen((_) => null);
+}
+
+test(Isolate isolate) async {
+  await isolate.rootLibrary.load();
+  var script = isolate.rootLibrary.scripts[0];
+
+  var bp1 = await isolate.addBreakpoint(script, 15);
+  expect(bp1, isNotNull);
+  expect(bp1 is Breakpoint, isTrue);
+
+  var bp2 = await isolate.addBreakpoint(script, 19);
+  expect(bp2, isNotNull);
+  expect(bp2 is Breakpoint, isTrue);
+
+  var bp3 = await isolate.addBreakpoint(script, 24);
+  expect(bp3, isNotNull);
+  expect(bp3 is Breakpoint, isTrue);
+
+  isolate.resume();
+
+  var bp1_hit = new Completer();
+  var bp2_hit = new Completer();
+  var bp3_hit = new Completer();
+
+  var stream = await isolate.vm.getEventStream(VM.kDebugStream);
+  stream.listen((ServiceEvent event) async {
+    print("Event: $event");
+    if (event.kind == ServiceEvent.kPauseBreakpoint) {
+      var bp = event.breakpoint;
+      print('Hit $bp');
+      if (bp == bp1) {
+        await stoppedAtLine(15)(isolate);
+        print(event.asyncContinuation);
+        expect(event.asyncContinuation.isNull, isTrue);
+        isolate.resume();
+        bp1_hit.complete(null);
+      }
+      if (bp == bp2) {
+        await stoppedAtLine(19)(isolate);
+        print(event.asyncContinuation);
+        expect(event.asyncContinuation.isClosure, isTrue);
+        isolate.resume();
+        bp2_hit.complete(null);
+      }
+      if (bp == bp3) {
+        await stoppedAtLine(24)(isolate);
+        print(event.asyncContinuation);
+        expect(event.asyncContinuation.isClosure, isTrue);
+        isolate.resume();
+        bp3_hit.complete(null);
+      }
+    }
+  });
+
+  await bp1_hit.future;
+  await bp2_hit.future;
+  await bp3_hit.future;
+}
+
+main(args) => runIsolateTests(args, [test], testeeConcurrent: testeeDo);
diff --git a/runtime/observatory/tests/service/async_scope_test.dart b/runtime/observatory/tests/service/async_scope_test.dart
new file mode 100644
index 0000000..3150b50
--- /dev/null
+++ b/runtime/observatory/tests/service/async_scope_test.dart
@@ -0,0 +1,72 @@
+// Copyright (c) 2015, 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.
+// VMOptions=--compile_all --error_on_bad_type --error_on_bad_override
+
+import 'dart:async';
+import 'dart:developer';
+import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
+import 'test_helper.dart';
+
+foo() {}
+
+doAsync(param1) async {
+  var local1 = param1 + 1;
+  foo(); // Line 16
+  await null;
+}
+
+doAsyncStar(param2) async* {
+  var local2 = param2 + 1;
+  foo(); // Line 22
+  yield null;
+}
+
+testeeDo() {
+  debugger();
+
+  doAsync(1).then((_) {
+    doAsyncStar(1).listen((_) {});
+  });
+}
+
+
+checkAsyncVarDescriptors(Isolate isolate) async {
+  ServiceMap stack = await isolate.getStack();
+  expect(stack.type, equals('Stack'));
+  expect(stack['frames'].length, greaterThanOrEqualTo(1));
+  Frame frame = stack['frames'][0];
+  var vars = frame.variables.map((v) => v['name']).join(' ');
+  expect(vars, equals('param1 local1')); // no :async_op et al
+}
+
+
+checkAsyncStarVarDescriptors(Isolate isolate) async {
+  ServiceMap stack = await isolate.getStack();
+  expect(stack.type, equals('Stack'));
+  expect(stack['frames'].length, greaterThanOrEqualTo(1));
+  Frame frame = stack['frames'][0];
+  var vars = frame.variables.map((v) => v['name']).join(' ');
+  expect(vars, equals('param2 local2')); // no :async_op et al
+}
+
+
+var tests = [
+  hasStoppedAtBreakpoint, // debugger()
+  setBreakpointAtLine(16),
+  setBreakpointAtLine(22),
+  resumeIsolate,
+
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(16),
+  checkAsyncVarDescriptors,
+  resumeIsolate,
+
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(22),
+  checkAsyncStarVarDescriptors,
+  resumeIsolate,
+];
+
+main(args) => runIsolateTests(args, tests, testeeConcurrent: testeeDo);
diff --git a/runtime/observatory/tests/service/async_step_test.dart b/runtime/observatory/tests/service/async_step_test.dart
new file mode 100644
index 0000000..fb0fafd
--- /dev/null
+++ b/runtime/observatory/tests/service/async_step_test.dart
@@ -0,0 +1,67 @@
+// Copyright (c) 2015, 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.
+// VMOptions=--compile_all --error_on_bad_type --error_on_bad_override  --verbose_debug
+
+import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
+import 'test_helper.dart';
+import 'dart:developer';
+
+foo() async { }
+
+doAsync(stop) async {
+  if (stop) debugger();
+  await foo(); // Line 15.
+  await foo(); // Line 16.
+  await foo(); // Line 17.
+  return null;
+}
+
+testMain() {
+  // With two runs of doAsync floating around, async step should only cause
+  // us to stop in the run we started in.
+  doAsync(false);
+  doAsync(true);
+}
+
+asyncStep(Isolate isolate) async {
+  await isolate.reload(); // isolate.pauseEvent may be stale
+  ServiceEvent event = isolate.pauseEvent;
+  print("Pause event is $event");
+  expect(event, isNotNull);
+  expect(event.kind, equals(ServiceEvent.kPauseBreakpoint));
+
+  // 1. Set breakpoint for the continuation and resume the isolate.
+  Instance continuation = event.asyncContinuation;
+  print("Async continuation is $continuation");
+  if (continuation == null) {
+    print(await isolate.getStack());
+  }
+  expect(continuation.isClosure, isTrue);
+
+  var bpt = await isolate.addBreakOnActivation(continuation);
+  print("Async step to $bpt");
+  expect(bpt is Breakpoint, isTrue);
+
+  await isolate.resume();
+  await hasStoppedAtBreakpoint(isolate);
+  print("Big step to: ${isolate.pauseEvent}");
+
+  // 2. Step past the state-machine dispatch.
+  await isolate.stepOver();
+  await hasStoppedAtBreakpoint(isolate);
+  print("Small step to: ${isolate.pauseEvent}");
+}
+
+var tests = [
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(15),
+  asyncStep,
+  stoppedAtLine(16),
+  asyncStep,
+  stoppedAtLine(17),
+  resumeIsolate,
+];
+
+main(args) => runIsolateTests(args, tests, testeeConcurrent: testMain);
diff --git a/runtime/observatory/tests/service/break_on_function_test.dart b/runtime/observatory/tests/service/break_on_function_test.dart
new file mode 100644
index 0000000..1988578
--- /dev/null
+++ b/runtime/observatory/tests/service/break_on_function_test.dart
@@ -0,0 +1,52 @@
+// Copyright (c) 2015, 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.
+// VMOptions=--compile_all --error_on_bad_type --error_on_bad_override  --verbose_debug
+
+import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
+import 'test_helper.dart';
+import 'dart:developer';
+
+testFunction(flag) {  // Line 11
+  if (flag) {
+    print("Yes");
+  } else {
+    print("No");
+  }
+}
+
+testMain() {
+  debugger();
+  testFunction(true);
+  testFunction(false);
+  print("Done");
+}
+
+var tests = [
+
+hasStoppedAtBreakpoint,
+
+// Add breakpoint
+(Isolate isolate) async {
+  var rootLib = await isolate.rootLibrary.load();
+  var function = rootLib.functions.singleWhere((f) => f.name == 'testFunction');
+
+  var bpt = await isolate.addBreakpointAtEntry(function);
+  expect(bpt is Breakpoint, isTrue);
+  print(bpt);
+},
+
+resumeIsolate,
+
+hasStoppedAtBreakpoint,
+stoppedAtLine(11),
+resumeIsolate,
+
+hasStoppedAtBreakpoint,
+stoppedAtLine(11),
+resumeIsolate,
+
+];
+
+main(args) => runIsolateTests(args, tests, testeeConcurrent: testMain);
diff --git a/runtime/observatory/tests/service/capture_stdio_test.dart b/runtime/observatory/tests/service/capture_stdio_test.dart
new file mode 100644
index 0000000..b9673cf
--- /dev/null
+++ b/runtime/observatory/tests/service/capture_stdio_test.dart
@@ -0,0 +1,89 @@
+// Copyright (c) 2015, 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.
+// VMOptions=--compile-all --error_on_bad_type --error_on_bad_override
+
+import 'dart:async';
+import 'dart:developer';
+import 'dart:io';
+import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
+import 'test_helper.dart';
+
+void test() {
+  debugger();
+  stdout.write('stdout');
+
+  debugger();
+  print('print');
+
+  debugger();
+  stderr.write('stderr');
+}
+
+var tests = [
+  hasStoppedAtBreakpoint,
+
+  (Isolate isolate) async {
+    Completer completer = new Completer();
+    var stdoutSub;
+    stdoutSub = await isolate.vm.listenEventStream(
+      VM.kStdoutStream,
+      (ServiceEvent event) {
+        expect(event.kind, equals('WriteEvent'));
+        expect(event.bytesAsString, equals('stdout'));
+        stdoutSub.cancel().then((_) {
+          completer.complete();
+        });
+      });
+    await isolate.resume();
+    await completer.future;
+  },
+
+  hasStoppedAtBreakpoint,
+
+  (Isolate isolate) async {
+    Completer completer = new Completer();
+    var stdoutSub;
+    int eventNumber = 1;
+    stdoutSub = await isolate.vm.listenEventStream(
+      VM.kStdoutStream,
+      (ServiceEvent event) {
+        expect(event.kind, equals('WriteEvent'));
+        if (eventNumber == 1) {
+          expect(event.bytesAsString, equals('print'));
+        } else if (eventNumber == 2) {
+          expect(event.bytesAsString, equals('\n'));
+          stdoutSub.cancel().then((_) {
+            completer.complete();
+          });
+        } else {
+          expect(true, false);
+        }
+        eventNumber++;
+      });
+    await isolate.resume();
+    await completer.future;
+  },
+
+  hasStoppedAtBreakpoint,
+
+  (Isolate isolate) async {
+    Completer completer = new Completer();
+    var stderrSub;
+    stderrSub = await isolate.vm.listenEventStream(
+      VM.kStderrStream,
+      (ServiceEvent event) {
+        expect(event.kind, equals('WriteEvent'));
+        expect(event.bytesAsString, equals('stderr'));
+        stderrSub.cancel().then((_) {
+          completer.complete();
+        });
+      });
+    await isolate.resume();
+    await completer.future;
+  },
+];
+
+  
+main(args) => runIsolateTests(args, tests, testeeConcurrent: test);
diff --git a/runtime/observatory/tests/service/command_test.dart b/runtime/observatory/tests/service/command_test.dart
index 9403662..69ac08f 100644
--- a/runtime/observatory/tests/service/command_test.dart
+++ b/runtime/observatory/tests/service/command_test.dart
@@ -185,7 +185,7 @@
   RootCommand cmd = new RootCommand([new TestCommand(out, 'alpha', [])]);
 
   cmd.runCommand('goose').catchError(expectAsync((e) {
-      expect(e, equals('notfound'));
+      expect(e, equals('No such command'));
   }));
 }
 
@@ -196,7 +196,7 @@
                                      new TestCommand(out, 'ankle', [])]);
 
   cmd.runCommand('a 55').catchError(expectAsync((e) {
-      expect(e, equals('ambiguous'));
+      expect(e, equals('Ambiguous command'));
       out.clear();
       cmd.runCommand('ankl 55').then(expectAsync((_) {
           expect(out.toString(), equals('executing ankle([55])\n'));
diff --git a/runtime/observatory/tests/service/debugging_test.dart b/runtime/observatory/tests/service/debugging_test.dart
index e20e203..d3908b9 100644
--- a/runtime/observatory/tests/service/debugging_test.dart
+++ b/runtime/observatory/tests/service/debugging_test.dart
@@ -187,13 +187,13 @@
   Breakpoint bpt = result;
   expect(bpt.type, equals('Breakpoint'));
   expect(bpt.location.script.name, equals('debugging_test.dart'));
-  expect(bpt.location.script.tokenToLine(bpt.location.tokenPos), equals(14));
+  expect(bpt.location.script.tokenToLine(bpt.location.tokenPos), equals(13));
   expect(isolate.breakpoints.length, equals(1));
 
   await completer.future;  // Wait for breakpoint events.
 },
 
-// We are now at line 14.
+// We are now at line 13.
 (Isolate isolate) async {
   ServiceMap stack = await isolate.getStack();
   expect(stack.type, equals('Stack'));
@@ -201,7 +201,7 @@
 
   Script script = stack['frames'][0].location.script;
   expect(script.name,endsWith('debugging_test.dart'));
-  expect(script.tokenToLine(stack['frames'][0].location.tokenPos), equals(14));
+  expect(script.tokenToLine(stack['frames'][0].location.tokenPos), equals(13));
 },
 
 ];
diff --git a/runtime/observatory/tests/service/eval_test.dart b/runtime/observatory/tests/service/eval_test.dart
index 8414aa7..7a535f4 100644
--- a/runtime/observatory/tests/service/eval_test.dart
+++ b/runtime/observatory/tests/service/eval_test.dart
@@ -14,7 +14,7 @@
   static int staticVar = 1000;
 
   static void printValue(int value) {
-    print(value);   // line 16
+    print(value);   // line 17
   }
 }
 
@@ -47,7 +47,7 @@
 
       // Add the breakpoint.
       var script = isolate.rootLibrary.scripts[0];
-      var line = 16;
+      var line = 17;
       return isolate.addBreakpoint(script, line).then((ServiceObject bpt) {
           return completer.future;  // Wait for breakpoint reached.
       });
diff --git a/runtime/observatory/tests/service/get_allocation_samples_test.dart b/runtime/observatory/tests/service/get_allocation_samples_test.dart
new file mode 100644
index 0000000..b70d121
--- /dev/null
+++ b/runtime/observatory/tests/service/get_allocation_samples_test.dart
@@ -0,0 +1,85 @@
+// Copyright (c) 2015, 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.
+// VMOptions=--compile_all --error_on_bad_type --error_on_bad_override
+
+import 'dart:developer';
+import 'package:observatory/service_io.dart';
+import 'package:observatory/cpu_profile.dart';
+import 'package:unittest/unittest.dart';
+
+import 'test_helper.dart';
+
+class Foo {
+  Foo() {
+    print('new Foo');
+  }
+}
+
+void test() {
+  debugger();
+  // Toggled on.
+  debugger();
+  debugger();
+  // Allocation.
+  new Foo();
+  debugger();
+}
+
+var tests = [
+  hasStoppedAtBreakpoint,
+
+  // Initial.
+  (Isolate isolate) async {
+    // Verify initial state of 'Foo'.
+    var fooClass = await getClassFromRootLib(isolate, 'Foo');
+    expect(fooClass, isNotNull);
+    expect(fooClass.name, equals('Foo'));
+    print(fooClass.id);
+    expect(fooClass.traceAllocations, isFalse);
+    await fooClass.setTraceAllocations(true);
+    await fooClass.reload();
+    expect(fooClass.traceAllocations, isTrue);
+  },
+
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  // Extra debugger stop, continue to allow the allocation stubs to be switched
+  // over. This is a bug but low priority.
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+
+  // Allocation profile.
+  (Isolate isolate) async {
+    var fooClass = await getClassFromRootLib(isolate, 'Foo');
+    await fooClass.reload();
+    expect(fooClass.traceAllocations, isTrue);
+    var profileResponse = await fooClass.getAllocationSamples();
+    expect(profileResponse, isNotNull);
+    expect(profileResponse['type'], equals('_CpuProfile'));
+    await fooClass.setTraceAllocations(false);
+    await fooClass.reload();
+    expect(fooClass.traceAllocations, isFalse);
+    CpuProfile cpuProfile = new CpuProfile();
+    cpuProfile.load(isolate, profileResponse);
+    cpuProfile.buildCodeCallerAndCallees();
+    cpuProfile.buildFunctionCallerAndCallees();
+    var tree = cpuProfile.loadCodeTree('exclusive');
+    var node = tree.root;
+    var expected =
+        ['Root', 'test', 'test', '_FunctionImpl.call', 'runIsolateTests'];
+    for (var i = 0; i < expected.length; i++) {
+      expect(node.profileCode.code.name, equals(expected[i]));
+      // Depth first traversal.
+      if (node.children.length == 0) {
+        node = null;
+      } else {
+        node = node.children[0];
+      }
+      expect(node, isNotNull);
+    }
+  },
+  resumeIsolate,
+];
+
+main(args) async => runIsolateTests(args, tests, testeeConcurrent:test);
diff --git a/runtime/observatory/tests/service/library_dependency_test.dart b/runtime/observatory/tests/service/library_dependency_test.dart
index b198f01..8297261 100644
--- a/runtime/observatory/tests/service/library_dependency_test.dart
+++ b/runtime/observatory/tests/service/library_dependency_test.dart
@@ -15,7 +15,8 @@
 
 (Isolate isolate) async {
   var lib = await isolate.rootLibrary.load();
-
+  // Use mirrors to shutup the analyzer.
+  mirrors.currentMirrorSystem();
   importOf(String uri) {
     return lib.dependencies.singleWhere((dep) => dep.target.uri == uri);
   }
@@ -35,6 +36,10 @@
   expect(importOf("dart:convert").isDeferred, isTrue);
   expect(importOf("dart:convert").prefix, equals("convert"));
 },
+
+(Isolate isolate) async {
+  return convert.loadLibrary();
+}
 ];
 
 main(args) => runIsolateTests(args, tests);
diff --git a/runtime/observatory/tests/service/metrics_test.dart b/runtime/observatory/tests/service/metrics_test.dart
index 0708d8e..9b3a45e 100644
--- a/runtime/observatory/tests/service/metrics_test.dart
+++ b/runtime/observatory/tests/service/metrics_test.dart
@@ -7,7 +7,7 @@
 import 'package:unittest/unittest.dart';
 import 'test_helper.dart';
 
-import 'dart:profiler';
+import 'dart:developer';
 
 void script() {
   var counter = new Counter('a.b.c', 'description');
diff --git a/runtime/observatory/tests/service/native_metrics_test.dart b/runtime/observatory/tests/service/native_metrics_test.dart
index 39f2c37..77bc903 100644
--- a/runtime/observatory/tests/service/native_metrics_test.dart
+++ b/runtime/observatory/tests/service/native_metrics_test.dart
@@ -7,7 +7,7 @@
 import 'package:unittest/unittest.dart';
 import 'test_helper.dart';
 
-import 'dart:profiler';
+import 'dart:developer';
 
 void script() {
   var counter = new Counter('a.b.c', 'description');
diff --git a/runtime/observatory/tests/service/pause_on_exceptions_test.dart b/runtime/observatory/tests/service/pause_on_exceptions_test.dart
index e5528bc..f4a1da2 100644
--- a/runtime/observatory/tests/service/pause_on_exceptions_test.dart
+++ b/runtime/observatory/tests/service/pause_on_exceptions_test.dart
@@ -7,7 +7,6 @@
 import 'package:unittest/unittest.dart';
 import 'test_helper.dart';
 import 'dart:async';
-import 'dart:developer';
 
 doThrow() {
   throw "TheException"; // Line 13.
diff --git a/runtime/observatory/tests/service/read_stream_test.dart b/runtime/observatory/tests/service/read_stream_test.dart
new file mode 100644
index 0000000..74c12a2
--- /dev/null
+++ b/runtime/observatory/tests/service/read_stream_test.dart
@@ -0,0 +1,55 @@
+// Copyright (c) 2015, 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.
+// VMOptions=--compile_all --error_on_bad_type --error_on_bad_override
+
+import 'package:observatory/object_graph.dart';
+import 'package:unittest/unittest.dart';
+import 'dart:typed_data';
+
+testRoundTrip(final int n) {
+  var bytes = [];
+  var remaining = n;
+  while (remaining > 127) {
+    bytes.add(remaining & 127);
+    remaining = remaining >> 7;
+  }
+  bytes.add(remaining + 128);
+
+  print("Encoded $n as $bytes");
+
+  var typedBytes = new ByteData.view(new Uint8List.fromList(bytes).buffer);
+  var stream = new ReadStream([typedBytes]);
+  stream.readUnsigned();
+
+  expect(stream.isZero, equals(n == 0));
+
+  expect(stream.low, equals((n >>  0) & 0xFFFFFFF));
+  expect(stream.mid, equals((n >> 28) & 0xFFFFFFF));
+  expect(stream.high, equals((n >> 56) & 0xFFFFFFF));
+
+  const kMaxUint32 = (1 << 32) - 1;
+  if (n > kMaxUint32) {
+    expect(stream.clampedUint32, equals(kMaxUint32));
+  } else {
+    expect(stream.clampedUint32, equals(n));
+  }
+
+  expect(stream.position, equals(bytes.length));
+}
+
+main() {
+  const kMaxUint64 = (1 << 64) - 1;
+
+  var n = 3;
+  while (n < kMaxUint64) {
+    testRoundTrip(n);
+    n <<= 1;
+  }
+
+  n = 5;
+  while (n < kMaxUint64) {
+    testRoundTrip(n);
+    n <<= 1;
+  }
+}
diff --git a/runtime/observatory/tests/service/test_helper.dart b/runtime/observatory/tests/service/test_helper.dart
index f47f1cd..53520c4 100644
--- a/runtime/observatory/tests/service/test_helper.dart
+++ b/runtime/observatory/tests/service/test_helper.dart
@@ -9,6 +9,7 @@
 import 'dart:convert';
 import 'dart:io';
 import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
 
 bool _isWebSocketDisconnect(e) {
   return e is NetworkRpcException;
@@ -156,30 +157,70 @@
 
 
 Future<Isolate> hasStoppedAtBreakpoint(Isolate isolate) {
-  if ((isolate.pauseEvent != null) &&
-      (isolate.pauseEvent.kind == ServiceEvent.kPauseBreakpoint)) {
-    // Already waiting at a breakpoint.
-    print('Breakpoint reached');
-    return new Future.value(isolate);
-  }
-
   // Set up a listener to wait for breakpoint events.
   Completer completer = new Completer();
   isolate.vm.getEventStream(VM.kDebugStream).then((stream) {
     var subscription;
     subscription = stream.listen((ServiceEvent event) {
+        print("Event: $event");
         if (event.kind == ServiceEvent.kPauseBreakpoint) {
           print('Breakpoint reached');
           subscription.cancel();
-          completer.complete();
+          if (completer != null) {
+            completer.complete(isolate);
+            completer = null;
+          }
         }
     });
+
+    // Pause may have happened before we subscribed.
+    isolate.reload().then((_) {
+      if ((isolate.pauseEvent != null) &&
+         (isolate.pauseEvent.kind == ServiceEvent.kPauseBreakpoint)) {
+        // Already waiting at a breakpoint.
+        print('Breakpoint reached');
+        subscription.cancel();
+        if (completer != null) {
+          completer.complete(isolate);
+          completer = null;
+        }
+      }
+    });
   });
 
   return completer.future;  // Will complete when breakpoint hit.
 }
 
 
+// Currying is your friend.
+IsolateTest setBreakpointAtLine(int line) {
+  return (Isolate isolate) async {
+    print("Setting breakpoint for line $line");
+    Library lib = await isolate.rootLibrary.load();
+    Script script = lib.scripts.single;
+
+    Breakpoint bpt = await isolate.addBreakpoint(script, line);
+    print("Breakpoint is $bpt");
+    expect(bpt, isNotNull);
+    expect(bpt is Breakpoint, isTrue);
+  };
+}
+
+IsolateTest stoppedAtLine(int line) {
+  return (Isolate isolate) async {
+    print("Checking we are at line $line");
+
+    ServiceMap stack = await isolate.getStack();
+    expect(stack.type, equals('Stack'));
+    expect(stack['frames'].length, greaterThanOrEqualTo(1));
+
+    Frame top = stack['frames'][0];
+    Script script = await top.location.script.load();
+    expect(script.tokenToLine(top.location.tokenPos), equals(line));
+  };
+}
+
+
 Future<Isolate> resumeIsolate(Isolate isolate) {
   Completer completer = new Completer();
   isolate.vm.getEventStream(VM.kDebugStream).then((stream) {
@@ -196,6 +237,18 @@
 }
 
 
+Future<Class> getClassFromRootLib(Isolate isolate, String className) async {
+  Library rootLib = await isolate.rootLibrary.load();
+  for (var i = 0; i < rootLib.classes.length; i++) {
+    Class cls = rootLib.classes[i];
+    if (cls.name == className) {
+      return cls;
+    }
+  }
+  return null;
+}
+
+
 /// Runs [tests] in sequence, each of which should take an [Isolate] and
 /// return a [Future]. Code for setting up state can run before and/or
 /// concurrently with the tests. Uses [mainArgs] to determine whether
diff --git a/runtime/observatory/tests/ui/inspector.dart b/runtime/observatory/tests/ui/inspector.dart
index 7f65a04..450cfeb 100644
--- a/runtime/observatory/tests/ui/inspector.dart
+++ b/runtime/observatory/tests/ui/inspector.dart
@@ -8,7 +8,7 @@
 
 import 'dart:isolate';
 import 'dart:mirrors';
-import 'dart:profiler';
+import 'dart:developer';
 import 'dart:typed_data';
 
 class A <T> {}
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index cdca889..cc6612e 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -593,6 +593,12 @@
 #define PRINTF_ATTRIBUTE(string_index, first_to_check)
 #endif
 
+#if defined(_WIN32)
+#define STDIN_FILENO 0
+#define STDOUT_FILENO 1
+#define STDERR_FILENO 2
+#endif
+
 }  // namespace dart
 
 #endif  // PLATFORM_GLOBALS_H_
diff --git a/runtime/vm/assembler_arm.cc b/runtime/vm/assembler_arm.cc
index a354940..0e3fb7e 100644
--- a/runtime/vm/assembler_arm.cc
+++ b/runtime/vm/assembler_arm.cc
@@ -3345,21 +3345,27 @@
 
 
 void Assembler::LoadAllocationStatsAddress(Register dest,
-                                           intptr_t cid) {
+                                           intptr_t cid,
+                                           bool inline_isolate) {
   ASSERT(dest != kNoRegister);
   ASSERT(dest != TMP);
   ASSERT(cid > 0);
-  Isolate* isolate = Isolate::Current();
-  ClassTable* class_table = isolate->class_table();
-  if (cid < kNumPredefinedCids) {
-    const uword class_heap_stats_table_address =
-        class_table->PredefinedClassHeapStatsTableAddress();
-    const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-    LoadImmediate(dest, class_heap_stats_table_address + class_offset);
+  const intptr_t class_offset = ClassTable::ClassOffsetFor(cid);
+  if (inline_isolate) {
+    ClassTable* class_table = Isolate::Current()->class_table();
+    ClassHeapStats** table_ptr = class_table->TableAddressFor(cid);
+    if (cid < kNumPredefinedCids) {
+      LoadImmediate(dest, reinterpret_cast<uword>(*table_ptr) + class_offset);
+    } else {
+      LoadImmediate(dest, reinterpret_cast<uword>(table_ptr));
+      ldr(dest, Address(dest, 0));
+      AddImmediate(dest, class_offset);
+    }
   } else {
-    const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-    LoadImmediate(dest, class_table->ClassStatsTableAddress());
-    ldr(dest, Address(dest, 0));
+    LoadIsolate(dest);
+    intptr_t table_offset =
+        Isolate::class_table_offset() + ClassTable::TableOffsetFor(cid);
+    ldr(dest, Address(dest, table_offset));
     AddImmediate(dest, class_offset);
   }
 }
@@ -3370,8 +3376,7 @@
                                      Label* trace) {
   LoadAllocationStatsAddress(temp_reg, cid);
   const uword state_offset = ClassHeapStats::state_offset();
-  const Address& state_address = Address(temp_reg, state_offset);
-  ldr(temp_reg, state_address);
+  ldr(temp_reg, Address(temp_reg, state_offset));
   tst(temp_reg, Operand(ClassHeapStats::TraceAllocationMask()));
   b(trace, NE);
 }
@@ -3395,11 +3400,9 @@
 
 void Assembler::IncrementAllocationStatsWithSize(Register stats_addr_reg,
                                                  Register size_reg,
-                                                 intptr_t cid,
                                                  Heap::Space space) {
   ASSERT(stats_addr_reg != kNoRegister);
   ASSERT(stats_addr_reg != TMP);
-  ASSERT(cid > 0);
   const uword count_field_offset = (space == Heap::kNew) ?
     ClassHeapStats::allocated_since_gc_new_space_offset() :
     ClassHeapStats::allocated_since_gc_old_space_offset();
@@ -3515,7 +3518,7 @@
     str(temp1, FieldAddress(instance, Array::tags_offset()));  // Store tags.
 
     LoadImmediate(temp1, instance_size);
-    IncrementAllocationStatsWithSize(temp2, temp1, cid, space);
+    IncrementAllocationStatsWithSize(temp2, temp1, space);
   } else {
     b(failure);
   }
diff --git a/runtime/vm/assembler_arm.h b/runtime/vm/assembler_arm.h
index 4301677..70dd9ad 100644
--- a/runtime/vm/assembler_arm.h
+++ b/runtime/vm/assembler_arm.h
@@ -910,13 +910,13 @@
   // allocation stats. These are separate assembler macros so we can
   // avoid a dependent load too nearby the load of the table address.
   void LoadAllocationStatsAddress(Register dest,
-                                  intptr_t cid);
+                                  intptr_t cid,
+                                  bool inline_isolate = true);
   void IncrementAllocationStats(Register stats_addr,
                                 intptr_t cid,
                                 Heap::Space space);
   void IncrementAllocationStatsWithSize(Register stats_addr_reg,
                                         Register size_reg,
-                                        intptr_t cid,
                                         Heap::Space space);
 
   Address ElementAddressForIntIndex(bool is_load,
diff --git a/runtime/vm/assembler_arm64.cc b/runtime/vm/assembler_arm64.cc
index 6d315e6..290890e 100644
--- a/runtime/vm/assembler_arm64.cc
+++ b/runtime/vm/assembler_arm64.cc
@@ -1230,81 +1230,72 @@
 
 void Assembler::UpdateAllocationStats(intptr_t cid,
                                       Register pp,
-                                      Heap::Space space) {
+                                      Heap::Space space,
+                                      bool inline_isolate) {
   ASSERT(cid > 0);
-  Isolate* isolate = Isolate::Current();
-  ClassTable* class_table = isolate->class_table();
-  if (cid < kNumPredefinedCids) {
-    const uword class_heap_stats_table_address =
-        class_table->PredefinedClassHeapStatsTableAddress();
-    const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-    const uword count_field_offset = (space == Heap::kNew) ?
-      ClassHeapStats::allocated_since_gc_new_space_offset() :
-      ClassHeapStats::allocated_since_gc_old_space_offset();
-    LoadImmediate(TMP2, class_heap_stats_table_address + class_offset, pp);
-    const Address& count_address = Address(TMP2, count_field_offset);
-    ldr(TMP, count_address);
-    AddImmediate(TMP, TMP, 1, pp);
-    str(TMP, count_address);
+  intptr_t counter_offset =
+      ClassTable::CounterOffsetFor(cid, space == Heap::kNew);
+  if (inline_isolate) {
+    ClassTable* class_table = Isolate::Current()->class_table();
+    ClassHeapStats** table_ptr = class_table->TableAddressFor(cid);
+    if (cid < kNumPredefinedCids) {
+      LoadImmediate(
+          TMP2, reinterpret_cast<uword>(*table_ptr) + counter_offset, pp);
+    } else {
+      LoadImmediate(TMP2, reinterpret_cast<uword>(table_ptr), pp);
+      ldr(TMP, Address(TMP2));
+      AddImmediate(TMP2, TMP, counter_offset, pp);
+    }
   } else {
-    const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-    const uword count_field_offset = (space == Heap::kNew) ?
-      ClassHeapStats::allocated_since_gc_new_space_offset() :
-      ClassHeapStats::allocated_since_gc_old_space_offset();
-    LoadImmediate(TMP2, class_table->ClassStatsTableAddress(), pp);
-    ldr(TMP, Address(TMP2));
-    AddImmediate(TMP2, TMP, class_offset, pp);
-    ldr(TMP, Address(TMP2, count_field_offset));
-    AddImmediate(TMP, TMP, 1, pp);
-    str(TMP, Address(TMP2, count_field_offset));
+    LoadIsolate(TMP2);
+    intptr_t table_offset =
+        Isolate::class_table_offset() + ClassTable::TableOffsetFor(cid);
+    ldr(TMP, Address(TMP2, table_offset));
+    AddImmediate(TMP2, TMP, counter_offset, pp);
   }
+  ldr(TMP, Address(TMP2, 0));
+  AddImmediate(TMP, TMP, 1, pp);
+  str(TMP, Address(TMP2, 0));
 }
 
 
 void Assembler::UpdateAllocationStatsWithSize(intptr_t cid,
                                               Register size_reg,
                                               Register pp,
-                                              Heap::Space space) {
+                                              Heap::Space space,
+                                              bool inline_isolate) {
   ASSERT(cid > 0);
-  Isolate* isolate = Isolate::Current();
-  ClassTable* class_table = isolate->class_table();
-  if (cid < kNumPredefinedCids) {
-    const uword class_heap_stats_table_address =
-        class_table->PredefinedClassHeapStatsTableAddress();
-    const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-    const uword count_field_offset = (space == Heap::kNew) ?
-      ClassHeapStats::allocated_since_gc_new_space_offset() :
-      ClassHeapStats::allocated_since_gc_old_space_offset();
-    const uword size_field_offset = (space == Heap::kNew) ?
-      ClassHeapStats::allocated_size_since_gc_new_space_offset() :
-      ClassHeapStats::allocated_size_since_gc_old_space_offset();
-    LoadImmediate(TMP2, class_heap_stats_table_address + class_offset, pp);
-    const Address& count_address = Address(TMP2, count_field_offset);
-    const Address& size_address = Address(TMP2, size_field_offset);
-    ldr(TMP, count_address);
-    AddImmediate(TMP, TMP, 1, pp);
-    str(TMP, count_address);
-    ldr(TMP, size_address);
-    add(TMP, TMP, Operand(size_reg));
-    str(TMP, size_address);
+  const uword class_offset = ClassTable::ClassOffsetFor(cid);
+  const uword count_field_offset = (space == Heap::kNew) ?
+    ClassHeapStats::allocated_since_gc_new_space_offset() :
+    ClassHeapStats::allocated_since_gc_old_space_offset();
+  const uword size_field_offset = (space == Heap::kNew) ?
+    ClassHeapStats::allocated_size_since_gc_new_space_offset() :
+    ClassHeapStats::allocated_size_since_gc_old_space_offset();
+  if (inline_isolate) {
+    ClassTable* class_table = Isolate::Current()->class_table();
+    ClassHeapStats** table_ptr = class_table->TableAddressFor(cid);
+    if (cid < kNumPredefinedCids) {
+      LoadImmediate(TMP2,
+                    reinterpret_cast<uword>(*table_ptr) + class_offset, pp);
+    } else {
+      LoadImmediate(TMP2, reinterpret_cast<uword>(table_ptr), pp);
+      ldr(TMP, Address(TMP2));
+      AddImmediate(TMP2, TMP, class_offset, pp);
+    }
   } else {
-    const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-    const uword count_field_offset = (space == Heap::kNew) ?
-      ClassHeapStats::allocated_since_gc_new_space_offset() :
-      ClassHeapStats::allocated_since_gc_old_space_offset();
-    const uword size_field_offset = (space == Heap::kNew) ?
-      ClassHeapStats::allocated_size_since_gc_new_space_offset() :
-      ClassHeapStats::allocated_size_since_gc_old_space_offset();
-    LoadImmediate(TMP2, class_table->ClassStatsTableAddress(), pp);
-    ldr(TMP, Address(TMP2));
+    LoadIsolate(TMP2);
+    intptr_t table_offset =
+        Isolate::class_table_offset() + ClassTable::TableOffsetFor(cid);
+    ldr(TMP, Address(TMP2, table_offset));
     AddImmediate(TMP2, TMP, class_offset, pp);
-    ldr(TMP, Address(TMP2, count_field_offset));
-    AddImmediate(TMP, TMP, 1, pp);
-    str(TMP, Address(TMP2, count_field_offset));
-    ldr(TMP, Address(TMP2, size_field_offset));
-    add(TMP, TMP, Operand(size_reg));
-    str(TMP, Address(TMP2, size_field_offset));
   }
+  ldr(TMP, Address(TMP2, count_field_offset));
+  AddImmediate(TMP, TMP, 1, pp);
+  str(TMP, Address(TMP2, count_field_offset));
+  ldr(TMP, Address(TMP2, size_field_offset));
+  add(TMP, TMP, Operand(size_reg));
+  str(TMP, Address(TMP2, size_field_offset));
 }
 
 
@@ -1313,21 +1304,20 @@
                                      Register pp,
                                      Label* trace) {
   ASSERT(cid > 0);
-  Isolate* isolate = Isolate::Current();
-  ClassTable* class_table = isolate->class_table();
-  const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
+  intptr_t state_offset;
+  ClassTable* class_table = Isolate::Current()->class_table();
+  ClassHeapStats** table_ptr =
+      class_table->StateAddressFor(cid, &state_offset);
+
   if (cid < kNumPredefinedCids) {
-    const uword class_heap_stats_table_address =
-        class_table->PredefinedClassHeapStatsTableAddress();
-    LoadImmediate(temp_reg, class_heap_stats_table_address + class_offset, pp);
+    LoadImmediate(
+        temp_reg, reinterpret_cast<uword>(*table_ptr) + state_offset, pp);
   } else {
-    LoadImmediate(temp_reg, class_table->ClassStatsTableAddress(), pp);
+    LoadImmediate(temp_reg, reinterpret_cast<uword>(table_ptr), pp);
     ldr(temp_reg, Address(temp_reg, 0));
-    AddImmediate(temp_reg, temp_reg, class_offset, pp);
+    AddImmediate(temp_reg, temp_reg, state_offset, pp);
   }
-  const uword state_offset = ClassHeapStats::state_offset();
-  const Address& state_address = Address(temp_reg, state_offset);
-  ldr(temp_reg, state_address);
+  ldr(temp_reg, Address(temp_reg, 0));
   tsti(temp_reg, Immediate(ClassHeapStats::TraceAllocationMask()));
   b(trace, NE);
 }
diff --git a/runtime/vm/assembler_arm64.h b/runtime/vm/assembler_arm64.h
index 1468547..32da483 100644
--- a/runtime/vm/assembler_arm64.h
+++ b/runtime/vm/assembler_arm64.h
@@ -1380,12 +1380,14 @@
 
   void UpdateAllocationStats(intptr_t cid,
                              Register pp,
-                             Heap::Space space);
+                             Heap::Space space,
+                             bool inline_isolate = true);
 
   void UpdateAllocationStatsWithSize(intptr_t cid,
                                      Register size_reg,
                                      Register pp,
-                                     Heap::Space space);
+                                     Heap::Space space,
+                                     bool inline_isolate = true);
 
   // If allocation tracing for |cid| is enabled, will jump to |trace| label,
   // which will allocate in the runtime where tracing occurs.
diff --git a/runtime/vm/assembler_ia32.cc b/runtime/vm/assembler_ia32.cc
index 1059706..8de5223 100644
--- a/runtime/vm/assembler_ia32.cc
+++ b/runtime/vm/assembler_ia32.cc
@@ -2660,60 +2660,25 @@
 }
 
 
-static void ComputeCounterAddressesForCid(intptr_t cid,
-                                          Heap::Space space,
-                                          Address* count_address,
-                                          Address* size_address) {
-  ASSERT(cid < kNumPredefinedCids);
-  Isolate* isolate = Isolate::Current();
-  ClassTable* class_table = isolate->class_table();
-  const uword class_heap_stats_table_address =
-      class_table->PredefinedClassHeapStatsTableAddress();
-  const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-  const uword count_field_offset = (space == Heap::kNew) ?
-    ClassHeapStats::allocated_since_gc_new_space_offset() :
-    ClassHeapStats::allocated_since_gc_old_space_offset();
-  const uword size_field_offset = (space == Heap::kNew) ?
-    ClassHeapStats::allocated_size_since_gc_new_space_offset() :
-    ClassHeapStats::allocated_size_since_gc_old_space_offset();
-  *count_address = Address::Absolute(
-      class_heap_stats_table_address + class_offset + count_field_offset);
-  *size_address = Address::Absolute(
-      class_heap_stats_table_address + class_offset + size_field_offset);
-}
-
-
-static void ComputeHeapStatsStateAddressForCid(intptr_t cid,
-                                               Address* state_address) {
-  ASSERT(cid < kNumPredefinedCids);
-  Isolate* isolate = Isolate::Current();
-  ClassTable* class_table = isolate->class_table();
-  const uword class_heap_stats_table_address =
-      class_table->PredefinedClassHeapStatsTableAddress();
-  const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-  const uword state_offset = ClassHeapStats::state_offset();
-  *state_address = Address::Absolute(class_heap_stats_table_address +
-                                     class_offset +
-                                     state_offset);
-}
-
-
 void Assembler::MaybeTraceAllocation(intptr_t cid,
                                      Register temp_reg,
                                      Label* trace,
                                      bool near_jump) {
   ASSERT(cid > 0);
   Address state_address(kNoRegister, 0);
+  intptr_t state_offset;
+  ClassTable* class_table = Isolate::Current()->class_table();
+  ClassHeapStats** table_ptr =
+      class_table->StateAddressFor(cid, &state_offset);
   if (cid < kNumPredefinedCids) {
-    ComputeHeapStatsStateAddressForCid(cid, &state_address);
+    state_address = Address::Absolute(
+        reinterpret_cast<uword>(*table_ptr) + state_offset);
   } else {
     ASSERT(temp_reg != kNoRegister);
-    const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-    const uword state_offset = ClassHeapStats::state_offset();
     // temp_reg gets address of class table pointer.
-    ClassTable* class_table = Isolate::Current()->class_table();
-    movl(temp_reg, Address::Absolute(class_table->ClassStatsTableAddress()));
-    state_address = Address(temp_reg, class_offset + state_offset);
+    movl(temp_reg,
+         Address::Absolute(reinterpret_cast<uword>(table_ptr)));
+    state_address = Address(temp_reg, state_offset);
   }
   testb(state_address, Immediate(ClassHeapStats::TraceAllocationMask()));
   // We are tracing for this class, jump to the trace label which will use
@@ -2724,23 +2689,30 @@
 
 void Assembler::UpdateAllocationStats(intptr_t cid,
                                       Register temp_reg,
-                                      Heap::Space space) {
+                                      Heap::Space space,
+                                      bool inline_isolate) {
   ASSERT(cid > 0);
-  if (cid < kNumPredefinedCids) {
-    Address count_address(kNoRegister, 0), size_address(kNoRegister, 0);
-    ComputeCounterAddressesForCid(cid, space, &count_address, &size_address);
-    incl(count_address);
+  intptr_t counter_offset =
+      ClassTable::CounterOffsetFor(cid, space == Heap::kNew);
+  if (inline_isolate) {
+    ClassTable* class_table = Isolate::Current()->class_table();
+    ClassHeapStats** table_ptr = class_table->TableAddressFor(cid);
+    if (cid < kNumPredefinedCids) {
+      incl(Address::Absolute(
+          reinterpret_cast<uword>(*table_ptr) + counter_offset));
+    } else {
+      ASSERT(temp_reg != kNoRegister);
+      movl(temp_reg,
+           Address::Absolute(reinterpret_cast<uword>(table_ptr)));
+      incl(Address(temp_reg, counter_offset));
+    }
   } else {
     ASSERT(temp_reg != kNoRegister);
-    const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-    const uword count_field_offset = (space == Heap::kNew) ?
-      ClassHeapStats::allocated_since_gc_new_space_offset() :
-      ClassHeapStats::allocated_since_gc_old_space_offset();
-    // temp_reg gets address of class table pointer.
-    ClassTable* class_table = Isolate::Current()->class_table();
-    movl(temp_reg, Address::Absolute(class_table->ClassStatsTableAddress()));
-    // Increment allocation count.
-    incl(Address(temp_reg, class_offset + count_field_offset));
+    LoadIsolate(temp_reg);
+    intptr_t table_offset =
+        Isolate::class_table_offset() + ClassTable::TableOffsetFor(cid);
+    movl(temp_reg, Address(temp_reg, table_offset));
+    incl(Address(temp_reg, counter_offset));
   }
 }
 
@@ -2748,26 +2720,40 @@
 void Assembler::UpdateAllocationStatsWithSize(intptr_t cid,
                                               Register size_reg,
                                               Register temp_reg,
-                                              Heap::Space space) {
+                                              Heap::Space space,
+                                              bool inline_isolate) {
   ASSERT(cid > 0);
   ASSERT(cid < kNumPredefinedCids);
-  Address count_address(kNoRegister, 0), size_address(kNoRegister, 0);
-  ComputeCounterAddressesForCid(cid, space, &count_address, &size_address);
-  incl(count_address);
-  addl(size_address, size_reg);
+  UpdateAllocationStats(cid, temp_reg, space, inline_isolate);
+  intptr_t size_offset = ClassTable::SizeOffsetFor(cid, space == Heap::kNew);
+  if (inline_isolate) {
+    ClassTable* class_table = Isolate::Current()->class_table();
+    ClassHeapStats** table_ptr = class_table->TableAddressFor(cid);
+    addl(Address::Absolute(
+        reinterpret_cast<uword>(*table_ptr) + size_offset), size_reg);
+  } else {
+    addl(Address(temp_reg, size_offset), size_reg);
+  }
 }
 
 
 void Assembler::UpdateAllocationStatsWithSize(intptr_t cid,
                                               intptr_t size_in_bytes,
                                               Register temp_reg,
-                                              Heap::Space space) {
+                                              Heap::Space space,
+                                              bool inline_isolate) {
   ASSERT(cid > 0);
   ASSERT(cid < kNumPredefinedCids);
-  Address count_address(kNoRegister, 0), size_address(kNoRegister, 0);
-  ComputeCounterAddressesForCid(cid, space, &count_address, &size_address);
-  incl(count_address);
-  addl(size_address, Immediate(size_in_bytes));
+  UpdateAllocationStats(cid, temp_reg, space, inline_isolate);
+  intptr_t size_offset = ClassTable::SizeOffsetFor(cid, space == Heap::kNew);
+  if (inline_isolate) {
+    ClassTable* class_table = Isolate::Current()->class_table();
+    ClassHeapStats** table_ptr = class_table->TableAddressFor(cid);
+    addl(Address::Absolute(reinterpret_cast<uword>(*table_ptr) + size_offset),
+         Immediate(size_in_bytes));
+  } else {
+    addl(Address(temp_reg, size_offset), Immediate(size_in_bytes));
+  }
 }
 
 
diff --git a/runtime/vm/assembler_ia32.h b/runtime/vm/assembler_ia32.h
index f08b9d0..909ebda 100644
--- a/runtime/vm/assembler_ia32.h
+++ b/runtime/vm/assembler_ia32.h
@@ -880,16 +880,19 @@
 
   void UpdateAllocationStats(intptr_t cid,
                              Register temp_reg,
-                             Heap::Space space);
+                             Heap::Space space,
+                             bool inline_isolate = true);
 
   void UpdateAllocationStatsWithSize(intptr_t cid,
                                      Register size_reg,
                                      Register temp_reg,
-                                     Heap::Space space);
+                                     Heap::Space space,
+                                     bool inline_isolate = true);
   void UpdateAllocationStatsWithSize(intptr_t cid,
                                      intptr_t instance_size,
                                      Register temp_reg,
-                                     Heap::Space space);
+                                     Heap::Space space,
+                                     bool inline_isolate = true);
 
   // Inlined allocation of an instance of class 'cls', code has no runtime
   // calls. Jump to 'failure' if the instance cannot be allocated here.
diff --git a/runtime/vm/assembler_mips.cc b/runtime/vm/assembler_mips.cc
index da5a6df..cb65f35 100644
--- a/runtime/vm/assembler_mips.cc
+++ b/runtime/vm/assembler_mips.cc
@@ -806,89 +806,80 @@
 
 void Assembler::UpdateAllocationStats(intptr_t cid,
                                       Register temp_reg,
-                                      Heap::Space space) {
+                                      Heap::Space space,
+                                      bool inline_isolate) {
   ASSERT(!in_delay_slot_);
   ASSERT(temp_reg != kNoRegister);
   ASSERT(temp_reg != TMP);
   ASSERT(cid > 0);
-  Isolate* isolate = Isolate::Current();
-  ClassTable* class_table = isolate->class_table();
-  if (cid < kNumPredefinedCids) {
-    const uword class_heap_stats_table_address =
-        class_table->PredefinedClassHeapStatsTableAddress();
-    const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-    const uword count_field_offset = (space == Heap::kNew) ?
-      ClassHeapStats::allocated_since_gc_new_space_offset() :
-      ClassHeapStats::allocated_since_gc_old_space_offset();
-    LoadImmediate(temp_reg, class_heap_stats_table_address + class_offset);
-    const Address& count_address = Address(temp_reg, count_field_offset);
-    lw(TMP, count_address);
-    AddImmediate(TMP, 1);
-    sw(TMP, count_address);
+  intptr_t counter_offset =
+      ClassTable::CounterOffsetFor(cid, space == Heap::kNew);
+  if (inline_isolate) {
+    ClassTable* class_table = Isolate::Current()->class_table();
+    ClassHeapStats** table_ptr = class_table->TableAddressFor(cid);
+    if (cid < kNumPredefinedCids) {
+      LoadImmediate(
+          temp_reg, reinterpret_cast<uword>(*table_ptr) + counter_offset);
+    } else {
+      ASSERT(temp_reg != kNoRegister);
+      LoadImmediate(temp_reg, reinterpret_cast<uword>(table_ptr));
+      lw(temp_reg, Address(temp_reg, 0));
+      AddImmediate(temp_reg, counter_offset);
+    }
   } else {
-    ASSERT(temp_reg != kNoRegister);
-    const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-    const uword count_field_offset = (space == Heap::kNew) ?
-      ClassHeapStats::allocated_since_gc_new_space_offset() :
-      ClassHeapStats::allocated_since_gc_old_space_offset();
-    LoadImmediate(temp_reg, class_table->ClassStatsTableAddress());
-    lw(temp_reg, Address(temp_reg, 0));
-    AddImmediate(temp_reg, class_offset);
-    lw(TMP, Address(temp_reg, count_field_offset));
-    AddImmediate(TMP, 1);
-    sw(TMP, Address(temp_reg, count_field_offset));
+    LoadIsolate(temp_reg);
+    intptr_t table_offset =
+        Isolate::class_table_offset() + ClassTable::TableOffsetFor(cid);
+    lw(temp_reg, Address(temp_reg, table_offset));
+    AddImmediate(temp_reg, counter_offset);
   }
+  lw(TMP, Address(temp_reg, 0));
+  AddImmediate(TMP, 1);
+  sw(TMP, Address(temp_reg, 0));
 }
 
 
 void Assembler::UpdateAllocationStatsWithSize(intptr_t cid,
                                               Register size_reg,
                                               Register temp_reg,
-                                              Heap::Space space) {
+                                              Heap::Space space,
+                                              bool inline_isolate) {
   ASSERT(!in_delay_slot_);
   ASSERT(temp_reg != kNoRegister);
   ASSERT(cid > 0);
   ASSERT(temp_reg != TMP);
-  Isolate* isolate = Isolate::Current();
-  ClassTable* class_table = isolate->class_table();
-  if (cid < kNumPredefinedCids) {
-    const uword class_heap_stats_table_address =
-        class_table->PredefinedClassHeapStatsTableAddress();
-    const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-    const uword count_field_offset = (space == Heap::kNew) ?
-      ClassHeapStats::allocated_since_gc_new_space_offset() :
-      ClassHeapStats::allocated_since_gc_old_space_offset();
-    const uword size_field_offset = (space == Heap::kNew) ?
-      ClassHeapStats::allocated_size_since_gc_new_space_offset() :
-      ClassHeapStats::allocated_size_since_gc_old_space_offset();
-    LoadImmediate(temp_reg, class_heap_stats_table_address + class_offset);
-    const Address& count_address = Address(temp_reg, count_field_offset);
-    const Address& size_address = Address(temp_reg, size_field_offset);
-    lw(TMP, count_address);
-    AddImmediate(TMP, 1);
-    sw(TMP, count_address);
-    lw(TMP, size_address);
-    addu(TMP, TMP, size_reg);
-    sw(TMP, size_address);
+  const uword class_offset = ClassTable::ClassOffsetFor(cid);
+  const uword count_field_offset = (space == Heap::kNew) ?
+    ClassHeapStats::allocated_since_gc_new_space_offset() :
+    ClassHeapStats::allocated_since_gc_old_space_offset();
+  const uword size_field_offset = (space == Heap::kNew) ?
+    ClassHeapStats::allocated_size_since_gc_new_space_offset() :
+    ClassHeapStats::allocated_size_since_gc_old_space_offset();
+  if (inline_isolate) {
+    ClassTable* class_table = Isolate::Current()->class_table();
+    ClassHeapStats** table_ptr = class_table->TableAddressFor(cid);
+    if (cid < kNumPredefinedCids) {
+      LoadImmediate(temp_reg,
+                    reinterpret_cast<uword>(*table_ptr) + class_offset);
+    } else {
+      ASSERT(temp_reg != kNoRegister);
+      LoadImmediate(temp_reg, reinterpret_cast<uword>(table_ptr));
+      lw(temp_reg, Address(temp_reg, 0));
+      AddImmediate(temp_reg, class_offset);
+    }
   } else {
-    ASSERT(temp_reg != kNoRegister);
-    const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-    const uword count_field_offset = (space == Heap::kNew) ?
-      ClassHeapStats::allocated_since_gc_new_space_offset() :
-      ClassHeapStats::allocated_since_gc_old_space_offset();
-    const uword size_field_offset = (space == Heap::kNew) ?
-      ClassHeapStats::allocated_size_since_gc_new_space_offset() :
-      ClassHeapStats::allocated_size_since_gc_old_space_offset();
-    LoadImmediate(temp_reg, class_table->ClassStatsTableAddress());
-    lw(temp_reg, Address(temp_reg, 0));
+    LoadIsolate(temp_reg);
+    intptr_t table_offset =
+        Isolate::class_table_offset() + ClassTable::TableOffsetFor(cid);
+    lw(temp_reg, Address(temp_reg, table_offset));
     AddImmediate(temp_reg, class_offset);
-    lw(TMP, Address(temp_reg, count_field_offset));
-    AddImmediate(TMP, 1);
-    sw(TMP, Address(temp_reg, count_field_offset));
-    lw(TMP, Address(temp_reg, size_field_offset));
-    addu(TMP, TMP, size_reg);
-    sw(TMP, Address(temp_reg, size_field_offset));
   }
+  lw(TMP, Address(temp_reg, count_field_offset));
+  AddImmediate(TMP, 1);
+  sw(TMP, Address(temp_reg, count_field_offset));
+  lw(TMP, Address(temp_reg, size_field_offset));
+  addu(TMP, TMP, size_reg);
+  sw(TMP, Address(temp_reg, size_field_offset));
 }
 
 
@@ -899,21 +890,18 @@
   ASSERT(!in_delay_slot_);
   ASSERT(temp_reg != kNoRegister);
   ASSERT(temp_reg != TMP);
-  Isolate* isolate = Isolate::Current();
-  ClassTable* class_table = isolate->class_table();
-  const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
+  intptr_t state_offset;
+  ClassTable* class_table = Isolate::Current()->class_table();
+  ClassHeapStats** table_ptr =
+      class_table->StateAddressFor(cid, &state_offset);
   if (cid < kNumPredefinedCids) {
-    const uword class_heap_stats_table_address =
-        class_table->PredefinedClassHeapStatsTableAddress();
-    LoadImmediate(temp_reg, class_heap_stats_table_address + class_offset);
+    LoadImmediate(temp_reg, reinterpret_cast<uword>(*table_ptr) + state_offset);
   } else {
-    LoadImmediate(temp_reg, class_table->ClassStatsTableAddress());
+    LoadImmediate(temp_reg, reinterpret_cast<uword>(table_ptr));
     lw(temp_reg, Address(temp_reg, 0));
-    AddImmediate(temp_reg, class_offset);
+    AddImmediate(temp_reg, state_offset);
   }
-  const uword state_offset = ClassHeapStats::state_offset();
-  const Address& state_address = Address(temp_reg, state_offset);
-  lw(temp_reg, state_address);
+  lw(temp_reg, Address(temp_reg, 0));
   andi(CMPRES1, temp_reg, Immediate(ClassHeapStats::TraceAllocationMask()));
   bne(CMPRES1, ZR, trace);
 }
diff --git a/runtime/vm/assembler_mips.h b/runtime/vm/assembler_mips.h
index 00c0f62..174ec9f 100644
--- a/runtime/vm/assembler_mips.h
+++ b/runtime/vm/assembler_mips.h
@@ -304,12 +304,14 @@
 
   void UpdateAllocationStats(intptr_t cid,
                              Register temp_reg,
-                             Heap::Space space);
+                             Heap::Space space,
+                             bool inline_isolate = true);
 
   void UpdateAllocationStatsWithSize(intptr_t cid,
                                      Register size_reg,
                                      Register temp_reg,
-                                     Heap::Space space);
+                                     Heap::Space space,
+                                     bool inline_isolate = true);
 
 
   void MaybeTraceAllocation(intptr_t cid,
diff --git a/runtime/vm/assembler_x64.cc b/runtime/vm/assembler_x64.cc
index 7477651..48118d5 100644
--- a/runtime/vm/assembler_x64.cc
+++ b/runtime/vm/assembler_x64.cc
@@ -3438,63 +3438,24 @@
 }
 
 
-void Assembler::ComputeCounterAddressesForCid(intptr_t cid,
-                                              Heap::Space space,
-                                              Address* count_address,
-                                              Address* size_address) {
-  ASSERT(cid < kNumPredefinedCids);
-  Register temp_reg = TMP;
-  Isolate* isolate = Isolate::Current();
-  ClassTable* class_table = isolate->class_table();
-  const uword class_heap_stats_table_address =
-      class_table->PredefinedClassHeapStatsTableAddress();
-  const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-  const uword count_field_offset = (space == Heap::kNew)
-      ? ClassHeapStats::allocated_since_gc_new_space_offset()
-      : ClassHeapStats::allocated_since_gc_old_space_offset();
-  const uword size_field_offset = (space == Heap::kNew)
-      ? ClassHeapStats::allocated_size_since_gc_new_space_offset()
-      : ClassHeapStats::allocated_size_since_gc_old_space_offset();
-  movq(temp_reg, Immediate(class_heap_stats_table_address + class_offset));
-  *count_address = Address(temp_reg, count_field_offset);
-  *size_address = Address(temp_reg, size_field_offset);
-}
-
-
-void Assembler::ComputeHeapStatsStateAddressForCid(intptr_t cid,
-                                                   Address* state_address) {
-  ASSERT(cid < kNumPredefinedCids);
-  Register temp_reg = TMP;
-  Isolate* isolate = Isolate::Current();
-  ClassTable* class_table = isolate->class_table();
-  const uword class_heap_stats_table_address =
-      class_table->PredefinedClassHeapStatsTableAddress();
-  const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-  const uword state_offset = ClassHeapStats::state_offset();
-  movq(temp_reg, Immediate(class_heap_stats_table_address +
-                           class_offset +
-                           state_offset));
-  *state_address = Address(temp_reg, 0);
-}
-
-
 void Assembler::MaybeTraceAllocation(intptr_t cid,
                                      Label* trace,
                                      bool near_jump) {
   ASSERT(cid > 0);
-  Address state_address(kNoRegister, 0);
+  intptr_t state_offset;
+  ClassTable* class_table = Isolate::Current()->class_table();
+  ClassHeapStats** table_ptr =
+      class_table->StateAddressFor(cid, &state_offset);
+  Register temp_reg = TMP;
   if (cid < kNumPredefinedCids) {
-    ComputeHeapStatsStateAddressForCid(cid, &state_address);
+    movq(temp_reg, Immediate(reinterpret_cast<uword>(*table_ptr)));
   } else {
     Register temp_reg = TMP;
-    const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-    const uword state_offset = ClassHeapStats::state_offset();
-    // temp_reg gets address of class table pointer.
-    ClassTable* class_table = Isolate::Current()->class_table();
-    movq(temp_reg, Immediate(class_table->ClassStatsTableAddress()));
-    state_address = Address(temp_reg, class_offset + state_offset);
+    movq(temp_reg, Immediate(reinterpret_cast<uword>(table_ptr)));
+    movq(temp_reg, Address(temp_reg, 0));
   }
-  testb(state_address, Immediate(ClassHeapStats::TraceAllocationMask()));
+  testb(Address(temp_reg, state_offset),
+        Immediate(ClassHeapStats::TraceAllocationMask()));
   // We are tracing for this class, jump to the trace label which will use
   // the allocation stub.
   j(NOT_ZERO, trace, near_jump);
@@ -3502,47 +3463,54 @@
 
 
 void Assembler::UpdateAllocationStats(intptr_t cid,
-                                      Heap::Space space) {
+                                      Heap::Space space,
+                                      bool inline_isolate) {
   ASSERT(cid > 0);
-  if (cid < kNumPredefinedCids) {
-    Address count_address(kNoRegister, 0), size_address(kNoRegister, 0);
-    ComputeCounterAddressesForCid(cid, space, &count_address, &size_address);
-    incq(count_address);
-  } else {
-    Register temp_reg = TMP;
-    const uword class_offset = cid * sizeof(ClassHeapStats);  // NOLINT
-    const uword count_field_offset = (space == Heap::kNew)
-        ? ClassHeapStats::allocated_since_gc_new_space_offset()
-        : ClassHeapStats::allocated_since_gc_old_space_offset();
+  intptr_t counter_offset =
+      ClassTable::CounterOffsetFor(cid, space == Heap::kNew);
+  Register temp_reg = TMP;
+  if (inline_isolate) {
     ClassTable* class_table = Isolate::Current()->class_table();
-    movq(temp_reg, Immediate(class_table->ClassStatsTableAddress()));
-    movq(temp_reg, Address(temp_reg, 0));
-    incq(Address(temp_reg, class_offset + count_field_offset));
+    ClassHeapStats** table_ptr = class_table->TableAddressFor(cid);
+    if (cid < kNumPredefinedCids) {
+      movq(temp_reg, Immediate(reinterpret_cast<uword>(*table_ptr)));
+    } else {
+      movq(temp_reg, Immediate(reinterpret_cast<uword>(table_ptr)));
+      movq(temp_reg, Address(temp_reg, 0));
+    }
+  } else {
+    LoadIsolate(temp_reg);
+    intptr_t table_offset =
+        Isolate::class_table_offset() + ClassTable::TableOffsetFor(cid);
+    movq(temp_reg, Address(temp_reg, table_offset));
   }
+  incq(Address(temp_reg, counter_offset));
 }
 
 
 void Assembler::UpdateAllocationStatsWithSize(intptr_t cid,
                                               Register size_reg,
-                                              Heap::Space space) {
+                                              Heap::Space space,
+                                              bool inline_isolate) {
   ASSERT(cid > 0);
   ASSERT(cid < kNumPredefinedCids);
-  Address count_address(kNoRegister, 0), size_address(kNoRegister, 0);
-  ComputeCounterAddressesForCid(cid, space, &count_address, &size_address);
-  incq(count_address);
-  addq(size_address, size_reg);
+  UpdateAllocationStats(cid, space, inline_isolate);
+  Register temp_reg = TMP;
+  intptr_t size_offset = ClassTable::SizeOffsetFor(cid, space == Heap::kNew);
+  addq(Address(temp_reg, size_offset), size_reg);
 }
 
 
 void Assembler::UpdateAllocationStatsWithSize(intptr_t cid,
                                               intptr_t size_in_bytes,
-                                              Heap::Space space) {
+                                              Heap::Space space,
+                                              bool inline_isolate) {
   ASSERT(cid > 0);
   ASSERT(cid < kNumPredefinedCids);
-  Address count_address(kNoRegister, 0), size_address(kNoRegister, 0);
-  ComputeCounterAddressesForCid(cid, space, &count_address, &size_address);
-  incq(count_address);
-  addq(size_address, Immediate(size_in_bytes));
+  UpdateAllocationStats(cid, space, inline_isolate);
+  Register temp_reg = TMP;
+  intptr_t size_offset = ClassTable::SizeOffsetFor(cid, space == Heap::kNew);
+  addq(Address(temp_reg, size_offset), Immediate(size_in_bytes));
 }
 
 
diff --git a/runtime/vm/assembler_x64.h b/runtime/vm/assembler_x64.h
index 56cff9c..b7db5a5 100644
--- a/runtime/vm/assembler_x64.h
+++ b/runtime/vm/assembler_x64.h
@@ -985,14 +985,17 @@
   }
 
   void UpdateAllocationStats(intptr_t cid,
-                             Heap::Space space);
+                             Heap::Space space,
+                             bool inline_isolate = true);
 
   void UpdateAllocationStatsWithSize(intptr_t cid,
                                      Register size_reg,
-                                     Heap::Space space);
+                                     Heap::Space space,
+                                     bool inline_isolate = true);
   void UpdateAllocationStatsWithSize(intptr_t cid,
                                      intptr_t instance_size,
-                                     Heap::Space space);
+                                     Heap::Space space,
+                                     bool inline_isolate = true);
 
   // If allocation tracing for |cid| is enabled, will jump to |trace| label,
   // which will allocate in the runtime where tracing occurs.
@@ -1135,8 +1138,6 @@
                                      Heap::Space space,
                                      Address* count_address,
                                      Address* size_address);
-  void ComputeHeapStatsStateAddressForCid(intptr_t cid,
-                                          Address* state_address);
   DISALLOW_ALLOCATION();
   DISALLOW_COPY_AND_ASSIGN(Assembler);
 };
diff --git a/runtime/vm/base_isolate.h b/runtime/vm/base_isolate.h
index 1e92a22..fc6de2b 100644
--- a/runtime/vm/base_isolate.h
+++ b/runtime/vm/base_isolate.h
@@ -26,42 +26,6 @@
   void AssertCurrentThreadIsMutator() const {}
 #endif  // DEBUG
 
-  HandleScope* top_handle_scope() const {
-#if defined(DEBUG)
-    return top_handle_scope_;
-#else
-    return 0;
-#endif
-  }
-
-  void set_top_handle_scope(HandleScope* handle_scope) {
-#if defined(DEBUG)
-    top_handle_scope_ = handle_scope;
-#endif
-  }
-
-  int32_t no_handle_scope_depth() const {
-#if defined(DEBUG)
-    return no_handle_scope_depth_;
-#else
-    return 0;
-#endif
-  }
-
-  void IncrementNoHandleScopeDepth() {
-#if defined(DEBUG)
-    ASSERT(no_handle_scope_depth_ < INT_MAX);
-    no_handle_scope_depth_ += 1;
-#endif
-  }
-
-  void DecrementNoHandleScopeDepth() {
-#if defined(DEBUG)
-    ASSERT(no_handle_scope_depth_ > 0);
-    no_handle_scope_depth_ -= 1;
-#endif
-  }
-
   int32_t no_safepoint_scope_depth() const {
 #if defined(DEBUG)
     return no_safepoint_scope_depth_;
@@ -106,8 +70,6 @@
   BaseIsolate()
       : mutator_thread_(NULL),
 #if defined(DEBUG)
-        top_handle_scope_(NULL),
-        no_handle_scope_depth_(0),
         no_safepoint_scope_depth_(0),
 #endif
         no_callback_scope_depth_(0)
@@ -119,8 +81,6 @@
 
   Thread* mutator_thread_;
 #if defined(DEBUG)
-  HandleScope* top_handle_scope_;
-  int32_t no_handle_scope_depth_;
   int32_t no_safepoint_scope_depth_;
 #endif
   int32_t no_callback_scope_depth_;
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index cef070c..cab3102 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -298,8 +298,8 @@
   V(Int32x4_setFlagZ, 2)                                                       \
   V(Int32x4_setFlagW, 2)                                                       \
   V(Int32x4_select, 3)                                                         \
-  V(Isolate_spawnFunction, 4)                                                  \
-  V(Isolate_spawnUri, 7)                                                       \
+  V(Isolate_spawnFunction, 7)                                                  \
+  V(Isolate_spawnUri, 10)                                                      \
   V(Isolate_getPortAndCapabilitiesOfCurrentIsolate, 0)                         \
   V(Isolate_sendOOB, 2)                                                        \
   V(Mirrors_evalInLibraryWithPrivateKey, 2)                                    \
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 4af6636..75b832b 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -18,6 +18,7 @@
 DEFINE_FLAG(bool, print_classes, false, "Prints details about loaded classes.");
 DEFINE_FLAG(bool, trace_class_finalization, false, "Trace class finalization.");
 DEFINE_FLAG(bool, trace_type_finalization, false, "Trace type finalization.");
+DECLARE_FLAG(bool, supermixin);
 DECLARE_FLAG(bool, use_cha_deopt);
 
 
@@ -1561,14 +1562,16 @@
 // In other words, decorate this mixin application class with type parameters
 // that forward to the super type and mixin type (and interface type).
 // Example:
-//   class S<T> { }
-//   class M<T> { }
-//   class C<E> extends S<E> with M<List<E>> { }
+//   class S<T extends BT> { }
+//   class M<T extends BT> { }
+//   class C<E extends BE> extends S<E> with M<List<E>> { }
 // results in
-//   class S&M<T`, T> extends S<T`> implements M<T> { } // mixin == M<T>
-//   class C<E> extends S&M<E, List<E>> { }
+//   class S&M<T`, T extends BT> extends S<T`> implements M<T> { }
+//   class C<E extends BE> extends S&M<E, List<E>> { }
 // CloneMixinAppTypeParameters decorates class S&M with type parameters T` and
 // T, and use them as type arguments in S<T`> and M<T>.
+// Note that the bound BT on T of S is not applied to T` of S&M. However, the
+// bound BT on T of M is applied to T of S&M. See comments below.
 void ClassFinalizer::CloneMixinAppTypeParameters(const Class& mixin_app_class) {
   ASSERT(mixin_app_class.type_parameters() == TypeArguments::null());
   Isolate* isolate = Isolate::Current();
@@ -1580,8 +1583,6 @@
   const Type& mixin_type = Type::Handle(isolate, mixin_app_class.mixin());
   const Class& mixin_class = Class::Handle(isolate, mixin_type.type_class());
   const intptr_t num_mixin_type_params = mixin_class.NumTypeParameters();
-  // The mixin class cannot be Object and this was checked earlier.
-  ASSERT(!mixin_class.IsObjectClass());
 
   // The mixin type (in raw form) should have been added to the interfaces
   // implemented by the mixin application class. This is necessary so that cycle
@@ -1593,7 +1594,7 @@
   // If both the super type and the mixin type are non generic, the mixin
   // application class is non generic as well and we can skip type parameter
   // cloning.
-  bool has_uninstantiated_bounds = false;
+  TypeArguments& instantiator = TypeArguments::Handle(isolate);
   if ((num_super_type_params + num_mixin_type_params) > 0) {
     // If the last ampersand in the name of the mixin application class is
     // doubled, the same type parameters can propagate the type arguments to
@@ -1630,7 +1631,12 @@
           TypeArguments::New(num_super_type_params));
       // The cloned super class type parameters do not need to repeat their
       // bounds, since the bound checks will be performed at the super class
-      // level.
+      // level. As a consequence, if this mixin application is used itself as a
+      // mixin in another mixin application, the bounds will be ignored, which
+      // is correct, because the other mixin application does not inherit from
+      // the super class of its mixin. Note also that the other mixin
+      // application will only mixin the last mixin type listed in the first
+      // mixin application it is mixing in.
       param_bound = isolate->object_store()->object_type();
       for (intptr_t i = 0; i < num_super_type_params; i++) {
         param ^= super_type_params.TypeAt(i);
@@ -1658,12 +1664,16 @@
     // We need to retain the parameter names of the mixin class
     // since the code that will be compiled in the context of the
     // mixin application class may refer to the type parameters
-    // with that name.
+    // with that name. We also retain the type parameter bounds.
     if (num_mixin_type_params > 0) {
       const TypeArguments& mixin_params =
           TypeArguments::Handle(isolate, mixin_class.type_parameters());
+      const intptr_t offset =
+          mixin_class.NumTypeArguments() - mixin_class.NumTypeParameters();
       const TypeArguments& mixin_type_args = TypeArguments::Handle(isolate,
           TypeArguments::New(num_mixin_type_params));
+      instantiator ^= TypeArguments::New(offset + num_mixin_type_params);
+      bool has_uninstantiated_bounds = false;
       for (intptr_t i = 0; i < num_mixin_type_params; i++) {
         param ^= mixin_params.TypeAt(i);
         param_name = param.name();
@@ -1672,27 +1682,26 @@
           has_uninstantiated_bounds = true;
         }
         cloned_param = TypeParameter::New(mixin_app_class,
-                                          cloned_index,
+                                          cloned_index,  // Unfinalized index.
                                           param_name,
                                           param_bound,
                                           param.token_pos());
         cloned_type_params.SetTypeAt(cloned_index, cloned_param);
-        mixin_type_args.SetTypeAt(i, cloned_param);
+        mixin_type_args.SetTypeAt(i, cloned_param);  // Unfinalized length.
+        instantiator.SetTypeAt(offset + i, cloned_param);  // Finalized length.
         cloned_index++;
       }
 
       // Third, replace the type parameters appearing in the bounds of the mixin
       // type parameters, if any, by the cloned type parameters. This can be
-      // done by instantiating each bound using the mixin_type_args as
-      // instantiator. Since the mixin class must extend Object, its first type
-      // parameter has index 0, therefore, the instantiator does not require
-      // shifting. There is however an exception where the mixin class is an
-      // alias, in which case shifting is required and performed later in
-      // ApplyMixinAppAlias.
+      // done by instantiating each bound using the instantiator built above.
+      // If the mixin class extends a generic super class, its first finalized
+      // type parameter has a non-zero index, therefore, the instantiator
+      // requires shifting by the offset calculated above.
       // Unfinalized type parameters replace finalized type parameters, which
       // is not a problem since they will get finalized shortly as the mixin
       // application class gets finalized.
-      if (has_uninstantiated_bounds && !mixin_class.is_mixin_app_alias()) {
+      if (has_uninstantiated_bounds) {
         Error& bound_error = Error::Handle(isolate);
         for (intptr_t i = 0; i < num_mixin_type_params; i++) {
           param ^= mixin_type_args.TypeAt(i);
@@ -1705,10 +1714,11 @@
                   FinalizeType(mixin_app_class, param_bound, kCanonicalize);
               param.set_bound(param_bound);  // In case part of recursive type.
             }
-            param_bound = param_bound.InstantiateFrom(mixin_type_args,
+            param_bound = param_bound.InstantiateFrom(instantiator,
                                                       &bound_error);
             // The instantiator contains only TypeParameter objects and no
             // BoundedType objects, so no bound error may occur.
+            ASSERT(!param_bound.IsBoundedType());
             ASSERT(bound_error.IsNull());
             ASSERT(!param_bound.IsInstantiated());
             param.set_bound(param_bound);
@@ -1732,7 +1742,7 @@
   // application class. The new class will have the aliased mixin as actual
   // mixin.
   if (mixin_class.is_mixin_app_alias()) {
-    ApplyMixinAppAlias(mixin_app_class, has_uninstantiated_bounds);
+    ApplyMixinAppAlias(mixin_app_class, instantiator);
   }
 }
 
@@ -1742,19 +1752,23 @@
 
 class I<T> { }
 class J<T> { }
-class S<T> { }
-class M<T> { }
-class A<U, V> = Object with M<Map<U, V>> implements I<V>;
-class C<T, K> = S<T> with A<T, List<K>> implements J<K>;
+class S<T extends num> { }
+class M<T extends Map> { }
+class A<U, V extends List> = Object with M<Map<U, V>> implements I<V>;
+class C<T, K extends T> = S<T> with A<T, List<K>> implements J<K>;
 
 Before the call to ApplyMixinAppAlias, the VM has already synthesized 2 mixin
 application classes Object&M and S&A:
 
-Object&M<T> extends Object implements M<T> { ... members of M applied here ... }
-A<U, V> extends Object&M<Map<U, V>> implements I<V> { }
+Object&M<T extends Map> extends Object implements M<T> {
+  ... members of M applied here ...
+}
+A<U, V extends List> extends Object&M<Map<U, V>> implements I<V> { }
 
-S&A<T`, U, V> extends S<T`> implements A<U, V> { }
-C<T, K> extends S&A<T, T, List<K>> implements J<K> { }
+S&A<T`, U, V extends List> extends S<T`> implements A<U, V> {
+  ... members of A applied here, but A has no members ...
+}
+C<T, K extends T> extends S&A<T, T, List<K>> implements J<K> { }
 
 In theory, class A should be an alias of Object&M instead of extending it.
 In practice, the additional class provides a hook for implemented interfaces
@@ -1764,9 +1778,6 @@
 
 Similarly, class C should be an alias of S&A instead of extending it.
 
-Since A is used as a mixin, it must extend Object. The fact that it extends
-Object&M must be hidden so that no error is wrongly reported.
-
 Now, A does not have any members to be mixed into S&A, because A is an alias.
 The members to be mixed in are actually those of M, and they should appear in a
 scope where the type parameter T is visible. The class S&A declares the type
@@ -1776,11 +1787,13 @@
 as the superclass of S&A. The class S&A` declares a type argument T:
 
 Instead of
-S&A<T`, U, V> extends S<T`> implements A<U, V> { }
+S&A<T`, U, V extends List> extends S<T`> implements A<U, V> { }
 
 We now have:
-S&A`<T`, T> extends S<T`> implements M<T> { ... members of M applied here ... }
-S&A<T`, U, V> extends S&A`<T`, Map<U, V>> implements A<U, V> { }
+S&A`<T`, T extends Map> extends S<T`> implements M<T> {
+  ... members of M applied here ...
+}
+S&A<T`, U, V extends List> extends S&A`<T`, Map<U, V>> implements A<U, V> { }
 
 The main implementation difficulty resides in the fact that the type parameters
 U and V in the super type S&A`<T`, Map<U, V>> of S&A must refer to the type
@@ -1789,23 +1802,24 @@
 step with a properly crafted instantiator vector takes care of the required type
 parameter substitution.
 The instantiator vector must end with the type parameters U and V of S&A.
-The offset of the first type parameter U of S&A must be at the finalized index
-of type parameter U of A.
+The offset in the instantiator of the type parameter U of S&A must be at the
+finalized index of type parameter U of A.
 
 The same instantiator vector is used to adjust the type parameter bounds on U
-and V, if any. This step was postponed from CloneMixinAppTypeParameters above.
+and V, if any. This step is done in CloneMixinAppTypeParameters above, and the
+already built instantiator is passed here.
 
-Also, a possible bound on type parameter T of M (not shown in the example above)
-must be applied to type parameter T of S&A`. If the bound is uninstantiated,
-i.e. if it refers to T or other type parameters of M, an instantiation step is
-required to substitute these type parameters of M with type parameters of S&A`.
-The instantiator vector consists of the cloned type parameters of M without
-offset, since class M must extend Object. This is done in the recursive call to
-CloneMixinAppTypeParameters and does not require specific code in
-ApplyMixinAppAlias.
+Also, a possible bound on type parameter T of M must be applied to type
+parameter T of S&A`. If the bound is uninstantiated, i.e. if it refers to T or
+other type parameters of M, an instantiation step is required to substitute
+these type parameters of M with type parameters of S&A`.
+The instantiator vector consists of the cloned type parameters of M shifted by
+an offset corresponding to the finalized index of the first type parameter of M.
+This is done in the recursive call to CloneMixinAppTypeParameters and does not
+require specific code in ApplyMixinAppAlias.
 */
 void ClassFinalizer::ApplyMixinAppAlias(const Class& mixin_app_class,
-                                        bool has_uninstantiated_bounds) {
+                                        const TypeArguments& instantiator) {
   // If this mixin alias is aliasing another mixin alias, another class
   // will be inserted via recursion. No need to check here.
   // The mixin type may or may not be finalized yet.
@@ -1817,6 +1831,12 @@
   ASSERT(mixin_class.is_mixin_app_alias());
   const Class& aliased_mixin_app_class = Class::Handle(isolate,
       mixin_class.SuperClass());
+  // Note that the super class of aliased_mixin_app_class can itself be a
+  // mixin application class (this happens if the alias is mixing more than one
+  // type). Instead of trying to recursively insert yet another class as the
+  // super class of this inserted class, we apply the composition rules of the
+  // spec and only mixin the members of aliased_mixin_app_class, not those of
+  // its super class. In other words, we only mixin the last mixin of the alias.
   const Type& aliased_mixin_type = Type::Handle(isolate,
       aliased_mixin_app_class.mixin());
   // The name of the inserted mixin application class is the name of mixin
@@ -1851,18 +1871,19 @@
 
     // The mixin type and interface type must also be set before calling
     // CloneMixinAppTypeParameters.
-    // After FinalizeTypesInClass, they will refer to the type parameters of
-    // the mixin class typedef.
-    const Type& generic_mixin_type = Type::Handle(isolate,
+    // After FinalizeTypesInClass, if the mixin type and interface type are
+    // generic, their type arguments will refer to the type parameters of
+    // inserted_class.
+    const Type& inserted_class_mixin_type = Type::Handle(isolate,
         Type::New(Class::Handle(isolate, aliased_mixin_type.type_class()),
                   Object::null_type_arguments(),
                   aliased_mixin_type.token_pos()));
-    inserted_class.set_mixin(generic_mixin_type);
+    inserted_class.set_mixin(inserted_class_mixin_type);
     // Add the mixin type to the list of interfaces that the mixin application
     // class implements. This is necessary so that cycle check work at
     // compile time (type arguments are ignored by that check).
     const Array& interfaces = Array::Handle(Array::New(1));
-    interfaces.SetAt(0, generic_mixin_type);
+    interfaces.SetAt(0, inserted_class_mixin_type);
     ASSERT(inserted_class.interfaces() == Object::empty_array().raw());
     inserted_class.set_interfaces(interfaces);
     // The type arguments of the interface, if any, will be set in
@@ -1885,60 +1906,68 @@
   // It is important that the type parameters of the mixin application class
   // are not finalized yet, because new type parameters may have been added
   // to the super class.
-  Class& super_class = Class::Handle(isolate, super_type.type_class());
-  ASSERT(mixin_app_class.SuperClass() == super_class.raw());
-  while (super_class.IsMixinApplication()) {
-    super_class = super_class.SuperClass();
-  }
+  const Class& super_class = Class::Handle(isolate, super_type.type_class());
+  ASSERT(mixin_app_class.SuperClass() == super_class.raw());  // Will change.
   const intptr_t num_super_type_params = super_class.NumTypeParameters();
-  const intptr_t num_mixin_type_params = mixin_class.NumTypeParameters();
-  intptr_t offset =
-      mixin_class.NumTypeArguments() - mixin_class.NumTypeParameters();
-  const TypeArguments& type_params =
-      TypeArguments::Handle(isolate, mixin_app_class.type_parameters());
-  TypeArguments& instantiator = TypeArguments::Handle(isolate,
-      TypeArguments::New(offset + num_mixin_type_params));
   AbstractType& type = AbstractType::Handle(isolate);
-  for (intptr_t i = 0; i < num_mixin_type_params; i++) {
-    type = type_params.TypeAt(num_super_type_params + i);
-    instantiator.SetTypeAt(offset + i, type);
-  }
+  // The instantiator is mapping finalized type parameters of mixin_class to
+  // unfinalized type parameters of mixin_app_class.
   ASSERT(aliased_mixin_type.IsFinalized());
   const Class& aliased_mixin_type_class = Class::Handle(isolate,
       aliased_mixin_type.type_class());
   const intptr_t num_aliased_mixin_type_params =
       aliased_mixin_type_class.NumTypeParameters();
-  const intptr_t num_aliased_mixin_type_args =
-      aliased_mixin_type_class.NumTypeArguments();
-  offset = num_aliased_mixin_type_args - num_aliased_mixin_type_params;
   ASSERT(inserted_class.NumTypeParameters() ==
          (num_super_type_params + num_aliased_mixin_type_params));
+  const AbstractType& mixin_class_super_type =
+      AbstractType::Handle(isolate, mixin_class.super_type());
+  ASSERT(mixin_class_super_type.IsFinalized());
   // The aliased_mixin_type may be raw.
   const TypeArguments& mixin_class_super_type_args =
-      TypeArguments::Handle(isolate,
-          AbstractType::Handle(isolate, mixin_class.super_type()).arguments());
+      TypeArguments::Handle(isolate, mixin_class_super_type.arguments());
   TypeArguments& new_mixin_type_args = TypeArguments::Handle(isolate);
   if ((num_aliased_mixin_type_params > 0) &&
       !mixin_class_super_type_args.IsNull()) {
     new_mixin_type_args = TypeArguments::New(num_aliased_mixin_type_params);
+    AbstractType& bounded_type = AbstractType::Handle(isolate);
+    AbstractType& upper_bound = AbstractType::Handle(isolate);
+    TypeParameter& type_parameter = TypeParameter::Handle(isolate);
+    Error& bound_error = Error::Handle(isolate);
+    const intptr_t offset =
+        mixin_class_super_type_args.Length() - num_aliased_mixin_type_params;
     for (intptr_t i = 0; i < num_aliased_mixin_type_params; i++) {
       type = mixin_class_super_type_args.TypeAt(offset + i);
+      if (!type.IsInstantiated()) {
+        // In the presence of bounds, the bounded type and the upper bound must
+        // be instantiated separately. Instantiating a BoundedType would wrap
+        // the BoundedType in another BoundedType.
+        if (type.IsBoundedType()) {
+          bounded_type = BoundedType::Cast(type).type();
+          bounded_type = bounded_type.InstantiateFrom(instantiator,
+                                                      &bound_error);
+          // The instantiator contains only TypeParameter objects and no
+          // BoundedType objects, so no bound error may occur.
+          ASSERT(bound_error.IsNull());
+          upper_bound = BoundedType::Cast(type).bound();
+          upper_bound = upper_bound.InstantiateFrom(instantiator, &bound_error);
+          ASSERT(bound_error.IsNull());
+          type_parameter = BoundedType::Cast(type).type_parameter();
+          // The type parameter that declared the bound does not change.
+          type = BoundedType::New(bounded_type, upper_bound, type_parameter);
+        } else {
+          type = type.InstantiateFrom(instantiator, &bound_error);
+          ASSERT(bound_error.IsNull());
+        }
+      }
       new_mixin_type_args.SetTypeAt(i, type);
     }
   }
-  if (!new_mixin_type_args.IsNull() &&
-      !new_mixin_type_args.IsInstantiated()) {
-    Error& bound_error = Error::Handle(isolate);
-    new_mixin_type_args ^=
-        new_mixin_type_args.InstantiateFrom(instantiator, &bound_error);
-    // The instantiator contains only TypeParameter objects and no BoundedType
-    // objects, so no bound error may occur.
-    ASSERT(bound_error.IsNull());
-  }
   TypeArguments& new_super_type_args = TypeArguments::Handle(isolate);
   if ((num_super_type_params + num_aliased_mixin_type_params) > 0) {
     new_super_type_args = TypeArguments::New(num_super_type_params +
                                              num_aliased_mixin_type_params);
+    const TypeArguments& type_params =
+        TypeArguments::Handle(isolate, mixin_app_class.type_parameters());
     for (intptr_t i = 0; i < num_super_type_params; i++) {
       type = type_params.TypeAt(i);
       new_super_type_args.SetTypeAt(i, type);
@@ -1957,35 +1986,23 @@
                          mixin_app_class.token_pos());
   mixin_app_class.set_super_type(super_type);
 
-  // Perform the bound adjustment posponed from CloneMixinAppTypeParameters.
-  if (has_uninstantiated_bounds) {
-    TypeParameter& param = TypeParameter::Handle(isolate);
-    AbstractType& param_bound = AbstractType::Handle(isolate);
-    Error& bound_error = Error::Handle(isolate);
-    for (intptr_t i = 0; i < num_mixin_type_params; i++) {
-      param ^= type_params.TypeAt(num_super_type_params + i);
-      param_bound = param.bound();
-      if (!param_bound.IsInstantiated()) {
-        param_bound = param_bound.InstantiateFrom(instantiator, &bound_error);
-        // The instantiator contains only TypeParameter objects and no
-        // BoundedType objects, so no bound error may occur.
-        ASSERT(bound_error.IsNull());
-        ASSERT(!param_bound.IsInstantiated());
-        param.set_bound(param_bound);
-      }
-    }
-  }
-
   // Mark this mixin application class as being an alias.
   mixin_app_class.set_is_mixin_app_alias();
   ASSERT(!mixin_app_class.is_type_finalized());
   ASSERT(!mixin_app_class.is_mixin_type_applied());
   if (FLAG_trace_class_finalization) {
-    OS::Print("Inserting class %s to mixin application alias %s "
-              "with super type '%s'\n",
-              inserted_class.ToCString(),
-              mixin_app_class.ToCString(),
-              String::Handle(isolate, super_type.Name()).ToCString());
+    OS::Print("Inserting class '%s' %s\n"
+              "  as super type '%s' with %" Pd " type args: %s\n"
+              "  of mixin application alias '%s' %s\n",
+              String::Handle(inserted_class.Name()).ToCString(),
+              TypeArguments::Handle(
+                  inserted_class.type_parameters()).ToCString(),
+              String::Handle(isolate, super_type.Name()).ToCString(),
+              num_super_type_params + num_aliased_mixin_type_params,
+              super_type.ToCString(),
+              String::Handle(mixin_app_class.Name()).ToCString(),
+              TypeArguments::Handle(
+                  mixin_app_class.type_parameters()).ToCString());
   }
 }
 
@@ -2007,8 +2024,7 @@
               mixin_app_class.token_pos());
   }
 
-  // Check for illegal self references. This has to be done before checking
-  // that the super class of the mixin class is class Object.
+  // Check for illegal self references.
   GrowableArray<intptr_t> visited_mixins;
   if (!IsMixinCycleFree(mixin_class, &visited_mixins)) {
     const String& class_name = String::Handle(mixin_class.Name());
@@ -2017,21 +2033,23 @@
                 class_name.ToCString());
   }
 
-  // Check that the super class of the mixin class is class Object.
-  Class& mixin_super_class = Class::Handle(mixin_class.SuperClass());
-  // Skip over mixin application alias classes, which are implemented as
-  // subclasses of the mixin application classes they name.
-  if (!mixin_super_class.IsNull() && mixin_class.is_mixin_app_alias()) {
-    while (mixin_super_class.is_mixin_app_alias()) {
+  if (!FLAG_supermixin) {
+    // Check that the super class of the mixin class is class Object.
+    Class& mixin_super_class = Class::Handle(mixin_class.SuperClass());
+    // Skip over mixin application alias classes, which are implemented as
+    // subclasses of the mixin application classes they name.
+    if (!mixin_super_class.IsNull() && mixin_class.is_mixin_app_alias()) {
+      while (mixin_super_class.is_mixin_app_alias()) {
+        mixin_super_class = mixin_super_class.SuperClass();
+      }
       mixin_super_class = mixin_super_class.SuperClass();
     }
-    mixin_super_class = mixin_super_class.SuperClass();
-  }
-  if (mixin_super_class.IsNull() || !mixin_super_class.IsObjectClass()) {
-    const String& class_name = String::Handle(mixin_class.Name());
-    ReportError(mixin_app_class, mixin_app_class.token_pos(),
-                "mixin class '%s' must extend class 'Object'",
-                class_name.ToCString());
+    if (mixin_super_class.IsNull() || !mixin_super_class.IsObjectClass()) {
+      const String& class_name = String::Handle(mixin_class.Name());
+      ReportError(mixin_app_class, mixin_app_class.token_pos(),
+                  "mixin class '%s' must extend class 'Object'",
+                  class_name.ToCString());
+    }
   }
 
   // Copy type parameters to mixin application class.
@@ -2297,6 +2315,7 @@
     // Check whether the interface is duplicated. We need to wait with
     // this check until the super type and interface types are finalized,
     // so that we can use Type::Equals() for the test.
+    // TODO(regis): This restriction about duplicated interfaces may get lifted.
     ASSERT(interface_type.IsFinalized());
     ASSERT(super_type.IsNull() || super_type.IsFinalized());
     if (!super_type.IsNull() && interface_type.Equals(super_type)) {
@@ -2643,7 +2662,6 @@
   // a BoundedType itself.
   CollectTypeArguments(cls, Type::Cast(mixin_super_type), type_args);
   AbstractType& mixin_type = AbstractType::Handle(isolate);
-  Type& generic_mixin_type = Type::Handle(isolate);
   Class& mixin_type_class = Class::Handle(isolate);
   Class& mixin_app_class = Class::Handle(isolate);
   String& mixin_app_class_name = String::Handle(isolate);
@@ -2704,9 +2722,10 @@
                                    mixin_type.token_pos());
       mixin_app_class.set_super_type(mixin_super_type);
       mixin_type_class = mixin_type.type_class();
-      generic_mixin_type = Type::New(mixin_type_class,
-                                     Object::null_type_arguments(),
-                                     mixin_type.token_pos());
+      const Type& generic_mixin_type = Type::Handle(isolate,
+          Type::New(mixin_type_class,
+                    Object::null_type_arguments(),
+                    mixin_type.token_pos()));
       mixin_app_class.set_mixin(generic_mixin_type);
       // Add the mixin type to the list of interfaces that the mixin application
       // class implements. This is necessary so that cycle check work at
diff --git a/runtime/vm/class_finalizer.h b/runtime/vm/class_finalizer.h
index 7a11b24..de8cdde 100644
--- a/runtime/vm/class_finalizer.h
+++ b/runtime/vm/class_finalizer.h
@@ -130,7 +130,7 @@
       const GrowableObjectArray& visited_factories);
   static void CloneMixinAppTypeParameters(const Class& mixin_app_class);
   static void ApplyMixinAppAlias(const Class& mixin_app_class,
-                                 bool has_uninstantiated_bounds);
+                                 const TypeArguments& instantiator);
   static void ApplyMixinMembers(const Class& cls);
   static void CreateForwardingConstructors(
       const Class& mixin_app,
diff --git a/runtime/vm/class_table.cc b/runtime/vm/class_table.cc
index 1966b21..c4dbfe8 100644
--- a/runtime/vm/class_table.cc
+++ b/runtime/vm/class_table.cc
@@ -422,6 +422,50 @@
 }
 
 
+ClassHeapStats** ClassTable::TableAddressFor(intptr_t cid) {
+  return (cid < kNumPredefinedCids)
+      ? &predefined_class_heap_stats_table_
+      : &class_heap_stats_table_;
+}
+
+
+intptr_t ClassTable::TableOffsetFor(intptr_t cid) {
+  return (cid < kNumPredefinedCids)
+      ? OFFSET_OF(ClassTable, predefined_class_heap_stats_table_)
+      : OFFSET_OF(ClassTable, class_heap_stats_table_);
+}
+
+
+intptr_t ClassTable::ClassOffsetFor(intptr_t cid) {
+  return cid * sizeof(ClassHeapStats);  // NOLINT
+}
+
+
+intptr_t ClassTable::CounterOffsetFor(intptr_t cid, bool is_new_space) {
+  const intptr_t class_offset = ClassOffsetFor(cid);
+  const intptr_t count_field_offset = is_new_space
+      ? ClassHeapStats::allocated_since_gc_new_space_offset()
+      : ClassHeapStats::allocated_since_gc_old_space_offset();
+  return class_offset + count_field_offset;
+}
+
+
+ClassHeapStats** ClassTable::StateAddressFor(intptr_t cid,
+                                             intptr_t* state_offset) {
+  *state_offset = ClassOffsetFor(cid)+ ClassHeapStats::state_offset();
+  return TableAddressFor(cid);
+}
+
+
+intptr_t ClassTable::SizeOffsetFor(intptr_t cid, bool is_new_space) {
+  const uword class_offset = ClassOffsetFor(cid);
+  const uword size_field_offset = is_new_space
+      ? ClassHeapStats::allocated_size_since_gc_new_space_offset()
+      : ClassHeapStats::allocated_size_since_gc_old_space_offset();
+  return class_offset + size_field_offset;
+}
+
+
 void ClassTable::AllocationProfilePrintJSON(JSONStream* stream) {
   Isolate* isolate = Isolate::Current();
   ASSERT(isolate != NULL);
diff --git a/runtime/vm/class_table.h b/runtime/vm/class_table.h
index 9a23630..93fb514 100644
--- a/runtime/vm/class_table.h
+++ b/runtime/vm/class_table.h
@@ -195,14 +195,21 @@
   void UpdatePromoted();
 
   // Used by the generated code.
-  uword PredefinedClassHeapStatsTableAddress() {
-    return reinterpret_cast<uword>(predefined_class_heap_stats_table_);
-  }
+  static intptr_t ClassOffsetFor(intptr_t cid);
 
-  // Used by generated code.
-  uword ClassStatsTableAddress() {
-    return reinterpret_cast<uword>(&class_heap_stats_table_);
-  }
+  // Used by the generated code.
+  ClassHeapStats** TableAddressFor(intptr_t cid);
+  static intptr_t TableOffsetFor(intptr_t cid);
+
+  // Used by the generated code.
+  static intptr_t CounterOffsetFor(intptr_t cid, bool is_new_space);
+
+  // Used by the generated code.
+  ClassHeapStats** StateAddressFor(intptr_t cid,
+                                   intptr_t* state_offset);
+
+  // Used by the generated code.
+  static intptr_t SizeOffsetFor(intptr_t cid, bool is_new_space);
 
   ClassHeapStats* StatsWithUpdatedSize(intptr_t cid);
 
diff --git a/runtime/vm/compiler.cc b/runtime/vm/compiler.cc
index 9e15de3..491b571 100644
--- a/runtime/vm/compiler.cc
+++ b/runtime/vm/compiler.cc
@@ -292,7 +292,7 @@
   // We remember all the classes that are being compiled in these lists. This
   // also allows us to reset the marked_for_parsing state in case we see an
   // error.
-  VMTagScope tagScope(isolate, VMTag::kCompileTopLevelTagId);
+  VMTagScope tagScope(isolate, VMTag::kCompileClassTagId);
   Class& parse_class = Class::Handle(isolate);
   const GrowableObjectArray& parse_list =
       GrowableObjectArray::Handle(isolate, GrowableObjectArray::New(4));
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 99e9a55..b701c0e 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -92,6 +92,7 @@
       // TypeParameter.
       typeHandle_ ^= funcHandle_.result_type();
       ASSERT(typeHandle_.IsNull() ||
+             !typeHandle_.IsResolved() ||
              typeHandle_.IsTypeParameter() ||
              typeHandle_.IsCanonical());
       // Verify that the types in the function signature are all canonical or
@@ -99,7 +100,9 @@
       const intptr_t num_parameters = funcHandle_.NumParameters();
       for (intptr_t i = 0; i < num_parameters; i++) {
         typeHandle_ = funcHandle_.ParameterTypeAt(i);
-        ASSERT(typeHandle_.IsTypeParameter() || typeHandle_.IsCanonical());
+        ASSERT(typeHandle_.IsTypeParameter() ||
+               !typeHandle_.IsResolved() ||
+               typeHandle_.IsCanonical());
       }
     }
   }
@@ -5692,6 +5695,67 @@
 }
 
 
+DART_EXPORT Dart_Handle Dart_SetServiceStreamCallbacks(
+    Dart_ServiceStreamListenCallback listen_callback,
+    Dart_ServiceStreamCancelCallback cancel_callback) {
+  if (listen_callback != NULL) {
+    if (Service::stream_listen_callback() != NULL) {
+      return Api::NewError(
+          "%s permits only one listen callback to be registered, please "
+          "remove the existing callback and then add this callback",
+          CURRENT_FUNC);
+    }
+  } else {
+    if (Service::stream_listen_callback() == NULL) {
+      return Api::NewError(
+          "%s expects 'listen_callback' to be present in the callback set.",
+          CURRENT_FUNC);
+    }
+  }
+  if (cancel_callback != NULL) {
+    if (Service::stream_cancel_callback() != NULL) {
+      return Api::NewError(
+          "%s permits only one cancel callback to be registered, please "
+          "remove the existing callback and then add this callback",
+          CURRENT_FUNC);
+    }
+  } else {
+    if (Service::stream_cancel_callback() == NULL) {
+      return Api::NewError(
+          "%s expects 'cancel_callback' to be present in the callback set.",
+          CURRENT_FUNC);
+    }
+  }
+  Service::SetEmbedderStreamCallbacks(listen_callback, cancel_callback);
+  return Api::Success();
+}
+
+
+DART_EXPORT Dart_Handle Dart_ServiceSendDataEvent(const char* stream_id,
+                                                  const char* event_kind,
+                                                  const uint8_t* bytes,
+                                                  intptr_t bytes_length) {
+  Isolate* isolate = Isolate::Current();
+  DARTSCOPE(isolate);
+  if (stream_id == NULL) {
+    RETURN_NULL_ERROR(stream_id);
+  }
+  if (event_kind == NULL) {
+    RETURN_NULL_ERROR(event_kind);
+  }
+  if (bytes == NULL) {
+    RETURN_NULL_ERROR(bytes);
+  }
+  if (bytes_length < 0) {
+    return Api::NewError("%s expects argument 'bytes_length' to be >= 0.",
+                         CURRENT_FUNC);
+  }
+  Service::SendEmbedderEvent(isolate, stream_id, event_kind,
+                             bytes, bytes_length);
+  return Api::Success();
+}
+
+
 DART_EXPORT Dart_Handle Dart_TimelineDuration(const char* label,
                                               int64_t start_micros,
                                               int64_t end_micros) {
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 896e14e..46653c8 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -2494,7 +2494,7 @@
  public:
   static void CollectNewSpace(Heap::ApiCallbacks api_callbacks) {
     bool invoke_api_callbacks = (api_callbacks == Heap::kInvokeApiCallbacks);
-    Isolate::Current()->heap()->new_space_->Scavenge(invoke_api_callbacks);
+    Isolate::Current()->heap()->new_space()->Scavenge(invoke_api_callbacks);
   }
 };
 
diff --git a/runtime/vm/dart_api_message.cc b/runtime/vm/dart_api_message.cc
index 540434a..2ee1c37 100644
--- a/runtime/vm/dart_api_message.cc
+++ b/runtime/vm/dart_api_message.cc
@@ -14,16 +14,12 @@
 
 ApiMessageReader::ApiMessageReader(const uint8_t* buffer,
                                    intptr_t length,
-                                   ReAlloc alloc,
-                                   bool use_vm_isolate_snapshot)
+                                   ReAlloc alloc)
     : BaseReader(buffer, length),
       alloc_(alloc),
       backward_references_(kNumInitialReferences),
       vm_isolate_references_(kNumInitialReferences),
-      vm_symbol_references_(NULL),
-      max_vm_isolate_object_id_(
-          use_vm_isolate_snapshot ?
-          Object::vm_isolate_snapshot_object_table().Length() : 0) {
+      vm_symbol_references_(NULL) {
   Init();
 }
 
@@ -421,8 +417,7 @@
 
 
 intptr_t ApiMessageReader::NextAvailableObjectId() const {
-  return backward_references_.length() +
-      kMaxPredefinedObjectIds + max_vm_isolate_object_id_;
+  return backward_references_.length() + kMaxPredefinedObjectIds;
 }
 
 
@@ -807,10 +802,6 @@
     return &dynamic_type_marker;
   }
   intptr_t index = object_id - kMaxPredefinedObjectIds;
-  if (index < max_vm_isolate_object_id_) {
-    return AllocateDartCObjectVmIsolateObj(index);
-  }
-  index -= max_vm_isolate_object_id_;
   ASSERT((0 <= index) && (index < backward_references_.length()));
   ASSERT(backward_references_[index]->reference() != NULL);
   return backward_references_[index]->reference();
@@ -861,8 +852,6 @@
                                   Dart_CObject* obj,
                                   DeserializeState state) {
   intptr_t index = (id - kMaxPredefinedObjectIds);
-  ASSERT(index >= max_vm_isolate_object_id_);
-  index -= max_vm_isolate_object_id_;
   ASSERT(index == backward_references_.length());
   BackRefNode* node = AllocateBackRefNode(obj, state);
   ASSERT(node != NULL);
@@ -873,8 +862,6 @@
 Dart_CObject* ApiMessageReader::GetBackRef(intptr_t id) {
   ASSERT(id >= kMaxPredefinedObjectIds);
   intptr_t index = (id - kMaxPredefinedObjectIds);
-  ASSERT(index >= max_vm_isolate_object_id_);
-  index -= max_vm_isolate_object_id_;
   if (index < backward_references_.length()) {
     return backward_references_[index]->reference();
   }
@@ -1012,7 +999,7 @@
 
 void ApiMessageWriter::WriteInlinedHeader(Dart_CObject* object) {
   // Write out the serialization header value for this object.
-  WriteInlinedObjectHeader(SnapshotWriter::FirstObjectId() + object_id_);
+  WriteInlinedObjectHeader(kMaxPredefinedObjectIds + object_id_);
   // Mark object with its object id.
   MarkCObject(object, object_id_);
   // Advance object id.
@@ -1023,7 +1010,7 @@
 bool ApiMessageWriter::WriteCObject(Dart_CObject* object) {
   if (IsCObjectMarked(object)) {
     intptr_t object_id = GetMarkedCObjectMark(object);
-    WriteIndexedObject(SnapshotWriter::FirstObjectId() + object_id);
+    WriteIndexedObject(kMaxPredefinedObjectIds + object_id);
     return true;
   }
 
@@ -1058,7 +1045,7 @@
 bool ApiMessageWriter::WriteCObjectRef(Dart_CObject* object) {
   if (IsCObjectMarked(object)) {
     intptr_t object_id = GetMarkedCObjectMark(object);
-    WriteIndexedObject(SnapshotWriter::FirstObjectId() + object_id);
+    WriteIndexedObject(kMaxPredefinedObjectIds + object_id);
     return true;
   }
 
@@ -1096,7 +1083,7 @@
 
   // Write out the serialization header value for this object.
   intptr_t object_id = GetMarkedCObjectMark(object);
-  WriteInlinedObjectHeader(SnapshotWriter::FirstObjectId() + object_id);
+  WriteInlinedObjectHeader(kMaxPredefinedObjectIds + object_id);
   // Write out the class and tags information.
   WriteIndexedObject(kArrayCid);
   WriteTags(0);
diff --git a/runtime/vm/dart_api_message.h b/runtime/vm/dart_api_message.h
index 8d38364..70d55f9 100644
--- a/runtime/vm/dart_api_message.h
+++ b/runtime/vm/dart_api_message.h
@@ -48,8 +48,7 @@
   // recommended.
   ApiMessageReader(const uint8_t* buffer,
                    intptr_t length,
-                   ReAlloc alloc,
-                   bool use_vm_isolate_snapshot = true);
+                   ReAlloc alloc);
   ~ApiMessageReader() { }
 
   Dart_CObject* ReadMessage();
@@ -147,7 +146,6 @@
   ApiGrowableArray<BackRefNode*> backward_references_;
   ApiGrowableArray<Dart_CObject*> vm_isolate_references_;
   Dart_CObject** vm_symbol_references_;
-  intptr_t max_vm_isolate_object_id_;
 
   Dart_CObject type_arguments_marker;
   Dart_CObject dynamic_type_marker;
@@ -202,7 +200,6 @@
   Dart_CObject** forward_list_;
   intptr_t forward_list_length_;
   intptr_t forward_id_;
-  intptr_t max_vm_isolate_object_id_;
 
   DISALLOW_COPY_AND_ASSIGN(ApiMessageWriter);
 };
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 6f761b6..c7d549c 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -236,8 +236,8 @@
 
 bool Debugger::HasEventHandler() {
   return ((event_handler_ != NULL) ||
-          Service::NeedsIsolateEvents() ||
-          Service::NeedsDebugEvents());
+          Service::isolate_stream.enabled() ||
+          Service::debug_stream.enabled());
 }
 
 
@@ -251,11 +251,11 @@
     case DebuggerEvent::kBreakpointReached:
     case DebuggerEvent::kExceptionThrown:
     case DebuggerEvent::kIsolateInterrupted:
-      return Service::NeedsDebugEvents();
+      return Service::debug_stream.enabled();
 
     case DebuggerEvent::kIsolateCreated:
     case DebuggerEvent::kIsolateShutdown:
-      return Service::NeedsIsolateEvents();
+      return Service::isolate_stream.enabled();
 
     default:
       UNREACHABLE();
@@ -324,10 +324,10 @@
 
 // The vm service handles breakpoint notifications in a different way
 // than the regular debugger breakpoint notifications.
-static void SendServiceBreakpointEvent(ServiceEvent::EventType type,
+static void SendServiceBreakpointEvent(ServiceEvent::EventKind kind,
                                        Breakpoint* bpt) {
-  if (Service::NeedsDebugEvents()) {
-    ServiceEvent service_event(Isolate::Current(), type);
+  if (Service::debug_stream.enabled()) {
+    ServiceEvent service_event(Isolate::Current(), kind);
     service_event.set_breakpoint(bpt);
     Service::HandleEvent(&service_event);
   }
@@ -658,7 +658,7 @@
         OS::PrintErr("\tFound saved current ctx at index %d\n",
             var_info.index());
       }
-      ctx_ ^= GetLocalVar(var_info.index());
+      ctx_ ^= GetStackVar(var_info.index());
       return ctx_;
     }
   }
@@ -667,6 +667,21 @@
 }
 
 
+RawObject* ActivationFrame::GetAsyncOperation() {
+  GetVarDescriptors();
+  intptr_t var_desc_len = var_descriptors_.Length();
+  for (intptr_t i = 0; i < var_desc_len; i++) {
+    RawLocalVarDescriptors::VarInfo var_info;
+    var_descriptors_.GetInfo(i, &var_info);
+    const int8_t kind = var_info.kind();
+    if (kind == RawLocalVarDescriptors::kAsyncOperation) {
+      return GetContextVar(var_info.scope_id, var_info.index());
+    }
+  }
+  return Object::null();
+}
+
+
 ActivationFrame* DebuggerStackTrace::GetHandlerFrame(
     const Instance& exc_obj) const {
   ExceptionHandlers& handlers = ExceptionHandlers::Handle();
@@ -816,7 +831,7 @@
 }
 
 
-RawObject* ActivationFrame::GetLocalVar(intptr_t slot_index) {
+RawObject* ActivationFrame::GetStackVar(intptr_t slot_index) {
   if (deopt_frame_.IsNull()) {
     uword var_address = fp() + slot_index * kWordSize;
     return reinterpret_cast<RawObject*>(
@@ -827,25 +842,15 @@
 }
 
 
-RawInstance* ActivationFrame::GetLocalInstanceVar(intptr_t slot_index) {
-  Instance& instance = Instance::Handle();
-  instance ^= GetLocalVar(slot_index);
-  return instance.raw();
-}
-
-
 void ActivationFrame::PrintContextMismatchError(
-    const String& var_name,
     intptr_t ctx_slot,
     intptr_t frame_ctx_level,
     intptr_t var_ctx_level) {
   OS::PrintErr("-------------------------\n"
                "Encountered context mismatch\n"
-               "\tvar name: %s\n"
                "\tctx_slot: %" Pd "\n"
                "\tframe_ctx_level: %" Pd "\n"
                "\tvar_ctx_level: %" Pd "\n\n",
-               var_name.ToCString(),
                ctx_slot,
                frame_ctx_level,
                var_ctx_level);
@@ -903,44 +908,45 @@
   ASSERT(value != NULL);
   const int8_t kind = var_info.kind();
   if (kind == RawLocalVarDescriptors::kStackVar) {
-    *value = GetLocalInstanceVar(var_info.index());
+    *value = GetStackVar(var_info.index());
   } else {
     ASSERT(kind == RawLocalVarDescriptors::kContextVar);
-    const Context& ctx = GetSavedCurrentContext();
-    ASSERT(!ctx.IsNull());
+    *value = GetContextVar(var_info.scope_id, var_info.index());
+  }
+}
 
-    // The context level at the PC/token index of this activation frame.
-    intptr_t frame_ctx_level = ContextLevel();
 
-    // The context level of the variable.
-    intptr_t var_ctx_level = var_info.scope_id;
-    intptr_t level_diff = frame_ctx_level - var_ctx_level;
-    intptr_t ctx_slot = var_info.index();
-    if (level_diff == 0) {
-      if ((ctx_slot < 0) ||
-          (ctx_slot >= ctx.num_variables())) {
-        PrintContextMismatchError(*name, ctx_slot,
-                                  frame_ctx_level, var_ctx_level);
-      }
-      ASSERT((ctx_slot >= 0) && (ctx_slot < ctx.num_variables()));
-      *value = ctx.At(ctx_slot);
-    } else {
-      ASSERT(level_diff > 0);
-      Context& var_ctx = Context::Handle(ctx.raw());
-      while (level_diff > 0 && !var_ctx.IsNull()) {
-        level_diff--;
-        var_ctx = var_ctx.parent();
-      }
-      if (var_ctx.IsNull() ||
-          (ctx_slot < 0) ||
-          (ctx_slot >= var_ctx.num_variables())) {
-        PrintContextMismatchError(*name, ctx_slot,
-                                  frame_ctx_level, var_ctx_level);
-      }
-      ASSERT(!var_ctx.IsNull());
-      ASSERT((ctx_slot >= 0) && (ctx_slot < var_ctx.num_variables()));
-      *value = var_ctx.At(ctx_slot);
+RawObject* ActivationFrame::GetContextVar(intptr_t var_ctx_level,
+                                          intptr_t ctx_slot) {
+  const Context& ctx = GetSavedCurrentContext();
+  ASSERT(!ctx.IsNull());
+
+  // The context level at the PC/token index of this activation frame.
+  intptr_t frame_ctx_level = ContextLevel();
+
+  intptr_t level_diff = frame_ctx_level - var_ctx_level;
+  if (level_diff == 0) {
+    if ((ctx_slot < 0) ||
+        (ctx_slot >= ctx.num_variables())) {
+      PrintContextMismatchError(ctx_slot, frame_ctx_level, var_ctx_level);
     }
+    ASSERT((ctx_slot >= 0) && (ctx_slot < ctx.num_variables()));
+    return ctx.At(ctx_slot);
+  } else {
+    ASSERT(level_diff > 0);
+    Context& var_ctx = Context::Handle(ctx.raw());
+    while (level_diff > 0 && !var_ctx.IsNull()) {
+      level_diff--;
+      var_ctx = var_ctx.parent();
+    }
+    if (var_ctx.IsNull() ||
+        (ctx_slot < 0) ||
+        (ctx_slot >= var_ctx.num_variables())) {
+      PrintContextMismatchError(ctx_slot, frame_ctx_level, var_ctx_level);
+    }
+    ASSERT(!var_ctx.IsNull());
+    ASSERT((ctx_slot >= 0) && (ctx_slot < var_ctx.num_variables()));
+    return var_ctx.At(ctx_slot);
   }
 }
 
@@ -1844,8 +1850,8 @@
 
 
 BreakpointLocation* Debugger::SetBreakpoint(const Script& script,
-                                          intptr_t token_pos,
-                                          intptr_t last_token_pos) {
+                                            intptr_t token_pos,
+                                            intptr_t last_token_pos) {
   Function& func = Function::Handle(isolate_);
   func = FindBestFit(script, token_pos);
   if (func.IsNull()) {
@@ -2376,9 +2382,12 @@
     RemoveBreakpoint(bpt->id());
     bpt = NULL;
   }
+
   DebuggerEvent event(isolate_, DebuggerEvent::kBreakpointReached);
   event.set_top_frame(top_frame);
   event.set_breakpoint(bpt);
+  Object& closure_or_null = Object::Handle(top_frame->GetAsyncOperation());
+  event.set_async_continuation(&closure_or_null);
   Pause(&event);
 }
 
diff --git a/runtime/vm/debugger.h b/runtime/vm/debugger.h
index 2a25220..faaf558 100644
--- a/runtime/vm/debugger.h
+++ b/runtime/vm/debugger.h
@@ -261,6 +261,7 @@
   RawObject* GetReceiver();
 
   const Context& GetSavedCurrentContext();
+  RawObject* GetAsyncOperation();
 
   RawObject* Evaluate(const String& expr);
 
@@ -270,8 +271,7 @@
   void PrintToJSONObject(JSONObject* jsobj, bool full = false);
 
  private:
-  void PrintContextMismatchError(const String& var_name,
-                                 intptr_t ctx_slot,
+  void PrintContextMismatchError(intptr_t ctx_slot,
                                  intptr_t frame_ctx_level,
                                  intptr_t var_ctx_level);
 
@@ -280,8 +280,8 @@
   void GetVarDescriptors();
   void GetDescIndices();
 
-  RawObject* GetLocalVar(intptr_t slot_index);
-  RawInstance* GetLocalInstanceVar(intptr_t slot_index);
+  RawObject* GetStackVar(intptr_t slot_index);
+  RawObject* GetContextVar(intptr_t ctxt_level, intptr_t slot_index);
 
   uword pc_;
   uword fp_;
@@ -353,7 +353,8 @@
         type_(event_type),
         top_frame_(NULL),
         breakpoint_(NULL),
-        exception_(NULL) {}
+        exception_(NULL),
+        async_continuation_(NULL) {}
 
   Isolate* isolate() const { return isolate_; }
 
@@ -392,6 +393,15 @@
     exception_ = exception;
   }
 
+  const Object* async_continuation() const {
+    ASSERT(type_ == kBreakpointReached);
+    return async_continuation_;
+  }
+  void set_async_continuation(const Object* closure) {
+    ASSERT(type_ == kBreakpointReached);
+    async_continuation_ = closure;
+  }
+
   Dart_Port isolate_id() const {
     return isolate_->main_port();
   }
@@ -402,6 +412,7 @@
   ActivationFrame* top_frame_;
   Breakpoint* breakpoint_;
   const Object* exception_;
+  const Object* async_continuation_;
 };
 
 
diff --git a/runtime/vm/debugger_api_impl_test.cc b/runtime/vm/debugger_api_impl_test.cc
index 925e95a..e539374 100644
--- a/runtime/vm/debugger_api_impl_test.cc
+++ b/runtime/vm/debugger_api_impl_test.cc
@@ -658,17 +658,21 @@
 }
 
 static const char* step_into_expected_bpts[] = {
-    "main",
-      "foo",
-        "f1",
-      "foo",
-      "foo",
-        "X.kvmk",
-          "f2",
-        "X.kvmk",
-        "X.kvmk",
-      "foo",
-    "main"
+    "main",        // entry
+    "main",        // call foo
+      "foo",       // entry
+      "foo",       // call f1
+        "f1",      // entry
+      "foo",       // call initializer
+      "foo",       // call kvmk
+        "X.kvmk",  // entry
+        "X.kvmk",  // call
+          "f2",    // entry
+          "f2",    // return
+        "X.kvmk",  // call +
+        "X.kvmk",  // return
+      "foo",       // return
+    "main"         // return
 };
 
 void TestStepIntoHandler(Dart_IsolateId isolate_id,
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index abdd58e..9457956 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -4198,6 +4198,11 @@
   ASSERT((node->label() == NULL) || !is_top_level_sequence);
   NestedBlock nested_block(owner(), node);
 
+  if (FLAG_support_debugger && is_top_level_sequence) {
+    AddInstruction(new(Z) DebugStepCheckInstr(function.token_pos(),
+                                              RawPcDescriptors::kRuntimeCall));
+  }
+
   if (num_context_variables > 0) {
     // The local scope declares variables that are captured.
     // Allocate and chain a new context (Except don't chain when at the function
diff --git a/runtime/vm/gc_sweeper.cc b/runtime/vm/gc_sweeper.cc
index 2b4ee58..4cd2243 100644
--- a/runtime/vm/gc_sweeper.cc
+++ b/runtime/vm/gc_sweeper.cc
@@ -137,13 +137,14 @@
       if (page == last_) break;
       page = next_page;
     }
+    // Exit isolate cleanly *before* notifying it, to avoid shutdown race.
+    Thread::ExitIsolateAsHelper();
     // This sweeper task is done. Notify the original isolate.
     {
       MonitorLocker ml(old_space_->tasks_lock());
       old_space_->set_tasks(old_space_->tasks() - 1);
       ml.Notify();
     }
-    Thread::ExitIsolateAsHelper();
   }
 
  private:
diff --git a/runtime/vm/handles.cc b/runtime/vm/handles.cc
index bd45c73..f636fdd 100644
--- a/runtime/vm/handles.cc
+++ b/runtime/vm/handles.cc
@@ -91,47 +91,57 @@
 }
 
 
-HandleScope::HandleScope(Isolate* isolate) : StackResource(isolate) {
-  ASSERT(isolate->no_handle_scope_depth() == 0);
-  VMHandles* handles = isolate->current_zone()->handles();
+void HandleScope::Initialize() {
+  ASSERT(thread()->no_handle_scope_depth() == 0);
+  VMHandles* handles = thread()->zone()->handles();
   ASSERT(handles != NULL);
   saved_handle_block_ = handles->scoped_blocks_;
   saved_handle_slot_ = handles->scoped_blocks_->next_handle_slot();
 #if defined(DEBUG)
-  link_ = isolate->top_handle_scope();
-  isolate->set_top_handle_scope(this);
+  link_ = thread()->top_handle_scope();
+  thread()->set_top_handle_scope(this);
 #endif
 }
 
 
+HandleScope::HandleScope(Thread* thread) : StackResource(thread) {
+  Initialize();
+}
+
+
+HandleScope::HandleScope(Isolate* isolate) : StackResource(isolate) {
+  Initialize();
+}
+
+
 HandleScope::~HandleScope() {
-  ASSERT(isolate()->current_zone() != NULL);
-  VMHandles* handles = isolate()->current_zone()->handles();
+  ASSERT(thread()->zone() != NULL);
+  VMHandles* handles = thread()->zone()->handles();
   ASSERT(handles != NULL);
   handles->scoped_blocks_ = saved_handle_block_;
   handles->scoped_blocks_->set_next_handle_slot(saved_handle_slot_);
 #if defined(DEBUG)
   handles->VerifyScopedHandleState();
   handles->ZapFreeScopedHandles();
-  ASSERT(isolate()->top_handle_scope() == this);
-  isolate()->set_top_handle_scope(link_);
+  ASSERT(thread()->top_handle_scope() == this);
+  thread()->set_top_handle_scope(link_);
 #endif
 }
 
 
 #if defined(DEBUG)
 NoHandleScope::NoHandleScope(Isolate* isolate) : StackResource(isolate) {
-  isolate->IncrementNoHandleScopeDepth();
+  thread()->IncrementNoHandleScopeDepth();
 }
 
 
-NoHandleScope::NoHandleScope() : StackResource(Isolate::Current()) {
-  isolate()->IncrementNoHandleScopeDepth();
+NoHandleScope::NoHandleScope() : StackResource(Thread::Current()) {
+  thread()->IncrementNoHandleScopeDepth();
 }
 
 
 NoHandleScope::~NoHandleScope() {
-  isolate()->DecrementNoHandleScopeDepth();
+  thread()->DecrementNoHandleScopeDepth();
 }
 #endif  // defined(DEBUG)
 
diff --git a/runtime/vm/handles.h b/runtime/vm/handles.h
index da283d7..f86d0bb 100644
--- a/runtime/vm/handles.h
+++ b/runtime/vm/handles.h
@@ -292,7 +292,7 @@
 // The class HandleScope is used to start a new handles scope in the code.
 // It is used as follows:
 // {
-//   HANDLESCOPE(isolate);
+//   HANDLESCOPE(thread);
 //   ....
 //   .....
 //   code that creates some scoped handles.
@@ -300,10 +300,14 @@
 // }
 class HandleScope : public StackResource {
  public:
+  explicit HandleScope(Thread* thread);
+  // DEPRECATED: Use Thread version.
   explicit HandleScope(Isolate* isolate);
   ~HandleScope();
 
  private:
+  void Initialize();
+
   VMHandles::HandlesBlock* saved_handle_block_;  // Handle block at prev scope.
   uword saved_handle_slot_;  // Next available handle slot at previous scope.
 #if defined(DEBUG)
@@ -313,8 +317,8 @@
 };
 
 // Macro to start a new Handle scope.
-#define HANDLESCOPE(isolate)                                                  \
-    dart::HandleScope vm_internal_handles_scope_(isolate);
+#define HANDLESCOPE(isolate_or_thread)                                         \
+    dart::HandleScope vm_internal_handles_scope_(isolate_or_thread);
 
 
 // The class NoHandleScope is used in critical regions of the virtual machine
@@ -323,7 +327,7 @@
 // during this critical area.
 // It is used as follows:
 // {
-//   NOHANDLESCOPE(isolate);
+//   NOHANDLESCOPE(thread);
 //   ....
 //   .....
 //   critical code that manipulates dart objects directly.
@@ -332,6 +336,8 @@
 #if defined(DEBUG)
 class NoHandleScope : public StackResource {
  public:
+  explicit NoHandleScope(Thread* thread);
+  // DEPRECATED: Use Thread version.
   explicit NoHandleScope(Isolate* isolate);
   NoHandleScope();
   ~NoHandleScope();
@@ -342,6 +348,7 @@
 #else  // defined(DEBUG)
 class NoHandleScope : public ValueObject {
  public:
+  explicit NoHandleScope(Thread* thread) { }
   explicit NoHandleScope(Isolate* isolate) { }
   NoHandleScope() { }
   ~NoHandleScope() { }
@@ -352,8 +359,8 @@
 #endif  // defined(DEBUG)
 
 // Macro to start a no handles scope in the code.
-#define NOHANDLESCOPE(isolate)                                                 \
-    dart::NoHandleScope no_vm_internal_handles_scope_(isolate);
+#define NOHANDLESCOPE(isolate_or_thread)                                       \
+    dart::NoHandleScope no_vm_internal_handles_scope_(isolate_or_thread);
 
 }  // namespace dart
 
diff --git a/runtime/vm/handles_impl.h b/runtime/vm/handles_impl.h
index a299b45..370b34e 100644
--- a/runtime/vm/handles_impl.h
+++ b/runtime/vm/handles_impl.h
@@ -96,10 +96,8 @@
 #if defined(DEBUG)
   Thread* thread = Thread::Current();
   ASSERT(thread->zone() == zone);
-  Isolate* isolate = thread->isolate();
-  ASSERT(isolate != NULL);
-  ASSERT(isolate->top_handle_scope() != NULL);
-  ASSERT(isolate->no_handle_scope_depth() == 0);
+  ASSERT(thread->top_handle_scope() != NULL);
+  ASSERT(thread->no_handle_scope_depth() == 0);
 #endif  // DEBUG
   Handles* handles = zone->handles();
   ASSERT(handles != NULL);
@@ -116,9 +114,7 @@
 #if defined(DEBUG)
   Thread* thread = Thread::Current();
   ASSERT(thread->zone() == zone);
-  Isolate* isolate = thread->isolate();
-  ASSERT(isolate != NULL);
-  ASSERT(isolate->no_handle_scope_depth() == 0);
+  ASSERT(thread->no_handle_scope_depth() == 0);
 #endif  // DEBUG
   Handles* handles = zone->handles();
   ASSERT(handles != NULL);
diff --git a/runtime/vm/heap.cc b/runtime/vm/heap.cc
index e66d6db..06da6f1 100644
--- a/runtime/vm/heap.cc
+++ b/runtime/vm/heap.cc
@@ -48,6 +48,8 @@
            intptr_t max_old_gen_words,
            intptr_t max_external_words)
     : isolate_(isolate),
+      new_space_(this, max_new_gen_semi_words, kNewObjectAlignmentOffset),
+      old_space_(this, max_old_gen_words, max_external_words),
       read_only_(false),
       gc_in_progress_(false),
       pretenure_policy_(0) {
@@ -57,17 +59,11 @@
     new_weak_tables_[sel] = new WeakTable();
     old_weak_tables_[sel] = new WeakTable();
   }
-  new_space_ = new Scavenger(this,
-                             max_new_gen_semi_words,
-                             kNewObjectAlignmentOffset);
-  old_space_ = new PageSpace(this, max_old_gen_words, max_external_words);
   stats_.num_ = 0;
 }
 
 
 Heap::~Heap() {
-  delete new_space_;
-  delete old_space_;
   for (int sel = 0;
        sel < kNumWeakSelectors;
        sel++) {
@@ -79,10 +75,10 @@
 
 uword Heap::AllocateNew(intptr_t size) {
   ASSERT(isolate()->no_safepoint_scope_depth() == 0);
-  uword addr = new_space_->TryAllocate(size);
+  uword addr = new_space_.TryAllocate(size);
   if (addr == 0) {
     CollectGarbage(kNew);
-    addr = new_space_->TryAllocate(size);
+    addr = new_space_.TryAllocate(size);
     if (addr == 0) {
       return AllocateOld(size, HeapPage::kData);
     }
@@ -93,18 +89,18 @@
 
 uword Heap::AllocateOld(intptr_t size, HeapPage::PageType type) {
   ASSERT(isolate()->no_safepoint_scope_depth() == 0);
-  uword addr = old_space_->TryAllocate(size, type);
+  uword addr = old_space_.TryAllocate(size, type);
   if (addr != 0) {
     return addr;
   }
   // If we are in the process of running a sweep wait for the sweeper to free
   // memory.
   {
-    MonitorLocker ml(old_space_->tasks_lock());
-    addr = old_space_->TryAllocate(size, type);
-    while ((addr == 0) && (old_space_->tasks() > 0)) {
+    MonitorLocker ml(old_space_.tasks_lock());
+    addr = old_space_.TryAllocate(size, type);
+    while ((addr == 0) && (old_space_.tasks() > 0)) {
       ml.Wait();
-      addr = old_space_->TryAllocate(size, type);
+      addr = old_space_.TryAllocate(size, type);
     }
   }
   if (addr != 0) {
@@ -112,36 +108,36 @@
   }
   // All GC tasks finished without allocating successfully. Run a full GC.
   CollectAllGarbage();
-  addr = old_space_->TryAllocate(size, type);
+  addr = old_space_.TryAllocate(size, type);
   if (addr != 0) {
     return addr;
   }
   // Wait for all of the concurrent tasks to finish before giving up.
   {
-    MonitorLocker ml(old_space_->tasks_lock());
-    addr = old_space_->TryAllocate(size, type);
-    while ((addr == 0) && (old_space_->tasks() > 0)) {
+    MonitorLocker ml(old_space_.tasks_lock());
+    addr = old_space_.TryAllocate(size, type);
+    while ((addr == 0) && (old_space_.tasks() > 0)) {
       ml.Wait();
-      addr = old_space_->TryAllocate(size, type);
+      addr = old_space_.TryAllocate(size, type);
     }
   }
   if (addr != 0) {
     return addr;
   }
   // Force growth before attempting a synchronous GC.
-  addr = old_space_->TryAllocate(size, type, PageSpace::kForceGrowth);
+  addr = old_space_.TryAllocate(size, type, PageSpace::kForceGrowth);
   if (addr != 0) {
     return addr;
   }
   // Before throwing an out-of-memory error try a synchronous GC.
   CollectAllGarbage();
   {
-    MonitorLocker ml(old_space_->tasks_lock());
-    while (old_space_->tasks() > 0) {
+    MonitorLocker ml(old_space_.tasks_lock());
+    while (old_space_.tasks() > 0) {
       ml.Wait();
     }
   }
-  addr = old_space_->TryAllocate(size, type, PageSpace::kForceGrowth);
+  addr = old_space_.TryAllocate(size, type, PageSpace::kForceGrowth);
   if (addr != 0) {
     return addr;
   }
@@ -154,7 +150,7 @@
 
 uword Heap::AllocatePretenured(intptr_t size) {
   ASSERT(isolate()->no_safepoint_scope_depth() == 0);
-  uword addr = old_space_->TryAllocateDataBump(size, PageSpace::kControlGrowth);
+  uword addr = old_space_.TryAllocateDataBump(size, PageSpace::kControlGrowth);
   if (addr != 0) return addr;
   return AllocateOld(size, HeapPage::kData);
 }
@@ -163,16 +159,16 @@
 void Heap::AllocateExternal(intptr_t size, Space space) {
   ASSERT(isolate()->no_safepoint_scope_depth() == 0);
   if (space == kNew) {
-    new_space_->AllocateExternal(size);
-    if (new_space_->ExternalInWords() > (FLAG_new_gen_ext_limit * MBInWords)) {
+    new_space_.AllocateExternal(size);
+    if (new_space_.ExternalInWords() > (FLAG_new_gen_ext_limit * MBInWords)) {
       // Attempt to free some external allocation by a scavenge. (If the total
       // remains above the limit, next external alloc will trigger another.)
       CollectGarbage(kNew);
     }
   } else {
     ASSERT(space == kOld);
-    old_space_->AllocateExternal(size);
-    if (old_space_->NeedsGarbageCollection()) {
+    old_space_.AllocateExternal(size);
+    if (old_space_.NeedsGarbageCollection()) {
       CollectAllGarbage();
     }
   }
@@ -180,42 +176,42 @@
 
 void Heap::FreeExternal(intptr_t size, Space space) {
   if (space == kNew) {
-    new_space_->FreeExternal(size);
+    new_space_.FreeExternal(size);
   } else {
     ASSERT(space == kOld);
-    old_space_->FreeExternal(size);
+    old_space_.FreeExternal(size);
   }
 }
 
 void Heap::PromoteExternal(intptr_t size) {
-  new_space_->FreeExternal(size);
-  old_space_->AllocateExternal(size);
+  new_space_.FreeExternal(size);
+  old_space_.AllocateExternal(size);
 }
 
 bool Heap::Contains(uword addr) const {
-  return new_space_->Contains(addr) ||
-      old_space_->Contains(addr);
+  return new_space_.Contains(addr) ||
+      old_space_.Contains(addr);
 }
 
 
 bool Heap::NewContains(uword addr) const {
-  return new_space_->Contains(addr);
+  return new_space_.Contains(addr);
 }
 
 
 bool Heap::OldContains(uword addr) const {
-  return old_space_->Contains(addr);
+  return old_space_.Contains(addr);
 }
 
 
 bool Heap::CodeContains(uword addr) const {
-  return old_space_->Contains(addr, HeapPage::kExecutable);
+  return old_space_.Contains(addr, HeapPage::kExecutable);
 }
 
 
 void Heap::VisitObjects(ObjectVisitor* visitor) const {
-  new_space_->VisitObjects(visitor);
-  old_space_->VisitObjects(visitor);
+  new_space_.VisitObjects(visitor);
+  old_space_.VisitObjects(visitor);
 }
 
 
@@ -252,26 +248,26 @@
 void Heap::IterateObjects(ObjectVisitor* visitor) const {
   // The visitor must not allocate from the heap.
   NoSafepointScope no_safepoint_scope_;
-  new_space_->VisitObjects(visitor);
+  new_space_.VisitObjects(visitor);
   IterateOldObjects(visitor);
 }
 
 
 void Heap::IterateOldObjects(ObjectVisitor* visitor) const {
   HeapIterationScope heap_iteration_scope;
-  old_space_->VisitObjects(visitor);
+  old_space_.VisitObjects(visitor);
 }
 
 
 void Heap::VisitObjectPointers(ObjectPointerVisitor* visitor) const {
-  new_space_->VisitObjectPointers(visitor);
-  old_space_->VisitObjectPointers(visitor);
+  new_space_.VisitObjectPointers(visitor);
+  old_space_.VisitObjectPointers(visitor);
 }
 
 
 RawInstructions* Heap::FindObjectInCodeSpace(FindObjectVisitor* visitor) const {
   // Only executable pages can have RawInstructions objects.
-  RawObject* raw_obj = old_space_->FindObject(visitor, HeapPage::kExecutable);
+  RawObject* raw_obj = old_space_.FindObject(visitor, HeapPage::kExecutable);
   ASSERT((raw_obj == Object::null()) ||
          (raw_obj->GetClassId() == kInstructionsCid));
   return reinterpret_cast<RawInstructions*>(raw_obj);
@@ -280,12 +276,12 @@
 
 RawObject* Heap::FindOldObject(FindObjectVisitor* visitor) const {
   HeapIterationScope heap_iteration_scope;
-  return old_space_->FindObject(visitor, HeapPage::kData);
+  return old_space_.FindObject(visitor, HeapPage::kData);
 }
 
 
 RawObject* Heap::FindNewObject(FindObjectVisitor* visitor) const {
-  return new_space_->FindObject(visitor);
+  return new_space_.FindObject(visitor);
 }
 
 
@@ -318,12 +314,12 @@
                                 "CollectNewGeneration");
       RecordBeforeGC(kNew, reason);
       UpdateClassHeapStatsBeforeGC(kNew);
-      new_space_->Scavenge(invoke_api_callbacks);
+      new_space_.Scavenge(invoke_api_callbacks);
       isolate()->class_table()->UpdatePromoted();
       UpdatePretenurePolicy();
       RecordAfterGC();
       PrintStats();
-      if (old_space_->NeedsGarbageCollection()) {
+      if (old_space_.NeedsGarbageCollection()) {
         // Old collections should call the API callbacks.
         CollectGarbage(kOld, kInvokeApiCallbacks, kPromotion);
       }
@@ -337,7 +333,7 @@
                                 "CollectOldGeneration");
       RecordBeforeGC(kOld, reason);
       UpdateClassHeapStatsBeforeGC(kOld);
-      old_space_->MarkSweep(invoke_api_callbacks);
+      old_space_.MarkSweep(invoke_api_callbacks);
       RecordAfterGC();
       PrintStats();
       break;
@@ -377,7 +373,7 @@
                               "CollectNewGeneration");
     RecordBeforeGC(kNew, kFull);
     UpdateClassHeapStatsBeforeGC(kNew);
-    new_space_->Scavenge(kInvokeApiCallbacks);
+    new_space_.Scavenge(kInvokeApiCallbacks);
     isolate()->class_table()->UpdatePromoted();
     UpdatePretenurePolicy();
     RecordAfterGC();
@@ -390,7 +386,7 @@
                               "CollectOldGeneration");
     RecordBeforeGC(kOld, kFull);
     UpdateClassHeapStatsBeforeGC(kOld);
-    old_space_->MarkSweep(kInvokeApiCallbacks);
+    old_space_.MarkSweep(kInvokeApiCallbacks);
     RecordAfterGC();
     PrintStats();
   }
@@ -432,47 +428,67 @@
 
 
 void Heap::SetGrowthControlState(bool state) {
-  old_space_->SetGrowthControlState(state);
+  old_space_.SetGrowthControlState(state);
 }
 
 
 bool Heap::GrowthControlState() {
-  return old_space_->GrowthControlState();
+  return old_space_.GrowthControlState();
 }
 
 
 void Heap::WriteProtect(bool read_only) {
   read_only_ = read_only;
-  new_space_->WriteProtect(read_only);
-  old_space_->WriteProtect(read_only);
+  new_space_.WriteProtect(read_only);
+  old_space_.WriteProtect(read_only);
 }
 
 
 uword Heap::TopAddress(Heap::Space space) {
   if (space == kNew) {
-    return reinterpret_cast<uword>(new_space_->TopAddress());
+    return reinterpret_cast<uword>(new_space_.TopAddress());
   } else {
     ASSERT(space == kPretenured);
-    return reinterpret_cast<uword>(old_space_->TopAddress());
+    return reinterpret_cast<uword>(old_space_.TopAddress());
   }
 }
 
 
 uword Heap::EndAddress(Heap::Space space) {
   if (space == kNew) {
-    return reinterpret_cast<uword>(new_space_->EndAddress());
+    return reinterpret_cast<uword>(new_space_.EndAddress());
   } else {
     ASSERT(space == kPretenured);
-    return reinterpret_cast<uword>(old_space_->EndAddress());
+    return reinterpret_cast<uword>(old_space_.EndAddress());
   }
 }
 
 
-Heap::Space Heap::SpaceForAllocation(intptr_t cid) const {
+Heap::Space Heap::SpaceForAllocation(intptr_t cid) {
   return FLAG_pretenure_all ? kPretenured : kNew;
 }
 
 
+intptr_t Heap::TopOffset(Heap::Space space) {
+  if (space == kNew) {
+    return OFFSET_OF(Heap, new_space_) + Scavenger::top_offset();
+  } else {
+    ASSERT(space == kPretenured);
+    return OFFSET_OF(Heap, old_space_) + PageSpace::top_offset();
+  }
+}
+
+
+intptr_t Heap::EndOffset(Heap::Space space) {
+  if (space == kNew) {
+    return OFFSET_OF(Heap, new_space_) + Scavenger::end_offset();
+  } else {
+    ASSERT(space == kPretenured);
+    return OFFSET_OF(Heap, old_space_) + PageSpace::end_offset();
+  }
+}
+
+
 void Heap::Init(Isolate* isolate,
                 intptr_t max_new_gen_words,
                 intptr_t max_old_gen_words,
@@ -487,17 +503,17 @@
 
 
 void Heap::GetMergedAddressRange(uword* start, uword* end) const {
-  if (new_space_->CapacityInWords() != 0) {
+  if (new_space_.CapacityInWords() != 0) {
     uword new_start;
     uword new_end;
-    new_space_->StartEndAddress(&new_start, &new_end);
+    new_space_.StartEndAddress(&new_start, &new_end);
     *start = Utils::Minimum(new_start, *start);
     *end = Utils::Maximum(new_end, *end);
   }
-  if (old_space_->CapacityInWords() != 0) {
+  if (old_space_.CapacityInWords() != 0) {
     uword old_start;
     uword old_end;
-    old_space_->StartEndAddress(&old_start, &old_end);
+    old_space_.StartEndAddress(&old_start, &old_end);
     *start = Utils::Minimum(old_start, *start);
     *end = Utils::Maximum(old_end, *end);
   }
@@ -556,33 +572,33 @@
 
 
 intptr_t Heap::UsedInWords(Space space) const {
-  return space == kNew ? new_space_->UsedInWords() : old_space_->UsedInWords();
+  return space == kNew ? new_space_.UsedInWords() : old_space_.UsedInWords();
 }
 
 
 intptr_t Heap::CapacityInWords(Space space) const {
-  return space == kNew ? new_space_->CapacityInWords() :
-                         old_space_->CapacityInWords();
+  return space == kNew ? new_space_.CapacityInWords() :
+                         old_space_.CapacityInWords();
 }
 
 intptr_t Heap::ExternalInWords(Space space) const {
-  return space == kNew ? new_space_->ExternalInWords() :
-                         old_space_->ExternalInWords();
+  return space == kNew ? new_space_.ExternalInWords() :
+                         old_space_.ExternalInWords();
 }
 
 int64_t Heap::GCTimeInMicros(Space space) const {
   if (space == kNew) {
-    return new_space_->gc_time_micros();
+    return new_space_.gc_time_micros();
   }
-  return old_space_->gc_time_micros();
+  return old_space_.gc_time_micros();
 }
 
 
 intptr_t Heap::Collections(Space space) const {
   if (space == kNew) {
-    return new_space_->collections();
+    return new_space_.collections();
   }
-  return old_space_->collections();
+  return old_space_.collections();
 }
 
 
@@ -639,9 +655,9 @@
 
 void Heap::PrintToJSONObject(Space space, JSONObject* object) const {
   if (space == kNew) {
-    new_space_->PrintToJSONObject(object);
+    new_space_.PrintToJSONObject(object);
   } else {
-    old_space_->PrintToJSONObject(object);
+    old_space_.PrintToJSONObject(object);
   }
 }
 
@@ -653,8 +669,8 @@
   stats_.space_ = space;
   stats_.reason_ = reason;
   stats_.before_.micros_ = OS::GetCurrentTimeMicros();
-  stats_.before_.new_ = new_space_->GetCurrentUsage();
-  stats_.before_.old_ = old_space_->GetCurrentUsage();
+  stats_.before_.new_ = new_space_.GetCurrentUsage();
+  stats_.before_.old_ = old_space_.GetCurrentUsage();
   stats_.times_[0] = 0;
   stats_.times_[1] = 0;
   stats_.times_[2] = 0;
@@ -670,17 +686,17 @@
   stats_.after_.micros_ = OS::GetCurrentTimeMicros();
   int64_t delta = stats_.after_.micros_ - stats_.before_.micros_;
   if (stats_.space_ == kNew) {
-    new_space_->AddGCTime(delta);
-    new_space_->IncrementCollections();
+    new_space_.AddGCTime(delta);
+    new_space_.IncrementCollections();
   } else {
-    old_space_->AddGCTime(delta);
-    old_space_->IncrementCollections();
+    old_space_.AddGCTime(delta);
+    old_space_.IncrementCollections();
   }
-  stats_.after_.new_ = new_space_->GetCurrentUsage();
-  stats_.after_.old_ = old_space_->GetCurrentUsage();
+  stats_.after_.new_ = new_space_.GetCurrentUsage();
+  stats_.after_.old_ = old_space_.GetCurrentUsage();
   ASSERT(gc_in_progress_);
   gc_in_progress_ = false;
-  if (Service::NeedsGCEvents()) {
+  if (Service::gc_stream.enabled()) {
     ServiceEvent event(Isolate::Current(), ServiceEvent::kGC);
     event.set_gc_stats(&stats_);
     Service::HandleEvent(&event);
diff --git a/runtime/vm/heap.h b/runtime/vm/heap.h
index 4385883..076b283 100644
--- a/runtime/vm/heap.h
+++ b/runtime/vm/heap.h
@@ -68,8 +68,8 @@
 
   ~Heap();
 
-  Scavenger* new_space() const { return new_space_; }
-  PageSpace* old_space() const { return old_space_; }
+  Scavenger* new_space() { return &new_space_; }
+  PageSpace* old_space() { return &old_space_; }
 
   uword Allocate(intptr_t size, Space space) {
     ASSERT(!read_only_);
@@ -136,13 +136,15 @@
   // Protect access to the heap.
   void WriteProtect(bool read_only);
   void WriteProtectCode(bool read_only) {
-    old_space_->WriteProtectCode(read_only);
+    old_space_.WriteProtectCode(read_only);
   }
 
   // Accessors for inlined allocation in generated code.
   uword TopAddress(Space space);
+  static intptr_t TopOffset(Space space);
   uword EndAddress(Space space);
-  Space SpaceForAllocation(intptr_t class_id) const;
+  static intptr_t EndOffset(Space space);
+  static Space SpaceForAllocation(intptr_t class_id);
 
   // Initialize the heap and register it with the isolate.
   static void Init(Isolate* isolate,
@@ -228,8 +230,8 @@
   void PrintToJSONObject(Space space, JSONObject* object) const;
 
   // The heap map contains the sizes and class ids for the objects in each page.
-  void PrintHeapMapToJSONStream(Isolate* isolate, JSONStream* stream) const {
-    return old_space_->PrintHeapMapToJSONStream(isolate, stream);
+  void PrintHeapMapToJSONStream(Isolate* isolate, JSONStream* stream) {
+    return old_space_.PrintHeapMapToJSONStream(isolate, stream);
   }
 
   Isolate* isolate() const { return isolate_; }
@@ -305,8 +307,8 @@
   Isolate* isolate_;
 
   // The different spaces used for allocation.
-  Scavenger* new_space_;
-  PageSpace* old_space_;
+  Scavenger new_space_;
+  PageSpace old_space_;
 
   WeakTable* new_weak_tables_[kNumWeakSelectors];
   WeakTable* old_weak_tables_[kNumWeakSelectors];
@@ -323,7 +325,6 @@
   int pretenure_policy_;
 
   friend class ServiceEvent;
-  friend class GCTestHelper;
   friend class PageSpace;  // VerifyGC
   DISALLOW_COPY_AND_ASSIGN(Heap);
 };
diff --git a/runtime/vm/intrinsifier_arm.cc b/runtime/vm/intrinsifier_arm.cc
index 893352e..a5b73df 100644
--- a/runtime/vm/intrinsifier_arm.cc
+++ b/runtime/vm/intrinsifier_arm.cc
@@ -274,7 +274,7 @@
   __ b(&init_loop, CC);                                                        \
   __ str(R6, Address(R3, -2 * kWordSize), HI);                                 \
                                                                                \
-  __ IncrementAllocationStatsWithSize(R4, R2, cid, space);                     \
+  __ IncrementAllocationStatsWithSize(R4, R2, space);                          \
   __ Ret();                                                                    \
   __ Bind(&fall_through);                                                      \
 
@@ -1827,7 +1827,7 @@
                               FieldAddress(R0, String::hash_offset()),
                               TMP);
 
-  __ IncrementAllocationStatsWithSize(R4, R2, cid, space);
+  __ IncrementAllocationStatsWithSize(R4, R2, space);
   __ b(ok);
 
   __ Bind(&fail);
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index b247e56..6c8d73f 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -485,7 +485,7 @@
 
 
 void IsolateMessageHandler::NotifyPauseOnStart() {
-  if (Service::NeedsDebugEvents()) {
+  if (Service::debug_stream.enabled()) {
     StartIsolateScope start_isolate(isolate());
     StackZone zone(I);
     HandleScope handle_scope(I);
@@ -496,7 +496,7 @@
 
 
 void IsolateMessageHandler::NotifyPauseOnExit() {
-  if (Service::NeedsDebugEvents()) {
+  if (Service::debug_stream.enabled()) {
     StartIsolateScope start_isolate(isolate());
     StackZone zone(I);
     HandleScope handle_scope(I);
@@ -1232,6 +1232,24 @@
     StartIsolateScope start_scope(isolate);
     StackZone zone(isolate);
     HandleScope handle_scope(isolate);
+
+    // If particular values were requested for this newly spawned isolate, then
+    // they are set here before the isolate starts executing user code.
+    isolate->SetErrorsFatal(state->errors_are_fatal());
+    if (state->on_exit_port() != ILLEGAL_PORT) {
+      const SendPort& listener =
+          SendPort::Handle(SendPort::New(state->on_exit_port()));
+      isolate->AddExitListener(listener, Instance::null_instance());
+    }
+    if (state->on_error_port() != ILLEGAL_PORT) {
+      const SendPort& listener =
+          SendPort::Handle(SendPort::New(state->on_error_port()));
+      isolate->AddErrorListener(listener);
+    }
+
+    // Switch back to spawning isolate.
+
+
     if (!ClassFinalizer::ProcessPendingClasses()) {
       // Error is in sticky error already.
       return false;
@@ -1433,15 +1451,42 @@
   }
 #endif  // DEBUG
 
+  // First, perform higher-level cleanup that may need to allocate.
+  {
+    // Ensure we have a zone and handle scope so that we can call VM functions.
+    StackZone stack_zone(this);
+    HandleScope handle_scope(this);
+
+    // Write out the coverage data if collection has been enabled.
+    CodeCoverage::Write(this);
+
+    if ((timeline_event_recorder_ != NULL) &&
+        (FLAG_timeline_trace_dir != NULL)) {
+      timeline_event_recorder_->WriteTo(FLAG_timeline_trace_dir);
+    }
+  }
+
   // Remove this isolate from the list *before* we start tearing it down, to
   // avoid exposing it in a state of decay.
   RemoveIsolateFromList(this);
 
-  // Create an area where we do have a zone and a handle scope so that we can
-  // call VM functions while tearing this isolate down.
+  if (heap_ != NULL) {
+    // Wait for any concurrent GC tasks to finish before shutting down.
+    // TODO(koda): Support faster sweeper shutdown (e.g., after current page).
+    PageSpace* old_space = heap_->old_space();
+    MonitorLocker ml(old_space->tasks_lock());
+    while (old_space->tasks() > 0) {
+      ml.Wait();
+    }
+  }
+
+  // Then, proceed with low-level teardown.
   {
+    // Ensure we have a zone and handle scope so that we can call VM functions,
+    // but we no longer allocate new heap objects.
     StackZone stack_zone(this);
     HandleScope handle_scope(this);
+    NoSafepointScope no_safepoint_scope;
 
     if (compiler_stats_ != NULL) {
       compiler_stats()->Print();
@@ -1465,9 +1510,6 @@
     // Dump all accumulated timer data for the isolate.
     timer_list_.ReportTimers();
 
-    // Write out the coverage data if collection has been enabled.
-    CodeCoverage::Write(this);
-
     // Finalize any weak persistent handles with a non-null referent.
     FinalizeWeakPersistentHandlesVisitor visitor;
     api_state()->weak_persistent_handles().VisitHandles(&visitor);
@@ -1480,16 +1522,22 @@
       OS::Print("[-] Stopping isolate:\n"
                 "\tisolate:    %s\n", name());
     }
-
-    if ((timeline_event_recorder_ != NULL) &&
-        (FLAG_timeline_trace_dir != NULL)) {
-      timeline_event_recorder_->WriteTo(FLAG_timeline_trace_dir);
-    }
   }
 
+#if defined(DEBUG)
+  // No concurrent sweeper tasks should be running at this point.
+  if (heap_ != NULL) {
+    PageSpace* old_space = heap_->old_space();
+    MonitorLocker ml(old_space->tasks_lock());
+    ASSERT(old_space->tasks() == 0);
+  }
+#endif
+
   // TODO(5411455): For now just make sure there are no current isolates
   // as we are shutting down the isolate.
   Thread::ExitIsolate();
+  // All threads should have exited by now.
+  thread_registry()->CheckNotScheduled(this);
   Profiler::ShutdownProfilingForIsolate(this);
 }
 
@@ -1922,9 +1970,14 @@
 IsolateSpawnState::IsolateSpawnState(Dart_Port parent_port,
                                      const Function& func,
                                      const Instance& message,
-                                     bool paused)
+                                     bool paused,
+                                     bool errors_are_fatal,
+                                     Dart_Port on_exit_port,
+                                     Dart_Port on_error_port)
     : isolate_(NULL),
       parent_port_(parent_port),
+      on_exit_port_(on_exit_port),
+      on_error_port_(on_error_port),
       script_url_(NULL),
       package_root_(NULL),
       library_url_(NULL),
@@ -1935,7 +1988,8 @@
       serialized_message_(NULL),
       serialized_message_len_(0),
       isolate_flags_(),
-      paused_(paused) {
+      paused_(paused),
+      errors_are_fatal_(errors_are_fatal) {
   script_url_ = NULL;
   const Class& cls = Class::Handle(func.Owner());
   const Library& lib = Library::Handle(cls.library());
@@ -1963,9 +2017,14 @@
                                      const char* package_root,
                                      const Instance& args,
                                      const Instance& message,
-                                     bool paused)
+                                     bool paused,
+                                     bool errors_are_fatal,
+                                     Dart_Port on_exit_port,
+                                     Dart_Port on_error_port)
     : isolate_(NULL),
       parent_port_(parent_port),
+      on_exit_port_(on_exit_port),
+      on_error_port_(on_error_port),
       package_root_(NULL),
       library_url_(NULL),
       class_name_(NULL),
@@ -1975,7 +2034,8 @@
       serialized_message_(NULL),
       serialized_message_len_(0),
       isolate_flags_(),
-      paused_(paused) {
+      paused_(paused),
+      errors_are_fatal_(errors_are_fatal) {
   script_url_ = strdup(script_url);
   if (package_root != NULL) {
     package_root_ = strdup(package_root);
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 88c789d..a7aa4fc 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -1013,19 +1013,27 @@
   IsolateSpawnState(Dart_Port parent_port,
                     const Function& func,
                     const Instance& message,
-                    bool paused);
+                    bool paused,
+                    bool errorsAreFatal,
+                    Dart_Port onExit,
+                    Dart_Port onError);
   IsolateSpawnState(Dart_Port parent_port,
                     const char* script_url,
                     const char* package_root,
                     const Instance& args,
                     const Instance& message,
-                    bool paused);
+                    bool paused,
+                    bool errorsAreFatal,
+                    Dart_Port onExit,
+                    Dart_Port onError);
   ~IsolateSpawnState();
 
   Isolate* isolate() const { return isolate_; }
   void set_isolate(Isolate* value) { isolate_ = value; }
 
   Dart_Port parent_port() const { return parent_port_; }
+  Dart_Port on_exit_port() const { return on_exit_port_; }
+  Dart_Port on_error_port() const { return on_error_port_; }
   char* script_url() const { return script_url_; }
   char* package_root() const { return package_root_; }
   char* library_url() const { return library_url_; }
@@ -1033,6 +1041,7 @@
   char* function_name() const { return function_name_; }
   bool is_spawn_uri() const { return library_url_ == NULL; }
   bool paused() const { return paused_; }
+  bool errors_are_fatal() const { return errors_are_fatal_; }
   Isolate::Flags* isolate_flags() { return &isolate_flags_; }
 
   RawObject* ResolveFunction();
@@ -1043,6 +1052,8 @@
  private:
   Isolate* isolate_;
   Dart_Port parent_port_;
+  Dart_Port on_exit_port_;
+  Dart_Port on_error_port_;
   char* script_url_;
   char* package_root_;
   char* library_url_;
@@ -1054,6 +1065,7 @@
   intptr_t serialized_message_len_;
   Isolate::Flags isolate_flags_;
   bool paused_;
+  bool errors_are_fatal_;
 };
 
 }  // namespace dart
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 18d86ff..f674cd4 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -2736,9 +2736,9 @@
 
 void Class::SetTraceAllocation(bool trace_allocation) const {
   const bool changed = trace_allocation != this->trace_allocation();
-  set_state_bits(
-      TraceAllocationBit::update(trace_allocation, raw_ptr()->state_bits_));
   if (changed) {
+    set_state_bits(
+        TraceAllocationBit::update(trace_allocation, raw_ptr()->state_bits_));
     Isolate* isolate = Isolate::Current();
     ClassTable* class_table = isolate->class_table();
     class_table->TraceAllocationsFor(id(), trace_allocation);
@@ -4205,6 +4205,7 @@
   jsobj.AddProperty("_finalized", is_finalized());
   jsobj.AddProperty("_implemented", is_implemented());
   jsobj.AddProperty("_patch", is_patch());
+  jsobj.AddProperty("_traceAllocations", trace_allocation());
   const Class& superClass = Class::Handle(SuperClass());
   if (!superClass.IsNull()) {
     jsobj.AddProperty("super", superClass);
@@ -11246,6 +11247,9 @@
     case RawLocalVarDescriptors::kSavedCurrentContext:
       return "CurrentCtx";
       break;
+    case RawLocalVarDescriptors::kAsyncOperation:
+      return "AsyncOperation";
+      break;
     default:
       UNREACHABLE();
       return "Unknown";
@@ -11359,6 +11363,8 @@
       return "ContextLevel";
     case RawLocalVarDescriptors::kSavedCurrentContext:
       return "SavedCurrentContext";
+    case RawLocalVarDescriptors::kAsyncOperation:
+      return "AsyncOperation";
     default:
       UNIMPLEMENTED();
       return NULL;
@@ -16157,6 +16163,7 @@
 void BoundedType::set_bound(const AbstractType& value) const {
   // The bound may still be unfinalized because of legal cycles.
   // It must be finalized before it is checked at run time, though.
+  ASSERT(value.IsFinalized() || value.IsBeingFinalized());
   StorePointer(&raw_ptr()->bound_, value.raw());
 }
 
@@ -16175,20 +16182,26 @@
     GrowableObjectArray* trail) const {
   ASSERT(IsFinalized());
   AbstractType& bounded_type = AbstractType::Handle(type());
+  ASSERT(bounded_type.IsFinalized());
   if (!bounded_type.IsInstantiated()) {
     bounded_type = bounded_type.InstantiateFrom(instantiator_type_arguments,
                                                 bound_error,
                                                 trail);
+    // In case types of instantiator_type_arguments are not finalized, then
+    // the instantiated bounded_type is not finalized either.
+    // Note that instantiator_type_arguments must have the final length, though.
   }
   if ((Isolate::Current()->flags().type_checks()) &&
       (bound_error != NULL) && bound_error->IsNull()) {
     AbstractType& upper_bound = AbstractType::Handle(bound());
+    ASSERT(upper_bound.IsFinalized());
     ASSERT(!upper_bound.IsObjectType() && !upper_bound.IsDynamicType());
     const TypeParameter& type_param = TypeParameter::Handle(type_parameter());
     if (!upper_bound.IsInstantiated()) {
       upper_bound = upper_bound.InstantiateFrom(instantiator_type_arguments,
                                                 bound_error,
                                                 trail);
+      // Instantiated upper_bound may not be finalized. See comment above.
     }
     if (bound_error->IsNull()) {
       if (!type_param.CheckBound(bounded_type, upper_bound, bound_error) &&
diff --git a/runtime/vm/os_thread_android.cc b/runtime/vm/os_thread_android.cc
index 443e800..ae1b9f2 100644
--- a/runtime/vm/os_thread_android.cc
+++ b/runtime/vm/os_thread_android.cc
@@ -23,6 +23,14 @@
   }
 
 
+#if defined(DEBUG)
+#define ASSERT_PTHREAD_SUCCESS(result) VALIDATE_PTHREAD_RESULT(result)
+#else
+// NOTE: This (currently) expands to a no-op.
+#define ASSERT_PTHREAD_SUCCESS(result) ASSERT(result == 0)
+#endif
+
+
 #ifdef DEBUG
 #define RETURN_ON_PTHREAD_FAILURE(result) \
   if (result != 0) { \
@@ -217,7 +225,7 @@
   int result = pthread_mutex_lock(data_.mutex());
   // Specifically check for dead lock to help debugging.
   ASSERT(result != EDEADLK);
-  ASSERT(result == 0);  // Verify no other errors.
+  ASSERT_PTHREAD_SUCCESS(result);  // Verify no other errors.
   // When running with assertions enabled we do track the owner.
 #if defined(DEBUG)
   owner_ = OSThread::GetCurrentThreadId();
@@ -231,7 +239,7 @@
   if (result == EBUSY) {
     return false;
   }
-  ASSERT(result == 0);  // Verify no other errors.
+  ASSERT_PTHREAD_SUCCESS(result);  // Verify no other errors.
   // When running with assertions enabled we do track the owner.
 #if defined(DEBUG)
   owner_ = OSThread::GetCurrentThreadId();
@@ -249,7 +257,7 @@
   int result = pthread_mutex_unlock(data_.mutex());
   // Specifically check for wrong thread unlocking to aid debugging.
   ASSERT(result != EPERM);
-  ASSERT(result == 0);  // Verify no other errors.
+  ASSERT_PTHREAD_SUCCESS(result);  // Verify no other errors.
 }
 
 
diff --git a/runtime/vm/os_thread_linux.cc b/runtime/vm/os_thread_linux.cc
index 5a0fe4f..94bb823 100644
--- a/runtime/vm/os_thread_linux.cc
+++ b/runtime/vm/os_thread_linux.cc
@@ -24,6 +24,14 @@
   }
 
 
+#if defined(DEBUG)
+#define ASSERT_PTHREAD_SUCCESS(result) VALIDATE_PTHREAD_RESULT(result)
+#else
+// NOTE: This (currently) expands to a no-op.
+#define ASSERT_PTHREAD_SUCCESS(result) ASSERT(result == 0)
+#endif
+
+
 #ifdef DEBUG
 #define RETURN_ON_PTHREAD_FAILURE(result) \
   if (result != 0) { \
@@ -218,7 +226,7 @@
   int result = pthread_mutex_lock(data_.mutex());
   // Specifically check for dead lock to help debugging.
   ASSERT(result != EDEADLK);
-  ASSERT(result == 0);  // Verify no other errors.
+  ASSERT_PTHREAD_SUCCESS(result);  // Verify no other errors.
   // When running with assertions enabled we do track the owner.
 #if defined(DEBUG)
   owner_ = OSThread::GetCurrentThreadId();
@@ -232,7 +240,7 @@
   if (result == EBUSY) {
     return false;
   }
-  ASSERT(result == 0);  // Verify no other errors.
+  ASSERT_PTHREAD_SUCCESS(result);  // Verify no other errors.
   // When running with assertions enabled we do track the owner.
 #if defined(DEBUG)
   owner_ = OSThread::GetCurrentThreadId();
@@ -250,7 +258,7 @@
   int result = pthread_mutex_unlock(data_.mutex());
   // Specifically check for wrong thread unlocking to aid debugging.
   ASSERT(result != EPERM);
-  ASSERT(result == 0);  // Verify no other errors.
+  ASSERT_PTHREAD_SUCCESS(result);  // Verify no other errors.
 }
 
 
diff --git a/runtime/vm/os_thread_macos.cc b/runtime/vm/os_thread_macos.cc
index 2b870db..6a9aca2 100644
--- a/runtime/vm/os_thread_macos.cc
+++ b/runtime/vm/os_thread_macos.cc
@@ -31,6 +31,14 @@
   }
 
 
+#if defined(DEBUG)
+#define ASSERT_PTHREAD_SUCCESS(result) VALIDATE_PTHREAD_RESULT(result)
+#else
+// NOTE: This (currently) expands to a no-op.
+#define ASSERT_PTHREAD_SUCCESS(result) ASSERT(result == 0)
+#endif
+
+
 #ifdef DEBUG
 #define RETURN_ON_PTHREAD_FAILURE(result) \
   if (result != 0) { \
@@ -223,7 +231,7 @@
   int result = pthread_mutex_lock(data_.mutex());
   // Specifically check for dead lock to help debugging.
   ASSERT(result != EDEADLK);
-  ASSERT(result == 0);  // Verify no other errors.
+  ASSERT_PTHREAD_SUCCESS(result);  // Verify no other errors.
   // When running with assertions enabled we do track the owner.
 #if defined(DEBUG)
   owner_ = OSThread::GetCurrentThreadId();
@@ -237,7 +245,7 @@
   if ((result == EBUSY) || (result == EDEADLK)) {
     return false;
   }
-  ASSERT(result == 0);  // Verify no other errors.
+  ASSERT_PTHREAD_SUCCESS(result);  // Verify no other errors.
   // When running with assertions enabled we do track the owner.
 #if defined(DEBUG)
   owner_ = OSThread::GetCurrentThreadId();
@@ -255,7 +263,7 @@
   int result = pthread_mutex_unlock(data_.mutex());
   // Specifically check for wrong thread unlocking to aid debugging.
   ASSERT(result != EPERM);
-  ASSERT(result == 0);  // Verify no other errors.
+  ASSERT_PTHREAD_SUCCESS(result);  // Verify no other errors.
 }
 
 
diff --git a/runtime/vm/pages.cc b/runtime/vm/pages.cc
index 109df50..b6f0b2e 100644
--- a/runtime/vm/pages.cc
+++ b/runtime/vm/pages.cc
@@ -635,7 +635,7 @@
 }
 
 
-void PageSpace::PrintToJSONObject(JSONObject* object) {
+void PageSpace::PrintToJSONObject(JSONObject* object) const {
   Isolate* isolate = Isolate::Current();
   ASSERT(isolate != NULL);
   JSONObject space(object, "old");
@@ -674,7 +674,8 @@
 };
 
 
-void PageSpace::PrintHeapMapToJSONStream(Isolate* isolate, JSONStream* stream) {
+void PageSpace::PrintHeapMapToJSONStream(
+    Isolate* isolate, JSONStream* stream) const {
   JSONObject heap_map(stream);
   heap_map.AddProperty("type", "HeapMap");
   heap_map.AddProperty("freeClassId",
diff --git a/runtime/vm/pages.h b/runtime/vm/pages.h
index cd2b8cb..ca10ee0 100644
--- a/runtime/vm/pages.h
+++ b/runtime/vm/pages.h
@@ -297,8 +297,8 @@
     return collections_;
   }
 
-  void PrintToJSONObject(JSONObject* object);
-  void PrintHeapMapToJSONStream(Isolate* isolate, JSONStream* stream);
+  void PrintToJSONObject(JSONObject* object) const;
+  void PrintHeapMapToJSONStream(Isolate* isolate, JSONStream* stream) const;
 
   void AllocateExternal(intptr_t size);
   void FreeExternal(intptr_t size);
@@ -337,6 +337,8 @@
   // Bump block allocation from generated code.
   uword* TopAddress() { return &bump_top_; }
   uword* EndAddress() { return &bump_end_; }
+  static intptr_t top_offset() { return OFFSET_OF(PageSpace, bump_top_); }
+  static intptr_t end_offset() { return OFFSET_OF(PageSpace, bump_end_); }
 
  private:
   // Ids for time and data records in Heap::GCStats.
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index d3ccd42..80e45ed 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -43,6 +43,7 @@
 DEFINE_FLAG(bool, load_deferred_eagerly, false,
     "Load deferred libraries eagerly.");
 DEFINE_FLAG(bool, trace_parser, false, "Trace parser operations.");
+DEFINE_FLAG(bool, supermixin, false, "Allow super calls in mixins.");
 DEFINE_FLAG(bool, warn_mixin_typedef, true, "Warning on legacy mixin typedef.");
 
 DECLARE_FLAG(bool, lazy_dispatchers);
@@ -6736,13 +6737,13 @@
 //     ... source code of f ...
 //   }
 //   var :async_op = f_async_body;
-//   :controller = new _AsyncStarStreamController(f_async_body);
+//   :controller = new _AsyncStarStreamController(:async_op);
 //   return :controller.stream;
 // }
-SequenceNode* Parser::CloseAsyncGeneratorFunction(const Function& closure,
+SequenceNode* Parser::CloseAsyncGeneratorFunction(const Function& closure_func,
                                                   SequenceNode* closure_body) {
   TRACE_PARSER("CloseAsyncGeneratorFunction");
-  ASSERT(!closure.IsNull());
+  ASSERT(!closure_func.IsNull());
   ASSERT(closure_body != NULL);
 
   // The block for the async closure body has already been closed. Close the
@@ -6775,19 +6776,17 @@
   //   :async_op = <closure>;  (containing the original body)
   LocalVariable* async_op_var =
       current_block_->scope->LookupVariable(Symbols::AsyncOperation(), false);
-  ClosureNode* cn = new(Z) ClosureNode(
-      Scanner::kNoSourcePos, closure, NULL, closure_body->scope());
+  ClosureNode* closure_obj = new(Z) ClosureNode(
+      Scanner::kNoSourcePos, closure_func, NULL, closure_body->scope());
   StoreLocalNode* store_async_op = new (Z) StoreLocalNode(
       Scanner::kNoSourcePos,
       async_op_var,
-      cn);
+      closure_obj);
   current_block_->statements->Add(store_async_op);
 
   // :controller = new _AsyncStarStreamController(body_closure);
   ArgumentListNode* arguments = new(Z) ArgumentListNode(Scanner::kNoSourcePos);
-  ClosureNode* closure_obj = new(Z) ClosureNode(
-      Scanner::kNoSourcePos, closure, NULL, closure_body->scope());
-  arguments->Add(closure_obj);
+  arguments->Add(new (Z) LoadLocalNode(Scanner::kNoSourcePos, async_op_var));
   ConstructorCallNode* controller_constructor_call =
       new(Z) ConstructorCallNode(Scanner::kNoSourcePos,
                                  TypeArguments::ZoneHandle(Z),
@@ -13220,12 +13219,14 @@
       ReportError("class '%s' does not have a superclass",
                   String::Handle(Z, current_class().Name()).ToCString());
     }
-    if (current_class().IsMixinApplication()) {
-      const Type& mixin_type = Type::Handle(Z, current_class().mixin());
-      if (mixin_type.type_class() == current_function().origin()) {
-        ReportError("method of mixin class '%s' may not refer to 'super'",
-                    String::Handle(Z, Class::Handle(Z,
-                        current_function().origin()).Name()).ToCString());
+    if (!FLAG_supermixin) {
+      if (current_class().IsMixinApplication()) {
+        const Type& mixin_type = Type::Handle(Z, current_class().mixin());
+        if (mixin_type.type_class() == current_function().origin()) {
+          ReportError("method of mixin class '%s' may not refer to 'super'",
+                      String::Handle(Z, Class::Handle(Z,
+                          current_function().origin()).Name()).ToCString());
+        }
       }
     }
     const intptr_t super_pos = TokenPos();
diff --git a/runtime/vm/profiler.h b/runtime/vm/profiler.h
index b4a4d0b..d7406a2 100644
--- a/runtime/vm/profiler.h
+++ b/runtime/vm/profiler.h
@@ -472,6 +472,10 @@
   intptr_t allocation_cid() const { return allocation_cid_; }
   void set_allocation_cid(intptr_t cid) { allocation_cid_ = cid; }
 
+  bool IsAllocationSample() const {
+    return allocation_cid_ > 0;
+  }
+
   // Was the stack trace truncated?
   bool truncated() const { return truncated_; }
   void set_truncated(bool truncated) { truncated_ = truncated; }
diff --git a/runtime/vm/profiler_service.cc b/runtime/vm/profiler_service.cc
index fac0bf4..bf47f20 100644
--- a/runtime/vm/profiler_service.cc
+++ b/runtime/vm/profiler_service.cc
@@ -1238,7 +1238,7 @@
             current,
             i,
             (j == 0),
-            sample->first_frame_executing(),
+            sample->first_frame_executing() || sample->IsAllocationSample(),
             true);
       }
     }
@@ -1266,7 +1266,7 @@
             current,
             i,
             (j == 0),
-            sample->first_frame_executing(),
+            sample->first_frame_executing() || sample->IsAllocationSample(),
             false);
       }
 
@@ -1964,21 +1964,10 @@
 }
 
 
-class NoAllocationSampleFilter : public SampleFilter {
- public:
-  explicit NoAllocationSampleFilter(Isolate* isolate)
-      : SampleFilter(isolate) {
-  }
-
-  bool FilterSample(Sample* sample) {
-    return !sample->is_allocation_sample();
-  }
-};
-
-
-void ProfilerService::PrintJSON(JSONStream* stream,
-                                Profile::TagOrder tag_order) {
-  Isolate* isolate = Isolate::Current();
+void ProfilerService::PrintJSONImpl(Isolate* isolate,
+                                    JSONStream* stream,
+                                    Profile::TagOrder tag_order,
+                                    SampleFilter* filter) {
   // Disable profile interrupts while processing the buffer.
   Profiler::EndExecution(isolate);
 
@@ -1995,8 +1984,7 @@
     StackZone zone(isolate);
     HANDLESCOPE(isolate);
     Profile profile(isolate);
-    NoAllocationSampleFilter filter(isolate);
-    profile.Build(&filter, tag_order);
+    profile.Build(filter, tag_order);
     profile.PrintJSON(stream);
   }
 
@@ -2005,6 +1993,53 @@
 }
 
 
+class NoAllocationSampleFilter : public SampleFilter {
+ public:
+  explicit NoAllocationSampleFilter(Isolate* isolate)
+      : SampleFilter(isolate) {
+  }
+
+  bool FilterSample(Sample* sample) {
+    return !sample->is_allocation_sample();
+  }
+};
+
+
+void ProfilerService::PrintJSON(JSONStream* stream,
+                                Profile::TagOrder tag_order) {
+  Isolate* isolate = Isolate::Current();
+  NoAllocationSampleFilter filter(isolate);
+  PrintJSONImpl(isolate, stream, tag_order, &filter);
+}
+
+
+class ClassAllocationSampleFilter : public SampleFilter {
+ public:
+  ClassAllocationSampleFilter(Isolate* isolate, const Class& cls)
+      : SampleFilter(isolate),
+        cls_(Class::Handle(cls.raw())) {
+    ASSERT(!cls_.IsNull());
+  }
+
+  bool FilterSample(Sample* sample) {
+    return sample->is_allocation_sample() &&
+           (sample->allocation_cid() == cls_.id());
+  }
+
+ private:
+  const Class& cls_;
+};
+
+
+void ProfilerService::PrintAllocationJSON(JSONStream* stream,
+                                          Profile::TagOrder tag_order,
+                                          const Class& cls) {
+  Isolate* isolate = Isolate::Current();
+  ClassAllocationSampleFilter filter(isolate, cls);
+  PrintJSONImpl(isolate, stream, tag_order, &filter);
+}
+
+
 void ProfilerService::ClearSamples() {
   Isolate* isolate = Isolate::Current();
 
diff --git a/runtime/vm/profiler_service.h b/runtime/vm/profiler_service.h
index d281a84..7990b4d 100644
--- a/runtime/vm/profiler_service.h
+++ b/runtime/vm/profiler_service.h
@@ -366,7 +366,17 @@
   static void PrintJSON(JSONStream* stream,
                         Profile::TagOrder tag_order);
 
+  static void PrintAllocationJSON(JSONStream* stream,
+                                  Profile::TagOrder tag_order,
+                                  const Class& cls);
+
   static void ClearSamples();
+
+ private:
+  static void PrintJSONImpl(Isolate* isolate,
+                            JSONStream* stream,
+                            Profile::TagOrder tag_order,
+                            SampleFilter* filter);
 };
 
 }  // namespace dart
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index cc967e7..3313d17 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -1164,7 +1164,8 @@
     kStackVar = 1,
     kContextVar,
     kContextLevel,
-    kSavedCurrentContext
+    kSavedCurrentContext,
+    kAsyncOperation
   };
 
   enum {
diff --git a/runtime/vm/scavenger.cc b/runtime/vm/scavenger.cc
index 2ad8e1f..ecf1ed0 100644
--- a/runtime/vm/scavenger.cc
+++ b/runtime/vm/scavenger.cc
@@ -871,7 +871,7 @@
 }
 
 
-void Scavenger::PrintToJSONObject(JSONObject* object) {
+void Scavenger::PrintToJSONObject(JSONObject* object) const {
   Isolate* isolate = Isolate::Current();
   ASSERT(isolate != NULL);
   JSONObject space(object, "new");
diff --git a/runtime/vm/scavenger.h b/runtime/vm/scavenger.h
index 508aabe..d1e9a24 100644
--- a/runtime/vm/scavenger.h
+++ b/runtime/vm/scavenger.h
@@ -211,7 +211,7 @@
     return collections_;
   }
 
-  void PrintToJSONObject(JSONObject* object);
+  void PrintToJSONObject(JSONObject* object) const;
 
   void AllocateExternal(intptr_t size);
   void FreeExternal(intptr_t size);
diff --git a/runtime/vm/scopes.cc b/runtime/vm/scopes.cc
index 49601a1..0d4233a 100644
--- a/runtime/vm/scopes.cc
+++ b/runtime/vm/scopes.cc
@@ -249,6 +249,13 @@
 }
 
 
+// The parser creates internal variables that start with ":"
+static bool IsInternalIdentifier(const String& str) {
+  ASSERT(str.Length() > 0);
+  return str.CharAt(0) == ':';
+}
+
+
 RawLocalVarDescriptors* LocalScope::GetVarDescriptors(const Function& func) {
   GrowableArray<VarDesc> vars(8);
   // First enter all variables from scopes of outer functions.
@@ -257,9 +264,19 @@
   if (!context_scope.IsNull()) {
     ASSERT(func.IsLocalFunction());
     for (int i = 0; i < context_scope.num_variables(); i++) {
+      String& name = String::Handle(context_scope.NameAt(i));
+      RawLocalVarDescriptors::VarInfoKind kind;
+      if (!IsInternalIdentifier(name)) {
+        kind = RawLocalVarDescriptors::kContextVar;
+      } else if (name.raw() == Symbols::AsyncOperation().raw()) {
+        kind = RawLocalVarDescriptors::kAsyncOperation;
+      } else {
+        continue;
+      }
+
       VarDesc desc;
-      desc.name = &String::Handle(context_scope.NameAt(i));
-      desc.info.set_kind(RawLocalVarDescriptors::kContextVar);
+      desc.name = &name;
+      desc.info.set_kind(kind);
       desc.info.scope_id = context_scope.ContextLevelAt(i);
       desc.info.begin_pos = begin_token_pos();
       desc.info.end_pos = end_token_pos();
@@ -284,13 +301,6 @@
 }
 
 
-// The parser creates internal variables that start with ":"
-static bool IsInternalIdentifier(const String& str) {
-  ASSERT(str.Length() > 0);
-  return str.CharAt(0) == ':';
-}
-
-
 // Add visible variables that are declared in this scope to vars, then
 // collect visible variables of children, followed by siblings.
 void LocalScope::CollectLocalVariables(GrowableArray<VarDesc>* vars,
@@ -337,6 +347,23 @@
         desc.info.end_pos = 0;
         desc.info.set_index(var->index());
         vars->Add(desc);
+      } else if (var->name().raw() == Symbols::AsyncOperation().raw()) {
+        // The async continuation.
+        ASSERT(var->is_captured());
+        VarDesc desc;
+        desc.name = &var->name();
+        desc.info.set_kind(RawLocalVarDescriptors::kAsyncOperation);
+        if (var->is_captured()) {
+          ASSERT(var->owner() != NULL);
+          ASSERT(var->owner()->context_level() >= 0);
+          desc.info.scope_id = var->owner()->context_level();
+        } else {
+          desc.info.scope_id = *scope_id;
+        }
+        desc.info.begin_pos = 0;
+        desc.info.end_pos = 0;
+        desc.info.set_index(var->index());
+        vars->Add(desc);
       }
     }
   }
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 4cbc5dd..e68727a 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -5,6 +5,7 @@
 #include "vm/service.h"
 
 #include "include/dart_api.h"
+#include "include/dart_native_api.h"
 #include "platform/globals.h"
 
 #include "vm/compiler.h"
@@ -74,32 +75,46 @@
 struct ServiceMethodDescriptor;
 ServiceMethodDescriptor* FindMethod(const char* method_name);
 
-// TODO(turnidge): Build a general framework later.  For now, we have
-// a small set of well-known streams.
-bool Service::needs_isolate_events_ = false;
-bool Service::needs_debug_events_ = false;
-bool Service::needs_gc_events_ = false;
-bool Service::needs_echo_events_ = false;
-bool Service::needs_graph_events_ = false;
 
-void Service::ListenStream(const char* stream_id) {
+// Support for streams defined in embedders.
+Dart_ServiceStreamListenCallback Service::stream_listen_callback_ = NULL;
+Dart_ServiceStreamCancelCallback Service::stream_cancel_callback_ = NULL;
+
+
+// These are the set of streams known to the core VM.
+StreamInfo Service::isolate_stream("Isolate");
+StreamInfo Service::debug_stream("Debug");
+StreamInfo Service::gc_stream("GC");
+StreamInfo Service::echo_stream("_Echo");
+StreamInfo Service::graph_stream("_Graph");
+
+
+static StreamInfo* streams_[] = {
+  &Service::isolate_stream,
+  &Service::debug_stream,
+  &Service::gc_stream,
+  &Service::echo_stream,
+  &Service::graph_stream,
+};
+
+
+bool Service::ListenStream(const char* stream_id) {
   if (FLAG_trace_service) {
     OS::Print("vm-service: starting stream '%s'\n",
               stream_id);
   }
-  if (strcmp(stream_id, "Isolate") == 0) {
-    needs_isolate_events_ = true;
-  } else if (strcmp(stream_id, "Debug") == 0) {
-    needs_debug_events_ = true;
-  } else if (strcmp(stream_id, "GC") == 0) {
-    needs_gc_events_ = true;
-  } else if (strcmp(stream_id, "_Echo") == 0) {
-    needs_echo_events_ = true;
-  } else if (strcmp(stream_id, "_Graph") == 0) {
-    needs_graph_events_ = true;
-  } else {
-    UNREACHABLE();
+  intptr_t num_streams = sizeof(streams_) /
+                         sizeof(streams_[0]);
+  for (intptr_t i = 0; i < num_streams; i++) {
+    if (strcmp(stream_id, streams_[i]->id()) == 0) {
+      streams_[i]->set_enabled(true);
+      return true;
+    }
   }
+  if (stream_listen_callback_) {
+    return (*stream_listen_callback_)(stream_id);
+  }
+  return false;
 }
 
 void Service::CancelStream(const char* stream_id) {
@@ -107,18 +122,16 @@
     OS::Print("vm-service: stopping stream '%s'\n",
               stream_id);
   }
-  if (strcmp(stream_id, "Isolate") == 0) {
-    needs_isolate_events_ = false;
-  } else if (strcmp(stream_id, "Debug") == 0) {
-    needs_debug_events_ = false;
-  } else if (strcmp(stream_id, "GC") == 0) {
-    needs_gc_events_ = false;
-  } else if (strcmp(stream_id, "_Echo") == 0) {
-    needs_echo_events_ = false;
-  } else if (strcmp(stream_id, "_Graph") == 0) {
-    needs_graph_events_ = false;
-  } else {
-    UNREACHABLE();
+  intptr_t num_streams = sizeof(streams_) /
+                         sizeof(streams_[0]);
+  for (intptr_t i = 0; i < num_streams; i++) {
+    if (strcmp(stream_id, streams_[i]->id()) == 0) {
+      streams_[i]->set_enabled(false);
+      return;
+    }
+  }
+  if (stream_cancel_callback_) {
+    return (*stream_cancel_callback_)(stream_id);
   }
 }
 
@@ -259,6 +272,48 @@
 }
 
 
+// Verifies that |s| begins with |prefix| and then calls |GetIntegerId| on
+// the remainder of |s|.
+static bool GetPrefixedIntegerId(const char* s,
+                                 const char* prefix,
+                                 intptr_t* service_id) {
+  if (s == NULL) {
+    return false;
+  }
+  ASSERT(prefix != NULL);
+  const intptr_t kInputLen = strlen(s);
+  const intptr_t kPrefixLen = strlen(prefix);
+  ASSERT(kPrefixLen > 0);
+  if (kInputLen <= kPrefixLen) {
+    return false;
+  }
+  if (strncmp(s, prefix, kPrefixLen) != 0) {
+    return false;
+  }
+  // Prefix satisfied. Move forward.
+  s += kPrefixLen;
+  // Attempt to read integer id.
+  return GetIntegerId(s, service_id);
+}
+
+
+static bool IsValidClassId(Isolate* isolate, intptr_t cid) {
+  ASSERT(isolate != NULL);
+  ClassTable* class_table = isolate->class_table();
+  ASSERT(class_table != NULL);
+  return class_table->IsValidIndex(cid) && class_table->HasValidClassAt(cid);
+}
+
+
+static RawClass* GetClassForId(Isolate* isolate, intptr_t cid) {
+  ASSERT(isolate == Isolate::Current());
+  ASSERT(isolate != NULL);
+  ClassTable* class_table = isolate->class_table();
+  ASSERT(class_table != NULL);
+  return class_table->At(cid);
+}
+
+
 // TODO(johnmccutchan): Split into separate file and write unit tests.
 class MethodParameter {
  public:
@@ -342,6 +397,9 @@
   }
 
   static intptr_t Parse(const char* value) {
+    if (value == NULL) {
+      return -1;
+    }
     char* end_ptr = NULL;
     uintptr_t result = strtoul(value, &end_ptr, 10);
     ASSERT(*end_ptr == '\0');  // Parsed full string
@@ -578,6 +636,7 @@
 }
 
 
+// TODO(turnidge): Rewrite this method to use Post_CObject instead.
 void Service::SendEventWithData(const char* stream_id,
                                 const char* event_type,
                                 const String& meta,
@@ -613,6 +672,9 @@
   if (ServiceIsolate::IsServiceIsolateDescendant(event->isolate())) {
     return;
   }
+  if (!ServiceIsolate::IsRunning()) {
+    return;
+  }
   JSONStream js;
   const char* stream_id = event->stream_id();
   ASSERT(stream_id != NULL);
@@ -621,9 +683,35 @@
     jsobj.AddProperty("event", event);
     jsobj.AddProperty("streamId", stream_id);
   }
-  const String& message = String::Handle(String::New(js.ToCString()));
-  SendEvent(stream_id, ServiceEvent::EventTypeToCString(event->type()),
-            message);
+
+  // Message is of the format [<stream id>, <json string>].
+  //
+  // Build the event message in the C heap to avoid dart heap
+  // allocation.  This method can be called while we have acquired a
+  // direct pointer to typed data, so we can't allocate here.
+  Dart_CObject list_cobj;
+  Dart_CObject* list_values[2];
+  list_cobj.type = Dart_CObject_kArray;
+  list_cobj.value.as_array.length = 2;
+  list_cobj.value.as_array.values = list_values;
+
+  Dart_CObject stream_id_cobj;
+  stream_id_cobj.type = Dart_CObject_kString;
+  stream_id_cobj.value.as_string = const_cast<char*>(stream_id);
+  list_values[0] = &stream_id_cobj;
+
+  Dart_CObject json_cobj;
+  json_cobj.type = Dart_CObject_kString;
+  json_cobj.value.as_string = const_cast<char*>(js.ToCString());
+  list_values[1] = &json_cobj;
+
+  if (FLAG_trace_service) {
+    OS::Print(
+        "vm-service: Pushing event of type %s to stream %s\n",
+        event->KindAsCString(), stream_id);
+  }
+
+  Dart_PostCObject(ServiceIsolate::Port(), &list_cobj);
 }
 
 
@@ -747,6 +835,14 @@
 }
 
 
+void Service::SetEmbedderStreamCallbacks(
+    Dart_ServiceStreamListenCallback listen_callback,
+    Dart_ServiceStreamCancelCallback cancel_callback) {
+  stream_listen_callback_ = listen_callback;
+  stream_cancel_callback_ = cancel_callback;
+}
+
+
 EmbedderServiceHandler* Service::FindRootEmbedderHandler(
     const char* name) {
   EmbedderServiceHandler* current = root_service_handler_head_;
@@ -830,16 +926,16 @@
         event.AddProperty("text", text);
       }
     }
-    jsobj.AddProperty("streamId", "_Echo");
+    jsobj.AddProperty("streamId", echo_stream.id());
   }
   const String& message = String::Handle(String::New(js.ToCString()));
   uint8_t data[] = {0, 128, 255};
-  SendEventWithData("_Echo", "_Echo", message, data, sizeof(data));
+  SendEventWithData(echo_stream.id(), "_Echo", message, data, sizeof(data));
 }
 
 
 static bool TriggerEchoEvent(Isolate* isolate, JSONStream* js) {
-  if (Service::NeedsEchoEvents()) {
+  if (Service::echo_stream.enabled()) {
     Service::SendEchoEvent(isolate, js->LookupParam("text"));
   }
   JSONObject jsobj(js);
@@ -2145,7 +2241,7 @@
   const char* step_param = js->LookupParam("step");
   if (isolate->message_handler()->paused_on_start()) {
     isolate->message_handler()->set_pause_on_start(false);
-    if (Service::NeedsDebugEvents()) {
+    if (Service::debug_stream.enabled()) {
       ServiceEvent event(isolate, ServiceEvent::kResume);
       Service::HandleEvent(&event);
     }
@@ -2236,6 +2332,7 @@
 };
 
 
+// TODO(johnmccutchan): Rename this to GetCpuSamples.
 static bool GetCpuProfile(Isolate* isolate, JSONStream* js) {
   Profile::TagOrder tag_order =
       EnumMapper(js->LookupParam("tags"), tags_enum_names, tags_enum_values);
@@ -2244,6 +2341,30 @@
 }
 
 
+static const MethodParameter* get_allocation_samples_params[] = {
+  ISOLATE_PARAMETER,
+  new EnumParameter("tags", true, tags_enum_names),
+  new IdParameter("classId", false),
+  NULL,
+};
+
+
+static bool GetAllocationSamples(Isolate* isolate, JSONStream* js) {
+  Profile::TagOrder tag_order =
+      EnumMapper(js->LookupParam("tags"), tags_enum_names, tags_enum_values);
+  const char* class_id = js->LookupParam("classId");
+  intptr_t cid = -1;
+  GetPrefixedIntegerId(class_id, "classes/", &cid);
+  if (IsValidClassId(isolate, cid)) {
+    const Class& cls = Class::Handle(GetClassForId(isolate, cid));
+    ProfilerService::PrintAllocationJSON(js, tag_order, cls);
+  } else {
+    PrintInvalidParamError(js, "classId");
+  }
+  return true;
+}
+
+
 static const MethodParameter* clear_cpu_profile_params[] = {
   ISOLATE_PARAMETER,
   NULL,
@@ -2314,7 +2435,7 @@
 
 
 static bool RequestHeapSnapshot(Isolate* isolate, JSONStream* js) {
-  if (Service::NeedsGraphEvents()) {
+  if (Service::graph_stream.enabled()) {
     Service::SendGraphEvent(isolate);
   }
   // TODO(koda): Provide some id that ties this request to async response(s).
@@ -2349,7 +2470,7 @@
         event.AddProperty("chunkCount", num_chunks);
         event.AddProperty("nodeCount", node_count);
       }
-      jsobj.AddProperty("streamId", "_Graph");
+      jsobj.AddProperty("streamId", graph_stream.id());
     }
 
     const String& message = String::Handle(String::New(js.ToCString()));
@@ -2359,13 +2480,14 @@
         ? stream.bytes_written() - (i * kChunkSize)
         : kChunkSize;
 
-    SendEventWithData("_Graph", "_Graph", message, chunk_start, chunk_size);
+    SendEventWithData(graph_stream.id(), "_Graph", message,
+                      chunk_start, chunk_size);
   }
 }
 
 
 void Service::SendInspectEvent(Isolate* isolate, const Object& inspectee) {
-  if (!Service::NeedsDebugEvents()) {
+  if (!Service::debug_stream.enabled()) {
     return;
   }
   ServiceEvent event(isolate, ServiceEvent::kInspect);
@@ -2374,6 +2496,22 @@
 }
 
 
+void Service::SendEmbedderEvent(Isolate* isolate,
+                                const char* stream_id,
+                                const char* event_kind,
+                                const uint8_t* bytes,
+                                intptr_t bytes_len) {
+  if (!Service::debug_stream.enabled()) {
+    return;
+  }
+  ServiceEvent event(isolate, ServiceEvent::kEmbedder);
+  event.set_embedder_kind(event_kind);
+  event.set_embedder_stream_id(stream_id);
+  event.set_bytes(bytes, bytes_len);
+  Service::HandleEvent(&event);
+}
+
+
 class ContainsAddressVisitor : public FindObjectVisitor {
  public:
   ContainsAddressVisitor(Isolate* isolate, uword addr)
@@ -2656,7 +2794,7 @@
   }
 
   isolate->debugger()->SetExceptionPauseInfo(info);
-  if (Service::NeedsDebugEvents()) {
+  if (Service::debug_stream.enabled()) {
     ServiceEvent event(isolate, ServiceEvent::kDebuggerSettingsUpdate);
     Service::HandleEvent(&event);
   }
@@ -2742,7 +2880,7 @@
 
 static bool SetName(Isolate* isolate, JSONStream* js) {
   isolate->set_debugger_name(js->LookupParam("name"));
-  if (Service::NeedsIsolateEvents()) {
+  if (Service::isolate_stream.enabled()) {
     ServiceEvent event(isolate, ServiceEvent::kIsolateUpdate);
     Service::HandleEvent(&event);
   }
@@ -2751,6 +2889,31 @@
 }
 
 
+static const MethodParameter* set_trace_class_allocation_params[] = {
+  ISOLATE_PARAMETER,
+  new IdParameter("classId", true),
+  new BoolParameter("enable", true),
+  NULL,
+};
+
+
+static bool SetTraceClassAllocation(Isolate* isolate, JSONStream* js) {
+  const char* class_id = js->LookupParam("classId");
+  const bool enable = BoolParameter::Parse(js->LookupParam("enable"));
+  intptr_t cid = -1;
+  GetPrefixedIntegerId(class_id, "classes/", &cid);
+  if (!IsValidClassId(isolate, cid)) {
+    PrintInvalidParamError(js, "classId");
+    return true;
+  }
+  const Class& cls = Class::Handle(GetClassForId(isolate, cid));
+  ASSERT(!cls.IsNull());
+  cls.SetTraceAllocation(enable);
+  PrintSuccess(js);
+  return true;
+}
+
+
 static ServiceMethodDescriptor service_methods_[] = {
   { "_dumpIdZone", DumpIdZone, NULL },
   { "_echo", Echo,
@@ -2775,6 +2938,8 @@
     evaluate_in_frame_params },
   { "_getAllocationProfile", GetAllocationProfile,
     get_allocation_profile_params },
+  { "_getAllocationSamples", GetAllocationSamples,
+      get_allocation_samples_params },
   { "_getCallSiteData", GetCallSiteData,
     get_call_site_data_params },
   { "getClassList", GetClassList,
@@ -2837,6 +3002,8 @@
     set_library_debuggable_params },
   { "setName", SetName,
     set_name_params },
+  { "_setTraceClassAllocation", SetTraceClassAllocation,
+    set_trace_class_allocation_params },
 };
 
 
diff --git a/runtime/vm/service.h b/runtime/vm/service.h
index 85c607f..9e253403 100644
--- a/runtime/vm/service.h
+++ b/runtime/vm/service.h
@@ -59,6 +59,21 @@
 };
 
 
+class StreamInfo {
+ public:
+  explicit StreamInfo(const char* id) : id_(id), enabled_(false) {}
+
+  const char* id() { return id_; }
+
+  void set_enabled(bool value) { enabled_ = value; }
+  bool enabled() { return enabled_; }
+
+ private:
+  const char* id_;
+  bool enabled_;
+};
+
+
 class Service : public AllStatic {
  public:
   // Handles a message which is not directed to an isolate.
@@ -67,15 +82,6 @@
   // Handles a message which is directed to a particular isolate.
   static void HandleIsolateMessage(Isolate* isolate, const Array& message);
 
-  static bool NeedsIsolateEvents() { return needs_isolate_events_; }
-  static bool NeedsDebugEvents() { return needs_debug_events_; }
-  static bool NeedsGCEvents() { return needs_gc_events_; }
-  static bool NeedsEchoEvents() { return needs_echo_events_; }
-  static bool NeedsGraphEvents() { return needs_graph_events_; }
-
-  static void ListenStream(const char* stream_id);
-  static void CancelStream(const char* stream_id);
-
   static void HandleEvent(ServiceEvent* event);
 
   static void RegisterIsolateEmbedderCallback(
@@ -88,10 +94,37 @@
       Dart_ServiceRequestCallback callback,
       void* user_data);
 
+  static void SetEmbedderStreamCallbacks(
+      Dart_ServiceStreamListenCallback listen_callback,
+      Dart_ServiceStreamCancelCallback cancel_callback);
+
   static void SendEchoEvent(Isolate* isolate, const char* text);
   static void SendGraphEvent(Isolate* isolate);
   static void SendInspectEvent(Isolate* isolate, const Object& inspectee);
 
+  static void SendEmbedderEvent(Isolate* isolate,
+                                const char* stream_id,
+                                const char* event_kind,
+                                const uint8_t* bytes,
+                                intptr_t bytes_len);
+
+  // Well-known streams.
+  static StreamInfo isolate_stream;
+  static StreamInfo debug_stream;
+  static StreamInfo gc_stream;
+  static StreamInfo echo_stream;
+  static StreamInfo graph_stream;
+
+  static bool ListenStream(const char* stream_id);
+  static void CancelStream(const char* stream_id);
+
+  static Dart_ServiceStreamListenCallback stream_listen_callback() {
+    return stream_listen_callback_;
+  }
+  static Dart_ServiceStreamCancelCallback stream_cancel_callback() {
+    return stream_cancel_callback_;
+  }
+
  private:
   static void InvokeMethod(Isolate* isolate, const Array& message);
 
@@ -113,6 +146,8 @@
 
   static EmbedderServiceHandler* isolate_service_handler_head_;
   static EmbedderServiceHandler* root_service_handler_head_;
+  static Dart_ServiceStreamListenCallback stream_listen_callback_;
+  static Dart_ServiceStreamCancelCallback stream_cancel_callback_;
 
   static bool needs_isolate_events_;
   static bool needs_debug_events_;
diff --git a/runtime/vm/service/service.md b/runtime/vm/service/service.md
index f0bbf8f..338cc8e 100644
--- a/runtime/vm/service/service.md
+++ b/runtime/vm/service/service.md
@@ -620,6 +620,15 @@
 Debug | PauseStart, PauseExit, PauseBreakpoint, PauseInterrupted, PauseException, Resume, BreakpointAdded, BreakpointResolved, BreakpointRemoved, Inspect
 GC | GC
 
+Additionally, some embedders provide the _Stdout_ and _Stderr_
+streams.  These streams allow the client to subscribe to writes to
+stdout and stderr.
+
+streamId | event types provided
+-------- | -----------
+Stdout | WriteEvent
+Stderr | WriteEvent
+
 It is considered a _backwards compatible_ change to add a new type of event to an existing stream.
 Clients should be written to handle this gracefully, perhaps by warning and ignoring.
 
@@ -992,6 +1001,11 @@
   // The exception associated with this event, if this is a
   // PauseException event.
   @Instance exception [optional];
+
+  // An array of bytes, encoded as a base64 string.
+  //
+  // This is provided for the WriteEvent event.
+  string bytes [optional];
 }
 ```
 
@@ -1044,7 +1058,10 @@
   BreakpointRemoved,
 
   // A garbage collection event.
-  GC
+  GC,
+
+  // Notification of bytes written, for example, to stdout/stderr.
+  WriteEvent
 }
 ```
 
diff --git a/runtime/vm/service/vmservice.dart b/runtime/vm/service/vmservice.dart
index 1959cec..e6889bb 100644
--- a/runtime/vm/service/vmservice.dart
+++ b/runtime/vm/service/vmservice.dart
@@ -178,11 +178,6 @@
     return JSON.encode(response);
   }
 
-  bool _isValidStream(String streamId) {
-    final validStreams = [ 'Isolate', 'Debug', 'GC', '_Echo', '_Graph' ];
-    return validStreams.contains(streamId);
-  }
-
   bool _isAnyClientSubscribed(String streamId) {
     for (var client in clients) {
       if (client.streams.contains(streamId)) {
@@ -196,16 +191,15 @@
     var client = message.client;
     var streamId = message.params['streamId'];
 
-    if (!_isValidStream(streamId)) {
-      return _encodeError(
-          message, _kInvalidParams,
-          details:"streamListen: invalid 'streamId' parameter: ${streamId}");
-    }
     if (client.streams.contains(streamId)) {
       return _encodeError(message, _kStreamAlreadySubscribed);
     }
     if (!_isAnyClientSubscribed(streamId)) {
-      _vmListenStream(streamId);
+      if (!_vmListenStream(streamId)) {
+        return _encodeError(
+            message, _kInvalidParams,
+            details:"streamListen: invalid 'streamId' parameter: ${streamId}");
+      }
     }
     client.streams.add(streamId);
 
@@ -217,11 +211,6 @@
     var client = message.client;
     var streamId = message.params['streamId'];
 
-    if (!_isValidStream(streamId)) {
-      return _encodeError(
-          message, _kInvalidParams,
-          details:"streamCancel: invalid 'streamId' parameter: ${streamId}");
-    }
     if (!client.streams.contains(streamId)) {
       return _encodeError(message, _kStreamNotSubscribed);
     }
@@ -331,6 +320,6 @@
 
 void _onExit() native "VMService_OnExit";
 
-void _vmListenStream(String streamId) native "VMService_ListenStream";
+bool _vmListenStream(String streamId) native "VMService_ListenStream";
 
 void _vmCancelStream(String streamId) native "VMService_CancelStream";
diff --git a/runtime/vm/service_event.cc b/runtime/vm/service_event.cc
index 4b75a16..a53ace2 100644
--- a/runtime/vm/service_event.cc
+++ b/runtime/vm/service_event.cc
@@ -7,9 +7,9 @@
 namespace dart {
 
 // Translate from the legacy DebugEvent to a ServiceEvent.
-static ServiceEvent::EventType TranslateEventType(
-    DebuggerEvent::EventType type) {
-    switch (type) {
+static ServiceEvent::EventKind TranslateEventKind(
+    DebuggerEvent::EventType kind) {
+    switch (kind) {
       case DebuggerEvent::kIsolateCreated:
         return ServiceEvent::kIsolateStart;
 
@@ -24,7 +24,6 @@
 
       case DebuggerEvent::kExceptionThrown:
         return ServiceEvent::kPauseException;
-
       default:
         UNREACHABLE();
         return ServiceEvent::kIllegal;
@@ -33,15 +32,19 @@
 
 ServiceEvent::ServiceEvent(const DebuggerEvent* debugger_event)
     : isolate_(debugger_event->isolate()),
-      type_(TranslateEventType(debugger_event->type())),
+      kind_(TranslateEventKind(debugger_event->type())),
       breakpoint_(NULL),
       top_frame_(NULL),
       exception_(NULL),
+      async_continuation_(NULL),
       inspectee_(NULL),
-      gc_stats_(NULL) {
+      gc_stats_(NULL),
+      bytes_(NULL),
+      bytes_length_(0) {
   DebuggerEvent::EventType type = debugger_event->type();
   if (type == DebuggerEvent::kBreakpointReached) {
     set_breakpoint(debugger_event->breakpoint());
+    set_async_continuation(debugger_event->async_continuation());
   }
   if (type == DebuggerEvent::kExceptionThrown) {
     set_exception(debugger_event->exception());
@@ -54,8 +57,8 @@
 }
 
 
-const char* ServiceEvent::EventTypeToCString(EventType type) {
-  switch (type) {
+const char* ServiceEvent::KindAsCString() const {
+  switch (kind()) {
     case kIsolateStart:
       return "IsolateStart";
     case kIsolateExit:
@@ -84,6 +87,8 @@
       return "GC";  // TODO(koda): Change to GarbageCollected.
     case kInspect:
       return "Inspect";
+    case kEmbedder:
+      return embedder_kind();
     case kDebuggerSettingsUpdate:
       return "_DebuggerSettingsUpdate";
     case kIllegal:
@@ -96,11 +101,11 @@
 
 
 const char* ServiceEvent::stream_id() const {
-  switch (type()) {
+  switch (kind()) {
     case kIsolateStart:
     case kIsolateExit:
     case kIsolateUpdate:
-      return "Isolate";
+      return Service::isolate_stream.id();
 
     case kPauseStart:
     case kPauseExit:
@@ -113,10 +118,13 @@
     case kBreakpointRemoved:
     case kInspect:
     case kDebuggerSettingsUpdate:
-      return "Debug";
+      return Service::debug_stream.id();
 
     case kGC:
-      return "GC";
+      return Service::gc_stream.id();
+
+    case kEmbedder:
+      return embedder_stream_id_;
 
     default:
       UNREACHABLE();
@@ -128,9 +136,9 @@
 void ServiceEvent::PrintJSON(JSONStream* js) const {
   JSONObject jsobj(js);
   jsobj.AddProperty("type", "Event");
-  jsobj.AddProperty("kind", EventTypeToCString(type()));
+  jsobj.AddProperty("kind", KindAsCString());
   jsobj.AddProperty("isolate", isolate());
-  if (type() == kPauseBreakpoint) {
+  if (kind() == kPauseBreakpoint) {
     JSONArray jsarr(&jsobj, "pauseBreakpoints");
     // TODO(rmacnak): If we are paused at more than one breakpoint,
     // provide it here.
@@ -142,7 +150,7 @@
       jsobj.AddProperty("breakpoint", breakpoint());
     }
   }
-  if (type() == kDebuggerSettingsUpdate) {
+  if (kind() == kDebuggerSettingsUpdate) {
     JSONObject jssettings(&jsobj, "_debuggerSettings");
     isolate()->debugger()->PrintSettingsToJSONObject(&jssettings);
   }
@@ -155,6 +163,9 @@
   if (exception() != NULL) {
     jsobj.AddProperty("exception", *(exception()));
   }
+  if (async_continuation() != NULL) {
+    jsobj.AddProperty("_asyncContinuation", *(async_continuation()));
+  }
   if (inspectee() != NULL) {
     jsobj.AddProperty("inspectee", *(inspectee()));
   }
@@ -163,6 +174,9 @@
     isolate()->heap()->PrintToJSONObject(Heap::kNew, &jsobj);
     isolate()->heap()->PrintToJSONObject(Heap::kOld, &jsobj);
   }
+  if (bytes() != NULL) {
+    jsobj.AddPropertyBase64("bytes", bytes(), bytes_length());
+  }
 }
 
 }  // namespace dart
diff --git a/runtime/vm/service_event.h b/runtime/vm/service_event.h
index 7a5a8ba..8f81da5 100644
--- a/runtime/vm/service_event.h
+++ b/runtime/vm/service_event.h
@@ -13,7 +13,7 @@
 
 class ServiceEvent {
  public:
-  enum EventType {
+  enum EventKind {
     kIsolateStart,       // New isolate has started
     kIsolateExit,        // Isolate has exited
     kIsolateUpdate,      // Isolate identity information has changed
@@ -32,34 +32,53 @@
 
     kGC,
 
+    kEmbedder,
+
     kIllegal,
   };
 
-  ServiceEvent(Isolate* isolate, EventType event_type)
+  ServiceEvent(Isolate* isolate, EventKind event_kind)
       : isolate_(isolate),
-        type_(event_type),
+        kind_(event_kind),
+        embedder_kind_(NULL),
+        embedder_stream_id_(NULL),
         breakpoint_(NULL),
         top_frame_(NULL),
         exception_(NULL),
+        async_continuation_(NULL),
         inspectee_(NULL),
-        gc_stats_(NULL) {}
+        gc_stats_(NULL),
+        bytes_(NULL),
+        bytes_length_(0) {}
 
   explicit ServiceEvent(const DebuggerEvent* debugger_event);
 
   Isolate* isolate() const { return isolate_; }
 
-  EventType type() const { return type_; }
+  EventKind kind() const { return kind_; }
+
+  const char* embedder_kind() const { return embedder_kind_; }
+
+  const char* KindAsCString() const;
+
+  void set_embedder_kind(const char* embedder_kind) {
+    embedder_kind_ = embedder_kind;
+  }
 
   const char* stream_id() const;
 
+  void set_embedder_stream_id(const char* stream_id) {
+    embedder_stream_id_ = stream_id;
+  }
+
   Breakpoint* breakpoint() const {
     return breakpoint_;
   }
   void set_breakpoint(Breakpoint* bpt) {
-    ASSERT(type() == kPauseBreakpoint ||
-           type() == kBreakpointAdded ||
-           type() == kBreakpointResolved ||
-           type() == kBreakpointRemoved);
+    ASSERT(kind() == kPauseBreakpoint ||
+           kind() == kBreakpointAdded ||
+           kind() == kBreakpointResolved ||
+           kind() == kBreakpointRemoved);
     breakpoint_ = bpt;
   }
 
@@ -67,10 +86,10 @@
     return top_frame_;
   }
   void set_top_frame(ActivationFrame* frame) {
-    ASSERT(type() == kPauseBreakpoint ||
-           type() == kPauseInterrupted ||
-           type() == kPauseException ||
-           type() == kResume);
+    ASSERT(kind() == kPauseBreakpoint ||
+           kind() == kPauseInterrupted ||
+           kind() == kPauseException ||
+           kind() == kResume);
     top_frame_ = frame;
   }
 
@@ -78,15 +97,23 @@
     return exception_;
   }
   void set_exception(const Object* exception) {
-    ASSERT(type_ == kPauseException);
+    ASSERT(kind_ == kPauseException);
     exception_ = exception;
   }
 
+  const Object* async_continuation() const {
+    return async_continuation_;
+  }
+  void set_async_continuation(const Object* closure) {
+    ASSERT(kind_ == kPauseBreakpoint);
+    async_continuation_ = closure;
+  }
+
   const Object* inspectee() const {
     return inspectee_;
   }
   void set_inspectee(const Object* inspectee) {
-    ASSERT(type_ == kInspect);
+    ASSERT(kind_ == kInspect);
     inspectee_ = inspectee;
   }
 
@@ -98,18 +125,34 @@
     gc_stats_ = gc_stats;
   }
 
-  void PrintJSON(JSONStream* js) const;
+  const uint8_t* bytes() const {
+    return bytes_;
+  }
 
-  static const char* EventTypeToCString(EventType type);
+  intptr_t bytes_length() const {
+    return bytes_length_;
+  }
+
+  void set_bytes(const uint8_t* bytes, intptr_t bytes_length) {
+    bytes_ = bytes;
+    bytes_length_ = bytes_length;
+  }
+
+  void PrintJSON(JSONStream* js) const;
 
  private:
   Isolate* isolate_;
-  EventType type_;
+  EventKind kind_;
+  const char* embedder_kind_;
+  const char* embedder_stream_id_;
   Breakpoint* breakpoint_;
   ActivationFrame* top_frame_;
   const Object* exception_;
+  const Object* async_continuation_;
   const Object* inspectee_;
   const Heap::GCStats* gc_stats_;
+  const uint8_t* bytes_;
+  intptr_t bytes_length_;
 };
 
 }  // namespace dart
diff --git a/runtime/vm/service_isolate.cc b/runtime/vm/service_isolate.cc
index 3126678..3779905 100644
--- a/runtime/vm/service_isolate.cc
+++ b/runtime/vm/service_isolate.cc
@@ -304,7 +304,8 @@
     Zone* zone = stack_zone.GetZone();  // Used by GET_NON_NULL_NATIVE_ARGUMENT.
     HANDLESCOPE(isolate);
     GET_NON_NULL_NATIVE_ARGUMENT(String, stream_id, arguments->NativeArgAt(0));
-    Service::ListenStream(stream_id.ToCString());
+    bool result = Service::ListenStream(stream_id.ToCString());
+    arguments->SetReturn(Bool::Get(result));
   }
 
   static void CancelStream(Dart_NativeArguments args) {
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index 1d6651e..a566bc9 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -191,7 +191,8 @@
       typed_data_(TypedData::Handle(isolate)),
       error_(UnhandledException::Handle(isolate)),
       max_vm_isolate_object_id_(
-          Object::vm_isolate_snapshot_object_table().Length()),
+          (kind == Snapshot::kFull) ?
+              Object::vm_isolate_snapshot_object_table().Length() : 0),
       backward_references_(backward_refs) {
 }
 
@@ -2266,7 +2267,7 @@
                      kInitialSize,
                      &forward_list_,
                      true),
-      forward_list_(SnapshotWriter::FirstObjectId()) {
+      forward_list_(kMaxPredefinedObjectIds) {
   ASSERT(buffer != NULL);
   ASSERT(alloc != NULL);
 }
@@ -2324,7 +2325,7 @@
                      kInitialSize,
                      &forward_list_,
                      can_send_any_object),
-      forward_list_(SnapshotWriter::FirstObjectId()) {
+      forward_list_(kMaxPredefinedObjectIds) {
   ASSERT(buffer != NULL);
   ASSERT(alloc != NULL);
 }
diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
index b314513..23c687a 100644
--- a/runtime/vm/snapshot_test.cc
+++ b/runtime/vm/snapshot_test.cc
@@ -863,7 +863,7 @@
                        kInitialSize,
                        &forward_list_,
                        true),
-        forward_list_(SnapshotWriter::FirstObjectId()) {
+        forward_list_(kMaxPredefinedObjectIds) {
     ASSERT(buffer != NULL);
     ASSERT(alloc != NULL);
   }
@@ -1582,8 +1582,7 @@
   ApiNativeScope scope;
   ApiMessageReader api_reader(buffer,
                               writer.BytesWritten(),
-                              &zone_allocator,
-                              false);
+                              &zone_allocator);
   Dart_CObject* root = api_reader.ReadMessage();
   EXPECT_EQ(Dart_CObject_kArray, root->type);
   EXPECT_EQ(kArrayLength, root->value.as_array.length);
diff --git a/runtime/vm/stub_code.h b/runtime/vm/stub_code.h
index cf25bba..b383478 100644
--- a/runtime/vm/stub_code.h
+++ b/runtime/vm/stub_code.h
@@ -57,6 +57,7 @@
   V(Subtype1TestCache)                                                         \
   V(Subtype2TestCache)                                                         \
   V(Subtype3TestCache)                                                         \
+  V(AllocateContext)                                                           \
 
 // Is it permitted for the stubs above to refer to Object::null(), which is
 // allocated in the VM isolate and shared across all isolates.
@@ -68,7 +69,6 @@
 // embedded objects and hence cannot be shared across isolates.
 #define STUB_CODE_LIST(V)                                                      \
   V(CallClosureNoSuchMethod)                                                   \
-  V(AllocateContext)                                                           \
 
 
 // class StubEntry is used to describe stub methods generated in dart to
diff --git a/runtime/vm/stub_code_arm.cc b/runtime/vm/stub_code_arm.cc
index 1337934..5d270ce 100644
--- a/runtime/vm/stub_code_arm.cc
+++ b/runtime/vm/stub_code_arm.cc
@@ -665,7 +665,7 @@
 
   Heap* heap = isolate->heap();
   const intptr_t cid = kArrayCid;
-  Heap::Space space = heap->SpaceForAllocation(cid);
+  Heap::Space space = Heap::SpaceForAllocation(cid);
   __ LoadImmediate(R6, heap->TopAddress(space));
   __ ldr(R0, Address(R6, 0));  // Potential new object start.
   __ adds(R7, R0, Operand(R9));  // Potential next object start.
@@ -730,7 +730,7 @@
   __ mov(R5, Operand(R4));
   __ AddImmediate(R6, R0, sizeof(RawArray) - kHeapObjectTag);
   __ InitializeFieldsNoBarrier(R0, R6, R7, R4, R5);
-  __ IncrementAllocationStatsWithSize(R3, R9, cid, space);
+  __ IncrementAllocationStatsWithSize(R3, R9, space);
   __ Ret();  // Returns the newly allocated object in R0.
   // Unable to allocate the array using the fast inline code, just call
   // into the runtime.
@@ -878,7 +878,6 @@
 void StubCode::GenerateAllocateContextStub(Assembler* assembler) {
   if (FLAG_inline_alloc) {
     Label slow_case;
-    Heap* heap = Isolate::Current()->heap();
     // First compute the rounded instance size.
     // R1: number of context variables.
     intptr_t fixed_size = sizeof(RawContext) + kObjectAlignment - 1;
@@ -891,18 +890,18 @@
     // R1: number of context variables.
     // R2: object size.
     const intptr_t cid = kContextCid;
-    Heap::Space space = heap->SpaceForAllocation(cid);
-    __ LoadImmediate(R5, heap->TopAddress(space));
-    __ ldr(R0, Address(R5, 0));
+    Heap::Space space = Heap::SpaceForAllocation(cid);
+    __ LoadIsolate(R5);
+    __ ldr(R5, Address(R5, Isolate::heap_offset()));
+    __ ldr(R0, Address(R5, Heap::TopOffset(space)));
     __ add(R3, R2, Operand(R0));
     // Check if the allocation fits into the remaining space.
     // R0: potential new object.
     // R1: number of context variables.
     // R2: object size.
     // R3: potential next object start.
-    // R5: top address.
-    __ LoadImmediate(IP, heap->EndAddress(space));
-    __ ldr(IP, Address(IP, 0));
+    // R5: heap.
+    __ ldr(IP, Address(R5, Heap::EndOffset(space)));
     __ cmp(R3, Operand(IP));
     if (FLAG_use_slow_path) {
       __ b(&slow_case);
@@ -916,9 +915,9 @@
     // R1: number of context variables.
     // R2: object size.
     // R3: next object start.
-    // R5: top address.
-    __ LoadAllocationStatsAddress(R6, cid);
-    __ str(R3, Address(R5, 0));
+    // R5: heap.
+    __ LoadAllocationStatsAddress(R6, cid, /* inline_isolate = */ false);
+    __ str(R3, Address(R5, Heap::TopOffset(space)));
     __ add(R0, R0, Operand(kHeapObjectTag));
 
     // Calculate the size tag.
@@ -967,7 +966,7 @@
     Label loop;
     __ AddImmediate(R7, R0, Context::variable_offset(0) - kHeapObjectTag);
     __ InitializeFieldsNoBarrier(R0, R7, R3, R4, R5);
-    __ IncrementAllocationStatsWithSize(R6, R2, cid, space);
+    __ IncrementAllocationStatsWithSize(R6, R2, space);
 
     // Done allocating and initializing the context.
     // R0: new object.
@@ -1093,7 +1092,7 @@
     // Allocate the object and update top to point to
     // next object start and initialize the allocated object.
     Heap* heap = Isolate::Current()->heap();
-    Heap::Space space = heap->SpaceForAllocation(cls.id());
+    Heap::Space space = Heap::SpaceForAllocation(cls.id());
     __ LoadImmediate(R5, heap->TopAddress(space));
     __ ldr(R0, Address(R5, 0));
     __ AddImmediate(R1, R0, instance_size);
diff --git a/runtime/vm/stub_code_arm64.cc b/runtime/vm/stub_code_arm64.cc
index 672a82b..007bfe9 100644
--- a/runtime/vm/stub_code_arm64.cc
+++ b/runtime/vm/stub_code_arm64.cc
@@ -679,7 +679,7 @@
 
   Heap* heap = isolate->heap();
   const intptr_t cid = kArrayCid;
-  Heap::Space space = heap->SpaceForAllocation(cid);
+  Heap::Space space = Heap::SpaceForAllocation(cid);
   const uword top_address = heap->TopAddress(space);
   __ LoadImmediate(R8, top_address, kNoPP);
   const uword end_address = heap->EndAddress(space);
@@ -942,7 +942,6 @@
 void StubCode::GenerateAllocateContextStub(Assembler* assembler) {
   if (FLAG_inline_alloc) {
     Label slow_case;
-    Heap* heap = Isolate::Current()->heap();
     // First compute the rounded instance size.
     // R1: number of context variables.
     intptr_t fixed_size = sizeof(RawContext) + kObjectAlignment - 1;
@@ -955,17 +954,18 @@
     // R1: number of context variables.
     // R2: object size.
     const intptr_t cid = kContextCid;
-    Heap::Space space = heap->SpaceForAllocation(cid);
-    __ LoadImmediate(R5, heap->TopAddress(space), kNoPP);
-    __ ldr(R0, Address(R5));
+    Heap::Space space = Heap::SpaceForAllocation(cid);
+    __ LoadIsolate(R5);
+    __ ldr(R5, Address(R5, Isolate::heap_offset()));
+    __ ldr(R0, Address(R5, Heap::TopOffset(space)));
     __ add(R3, R2, Operand(R0));
     // Check if the allocation fits into the remaining space.
     // R0: potential new object.
     // R1: number of context variables.
     // R2: object size.
     // R3: potential next object start.
-    __ LoadImmediate(TMP, heap->EndAddress(space), kNoPP);
-    __ ldr(TMP, Address(TMP));
+    // R5: heap.
+    __ ldr(TMP, Address(R5, Heap::EndOffset(space)));
     __ CompareRegisters(R3, TMP);
     if (FLAG_use_slow_path) {
       __ b(&slow_case);
@@ -979,9 +979,11 @@
     // R1: number of context variables.
     // R2: object size.
     // R3: next object start.
-    __ str(R3, Address(R5));
+    // R5: heap.
+    __ str(R3, Address(R5, Heap::TopOffset(space)));
     __ add(R0, R0, Operand(kHeapObjectTag));
-    __ UpdateAllocationStatsWithSize(cid, R2, kNoPP, space);
+    __ UpdateAllocationStatsWithSize(cid, R2, kNoPP, space,
+                                     /* inline_isolate = */ false);
 
     // Calculate the size tag.
     // R0: new object.
@@ -996,8 +998,7 @@
 
     // Get the class index and insert it into the tags.
     // R2: size and bit tags.
-    __ LoadImmediate(
-        TMP, RawObject::ClassIdTag::encode(cid), kNoPP);
+    __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid), kNoPP);
     __ orr(R2, R2, Operand(TMP));
     __ StoreFieldToOffset(R2, R0, Context::tags_offset(), kNoPP);
 
@@ -1137,7 +1138,7 @@
     // next object start and initialize the allocated object.
     // R1: instantiated type arguments (if is_cls_parameterized).
     Heap* heap = Isolate::Current()->heap();
-    Heap::Space space = heap->SpaceForAllocation(cls.id());
+    Heap::Space space = Heap::SpaceForAllocation(cls.id());
     __ LoadImmediate(R5, heap->TopAddress(space), kNoPP);
     __ ldr(R2, Address(R5));
     __ AddImmediate(R3, R2, instance_size, kNoPP);
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc
index 3addb33..32505f3 100644
--- a/runtime/vm/stub_code_ia32.cc
+++ b/runtime/vm/stub_code_ia32.cc
@@ -623,7 +623,7 @@
 
   Heap* heap = isolate->heap();
   const intptr_t cid = kArrayCid;
-  Heap::Space space = heap->SpaceForAllocation(cid);
+  Heap::Space space = Heap::SpaceForAllocation(cid);
   __ movl(EAX, Address::Absolute(heap->TopAddress(space)));
   __ movl(EBX, EAX);
 
@@ -841,8 +841,6 @@
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
   if (FLAG_inline_alloc) {
     Label slow_case;
-    Isolate* isolate = Isolate::Current();
-    Heap* heap = isolate->heap();
     // First compute the rounded instance size.
     // EDX: number of context variables.
     intptr_t fixed_size = (sizeof(RawContext) + kObjectAlignment - 1);
@@ -852,14 +850,16 @@
     // Now allocate the object.
     // EDX: number of context variables.
     const intptr_t cid = kContextCid;
-    Heap::Space space = heap->SpaceForAllocation(cid);
-    __ movl(EAX, Address::Absolute(heap->TopAddress(space)));
+    Heap::Space space = Heap::SpaceForAllocation(cid);
+    __ LoadIsolate(ECX);
+    __ movl(ECX, Address(ECX, Isolate::heap_offset()));
+    __ movl(EAX, Address(ECX, Heap::TopOffset(space)));
     __ addl(EBX, EAX);
     // Check if the allocation fits into the remaining space.
     // EAX: potential new object.
     // EBX: potential next object start.
     // EDX: number of context variables.
-    __ cmpl(EBX, Address::Absolute(heap->EndAddress(space)));
+    __ cmpl(EBX, Address(ECX, Heap::EndOffset(space)));
     if (FLAG_use_slow_path) {
       __ jmp(&slow_case);
     } else {
@@ -876,11 +876,13 @@
     // EAX: new object.
     // EBX: next object start.
     // EDX: number of context variables.
-    __ movl(Address::Absolute(heap->TopAddress(space)), EBX);
+    __ movl(Address(ECX, Heap::TopOffset(space)), EBX);
     __ addl(EAX, Immediate(kHeapObjectTag));
     // EBX: Size of allocation in bytes.
     __ subl(EBX, EAX);
-    __ UpdateAllocationStatsWithSize(cid, EBX, kNoRegister, space);
+    // Generate isolate-independent code to allow sharing between isolates.
+    __ UpdateAllocationStatsWithSize(cid, EBX, EDI, space,
+                                     /* inline_isolate = */ false);
 
     // Calculate the size tag.
     // EAX: new object.
@@ -1065,7 +1067,7 @@
     // next object start and initialize the allocated object.
     // EDX: instantiated type arguments (if is_cls_parameterized).
     Heap* heap = Isolate::Current()->heap();
-    Heap::Space space = heap->SpaceForAllocation(cls.id());
+    Heap::Space space = Heap::SpaceForAllocation(cls.id());
     __ movl(EAX, Address::Absolute(heap->TopAddress(space)));
     __ leal(EBX, Address(EAX, instance_size));
     // Check if the allocation fits into the remaining space.
diff --git a/runtime/vm/stub_code_mips.cc b/runtime/vm/stub_code_mips.cc
index a1dd725..b605c5b 100644
--- a/runtime/vm/stub_code_mips.cc
+++ b/runtime/vm/stub_code_mips.cc
@@ -728,7 +728,7 @@
 
   Heap* heap = isolate->heap();
   const intptr_t cid = kArrayCid;
-  Heap::Space space = heap->SpaceForAllocation(cid);
+  Heap::Space space = Heap::SpaceForAllocation(cid);
   __ LoadImmediate(T3, heap->TopAddress(space));
   __ lw(T0, Address(T3, 0));  // Potential new object start.
 
@@ -982,7 +982,6 @@
   __ Comment("AllocateContext");
   if (FLAG_inline_alloc) {
     Label slow_case;
-    Heap* heap = Isolate::Current()->heap();
     // First compute the rounded instance size.
     // T1: number of context variables.
     intptr_t fixed_size = sizeof(RawContext) + kObjectAlignment - 1;
@@ -997,9 +996,10 @@
     // T1: number of context variables.
     // T2: object size.
     const intptr_t cid = kContextCid;
-    Heap::Space space = heap->SpaceForAllocation(cid);
-    __ LoadImmediate(T5, heap->TopAddress(space));
-    __ lw(V0, Address(T5, 0));
+    Heap::Space space = Heap::SpaceForAllocation(cid);
+    __ LoadIsolate(T5);
+    __ lw(T5, Address(T5, Isolate::heap_offset()));
+    __ lw(V0, Address(T5, Heap::TopOffset(space)));
     __ addu(T3, T2, V0);
 
     // Check if the allocation fits into the remaining space.
@@ -1007,8 +1007,8 @@
     // T1: number of context variables.
     // T2: object size.
     // T3: potential next object start.
-    __ LoadImmediate(TMP, heap->EndAddress(space));
-    __ lw(CMPRES1, Address(TMP, 0));
+    // T5: heap.
+    __ lw(CMPRES1, Address(T5, Heap::EndOffset(space)));
     if (FLAG_use_slow_path) {
       __ b(&slow_case);
     } else {
@@ -1021,9 +1021,11 @@
     // T1: number of context variables.
     // T2: object size.
     // T3: next object start.
-    __ sw(T3, Address(T5, 0));
+    // T5: heap.
+    __ sw(T3, Address(T5, Heap::TopOffset(space)));
     __ addiu(V0, V0, Immediate(kHeapObjectTag));
-    __ UpdateAllocationStatsWithSize(cid, T2, T5, space);
+    __ UpdateAllocationStatsWithSize(cid, T2, T5, space,
+                                     /* inline_isolate = */ false);
 
     // Calculate the size tag.
     // V0: new object.
@@ -1191,7 +1193,7 @@
     // next object start and initialize the allocated object.
     // T1: instantiated type arguments (if is_cls_parameterized).
     Heap* heap = Isolate::Current()->heap();
-    Heap::Space space = heap->SpaceForAllocation(cls.id());
+    Heap::Space space = Heap::SpaceForAllocation(cls.id());
     __ LoadImmediate(T5, heap->TopAddress(space));
     __ lw(T2, Address(T5));
     __ LoadImmediate(T4, instance_size);
diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc
index e50c260..eaf3e41 100644
--- a/runtime/vm/stub_code_x64.cc
+++ b/runtime/vm/stub_code_x64.cc
@@ -639,7 +639,7 @@
 
   Heap* heap = isolate->heap();
   const intptr_t cid = kArrayCid;
-  Heap::Space space = heap->SpaceForAllocation(cid);
+  Heap::Space space = Heap::SpaceForAllocation(cid);
   __ movq(RAX, Immediate(heap->TopAddress(space)));
   __ movq(RAX, Address(RAX, 0));
 
@@ -881,8 +881,6 @@
   __ LoadObject(R12, Object::null_object(), PP);
   if (FLAG_inline_alloc) {
     Label slow_case;
-    Isolate* isolate = Isolate::Current();
-    Heap* heap = isolate->heap();
     // First compute the rounded instance size.
     // R10: number of context variables.
     intptr_t fixed_size = (sizeof(RawContext) + kObjectAlignment - 1);
@@ -892,16 +890,17 @@
     // Now allocate the object.
     // R10: number of context variables.
     const intptr_t cid = kContextCid;
-    Heap::Space space = heap->SpaceForAllocation(cid);
-    __ movq(RAX, Immediate(heap->TopAddress(space)));
-    __ movq(RAX, Address(RAX, 0));
+    Heap::Space space = Heap::SpaceForAllocation(cid);
+    __ LoadIsolate(RCX);
+    __ movq(RCX, Address(RCX, Isolate::heap_offset()));
+    __ movq(RAX, Address(RCX, Heap::TopOffset(space)));
     __ addq(R13, RAX);
     // Check if the allocation fits into the remaining space.
     // RAX: potential new object.
     // R13: potential next object start.
     // R10: number of context variables.
-    __ movq(RDI, Immediate(heap->EndAddress(space)));
-    __ cmpq(R13, Address(RDI, 0));
+    // RCX: heap.
+    __ cmpq(R13, Address(RCX, Heap::EndOffset(space)));
     if (FLAG_use_slow_path) {
       __ jmp(&slow_case);
     } else {
@@ -913,12 +912,14 @@
     // RAX: new object.
     // R13: next object start.
     // R10: number of context variables.
-    __ movq(RDI, Immediate(heap->TopAddress(space)));
-    __ movq(Address(RDI, 0), R13);
+    // RCX: heap.
+    __ movq(Address(RCX, Heap::TopOffset(space)), R13);
     __ addq(RAX, Immediate(kHeapObjectTag));
     // R13: Size of allocation in bytes.
     __ subq(R13, RAX);
-    __ UpdateAllocationStatsWithSize(cid, R13, space);
+    // Generate isolate-independent code to allow sharing between isolates.
+    __ UpdateAllocationStatsWithSize(cid, R13, space,
+                                     /* inline_isolate */ false);
 
     // Calculate the size tag.
     // RAX: new object.
@@ -1102,7 +1103,7 @@
     // next object start and initialize the allocated object.
     // RDX: instantiated type arguments (if is_cls_parameterized).
     Heap* heap = Isolate::Current()->heap();
-    Heap::Space space = heap->SpaceForAllocation(cls.id());
+    Heap::Space space = Heap::SpaceForAllocation(cls.id());
     __ movq(RCX, Immediate(heap->TopAddress(space)));
     __ movq(RAX, Address(RCX, 0));
     __ leaq(RBX, Address(RAX, instance_size));
diff --git a/runtime/vm/tags.cc b/runtime/vm/tags.cc
index 0b8e75e..50e5e23 100644
--- a/runtime/vm/tags.cc
+++ b/runtime/vm/tags.cc
@@ -33,17 +33,13 @@
 
 
 bool VMTag::IsNativeEntryTag(uword tag) {
-  if ((tag == kRootTagId) || (tag == kTruncatedTagId)) {
-    return false;
-  }
-  ASSERT(tag != kInvalidTagId);
-  ASSERT(tag != kNumVMTags);
-  ASSERT(tag != kLastTagId);
-  return (tag > kNumVMTags) && !IsRuntimeEntryTag(tag);
+  return (tag > kLastTagId) && !IsRuntimeEntryTag(tag);
 }
 
+
 static RuntimeEntry* runtime_entry_list = NULL;
 
+
 bool VMTag::IsRuntimeEntryTag(uword id) {
   const RuntimeEntry* current = runtime_entry_list;
   while (current != NULL) {
diff --git a/runtime/vm/tags.h b/runtime/vm/tags.h
index b88045f..e0077cb 100644
--- a/runtime/vm/tags.h
+++ b/runtime/vm/tags.h
@@ -19,6 +19,7 @@
   V(VM)            /* Catch all */                                             \
   V(CompileOptimized)                                                          \
   V(CompileUnoptimized)                                                        \
+  V(CompileClass)                                                              \
   V(CompileTopLevel)                                                           \
   V(CompileScanner)                                                            \
   V(Dart)                                                                      \
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index a82c8b3..bbdd1b4 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -27,6 +27,12 @@
 }
 
 
+Thread::~Thread() {
+  // We should cleanly exit any isolate before destruction.
+  ASSERT(isolate_ == NULL);
+}
+
+
 void Thread::InitOnceBeforeIsolate() {
   ASSERT(thread_key_ == OSThread::kUnsetThreadLocalKey);
   thread_key_ = OSThread::CreateThreadLocal(DeleteThread);
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index 00cea34..98cd55d 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -12,6 +12,7 @@
 namespace dart {
 
 class CHA;
+class HandleScope;
 class Isolate;
 class Object;
 class RawBool;
@@ -75,6 +76,8 @@
   static void InitOnceBeforeIsolate();
   static void InitOnceAfterObjectAndStubCode();
 
+  ~Thread();
+
   // The topmost zone used for allocation in this thread.
   Zone* zone() const { return state_.zone; }
 
@@ -114,12 +117,52 @@
     return OFFSET_OF(Thread, state_) + OFFSET_OF(State, top_resource);
   }
 
+  int32_t no_handle_scope_depth() const {
+#if defined(DEBUG)
+    return state_.no_handle_scope_depth;
+#else
+    return 0;
+#endif
+  }
+
+  void IncrementNoHandleScopeDepth() {
+#if defined(DEBUG)
+    ASSERT(state_.no_handle_scope_depth < INT_MAX);
+    state_.no_handle_scope_depth += 1;
+#endif
+  }
+
+  void DecrementNoHandleScopeDepth() {
+#if defined(DEBUG)
+    ASSERT(state_.no_handle_scope_depth > 0);
+    state_.no_handle_scope_depth -= 1;
+#endif
+  }
+
+  HandleScope* top_handle_scope() const {
+#if defined(DEBUG)
+    return state_.top_handle_scope;
+#else
+    return 0;
+#endif
+  }
+
+  void set_top_handle_scope(HandleScope* handle_scope) {
+#if defined(DEBUG)
+    state_.top_handle_scope = handle_scope;
+#endif
+  }
+
   // Collection of isolate-specific state of a thread that is saved/restored
   // on isolate exit/re-entry.
   struct State {
     Zone* zone;
     uword top_exit_frame_info;
     StackResource* top_resource;
+#if defined(DEBUG)
+    HandleScope* top_handle_scope;
+    intptr_t no_handle_scope_depth;
+#endif
   };
 
 #define DEFINE_OFFSET_METHOD(type_name, member_name, expr, default_init_value) \
diff --git a/runtime/vm/thread_registry.h b/runtime/vm/thread_registry.h
index d4de8a3..af16026 100644
--- a/runtime/vm/thread_registry.h
+++ b/runtime/vm/thread_registry.h
@@ -63,6 +63,19 @@
     return (FindEntry(thread) != NULL);
   }
 
+  void CheckNotScheduled(Isolate* isolate) {
+    MutexLocker ml(mutex_);
+    for (int i = 0; i < entries_.length(); ++i) {
+      const Entry& entry = entries_[i];
+      if (entry.scheduled) {
+        FATAL3("Isolate %p still scheduled on %p (whose isolate_ is %p)\n",
+               isolate,
+               entry.thread,
+               entry.thread->isolate());
+      }
+    }
+  }
+
   void VisitObjectPointers(ObjectPointerVisitor* visitor) {
     MutexLocker ml(mutex_);
     for (int i = 0; i < entries_.length(); ++i) {
diff --git a/runtime/vm/thread_test.cc b/runtime/vm/thread_test.cc
index 0eccd64..f781783 100644
--- a/runtime/vm/thread_test.cc
+++ b/runtime/vm/thread_test.cc
@@ -117,9 +117,11 @@
   virtual void Run() {
     Thread::EnterIsolateAsHelper(isolate_);
     {
+      Thread* thread = Thread::Current();
       // Create a zone (which is also a stack resource) and exercise it a bit.
-      StackZone stack_zone(Thread::Current());
-      Zone* zone = Thread::Current()->zone();
+      StackZone stack_zone(thread);
+      HANDLESCOPE(thread);
+      Zone* zone = thread->zone();
       EXPECT_EQ(zone, stack_zone.GetZone());
       ZoneGrowableArray<bool>* a0 = new(zone) ZoneGrowableArray<bool>(zone, 1);
       GrowableArray<bool> a1(zone, 1);
diff --git a/sdk/lib/_internal/js_runtime/lib/isolate_patch.dart b/sdk/lib/_internal/js_runtime/lib/isolate_patch.dart
index 4915374..82ef73f 100644
--- a/sdk/lib/_internal/js_runtime/lib/isolate_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/isolate_patch.dart
@@ -23,7 +23,8 @@
 
   @patch
   static Future<Isolate> spawn(void entryPoint(message), var message,
-                                     { bool paused: false }) {
+                               {bool paused: false, bool errorsAreFatal,
+                                SendPort onExit, SendPort onError}) {
     try {
       return IsolateNatives.spawnFunction(entryPoint, message, paused)
           .then((msg) => new Isolate(msg[1],
@@ -36,9 +37,9 @@
 
   @patch
   static Future<Isolate> spawnUri(
-      Uri uri, List<String> args, var message, { bool paused: false,
-                                                 bool checked,
-                                                 Uri packageRoot }) {
+      Uri uri, List<String> args, var message,
+      {bool paused: false, bool checked, Uri packageRoot, bool errorsAreFatal,
+       SendPort onExit, SendPort onError}) {
     if (packageRoot != null) throw new UnimplementedError("packageRoot");
     try {
       if (args is List<String>) {
diff --git a/sdk/lib/_internal/js_runtime/lib/js_helper.dart b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
index 92ea4ba..dda551e 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_helper.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
@@ -1271,7 +1271,8 @@
     var jsFunction = JS('var', '#[#]', function, selectorName);
     if (jsFunction == null) {
       var interceptor = getInterceptor(function);
-      jsFunction = JS('', '#["call*"]', interceptor);
+      jsFunction = JS('', '#[#]', interceptor,
+          JS_GET_NAME(JsGetName.CALL_CATCH_ALL));
 
       if (jsFunction == null) {
         return functionNoSuchMethod(function, arguments, null);
diff --git a/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart b/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart
index 8e11da3..a427996 100644
--- a/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart
+++ b/sdk/lib/_internal/js_runtime/lib/shared/embedded_names.dart
@@ -11,39 +11,36 @@
 /// This library is shared between the compiler and the runtime system.
 library dart2js._embedded_names;
 
-const DISPATCH_PROPERTY_NAME = "dispatchPropertyName";
-const TYPE_INFORMATION = 'typeInformation';
-const GLOBAL_FUNCTIONS = 'globalFunctions';
-const STATICS = 'statics';
-
-/// If [JSInvocationMirror._invokeOn] is being used, this embedded global
-/// contains a JavaScript map with the names of methods that are
-/// intercepted.
-const INTERCEPTED_NAMES = 'interceptedNames';
-
-/// A JS map from mangled global names to their unmangled names.
+/// The name of the property that is used to mark a type as typedef.
 ///
-/// If the program does not use reflection may be empty (but not null or
-/// undefined).
-const MANGLED_GLOBAL_NAMES = 'mangledGlobalNames';
+/// Without reflection typedefs are removed (expanded to their function type)
+/// but with reflection an object is needed to have the typedef's name. The
+/// object is marked with this property.
+///
+/// This property name only lives on internal type-objects and is only used
+/// when reflection is enabled.
+const TYPEDEF_PREDICATE_PROPERTY_NAME = r"$$isTypedef";
 
-const MANGLED_NAMES = 'mangledNames';
-const LIBRARIES = 'libraries';
-const FINISHED_CLASSES = 'finishedClasses';
-const ALL_CLASSES = 'allClasses';
-const INTERCEPTORS_BY_TAG = 'interceptorsByTag';
-const LEAF_TAGS = 'leafTags';
-const LAZIES = 'lazies';
-const GET_ISOLATE_TAG = 'getIsolateTag';
-const ISOLATE_TAG = 'isolateTag';
-const CURRENT_SCRIPT = 'currentScript';
-const DEFERRED_LIBRARY_URIS = 'deferredLibraryUris';
-const DEFERRED_LIBRARY_HASHES = 'deferredLibraryHashes';
-const INITIALIZE_LOADED_HUNK = 'initializeLoadedHunk';
-const IS_HUNK_LOADED = 'isHunkLoaded';
-const IS_HUNK_INITIALIZED = 'isHunkInitialized';
-const DEFERRED_INITIALIZED = 'deferredInitialized';
-const PRECOMPILED = 'precompiled';
+/// The name of the property that is used to find the function type of a
+/// typedef.
+///
+/// Without reflection typedefs are removed (expanded to their function type)
+/// but with reflection an object is needed to have the typedef's name.
+///
+/// The typedef's object contains a pointer to its function type (as an index
+/// into the embedded global [TYPES]) in this property.
+///
+/// This property name only lives on internal type-objects and is only used
+/// when reflection is enabled.
+const TYPEDEF_TYPE_PROPERTY_NAME = r"$typedefType";
+
+/// The name of the property that is used to find the native superclass of
+/// an extended class.
+///
+/// Every class that extends a native class has this property set on its
+/// native class.
+const NATIVE_SUPERCLASS_TAG_NAME = r"$nativeSuperclassTag";
+
 
 /// The name of the embedded global for metadata.
 ///
@@ -57,24 +54,221 @@
 /// Use [JsBuiltin.getType] instead of directly accessing this embedded global.
 const TYPES = 'types';
 
+/// An embedded global name that can be used to store a mapping from
+/// static function names to dart-closure getters.
+const GLOBAL_FUNCTIONS = 'globalFunctions';
+
+/// Returns a function that maps a name of a class to its type.
+///
+/// This embedded global is used by the runtime when computing the internal
+/// runtime-type-information (rti) object.
+const GET_TYPE_FROM_NAME = 'getTypeFromName';
+
+/// If [JSInvocationMirror._invokeOn] is being used, this embedded global
+/// contains a JavaScript map with the names of methods that are
+/// intercepted.
+const INTERCEPTED_NAMES = 'interceptedNames';
+
+/// A JS map from mangled global names to their unmangled names.
+///
+/// If the program does not use reflection, this embedded global may be empty
+/// (but not null or undefined).
+const MANGLED_GLOBAL_NAMES = 'mangledGlobalNames';
+
+/// A JS map from mangled instance names to their unmangled names.
+///
+/// If the program does not use reflection, this embedded global may be empty
+/// (but not null or undefined).
+const MANGLED_NAMES = 'mangledNames';
+
+/// A JS map from dispatch tags (usually constructor names of DOM classes) to
+/// interceptor class. This map is used to find the correct interceptor for
+/// native classes.
+///
+/// This embedded global is used for natives.
+const INTERCEPTORS_BY_TAG = 'interceptorsByTag';
+
+/// A JS map from dispatch tags (usually constructor names of DOM classes) to
+/// booleans. Every tag entry of [INTERCEPTORS_BY_TAG] has a corresponding
+/// entry in the leaf-tags map.
+///
+/// A tag-entry is true, when a class can be treated as leaf class in the
+/// hierarchy. That is, even though it might have subclasses, all subclasses
+/// have the same code for the used methods.
+///
+/// This embedded global is used for natives.
+const LEAF_TAGS = 'leafTags';
+
+/// A JS function that returns the isolate tag for a given name.
+///
+/// This function uses the [ISOLATE_TAG] (below) to construct a name that is
+/// unique per isolate.
+///
+/// This embedded global is used for natives.
+// TODO(floitsch): should we rename this variable to avoid confusion with
+//    [INTERCEPTORS_BY_TAG] and [LEAF_TAGS].
+const GET_ISOLATE_TAG = 'getIsolateTag';
+
+/// A string that is different for each running isolate.
+///
+/// When this embedded global is initialized a global variable is used to
+/// ensure that no other running isolate uses the same isolate-tag string.
+///
+/// This embedded global is used for natives.
+// TODO(floitsch): should we rename this variable to avoid confusion with
+//    [INTERCEPTORS_BY_TAG] and [LEAF_TAGS].
+const ISOLATE_TAG = 'isolateTag';
+
+/// This embedded global (a function) returns the isolate-specific dispatch-tag
+/// that is used to accelerate interceptor calls.
+const DISPATCH_PROPERTY_NAME = "dispatchPropertyName";
+
+/// An embedded global that maps a [Type] to the [Interceptor] and constructors
+/// for that type.
+///
+/// More documentation can be found in the interceptors library (close to its
+/// use).
+const TYPE_TO_INTERCEPTOR_MAP = "typeToInterceptorMap";
+
+/// The current script's URI when the program was loaded.
+///
+/// This embedded global is set at startup, just before invoking `main`.
+const CURRENT_SCRIPT = 'currentScript';
+
 /// Returns a function that creates a new Isolate (its static state).
 ///
-/// (floitsch): Note that this will probably go away, since one JS heap will
-/// only contain one Dart isolate.
+/// (floitsch): Note that this embedded global will probably go away, since one
+/// JS heap will only contain one Dart isolate.
 const CREATE_NEW_ISOLATE = 'createNewIsolate';
 
+/// Returns a class-id of the given instance.
+///
+/// The extracted id can be used to built a new instance of the same type
+/// (see [INSTANCE_FROM_CLASS_ID].
+///
+/// This embedded global is used for serialization in the isolate-library.
 const CLASS_ID_EXTRACTOR = 'classIdExtractor';
-const CLASS_FIELDS_EXTRACTOR = 'classFieldsExtractor';
-const INSTANCE_FROM_CLASS_ID = "instanceFromClassId";
-const INITIALIZE_EMPTY_INSTANCE = "initializeEmptyInstance";
-const TYPEDEF_TYPE_PROPERTY_NAME = r"$typedefType";
-const TYPEDEF_PREDICATE_PROPERTY_NAME = r"$$isTypedef";
-const NATIVE_SUPERCLASS_TAG_NAME = r"$nativeSuperclassTag";
 
-/// Returns the type given the name of a class.
-/// This function is called by the runtime when computing rti.
-const GET_TYPE_FROM_NAME = 'getTypeFromName';
-const TYPE_TO_INTERCEPTOR_MAP = "typeToInterceptorMap";
+/// Returns an empty instance of the given class-id.
+///
+/// Given a class-id (see [CLASS_ID_EXTRACTOR]) returns an empty instance.
+///
+/// This embedded global is used for deserialization in the isolate-library.
+const INSTANCE_FROM_CLASS_ID = "instanceFromClassId";
+
+/// Returns a list of (mangled) field names for the given instance.
+///
+/// The list of fields can be used to extract the instance's values and then
+/// initialize an empty instance (see [INITIALIZE_EMPTY_INSTANCE].
+///
+/// This embedded global is used for serialization in the isolate-library.
+const CLASS_FIELDS_EXTRACTOR = 'classFieldsExtractor';
+
+/// Initializes the given empty instance with the given fields.
+///
+/// The given fields are in an array and must be in the same order as the
+/// field-names obtained by [CLASS_FIELDS_EXTRACTOR].
+///
+/// This embedded global is used for deserialization in the isolate-library.
+const INITIALIZE_EMPTY_INSTANCE = "initializeEmptyInstance";
+
+/// Returns a map from load-ids to URIs.
+///
+/// To load the deferred library that is represented by the load-id, the runtime
+/// must load all associated URIs.
+///
+/// This embedded global is only used for deferred loading.
+const DEFERRED_LIBRARY_URIS = 'deferredLibraryUris';
+
+/// Returns a map from load-ids to hashes.
+///
+/// The hashes are associated with the URIs of the load-ids (see
+/// [DEFERRED_LIBRARY_URIS]). They are MD5 (or similar) hashes of the code that
+/// must be loaded. By using cryptographic hashes we can avoid loading similar
+/// code multiple times.
+///
+/// This embedded global is only used for deferred loading.
+const DEFERRED_LIBRARY_HASHES = 'deferredLibraryHashes';
+
+/// Initialize a loaded hunk.
+///
+/// Once a hunk (the code from a deferred URI) has been loaded it must be
+/// initialized. Calling this function with the corresponding hash (see
+/// [DEFERRED_LIBRARY_HASHES]) initializes the code.
+///
+/// This embedded global is only used for deferred loading.
+const INITIALIZE_LOADED_HUNK = 'initializeLoadedHunk';
+
+/// Returns, whether a hunk (identified by its hash) has already been loaded.
+///
+/// This embedded global is only used for deferred loading.
+const IS_HUNK_LOADED = 'isHunkLoaded';
+
+/// Returns, whether a hunk (identified by its hash) has already been
+/// initialized.
+///
+/// This embedded global is only used for deferred loading.
+const IS_HUNK_INITIALIZED = 'isHunkInitialized';
+
+/// A set (implemented as map to booleans) of hunks (identified by hashes) that
+/// have already been initialized.
+///
+/// This embedded global is only used for deferred loading.
+///
+/// This global is an emitter-internal embedded global, and not used by the
+/// runtime. The constant remains in this file to make sure that other embedded
+/// globals don't clash with it.
+const DEFERRED_INITIALIZED = 'deferredInitialized';
+
+
+/// Returns a function that creates all precompiled functions (in particular
+/// constructors).
+///
+/// That is, the function returns the array that the full emitter would
+/// otherwise build dynamically when it finishes all classes.
+///
+/// This constant is only used in CSP mode.
+///
+/// This global is an emitter-internal embedded global, and not used by the
+/// runtime. The constant remains in this file to make sure that other embedded
+/// globals don't clash with it.
+const PRECOMPILED = 'precompiled';
+
+/// An emitter-internal embedded global. This global is not used by the runtime.
+///
+/// The constant remains in this file to make sure that other embedded globals
+/// don't clash with it.
+const FINISHED_CLASSES = 'finishedClasses';
+
+
+/// A JavaScript object literal that maps the (minified) JavaScript constructor
+/// name (as given by [JsBuiltin.rawRtiToJsConstructorName] to the
+/// JavaScript constructor.
+///
+/// This embedded global is only used by reflection.
+const ALL_CLASSES = 'allClasses';
+
+/// A map from element to type information.
+///
+/// This embedded global is only used by reflection.
+const TYPE_INFORMATION = 'typeInformation';
+
+/// A map from statics to their descriptors.
+///
+/// This embedded global is only used by reflection.
+const STATICS = 'statics';
+
+/// An array of library descriptors.
+///
+/// The descriptor contains information such as name, uri, classes, ...
+///
+/// This embedded global is only used by reflection.
+const LIBRARIES = 'libraries';
+
+/// A map from lazy statics to their initializers.
+///
+/// This embedded global is only used by reflection.
+const LAZIES = 'lazies';
 
 /// Names that are supported by [JS_GET_NAME].
 // TODO(herhut): Make entries lower case (as in fields) and find a better name.
diff --git a/sdk/lib/async/broadcast_stream_controller.dart b/sdk/lib/async/broadcast_stream_controller.dart
index 93c0833..e5a1efc 100644
--- a/sdk/lib/async/broadcast_stream_controller.dart
+++ b/sdk/lib/async/broadcast_stream_controller.dart
@@ -67,7 +67,6 @@
   // _onCancel is inherited.
 }
 
-
 abstract class _BroadcastStreamController<T>
     implements StreamController<T>,
                _StreamControllerLifecycle<T>,
@@ -80,8 +79,8 @@
   static const int _STATE_CLOSED = 4;
   static const int _STATE_ADDSTREAM = 8;
 
-  final _NotificationHandler _onListen;
-  final _NotificationHandler _onCancel;
+  _NotificationHandler _onListen;
+  _NotificationHandler _onCancel;
 
   // State of the controller.
   int _state;
@@ -113,6 +112,20 @@
     _next = _previous = this;
   }
 
+  void set onListen(void onListenHandler()) { _onListen = onListenHandler; }
+
+  void set onPause(void onPauseHandler()) {
+    throw new UnsupportedError(
+        "Broadcast stream controllers do not support pause callbacks");
+  }
+
+  void set onResume(void onResumeHandler())  {
+    throw new UnsupportedError(
+        "Broadcast stream controllers do not support pause callbacks");
+  }
+
+  void set onCancel(onCancelHandler()) { _onCancel = onCancelHandler; }
+
   // StreamController interface.
 
   Stream<T> get stream => new _BroadcastStream<T>(this);
diff --git a/sdk/lib/async/stream_controller.dart b/sdk/lib/async/stream_controller.dart
index 5764ecd..26bbb14 100644
--- a/sdk/lib/async/stream_controller.dart
+++ b/sdk/lib/async/stream_controller.dart
@@ -77,12 +77,6 @@
                             void onResume(),
                             onCancel(),
                             bool sync: false}) {
-    if (onListen == null && onPause == null &&
-        onResume == null && onCancel == null) {
-      return sync
-          ? new _NoCallbackSyncStreamController<T>()
-          : new _NoCallbackAsyncStreamController<T>();
-    }
     return sync
          ? new _SyncStreamController<T>(onListen, onPause, onResume, onCancel)
          : new _AsyncStreamController<T>(onListen, onPause, onResume, onCancel);
@@ -139,6 +133,42 @@
   }
 
   /**
+   * Sets the callback which is called when the stream is listened to.
+   *
+   * This overrides the previous callback, or clears it if the [onListenHandler]
+   * is `null`.
+   */
+  void set onListen(void onListenHandler());
+
+  /**
+   * Sets the callback which is called when the stream is paused.
+   *
+   * This overrides the previous callback, or clears it if the [onPauseHandler]
+   * is `null`.
+   *
+   * Pause related callbacks are not supported on broadcast stream controllers.
+   */
+  void set onPause(void onPauseHandler());
+
+  /**
+   * Sets the callback which is called when the stream is resumed.
+   *
+   * This overrides the previous callback, or clears it if the [onResumeHandler]
+   * is `null`.
+   *
+   * Pause related callbacks are not supported on broadcast stream controllers.
+   */
+  void set onResume(void onResumeHandler());
+
+  /**
+   * Sets the callback which is called when the stream is canceled.
+   *
+   * This overrides the previous callback, or clears it if the [onCancelHandler]
+   * is `null`.
+   */
+  void set onCancel(onCancelHandler());
+
+  /**
    * Returns a view of this object that only exposes the [StreamSink] interface.
    */
   StreamSink<T> get sink;
@@ -383,12 +413,23 @@
   // accessed earlier, or if close is called before subscribing.
   _Future _doneFuture;
 
-  _StreamController();
+  _NotificationHandler _onListen;
+  _NotificationHandler _onPause;
+  _NotificationHandler _onResume;
+  _NotificationHandler _onCancel;
 
-  _NotificationHandler get _onListen;
-  _NotificationHandler get _onPause;
-  _NotificationHandler get _onResume;
-  _NotificationHandler get _onCancel;
+  _StreamController(void this._onListen(),
+                    void this._onPause(),
+                    void this._onResume(),
+                    this._onCancel());
+
+  void set onListen(void onListenHandler()) { _onListen = onListenHandler; }
+
+  void set onPause(void onPauseHandler()) { _onPause = onPauseHandler; }
+
+  void set onResume(void onResumeHandler()) { _onResume = onResumeHandler; }
+
+  void set onCancel(onCancelHandler()) { _onCancel = onCancelHandler; }
 
   // Return a new stream every time. The streams are equal, but not identical.
   Stream<T> get stream => new _ControllerStream<T>(this);
@@ -722,44 +763,11 @@
 // TODO(lrn): Use common superclass for callback-controllers when VM supports
 // constructors in mixin superclasses.
 
-class _AsyncStreamController<T> extends _StreamController<T>
-                                   with _AsyncStreamControllerDispatch<T> {
-  final _NotificationHandler _onListen;
-  final _NotificationHandler _onPause;
-  final _NotificationHandler _onResume;
-  final _NotificationHandler _onCancel;
+class _AsyncStreamController<T> = _StreamController<T>
+                                  with _AsyncStreamControllerDispatch<T>;
 
-  _AsyncStreamController(void this._onListen(),
-                         void this._onPause(),
-                         void this._onResume(),
-                         this._onCancel());
-}
-
-class _SyncStreamController<T> extends _StreamController<T>
-                                  with _SyncStreamControllerDispatch<T> {
-  final _NotificationHandler _onListen;
-  final _NotificationHandler _onPause;
-  final _NotificationHandler _onResume;
-  final _NotificationHandler _onCancel;
-
-  _SyncStreamController(void this._onListen(),
-                        void this._onPause(),
-                        void this._onResume(),
-                        this._onCancel());
-}
-
-abstract class _NoCallbacks {
-  _NotificationHandler get _onListen => null;
-  _NotificationHandler get _onPause => null;
-  _NotificationHandler get _onResume => null;
-  _NotificationHandler get _onCancel => null;
-}
-
-class _NoCallbackAsyncStreamController<T> = _StreamController<T>
-       with _AsyncStreamControllerDispatch<T>, _NoCallbacks;
-
-class _NoCallbackSyncStreamController<T> = _StreamController<T>
-       with _SyncStreamControllerDispatch<T>, _NoCallbacks;
+class _SyncStreamController<T> = _StreamController<T>
+                                 with _SyncStreamControllerDispatch<T>;
 
 typedef _NotificationHandler();
 
diff --git a/sdk/lib/convert/line_splitter.dart b/sdk/lib/convert/line_splitter.dart
index 84cb22c..0af2f2f 100644
--- a/sdk/lib/convert/line_splitter.dart
+++ b/sdk/lib/convert/line_splitter.dart
@@ -4,21 +4,53 @@
 
 part of dart.convert;
 
+// Character constants.
+const int _LF = 10;
+const int _CR = 13;
+
 /**
- * This class splits [String] values into individual lines.
+ * A [Converter] that splits a [String] into individual lines.
+ *
+ * A line is terminated by either a CR (U+000D), a LF (U+000A), a
+ * CR+LF sequence (DOS line ending),
+ * and a final non-empty line can be ended by the end of the string.
+ *
+ * The returned lines do not contain the line terminators.
  */
 class LineSplitter extends Converter<String, List<String>> {
 
   const LineSplitter();
 
-  List<String> convert(String data) {
-    var lines = new List<String>();
-
-    _LineSplitterSink._addSlice(data, 0, data.length, true, lines.add);
-
-    return lines;
+  /// Split [lines] into individual lines.
+  ///
+  /// If [start] and [end] are provided, only split the contents of
+  /// `lines.substring(start, end)`. The [start] and [end] values must
+  /// specify a valid sub-range of [lines]
+  /// (`0 <= start <= end <= lines.length`).
+  static Iterable<String> split(String lines, [int start = 0, int end]) sync* {
+    end = RangeError.checkValidRange(start, end, lines.length);
+    int sliceStart = start;
+    int char = 0;
+    for (int i = start; i < end; i++) {
+      int previousChar = char;
+      char = lines.codeUnitAt(i);
+      if (char != _CR) {
+        if (char != _LF) continue;
+        if (previousChar == _CR) {
+          sliceStart = i + 1;
+          continue;
+        }
+      }
+      yield lines.substring(sliceStart, i);
+      sliceStart = i + 1;
+    }
+    if (sliceStart < end) {
+      yield lines.substring(sliceStart, end);
+    }
   }
 
+  List<String> convert(String data) => split(data).toList();
+
   StringConversionSink startChunkedConversion(Sink<String> sink) {
     if (sink is! StringConversionSink) {
       sink = new StringConversionSink.from(sink);
@@ -29,65 +61,76 @@
 
 // TODO(floitsch): deal with utf8.
 class _LineSplitterSink extends StringConversionSinkBase {
-  static const int _LF = 10;
-  static const int _CR = 13;
-
   final StringConversionSink _sink;
 
+  /// The carry-over from the previous chunk.
+  ///
+  /// If the previous slice ended in a line without a line terminator,
+  /// then the next slice may continue the line.
   String _carry;
 
+  /// Whether to skip a leading LF character from the next slice.
+  ///
+  /// If the previous slice ended on a CR character, a following LF
+  /// would be part of the same line termination, and should be ignored.
+  ///
+  /// Only `true` when [_carry] is `null`.
+  bool _skipLeadingLF = false;
+
   _LineSplitterSink(this._sink);
 
   void addSlice(String chunk, int start, int end, bool isLast) {
+    end = RangeError.checkValidRange(start, end, chunk.length);
+    // If the chunk is empty, it's probably because it's the last one.
+    // Handle that here, so we know the range is non-empty below.
+    if (start >= end) {
+      if (isLast) close();
+      return;
+    }
     if (_carry != null) {
+      assert(!_skipLeadingLF);
       chunk = _carry + chunk.substring(start, end);
       start = 0;
       end = chunk.length;
       _carry = null;
+    } else if (_skipLeadingLF) {
+       if (chunk.codeUnitAt(start) == _LF) {
+        start += 1;
+      }
+      _skipLeadingLF = false;
     }
-    _carry = _addSlice(chunk, start, end, isLast, _sink.add);
-    if (isLast) _sink.close();
+    _addLines(chunk, start, end);
+    if (isLast) close();
   }
 
   void close() {
-    addSlice('', 0, 0, true);
+    if (_carry != null) {
+      _sink.add(_carry);
+      _carry = null;
+    }
+    _sink.close();
   }
 
-  static String _addSlice(String chunk, int start, int end, bool isLast,
-                          void adder(String val)) {
-
-    int pos = start;
-    while (pos < end) {
-      int skip = 0;
-      int char = chunk.codeUnitAt(pos);
-      if (char == _LF) {
-        skip = 1;
-      } else if (char == _CR) {
-        skip = 1;
-        if (pos + 1 < end) {
-          if (chunk.codeUnitAt(pos + 1) == _LF) {
-            skip = 2;
-          }
-        } else if (!isLast) {
-          return chunk.substring(start, end);
+  void _addLines(String lines, int start, int end) {
+    int sliceStart = start;
+    int char = 0;
+    for (int i = start; i < end; i++) {
+      int previousChar = char;
+      char = lines.codeUnitAt(i);
+      if (char != _CR) {
+        if (char != _LF) continue;
+        if (previousChar == _CR) {
+          sliceStart = i + 1;
+          continue;
         }
       }
-      if (skip > 0) {
-        adder(chunk.substring(start, pos));
-        start = pos = pos + skip;
-      } else {
-        pos++;
-      }
+      _sink.add(lines.substring(sliceStart, i));
+      sliceStart = i + 1;
     }
-    if (pos != start) {
-      var carry = chunk.substring(start, pos);
-      if (isLast) {
-        // Add remaining
-        adder(carry);
-      } else {
-        return carry;
-      }
+    if (sliceStart < end) {
+      _carry = lines.substring(sliceStart, end);
+    } else {
+      _skipLeadingLF = (char == _CR);
     }
-    return null;
   }
 }
diff --git a/sdk/lib/core/uri.dart b/sdk/lib/core/uri.dart
index 5cf49b0..3eb81a4 100644
--- a/sdk/lib/core/uri.dart
+++ b/sdk/lib/core/uri.dart
@@ -381,9 +381,8 @@
     }
 
     assert(state == NOT_IN_PATH);
-    bool isFile = (scheme == "file");
-    bool ensureLeadingSlash = host != null;
-    path = _makePath(uri, pathStart, index, null, ensureLeadingSlash, isFile);
+    bool hasAuthority = (host != null);
+    path = _makePath(uri, pathStart, index, null, scheme, hasAuthority);
 
     if (char == _QUESTION) {
       int numberSignIndex = -1;
@@ -511,9 +510,14 @@
         (userInfo.isNotEmpty || port != null || isFile)) {
       host = "";
     }
-    bool ensureLeadingSlash = host != null;
+    bool hasAuthority = (host != null);
     path = _makePath(path, 0, _stringOrNullLength(path), pathSegments,
-                     ensureLeadingSlash, isFile);
+                     scheme, hasAuthority);
+    if (scheme.isEmpty && host == null && !path.startsWith('/')) {
+      path = _normalizeRelativePath(path);
+    } else {
+      path = _removeDotSegments(path);
+    }
     return new Uri._internal(scheme, userInfo, host, port,
                              path, query, fragment);
   }
@@ -953,15 +957,15 @@
       host = "";
     }
 
-    bool ensureLeadingSlash = (host != null);
+    bool hasAuthority = host != null;
     if (path != null || pathSegments != null) {
       path = _makePath(path, 0, _stringOrNullLength(path), pathSegments,
-                       ensureLeadingSlash, isFile);
+                       scheme, hasAuthority);
     } else {
       path = this.path;
-      if ((isFile || (ensureLeadingSlash && !path.isEmpty)) &&
+      if ((isFile || (hasAuthority && !path.isEmpty)) &&
           !path.startsWith('/')) {
-        path = "/$path";
+        path = "/" + path;
       }
     }
 
@@ -1025,20 +1029,23 @@
   }
 
   /**
-   * Returns an URI where the path has been normalized.
+   * Returns a URI where the path has been normalized.
    *
    * A normalized path does not contain `.` segments or non-leading `..`
    * segments.
-   * Only a relative path may contain leading `..` segments,
+   * Only a relative path with no scheme or authority may contain
+   * leading `..` segments,
    * a path that starts with `/` will also drop any leading `..` segments.
    *
-   * This uses the same normalization strategy as [resolveUri], as specified by
-   * RFC 3986.
+   * This uses the same normalization strategy as `new Uri().resolve(this)`.
    *
    * Does not change any part of the URI except the path.
+   *
+   * The default implementation of `Uri` always normalizes paths, so calling
+   * this function has no effect.
    */
   Uri normalizePath() {
-    String path = _removeDotSegments(_path);
+    String path = _normalizePath(_path, scheme, hasAuthority);
     if (identical(path, _path)) return this;
     return this.replace(path: path);
   }
@@ -1178,18 +1185,18 @@
     if (!_isAlphabeticCharacter(firstCodeUnit)) {
       _fail(scheme, start, "Scheme not starting with alphabetic character");
     }
-    bool allLowercase = firstCodeUnit >= _LOWER_CASE_A;
+    bool containsUpperCase = false;
     for (int i = start; i < end; i++) {
       final int codeUnit = scheme.codeUnitAt(i);
       if (!_isSchemeCharacter(codeUnit)) {
         _fail(scheme, i, "Illegal scheme character");
       }
-      if (codeUnit < _LOWER_CASE_A || codeUnit > _LOWER_CASE_Z) {
-        allLowercase = false;
+      if (_UPPER_CASE_A <= codeUnit && codeUnit <= _UPPER_CASE_Z) {
+        containsUpperCase = true;
       }
     }
     scheme = scheme.substring(start, end);
-    if (!allLowercase) scheme = scheme.toLowerCase();
+    if (containsUpperCase) scheme = scheme.toLowerCase();
     return scheme;
   }
 
@@ -1200,8 +1207,10 @@
 
   static String _makePath(String path, int start, int end,
                           Iterable<String> pathSegments,
-                          bool ensureLeadingSlash,
-                          bool isFile) {
+                          String scheme,
+                          bool hasAuthority) {
+    bool isFile = (scheme == "file");
+    bool ensureLeadingSlash = isFile || hasAuthority;
     if (path == null && pathSegments == null) return isFile ? "/" : "";
     if (path != null && pathSegments != null) {
       throw new ArgumentError('Both path and pathSegments specified');
@@ -1214,13 +1223,25 @@
     }
     if (result.isEmpty) {
       if (isFile) return "/";
-    } else if ((isFile || ensureLeadingSlash) &&
-               result.codeUnitAt(0) != _SLASH) {
-      return "/$result";
+    } else if (ensureLeadingSlash && !result.startsWith('/')) {
+      result = "/" + result;
     }
+    result = _normalizePath(result, scheme, hasAuthority);
     return result;
   }
 
+  /// Performs path normalization (remove dot segments) on a path.
+  ///
+  /// If the URI has neither scheme nor authority, it's considered a
+  /// "pure path" and normalization won't remove leading ".." segments.
+  /// Otherwise it follows the RFC 3986 "remove dot segments" algorithm.
+  static String _normalizePath(String path, String scheme, bool hasAuthority) {
+    if (scheme.isEmpty && !hasAuthority && !path.startsWith('/')) {
+      return _normalizeRelativePath(path);
+    }
+    return _removeDotSegments(path);
+  }
+
   static String _makeQuery(String query, int start, int end,
                            Map<String, String> queryParameters) {
     if (query == null && queryParameters == null) return null;
@@ -1429,8 +1450,7 @@
    */
   bool get isAbsolute => scheme != "" && fragment == "";
 
-  String _merge(String base, String reference) {
-    if (base.isEmpty) return "/$reference";
+  String _mergePaths(String base, String reference) {
     // Optimize for the case: absolute base, reference beginning with "../".
     int backCount = 0;
     int refStart = 0;
@@ -1463,21 +1483,36 @@
                              reference.substring(refStart - 3 * backCount));
   }
 
-  bool _hasDotSegments(String path) {
-    if (path.length > 0 && path.codeUnitAt(0) == _DOT) return true;
+  /// Make a guess at whether a path contains a `..` or `.` segment.
+  ///
+  /// This is a primitive test that can cause false positives.
+  /// It's only used to avoid a more expensive operation in the case where
+  /// it's not necessary.
+  static bool _mayContainDotSegments(String path) {
+    if (path.startsWith('.')) return true;
     int index = path.indexOf("/.");
     return index != -1;
   }
 
-  String _removeDotSegments(String path) {
-    if (!_hasDotSegments(path)) return path;
+  /// Removes '.' and '..' segments from a path.
+  ///
+  /// Follows the RFC 2986 "remove dot segments" algorithm.
+  /// This algorithm is only used on paths of URIs with a scheme,
+  /// and it treats the path as if it is absolute (leading '..' are removed).
+  static String _removeDotSegments(String path) {
+    if (!_mayContainDotSegments(path)) return path;
+    assert(path.isNotEmpty);  // An empty path would not have dot segments.
     List<String> output = [];
     bool appendSlash = false;
     for (String segment in path.split("/")) {
       appendSlash = false;
       if (segment == "..") {
-        if (!output.isEmpty &&
-            ((output.length != 1) || (output[0] != ""))) output.removeLast();
+        if (output.isNotEmpty) {
+          output.removeLast();
+          if (output.isEmpty) {
+            output.add("");
+          }
+        }
         appendSlash = true;
       } else if ("." == segment) {
         appendSlash = true;
@@ -1489,6 +1524,42 @@
     return output.join("/");
   }
 
+  /// Removes all `.` segments and any non-leading `..` segments.
+  ///
+  /// Removing the ".." from a "bar/foo/.." sequence results in "bar/"
+  /// (trailing "/"). If the entire path is removed (because it contains as
+  /// many ".." segments as real segments), the result is "./".
+  /// This is different from an empty string, which represents "no path",
+  /// when you resolve it against a base URI with a path with a non-empty
+  /// final segment.
+  static String _normalizeRelativePath(String path) {
+    assert(!path.startsWith('/'));  // Only get called for relative paths.
+    if (!_mayContainDotSegments(path)) return path;
+    assert(path.isNotEmpty);  // An empty path would not have dot segments.
+    List<String> output = [];
+    bool appendSlash = false;
+    for (String segment in path.split("/")) {
+      appendSlash = false;
+      if (".." == segment) {
+        if (!output.isEmpty && output.last != "..") {
+          output.removeLast();
+          appendSlash = true;
+        } else {
+          output.add("..");
+        }
+      } else if ("." == segment) {
+        appendSlash = true;
+      } else {
+        output.add(segment);
+      }
+    }
+    if (output.isEmpty || (output.length == 1 && output[0].isEmpty)) {
+      return "./";
+    }
+    if (appendSlash || output.last == '..') output.add("");
+    return output.join("/");
+  }
+
   /**
    * Resolve [reference] as an URI relative to `this`.
    *
@@ -1508,9 +1579,15 @@
    *
    * Returns the resolved URI.
    *
-   * The algorithm for resolving a reference is described in
-   * [RFC-3986 Section 5]
+   * The algorithm "Transform Reference" for resolving a reference is
+   * described in [RFC-3986 Section 5]
    * (http://tools.ietf.org/html/rfc3986#section-5 "RFC-1123").
+   *
+   * Updated to handle the case where the base URI is just a relative path -
+   * that is: when it has no scheme or authority and the path does not start
+   * with a slash.
+   * In that case, the paths are combined without removing leading "..", and
+   * an empty path is not converted to "/".
    */
   Uri resolveUri(Uri reference) {
     // From RFC 3986.
@@ -1541,6 +1618,9 @@
         targetPath = _removeDotSegments(reference.path);
         if (reference.hasQuery) targetQuery = reference.query;
       } else {
+        targetUserInfo = this._userInfo;
+        targetHost = this._host;
+        targetPort = this._port;
         if (reference.path == "") {
           targetPath = this._path;
           if (reference.hasQuery) {
@@ -1549,16 +1629,32 @@
             targetQuery = this._query;
           }
         } else {
-          if (reference.path.startsWith("/")) {
+          if (reference.hasAbsolutePath) {
             targetPath = _removeDotSegments(reference.path);
           } else {
-            targetPath = _removeDotSegments(_merge(this._path, reference.path));
+            // This is the RFC 3986 behavior for merging.
+            if (this.hasEmptyPath) {
+              if (!this.hasScheme && !this.hasAuthority) {
+                // Keep the path relative if no scheme or authority.
+                targetPath = reference.path;
+              } else {
+                // Add path normalization on top of RFC algorithm.
+                targetPath = _removeDotSegments("/" + reference.path);
+              }
+            } else {
+              var mergedPath = _mergePaths(this._path, reference.path);
+              if (this.hasScheme || this.hasAuthority || this.hasAbsolutePath) {
+                targetPath = _removeDotSegments(mergedPath);
+              } else {
+                // Non-RFC 3986 beavior. If both base and reference are relative
+                // path, allow the merged path to start with "..".
+                // The RFC only specifies the case where the base has a scheme.
+                targetPath = _normalizeRelativePath(mergedPath);
+              }
+            }
           }
           if (reference.hasQuery) targetQuery = reference.query;
         }
-        targetUserInfo = this._userInfo;
-        targetHost = this._host;
-        targetPort = this._port;
       }
     }
     String fragment = reference.hasFragment ? reference.fragment : null;
@@ -1572,6 +1668,11 @@
   }
 
   /**
+   * Returns whether the URI has a [scheme] component.
+   */
+  bool get hasScheme => scheme.isNotEmpty;
+
+  /**
    * Returns whether the URI has an [authority] component.
    */
   bool get hasAuthority => _host != null;
@@ -1597,6 +1698,16 @@
   bool get hasFragment => _fragment != null;
 
   /**
+   * Returns whether the URI has an empty path.
+   */
+  bool get hasEmptyPath => _path.isEmpty;
+
+  /**
+   * Returns whether the URI has an absolute path (starting with '/').
+   */
+  bool get hasAbsolutePath => _path.startsWith('/');
+
+  /**
    * Returns the origin of the URI in the form scheme://host:port for the
    * schemes http and https.
    *
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index ffe111f..a63c557 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -3366,6 +3366,7 @@
     return JS('bool', '# in #', propertyName, this);
   }
 
+
   @DomName('CSSStyleDeclaration.setProperty')
   void setProperty(String propertyName, String value, [String priority]) {
     return _setPropertyHelper(_browserPropertyName(propertyName),
@@ -9909,7 +9910,6 @@
     new _FrozenElementList._wrap(_querySelectorAll(selectors));
 
 
-
   String get innerHtml {
     final e = new Element.tag("div");
     e.append(this.clone(true));
@@ -12898,7 +12898,7 @@
       if (treeSanitizer is _TrustedHtmlTreeSanitizer) {
         _insertAdjacentHtml(where, html);
       } else {
-        _insertAdjacentNode(where, new DocumentFragment.html(html,
+        _insertAdjacentNode(where, createFragment(html,
             validator: validator, treeSanitizer: treeSanitizer));
       }
   }
@@ -13181,10 +13181,11 @@
     if (_parseDocument == null) {
       _parseDocument = document.implementation.createHtmlDocument('');
       _parseRange = _parseDocument.createRange();
-
-      // Workaround for Chrome bug 229142- URIs are not resolved in new doc.
-      var base = _parseDocument.createElement('base');
-      base.href = document.baseUri;
+	
+      // Workaround for Safari bug. Was also previously Chrome bug 229142
+      // - URIs are not resolved in new doc.	
+      var base = _parseDocument.createElement('base');	
+      base.href = document.baseUri;	
       _parseDocument.head.append(base);
     }
     var contextElement;
@@ -13195,7 +13196,8 @@
       _parseDocument.body.append(contextElement);
     }
     var fragment;
-    if (Range.supportsCreateContextualFragment) {
+    if (Range.supportsCreateContextualFragment &&
+        _canBeUsedToCreateContextualFragment) {
       _parseRange.selectNodeContents(contextElement);
       fragment = _parseRange.createContextualFragment(html);
     } else {
@@ -13217,6 +13219,24 @@
     return fragment;
   }
 
+  /** Test if createContextualFragment is supported for this element type */
+  bool get _canBeUsedToCreateContextualFragment =>
+      !_cannotBeUsedToCreateContextualFragment;
+
+  /** Test if createContextualFragment is NOT supported for this element type */
+  bool get _cannotBeUsedToCreateContextualFragment =>
+      _tagsForWhichCreateContextualFragmentIsNotSupported.contains(tagName);
+
+  /**
+   * A hard-coded list of the tag names for which createContextualFragment
+   * isn't supported.
+   */
+  static const _tagsForWhichCreateContextualFragmentIsNotSupported =
+      const ['HEAD', 'AREA',
+      'BASE', 'BASEFONT', 'BR', 'COL', 'COLGROUP', 'EMBED', 'FRAME', 'FRAMESET',
+      'HR', 'IMAGE', 'IMG', 'INPUT', 'ISINDEX', 'LINK', 'META', 'PARAM',
+      'SOURCE', 'STYLE', 'TITLE', 'WBR'];
+
   /**
    * Parses the HTML fragment and sets it as the contents of this element.
    *
@@ -23738,6 +23758,22 @@
     String value = nodeValue;  // Fetch DOM Node property once.
     return value == null ? super.toString() : value;
   }
+
+  /**
+   * A list of this node's children.
+   *
+   * ## Other resources
+   *
+   * * [Node.childNodes]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes)
+   * from MDN.
+   */
+  @DomName('Node.childNodes')
+  @DocsEditable()
+  @Returns('NodeList')
+  @Creates('NodeList')
+  final List<Node> childNodes;
+
   // To suppress missing implicit constructor warnings.
   factory Node._() { throw new UnsupportedError("Not supported"); }
 
@@ -23795,21 +23831,6 @@
   final String baseUri;
 
   /**
-   * A list of this node's children.
-   *
-   * ## Other resources
-   *
-   * * [Node.childNodes]
-   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes)
-   * from MDN.
-   */
-  @DomName('Node.childNodes')
-  @DocsEditable()
-  @Returns('NodeList')
-  @Creates('NodeList')
-  final List<Node> childNodes;
-
-  /**
    * The first child of this node.
    *
    * ## Other resources
@@ -39448,17 +39469,17 @@
 }
 
 class _SimpleNodeValidator implements NodeValidator {
-  final Set<String> allowedElements;
-  final Set<String> allowedAttributes;
-  final Set<String> allowedUriAttributes;
+  final Set<String> allowedElements = new Set<String>();
+  final Set<String> allowedAttributes = new Set<String>();
+  final Set<String> allowedUriAttributes = new Set<String>();
   final UriPolicy uriPolicy;
 
   factory _SimpleNodeValidator.allowNavigation(UriPolicy uriPolicy) {
     return new _SimpleNodeValidator(uriPolicy,
-      allowedElements: [
+      allowedElements: const [
         'A',
         'FORM'],
-      allowedAttributes: [
+      allowedAttributes: const [
         'A::accesskey',
         'A::coords',
         'A::hreflang',
@@ -39475,7 +39496,7 @@
         'FORM::novalidate',
         'FORM::target',
       ],
-      allowedUriAttributes: [
+      allowedUriAttributes: const [
         'A::href',
         'FORM::action',
       ]);
@@ -39483,10 +39504,10 @@
 
   factory _SimpleNodeValidator.allowImages(UriPolicy uriPolicy) {
     return new _SimpleNodeValidator(uriPolicy,
-      allowedElements: [
+      allowedElements: const [
         'IMG'
       ],
-      allowedAttributes: [
+      allowedAttributes: const [
         'IMG::align',
         'IMG::alt',
         'IMG::border',
@@ -39498,14 +39519,14 @@
         'IMG::vspace',
         'IMG::width',
       ],
-      allowedUriAttributes: [
+      allowedUriAttributes: const [
         'IMG::src',
       ]);
   }
 
   factory _SimpleNodeValidator.allowTextElements() {
     return new _SimpleNodeValidator(null,
-      allowedElements: [
+      allowedElements: const [
         'B',
         'BLOCKQUOTE',
         'BR',
@@ -39533,13 +39554,18 @@
    */
   _SimpleNodeValidator(this.uriPolicy,
       {Iterable<String> allowedElements, Iterable<String> allowedAttributes,
-      Iterable<String> allowedUriAttributes}):
-      this.allowedElements = allowedElements != null ?
-          new Set.from(allowedElements) : new Set(),
-      this.allowedAttributes = allowedAttributes != null ?
-          new Set.from(allowedAttributes) : new Set(),
-      this.allowedUriAttributes = allowedUriAttributes != null ?
-          new Set.from(allowedUriAttributes) : new Set();
+        Iterable<String> allowedUriAttributes}) {
+    this.allowedElements.addAll(allowedElements ?? const []);
+    allowedAttributes = allowedAttributes ?? const [];
+    allowedUriAttributes = allowedUriAttributes ?? const [];
+    var legalAttributes = allowedAttributes.where(
+        (x) => !_Html5NodeValidator._uriAttributes.contains(x));
+    var extraUriAttributes = allowedAttributes.where(
+        (x) => _Html5NodeValidator._uriAttributes.contains(x));
+    this.allowedAttributes.addAll(legalAttributes);
+    this.allowedUriAttributes.addAll(allowedUriAttributes);
+    this.allowedUriAttributes.addAll(extraUriAttributes);
+  }
 
   bool allowsElement(Element element) {
     return allowedElements.contains(element.tagName);
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 9e07f31..218dc51 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -30,6 +30,7 @@
 import 'dart:html_common';
 import 'dart:indexed_db';
 import 'dart:indexed_db' show indexed_dbBlinkMap;
+import 'dart:indexed_db' show indexed_dbBlinkFunctionMap;
 import 'dart:isolate';
 import 'dart:js' as js;
 import "dart:convert";
@@ -39,13 +40,16 @@
 import 'dart:typed_data';
 import 'dart:web_gl' as gl;
 import 'dart:web_gl' show web_glBlinkMap;
+import 'dart:web_gl' show web_glBlinkFunctionMap;
 import 'dart:web_sql';
 import 'dart:svg' as svg;
 import 'dart:svg' show svgBlinkMap;
+import 'dart:svg' show svgBlinkFunctionMap;
 import 'dart:svg' show Matrix;
 import 'dart:svg' show SvgSvgElement;
 import 'dart:web_audio' as web_audio;
 import 'dart:web_audio' show web_audioBlinkMap;
+import 'dart:web_audio' show web_audioBlinkFunctionMap;
 import 'dart:_blink' as _blink;
 // 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
@@ -614,6 +618,12 @@
   }
   return null;
 }
+
+
+unwrap_jso(dartClass_instance) => dartClass_instance;
+wrap_jso(jsObject) => jsObject;
+wrap_jso_list(jso_nodes) => jso_nodes;
+make_dart_rectangle(r) => r;
 // 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.
@@ -669,148 +679,148 @@
 
   @DomName('HTMLAnchorElement.download')
   @DocsEditable()
-  String get download => _blink.BlinkHTMLAnchorElement.instance.download_Getter_(this);
-
+  String get download => _blink.BlinkHTMLAnchorElement.instance.download_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAnchorElement.download')
   @DocsEditable()
-  void set download(String value) => _blink.BlinkHTMLAnchorElement.instance.download_Setter_(this, value);
-
+  void set download(String value) => _blink.BlinkHTMLAnchorElement.instance.download_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAnchorElement.hreflang')
   @DocsEditable()
-  String get hreflang => _blink.BlinkHTMLAnchorElement.instance.hreflang_Getter_(this);
-
+  String get hreflang => _blink.BlinkHTMLAnchorElement.instance.hreflang_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAnchorElement.hreflang')
   @DocsEditable()
-  void set hreflang(String value) => _blink.BlinkHTMLAnchorElement.instance.hreflang_Setter_(this, value);
-
+  void set hreflang(String value) => _blink.BlinkHTMLAnchorElement.instance.hreflang_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAnchorElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  String get integrity => _blink.BlinkHTMLAnchorElement.instance.integrity_Getter_(this);
-
+  String get integrity => _blink.BlinkHTMLAnchorElement.instance.integrity_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAnchorElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLAnchorElement.instance.integrity_Setter_(this, value);
-
+  void set integrity(String value) => _blink.BlinkHTMLAnchorElement.instance.integrity_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAnchorElement.rel')
   @DocsEditable()
-  String get rel => _blink.BlinkHTMLAnchorElement.instance.rel_Getter_(this);
-
+  String get rel => _blink.BlinkHTMLAnchorElement.instance.rel_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAnchorElement.rel')
   @DocsEditable()
-  void set rel(String value) => _blink.BlinkHTMLAnchorElement.instance.rel_Setter_(this, value);
-
+  void set rel(String value) => _blink.BlinkHTMLAnchorElement.instance.rel_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAnchorElement.target')
   @DocsEditable()
-  String get target => _blink.BlinkHTMLAnchorElement.instance.target_Getter_(this);
-
+  String get target => _blink.BlinkHTMLAnchorElement.instance.target_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAnchorElement.target')
   @DocsEditable()
-  void set target(String value) => _blink.BlinkHTMLAnchorElement.instance.target_Setter_(this, value);
-
+  void set target(String value) => _blink.BlinkHTMLAnchorElement.instance.target_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAnchorElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLAnchorElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkHTMLAnchorElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAnchorElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLAnchorElement.instance.type_Setter_(this, value);
-
+  void set type(String value) => _blink.BlinkHTMLAnchorElement.instance.type_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAnchorElement.hash')
   @DocsEditable()
-  String get hash => _blink.BlinkHTMLAnchorElement.instance.hash_Getter_(this);
-
+  String get hash => _blink.BlinkHTMLAnchorElement.instance.hash_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAnchorElement.hash')
   @DocsEditable()
-  void set hash(String value) => _blink.BlinkHTMLAnchorElement.instance.hash_Setter_(this, value);
-
+  void set hash(String value) => _blink.BlinkHTMLAnchorElement.instance.hash_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAnchorElement.host')
   @DocsEditable()
-  String get host => _blink.BlinkHTMLAnchorElement.instance.host_Getter_(this);
-
+  String get host => _blink.BlinkHTMLAnchorElement.instance.host_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAnchorElement.host')
   @DocsEditable()
-  void set host(String value) => _blink.BlinkHTMLAnchorElement.instance.host_Setter_(this, value);
-
+  void set host(String value) => _blink.BlinkHTMLAnchorElement.instance.host_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAnchorElement.hostname')
   @DocsEditable()
-  String get hostname => _blink.BlinkHTMLAnchorElement.instance.hostname_Getter_(this);
-
+  String get hostname => _blink.BlinkHTMLAnchorElement.instance.hostname_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAnchorElement.hostname')
   @DocsEditable()
-  void set hostname(String value) => _blink.BlinkHTMLAnchorElement.instance.hostname_Setter_(this, value);
-
+  void set hostname(String value) => _blink.BlinkHTMLAnchorElement.instance.hostname_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAnchorElement.href')
   @DocsEditable()
-  String get href => _blink.BlinkHTMLAnchorElement.instance.href_Getter_(this);
-
+  String get href => _blink.BlinkHTMLAnchorElement.instance.href_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAnchorElement.href')
   @DocsEditable()
-  void set href(String value) => _blink.BlinkHTMLAnchorElement.instance.href_Setter_(this, value);
-
+  void set href(String value) => _blink.BlinkHTMLAnchorElement.instance.href_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAnchorElement.origin')
   @DocsEditable()
   // WebKit only
   @Experimental() // non-standard
-  String get origin => _blink.BlinkHTMLAnchorElement.instance.origin_Getter_(this);
-
+  String get origin => _blink.BlinkHTMLAnchorElement.instance.origin_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAnchorElement.password')
   @DocsEditable()
   @Experimental() // untriaged
-  String get password => _blink.BlinkHTMLAnchorElement.instance.password_Getter_(this);
-
+  String get password => _blink.BlinkHTMLAnchorElement.instance.password_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAnchorElement.password')
   @DocsEditable()
   @Experimental() // untriaged
-  void set password(String value) => _blink.BlinkHTMLAnchorElement.instance.password_Setter_(this, value);
-
+  void set password(String value) => _blink.BlinkHTMLAnchorElement.instance.password_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAnchorElement.pathname')
   @DocsEditable()
-  String get pathname => _blink.BlinkHTMLAnchorElement.instance.pathname_Getter_(this);
-
+  String get pathname => _blink.BlinkHTMLAnchorElement.instance.pathname_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAnchorElement.pathname')
   @DocsEditable()
-  void set pathname(String value) => _blink.BlinkHTMLAnchorElement.instance.pathname_Setter_(this, value);
-
+  void set pathname(String value) => _blink.BlinkHTMLAnchorElement.instance.pathname_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAnchorElement.port')
   @DocsEditable()
-  String get port => _blink.BlinkHTMLAnchorElement.instance.port_Getter_(this);
-
+  String get port => _blink.BlinkHTMLAnchorElement.instance.port_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAnchorElement.port')
   @DocsEditable()
-  void set port(String value) => _blink.BlinkHTMLAnchorElement.instance.port_Setter_(this, value);
-
+  void set port(String value) => _blink.BlinkHTMLAnchorElement.instance.port_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAnchorElement.protocol')
   @DocsEditable()
-  String get protocol => _blink.BlinkHTMLAnchorElement.instance.protocol_Getter_(this);
-
+  String get protocol => _blink.BlinkHTMLAnchorElement.instance.protocol_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAnchorElement.protocol')
   @DocsEditable()
-  void set protocol(String value) => _blink.BlinkHTMLAnchorElement.instance.protocol_Setter_(this, value);
-
+  void set protocol(String value) => _blink.BlinkHTMLAnchorElement.instance.protocol_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAnchorElement.search')
   @DocsEditable()
-  String get search => _blink.BlinkHTMLAnchorElement.instance.search_Getter_(this);
-
+  String get search => _blink.BlinkHTMLAnchorElement.instance.search_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAnchorElement.search')
   @DocsEditable()
-  void set search(String value) => _blink.BlinkHTMLAnchorElement.instance.search_Setter_(this, value);
-
+  void set search(String value) => _blink.BlinkHTMLAnchorElement.instance.search_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAnchorElement.username')
   @DocsEditable()
   @Experimental() // untriaged
-  String get username => _blink.BlinkHTMLAnchorElement.instance.username_Getter_(this);
-
+  String get username => _blink.BlinkHTMLAnchorElement.instance.username_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAnchorElement.username')
   @DocsEditable()
   @Experimental() // untriaged
-  void set username(String value) => _blink.BlinkHTMLAnchorElement.instance.username_Setter_(this, value);
-
+  void set username(String value) => _blink.BlinkHTMLAnchorElement.instance.username_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAnchorElement.toString')
   @DocsEditable()
-  String toString() => _blink.BlinkHTMLAnchorElement.instance.toString_Callback_0_(this);
-
+  String toString() => _blink.BlinkHTMLAnchorElement.instance.toString_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -875,12 +885,12 @@
 
   @DomName('WebKitAnimationEvent.animationName')
   @DocsEditable()
-  String get animationName => _blink.BlinkWebKitAnimationEvent.instance.animationName_Getter_(this);
-
+  String get animationName => _blink.BlinkWebKitAnimationEvent.instance.animationName_Getter_(unwrap_jso(this));
+  
   @DomName('WebKitAnimationEvent.elapsedTime')
   @DocsEditable()
-  double get elapsedTime => _blink.BlinkWebKitAnimationEvent.instance.elapsedTime_Getter_(this);
-
+  double get elapsedTime => _blink.BlinkWebKitAnimationEvent.instance.elapsedTime_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -899,43 +909,43 @@
   @DomName('AnimationNode.activeDuration')
   @DocsEditable()
   @Experimental() // untriaged
-  double get activeDuration => _blink.BlinkAnimationNode.instance.activeDuration_Getter_(this);
-
+  double get activeDuration => _blink.BlinkAnimationNode.instance.activeDuration_Getter_(unwrap_jso(this));
+  
   @DomName('AnimationNode.currentIteration')
   @DocsEditable()
   @Experimental() // untriaged
-  int get currentIteration => _blink.BlinkAnimationNode.instance.currentIteration_Getter_(this);
-
+  int get currentIteration => _blink.BlinkAnimationNode.instance.currentIteration_Getter_(unwrap_jso(this));
+  
   @DomName('AnimationNode.duration')
   @DocsEditable()
   @Experimental() // untriaged
-  double get duration => _blink.BlinkAnimationNode.instance.duration_Getter_(this);
-
+  double get duration => _blink.BlinkAnimationNode.instance.duration_Getter_(unwrap_jso(this));
+  
   @DomName('AnimationNode.endTime')
   @DocsEditable()
   @Experimental() // untriaged
-  double get endTime => _blink.BlinkAnimationNode.instance.endTime_Getter_(this);
-
+  double get endTime => _blink.BlinkAnimationNode.instance.endTime_Getter_(unwrap_jso(this));
+  
   @DomName('AnimationNode.localTime')
   @DocsEditable()
   @Experimental() // untriaged
-  double get localTime => _blink.BlinkAnimationNode.instance.localTime_Getter_(this);
-
+  double get localTime => _blink.BlinkAnimationNode.instance.localTime_Getter_(unwrap_jso(this));
+  
   @DomName('AnimationNode.player')
   @DocsEditable()
   @Experimental() // untriaged
-  AnimationPlayer get player => _blink.BlinkAnimationNode.instance.player_Getter_(this);
-
+  AnimationPlayer get player => wrap_jso(_blink.BlinkAnimationNode.instance.player_Getter_(unwrap_jso(this)));
+  
   @DomName('AnimationNode.startTime')
   @DocsEditable()
   @Experimental() // untriaged
-  double get startTime => _blink.BlinkAnimationNode.instance.startTime_Getter_(this);
-
+  double get startTime => _blink.BlinkAnimationNode.instance.startTime_Getter_(unwrap_jso(this));
+  
   @DomName('AnimationNode.timing')
   @DocsEditable()
   @Experimental() // untriaged
-  Timing get timing => _blink.BlinkAnimationNode.instance.timing_Getter_(this);
-
+  Timing get timing => wrap_jso(_blink.BlinkAnimationNode.instance.timing_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -957,73 +967,73 @@
   @DomName('AnimationPlayer.currentTime')
   @DocsEditable()
   @Experimental() // untriaged
-  num get currentTime => _blink.BlinkAnimationPlayer.instance.currentTime_Getter_(this);
-
+  num get currentTime => _blink.BlinkAnimationPlayer.instance.currentTime_Getter_(unwrap_jso(this));
+  
   @DomName('AnimationPlayer.currentTime')
   @DocsEditable()
   @Experimental() // untriaged
-  void set currentTime(num value) => _blink.BlinkAnimationPlayer.instance.currentTime_Setter_(this, value);
-
+  void set currentTime(num value) => _blink.BlinkAnimationPlayer.instance.currentTime_Setter_(unwrap_jso(this), value);
+  
   @DomName('AnimationPlayer.playState')
   @DocsEditable()
   @Experimental() // untriaged
-  String get playState => _blink.BlinkAnimationPlayer.instance.playState_Getter_(this);
-
+  String get playState => _blink.BlinkAnimationPlayer.instance.playState_Getter_(unwrap_jso(this));
+  
   @DomName('AnimationPlayer.playbackRate')
   @DocsEditable()
   @Experimental() // untriaged
-  num get playbackRate => _blink.BlinkAnimationPlayer.instance.playbackRate_Getter_(this);
-
+  num get playbackRate => _blink.BlinkAnimationPlayer.instance.playbackRate_Getter_(unwrap_jso(this));
+  
   @DomName('AnimationPlayer.playbackRate')
   @DocsEditable()
   @Experimental() // untriaged
-  void set playbackRate(num value) => _blink.BlinkAnimationPlayer.instance.playbackRate_Setter_(this, value);
-
+  void set playbackRate(num value) => _blink.BlinkAnimationPlayer.instance.playbackRate_Setter_(unwrap_jso(this), value);
+  
   @DomName('AnimationPlayer.source')
   @DocsEditable()
   @Experimental() // untriaged
-  AnimationNode get source => _blink.BlinkAnimationPlayer.instance.source_Getter_(this);
-
+  AnimationNode get source => wrap_jso(_blink.BlinkAnimationPlayer.instance.source_Getter_(unwrap_jso(this)));
+  
   @DomName('AnimationPlayer.source')
   @DocsEditable()
   @Experimental() // untriaged
-  void set source(AnimationNode value) => _blink.BlinkAnimationPlayer.instance.source_Setter_(this, value);
-
+  void set source(AnimationNode value) => _blink.BlinkAnimationPlayer.instance.source_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('AnimationPlayer.startTime')
   @DocsEditable()
   @Experimental() // untriaged
-  num get startTime => _blink.BlinkAnimationPlayer.instance.startTime_Getter_(this);
-
+  num get startTime => _blink.BlinkAnimationPlayer.instance.startTime_Getter_(unwrap_jso(this));
+  
   @DomName('AnimationPlayer.startTime')
   @DocsEditable()
   @Experimental() // untriaged
-  void set startTime(num value) => _blink.BlinkAnimationPlayer.instance.startTime_Setter_(this, value);
-
+  void set startTime(num value) => _blink.BlinkAnimationPlayer.instance.startTime_Setter_(unwrap_jso(this), value);
+  
   @DomName('AnimationPlayer.cancel')
   @DocsEditable()
   @Experimental() // untriaged
-  void cancel() => _blink.BlinkAnimationPlayer.instance.cancel_Callback_0_(this);
-
+  void cancel() => _blink.BlinkAnimationPlayer.instance.cancel_Callback_0_(unwrap_jso(this));
+  
   @DomName('AnimationPlayer.finish')
   @DocsEditable()
   @Experimental() // untriaged
-  void finish() => _blink.BlinkAnimationPlayer.instance.finish_Callback_0_(this);
-
+  void finish() => _blink.BlinkAnimationPlayer.instance.finish_Callback_0_(unwrap_jso(this));
+  
   @DomName('AnimationPlayer.pause')
   @DocsEditable()
   @Experimental() // untriaged
-  void pause() => _blink.BlinkAnimationPlayer.instance.pause_Callback_0_(this);
-
+  void pause() => _blink.BlinkAnimationPlayer.instance.pause_Callback_0_(unwrap_jso(this));
+  
   @DomName('AnimationPlayer.play')
   @DocsEditable()
   @Experimental() // untriaged
-  void play() => _blink.BlinkAnimationPlayer.instance.play_Callback_0_(this);
-
+  void play() => _blink.BlinkAnimationPlayer.instance.play_Callback_0_(unwrap_jso(this));
+  
   @DomName('AnimationPlayer.reverse')
   @DocsEditable()
   @Experimental() // untriaged
-  void reverse() => _blink.BlinkAnimationPlayer.instance.reverse_Callback_0_(this);
-
+  void reverse() => _blink.BlinkAnimationPlayer.instance.reverse_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -1042,13 +1052,13 @@
   @DomName('AnimationPlayerEvent.currentTime')
   @DocsEditable()
   @Experimental() // untriaged
-  double get currentTime => _blink.BlinkAnimationPlayerEvent.instance.currentTime_Getter_(this);
-
+  double get currentTime => _blink.BlinkAnimationPlayerEvent.instance.currentTime_Getter_(unwrap_jso(this));
+  
   @DomName('AnimationPlayerEvent.timelineTime')
   @DocsEditable()
   @Experimental() // untriaged
-  double get timelineTime => _blink.BlinkAnimationPlayerEvent.instance.timelineTime_Getter_(this);
-
+  double get timelineTime => _blink.BlinkAnimationPlayerEvent.instance.timelineTime_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -1067,18 +1077,18 @@
   @DomName('AnimationTimeline.currentTime')
   @DocsEditable()
   @Experimental() // untriaged
-  double get currentTime => _blink.BlinkAnimationTimeline.instance.currentTime_Getter_(this);
-
+  double get currentTime => _blink.BlinkAnimationTimeline.instance.currentTime_Getter_(unwrap_jso(this));
+  
   @DomName('AnimationTimeline.getAnimationPlayers')
   @DocsEditable()
   @Experimental() // untriaged
-  List<AnimationPlayer> getAnimationPlayers() => _blink.BlinkAnimationTimeline.instance.getAnimationPlayers_Callback_0_(this);
-
+  List<AnimationPlayer> getAnimationPlayers() => _blink.BlinkAnimationTimeline.instance.getAnimationPlayers_Callback_0_(unwrap_jso(this));
+  
   @DomName('AnimationTimeline.play')
   @DocsEditable()
   @Experimental() // untriaged
-  AnimationPlayer play(AnimationNode source) => _blink.BlinkAnimationTimeline.instance.play_Callback_1_(this, source);
-
+  AnimationPlayer play(AnimationNode source) => wrap_jso(_blink.BlinkAnimationTimeline.instance.play_Callback_1_(unwrap_jso(this), unwrap_jso(source)));
+  
 }
 // 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
@@ -1211,20 +1221,20 @@
 
   @DomName('ApplicationCache.status')
   @DocsEditable()
-  int get status => _blink.BlinkApplicationCache.instance.status_Getter_(this);
-
+  int get status => _blink.BlinkApplicationCache.instance.status_Getter_(unwrap_jso(this));
+  
   @DomName('ApplicationCache.abort')
   @DocsEditable()
-  void abort() => _blink.BlinkApplicationCache.instance.abort_Callback_0_(this);
-
+  void abort() => _blink.BlinkApplicationCache.instance.abort_Callback_0_(unwrap_jso(this));
+  
   @DomName('ApplicationCache.swapCache')
   @DocsEditable()
-  void swapCache() => _blink.BlinkApplicationCache.instance.swapCache_Callback_0_(this);
-
+  void swapCache() => _blink.BlinkApplicationCache.instance.swapCache_Callback_0_(unwrap_jso(this));
+  
   @DomName('ApplicationCache.update')
   @DocsEditable()
-  void update() => _blink.BlinkApplicationCache.instance.update_Callback_0_(this);
-
+  void update() => _blink.BlinkApplicationCache.instance.update_Callback_0_(unwrap_jso(this));
+  
   /// Stream of `cached` events handled by this [ApplicationCache].
   @DomName('ApplicationCache.oncached')
   @DocsEditable()
@@ -1283,23 +1293,23 @@
   @DomName('ApplicationCacheErrorEvent.message')
   @DocsEditable()
   @Experimental() // untriaged
-  String get message => _blink.BlinkApplicationCacheErrorEvent.instance.message_Getter_(this);
-
+  String get message => _blink.BlinkApplicationCacheErrorEvent.instance.message_Getter_(unwrap_jso(this));
+  
   @DomName('ApplicationCacheErrorEvent.reason')
   @DocsEditable()
   @Experimental() // untriaged
-  String get reason => _blink.BlinkApplicationCacheErrorEvent.instance.reason_Getter_(this);
-
+  String get reason => _blink.BlinkApplicationCacheErrorEvent.instance.reason_Getter_(unwrap_jso(this));
+  
   @DomName('ApplicationCacheErrorEvent.status')
   @DocsEditable()
   @Experimental() // untriaged
-  int get status => _blink.BlinkApplicationCacheErrorEvent.instance.status_Getter_(this);
-
+  int get status => _blink.BlinkApplicationCacheErrorEvent.instance.status_Getter_(unwrap_jso(this));
+  
   @DomName('ApplicationCacheErrorEvent.url')
   @DocsEditable()
   @Experimental() // untriaged
-  String get url => _blink.BlinkApplicationCacheErrorEvent.instance.url_Getter_(this);
-
+  String get url => _blink.BlinkApplicationCacheErrorEvent.instance.url_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -1336,130 +1346,130 @@
 
   @DomName('HTMLAreaElement.alt')
   @DocsEditable()
-  String get alt => _blink.BlinkHTMLAreaElement.instance.alt_Getter_(this);
-
+  String get alt => _blink.BlinkHTMLAreaElement.instance.alt_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAreaElement.alt')
   @DocsEditable()
-  void set alt(String value) => _blink.BlinkHTMLAreaElement.instance.alt_Setter_(this, value);
-
+  void set alt(String value) => _blink.BlinkHTMLAreaElement.instance.alt_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAreaElement.coords')
   @DocsEditable()
-  String get coords => _blink.BlinkHTMLAreaElement.instance.coords_Getter_(this);
-
+  String get coords => _blink.BlinkHTMLAreaElement.instance.coords_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAreaElement.coords')
   @DocsEditable()
-  void set coords(String value) => _blink.BlinkHTMLAreaElement.instance.coords_Setter_(this, value);
-
+  void set coords(String value) => _blink.BlinkHTMLAreaElement.instance.coords_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAreaElement.shape')
   @DocsEditable()
-  String get shape => _blink.BlinkHTMLAreaElement.instance.shape_Getter_(this);
-
+  String get shape => _blink.BlinkHTMLAreaElement.instance.shape_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAreaElement.shape')
   @DocsEditable()
-  void set shape(String value) => _blink.BlinkHTMLAreaElement.instance.shape_Setter_(this, value);
-
+  void set shape(String value) => _blink.BlinkHTMLAreaElement.instance.shape_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAreaElement.target')
   @DocsEditable()
-  String get target => _blink.BlinkHTMLAreaElement.instance.target_Getter_(this);
-
+  String get target => _blink.BlinkHTMLAreaElement.instance.target_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAreaElement.target')
   @DocsEditable()
-  void set target(String value) => _blink.BlinkHTMLAreaElement.instance.target_Setter_(this, value);
-
+  void set target(String value) => _blink.BlinkHTMLAreaElement.instance.target_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAreaElement.hash')
   @DocsEditable()
-  String get hash => _blink.BlinkHTMLAreaElement.instance.hash_Getter_(this);
-
+  String get hash => _blink.BlinkHTMLAreaElement.instance.hash_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAreaElement.hash')
   @DocsEditable()
-  void set hash(String value) => _blink.BlinkHTMLAreaElement.instance.hash_Setter_(this, value);
-
+  void set hash(String value) => _blink.BlinkHTMLAreaElement.instance.hash_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAreaElement.host')
   @DocsEditable()
-  String get host => _blink.BlinkHTMLAreaElement.instance.host_Getter_(this);
-
+  String get host => _blink.BlinkHTMLAreaElement.instance.host_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAreaElement.host')
   @DocsEditable()
-  void set host(String value) => _blink.BlinkHTMLAreaElement.instance.host_Setter_(this, value);
-
+  void set host(String value) => _blink.BlinkHTMLAreaElement.instance.host_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAreaElement.hostname')
   @DocsEditable()
-  String get hostname => _blink.BlinkHTMLAreaElement.instance.hostname_Getter_(this);
-
+  String get hostname => _blink.BlinkHTMLAreaElement.instance.hostname_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAreaElement.hostname')
   @DocsEditable()
-  void set hostname(String value) => _blink.BlinkHTMLAreaElement.instance.hostname_Setter_(this, value);
-
+  void set hostname(String value) => _blink.BlinkHTMLAreaElement.instance.hostname_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAreaElement.href')
   @DocsEditable()
-  String get href => _blink.BlinkHTMLAreaElement.instance.href_Getter_(this);
-
+  String get href => _blink.BlinkHTMLAreaElement.instance.href_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAreaElement.href')
   @DocsEditable()
-  void set href(String value) => _blink.BlinkHTMLAreaElement.instance.href_Setter_(this, value);
-
+  void set href(String value) => _blink.BlinkHTMLAreaElement.instance.href_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAreaElement.origin')
   @DocsEditable()
   @Experimental() // untriaged
-  String get origin => _blink.BlinkHTMLAreaElement.instance.origin_Getter_(this);
-
+  String get origin => _blink.BlinkHTMLAreaElement.instance.origin_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAreaElement.password')
   @DocsEditable()
   @Experimental() // untriaged
-  String get password => _blink.BlinkHTMLAreaElement.instance.password_Getter_(this);
-
+  String get password => _blink.BlinkHTMLAreaElement.instance.password_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAreaElement.password')
   @DocsEditable()
   @Experimental() // untriaged
-  void set password(String value) => _blink.BlinkHTMLAreaElement.instance.password_Setter_(this, value);
-
+  void set password(String value) => _blink.BlinkHTMLAreaElement.instance.password_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAreaElement.pathname')
   @DocsEditable()
-  String get pathname => _blink.BlinkHTMLAreaElement.instance.pathname_Getter_(this);
-
+  String get pathname => _blink.BlinkHTMLAreaElement.instance.pathname_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAreaElement.pathname')
   @DocsEditable()
-  void set pathname(String value) => _blink.BlinkHTMLAreaElement.instance.pathname_Setter_(this, value);
-
+  void set pathname(String value) => _blink.BlinkHTMLAreaElement.instance.pathname_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAreaElement.port')
   @DocsEditable()
-  String get port => _blink.BlinkHTMLAreaElement.instance.port_Getter_(this);
-
+  String get port => _blink.BlinkHTMLAreaElement.instance.port_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAreaElement.port')
   @DocsEditable()
-  void set port(String value) => _blink.BlinkHTMLAreaElement.instance.port_Setter_(this, value);
-
+  void set port(String value) => _blink.BlinkHTMLAreaElement.instance.port_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAreaElement.protocol')
   @DocsEditable()
-  String get protocol => _blink.BlinkHTMLAreaElement.instance.protocol_Getter_(this);
-
+  String get protocol => _blink.BlinkHTMLAreaElement.instance.protocol_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAreaElement.protocol')
   @DocsEditable()
-  void set protocol(String value) => _blink.BlinkHTMLAreaElement.instance.protocol_Setter_(this, value);
-
+  void set protocol(String value) => _blink.BlinkHTMLAreaElement.instance.protocol_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAreaElement.search')
   @DocsEditable()
-  String get search => _blink.BlinkHTMLAreaElement.instance.search_Getter_(this);
-
+  String get search => _blink.BlinkHTMLAreaElement.instance.search_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAreaElement.search')
   @DocsEditable()
-  void set search(String value) => _blink.BlinkHTMLAreaElement.instance.search_Setter_(this, value);
-
+  void set search(String value) => _blink.BlinkHTMLAreaElement.instance.search_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAreaElement.username')
   @DocsEditable()
   @Experimental() // untriaged
-  String get username => _blink.BlinkHTMLAreaElement.instance.username_Getter_(this);
-
+  String get username => _blink.BlinkHTMLAreaElement.instance.username_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLAreaElement.username')
   @DocsEditable()
   @Experimental() // untriaged
-  void set username(String value) => _blink.BlinkHTMLAreaElement.instance.username_Setter_(this, value);
-
+  void set username(String value) => _blink.BlinkHTMLAreaElement.instance.username_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLAreaElement.toString')
   @DocsEditable()
   @Experimental() // untriaged
-  String toString() => _blink.BlinkHTMLAreaElement.instance.toString_Callback_0_(this);
-
+  String toString() => _blink.BlinkHTMLAreaElement.instance.toString_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -1504,33 +1514,33 @@
   @DomName('AudioTrack.enabled')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get enabled => _blink.BlinkAudioTrack.instance.enabled_Getter_(this);
-
+  bool get enabled => _blink.BlinkAudioTrack.instance.enabled_Getter_(unwrap_jso(this));
+  
   @DomName('AudioTrack.enabled')
   @DocsEditable()
   @Experimental() // untriaged
-  void set enabled(bool value) => _blink.BlinkAudioTrack.instance.enabled_Setter_(this, value);
-
+  void set enabled(bool value) => _blink.BlinkAudioTrack.instance.enabled_Setter_(unwrap_jso(this), value);
+  
   @DomName('AudioTrack.id')
   @DocsEditable()
   @Experimental() // untriaged
-  String get id => _blink.BlinkAudioTrack.instance.id_Getter_(this);
-
+  String get id => _blink.BlinkAudioTrack.instance.id_Getter_(unwrap_jso(this));
+  
   @DomName('AudioTrack.kind')
   @DocsEditable()
   @Experimental() // untriaged
-  String get kind => _blink.BlinkAudioTrack.instance.kind_Getter_(this);
-
+  String get kind => _blink.BlinkAudioTrack.instance.kind_Getter_(unwrap_jso(this));
+  
   @DomName('AudioTrack.label')
   @DocsEditable()
   @Experimental() // untriaged
-  String get label => _blink.BlinkAudioTrack.instance.label_Getter_(this);
-
+  String get label => _blink.BlinkAudioTrack.instance.label_Getter_(unwrap_jso(this));
+  
   @DomName('AudioTrack.language')
   @DocsEditable()
   @Experimental() // untriaged
-  String get language => _blink.BlinkAudioTrack.instance.language_Getter_(this);
-
+  String get language => _blink.BlinkAudioTrack.instance.language_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -1554,18 +1564,18 @@
   @DomName('AudioTrackList.length')
   @DocsEditable()
   @Experimental() // untriaged
-  int get length => _blink.BlinkAudioTrackList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkAudioTrackList.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('AudioTrackList.__getter__')
   @DocsEditable()
   @Experimental() // untriaged
-  AudioTrack __getter__(int index) => _blink.BlinkAudioTrackList.instance.$__getter___Callback_1_(this, index);
-
+  AudioTrack __getter__(int index) => wrap_jso(_blink.BlinkAudioTrackList.instance.$__getter___Callback_1_(unwrap_jso(this), index));
+  
   @DomName('AudioTrackList.getTrackById')
   @DocsEditable()
   @Experimental() // untriaged
-  AudioTrack getTrackById(String id) => _blink.BlinkAudioTrackList.instance.getTrackById_Callback_1_(this, id);
-
+  AudioTrack getTrackById(String id) => wrap_jso(_blink.BlinkAudioTrackList.instance.getTrackById_Callback_1_(unwrap_jso(this), id));
+  
   @DomName('AudioTrackList.onchange')
   @DocsEditable()
   @Experimental() // untriaged
@@ -1589,8 +1599,8 @@
 
   @DomName('AutocompleteErrorEvent.reason')
   @DocsEditable()
-  String get reason => _blink.BlinkAutocompleteErrorEvent.instance.reason_Getter_(this);
-
+  String get reason => _blink.BlinkAutocompleteErrorEvent.instance.reason_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -1633,8 +1643,8 @@
 
   @DomName('BarProp.visible')
   @DocsEditable()
-  bool get visible => _blink.BlinkBarProp.instance.visible_Getter_(this);
-
+  bool get visible => _blink.BlinkBarProp.instance.visible_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -1661,20 +1671,20 @@
 
   @DomName('HTMLBaseElement.href')
   @DocsEditable()
-  String get href => _blink.BlinkHTMLBaseElement.instance.href_Getter_(this);
-
+  String get href => _blink.BlinkHTMLBaseElement.instance.href_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLBaseElement.href')
   @DocsEditable()
-  void set href(String value) => _blink.BlinkHTMLBaseElement.instance.href_Setter_(this, value);
-
+  void set href(String value) => _blink.BlinkHTMLBaseElement.instance.href_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLBaseElement.target')
   @DocsEditable()
-  String get target => _blink.BlinkHTMLBaseElement.instance.target_Getter_(this);
-
+  String get target => _blink.BlinkHTMLBaseElement.instance.target_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLBaseElement.target')
   @DocsEditable()
-  void set target(String value) => _blink.BlinkHTMLBaseElement.instance.target_Setter_(this, value);
-
+  void set target(String value) => _blink.BlinkHTMLBaseElement.instance.target_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -1693,20 +1703,20 @@
 
   @DomName('BatteryManager.charging')
   @DocsEditable()
-  bool get charging => _blink.BlinkBatteryManager.instance.charging_Getter_(this);
-
+  bool get charging => _blink.BlinkBatteryManager.instance.charging_Getter_(unwrap_jso(this));
+  
   @DomName('BatteryManager.chargingTime')
   @DocsEditable()
-  double get chargingTime => _blink.BlinkBatteryManager.instance.chargingTime_Getter_(this);
-
+  double get chargingTime => _blink.BlinkBatteryManager.instance.chargingTime_Getter_(unwrap_jso(this));
+  
   @DomName('BatteryManager.dischargingTime')
   @DocsEditable()
-  double get dischargingTime => _blink.BlinkBatteryManager.instance.dischargingTime_Getter_(this);
-
+  double get dischargingTime => _blink.BlinkBatteryManager.instance.dischargingTime_Getter_(unwrap_jso(this));
+  
   @DomName('BatteryManager.level')
   @DocsEditable()
-  double get level => _blink.BlinkBatteryManager.instance.level_Getter_(this);
-
+  double get level => _blink.BlinkBatteryManager.instance.level_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -1723,12 +1733,12 @@
 
   @DomName('BeforeUnloadEvent.returnValue')
   @DocsEditable()
-  String get returnValue => _blink.BlinkBeforeUnloadEvent.instance.returnValue_Getter_(this);
-
+  String get returnValue => _blink.BlinkBeforeUnloadEvent.instance.returnValue_Getter_(unwrap_jso(this));
+  
   @DomName('BeforeUnloadEvent.returnValue')
   @DocsEditable()
-  void set returnValue(String value) => _blink.BlinkBeforeUnloadEvent.instance.returnValue_Setter_(this, value);
-
+  void set returnValue(String value) => _blink.BlinkBeforeUnloadEvent.instance.returnValue_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -1742,35 +1752,35 @@
 
   @DomName('Blob.Blob')
   @DocsEditable()
-  factory Blob(List blobParts, [String type, String endings]) => _create(blobParts, type, endings);
+  factory Blob(List blobParts, [String type, String endings]) => wrap_jso(_create(blobParts, type, endings));
 
   @DocsEditable()
   static Blob _create(blobParts, type, endings) => _blink.BlinkBlob.instance.constructorCallback_3_(blobParts, type, endings);
 
   @DomName('Blob.size')
   @DocsEditable()
-  int get size => _blink.BlinkBlob.instance.size_Getter_(this);
-
+  int get size => _blink.BlinkBlob.instance.size_Getter_(unwrap_jso(this));
+  
   @DomName('Blob.type')
   @DocsEditable()
-  String get type => _blink.BlinkBlob.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkBlob.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('Blob.close')
   @DocsEditable()
   @Experimental() // untriaged
-  void close() => _blink.BlinkBlob.instance.close_Callback_0_(this);
-
+  void close() => _blink.BlinkBlob.instance.close_Callback_0_(unwrap_jso(this));
+  
   Blob slice([int start, int end, String contentType]) {
     if (contentType != null) {
-      return _blink.BlinkBlob.instance.slice_Callback_3_(this, start, end, contentType);
+      return wrap_jso(_blink.BlinkBlob.instance.slice_Callback_3_(unwrap_jso(this), start, end, contentType));
     }
     if (end != null) {
-      return _blink.BlinkBlob.instance.slice_Callback_2_(this, start, end);
+      return wrap_jso(_blink.BlinkBlob.instance.slice_Callback_2_(unwrap_jso(this), start, end));
     }
     if (start != null) {
-      return _blink.BlinkBlob.instance.slice_Callback_1_(this, start);
+      return wrap_jso(_blink.BlinkBlob.instance.slice_Callback_1_(unwrap_jso(this), start));
     }
-    return _blink.BlinkBlob.instance.slice_Callback_0_(this);
+    return wrap_jso(_blink.BlinkBlob.instance.slice_Callback_0_(unwrap_jso(this)));
   }
 
 }
@@ -1791,28 +1801,28 @@
   @DomName('Body.bodyUsed')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get bodyUsed => _blink.BlinkBody.instance.bodyUsed_Getter_(this);
-
+  bool get bodyUsed => _blink.BlinkBody.instance.bodyUsed_Getter_(unwrap_jso(this));
+  
   @DomName('Body.arrayBuffer')
   @DocsEditable()
   @Experimental() // untriaged
-  Future arrayBuffer() => _blink.BlinkBody.instance.arrayBuffer_Callback_0_(this);
-
+  Future arrayBuffer() => _blink.BlinkBody.instance.arrayBuffer_Callback_0_(unwrap_jso(this));
+  
   @DomName('Body.blob')
   @DocsEditable()
   @Experimental() // untriaged
-  Future blob() => _blink.BlinkBody.instance.blob_Callback_0_(this);
-
+  Future blob() => _blink.BlinkBody.instance.blob_Callback_0_(unwrap_jso(this));
+  
   @DomName('Body.json')
   @DocsEditable()
   @Experimental() // untriaged
-  Future json() => _blink.BlinkBody.instance.json_Callback_0_(this);
-
+  Future json() => _blink.BlinkBody.instance.json_Callback_0_(unwrap_jso(this));
+  
   @DomName('Body.text')
   @DocsEditable()
   @Experimental() // untriaged
-  Future text() => _blink.BlinkBody.instance.text_Callback_0_(this);
-
+  Future text() => _blink.BlinkBody.instance.text_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -2053,113 +2063,113 @@
 
   @DomName('HTMLButtonElement.autofocus')
   @DocsEditable()
-  bool get autofocus => _blink.BlinkHTMLButtonElement.instance.autofocus_Getter_(this);
-
+  bool get autofocus => _blink.BlinkHTMLButtonElement.instance.autofocus_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLButtonElement.autofocus')
   @DocsEditable()
-  void set autofocus(bool value) => _blink.BlinkHTMLButtonElement.instance.autofocus_Setter_(this, value);
-
+  void set autofocus(bool value) => _blink.BlinkHTMLButtonElement.instance.autofocus_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLButtonElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLButtonElement.instance.disabled_Getter_(this);
-
+  bool get disabled => _blink.BlinkHTMLButtonElement.instance.disabled_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLButtonElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLButtonElement.instance.disabled_Setter_(this, value);
-
+  void set disabled(bool value) => _blink.BlinkHTMLButtonElement.instance.disabled_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLButtonElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLButtonElement.instance.form_Getter_(this);
-
+  FormElement get form => wrap_jso(_blink.BlinkHTMLButtonElement.instance.form_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLButtonElement.formAction')
   @DocsEditable()
-  String get formAction => _blink.BlinkHTMLButtonElement.instance.formAction_Getter_(this);
-
+  String get formAction => _blink.BlinkHTMLButtonElement.instance.formAction_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLButtonElement.formAction')
   @DocsEditable()
-  void set formAction(String value) => _blink.BlinkHTMLButtonElement.instance.formAction_Setter_(this, value);
-
+  void set formAction(String value) => _blink.BlinkHTMLButtonElement.instance.formAction_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLButtonElement.formEnctype')
   @DocsEditable()
-  String get formEnctype => _blink.BlinkHTMLButtonElement.instance.formEnctype_Getter_(this);
-
+  String get formEnctype => _blink.BlinkHTMLButtonElement.instance.formEnctype_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLButtonElement.formEnctype')
   @DocsEditable()
-  void set formEnctype(String value) => _blink.BlinkHTMLButtonElement.instance.formEnctype_Setter_(this, value);
-
+  void set formEnctype(String value) => _blink.BlinkHTMLButtonElement.instance.formEnctype_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLButtonElement.formMethod')
   @DocsEditable()
-  String get formMethod => _blink.BlinkHTMLButtonElement.instance.formMethod_Getter_(this);
-
+  String get formMethod => _blink.BlinkHTMLButtonElement.instance.formMethod_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLButtonElement.formMethod')
   @DocsEditable()
-  void set formMethod(String value) => _blink.BlinkHTMLButtonElement.instance.formMethod_Setter_(this, value);
-
+  void set formMethod(String value) => _blink.BlinkHTMLButtonElement.instance.formMethod_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLButtonElement.formNoValidate')
   @DocsEditable()
-  bool get formNoValidate => _blink.BlinkHTMLButtonElement.instance.formNoValidate_Getter_(this);
-
+  bool get formNoValidate => _blink.BlinkHTMLButtonElement.instance.formNoValidate_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLButtonElement.formNoValidate')
   @DocsEditable()
-  void set formNoValidate(bool value) => _blink.BlinkHTMLButtonElement.instance.formNoValidate_Setter_(this, value);
-
+  void set formNoValidate(bool value) => _blink.BlinkHTMLButtonElement.instance.formNoValidate_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLButtonElement.formTarget')
   @DocsEditable()
-  String get formTarget => _blink.BlinkHTMLButtonElement.instance.formTarget_Getter_(this);
-
+  String get formTarget => _blink.BlinkHTMLButtonElement.instance.formTarget_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLButtonElement.formTarget')
   @DocsEditable()
-  void set formTarget(String value) => _blink.BlinkHTMLButtonElement.instance.formTarget_Setter_(this, value);
-
+  void set formTarget(String value) => _blink.BlinkHTMLButtonElement.instance.formTarget_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLButtonElement.labels')
   @DocsEditable()
   @Unstable()
-  List<Node> get labels => _blink.BlinkHTMLButtonElement.instance.labels_Getter_(this);
-
+  List<Node> get labels => wrap_jso_list(_blink.BlinkHTMLButtonElement.instance.labels_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLButtonElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLButtonElement.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkHTMLButtonElement.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLButtonElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLButtonElement.instance.name_Setter_(this, value);
-
+  void set name(String value) => _blink.BlinkHTMLButtonElement.instance.name_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLButtonElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLButtonElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkHTMLButtonElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLButtonElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLButtonElement.instance.type_Setter_(this, value);
-
+  void set type(String value) => _blink.BlinkHTMLButtonElement.instance.type_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLButtonElement.validationMessage')
   @DocsEditable()
-  String get validationMessage => _blink.BlinkHTMLButtonElement.instance.validationMessage_Getter_(this);
-
+  String get validationMessage => _blink.BlinkHTMLButtonElement.instance.validationMessage_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLButtonElement.validity')
   @DocsEditable()
-  ValidityState get validity => _blink.BlinkHTMLButtonElement.instance.validity_Getter_(this);
-
+  ValidityState get validity => wrap_jso(_blink.BlinkHTMLButtonElement.instance.validity_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLButtonElement.value')
   @DocsEditable()
-  String get value => _blink.BlinkHTMLButtonElement.instance.value_Getter_(this);
-
+  String get value => _blink.BlinkHTMLButtonElement.instance.value_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLButtonElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLButtonElement.instance.value_Setter_(this, value);
-
+  void set value(String value) => _blink.BlinkHTMLButtonElement.instance.value_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLButtonElement.willValidate')
   @DocsEditable()
-  bool get willValidate => _blink.BlinkHTMLButtonElement.instance.willValidate_Getter_(this);
-
+  bool get willValidate => _blink.BlinkHTMLButtonElement.instance.willValidate_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLButtonElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLButtonElement.instance.checkValidity_Callback_0_(this);
-
+  bool checkValidity() => _blink.BlinkHTMLButtonElement.instance.checkValidity_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLButtonElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLButtonElement.instance.setCustomValidity_Callback_1_(this, error);
-
+  void setCustomValidity(String error) => _blink.BlinkHTMLButtonElement.instance.setCustomValidity_Callback_1_(unwrap_jso(this), error);
+  
 }
 // 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
@@ -2194,28 +2204,28 @@
   @DomName('CacheStorage.create')
   @DocsEditable()
   @Experimental() // untriaged
-  Future create(String cacheName) => _blink.BlinkCacheStorage.instance.create_Callback_1_(this, cacheName);
-
+  Future create(String cacheName) => _blink.BlinkCacheStorage.instance.create_Callback_1_(unwrap_jso(this), cacheName);
+  
   @DomName('CacheStorage.delete')
   @DocsEditable()
   @Experimental() // untriaged
-  Future delete(String cacheName) => _blink.BlinkCacheStorage.instance.delete_Callback_1_(this, cacheName);
-
+  Future delete(String cacheName) => _blink.BlinkCacheStorage.instance.delete_Callback_1_(unwrap_jso(this), cacheName);
+  
   @DomName('CacheStorage.get')
   @DocsEditable()
   @Experimental() // untriaged
-  Future get(String cacheName) => _blink.BlinkCacheStorage.instance.get_Callback_1_(this, cacheName);
-
+  Future get(String cacheName) => _blink.BlinkCacheStorage.instance.get_Callback_1_(unwrap_jso(this), cacheName);
+  
   @DomName('CacheStorage.has')
   @DocsEditable()
   @Experimental() // untriaged
-  Future has(String cacheName) => _blink.BlinkCacheStorage.instance.has_Callback_1_(this, cacheName);
-
+  Future has(String cacheName) => _blink.BlinkCacheStorage.instance.has_Callback_1_(unwrap_jso(this), cacheName);
+  
   @DomName('CacheStorage.keys')
   @DocsEditable()
   @Experimental() // untriaged
-  Future keys() => _blink.BlinkCacheStorage.instance.keys_Callback_0_(this);
-
+  Future keys() => _blink.BlinkCacheStorage.instance.keys_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -2234,22 +2244,22 @@
 
   @DomName('Canvas2DContextAttributes.alpha')
   @DocsEditable()
-  bool get alpha => _blink.BlinkCanvas2DContextAttributes.instance.alpha_Getter_(this);
-
+  bool get alpha => _blink.BlinkCanvas2DContextAttributes.instance.alpha_Getter_(unwrap_jso(this));
+  
   @DomName('Canvas2DContextAttributes.alpha')
   @DocsEditable()
-  void set alpha(bool value) => _blink.BlinkCanvas2DContextAttributes.instance.alpha_Setter_(this, value);
-
+  void set alpha(bool value) => _blink.BlinkCanvas2DContextAttributes.instance.alpha_Setter_(unwrap_jso(this), value);
+  
   @DomName('Canvas2DContextAttributes.storage')
   @DocsEditable()
   @Experimental() // untriaged
-  String get storage => _blink.BlinkCanvas2DContextAttributes.instance.storage_Getter_(this);
-
+  String get storage => _blink.BlinkCanvas2DContextAttributes.instance.storage_Getter_(unwrap_jso(this));
+  
   @DomName('Canvas2DContextAttributes.storage')
   @DocsEditable()
   @Experimental() // untriaged
-  void set storage(String value) => _blink.BlinkCanvas2DContextAttributes.instance.storage_Setter_(this, value);
-
+  void set storage(String value) => _blink.BlinkCanvas2DContextAttributes.instance.storage_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -2299,31 +2309,31 @@
   /// The height of this canvas element in CSS pixels.
   @DomName('HTMLCanvasElement.height')
   @DocsEditable()
-  int get height => _blink.BlinkHTMLCanvasElement.instance.height_Getter_(this);
-
+  int get height => _blink.BlinkHTMLCanvasElement.instance.height_Getter_(unwrap_jso(this));
+  
   /// The height of this canvas element in CSS pixels.
   @DomName('HTMLCanvasElement.height')
   @DocsEditable()
-  void set height(int value) => _blink.BlinkHTMLCanvasElement.instance.height_Setter_(this, value);
-
+  void set height(int value) => _blink.BlinkHTMLCanvasElement.instance.height_Setter_(unwrap_jso(this), value);
+  
   /// The width of this canvas element in CSS pixels.
   @DomName('HTMLCanvasElement.width')
   @DocsEditable()
-  int get width => _blink.BlinkHTMLCanvasElement.instance.width_Getter_(this);
-
+  int get width => _blink.BlinkHTMLCanvasElement.instance.width_Getter_(unwrap_jso(this));
+  
   /// The width of this canvas element in CSS pixels.
   @DomName('HTMLCanvasElement.width')
   @DocsEditable()
-  void set width(int value) => _blink.BlinkHTMLCanvasElement.instance.width_Setter_(this, value);
-
+  void set width(int value) => _blink.BlinkHTMLCanvasElement.instance.width_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLCanvasElement.getContext')
   @DocsEditable()
-  Object getContext(String contextId, [Map attrs]) => _blink.BlinkHTMLCanvasElement.instance.getContext_Callback_2_(this, contextId, attrs);
-
+  Object getContext(String contextId, [Map attrs]) => wrap_jso(_blink.BlinkHTMLCanvasElement.instance.getContext_Callback_2_(unwrap_jso(this), contextId, attrs));
+  
   @DomName('HTMLCanvasElement.toDataURL')
   @DocsEditable()
-  String _toDataUrl(String type, [num quality]) => _blink.BlinkHTMLCanvasElement.instance.toDataURL_Callback_2_(this, type, quality);
-
+  String _toDataUrl(String type, [num quality]) => _blink.BlinkHTMLCanvasElement.instance.toDataURL_Callback_2_(unwrap_jso(this), type, quality);
+  
   /// Stream of `webglcontextlost` events handled by this [CanvasElement].
   @DomName('HTMLCanvasElement.onwebglcontextlost')
   @DocsEditable()
@@ -2465,8 +2475,8 @@
    */
   @DomName('CanvasGradient.addColorStop')
   @DocsEditable()
-  void addColorStop(num offset, String color) => _blink.BlinkCanvasGradient.instance.addColorStop_Callback_2_(this, offset, color);
-
+  void addColorStop(num offset, String color) => _blink.BlinkCanvasGradient.instance.addColorStop_Callback_2_(unwrap_jso(this), offset, color);
+  
 }
 // 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
@@ -2511,8 +2521,8 @@
   @DomName('CanvasPattern.setTransform')
   @DocsEditable()
   @Experimental() // untriaged
-  void setTransform(Matrix transform) => _blink.BlinkCanvasPattern.instance.setTransform_Callback_1_(this, transform);
-
+  void setTransform(Matrix transform) => _blink.BlinkCanvasPattern.instance.setTransform_Callback_1_(unwrap_jso(this), unwrap_jso(transform));
+  
 }
 // 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
@@ -2531,60 +2541,60 @@
   @DomName('CanvasRenderingContext2D.canvas')
   @DocsEditable()
   @Experimental() // untriaged
-  CanvasElement get canvas => _blink.BlinkCanvasRenderingContext2D.instance.canvas_Getter_(this);
-
+  CanvasElement get canvas => wrap_jso(_blink.BlinkCanvasRenderingContext2D.instance.canvas_Getter_(unwrap_jso(this)));
+  
   @DomName('CanvasRenderingContext2D.currentTransform')
   @DocsEditable()
   @Experimental() // untriaged
-  Matrix get currentTransform => _blink.BlinkCanvasRenderingContext2D.instance.currentTransform_Getter_(this);
-
+  Matrix get currentTransform => wrap_jso(_blink.BlinkCanvasRenderingContext2D.instance.currentTransform_Getter_(unwrap_jso(this)));
+  
   @DomName('CanvasRenderingContext2D.currentTransform')
   @DocsEditable()
   @Experimental() // untriaged
-  void set currentTransform(Matrix value) => _blink.BlinkCanvasRenderingContext2D.instance.currentTransform_Setter_(this, value);
-
+  void set currentTransform(Matrix value) => _blink.BlinkCanvasRenderingContext2D.instance.currentTransform_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('CanvasRenderingContext2D.direction')
   @DocsEditable()
   @Experimental() // untriaged
-  String get direction => _blink.BlinkCanvasRenderingContext2D.instance.direction_Getter_(this);
-
+  String get direction => _blink.BlinkCanvasRenderingContext2D.instance.direction_Getter_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.direction')
   @DocsEditable()
   @Experimental() // untriaged
-  void set direction(String value) => _blink.BlinkCanvasRenderingContext2D.instance.direction_Setter_(this, value);
-
+  void set direction(String value) => _blink.BlinkCanvasRenderingContext2D.instance.direction_Setter_(unwrap_jso(this), value);
+  
   @DomName('CanvasRenderingContext2D.fillStyle')
   @DocsEditable()
-  Object get fillStyle => _blink.BlinkCanvasRenderingContext2D.instance.fillStyle_Getter_(this);
-
+  Object get fillStyle => _blink.BlinkCanvasRenderingContext2D.instance.fillStyle_Getter_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.fillStyle')
   @DocsEditable()
-  void set fillStyle(Object value) => _blink.BlinkCanvasRenderingContext2D.instance.fillStyle_Setter_(this, value);
-
+  void set fillStyle(Object value) => _blink.BlinkCanvasRenderingContext2D.instance.fillStyle_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('CanvasRenderingContext2D.font')
   @DocsEditable()
-  String get font => _blink.BlinkCanvasRenderingContext2D.instance.font_Getter_(this);
-
+  String get font => _blink.BlinkCanvasRenderingContext2D.instance.font_Getter_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.font')
   @DocsEditable()
-  void set font(String value) => _blink.BlinkCanvasRenderingContext2D.instance.font_Setter_(this, value);
-
+  void set font(String value) => _blink.BlinkCanvasRenderingContext2D.instance.font_Setter_(unwrap_jso(this), value);
+  
   @DomName('CanvasRenderingContext2D.globalAlpha')
   @DocsEditable()
-  num get globalAlpha => _blink.BlinkCanvasRenderingContext2D.instance.globalAlpha_Getter_(this);
-
+  num get globalAlpha => _blink.BlinkCanvasRenderingContext2D.instance.globalAlpha_Getter_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.globalAlpha')
   @DocsEditable()
-  void set globalAlpha(num value) => _blink.BlinkCanvasRenderingContext2D.instance.globalAlpha_Setter_(this, value);
-
+  void set globalAlpha(num value) => _blink.BlinkCanvasRenderingContext2D.instance.globalAlpha_Setter_(unwrap_jso(this), value);
+  
   @DomName('CanvasRenderingContext2D.globalCompositeOperation')
   @DocsEditable()
-  String get globalCompositeOperation => _blink.BlinkCanvasRenderingContext2D.instance.globalCompositeOperation_Getter_(this);
-
+  String get globalCompositeOperation => _blink.BlinkCanvasRenderingContext2D.instance.globalCompositeOperation_Getter_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.globalCompositeOperation')
   @DocsEditable()
-  void set globalCompositeOperation(String value) => _blink.BlinkCanvasRenderingContext2D.instance.globalCompositeOperation_Setter_(this, value);
-
+  void set globalCompositeOperation(String value) => _blink.BlinkCanvasRenderingContext2D.instance.globalCompositeOperation_Setter_(unwrap_jso(this), value);
+  
   /**
    * Whether images and patterns on this canvas will be smoothed when this
    * canvas is scaled.
@@ -2598,8 +2608,8 @@
   @DomName('CanvasRenderingContext2D.imageSmoothingEnabled')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get imageSmoothingEnabled => _blink.BlinkCanvasRenderingContext2D.instance.imageSmoothingEnabled_Getter_(this);
-
+  bool get imageSmoothingEnabled => _blink.BlinkCanvasRenderingContext2D.instance.imageSmoothingEnabled_Getter_(unwrap_jso(this));
+  
   /**
    * Whether images and patterns on this canvas will be smoothed when this
    * canvas is scaled.
@@ -2613,141 +2623,141 @@
   @DomName('CanvasRenderingContext2D.imageSmoothingEnabled')
   @DocsEditable()
   @Experimental() // untriaged
-  void set imageSmoothingEnabled(bool value) => _blink.BlinkCanvasRenderingContext2D.instance.imageSmoothingEnabled_Setter_(this, value);
-
+  void set imageSmoothingEnabled(bool value) => _blink.BlinkCanvasRenderingContext2D.instance.imageSmoothingEnabled_Setter_(unwrap_jso(this), value);
+  
   @DomName('CanvasRenderingContext2D.lineCap')
   @DocsEditable()
-  String get lineCap => _blink.BlinkCanvasRenderingContext2D.instance.lineCap_Getter_(this);
-
+  String get lineCap => _blink.BlinkCanvasRenderingContext2D.instance.lineCap_Getter_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.lineCap')
   @DocsEditable()
-  void set lineCap(String value) => _blink.BlinkCanvasRenderingContext2D.instance.lineCap_Setter_(this, value);
-
+  void set lineCap(String value) => _blink.BlinkCanvasRenderingContext2D.instance.lineCap_Setter_(unwrap_jso(this), value);
+  
   @DomName('CanvasRenderingContext2D.lineDashOffset')
   @DocsEditable()
-  num get lineDashOffset => _blink.BlinkCanvasRenderingContext2D.instance.lineDashOffset_Getter_(this);
-
+  num get lineDashOffset => _blink.BlinkCanvasRenderingContext2D.instance.lineDashOffset_Getter_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.lineDashOffset')
   @DocsEditable()
-  void set lineDashOffset(num value) => _blink.BlinkCanvasRenderingContext2D.instance.lineDashOffset_Setter_(this, value);
-
+  void set lineDashOffset(num value) => _blink.BlinkCanvasRenderingContext2D.instance.lineDashOffset_Setter_(unwrap_jso(this), value);
+  
   @DomName('CanvasRenderingContext2D.lineJoin')
   @DocsEditable()
-  String get lineJoin => _blink.BlinkCanvasRenderingContext2D.instance.lineJoin_Getter_(this);
-
+  String get lineJoin => _blink.BlinkCanvasRenderingContext2D.instance.lineJoin_Getter_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.lineJoin')
   @DocsEditable()
-  void set lineJoin(String value) => _blink.BlinkCanvasRenderingContext2D.instance.lineJoin_Setter_(this, value);
-
+  void set lineJoin(String value) => _blink.BlinkCanvasRenderingContext2D.instance.lineJoin_Setter_(unwrap_jso(this), value);
+  
   @DomName('CanvasRenderingContext2D.lineWidth')
   @DocsEditable()
-  num get lineWidth => _blink.BlinkCanvasRenderingContext2D.instance.lineWidth_Getter_(this);
-
+  num get lineWidth => _blink.BlinkCanvasRenderingContext2D.instance.lineWidth_Getter_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.lineWidth')
   @DocsEditable()
-  void set lineWidth(num value) => _blink.BlinkCanvasRenderingContext2D.instance.lineWidth_Setter_(this, value);
-
+  void set lineWidth(num value) => _blink.BlinkCanvasRenderingContext2D.instance.lineWidth_Setter_(unwrap_jso(this), value);
+  
   @DomName('CanvasRenderingContext2D.miterLimit')
   @DocsEditable()
-  num get miterLimit => _blink.BlinkCanvasRenderingContext2D.instance.miterLimit_Getter_(this);
-
+  num get miterLimit => _blink.BlinkCanvasRenderingContext2D.instance.miterLimit_Getter_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.miterLimit')
   @DocsEditable()
-  void set miterLimit(num value) => _blink.BlinkCanvasRenderingContext2D.instance.miterLimit_Setter_(this, value);
-
+  void set miterLimit(num value) => _blink.BlinkCanvasRenderingContext2D.instance.miterLimit_Setter_(unwrap_jso(this), value);
+  
   @DomName('CanvasRenderingContext2D.shadowBlur')
   @DocsEditable()
-  num get shadowBlur => _blink.BlinkCanvasRenderingContext2D.instance.shadowBlur_Getter_(this);
-
+  num get shadowBlur => _blink.BlinkCanvasRenderingContext2D.instance.shadowBlur_Getter_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.shadowBlur')
   @DocsEditable()
-  void set shadowBlur(num value) => _blink.BlinkCanvasRenderingContext2D.instance.shadowBlur_Setter_(this, value);
-
+  void set shadowBlur(num value) => _blink.BlinkCanvasRenderingContext2D.instance.shadowBlur_Setter_(unwrap_jso(this), value);
+  
   @DomName('CanvasRenderingContext2D.shadowColor')
   @DocsEditable()
-  String get shadowColor => _blink.BlinkCanvasRenderingContext2D.instance.shadowColor_Getter_(this);
-
+  String get shadowColor => _blink.BlinkCanvasRenderingContext2D.instance.shadowColor_Getter_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.shadowColor')
   @DocsEditable()
-  void set shadowColor(String value) => _blink.BlinkCanvasRenderingContext2D.instance.shadowColor_Setter_(this, value);
-
+  void set shadowColor(String value) => _blink.BlinkCanvasRenderingContext2D.instance.shadowColor_Setter_(unwrap_jso(this), value);
+  
   @DomName('CanvasRenderingContext2D.shadowOffsetX')
   @DocsEditable()
-  num get shadowOffsetX => _blink.BlinkCanvasRenderingContext2D.instance.shadowOffsetX_Getter_(this);
-
+  num get shadowOffsetX => _blink.BlinkCanvasRenderingContext2D.instance.shadowOffsetX_Getter_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.shadowOffsetX')
   @DocsEditable()
-  void set shadowOffsetX(num value) => _blink.BlinkCanvasRenderingContext2D.instance.shadowOffsetX_Setter_(this, value);
-
+  void set shadowOffsetX(num value) => _blink.BlinkCanvasRenderingContext2D.instance.shadowOffsetX_Setter_(unwrap_jso(this), value);
+  
   @DomName('CanvasRenderingContext2D.shadowOffsetY')
   @DocsEditable()
-  num get shadowOffsetY => _blink.BlinkCanvasRenderingContext2D.instance.shadowOffsetY_Getter_(this);
-
+  num get shadowOffsetY => _blink.BlinkCanvasRenderingContext2D.instance.shadowOffsetY_Getter_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.shadowOffsetY')
   @DocsEditable()
-  void set shadowOffsetY(num value) => _blink.BlinkCanvasRenderingContext2D.instance.shadowOffsetY_Setter_(this, value);
-
+  void set shadowOffsetY(num value) => _blink.BlinkCanvasRenderingContext2D.instance.shadowOffsetY_Setter_(unwrap_jso(this), value);
+  
   @DomName('CanvasRenderingContext2D.strokeStyle')
   @DocsEditable()
-  Object get strokeStyle => _blink.BlinkCanvasRenderingContext2D.instance.strokeStyle_Getter_(this);
-
+  Object get strokeStyle => _blink.BlinkCanvasRenderingContext2D.instance.strokeStyle_Getter_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.strokeStyle')
   @DocsEditable()
-  void set strokeStyle(Object value) => _blink.BlinkCanvasRenderingContext2D.instance.strokeStyle_Setter_(this, value);
-
+  void set strokeStyle(Object value) => _blink.BlinkCanvasRenderingContext2D.instance.strokeStyle_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('CanvasRenderingContext2D.textAlign')
   @DocsEditable()
-  String get textAlign => _blink.BlinkCanvasRenderingContext2D.instance.textAlign_Getter_(this);
-
+  String get textAlign => _blink.BlinkCanvasRenderingContext2D.instance.textAlign_Getter_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.textAlign')
   @DocsEditable()
-  void set textAlign(String value) => _blink.BlinkCanvasRenderingContext2D.instance.textAlign_Setter_(this, value);
-
+  void set textAlign(String value) => _blink.BlinkCanvasRenderingContext2D.instance.textAlign_Setter_(unwrap_jso(this), value);
+  
   @DomName('CanvasRenderingContext2D.textBaseline')
   @DocsEditable()
-  String get textBaseline => _blink.BlinkCanvasRenderingContext2D.instance.textBaseline_Getter_(this);
-
+  String get textBaseline => _blink.BlinkCanvasRenderingContext2D.instance.textBaseline_Getter_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.textBaseline')
   @DocsEditable()
-  void set textBaseline(String value) => _blink.BlinkCanvasRenderingContext2D.instance.textBaseline_Setter_(this, value);
-
+  void set textBaseline(String value) => _blink.BlinkCanvasRenderingContext2D.instance.textBaseline_Setter_(unwrap_jso(this), value);
+  
   void addHitRegion([Map options]) {
     if (options != null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.addHitRegion_Callback_1_(this, options);
+      _blink.BlinkCanvasRenderingContext2D.instance.addHitRegion_Callback_1_(unwrap_jso(this), options);
       return;
     }
-    _blink.BlinkCanvasRenderingContext2D.instance.addHitRegion_Callback_0_(this);
+    _blink.BlinkCanvasRenderingContext2D.instance.addHitRegion_Callback_0_(unwrap_jso(this));
     return;
   }
 
   @DomName('CanvasRenderingContext2D.beginPath')
   @DocsEditable()
-  void beginPath() => _blink.BlinkCanvasRenderingContext2D.instance.beginPath_Callback_0_(this);
-
+  void beginPath() => _blink.BlinkCanvasRenderingContext2D.instance.beginPath_Callback_0_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.clearHitRegions')
   @DocsEditable()
   @Experimental() // untriaged
-  void clearHitRegions() => _blink.BlinkCanvasRenderingContext2D.instance.clearHitRegions_Callback_0_(this);
-
+  void clearHitRegions() => _blink.BlinkCanvasRenderingContext2D.instance.clearHitRegions_Callback_0_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.clearRect')
   @DocsEditable()
-  void clearRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.instance.clearRect_Callback_4_(this, x, y, width, height);
-
+  void clearRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.instance.clearRect_Callback_4_(unwrap_jso(this), x, y, width, height);
+  
   void clip([path_OR_winding, String winding]) {
     if (path_OR_winding == null && winding == null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.clip_Callback_0_(this);
+      _blink.BlinkCanvasRenderingContext2D.instance.clip_Callback_0_(unwrap_jso(this));
       return;
     }
     if ((path_OR_winding is String) && winding == null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.clip_Callback_1_(this, path_OR_winding);
+      _blink.BlinkCanvasRenderingContext2D.instance.clip_Callback_1_(unwrap_jso(this), unwrap_jso(path_OR_winding));
       return;
     }
     if ((path_OR_winding is Path2D) && winding == null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.clip_Callback_1_(this, path_OR_winding);
+      _blink.BlinkCanvasRenderingContext2D.instance.clip_Callback_1_(unwrap_jso(this), unwrap_jso(path_OR_winding));
       return;
     }
     if ((winding is String) && (path_OR_winding is Path2D)) {
-      _blink.BlinkCanvasRenderingContext2D.instance.clip_Callback_2_(this, path_OR_winding, winding);
+      _blink.BlinkCanvasRenderingContext2D.instance.clip_Callback_2_(unwrap_jso(this), unwrap_jso(path_OR_winding), winding);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2755,41 +2765,41 @@
 
   @DomName('CanvasRenderingContext2D.createImageData')
   @DocsEditable()
-  ImageData createImageData(num sw, num sh) => _blink.BlinkCanvasRenderingContext2D.instance.createImageData_Callback_2_(this, sw, sh);
-
+  ImageData createImageData(num sw, num sh) => wrap_jso(_blink.BlinkCanvasRenderingContext2D.instance.createImageData_Callback_2_(unwrap_jso(this), sw, sh));
+  
   @DomName('CanvasRenderingContext2D.createImageDataFromImageData')
   @DocsEditable()
-  ImageData createImageDataFromImageData(ImageData imagedata) => _blink.BlinkCanvasRenderingContext2D.instance.createImageData_Callback_1_(this, imagedata);
-
+  ImageData createImageDataFromImageData(ImageData imagedata) => wrap_jso(_blink.BlinkCanvasRenderingContext2D.instance.createImageData_Callback_1_(unwrap_jso(this), unwrap_jso(imagedata)));
+  
   @DomName('CanvasRenderingContext2D.createLinearGradient')
   @DocsEditable()
-  CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) => _blink.BlinkCanvasRenderingContext2D.instance.createLinearGradient_Callback_4_(this, x0, y0, x1, y1);
-
+  CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) => wrap_jso(_blink.BlinkCanvasRenderingContext2D.instance.createLinearGradient_Callback_4_(unwrap_jso(this), x0, y0, x1, y1));
+  
   CanvasPattern createPattern(canvas_OR_image, String repetitionType) {
     if ((repetitionType is String || repetitionType == null) && (canvas_OR_image is CanvasElement)) {
-      return _blink.BlinkCanvasRenderingContext2D.instance.createPattern_Callback_2_(this, canvas_OR_image, repetitionType);
+      return wrap_jso(_blink.BlinkCanvasRenderingContext2D.instance.createPattern_Callback_2_(unwrap_jso(this), unwrap_jso(canvas_OR_image), repetitionType));
     }
     if ((repetitionType is String || repetitionType == null) && (canvas_OR_image is VideoElement)) {
-      return _blink.BlinkCanvasRenderingContext2D.instance.createPattern_Callback_2_(this, canvas_OR_image, repetitionType);
+      return wrap_jso(_blink.BlinkCanvasRenderingContext2D.instance.createPattern_Callback_2_(unwrap_jso(this), unwrap_jso(canvas_OR_image), repetitionType));
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('CanvasRenderingContext2D.createPatternFromImage')
   @DocsEditable()
-  CanvasPattern createPatternFromImage(ImageElement image, String repetitionType) => _blink.BlinkCanvasRenderingContext2D.instance.createPattern_Callback_2_(this, image, repetitionType);
-
+  CanvasPattern createPatternFromImage(ImageElement image, String repetitionType) => wrap_jso(_blink.BlinkCanvasRenderingContext2D.instance.createPattern_Callback_2_(unwrap_jso(this), unwrap_jso(image), repetitionType));
+  
   @DomName('CanvasRenderingContext2D.createRadialGradient')
   @DocsEditable()
-  CanvasGradient createRadialGradient(num x0, num y0, num r0, num x1, num y1, num r1) => _blink.BlinkCanvasRenderingContext2D.instance.createRadialGradient_Callback_6_(this, x0, y0, r0, x1, y1, r1);
-
+  CanvasGradient createRadialGradient(num x0, num y0, num r0, num x1, num y1, num r1) => wrap_jso(_blink.BlinkCanvasRenderingContext2D.instance.createRadialGradient_Callback_6_(unwrap_jso(this), x0, y0, r0, x1, y1, r1));
+  
   void drawFocusIfNeeded(element_OR_path, [Element element]) {
     if ((element_OR_path is Element) && element == null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.drawFocusIfNeeded_Callback_1_(this, element_OR_path);
+      _blink.BlinkCanvasRenderingContext2D.instance.drawFocusIfNeeded_Callback_1_(unwrap_jso(this), unwrap_jso(element_OR_path));
       return;
     }
     if ((element is Element) && (element_OR_path is Path2D)) {
-      _blink.BlinkCanvasRenderingContext2D.instance.drawFocusIfNeeded_Callback_2_(this, element_OR_path, element);
+      _blink.BlinkCanvasRenderingContext2D.instance.drawFocusIfNeeded_Callback_2_(unwrap_jso(this), unwrap_jso(element_OR_path), unwrap_jso(element));
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2797,51 +2807,51 @@
 
   void _drawImage(canvas_OR_image_OR_imageBitmap_OR_video, num sx_OR_x, num sy_OR_y, [num sw_OR_width, num height_OR_sh, num dx, num dy, num dw, num dh]) {
     if ((sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageElement) && sw_OR_width == null && height_OR_sh == null && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_3_(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
+      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_3_(unwrap_jso(this), unwrap_jso(canvas_OR_image_OR_imageBitmap_OR_video), sx_OR_x, sy_OR_y);
       return;
     }
     if ((height_OR_sh is num) && (sw_OR_width is num) && (sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageElement) && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_5_(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
+      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_5_(unwrap_jso(this), unwrap_jso(canvas_OR_image_OR_imageBitmap_OR_video), sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
       return;
     }
     if ((dh is num) && (dw is num) && (dy is num) && (dx is num) && (height_OR_sh is num) && (sw_OR_width is num) && (sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageElement)) {
-      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_9_(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
+      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_9_(unwrap_jso(this), unwrap_jso(canvas_OR_image_OR_imageBitmap_OR_video), sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
       return;
     }
     if ((sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is CanvasElement) && sw_OR_width == null && height_OR_sh == null && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_3_(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
+      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_3_(unwrap_jso(this), unwrap_jso(canvas_OR_image_OR_imageBitmap_OR_video), sx_OR_x, sy_OR_y);
       return;
     }
     if ((height_OR_sh is num) && (sw_OR_width is num) && (sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is CanvasElement) && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_5_(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
+      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_5_(unwrap_jso(this), unwrap_jso(canvas_OR_image_OR_imageBitmap_OR_video), sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
       return;
     }
     if ((dh is num) && (dw is num) && (dy is num) && (dx is num) && (height_OR_sh is num) && (sw_OR_width is num) && (sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is CanvasElement)) {
-      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_9_(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
+      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_9_(unwrap_jso(this), unwrap_jso(canvas_OR_image_OR_imageBitmap_OR_video), sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
       return;
     }
     if ((sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is VideoElement) && sw_OR_width == null && height_OR_sh == null && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_3_(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
+      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_3_(unwrap_jso(this), unwrap_jso(canvas_OR_image_OR_imageBitmap_OR_video), sx_OR_x, sy_OR_y);
       return;
     }
     if ((height_OR_sh is num) && (sw_OR_width is num) && (sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is VideoElement) && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_5_(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
+      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_5_(unwrap_jso(this), unwrap_jso(canvas_OR_image_OR_imageBitmap_OR_video), sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
       return;
     }
     if ((dh is num) && (dw is num) && (dy is num) && (dx is num) && (height_OR_sh is num) && (sw_OR_width is num) && (sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is VideoElement)) {
-      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_9_(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
+      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_9_(unwrap_jso(this), unwrap_jso(canvas_OR_image_OR_imageBitmap_OR_video), sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
       return;
     }
     if ((sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageBitmap) && sw_OR_width == null && height_OR_sh == null && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_3_(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y);
+      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_3_(unwrap_jso(this), unwrap_jso(canvas_OR_image_OR_imageBitmap_OR_video), sx_OR_x, sy_OR_y);
       return;
     }
     if ((height_OR_sh is num) && (sw_OR_width is num) && (sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageBitmap) && dx == null && dy == null && dw == null && dh == null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_5_(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
+      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_5_(unwrap_jso(this), unwrap_jso(canvas_OR_image_OR_imageBitmap_OR_video), sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh);
       return;
     }
     if ((dh is num) && (dw is num) && (dy is num) && (dx is num) && (height_OR_sh is num) && (sw_OR_width is num) && (sy_OR_y is num) && (sx_OR_x is num) && (canvas_OR_image_OR_imageBitmap_OR_video is ImageBitmap)) {
-      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_9_(this, canvas_OR_image_OR_imageBitmap_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
+      _blink.BlinkCanvasRenderingContext2D.instance.drawImage_Callback_9_(unwrap_jso(this), unwrap_jso(canvas_OR_image_OR_imageBitmap_OR_video), sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2849,19 +2859,19 @@
 
   void fill([path_OR_winding, String winding]) {
     if (path_OR_winding == null && winding == null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.fill_Callback_0_(this);
+      _blink.BlinkCanvasRenderingContext2D.instance.fill_Callback_0_(unwrap_jso(this));
       return;
     }
     if ((path_OR_winding is String) && winding == null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.fill_Callback_1_(this, path_OR_winding);
+      _blink.BlinkCanvasRenderingContext2D.instance.fill_Callback_1_(unwrap_jso(this), unwrap_jso(path_OR_winding));
       return;
     }
     if ((path_OR_winding is Path2D) && winding == null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.fill_Callback_1_(this, path_OR_winding);
+      _blink.BlinkCanvasRenderingContext2D.instance.fill_Callback_1_(unwrap_jso(this), unwrap_jso(path_OR_winding));
       return;
     }
     if ((winding is String) && (path_OR_winding is Path2D)) {
-      _blink.BlinkCanvasRenderingContext2D.instance.fill_Callback_2_(this, path_OR_winding, winding);
+      _blink.BlinkCanvasRenderingContext2D.instance.fill_Callback_2_(unwrap_jso(this), unwrap_jso(path_OR_winding), winding);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2869,14 +2879,14 @@
 
   @DomName('CanvasRenderingContext2D.fillRect')
   @DocsEditable()
-  void fillRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.instance.fillRect_Callback_4_(this, x, y, width, height);
-
+  void fillRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.instance.fillRect_Callback_4_(unwrap_jso(this), x, y, width, height);
+  
   void fillText(String text, num x, num y, [num maxWidth]) {
     if (maxWidth != null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.fillText_Callback_4_(this, text, x, y, maxWidth);
+      _blink.BlinkCanvasRenderingContext2D.instance.fillText_Callback_4_(unwrap_jso(this), text, x, y, maxWidth);
       return;
     }
-    _blink.BlinkCanvasRenderingContext2D.instance.fillText_Callback_3_(this, text, x, y);
+    _blink.BlinkCanvasRenderingContext2D.instance.fillText_Callback_3_(unwrap_jso(this), text, x, y);
     return;
   }
 
@@ -2884,58 +2894,58 @@
   @DocsEditable()
   // http://wiki.whatwg.org/wiki/CanvasOpaque#Suggested_IDL
   @Experimental()
-  Canvas2DContextAttributes getContextAttributes() => _blink.BlinkCanvasRenderingContext2D.instance.getContextAttributes_Callback_0_(this);
-
+  Canvas2DContextAttributes getContextAttributes() => wrap_jso(_blink.BlinkCanvasRenderingContext2D.instance.getContextAttributes_Callback_0_(unwrap_jso(this)));
+  
   @DomName('CanvasRenderingContext2D.getImageData')
   @DocsEditable()
-  ImageData getImageData(num sx, num sy, num sw, num sh) => _blink.BlinkCanvasRenderingContext2D.instance.getImageData_Callback_4_(this, sx, sy, sw, sh);
-
+  ImageData getImageData(num sx, num sy, num sw, num sh) => wrap_jso(_blink.BlinkCanvasRenderingContext2D.instance.getImageData_Callback_4_(unwrap_jso(this), sx, sy, sw, sh));
+  
   @DomName('CanvasRenderingContext2D.getLineDash')
   @DocsEditable()
-  List<num> _getLineDash() => _blink.BlinkCanvasRenderingContext2D.instance.getLineDash_Callback_0_(this);
-
+  List<num> _getLineDash() => _blink.BlinkCanvasRenderingContext2D.instance.getLineDash_Callback_0_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.isContextLost')
   @DocsEditable()
   @Experimental() // untriaged
-  bool isContextLost() => _blink.BlinkCanvasRenderingContext2D.instance.isContextLost_Callback_0_(this);
-
+  bool isContextLost() => _blink.BlinkCanvasRenderingContext2D.instance.isContextLost_Callback_0_(unwrap_jso(this));
+  
   bool isPointInPath(path_OR_x, num x_OR_y, [winding_OR_y, String winding]) {
     if ((x_OR_y is num) && (path_OR_x is num) && winding_OR_y == null && winding == null) {
-      return _blink.BlinkCanvasRenderingContext2D.instance.isPointInPath_Callback_2_(this, path_OR_x, x_OR_y);
+      return _blink.BlinkCanvasRenderingContext2D.instance.isPointInPath_Callback_2_(unwrap_jso(this), unwrap_jso(path_OR_x), x_OR_y);
     }
     if ((winding_OR_y is String) && (x_OR_y is num) && (path_OR_x is num) && winding == null) {
-      return _blink.BlinkCanvasRenderingContext2D.instance.isPointInPath_Callback_3_(this, path_OR_x, x_OR_y, winding_OR_y);
+      return _blink.BlinkCanvasRenderingContext2D.instance.isPointInPath_Callback_3_(unwrap_jso(this), unwrap_jso(path_OR_x), x_OR_y, unwrap_jso(winding_OR_y));
     }
     if ((winding_OR_y is num) && (x_OR_y is num) && (path_OR_x is Path2D) && winding == null) {
-      return _blink.BlinkCanvasRenderingContext2D.instance.isPointInPath_Callback_3_(this, path_OR_x, x_OR_y, winding_OR_y);
+      return _blink.BlinkCanvasRenderingContext2D.instance.isPointInPath_Callback_3_(unwrap_jso(this), unwrap_jso(path_OR_x), x_OR_y, unwrap_jso(winding_OR_y));
     }
     if ((winding is String) && (winding_OR_y is num) && (x_OR_y is num) && (path_OR_x is Path2D)) {
-      return _blink.BlinkCanvasRenderingContext2D.instance.isPointInPath_Callback_4_(this, path_OR_x, x_OR_y, winding_OR_y, winding);
+      return _blink.BlinkCanvasRenderingContext2D.instance.isPointInPath_Callback_4_(unwrap_jso(this), unwrap_jso(path_OR_x), x_OR_y, unwrap_jso(winding_OR_y), winding);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   bool isPointInStroke(path_OR_x, num x_OR_y, [num y]) {
     if ((x_OR_y is num) && (path_OR_x is num) && y == null) {
-      return _blink.BlinkCanvasRenderingContext2D.instance.isPointInStroke_Callback_2_(this, path_OR_x, x_OR_y);
+      return _blink.BlinkCanvasRenderingContext2D.instance.isPointInStroke_Callback_2_(unwrap_jso(this), unwrap_jso(path_OR_x), x_OR_y);
     }
     if ((y is num) && (x_OR_y is num) && (path_OR_x is Path2D)) {
-      return _blink.BlinkCanvasRenderingContext2D.instance.isPointInStroke_Callback_3_(this, path_OR_x, x_OR_y, y);
+      return _blink.BlinkCanvasRenderingContext2D.instance.isPointInStroke_Callback_3_(unwrap_jso(this), unwrap_jso(path_OR_x), x_OR_y, y);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('CanvasRenderingContext2D.measureText')
   @DocsEditable()
-  TextMetrics measureText(String text) => _blink.BlinkCanvasRenderingContext2D.instance.measureText_Callback_1_(this, text);
-
+  TextMetrics measureText(String text) => wrap_jso(_blink.BlinkCanvasRenderingContext2D.instance.measureText_Callback_1_(unwrap_jso(this), text));
+  
   void putImageData(ImageData imagedata, num dx, num dy, [num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight]) {
     if ((dy is num) && (dx is num) && (imagedata is ImageData) && dirtyX == null && dirtyY == null && dirtyWidth == null && dirtyHeight == null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.putImageData_Callback_3_(this, imagedata, dx, dy);
+      _blink.BlinkCanvasRenderingContext2D.instance.putImageData_Callback_3_(unwrap_jso(this), unwrap_jso(imagedata), dx, dy);
       return;
     }
     if ((dirtyHeight is num) && (dirtyWidth is num) && (dirtyY is num) && (dirtyX is num) && (dy is num) && (dx is num) && (imagedata is ImageData)) {
-      _blink.BlinkCanvasRenderingContext2D.instance.putImageData_Callback_7_(this, imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
+      _blink.BlinkCanvasRenderingContext2D.instance.putImageData_Callback_7_(unwrap_jso(this), unwrap_jso(imagedata), dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2944,53 +2954,53 @@
   @DomName('CanvasRenderingContext2D.removeHitRegion')
   @DocsEditable()
   @Experimental() // untriaged
-  void removeHitRegion(String id) => _blink.BlinkCanvasRenderingContext2D.instance.removeHitRegion_Callback_1_(this, id);
-
+  void removeHitRegion(String id) => _blink.BlinkCanvasRenderingContext2D.instance.removeHitRegion_Callback_1_(unwrap_jso(this), id);
+  
   @DomName('CanvasRenderingContext2D.resetTransform')
   @DocsEditable()
   @Experimental() // untriaged
-  void resetTransform() => _blink.BlinkCanvasRenderingContext2D.instance.resetTransform_Callback_0_(this);
-
+  void resetTransform() => _blink.BlinkCanvasRenderingContext2D.instance.resetTransform_Callback_0_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.restore')
   @DocsEditable()
-  void restore() => _blink.BlinkCanvasRenderingContext2D.instance.restore_Callback_0_(this);
-
+  void restore() => _blink.BlinkCanvasRenderingContext2D.instance.restore_Callback_0_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.rotate')
   @DocsEditable()
-  void rotate(num angle) => _blink.BlinkCanvasRenderingContext2D.instance.rotate_Callback_1_(this, angle);
-
+  void rotate(num angle) => _blink.BlinkCanvasRenderingContext2D.instance.rotate_Callback_1_(unwrap_jso(this), angle);
+  
   @DomName('CanvasRenderingContext2D.save')
   @DocsEditable()
-  void save() => _blink.BlinkCanvasRenderingContext2D.instance.save_Callback_0_(this);
-
+  void save() => _blink.BlinkCanvasRenderingContext2D.instance.save_Callback_0_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.scale')
   @DocsEditable()
-  void scale(num x, num y) => _blink.BlinkCanvasRenderingContext2D.instance.scale_Callback_2_(this, x, y);
-
+  void scale(num x, num y) => _blink.BlinkCanvasRenderingContext2D.instance.scale_Callback_2_(unwrap_jso(this), x, y);
+  
   void scrollPathIntoView([Path2D path]) {
     if (path != null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.scrollPathIntoView_Callback_1_(this, path);
+      _blink.BlinkCanvasRenderingContext2D.instance.scrollPathIntoView_Callback_1_(unwrap_jso(this), unwrap_jso(path));
       return;
     }
-    _blink.BlinkCanvasRenderingContext2D.instance.scrollPathIntoView_Callback_0_(this);
+    _blink.BlinkCanvasRenderingContext2D.instance.scrollPathIntoView_Callback_0_(unwrap_jso(this));
     return;
   }
 
   @DomName('CanvasRenderingContext2D.setLineDash')
   @DocsEditable()
-  void setLineDash(List<num> dash) => _blink.BlinkCanvasRenderingContext2D.instance.setLineDash_Callback_1_(this, dash);
-
+  void setLineDash(List<num> dash) => _blink.BlinkCanvasRenderingContext2D.instance.setLineDash_Callback_1_(unwrap_jso(this), dash);
+  
   @DomName('CanvasRenderingContext2D.setTransform')
   @DocsEditable()
-  void setTransform(num a, num b, num c, num d, num e, num f) => _blink.BlinkCanvasRenderingContext2D.instance.setTransform_Callback_6_(this, a, b, c, d, e, f);
-
+  void setTransform(num a, num b, num c, num d, num e, num f) => _blink.BlinkCanvasRenderingContext2D.instance.setTransform_Callback_6_(unwrap_jso(this), a, b, c, d, e, f);
+  
   void stroke([Path2D path]) {
     if (path == null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.stroke_Callback_0_(this);
+      _blink.BlinkCanvasRenderingContext2D.instance.stroke_Callback_0_(unwrap_jso(this));
       return;
     }
     if ((path is Path2D)) {
-      _blink.BlinkCanvasRenderingContext2D.instance.stroke_Callback_1_(this, path);
+      _blink.BlinkCanvasRenderingContext2D.instance.stroke_Callback_1_(unwrap_jso(this), unwrap_jso(path));
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2998,62 +3008,62 @@
 
   @DomName('CanvasRenderingContext2D.strokeRect')
   @DocsEditable()
-  void strokeRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.instance.strokeRect_Callback_4_(this, x, y, width, height);
-
+  void strokeRect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.instance.strokeRect_Callback_4_(unwrap_jso(this), x, y, width, height);
+  
   void strokeText(String text, num x, num y, [num maxWidth]) {
     if (maxWidth != null) {
-      _blink.BlinkCanvasRenderingContext2D.instance.strokeText_Callback_4_(this, text, x, y, maxWidth);
+      _blink.BlinkCanvasRenderingContext2D.instance.strokeText_Callback_4_(unwrap_jso(this), text, x, y, maxWidth);
       return;
     }
-    _blink.BlinkCanvasRenderingContext2D.instance.strokeText_Callback_3_(this, text, x, y);
+    _blink.BlinkCanvasRenderingContext2D.instance.strokeText_Callback_3_(unwrap_jso(this), text, x, y);
     return;
   }
 
   @DomName('CanvasRenderingContext2D.transform')
   @DocsEditable()
-  void transform(num a, num b, num c, num d, num e, num f) => _blink.BlinkCanvasRenderingContext2D.instance.transform_Callback_6_(this, a, b, c, d, e, f);
-
+  void transform(num a, num b, num c, num d, num e, num f) => _blink.BlinkCanvasRenderingContext2D.instance.transform_Callback_6_(unwrap_jso(this), a, b, c, d, e, f);
+  
   @DomName('CanvasRenderingContext2D.translate')
   @DocsEditable()
-  void translate(num x, num y) => _blink.BlinkCanvasRenderingContext2D.instance.translate_Callback_2_(this, x, y);
-
+  void translate(num x, num y) => _blink.BlinkCanvasRenderingContext2D.instance.translate_Callback_2_(unwrap_jso(this), x, y);
+  
   @DomName('CanvasRenderingContext2D.arc')
   @DocsEditable()
-  void _arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkCanvasRenderingContext2D.instance.arc_Callback_6_(this, x, y, radius, startAngle, endAngle, anticlockwise);
-
+  void _arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkCanvasRenderingContext2D.instance.arc_Callback_6_(unwrap_jso(this), x, y, radius, startAngle, endAngle, anticlockwise);
+  
   @DomName('CanvasRenderingContext2D.arcTo')
   @DocsEditable()
-  void arcTo(num x1, num y1, num x2, num y2, num radius) => _blink.BlinkCanvasRenderingContext2D.instance.arcTo_Callback_5_(this, x1, y1, x2, y2, radius);
-
+  void arcTo(num x1, num y1, num x2, num y2, num radius) => _blink.BlinkCanvasRenderingContext2D.instance.arcTo_Callback_5_(unwrap_jso(this), x1, y1, x2, y2, radius);
+  
   @DomName('CanvasRenderingContext2D.bezierCurveTo')
   @DocsEditable()
-  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) => _blink.BlinkCanvasRenderingContext2D.instance.bezierCurveTo_Callback_6_(this, cp1x, cp1y, cp2x, cp2y, x, y);
-
+  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) => _blink.BlinkCanvasRenderingContext2D.instance.bezierCurveTo_Callback_6_(unwrap_jso(this), cp1x, cp1y, cp2x, cp2y, x, y);
+  
   @DomName('CanvasRenderingContext2D.closePath')
   @DocsEditable()
-  void closePath() => _blink.BlinkCanvasRenderingContext2D.instance.closePath_Callback_0_(this);
-
+  void closePath() => _blink.BlinkCanvasRenderingContext2D.instance.closePath_Callback_0_(unwrap_jso(this));
+  
   @DomName('CanvasRenderingContext2D.ellipse')
   @DocsEditable()
   @Experimental() // untriaged
-  void ellipse(num x, num y, num radiusX, num radiusY, num rotation, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkCanvasRenderingContext2D.instance.ellipse_Callback_8_(this, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
-
+  void ellipse(num x, num y, num radiusX, num radiusY, num rotation, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkCanvasRenderingContext2D.instance.ellipse_Callback_8_(unwrap_jso(this), x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
+  
   @DomName('CanvasRenderingContext2D.lineTo')
   @DocsEditable()
-  void lineTo(num x, num y) => _blink.BlinkCanvasRenderingContext2D.instance.lineTo_Callback_2_(this, x, y);
-
+  void lineTo(num x, num y) => _blink.BlinkCanvasRenderingContext2D.instance.lineTo_Callback_2_(unwrap_jso(this), x, y);
+  
   @DomName('CanvasRenderingContext2D.moveTo')
   @DocsEditable()
-  void moveTo(num x, num y) => _blink.BlinkCanvasRenderingContext2D.instance.moveTo_Callback_2_(this, x, y);
-
+  void moveTo(num x, num y) => _blink.BlinkCanvasRenderingContext2D.instance.moveTo_Callback_2_(unwrap_jso(this), x, y);
+  
   @DomName('CanvasRenderingContext2D.quadraticCurveTo')
   @DocsEditable()
-  void quadraticCurveTo(num cpx, num cpy, num x, num y) => _blink.BlinkCanvasRenderingContext2D.instance.quadraticCurveTo_Callback_4_(this, cpx, cpy, x, y);
-
+  void quadraticCurveTo(num cpx, num cpy, num x, num y) => _blink.BlinkCanvasRenderingContext2D.instance.quadraticCurveTo_Callback_4_(unwrap_jso(this), cpx, cpy, x, y);
+  
   @DomName('CanvasRenderingContext2D.rect')
   @DocsEditable()
-  void rect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.instance.rect_Callback_4_(this, x, y, width, height);
-
+  void rect(num x, num y, num width, num height) => _blink.BlinkCanvasRenderingContext2D.instance.rect_Callback_4_(unwrap_jso(this), x, y, width, height);
+  
 
   /**
    * Sets the color used inside shapes.
@@ -3304,44 +3314,44 @@
 
   @DomName('CharacterData.data')
   @DocsEditable()
-  String get data => _blink.BlinkCharacterData.instance.data_Getter_(this);
-
+  String get data => _blink.BlinkCharacterData.instance.data_Getter_(unwrap_jso(this));
+  
   @DomName('CharacterData.data')
   @DocsEditable()
-  void set data(String value) => _blink.BlinkCharacterData.instance.data_Setter_(this, value);
-
+  void set data(String value) => _blink.BlinkCharacterData.instance.data_Setter_(unwrap_jso(this), value);
+  
   @DomName('CharacterData.length')
   @DocsEditable()
-  int get length => _blink.BlinkCharacterData.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkCharacterData.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('CharacterData.appendData')
   @DocsEditable()
-  void appendData(String data) => _blink.BlinkCharacterData.instance.appendData_Callback_1_(this, data);
-
+  void appendData(String data) => _blink.BlinkCharacterData.instance.appendData_Callback_1_(unwrap_jso(this), data);
+  
   @DomName('CharacterData.deleteData')
   @DocsEditable()
-  void deleteData(int offset, int length) => _blink.BlinkCharacterData.instance.deleteData_Callback_2_(this, offset, length);
-
+  void deleteData(int offset, int length) => _blink.BlinkCharacterData.instance.deleteData_Callback_2_(unwrap_jso(this), offset, length);
+  
   @DomName('CharacterData.insertData')
   @DocsEditable()
-  void insertData(int offset, String data) => _blink.BlinkCharacterData.instance.insertData_Callback_2_(this, offset, data);
-
+  void insertData(int offset, String data) => _blink.BlinkCharacterData.instance.insertData_Callback_2_(unwrap_jso(this), offset, data);
+  
   @DomName('CharacterData.replaceData')
   @DocsEditable()
-  void replaceData(int offset, int length, String data) => _blink.BlinkCharacterData.instance.replaceData_Callback_3_(this, offset, length, data);
-
+  void replaceData(int offset, int length, String data) => _blink.BlinkCharacterData.instance.replaceData_Callback_3_(unwrap_jso(this), offset, length, data);
+  
   @DomName('CharacterData.substringData')
   @DocsEditable()
-  String substringData(int offset, int length) => _blink.BlinkCharacterData.instance.substringData_Callback_2_(this, offset, length);
-
+  String substringData(int offset, int length) => _blink.BlinkCharacterData.instance.substringData_Callback_2_(unwrap_jso(this), offset, length);
+  
   @DomName('CharacterData.nextElementSibling')
   @DocsEditable()
-  Element get nextElementSibling => _blink.BlinkCharacterData.instance.nextElementSibling_Getter_(this);
-
+  Element get nextElementSibling => wrap_jso(_blink.BlinkCharacterData.instance.nextElementSibling_Getter_(unwrap_jso(this)));
+  
   @DomName('CharacterData.previousElementSibling')
   @DocsEditable()
-  Element get previousElementSibling => _blink.BlinkCharacterData.instance.previousElementSibling_Getter_(this);
-
+  Element get previousElementSibling => wrap_jso(_blink.BlinkCharacterData.instance.previousElementSibling_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -3406,18 +3416,18 @@
   @DomName('CircularGeofencingRegion.latitude')
   @DocsEditable()
   @Experimental() // untriaged
-  double get latitude => _blink.BlinkCircularGeofencingRegion.instance.latitude_Getter_(this);
-
+  double get latitude => _blink.BlinkCircularGeofencingRegion.instance.latitude_Getter_(unwrap_jso(this));
+  
   @DomName('CircularGeofencingRegion.longitude')
   @DocsEditable()
   @Experimental() // untriaged
-  double get longitude => _blink.BlinkCircularGeofencingRegion.instance.longitude_Getter_(this);
-
+  double get longitude => _blink.BlinkCircularGeofencingRegion.instance.longitude_Getter_(unwrap_jso(this));
+  
   @DomName('CircularGeofencingRegion.radius')
   @DocsEditable()
   @Experimental() // untriaged
-  double get radius => _blink.BlinkCircularGeofencingRegion.instance.radius_Getter_(this);
-
+  double get radius => _blink.BlinkCircularGeofencingRegion.instance.radius_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -3434,16 +3444,16 @@
 
   @DomName('CloseEvent.code')
   @DocsEditable()
-  int get code => _blink.BlinkCloseEvent.instance.code_Getter_(this);
-
+  int get code => _blink.BlinkCloseEvent.instance.code_Getter_(unwrap_jso(this));
+  
   @DomName('CloseEvent.reason')
   @DocsEditable()
-  String get reason => _blink.BlinkCloseEvent.instance.reason_Getter_(this);
-
+  String get reason => _blink.BlinkCloseEvent.instance.reason_Getter_(unwrap_jso(this));
+  
   @DomName('CloseEvent.wasClean')
   @DocsEditable()
-  bool get wasClean => _blink.BlinkCloseEvent.instance.wasClean_Getter_(this);
-
+  bool get wasClean => _blink.BlinkCloseEvent.instance.wasClean_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -3493,26 +3503,26 @@
   @DomName('CompositionEvent.activeSegmentEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  int get activeSegmentEnd => _blink.BlinkCompositionEvent.instance.activeSegmentEnd_Getter_(this);
-
+  int get activeSegmentEnd => _blink.BlinkCompositionEvent.instance.activeSegmentEnd_Getter_(unwrap_jso(this));
+  
   @DomName('CompositionEvent.activeSegmentStart')
   @DocsEditable()
   @Experimental() // untriaged
-  int get activeSegmentStart => _blink.BlinkCompositionEvent.instance.activeSegmentStart_Getter_(this);
-
+  int get activeSegmentStart => _blink.BlinkCompositionEvent.instance.activeSegmentStart_Getter_(unwrap_jso(this));
+  
   @DomName('CompositionEvent.data')
   @DocsEditable()
-  String get data => _blink.BlinkCompositionEvent.instance.data_Getter_(this);
-
+  String get data => _blink.BlinkCompositionEvent.instance.data_Getter_(unwrap_jso(this));
+  
   @DomName('CompositionEvent.getSegments')
   @DocsEditable()
   @Experimental() // untriaged
-  List<int> getSegments() => _blink.BlinkCompositionEvent.instance.getSegments_Callback_0_(this);
-
+  List<int> getSegments() => _blink.BlinkCompositionEvent.instance.getSegments_Callback_0_(unwrap_jso(this));
+  
   @DomName('CompositionEvent.initCompositionEvent')
   @DocsEditable()
-  void _initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Window viewArg, String dataArg) => _blink.BlinkCompositionEvent.instance.initCompositionEvent_Callback_5_(this, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg);
-
+  void _initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Window viewArg, String dataArg) => _blink.BlinkCompositionEvent.instance.initCompositionEvent_Callback_5_(unwrap_jso(this), typeArg, canBubbleArg, cancelableArg, unwrap_jso(viewArg), dataArg);
+  
 }
 // 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
@@ -3530,8 +3540,8 @@
   @DomName('Console.memory')
   @DocsEditable()
   @Experimental()
-  MemoryInfo get memory => _blink.BlinkConsole.instance.memory_Getter_(this);
-
+  MemoryInfo get memory => wrap_jso(_blink.BlinkConsole.instance.memory_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -3550,118 +3560,118 @@
   @DomName('ConsoleBase.assertCondition')
   @DocsEditable()
   @Experimental() // untriaged
-  void assertCondition(bool condition, Object arg) => _blink.BlinkConsoleBase.instance.assert_Callback_2_(this, condition, arg);
-
+  void assertCondition(bool condition, Object arg) => _blink.BlinkConsoleBase.instance.assert_Callback_2_(unwrap_jso(this), condition, arg);
+  
   @DomName('ConsoleBase.clear')
   @DocsEditable()
   @Experimental() // untriaged
-  void clear(Object arg) => _blink.BlinkConsoleBase.instance.clear_Callback_1_(this, arg);
-
+  void clear(Object arg) => _blink.BlinkConsoleBase.instance.clear_Callback_1_(unwrap_jso(this), arg);
+  
   @DomName('ConsoleBase.count')
   @DocsEditable()
   @Experimental() // untriaged
-  void count(Object arg) => _blink.BlinkConsoleBase.instance.count_Callback_1_(this, arg);
-
+  void count(Object arg) => _blink.BlinkConsoleBase.instance.count_Callback_1_(unwrap_jso(this), arg);
+  
   @DomName('ConsoleBase.debug')
   @DocsEditable()
   @Experimental() // untriaged
-  void debug(Object arg) => _blink.BlinkConsoleBase.instance.debug_Callback_1_(this, arg);
-
+  void debug(Object arg) => _blink.BlinkConsoleBase.instance.debug_Callback_1_(unwrap_jso(this), arg);
+  
   @DomName('ConsoleBase.dir')
   @DocsEditable()
   @Experimental() // untriaged
-  void dir(Object arg) => _blink.BlinkConsoleBase.instance.dir_Callback_1_(this, arg);
-
+  void dir(Object arg) => _blink.BlinkConsoleBase.instance.dir_Callback_1_(unwrap_jso(this), arg);
+  
   @DomName('ConsoleBase.dirxml')
   @DocsEditable()
   @Experimental() // untriaged
-  void dirxml(Object arg) => _blink.BlinkConsoleBase.instance.dirxml_Callback_1_(this, arg);
-
+  void dirxml(Object arg) => _blink.BlinkConsoleBase.instance.dirxml_Callback_1_(unwrap_jso(this), arg);
+  
   @DomName('ConsoleBase.error')
   @DocsEditable()
   @Experimental() // untriaged
-  void error(Object arg) => _blink.BlinkConsoleBase.instance.error_Callback_1_(this, arg);
-
+  void error(Object arg) => _blink.BlinkConsoleBase.instance.error_Callback_1_(unwrap_jso(this), arg);
+  
   @DomName('ConsoleBase.group')
   @DocsEditable()
   @Experimental() // untriaged
-  void group(Object arg) => _blink.BlinkConsoleBase.instance.group_Callback_1_(this, arg);
-
+  void group(Object arg) => _blink.BlinkConsoleBase.instance.group_Callback_1_(unwrap_jso(this), arg);
+  
   @DomName('ConsoleBase.groupCollapsed')
   @DocsEditable()
   @Experimental() // untriaged
-  void groupCollapsed(Object arg) => _blink.BlinkConsoleBase.instance.groupCollapsed_Callback_1_(this, arg);
-
+  void groupCollapsed(Object arg) => _blink.BlinkConsoleBase.instance.groupCollapsed_Callback_1_(unwrap_jso(this), arg);
+  
   @DomName('ConsoleBase.groupEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  void groupEnd() => _blink.BlinkConsoleBase.instance.groupEnd_Callback_0_(this);
-
+  void groupEnd() => _blink.BlinkConsoleBase.instance.groupEnd_Callback_0_(unwrap_jso(this));
+  
   @DomName('ConsoleBase.info')
   @DocsEditable()
   @Experimental() // untriaged
-  void info(Object arg) => _blink.BlinkConsoleBase.instance.info_Callback_1_(this, arg);
-
+  void info(Object arg) => _blink.BlinkConsoleBase.instance.info_Callback_1_(unwrap_jso(this), arg);
+  
   @DomName('ConsoleBase.log')
   @DocsEditable()
   @Experimental() // untriaged
-  void log(Object arg) => _blink.BlinkConsoleBase.instance.log_Callback_1_(this, arg);
-
+  void log(Object arg) => _blink.BlinkConsoleBase.instance.log_Callback_1_(unwrap_jso(this), arg);
+  
   @DomName('ConsoleBase.markTimeline')
   @DocsEditable()
   @Experimental() // untriaged
-  void markTimeline(String title) => _blink.BlinkConsoleBase.instance.markTimeline_Callback_1_(this, title);
-
+  void markTimeline(String title) => _blink.BlinkConsoleBase.instance.markTimeline_Callback_1_(unwrap_jso(this), title);
+  
   @DomName('ConsoleBase.profile')
   @DocsEditable()
   @Experimental() // untriaged
-  void profile(String title) => _blink.BlinkConsoleBase.instance.profile_Callback_1_(this, title);
-
+  void profile(String title) => _blink.BlinkConsoleBase.instance.profile_Callback_1_(unwrap_jso(this), title);
+  
   @DomName('ConsoleBase.profileEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  void profileEnd(String title) => _blink.BlinkConsoleBase.instance.profileEnd_Callback_1_(this, title);
-
+  void profileEnd(String title) => _blink.BlinkConsoleBase.instance.profileEnd_Callback_1_(unwrap_jso(this), title);
+  
   @DomName('ConsoleBase.table')
   @DocsEditable()
   @Experimental() // untriaged
-  void table(Object arg) => _blink.BlinkConsoleBase.instance.table_Callback_1_(this, arg);
-
+  void table(Object arg) => _blink.BlinkConsoleBase.instance.table_Callback_1_(unwrap_jso(this), arg);
+  
   @DomName('ConsoleBase.time')
   @DocsEditable()
   @Experimental() // untriaged
-  void time(String title) => _blink.BlinkConsoleBase.instance.time_Callback_1_(this, title);
-
+  void time(String title) => _blink.BlinkConsoleBase.instance.time_Callback_1_(unwrap_jso(this), title);
+  
   @DomName('ConsoleBase.timeEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  void timeEnd(String title) => _blink.BlinkConsoleBase.instance.timeEnd_Callback_1_(this, title);
-
+  void timeEnd(String title) => _blink.BlinkConsoleBase.instance.timeEnd_Callback_1_(unwrap_jso(this), title);
+  
   @DomName('ConsoleBase.timeStamp')
   @DocsEditable()
   @Experimental() // untriaged
-  void timeStamp(String title) => _blink.BlinkConsoleBase.instance.timeStamp_Callback_1_(this, title);
-
+  void timeStamp(String title) => _blink.BlinkConsoleBase.instance.timeStamp_Callback_1_(unwrap_jso(this), title);
+  
   @DomName('ConsoleBase.timeline')
   @DocsEditable()
   @Experimental() // untriaged
-  void timeline(String title) => _blink.BlinkConsoleBase.instance.timeline_Callback_1_(this, title);
-
+  void timeline(String title) => _blink.BlinkConsoleBase.instance.timeline_Callback_1_(unwrap_jso(this), title);
+  
   @DomName('ConsoleBase.timelineEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  void timelineEnd(String title) => _blink.BlinkConsoleBase.instance.timelineEnd_Callback_1_(this, title);
-
+  void timelineEnd(String title) => _blink.BlinkConsoleBase.instance.timelineEnd_Callback_1_(unwrap_jso(this), title);
+  
   @DomName('ConsoleBase.trace')
   @DocsEditable()
   @Experimental() // untriaged
-  void trace(Object arg) => _blink.BlinkConsoleBase.instance.trace_Callback_1_(this, arg);
-
+  void trace(Object arg) => _blink.BlinkConsoleBase.instance.trace_Callback_1_(unwrap_jso(this), arg);
+  
   @DomName('ConsoleBase.warn')
   @DocsEditable()
   @Experimental() // untriaged
-  void warn(Object arg) => _blink.BlinkConsoleBase.instance.warn_Callback_1_(this, arg);
-
+  void warn(Object arg) => _blink.BlinkConsoleBase.instance.warn_Callback_1_(unwrap_jso(this), arg);
+  
 }
 // 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
@@ -3694,16 +3704,16 @@
 
   @DomName('HTMLContentElement.select')
   @DocsEditable()
-  String get select => _blink.BlinkHTMLContentElement.instance.select_Getter_(this);
-
+  String get select => _blink.BlinkHTMLContentElement.instance.select_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLContentElement.select')
   @DocsEditable()
-  void set select(String value) => _blink.BlinkHTMLContentElement.instance.select_Setter_(this, value);
-
+  void set select(String value) => _blink.BlinkHTMLContentElement.instance.select_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLContentElement.getDistributedNodes')
   @DocsEditable()
-  List<Node> getDistributedNodes() => _blink.BlinkHTMLContentElement.instance.getDistributedNodes_Callback_0_(this);
-
+  List<Node> getDistributedNodes() => wrap_jso_list(_blink.BlinkHTMLContentElement.instance.getDistributedNodes_Callback_0_(unwrap_jso(this)));
+  
 }
 // 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
@@ -3720,32 +3730,32 @@
 
   @DomName('Coordinates.accuracy')
   @DocsEditable()
-  double get accuracy => _blink.BlinkCoordinates.instance.accuracy_Getter_(this);
-
+  double get accuracy => _blink.BlinkCoordinates.instance.accuracy_Getter_(unwrap_jso(this));
+  
   @DomName('Coordinates.altitude')
   @DocsEditable()
-  double get altitude => _blink.BlinkCoordinates.instance.altitude_Getter_(this);
-
+  double get altitude => _blink.BlinkCoordinates.instance.altitude_Getter_(unwrap_jso(this));
+  
   @DomName('Coordinates.altitudeAccuracy')
   @DocsEditable()
-  double get altitudeAccuracy => _blink.BlinkCoordinates.instance.altitudeAccuracy_Getter_(this);
-
+  double get altitudeAccuracy => _blink.BlinkCoordinates.instance.altitudeAccuracy_Getter_(unwrap_jso(this));
+  
   @DomName('Coordinates.heading')
   @DocsEditable()
-  double get heading => _blink.BlinkCoordinates.instance.heading_Getter_(this);
-
+  double get heading => _blink.BlinkCoordinates.instance.heading_Getter_(unwrap_jso(this));
+  
   @DomName('Coordinates.latitude')
   @DocsEditable()
-  double get latitude => _blink.BlinkCoordinates.instance.latitude_Getter_(this);
-
+  double get latitude => _blink.BlinkCoordinates.instance.latitude_Getter_(unwrap_jso(this));
+  
   @DomName('Coordinates.longitude')
   @DocsEditable()
-  double get longitude => _blink.BlinkCoordinates.instance.longitude_Getter_(this);
-
+  double get longitude => _blink.BlinkCoordinates.instance.longitude_Getter_(unwrap_jso(this));
+  
   @DomName('Coordinates.speed')
   @DocsEditable()
-  double get speed => _blink.BlinkCoordinates.instance.speed_Getter_(this);
-
+  double get speed => _blink.BlinkCoordinates.instance.speed_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -3764,18 +3774,18 @@
   @DomName('Credential.avatarURL')
   @DocsEditable()
   @Experimental() // untriaged
-  String get avatarUrl => _blink.BlinkCredential.instance.avatarURL_Getter_(this);
-
+  String get avatarUrl => _blink.BlinkCredential.instance.avatarURL_Getter_(unwrap_jso(this));
+  
   @DomName('Credential.id')
   @DocsEditable()
   @Experimental() // untriaged
-  String get id => _blink.BlinkCredential.instance.id_Getter_(this);
-
+  String get id => _blink.BlinkCredential.instance.id_Getter_(unwrap_jso(this));
+  
   @DomName('Credential.name')
   @DocsEditable()
   @Experimental() // untriaged
-  String get name => _blink.BlinkCredential.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkCredential.instance.name_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -3794,23 +3804,23 @@
   @DomName('CredentialsContainer.notifyFailedSignIn')
   @DocsEditable()
   @Experimental() // untriaged
-  Future notifyFailedSignIn(Credential credential) => _blink.BlinkCredentialsContainer.instance.notifyFailedSignIn_Callback_1_(this, credential);
-
+  Future notifyFailedSignIn(Credential credential) => _blink.BlinkCredentialsContainer.instance.notifyFailedSignIn_Callback_1_(unwrap_jso(this), unwrap_jso(credential));
+  
   @DomName('CredentialsContainer.notifySignedIn')
   @DocsEditable()
   @Experimental() // untriaged
-  Future notifySignedIn(Credential credential) => _blink.BlinkCredentialsContainer.instance.notifySignedIn_Callback_1_(this, credential);
-
+  Future notifySignedIn(Credential credential) => _blink.BlinkCredentialsContainer.instance.notifySignedIn_Callback_1_(unwrap_jso(this), unwrap_jso(credential));
+  
   @DomName('CredentialsContainer.notifySignedOut')
   @DocsEditable()
   @Experimental() // untriaged
-  Future notifySignedOut() => _blink.BlinkCredentialsContainer.instance.notifySignedOut_Callback_0_(this);
-
+  Future notifySignedOut() => _blink.BlinkCredentialsContainer.instance.notifySignedOut_Callback_0_(unwrap_jso(this));
+  
   Future request([Map options]) {
     if (options != null) {
-      return _blink.BlinkCredentialsContainer.instance.request_Callback_1_(this, options);
+      return _blink.BlinkCredentialsContainer.instance.request_Callback_1_(unwrap_jso(this), options);
     }
-    return _blink.BlinkCredentialsContainer.instance.request_Callback_0_(this);
+    return _blink.BlinkCredentialsContainer.instance.request_Callback_0_(unwrap_jso(this));
   }
 
 }
@@ -3837,12 +3847,12 @@
   @DomName('Crypto.subtle')
   @DocsEditable()
   @Experimental() // untriaged
-  _SubtleCrypto get subtle => _blink.BlinkCrypto.instance.subtle_Getter_(this);
-
+  _SubtleCrypto get subtle => wrap_jso(_blink.BlinkCrypto.instance.subtle_Getter_(unwrap_jso(this)));
+  
   @DomName('Crypto.getRandomValues')
   @DocsEditable()
-  TypedData getRandomValues(TypedData array) => _blink.BlinkCrypto.instance.getRandomValues_Callback_1_(this, array);
-
+  TypedData getRandomValues(TypedData array) => _blink.BlinkCrypto.instance.getRandomValues_Callback_1_(unwrap_jso(this), unwrap_jso(array));
+  
 }
 // 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
@@ -3861,23 +3871,23 @@
   @DomName('CryptoKey.algorithm')
   @DocsEditable()
   @Experimental() // untriaged
-  Object get algorithm => _blink.BlinkCryptoKey.instance.algorithm_Getter_(this);
-
+  Object get algorithm => _blink.BlinkCryptoKey.instance.algorithm_Getter_(unwrap_jso(this));
+  
   @DomName('CryptoKey.extractable')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get extractable => _blink.BlinkCryptoKey.instance.extractable_Getter_(this);
-
+  bool get extractable => _blink.BlinkCryptoKey.instance.extractable_Getter_(unwrap_jso(this));
+  
   @DomName('CryptoKey.type')
   @DocsEditable()
   @Experimental() // untriaged
-  String get type => _blink.BlinkCryptoKey.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkCryptoKey.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('CryptoKey.usages')
   @DocsEditable()
   @Experimental() // untriaged
-  List<String> get usages => _blink.BlinkCryptoKey.instance.usages_Getter_(this);
-
+  List<String> get usages => _blink.BlinkCryptoKey.instance.usages_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -3896,12 +3906,12 @@
 
   @DomName('CSS.supports')
   @DocsEditable()
-  bool supports(String property, String value) => _blink.BlinkCSS.instance.supports_Callback_2_(this, property, value);
-
+  bool supports(String property, String value) => _blink.BlinkCSS.instance.supports_Callback_2_(unwrap_jso(this), property, value);
+  
   @DomName('CSS.supportsCondition')
   @DocsEditable()
-  bool supportsCondition(String conditionText) => _blink.BlinkCSS.instance.supports_Callback_1_(this, conditionText);
-
+  bool supportsCondition(String conditionText) => _blink.BlinkCSS.instance.supports_Callback_1_(unwrap_jso(this), conditionText);
+  
 }
 // 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
@@ -3920,12 +3930,12 @@
 
   @DomName('CSSCharsetRule.encoding')
   @DocsEditable()
-  String get encoding => _blink.BlinkCSSCharsetRule.instance.encoding_Getter_(this);
-
+  String get encoding => _blink.BlinkCSSCharsetRule.instance.encoding_Getter_(unwrap_jso(this));
+  
   @DomName('CSSCharsetRule.encoding')
   @DocsEditable()
-  void set encoding(String value) => _blink.BlinkCSSCharsetRule.instance.encoding_Setter_(this, value);
-
+  void set encoding(String value) => _blink.BlinkCSSCharsetRule.instance.encoding_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -3946,8 +3956,8 @@
 
   @DomName('WebKitCSSFilterRule.style')
   @DocsEditable()
-  CssStyleDeclaration get style => _blink.BlinkWebKitCSSFilterRule.instance.style_Getter_(this);
-
+  CssStyleDeclaration get style => wrap_jso(_blink.BlinkWebKitCSSFilterRule.instance.style_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -3964,8 +3974,8 @@
 
   @DomName('CSSFontFaceRule.style')
   @DocsEditable()
-  CssStyleDeclaration get style => _blink.BlinkCSSFontFaceRule.instance.style_Getter_(this);
-
+  CssStyleDeclaration get style => wrap_jso(_blink.BlinkCSSFontFaceRule.instance.style_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -3982,16 +3992,16 @@
 
   @DomName('CSSImportRule.href')
   @DocsEditable()
-  String get href => _blink.BlinkCSSImportRule.instance.href_Getter_(this);
-
+  String get href => _blink.BlinkCSSImportRule.instance.href_Getter_(unwrap_jso(this));
+  
   @DomName('CSSImportRule.media')
   @DocsEditable()
-  MediaList get media => _blink.BlinkCSSImportRule.instance.media_Getter_(this);
-
+  MediaList get media => wrap_jso(_blink.BlinkCSSImportRule.instance.media_Getter_(unwrap_jso(this)));
+  
   @DomName('CSSImportRule.styleSheet')
   @DocsEditable()
-  CssStyleSheet get styleSheet => _blink.BlinkCSSImportRule.instance.styleSheet_Getter_(this);
-
+  CssStyleSheet get styleSheet => wrap_jso(_blink.BlinkCSSImportRule.instance.styleSheet_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -4010,18 +4020,18 @@
   @DomName('CSSKeyframeRule.keyText')
   @DocsEditable()
   @Experimental() // untriaged
-  String get keyText => _blink.BlinkCSSKeyframeRule.instance.keyText_Getter_(this);
-
+  String get keyText => _blink.BlinkCSSKeyframeRule.instance.keyText_Getter_(unwrap_jso(this));
+  
   @DomName('CSSKeyframeRule.keyText')
   @DocsEditable()
   @Experimental() // untriaged
-  void set keyText(String value) => _blink.BlinkCSSKeyframeRule.instance.keyText_Setter_(this, value);
-
+  void set keyText(String value) => _blink.BlinkCSSKeyframeRule.instance.keyText_Setter_(unwrap_jso(this), value);
+  
   @DomName('CSSKeyframeRule.style')
   @DocsEditable()
   @Experimental() // untriaged
-  CssStyleDeclaration get style => _blink.BlinkCSSKeyframeRule.instance.style_Getter_(this);
-
+  CssStyleDeclaration get style => wrap_jso(_blink.BlinkCSSKeyframeRule.instance.style_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -4040,38 +4050,38 @@
   @DomName('CSSKeyframesRule.cssRules')
   @DocsEditable()
   @Experimental() // untriaged
-  List<CssRule> get cssRules => _blink.BlinkCSSKeyframesRule.instance.cssRules_Getter_(this);
-
+  List<CssRule> get cssRules => wrap_jso_list(_blink.BlinkCSSKeyframesRule.instance.cssRules_Getter_(unwrap_jso(this)));
+  
   @DomName('CSSKeyframesRule.name')
   @DocsEditable()
   @Experimental() // untriaged
-  String get name => _blink.BlinkCSSKeyframesRule.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkCSSKeyframesRule.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('CSSKeyframesRule.name')
   @DocsEditable()
   @Experimental() // untriaged
-  void set name(String value) => _blink.BlinkCSSKeyframesRule.instance.name_Setter_(this, value);
-
+  void set name(String value) => _blink.BlinkCSSKeyframesRule.instance.name_Setter_(unwrap_jso(this), value);
+  
   @DomName('CSSKeyframesRule.__getter__')
   @DocsEditable()
   @Experimental() // untriaged
-  CssKeyframeRule __getter__(int index) => _blink.BlinkCSSKeyframesRule.instance.$__getter___Callback_1_(this, index);
-
+  CssKeyframeRule __getter__(int index) => _blink.BlinkCSSKeyframesRule.instance.$__getter___Callback_1_(unwrap_jso(this), index);
+  
   @DomName('CSSKeyframesRule.deleteRule')
   @DocsEditable()
   @Experimental() // untriaged
-  void deleteRule(String key) => _blink.BlinkCSSKeyframesRule.instance.deleteRule_Callback_1_(this, key);
-
+  void deleteRule(String key) => _blink.BlinkCSSKeyframesRule.instance.deleteRule_Callback_1_(unwrap_jso(this), key);
+  
   @DomName('CSSKeyframesRule.findRule')
   @DocsEditable()
   @Experimental() // untriaged
-  CssKeyframeRule findRule(String key) => _blink.BlinkCSSKeyframesRule.instance.findRule_Callback_1_(this, key);
-
+  CssKeyframeRule findRule(String key) => _blink.BlinkCSSKeyframesRule.instance.findRule_Callback_1_(unwrap_jso(this), key);
+  
   @DomName('CSSKeyframesRule.insertRule')
   @DocsEditable()
   @Experimental() // untriaged
-  void appendRule(String rule) => _blink.BlinkCSSKeyframesRule.instance.insertRule_Callback_1_(this, rule);
-
+  void appendRule(String rule) => _blink.BlinkCSSKeyframesRule.instance.insertRule_Callback_1_(unwrap_jso(this), rule);
+  
 }
 // 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
@@ -4088,20 +4098,20 @@
 
   @DomName('CSSMediaRule.cssRules')
   @DocsEditable()
-  List<CssRule> get cssRules => _blink.BlinkCSSMediaRule.instance.cssRules_Getter_(this);
-
+  List<CssRule> get cssRules => wrap_jso_list(_blink.BlinkCSSMediaRule.instance.cssRules_Getter_(unwrap_jso(this)));
+  
   @DomName('CSSMediaRule.media')
   @DocsEditable()
-  MediaList get media => _blink.BlinkCSSMediaRule.instance.media_Getter_(this);
-
+  MediaList get media => wrap_jso(_blink.BlinkCSSMediaRule.instance.media_Getter_(unwrap_jso(this)));
+  
   @DomName('CSSMediaRule.deleteRule')
   @DocsEditable()
-  void deleteRule(int index) => _blink.BlinkCSSMediaRule.instance.deleteRule_Callback_1_(this, index);
-
+  void deleteRule(int index) => _blink.BlinkCSSMediaRule.instance.deleteRule_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('CSSMediaRule.insertRule')
   @DocsEditable()
-  int insertRule(String rule, int index) => _blink.BlinkCSSMediaRule.instance.insertRule_Callback_2_(this, rule, index);
-
+  int insertRule(String rule, int index) => _blink.BlinkCSSMediaRule.instance.insertRule_Callback_2_(unwrap_jso(this), rule, index);
+  
 }
 // 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
@@ -4118,16 +4128,16 @@
 
   @DomName('CSSPageRule.selectorText')
   @DocsEditable()
-  String get selectorText => _blink.BlinkCSSPageRule.instance.selectorText_Getter_(this);
-
+  String get selectorText => _blink.BlinkCSSPageRule.instance.selectorText_Getter_(unwrap_jso(this));
+  
   @DomName('CSSPageRule.selectorText')
   @DocsEditable()
-  void set selectorText(String value) => _blink.BlinkCSSPageRule.instance.selectorText_Setter_(this, value);
-
+  void set selectorText(String value) => _blink.BlinkCSSPageRule.instance.selectorText_Setter_(unwrap_jso(this), value);
+  
   @DomName('CSSPageRule.style')
   @DocsEditable()
-  CssStyleDeclaration get style => _blink.BlinkCSSPageRule.instance.style_Getter_(this);
-
+  CssStyleDeclaration get style => wrap_jso(_blink.BlinkCSSPageRule.instance.style_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -4205,24 +4215,24 @@
 
   @DomName('CSSRule.cssText')
   @DocsEditable()
-  String get cssText => _blink.BlinkCSSRule.instance.cssText_Getter_(this);
-
+  String get cssText => _blink.BlinkCSSRule.instance.cssText_Getter_(unwrap_jso(this));
+  
   @DomName('CSSRule.cssText')
   @DocsEditable()
-  void set cssText(String value) => _blink.BlinkCSSRule.instance.cssText_Setter_(this, value);
-
+  void set cssText(String value) => _blink.BlinkCSSRule.instance.cssText_Setter_(unwrap_jso(this), value);
+  
   @DomName('CSSRule.parentRule')
   @DocsEditable()
-  CssRule get parentRule => _blink.BlinkCSSRule.instance.parentRule_Getter_(this);
-
+  CssRule get parentRule => wrap_jso(_blink.BlinkCSSRule.instance.parentRule_Getter_(unwrap_jso(this)));
+  
   @DomName('CSSRule.parentStyleSheet')
   @DocsEditable()
-  CssStyleSheet get parentStyleSheet => _blink.BlinkCSSRule.instance.parentStyleSheet_Getter_(this);
-
+  CssStyleSheet get parentStyleSheet => wrap_jso(_blink.BlinkCSSRule.instance.parentStyleSheet_Getter_(unwrap_jso(this)));
+  
   @DomName('CSSRule.type')
   @DocsEditable()
-  int get type => _blink.BlinkCSSRule.instance.type_Getter_(this);
-
+  int get type => _blink.BlinkCSSRule.instance.type_Getter_(unwrap_jso(this));
+  
 }
 
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
@@ -4329,54 +4339,54 @@
 
   @DomName('CSSStyleDeclaration.cssText')
   @DocsEditable()
-  String get cssText => _blink.BlinkCSSStyleDeclaration.instance.cssText_Getter_(this);
-
+  String get cssText => _blink.BlinkCSSStyleDeclaration.instance.cssText_Getter_(unwrap_jso(this));
+  
   @DomName('CSSStyleDeclaration.cssText')
   @DocsEditable()
-  void set cssText(String value) => _blink.BlinkCSSStyleDeclaration.instance.cssText_Setter_(this, value);
-
+  void set cssText(String value) => _blink.BlinkCSSStyleDeclaration.instance.cssText_Setter_(unwrap_jso(this), value);
+  
   @DomName('CSSStyleDeclaration.length')
   @DocsEditable()
-  int get length => _blink.BlinkCSSStyleDeclaration.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkCSSStyleDeclaration.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('CSSStyleDeclaration.parentRule')
   @DocsEditable()
-  CssRule get parentRule => _blink.BlinkCSSStyleDeclaration.instance.parentRule_Getter_(this);
-
+  CssRule get parentRule => wrap_jso(_blink.BlinkCSSStyleDeclaration.instance.parentRule_Getter_(unwrap_jso(this)));
+  
   @DomName('CSSStyleDeclaration.__getter__')
   @DocsEditable()
   @Experimental() // untriaged
-  Object __getter__(String name) => _blink.BlinkCSSStyleDeclaration.instance.$__getter___Callback_1_(this, name);
-
+  Object __getter__(String name) => wrap_jso(_blink.BlinkCSSStyleDeclaration.instance.$__getter___Callback_1_(unwrap_jso(this), name));
+  
   @DomName('CSSStyleDeclaration.__propertyQuery__')
   @DocsEditable()
   @Experimental() // untriaged
-  bool __propertyQuery__(String name) => _blink.BlinkCSSStyleDeclaration.instance.$__propertyQuery___Callback_1_(this, name);
-
+  bool __propertyQuery__(String name) => _blink.BlinkCSSStyleDeclaration.instance.$__propertyQuery___Callback_1_(unwrap_jso(this), name);
+  
   @DomName('CSSStyleDeclaration.__setter__')
   @DocsEditable()
-  void __setter__(String propertyName, String propertyValue) => _blink.BlinkCSSStyleDeclaration.instance.$__setter___Callback_2_(this, propertyName, propertyValue);
-
+  void __setter__(String propertyName, String propertyValue) => _blink.BlinkCSSStyleDeclaration.instance.$__setter___Callback_2_(unwrap_jso(this), propertyName, propertyValue);
+  
   @DomName('CSSStyleDeclaration.getPropertyPriority')
   @DocsEditable()
-  String getPropertyPriority(String propertyName) => _blink.BlinkCSSStyleDeclaration.instance.getPropertyPriority_Callback_1_(this, propertyName);
-
+  String getPropertyPriority(String propertyName) => _blink.BlinkCSSStyleDeclaration.instance.getPropertyPriority_Callback_1_(unwrap_jso(this), propertyName);
+  
   @DomName('CSSStyleDeclaration.getPropertyValue')
   @DocsEditable()
-  String _getPropertyValue(String propertyName) => _blink.BlinkCSSStyleDeclaration.instance.getPropertyValue_Callback_1_(this, propertyName);
-
+  String _getPropertyValue(String propertyName) => _blink.BlinkCSSStyleDeclaration.instance.getPropertyValue_Callback_1_(unwrap_jso(this), propertyName);
+  
   @DomName('CSSStyleDeclaration.item')
   @DocsEditable()
-  String item(int index) => _blink.BlinkCSSStyleDeclaration.instance.item_Callback_1_(this, index);
-
+  String item(int index) => _blink.BlinkCSSStyleDeclaration.instance.item_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('CSSStyleDeclaration.removeProperty')
   @DocsEditable()
-  String removeProperty(String propertyName) => _blink.BlinkCSSStyleDeclaration.instance.removeProperty_Callback_1_(this, propertyName);
-
+  String removeProperty(String propertyName) => _blink.BlinkCSSStyleDeclaration.instance.removeProperty_Callback_1_(unwrap_jso(this), propertyName);
+  
   @DomName('CSSStyleDeclaration.setProperty')
   @DocsEditable()
-  void _setProperty(String propertyName, String value, String priority) => _blink.BlinkCSSStyleDeclaration.instance.setProperty_Callback_3_(this, propertyName, value, priority);
-
+  void _setProperty(String propertyName, String value, String priority) => _blink.BlinkCSSStyleDeclaration.instance.setProperty_Callback_3_(unwrap_jso(this), propertyName, value, priority);
+  
 }
 
 class _CssStyleDeclarationSet extends Object with CssStyleDeclarationBase {
@@ -7509,16 +7519,16 @@
 
   @DomName('CSSStyleRule.selectorText')
   @DocsEditable()
-  String get selectorText => _blink.BlinkCSSStyleRule.instance.selectorText_Getter_(this);
-
+  String get selectorText => _blink.BlinkCSSStyleRule.instance.selectorText_Getter_(unwrap_jso(this));
+  
   @DomName('CSSStyleRule.selectorText')
   @DocsEditable()
-  void set selectorText(String value) => _blink.BlinkCSSStyleRule.instance.selectorText_Setter_(this, value);
-
+  void set selectorText(String value) => _blink.BlinkCSSStyleRule.instance.selectorText_Setter_(unwrap_jso(this), value);
+  
   @DomName('CSSStyleRule.style')
   @DocsEditable()
-  CssStyleDeclaration get style => _blink.BlinkCSSStyleRule.instance.style_Getter_(this);
-
+  CssStyleDeclaration get style => wrap_jso(_blink.BlinkCSSStyleRule.instance.style_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -7535,40 +7545,40 @@
 
   @DomName('CSSStyleSheet.cssRules')
   @DocsEditable()
-  List<CssRule> get cssRules => _blink.BlinkCSSStyleSheet.instance.cssRules_Getter_(this);
-
+  List<CssRule> get cssRules => wrap_jso_list(_blink.BlinkCSSStyleSheet.instance.cssRules_Getter_(unwrap_jso(this)));
+  
   @DomName('CSSStyleSheet.ownerRule')
   @DocsEditable()
-  CssRule get ownerRule => _blink.BlinkCSSStyleSheet.instance.ownerRule_Getter_(this);
-
+  CssRule get ownerRule => wrap_jso(_blink.BlinkCSSStyleSheet.instance.ownerRule_Getter_(unwrap_jso(this)));
+  
   @DomName('CSSStyleSheet.rules')
   @DocsEditable()
   @Experimental() // non-standard
-  List<CssRule> get rules => _blink.BlinkCSSStyleSheet.instance.rules_Getter_(this);
-
+  List<CssRule> get rules => wrap_jso_list(_blink.BlinkCSSStyleSheet.instance.rules_Getter_(unwrap_jso(this)));
+  
   int addRule(String selector, String style, [int index]) {
     if (index != null) {
-      return _blink.BlinkCSSStyleSheet.instance.addRule_Callback_3_(this, selector, style, index);
+      return _blink.BlinkCSSStyleSheet.instance.addRule_Callback_3_(unwrap_jso(this), selector, style, index);
     }
-    return _blink.BlinkCSSStyleSheet.instance.addRule_Callback_2_(this, selector, style);
+    return _blink.BlinkCSSStyleSheet.instance.addRule_Callback_2_(unwrap_jso(this), selector, style);
   }
 
   @DomName('CSSStyleSheet.deleteRule')
   @DocsEditable()
-  void deleteRule(int index) => _blink.BlinkCSSStyleSheet.instance.deleteRule_Callback_1_(this, index);
-
+  void deleteRule(int index) => _blink.BlinkCSSStyleSheet.instance.deleteRule_Callback_1_(unwrap_jso(this), index);
+  
   int insertRule(String rule, [int index]) {
     if (index != null) {
-      return _blink.BlinkCSSStyleSheet.instance.insertRule_Callback_2_(this, rule, index);
+      return _blink.BlinkCSSStyleSheet.instance.insertRule_Callback_2_(unwrap_jso(this), rule, index);
     }
-    return _blink.BlinkCSSStyleSheet.instance.insertRule_Callback_1_(this, rule);
+    return _blink.BlinkCSSStyleSheet.instance.insertRule_Callback_1_(unwrap_jso(this), rule);
   }
 
   @DomName('CSSStyleSheet.removeRule')
   @DocsEditable()
   @Experimental() // non-standard
-  void removeRule(int index) => _blink.BlinkCSSStyleSheet.instance.removeRule_Callback_1_(this, index);
-
+  void removeRule(int index) => _blink.BlinkCSSStyleSheet.instance.removeRule_Callback_1_(unwrap_jso(this), index);
+  
 }
 // 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
@@ -7585,20 +7595,20 @@
 
   @DomName('CSSSupportsRule.conditionText')
   @DocsEditable()
-  String get conditionText => _blink.BlinkCSSSupportsRule.instance.conditionText_Getter_(this);
-
+  String get conditionText => _blink.BlinkCSSSupportsRule.instance.conditionText_Getter_(unwrap_jso(this));
+  
   @DomName('CSSSupportsRule.cssRules')
   @DocsEditable()
-  List<CssRule> get cssRules => _blink.BlinkCSSSupportsRule.instance.cssRules_Getter_(this);
-
+  List<CssRule> get cssRules => wrap_jso_list(_blink.BlinkCSSSupportsRule.instance.cssRules_Getter_(unwrap_jso(this)));
+  
   @DomName('CSSSupportsRule.deleteRule')
   @DocsEditable()
-  void deleteRule(int index) => _blink.BlinkCSSSupportsRule.instance.deleteRule_Callback_1_(this, index);
-
+  void deleteRule(int index) => _blink.BlinkCSSSupportsRule.instance.deleteRule_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('CSSSupportsRule.insertRule')
   @DocsEditable()
-  int insertRule(String rule, int index) => _blink.BlinkCSSSupportsRule.instance.insertRule_Callback_2_(this, rule, index);
-
+  int insertRule(String rule, int index) => _blink.BlinkCSSSupportsRule.instance.insertRule_Callback_2_(unwrap_jso(this), rule, index);
+  
 }
 // 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
@@ -7617,8 +7627,8 @@
   @DomName('CSSViewportRule.style')
   @DocsEditable()
   @Experimental() // untriaged
-  CssStyleDeclaration get style => _blink.BlinkCSSViewportRule.instance.style_Getter_(this);
-
+  CssStyleDeclaration get style => wrap_jso(_blink.BlinkCSSViewportRule.instance.style_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -7665,12 +7675,12 @@
 
   @DomName('CustomEvent.detail')
   @DocsEditable()
-  Object get _detail => _blink.BlinkCustomEvent.instance.detail_Getter_(this);
-
+  Object get _detail => _blink.BlinkCustomEvent.instance.detail_Getter_(unwrap_jso(this));
+  
   @DomName('CustomEvent.initCustomEvent')
   @DocsEditable()
-  void _initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg) => _blink.BlinkCustomEvent.instance.initCustomEvent_Callback_4_(this, typeArg, canBubbleArg, cancelableArg, detailArg);
-
+  void _initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg) => _blink.BlinkCustomEvent.instance.initCustomEvent_Callback_4_(unwrap_jso(this), typeArg, canBubbleArg, cancelableArg, detailArg);
+  
 }
 // 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
@@ -7728,8 +7738,8 @@
 
   @DomName('HTMLDataListElement.options')
   @DocsEditable()
-  List<Node> get options => _blink.BlinkHTMLDataListElement.instance.options_Getter_(this);
-
+  List<Node> get options => wrap_jso_list(_blink.BlinkHTMLDataListElement.instance.options_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -7748,62 +7758,62 @@
   @DomName('DataTransfer.dropEffect')
   @DocsEditable()
   @Experimental() // untriaged
-  String get dropEffect => _blink.BlinkDataTransfer.instance.dropEffect_Getter_(this);
-
+  String get dropEffect => _blink.BlinkDataTransfer.instance.dropEffect_Getter_(unwrap_jso(this));
+  
   @DomName('DataTransfer.dropEffect')
   @DocsEditable()
   @Experimental() // untriaged
-  void set dropEffect(String value) => _blink.BlinkDataTransfer.instance.dropEffect_Setter_(this, value);
-
+  void set dropEffect(String value) => _blink.BlinkDataTransfer.instance.dropEffect_Setter_(unwrap_jso(this), value);
+  
   @DomName('DataTransfer.effectAllowed')
   @DocsEditable()
   @Experimental() // untriaged
-  String get effectAllowed => _blink.BlinkDataTransfer.instance.effectAllowed_Getter_(this);
-
+  String get effectAllowed => _blink.BlinkDataTransfer.instance.effectAllowed_Getter_(unwrap_jso(this));
+  
   @DomName('DataTransfer.effectAllowed')
   @DocsEditable()
   @Experimental() // untriaged
-  void set effectAllowed(String value) => _blink.BlinkDataTransfer.instance.effectAllowed_Setter_(this, value);
-
+  void set effectAllowed(String value) => _blink.BlinkDataTransfer.instance.effectAllowed_Setter_(unwrap_jso(this), value);
+  
   @DomName('DataTransfer.files')
   @DocsEditable()
   @Experimental() // untriaged
-  List<File> get files => _blink.BlinkDataTransfer.instance.files_Getter_(this);
-
+  List<File> get files => wrap_jso_list(_blink.BlinkDataTransfer.instance.files_Getter_(unwrap_jso(this)));
+  
   @DomName('DataTransfer.items')
   @DocsEditable()
   @Experimental() // untriaged
-  DataTransferItemList get items => _blink.BlinkDataTransfer.instance.items_Getter_(this);
-
+  DataTransferItemList get items => wrap_jso(_blink.BlinkDataTransfer.instance.items_Getter_(unwrap_jso(this)));
+  
   @DomName('DataTransfer.types')
   @DocsEditable()
   @Experimental() // untriaged
-  List<String> get types => _blink.BlinkDataTransfer.instance.types_Getter_(this);
-
+  List<String> get types => _blink.BlinkDataTransfer.instance.types_Getter_(unwrap_jso(this));
+  
   void clearData([String type]) {
     if (type != null) {
-      _blink.BlinkDataTransfer.instance.clearData_Callback_1_(this, type);
+      _blink.BlinkDataTransfer.instance.clearData_Callback_1_(unwrap_jso(this), type);
       return;
     }
-    _blink.BlinkDataTransfer.instance.clearData_Callback_0_(this);
+    _blink.BlinkDataTransfer.instance.clearData_Callback_0_(unwrap_jso(this));
     return;
   }
 
   @DomName('DataTransfer.getData')
   @DocsEditable()
   @Experimental() // untriaged
-  String getData(String type) => _blink.BlinkDataTransfer.instance.getData_Callback_1_(this, type);
-
+  String getData(String type) => _blink.BlinkDataTransfer.instance.getData_Callback_1_(unwrap_jso(this), type);
+  
   @DomName('DataTransfer.setData')
   @DocsEditable()
   @Experimental() // untriaged
-  void setData(String type, String data) => _blink.BlinkDataTransfer.instance.setData_Callback_2_(this, type, data);
-
+  void setData(String type, String data) => _blink.BlinkDataTransfer.instance.setData_Callback_2_(unwrap_jso(this), type, data);
+  
   @DomName('DataTransfer.setDragImage')
   @DocsEditable()
   @Experimental() // untriaged
-  void setDragImage(Element image, int x, int y) => _blink.BlinkDataTransfer.instance.setDragImage_Callback_3_(this, image, x, y);
-
+  void setDragImage(Element image, int x, int y) => _blink.BlinkDataTransfer.instance.setDragImage_Callback_3_(unwrap_jso(this), unwrap_jso(image), x, y);
+  
 }
 // 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
@@ -7822,20 +7832,20 @@
 
   @DomName('DataTransferItem.kind')
   @DocsEditable()
-  String get kind => _blink.BlinkDataTransferItem.instance.kind_Getter_(this);
-
+  String get kind => _blink.BlinkDataTransferItem.instance.kind_Getter_(unwrap_jso(this));
+  
   @DomName('DataTransferItem.type')
   @DocsEditable()
-  String get type => _blink.BlinkDataTransferItem.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkDataTransferItem.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('DataTransferItem.getAsFile')
   @DocsEditable()
-  Blob getAsFile() => _blink.BlinkDataTransferItem.instance.getAsFile_Callback_0_(this);
-
+  Blob getAsFile() => wrap_jso(_blink.BlinkDataTransferItem.instance.getAsFile_Callback_0_(unwrap_jso(this)));
+  
   @DomName('DataTransferItem.getAsString')
   @DocsEditable()
-  void _getAsString(_StringCallback callback) => _blink.BlinkDataTransferItem.instance.getAsString_Callback_1_(this, callback);
-
+  void _getAsString(_StringCallback callback) => _blink.BlinkDataTransferItem.instance.getAsString_Callback_1_(unwrap_jso(this), unwrap_jso(callback));
+  
   Future<String> getAsString() {
     var completer = new Completer<String>();
     _getAsString(
@@ -7848,8 +7858,8 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  Entry getAsEntry() => _blink.BlinkDataTransferItem.instance.webkitGetAsEntry_Callback_0_(this);
-
+  Entry getAsEntry() => wrap_jso(_blink.BlinkDataTransferItem.instance.webkitGetAsEntry_Callback_0_(unwrap_jso(this)));
+  
 }
 // 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
@@ -7866,40 +7876,40 @@
 
   @DomName('DataTransferItemList.length')
   @DocsEditable()
-  int get length => _blink.BlinkDataTransferItemList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkDataTransferItemList.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('DataTransferItemList.__getter__')
   @DocsEditable()
   @Experimental() // untriaged
-  DataTransferItem __getter__(int index) => _blink.BlinkDataTransferItemList.instance.$__getter___Callback_1_(this, index);
-
+  DataTransferItem __getter__(int index) => wrap_jso(_blink.BlinkDataTransferItemList.instance.$__getter___Callback_1_(unwrap_jso(this), index));
+  
   DataTransferItem add(data_OR_file, [String type]) {
     if ((type is String) && (data_OR_file is String)) {
-      return _blink.BlinkDataTransferItemList.instance.add_Callback_2_(this, data_OR_file, type);
+      return wrap_jso(_blink.BlinkDataTransferItemList.instance.add_Callback_2_(unwrap_jso(this), unwrap_jso(data_OR_file), type));
     }
     if ((data_OR_file is File || data_OR_file == null) && type == null) {
-      return _blink.BlinkDataTransferItemList.instance.add_Callback_1_(this, data_OR_file);
+      return wrap_jso(_blink.BlinkDataTransferItemList.instance.add_Callback_1_(unwrap_jso(this), unwrap_jso(data_OR_file)));
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('DataTransferItemList.addData')
   @DocsEditable()
-  DataTransferItem addData(String data, String type) => _blink.BlinkDataTransferItemList.instance.add_Callback_2_(this, data, type);
-
+  DataTransferItem addData(String data, String type) => wrap_jso(_blink.BlinkDataTransferItemList.instance.add_Callback_2_(unwrap_jso(this), data, type));
+  
   @DomName('DataTransferItemList.addFile')
   @DocsEditable()
-  DataTransferItem addFile(File file) => _blink.BlinkDataTransferItemList.instance.add_Callback_1_(this, file);
-
+  DataTransferItem addFile(File file) => wrap_jso(_blink.BlinkDataTransferItemList.instance.add_Callback_1_(unwrap_jso(this), unwrap_jso(file)));
+  
   @DomName('DataTransferItemList.clear')
   @DocsEditable()
-  void clear() => _blink.BlinkDataTransferItemList.instance.clear_Callback_0_(this);
-
+  void clear() => _blink.BlinkDataTransferItemList.instance.clear_Callback_0_(unwrap_jso(this));
+  
   @DomName('DataTransferItemList.remove')
   @DocsEditable()
   @Experimental() // untriaged
-  void remove(int index) => _blink.BlinkDataTransferItemList.instance.remove_Callback_1_(this, index);
-
+  void remove(int index) => _blink.BlinkDataTransferItemList.instance.remove_Callback_1_(unwrap_jso(this), index);
+  
 
   DataTransferItem operator[] (int index) {
     return __getter__(index);
@@ -7945,8 +7955,8 @@
   @DomName('DedicatedWorkerGlobalScope.postMessage')
   @DocsEditable()
   @Experimental() // untriaged
-  void postMessage(Object message, [List<MessagePort> transfer]) => _blink.BlinkDedicatedWorkerGlobalScope.instance.postMessage_Callback_2_(this, message, transfer);
-
+  void postMessage(Object message, [List<MessagePort> transfer]) => _blink.BlinkDedicatedWorkerGlobalScope.instance.postMessage_Callback_2_(unwrap_jso(this), message, transfer);
+  
   /// Stream of `message` events handled by this [DedicatedWorkerGlobalScope].
   @DomName('DedicatedWorkerGlobalScope.onmessage')
   @DocsEditable()
@@ -7980,27 +7990,27 @@
 
   void queryUsageAndQuota(int storageType, [StorageUsageCallback usageCallback, StorageErrorCallback errorCallback]) {
     if (errorCallback != null) {
-      _blink.BlinkDeprecatedStorageInfo.instance.queryUsageAndQuota_Callback_3_(this, storageType, usageCallback, errorCallback);
+      _blink.BlinkDeprecatedStorageInfo.instance.queryUsageAndQuota_Callback_3_(unwrap_jso(this), storageType, unwrap_jso(usageCallback), unwrap_jso(errorCallback));
       return;
     }
     if (usageCallback != null) {
-      _blink.BlinkDeprecatedStorageInfo.instance.queryUsageAndQuota_Callback_2_(this, storageType, usageCallback);
+      _blink.BlinkDeprecatedStorageInfo.instance.queryUsageAndQuota_Callback_2_(unwrap_jso(this), storageType, unwrap_jso(usageCallback));
       return;
     }
-    _blink.BlinkDeprecatedStorageInfo.instance.queryUsageAndQuota_Callback_1_(this, storageType);
+    _blink.BlinkDeprecatedStorageInfo.instance.queryUsageAndQuota_Callback_1_(unwrap_jso(this), storageType);
     return;
   }
 
   void requestQuota(int storageType, int newQuotaInBytes, [StorageQuotaCallback quotaCallback, StorageErrorCallback errorCallback]) {
     if (errorCallback != null) {
-      _blink.BlinkDeprecatedStorageInfo.instance.requestQuota_Callback_4_(this, storageType, newQuotaInBytes, quotaCallback, errorCallback);
+      _blink.BlinkDeprecatedStorageInfo.instance.requestQuota_Callback_4_(unwrap_jso(this), storageType, newQuotaInBytes, unwrap_jso(quotaCallback), unwrap_jso(errorCallback));
       return;
     }
     if (quotaCallback != null) {
-      _blink.BlinkDeprecatedStorageInfo.instance.requestQuota_Callback_3_(this, storageType, newQuotaInBytes, quotaCallback);
+      _blink.BlinkDeprecatedStorageInfo.instance.requestQuota_Callback_3_(unwrap_jso(this), storageType, newQuotaInBytes, unwrap_jso(quotaCallback));
       return;
     }
-    _blink.BlinkDeprecatedStorageInfo.instance.requestQuota_Callback_2_(this, storageType, newQuotaInBytes);
+    _blink.BlinkDeprecatedStorageInfo.instance.requestQuota_Callback_2_(unwrap_jso(this), storageType, newQuotaInBytes);
     return;
   }
 
@@ -8021,23 +8031,23 @@
 
   void queryUsageAndQuota(StorageUsageCallback usageCallback, [StorageErrorCallback errorCallback]) {
     if (errorCallback != null) {
-      _blink.BlinkDeprecatedStorageQuota.instance.queryUsageAndQuota_Callback_2_(this, usageCallback, errorCallback);
+      _blink.BlinkDeprecatedStorageQuota.instance.queryUsageAndQuota_Callback_2_(unwrap_jso(this), unwrap_jso(usageCallback), unwrap_jso(errorCallback));
       return;
     }
-    _blink.BlinkDeprecatedStorageQuota.instance.queryUsageAndQuota_Callback_1_(this, usageCallback);
+    _blink.BlinkDeprecatedStorageQuota.instance.queryUsageAndQuota_Callback_1_(unwrap_jso(this), unwrap_jso(usageCallback));
     return;
   }
 
   void requestQuota(int newQuotaInBytes, [StorageQuotaCallback quotaCallback, StorageErrorCallback errorCallback]) {
     if (errorCallback != null) {
-      _blink.BlinkDeprecatedStorageQuota.instance.requestQuota_Callback_3_(this, newQuotaInBytes, quotaCallback, errorCallback);
+      _blink.BlinkDeprecatedStorageQuota.instance.requestQuota_Callback_3_(unwrap_jso(this), newQuotaInBytes, unwrap_jso(quotaCallback), unwrap_jso(errorCallback));
       return;
     }
     if (quotaCallback != null) {
-      _blink.BlinkDeprecatedStorageQuota.instance.requestQuota_Callback_2_(this, newQuotaInBytes, quotaCallback);
+      _blink.BlinkDeprecatedStorageQuota.instance.requestQuota_Callback_2_(unwrap_jso(this), newQuotaInBytes, unwrap_jso(quotaCallback));
       return;
     }
-    _blink.BlinkDeprecatedStorageQuota.instance.requestQuota_Callback_1_(this, newQuotaInBytes);
+    _blink.BlinkDeprecatedStorageQuota.instance.requestQuota_Callback_1_(unwrap_jso(this), newQuotaInBytes);
     return;
   }
 
@@ -8073,12 +8083,12 @@
 
   @DomName('HTMLDetailsElement.open')
   @DocsEditable()
-  bool get open => _blink.BlinkHTMLDetailsElement.instance.open_Getter_(this);
-
+  bool get open => _blink.BlinkHTMLDetailsElement.instance.open_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLDetailsElement.open')
   @DocsEditable()
-  void set open(bool value) => _blink.BlinkHTMLDetailsElement.instance.open_Setter_(this, value);
-
+  void set open(bool value) => _blink.BlinkHTMLDetailsElement.instance.open_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -8097,16 +8107,16 @@
 
   @DomName('DeviceAcceleration.x')
   @DocsEditable()
-  double get x => _blink.BlinkDeviceAcceleration.instance.x_Getter_(this);
-
+  double get x => _blink.BlinkDeviceAcceleration.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('DeviceAcceleration.y')
   @DocsEditable()
-  double get y => _blink.BlinkDeviceAcceleration.instance.y_Getter_(this);
-
+  double get y => _blink.BlinkDeviceAcceleration.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('DeviceAcceleration.z')
   @DocsEditable()
-  double get z => _blink.BlinkDeviceAcceleration.instance.z_Getter_(this);
-
+  double get z => _blink.BlinkDeviceAcceleration.instance.z_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -8125,8 +8135,8 @@
   @DomName('DeviceLightEvent.value')
   @DocsEditable()
   @Experimental() // untriaged
-  double get value => _blink.BlinkDeviceLightEvent.instance.value_Getter_(this);
-
+  double get value => _blink.BlinkDeviceLightEvent.instance.value_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -8145,25 +8155,25 @@
 
   @DomName('DeviceMotionEvent.acceleration')
   @DocsEditable()
-  DeviceAcceleration get acceleration => _blink.BlinkDeviceMotionEvent.instance.acceleration_Getter_(this);
-
+  DeviceAcceleration get acceleration => wrap_jso(_blink.BlinkDeviceMotionEvent.instance.acceleration_Getter_(unwrap_jso(this)));
+  
   @DomName('DeviceMotionEvent.accelerationIncludingGravity')
   @DocsEditable()
-  DeviceAcceleration get accelerationIncludingGravity => _blink.BlinkDeviceMotionEvent.instance.accelerationIncludingGravity_Getter_(this);
-
+  DeviceAcceleration get accelerationIncludingGravity => wrap_jso(_blink.BlinkDeviceMotionEvent.instance.accelerationIncludingGravity_Getter_(unwrap_jso(this)));
+  
   @DomName('DeviceMotionEvent.interval')
   @DocsEditable()
-  double get interval => _blink.BlinkDeviceMotionEvent.instance.interval_Getter_(this);
-
+  double get interval => _blink.BlinkDeviceMotionEvent.instance.interval_Getter_(unwrap_jso(this));
+  
   @DomName('DeviceMotionEvent.rotationRate')
   @DocsEditable()
-  DeviceRotationRate get rotationRate => _blink.BlinkDeviceMotionEvent.instance.rotationRate_Getter_(this);
-
+  DeviceRotationRate get rotationRate => wrap_jso(_blink.BlinkDeviceMotionEvent.instance.rotationRate_Getter_(unwrap_jso(this)));
+  
   @DomName('DeviceMotionEvent.initDeviceMotionEvent')
   @DocsEditable()
   @Experimental() // untriaged
-  void initDeviceMotionEvent(String type, bool bubbles, bool cancelable, DeviceAcceleration acceleration, DeviceAcceleration accelerationIncludingGravity, DeviceRotationRate rotationRate, num interval) => _blink.BlinkDeviceMotionEvent.instance.initDeviceMotionEvent_Callback_7_(this, type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval);
-
+  void initDeviceMotionEvent(String type, bool bubbles, bool cancelable, DeviceAcceleration acceleration, DeviceAcceleration accelerationIncludingGravity, DeviceRotationRate rotationRate, num interval) => _blink.BlinkDeviceMotionEvent.instance.initDeviceMotionEvent_Callback_7_(unwrap_jso(this), type, bubbles, cancelable, unwrap_jso(acceleration), unwrap_jso(accelerationIncludingGravity), unwrap_jso(rotationRate), interval);
+  
 }
 // 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
@@ -8188,24 +8198,24 @@
 
   @DomName('DeviceOrientationEvent.absolute')
   @DocsEditable()
-  bool get absolute => _blink.BlinkDeviceOrientationEvent.instance.absolute_Getter_(this);
-
+  bool get absolute => _blink.BlinkDeviceOrientationEvent.instance.absolute_Getter_(unwrap_jso(this));
+  
   @DomName('DeviceOrientationEvent.alpha')
   @DocsEditable()
-  double get alpha => _blink.BlinkDeviceOrientationEvent.instance.alpha_Getter_(this);
-
+  double get alpha => _blink.BlinkDeviceOrientationEvent.instance.alpha_Getter_(unwrap_jso(this));
+  
   @DomName('DeviceOrientationEvent.beta')
   @DocsEditable()
-  double get beta => _blink.BlinkDeviceOrientationEvent.instance.beta_Getter_(this);
-
+  double get beta => _blink.BlinkDeviceOrientationEvent.instance.beta_Getter_(unwrap_jso(this));
+  
   @DomName('DeviceOrientationEvent.gamma')
   @DocsEditable()
-  double get gamma => _blink.BlinkDeviceOrientationEvent.instance.gamma_Getter_(this);
-
+  double get gamma => _blink.BlinkDeviceOrientationEvent.instance.gamma_Getter_(unwrap_jso(this));
+  
   @DomName('DeviceOrientationEvent.initDeviceOrientationEvent')
   @DocsEditable()
-  void _initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute) => _blink.BlinkDeviceOrientationEvent.instance.initDeviceOrientationEvent_Callback_7_(this, type, bubbles, cancelable, alpha, beta, gamma, absolute);
-
+  void _initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute) => _blink.BlinkDeviceOrientationEvent.instance.initDeviceOrientationEvent_Callback_7_(unwrap_jso(this), type, bubbles, cancelable, alpha, beta, gamma, absolute);
+  
 }
 // 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
@@ -8224,16 +8234,16 @@
 
   @DomName('DeviceRotationRate.alpha')
   @DocsEditable()
-  double get alpha => _blink.BlinkDeviceRotationRate.instance.alpha_Getter_(this);
-
+  double get alpha => _blink.BlinkDeviceRotationRate.instance.alpha_Getter_(unwrap_jso(this));
+  
   @DomName('DeviceRotationRate.beta')
   @DocsEditable()
-  double get beta => _blink.BlinkDeviceRotationRate.instance.beta_Getter_(this);
-
+  double get beta => _blink.BlinkDeviceRotationRate.instance.beta_Getter_(unwrap_jso(this));
+  
   @DomName('DeviceRotationRate.gamma')
   @DocsEditable()
-  double get gamma => _blink.BlinkDeviceRotationRate.instance.gamma_Getter_(this);
-
+  double get gamma => _blink.BlinkDeviceRotationRate.instance.gamma_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -8257,34 +8267,34 @@
 
   @DomName('HTMLDialogElement.open')
   @DocsEditable()
-  bool get open => _blink.BlinkHTMLDialogElement.instance.open_Getter_(this);
-
+  bool get open => _blink.BlinkHTMLDialogElement.instance.open_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLDialogElement.open')
   @DocsEditable()
-  void set open(bool value) => _blink.BlinkHTMLDialogElement.instance.open_Setter_(this, value);
-
+  void set open(bool value) => _blink.BlinkHTMLDialogElement.instance.open_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLDialogElement.returnValue')
   @DocsEditable()
   @Experimental() // untriaged
-  String get returnValue => _blink.BlinkHTMLDialogElement.instance.returnValue_Getter_(this);
-
+  String get returnValue => _blink.BlinkHTMLDialogElement.instance.returnValue_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLDialogElement.returnValue')
   @DocsEditable()
   @Experimental() // untriaged
-  void set returnValue(String value) => _blink.BlinkHTMLDialogElement.instance.returnValue_Setter_(this, value);
-
+  void set returnValue(String value) => _blink.BlinkHTMLDialogElement.instance.returnValue_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLDialogElement.close')
   @DocsEditable()
-  void close(String returnValue) => _blink.BlinkHTMLDialogElement.instance.close_Callback_1_(this, returnValue);
-
+  void close(String returnValue) => _blink.BlinkHTMLDialogElement.instance.close_Callback_1_(unwrap_jso(this), returnValue);
+  
   @DomName('HTMLDialogElement.show')
   @DocsEditable()
-  void show() => _blink.BlinkHTMLDialogElement.instance.show_Callback_0_(this);
-
+  void show() => _blink.BlinkHTMLDialogElement.instance.show_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLDialogElement.showModal')
   @DocsEditable()
-  void showModal() => _blink.BlinkHTMLDialogElement.instance.showModal_Callback_0_(this);
-
+  void showModal() => _blink.BlinkHTMLDialogElement.instance.showModal_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -8337,22 +8347,22 @@
 
   @DomName('DirectoryEntry.createReader')
   @DocsEditable()
-  DirectoryReader createReader() => _blink.BlinkDirectoryEntry.instance.createReader_Callback_0_(this);
-
+  DirectoryReader createReader() => wrap_jso(_blink.BlinkDirectoryEntry.instance.createReader_Callback_0_(unwrap_jso(this)));
+  
   void __getDirectory(String path, {Map options, _EntryCallback successCallback, _ErrorCallback errorCallback}) {
     if (errorCallback != null) {
-      _blink.BlinkDirectoryEntry.instance.getDirectory_Callback_4_(this, path, options, successCallback, errorCallback);
+      _blink.BlinkDirectoryEntry.instance.getDirectory_Callback_4_(unwrap_jso(this), path, options, unwrap_jso(successCallback), unwrap_jso(errorCallback));
       return;
     }
     if (successCallback != null) {
-      _blink.BlinkDirectoryEntry.instance.getDirectory_Callback_3_(this, path, options, successCallback);
+      _blink.BlinkDirectoryEntry.instance.getDirectory_Callback_3_(unwrap_jso(this), path, options, unwrap_jso(successCallback));
       return;
     }
     if (options != null) {
-      _blink.BlinkDirectoryEntry.instance.getDirectory_Callback_2_(this, path, options);
+      _blink.BlinkDirectoryEntry.instance.getDirectory_Callback_2_(unwrap_jso(this), path, options);
       return;
     }
-    _blink.BlinkDirectoryEntry.instance.getDirectory_Callback_1_(this, path);
+    _blink.BlinkDirectoryEntry.instance.getDirectory_Callback_1_(unwrap_jso(this), path);
     return;
   }
 
@@ -8366,18 +8376,18 @@
 
   void __getFile(String path, {Map options, _EntryCallback successCallback, _ErrorCallback errorCallback}) {
     if (errorCallback != null) {
-      _blink.BlinkDirectoryEntry.instance.getFile_Callback_4_(this, path, options, successCallback, errorCallback);
+      _blink.BlinkDirectoryEntry.instance.getFile_Callback_4_(unwrap_jso(this), path, options, unwrap_jso(successCallback), unwrap_jso(errorCallback));
       return;
     }
     if (successCallback != null) {
-      _blink.BlinkDirectoryEntry.instance.getFile_Callback_3_(this, path, options, successCallback);
+      _blink.BlinkDirectoryEntry.instance.getFile_Callback_3_(unwrap_jso(this), path, options, unwrap_jso(successCallback));
       return;
     }
     if (options != null) {
-      _blink.BlinkDirectoryEntry.instance.getFile_Callback_2_(this, path, options);
+      _blink.BlinkDirectoryEntry.instance.getFile_Callback_2_(unwrap_jso(this), path, options);
       return;
     }
-    _blink.BlinkDirectoryEntry.instance.getFile_Callback_1_(this, path);
+    _blink.BlinkDirectoryEntry.instance.getFile_Callback_1_(unwrap_jso(this), path);
     return;
   }
 
@@ -8391,10 +8401,10 @@
 
   void _removeRecursively(VoidCallback successCallback, [_ErrorCallback errorCallback]) {
     if (errorCallback != null) {
-      _blink.BlinkDirectoryEntry.instance.removeRecursively_Callback_2_(this, successCallback, errorCallback);
+      _blink.BlinkDirectoryEntry.instance.removeRecursively_Callback_2_(unwrap_jso(this), unwrap_jso(successCallback), unwrap_jso(errorCallback));
       return;
     }
-    _blink.BlinkDirectoryEntry.instance.removeRecursively_Callback_1_(this, successCallback);
+    _blink.BlinkDirectoryEntry.instance.removeRecursively_Callback_1_(unwrap_jso(this), unwrap_jso(successCallback));
     return;
   }
 
@@ -8424,10 +8434,10 @@
 
   void _readEntries(_EntriesCallback successCallback, [_ErrorCallback errorCallback]) {
     if (errorCallback != null) {
-      _blink.BlinkDirectoryReader.instance.readEntries_Callback_2_(this, successCallback, errorCallback);
+      _blink.BlinkDirectoryReader.instance.readEntries_Callback_2_(unwrap_jso(this), unwrap_jso(successCallback), unwrap_jso(errorCallback));
       return;
     }
-    _blink.BlinkDirectoryReader.instance.readEntries_Callback_1_(this, successCallback);
+    _blink.BlinkDirectoryReader.instance.readEntries_Callback_1_(unwrap_jso(this), unwrap_jso(successCallback));
     return;
   }
 
@@ -8553,318 +8563,318 @@
   @DomName('Document.activeElement')
   @DocsEditable()
   @Experimental() // untriaged
-  Element get activeElement => _blink.BlinkDocument.instance.activeElement_Getter_(this);
-
+  Element get activeElement => wrap_jso(_blink.BlinkDocument.instance.activeElement_Getter_(unwrap_jso(this)));
+  
   @DomName('Document.body')
   @DocsEditable()
-  HtmlElement get _body => _blink.BlinkDocument.instance.body_Getter_(this);
-
+  HtmlElement get _body => wrap_jso(_blink.BlinkDocument.instance.body_Getter_(unwrap_jso(this)));
+  
   @DomName('Document.body')
   @DocsEditable()
-  void set _body(HtmlElement value) => _blink.BlinkDocument.instance.body_Setter_(this, value);
-
+  void set _body(HtmlElement value) => _blink.BlinkDocument.instance.body_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('Document.contentType')
   @DocsEditable()
   @Experimental() // untriaged
-  String get contentType => _blink.BlinkDocument.instance.contentType_Getter_(this);
-
+  String get contentType => _blink.BlinkDocument.instance.contentType_Getter_(unwrap_jso(this));
+  
   @DomName('Document.cookie')
   @DocsEditable()
-  String get cookie => _blink.BlinkDocument.instance.cookie_Getter_(this);
-
+  String get cookie => _blink.BlinkDocument.instance.cookie_Getter_(unwrap_jso(this));
+  
   @DomName('Document.cookie')
   @DocsEditable()
-  void set cookie(String value) => _blink.BlinkDocument.instance.cookie_Setter_(this, value);
-
+  void set cookie(String value) => _blink.BlinkDocument.instance.cookie_Setter_(unwrap_jso(this), value);
+  
   @DomName('Document.currentScript')
   @DocsEditable()
   @Experimental() // untriaged
-  ScriptElement get currentScript => _blink.BlinkDocument.instance.currentScript_Getter_(this);
-
+  ScriptElement get currentScript => wrap_jso(_blink.BlinkDocument.instance.currentScript_Getter_(unwrap_jso(this)));
+  
   @DomName('Document.defaultView')
   @DocsEditable()
-  WindowBase get window => _blink.BlinkDocument.instance.defaultView_Getter_(this);
-
+  WindowBase get window => wrap_jso(_blink.BlinkDocument.instance.defaultView_Getter_(unwrap_jso(this)));
+  
   @DomName('Document.documentElement')
   @DocsEditable()
-  Element get documentElement => _blink.BlinkDocument.instance.documentElement_Getter_(this);
-
+  Element get documentElement => wrap_jso(_blink.BlinkDocument.instance.documentElement_Getter_(unwrap_jso(this)));
+  
   @DomName('Document.domain')
   @DocsEditable()
-  String get domain => _blink.BlinkDocument.instance.domain_Getter_(this);
-
+  String get domain => _blink.BlinkDocument.instance.domain_Getter_(unwrap_jso(this));
+  
   @DomName('Document.fonts')
   @DocsEditable()
   @Experimental() // untriaged
-  FontFaceSet get fonts => _blink.BlinkDocument.instance.fonts_Getter_(this);
-
+  FontFaceSet get fonts => wrap_jso(_blink.BlinkDocument.instance.fonts_Getter_(unwrap_jso(this)));
+  
   @DomName('Document.fullscreenElement')
   @DocsEditable()
   @Experimental() // untriaged
-  Element get fullscreenElement => _blink.BlinkDocument.instance.fullscreenElement_Getter_(this);
-
+  Element get fullscreenElement => wrap_jso(_blink.BlinkDocument.instance.fullscreenElement_Getter_(unwrap_jso(this)));
+  
   @DomName('Document.fullscreenEnabled')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get fullscreenEnabled => _blink.BlinkDocument.instance.fullscreenEnabled_Getter_(this);
-
+  bool get fullscreenEnabled => _blink.BlinkDocument.instance.fullscreenEnabled_Getter_(unwrap_jso(this));
+  
   @DomName('Document.head')
   @DocsEditable()
-  HeadElement get _head => _blink.BlinkDocument.instance.head_Getter_(this);
-
+  HeadElement get _head => wrap_jso(_blink.BlinkDocument.instance.head_Getter_(unwrap_jso(this)));
+  
   @DomName('Document.hidden')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get hidden => _blink.BlinkDocument.instance.hidden_Getter_(this);
-
+  bool get hidden => _blink.BlinkDocument.instance.hidden_Getter_(unwrap_jso(this));
+  
   @DomName('Document.implementation')
   @DocsEditable()
-  DomImplementation get implementation => _blink.BlinkDocument.instance.implementation_Getter_(this);
-
+  DomImplementation get implementation => wrap_jso(_blink.BlinkDocument.instance.implementation_Getter_(unwrap_jso(this)));
+  
   @DomName('Document.lastModified')
   @DocsEditable()
-  String get _lastModified => _blink.BlinkDocument.instance.lastModified_Getter_(this);
-
+  String get _lastModified => _blink.BlinkDocument.instance.lastModified_Getter_(unwrap_jso(this));
+  
   @DomName('Document.pointerLockElement')
   @DocsEditable()
   @Experimental() // untriaged
-  Element get pointerLockElement => _blink.BlinkDocument.instance.pointerLockElement_Getter_(this);
-
+  Element get pointerLockElement => wrap_jso(_blink.BlinkDocument.instance.pointerLockElement_Getter_(unwrap_jso(this)));
+  
   @DomName('Document.preferredStylesheetSet')
   @DocsEditable()
-  String get _preferredStylesheetSet => _blink.BlinkDocument.instance.preferredStylesheetSet_Getter_(this);
-
+  String get _preferredStylesheetSet => _blink.BlinkDocument.instance.preferredStylesheetSet_Getter_(unwrap_jso(this));
+  
   @DomName('Document.readyState')
   @DocsEditable()
-  String get readyState => _blink.BlinkDocument.instance.readyState_Getter_(this);
-
+  String get readyState => _blink.BlinkDocument.instance.readyState_Getter_(unwrap_jso(this));
+  
   @DomName('Document.referrer')
   @DocsEditable()
-  String get _referrer => _blink.BlinkDocument.instance.referrer_Getter_(this);
-
+  String get _referrer => _blink.BlinkDocument.instance.referrer_Getter_(unwrap_jso(this));
+  
   @DomName('Document.rootElement')
   @DocsEditable()
   @Experimental() // untriaged
-  SvgSvgElement get rootElement => _blink.BlinkDocument.instance.rootElement_Getter_(this);
-
+  SvgSvgElement get rootElement => wrap_jso(_blink.BlinkDocument.instance.rootElement_Getter_(unwrap_jso(this)));
+  
   @DomName('Document.selectedStylesheetSet')
   @DocsEditable()
-  String get _selectedStylesheetSet => _blink.BlinkDocument.instance.selectedStylesheetSet_Getter_(this);
-
+  String get _selectedStylesheetSet => _blink.BlinkDocument.instance.selectedStylesheetSet_Getter_(unwrap_jso(this));
+  
   @DomName('Document.selectedStylesheetSet')
   @DocsEditable()
-  void set _selectedStylesheetSet(String value) => _blink.BlinkDocument.instance.selectedStylesheetSet_Setter_(this, value);
-
+  void set _selectedStylesheetSet(String value) => _blink.BlinkDocument.instance.selectedStylesheetSet_Setter_(unwrap_jso(this), value);
+  
   @DomName('Document.styleSheets')
   @DocsEditable()
-  List<StyleSheet> get _styleSheets => _blink.BlinkDocument.instance.styleSheets_Getter_(this);
-
+  List<StyleSheet> get _styleSheets => wrap_jso_list(_blink.BlinkDocument.instance.styleSheets_Getter_(unwrap_jso(this)));
+  
   @DomName('Document.timeline')
   @DocsEditable()
   @Experimental() // untriaged
-  AnimationTimeline get timeline => _blink.BlinkDocument.instance.timeline_Getter_(this);
-
+  AnimationTimeline get timeline => wrap_jso(_blink.BlinkDocument.instance.timeline_Getter_(unwrap_jso(this)));
+  
   @DomName('Document.title')
   @DocsEditable()
-  String get _title => _blink.BlinkDocument.instance.title_Getter_(this);
-
+  String get _title => _blink.BlinkDocument.instance.title_Getter_(unwrap_jso(this));
+  
   @DomName('Document.title')
   @DocsEditable()
-  void set _title(String value) => _blink.BlinkDocument.instance.title_Setter_(this, value);
-
+  void set _title(String value) => _blink.BlinkDocument.instance.title_Setter_(unwrap_jso(this), value);
+  
   @DomName('Document.visibilityState')
   @DocsEditable()
   @Experimental() // untriaged
-  String get visibilityState => _blink.BlinkDocument.instance.visibilityState_Getter_(this);
-
+  String get visibilityState => _blink.BlinkDocument.instance.visibilityState_Getter_(unwrap_jso(this));
+  
   @DomName('Document.webkitFullscreenElement')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#dom-document-fullscreenelement
-  Element get _webkitFullscreenElement => _blink.BlinkDocument.instance.webkitFullscreenElement_Getter_(this);
-
+  Element get _webkitFullscreenElement => wrap_jso(_blink.BlinkDocument.instance.webkitFullscreenElement_Getter_(unwrap_jso(this)));
+  
   @DomName('Document.webkitFullscreenEnabled')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#dom-document-fullscreenenabled
-  bool get _webkitFullscreenEnabled => _blink.BlinkDocument.instance.webkitFullscreenEnabled_Getter_(this);
-
+  bool get _webkitFullscreenEnabled => _blink.BlinkDocument.instance.webkitFullscreenEnabled_Getter_(unwrap_jso(this));
+  
   @DomName('Document.webkitHidden')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/PageVisibility/Overview.html#document
-  bool get _webkitHidden => _blink.BlinkDocument.instance.webkitHidden_Getter_(this);
-
+  bool get _webkitHidden => _blink.BlinkDocument.instance.webkitHidden_Getter_(unwrap_jso(this));
+  
   @DomName('Document.webkitVisibilityState')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/PageVisibility/Overview.html#dom-document-visibilitystate
-  String get _webkitVisibilityState => _blink.BlinkDocument.instance.webkitVisibilityState_Getter_(this);
-
+  String get _webkitVisibilityState => _blink.BlinkDocument.instance.webkitVisibilityState_Getter_(unwrap_jso(this));
+  
   @DomName('Document.adoptNode')
   @DocsEditable()
-  Node adoptNode(Node node) => _blink.BlinkDocument.instance.adoptNode_Callback_1_(this, node);
-
+  Node adoptNode(Node node) => wrap_jso(_blink.BlinkDocument.instance.adoptNode_Callback_1_(unwrap_jso(this), unwrap_jso(node)));
+  
   @DomName('Document.caretRangeFromPoint')
   @DocsEditable()
   // http://www.w3.org/TR/2009/WD-cssom-view-20090804/#dom-documentview-caretrangefrompoint
   @Experimental()
-  Range _caretRangeFromPoint(int x, int y) => _blink.BlinkDocument.instance.caretRangeFromPoint_Callback_2_(this, x, y);
-
+  Range _caretRangeFromPoint(int x, int y) => wrap_jso(_blink.BlinkDocument.instance.caretRangeFromPoint_Callback_2_(unwrap_jso(this), x, y));
+  
   @DomName('Document.createDocumentFragment')
   @DocsEditable()
-  DocumentFragment createDocumentFragment() => _blink.BlinkDocument.instance.createDocumentFragment_Callback_0_(this);
-
+  DocumentFragment createDocumentFragment() => wrap_jso(_blink.BlinkDocument.instance.createDocumentFragment_Callback_0_(unwrap_jso(this)));
+  
   @DomName('Document.createElement')
   @DocsEditable()
-  Element _createElement(String localName_OR_tagName, [String typeExtension]) => _blink.BlinkDocument.instance.createElement_Callback_2_(this, localName_OR_tagName, typeExtension);
-
+  Element _createElement(String localName_OR_tagName, [String typeExtension]) => wrap_jso(_blink.BlinkDocument.instance.createElement_Callback_2_(unwrap_jso(this), localName_OR_tagName, typeExtension));
+  
   @DomName('Document.createElementNS')
   @DocsEditable()
-  Element createElementNS(String namespaceURI, String qualifiedName, [String typeExtension]) => _blink.BlinkDocument.instance.createElementNS_Callback_3_(this, namespaceURI, qualifiedName, typeExtension);
-
+  Element createElementNS(String namespaceURI, String qualifiedName, [String typeExtension]) => wrap_jso(_blink.BlinkDocument.instance.createElementNS_Callback_3_(unwrap_jso(this), namespaceURI, qualifiedName, typeExtension));
+  
   @DomName('Document.createEvent')
   @DocsEditable()
-  Event _createEvent(String eventType) => _blink.BlinkDocument.instance.createEvent_Callback_1_(this, eventType);
-
+  Event _createEvent(String eventType) => wrap_jso(_blink.BlinkDocument.instance.createEvent_Callback_1_(unwrap_jso(this), eventType));
+  
   NodeIterator _createNodeIterator(Node root, [int whatToShow, NodeFilter filter]) {
     if (whatToShow != null) {
-      return _blink.BlinkDocument.instance.createNodeIterator_Callback_3_(this, root, whatToShow, filter);
+      return wrap_jso(_blink.BlinkDocument.instance.createNodeIterator_Callback_3_(unwrap_jso(this), unwrap_jso(root), whatToShow, unwrap_jso(filter)));
     }
-    return _blink.BlinkDocument.instance.createNodeIterator_Callback_1_(this, root);
+    return wrap_jso(_blink.BlinkDocument.instance.createNodeIterator_Callback_1_(unwrap_jso(this), unwrap_jso(root)));
   }
 
   @DomName('Document.createRange')
   @DocsEditable()
-  Range createRange() => _blink.BlinkDocument.instance.createRange_Callback_0_(this);
-
+  Range createRange() => wrap_jso(_blink.BlinkDocument.instance.createRange_Callback_0_(unwrap_jso(this)));
+  
   @DomName('Document.createTextNode')
   @DocsEditable()
-  Text _createTextNode(String data) => _blink.BlinkDocument.instance.createTextNode_Callback_1_(this, data);
-
+  Text _createTextNode(String data) => wrap_jso(_blink.BlinkDocument.instance.createTextNode_Callback_1_(unwrap_jso(this), data));
+  
   @DomName('Document.createTouch')
   @DocsEditable()
   // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
   @Experimental()
-  Touch _createTouch(Window window, EventTarget target, int identifier, num pageX, num pageY, num screenX, num screenY, num webkitRadiusX, num webkitRadiusY, num webkitRotationAngle, num webkitForce) => _blink.BlinkDocument.instance.createTouch_Callback_11_(this, window, target, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce);
-
+  Touch _createTouch(Window window, EventTarget target, int identifier, num pageX, num pageY, num screenX, num screenY, num webkitRadiusX, num webkitRadiusY, num webkitRotationAngle, num webkitForce) => wrap_jso(_blink.BlinkDocument.instance.createTouch_Callback_11_(unwrap_jso(this), unwrap_jso(window), unwrap_jso(target), identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce));
+  
   @DomName('Document.createTouchList')
   @DocsEditable()
   // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
   @Experimental()
-  TouchList _createTouchList(Touch touches) => _blink.BlinkDocument.instance.createTouchList_Callback_1_(this, touches);
-
+  TouchList _createTouchList(Touch touches) => wrap_jso(_blink.BlinkDocument.instance.createTouchList_Callback_1_(unwrap_jso(this), unwrap_jso(touches)));
+  
   TreeWalker _createTreeWalker(Node root, [int whatToShow, NodeFilter filter]) {
     if (whatToShow != null) {
-      return _blink.BlinkDocument.instance.createTreeWalker_Callback_3_(this, root, whatToShow, filter);
+      return wrap_jso(_blink.BlinkDocument.instance.createTreeWalker_Callback_3_(unwrap_jso(this), unwrap_jso(root), whatToShow, unwrap_jso(filter)));
     }
-    return _blink.BlinkDocument.instance.createTreeWalker_Callback_1_(this, root);
+    return wrap_jso(_blink.BlinkDocument.instance.createTreeWalker_Callback_1_(unwrap_jso(this), unwrap_jso(root)));
   }
 
   @DomName('Document.elementFromPoint')
   @DocsEditable()
-  Element _elementFromPoint(int x, int y) => _blink.BlinkDocument.instance.elementFromPoint_Callback_2_(this, x, y);
-
+  Element _elementFromPoint(int x, int y) => wrap_jso(_blink.BlinkDocument.instance.elementFromPoint_Callback_2_(unwrap_jso(this), x, y));
+  
   @DomName('Document.execCommand')
   @DocsEditable()
-  bool execCommand(String command, bool userInterface, String value) => _blink.BlinkDocument.instance.execCommand_Callback_3_(this, command, userInterface, value);
-
+  bool execCommand(String command, bool userInterface, String value) => _blink.BlinkDocument.instance.execCommand_Callback_3_(unwrap_jso(this), command, userInterface, value);
+  
   @DomName('Document.exitFullscreen')
   @DocsEditable()
   @Experimental() // untriaged
-  void exitFullscreen() => _blink.BlinkDocument.instance.exitFullscreen_Callback_0_(this);
-
+  void exitFullscreen() => _blink.BlinkDocument.instance.exitFullscreen_Callback_0_(unwrap_jso(this));
+  
   @DomName('Document.exitPointerLock')
   @DocsEditable()
   @Experimental() // untriaged
-  void exitPointerLock() => _blink.BlinkDocument.instance.exitPointerLock_Callback_0_(this);
-
+  void exitPointerLock() => _blink.BlinkDocument.instance.exitPointerLock_Callback_0_(unwrap_jso(this));
+  
   @DomName('Document.getCSSCanvasContext')
   @DocsEditable()
   // https://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariCSSRef/Articles/Functions.html
   @Experimental() // non-standard
-  Object _getCssCanvasContext(String contextId, String name, int width, int height) => _blink.BlinkDocument.instance.getCSSCanvasContext_Callback_4_(this, contextId, name, width, height);
-
+  Object _getCssCanvasContext(String contextId, String name, int width, int height) => wrap_jso(_blink.BlinkDocument.instance.getCSSCanvasContext_Callback_4_(unwrap_jso(this), contextId, name, width, height));
+  
   @DomName('Document.getElementById')
   @DocsEditable()
-  Element getElementById(String elementId) => _blink.BlinkDocument.instance.getElementById_Callback_1_(this, elementId);
-
+  Element getElementById(String elementId) => wrap_jso(_blink.BlinkDocument.instance.getElementById_Callback_1_(unwrap_jso(this), elementId));
+  
   @DomName('Document.getElementsByClassName')
   @DocsEditable()
-  List<Node> getElementsByClassName(String classNames) => _blink.BlinkDocument.instance.getElementsByClassName_Callback_1_(this, classNames);
-
+  List<Node> getElementsByClassName(String classNames) => wrap_jso_list(_blink.BlinkDocument.instance.getElementsByClassName_Callback_1_(unwrap_jso(this), classNames));
+  
   @DomName('Document.getElementsByName')
   @DocsEditable()
-  List<Node> getElementsByName(String elementName) => _blink.BlinkDocument.instance.getElementsByName_Callback_1_(this, elementName);
-
+  List<Node> getElementsByName(String elementName) => wrap_jso_list(_blink.BlinkDocument.instance.getElementsByName_Callback_1_(unwrap_jso(this), elementName));
+  
   @DomName('Document.getElementsByTagName')
   @DocsEditable()
-  List<Node> getElementsByTagName(String localName) => _blink.BlinkDocument.instance.getElementsByTagName_Callback_1_(this, localName);
-
+  List<Node> getElementsByTagName(String localName) => wrap_jso_list(_blink.BlinkDocument.instance.getElementsByTagName_Callback_1_(unwrap_jso(this), localName));
+  
   Node importNode(Node node, [bool deep]) {
     if (deep != null) {
-      return _blink.BlinkDocument.instance.importNode_Callback_2_(this, node, deep);
+      return wrap_jso(_blink.BlinkDocument.instance.importNode_Callback_2_(unwrap_jso(this), unwrap_jso(node), deep));
     }
-    return _blink.BlinkDocument.instance.importNode_Callback_1_(this, node);
+    return wrap_jso(_blink.BlinkDocument.instance.importNode_Callback_1_(unwrap_jso(this), unwrap_jso(node)));
   }
 
   @DomName('Document.queryCommandEnabled')
   @DocsEditable()
-  bool queryCommandEnabled(String command) => _blink.BlinkDocument.instance.queryCommandEnabled_Callback_1_(this, command);
-
+  bool queryCommandEnabled(String command) => _blink.BlinkDocument.instance.queryCommandEnabled_Callback_1_(unwrap_jso(this), command);
+  
   @DomName('Document.queryCommandIndeterm')
   @DocsEditable()
-  bool queryCommandIndeterm(String command) => _blink.BlinkDocument.instance.queryCommandIndeterm_Callback_1_(this, command);
-
+  bool queryCommandIndeterm(String command) => _blink.BlinkDocument.instance.queryCommandIndeterm_Callback_1_(unwrap_jso(this), command);
+  
   @DomName('Document.queryCommandState')
   @DocsEditable()
-  bool queryCommandState(String command) => _blink.BlinkDocument.instance.queryCommandState_Callback_1_(this, command);
-
+  bool queryCommandState(String command) => _blink.BlinkDocument.instance.queryCommandState_Callback_1_(unwrap_jso(this), command);
+  
   @DomName('Document.queryCommandSupported')
   @DocsEditable()
-  bool queryCommandSupported(String command) => _blink.BlinkDocument.instance.queryCommandSupported_Callback_1_(this, command);
-
+  bool queryCommandSupported(String command) => _blink.BlinkDocument.instance.queryCommandSupported_Callback_1_(unwrap_jso(this), command);
+  
   @DomName('Document.queryCommandValue')
   @DocsEditable()
-  String queryCommandValue(String command) => _blink.BlinkDocument.instance.queryCommandValue_Callback_1_(this, command);
-
+  String queryCommandValue(String command) => _blink.BlinkDocument.instance.queryCommandValue_Callback_1_(unwrap_jso(this), command);
+  
   @DomName('Document.transformDocumentToTreeView')
   @DocsEditable()
   @Experimental() // untriaged
-  void transformDocumentToTreeView(String noStyleMessage) => _blink.BlinkDocument.instance.transformDocumentToTreeView_Callback_1_(this, noStyleMessage);
-
+  void transformDocumentToTreeView(String noStyleMessage) => _blink.BlinkDocument.instance.transformDocumentToTreeView_Callback_1_(unwrap_jso(this), noStyleMessage);
+  
   @DomName('Document.webkitExitFullscreen')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#dom-document-exitfullscreen
-  void _webkitExitFullscreen() => _blink.BlinkDocument.instance.webkitExitFullscreen_Callback_0_(this);
-
+  void _webkitExitFullscreen() => _blink.BlinkDocument.instance.webkitExitFullscreen_Callback_0_(unwrap_jso(this));
+  
   @DomName('Document.childElementCount')
   @DocsEditable()
-  int get _childElementCount => _blink.BlinkDocument.instance.childElementCount_Getter_(this);
-
+  int get _childElementCount => _blink.BlinkDocument.instance.childElementCount_Getter_(unwrap_jso(this));
+  
   @DomName('Document.children')
   @DocsEditable()
-  List<Node> get _children => _blink.BlinkDocument.instance.children_Getter_(this);
-
+  List<Node> get _children => wrap_jso_list(_blink.BlinkDocument.instance.children_Getter_(unwrap_jso(this)));
+  
   @DomName('Document.firstElementChild')
   @DocsEditable()
-  Element get _firstElementChild => _blink.BlinkDocument.instance.firstElementChild_Getter_(this);
-
+  Element get _firstElementChild => wrap_jso(_blink.BlinkDocument.instance.firstElementChild_Getter_(unwrap_jso(this)));
+  
   @DomName('Document.lastElementChild')
   @DocsEditable()
-  Element get _lastElementChild => _blink.BlinkDocument.instance.lastElementChild_Getter_(this);
-
+  Element get _lastElementChild => wrap_jso(_blink.BlinkDocument.instance.lastElementChild_Getter_(unwrap_jso(this)));
+  
   /**
    * Finds the first descendant element of this document that matches the
    * specified group of selectors.
@@ -8884,12 +8894,12 @@
    */
   @DomName('Document.querySelector')
   @DocsEditable()
-  Element querySelector(String selectors) => _blink.BlinkDocument.instance.querySelector_Callback_1_(this, selectors);
-
+  Element querySelector(String selectors) => wrap_jso(_blink.BlinkDocument.instance.querySelector_Callback_1_(unwrap_jso(this), selectors));
+  
   @DomName('Document.querySelectorAll')
   @DocsEditable()
-  List<Node> _querySelectorAll(String selectors) => _blink.BlinkDocument.instance.querySelectorAll_Callback_1_(this, selectors);
-
+  List<Node> _querySelectorAll(String selectors) => wrap_jso_list(_blink.BlinkDocument.instance.querySelectorAll_Callback_1_(unwrap_jso(this), selectors));
+  
   /// Stream of `abort` events handled by this [Document].
   @DomName('Document.onabort')
   @DocsEditable()
@@ -9313,12 +9323,12 @@
 
   @DomName('Document.createElement')
   Element createElement(String tagName, [String typeExtension]) {
-    if (typeExtension != null) {
-      return _createElement(tagName, typeExtension);
-    } else {
-      // Fast-path for Dartium when typeExtension is not needed.
-      return _Utils.createElement(this, tagName);
-    }
+    if (typeExtension != null) {  
+      return _createElement(tagName, typeExtension);  
+    } else {  
+      // Fast-path for Dartium when typeExtension is not needed.  
+      return _Utils.createElement(this, tagName); 
+    } 
   }
 
 }
@@ -9380,7 +9390,6 @@
     new _FrozenElementList._wrap(_querySelectorAll(selectors));
 
 
-
   String get innerHtml {
     final e = new Element.tag("div");
     e.append(this.clone(true));
@@ -9445,20 +9454,20 @@
   @DomName('DocumentFragment.getElementById')
   @DocsEditable()
   @Experimental() // untriaged
-  Element getElementById(String elementId) => _blink.BlinkDocumentFragment.instance.getElementById_Callback_1_(this, elementId);
-
+  Element getElementById(String elementId) => wrap_jso(_blink.BlinkDocumentFragment.instance.getElementById_Callback_1_(unwrap_jso(this), elementId));
+  
   @DomName('DocumentFragment.childElementCount')
   @DocsEditable()
-  int get _childElementCount => _blink.BlinkDocumentFragment.instance.childElementCount_Getter_(this);
-
+  int get _childElementCount => _blink.BlinkDocumentFragment.instance.childElementCount_Getter_(unwrap_jso(this));
+  
   @DomName('DocumentFragment.firstElementChild')
   @DocsEditable()
-  Element get _firstElementChild => _blink.BlinkDocumentFragment.instance.firstElementChild_Getter_(this);
-
+  Element get _firstElementChild => wrap_jso(_blink.BlinkDocumentFragment.instance.firstElementChild_Getter_(unwrap_jso(this)));
+  
   @DomName('DocumentFragment.lastElementChild')
   @DocsEditable()
-  Element get _lastElementChild => _blink.BlinkDocumentFragment.instance.lastElementChild_Getter_(this);
-
+  Element get _lastElementChild => wrap_jso(_blink.BlinkDocumentFragment.instance.lastElementChild_Getter_(unwrap_jso(this)));
+  
   /**
    * Finds the first descendant element of this document fragment that matches
    * the specified group of selectors.
@@ -9473,12 +9482,12 @@
    */
   @DomName('DocumentFragment.querySelector')
   @DocsEditable()
-  Element querySelector(String selectors) => _blink.BlinkDocumentFragment.instance.querySelector_Callback_1_(this, selectors);
-
+  Element querySelector(String selectors) => wrap_jso(_blink.BlinkDocumentFragment.instance.querySelector_Callback_1_(unwrap_jso(this), selectors));
+  
   @DomName('DocumentFragment.querySelectorAll')
   @DocsEditable()
-  List<Node> _querySelectorAll(String selectors) => _blink.BlinkDocumentFragment.instance.querySelectorAll_Callback_1_(this, selectors);
-
+  List<Node> _querySelectorAll(String selectors) => wrap_jso_list(_blink.BlinkDocumentFragment.instance.querySelectorAll_Callback_1_(unwrap_jso(this), selectors));
+  
 }
 // 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
@@ -9502,12 +9511,12 @@
   @DomName('DOMError.message')
   @DocsEditable()
   @Experimental() // untriaged
-  String get message => _blink.BlinkDOMError.instance.message_Getter_(this);
-
+  String get message => _blink.BlinkDOMError.instance.message_Getter_(unwrap_jso(this));
+  
   @DomName('DOMError.name')
   @DocsEditable()
-  String get name => _blink.BlinkDOMError.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkDOMError.instance.name_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -9545,16 +9554,16 @@
 
   @DomName('DOMException.message')
   @DocsEditable()
-  String get message => _blink.BlinkDOMException.instance.message_Getter_(this);
-
+  String get message => _blink.BlinkDOMException.instance.message_Getter_(unwrap_jso(this));
+  
   @DomName('DOMException.name')
   @DocsEditable()
-  String get name => _blink.BlinkDOMException.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkDOMException.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('DOMException.toString')
   @DocsEditable()
-  String toString() => _blink.BlinkDOMException.instance.toString_Callback_0_(this);
-
+  String toString() => _blink.BlinkDOMException.instance.toString_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -9571,20 +9580,20 @@
 
   @DomName('DOMImplementation.createDocument')
   @DocsEditable()
-  XmlDocument createDocument(String namespaceURI, String qualifiedName, _DocumentType doctype) => _blink.BlinkDOMImplementation.instance.createDocument_Callback_3_(this, namespaceURI, qualifiedName, doctype);
-
+  XmlDocument createDocument(String namespaceURI, String qualifiedName, _DocumentType doctype) => _blink.BlinkDOMImplementation.instance.createDocument_Callback_3_(unwrap_jso(this), namespaceURI, qualifiedName, unwrap_jso(doctype));
+  
   @DomName('DOMImplementation.createDocumentType')
   @DocsEditable()
-  _DocumentType createDocumentType(String qualifiedName, String publicId, String systemId) => _blink.BlinkDOMImplementation.instance.createDocumentType_Callback_3_(this, qualifiedName, publicId, systemId);
-
+  _DocumentType createDocumentType(String qualifiedName, String publicId, String systemId) => _blink.BlinkDOMImplementation.instance.createDocumentType_Callback_3_(unwrap_jso(this), qualifiedName, publicId, systemId);
+  
   @DomName('DOMImplementation.createHTMLDocument')
   @DocsEditable()
-  HtmlDocument createHtmlDocument(String title) => _blink.BlinkDOMImplementation.instance.createHTMLDocument_Callback_1_(this, title);
-
+  HtmlDocument createHtmlDocument(String title) => wrap_jso(_blink.BlinkDOMImplementation.instance.createHTMLDocument_Callback_1_(unwrap_jso(this), title));
+  
   @DomName('DOMImplementation.hasFeature')
   @DocsEditable()
-  bool hasFeature(String feature, String version) => _blink.BlinkDOMImplementation.instance.hasFeature_Callback_2_(this, feature, version);
-
+  bool hasFeature(String feature, String version) => _blink.BlinkDOMImplementation.instance.hasFeature_Callback_2_(unwrap_jso(this), feature, version);
+  
 }
 // 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
@@ -9602,9 +9611,9 @@
 
   Object next([Object value]) {
     if (value != null) {
-      return _blink.BlinkIterator.instance.next_Callback_1_(this, value);
+      return _blink.BlinkIterator.instance.next_Callback_1_(unwrap_jso(this), value);
     }
-    return _blink.BlinkIterator.instance.next_Callback_0_(this);
+    return _blink.BlinkIterator.instance.next_Callback_0_(unwrap_jso(this));
   }
 
 }
@@ -9637,280 +9646,280 @@
   @DomName('DOMMatrix.a')
   @DocsEditable()
   @Experimental() // untriaged
-  num get a => _blink.BlinkDOMMatrix.instance.a_Getter_(this);
-
+  num get a => _blink.BlinkDOMMatrix.instance.a_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.a')
   @DocsEditable()
   @Experimental() // untriaged
-  void set a(num value) => _blink.BlinkDOMMatrix.instance.a_Setter_(this, value);
-
+  void set a(num value) => _blink.BlinkDOMMatrix.instance.a_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.b')
   @DocsEditable()
   @Experimental() // untriaged
-  num get b => _blink.BlinkDOMMatrix.instance.b_Getter_(this);
-
+  num get b => _blink.BlinkDOMMatrix.instance.b_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.b')
   @DocsEditable()
   @Experimental() // untriaged
-  void set b(num value) => _blink.BlinkDOMMatrix.instance.b_Setter_(this, value);
-
+  void set b(num value) => _blink.BlinkDOMMatrix.instance.b_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.c')
   @DocsEditable()
   @Experimental() // untriaged
-  num get c => _blink.BlinkDOMMatrix.instance.c_Getter_(this);
-
+  num get c => _blink.BlinkDOMMatrix.instance.c_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.c')
   @DocsEditable()
   @Experimental() // untriaged
-  void set c(num value) => _blink.BlinkDOMMatrix.instance.c_Setter_(this, value);
-
+  void set c(num value) => _blink.BlinkDOMMatrix.instance.c_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.d')
   @DocsEditable()
   @Experimental() // untriaged
-  num get d => _blink.BlinkDOMMatrix.instance.d_Getter_(this);
-
+  num get d => _blink.BlinkDOMMatrix.instance.d_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.d')
   @DocsEditable()
   @Experimental() // untriaged
-  void set d(num value) => _blink.BlinkDOMMatrix.instance.d_Setter_(this, value);
-
+  void set d(num value) => _blink.BlinkDOMMatrix.instance.d_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.e')
   @DocsEditable()
   @Experimental() // untriaged
-  num get e => _blink.BlinkDOMMatrix.instance.e_Getter_(this);
-
+  num get e => _blink.BlinkDOMMatrix.instance.e_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.e')
   @DocsEditable()
   @Experimental() // untriaged
-  void set e(num value) => _blink.BlinkDOMMatrix.instance.e_Setter_(this, value);
-
+  void set e(num value) => _blink.BlinkDOMMatrix.instance.e_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.f')
   @DocsEditable()
   @Experimental() // untriaged
-  num get f => _blink.BlinkDOMMatrix.instance.f_Getter_(this);
-
+  num get f => _blink.BlinkDOMMatrix.instance.f_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.f')
   @DocsEditable()
   @Experimental() // untriaged
-  void set f(num value) => _blink.BlinkDOMMatrix.instance.f_Setter_(this, value);
-
+  void set f(num value) => _blink.BlinkDOMMatrix.instance.f_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.m11')
   @DocsEditable()
   @Experimental() // untriaged
-  num get m11 => _blink.BlinkDOMMatrix.instance.m11_Getter_(this);
-
+  num get m11 => _blink.BlinkDOMMatrix.instance.m11_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.m11')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m11(num value) => _blink.BlinkDOMMatrix.instance.m11_Setter_(this, value);
-
+  void set m11(num value) => _blink.BlinkDOMMatrix.instance.m11_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.m12')
   @DocsEditable()
   @Experimental() // untriaged
-  num get m12 => _blink.BlinkDOMMatrix.instance.m12_Getter_(this);
-
+  num get m12 => _blink.BlinkDOMMatrix.instance.m12_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.m12')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m12(num value) => _blink.BlinkDOMMatrix.instance.m12_Setter_(this, value);
-
+  void set m12(num value) => _blink.BlinkDOMMatrix.instance.m12_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.m13')
   @DocsEditable()
   @Experimental() // untriaged
-  num get m13 => _blink.BlinkDOMMatrix.instance.m13_Getter_(this);
-
+  num get m13 => _blink.BlinkDOMMatrix.instance.m13_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.m13')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m13(num value) => _blink.BlinkDOMMatrix.instance.m13_Setter_(this, value);
-
+  void set m13(num value) => _blink.BlinkDOMMatrix.instance.m13_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.m14')
   @DocsEditable()
   @Experimental() // untriaged
-  num get m14 => _blink.BlinkDOMMatrix.instance.m14_Getter_(this);
-
+  num get m14 => _blink.BlinkDOMMatrix.instance.m14_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.m14')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m14(num value) => _blink.BlinkDOMMatrix.instance.m14_Setter_(this, value);
-
+  void set m14(num value) => _blink.BlinkDOMMatrix.instance.m14_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.m21')
   @DocsEditable()
   @Experimental() // untriaged
-  num get m21 => _blink.BlinkDOMMatrix.instance.m21_Getter_(this);
-
+  num get m21 => _blink.BlinkDOMMatrix.instance.m21_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.m21')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m21(num value) => _blink.BlinkDOMMatrix.instance.m21_Setter_(this, value);
-
+  void set m21(num value) => _blink.BlinkDOMMatrix.instance.m21_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.m22')
   @DocsEditable()
   @Experimental() // untriaged
-  num get m22 => _blink.BlinkDOMMatrix.instance.m22_Getter_(this);
-
+  num get m22 => _blink.BlinkDOMMatrix.instance.m22_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.m22')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m22(num value) => _blink.BlinkDOMMatrix.instance.m22_Setter_(this, value);
-
+  void set m22(num value) => _blink.BlinkDOMMatrix.instance.m22_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.m23')
   @DocsEditable()
   @Experimental() // untriaged
-  num get m23 => _blink.BlinkDOMMatrix.instance.m23_Getter_(this);
-
+  num get m23 => _blink.BlinkDOMMatrix.instance.m23_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.m23')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m23(num value) => _blink.BlinkDOMMatrix.instance.m23_Setter_(this, value);
-
+  void set m23(num value) => _blink.BlinkDOMMatrix.instance.m23_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.m24')
   @DocsEditable()
   @Experimental() // untriaged
-  num get m24 => _blink.BlinkDOMMatrix.instance.m24_Getter_(this);
-
+  num get m24 => _blink.BlinkDOMMatrix.instance.m24_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.m24')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m24(num value) => _blink.BlinkDOMMatrix.instance.m24_Setter_(this, value);
-
+  void set m24(num value) => _blink.BlinkDOMMatrix.instance.m24_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.m31')
   @DocsEditable()
   @Experimental() // untriaged
-  num get m31 => _blink.BlinkDOMMatrix.instance.m31_Getter_(this);
-
+  num get m31 => _blink.BlinkDOMMatrix.instance.m31_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.m31')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m31(num value) => _blink.BlinkDOMMatrix.instance.m31_Setter_(this, value);
-
+  void set m31(num value) => _blink.BlinkDOMMatrix.instance.m31_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.m32')
   @DocsEditable()
   @Experimental() // untriaged
-  num get m32 => _blink.BlinkDOMMatrix.instance.m32_Getter_(this);
-
+  num get m32 => _blink.BlinkDOMMatrix.instance.m32_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.m32')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m32(num value) => _blink.BlinkDOMMatrix.instance.m32_Setter_(this, value);
-
+  void set m32(num value) => _blink.BlinkDOMMatrix.instance.m32_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.m33')
   @DocsEditable()
   @Experimental() // untriaged
-  num get m33 => _blink.BlinkDOMMatrix.instance.m33_Getter_(this);
-
+  num get m33 => _blink.BlinkDOMMatrix.instance.m33_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.m33')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m33(num value) => _blink.BlinkDOMMatrix.instance.m33_Setter_(this, value);
-
+  void set m33(num value) => _blink.BlinkDOMMatrix.instance.m33_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.m34')
   @DocsEditable()
   @Experimental() // untriaged
-  num get m34 => _blink.BlinkDOMMatrix.instance.m34_Getter_(this);
-
+  num get m34 => _blink.BlinkDOMMatrix.instance.m34_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.m34')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m34(num value) => _blink.BlinkDOMMatrix.instance.m34_Setter_(this, value);
-
+  void set m34(num value) => _blink.BlinkDOMMatrix.instance.m34_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.m41')
   @DocsEditable()
   @Experimental() // untriaged
-  num get m41 => _blink.BlinkDOMMatrix.instance.m41_Getter_(this);
-
+  num get m41 => _blink.BlinkDOMMatrix.instance.m41_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.m41')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m41(num value) => _blink.BlinkDOMMatrix.instance.m41_Setter_(this, value);
-
+  void set m41(num value) => _blink.BlinkDOMMatrix.instance.m41_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.m42')
   @DocsEditable()
   @Experimental() // untriaged
-  num get m42 => _blink.BlinkDOMMatrix.instance.m42_Getter_(this);
-
+  num get m42 => _blink.BlinkDOMMatrix.instance.m42_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.m42')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m42(num value) => _blink.BlinkDOMMatrix.instance.m42_Setter_(this, value);
-
+  void set m42(num value) => _blink.BlinkDOMMatrix.instance.m42_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.m43')
   @DocsEditable()
   @Experimental() // untriaged
-  num get m43 => _blink.BlinkDOMMatrix.instance.m43_Getter_(this);
-
+  num get m43 => _blink.BlinkDOMMatrix.instance.m43_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.m43')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m43(num value) => _blink.BlinkDOMMatrix.instance.m43_Setter_(this, value);
-
+  void set m43(num value) => _blink.BlinkDOMMatrix.instance.m43_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.m44')
   @DocsEditable()
   @Experimental() // untriaged
-  num get m44 => _blink.BlinkDOMMatrix.instance.m44_Getter_(this);
-
+  num get m44 => _blink.BlinkDOMMatrix.instance.m44_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrix.m44')
   @DocsEditable()
   @Experimental() // untriaged
-  void set m44(num value) => _blink.BlinkDOMMatrix.instance.m44_Setter_(this, value);
-
+  void set m44(num value) => _blink.BlinkDOMMatrix.instance.m44_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMMatrix.multiplySelf')
   @DocsEditable()
   @Experimental() // untriaged
-  DomMatrix multiplySelf(DomMatrix other) => _blink.BlinkDOMMatrix.instance.multiplySelf_Callback_1_(this, other);
-
+  DomMatrix multiplySelf(DomMatrix other) => _blink.BlinkDOMMatrix.instance.multiplySelf_Callback_1_(unwrap_jso(this), unwrap_jso(other));
+  
   @DomName('DOMMatrix.preMultiplySelf')
   @DocsEditable()
   @Experimental() // untriaged
-  DomMatrix preMultiplySelf(DomMatrix other) => _blink.BlinkDOMMatrix.instance.preMultiplySelf_Callback_1_(this, other);
-
+  DomMatrix preMultiplySelf(DomMatrix other) => _blink.BlinkDOMMatrix.instance.preMultiplySelf_Callback_1_(unwrap_jso(this), unwrap_jso(other));
+  
   DomMatrix scale3dSelf(num scale, [num ox, num oy, num oz]) {
     if (oz != null) {
-      return _blink.BlinkDOMMatrix.instance.scale3dSelf_Callback_4_(this, scale, ox, oy, oz);
+      return _blink.BlinkDOMMatrix.instance.scale3dSelf_Callback_4_(unwrap_jso(this), scale, ox, oy, oz);
     }
     if (oy != null) {
-      return _blink.BlinkDOMMatrix.instance.scale3dSelf_Callback_3_(this, scale, ox, oy);
+      return _blink.BlinkDOMMatrix.instance.scale3dSelf_Callback_3_(unwrap_jso(this), scale, ox, oy);
     }
     if (ox != null) {
-      return _blink.BlinkDOMMatrix.instance.scale3dSelf_Callback_2_(this, scale, ox);
+      return _blink.BlinkDOMMatrix.instance.scale3dSelf_Callback_2_(unwrap_jso(this), scale, ox);
     }
-    return _blink.BlinkDOMMatrix.instance.scale3dSelf_Callback_1_(this, scale);
+    return _blink.BlinkDOMMatrix.instance.scale3dSelf_Callback_1_(unwrap_jso(this), scale);
   }
 
   DomMatrix scaleNonUniformSelf(num sx, [num sy, num sz, num ox, num oy, num oz]) {
     if (oz != null) {
-      return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_6_(this, sx, sy, sz, ox, oy, oz);
+      return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_6_(unwrap_jso(this), sx, sy, sz, ox, oy, oz);
     }
     if (oy != null) {
-      return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_5_(this, sx, sy, sz, ox, oy);
+      return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_5_(unwrap_jso(this), sx, sy, sz, ox, oy);
     }
     if (ox != null) {
-      return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_4_(this, sx, sy, sz, ox);
+      return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_4_(unwrap_jso(this), sx, sy, sz, ox);
     }
     if (sz != null) {
-      return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_3_(this, sx, sy, sz);
+      return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_3_(unwrap_jso(this), sx, sy, sz);
     }
     if (sy != null) {
-      return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_2_(this, sx, sy);
+      return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_2_(unwrap_jso(this), sx, sy);
     }
-    return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_1_(this, sx);
+    return _blink.BlinkDOMMatrix.instance.scaleNonUniformSelf_Callback_1_(unwrap_jso(this), sx);
   }
 
   DomMatrix scaleSelf(num scale, [num ox, num oy]) {
     if (oy != null) {
-      return _blink.BlinkDOMMatrix.instance.scaleSelf_Callback_3_(this, scale, ox, oy);
+      return _blink.BlinkDOMMatrix.instance.scaleSelf_Callback_3_(unwrap_jso(this), scale, ox, oy);
     }
     if (ox != null) {
-      return _blink.BlinkDOMMatrix.instance.scaleSelf_Callback_2_(this, scale, ox);
+      return _blink.BlinkDOMMatrix.instance.scaleSelf_Callback_2_(unwrap_jso(this), scale, ox);
     }
-    return _blink.BlinkDOMMatrix.instance.scaleSelf_Callback_1_(this, scale);
+    return _blink.BlinkDOMMatrix.instance.scaleSelf_Callback_1_(unwrap_jso(this), scale);
   }
 
   DomMatrix translateSelf(num tx, num ty, [num tz]) {
     if (tz != null) {
-      return _blink.BlinkDOMMatrix.instance.translateSelf_Callback_3_(this, tx, ty, tz);
+      return _blink.BlinkDOMMatrix.instance.translateSelf_Callback_3_(unwrap_jso(this), tx, ty, tz);
     }
-    return _blink.BlinkDOMMatrix.instance.translateSelf_Callback_2_(this, tx, ty);
+    return _blink.BlinkDOMMatrix.instance.translateSelf_Callback_2_(unwrap_jso(this), tx, ty);
   }
 
 }
@@ -9931,185 +9940,185 @@
   @DomName('DOMMatrixReadOnly.a')
   @DocsEditable()
   @Experimental() // untriaged
-  double get a => _blink.BlinkDOMMatrixReadOnly.instance.a_Getter_(this);
-
+  double get a => _blink.BlinkDOMMatrixReadOnly.instance.a_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.b')
   @DocsEditable()
   @Experimental() // untriaged
-  double get b => _blink.BlinkDOMMatrixReadOnly.instance.b_Getter_(this);
-
+  double get b => _blink.BlinkDOMMatrixReadOnly.instance.b_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.c')
   @DocsEditable()
   @Experimental() // untriaged
-  double get c => _blink.BlinkDOMMatrixReadOnly.instance.c_Getter_(this);
-
+  double get c => _blink.BlinkDOMMatrixReadOnly.instance.c_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.d')
   @DocsEditable()
   @Experimental() // untriaged
-  double get d => _blink.BlinkDOMMatrixReadOnly.instance.d_Getter_(this);
-
+  double get d => _blink.BlinkDOMMatrixReadOnly.instance.d_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.e')
   @DocsEditable()
   @Experimental() // untriaged
-  double get e => _blink.BlinkDOMMatrixReadOnly.instance.e_Getter_(this);
-
+  double get e => _blink.BlinkDOMMatrixReadOnly.instance.e_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.f')
   @DocsEditable()
   @Experimental() // untriaged
-  double get f => _blink.BlinkDOMMatrixReadOnly.instance.f_Getter_(this);
-
+  double get f => _blink.BlinkDOMMatrixReadOnly.instance.f_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.is2D')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get is2D => _blink.BlinkDOMMatrixReadOnly.instance.is2D_Getter_(this);
-
+  bool get is2D => _blink.BlinkDOMMatrixReadOnly.instance.is2D_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.isIdentity')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get isIdentity => _blink.BlinkDOMMatrixReadOnly.instance.isIdentity_Getter_(this);
-
+  bool get isIdentity => _blink.BlinkDOMMatrixReadOnly.instance.isIdentity_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.m11')
   @DocsEditable()
   @Experimental() // untriaged
-  double get m11 => _blink.BlinkDOMMatrixReadOnly.instance.m11_Getter_(this);
-
+  double get m11 => _blink.BlinkDOMMatrixReadOnly.instance.m11_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.m12')
   @DocsEditable()
   @Experimental() // untriaged
-  double get m12 => _blink.BlinkDOMMatrixReadOnly.instance.m12_Getter_(this);
-
+  double get m12 => _blink.BlinkDOMMatrixReadOnly.instance.m12_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.m13')
   @DocsEditable()
   @Experimental() // untriaged
-  double get m13 => _blink.BlinkDOMMatrixReadOnly.instance.m13_Getter_(this);
-
+  double get m13 => _blink.BlinkDOMMatrixReadOnly.instance.m13_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.m14')
   @DocsEditable()
   @Experimental() // untriaged
-  double get m14 => _blink.BlinkDOMMatrixReadOnly.instance.m14_Getter_(this);
-
+  double get m14 => _blink.BlinkDOMMatrixReadOnly.instance.m14_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.m21')
   @DocsEditable()
   @Experimental() // untriaged
-  double get m21 => _blink.BlinkDOMMatrixReadOnly.instance.m21_Getter_(this);
-
+  double get m21 => _blink.BlinkDOMMatrixReadOnly.instance.m21_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.m22')
   @DocsEditable()
   @Experimental() // untriaged
-  double get m22 => _blink.BlinkDOMMatrixReadOnly.instance.m22_Getter_(this);
-
+  double get m22 => _blink.BlinkDOMMatrixReadOnly.instance.m22_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.m23')
   @DocsEditable()
   @Experimental() // untriaged
-  double get m23 => _blink.BlinkDOMMatrixReadOnly.instance.m23_Getter_(this);
-
+  double get m23 => _blink.BlinkDOMMatrixReadOnly.instance.m23_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.m24')
   @DocsEditable()
   @Experimental() // untriaged
-  double get m24 => _blink.BlinkDOMMatrixReadOnly.instance.m24_Getter_(this);
-
+  double get m24 => _blink.BlinkDOMMatrixReadOnly.instance.m24_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.m31')
   @DocsEditable()
   @Experimental() // untriaged
-  double get m31 => _blink.BlinkDOMMatrixReadOnly.instance.m31_Getter_(this);
-
+  double get m31 => _blink.BlinkDOMMatrixReadOnly.instance.m31_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.m32')
   @DocsEditable()
   @Experimental() // untriaged
-  double get m32 => _blink.BlinkDOMMatrixReadOnly.instance.m32_Getter_(this);
-
+  double get m32 => _blink.BlinkDOMMatrixReadOnly.instance.m32_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.m33')
   @DocsEditable()
   @Experimental() // untriaged
-  double get m33 => _blink.BlinkDOMMatrixReadOnly.instance.m33_Getter_(this);
-
+  double get m33 => _blink.BlinkDOMMatrixReadOnly.instance.m33_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.m34')
   @DocsEditable()
   @Experimental() // untriaged
-  double get m34 => _blink.BlinkDOMMatrixReadOnly.instance.m34_Getter_(this);
-
+  double get m34 => _blink.BlinkDOMMatrixReadOnly.instance.m34_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.m41')
   @DocsEditable()
   @Experimental() // untriaged
-  double get m41 => _blink.BlinkDOMMatrixReadOnly.instance.m41_Getter_(this);
-
+  double get m41 => _blink.BlinkDOMMatrixReadOnly.instance.m41_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.m42')
   @DocsEditable()
   @Experimental() // untriaged
-  double get m42 => _blink.BlinkDOMMatrixReadOnly.instance.m42_Getter_(this);
-
+  double get m42 => _blink.BlinkDOMMatrixReadOnly.instance.m42_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.m43')
   @DocsEditable()
   @Experimental() // untriaged
-  double get m43 => _blink.BlinkDOMMatrixReadOnly.instance.m43_Getter_(this);
-
+  double get m43 => _blink.BlinkDOMMatrixReadOnly.instance.m43_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.m44')
   @DocsEditable()
   @Experimental() // untriaged
-  double get m44 => _blink.BlinkDOMMatrixReadOnly.instance.m44_Getter_(this);
-
+  double get m44 => _blink.BlinkDOMMatrixReadOnly.instance.m44_Getter_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.multiply')
   @DocsEditable()
   @Experimental() // untriaged
-  DomMatrix multiply(DomMatrix other) => _blink.BlinkDOMMatrixReadOnly.instance.multiply_Callback_1_(this, other);
-
+  DomMatrix multiply(DomMatrix other) => _blink.BlinkDOMMatrixReadOnly.instance.multiply_Callback_1_(unwrap_jso(this), unwrap_jso(other));
+  
   DomMatrix scale(num scale, [num ox, num oy]) {
     if (oy != null) {
-      return _blink.BlinkDOMMatrixReadOnly.instance.scale_Callback_3_(this, scale, ox, oy);
+      return _blink.BlinkDOMMatrixReadOnly.instance.scale_Callback_3_(unwrap_jso(this), scale, ox, oy);
     }
     if (ox != null) {
-      return _blink.BlinkDOMMatrixReadOnly.instance.scale_Callback_2_(this, scale, ox);
+      return _blink.BlinkDOMMatrixReadOnly.instance.scale_Callback_2_(unwrap_jso(this), scale, ox);
     }
-    return _blink.BlinkDOMMatrixReadOnly.instance.scale_Callback_1_(this, scale);
+    return _blink.BlinkDOMMatrixReadOnly.instance.scale_Callback_1_(unwrap_jso(this), scale);
   }
 
   DomMatrix scale3d(num scale, [num ox, num oy, num oz]) {
     if (oz != null) {
-      return _blink.BlinkDOMMatrixReadOnly.instance.scale3d_Callback_4_(this, scale, ox, oy, oz);
+      return _blink.BlinkDOMMatrixReadOnly.instance.scale3d_Callback_4_(unwrap_jso(this), scale, ox, oy, oz);
     }
     if (oy != null) {
-      return _blink.BlinkDOMMatrixReadOnly.instance.scale3d_Callback_3_(this, scale, ox, oy);
+      return _blink.BlinkDOMMatrixReadOnly.instance.scale3d_Callback_3_(unwrap_jso(this), scale, ox, oy);
     }
     if (ox != null) {
-      return _blink.BlinkDOMMatrixReadOnly.instance.scale3d_Callback_2_(this, scale, ox);
+      return _blink.BlinkDOMMatrixReadOnly.instance.scale3d_Callback_2_(unwrap_jso(this), scale, ox);
     }
-    return _blink.BlinkDOMMatrixReadOnly.instance.scale3d_Callback_1_(this, scale);
+    return _blink.BlinkDOMMatrixReadOnly.instance.scale3d_Callback_1_(unwrap_jso(this), scale);
   }
 
   DomMatrix scaleNonUniform(num sx, [num sy, num sz, num ox, num oy, num oz]) {
     if (oz != null) {
-      return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_6_(this, sx, sy, sz, ox, oy, oz);
+      return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_6_(unwrap_jso(this), sx, sy, sz, ox, oy, oz);
     }
     if (oy != null) {
-      return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_5_(this, sx, sy, sz, ox, oy);
+      return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_5_(unwrap_jso(this), sx, sy, sz, ox, oy);
     }
     if (ox != null) {
-      return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_4_(this, sx, sy, sz, ox);
+      return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_4_(unwrap_jso(this), sx, sy, sz, ox);
     }
     if (sz != null) {
-      return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_3_(this, sx, sy, sz);
+      return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_3_(unwrap_jso(this), sx, sy, sz);
     }
     if (sy != null) {
-      return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_2_(this, sx, sy);
+      return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_2_(unwrap_jso(this), sx, sy);
     }
-    return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_1_(this, sx);
+    return _blink.BlinkDOMMatrixReadOnly.instance.scaleNonUniform_Callback_1_(unwrap_jso(this), sx);
   }
 
   @DomName('DOMMatrixReadOnly.toFloat32Array')
   @DocsEditable()
   @Experimental() // untriaged
-  Float32List toFloat32Array() => _blink.BlinkDOMMatrixReadOnly.instance.toFloat32Array_Callback_0_(this);
-
+  Float32List toFloat32Array() => _blink.BlinkDOMMatrixReadOnly.instance.toFloat32Array_Callback_0_(unwrap_jso(this));
+  
   @DomName('DOMMatrixReadOnly.toFloat64Array')
   @DocsEditable()
   @Experimental() // untriaged
-  Float64List toFloat64Array() => _blink.BlinkDOMMatrixReadOnly.instance.toFloat64Array_Callback_0_(this);
-
+  Float64List toFloat64Array() => _blink.BlinkDOMMatrixReadOnly.instance.toFloat64Array_Callback_0_(unwrap_jso(this));
+  
   DomMatrix translate(num tx, num ty, [num tz]) {
     if (tz != null) {
-      return _blink.BlinkDOMMatrixReadOnly.instance.translate_Callback_3_(this, tx, ty, tz);
+      return _blink.BlinkDOMMatrixReadOnly.instance.translate_Callback_3_(unwrap_jso(this), tx, ty, tz);
     }
-    return _blink.BlinkDOMMatrixReadOnly.instance.translate_Callback_2_(this, tx, ty);
+    return _blink.BlinkDOMMatrixReadOnly.instance.translate_Callback_2_(unwrap_jso(this), tx, ty);
   }
 
 }
@@ -10134,8 +10143,8 @@
 
   @DomName('DOMParser.parseFromString')
   @DocsEditable()
-  Document parseFromString(String str, String contentType) => _blink.BlinkDOMParser.instance.parseFromString_Callback_2_(this, str, contentType);
-
+  Document parseFromString(String str, String contentType) => wrap_jso(_blink.BlinkDOMParser.instance.parseFromString_Callback_2_(unwrap_jso(this), str, contentType));
+  
 }
 // 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
@@ -10178,43 +10187,43 @@
   @DomName('DOMPoint.w')
   @DocsEditable()
   @Experimental() // untriaged
-  num get w => _blink.BlinkDOMPoint.instance.w_Getter_(this);
-
+  num get w => _blink.BlinkDOMPoint.instance.w_Getter_(unwrap_jso(this));
+  
   @DomName('DOMPoint.w')
   @DocsEditable()
   @Experimental() // untriaged
-  void set w(num value) => _blink.BlinkDOMPoint.instance.w_Setter_(this, value);
-
+  void set w(num value) => _blink.BlinkDOMPoint.instance.w_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMPoint.x')
   @DocsEditable()
   @Experimental() // untriaged
-  num get x => _blink.BlinkDOMPoint.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkDOMPoint.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('DOMPoint.x')
   @DocsEditable()
   @Experimental() // untriaged
-  void set x(num value) => _blink.BlinkDOMPoint.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkDOMPoint.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMPoint.y')
   @DocsEditable()
   @Experimental() // untriaged
-  num get y => _blink.BlinkDOMPoint.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkDOMPoint.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('DOMPoint.y')
   @DocsEditable()
   @Experimental() // untriaged
-  void set y(num value) => _blink.BlinkDOMPoint.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkDOMPoint.instance.y_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMPoint.z')
   @DocsEditable()
   @Experimental() // untriaged
-  num get z => _blink.BlinkDOMPoint.instance.z_Getter_(this);
-
+  num get z => _blink.BlinkDOMPoint.instance.z_Getter_(unwrap_jso(this));
+  
   @DomName('DOMPoint.z')
   @DocsEditable()
   @Experimental() // untriaged
-  void set z(num value) => _blink.BlinkDOMPoint.instance.z_Setter_(this, value);
-
+  void set z(num value) => _blink.BlinkDOMPoint.instance.z_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -10239,23 +10248,23 @@
   @DomName('DOMPointReadOnly.w')
   @DocsEditable()
   @Experimental() // untriaged
-  double get w => _blink.BlinkDOMPointReadOnly.instance.w_Getter_(this);
-
+  double get w => _blink.BlinkDOMPointReadOnly.instance.w_Getter_(unwrap_jso(this));
+  
   @DomName('DOMPointReadOnly.x')
   @DocsEditable()
   @Experimental() // untriaged
-  double get x => _blink.BlinkDOMPointReadOnly.instance.x_Getter_(this);
-
+  double get x => _blink.BlinkDOMPointReadOnly.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('DOMPointReadOnly.y')
   @DocsEditable()
   @Experimental() // untriaged
-  double get y => _blink.BlinkDOMPointReadOnly.instance.y_Getter_(this);
-
+  double get y => _blink.BlinkDOMPointReadOnly.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('DOMPointReadOnly.z')
   @DocsEditable()
   @Experimental() // untriaged
-  double get z => _blink.BlinkDOMPointReadOnly.instance.z_Getter_(this);
-
+  double get z => _blink.BlinkDOMPointReadOnly.instance.z_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -10368,43 +10377,43 @@
   @DomName('DOMRectReadOnly.bottom')
   @DocsEditable()
   @Experimental() // untriaged
-  double get bottom => _blink.BlinkDOMRectReadOnly.instance.bottom_Getter_(this);
-
+  double get bottom => _blink.BlinkDOMRectReadOnly.instance.bottom_Getter_(unwrap_jso(this));
+  
   @DomName('DOMRectReadOnly.height')
   @DocsEditable()
   @Experimental() // untriaged
-  double get height => _blink.BlinkDOMRectReadOnly.instance.height_Getter_(this);
-
+  double get height => _blink.BlinkDOMRectReadOnly.instance.height_Getter_(unwrap_jso(this));
+  
   @DomName('DOMRectReadOnly.left')
   @DocsEditable()
   @Experimental() // untriaged
-  double get left => _blink.BlinkDOMRectReadOnly.instance.left_Getter_(this);
-
+  double get left => _blink.BlinkDOMRectReadOnly.instance.left_Getter_(unwrap_jso(this));
+  
   @DomName('DOMRectReadOnly.right')
   @DocsEditable()
   @Experimental() // untriaged
-  double get right => _blink.BlinkDOMRectReadOnly.instance.right_Getter_(this);
-
+  double get right => _blink.BlinkDOMRectReadOnly.instance.right_Getter_(unwrap_jso(this));
+  
   @DomName('DOMRectReadOnly.top')
   @DocsEditable()
   @Experimental() // untriaged
-  double get top => _blink.BlinkDOMRectReadOnly.instance.top_Getter_(this);
-
+  double get top => _blink.BlinkDOMRectReadOnly.instance.top_Getter_(unwrap_jso(this));
+  
   @DomName('DOMRectReadOnly.width')
   @DocsEditable()
   @Experimental() // untriaged
-  double get width => _blink.BlinkDOMRectReadOnly.instance.width_Getter_(this);
-
+  double get width => _blink.BlinkDOMRectReadOnly.instance.width_Getter_(unwrap_jso(this));
+  
   @DomName('DOMRectReadOnly.x')
   @DocsEditable()
   @Experimental() // untriaged
-  double get x => _blink.BlinkDOMRectReadOnly.instance.x_Getter_(this);
-
+  double get x => _blink.BlinkDOMRectReadOnly.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('DOMRectReadOnly.y')
   @DocsEditable()
   @Experimental() // untriaged
-  double get y => _blink.BlinkDOMRectReadOnly.instance.y_Getter_(this);
-}
+  double get y => _blink.BlinkDOMRectReadOnly.instance.y_Getter_(unwrap_jso(this));
+  }
 
 // 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
@@ -10421,16 +10430,16 @@
 
   @DomName('DOMSettableTokenList.value')
   @DocsEditable()
-  String get value => _blink.BlinkDOMSettableTokenList.instance.value_Getter_(this);
-
+  String get value => _blink.BlinkDOMSettableTokenList.instance.value_Getter_(unwrap_jso(this));
+  
   @DomName('DOMSettableTokenList.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkDOMSettableTokenList.instance.value_Setter_(this, value);
-
+  void set value(String value) => _blink.BlinkDOMSettableTokenList.instance.value_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMSettableTokenList.__getter__')
   @DocsEditable()
-  String __getter__(int index) => _blink.BlinkDOMSettableTokenList.instance.$__getter___Callback_1_(this, index);
-
+  String __getter__(int index) => _blink.BlinkDOMSettableTokenList.instance.$__getter___Callback_1_(unwrap_jso(this), index);
+  
 }
 // 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
@@ -10447,16 +10456,16 @@
 
   @DomName('DOMStringList.length')
   @DocsEditable()
-  int get length => _blink.BlinkDOMStringList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkDOMStringList.instance.length_Getter_(unwrap_jso(this));
+  
   String operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkDOMStringList.instance.item_Callback_1_(this, index);
+    return _blink.BlinkDOMStringList.instance.item_Callback_1_(unwrap_jso(this), index);
   }
 
-  String _nativeIndexedGetter(int index) => _blink.BlinkDOMStringList.instance.item_Callback_1_(this, index);
-
+  String _nativeIndexedGetter(int index) => _blink.BlinkDOMStringList.instance.item_Callback_1_(unwrap_jso(this), index);
+ 
   void operator[]=(int index, String value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -10497,12 +10506,12 @@
 
   @DomName('DOMStringList.contains')
   @DocsEditable()
-  bool contains(String string) => _blink.BlinkDOMStringList.instance.contains_Callback_1_(this, string);
-
+  bool contains(String string) => _blink.BlinkDOMStringList.instance.contains_Callback_1_(unwrap_jso(this), string);
+  
   @DomName('DOMStringList.item')
   @DocsEditable()
-  String item(int index) => _blink.BlinkDOMStringList.instance.item_Callback_1_(this, index);
-
+  String item(int index) => _blink.BlinkDOMStringList.instance.item_Callback_1_(unwrap_jso(this), index);
+  
 }
 // 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
@@ -10519,31 +10528,31 @@
 
   bool __delete__(index_OR_name) {
     if ((index_OR_name is int || index_OR_name == null)) {
-      return _blink.BlinkDOMStringMap.instance.$__delete___Callback_1_(this, index_OR_name);
+      return _blink.BlinkDOMStringMap.instance.$__delete___Callback_1_(unwrap_jso(this), unwrap_jso(index_OR_name));
     }
     if ((index_OR_name is String || index_OR_name == null)) {
-      return _blink.BlinkDOMStringMap.instance.$__delete___Callback_1_(this, index_OR_name);
+      return _blink.BlinkDOMStringMap.instance.$__delete___Callback_1_(unwrap_jso(this), unwrap_jso(index_OR_name));
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   String __getter__(index_OR_name) {
     if ((index_OR_name is int || index_OR_name == null)) {
-      return _blink.BlinkDOMStringMap.instance.$__getter___Callback_1_(this, index_OR_name);
+      return _blink.BlinkDOMStringMap.instance.$__getter___Callback_1_(unwrap_jso(this), unwrap_jso(index_OR_name));
     }
     if ((index_OR_name is String || index_OR_name == null)) {
-      return _blink.BlinkDOMStringMap.instance.$__getter___Callback_1_(this, index_OR_name);
+      return _blink.BlinkDOMStringMap.instance.$__getter___Callback_1_(unwrap_jso(this), unwrap_jso(index_OR_name));
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   void __setter__(index_OR_name, String value) {
     if ((value is String || value == null) && (index_OR_name is int || index_OR_name == null)) {
-      _blink.BlinkDOMStringMap.instance.$__setter___Callback_2_(this, index_OR_name, value);
+      _blink.BlinkDOMStringMap.instance.$__setter___Callback_2_(unwrap_jso(this), unwrap_jso(index_OR_name), value);
       return;
     }
     if ((value is String || value == null) && (index_OR_name is String || index_OR_name == null)) {
-      _blink.BlinkDOMStringMap.instance.$__setter___Callback_2_(this, index_OR_name, value);
+      _blink.BlinkDOMStringMap.instance.$__setter___Callback_2_(unwrap_jso(this), unwrap_jso(index_OR_name), value);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -10565,31 +10574,31 @@
 
   @DomName('DOMTokenList.length')
   @DocsEditable()
-  int get length => _blink.BlinkDOMTokenList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkDOMTokenList.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('DOMTokenList.add')
   @DocsEditable()
   @Experimental() // untriaged
-  void add(String tokens) => _blink.BlinkDOMTokenList.instance.add_Callback_1_(this, tokens);
-
+  void add(String tokens) => _blink.BlinkDOMTokenList.instance.add_Callback_1_(unwrap_jso(this), tokens);
+  
   @DomName('DOMTokenList.contains')
   @DocsEditable()
-  bool contains(String token) => _blink.BlinkDOMTokenList.instance.contains_Callback_1_(this, token);
-
+  bool contains(String token) => _blink.BlinkDOMTokenList.instance.contains_Callback_1_(unwrap_jso(this), token);
+  
   @DomName('DOMTokenList.item')
   @DocsEditable()
-  String item(int index) => _blink.BlinkDOMTokenList.instance.item_Callback_1_(this, index);
-
+  String item(int index) => _blink.BlinkDOMTokenList.instance.item_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('DOMTokenList.remove')
   @DocsEditable()
   @Experimental() // untriaged
-  void remove(String tokens) => _blink.BlinkDOMTokenList.instance.remove_Callback_1_(this, tokens);
-
+  void remove(String tokens) => _blink.BlinkDOMTokenList.instance.remove_Callback_1_(unwrap_jso(this), tokens);
+  
   bool toggle(String token, [bool force]) {
     if (force != null) {
-      return _blink.BlinkDOMTokenList.instance.toggle_Callback_2_(this, token, force);
+      return _blink.BlinkDOMTokenList.instance.toggle_Callback_2_(unwrap_jso(this), token, force);
     }
-    return _blink.BlinkDOMTokenList.instance.toggle_Callback_1_(this, token);
+    return _blink.BlinkDOMTokenList.instance.toggle_Callback_1_(unwrap_jso(this), token);
   }
 
 }
@@ -12426,7 +12435,7 @@
       if (treeSanitizer is _TrustedHtmlTreeSanitizer) {
         _insertAdjacentHtml(where, html);
       } else {
-        _insertAdjacentNode(where, new DocumentFragment.html(html,
+        _insertAdjacentNode(where, createFragment(html,
             validator: validator, treeSanitizer: treeSanitizer));
       }
   }
@@ -12629,10 +12638,11 @@
     if (_parseDocument == null) {
       _parseDocument = document.implementation.createHtmlDocument('');
       _parseRange = _parseDocument.createRange();
-
-      // Workaround for Chrome bug 229142- URIs are not resolved in new doc.
-      var base = _parseDocument.createElement('base');
-      base.href = document.baseUri;
+	
+      // Workaround for Safari bug. Was also previously Chrome bug 229142
+      // - URIs are not resolved in new doc.	
+      var base = _parseDocument.createElement('base');	
+      base.href = document.baseUri;	
       _parseDocument.head.append(base);
     }
     var contextElement;
@@ -12643,7 +12653,8 @@
       _parseDocument.body.append(contextElement);
     }
     var fragment;
-    if (Range.supportsCreateContextualFragment) {
+    if (Range.supportsCreateContextualFragment &&
+        _canBeUsedToCreateContextualFragment) {
       _parseRange.selectNodeContents(contextElement);
       fragment = _parseRange.createContextualFragment(html);
     } else {
@@ -12665,6 +12676,24 @@
     return fragment;
   }
 
+  /** Test if createContextualFragment is supported for this element type */
+  bool get _canBeUsedToCreateContextualFragment =>
+      !_cannotBeUsedToCreateContextualFragment;
+
+  /** Test if createContextualFragment is NOT supported for this element type */
+  bool get _cannotBeUsedToCreateContextualFragment =>
+      _tagsForWhichCreateContextualFragmentIsNotSupported.contains(tagName);
+
+  /**
+   * A hard-coded list of the tag names for which createContextualFragment
+   * isn't supported.
+   */
+  static const _tagsForWhichCreateContextualFragmentIsNotSupported =
+      const ['HEAD', 'AREA',
+      'BASE', 'BASEFONT', 'BR', 'COL', 'COLGROUP', 'EMBED', 'FRAME', 'FRAMESET',
+      'HR', 'IMAGE', 'IMG', 'INPUT', 'ISINDEX', 'LINK', 'META', 'PARAM',
+      'SOURCE', 'STYLE', 'TITLE', 'WBR'];
+
   /**
    * Parses the HTML fragment and sets it as the contents of this element.
    *
@@ -13478,155 +13507,155 @@
 
   @DomName('Element.attributes')
   @DocsEditable()
-  _NamedNodeMap get _attributes => _blink.BlinkElement.instance.attributes_Getter_(this);
-
+  _NamedNodeMap get _attributes => wrap_jso(_blink.BlinkElement.instance.attributes_Getter_(unwrap_jso(this)));
+  
   @DomName('Element.className')
   @DocsEditable()
-  String get className => _blink.BlinkElement.instance.className_Getter_(this);
-
+  String get className => _blink.BlinkElement.instance.className_Getter_(unwrap_jso(this));
+  
   @DomName('Element.className')
   @DocsEditable()
-  void set className(String value) => _blink.BlinkElement.instance.className_Setter_(this, value);
-
+  void set className(String value) => _blink.BlinkElement.instance.className_Setter_(unwrap_jso(this), value);
+  
   @DomName('Element.clientHeight')
   @DocsEditable()
-  int get _clientHeight => _blink.BlinkElement.instance.clientHeight_Getter_(this);
-
+  int get _clientHeight => _blink.BlinkElement.instance.clientHeight_Getter_(unwrap_jso(this));
+  
   @DomName('Element.clientLeft')
   @DocsEditable()
-  int get _clientLeft => _blink.BlinkElement.instance.clientLeft_Getter_(this);
-
+  int get _clientLeft => _blink.BlinkElement.instance.clientLeft_Getter_(unwrap_jso(this));
+  
   @DomName('Element.clientTop')
   @DocsEditable()
-  int get _clientTop => _blink.BlinkElement.instance.clientTop_Getter_(this);
-
+  int get _clientTop => _blink.BlinkElement.instance.clientTop_Getter_(unwrap_jso(this));
+  
   @DomName('Element.clientWidth')
   @DocsEditable()
-  int get _clientWidth => _blink.BlinkElement.instance.clientWidth_Getter_(this);
-
+  int get _clientWidth => _blink.BlinkElement.instance.clientWidth_Getter_(unwrap_jso(this));
+  
   @DomName('Element.id')
   @DocsEditable()
-  String get id => _blink.BlinkElement.instance.id_Getter_(this);
-
+  String get id => _blink.BlinkElement.instance.id_Getter_(unwrap_jso(this));
+  
   @DomName('Element.id')
   @DocsEditable()
-  void set id(String value) => _blink.BlinkElement.instance.id_Setter_(this, value);
-
+  void set id(String value) => _blink.BlinkElement.instance.id_Setter_(unwrap_jso(this), value);
+  
   @DomName('Element.innerHTML')
   @DocsEditable()
-  String get _innerHtml => _blink.BlinkElement.instance.innerHTML_Getter_(this);
-
+  String get _innerHtml => _blink.BlinkElement.instance.innerHTML_Getter_(unwrap_jso(this));
+  
   @DomName('Element.innerHTML')
   @DocsEditable()
-  void set _innerHtml(String value) => _blink.BlinkElement.instance.innerHTML_Setter_(this, value);
-
+  void set _innerHtml(String value) => _blink.BlinkElement.instance.innerHTML_Setter_(unwrap_jso(this), value);
+  
   @DomName('Element.localName')
   @DocsEditable()
   @Experimental() // untriaged
-  String get _localName => _blink.BlinkElement.instance.localName_Getter_(this);
-
+  String get _localName => _blink.BlinkElement.instance.localName_Getter_(unwrap_jso(this));
+  
   @DomName('Element.namespaceURI')
   @DocsEditable()
   @Experimental() // untriaged
-  String get _namespaceUri => _blink.BlinkElement.instance.namespaceURI_Getter_(this);
-
+  String get _namespaceUri => _blink.BlinkElement.instance.namespaceURI_Getter_(unwrap_jso(this));
+  
   @DomName('Element.offsetHeight')
   @DocsEditable()
-  int get _offsetHeight => _blink.BlinkElement.instance.offsetHeight_Getter_(this);
-
+  int get _offsetHeight => _blink.BlinkElement.instance.offsetHeight_Getter_(unwrap_jso(this));
+  
   @DomName('Element.offsetLeft')
   @DocsEditable()
-  int get _offsetLeft => _blink.BlinkElement.instance.offsetLeft_Getter_(this);
-
+  int get _offsetLeft => _blink.BlinkElement.instance.offsetLeft_Getter_(unwrap_jso(this));
+  
   @DomName('Element.offsetParent')
   @DocsEditable()
-  Element get offsetParent => _blink.BlinkElement.instance.offsetParent_Getter_(this);
-
+  Element get offsetParent => wrap_jso(_blink.BlinkElement.instance.offsetParent_Getter_(unwrap_jso(this)));
+  
   @DomName('Element.offsetTop')
   @DocsEditable()
-  int get _offsetTop => _blink.BlinkElement.instance.offsetTop_Getter_(this);
-
+  int get _offsetTop => _blink.BlinkElement.instance.offsetTop_Getter_(unwrap_jso(this));
+  
   @DomName('Element.offsetWidth')
   @DocsEditable()
-  int get _offsetWidth => _blink.BlinkElement.instance.offsetWidth_Getter_(this);
-
+  int get _offsetWidth => _blink.BlinkElement.instance.offsetWidth_Getter_(unwrap_jso(this));
+  
   @DomName('Element.outerHTML')
   @DocsEditable()
-  String get outerHtml => _blink.BlinkElement.instance.outerHTML_Getter_(this);
-
+  String get outerHtml => _blink.BlinkElement.instance.outerHTML_Getter_(unwrap_jso(this));
+  
   @DomName('Element.scrollHeight')
   @DocsEditable()
-  int get _scrollHeight => _blink.BlinkElement.instance.scrollHeight_Getter_(this);
-
+  int get _scrollHeight => _blink.BlinkElement.instance.scrollHeight_Getter_(unwrap_jso(this));
+  
   @DomName('Element.scrollLeft')
   @DocsEditable()
-  num get _scrollLeft => _blink.BlinkElement.instance.scrollLeft_Getter_(this);
-
+  num get _scrollLeft => _blink.BlinkElement.instance.scrollLeft_Getter_(unwrap_jso(this));
+  
   @DomName('Element.scrollLeft')
   @DocsEditable()
-  void set _scrollLeft(num value) => _blink.BlinkElement.instance.scrollLeft_Setter_(this, value);
-
+  void set _scrollLeft(num value) => _blink.BlinkElement.instance.scrollLeft_Setter_(unwrap_jso(this), value);
+  
   @DomName('Element.scrollTop')
   @DocsEditable()
-  num get _scrollTop => _blink.BlinkElement.instance.scrollTop_Getter_(this);
-
+  num get _scrollTop => _blink.BlinkElement.instance.scrollTop_Getter_(unwrap_jso(this));
+  
   @DomName('Element.scrollTop')
   @DocsEditable()
-  void set _scrollTop(num value) => _blink.BlinkElement.instance.scrollTop_Setter_(this, value);
-
+  void set _scrollTop(num value) => _blink.BlinkElement.instance.scrollTop_Setter_(unwrap_jso(this), value);
+  
   @DomName('Element.scrollWidth')
   @DocsEditable()
-  int get _scrollWidth => _blink.BlinkElement.instance.scrollWidth_Getter_(this);
-
+  int get _scrollWidth => _blink.BlinkElement.instance.scrollWidth_Getter_(unwrap_jso(this));
+  
   @DomName('Element.shadowRoot')
   @DocsEditable()
   // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#api-shadow-aware-create-shadow-root
   @Experimental()
-  ShadowRoot get shadowRoot => _blink.BlinkElement.instance.shadowRoot_Getter_(this);
-
+  ShadowRoot get shadowRoot => wrap_jso(_blink.BlinkElement.instance.shadowRoot_Getter_(unwrap_jso(this)));
+  
   @DomName('Element.style')
   @DocsEditable()
-  CssStyleDeclaration get style => _blink.BlinkElement.instance.style_Getter_(this);
-
+  CssStyleDeclaration get style => wrap_jso(_blink.BlinkElement.instance.style_Getter_(unwrap_jso(this)));
+  
   @DomName('Element.tagName')
   @DocsEditable()
-  String get tagName => _blink.BlinkElement.instance.tagName_Getter_(this);
-
+  String get tagName => _blink.BlinkElement.instance.tagName_Getter_(unwrap_jso(this));
+  
   @DomName('Element.animate')
   @DocsEditable()
   @Experimental() // untriaged
-  AnimationPlayer animate(Object effect, [Object timing]) => _blink.BlinkElement.instance.animate_Callback_2_(this, effect, timing);
-
+  AnimationPlayer animate(Object effect, [Object timing]) => wrap_jso(_blink.BlinkElement.instance.animate_Callback_2_(unwrap_jso(this), effect, timing));
+  
   @DomName('Element.blur')
   @DocsEditable()
-  void blur() => _blink.BlinkElement.instance.blur_Callback_0_(this);
-
+  void blur() => _blink.BlinkElement.instance.blur_Callback_0_(unwrap_jso(this));
+  
   @DomName('Element.createShadowRoot')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME, '25')
   @Experimental()
   // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#api-shadow-aware-create-shadow-root
-  ShadowRoot createShadowRoot() => _blink.BlinkElement.instance.createShadowRoot_Callback_0_(this);
-
+  ShadowRoot createShadowRoot() => wrap_jso(_blink.BlinkElement.instance.createShadowRoot_Callback_0_(unwrap_jso(this)));
+  
   @DomName('Element.focus')
   @DocsEditable()
-  void focus() => _blink.BlinkElement.instance.focus_Callback_0_(this);
-
+  void focus() => _blink.BlinkElement.instance.focus_Callback_0_(unwrap_jso(this));
+  
   @DomName('Element.getAnimationPlayers')
   @DocsEditable()
   @Experimental() // untriaged
-  List<AnimationPlayer> getAnimationPlayers() => _blink.BlinkElement.instance.getAnimationPlayers_Callback_0_(this);
-
+  List<AnimationPlayer> getAnimationPlayers() => _blink.BlinkElement.instance.getAnimationPlayers_Callback_0_(unwrap_jso(this));
+  
   @DomName('Element.getAttribute')
   @DocsEditable()
   @Experimental() // untriaged
-  String getAttribute(String name) => _blink.BlinkElement.instance.getAttribute_Callback_1_(this, name);
-
+  String getAttribute(String name) => _blink.BlinkElement.instance.getAttribute_Callback_1_(unwrap_jso(this), name);
+  
   @DomName('Element.getAttributeNS')
   @DocsEditable()
   @Experimental() // untriaged
-  String getAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.instance.getAttributeNS_Callback_2_(this, namespaceURI, localName);
-
+  String getAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.instance.getAttributeNS_Callback_2_(unwrap_jso(this), namespaceURI, localName);
+  
   /**
    * Returns the smallest bounding rectangle that encompasses this element's
    * padding, scrollbar, and border.
@@ -13642,8 +13671,8 @@
    */
   @DomName('Element.getBoundingClientRect')
   @DocsEditable()
-  Rectangle getBoundingClientRect() => _blink.BlinkElement.instance.getBoundingClientRect_Callback_0_(this);
-
+  Rectangle getBoundingClientRect() => make_dart_rectangle(_blink.BlinkElement.instance.getBoundingClientRect_Callback_0_(unwrap_jso(this)));
+  
   /**
    * Returns a list of bounding rectangles for each box associated with this
    * element.
@@ -13659,8 +13688,8 @@
    */
   @DomName('Element.getClientRects')
   @DocsEditable()
-  List<Rectangle> getClientRects() => _blink.BlinkElement.instance.getClientRects_Callback_0_(this);
-
+  List<Rectangle> getClientRects() => _blink.BlinkElement.instance.getClientRects_Callback_0_(unwrap_jso(this));
+  
   /**
    * Returns a list of shadow DOM insertion points to which this element is
    * distributed.
@@ -13674,8 +13703,8 @@
   @DomName('Element.getDestinationInsertionPoints')
   @DocsEditable()
   @Experimental() // untriaged
-  List<Node> getDestinationInsertionPoints() => _blink.BlinkElement.instance.getDestinationInsertionPoints_Callback_0_(this);
-
+  List<Node> getDestinationInsertionPoints() => wrap_jso_list(_blink.BlinkElement.instance.getDestinationInsertionPoints_Callback_0_(unwrap_jso(this)));
+  
   /**
    * Returns a list of nodes with the given class name inside this element.
    *
@@ -13689,112 +13718,112 @@
    */
   @DomName('Element.getElementsByClassName')
   @DocsEditable()
-  List<Node> getElementsByClassName(String classNames) => _blink.BlinkElement.instance.getElementsByClassName_Callback_1_(this, classNames);
-
+  List<Node> getElementsByClassName(String classNames) => wrap_jso_list(_blink.BlinkElement.instance.getElementsByClassName_Callback_1_(unwrap_jso(this), classNames));
+  
   @DomName('Element.getElementsByTagName')
   @DocsEditable()
-  List<Node> _getElementsByTagName(String name) => _blink.BlinkElement.instance.getElementsByTagName_Callback_1_(this, name);
-
+  List<Node> _getElementsByTagName(String name) => wrap_jso_list(_blink.BlinkElement.instance.getElementsByTagName_Callback_1_(unwrap_jso(this), name));
+  
   @DomName('Element.hasAttribute')
   @DocsEditable()
-  bool _hasAttribute(String name) => _blink.BlinkElement.instance.hasAttribute_Callback_1_(this, name);
-
+  bool _hasAttribute(String name) => _blink.BlinkElement.instance.hasAttribute_Callback_1_(unwrap_jso(this), name);
+  
   @DomName('Element.hasAttributeNS')
   @DocsEditable()
-  bool _hasAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.instance.hasAttributeNS_Callback_2_(this, namespaceURI, localName);
-
+  bool _hasAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.instance.hasAttributeNS_Callback_2_(unwrap_jso(this), namespaceURI, localName);
+  
   @DomName('Element.insertAdjacentElement')
   @DocsEditable()
   @Experimental() // untriaged
-  Element insertAdjacentElement(String where, Element element) => _blink.BlinkElement.instance.insertAdjacentElement_Callback_2_(this, where, element);
-
+  Element insertAdjacentElement(String where, Element element) => wrap_jso(_blink.BlinkElement.instance.insertAdjacentElement_Callback_2_(unwrap_jso(this), where, unwrap_jso(element)));
+  
   @DomName('Element.insertAdjacentHTML')
   @DocsEditable()
   @Experimental() // untriaged
-  void _insertAdjacentHtml(String where, String html) => _blink.BlinkElement.instance.insertAdjacentHTML_Callback_2_(this, where, html);
-
+  void _insertAdjacentHtml(String where, String html) => _blink.BlinkElement.instance.insertAdjacentHTML_Callback_2_(unwrap_jso(this), where, html);
+  
   @DomName('Element.insertAdjacentText')
   @DocsEditable()
   @Experimental() // untriaged
-  void insertAdjacentText(String where, String text) => _blink.BlinkElement.instance.insertAdjacentText_Callback_2_(this, where, text);
-
+  void insertAdjacentText(String where, String text) => _blink.BlinkElement.instance.insertAdjacentText_Callback_2_(unwrap_jso(this), where, text);
+  
   @DomName('Element.matches')
   @DocsEditable()
   @Experimental() // untriaged
-  bool matches(String selectors) => _blink.BlinkElement.instance.matches_Callback_1_(this, selectors);
-
+  bool matches(String selectors) => _blink.BlinkElement.instance.matches_Callback_1_(unwrap_jso(this), selectors);
+  
   @DomName('Element.removeAttribute')
   @DocsEditable()
-  void _removeAttribute(String name) => _blink.BlinkElement.instance.removeAttribute_Callback_1_(this, name);
-
+  void _removeAttribute(String name) => _blink.BlinkElement.instance.removeAttribute_Callback_1_(unwrap_jso(this), name);
+  
   @DomName('Element.removeAttributeNS')
   @DocsEditable()
-  void _removeAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.instance.removeAttributeNS_Callback_2_(this, namespaceURI, localName);
-
+  void _removeAttributeNS(String namespaceURI, String localName) => _blink.BlinkElement.instance.removeAttributeNS_Callback_2_(unwrap_jso(this), namespaceURI, localName);
+  
   @DomName('Element.requestFullscreen')
   @DocsEditable()
   @Experimental() // untriaged
-  void requestFullscreen() => _blink.BlinkElement.instance.requestFullscreen_Callback_0_(this);
-
+  void requestFullscreen() => _blink.BlinkElement.instance.requestFullscreen_Callback_0_(unwrap_jso(this));
+  
   @DomName('Element.requestPointerLock')
   @DocsEditable()
   @Experimental() // untriaged
-  void requestPointerLock() => _blink.BlinkElement.instance.requestPointerLock_Callback_0_(this);
-
+  void requestPointerLock() => _blink.BlinkElement.instance.requestPointerLock_Callback_0_(unwrap_jso(this));
+  
   void _scrollIntoView([bool alignWithTop]) {
     if (alignWithTop != null) {
-      _blink.BlinkElement.instance.scrollIntoView_Callback_1_(this, alignWithTop);
+      _blink.BlinkElement.instance.scrollIntoView_Callback_1_(unwrap_jso(this), alignWithTop);
       return;
     }
-    _blink.BlinkElement.instance.scrollIntoView_Callback_0_(this);
+    _blink.BlinkElement.instance.scrollIntoView_Callback_0_(unwrap_jso(this));
     return;
   }
 
   void _scrollIntoViewIfNeeded([bool centerIfNeeded]) {
     if (centerIfNeeded != null) {
-      _blink.BlinkElement.instance.scrollIntoViewIfNeeded_Callback_1_(this, centerIfNeeded);
+      _blink.BlinkElement.instance.scrollIntoViewIfNeeded_Callback_1_(unwrap_jso(this), centerIfNeeded);
       return;
     }
-    _blink.BlinkElement.instance.scrollIntoViewIfNeeded_Callback_0_(this);
+    _blink.BlinkElement.instance.scrollIntoViewIfNeeded_Callback_0_(unwrap_jso(this));
     return;
   }
 
   @DomName('Element.setAttribute')
   @DocsEditable()
-  void setAttribute(String name, String value) => _blink.BlinkElement.instance.setAttribute_Callback_2_(this, name, value);
-
+  void setAttribute(String name, String value) => _blink.BlinkElement.instance.setAttribute_Callback_2_(unwrap_jso(this), name, value);
+  
   @DomName('Element.setAttributeNS')
   @DocsEditable()
-  void setAttributeNS(String namespaceURI, String qualifiedName, String value) => _blink.BlinkElement.instance.setAttributeNS_Callback_3_(this, namespaceURI, qualifiedName, value);
-
+  void setAttributeNS(String namespaceURI, String qualifiedName, String value) => _blink.BlinkElement.instance.setAttributeNS_Callback_3_(unwrap_jso(this), namespaceURI, qualifiedName, value);
+  
   @DomName('Element.nextElementSibling')
   @DocsEditable()
-  Element get nextElementSibling => _blink.BlinkElement.instance.nextElementSibling_Getter_(this);
-
+  Element get nextElementSibling => wrap_jso(_blink.BlinkElement.instance.nextElementSibling_Getter_(unwrap_jso(this)));
+  
   @DomName('Element.previousElementSibling')
   @DocsEditable()
-  Element get previousElementSibling => _blink.BlinkElement.instance.previousElementSibling_Getter_(this);
-
+  Element get previousElementSibling => wrap_jso(_blink.BlinkElement.instance.previousElementSibling_Getter_(unwrap_jso(this)));
+  
   @DomName('Element.remove')
   @DocsEditable()
-  void remove() => _blink.BlinkElement.instance.remove_Callback_0_(this);
-
+  void remove() => _blink.BlinkElement.instance.remove_Callback_0_(unwrap_jso(this));
+  
   @DomName('Element.childElementCount')
   @DocsEditable()
-  int get _childElementCount => _blink.BlinkElement.instance.childElementCount_Getter_(this);
-
+  int get _childElementCount => _blink.BlinkElement.instance.childElementCount_Getter_(unwrap_jso(this));
+  
   @DomName('Element.children')
   @DocsEditable()
-  List<Node> get _children => _blink.BlinkElement.instance.children_Getter_(this);
-
+  List<Node> get _children => wrap_jso_list(_blink.BlinkElement.instance.children_Getter_(unwrap_jso(this)));
+  
   @DomName('Element.firstElementChild')
   @DocsEditable()
-  Element get _firstElementChild => _blink.BlinkElement.instance.firstElementChild_Getter_(this);
-
+  Element get _firstElementChild => wrap_jso(_blink.BlinkElement.instance.firstElementChild_Getter_(unwrap_jso(this)));
+  
   @DomName('Element.lastElementChild')
   @DocsEditable()
-  Element get _lastElementChild => _blink.BlinkElement.instance.lastElementChild_Getter_(this);
-
+  Element get _lastElementChild => wrap_jso(_blink.BlinkElement.instance.lastElementChild_Getter_(unwrap_jso(this)));
+  
   /**
    * Finds the first descendant element of this element that matches the
    * specified group of selectors.
@@ -13813,12 +13842,12 @@
    */
   @DomName('Element.querySelector')
   @DocsEditable()
-  Element querySelector(String selectors) => _blink.BlinkElement.instance.querySelector_Callback_1_(this, selectors);
-
+  Element querySelector(String selectors) => wrap_jso(_blink.BlinkElement.instance.querySelector_Callback_1_(unwrap_jso(this), selectors));
+  
   @DomName('Element.querySelectorAll')
   @DocsEditable()
-  List<Node> _querySelectorAll(String selectors) => _blink.BlinkElement.instance.querySelectorAll_Callback_1_(this, selectors);
-
+  List<Node> _querySelectorAll(String selectors) => wrap_jso_list(_blink.BlinkElement.instance.querySelectorAll_Callback_1_(unwrap_jso(this), selectors));
+  
   /// Stream of `abort` events handled by this [Element].
   @DomName('Element.onabort')
   @DocsEditable()
@@ -14343,62 +14372,62 @@
 
   @DomName('HTMLEmbedElement.height')
   @DocsEditable()
-  String get height => _blink.BlinkHTMLEmbedElement.instance.height_Getter_(this);
-
+  String get height => _blink.BlinkHTMLEmbedElement.instance.height_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLEmbedElement.height')
   @DocsEditable()
-  void set height(String value) => _blink.BlinkHTMLEmbedElement.instance.height_Setter_(this, value);
-
+  void set height(String value) => _blink.BlinkHTMLEmbedElement.instance.height_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLEmbedElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  String get integrity => _blink.BlinkHTMLEmbedElement.instance.integrity_Getter_(this);
-
+  String get integrity => _blink.BlinkHTMLEmbedElement.instance.integrity_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLEmbedElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLEmbedElement.instance.integrity_Setter_(this, value);
-
+  void set integrity(String value) => _blink.BlinkHTMLEmbedElement.instance.integrity_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLEmbedElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLEmbedElement.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkHTMLEmbedElement.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLEmbedElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLEmbedElement.instance.name_Setter_(this, value);
-
+  void set name(String value) => _blink.BlinkHTMLEmbedElement.instance.name_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLEmbedElement.src')
   @DocsEditable()
-  String get src => _blink.BlinkHTMLEmbedElement.instance.src_Getter_(this);
-
+  String get src => _blink.BlinkHTMLEmbedElement.instance.src_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLEmbedElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLEmbedElement.instance.src_Setter_(this, value);
-
+  void set src(String value) => _blink.BlinkHTMLEmbedElement.instance.src_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLEmbedElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLEmbedElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkHTMLEmbedElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLEmbedElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLEmbedElement.instance.type_Setter_(this, value);
-
+  void set type(String value) => _blink.BlinkHTMLEmbedElement.instance.type_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLEmbedElement.width')
   @DocsEditable()
-  String get width => _blink.BlinkHTMLEmbedElement.instance.width_Getter_(this);
-
+  String get width => _blink.BlinkHTMLEmbedElement.instance.width_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLEmbedElement.width')
   @DocsEditable()
-  void set width(String value) => _blink.BlinkHTMLEmbedElement.instance.width_Setter_(this, value);
-
+  void set width(String value) => _blink.BlinkHTMLEmbedElement.instance.width_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLEmbedElement.__getter__')
   @DocsEditable()
-  bool __getter__(index_OR_name) => _blink.BlinkHTMLEmbedElement.instance.$__getter___Callback_1_(this, index_OR_name);
-
+  bool __getter__(index_OR_name) => _blink.BlinkHTMLEmbedElement.instance.$__getter___Callback_1_(unwrap_jso(this), unwrap_jso(index_OR_name));
+  
   @DomName('HTMLEmbedElement.__setter__')
   @DocsEditable()
-  void __setter__(index_OR_name, Node value) => _blink.BlinkHTMLEmbedElement.instance.$__setter___Callback_2_(this, index_OR_name, value);
-
+  void __setter__(index_OR_name, Node value) => _blink.BlinkHTMLEmbedElement.instance.$__setter___Callback_2_(unwrap_jso(this), unwrap_jso(index_OR_name), unwrap_jso(value));
+  
 }
 // 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
@@ -14428,38 +14457,38 @@
 
   @DomName('Entry.filesystem')
   @DocsEditable()
-  FileSystem get filesystem => _blink.BlinkEntry.instance.filesystem_Getter_(this);
-
+  FileSystem get filesystem => wrap_jso(_blink.BlinkEntry.instance.filesystem_Getter_(unwrap_jso(this)));
+  
   @DomName('Entry.fullPath')
   @DocsEditable()
-  String get fullPath => _blink.BlinkEntry.instance.fullPath_Getter_(this);
-
+  String get fullPath => _blink.BlinkEntry.instance.fullPath_Getter_(unwrap_jso(this));
+  
   @DomName('Entry.isDirectory')
   @DocsEditable()
-  bool get isDirectory => _blink.BlinkEntry.instance.isDirectory_Getter_(this);
-
+  bool get isDirectory => _blink.BlinkEntry.instance.isDirectory_Getter_(unwrap_jso(this));
+  
   @DomName('Entry.isFile')
   @DocsEditable()
-  bool get isFile => _blink.BlinkEntry.instance.isFile_Getter_(this);
-
+  bool get isFile => _blink.BlinkEntry.instance.isFile_Getter_(unwrap_jso(this));
+  
   @DomName('Entry.name')
   @DocsEditable()
-  String get name => _blink.BlinkEntry.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkEntry.instance.name_Getter_(unwrap_jso(this));
+  
   void _copyTo(DirectoryEntry parent, {String name, _EntryCallback successCallback, _ErrorCallback errorCallback}) {
     if (errorCallback != null) {
-      _blink.BlinkEntry.instance.copyTo_Callback_4_(this, parent, name, successCallback, errorCallback);
+      _blink.BlinkEntry.instance.copyTo_Callback_4_(unwrap_jso(this), unwrap_jso(parent), name, unwrap_jso(successCallback), unwrap_jso(errorCallback));
       return;
     }
     if (successCallback != null) {
-      _blink.BlinkEntry.instance.copyTo_Callback_3_(this, parent, name, successCallback);
+      _blink.BlinkEntry.instance.copyTo_Callback_3_(unwrap_jso(this), unwrap_jso(parent), name, unwrap_jso(successCallback));
       return;
     }
     if (name != null) {
-      _blink.BlinkEntry.instance.copyTo_Callback_2_(this, parent, name);
+      _blink.BlinkEntry.instance.copyTo_Callback_2_(unwrap_jso(this), unwrap_jso(parent), name);
       return;
     }
-    _blink.BlinkEntry.instance.copyTo_Callback_1_(this, parent);
+    _blink.BlinkEntry.instance.copyTo_Callback_1_(unwrap_jso(this), unwrap_jso(parent));
     return;
   }
 
@@ -14473,10 +14502,10 @@
 
   void _getMetadata(MetadataCallback successCallback, [_ErrorCallback errorCallback]) {
     if (errorCallback != null) {
-      _blink.BlinkEntry.instance.getMetadata_Callback_2_(this, successCallback, errorCallback);
+      _blink.BlinkEntry.instance.getMetadata_Callback_2_(unwrap_jso(this), unwrap_jso(successCallback), unwrap_jso(errorCallback));
       return;
     }
-    _blink.BlinkEntry.instance.getMetadata_Callback_1_(this, successCallback);
+    _blink.BlinkEntry.instance.getMetadata_Callback_1_(unwrap_jso(this), unwrap_jso(successCallback));
     return;
   }
 
@@ -14490,14 +14519,14 @@
 
   void _getParent([_EntryCallback successCallback, _ErrorCallback errorCallback]) {
     if (errorCallback != null) {
-      _blink.BlinkEntry.instance.getParent_Callback_2_(this, successCallback, errorCallback);
+      _blink.BlinkEntry.instance.getParent_Callback_2_(unwrap_jso(this), unwrap_jso(successCallback), unwrap_jso(errorCallback));
       return;
     }
     if (successCallback != null) {
-      _blink.BlinkEntry.instance.getParent_Callback_1_(this, successCallback);
+      _blink.BlinkEntry.instance.getParent_Callback_1_(unwrap_jso(this), unwrap_jso(successCallback));
       return;
     }
-    _blink.BlinkEntry.instance.getParent_Callback_0_(this);
+    _blink.BlinkEntry.instance.getParent_Callback_0_(unwrap_jso(this));
     return;
   }
 
@@ -14511,18 +14540,18 @@
 
   void _moveTo(DirectoryEntry parent, {String name, _EntryCallback successCallback, _ErrorCallback errorCallback}) {
     if (errorCallback != null) {
-      _blink.BlinkEntry.instance.moveTo_Callback_4_(this, parent, name, successCallback, errorCallback);
+      _blink.BlinkEntry.instance.moveTo_Callback_4_(unwrap_jso(this), unwrap_jso(parent), name, unwrap_jso(successCallback), unwrap_jso(errorCallback));
       return;
     }
     if (successCallback != null) {
-      _blink.BlinkEntry.instance.moveTo_Callback_3_(this, parent, name, successCallback);
+      _blink.BlinkEntry.instance.moveTo_Callback_3_(unwrap_jso(this), unwrap_jso(parent), name, unwrap_jso(successCallback));
       return;
     }
     if (name != null) {
-      _blink.BlinkEntry.instance.moveTo_Callback_2_(this, parent, name);
+      _blink.BlinkEntry.instance.moveTo_Callback_2_(unwrap_jso(this), unwrap_jso(parent), name);
       return;
     }
-    _blink.BlinkEntry.instance.moveTo_Callback_1_(this, parent);
+    _blink.BlinkEntry.instance.moveTo_Callback_1_(unwrap_jso(this), unwrap_jso(parent));
     return;
   }
 
@@ -14536,10 +14565,10 @@
 
   void _remove(VoidCallback successCallback, [_ErrorCallback errorCallback]) {
     if (errorCallback != null) {
-      _blink.BlinkEntry.instance.remove_Callback_2_(this, successCallback, errorCallback);
+      _blink.BlinkEntry.instance.remove_Callback_2_(unwrap_jso(this), unwrap_jso(successCallback), unwrap_jso(errorCallback));
       return;
     }
-    _blink.BlinkEntry.instance.remove_Callback_1_(this, successCallback);
+    _blink.BlinkEntry.instance.remove_Callback_1_(unwrap_jso(this), unwrap_jso(successCallback));
     return;
   }
 
@@ -14553,8 +14582,8 @@
 
   @DomName('Entry.toURL')
   @DocsEditable()
-  String toUrl() => _blink.BlinkEntry.instance.toURL_Callback_0_(this);
-
+  String toUrl() => _blink.BlinkEntry.instance.toURL_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -14595,25 +14624,25 @@
   @DomName('ErrorEvent.colno')
   @DocsEditable()
   @Experimental() // untriaged
-  int get colno => _blink.BlinkErrorEvent.instance.colno_Getter_(this);
-
+  int get colno => _blink.BlinkErrorEvent.instance.colno_Getter_(unwrap_jso(this));
+  
   @DomName('ErrorEvent.error')
   @DocsEditable()
   @Experimental() // untriaged
-  Object get error => _blink.BlinkErrorEvent.instance.error_Getter_(this);
-
+  Object get error => _blink.BlinkErrorEvent.instance.error_Getter_(unwrap_jso(this));
+  
   @DomName('ErrorEvent.filename')
   @DocsEditable()
-  String get filename => _blink.BlinkErrorEvent.instance.filename_Getter_(this);
-
+  String get filename => _blink.BlinkErrorEvent.instance.filename_Getter_(unwrap_jso(this));
+  
   @DomName('ErrorEvent.lineno')
   @DocsEditable()
-  int get lineno => _blink.BlinkErrorEvent.instance.lineno_Getter_(this);
-
+  int get lineno => _blink.BlinkErrorEvent.instance.lineno_Getter_(unwrap_jso(this));
+  
   @DomName('ErrorEvent.message')
   @DocsEditable()
-  String get message => _blink.BlinkErrorEvent.instance.message_Getter_(this);
-
+  String get message => _blink.BlinkErrorEvent.instance.message_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -14715,12 +14744,12 @@
 
   @DomName('Event.bubbles')
   @DocsEditable()
-  bool get bubbles => _blink.BlinkEvent.instance.bubbles_Getter_(this);
-
+  bool get bubbles => _blink.BlinkEvent.instance.bubbles_Getter_(unwrap_jso(this));
+  
   @DomName('Event.cancelable')
   @DocsEditable()
-  bool get cancelable => _blink.BlinkEvent.instance.cancelable_Getter_(this);
-
+  bool get cancelable => _blink.BlinkEvent.instance.cancelable_Getter_(unwrap_jso(this));
+  
   /**
    * Access to the system's clipboard data during copy, cut, and paste events.
    *
@@ -14737,20 +14766,20 @@
   @Experimental()
   // Part of copy/paste
   @Experimental() // nonstandard
-  DataTransfer get clipboardData => _blink.BlinkEvent.instance.clipboardData_Getter_(this);
-
+  DataTransfer get clipboardData => wrap_jso(_blink.BlinkEvent.instance.clipboardData_Getter_(unwrap_jso(this)));
+  
   @DomName('Event.currentTarget')
   @DocsEditable()
-  EventTarget get currentTarget => _blink.BlinkEvent.instance.currentTarget_Getter_(this);
-
+  EventTarget get currentTarget => wrap_jso(_blink.BlinkEvent.instance.currentTarget_Getter_(unwrap_jso(this)));
+  
   @DomName('Event.defaultPrevented')
   @DocsEditable()
-  bool get defaultPrevented => _blink.BlinkEvent.instance.defaultPrevented_Getter_(this);
-
+  bool get defaultPrevented => _blink.BlinkEvent.instance.defaultPrevented_Getter_(unwrap_jso(this));
+  
   @DomName('Event.eventPhase')
   @DocsEditable()
-  int get eventPhase => _blink.BlinkEvent.instance.eventPhase_Getter_(this);
-
+  int get eventPhase => _blink.BlinkEvent.instance.eventPhase_Getter_(unwrap_jso(this));
+  
   /**
    * This event's path, taking into account shadow DOM.
    *
@@ -14764,36 +14793,36 @@
   @DocsEditable()
   // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#extensions-to-event
   @Experimental()
-  List<Node> get path => _blink.BlinkEvent.instance.path_Getter_(this);
-
+  List<Node> get path => wrap_jso_list(_blink.BlinkEvent.instance.path_Getter_(unwrap_jso(this)));
+  
   @DomName('Event.target')
   @DocsEditable()
-  EventTarget get target => _blink.BlinkEvent.instance.target_Getter_(this);
-
+  EventTarget get target => wrap_jso(_blink.BlinkEvent.instance.target_Getter_(unwrap_jso(this)));
+  
   @DomName('Event.timeStamp')
   @DocsEditable()
-  int get timeStamp => _blink.BlinkEvent.instance.timeStamp_Getter_(this);
-
+  int get timeStamp => _blink.BlinkEvent.instance.timeStamp_Getter_(unwrap_jso(this));
+  
   @DomName('Event.type')
   @DocsEditable()
-  String get type => _blink.BlinkEvent.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkEvent.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('Event.initEvent')
   @DocsEditable()
-  void _initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg) => _blink.BlinkEvent.instance.initEvent_Callback_3_(this, eventTypeArg, canBubbleArg, cancelableArg);
-
+  void _initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg) => _blink.BlinkEvent.instance.initEvent_Callback_3_(unwrap_jso(this), eventTypeArg, canBubbleArg, cancelableArg);
+  
   @DomName('Event.preventDefault')
   @DocsEditable()
-  void preventDefault() => _blink.BlinkEvent.instance.preventDefault_Callback_0_(this);
-
+  void preventDefault() => _blink.BlinkEvent.instance.preventDefault_Callback_0_(unwrap_jso(this));
+  
   @DomName('Event.stopImmediatePropagation')
   @DocsEditable()
-  void stopImmediatePropagation() => _blink.BlinkEvent.instance.stopImmediatePropagation_Callback_0_(this);
-
+  void stopImmediatePropagation() => _blink.BlinkEvent.instance.stopImmediatePropagation_Callback_0_(unwrap_jso(this));
+  
   @DomName('Event.stopPropagation')
   @DocsEditable()
-  void stopPropagation() => _blink.BlinkEvent.instance.stopPropagation_Callback_0_(this);
-
+  void stopPropagation() => _blink.BlinkEvent.instance.stopPropagation_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -14866,20 +14895,20 @@
 
   @DomName('EventSource.readyState')
   @DocsEditable()
-  int get readyState => _blink.BlinkEventSource.instance.readyState_Getter_(this);
-
+  int get readyState => _blink.BlinkEventSource.instance.readyState_Getter_(unwrap_jso(this));
+  
   @DomName('EventSource.url')
   @DocsEditable()
-  String get url => _blink.BlinkEventSource.instance.url_Getter_(this);
-
+  String get url => _blink.BlinkEventSource.instance.url_Getter_(unwrap_jso(this));
+  
   @DomName('EventSource.withCredentials')
   @DocsEditable()
-  bool get withCredentials => _blink.BlinkEventSource.instance.withCredentials_Getter_(this);
-
+  bool get withCredentials => _blink.BlinkEventSource.instance.withCredentials_Getter_(unwrap_jso(this));
+  
   @DomName('EventSource.close')
   @DocsEditable()
-  void close() => _blink.BlinkEventSource.instance.close_Callback_0_(this);
-
+  void close() => _blink.BlinkEventSource.instance.close_Callback_0_(unwrap_jso(this));
+  
   /// Stream of `error` events handled by this [EventSource].
   @DomName('EventSource.onerror')
   @DocsEditable()
@@ -15022,39 +15051,39 @@
 
   void _addEventListener([String type, EventListener listener, bool useCapture]) {
     if (useCapture != null) {
-      _blink.BlinkEventTarget.instance.addEventListener_Callback_3_(this, type, listener, useCapture);
+      _blink.BlinkEventTarget.instance.addEventListener_Callback_3_(unwrap_jso(this), type, unwrap_jso(listener), useCapture);
       return;
     }
     if (listener != null) {
-      _blink.BlinkEventTarget.instance.addEventListener_Callback_2_(this, type, listener);
+      _blink.BlinkEventTarget.instance.addEventListener_Callback_2_(unwrap_jso(this), type, unwrap_jso(listener));
       return;
     }
     if (type != null) {
-      _blink.BlinkEventTarget.instance.addEventListener_Callback_1_(this, type);
+      _blink.BlinkEventTarget.instance.addEventListener_Callback_1_(unwrap_jso(this), type);
       return;
     }
-    _blink.BlinkEventTarget.instance.addEventListener_Callback_0_(this);
+    _blink.BlinkEventTarget.instance.addEventListener_Callback_0_(unwrap_jso(this));
     return;
   }
 
   @DomName('EventTarget.dispatchEvent')
   @DocsEditable()
-  bool dispatchEvent(Event event) => _blink.BlinkEventTarget.instance.dispatchEvent_Callback_1_(this, event);
-
+  bool dispatchEvent(Event event) => _blink.BlinkEventTarget.instance.dispatchEvent_Callback_1_(unwrap_jso(this), unwrap_jso(event));
+  
   void _removeEventListener([String type, EventListener listener, bool useCapture]) {
     if (useCapture != null) {
-      _blink.BlinkEventTarget.instance.removeEventListener_Callback_3_(this, type, listener, useCapture);
+      _blink.BlinkEventTarget.instance.removeEventListener_Callback_3_(unwrap_jso(this), type, unwrap_jso(listener), useCapture);
       return;
     }
     if (listener != null) {
-      _blink.BlinkEventTarget.instance.removeEventListener_Callback_2_(this, type, listener);
+      _blink.BlinkEventTarget.instance.removeEventListener_Callback_2_(unwrap_jso(this), type, unwrap_jso(listener));
       return;
     }
     if (type != null) {
-      _blink.BlinkEventTarget.instance.removeEventListener_Callback_1_(this, type);
+      _blink.BlinkEventTarget.instance.removeEventListener_Callback_1_(unwrap_jso(this), type);
       return;
     }
-    _blink.BlinkEventTarget.instance.removeEventListener_Callback_0_(this);
+    _blink.BlinkEventTarget.instance.removeEventListener_Callback_0_(unwrap_jso(this));
     return;
   }
 
@@ -15076,8 +15105,8 @@
   @DomName('ExtendableEvent.waitUntil')
   @DocsEditable()
   @Experimental() // untriaged
-  void waitUntil(Object value) => _blink.BlinkExtendableEvent.instance.waitUntil_Callback_1_(this, value);
-
+  void waitUntil(Object value) => _blink.BlinkExtendableEvent.instance.waitUntil_Callback_1_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -15102,8 +15131,8 @@
   @DomName('FederatedCredential.federation')
   @DocsEditable()
   @Experimental() // untriaged
-  String get federation => _blink.BlinkFederatedCredential.instance.federation_Getter_(this);
-
+  String get federation => _blink.BlinkFederatedCredential.instance.federation_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -15122,18 +15151,18 @@
   @DomName('FetchEvent.isReload')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get isReload => _blink.BlinkFetchEvent.instance.isReload_Getter_(this);
-
+  bool get isReload => _blink.BlinkFetchEvent.instance.isReload_Getter_(unwrap_jso(this));
+  
   @DomName('FetchEvent.request')
   @DocsEditable()
   @Experimental() // untriaged
-  _Request get request => _blink.BlinkFetchEvent.instance.request_Getter_(this);
-
+  _Request get request => wrap_jso(_blink.BlinkFetchEvent.instance.request_Getter_(unwrap_jso(this)));
+  
   @DomName('FetchEvent.respondWith')
   @DocsEditable()
   @Experimental() // untriaged
-  void respondWith(Object value) => _blink.BlinkFetchEvent.instance.respondWith_Callback_1_(this, value);
-
+  void respondWith(Object value) => _blink.BlinkFetchEvent.instance.respondWith_Callback_1_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -15161,52 +15190,52 @@
 
   @DomName('HTMLFieldSetElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLFieldSetElement.instance.disabled_Getter_(this);
-
+  bool get disabled => _blink.BlinkHTMLFieldSetElement.instance.disabled_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLFieldSetElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLFieldSetElement.instance.disabled_Setter_(this, value);
-
+  void set disabled(bool value) => _blink.BlinkHTMLFieldSetElement.instance.disabled_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLFieldSetElement.elements')
   @DocsEditable()
-  List<Node> get elements => _blink.BlinkHTMLFieldSetElement.instance.elements_Getter_(this);
-
+  List<Node> get elements => wrap_jso_list(_blink.BlinkHTMLFieldSetElement.instance.elements_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLFieldSetElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLFieldSetElement.instance.form_Getter_(this);
-
+  FormElement get form => wrap_jso(_blink.BlinkHTMLFieldSetElement.instance.form_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLFieldSetElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLFieldSetElement.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkHTMLFieldSetElement.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLFieldSetElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLFieldSetElement.instance.name_Setter_(this, value);
-
+  void set name(String value) => _blink.BlinkHTMLFieldSetElement.instance.name_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLFieldSetElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLFieldSetElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkHTMLFieldSetElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLFieldSetElement.validationMessage')
   @DocsEditable()
-  String get validationMessage => _blink.BlinkHTMLFieldSetElement.instance.validationMessage_Getter_(this);
-
+  String get validationMessage => _blink.BlinkHTMLFieldSetElement.instance.validationMessage_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLFieldSetElement.validity')
   @DocsEditable()
-  ValidityState get validity => _blink.BlinkHTMLFieldSetElement.instance.validity_Getter_(this);
-
+  ValidityState get validity => wrap_jso(_blink.BlinkHTMLFieldSetElement.instance.validity_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLFieldSetElement.willValidate')
   @DocsEditable()
-  bool get willValidate => _blink.BlinkHTMLFieldSetElement.instance.willValidate_Getter_(this);
-
+  bool get willValidate => _blink.BlinkHTMLFieldSetElement.instance.willValidate_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLFieldSetElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLFieldSetElement.instance.checkValidity_Callback_0_(this);
-
+  bool checkValidity() => _blink.BlinkHTMLFieldSetElement.instance.checkValidity_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLFieldSetElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLFieldSetElement.instance.setCustomValidity_Callback_1_(this, error);
-
+  void setCustomValidity(String error) => _blink.BlinkHTMLFieldSetElement.instance.setCustomValidity_Callback_1_(unwrap_jso(this), error);
+  
 }
 // 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
@@ -15224,24 +15253,24 @@
   @DomName('File.lastModified')
   @DocsEditable()
   @Experimental() // untriaged
-  int get lastModified => _blink.BlinkFile.instance.lastModified_Getter_(this);
-
+  int get lastModified => _blink.BlinkFile.instance.lastModified_Getter_(unwrap_jso(this));
+  
   @DomName('File.lastModifiedDate')
   @DocsEditable()
-  DateTime get lastModifiedDate => _blink.BlinkFile.instance.lastModifiedDate_Getter_(this);
-
+  DateTime get lastModifiedDate => _blink.BlinkFile.instance.lastModifiedDate_Getter_(unwrap_jso(this));
+  
   @DomName('File.name')
   @DocsEditable()
-  String get name => _blink.BlinkFile.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkFile.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('File.webkitRelativePath')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://plus.sandbox.google.com/+AddyOsmani/posts/Dk5UhZ6zfF3
-  String get relativePath => _blink.BlinkFile.instance.webkitRelativePath_Getter_(this);
-
+  String get relativePath => _blink.BlinkFile.instance.webkitRelativePath_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -15271,10 +15300,10 @@
 
   void _createWriter(_FileWriterCallback successCallback, [_ErrorCallback errorCallback]) {
     if (errorCallback != null) {
-      _blink.BlinkFileEntry.instance.createWriter_Callback_2_(this, successCallback, errorCallback);
+      _blink.BlinkFileEntry.instance.createWriter_Callback_2_(unwrap_jso(this), unwrap_jso(successCallback), unwrap_jso(errorCallback));
       return;
     }
-    _blink.BlinkFileEntry.instance.createWriter_Callback_1_(this, successCallback);
+    _blink.BlinkFileEntry.instance.createWriter_Callback_1_(unwrap_jso(this), unwrap_jso(successCallback));
     return;
   }
 
@@ -15288,10 +15317,10 @@
 
   void _file(_FileCallback successCallback, [_ErrorCallback errorCallback]) {
     if (errorCallback != null) {
-      _blink.BlinkFileEntry.instance.file_Callback_2_(this, successCallback, errorCallback);
+      _blink.BlinkFileEntry.instance.file_Callback_2_(unwrap_jso(this), unwrap_jso(successCallback), unwrap_jso(errorCallback));
       return;
     }
-    _blink.BlinkFileEntry.instance.file_Callback_1_(this, successCallback);
+    _blink.BlinkFileEntry.instance.file_Callback_1_(unwrap_jso(this), unwrap_jso(successCallback));
     return;
   }
 
@@ -15369,8 +15398,8 @@
 
   @DomName('FileError.code')
   @DocsEditable()
-  int get code => _blink.BlinkFileError.instance.code_Getter_(this);
-
+  int get code => _blink.BlinkFileError.instance.code_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -15387,16 +15416,16 @@
 
   @DomName('FileList.length')
   @DocsEditable()
-  int get length => _blink.BlinkFileList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkFileList.instance.length_Getter_(unwrap_jso(this));
+  
   File operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkFileList.instance.item_Callback_1_(this, index);
+    return wrap_jso(_blink.BlinkFileList.instance.item_Callback_1_(unwrap_jso(this), index));
   }
 
-  File _nativeIndexedGetter(int index) => _blink.BlinkFileList.instance.item_Callback_1_(this, index);
-
+  File _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkFileList.instance.item_Callback_1_(unwrap_jso(this), index));
+ 
   void operator[]=(int index, File value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -15437,8 +15466,8 @@
 
   @DomName('FileList.item')
   @DocsEditable()
-  File item(int index) => _blink.BlinkFileList.instance.item_Callback_1_(this, index);
-
+  File item(int index) => wrap_jso(_blink.BlinkFileList.instance.item_Callback_1_(unwrap_jso(this), index));
+  
 }
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -15452,7 +15481,7 @@
   @DomName('FileReader.result')
   @DocsEditable()
   Object get result {
-    var res = _blink.BlinkFileReader.result_Getter(this);
+    var res = _blink.BlinkFileReader.result_Getter(unwrap_jso(this));
     if (res is ByteBuffer) {
       return new Uint8List.view(res);
     }
@@ -15542,34 +15571,34 @@
 
   @DomName('FileReader.error')
   @DocsEditable()
-  FileError get error => _blink.BlinkFileReader.instance.error_Getter_(this);
-
+  FileError get error => wrap_jso(_blink.BlinkFileReader.instance.error_Getter_(unwrap_jso(this)));
+  
   @DomName('FileReader.readyState')
   @DocsEditable()
-  int get readyState => _blink.BlinkFileReader.instance.readyState_Getter_(this);
-
+  int get readyState => _blink.BlinkFileReader.instance.readyState_Getter_(unwrap_jso(this));
+  
   @DomName('FileReader.result')
   @DocsEditable()
-  Object get _result => _blink.BlinkFileReader.instance.result_Getter_(this);
-
+  Object get _result => _blink.BlinkFileReader.instance.result_Getter_(unwrap_jso(this));
+  
   @DomName('FileReader.abort')
   @DocsEditable()
-  void abort() => _blink.BlinkFileReader.instance.abort_Callback_0_(this);
-
+  void abort() => _blink.BlinkFileReader.instance.abort_Callback_0_(unwrap_jso(this));
+  
   @DomName('FileReader.readAsArrayBuffer')
   @DocsEditable()
-  void readAsArrayBuffer(Blob blob) => _blink.BlinkFileReader.instance.readAsArrayBuffer_Callback_1_(this, blob);
-
+  void readAsArrayBuffer(Blob blob) => _blink.BlinkFileReader.instance.readAsArrayBuffer_Callback_1_(unwrap_jso(this), unwrap_jso(blob));
+  
   @DomName('FileReader.readAsDataURL')
   @DocsEditable()
-  void readAsDataUrl(Blob blob) => _blink.BlinkFileReader.instance.readAsDataURL_Callback_1_(this, blob);
-
+  void readAsDataUrl(Blob blob) => _blink.BlinkFileReader.instance.readAsDataURL_Callback_1_(unwrap_jso(this), unwrap_jso(blob));
+  
   void readAsText(Blob blob, [String encoding]) {
     if (encoding != null) {
-      _blink.BlinkFileReader.instance.readAsText_Callback_2_(this, blob, encoding);
+      _blink.BlinkFileReader.instance.readAsText_Callback_2_(unwrap_jso(this), unwrap_jso(blob), encoding);
       return;
     }
-    _blink.BlinkFileReader.instance.readAsText_Callback_1_(this, blob);
+    _blink.BlinkFileReader.instance.readAsText_Callback_1_(unwrap_jso(this), unwrap_jso(blob));
     return;
   }
 
@@ -15621,8 +15650,8 @@
   @DomName('Stream.type')
   @DocsEditable()
   @Experimental() // untriaged
-  String get type => _blink.BlinkStream.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkStream.instance.type_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -15645,12 +15674,12 @@
 
   @DomName('DOMFileSystem.name')
   @DocsEditable()
-  String get name => _blink.BlinkDOMFileSystem.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkDOMFileSystem.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('DOMFileSystem.root')
   @DocsEditable()
-  DirectoryEntry get root => _blink.BlinkDOMFileSystem.instance.root_Getter_(this);
-
+  DirectoryEntry get root => wrap_jso(_blink.BlinkDOMFileSystem.instance.root_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -15752,36 +15781,36 @@
 
   @DomName('FileWriter.error')
   @DocsEditable()
-  FileError get error => _blink.BlinkFileWriter.instance.error_Getter_(this);
-
+  FileError get error => wrap_jso(_blink.BlinkFileWriter.instance.error_Getter_(unwrap_jso(this)));
+  
   @DomName('FileWriter.length')
   @DocsEditable()
-  int get length => _blink.BlinkFileWriter.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkFileWriter.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('FileWriter.position')
   @DocsEditable()
-  int get position => _blink.BlinkFileWriter.instance.position_Getter_(this);
-
+  int get position => _blink.BlinkFileWriter.instance.position_Getter_(unwrap_jso(this));
+  
   @DomName('FileWriter.readyState')
   @DocsEditable()
-  int get readyState => _blink.BlinkFileWriter.instance.readyState_Getter_(this);
-
+  int get readyState => _blink.BlinkFileWriter.instance.readyState_Getter_(unwrap_jso(this));
+  
   @DomName('FileWriter.abort')
   @DocsEditable()
-  void abort() => _blink.BlinkFileWriter.instance.abort_Callback_0_(this);
-
+  void abort() => _blink.BlinkFileWriter.instance.abort_Callback_0_(unwrap_jso(this));
+  
   @DomName('FileWriter.seek')
   @DocsEditable()
-  void seek(int position) => _blink.BlinkFileWriter.instance.seek_Callback_1_(this, position);
-
+  void seek(int position) => _blink.BlinkFileWriter.instance.seek_Callback_1_(unwrap_jso(this), position);
+  
   @DomName('FileWriter.truncate')
   @DocsEditable()
-  void truncate(int size) => _blink.BlinkFileWriter.instance.truncate_Callback_1_(this, size);
-
+  void truncate(int size) => _blink.BlinkFileWriter.instance.truncate_Callback_1_(unwrap_jso(this), size);
+  
   @DomName('FileWriter.write')
   @DocsEditable()
-  void write(Blob data) => _blink.BlinkFileWriter.instance.write_Callback_1_(this, data);
-
+  void write(Blob data) => _blink.BlinkFileWriter.instance.write_Callback_1_(unwrap_jso(this), unwrap_jso(data));
+  
   /// Stream of `abort` events handled by this [FileWriter].
   @DomName('FileWriter.onabort')
   @DocsEditable()
@@ -15839,8 +15868,8 @@
 
   @DomName('FocusEvent.relatedTarget')
   @DocsEditable()
-  EventTarget get relatedTarget => _blink.BlinkFocusEvent.instance.relatedTarget_Getter_(this);
-
+  EventTarget get relatedTarget => wrap_jso(_blink.BlinkFocusEvent.instance.relatedTarget_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -15883,88 +15912,88 @@
   @DomName('FontFace.family')
   @DocsEditable()
   @Experimental() // untriaged
-  String get family => _blink.BlinkFontFace.instance.family_Getter_(this);
-
+  String get family => _blink.BlinkFontFace.instance.family_Getter_(unwrap_jso(this));
+  
   @DomName('FontFace.family')
   @DocsEditable()
   @Experimental() // untriaged
-  void set family(String value) => _blink.BlinkFontFace.instance.family_Setter_(this, value);
-
+  void set family(String value) => _blink.BlinkFontFace.instance.family_Setter_(unwrap_jso(this), value);
+  
   @DomName('FontFace.featureSettings')
   @DocsEditable()
   @Experimental() // untriaged
-  String get featureSettings => _blink.BlinkFontFace.instance.featureSettings_Getter_(this);
-
+  String get featureSettings => _blink.BlinkFontFace.instance.featureSettings_Getter_(unwrap_jso(this));
+  
   @DomName('FontFace.featureSettings')
   @DocsEditable()
   @Experimental() // untriaged
-  void set featureSettings(String value) => _blink.BlinkFontFace.instance.featureSettings_Setter_(this, value);
-
+  void set featureSettings(String value) => _blink.BlinkFontFace.instance.featureSettings_Setter_(unwrap_jso(this), value);
+  
   @DomName('FontFace.loaded')
   @DocsEditable()
   @Experimental() // untriaged
-  Future get loaded => _blink.BlinkFontFace.instance.loaded_Getter_(this);
-
+  Future get loaded => _blink.BlinkFontFace.instance.loaded_Getter_(unwrap_jso(this));
+  
   @DomName('FontFace.status')
   @DocsEditable()
   @Experimental() // untriaged
-  String get status => _blink.BlinkFontFace.instance.status_Getter_(this);
-
+  String get status => _blink.BlinkFontFace.instance.status_Getter_(unwrap_jso(this));
+  
   @DomName('FontFace.stretch')
   @DocsEditable()
   @Experimental() // untriaged
-  String get stretch => _blink.BlinkFontFace.instance.stretch_Getter_(this);
-
+  String get stretch => _blink.BlinkFontFace.instance.stretch_Getter_(unwrap_jso(this));
+  
   @DomName('FontFace.stretch')
   @DocsEditable()
   @Experimental() // untriaged
-  void set stretch(String value) => _blink.BlinkFontFace.instance.stretch_Setter_(this, value);
-
+  void set stretch(String value) => _blink.BlinkFontFace.instance.stretch_Setter_(unwrap_jso(this), value);
+  
   @DomName('FontFace.style')
   @DocsEditable()
   @Experimental() // untriaged
-  String get style => _blink.BlinkFontFace.instance.style_Getter_(this);
-
+  String get style => _blink.BlinkFontFace.instance.style_Getter_(unwrap_jso(this));
+  
   @DomName('FontFace.style')
   @DocsEditable()
   @Experimental() // untriaged
-  void set style(String value) => _blink.BlinkFontFace.instance.style_Setter_(this, value);
-
+  void set style(String value) => _blink.BlinkFontFace.instance.style_Setter_(unwrap_jso(this), value);
+  
   @DomName('FontFace.unicodeRange')
   @DocsEditable()
   @Experimental() // untriaged
-  String get unicodeRange => _blink.BlinkFontFace.instance.unicodeRange_Getter_(this);
-
+  String get unicodeRange => _blink.BlinkFontFace.instance.unicodeRange_Getter_(unwrap_jso(this));
+  
   @DomName('FontFace.unicodeRange')
   @DocsEditable()
   @Experimental() // untriaged
-  void set unicodeRange(String value) => _blink.BlinkFontFace.instance.unicodeRange_Setter_(this, value);
-
+  void set unicodeRange(String value) => _blink.BlinkFontFace.instance.unicodeRange_Setter_(unwrap_jso(this), value);
+  
   @DomName('FontFace.variant')
   @DocsEditable()
   @Experimental() // untriaged
-  String get variant => _blink.BlinkFontFace.instance.variant_Getter_(this);
-
+  String get variant => _blink.BlinkFontFace.instance.variant_Getter_(unwrap_jso(this));
+  
   @DomName('FontFace.variant')
   @DocsEditable()
   @Experimental() // untriaged
-  void set variant(String value) => _blink.BlinkFontFace.instance.variant_Setter_(this, value);
-
+  void set variant(String value) => _blink.BlinkFontFace.instance.variant_Setter_(unwrap_jso(this), value);
+  
   @DomName('FontFace.weight')
   @DocsEditable()
   @Experimental() // untriaged
-  String get weight => _blink.BlinkFontFace.instance.weight_Getter_(this);
-
+  String get weight => _blink.BlinkFontFace.instance.weight_Getter_(unwrap_jso(this));
+  
   @DomName('FontFace.weight')
   @DocsEditable()
   @Experimental() // untriaged
-  void set weight(String value) => _blink.BlinkFontFace.instance.weight_Setter_(this, value);
-
+  void set weight(String value) => _blink.BlinkFontFace.instance.weight_Setter_(unwrap_jso(this), value);
+  
   @DomName('FontFace.load')
   @DocsEditable()
   @Experimental() // untriaged
-  Future load() => _blink.BlinkFontFace.instance.load_Callback_0_(this);
-
+  Future load() => _blink.BlinkFontFace.instance.load_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -15983,49 +16012,49 @@
   @DomName('FontFaceSet.size')
   @DocsEditable()
   @Experimental() // untriaged
-  int get size => _blink.BlinkFontFaceSet.instance.size_Getter_(this);
-
+  int get size => _blink.BlinkFontFaceSet.instance.size_Getter_(unwrap_jso(this));
+  
   @DomName('FontFaceSet.status')
   @DocsEditable()
   @Experimental() // untriaged
-  String get status => _blink.BlinkFontFaceSet.instance.status_Getter_(this);
-
+  String get status => _blink.BlinkFontFaceSet.instance.status_Getter_(unwrap_jso(this));
+  
   @DomName('FontFaceSet.add')
   @DocsEditable()
   @Experimental() // untriaged
-  void add(FontFace fontFace) => _blink.BlinkFontFaceSet.instance.add_Callback_1_(this, fontFace);
-
+  void add(FontFace fontFace) => _blink.BlinkFontFaceSet.instance.add_Callback_1_(unwrap_jso(this), unwrap_jso(fontFace));
+  
   bool check(String font, [String text]) {
     if (text != null) {
-      return _blink.BlinkFontFaceSet.instance.check_Callback_2_(this, font, text);
+      return _blink.BlinkFontFaceSet.instance.check_Callback_2_(unwrap_jso(this), font, text);
     }
-    return _blink.BlinkFontFaceSet.instance.check_Callback_1_(this, font);
+    return _blink.BlinkFontFaceSet.instance.check_Callback_1_(unwrap_jso(this), font);
   }
 
   @DomName('FontFaceSet.clear')
   @DocsEditable()
   @Experimental() // untriaged
-  void clear() => _blink.BlinkFontFaceSet.instance.clear_Callback_0_(this);
-
+  void clear() => _blink.BlinkFontFaceSet.instance.clear_Callback_0_(unwrap_jso(this));
+  
   @DomName('FontFaceSet.delete')
   @DocsEditable()
   @Experimental() // untriaged
-  bool delete(FontFace fontFace) => _blink.BlinkFontFaceSet.instance.delete_Callback_1_(this, fontFace);
-
+  bool delete(FontFace fontFace) => _blink.BlinkFontFaceSet.instance.delete_Callback_1_(unwrap_jso(this), unwrap_jso(fontFace));
+  
   void forEach(FontFaceSetForEachCallback callback, [Object thisArg]) {
     if (thisArg != null) {
-      _blink.BlinkFontFaceSet.instance.forEach_Callback_2_(this, callback, thisArg);
+      _blink.BlinkFontFaceSet.instance.forEach_Callback_2_(unwrap_jso(this), unwrap_jso(callback), thisArg);
       return;
     }
-    _blink.BlinkFontFaceSet.instance.forEach_Callback_1_(this, callback);
+    _blink.BlinkFontFaceSet.instance.forEach_Callback_1_(unwrap_jso(this), unwrap_jso(callback));
     return;
   }
 
   @DomName('FontFaceSet.has')
   @DocsEditable()
   @Experimental() // untriaged
-  bool has(FontFace fontFace) => _blink.BlinkFontFaceSet.instance.has_Callback_1_(this, fontFace);
-
+  bool has(FontFace fontFace) => _blink.BlinkFontFaceSet.instance.has_Callback_1_(unwrap_jso(this), unwrap_jso(fontFace));
+  
 }
 // 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
@@ -16054,8 +16083,8 @@
   @DomName('FontFaceSetLoadEvent.fontfaces')
   @DocsEditable()
   @Experimental() // untriaged
-  List<FontFace> get fontfaces => _blink.BlinkFontFaceSetLoadEvent.instance.fontfaces_Getter_(this);
-
+  List<FontFace> get fontfaces => _blink.BlinkFontFaceSetLoadEvent.instance.fontfaces_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -16076,7 +16105,7 @@
 
   @DomName('FormData.FormData')
   @DocsEditable()
-  factory FormData([FormElement form]) => _create(form);
+  factory FormData([FormElement form]) => wrap_jso(_create(form));
 
   @DocsEditable()
   static FormData _create(form) => _blink.BlinkFormData.instance.constructorCallback_1_(form);
@@ -16086,12 +16115,12 @@
 
   @DomName('FormData.append')
   @DocsEditable()
-  void append(String name, String value) => _blink.BlinkFormData.instance.append_Callback_2_(this, name, value);
-
+  void append(String name, String value) => _blink.BlinkFormData.instance.append_Callback_2_(unwrap_jso(this), name, value);
+  
   @DomName('FormData.appendBlob')
   @DocsEditable()
-  void appendBlob(String name, Blob value, [String filename]) => _blink.BlinkFormData.instance.append_Callback_3_(this, name, value, filename);
-
+  void appendBlob(String name, Blob value, [String filename]) => _blink.BlinkFormData.instance.append_Callback_3_(unwrap_jso(this), name, unwrap_jso(value), filename);
+  
 }
 // 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
@@ -16118,112 +16147,112 @@
 
   @DomName('HTMLFormElement.acceptCharset')
   @DocsEditable()
-  String get acceptCharset => _blink.BlinkHTMLFormElement.instance.acceptCharset_Getter_(this);
-
+  String get acceptCharset => _blink.BlinkHTMLFormElement.instance.acceptCharset_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLFormElement.acceptCharset')
   @DocsEditable()
-  void set acceptCharset(String value) => _blink.BlinkHTMLFormElement.instance.acceptCharset_Setter_(this, value);
-
+  void set acceptCharset(String value) => _blink.BlinkHTMLFormElement.instance.acceptCharset_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLFormElement.action')
   @DocsEditable()
-  String get action => _blink.BlinkHTMLFormElement.instance.action_Getter_(this);
-
+  String get action => _blink.BlinkHTMLFormElement.instance.action_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLFormElement.action')
   @DocsEditable()
-  void set action(String value) => _blink.BlinkHTMLFormElement.instance.action_Setter_(this, value);
-
+  void set action(String value) => _blink.BlinkHTMLFormElement.instance.action_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLFormElement.autocomplete')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#autofilling-form-controls:-the-autocomplete-attribute
   @Experimental()
-  String get autocomplete => _blink.BlinkHTMLFormElement.instance.autocomplete_Getter_(this);
-
+  String get autocomplete => _blink.BlinkHTMLFormElement.instance.autocomplete_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLFormElement.autocomplete')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#autofilling-form-controls:-the-autocomplete-attribute
   @Experimental()
-  void set autocomplete(String value) => _blink.BlinkHTMLFormElement.instance.autocomplete_Setter_(this, value);
-
+  void set autocomplete(String value) => _blink.BlinkHTMLFormElement.instance.autocomplete_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLFormElement.encoding')
   @DocsEditable()
-  String get encoding => _blink.BlinkHTMLFormElement.instance.encoding_Getter_(this);
-
+  String get encoding => _blink.BlinkHTMLFormElement.instance.encoding_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLFormElement.encoding')
   @DocsEditable()
-  void set encoding(String value) => _blink.BlinkHTMLFormElement.instance.encoding_Setter_(this, value);
-
+  void set encoding(String value) => _blink.BlinkHTMLFormElement.instance.encoding_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLFormElement.enctype')
   @DocsEditable()
-  String get enctype => _blink.BlinkHTMLFormElement.instance.enctype_Getter_(this);
-
+  String get enctype => _blink.BlinkHTMLFormElement.instance.enctype_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLFormElement.enctype')
   @DocsEditable()
-  void set enctype(String value) => _blink.BlinkHTMLFormElement.instance.enctype_Setter_(this, value);
-
+  void set enctype(String value) => _blink.BlinkHTMLFormElement.instance.enctype_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLFormElement.length')
   @DocsEditable()
-  int get length => _blink.BlinkHTMLFormElement.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkHTMLFormElement.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLFormElement.method')
   @DocsEditable()
-  String get method => _blink.BlinkHTMLFormElement.instance.method_Getter_(this);
-
+  String get method => _blink.BlinkHTMLFormElement.instance.method_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLFormElement.method')
   @DocsEditable()
-  void set method(String value) => _blink.BlinkHTMLFormElement.instance.method_Setter_(this, value);
-
+  void set method(String value) => _blink.BlinkHTMLFormElement.instance.method_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLFormElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLFormElement.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkHTMLFormElement.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLFormElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLFormElement.instance.name_Setter_(this, value);
-
+  void set name(String value) => _blink.BlinkHTMLFormElement.instance.name_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLFormElement.noValidate')
   @DocsEditable()
-  bool get noValidate => _blink.BlinkHTMLFormElement.instance.noValidate_Getter_(this);
-
+  bool get noValidate => _blink.BlinkHTMLFormElement.instance.noValidate_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLFormElement.noValidate')
   @DocsEditable()
-  void set noValidate(bool value) => _blink.BlinkHTMLFormElement.instance.noValidate_Setter_(this, value);
-
+  void set noValidate(bool value) => _blink.BlinkHTMLFormElement.instance.noValidate_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLFormElement.target')
   @DocsEditable()
-  String get target => _blink.BlinkHTMLFormElement.instance.target_Getter_(this);
-
+  String get target => _blink.BlinkHTMLFormElement.instance.target_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLFormElement.target')
   @DocsEditable()
-  void set target(String value) => _blink.BlinkHTMLFormElement.instance.target_Setter_(this, value);
-
+  void set target(String value) => _blink.BlinkHTMLFormElement.instance.target_Setter_(unwrap_jso(this), value);
+  
   Element __getter__(index_OR_name) {
     if ((index_OR_name is int || index_OR_name == null)) {
-      return _blink.BlinkHTMLFormElement.instance.$__getter___Callback_1_(this, index_OR_name);
+      return wrap_jso(_blink.BlinkHTMLFormElement.instance.$__getter___Callback_1_(unwrap_jso(this), unwrap_jso(index_OR_name)));
     }
     if ((index_OR_name is String || index_OR_name == null)) {
-      return _blink.BlinkHTMLFormElement.instance.$__getter___Callback_1_(this, index_OR_name);
+      return _blink.BlinkHTMLFormElement.instance.$__getter___Callback_1_(unwrap_jso(this), unwrap_jso(index_OR_name));
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('HTMLFormElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLFormElement.instance.checkValidity_Callback_0_(this);
-
+  bool checkValidity() => _blink.BlinkHTMLFormElement.instance.checkValidity_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLFormElement.requestAutocomplete')
   @DocsEditable()
   // http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-October/037711.html
   @Experimental()
-  void requestAutocomplete(Map details) => _blink.BlinkHTMLFormElement.instance.requestAutocomplete_Callback_1_(this, details);
-
+  void requestAutocomplete(Map details) => _blink.BlinkHTMLFormElement.instance.requestAutocomplete_Callback_1_(unwrap_jso(this), details);
+  
   @DomName('HTMLFormElement.reset')
   @DocsEditable()
-  void reset() => _blink.BlinkHTMLFormElement.instance.reset_Callback_0_(this);
-
+  void reset() => _blink.BlinkHTMLFormElement.instance.reset_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLFormElement.submit')
   @DocsEditable()
-  void submit() => _blink.BlinkHTMLFormElement.instance.submit_Callback_0_(this);
-
+  void submit() => _blink.BlinkHTMLFormElement.instance.submit_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -16242,30 +16271,30 @@
 
   @DomName('Gamepad.axes')
   @DocsEditable()
-  List<num> get axes => _blink.BlinkGamepad.instance.axes_Getter_(this);
-
+  List<num> get axes => _blink.BlinkGamepad.instance.axes_Getter_(unwrap_jso(this));
+  
   @DomName('Gamepad.connected')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get connected => _blink.BlinkGamepad.instance.connected_Getter_(this);
-
+  bool get connected => _blink.BlinkGamepad.instance.connected_Getter_(unwrap_jso(this));
+  
   @DomName('Gamepad.id')
   @DocsEditable()
-  String get id => _blink.BlinkGamepad.instance.id_Getter_(this);
-
+  String get id => _blink.BlinkGamepad.instance.id_Getter_(unwrap_jso(this));
+  
   @DomName('Gamepad.index')
   @DocsEditable()
-  int get index => _blink.BlinkGamepad.instance.index_Getter_(this);
-
+  int get index => _blink.BlinkGamepad.instance.index_Getter_(unwrap_jso(this));
+  
   @DomName('Gamepad.mapping')
   @DocsEditable()
   @Experimental() // untriaged
-  String get mapping => _blink.BlinkGamepad.instance.mapping_Getter_(this);
-
+  String get mapping => _blink.BlinkGamepad.instance.mapping_Getter_(unwrap_jso(this));
+  
   @DomName('Gamepad.timestamp')
   @DocsEditable()
-  int get timestamp => _blink.BlinkGamepad.instance.timestamp_Getter_(this);
-
+  int get timestamp => _blink.BlinkGamepad.instance.timestamp_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -16284,13 +16313,13 @@
   @DomName('GamepadButton.pressed')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get pressed => _blink.BlinkGamepadButton.instance.pressed_Getter_(this);
-
+  bool get pressed => _blink.BlinkGamepadButton.instance.pressed_Getter_(unwrap_jso(this));
+  
   @DomName('GamepadButton.value')
   @DocsEditable()
   @Experimental() // untriaged
-  double get value => _blink.BlinkGamepadButton.instance.value_Getter_(this);
-
+  double get value => _blink.BlinkGamepadButton.instance.value_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -16309,8 +16338,8 @@
   @DomName('GamepadEvent.gamepad')
   @DocsEditable()
   @Experimental() // untriaged
-  Gamepad get gamepad => _blink.BlinkGamepadEvent.instance.gamepad_Getter_(this);
-
+  Gamepad get gamepad => wrap_jso(_blink.BlinkGamepadEvent.instance.gamepad_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -16329,18 +16358,18 @@
   @DomName('Geofencing.getRegisteredRegions')
   @DocsEditable()
   @Experimental() // untriaged
-  Future getRegisteredRegions() => _blink.BlinkGeofencing.instance.getRegisteredRegions_Callback_0_(this);
-
+  Future getRegisteredRegions() => _blink.BlinkGeofencing.instance.getRegisteredRegions_Callback_0_(unwrap_jso(this));
+  
   @DomName('Geofencing.registerRegion')
   @DocsEditable()
   @Experimental() // untriaged
-  Future registerRegion(GeofencingRegion region) => _blink.BlinkGeofencing.instance.registerRegion_Callback_1_(this, region);
-
+  Future registerRegion(GeofencingRegion region) => _blink.BlinkGeofencing.instance.registerRegion_Callback_1_(unwrap_jso(this), unwrap_jso(region));
+  
   @DomName('Geofencing.unregisterRegion')
   @DocsEditable()
   @Experimental() // untriaged
-  Future unregisterRegion(String regionId) => _blink.BlinkGeofencing.instance.unregisterRegion_Callback_1_(this, regionId);
-
+  Future unregisterRegion(String regionId) => _blink.BlinkGeofencing.instance.unregisterRegion_Callback_1_(unwrap_jso(this), regionId);
+  
 }
 // 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
@@ -16359,8 +16388,8 @@
   @DomName('GeofencingRegion.id')
   @DocsEditable()
   @Experimental() // untriaged
-  String get id => _blink.BlinkGeofencingRegion.instance.id_Getter_(this);
-
+  String get id => _blink.BlinkGeofencingRegion.instance.id_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -16447,29 +16476,29 @@
 
   @DomName('Geolocation.clearWatch')
   @DocsEditable()
-  void _clearWatch(int watchID) => _blink.BlinkGeolocation.instance.clearWatch_Callback_1_(this, watchID);
-
+  void _clearWatch(int watchID) => _blink.BlinkGeolocation.instance.clearWatch_Callback_1_(unwrap_jso(this), watchID);
+  
   void _getCurrentPosition(_PositionCallback successCallback, [_PositionErrorCallback errorCallback, Map options]) {
     if (options != null) {
-      _blink.BlinkGeolocation.instance.getCurrentPosition_Callback_3_(this, successCallback, errorCallback, options);
+      _blink.BlinkGeolocation.instance.getCurrentPosition_Callback_3_(unwrap_jso(this), unwrap_jso(successCallback), unwrap_jso(errorCallback), options);
       return;
     }
     if (errorCallback != null) {
-      _blink.BlinkGeolocation.instance.getCurrentPosition_Callback_2_(this, successCallback, errorCallback);
+      _blink.BlinkGeolocation.instance.getCurrentPosition_Callback_2_(unwrap_jso(this), unwrap_jso(successCallback), unwrap_jso(errorCallback));
       return;
     }
-    _blink.BlinkGeolocation.instance.getCurrentPosition_Callback_1_(this, successCallback);
+    _blink.BlinkGeolocation.instance.getCurrentPosition_Callback_1_(unwrap_jso(this), unwrap_jso(successCallback));
     return;
   }
 
   int _watchPosition(_PositionCallback successCallback, [_PositionErrorCallback errorCallback, Map options]) {
     if (options != null) {
-      return _blink.BlinkGeolocation.instance.watchPosition_Callback_3_(this, successCallback, errorCallback, options);
+      return _blink.BlinkGeolocation.instance.watchPosition_Callback_3_(unwrap_jso(this), unwrap_jso(successCallback), unwrap_jso(errorCallback), options);
     }
     if (errorCallback != null) {
-      return _blink.BlinkGeolocation.instance.watchPosition_Callback_2_(this, successCallback, errorCallback);
+      return _blink.BlinkGeolocation.instance.watchPosition_Callback_2_(unwrap_jso(this), unwrap_jso(successCallback), unwrap_jso(errorCallback));
     }
-    return _blink.BlinkGeolocation.instance.watchPosition_Callback_1_(this, successCallback);
+    return _blink.BlinkGeolocation.instance.watchPosition_Callback_1_(unwrap_jso(this), unwrap_jso(successCallback));
   }
 }
 
@@ -16489,12 +16518,12 @@
 
   @DomName('Geoposition.coords')
   @DocsEditable()
-  Coordinates get coords => _blink.BlinkGeoposition.instance.coords_Getter_(this);
-
+  Coordinates get coords => wrap_jso(_blink.BlinkGeoposition.instance.coords_Getter_(unwrap_jso(this)));
+  
   @DomName('Geoposition.timestamp')
   @DocsEditable()
-  int get timestamp => _blink.BlinkGeoposition.instance.timestamp_Getter_(this);
-
+  int get timestamp => _blink.BlinkGeoposition.instance.timestamp_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -17057,13 +17086,13 @@
   @DomName('HTMLHRElement.color')
   @DocsEditable()
   @Experimental() // untriaged
-  String get color => _blink.BlinkHTMLHRElement.instance.color_Getter_(this);
-
+  String get color => _blink.BlinkHTMLHRElement.instance.color_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLHRElement.color')
   @DocsEditable()
   @Experimental() // untriaged
-  void set color(String value) => _blink.BlinkHTMLHRElement.instance.color_Setter_(this, value);
-
+  void set color(String value) => _blink.BlinkHTMLHRElement.instance.color_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -17092,16 +17121,16 @@
 
   @DomName('HashChangeEvent.newURL')
   @DocsEditable()
-  String get newUrl => _blink.BlinkHashChangeEvent.instance.newURL_Getter_(this);
-
+  String get newUrl => _blink.BlinkHashChangeEvent.instance.newURL_Getter_(unwrap_jso(this));
+  
   @DomName('HashChangeEvent.oldURL')
   @DocsEditable()
-  String get oldUrl => _blink.BlinkHashChangeEvent.instance.oldURL_Getter_(this);
-
+  String get oldUrl => _blink.BlinkHashChangeEvent.instance.oldURL_Getter_(unwrap_jso(this));
+  
   @DomName('HashChangeEvent.initHashChangeEvent')
   @DocsEditable()
-  void _initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL) => _blink.BlinkHashChangeEvent.instance.initHashChangeEvent_Callback_5_(this, type, canBubble, cancelable, oldURL, newURL);
-
+  void _initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL) => _blink.BlinkHashChangeEvent.instance.initHashChangeEvent_Callback_5_(unwrap_jso(this), type, canBubble, cancelable, oldURL, newURL);
+  
 }
 // 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
@@ -17159,14 +17188,14 @@
   @DomName('Headers.size')
   @DocsEditable()
   @Experimental() // untriaged
-  int get size => _blink.BlinkHeaders.instance.size_Getter_(this);
-
+  int get size => _blink.BlinkHeaders.instance.size_Getter_(unwrap_jso(this));
+  
   void forEach(HeadersForEachCallback callback, [Object thisArg]) {
     if (thisArg != null) {
-      _blink.BlinkHeaders.instance.forEach_Callback_2_(this, callback, thisArg);
+      _blink.BlinkHeaders.instance.forEach_Callback_2_(unwrap_jso(this), unwrap_jso(callback), thisArg);
       return;
     }
-    _blink.BlinkHeaders.instance.forEach_Callback_1_(this, callback);
+    _blink.BlinkHeaders.instance.forEach_Callback_1_(unwrap_jso(this), unwrap_jso(callback));
     return;
   }
 
@@ -17248,40 +17277,40 @@
 
   @DomName('History.length')
   @DocsEditable()
-  int get length => _blink.BlinkHistory.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkHistory.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('History.state')
   @DocsEditable()
-  dynamic get state => _blink.BlinkHistory.instance.state_Getter_(this);
-
+  dynamic get state => _blink.BlinkHistory.instance.state_Getter_(unwrap_jso(this));
+  
   @DomName('History.back')
   @DocsEditable()
-  void back() => _blink.BlinkHistory.instance.back_Callback_0_(this);
-
+  void back() => _blink.BlinkHistory.instance.back_Callback_0_(unwrap_jso(this));
+  
   @DomName('History.forward')
   @DocsEditable()
-  void forward() => _blink.BlinkHistory.instance.forward_Callback_0_(this);
-
+  void forward() => _blink.BlinkHistory.instance.forward_Callback_0_(unwrap_jso(this));
+  
   @DomName('History.go')
   @DocsEditable()
-  void go(int distance) => _blink.BlinkHistory.instance.go_Callback_1_(this, distance);
-
+  void go(int distance) => _blink.BlinkHistory.instance.go_Callback_1_(unwrap_jso(this), distance);
+  
   @DomName('History.pushState')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  void pushState(Object data, String title, [String url]) => _blink.BlinkHistory.instance.pushState_Callback_3_(this, data, title, url);
-
+  void pushState(Object data, String title, [String url]) => _blink.BlinkHistory.instance.pushState_Callback_3_(unwrap_jso(this), data, title, url);
+  
   @DomName('History.replaceState')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  void replaceState(Object data, String title, [String url]) => _blink.BlinkHistory.instance.replaceState_Callback_3_(this, data, title, url);
-}
+  void replaceState(Object data, String title, [String url]) => _blink.BlinkHistory.instance.replaceState_Callback_3_(unwrap_jso(this), data, title, url);
+  }
 // 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.
@@ -17297,16 +17326,16 @@
 
   @DomName('HTMLCollection.length')
   @DocsEditable()
-  int get length => _blink.BlinkHTMLCollection.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkHTMLCollection.instance.length_Getter_(unwrap_jso(this));
+  
   Node operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkHTMLCollection.instance.item_Callback_1_(this, index);
+    return wrap_jso(_blink.BlinkHTMLCollection.instance.item_Callback_1_(unwrap_jso(this), index));
   }
 
-  Node _nativeIndexedGetter(int index) => _blink.BlinkHTMLCollection.instance.item_Callback_1_(this, index);
-
+  Node _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkHTMLCollection.instance.item_Callback_1_(unwrap_jso(this), index));
+ 
   void operator[]=(int index, Node value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -17347,12 +17376,12 @@
 
   @DomName('HTMLCollection.item')
   @DocsEditable()
-  Element item(int index) => _blink.BlinkHTMLCollection.instance.item_Callback_1_(this, index);
-
+  Element item(int index) => wrap_jso(_blink.BlinkHTMLCollection.instance.item_Callback_1_(unwrap_jso(this), index));
+  
   @DomName('HTMLCollection.namedItem')
   @DocsEditable()
-  Element namedItem(String name) => _blink.BlinkHTMLCollection.instance.namedItem_Callback_1_(this, name);
-
+  Element namedItem(String name) => wrap_jso(_blink.BlinkHTMLCollection.instance.namedItem_Callback_1_(unwrap_jso(this), name));
+  
 }
 // 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
@@ -17904,119 +17933,119 @@
 
   @DomName('HTMLElement.contentEditable')
   @DocsEditable()
-  String get contentEditable => _blink.BlinkHTMLElement.instance.contentEditable_Getter_(this);
-
+  String get contentEditable => _blink.BlinkHTMLElement.instance.contentEditable_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLElement.contentEditable')
   @DocsEditable()
-  void set contentEditable(String value) => _blink.BlinkHTMLElement.instance.contentEditable_Setter_(this, value);
-
+  void set contentEditable(String value) => _blink.BlinkHTMLElement.instance.contentEditable_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLElement.contextMenu')
   @DocsEditable()
   @Experimental() // untriaged
-  MenuElement get contextMenu => _blink.BlinkHTMLElement.instance.contextMenu_Getter_(this);
-
+  MenuElement get contextMenu => wrap_jso(_blink.BlinkHTMLElement.instance.contextMenu_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLElement.contextMenu')
   @DocsEditable()
   @Experimental() // untriaged
-  void set contextMenu(MenuElement value) => _blink.BlinkHTMLElement.instance.contextMenu_Setter_(this, value);
-
+  void set contextMenu(MenuElement value) => _blink.BlinkHTMLElement.instance.contextMenu_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('HTMLElement.dir')
   @DocsEditable()
-  String get dir => _blink.BlinkHTMLElement.instance.dir_Getter_(this);
-
+  String get dir => _blink.BlinkHTMLElement.instance.dir_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLElement.dir')
   @DocsEditable()
-  void set dir(String value) => _blink.BlinkHTMLElement.instance.dir_Setter_(this, value);
-
+  void set dir(String value) => _blink.BlinkHTMLElement.instance.dir_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLElement.draggable')
   @DocsEditable()
-  bool get draggable => _blink.BlinkHTMLElement.instance.draggable_Getter_(this);
-
+  bool get draggable => _blink.BlinkHTMLElement.instance.draggable_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLElement.draggable')
   @DocsEditable()
-  void set draggable(bool value) => _blink.BlinkHTMLElement.instance.draggable_Setter_(this, value);
-
+  void set draggable(bool value) => _blink.BlinkHTMLElement.instance.draggable_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLElement.hidden')
   @DocsEditable()
-  bool get hidden => _blink.BlinkHTMLElement.instance.hidden_Getter_(this);
-
+  bool get hidden => _blink.BlinkHTMLElement.instance.hidden_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLElement.hidden')
   @DocsEditable()
-  void set hidden(bool value) => _blink.BlinkHTMLElement.instance.hidden_Setter_(this, value);
-
+  void set hidden(bool value) => _blink.BlinkHTMLElement.instance.hidden_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLElement.inputMethodContext')
   @DocsEditable()
   @Experimental() // untriaged
-  InputMethodContext get inputMethodContext => _blink.BlinkHTMLElement.instance.inputMethodContext_Getter_(this);
-
+  InputMethodContext get inputMethodContext => wrap_jso(_blink.BlinkHTMLElement.instance.inputMethodContext_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLElement.isContentEditable')
   @DocsEditable()
-  bool get isContentEditable => _blink.BlinkHTMLElement.instance.isContentEditable_Getter_(this);
-
+  bool get isContentEditable => _blink.BlinkHTMLElement.instance.isContentEditable_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLElement.lang')
   @DocsEditable()
-  String get lang => _blink.BlinkHTMLElement.instance.lang_Getter_(this);
-
+  String get lang => _blink.BlinkHTMLElement.instance.lang_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLElement.lang')
   @DocsEditable()
-  void set lang(String value) => _blink.BlinkHTMLElement.instance.lang_Setter_(this, value);
-
+  void set lang(String value) => _blink.BlinkHTMLElement.instance.lang_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLElement.spellcheck')
   @DocsEditable()
   // http://blog.whatwg.org/the-road-to-html-5-spellchecking
   @Experimental() // nonstandard
-  bool get spellcheck => _blink.BlinkHTMLElement.instance.spellcheck_Getter_(this);
-
+  bool get spellcheck => _blink.BlinkHTMLElement.instance.spellcheck_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLElement.spellcheck')
   @DocsEditable()
   // http://blog.whatwg.org/the-road-to-html-5-spellchecking
   @Experimental() // nonstandard
-  void set spellcheck(bool value) => _blink.BlinkHTMLElement.instance.spellcheck_Setter_(this, value);
-
+  void set spellcheck(bool value) => _blink.BlinkHTMLElement.instance.spellcheck_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLElement.tabIndex')
   @DocsEditable()
-  int get tabIndex => _blink.BlinkHTMLElement.instance.tabIndex_Getter_(this);
-
+  int get tabIndex => _blink.BlinkHTMLElement.instance.tabIndex_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLElement.tabIndex')
   @DocsEditable()
-  void set tabIndex(int value) => _blink.BlinkHTMLElement.instance.tabIndex_Setter_(this, value);
-
+  void set tabIndex(int value) => _blink.BlinkHTMLElement.instance.tabIndex_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLElement.title')
   @DocsEditable()
-  String get title => _blink.BlinkHTMLElement.instance.title_Getter_(this);
-
+  String get title => _blink.BlinkHTMLElement.instance.title_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLElement.title')
   @DocsEditable()
-  void set title(String value) => _blink.BlinkHTMLElement.instance.title_Setter_(this, value);
-
+  void set title(String value) => _blink.BlinkHTMLElement.instance.title_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLElement.translate')
   @DocsEditable()
-  bool get translate => _blink.BlinkHTMLElement.instance.translate_Getter_(this);
-
+  bool get translate => _blink.BlinkHTMLElement.instance.translate_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLElement.translate')
   @DocsEditable()
-  void set translate(bool value) => _blink.BlinkHTMLElement.instance.translate_Setter_(this, value);
-
+  void set translate(bool value) => _blink.BlinkHTMLElement.instance.translate_Setter_(unwrap_jso(this), value);
+  
   @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 => _blink.BlinkHTMLElement.instance.webkitdropzone_Getter_(this);
-
+  String get dropzone => _blink.BlinkHTMLElement.instance.webkitdropzone_Getter_(unwrap_jso(this));
+  
   @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) => _blink.BlinkHTMLElement.instance.webkitdropzone_Setter_(this, value);
-
+  void set dropzone(String value) => _blink.BlinkHTMLElement.instance.webkitdropzone_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLElement.click')
   @DocsEditable()
-  void click() => _blink.BlinkHTMLElement.instance.click_Callback_0_(this);
-
+  void click() => _blink.BlinkHTMLElement.instance.click_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLElement.onabort')
   @DocsEditable()
   @Experimental() // untriaged
@@ -18293,8 +18322,8 @@
 
   @DomName('HTMLFormControlsCollection.namedItem')
   @DocsEditable()
-  Object namedItem(String name) => _blink.BlinkHTMLFormControlsCollection.instance.namedItem_Callback_1_(this, name);
-
+  Object namedItem(String name) => wrap_jso(_blink.BlinkHTMLFormControlsCollection.instance.namedItem_Callback_1_(unwrap_jso(this), name));
+  
 }
 // 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
@@ -18701,7 +18730,7 @@
    */
   @DomName('XMLHttpRequest.XMLHttpRequest')
   @DocsEditable()
-  factory HttpRequest() => _create();
+  factory HttpRequest() => wrap_jso(_create());
 
   @DocsEditable()
   static HttpRequest _create() => _blink.BlinkXMLHttpRequest.instance.constructorCallback_0_();
@@ -18760,8 +18789,8 @@
    */
   @DomName('XMLHttpRequest.readyState')
   @DocsEditable()
-  int get readyState => _blink.BlinkXMLHttpRequest.instance.readyState_Getter_(this);
-
+  int get readyState => _blink.BlinkXMLHttpRequest.instance.readyState_Getter_(unwrap_jso(this));
+  
   /**
    * The data received as a reponse from the request.
    *
@@ -18775,15 +18804,15 @@
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  Object get response => _blink.BlinkXMLHttpRequest.instance.response_Getter_(this);
-
+  Object get response => _blink.BlinkXMLHttpRequest.instance.response_Getter_(unwrap_jso(this));
+  
   /**
    * The response in String form or empty String on failure.
    */
   @DomName('XMLHttpRequest.responseText')
   @DocsEditable()
-  String get responseText => _blink.BlinkXMLHttpRequest.instance.responseText_Getter_(this);
-
+  String get responseText => _blink.BlinkXMLHttpRequest.instance.responseText_Getter_(unwrap_jso(this));
+  
   /**
    * [String] telling the server the desired response format.
    *
@@ -18796,8 +18825,8 @@
    */
   @DomName('XMLHttpRequest.responseType')
   @DocsEditable()
-  String get responseType => _blink.BlinkXMLHttpRequest.instance.responseType_Getter_(this);
-
+  String get responseType => _blink.BlinkXMLHttpRequest.instance.responseType_Getter_(unwrap_jso(this));
+  
   /**
    * [String] telling the server the desired response format.
    *
@@ -18810,13 +18839,13 @@
    */
   @DomName('XMLHttpRequest.responseType')
   @DocsEditable()
-  void set responseType(String value) => _blink.BlinkXMLHttpRequest.instance.responseType_Setter_(this, value);
-
+  void set responseType(String value) => _blink.BlinkXMLHttpRequest.instance.responseType_Setter_(unwrap_jso(this), value);
+  
   @DomName('XMLHttpRequest.responseURL')
   @DocsEditable()
   @Experimental() // untriaged
-  String get responseUrl => _blink.BlinkXMLHttpRequest.instance.responseURL_Getter_(this);
-
+  String get responseUrl => _blink.BlinkXMLHttpRequest.instance.responseURL_Getter_(unwrap_jso(this));
+  
   /**
    * The request response, or null on failure.
    *
@@ -18826,24 +18855,24 @@
    */
   @DomName('XMLHttpRequest.responseXML')
   @DocsEditable()
-  Document get responseXml => _blink.BlinkXMLHttpRequest.instance.responseXML_Getter_(this);
-
+  Document get responseXml => wrap_jso(_blink.BlinkXMLHttpRequest.instance.responseXML_Getter_(unwrap_jso(this)));
+  
   /**
    * The http result code from the request (200, 404, etc).
    * See also: [Http Status Codes](http://en.wikipedia.org/wiki/List_of_HTTP_status_codes)
    */
   @DomName('XMLHttpRequest.status')
   @DocsEditable()
-  int get status => _blink.BlinkXMLHttpRequest.instance.status_Getter_(this);
-
+  int get status => _blink.BlinkXMLHttpRequest.instance.status_Getter_(unwrap_jso(this));
+  
   /**
    * The request response string (such as \"200 OK\").
    * See also: [Http Status Codes](http://en.wikipedia.org/wiki/List_of_HTTP_status_codes)
    */
   @DomName('XMLHttpRequest.statusText')
   @DocsEditable()
-  String get statusText => _blink.BlinkXMLHttpRequest.instance.statusText_Getter_(this);
-
+  String get statusText => _blink.BlinkXMLHttpRequest.instance.statusText_Getter_(unwrap_jso(this));
+  
   /**
    * Length of time before a request is automatically terminated.
    *
@@ -18863,8 +18892,8 @@
   @DomName('XMLHttpRequest.timeout')
   @DocsEditable()
   @Experimental() // untriaged
-  int get timeout => _blink.BlinkXMLHttpRequest.instance.timeout_Getter_(this);
-
+  int get timeout => _blink.BlinkXMLHttpRequest.instance.timeout_Getter_(unwrap_jso(this));
+  
   /**
    * Length of time before a request is automatically terminated.
    *
@@ -18884,8 +18913,8 @@
   @DomName('XMLHttpRequest.timeout')
   @DocsEditable()
   @Experimental() // untriaged
-  void set timeout(int value) => _blink.BlinkXMLHttpRequest.instance.timeout_Setter_(this, value);
-
+  void set timeout(int value) => _blink.BlinkXMLHttpRequest.instance.timeout_Setter_(unwrap_jso(this), value);
+  
   /**
    * [EventTarget] that can hold listeners to track the progress of the request.
    * The events fired will be members of [HttpRequestUploadEvents].
@@ -18893,8 +18922,8 @@
   @DomName('XMLHttpRequest.upload')
   @DocsEditable()
   @Unstable()
-  HttpRequestUpload get upload => _blink.BlinkXMLHttpRequest.instance.upload_Getter_(this);
-
+  HttpRequestUpload get upload => wrap_jso(_blink.BlinkXMLHttpRequest.instance.upload_Getter_(unwrap_jso(this)));
+  
   /**
    * True if cross-site requests should use credentials such as cookies
    * or authorization headers; false otherwise.
@@ -18903,8 +18932,8 @@
    */
   @DomName('XMLHttpRequest.withCredentials')
   @DocsEditable()
-  bool get withCredentials => _blink.BlinkXMLHttpRequest.instance.withCredentials_Getter_(this);
-
+  bool get withCredentials => _blink.BlinkXMLHttpRequest.instance.withCredentials_Getter_(unwrap_jso(this));
+  
   /**
    * True if cross-site requests should use credentials such as cookies
    * or authorization headers; false otherwise.
@@ -18913,8 +18942,8 @@
    */
   @DomName('XMLHttpRequest.withCredentials')
   @DocsEditable()
-  void set withCredentials(bool value) => _blink.BlinkXMLHttpRequest.instance.withCredentials_Setter_(this, value);
-
+  void set withCredentials(bool value) => _blink.BlinkXMLHttpRequest.instance.withCredentials_Setter_(unwrap_jso(this), value);
+  
   /**
    * Stop the current request.
    *
@@ -18924,8 +18953,8 @@
    */
   @DomName('XMLHttpRequest.abort')
   @DocsEditable()
-  void abort() => _blink.BlinkXMLHttpRequest.instance.abort_Callback_0_(this);
-
+  void abort() => _blink.BlinkXMLHttpRequest.instance.abort_Callback_0_(unwrap_jso(this));
+  
   /**
    * Retrieve all the response headers from a request.
    *
@@ -18939,8 +18968,8 @@
   @DomName('XMLHttpRequest.getAllResponseHeaders')
   @DocsEditable()
   @Unstable()
-  String getAllResponseHeaders() => _blink.BlinkXMLHttpRequest.instance.getAllResponseHeaders_Callback_0_(this);
-
+  String getAllResponseHeaders() => _blink.BlinkXMLHttpRequest.instance.getAllResponseHeaders_Callback_0_(unwrap_jso(this));
+  
   /**
    * Return the response header named `header`, or null if not found.
    *
@@ -18950,8 +18979,8 @@
   @DomName('XMLHttpRequest.getResponseHeader')
   @DocsEditable()
   @Unstable()
-  String getResponseHeader(String header) => _blink.BlinkXMLHttpRequest.instance.getResponseHeader_Callback_1_(this, header);
-
+  String getResponseHeader(String header) => _blink.BlinkXMLHttpRequest.instance.getResponseHeader_Callback_1_(unwrap_jso(this), header);
+  
   /**
    * Specify the desired `url`, and `method` to use in making the request.
    *
@@ -18969,8 +18998,8 @@
    */
   @DomName('XMLHttpRequest.open')
   @DocsEditable()
-  void open(String method, String url, {bool async, String user, String password}) => _blink.BlinkXMLHttpRequest.instance.open_Callback_5_(this, method, url, async, user, password);
-
+  void open(String method, String url, {bool async, String user, String password}) => _blink.BlinkXMLHttpRequest.instance.open_Callback_5_(unwrap_jso(this), method, url, async, user, password);
+  
   /**
    * Specify a particular MIME type (such as `text/xml`) desired for the
    * response.
@@ -18983,8 +19012,8 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.SAFARI)
-  void overrideMimeType(String override) => _blink.BlinkXMLHttpRequest.instance.overrideMimeType_Callback_1_(this, override);
-
+  void overrideMimeType(String override) => _blink.BlinkXMLHttpRequest.instance.overrideMimeType_Callback_1_(unwrap_jso(this), override);
+  
   /**
    * Send the request with any given `data`.
    *
@@ -19001,8 +19030,8 @@
    */
   @DomName('XMLHttpRequest.send')
   @DocsEditable()
-  void send([data]) => _blink.BlinkXMLHttpRequest.instance.send_Callback_1_(this, data);
-
+  void send([data]) => _blink.BlinkXMLHttpRequest.instance.send_Callback_1_(unwrap_jso(this), unwrap_jso(data));
+  
   /**
    * Sets the value of an HTTP requst header.
    *
@@ -19023,8 +19052,8 @@
    */
   @DomName('XMLHttpRequest.setRequestHeader')
   @DocsEditable()
-  void setRequestHeader(String header, String value) => _blink.BlinkXMLHttpRequest.instance.setRequestHeader_Callback_2_(this, header, value);
-
+  void setRequestHeader(String header, String value) => _blink.BlinkXMLHttpRequest.instance.setRequestHeader_Callback_2_(unwrap_jso(this), header, value);
+  
   /// Stream of `readystatechange` events handled by this [HttpRequest].
 /**
    * Event listeners to be notified every time the [HttpRequest]
@@ -19219,75 +19248,75 @@
   @DomName('HTMLIFrameElement.allowFullscreen')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get allowFullscreen => _blink.BlinkHTMLIFrameElement.instance.allowFullscreen_Getter_(this);
-
+  bool get allowFullscreen => _blink.BlinkHTMLIFrameElement.instance.allowFullscreen_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLIFrameElement.allowFullscreen')
   @DocsEditable()
   @Experimental() // untriaged
-  void set allowFullscreen(bool value) => _blink.BlinkHTMLIFrameElement.instance.allowFullscreen_Setter_(this, value);
-
+  void set allowFullscreen(bool value) => _blink.BlinkHTMLIFrameElement.instance.allowFullscreen_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLIFrameElement.contentWindow')
   @DocsEditable()
-  WindowBase get contentWindow => _blink.BlinkHTMLIFrameElement.instance.contentWindow_Getter_(this);
-
+  WindowBase get contentWindow => wrap_jso(_blink.BlinkHTMLIFrameElement.instance.contentWindow_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLIFrameElement.height')
   @DocsEditable()
-  String get height => _blink.BlinkHTMLIFrameElement.instance.height_Getter_(this);
-
+  String get height => _blink.BlinkHTMLIFrameElement.instance.height_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLIFrameElement.height')
   @DocsEditable()
-  void set height(String value) => _blink.BlinkHTMLIFrameElement.instance.height_Setter_(this, value);
-
+  void set height(String value) => _blink.BlinkHTMLIFrameElement.instance.height_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLIFrameElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  String get integrity => _blink.BlinkHTMLIFrameElement.instance.integrity_Getter_(this);
-
+  String get integrity => _blink.BlinkHTMLIFrameElement.instance.integrity_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLIFrameElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLIFrameElement.instance.integrity_Setter_(this, value);
-
+  void set integrity(String value) => _blink.BlinkHTMLIFrameElement.instance.integrity_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLIFrameElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLIFrameElement.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkHTMLIFrameElement.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLIFrameElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLIFrameElement.instance.name_Setter_(this, value);
-
+  void set name(String value) => _blink.BlinkHTMLIFrameElement.instance.name_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLIFrameElement.sandbox')
   @DocsEditable()
-  String get sandbox => _blink.BlinkHTMLIFrameElement.instance.sandbox_Getter_(this);
-
+  String get sandbox => _blink.BlinkHTMLIFrameElement.instance.sandbox_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLIFrameElement.sandbox')
   @DocsEditable()
-  void set sandbox(String value) => _blink.BlinkHTMLIFrameElement.instance.sandbox_Setter_(this, value);
-
+  void set sandbox(String value) => _blink.BlinkHTMLIFrameElement.instance.sandbox_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLIFrameElement.src')
   @DocsEditable()
-  String get src => _blink.BlinkHTMLIFrameElement.instance.src_Getter_(this);
-
+  String get src => _blink.BlinkHTMLIFrameElement.instance.src_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLIFrameElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLIFrameElement.instance.src_Setter_(this, value);
-
+  void set src(String value) => _blink.BlinkHTMLIFrameElement.instance.src_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLIFrameElement.srcdoc')
   @DocsEditable()
-  String get srcdoc => _blink.BlinkHTMLIFrameElement.instance.srcdoc_Getter_(this);
-
+  String get srcdoc => _blink.BlinkHTMLIFrameElement.instance.srcdoc_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLIFrameElement.srcdoc')
   @DocsEditable()
-  void set srcdoc(String value) => _blink.BlinkHTMLIFrameElement.instance.srcdoc_Setter_(this, value);
-
+  void set srcdoc(String value) => _blink.BlinkHTMLIFrameElement.instance.srcdoc_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLIFrameElement.width')
   @DocsEditable()
-  String get width => _blink.BlinkHTMLIFrameElement.instance.width_Getter_(this);
-
+  String get width => _blink.BlinkHTMLIFrameElement.instance.width_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLIFrameElement.width')
   @DocsEditable()
-  void set width(String value) => _blink.BlinkHTMLIFrameElement.instance.width_Setter_(this, value);
-
+  void set width(String value) => _blink.BlinkHTMLIFrameElement.instance.width_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -19306,13 +19335,13 @@
   @DomName('ImageBitmap.height')
   @DocsEditable()
   @Experimental() // untriaged
-  int get height => _blink.BlinkImageBitmap.instance.height_Getter_(this);
-
+  int get height => _blink.BlinkImageBitmap.instance.height_Getter_(unwrap_jso(this));
+  
   @DomName('ImageBitmap.width')
   @DocsEditable()
   @Experimental() // untriaged
-  int get width => _blink.BlinkImageBitmap.instance.width_Getter_(this);
-
+  int get width => _blink.BlinkImageBitmap.instance.width_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -19346,16 +19375,16 @@
 
   @DomName('ImageData.data')
   @DocsEditable()
-  Uint8ClampedList get _data => _blink.BlinkImageData.instance.data_Getter_(this);
-
+  Uint8ClampedList get _data => wrap_jso(_blink.BlinkImageData.instance.data_Getter_(unwrap_jso(this)));
+  
   @DomName('ImageData.height')
   @DocsEditable()
-  int get height => _blink.BlinkImageData.instance.height_Getter_(this);
-
+  int get height => _blink.BlinkImageData.instance.height_Getter_(unwrap_jso(this));
+  
   @DomName('ImageData.width')
   @DocsEditable()
-  int get width => _blink.BlinkImageData.instance.width_Getter_(this);
-
+  int get width => _blink.BlinkImageData.instance.width_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -19385,107 +19414,107 @@
 
   @DomName('HTMLImageElement.alt')
   @DocsEditable()
-  String get alt => _blink.BlinkHTMLImageElement.instance.alt_Getter_(this);
-
+  String get alt => _blink.BlinkHTMLImageElement.instance.alt_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLImageElement.alt')
   @DocsEditable()
-  void set alt(String value) => _blink.BlinkHTMLImageElement.instance.alt_Setter_(this, value);
-
+  void set alt(String value) => _blink.BlinkHTMLImageElement.instance.alt_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLImageElement.complete')
   @DocsEditable()
-  bool get complete => _blink.BlinkHTMLImageElement.instance.complete_Getter_(this);
-
+  bool get complete => _blink.BlinkHTMLImageElement.instance.complete_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLImageElement.crossOrigin')
   @DocsEditable()
-  String get crossOrigin => _blink.BlinkHTMLImageElement.instance.crossOrigin_Getter_(this);
-
+  String get crossOrigin => _blink.BlinkHTMLImageElement.instance.crossOrigin_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLImageElement.crossOrigin')
   @DocsEditable()
-  void set crossOrigin(String value) => _blink.BlinkHTMLImageElement.instance.crossOrigin_Setter_(this, value);
-
+  void set crossOrigin(String value) => _blink.BlinkHTMLImageElement.instance.crossOrigin_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLImageElement.currentSrc')
   @DocsEditable()
   @Experimental() // untriaged
-  String get currentSrc => _blink.BlinkHTMLImageElement.instance.currentSrc_Getter_(this);
-
+  String get currentSrc => _blink.BlinkHTMLImageElement.instance.currentSrc_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLImageElement.height')
   @DocsEditable()
-  int get height => _blink.BlinkHTMLImageElement.instance.height_Getter_(this);
-
+  int get height => _blink.BlinkHTMLImageElement.instance.height_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLImageElement.height')
   @DocsEditable()
-  void set height(int value) => _blink.BlinkHTMLImageElement.instance.height_Setter_(this, value);
-
+  void set height(int value) => _blink.BlinkHTMLImageElement.instance.height_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLImageElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  String get integrity => _blink.BlinkHTMLImageElement.instance.integrity_Getter_(this);
-
+  String get integrity => _blink.BlinkHTMLImageElement.instance.integrity_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLImageElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLImageElement.instance.integrity_Setter_(this, value);
-
+  void set integrity(String value) => _blink.BlinkHTMLImageElement.instance.integrity_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLImageElement.isMap')
   @DocsEditable()
-  bool get isMap => _blink.BlinkHTMLImageElement.instance.isMap_Getter_(this);
-
+  bool get isMap => _blink.BlinkHTMLImageElement.instance.isMap_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLImageElement.isMap')
   @DocsEditable()
-  void set isMap(bool value) => _blink.BlinkHTMLImageElement.instance.isMap_Setter_(this, value);
-
+  void set isMap(bool value) => _blink.BlinkHTMLImageElement.instance.isMap_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLImageElement.naturalHeight')
   @DocsEditable()
-  int get naturalHeight => _blink.BlinkHTMLImageElement.instance.naturalHeight_Getter_(this);
-
+  int get naturalHeight => _blink.BlinkHTMLImageElement.instance.naturalHeight_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLImageElement.naturalWidth')
   @DocsEditable()
-  int get naturalWidth => _blink.BlinkHTMLImageElement.instance.naturalWidth_Getter_(this);
-
+  int get naturalWidth => _blink.BlinkHTMLImageElement.instance.naturalWidth_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLImageElement.sizes')
   @DocsEditable()
   @Experimental() // untriaged
-  String get sizes => _blink.BlinkHTMLImageElement.instance.sizes_Getter_(this);
-
+  String get sizes => _blink.BlinkHTMLImageElement.instance.sizes_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLImageElement.sizes')
   @DocsEditable()
   @Experimental() // untriaged
-  void set sizes(String value) => _blink.BlinkHTMLImageElement.instance.sizes_Setter_(this, value);
-
+  void set sizes(String value) => _blink.BlinkHTMLImageElement.instance.sizes_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLImageElement.src')
   @DocsEditable()
-  String get src => _blink.BlinkHTMLImageElement.instance.src_Getter_(this);
-
+  String get src => _blink.BlinkHTMLImageElement.instance.src_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLImageElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLImageElement.instance.src_Setter_(this, value);
-
+  void set src(String value) => _blink.BlinkHTMLImageElement.instance.src_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLImageElement.srcset')
   @DocsEditable()
   @Experimental() // untriaged
-  String get srcset => _blink.BlinkHTMLImageElement.instance.srcset_Getter_(this);
-
+  String get srcset => _blink.BlinkHTMLImageElement.instance.srcset_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLImageElement.srcset')
   @DocsEditable()
   @Experimental() // untriaged
-  void set srcset(String value) => _blink.BlinkHTMLImageElement.instance.srcset_Setter_(this, value);
-
+  void set srcset(String value) => _blink.BlinkHTMLImageElement.instance.srcset_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLImageElement.useMap')
   @DocsEditable()
-  String get useMap => _blink.BlinkHTMLImageElement.instance.useMap_Getter_(this);
-
+  String get useMap => _blink.BlinkHTMLImageElement.instance.useMap_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLImageElement.useMap')
   @DocsEditable()
-  void set useMap(String value) => _blink.BlinkHTMLImageElement.instance.useMap_Setter_(this, value);
-
+  void set useMap(String value) => _blink.BlinkHTMLImageElement.instance.useMap_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLImageElement.width')
   @DocsEditable()
-  int get width => _blink.BlinkHTMLImageElement.instance.width_Getter_(this);
-
+  int get width => _blink.BlinkHTMLImageElement.instance.width_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLImageElement.width')
   @DocsEditable()
-  void set width(int value) => _blink.BlinkHTMLImageElement.instance.width_Setter_(this, value);
-
+  void set width(int value) => _blink.BlinkHTMLImageElement.instance.width_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -19504,8 +19533,8 @@
   @DomName('InjectedScriptHost.inspect')
   @DocsEditable()
   @Experimental() // untriaged
-  void inspect(Object objectId, Object hints) => _blink.BlinkInjectedScriptHost.instance.inspect_Callback_2_(this, objectId, hints);
-
+  void inspect(Object objectId, Object hints) => _blink.BlinkInjectedScriptHost.instance.inspect_Callback_2_(unwrap_jso(this), objectId, hints);
+  
 }
 // 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
@@ -19558,403 +19587,403 @@
 
   @DomName('HTMLInputElement.accept')
   @DocsEditable()
-  String get accept => _blink.BlinkHTMLInputElement.instance.accept_Getter_(this);
-
+  String get accept => _blink.BlinkHTMLInputElement.instance.accept_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.accept')
   @DocsEditable()
-  void set accept(String value) => _blink.BlinkHTMLInputElement.instance.accept_Setter_(this, value);
-
+  void set accept(String value) => _blink.BlinkHTMLInputElement.instance.accept_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.alt')
   @DocsEditable()
-  String get alt => _blink.BlinkHTMLInputElement.instance.alt_Getter_(this);
-
+  String get alt => _blink.BlinkHTMLInputElement.instance.alt_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.alt')
   @DocsEditable()
-  void set alt(String value) => _blink.BlinkHTMLInputElement.instance.alt_Setter_(this, value);
-
+  void set alt(String value) => _blink.BlinkHTMLInputElement.instance.alt_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.autocomplete')
   @DocsEditable()
-  String get autocomplete => _blink.BlinkHTMLInputElement.instance.autocomplete_Getter_(this);
-
+  String get autocomplete => _blink.BlinkHTMLInputElement.instance.autocomplete_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.autocomplete')
   @DocsEditable()
-  void set autocomplete(String value) => _blink.BlinkHTMLInputElement.instance.autocomplete_Setter_(this, value);
-
+  void set autocomplete(String value) => _blink.BlinkHTMLInputElement.instance.autocomplete_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.autofocus')
   @DocsEditable()
-  bool get autofocus => _blink.BlinkHTMLInputElement.instance.autofocus_Getter_(this);
-
+  bool get autofocus => _blink.BlinkHTMLInputElement.instance.autofocus_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.autofocus')
   @DocsEditable()
-  void set autofocus(bool value) => _blink.BlinkHTMLInputElement.instance.autofocus_Setter_(this, value);
-
+  void set autofocus(bool value) => _blink.BlinkHTMLInputElement.instance.autofocus_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.capture')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get capture => _blink.BlinkHTMLInputElement.instance.capture_Getter_(this);
-
+  bool get capture => _blink.BlinkHTMLInputElement.instance.capture_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.capture')
   @DocsEditable()
   @Experimental() // untriaged
-  void set capture(bool value) => _blink.BlinkHTMLInputElement.instance.capture_Setter_(this, value);
-
+  void set capture(bool value) => _blink.BlinkHTMLInputElement.instance.capture_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.checked')
   @DocsEditable()
-  bool get checked => _blink.BlinkHTMLInputElement.instance.checked_Getter_(this);
-
+  bool get checked => _blink.BlinkHTMLInputElement.instance.checked_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.checked')
   @DocsEditable()
-  void set checked(bool value) => _blink.BlinkHTMLInputElement.instance.checked_Setter_(this, value);
-
+  void set checked(bool value) => _blink.BlinkHTMLInputElement.instance.checked_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.defaultChecked')
   @DocsEditable()
-  bool get defaultChecked => _blink.BlinkHTMLInputElement.instance.defaultChecked_Getter_(this);
-
+  bool get defaultChecked => _blink.BlinkHTMLInputElement.instance.defaultChecked_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.defaultChecked')
   @DocsEditable()
-  void set defaultChecked(bool value) => _blink.BlinkHTMLInputElement.instance.defaultChecked_Setter_(this, value);
-
+  void set defaultChecked(bool value) => _blink.BlinkHTMLInputElement.instance.defaultChecked_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.defaultValue')
   @DocsEditable()
-  String get defaultValue => _blink.BlinkHTMLInputElement.instance.defaultValue_Getter_(this);
-
+  String get defaultValue => _blink.BlinkHTMLInputElement.instance.defaultValue_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.defaultValue')
   @DocsEditable()
-  void set defaultValue(String value) => _blink.BlinkHTMLInputElement.instance.defaultValue_Setter_(this, value);
-
+  void set defaultValue(String value) => _blink.BlinkHTMLInputElement.instance.defaultValue_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.dirName')
   @DocsEditable()
-  String get dirName => _blink.BlinkHTMLInputElement.instance.dirName_Getter_(this);
-
+  String get dirName => _blink.BlinkHTMLInputElement.instance.dirName_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.dirName')
   @DocsEditable()
-  void set dirName(String value) => _blink.BlinkHTMLInputElement.instance.dirName_Setter_(this, value);
-
+  void set dirName(String value) => _blink.BlinkHTMLInputElement.instance.dirName_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLInputElement.instance.disabled_Getter_(this);
-
+  bool get disabled => _blink.BlinkHTMLInputElement.instance.disabled_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLInputElement.instance.disabled_Setter_(this, value);
-
+  void set disabled(bool value) => _blink.BlinkHTMLInputElement.instance.disabled_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.files')
   @DocsEditable()
-  List<File> get files => _blink.BlinkHTMLInputElement.instance.files_Getter_(this);
-
+  List<File> get files => wrap_jso_list(_blink.BlinkHTMLInputElement.instance.files_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLInputElement.files')
   @DocsEditable()
-  void set files(List<File> value) => _blink.BlinkHTMLInputElement.instance.files_Setter_(this, value);
-
+  void set files(List<File> value) => _blink.BlinkHTMLInputElement.instance.files_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('HTMLInputElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLInputElement.instance.form_Getter_(this);
-
+  FormElement get form => wrap_jso(_blink.BlinkHTMLInputElement.instance.form_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLInputElement.formAction')
   @DocsEditable()
-  String get formAction => _blink.BlinkHTMLInputElement.instance.formAction_Getter_(this);
-
+  String get formAction => _blink.BlinkHTMLInputElement.instance.formAction_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.formAction')
   @DocsEditable()
-  void set formAction(String value) => _blink.BlinkHTMLInputElement.instance.formAction_Setter_(this, value);
-
+  void set formAction(String value) => _blink.BlinkHTMLInputElement.instance.formAction_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.formEnctype')
   @DocsEditable()
-  String get formEnctype => _blink.BlinkHTMLInputElement.instance.formEnctype_Getter_(this);
-
+  String get formEnctype => _blink.BlinkHTMLInputElement.instance.formEnctype_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.formEnctype')
   @DocsEditable()
-  void set formEnctype(String value) => _blink.BlinkHTMLInputElement.instance.formEnctype_Setter_(this, value);
-
+  void set formEnctype(String value) => _blink.BlinkHTMLInputElement.instance.formEnctype_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.formMethod')
   @DocsEditable()
-  String get formMethod => _blink.BlinkHTMLInputElement.instance.formMethod_Getter_(this);
-
+  String get formMethod => _blink.BlinkHTMLInputElement.instance.formMethod_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.formMethod')
   @DocsEditable()
-  void set formMethod(String value) => _blink.BlinkHTMLInputElement.instance.formMethod_Setter_(this, value);
-
+  void set formMethod(String value) => _blink.BlinkHTMLInputElement.instance.formMethod_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.formNoValidate')
   @DocsEditable()
-  bool get formNoValidate => _blink.BlinkHTMLInputElement.instance.formNoValidate_Getter_(this);
-
+  bool get formNoValidate => _blink.BlinkHTMLInputElement.instance.formNoValidate_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.formNoValidate')
   @DocsEditable()
-  void set formNoValidate(bool value) => _blink.BlinkHTMLInputElement.instance.formNoValidate_Setter_(this, value);
-
+  void set formNoValidate(bool value) => _blink.BlinkHTMLInputElement.instance.formNoValidate_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.formTarget')
   @DocsEditable()
-  String get formTarget => _blink.BlinkHTMLInputElement.instance.formTarget_Getter_(this);
-
+  String get formTarget => _blink.BlinkHTMLInputElement.instance.formTarget_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.formTarget')
   @DocsEditable()
-  void set formTarget(String value) => _blink.BlinkHTMLInputElement.instance.formTarget_Setter_(this, value);
-
+  void set formTarget(String value) => _blink.BlinkHTMLInputElement.instance.formTarget_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.height')
   @DocsEditable()
-  int get height => _blink.BlinkHTMLInputElement.instance.height_Getter_(this);
-
+  int get height => _blink.BlinkHTMLInputElement.instance.height_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.height')
   @DocsEditable()
-  void set height(int value) => _blink.BlinkHTMLInputElement.instance.height_Setter_(this, value);
-
+  void set height(int value) => _blink.BlinkHTMLInputElement.instance.height_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.incremental')
   @DocsEditable()
   // http://www.w3.org/TR/html-markup/input.search.html
   @Experimental()
-  bool get incremental => _blink.BlinkHTMLInputElement.instance.incremental_Getter_(this);
-
+  bool get incremental => _blink.BlinkHTMLInputElement.instance.incremental_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.incremental')
   @DocsEditable()
   // http://www.w3.org/TR/html-markup/input.search.html
   @Experimental()
-  void set incremental(bool value) => _blink.BlinkHTMLInputElement.instance.incremental_Setter_(this, value);
-
+  void set incremental(bool value) => _blink.BlinkHTMLInputElement.instance.incremental_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.indeterminate')
   @DocsEditable()
-  bool get indeterminate => _blink.BlinkHTMLInputElement.instance.indeterminate_Getter_(this);
-
+  bool get indeterminate => _blink.BlinkHTMLInputElement.instance.indeterminate_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.indeterminate')
   @DocsEditable()
-  void set indeterminate(bool value) => _blink.BlinkHTMLInputElement.instance.indeterminate_Setter_(this, value);
-
+  void set indeterminate(bool value) => _blink.BlinkHTMLInputElement.instance.indeterminate_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.inputMode')
   @DocsEditable()
   @Experimental() // untriaged
-  String get inputMode => _blink.BlinkHTMLInputElement.instance.inputMode_Getter_(this);
-
+  String get inputMode => _blink.BlinkHTMLInputElement.instance.inputMode_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.inputMode')
   @DocsEditable()
   @Experimental() // untriaged
-  void set inputMode(String value) => _blink.BlinkHTMLInputElement.instance.inputMode_Setter_(this, value);
-
+  void set inputMode(String value) => _blink.BlinkHTMLInputElement.instance.inputMode_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.labels')
   @DocsEditable()
-  List<Node> get labels => _blink.BlinkHTMLInputElement.instance.labels_Getter_(this);
-
+  List<Node> get labels => wrap_jso_list(_blink.BlinkHTMLInputElement.instance.labels_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLInputElement.list')
   @DocsEditable()
-  HtmlElement get list => _blink.BlinkHTMLInputElement.instance.list_Getter_(this);
-
+  HtmlElement get list => wrap_jso(_blink.BlinkHTMLInputElement.instance.list_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLInputElement.max')
   @DocsEditable()
-  String get max => _blink.BlinkHTMLInputElement.instance.max_Getter_(this);
-
+  String get max => _blink.BlinkHTMLInputElement.instance.max_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.max')
   @DocsEditable()
-  void set max(String value) => _blink.BlinkHTMLInputElement.instance.max_Setter_(this, value);
-
+  void set max(String value) => _blink.BlinkHTMLInputElement.instance.max_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.maxLength')
   @DocsEditable()
-  int get maxLength => _blink.BlinkHTMLInputElement.instance.maxLength_Getter_(this);
-
+  int get maxLength => _blink.BlinkHTMLInputElement.instance.maxLength_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.maxLength')
   @DocsEditable()
-  void set maxLength(int value) => _blink.BlinkHTMLInputElement.instance.maxLength_Setter_(this, value);
-
+  void set maxLength(int value) => _blink.BlinkHTMLInputElement.instance.maxLength_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.min')
   @DocsEditable()
-  String get min => _blink.BlinkHTMLInputElement.instance.min_Getter_(this);
-
+  String get min => _blink.BlinkHTMLInputElement.instance.min_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.min')
   @DocsEditable()
-  void set min(String value) => _blink.BlinkHTMLInputElement.instance.min_Setter_(this, value);
-
+  void set min(String value) => _blink.BlinkHTMLInputElement.instance.min_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.multiple')
   @DocsEditable()
-  bool get multiple => _blink.BlinkHTMLInputElement.instance.multiple_Getter_(this);
-
+  bool get multiple => _blink.BlinkHTMLInputElement.instance.multiple_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.multiple')
   @DocsEditable()
-  void set multiple(bool value) => _blink.BlinkHTMLInputElement.instance.multiple_Setter_(this, value);
-
+  void set multiple(bool value) => _blink.BlinkHTMLInputElement.instance.multiple_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLInputElement.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkHTMLInputElement.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLInputElement.instance.name_Setter_(this, value);
-
+  void set name(String value) => _blink.BlinkHTMLInputElement.instance.name_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.pattern')
   @DocsEditable()
-  String get pattern => _blink.BlinkHTMLInputElement.instance.pattern_Getter_(this);
-
+  String get pattern => _blink.BlinkHTMLInputElement.instance.pattern_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.pattern')
   @DocsEditable()
-  void set pattern(String value) => _blink.BlinkHTMLInputElement.instance.pattern_Setter_(this, value);
-
+  void set pattern(String value) => _blink.BlinkHTMLInputElement.instance.pattern_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.placeholder')
   @DocsEditable()
-  String get placeholder => _blink.BlinkHTMLInputElement.instance.placeholder_Getter_(this);
-
+  String get placeholder => _blink.BlinkHTMLInputElement.instance.placeholder_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.placeholder')
   @DocsEditable()
-  void set placeholder(String value) => _blink.BlinkHTMLInputElement.instance.placeholder_Setter_(this, value);
-
+  void set placeholder(String value) => _blink.BlinkHTMLInputElement.instance.placeholder_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.readOnly')
   @DocsEditable()
-  bool get readOnly => _blink.BlinkHTMLInputElement.instance.readOnly_Getter_(this);
-
+  bool get readOnly => _blink.BlinkHTMLInputElement.instance.readOnly_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.readOnly')
   @DocsEditable()
-  void set readOnly(bool value) => _blink.BlinkHTMLInputElement.instance.readOnly_Setter_(this, value);
-
+  void set readOnly(bool value) => _blink.BlinkHTMLInputElement.instance.readOnly_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.required')
   @DocsEditable()
-  bool get required => _blink.BlinkHTMLInputElement.instance.required_Getter_(this);
-
+  bool get required => _blink.BlinkHTMLInputElement.instance.required_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.required')
   @DocsEditable()
-  void set required(bool value) => _blink.BlinkHTMLInputElement.instance.required_Setter_(this, value);
-
+  void set required(bool value) => _blink.BlinkHTMLInputElement.instance.required_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.selectionDirection')
   @DocsEditable()
-  String get selectionDirection => _blink.BlinkHTMLInputElement.instance.selectionDirection_Getter_(this);
-
+  String get selectionDirection => _blink.BlinkHTMLInputElement.instance.selectionDirection_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.selectionDirection')
   @DocsEditable()
-  void set selectionDirection(String value) => _blink.BlinkHTMLInputElement.instance.selectionDirection_Setter_(this, value);
-
+  void set selectionDirection(String value) => _blink.BlinkHTMLInputElement.instance.selectionDirection_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.selectionEnd')
   @DocsEditable()
-  int get selectionEnd => _blink.BlinkHTMLInputElement.instance.selectionEnd_Getter_(this);
-
+  int get selectionEnd => _blink.BlinkHTMLInputElement.instance.selectionEnd_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.selectionEnd')
   @DocsEditable()
-  void set selectionEnd(int value) => _blink.BlinkHTMLInputElement.instance.selectionEnd_Setter_(this, value);
-
+  void set selectionEnd(int value) => _blink.BlinkHTMLInputElement.instance.selectionEnd_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.selectionStart')
   @DocsEditable()
-  int get selectionStart => _blink.BlinkHTMLInputElement.instance.selectionStart_Getter_(this);
-
+  int get selectionStart => _blink.BlinkHTMLInputElement.instance.selectionStart_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.selectionStart')
   @DocsEditable()
-  void set selectionStart(int value) => _blink.BlinkHTMLInputElement.instance.selectionStart_Setter_(this, value);
-
+  void set selectionStart(int value) => _blink.BlinkHTMLInputElement.instance.selectionStart_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.size')
   @DocsEditable()
-  int get size => _blink.BlinkHTMLInputElement.instance.size_Getter_(this);
-
+  int get size => _blink.BlinkHTMLInputElement.instance.size_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.size')
   @DocsEditable()
-  void set size(int value) => _blink.BlinkHTMLInputElement.instance.size_Setter_(this, value);
-
+  void set size(int value) => _blink.BlinkHTMLInputElement.instance.size_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.src')
   @DocsEditable()
-  String get src => _blink.BlinkHTMLInputElement.instance.src_Getter_(this);
-
+  String get src => _blink.BlinkHTMLInputElement.instance.src_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLInputElement.instance.src_Setter_(this, value);
-
+  void set src(String value) => _blink.BlinkHTMLInputElement.instance.src_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.step')
   @DocsEditable()
-  String get step => _blink.BlinkHTMLInputElement.instance.step_Getter_(this);
-
+  String get step => _blink.BlinkHTMLInputElement.instance.step_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.step')
   @DocsEditable()
-  void set step(String value) => _blink.BlinkHTMLInputElement.instance.step_Setter_(this, value);
-
+  void set step(String value) => _blink.BlinkHTMLInputElement.instance.step_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLInputElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkHTMLInputElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLInputElement.instance.type_Setter_(this, value);
-
+  void set type(String value) => _blink.BlinkHTMLInputElement.instance.type_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.validationMessage')
   @DocsEditable()
-  String get validationMessage => _blink.BlinkHTMLInputElement.instance.validationMessage_Getter_(this);
-
+  String get validationMessage => _blink.BlinkHTMLInputElement.instance.validationMessage_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.validity')
   @DocsEditable()
-  ValidityState get validity => _blink.BlinkHTMLInputElement.instance.validity_Getter_(this);
-
+  ValidityState get validity => wrap_jso(_blink.BlinkHTMLInputElement.instance.validity_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLInputElement.value')
   @DocsEditable()
-  String get value => _blink.BlinkHTMLInputElement.instance.value_Getter_(this);
-
+  String get value => _blink.BlinkHTMLInputElement.instance.value_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLInputElement.instance.value_Setter_(this, value);
-
+  void set value(String value) => _blink.BlinkHTMLInputElement.instance.value_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.valueAsDate')
   @DocsEditable()
-  DateTime get valueAsDate => _blink.BlinkHTMLInputElement.instance.valueAsDate_Getter_(this);
-
+  DateTime get valueAsDate => _blink.BlinkHTMLInputElement.instance.valueAsDate_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.valueAsDate')
   @DocsEditable()
-  void set valueAsDate(DateTime value) => _blink.BlinkHTMLInputElement.instance.valueAsDate_Setter_(this, value);
-
+  void set valueAsDate(DateTime value) => _blink.BlinkHTMLInputElement.instance.valueAsDate_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.valueAsNumber')
   @DocsEditable()
-  num get valueAsNumber => _blink.BlinkHTMLInputElement.instance.valueAsNumber_Getter_(this);
-
+  num get valueAsNumber => _blink.BlinkHTMLInputElement.instance.valueAsNumber_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.valueAsNumber')
   @DocsEditable()
-  void set valueAsNumber(num value) => _blink.BlinkHTMLInputElement.instance.valueAsNumber_Setter_(this, value);
-
+  void set valueAsNumber(num value) => _blink.BlinkHTMLInputElement.instance.valueAsNumber_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.webkitEntries')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#concept-input-type-file-selected
-  List<Entry> get entries => _blink.BlinkHTMLInputElement.instance.webkitEntries_Getter_(this);
-
+  List<Entry> get entries => _blink.BlinkHTMLInputElement.instance.webkitEntries_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.webkitdirectory')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://plus.sandbox.google.com/+AddyOsmani/posts/Dk5UhZ6zfF3
-  bool get directory => _blink.BlinkHTMLInputElement.instance.webkitdirectory_Getter_(this);
-
+  bool get directory => _blink.BlinkHTMLInputElement.instance.webkitdirectory_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.webkitdirectory')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://plus.sandbox.google.com/+AddyOsmani/posts/Dk5UhZ6zfF3
-  void set directory(bool value) => _blink.BlinkHTMLInputElement.instance.webkitdirectory_Setter_(this, value);
-
+  void set directory(bool value) => _blink.BlinkHTMLInputElement.instance.webkitdirectory_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.width')
   @DocsEditable()
-  int get width => _blink.BlinkHTMLInputElement.instance.width_Getter_(this);
-
+  int get width => _blink.BlinkHTMLInputElement.instance.width_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.width')
   @DocsEditable()
-  void set width(int value) => _blink.BlinkHTMLInputElement.instance.width_Setter_(this, value);
-
+  void set width(int value) => _blink.BlinkHTMLInputElement.instance.width_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLInputElement.willValidate')
   @DocsEditable()
-  bool get willValidate => _blink.BlinkHTMLInputElement.instance.willValidate_Getter_(this);
-
+  bool get willValidate => _blink.BlinkHTMLInputElement.instance.willValidate_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLInputElement.instance.checkValidity_Callback_0_(this);
-
+  bool checkValidity() => _blink.BlinkHTMLInputElement.instance.checkValidity_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.select')
   @DocsEditable()
-  void select() => _blink.BlinkHTMLInputElement.instance.select_Callback_0_(this);
-
+  void select() => _blink.BlinkHTMLInputElement.instance.select_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLInputElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLInputElement.instance.setCustomValidity_Callback_1_(this, error);
-
+  void setCustomValidity(String error) => _blink.BlinkHTMLInputElement.instance.setCustomValidity_Callback_1_(unwrap_jso(this), error);
+  
   void setRangeText(String replacement, {int start, int end, String selectionMode}) {
     if ((replacement is String || replacement == null) && start == null && end == null && selectionMode == null) {
-      _blink.BlinkHTMLInputElement.instance.setRangeText_Callback_1_(this, replacement);
+      _blink.BlinkHTMLInputElement.instance.setRangeText_Callback_1_(unwrap_jso(this), replacement);
       return;
     }
     if ((end is int || end == null) && (start is int || start == null) && (replacement is String || replacement == null) && selectionMode == null) {
-      _blink.BlinkHTMLInputElement.instance.setRangeText_Callback_3_(this, replacement, start, end);
+      _blink.BlinkHTMLInputElement.instance.setRangeText_Callback_3_(unwrap_jso(this), replacement, start, end);
       return;
     }
     if ((selectionMode is String || selectionMode == null) && (end is int || end == null) && (start is int || start == null) && (replacement is String || replacement == null)) {
-      _blink.BlinkHTMLInputElement.instance.setRangeText_Callback_4_(this, replacement, start, end, selectionMode);
+      _blink.BlinkHTMLInputElement.instance.setRangeText_Callback_4_(unwrap_jso(this), replacement, start, end, selectionMode);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -19962,28 +19991,28 @@
 
   void setSelectionRange(int start, int end, [String direction]) {
     if (direction != null) {
-      _blink.BlinkHTMLInputElement.instance.setSelectionRange_Callback_3_(this, start, end, direction);
+      _blink.BlinkHTMLInputElement.instance.setSelectionRange_Callback_3_(unwrap_jso(this), start, end, direction);
       return;
     }
-    _blink.BlinkHTMLInputElement.instance.setSelectionRange_Callback_2_(this, start, end);
+    _blink.BlinkHTMLInputElement.instance.setSelectionRange_Callback_2_(unwrap_jso(this), start, end);
     return;
   }
 
   void stepDown([int n]) {
     if (n != null) {
-      _blink.BlinkHTMLInputElement.instance.stepDown_Callback_1_(this, n);
+      _blink.BlinkHTMLInputElement.instance.stepDown_Callback_1_(unwrap_jso(this), n);
       return;
     }
-    _blink.BlinkHTMLInputElement.instance.stepDown_Callback_0_(this);
+    _blink.BlinkHTMLInputElement.instance.stepDown_Callback_0_(unwrap_jso(this));
     return;
   }
 
   void stepUp([int n]) {
     if (n != null) {
-      _blink.BlinkHTMLInputElement.instance.stepUp_Callback_1_(this, n);
+      _blink.BlinkHTMLInputElement.instance.stepUp_Callback_1_(unwrap_jso(this), n);
       return;
     }
-    _blink.BlinkHTMLInputElement.instance.stepUp_Callback_0_(this);
+    _blink.BlinkHTMLInputElement.instance.stepUp_Callback_0_(unwrap_jso(this));
     return;
   }
 
@@ -20561,26 +20590,26 @@
   @DomName('InputMethodContext.compositionEndOffset')
   @DocsEditable()
   @Experimental() // untriaged
-  int get compositionEndOffset => _blink.BlinkInputMethodContext.instance.compositionEndOffset_Getter_(this);
-
+  int get compositionEndOffset => _blink.BlinkInputMethodContext.instance.compositionEndOffset_Getter_(unwrap_jso(this));
+  
   @DomName('InputMethodContext.compositionStartOffset')
   @DocsEditable()
   @Experimental() // untriaged
-  int get compositionStartOffset => _blink.BlinkInputMethodContext.instance.compositionStartOffset_Getter_(this);
-
+  int get compositionStartOffset => _blink.BlinkInputMethodContext.instance.compositionStartOffset_Getter_(unwrap_jso(this));
+  
   @DomName('InputMethodContext.locale')
   @DocsEditable()
-  String get locale => _blink.BlinkInputMethodContext.instance.locale_Getter_(this);
-
+  String get locale => _blink.BlinkInputMethodContext.instance.locale_Getter_(unwrap_jso(this));
+  
   @DomName('InputMethodContext.target')
   @DocsEditable()
   @Experimental() // untriaged
-  HtmlElement get target => _blink.BlinkInputMethodContext.instance.target_Getter_(this);
-
+  HtmlElement get target => wrap_jso(_blink.BlinkInputMethodContext.instance.target_Getter_(unwrap_jso(this)));
+  
   @DomName('InputMethodContext.confirmComposition')
   @DocsEditable()
-  void confirmComposition() => _blink.BlinkInputMethodContext.instance.confirmComposition_Callback_0_(this);
-
+  void confirmComposition() => _blink.BlinkInputMethodContext.instance.confirmComposition_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -20599,13 +20628,13 @@
   @DomName('InstallEvent.reloadAll')
   @DocsEditable()
   @Experimental() // untriaged
-  Future reloadAll() => _blink.BlinkInstallEvent.instance.reloadAll_Callback_0_(this);
-
+  Future reloadAll() => _blink.BlinkInstallEvent.instance.reloadAll_Callback_0_(unwrap_jso(this));
+  
   @DomName('InstallEvent.replace')
   @DocsEditable()
   @Experimental() // untriaged
-  void replace() => _blink.BlinkInstallEvent.instance.replace_Callback_0_(this);
-
+  void replace() => _blink.BlinkInstallEvent.instance.replace_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -20658,49 +20687,49 @@
 
   @DomName('KeyboardEvent.altKey')
   @DocsEditable()
-  bool get altKey => _blink.BlinkKeyboardEvent.instance.altKey_Getter_(this);
-
+  bool get altKey => _blink.BlinkKeyboardEvent.instance.altKey_Getter_(unwrap_jso(this));
+  
   @DomName('KeyboardEvent.ctrlKey')
   @DocsEditable()
-  bool get ctrlKey => _blink.BlinkKeyboardEvent.instance.ctrlKey_Getter_(this);
-
+  bool get ctrlKey => _blink.BlinkKeyboardEvent.instance.ctrlKey_Getter_(unwrap_jso(this));
+  
   @DomName('KeyboardEvent.keyIdentifier')
   @DocsEditable()
   @Experimental() // nonstandard
-  String get _keyIdentifier => _blink.BlinkKeyboardEvent.instance.keyIdentifier_Getter_(this);
-
+  String get _keyIdentifier => _blink.BlinkKeyboardEvent.instance.keyIdentifier_Getter_(unwrap_jso(this));
+  
   @DomName('KeyboardEvent.keyLocation')
   @DocsEditable()
   @Experimental() // nonstandard
-  int get keyLocation => _blink.BlinkKeyboardEvent.instance.keyLocation_Getter_(this);
-
+  int get keyLocation => _blink.BlinkKeyboardEvent.instance.keyLocation_Getter_(unwrap_jso(this));
+  
   @DomName('KeyboardEvent.location')
   @DocsEditable()
   @Experimental() // untriaged
-  int get location => _blink.BlinkKeyboardEvent.instance.location_Getter_(this);
-
+  int get location => _blink.BlinkKeyboardEvent.instance.location_Getter_(unwrap_jso(this));
+  
   @DomName('KeyboardEvent.metaKey')
   @DocsEditable()
-  bool get metaKey => _blink.BlinkKeyboardEvent.instance.metaKey_Getter_(this);
-
+  bool get metaKey => _blink.BlinkKeyboardEvent.instance.metaKey_Getter_(unwrap_jso(this));
+  
   @DomName('KeyboardEvent.repeat')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get repeat => _blink.BlinkKeyboardEvent.instance.repeat_Getter_(this);
-
+  bool get repeat => _blink.BlinkKeyboardEvent.instance.repeat_Getter_(unwrap_jso(this));
+  
   @DomName('KeyboardEvent.shiftKey')
   @DocsEditable()
-  bool get shiftKey => _blink.BlinkKeyboardEvent.instance.shiftKey_Getter_(this);
-
+  bool get shiftKey => _blink.BlinkKeyboardEvent.instance.shiftKey_Getter_(unwrap_jso(this));
+  
   @DomName('KeyboardEvent.getModifierState')
   @DocsEditable()
   @Experimental() // untriaged
-  bool getModifierState(String keyArgument) => _blink.BlinkKeyboardEvent.instance.getModifierState_Callback_1_(this, keyArgument);
-
+  bool getModifierState(String keyArgument) => _blink.BlinkKeyboardEvent.instance.getModifierState_Callback_1_(unwrap_jso(this), keyArgument);
+  
   @DomName('KeyboardEvent.initKeyboardEvent')
   @DocsEditable()
-  void _initKeyboardEvent(String type, bool canBubble, bool cancelable, Window view, String keyIdentifier, int location, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) => _blink.BlinkKeyboardEvent.instance.initKeyboardEvent_Callback_10_(this, type, canBubble, cancelable, view, keyIdentifier, location, ctrlKey, altKey, shiftKey, metaKey);
-
+  void _initKeyboardEvent(String type, bool canBubble, bool cancelable, Window view, String keyIdentifier, int location, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) => _blink.BlinkKeyboardEvent.instance.initKeyboardEvent_Callback_10_(unwrap_jso(this), type, canBubble, cancelable, unwrap_jso(view), keyIdentifier, location, ctrlKey, altKey, shiftKey, metaKey);
+  
 }
 // 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
@@ -20734,77 +20763,77 @@
 
   @DomName('HTMLKeygenElement.autofocus')
   @DocsEditable()
-  bool get autofocus => _blink.BlinkHTMLKeygenElement.instance.autofocus_Getter_(this);
-
+  bool get autofocus => _blink.BlinkHTMLKeygenElement.instance.autofocus_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLKeygenElement.autofocus')
   @DocsEditable()
-  void set autofocus(bool value) => _blink.BlinkHTMLKeygenElement.instance.autofocus_Setter_(this, value);
-
+  void set autofocus(bool value) => _blink.BlinkHTMLKeygenElement.instance.autofocus_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLKeygenElement.challenge')
   @DocsEditable()
-  String get challenge => _blink.BlinkHTMLKeygenElement.instance.challenge_Getter_(this);
-
+  String get challenge => _blink.BlinkHTMLKeygenElement.instance.challenge_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLKeygenElement.challenge')
   @DocsEditable()
-  void set challenge(String value) => _blink.BlinkHTMLKeygenElement.instance.challenge_Setter_(this, value);
-
+  void set challenge(String value) => _blink.BlinkHTMLKeygenElement.instance.challenge_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLKeygenElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLKeygenElement.instance.disabled_Getter_(this);
-
+  bool get disabled => _blink.BlinkHTMLKeygenElement.instance.disabled_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLKeygenElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLKeygenElement.instance.disabled_Setter_(this, value);
-
+  void set disabled(bool value) => _blink.BlinkHTMLKeygenElement.instance.disabled_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLKeygenElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLKeygenElement.instance.form_Getter_(this);
-
+  FormElement get form => wrap_jso(_blink.BlinkHTMLKeygenElement.instance.form_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLKeygenElement.keytype')
   @DocsEditable()
-  String get keytype => _blink.BlinkHTMLKeygenElement.instance.keytype_Getter_(this);
-
+  String get keytype => _blink.BlinkHTMLKeygenElement.instance.keytype_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLKeygenElement.keytype')
   @DocsEditable()
-  void set keytype(String value) => _blink.BlinkHTMLKeygenElement.instance.keytype_Setter_(this, value);
-
+  void set keytype(String value) => _blink.BlinkHTMLKeygenElement.instance.keytype_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLKeygenElement.labels')
   @DocsEditable()
   @Unstable()
-  List<Node> get labels => _blink.BlinkHTMLKeygenElement.instance.labels_Getter_(this);
-
+  List<Node> get labels => wrap_jso_list(_blink.BlinkHTMLKeygenElement.instance.labels_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLKeygenElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLKeygenElement.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkHTMLKeygenElement.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLKeygenElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLKeygenElement.instance.name_Setter_(this, value);
-
+  void set name(String value) => _blink.BlinkHTMLKeygenElement.instance.name_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLKeygenElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLKeygenElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkHTMLKeygenElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLKeygenElement.validationMessage')
   @DocsEditable()
-  String get validationMessage => _blink.BlinkHTMLKeygenElement.instance.validationMessage_Getter_(this);
-
+  String get validationMessage => _blink.BlinkHTMLKeygenElement.instance.validationMessage_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLKeygenElement.validity')
   @DocsEditable()
-  ValidityState get validity => _blink.BlinkHTMLKeygenElement.instance.validity_Getter_(this);
-
+  ValidityState get validity => wrap_jso(_blink.BlinkHTMLKeygenElement.instance.validity_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLKeygenElement.willValidate')
   @DocsEditable()
-  bool get willValidate => _blink.BlinkHTMLKeygenElement.instance.willValidate_Getter_(this);
-
+  bool get willValidate => _blink.BlinkHTMLKeygenElement.instance.willValidate_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLKeygenElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLKeygenElement.instance.checkValidity_Callback_0_(this);
-
+  bool checkValidity() => _blink.BlinkHTMLKeygenElement.instance.checkValidity_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLKeygenElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLKeygenElement.instance.setCustomValidity_Callback_1_(this, error);
-
+  void setCustomValidity(String error) => _blink.BlinkHTMLKeygenElement.instance.setCustomValidity_Callback_1_(unwrap_jso(this), error);
+  
 }
 // 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
@@ -20831,12 +20860,12 @@
 
   @DomName('HTMLLIElement.value')
   @DocsEditable()
-  int get value => _blink.BlinkHTMLLIElement.instance.value_Getter_(this);
-
+  int get value => _blink.BlinkHTMLLIElement.instance.value_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLLIElement.value')
   @DocsEditable()
-  void set value(int value) => _blink.BlinkHTMLLIElement.instance.value_Setter_(this, value);
-
+  void set value(int value) => _blink.BlinkHTMLLIElement.instance.value_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -20863,20 +20892,20 @@
 
   @DomName('HTMLLabelElement.control')
   @DocsEditable()
-  HtmlElement get control => _blink.BlinkHTMLLabelElement.instance.control_Getter_(this);
-
+  HtmlElement get control => wrap_jso(_blink.BlinkHTMLLabelElement.instance.control_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLLabelElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLLabelElement.instance.form_Getter_(this);
-
+  FormElement get form => wrap_jso(_blink.BlinkHTMLLabelElement.instance.form_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLLabelElement.htmlFor')
   @DocsEditable()
-  String get htmlFor => _blink.BlinkHTMLLabelElement.instance.htmlFor_Getter_(this);
-
+  String get htmlFor => _blink.BlinkHTMLLabelElement.instance.htmlFor_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLLabelElement.htmlFor')
   @DocsEditable()
-  void set htmlFor(String value) => _blink.BlinkHTMLLabelElement.instance.htmlFor_Setter_(this, value);
-
+  void set htmlFor(String value) => _blink.BlinkHTMLLabelElement.instance.htmlFor_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -20903,8 +20932,8 @@
 
   @DomName('HTMLLegendElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLLegendElement.instance.form_Getter_(this);
-
+  FormElement get form => wrap_jso(_blink.BlinkHTMLLegendElement.instance.form_Getter_(unwrap_jso(this)));
+  
 }
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -20930,85 +20959,85 @@
   @DomName('HTMLLinkElement.crossOrigin')
   @DocsEditable()
   @Experimental() // untriaged
-  String get crossOrigin => _blink.BlinkHTMLLinkElement.instance.crossOrigin_Getter_(this);
-
+  String get crossOrigin => _blink.BlinkHTMLLinkElement.instance.crossOrigin_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLLinkElement.crossOrigin')
   @DocsEditable()
   @Experimental() // untriaged
-  void set crossOrigin(String value) => _blink.BlinkHTMLLinkElement.instance.crossOrigin_Setter_(this, value);
-
+  void set crossOrigin(String value) => _blink.BlinkHTMLLinkElement.instance.crossOrigin_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLLinkElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLLinkElement.instance.disabled_Getter_(this);
-
+  bool get disabled => _blink.BlinkHTMLLinkElement.instance.disabled_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLLinkElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLLinkElement.instance.disabled_Setter_(this, value);
-
+  void set disabled(bool value) => _blink.BlinkHTMLLinkElement.instance.disabled_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLLinkElement.href')
   @DocsEditable()
-  String get href => _blink.BlinkHTMLLinkElement.instance.href_Getter_(this);
-
+  String get href => _blink.BlinkHTMLLinkElement.instance.href_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLLinkElement.href')
   @DocsEditable()
-  void set href(String value) => _blink.BlinkHTMLLinkElement.instance.href_Setter_(this, value);
-
+  void set href(String value) => _blink.BlinkHTMLLinkElement.instance.href_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLLinkElement.hreflang')
   @DocsEditable()
-  String get hreflang => _blink.BlinkHTMLLinkElement.instance.hreflang_Getter_(this);
-
+  String get hreflang => _blink.BlinkHTMLLinkElement.instance.hreflang_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLLinkElement.hreflang')
   @DocsEditable()
-  void set hreflang(String value) => _blink.BlinkHTMLLinkElement.instance.hreflang_Setter_(this, value);
-
+  void set hreflang(String value) => _blink.BlinkHTMLLinkElement.instance.hreflang_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLLinkElement.import')
   @DocsEditable()
   // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/imports/index.html#interface-import
   @Experimental()
-  Document get import => _blink.BlinkHTMLLinkElement.instance.import_Getter_(this);
-
+  Document get import => wrap_jso(_blink.BlinkHTMLLinkElement.instance.import_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLLinkElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  String get integrity => _blink.BlinkHTMLLinkElement.instance.integrity_Getter_(this);
-
+  String get integrity => _blink.BlinkHTMLLinkElement.instance.integrity_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLLinkElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLLinkElement.instance.integrity_Setter_(this, value);
-
+  void set integrity(String value) => _blink.BlinkHTMLLinkElement.instance.integrity_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLLinkElement.media')
   @DocsEditable()
-  String get media => _blink.BlinkHTMLLinkElement.instance.media_Getter_(this);
-
+  String get media => _blink.BlinkHTMLLinkElement.instance.media_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLLinkElement.media')
   @DocsEditable()
-  void set media(String value) => _blink.BlinkHTMLLinkElement.instance.media_Setter_(this, value);
-
+  void set media(String value) => _blink.BlinkHTMLLinkElement.instance.media_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLLinkElement.rel')
   @DocsEditable()
-  String get rel => _blink.BlinkHTMLLinkElement.instance.rel_Getter_(this);
-
+  String get rel => _blink.BlinkHTMLLinkElement.instance.rel_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLLinkElement.rel')
   @DocsEditable()
-  void set rel(String value) => _blink.BlinkHTMLLinkElement.instance.rel_Setter_(this, value);
-
+  void set rel(String value) => _blink.BlinkHTMLLinkElement.instance.rel_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLLinkElement.sheet')
   @DocsEditable()
-  StyleSheet get sheet => _blink.BlinkHTMLLinkElement.instance.sheet_Getter_(this);
-
+  StyleSheet get sheet => wrap_jso(_blink.BlinkHTMLLinkElement.instance.sheet_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLLinkElement.sizes')
   @DocsEditable()
-  DomSettableTokenList get sizes => _blink.BlinkHTMLLinkElement.instance.sizes_Getter_(this);
-
+  DomSettableTokenList get sizes => wrap_jso(_blink.BlinkHTMLLinkElement.instance.sizes_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLLinkElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLLinkElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkHTMLLinkElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLLinkElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLLinkElement.instance.type_Setter_(this, value);
-
+  void set type(String value) => _blink.BlinkHTMLLinkElement.instance.type_Setter_(unwrap_jso(this), value);
+  
 
     /// Checks if HTML imports are supported on the current platform.
   bool get supportsImport {
@@ -21038,8 +21067,8 @@
   @DomName('LocalCredential.password')
   @DocsEditable()
   @Experimental() // untriaged
-  String get password => _blink.BlinkLocalCredential.instance.password_Getter_(this);
-
+  String get password => _blink.BlinkLocalCredential.instance.password_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -21055,94 +21084,94 @@
   @DomName('Location.ancestorOrigins')
   @DocsEditable()
   @Experimental() // nonstandard
-  List<String> get ancestorOrigins => _blink.BlinkLocation.instance.ancestorOrigins_Getter_(this);
-
+  List<String> get ancestorOrigins => _blink.BlinkLocation.instance.ancestorOrigins_Getter_(unwrap_jso(this));
+  
   @DomName('Location.hash')
   @DocsEditable()
-  String get hash => _blink.BlinkLocation.instance.hash_Getter_(this);
-
+  String get hash => _blink.BlinkLocation.instance.hash_Getter_(unwrap_jso(this));
+  
   @DomName('Location.hash')
   @DocsEditable()
-  void set hash(String value) => _blink.BlinkLocation.instance.hash_Setter_(this, value);
-
+  void set hash(String value) => _blink.BlinkLocation.instance.hash_Setter_(unwrap_jso(this), value);
+  
   @DomName('Location.host')
   @DocsEditable()
-  String get host => _blink.BlinkLocation.instance.host_Getter_(this);
-
+  String get host => _blink.BlinkLocation.instance.host_Getter_(unwrap_jso(this));
+  
   @DomName('Location.host')
   @DocsEditable()
-  void set host(String value) => _blink.BlinkLocation.instance.host_Setter_(this, value);
-
+  void set host(String value) => _blink.BlinkLocation.instance.host_Setter_(unwrap_jso(this), value);
+  
   @DomName('Location.hostname')
   @DocsEditable()
-  String get hostname => _blink.BlinkLocation.instance.hostname_Getter_(this);
-
+  String get hostname => _blink.BlinkLocation.instance.hostname_Getter_(unwrap_jso(this));
+  
   @DomName('Location.hostname')
   @DocsEditable()
-  void set hostname(String value) => _blink.BlinkLocation.instance.hostname_Setter_(this, value);
-
+  void set hostname(String value) => _blink.BlinkLocation.instance.hostname_Setter_(unwrap_jso(this), value);
+  
   @DomName('Location.href')
   @DocsEditable()
-  String get href => _blink.BlinkLocation.instance.href_Getter_(this);
-
+  String get href => _blink.BlinkLocation.instance.href_Getter_(unwrap_jso(this));
+  
   @DomName('Location.href')
   @DocsEditable()
-  void set href(String value) => _blink.BlinkLocation.instance.href_Setter_(this, value);
-
+  void set href(String value) => _blink.BlinkLocation.instance.href_Setter_(unwrap_jso(this), value);
+  
   @DomName('Location.origin')
   @DocsEditable()
   // http://url.spec.whatwg.org/#urlutils Webkit Only
   @Experimental() // non-standard
-  String get origin => _blink.BlinkLocation.instance.origin_Getter_(this);
-
+  String get origin => _blink.BlinkLocation.instance.origin_Getter_(unwrap_jso(this));
+  
   @DomName('Location.pathname')
   @DocsEditable()
-  String get pathname => _blink.BlinkLocation.instance.pathname_Getter_(this);
-
+  String get pathname => _blink.BlinkLocation.instance.pathname_Getter_(unwrap_jso(this));
+  
   @DomName('Location.pathname')
   @DocsEditable()
-  void set pathname(String value) => _blink.BlinkLocation.instance.pathname_Setter_(this, value);
-
+  void set pathname(String value) => _blink.BlinkLocation.instance.pathname_Setter_(unwrap_jso(this), value);
+  
   @DomName('Location.port')
   @DocsEditable()
-  String get port => _blink.BlinkLocation.instance.port_Getter_(this);
-
+  String get port => _blink.BlinkLocation.instance.port_Getter_(unwrap_jso(this));
+  
   @DomName('Location.port')
   @DocsEditable()
-  void set port(String value) => _blink.BlinkLocation.instance.port_Setter_(this, value);
-
+  void set port(String value) => _blink.BlinkLocation.instance.port_Setter_(unwrap_jso(this), value);
+  
   @DomName('Location.protocol')
   @DocsEditable()
-  String get protocol => _blink.BlinkLocation.instance.protocol_Getter_(this);
-
+  String get protocol => _blink.BlinkLocation.instance.protocol_Getter_(unwrap_jso(this));
+  
   @DomName('Location.protocol')
   @DocsEditable()
-  void set protocol(String value) => _blink.BlinkLocation.instance.protocol_Setter_(this, value);
-
+  void set protocol(String value) => _blink.BlinkLocation.instance.protocol_Setter_(unwrap_jso(this), value);
+  
   @DomName('Location.search')
   @DocsEditable()
-  String get search => _blink.BlinkLocation.instance.search_Getter_(this);
-
+  String get search => _blink.BlinkLocation.instance.search_Getter_(unwrap_jso(this));
+  
   @DomName('Location.search')
   @DocsEditable()
-  void set search(String value) => _blink.BlinkLocation.instance.search_Setter_(this, value);
-
+  void set search(String value) => _blink.BlinkLocation.instance.search_Setter_(unwrap_jso(this), value);
+  
   @DomName('Location.assign')
   @DocsEditable()
-  void assign([String url]) => _blink.BlinkLocation.instance.assign_Callback_1_(this, url);
-
+  void assign([String url]) => _blink.BlinkLocation.instance.assign_Callback_1_(unwrap_jso(this), url);
+  
   @DomName('Location.reload')
   @DocsEditable()
-  void reload() => _blink.BlinkLocation.instance.reload_Callback_0_(this);
-
+  void reload() => _blink.BlinkLocation.instance.reload_Callback_0_(unwrap_jso(this));
+  
   @DomName('Location.replace')
   @DocsEditable()
-  void replace(String url) => _blink.BlinkLocation.instance.replace_Callback_1_(this, url);
-
+  void replace(String url) => _blink.BlinkLocation.instance.replace_Callback_1_(unwrap_jso(this), url);
+  
   @DomName('Location.toString')
   @DocsEditable()
-  String toString() => _blink.BlinkLocation.instance.toString_Callback_0_(this);
-
+  String toString() => _blink.BlinkLocation.instance.toString_Callback_0_(unwrap_jso(this));
+  
 
 
 }
@@ -21192,16 +21221,16 @@
 
   @DomName('HTMLMapElement.areas')
   @DocsEditable()
-  List<Node> get areas => _blink.BlinkHTMLMapElement.instance.areas_Getter_(this);
-
+  List<Node> get areas => wrap_jso_list(_blink.BlinkHTMLMapElement.instance.areas_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLMapElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLMapElement.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkHTMLMapElement.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMapElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLMapElement.instance.name_Setter_(this, value);
-
+  void set name(String value) => _blink.BlinkHTMLMapElement.instance.name_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -21226,80 +21255,80 @@
 
   @DomName('MediaController.buffered')
   @DocsEditable()
-  TimeRanges get buffered => _blink.BlinkMediaController.instance.buffered_Getter_(this);
-
+  TimeRanges get buffered => wrap_jso(_blink.BlinkMediaController.instance.buffered_Getter_(unwrap_jso(this)));
+  
   @DomName('MediaController.currentTime')
   @DocsEditable()
-  num get currentTime => _blink.BlinkMediaController.instance.currentTime_Getter_(this);
-
+  num get currentTime => _blink.BlinkMediaController.instance.currentTime_Getter_(unwrap_jso(this));
+  
   @DomName('MediaController.currentTime')
   @DocsEditable()
-  void set currentTime(num value) => _blink.BlinkMediaController.instance.currentTime_Setter_(this, value);
-
+  void set currentTime(num value) => _blink.BlinkMediaController.instance.currentTime_Setter_(unwrap_jso(this), value);
+  
   @DomName('MediaController.defaultPlaybackRate')
   @DocsEditable()
-  num get defaultPlaybackRate => _blink.BlinkMediaController.instance.defaultPlaybackRate_Getter_(this);
-
+  num get defaultPlaybackRate => _blink.BlinkMediaController.instance.defaultPlaybackRate_Getter_(unwrap_jso(this));
+  
   @DomName('MediaController.defaultPlaybackRate')
   @DocsEditable()
-  void set defaultPlaybackRate(num value) => _blink.BlinkMediaController.instance.defaultPlaybackRate_Setter_(this, value);
-
+  void set defaultPlaybackRate(num value) => _blink.BlinkMediaController.instance.defaultPlaybackRate_Setter_(unwrap_jso(this), value);
+  
   @DomName('MediaController.duration')
   @DocsEditable()
-  double get duration => _blink.BlinkMediaController.instance.duration_Getter_(this);
-
+  double get duration => _blink.BlinkMediaController.instance.duration_Getter_(unwrap_jso(this));
+  
   @DomName('MediaController.muted')
   @DocsEditable()
-  bool get muted => _blink.BlinkMediaController.instance.muted_Getter_(this);
-
+  bool get muted => _blink.BlinkMediaController.instance.muted_Getter_(unwrap_jso(this));
+  
   @DomName('MediaController.muted')
   @DocsEditable()
-  void set muted(bool value) => _blink.BlinkMediaController.instance.muted_Setter_(this, value);
-
+  void set muted(bool value) => _blink.BlinkMediaController.instance.muted_Setter_(unwrap_jso(this), value);
+  
   @DomName('MediaController.paused')
   @DocsEditable()
-  bool get paused => _blink.BlinkMediaController.instance.paused_Getter_(this);
-
+  bool get paused => _blink.BlinkMediaController.instance.paused_Getter_(unwrap_jso(this));
+  
   @DomName('MediaController.playbackRate')
   @DocsEditable()
-  num get playbackRate => _blink.BlinkMediaController.instance.playbackRate_Getter_(this);
-
+  num get playbackRate => _blink.BlinkMediaController.instance.playbackRate_Getter_(unwrap_jso(this));
+  
   @DomName('MediaController.playbackRate')
   @DocsEditable()
-  void set playbackRate(num value) => _blink.BlinkMediaController.instance.playbackRate_Setter_(this, value);
-
+  void set playbackRate(num value) => _blink.BlinkMediaController.instance.playbackRate_Setter_(unwrap_jso(this), value);
+  
   @DomName('MediaController.playbackState')
   @DocsEditable()
-  String get playbackState => _blink.BlinkMediaController.instance.playbackState_Getter_(this);
-
+  String get playbackState => _blink.BlinkMediaController.instance.playbackState_Getter_(unwrap_jso(this));
+  
   @DomName('MediaController.played')
   @DocsEditable()
-  TimeRanges get played => _blink.BlinkMediaController.instance.played_Getter_(this);
-
+  TimeRanges get played => wrap_jso(_blink.BlinkMediaController.instance.played_Getter_(unwrap_jso(this)));
+  
   @DomName('MediaController.seekable')
   @DocsEditable()
-  TimeRanges get seekable => _blink.BlinkMediaController.instance.seekable_Getter_(this);
-
+  TimeRanges get seekable => wrap_jso(_blink.BlinkMediaController.instance.seekable_Getter_(unwrap_jso(this)));
+  
   @DomName('MediaController.volume')
   @DocsEditable()
-  num get volume => _blink.BlinkMediaController.instance.volume_Getter_(this);
-
+  num get volume => _blink.BlinkMediaController.instance.volume_Getter_(unwrap_jso(this));
+  
   @DomName('MediaController.volume')
   @DocsEditable()
-  void set volume(num value) => _blink.BlinkMediaController.instance.volume_Setter_(this, value);
-
+  void set volume(num value) => _blink.BlinkMediaController.instance.volume_Setter_(unwrap_jso(this), value);
+  
   @DomName('MediaController.pause')
   @DocsEditable()
-  void pause() => _blink.BlinkMediaController.instance.pause_Callback_0_(this);
-
+  void pause() => _blink.BlinkMediaController.instance.pause_Callback_0_(unwrap_jso(this));
+  
   @DomName('MediaController.play')
   @DocsEditable()
-  void play() => _blink.BlinkMediaController.instance.play_Callback_0_(this);
-
+  void play() => _blink.BlinkMediaController.instance.play_Callback_0_(unwrap_jso(this));
+  
   @DomName('MediaController.unpause')
   @DocsEditable()
-  void unpause() => _blink.BlinkMediaController.instance.unpause_Callback_0_(this);
-
+  void unpause() => _blink.BlinkMediaController.instance.unpause_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -21318,23 +21347,23 @@
   @DomName('MediaDeviceInfo.deviceId')
   @DocsEditable()
   @Experimental() // untriaged
-  String get deviceId => _blink.BlinkMediaDeviceInfo.instance.deviceId_Getter_(this);
-
+  String get deviceId => _blink.BlinkMediaDeviceInfo.instance.deviceId_Getter_(unwrap_jso(this));
+  
   @DomName('MediaDeviceInfo.groupId')
   @DocsEditable()
   @Experimental() // untriaged
-  String get groupId => _blink.BlinkMediaDeviceInfo.instance.groupId_Getter_(this);
-
+  String get groupId => _blink.BlinkMediaDeviceInfo.instance.groupId_Getter_(unwrap_jso(this));
+  
   @DomName('MediaDeviceInfo.kind')
   @DocsEditable()
   @Experimental() // untriaged
-  String get kind => _blink.BlinkMediaDeviceInfo.instance.kind_Getter_(this);
-
+  String get kind => _blink.BlinkMediaDeviceInfo.instance.kind_Getter_(unwrap_jso(this));
+  
   @DomName('MediaDeviceInfo.label')
   @DocsEditable()
   @Experimental() // untriaged
-  String get label => _blink.BlinkMediaDeviceInfo.instance.label_Getter_(this);
-
+  String get label => _blink.BlinkMediaDeviceInfo.instance.label_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -21461,249 +21490,249 @@
   @DomName('HTMLMediaElement.audioTracks')
   @DocsEditable()
   @Experimental() // untriaged
-  AudioTrackList get audioTracks => _blink.BlinkHTMLMediaElement.instance.audioTracks_Getter_(this);
-
+  AudioTrackList get audioTracks => wrap_jso(_blink.BlinkHTMLMediaElement.instance.audioTracks_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLMediaElement.autoplay')
   @DocsEditable()
-  bool get autoplay => _blink.BlinkHTMLMediaElement.instance.autoplay_Getter_(this);
-
+  bool get autoplay => _blink.BlinkHTMLMediaElement.instance.autoplay_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.autoplay')
   @DocsEditable()
-  void set autoplay(bool value) => _blink.BlinkHTMLMediaElement.instance.autoplay_Setter_(this, value);
-
+  void set autoplay(bool value) => _blink.BlinkHTMLMediaElement.instance.autoplay_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMediaElement.buffered')
   @DocsEditable()
-  TimeRanges get buffered => _blink.BlinkHTMLMediaElement.instance.buffered_Getter_(this);
-
+  TimeRanges get buffered => wrap_jso(_blink.BlinkHTMLMediaElement.instance.buffered_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLMediaElement.controller')
   @DocsEditable()
-  MediaController get controller => _blink.BlinkHTMLMediaElement.instance.controller_Getter_(this);
-
+  MediaController get controller => wrap_jso(_blink.BlinkHTMLMediaElement.instance.controller_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLMediaElement.controller')
   @DocsEditable()
-  void set controller(MediaController value) => _blink.BlinkHTMLMediaElement.instance.controller_Setter_(this, value);
-
+  void set controller(MediaController value) => _blink.BlinkHTMLMediaElement.instance.controller_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('HTMLMediaElement.controls')
   @DocsEditable()
-  bool get controls => _blink.BlinkHTMLMediaElement.instance.controls_Getter_(this);
-
+  bool get controls => _blink.BlinkHTMLMediaElement.instance.controls_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.controls')
   @DocsEditable()
-  void set controls(bool value) => _blink.BlinkHTMLMediaElement.instance.controls_Setter_(this, value);
-
+  void set controls(bool value) => _blink.BlinkHTMLMediaElement.instance.controls_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMediaElement.crossOrigin')
   @DocsEditable()
   @Experimental() // untriaged
-  String get crossOrigin => _blink.BlinkHTMLMediaElement.instance.crossOrigin_Getter_(this);
-
+  String get crossOrigin => _blink.BlinkHTMLMediaElement.instance.crossOrigin_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.crossOrigin')
   @DocsEditable()
   @Experimental() // untriaged
-  void set crossOrigin(String value) => _blink.BlinkHTMLMediaElement.instance.crossOrigin_Setter_(this, value);
-
+  void set crossOrigin(String value) => _blink.BlinkHTMLMediaElement.instance.crossOrigin_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMediaElement.currentSrc')
   @DocsEditable()
-  String get currentSrc => _blink.BlinkHTMLMediaElement.instance.currentSrc_Getter_(this);
-
+  String get currentSrc => _blink.BlinkHTMLMediaElement.instance.currentSrc_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.currentTime')
   @DocsEditable()
-  num get currentTime => _blink.BlinkHTMLMediaElement.instance.currentTime_Getter_(this);
-
+  num get currentTime => _blink.BlinkHTMLMediaElement.instance.currentTime_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.currentTime')
   @DocsEditable()
-  void set currentTime(num value) => _blink.BlinkHTMLMediaElement.instance.currentTime_Setter_(this, value);
-
+  void set currentTime(num value) => _blink.BlinkHTMLMediaElement.instance.currentTime_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMediaElement.defaultMuted')
   @DocsEditable()
-  bool get defaultMuted => _blink.BlinkHTMLMediaElement.instance.defaultMuted_Getter_(this);
-
+  bool get defaultMuted => _blink.BlinkHTMLMediaElement.instance.defaultMuted_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.defaultMuted')
   @DocsEditable()
-  void set defaultMuted(bool value) => _blink.BlinkHTMLMediaElement.instance.defaultMuted_Setter_(this, value);
-
+  void set defaultMuted(bool value) => _blink.BlinkHTMLMediaElement.instance.defaultMuted_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMediaElement.defaultPlaybackRate')
   @DocsEditable()
-  num get defaultPlaybackRate => _blink.BlinkHTMLMediaElement.instance.defaultPlaybackRate_Getter_(this);
-
+  num get defaultPlaybackRate => _blink.BlinkHTMLMediaElement.instance.defaultPlaybackRate_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.defaultPlaybackRate')
   @DocsEditable()
-  void set defaultPlaybackRate(num value) => _blink.BlinkHTMLMediaElement.instance.defaultPlaybackRate_Setter_(this, value);
-
+  void set defaultPlaybackRate(num value) => _blink.BlinkHTMLMediaElement.instance.defaultPlaybackRate_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMediaElement.duration')
   @DocsEditable()
-  double get duration => _blink.BlinkHTMLMediaElement.instance.duration_Getter_(this);
-
+  double get duration => _blink.BlinkHTMLMediaElement.instance.duration_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.ended')
   @DocsEditable()
-  bool get ended => _blink.BlinkHTMLMediaElement.instance.ended_Getter_(this);
-
+  bool get ended => _blink.BlinkHTMLMediaElement.instance.ended_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.error')
   @DocsEditable()
-  MediaError get error => _blink.BlinkHTMLMediaElement.instance.error_Getter_(this);
-
+  MediaError get error => wrap_jso(_blink.BlinkHTMLMediaElement.instance.error_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLMediaElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  String get integrity => _blink.BlinkHTMLMediaElement.instance.integrity_Getter_(this);
-
+  String get integrity => _blink.BlinkHTMLMediaElement.instance.integrity_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLMediaElement.instance.integrity_Setter_(this, value);
-
+  void set integrity(String value) => _blink.BlinkHTMLMediaElement.instance.integrity_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMediaElement.loop')
   @DocsEditable()
-  bool get loop => _blink.BlinkHTMLMediaElement.instance.loop_Getter_(this);
-
+  bool get loop => _blink.BlinkHTMLMediaElement.instance.loop_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.loop')
   @DocsEditable()
-  void set loop(bool value) => _blink.BlinkHTMLMediaElement.instance.loop_Setter_(this, value);
-
+  void set loop(bool value) => _blink.BlinkHTMLMediaElement.instance.loop_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMediaElement.mediaGroup')
   @DocsEditable()
-  String get mediaGroup => _blink.BlinkHTMLMediaElement.instance.mediaGroup_Getter_(this);
-
+  String get mediaGroup => _blink.BlinkHTMLMediaElement.instance.mediaGroup_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.mediaGroup')
   @DocsEditable()
-  void set mediaGroup(String value) => _blink.BlinkHTMLMediaElement.instance.mediaGroup_Setter_(this, value);
-
+  void set mediaGroup(String value) => _blink.BlinkHTMLMediaElement.instance.mediaGroup_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMediaElement.mediaKeys')
   @DocsEditable()
   // https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html
   @Experimental()
-  MediaKeys get mediaKeys => _blink.BlinkHTMLMediaElement.instance.mediaKeys_Getter_(this);
-
+  MediaKeys get mediaKeys => wrap_jso(_blink.BlinkHTMLMediaElement.instance.mediaKeys_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLMediaElement.muted')
   @DocsEditable()
-  bool get muted => _blink.BlinkHTMLMediaElement.instance.muted_Getter_(this);
-
+  bool get muted => _blink.BlinkHTMLMediaElement.instance.muted_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.muted')
   @DocsEditable()
-  void set muted(bool value) => _blink.BlinkHTMLMediaElement.instance.muted_Setter_(this, value);
-
+  void set muted(bool value) => _blink.BlinkHTMLMediaElement.instance.muted_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMediaElement.networkState')
   @DocsEditable()
-  int get networkState => _blink.BlinkHTMLMediaElement.instance.networkState_Getter_(this);
-
+  int get networkState => _blink.BlinkHTMLMediaElement.instance.networkState_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.paused')
   @DocsEditable()
-  bool get paused => _blink.BlinkHTMLMediaElement.instance.paused_Getter_(this);
-
+  bool get paused => _blink.BlinkHTMLMediaElement.instance.paused_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.playbackRate')
   @DocsEditable()
-  num get playbackRate => _blink.BlinkHTMLMediaElement.instance.playbackRate_Getter_(this);
-
+  num get playbackRate => _blink.BlinkHTMLMediaElement.instance.playbackRate_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.playbackRate')
   @DocsEditable()
-  void set playbackRate(num value) => _blink.BlinkHTMLMediaElement.instance.playbackRate_Setter_(this, value);
-
+  void set playbackRate(num value) => _blink.BlinkHTMLMediaElement.instance.playbackRate_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMediaElement.played')
   @DocsEditable()
-  TimeRanges get played => _blink.BlinkHTMLMediaElement.instance.played_Getter_(this);
-
+  TimeRanges get played => wrap_jso(_blink.BlinkHTMLMediaElement.instance.played_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLMediaElement.preload')
   @DocsEditable()
-  String get preload => _blink.BlinkHTMLMediaElement.instance.preload_Getter_(this);
-
+  String get preload => _blink.BlinkHTMLMediaElement.instance.preload_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.preload')
   @DocsEditable()
-  void set preload(String value) => _blink.BlinkHTMLMediaElement.instance.preload_Setter_(this, value);
-
+  void set preload(String value) => _blink.BlinkHTMLMediaElement.instance.preload_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMediaElement.readyState')
   @DocsEditable()
-  int get readyState => _blink.BlinkHTMLMediaElement.instance.readyState_Getter_(this);
-
+  int get readyState => _blink.BlinkHTMLMediaElement.instance.readyState_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.seekable')
   @DocsEditable()
-  TimeRanges get seekable => _blink.BlinkHTMLMediaElement.instance.seekable_Getter_(this);
-
+  TimeRanges get seekable => wrap_jso(_blink.BlinkHTMLMediaElement.instance.seekable_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLMediaElement.seeking')
   @DocsEditable()
-  bool get seeking => _blink.BlinkHTMLMediaElement.instance.seeking_Getter_(this);
-
+  bool get seeking => _blink.BlinkHTMLMediaElement.instance.seeking_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.src')
   @DocsEditable()
-  String get src => _blink.BlinkHTMLMediaElement.instance.src_Getter_(this);
-
+  String get src => _blink.BlinkHTMLMediaElement.instance.src_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLMediaElement.instance.src_Setter_(this, value);
-
+  void set src(String value) => _blink.BlinkHTMLMediaElement.instance.src_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMediaElement.textTracks')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-media-texttracks
   @Experimental()
-  TextTrackList get textTracks => _blink.BlinkHTMLMediaElement.instance.textTracks_Getter_(this);
-
+  TextTrackList get textTracks => wrap_jso(_blink.BlinkHTMLMediaElement.instance.textTracks_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLMediaElement.videoTracks')
   @DocsEditable()
   @Experimental() // untriaged
-  VideoTrackList get videoTracks => _blink.BlinkHTMLMediaElement.instance.videoTracks_Getter_(this);
-
+  VideoTrackList get videoTracks => wrap_jso(_blink.BlinkHTMLMediaElement.instance.videoTracks_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLMediaElement.volume')
   @DocsEditable()
-  num get volume => _blink.BlinkHTMLMediaElement.instance.volume_Getter_(this);
-
+  num get volume => _blink.BlinkHTMLMediaElement.instance.volume_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.volume')
   @DocsEditable()
-  void set volume(num value) => _blink.BlinkHTMLMediaElement.instance.volume_Setter_(this, value);
-
+  void set volume(num value) => _blink.BlinkHTMLMediaElement.instance.volume_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMediaElement.webkitAudioDecodedByteCount')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   @Experimental() // nonstandard
-  int get audioDecodedByteCount => _blink.BlinkHTMLMediaElement.instance.webkitAudioDecodedByteCount_Getter_(this);
-
+  int get audioDecodedByteCount => _blink.BlinkHTMLMediaElement.instance.webkitAudioDecodedByteCount_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.webkitVideoDecodedByteCount')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   @Experimental() // nonstandard
-  int get videoDecodedByteCount => _blink.BlinkHTMLMediaElement.instance.webkitVideoDecodedByteCount_Getter_(this);
-
+  int get videoDecodedByteCount => _blink.BlinkHTMLMediaElement.instance.webkitVideoDecodedByteCount_Getter_(unwrap_jso(this));
+  
   TextTrack addTextTrack(String kind, [String label, String language]) {
     if (language != null) {
-      return _blink.BlinkHTMLMediaElement.instance.addTextTrack_Callback_3_(this, kind, label, language);
+      return wrap_jso(_blink.BlinkHTMLMediaElement.instance.addTextTrack_Callback_3_(unwrap_jso(this), kind, label, language));
     }
     if (label != null) {
-      return _blink.BlinkHTMLMediaElement.instance.addTextTrack_Callback_2_(this, kind, label);
+      return wrap_jso(_blink.BlinkHTMLMediaElement.instance.addTextTrack_Callback_2_(unwrap_jso(this), kind, label));
     }
-    return _blink.BlinkHTMLMediaElement.instance.addTextTrack_Callback_1_(this, kind);
+    return wrap_jso(_blink.BlinkHTMLMediaElement.instance.addTextTrack_Callback_1_(unwrap_jso(this), kind));
   }
 
   String canPlayType(String type, [String keySystem]) {
     if (keySystem != null) {
-      return _blink.BlinkHTMLMediaElement.instance.canPlayType_Callback_2_(this, type, keySystem);
+      return _blink.BlinkHTMLMediaElement.instance.canPlayType_Callback_2_(unwrap_jso(this), type, keySystem);
     }
-    return _blink.BlinkHTMLMediaElement.instance.canPlayType_Callback_1_(this, type);
+    return _blink.BlinkHTMLMediaElement.instance.canPlayType_Callback_1_(unwrap_jso(this), type);
   }
 
   @DomName('HTMLMediaElement.load')
   @DocsEditable()
-  void load() => _blink.BlinkHTMLMediaElement.instance.load_Callback_0_(this);
-
+  void load() => _blink.BlinkHTMLMediaElement.instance.load_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.pause')
   @DocsEditable()
-  void pause() => _blink.BlinkHTMLMediaElement.instance.pause_Callback_0_(this);
-
+  void pause() => _blink.BlinkHTMLMediaElement.instance.pause_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.play')
   @DocsEditable()
-  void play() => _blink.BlinkHTMLMediaElement.instance.play_Callback_0_(this);
-
+  void play() => _blink.BlinkHTMLMediaElement.instance.play_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLMediaElement.setMediaKeys')
   @DocsEditable()
   @Experimental() // untriaged
-  Future setMediaKeys(MediaKeys mediaKeys) => _blink.BlinkHTMLMediaElement.instance.setMediaKeys_Callback_1_(this, mediaKeys);
-
+  Future setMediaKeys(MediaKeys mediaKeys) => _blink.BlinkHTMLMediaElement.instance.setMediaKeys_Callback_1_(unwrap_jso(this), unwrap_jso(mediaKeys));
+  
   void addKey(String keySystem, Uint8List key, [Uint8List initData, String sessionId]) {
     if (initData != null) {
-      _blink.BlinkHTMLMediaElement.instance.webkitAddKey_Callback_4_(this, keySystem, key, initData, sessionId);
+      _blink.BlinkHTMLMediaElement.instance.webkitAddKey_Callback_4_(unwrap_jso(this), keySystem, key, initData, sessionId);
       return;
     }
-    _blink.BlinkHTMLMediaElement.instance.webkitAddKey_Callback_2_(this, keySystem, key);
+    _blink.BlinkHTMLMediaElement.instance.webkitAddKey_Callback_2_(unwrap_jso(this), keySystem, key);
     return;
   }
 
@@ -21713,14 +21742,14 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html#extensions
-  void cancelKeyRequest(String keySystem, String sessionId) => _blink.BlinkHTMLMediaElement.instance.webkitCancelKeyRequest_Callback_2_(this, keySystem, sessionId);
-
+  void cancelKeyRequest(String keySystem, String sessionId) => _blink.BlinkHTMLMediaElement.instance.webkitCancelKeyRequest_Callback_2_(unwrap_jso(this), keySystem, sessionId);
+  
   void generateKeyRequest(String keySystem, [Uint8List initData]) {
     if (initData != null) {
-      _blink.BlinkHTMLMediaElement.instance.webkitGenerateKeyRequest_Callback_2_(this, keySystem, initData);
+      _blink.BlinkHTMLMediaElement.instance.webkitGenerateKeyRequest_Callback_2_(unwrap_jso(this), keySystem, initData);
       return;
     }
-    _blink.BlinkHTMLMediaElement.instance.webkitGenerateKeyRequest_Callback_1_(this, keySystem);
+    _blink.BlinkHTMLMediaElement.instance.webkitGenerateKeyRequest_Callback_1_(unwrap_jso(this), keySystem);
     return;
   }
 
@@ -21791,8 +21820,8 @@
 
   @DomName('MediaError.code')
   @DocsEditable()
-  int get code => _blink.BlinkMediaError.instance.code_Getter_(this);
-
+  int get code => _blink.BlinkMediaError.instance.code_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -21835,13 +21864,13 @@
 
   @DomName('MediaKeyError.code')
   @DocsEditable()
-  int get code => _blink.BlinkMediaKeyError.instance.code_Getter_(this);
-
+  int get code => _blink.BlinkMediaKeyError.instance.code_Getter_(unwrap_jso(this));
+  
   @DomName('MediaKeyError.systemCode')
   @DocsEditable()
   @Experimental() // non-standard
-  int get systemCode => _blink.BlinkMediaKeyError.instance.systemCode_Getter_(this);
-
+  int get systemCode => _blink.BlinkMediaKeyError.instance.systemCode_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -21860,32 +21889,32 @@
 
   @DomName('MediaKeyEvent.defaultURL')
   @DocsEditable()
-  String get defaultUrl => _blink.BlinkMediaKeyEvent.instance.defaultURL_Getter_(this);
-
+  String get defaultUrl => _blink.BlinkMediaKeyEvent.instance.defaultURL_Getter_(unwrap_jso(this));
+  
   @DomName('MediaKeyEvent.errorCode')
   @DocsEditable()
-  MediaKeyError get errorCode => _blink.BlinkMediaKeyEvent.instance.errorCode_Getter_(this);
-
+  MediaKeyError get errorCode => wrap_jso(_blink.BlinkMediaKeyEvent.instance.errorCode_Getter_(unwrap_jso(this)));
+  
   @DomName('MediaKeyEvent.initData')
   @DocsEditable()
-  Uint8List get initData => _blink.BlinkMediaKeyEvent.instance.initData_Getter_(this);
-
+  Uint8List get initData => wrap_jso(_blink.BlinkMediaKeyEvent.instance.initData_Getter_(unwrap_jso(this)));
+  
   @DomName('MediaKeyEvent.keySystem')
   @DocsEditable()
-  String get keySystem => _blink.BlinkMediaKeyEvent.instance.keySystem_Getter_(this);
-
+  String get keySystem => _blink.BlinkMediaKeyEvent.instance.keySystem_Getter_(unwrap_jso(this));
+  
   @DomName('MediaKeyEvent.message')
   @DocsEditable()
-  Uint8List get message => _blink.BlinkMediaKeyEvent.instance.message_Getter_(this);
-
+  Uint8List get message => wrap_jso(_blink.BlinkMediaKeyEvent.instance.message_Getter_(unwrap_jso(this)));
+  
   @DomName('MediaKeyEvent.sessionId')
   @DocsEditable()
-  String get sessionId => _blink.BlinkMediaKeyEvent.instance.sessionId_Getter_(this);
-
+  String get sessionId => _blink.BlinkMediaKeyEvent.instance.sessionId_Getter_(unwrap_jso(this));
+  
   @DomName('MediaKeyEvent.systemCode')
   @DocsEditable()
-  int get systemCode => _blink.BlinkMediaKeyEvent.instance.systemCode_Getter_(this);
-
+  int get systemCode => _blink.BlinkMediaKeyEvent.instance.systemCode_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -21904,12 +21933,12 @@
 
   @DomName('MediaKeyMessageEvent.destinationURL')
   @DocsEditable()
-  String get destinationUrl => _blink.BlinkMediaKeyMessageEvent.instance.destinationURL_Getter_(this);
-
+  String get destinationUrl => _blink.BlinkMediaKeyMessageEvent.instance.destinationURL_Getter_(unwrap_jso(this));
+  
   @DomName('MediaKeyMessageEvent.message')
   @DocsEditable()
-  ByteBuffer get message => _blink.BlinkMediaKeyMessageEvent.instance.message_Getter_(this);
-
+  ByteBuffer get message => wrap_jso(_blink.BlinkMediaKeyMessageEvent.instance.message_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -21929,12 +21958,12 @@
   @DomName('MediaKeyNeededEvent.contentType')
   @DocsEditable()
   @Experimental() // untriaged
-  String get contentType => _blink.BlinkMediaKeyNeededEvent.instance.contentType_Getter_(this);
-
+  String get contentType => _blink.BlinkMediaKeyNeededEvent.instance.contentType_Getter_(unwrap_jso(this));
+  
   @DomName('MediaKeyNeededEvent.initData')
   @DocsEditable()
-  Uint8List get initData => _blink.BlinkMediaKeyNeededEvent.instance.initData_Getter_(this);
-
+  Uint8List get initData => wrap_jso(_blink.BlinkMediaKeyNeededEvent.instance.initData_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -21954,26 +21983,26 @@
   @DomName('MediaKeySession.closed')
   @DocsEditable()
   @Experimental() // untriaged
-  Future get closed => _blink.BlinkMediaKeySession.instance.closed_Getter_(this);
-
+  Future get closed => _blink.BlinkMediaKeySession.instance.closed_Getter_(unwrap_jso(this));
+  
   @DomName('MediaKeySession.error')
   @DocsEditable()
-  MediaKeyError get error => _blink.BlinkMediaKeySession.instance.error_Getter_(this);
-
+  MediaKeyError get error => wrap_jso(_blink.BlinkMediaKeySession.instance.error_Getter_(unwrap_jso(this)));
+  
   @DomName('MediaKeySession.keySystem')
   @DocsEditable()
-  String get keySystem => _blink.BlinkMediaKeySession.instance.keySystem_Getter_(this);
-
+  String get keySystem => _blink.BlinkMediaKeySession.instance.keySystem_Getter_(unwrap_jso(this));
+  
   @DomName('MediaKeySession.sessionId')
   @DocsEditable()
-  String get sessionId => _blink.BlinkMediaKeySession.instance.sessionId_Getter_(this);
-
+  String get sessionId => _blink.BlinkMediaKeySession.instance.sessionId_Getter_(unwrap_jso(this));
+  
   Future generateRequest(String initDataType, initData) {
     if ((initData is TypedData) && (initDataType is String)) {
-      return _blink.BlinkMediaKeySession.instance.generateRequest_Callback_2_(this, initDataType, initData);
+      return _blink.BlinkMediaKeySession.instance.generateRequest_Callback_2_(unwrap_jso(this), initDataType, unwrap_jso(initData));
     }
     if ((initData is ByteBuffer) && (initDataType is String)) {
-      return _blink.BlinkMediaKeySession.instance.generateRequest_Callback_2_(this, initDataType, initData);
+      return _blink.BlinkMediaKeySession.instance.generateRequest_Callback_2_(unwrap_jso(this), initDataType, unwrap_jso(initData));
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -21981,14 +22010,14 @@
   @DomName('MediaKeySession.release')
   @DocsEditable()
   @Experimental() // untriaged
-  Future release() => _blink.BlinkMediaKeySession.instance.release_Callback_0_(this);
-
+  Future release() => _blink.BlinkMediaKeySession.instance.release_Callback_0_(unwrap_jso(this));
+  
   Future _update(response) {
     if ((response is TypedData)) {
-      return _blink.BlinkMediaKeySession.instance.update_Callback_1_(this, response);
+      return _blink.BlinkMediaKeySession.instance.update_Callback_1_(unwrap_jso(this), unwrap_jso(response));
     }
     if ((response is ByteBuffer)) {
-      return _blink.BlinkMediaKeySession.instance.update_Callback_1_(this, response);
+      return _blink.BlinkMediaKeySession.instance.update_Callback_1_(unwrap_jso(this), unwrap_jso(response));
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -22011,25 +22040,25 @@
 
   @DomName('MediaKeys.keySystem')
   @DocsEditable()
-  String get keySystem => _blink.BlinkMediaKeys.instance.keySystem_Getter_(this);
-
+  String get keySystem => _blink.BlinkMediaKeys.instance.keySystem_Getter_(unwrap_jso(this));
+  
   @DomName('MediaKeys.create')
   @DocsEditable()
   @Experimental() // untriaged
   static Future create(String keySystem) => _blink.BlinkMediaKeys.instance.create_Callback_1_(keySystem);
-
+  
   MediaKeySession _createSession([String sessionType]) {
     if (sessionType != null) {
-      return _blink.BlinkMediaKeys.instance.createSession_Callback_1_(this, sessionType);
+      return wrap_jso(_blink.BlinkMediaKeys.instance.createSession_Callback_1_(unwrap_jso(this), sessionType));
     }
-    return _blink.BlinkMediaKeys.instance.createSession_Callback_0_(this);
+    return wrap_jso(_blink.BlinkMediaKeys.instance.createSession_Callback_0_(unwrap_jso(this)));
   }
 
   @DomName('MediaKeys.isTypeSupported')
   @DocsEditable()
   @Experimental() // untriaged
   static bool isTypeSupported(String keySystem, String contentType) => _blink.BlinkMediaKeys.instance.isTypeSupported_Callback_2_(keySystem, contentType);
-
+  
 }
 // 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
@@ -22047,28 +22076,28 @@
 
   @DomName('MediaList.length')
   @DocsEditable()
-  int get length => _blink.BlinkMediaList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkMediaList.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('MediaList.mediaText')
   @DocsEditable()
-  String get mediaText => _blink.BlinkMediaList.instance.mediaText_Getter_(this);
-
+  String get mediaText => _blink.BlinkMediaList.instance.mediaText_Getter_(unwrap_jso(this));
+  
   @DomName('MediaList.mediaText')
   @DocsEditable()
-  void set mediaText(String value) => _blink.BlinkMediaList.instance.mediaText_Setter_(this, value);
-
+  void set mediaText(String value) => _blink.BlinkMediaList.instance.mediaText_Setter_(unwrap_jso(this), value);
+  
   @DomName('MediaList.appendMedium')
   @DocsEditable()
-  void appendMedium(String newMedium) => _blink.BlinkMediaList.instance.appendMedium_Callback_1_(this, newMedium);
-
+  void appendMedium(String newMedium) => _blink.BlinkMediaList.instance.appendMedium_Callback_1_(unwrap_jso(this), newMedium);
+  
   @DomName('MediaList.deleteMedium')
   @DocsEditable()
-  void deleteMedium(String oldMedium) => _blink.BlinkMediaList.instance.deleteMedium_Callback_1_(this, oldMedium);
-
+  void deleteMedium(String oldMedium) => _blink.BlinkMediaList.instance.deleteMedium_Callback_1_(unwrap_jso(this), oldMedium);
+  
   @DomName('MediaList.item')
   @DocsEditable()
-  String item(int index) => _blink.BlinkMediaList.instance.item_Callback_1_(this, index);
-
+  String item(int index) => _blink.BlinkMediaList.instance.item_Callback_1_(unwrap_jso(this), index);
+  
 }
 // 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
@@ -22091,20 +22120,20 @@
 
   @DomName('MediaQueryList.matches')
   @DocsEditable()
-  bool get matches => _blink.BlinkMediaQueryList.instance.matches_Getter_(this);
-
+  bool get matches => _blink.BlinkMediaQueryList.instance.matches_Getter_(unwrap_jso(this));
+  
   @DomName('MediaQueryList.media')
   @DocsEditable()
-  String get media => _blink.BlinkMediaQueryList.instance.media_Getter_(this);
-
+  String get media => _blink.BlinkMediaQueryList.instance.media_Getter_(unwrap_jso(this));
+  
   @DomName('MediaQueryList.addListener')
   @DocsEditable()
-  void addListener(EventListener listener) => _blink.BlinkMediaQueryList.instance.addListener_Callback_1_(this, listener);
-
+  void addListener(EventListener listener) => _blink.BlinkMediaQueryList.instance.addListener_Callback_1_(unwrap_jso(this), unwrap_jso(listener));
+  
   @DomName('MediaQueryList.removeListener')
   @DocsEditable()
-  void removeListener(EventListener listener) => _blink.BlinkMediaQueryList.instance.removeListener_Callback_1_(this, listener);
-
+  void removeListener(EventListener listener) => _blink.BlinkMediaQueryList.instance.removeListener_Callback_1_(unwrap_jso(this), unwrap_jso(listener));
+  
   @DomName('MediaQueryList.onchange')
   @DocsEditable()
   @Experimental() // untriaged
@@ -22128,13 +22157,13 @@
   @DomName('MediaQueryListEvent.matches')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get matches => _blink.BlinkMediaQueryListEvent.instance.matches_Getter_(this);
-
+  bool get matches => _blink.BlinkMediaQueryListEvent.instance.matches_Getter_(unwrap_jso(this));
+  
   @DomName('MediaQueryListEvent.media')
   @DocsEditable()
   @Experimental() // untriaged
-  String get media => _blink.BlinkMediaQueryListEvent.instance.media_Getter_(this);
-
+  String get media => _blink.BlinkMediaQueryListEvent.instance.media_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -22164,45 +22193,45 @@
 
   @DomName('MediaSource.activeSourceBuffers')
   @DocsEditable()
-  SourceBufferList get activeSourceBuffers => _blink.BlinkMediaSource.instance.activeSourceBuffers_Getter_(this);
-
+  SourceBufferList get activeSourceBuffers => wrap_jso(_blink.BlinkMediaSource.instance.activeSourceBuffers_Getter_(unwrap_jso(this)));
+  
   @DomName('MediaSource.duration')
   @DocsEditable()
-  num get duration => _blink.BlinkMediaSource.instance.duration_Getter_(this);
-
+  num get duration => _blink.BlinkMediaSource.instance.duration_Getter_(unwrap_jso(this));
+  
   @DomName('MediaSource.duration')
   @DocsEditable()
-  void set duration(num value) => _blink.BlinkMediaSource.instance.duration_Setter_(this, value);
-
+  void set duration(num value) => _blink.BlinkMediaSource.instance.duration_Setter_(unwrap_jso(this), value);
+  
   @DomName('MediaSource.readyState')
   @DocsEditable()
-  String get readyState => _blink.BlinkMediaSource.instance.readyState_Getter_(this);
-
+  String get readyState => _blink.BlinkMediaSource.instance.readyState_Getter_(unwrap_jso(this));
+  
   @DomName('MediaSource.sourceBuffers')
   @DocsEditable()
-  SourceBufferList get sourceBuffers => _blink.BlinkMediaSource.instance.sourceBuffers_Getter_(this);
-
+  SourceBufferList get sourceBuffers => wrap_jso(_blink.BlinkMediaSource.instance.sourceBuffers_Getter_(unwrap_jso(this)));
+  
   @DomName('MediaSource.addSourceBuffer')
   @DocsEditable()
-  SourceBuffer addSourceBuffer(String type) => _blink.BlinkMediaSource.instance.addSourceBuffer_Callback_1_(this, type);
-
+  SourceBuffer addSourceBuffer(String type) => wrap_jso(_blink.BlinkMediaSource.instance.addSourceBuffer_Callback_1_(unwrap_jso(this), type));
+  
   void endOfStream([String error]) {
     if (error != null) {
-      _blink.BlinkMediaSource.instance.endOfStream_Callback_1_(this, error);
+      _blink.BlinkMediaSource.instance.endOfStream_Callback_1_(unwrap_jso(this), error);
       return;
     }
-    _blink.BlinkMediaSource.instance.endOfStream_Callback_0_(this);
+    _blink.BlinkMediaSource.instance.endOfStream_Callback_0_(unwrap_jso(this));
     return;
   }
 
   @DomName('MediaSource.isTypeSupported')
   @DocsEditable()
   static bool isTypeSupported(String type) => _blink.BlinkMediaSource.instance.isTypeSupported_Callback_1_(type);
-
+  
   @DomName('MediaSource.removeSourceBuffer')
   @DocsEditable()
-  void removeSourceBuffer(SourceBuffer buffer) => _blink.BlinkMediaSource.instance.removeSourceBuffer_Callback_1_(this, buffer);
-
+  void removeSourceBuffer(SourceBuffer buffer) => _blink.BlinkMediaSource.instance.removeSourceBuffer_Callback_1_(unwrap_jso(this), unwrap_jso(buffer));
+  
 }
 // 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
@@ -22264,51 +22293,51 @@
 
   @DomName('MediaStream.ended')
   @DocsEditable()
-  bool get ended => _blink.BlinkMediaStream.instance.ended_Getter_(this);
-
+  bool get ended => _blink.BlinkMediaStream.instance.ended_Getter_(unwrap_jso(this));
+  
   @DomName('MediaStream.id')
   @DocsEditable()
-  String get id => _blink.BlinkMediaStream.instance.id_Getter_(this);
-
+  String get id => _blink.BlinkMediaStream.instance.id_Getter_(unwrap_jso(this));
+  
   @DomName('MediaStream.label')
   @DocsEditable()
   @Experimental() // non-standard
-  String get label => _blink.BlinkMediaStream.instance.label_Getter_(this);
-
+  String get label => _blink.BlinkMediaStream.instance.label_Getter_(unwrap_jso(this));
+  
   @DomName('MediaStream.addTrack')
   @DocsEditable()
-  void addTrack(MediaStreamTrack track) => _blink.BlinkMediaStream.instance.addTrack_Callback_1_(this, track);
-
+  void addTrack(MediaStreamTrack track) => _blink.BlinkMediaStream.instance.addTrack_Callback_1_(unwrap_jso(this), unwrap_jso(track));
+  
   @DomName('MediaStream.clone')
   @DocsEditable()
   @Experimental() // untriaged
-  MediaStream clone() => _blink.BlinkMediaStream.instance.clone_Callback_0_(this);
-
+  MediaStream clone() => wrap_jso(_blink.BlinkMediaStream.instance.clone_Callback_0_(unwrap_jso(this)));
+  
   @DomName('MediaStream.getAudioTracks')
   @DocsEditable()
-  List<MediaStreamTrack> getAudioTracks() => _blink.BlinkMediaStream.instance.getAudioTracks_Callback_0_(this);
-
+  List<MediaStreamTrack> getAudioTracks() => _blink.BlinkMediaStream.instance.getAudioTracks_Callback_0_(unwrap_jso(this));
+  
   @DomName('MediaStream.getTrackById')
   @DocsEditable()
-  MediaStreamTrack getTrackById(String trackId) => _blink.BlinkMediaStream.instance.getTrackById_Callback_1_(this, trackId);
-
+  MediaStreamTrack getTrackById(String trackId) => wrap_jso(_blink.BlinkMediaStream.instance.getTrackById_Callback_1_(unwrap_jso(this), trackId));
+  
   @DomName('MediaStream.getTracks')
   @DocsEditable()
   @Experimental() // untriaged
-  List<MediaStreamTrack> getTracks() => _blink.BlinkMediaStream.instance.getTracks_Callback_0_(this);
-
+  List<MediaStreamTrack> getTracks() => _blink.BlinkMediaStream.instance.getTracks_Callback_0_(unwrap_jso(this));
+  
   @DomName('MediaStream.getVideoTracks')
   @DocsEditable()
-  List<MediaStreamTrack> getVideoTracks() => _blink.BlinkMediaStream.instance.getVideoTracks_Callback_0_(this);
-
+  List<MediaStreamTrack> getVideoTracks() => _blink.BlinkMediaStream.instance.getVideoTracks_Callback_0_(unwrap_jso(this));
+  
   @DomName('MediaStream.removeTrack')
   @DocsEditable()
-  void removeTrack(MediaStreamTrack track) => _blink.BlinkMediaStream.instance.removeTrack_Callback_1_(this, track);
-
+  void removeTrack(MediaStreamTrack track) => _blink.BlinkMediaStream.instance.removeTrack_Callback_1_(unwrap_jso(this), unwrap_jso(track));
+  
   @DomName('MediaStream.stop')
   @DocsEditable()
-  void stop() => _blink.BlinkMediaStream.instance.stop_Callback_0_(this);
-
+  void stop() => _blink.BlinkMediaStream.instance.stop_Callback_0_(unwrap_jso(this));
+  
   /// Stream of `addtrack` events handled by this [MediaStream].
   @DomName('MediaStream.onaddtrack')
   @DocsEditable()
@@ -22355,8 +22384,8 @@
 
   @DomName('MediaStreamEvent.stream')
   @DocsEditable()
-  MediaStream get stream => _blink.BlinkMediaStreamEvent.instance.stream_Getter_(this);
-
+  MediaStream get stream => wrap_jso(_blink.BlinkMediaStreamEvent.instance.stream_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -22406,43 +22435,43 @@
 
   @DomName('MediaStreamTrack.enabled')
   @DocsEditable()
-  bool get enabled => _blink.BlinkMediaStreamTrack.instance.enabled_Getter_(this);
-
+  bool get enabled => _blink.BlinkMediaStreamTrack.instance.enabled_Getter_(unwrap_jso(this));
+  
   @DomName('MediaStreamTrack.enabled')
   @DocsEditable()
-  void set enabled(bool value) => _blink.BlinkMediaStreamTrack.instance.enabled_Setter_(this, value);
-
+  void set enabled(bool value) => _blink.BlinkMediaStreamTrack.instance.enabled_Setter_(unwrap_jso(this), value);
+  
   @DomName('MediaStreamTrack.id')
   @DocsEditable()
-  String get id => _blink.BlinkMediaStreamTrack.instance.id_Getter_(this);
-
+  String get id => _blink.BlinkMediaStreamTrack.instance.id_Getter_(unwrap_jso(this));
+  
   @DomName('MediaStreamTrack.kind')
   @DocsEditable()
-  String get kind => _blink.BlinkMediaStreamTrack.instance.kind_Getter_(this);
-
+  String get kind => _blink.BlinkMediaStreamTrack.instance.kind_Getter_(unwrap_jso(this));
+  
   @DomName('MediaStreamTrack.label')
   @DocsEditable()
-  String get label => _blink.BlinkMediaStreamTrack.instance.label_Getter_(this);
-
+  String get label => _blink.BlinkMediaStreamTrack.instance.label_Getter_(unwrap_jso(this));
+  
   @DomName('MediaStreamTrack.muted')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get muted => _blink.BlinkMediaStreamTrack.instance.muted_Getter_(this);
-
+  bool get muted => _blink.BlinkMediaStreamTrack.instance.muted_Getter_(unwrap_jso(this));
+  
   @DomName('MediaStreamTrack.readyState')
   @DocsEditable()
-  String get readyState => _blink.BlinkMediaStreamTrack.instance.readyState_Getter_(this);
-
+  String get readyState => _blink.BlinkMediaStreamTrack.instance.readyState_Getter_(unwrap_jso(this));
+  
   @DomName('MediaStreamTrack.clone')
   @DocsEditable()
   @Experimental() // untriaged
-  MediaStreamTrack clone() => _blink.BlinkMediaStreamTrack.instance.clone_Callback_0_(this);
-
+  MediaStreamTrack clone() => wrap_jso(_blink.BlinkMediaStreamTrack.instance.clone_Callback_0_(unwrap_jso(this)));
+  
   @DomName('MediaStreamTrack.getSources')
   @DocsEditable()
   @Experimental() // untriaged
-  static void _getSources(MediaStreamTrackSourcesCallback callback) => _blink.BlinkMediaStreamTrack.instance.getSources_Callback_1_(callback);
-
+  static void _getSources(MediaStreamTrackSourcesCallback callback) => _blink.BlinkMediaStreamTrack.instance.getSources_Callback_1_(unwrap_jso(callback));
+  
   static Future<List<SourceInfo>> getSources() {
     var completer = new Completer<List<SourceInfo>>();
     _getSources(
@@ -22453,8 +22482,8 @@
   @DomName('MediaStreamTrack.stop')
   @DocsEditable()
   @Experimental() // untriaged
-  void stop() => _blink.BlinkMediaStreamTrack.instance.stop_Callback_0_(this);
-
+  void stop() => _blink.BlinkMediaStreamTrack.instance.stop_Callback_0_(unwrap_jso(this));
+  
   /// Stream of `ended` events handled by this [MediaStreamTrack].
   @DomName('MediaStreamTrack.onended')
   @DocsEditable()
@@ -22492,8 +22521,8 @@
 
   @DomName('MediaStreamTrackEvent.track')
   @DocsEditable()
-  MediaStreamTrack get track => _blink.BlinkMediaStreamTrackEvent.instance.track_Getter_(this);
-
+  MediaStreamTrack get track => wrap_jso(_blink.BlinkMediaStreamTrackEvent.instance.track_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -22521,16 +22550,16 @@
 
   @DomName('MemoryInfo.jsHeapSizeLimit')
   @DocsEditable()
-  int get jsHeapSizeLimit => _blink.BlinkMemoryInfo.instance.jsHeapSizeLimit_Getter_(this);
-
+  int get jsHeapSizeLimit => _blink.BlinkMemoryInfo.instance.jsHeapSizeLimit_Getter_(unwrap_jso(this));
+  
   @DomName('MemoryInfo.totalJSHeapSize')
   @DocsEditable()
-  int get totalJSHeapSize => _blink.BlinkMemoryInfo.instance.totalJSHeapSize_Getter_(this);
-
+  int get totalJSHeapSize => _blink.BlinkMemoryInfo.instance.totalJSHeapSize_Getter_(unwrap_jso(this));
+  
   @DomName('MemoryInfo.usedJSHeapSize')
   @DocsEditable()
-  int get usedJSHeapSize => _blink.BlinkMemoryInfo.instance.usedJSHeapSize_Getter_(this);
-
+  int get usedJSHeapSize => _blink.BlinkMemoryInfo.instance.usedJSHeapSize_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -22568,23 +22597,23 @@
   @DomName('HTMLMenuElement.label')
   @DocsEditable()
   @Experimental() // untriaged
-  String get label => _blink.BlinkHTMLMenuElement.instance.label_Getter_(this);
-
+  String get label => _blink.BlinkHTMLMenuElement.instance.label_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMenuElement.label')
   @DocsEditable()
   @Experimental() // untriaged
-  void set label(String value) => _blink.BlinkHTMLMenuElement.instance.label_Setter_(this, value);
-
+  void set label(String value) => _blink.BlinkHTMLMenuElement.instance.label_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMenuElement.type')
   @DocsEditable()
   @Experimental() // untriaged
-  String get type => _blink.BlinkHTMLMenuElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkHTMLMenuElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMenuElement.type')
   @DocsEditable()
   @Experimental() // untriaged
-  void set type(String value) => _blink.BlinkHTMLMenuElement.instance.type_Setter_(this, value);
-
+  void set type(String value) => _blink.BlinkHTMLMenuElement.instance.type_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -22609,53 +22638,53 @@
   @DomName('HTMLMenuItemElement.checked')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get checked => _blink.BlinkHTMLMenuItemElement.instance.checked_Getter_(this);
-
+  bool get checked => _blink.BlinkHTMLMenuItemElement.instance.checked_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMenuItemElement.checked')
   @DocsEditable()
   @Experimental() // untriaged
-  void set checked(bool value) => _blink.BlinkHTMLMenuItemElement.instance.checked_Setter_(this, value);
-
+  void set checked(bool value) => _blink.BlinkHTMLMenuItemElement.instance.checked_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMenuItemElement.default')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get defaultValue => _blink.BlinkHTMLMenuItemElement.instance.default_Getter_(this);
-
+  bool get defaultValue => _blink.BlinkHTMLMenuItemElement.instance.default_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMenuItemElement.default')
   @DocsEditable()
   @Experimental() // untriaged
-  void set defaultValue(bool value) => _blink.BlinkHTMLMenuItemElement.instance.default_Setter_(this, value);
-
+  void set defaultValue(bool value) => _blink.BlinkHTMLMenuItemElement.instance.default_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMenuItemElement.disabled')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get disabled => _blink.BlinkHTMLMenuItemElement.instance.disabled_Getter_(this);
-
+  bool get disabled => _blink.BlinkHTMLMenuItemElement.instance.disabled_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMenuItemElement.disabled')
   @DocsEditable()
   @Experimental() // untriaged
-  void set disabled(bool value) => _blink.BlinkHTMLMenuItemElement.instance.disabled_Setter_(this, value);
-
+  void set disabled(bool value) => _blink.BlinkHTMLMenuItemElement.instance.disabled_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMenuItemElement.label')
   @DocsEditable()
   @Experimental() // untriaged
-  String get label => _blink.BlinkHTMLMenuItemElement.instance.label_Getter_(this);
-
+  String get label => _blink.BlinkHTMLMenuItemElement.instance.label_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMenuItemElement.label')
   @DocsEditable()
   @Experimental() // untriaged
-  void set label(String value) => _blink.BlinkHTMLMenuItemElement.instance.label_Setter_(this, value);
-
+  void set label(String value) => _blink.BlinkHTMLMenuItemElement.instance.label_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMenuItemElement.type')
   @DocsEditable()
   @Experimental() // untriaged
-  String get type => _blink.BlinkHTMLMenuItemElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkHTMLMenuItemElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMenuItemElement.type')
   @DocsEditable()
   @Experimental() // untriaged
-  void set type(String value) => _blink.BlinkHTMLMenuItemElement.instance.type_Setter_(this, value);
-
+  void set type(String value) => _blink.BlinkHTMLMenuItemElement.instance.type_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -22673,12 +22702,12 @@
 
   @DomName('MessageChannel.port1')
   @DocsEditable()
-  MessagePort get port1 => _blink.BlinkMessageChannel.instance.port1_Getter_(this);
-
+  MessagePort get port1 => wrap_jso(_blink.BlinkMessageChannel.instance.port1_Getter_(unwrap_jso(this)));
+  
   @DomName('MessageChannel.port2')
   @DocsEditable()
-  MessagePort get port2 => _blink.BlinkMessageChannel.instance.port2_Getter_(this);
-
+  MessagePort get port2 => wrap_jso(_blink.BlinkMessageChannel.instance.port2_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -22706,25 +22735,25 @@
 
   @DomName('MessageEvent.data')
   @DocsEditable()
-  Object get data => _blink.BlinkMessageEvent.instance.data_Getter_(this);
-
+  Object get data => _blink.BlinkMessageEvent.instance.data_Getter_(unwrap_jso(this));
+  
   @DomName('MessageEvent.lastEventId')
   @DocsEditable()
   @Unstable()
-  String get lastEventId => _blink.BlinkMessageEvent.instance.lastEventId_Getter_(this);
-
+  String get lastEventId => _blink.BlinkMessageEvent.instance.lastEventId_Getter_(unwrap_jso(this));
+  
   @DomName('MessageEvent.origin')
   @DocsEditable()
-  String get origin => _blink.BlinkMessageEvent.instance.origin_Getter_(this);
-
+  String get origin => _blink.BlinkMessageEvent.instance.origin_Getter_(unwrap_jso(this));
+  
   @DomName('MessageEvent.source')
   @DocsEditable()
-  EventTarget get source => _blink.BlinkMessageEvent.instance.source_Getter_(this);
-
+  EventTarget get source => wrap_jso(_blink.BlinkMessageEvent.instance.source_Getter_(unwrap_jso(this)));
+  
   @DomName('MessageEvent.initMessageEvent')
   @DocsEditable()
-  void _initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, Window sourceArg, List<MessagePort> messagePorts) => _blink.BlinkMessageEvent.instance.initMessageEvent_Callback_8_(this, typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, messagePorts);
-
+  void _initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, Window sourceArg, List<MessagePort> messagePorts) => _blink.BlinkMessageEvent.instance.initMessageEvent_Callback_8_(unwrap_jso(this), typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, unwrap_jso(sourceArg), messagePorts);
+  
 }
 // 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
@@ -22752,16 +22781,16 @@
 
   @DomName('MessagePort.close')
   @DocsEditable()
-  void close() => _blink.BlinkMessagePort.instance.close_Callback_0_(this);
-
+  void close() => _blink.BlinkMessagePort.instance.close_Callback_0_(unwrap_jso(this));
+  
   @DomName('MessagePort.postMessage')
   @DocsEditable()
-  void postMessage(Object message, [List<MessagePort> transfer]) => _blink.BlinkMessagePort.instance.postMessage_Callback_2_(this, message, transfer);
-
+  void postMessage(Object message, [List<MessagePort> transfer]) => _blink.BlinkMessagePort.instance.postMessage_Callback_2_(unwrap_jso(this), message, transfer);
+  
   @DomName('MessagePort.start')
   @DocsEditable()
-  void start() => _blink.BlinkMessagePort.instance.start_Callback_0_(this);
-
+  void start() => _blink.BlinkMessagePort.instance.start_Callback_0_(unwrap_jso(this));
+  
   /// Stream of `message` events handled by this [MessagePort].
   @DomName('MessagePort.onmessage')
   @DocsEditable()
@@ -22793,28 +22822,28 @@
 
   @DomName('HTMLMetaElement.content')
   @DocsEditable()
-  String get content => _blink.BlinkHTMLMetaElement.instance.content_Getter_(this);
-
+  String get content => _blink.BlinkHTMLMetaElement.instance.content_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMetaElement.content')
   @DocsEditable()
-  void set content(String value) => _blink.BlinkHTMLMetaElement.instance.content_Setter_(this, value);
-
+  void set content(String value) => _blink.BlinkHTMLMetaElement.instance.content_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMetaElement.httpEquiv')
   @DocsEditable()
-  String get httpEquiv => _blink.BlinkHTMLMetaElement.instance.httpEquiv_Getter_(this);
-
+  String get httpEquiv => _blink.BlinkHTMLMetaElement.instance.httpEquiv_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMetaElement.httpEquiv')
   @DocsEditable()
-  void set httpEquiv(String value) => _blink.BlinkHTMLMetaElement.instance.httpEquiv_Setter_(this, value);
-
+  void set httpEquiv(String value) => _blink.BlinkHTMLMetaElement.instance.httpEquiv_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMetaElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLMetaElement.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkHTMLMetaElement.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMetaElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLMetaElement.instance.name_Setter_(this, value);
-
+  void set name(String value) => _blink.BlinkHTMLMetaElement.instance.name_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -22833,12 +22862,12 @@
 
   @DomName('Metadata.modificationTime')
   @DocsEditable()
-  DateTime get modificationTime => _blink.BlinkMetadata.instance.modificationTime_Getter_(this);
-
+  DateTime get modificationTime => _blink.BlinkMetadata.instance.modificationTime_Getter_(unwrap_jso(this));
+  
   @DomName('Metadata.size')
   @DocsEditable()
-  int get size => _blink.BlinkMetadata.instance.size_Getter_(this);
-
+  int get size => _blink.BlinkMetadata.instance.size_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -22883,57 +22912,57 @@
 
   @DomName('HTMLMeterElement.high')
   @DocsEditable()
-  num get high => _blink.BlinkHTMLMeterElement.instance.high_Getter_(this);
-
+  num get high => _blink.BlinkHTMLMeterElement.instance.high_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMeterElement.high')
   @DocsEditable()
-  void set high(num value) => _blink.BlinkHTMLMeterElement.instance.high_Setter_(this, value);
-
+  void set high(num value) => _blink.BlinkHTMLMeterElement.instance.high_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMeterElement.labels')
   @DocsEditable()
   @Unstable()
-  List<Node> get labels => _blink.BlinkHTMLMeterElement.instance.labels_Getter_(this);
-
+  List<Node> get labels => wrap_jso_list(_blink.BlinkHTMLMeterElement.instance.labels_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLMeterElement.low')
   @DocsEditable()
-  num get low => _blink.BlinkHTMLMeterElement.instance.low_Getter_(this);
-
+  num get low => _blink.BlinkHTMLMeterElement.instance.low_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMeterElement.low')
   @DocsEditable()
-  void set low(num value) => _blink.BlinkHTMLMeterElement.instance.low_Setter_(this, value);
-
+  void set low(num value) => _blink.BlinkHTMLMeterElement.instance.low_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMeterElement.max')
   @DocsEditable()
-  num get max => _blink.BlinkHTMLMeterElement.instance.max_Getter_(this);
-
+  num get max => _blink.BlinkHTMLMeterElement.instance.max_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMeterElement.max')
   @DocsEditable()
-  void set max(num value) => _blink.BlinkHTMLMeterElement.instance.max_Setter_(this, value);
-
+  void set max(num value) => _blink.BlinkHTMLMeterElement.instance.max_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMeterElement.min')
   @DocsEditable()
-  num get min => _blink.BlinkHTMLMeterElement.instance.min_Getter_(this);
-
+  num get min => _blink.BlinkHTMLMeterElement.instance.min_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMeterElement.min')
   @DocsEditable()
-  void set min(num value) => _blink.BlinkHTMLMeterElement.instance.min_Setter_(this, value);
-
+  void set min(num value) => _blink.BlinkHTMLMeterElement.instance.min_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMeterElement.optimum')
   @DocsEditable()
-  num get optimum => _blink.BlinkHTMLMeterElement.instance.optimum_Getter_(this);
-
+  num get optimum => _blink.BlinkHTMLMeterElement.instance.optimum_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMeterElement.optimum')
   @DocsEditable()
-  void set optimum(num value) => _blink.BlinkHTMLMeterElement.instance.optimum_Setter_(this, value);
-
+  void set optimum(num value) => _blink.BlinkHTMLMeterElement.instance.optimum_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLMeterElement.value')
   @DocsEditable()
-  num get value => _blink.BlinkHTMLMeterElement.instance.value_Getter_(this);
-
+  num get value => _blink.BlinkHTMLMeterElement.instance.value_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLMeterElement.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkHTMLMeterElement.instance.value_Setter_(this, value);
-
+  void set value(num value) => _blink.BlinkHTMLMeterElement.instance.value_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -22972,17 +23001,17 @@
 
   @DomName('MIDIAccess.inputs')
   @DocsEditable()
-  MidiInputMap get inputs => _blink.BlinkMIDIAccess.instance.inputs_Getter_(this);
-
+  MidiInputMap get inputs => wrap_jso(_blink.BlinkMIDIAccess.instance.inputs_Getter_(unwrap_jso(this)));
+  
   @DomName('MIDIAccess.outputs')
   @DocsEditable()
-  MidiOutputMap get outputs => _blink.BlinkMIDIAccess.instance.outputs_Getter_(this);
-
+  MidiOutputMap get outputs => wrap_jso(_blink.BlinkMIDIAccess.instance.outputs_Getter_(unwrap_jso(this)));
+  
   @DomName('MIDIAccess.sysexEnabled')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get sysexEnabled => _blink.BlinkMIDIAccess.instance.sysexEnabled_Getter_(this);
-
+  bool get sysexEnabled => _blink.BlinkMIDIAccess.instance.sysexEnabled_Getter_(unwrap_jso(this));
+  
   /// Stream of `connect` events handled by this [MidiAccess].
   @DomName('MIDIAccess.onconnect')
   @DocsEditable()
@@ -23011,8 +23040,8 @@
 
   @DomName('MIDIConnectionEvent.port')
   @DocsEditable()
-  MidiPort get port => _blink.BlinkMIDIConnectionEvent.instance.port_Getter_(this);
-
+  MidiPort get port => wrap_jso(_blink.BlinkMIDIConnectionEvent.instance.port_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -23062,33 +23091,33 @@
   @DomName('MIDIInputMap.size')
   @DocsEditable()
   @Experimental() // untriaged
-  int get size => _blink.BlinkMIDIInputMap.instance.size_Getter_(this);
-
+  int get size => _blink.BlinkMIDIInputMap.instance.size_Getter_(unwrap_jso(this));
+  
   @DomName('MIDIInputMap.entries')
   @DocsEditable()
   @Experimental() // untriaged
-  DomIterator entries() => _blink.BlinkMIDIInputMap.instance.entries_Callback_0_(this);
-
+  DomIterator entries() => _blink.BlinkMIDIInputMap.instance.entries_Callback_0_(unwrap_jso(this));
+  
   @DomName('MIDIInputMap.get')
   @DocsEditable()
   @Experimental() // untriaged
-  Object get(String id) => _blink.BlinkMIDIInputMap.instance.get_Callback_1_(this, id);
-
+  Object get(String id) => wrap_jso(_blink.BlinkMIDIInputMap.instance.get_Callback_1_(unwrap_jso(this), id));
+  
   @DomName('MIDIInputMap.has')
   @DocsEditable()
   @Experimental() // untriaged
-  bool has(String key) => _blink.BlinkMIDIInputMap.instance.has_Callback_1_(this, key);
-
+  bool has(String key) => _blink.BlinkMIDIInputMap.instance.has_Callback_1_(unwrap_jso(this), key);
+  
   @DomName('MIDIInputMap.keys')
   @DocsEditable()
   @Experimental() // untriaged
-  DomIterator keys() => _blink.BlinkMIDIInputMap.instance.keys_Callback_0_(this);
-
+  DomIterator keys() => _blink.BlinkMIDIInputMap.instance.keys_Callback_0_(unwrap_jso(this));
+  
   @DomName('MIDIInputMap.values')
   @DocsEditable()
   @Experimental() // untriaged
-  DomIterator values() => _blink.BlinkMIDIInputMap.instance.values_Callback_0_(this);
-
+  DomIterator values() => _blink.BlinkMIDIInputMap.instance.values_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -23107,12 +23136,12 @@
 
   @DomName('MIDIMessageEvent.data')
   @DocsEditable()
-  Uint8List get data => _blink.BlinkMIDIMessageEvent.instance.data_Getter_(this);
-
+  Uint8List get data => wrap_jso(_blink.BlinkMIDIMessageEvent.instance.data_Getter_(unwrap_jso(this)));
+  
   @DomName('MIDIMessageEvent.receivedTime')
   @DocsEditable()
-  double get receivedTime => _blink.BlinkMIDIMessageEvent.instance.receivedTime_Getter_(this);
-
+  double get receivedTime => _blink.BlinkMIDIMessageEvent.instance.receivedTime_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -23131,10 +23160,10 @@
 
   void send(Uint8List data, [num timestamp]) {
     if (timestamp != null) {
-      _blink.BlinkMIDIOutput.instance.send_Callback_2_(this, data, timestamp);
+      _blink.BlinkMIDIOutput.instance.send_Callback_2_(unwrap_jso(this), data, timestamp);
       return;
     }
-    _blink.BlinkMIDIOutput.instance.send_Callback_1_(this, data);
+    _blink.BlinkMIDIOutput.instance.send_Callback_1_(unwrap_jso(this), data);
     return;
   }
 
@@ -23156,33 +23185,33 @@
   @DomName('MIDIOutputMap.size')
   @DocsEditable()
   @Experimental() // untriaged
-  int get size => _blink.BlinkMIDIOutputMap.instance.size_Getter_(this);
-
+  int get size => _blink.BlinkMIDIOutputMap.instance.size_Getter_(unwrap_jso(this));
+  
   @DomName('MIDIOutputMap.entries')
   @DocsEditable()
   @Experimental() // untriaged
-  DomIterator entries() => _blink.BlinkMIDIOutputMap.instance.entries_Callback_0_(this);
-
+  DomIterator entries() => _blink.BlinkMIDIOutputMap.instance.entries_Callback_0_(unwrap_jso(this));
+  
   @DomName('MIDIOutputMap.get')
   @DocsEditable()
   @Experimental() // untriaged
-  Object get(String id) => _blink.BlinkMIDIOutputMap.instance.get_Callback_1_(this, id);
-
+  Object get(String id) => wrap_jso(_blink.BlinkMIDIOutputMap.instance.get_Callback_1_(unwrap_jso(this), id));
+  
   @DomName('MIDIOutputMap.has')
   @DocsEditable()
   @Experimental() // untriaged
-  bool has(String key) => _blink.BlinkMIDIOutputMap.instance.has_Callback_1_(this, key);
-
+  bool has(String key) => _blink.BlinkMIDIOutputMap.instance.has_Callback_1_(unwrap_jso(this), key);
+  
   @DomName('MIDIOutputMap.keys')
   @DocsEditable()
   @Experimental() // untriaged
-  DomIterator keys() => _blink.BlinkMIDIOutputMap.instance.keys_Callback_0_(this);
-
+  DomIterator keys() => _blink.BlinkMIDIOutputMap.instance.keys_Callback_0_(unwrap_jso(this));
+  
   @DomName('MIDIOutputMap.values')
   @DocsEditable()
   @Experimental() // untriaged
-  DomIterator values() => _blink.BlinkMIDIOutputMap.instance.values_Callback_0_(this);
-
+  DomIterator values() => _blink.BlinkMIDIOutputMap.instance.values_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -23211,24 +23240,24 @@
 
   @DomName('MIDIPort.id')
   @DocsEditable()
-  String get id => _blink.BlinkMIDIPort.instance.id_Getter_(this);
-
+  String get id => _blink.BlinkMIDIPort.instance.id_Getter_(unwrap_jso(this));
+  
   @DomName('MIDIPort.manufacturer')
   @DocsEditable()
-  String get manufacturer => _blink.BlinkMIDIPort.instance.manufacturer_Getter_(this);
-
+  String get manufacturer => _blink.BlinkMIDIPort.instance.manufacturer_Getter_(unwrap_jso(this));
+  
   @DomName('MIDIPort.name')
   @DocsEditable()
-  String get name => _blink.BlinkMIDIPort.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkMIDIPort.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('MIDIPort.type')
   @DocsEditable()
-  String get type => _blink.BlinkMIDIPort.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkMIDIPort.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('MIDIPort.version')
   @DocsEditable()
-  String get version => _blink.BlinkMIDIPort.instance.version_Getter_(this);
-
+  String get version => _blink.BlinkMIDIPort.instance.version_Getter_(unwrap_jso(this));
+  
   /// Stream of `disconnect` events handled by this [MidiPort].
   @DomName('MIDIPort.ondisconnect')
   @DocsEditable()
@@ -23251,20 +23280,20 @@
 
   @DomName('MimeType.description')
   @DocsEditable()
-  String get description => _blink.BlinkMimeType.instance.description_Getter_(this);
-
+  String get description => _blink.BlinkMimeType.instance.description_Getter_(unwrap_jso(this));
+  
   @DomName('MimeType.enabledPlugin')
   @DocsEditable()
-  Plugin get enabledPlugin => _blink.BlinkMimeType.instance.enabledPlugin_Getter_(this);
-
+  Plugin get enabledPlugin => wrap_jso(_blink.BlinkMimeType.instance.enabledPlugin_Getter_(unwrap_jso(this)));
+  
   @DomName('MimeType.suffixes')
   @DocsEditable()
-  String get suffixes => _blink.BlinkMimeType.instance.suffixes_Getter_(this);
-
+  String get suffixes => _blink.BlinkMimeType.instance.suffixes_Getter_(unwrap_jso(this));
+  
   @DomName('MimeType.type')
   @DocsEditable()
-  String get type => _blink.BlinkMimeType.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkMimeType.instance.type_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -23282,16 +23311,16 @@
 
   @DomName('MimeTypeArray.length')
   @DocsEditable()
-  int get length => _blink.BlinkMimeTypeArray.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkMimeTypeArray.instance.length_Getter_(unwrap_jso(this));
+  
   MimeType operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkMimeTypeArray.instance.item_Callback_1_(this, index);
+    return wrap_jso(_blink.BlinkMimeTypeArray.instance.item_Callback_1_(unwrap_jso(this), index));
   }
 
-  MimeType _nativeIndexedGetter(int index) => _blink.BlinkMimeTypeArray.instance.item_Callback_1_(this, index);
-
+  MimeType _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkMimeTypeArray.instance.item_Callback_1_(unwrap_jso(this), index));
+ 
   void operator[]=(int index, MimeType value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -23332,16 +23361,16 @@
 
   @DomName('MimeTypeArray.__getter__')
   @DocsEditable()
-  MimeType __getter__(String name) => _blink.BlinkMimeTypeArray.instance.$__getter___Callback_1_(this, name);
-
+  MimeType __getter__(String name) => wrap_jso(_blink.BlinkMimeTypeArray.instance.$__getter___Callback_1_(unwrap_jso(this), name));
+  
   @DomName('MimeTypeArray.item')
   @DocsEditable()
-  MimeType item(int index) => _blink.BlinkMimeTypeArray.instance.item_Callback_1_(this, index);
-
+  MimeType item(int index) => wrap_jso(_blink.BlinkMimeTypeArray.instance.item_Callback_1_(unwrap_jso(this), index));
+  
   @DomName('MimeTypeArray.namedItem')
   @DocsEditable()
-  MimeType namedItem(String name) => _blink.BlinkMimeTypeArray.instance.namedItem_Callback_1_(this, name);
-
+  MimeType namedItem(String name) => wrap_jso(_blink.BlinkMimeTypeArray.instance.namedItem_Callback_1_(unwrap_jso(this), name));
+  
 }
 // 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
@@ -23365,20 +23394,20 @@
 
   @DomName('HTMLModElement.cite')
   @DocsEditable()
-  String get cite => _blink.BlinkHTMLModElement.instance.cite_Getter_(this);
-
+  String get cite => _blink.BlinkHTMLModElement.instance.cite_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLModElement.cite')
   @DocsEditable()
-  void set cite(String value) => _blink.BlinkHTMLModElement.instance.cite_Setter_(this, value);
-
+  void set cite(String value) => _blink.BlinkHTMLModElement.instance.cite_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLModElement.dateTime')
   @DocsEditable()
-  String get dateTime => _blink.BlinkHTMLModElement.instance.dateTime_Getter_(this);
-
+  String get dateTime => _blink.BlinkHTMLModElement.instance.dateTime_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLModElement.dateTime')
   @DocsEditable()
-  void set dateTime(String value) => _blink.BlinkHTMLModElement.instance.dateTime_Setter_(this, value);
-
+  void set dateTime(String value) => _blink.BlinkHTMLModElement.instance.dateTime_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -23409,29 +23438,29 @@
 
   @DomName('MouseEvent.altKey')
   @DocsEditable()
-  bool get altKey => _blink.BlinkMouseEvent.instance.altKey_Getter_(this);
-
+  bool get altKey => _blink.BlinkMouseEvent.instance.altKey_Getter_(unwrap_jso(this));
+  
   @DomName('MouseEvent.button')
   @DocsEditable()
-  int get button => _blink.BlinkMouseEvent.instance.button_Getter_(this);
-
+  int get button => _blink.BlinkMouseEvent.instance.button_Getter_(unwrap_jso(this));
+  
   @DomName('MouseEvent.clientX')
   @DocsEditable()
-  int get _clientX => _blink.BlinkMouseEvent.instance.clientX_Getter_(this);
-
+  int get _clientX => _blink.BlinkMouseEvent.instance.clientX_Getter_(unwrap_jso(this));
+  
   @DomName('MouseEvent.clientY')
   @DocsEditable()
-  int get _clientY => _blink.BlinkMouseEvent.instance.clientY_Getter_(this);
-
+  int get _clientY => _blink.BlinkMouseEvent.instance.clientY_Getter_(unwrap_jso(this));
+  
   @DomName('MouseEvent.ctrlKey')
   @DocsEditable()
-  bool get ctrlKey => _blink.BlinkMouseEvent.instance.ctrlKey_Getter_(this);
-
+  bool get ctrlKey => _blink.BlinkMouseEvent.instance.ctrlKey_Getter_(unwrap_jso(this));
+  
   @DomName('MouseEvent.dataTransfer')
   @DocsEditable()
   @Unstable()
-  DataTransfer get dataTransfer => _blink.BlinkMouseEvent.instance.dataTransfer_Getter_(this);
-
+  DataTransfer get dataTransfer => wrap_jso(_blink.BlinkMouseEvent.instance.dataTransfer_Getter_(unwrap_jso(this)));
+  
   /**
    * The nonstandard way to access the element that the mouse comes
    * from in the case of a `mouseover` event.
@@ -23442,53 +23471,53 @@
   @DomName('MouseEvent.fromElement')
   @DocsEditable()
   @deprecated
-  Node get fromElement => _blink.BlinkMouseEvent.instance.fromElement_Getter_(this);
-
+  Node get fromElement => wrap_jso(_blink.BlinkMouseEvent.instance.fromElement_Getter_(unwrap_jso(this)));
+  
   @DomName('MouseEvent.metaKey')
   @DocsEditable()
-  bool get metaKey => _blink.BlinkMouseEvent.instance.metaKey_Getter_(this);
-
+  bool get metaKey => _blink.BlinkMouseEvent.instance.metaKey_Getter_(unwrap_jso(this));
+  
   @DomName('MouseEvent.movementX')
   @DocsEditable()
   @Experimental() // untriaged
-  int get _movementX => _blink.BlinkMouseEvent.instance.movementX_Getter_(this);
-
+  int get _movementX => _blink.BlinkMouseEvent.instance.movementX_Getter_(unwrap_jso(this));
+  
   @DomName('MouseEvent.movementY')
   @DocsEditable()
   @Experimental() // untriaged
-  int get _movementY => _blink.BlinkMouseEvent.instance.movementY_Getter_(this);
-
+  int get _movementY => _blink.BlinkMouseEvent.instance.movementY_Getter_(unwrap_jso(this));
+  
   @DomName('MouseEvent.offsetX')
   @DocsEditable()
   @Unstable()
-  int get _offsetX => _blink.BlinkMouseEvent.instance.offsetX_Getter_(this);
-
+  int get _offsetX => _blink.BlinkMouseEvent.instance.offsetX_Getter_(unwrap_jso(this));
+  
   @DomName('MouseEvent.offsetY')
   @DocsEditable()
   @Unstable()
-  int get _offsetY => _blink.BlinkMouseEvent.instance.offsetY_Getter_(this);
-
+  int get _offsetY => _blink.BlinkMouseEvent.instance.offsetY_Getter_(unwrap_jso(this));
+  
   @DomName('MouseEvent.region')
   @DocsEditable()
   @Experimental() // untriaged
-  String get region => _blink.BlinkMouseEvent.instance.region_Getter_(this);
-
+  String get region => _blink.BlinkMouseEvent.instance.region_Getter_(unwrap_jso(this));
+  
   @DomName('MouseEvent.relatedTarget')
   @DocsEditable()
-  EventTarget get relatedTarget => _blink.BlinkMouseEvent.instance.relatedTarget_Getter_(this);
-
+  EventTarget get relatedTarget => wrap_jso(_blink.BlinkMouseEvent.instance.relatedTarget_Getter_(unwrap_jso(this)));
+  
   @DomName('MouseEvent.screenX')
   @DocsEditable()
-  int get _screenX => _blink.BlinkMouseEvent.instance.screenX_Getter_(this);
-
+  int get _screenX => _blink.BlinkMouseEvent.instance.screenX_Getter_(unwrap_jso(this));
+  
   @DomName('MouseEvent.screenY')
   @DocsEditable()
-  int get _screenY => _blink.BlinkMouseEvent.instance.screenY_Getter_(this);
-
+  int get _screenY => _blink.BlinkMouseEvent.instance.screenY_Getter_(unwrap_jso(this));
+  
   @DomName('MouseEvent.shiftKey')
   @DocsEditable()
-  bool get shiftKey => _blink.BlinkMouseEvent.instance.shiftKey_Getter_(this);
-
+  bool get shiftKey => _blink.BlinkMouseEvent.instance.shiftKey_Getter_(unwrap_jso(this));
+  
   /**
    * The nonstandard way to access the element that the mouse goes
    * to in the case of a `mouseout` event.
@@ -23499,26 +23528,26 @@
   @DomName('MouseEvent.toElement')
   @DocsEditable()
   @deprecated
-  Node get toElement => _blink.BlinkMouseEvent.instance.toElement_Getter_(this);
-
+  Node get toElement => wrap_jso(_blink.BlinkMouseEvent.instance.toElement_Getter_(unwrap_jso(this)));
+  
   @DomName('MouseEvent.webkitMovementX')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  int get _webkitMovementX => _blink.BlinkMouseEvent.instance.webkitMovementX_Getter_(this);
-
+  int get _webkitMovementX => _blink.BlinkMouseEvent.instance.webkitMovementX_Getter_(unwrap_jso(this));
+  
   @DomName('MouseEvent.webkitMovementY')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  int get _webkitMovementY => _blink.BlinkMouseEvent.instance.webkitMovementY_Getter_(this);
-
+  int get _webkitMovementY => _blink.BlinkMouseEvent.instance.webkitMovementY_Getter_(unwrap_jso(this));
+  
   @DomName('MouseEvent.initMouseEvent')
   @DocsEditable()
-  void _initMouseEvent(String type, bool canBubble, bool cancelable, Window view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget) => _blink.BlinkMouseEvent.instance.initMouseEvent_Callback_15_(this, type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget);
-
+  void _initMouseEvent(String type, bool canBubble, bool cancelable, Window view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget) => _blink.BlinkMouseEvent.instance.initMouseEvent_Callback_15_(unwrap_jso(this), type, canBubble, cancelable, unwrap_jso(view), detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, unwrap_jso(relatedTarget));
+  
 
   @deprecated
   int get clientX => client.x;
@@ -23584,23 +23613,20 @@
 
   @DomName('MutationObserver.MutationObserver')
   @DocsEditable()
-  factory MutationObserver._(MutationCallback callback) => _create(callback);
-
-  @DocsEditable()
-  static MutationObserver _create(callback) => _blink.BlinkMutationObserver.instance.constructorCallback_1_(callback);
+  factory MutationObserver._(MutationCallback callback) => wrap_jso(_create(callback));
 
   @DomName('MutationObserver.disconnect')
   @DocsEditable()
-  void disconnect() => _blink.BlinkMutationObserver.instance.disconnect_Callback_0_(this);
-
+  void disconnect() => _blink.BlinkMutationObserver.instance.disconnect_Callback_0_(unwrap_jso(this));
+  
   @DomName('MutationObserver.observe')
   @DocsEditable()
-  void _observe(Node target, Map options) => _blink.BlinkMutationObserver.instance.observe_Callback_2_(this, target, options);
-
+  void _observe(Node target, Map options) => _blink.BlinkMutationObserver.instance.observe_Callback_2_(unwrap_jso(this), unwrap_jso(target), options);
+  
   @DomName('MutationObserver.takeRecords')
   @DocsEditable()
-  List<MutationRecord> takeRecords() => _blink.BlinkMutationObserver.instance.takeRecords_Callback_0_(this);
-
+  List<MutationRecord> takeRecords() => _blink.BlinkMutationObserver.instance.takeRecords_Callback_0_(unwrap_jso(this));
+  
   /**
    * Checks to see if the mutation observer API is supported on the current
    * platform.
@@ -23608,6 +23634,8 @@
   static bool get supported {
     return true;
   }
+  @DocsEditable()
+  static MutationObserver _create(callback) => _blink.BlinkMutationObserver.instance.constructorCallback_1_(callback);
 
   /**
    * Observes the target for the specified changes.
@@ -23684,40 +23712,40 @@
 
   @DomName('MutationRecord.addedNodes')
   @DocsEditable()
-  List<Node> get addedNodes => _blink.BlinkMutationRecord.instance.addedNodes_Getter_(this);
-
+  List<Node> get addedNodes => wrap_jso_list(_blink.BlinkMutationRecord.instance.addedNodes_Getter_(unwrap_jso(this)));
+  
   @DomName('MutationRecord.attributeName')
   @DocsEditable()
-  String get attributeName => _blink.BlinkMutationRecord.instance.attributeName_Getter_(this);
-
+  String get attributeName => _blink.BlinkMutationRecord.instance.attributeName_Getter_(unwrap_jso(this));
+  
   @DomName('MutationRecord.attributeNamespace')
   @DocsEditable()
-  String get attributeNamespace => _blink.BlinkMutationRecord.instance.attributeNamespace_Getter_(this);
-
+  String get attributeNamespace => _blink.BlinkMutationRecord.instance.attributeNamespace_Getter_(unwrap_jso(this));
+  
   @DomName('MutationRecord.nextSibling')
   @DocsEditable()
-  Node get nextSibling => _blink.BlinkMutationRecord.instance.nextSibling_Getter_(this);
-
+  Node get nextSibling => wrap_jso(_blink.BlinkMutationRecord.instance.nextSibling_Getter_(unwrap_jso(this)));
+  
   @DomName('MutationRecord.oldValue')
   @DocsEditable()
-  String get oldValue => _blink.BlinkMutationRecord.instance.oldValue_Getter_(this);
-
+  String get oldValue => _blink.BlinkMutationRecord.instance.oldValue_Getter_(unwrap_jso(this));
+  
   @DomName('MutationRecord.previousSibling')
   @DocsEditable()
-  Node get previousSibling => _blink.BlinkMutationRecord.instance.previousSibling_Getter_(this);
-
+  Node get previousSibling => wrap_jso(_blink.BlinkMutationRecord.instance.previousSibling_Getter_(unwrap_jso(this)));
+  
   @DomName('MutationRecord.removedNodes')
   @DocsEditable()
-  List<Node> get removedNodes => _blink.BlinkMutationRecord.instance.removedNodes_Getter_(this);
-
+  List<Node> get removedNodes => wrap_jso_list(_blink.BlinkMutationRecord.instance.removedNodes_Getter_(unwrap_jso(this)));
+  
   @DomName('MutationRecord.target')
   @DocsEditable()
-  Node get target => _blink.BlinkMutationRecord.instance.target_Getter_(this);
-
+  Node get target => wrap_jso(_blink.BlinkMutationRecord.instance.target_Getter_(unwrap_jso(this)));
+  
   @DomName('MutationRecord.type')
   @DocsEditable()
-  String get type => _blink.BlinkMutationRecord.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkMutationRecord.instance.type_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -23789,133 +23817,133 @@
   @DomName('Navigator.connection')
   @DocsEditable()
   @Experimental() // untriaged
-  NetworkInformation get connection => _blink.BlinkNavigator.instance.connection_Getter_(this);
-
+  NetworkInformation get connection => wrap_jso(_blink.BlinkNavigator.instance.connection_Getter_(unwrap_jso(this)));
+  
   @DomName('Navigator.cookieEnabled')
   @DocsEditable()
   @Unstable()
-  bool get cookieEnabled => _blink.BlinkNavigator.instance.cookieEnabled_Getter_(this);
-
+  bool get cookieEnabled => _blink.BlinkNavigator.instance.cookieEnabled_Getter_(unwrap_jso(this));
+  
   @DomName('Navigator.credentials')
   @DocsEditable()
   @Experimental() // untriaged
-  CredentialsContainer get credentials => _blink.BlinkNavigator.instance.credentials_Getter_(this);
-
+  CredentialsContainer get credentials => wrap_jso(_blink.BlinkNavigator.instance.credentials_Getter_(unwrap_jso(this)));
+  
   @DomName('Navigator.doNotTrack')
   @DocsEditable()
   // http://www.w3.org/2011/tracking-protection/drafts/tracking-dnt.html#js-dom
   @Experimental() // experimental
-  String get doNotTrack => _blink.BlinkNavigator.instance.doNotTrack_Getter_(this);
-
+  String get doNotTrack => _blink.BlinkNavigator.instance.doNotTrack_Getter_(unwrap_jso(this));
+  
   @DomName('Navigator.geofencing')
   @DocsEditable()
   @Experimental() // untriaged
-  Geofencing get geofencing => _blink.BlinkNavigator.instance.geofencing_Getter_(this);
-
+  Geofencing get geofencing => wrap_jso(_blink.BlinkNavigator.instance.geofencing_Getter_(unwrap_jso(this)));
+  
   @DomName('Navigator.geolocation')
   @DocsEditable()
   @Unstable()
-  Geolocation get geolocation => _blink.BlinkNavigator.instance.geolocation_Getter_(this);
-
+  Geolocation get geolocation => wrap_jso(_blink.BlinkNavigator.instance.geolocation_Getter_(unwrap_jso(this)));
+  
   @DomName('Navigator.maxTouchPoints')
   @DocsEditable()
   @Experimental() // untriaged
-  int get maxTouchPoints => _blink.BlinkNavigator.instance.maxTouchPoints_Getter_(this);
-
+  int get maxTouchPoints => _blink.BlinkNavigator.instance.maxTouchPoints_Getter_(unwrap_jso(this));
+  
   @DomName('Navigator.mimeTypes')
   @DocsEditable()
   @Experimental() // nonstandard
-  MimeTypeArray get mimeTypes => _blink.BlinkNavigator.instance.mimeTypes_Getter_(this);
-
+  MimeTypeArray get mimeTypes => wrap_jso(_blink.BlinkNavigator.instance.mimeTypes_Getter_(unwrap_jso(this)));
+  
   @DomName('Navigator.presentation')
   @DocsEditable()
   @Experimental() // untriaged
-  Presentation get presentation => _blink.BlinkNavigator.instance.presentation_Getter_(this);
-
+  Presentation get presentation => wrap_jso(_blink.BlinkNavigator.instance.presentation_Getter_(unwrap_jso(this)));
+  
   @DomName('Navigator.productSub')
   @DocsEditable()
   @Unstable()
-  String get productSub => _blink.BlinkNavigator.instance.productSub_Getter_(this);
-
+  String get productSub => _blink.BlinkNavigator.instance.productSub_Getter_(unwrap_jso(this));
+  
   @DomName('Navigator.push')
   @DocsEditable()
   @Experimental() // untriaged
-  PushManager get push => _blink.BlinkNavigator.instance.push_Getter_(this);
-
+  PushManager get push => wrap_jso(_blink.BlinkNavigator.instance.push_Getter_(unwrap_jso(this)));
+  
   @DomName('Navigator.serviceWorker')
   @DocsEditable()
   @Experimental() // untriaged
-  ServiceWorkerContainer get serviceWorker => _blink.BlinkNavigator.instance.serviceWorker_Getter_(this);
-
+  ServiceWorkerContainer get serviceWorker => wrap_jso(_blink.BlinkNavigator.instance.serviceWorker_Getter_(unwrap_jso(this)));
+  
   @DomName('Navigator.storageQuota')
   @DocsEditable()
   @Experimental() // untriaged
-  StorageQuota get storageQuota => _blink.BlinkNavigator.instance.storageQuota_Getter_(this);
-
+  StorageQuota get storageQuota => wrap_jso(_blink.BlinkNavigator.instance.storageQuota_Getter_(unwrap_jso(this)));
+  
   @DomName('Navigator.vendor')
   @DocsEditable()
   @Unstable()
-  String get vendor => _blink.BlinkNavigator.instance.vendor_Getter_(this);
-
+  String get vendor => _blink.BlinkNavigator.instance.vendor_Getter_(unwrap_jso(this));
+  
   @DomName('Navigator.vendorSub')
   @DocsEditable()
   @Unstable()
-  String get vendorSub => _blink.BlinkNavigator.instance.vendorSub_Getter_(this);
-
+  String get vendorSub => _blink.BlinkNavigator.instance.vendorSub_Getter_(unwrap_jso(this));
+  
   @DomName('Navigator.webkitPersistentStorage')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://www.w3.org/TR/quota-api/#accessing-storagequota
-  DeprecatedStorageQuota get persistentStorage => _blink.BlinkNavigator.instance.webkitPersistentStorage_Getter_(this);
-
+  DeprecatedStorageQuota get persistentStorage => wrap_jso(_blink.BlinkNavigator.instance.webkitPersistentStorage_Getter_(unwrap_jso(this)));
+  
   @DomName('Navigator.webkitTemporaryStorage')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://www.w3.org/TR/quota-api/#accessing-storagequota
-  DeprecatedStorageQuota get temporaryStorage => _blink.BlinkNavigator.instance.webkitTemporaryStorage_Getter_(this);
-
+  DeprecatedStorageQuota get temporaryStorage => wrap_jso(_blink.BlinkNavigator.instance.webkitTemporaryStorage_Getter_(unwrap_jso(this)));
+  
   @DomName('Navigator.getBattery')
   @DocsEditable()
   @Experimental() // untriaged
-  Future getBattery() => _blink.BlinkNavigator.instance.getBattery_Callback_0_(this);
-
+  Future getBattery() => _blink.BlinkNavigator.instance.getBattery_Callback_0_(unwrap_jso(this));
+  
   @DomName('Navigator.getGamepads')
   @DocsEditable()
   @Experimental() // untriaged
-  List<Gamepad> getGamepads() => _blink.BlinkNavigator.instance.getGamepads_Callback_0_(this);
-
+  List<Gamepad> getGamepads() => _blink.BlinkNavigator.instance.getGamepads_Callback_0_(unwrap_jso(this));
+  
   @DomName('Navigator.getStorageUpdates')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#navigatorstorageutils
   @Experimental()
-  void getStorageUpdates() => _blink.BlinkNavigator.instance.getStorageUpdates_Callback_0_(this);
-
+  void getStorageUpdates() => _blink.BlinkNavigator.instance.getStorageUpdates_Callback_0_(unwrap_jso(this));
+  
   @DomName('Navigator.isProtocolHandlerRegistered')
   @DocsEditable()
   @Experimental() // untriaged
-  String isProtocolHandlerRegistered(String scheme, String url) => _blink.BlinkNavigator.instance.isProtocolHandlerRegistered_Callback_2_(this, scheme, url);
-
+  String isProtocolHandlerRegistered(String scheme, String url) => _blink.BlinkNavigator.instance.isProtocolHandlerRegistered_Callback_2_(unwrap_jso(this), scheme, url);
+  
   @DomName('Navigator.registerProtocolHandler')
   @DocsEditable()
   @Unstable()
-  void registerProtocolHandler(String scheme, String url, String title) => _blink.BlinkNavigator.instance.registerProtocolHandler_Callback_3_(this, scheme, url, title);
-
+  void registerProtocolHandler(String scheme, String url, String title) => _blink.BlinkNavigator.instance.registerProtocolHandler_Callback_3_(unwrap_jso(this), scheme, url, title);
+  
   bool sendBeacon(String url, data) {
     if ((data is String || data == null) && (url is String || url == null)) {
-      return _blink.BlinkNavigator.instance.sendBeacon_Callback_2_(this, url, data);
+      return _blink.BlinkNavigator.instance.sendBeacon_Callback_2_(unwrap_jso(this), url, unwrap_jso(data));
     }
     if ((data is TypedData || data == null) && (url is String || url == null)) {
-      return _blink.BlinkNavigator.instance.sendBeacon_Callback_2_(this, url, data);
+      return _blink.BlinkNavigator.instance.sendBeacon_Callback_2_(unwrap_jso(this), url, unwrap_jso(data));
     }
     if ((data is FormData || data == null) && (url is String || url == null)) {
-      return _blink.BlinkNavigator.instance.sendBeacon_Callback_2_(this, url, data);
+      return _blink.BlinkNavigator.instance.sendBeacon_Callback_2_(unwrap_jso(this), url, unwrap_jso(data));
     }
     if ((data is Blob || data == null) && (url is String || url == null)) {
-      return _blink.BlinkNavigator.instance.sendBeacon_Callback_2_(this, url, data);
+      return _blink.BlinkNavigator.instance.sendBeacon_Callback_2_(unwrap_jso(this), url, unwrap_jso(data));
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -23923,64 +23951,64 @@
   @DomName('Navigator.unregisterProtocolHandler')
   @DocsEditable()
   @Experimental() // untriaged
-  void unregisterProtocolHandler(String scheme, String url) => _blink.BlinkNavigator.instance.unregisterProtocolHandler_Callback_2_(this, scheme, url);
-
+  void unregisterProtocolHandler(String scheme, String url) => _blink.BlinkNavigator.instance.unregisterProtocolHandler_Callback_2_(unwrap_jso(this), scheme, url);
+  
   @DomName('Navigator.webkitGetUserMedia')
   @DocsEditable()
   // http://dev.w3.org/2011/webrtc/editor/getusermedia.html#navigatorusermedia
   @Experimental()
-  void _getUserMedia(Map options, _NavigatorUserMediaSuccessCallback successCallback, _NavigatorUserMediaErrorCallback errorCallback) => _blink.BlinkNavigator.instance.webkitGetUserMedia_Callback_3_(this, options, successCallback, errorCallback);
-
+  void _getUserMedia(Map options, _NavigatorUserMediaSuccessCallback successCallback, _NavigatorUserMediaErrorCallback errorCallback) => _blink.BlinkNavigator.instance.webkitGetUserMedia_Callback_3_(unwrap_jso(this), options, unwrap_jso(successCallback), unwrap_jso(errorCallback));
+  
   @DomName('Navigator.hardwareConcurrency')
   @DocsEditable()
   @Experimental() // untriaged
-  int get hardwareConcurrency => _blink.BlinkNavigator.instance.hardwareConcurrency_Getter_(this);
-
+  int get hardwareConcurrency => _blink.BlinkNavigator.instance.hardwareConcurrency_Getter_(unwrap_jso(this));
+  
   @DomName('Navigator.appCodeName')
   @DocsEditable()
   @Experimental() // non-standard
-  String get appCodeName => _blink.BlinkNavigator.instance.appCodeName_Getter_(this);
-
+  String get appCodeName => _blink.BlinkNavigator.instance.appCodeName_Getter_(unwrap_jso(this));
+  
   @DomName('Navigator.appName')
   @DocsEditable()
-  String get appName => _blink.BlinkNavigator.instance.appName_Getter_(this);
-
+  String get appName => _blink.BlinkNavigator.instance.appName_Getter_(unwrap_jso(this));
+  
   @DomName('Navigator.appVersion')
   @DocsEditable()
-  String get appVersion => _blink.BlinkNavigator.instance.appVersion_Getter_(this);
-
+  String get appVersion => _blink.BlinkNavigator.instance.appVersion_Getter_(unwrap_jso(this));
+  
   @DomName('Navigator.dartEnabled')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get dartEnabled => _blink.BlinkNavigator.instance.dartEnabled_Getter_(this);
-
+  bool get dartEnabled => _blink.BlinkNavigator.instance.dartEnabled_Getter_(unwrap_jso(this));
+  
   @DomName('Navigator.platform')
   @DocsEditable()
-  String get platform => _blink.BlinkNavigator.instance.platform_Getter_(this);
-
+  String get platform => _blink.BlinkNavigator.instance.platform_Getter_(unwrap_jso(this));
+  
   @DomName('Navigator.product')
   @DocsEditable()
   @Unstable()
-  String get product => _blink.BlinkNavigator.instance.product_Getter_(this);
-
+  String get product => _blink.BlinkNavigator.instance.product_Getter_(unwrap_jso(this));
+  
   @DomName('Navigator.userAgent')
   @DocsEditable()
-  String get userAgent => _blink.BlinkNavigator.instance.userAgent_Getter_(this);
-
+  String get userAgent => _blink.BlinkNavigator.instance.userAgent_Getter_(unwrap_jso(this));
+  
   @DomName('Navigator.language')
   @DocsEditable()
-  String get language => _blink.BlinkNavigator.instance.language_Getter_(this);
-
+  String get language => _blink.BlinkNavigator.instance.language_Getter_(unwrap_jso(this));
+  
   @DomName('Navigator.languages')
   @DocsEditable()
   @Experimental() // untriaged
-  List<String> get languages => _blink.BlinkNavigator.instance.languages_Getter_(this);
-
+  List<String> get languages => _blink.BlinkNavigator.instance.languages_Getter_(unwrap_jso(this));
+  
   @DomName('Navigator.onLine')
   @DocsEditable()
   @Unstable()
-  bool get onLine => _blink.BlinkNavigator.instance.onLine_Getter_(this);
-
+  bool get onLine => _blink.BlinkNavigator.instance.onLine_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -24114,16 +24142,16 @@
 
   @DomName('NavigatorUserMediaError.constraintName')
   @DocsEditable()
-  String get constraintName => _blink.BlinkNavigatorUserMediaError.instance.constraintName_Getter_(this);
-
+  String get constraintName => _blink.BlinkNavigatorUserMediaError.instance.constraintName_Getter_(unwrap_jso(this));
+  
   @DomName('NavigatorUserMediaError.message')
   @DocsEditable()
-  String get message => _blink.BlinkNavigatorUserMediaError.instance.message_Getter_(this);
-
+  String get message => _blink.BlinkNavigatorUserMediaError.instance.message_Getter_(unwrap_jso(this));
+  
   @DomName('NavigatorUserMediaError.name')
   @DocsEditable()
-  String get name => _blink.BlinkNavigatorUserMediaError.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkNavigatorUserMediaError.instance.name_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -24164,8 +24192,8 @@
   @DomName('NetworkInformation.type')
   @DocsEditable()
   @Experimental() // untriaged
-  String get type => _blink.BlinkNetworkInformation.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkNetworkInformation.instance.type_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -24426,6 +24454,21 @@
     String value = nodeValue;  // Fetch DOM Node property once.
     return value == null ? super.toString() : value;
   }
+
+  /**
+   * A list of this node's children.
+   *
+   * ## Other resources
+   *
+   * * [Node.childNodes]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes)
+   * from MDN.
+   */
+  @DomName('Node.childNodes')
+  @DocsEditable()
+  @Returns('NodeList')
+  @Creates('NodeList')
+  List<Node> get childNodes => _blink.BlinkNode.instance.childNodes_Getter_(this);
   // To suppress missing implicit constructor warnings.
   factory Node._() { throw new UnsupportedError("Not supported"); }
 
@@ -24479,21 +24522,8 @@
 
   @DomName('Node.baseURI')
   @DocsEditable()
-  String get baseUri => _blink.BlinkNode.instance.baseURI_Getter_(this);
-
-  /**
-   * A list of this node's children.
-   *
-   * ## Other resources
-   *
-   * * [Node.childNodes]
-   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes)
-   * from MDN.
-   */
-  @DomName('Node.childNodes')
-  @DocsEditable()
-  List<Node> get childNodes => _blink.BlinkNode.instance.childNodes_Getter_(this);
-
+  String get baseUri => _blink.BlinkNode.instance.baseURI_Getter_(unwrap_jso(this));
+  
   /**
    * The first child of this node.
    *
@@ -24505,8 +24535,8 @@
    */
   @DomName('Node.firstChild')
   @DocsEditable()
-  Node get firstChild => _blink.BlinkNode.instance.firstChild_Getter_(this);
-
+  Node get firstChild => wrap_jso(_blink.BlinkNode.instance.firstChild_Getter_(unwrap_jso(this)));
+  
   /**
    * The last child of this node.
    *
@@ -24518,16 +24548,16 @@
    */
   @DomName('Node.lastChild')
   @DocsEditable()
-  Node get lastChild => _blink.BlinkNode.instance.lastChild_Getter_(this);
-
+  Node get lastChild => wrap_jso(_blink.BlinkNode.instance.lastChild_Getter_(unwrap_jso(this)));
+  
   @DomName('Node.localName')
   @DocsEditable()
-  String get _localName => _blink.BlinkNode.instance.localName_Getter_(this);
-
+  String get _localName => _blink.BlinkNode.instance.localName_Getter_(unwrap_jso(this));
+  
   @DomName('Node.namespaceURI')
   @DocsEditable()
-  String get _namespaceUri => _blink.BlinkNode.instance.namespaceURI_Getter_(this);
-
+  String get _namespaceUri => _blink.BlinkNode.instance.namespaceURI_Getter_(unwrap_jso(this));
+  
   /**
    * The next sibling node.
    *
@@ -24539,8 +24569,8 @@
    */
   @DomName('Node.nextSibling')
   @DocsEditable()
-  Node get nextNode => _blink.BlinkNode.instance.nextSibling_Getter_(this);
-
+  Node get nextNode => wrap_jso(_blink.BlinkNode.instance.nextSibling_Getter_(unwrap_jso(this)));
+  
   /**
    * The name of this node.
    *
@@ -24555,8 +24585,8 @@
    */
   @DomName('Node.nodeName')
   @DocsEditable()
-  String get nodeName => _blink.BlinkNode.instance.nodeName_Getter_(this);
-
+  String get nodeName => _blink.BlinkNode.instance.nodeName_Getter_(unwrap_jso(this));
+  
   /**
    * The type of node.
    *
@@ -24582,8 +24612,8 @@
    */
   @DomName('Node.nodeType')
   @DocsEditable()
-  int get nodeType => _blink.BlinkNode.instance.nodeType_Getter_(this);
-
+  int get nodeType => _blink.BlinkNode.instance.nodeType_Getter_(unwrap_jso(this));
+  
   /**
    * The value of this node.
    *
@@ -24598,8 +24628,8 @@
    */
   @DomName('Node.nodeValue')
   @DocsEditable()
-  String get nodeValue => _blink.BlinkNode.instance.nodeValue_Getter_(this);
-
+  String get nodeValue => _blink.BlinkNode.instance.nodeValue_Getter_(unwrap_jso(this));
+  
   /**
    * The document this node belongs to.
    *
@@ -24613,8 +24643,8 @@
    */
   @DomName('Node.ownerDocument')
   @DocsEditable()
-  Document get ownerDocument => _blink.BlinkNode.instance.ownerDocument_Getter_(this);
-
+  Document get ownerDocument => wrap_jso(_blink.BlinkNode.instance.ownerDocument_Getter_(unwrap_jso(this)));
+  
   /**
    * The parent element of this node.
    *
@@ -24629,8 +24659,8 @@
    */
   @DomName('Node.parentElement')
   @DocsEditable()
-  Element get parent => _blink.BlinkNode.instance.parentElement_Getter_(this);
-
+  Element get parent => wrap_jso(_blink.BlinkNode.instance.parentElement_Getter_(unwrap_jso(this)));
+  
   /**
    * The parent node of this node.
    *
@@ -24642,8 +24672,8 @@
    */
   @DomName('Node.parentNode')
   @DocsEditable()
-  Node get parentNode => _blink.BlinkNode.instance.parentNode_Getter_(this);
-
+  Node get parentNode => wrap_jso(_blink.BlinkNode.instance.parentNode_Getter_(unwrap_jso(this)));
+  
   /**
    * The previous sibling node.
    *
@@ -24655,8 +24685,8 @@
    */
   @DomName('Node.previousSibling')
   @DocsEditable()
-  Node get previousNode => _blink.BlinkNode.instance.previousSibling_Getter_(this);
-
+  Node get previousNode => wrap_jso(_blink.BlinkNode.instance.previousSibling_Getter_(unwrap_jso(this)));
+  
   /**
    * All text within this node and its decendents.
    *
@@ -24668,8 +24698,8 @@
    */
   @DomName('Node.textContent')
   @DocsEditable()
-  String get text => _blink.BlinkNode.instance.textContent_Getter_(this);
-
+  String get text => _blink.BlinkNode.instance.textContent_Getter_(unwrap_jso(this));
+  
   /**
    * All text within this node and its decendents.
    *
@@ -24681,8 +24711,8 @@
    */
   @DomName('Node.textContent')
   @DocsEditable()
-  void set text(String value) => _blink.BlinkNode.instance.textContent_Setter_(this, value);
-
+  void set text(String value) => _blink.BlinkNode.instance.textContent_Setter_(unwrap_jso(this), value);
+  
   /**
    * Adds a node to the end of the child [nodes] list of this node.
    *
@@ -24694,8 +24724,8 @@
    */
   @DomName('Node.appendChild')
   @DocsEditable()
-  Node append(Node newChild) => _blink.BlinkNode.instance.appendChild_Callback_1_(this, newChild);
-
+  Node append(Node newChild) => wrap_jso(_blink.BlinkNode.instance.appendChild_Callback_1_(unwrap_jso(this), unwrap_jso(newChild)));
+  
   /**
    * Returns a copy of this node.
    *
@@ -24710,8 +24740,8 @@
    */
   @DomName('Node.cloneNode')
   @DocsEditable()
-  Node clone(bool deep) => _blink.BlinkNode.instance.cloneNode_Callback_1_(this, deep);
-
+  Node clone(bool deep) => wrap_jso(_blink.BlinkNode.instance.cloneNode_Callback_1_(unwrap_jso(this), deep));
+  
   /**
    * Returns true if this node contains the specified node.
    *
@@ -24722,8 +24752,8 @@
    */
   @DomName('Node.contains')
   @DocsEditable()
-  bool contains(Node other) => _blink.BlinkNode.instance.contains_Callback_1_(this, other);
-
+  bool contains(Node other) => _blink.BlinkNode.instance.contains_Callback_1_(unwrap_jso(this), unwrap_jso(other));
+  
   /**
    * Returns true if this node has any children.
    *
@@ -24735,8 +24765,8 @@
    */
   @DomName('Node.hasChildNodes')
   @DocsEditable()
-  bool hasChildNodes() => _blink.BlinkNode.instance.hasChildNodes_Callback_0_(this);
-
+  bool hasChildNodes() => _blink.BlinkNode.instance.hasChildNodes_Callback_0_(unwrap_jso(this));
+  
   /**
    * Inserts all of the nodes into this node directly before refChild.
    *
@@ -24748,16 +24778,16 @@
    */
   @DomName('Node.insertBefore')
   @DocsEditable()
-  Node insertBefore(Node newChild, Node refChild) => _blink.BlinkNode.instance.insertBefore_Callback_2_(this, newChild, refChild);
-
+  Node insertBefore(Node newChild, Node refChild) => wrap_jso(_blink.BlinkNode.instance.insertBefore_Callback_2_(unwrap_jso(this), unwrap_jso(newChild), unwrap_jso(refChild)));
+  
   @DomName('Node.removeChild')
   @DocsEditable()
-  Node _removeChild(Node oldChild) => _blink.BlinkNode.instance.removeChild_Callback_1_(this, oldChild);
-
+  Node _removeChild(Node oldChild) => wrap_jso(_blink.BlinkNode.instance.removeChild_Callback_1_(unwrap_jso(this), unwrap_jso(oldChild)));
+  
   @DomName('Node.replaceChild')
   @DocsEditable()
-  Node _replaceChild(Node newChild, Node oldChild) => _blink.BlinkNode.instance.replaceChild_Callback_2_(this, newChild, oldChild);
-
+  Node _replaceChild(Node newChild, Node oldChild) => wrap_jso(_blink.BlinkNode.instance.replaceChild_Callback_2_(unwrap_jso(this), unwrap_jso(newChild), unwrap_jso(oldChild)));
+  
 }
 // 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
@@ -24834,32 +24864,32 @@
 
   @DomName('NodeIterator.pointerBeforeReferenceNode')
   @DocsEditable()
-  bool get pointerBeforeReferenceNode => _blink.BlinkNodeIterator.instance.pointerBeforeReferenceNode_Getter_(this);
-
+  bool get pointerBeforeReferenceNode => _blink.BlinkNodeIterator.instance.pointerBeforeReferenceNode_Getter_(unwrap_jso(this));
+  
   @DomName('NodeIterator.referenceNode')
   @DocsEditable()
-  Node get referenceNode => _blink.BlinkNodeIterator.instance.referenceNode_Getter_(this);
-
+  Node get referenceNode => wrap_jso(_blink.BlinkNodeIterator.instance.referenceNode_Getter_(unwrap_jso(this)));
+  
   @DomName('NodeIterator.root')
   @DocsEditable()
-  Node get root => _blink.BlinkNodeIterator.instance.root_Getter_(this);
-
+  Node get root => wrap_jso(_blink.BlinkNodeIterator.instance.root_Getter_(unwrap_jso(this)));
+  
   @DomName('NodeIterator.whatToShow')
   @DocsEditable()
-  int get whatToShow => _blink.BlinkNodeIterator.instance.whatToShow_Getter_(this);
-
+  int get whatToShow => _blink.BlinkNodeIterator.instance.whatToShow_Getter_(unwrap_jso(this));
+  
   @DomName('NodeIterator.detach')
   @DocsEditable()
-  void detach() => _blink.BlinkNodeIterator.instance.detach_Callback_0_(this);
-
+  void detach() => _blink.BlinkNodeIterator.instance.detach_Callback_0_(unwrap_jso(this));
+  
   @DomName('NodeIterator.nextNode')
   @DocsEditable()
-  Node nextNode() => _blink.BlinkNodeIterator.instance.nextNode_Callback_0_(this);
-
+  Node nextNode() => wrap_jso(_blink.BlinkNodeIterator.instance.nextNode_Callback_0_(unwrap_jso(this)));
+  
   @DomName('NodeIterator.previousNode')
   @DocsEditable()
-  Node previousNode() => _blink.BlinkNodeIterator.instance.previousNode_Callback_0_(this);
-
+  Node previousNode() => wrap_jso(_blink.BlinkNodeIterator.instance.previousNode_Callback_0_(unwrap_jso(this)));
+  
 }
 // 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
@@ -24876,16 +24906,16 @@
 
   @DomName('NodeList.length')
   @DocsEditable()
-  int get length => _blink.BlinkNodeList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkNodeList.instance.length_Getter_(unwrap_jso(this));
+  
   Node operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkNodeList.instance.item_Callback_1_(this, index);
+    return wrap_jso(_blink.BlinkNodeList.instance.item_Callback_1_(unwrap_jso(this), index));
   }
 
-  Node _nativeIndexedGetter(int index) => _blink.BlinkNodeList.instance.item_Callback_1_(this, index);
-
+  Node _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkNodeList.instance.item_Callback_1_(unwrap_jso(this), index));
+ 
   void operator[]=(int index, Node value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -24926,8 +24956,8 @@
 
   @DomName('NodeList.item')
   @DocsEditable()
-  Node _item(int index) => _blink.BlinkNodeList.instance.item_Callback_1_(this, index);
-
+  Node _item(int index) => wrap_jso(_blink.BlinkNodeList.instance.item_Callback_1_(unwrap_jso(this), index));
+  
 }
 // 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
@@ -25008,44 +25038,44 @@
   @DomName('Notification.body')
   @DocsEditable()
   @Experimental() // untriaged
-  String get body => _blink.BlinkNotification.instance.body_Getter_(this);
-
+  String get body => _blink.BlinkNotification.instance.body_Getter_(unwrap_jso(this));
+  
   @DomName('Notification.dir')
   @DocsEditable()
   @Experimental() // nonstandard
-  String get dir => _blink.BlinkNotification.instance.dir_Getter_(this);
-
+  String get dir => _blink.BlinkNotification.instance.dir_Getter_(unwrap_jso(this));
+  
   @DomName('Notification.icon')
   @DocsEditable()
   @Experimental() // untriaged
-  String get icon => _blink.BlinkNotification.instance.icon_Getter_(this);
-
+  String get icon => _blink.BlinkNotification.instance.icon_Getter_(unwrap_jso(this));
+  
   @DomName('Notification.lang')
   @DocsEditable()
   @Experimental() // untriaged
-  String get lang => _blink.BlinkNotification.instance.lang_Getter_(this);
-
+  String get lang => _blink.BlinkNotification.instance.lang_Getter_(unwrap_jso(this));
+  
   @DomName('Notification.permission')
   @DocsEditable()
   String get permission => _blink.BlinkNotification.instance.permission_Getter_();
-
+  
   @DomName('Notification.tag')
   @DocsEditable()
   @Experimental() // nonstandard
-  String get tag => _blink.BlinkNotification.instance.tag_Getter_(this);
-
+  String get tag => _blink.BlinkNotification.instance.tag_Getter_(unwrap_jso(this));
+  
   @DomName('Notification.title')
   @DocsEditable()
   @Experimental() // untriaged
-  String get title => _blink.BlinkNotification.instance.title_Getter_(this);
-
+  String get title => _blink.BlinkNotification.instance.title_Getter_(unwrap_jso(this));
+  
   @DomName('Notification.close')
   @DocsEditable()
-  void close() => _blink.BlinkNotification.instance.close_Callback_0_(this);
-
+  void close() => _blink.BlinkNotification.instance.close_Callback_0_(unwrap_jso(this));
+  
   static void _requestPermission([_NotificationPermissionCallback callback]) {
     if (callback != null) {
-      _blink.BlinkNotification.instance.requestPermission_Callback_1_(callback);
+      _blink.BlinkNotification.instance.requestPermission_Callback_1_(unwrap_jso(callback));
       return;
     }
     _blink.BlinkNotification.instance.requestPermission_Callback_0_();
@@ -25116,28 +25146,28 @@
 
   @DomName('HTMLOListElement.reversed')
   @DocsEditable()
-  bool get reversed => _blink.BlinkHTMLOListElement.instance.reversed_Getter_(this);
-
+  bool get reversed => _blink.BlinkHTMLOListElement.instance.reversed_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLOListElement.reversed')
   @DocsEditable()
-  void set reversed(bool value) => _blink.BlinkHTMLOListElement.instance.reversed_Setter_(this, value);
-
+  void set reversed(bool value) => _blink.BlinkHTMLOListElement.instance.reversed_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLOListElement.start')
   @DocsEditable()
-  int get start => _blink.BlinkHTMLOListElement.instance.start_Getter_(this);
-
+  int get start => _blink.BlinkHTMLOListElement.instance.start_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLOListElement.start')
   @DocsEditable()
-  void set start(int value) => _blink.BlinkHTMLOListElement.instance.start_Setter_(this, value);
-
+  void set start(int value) => _blink.BlinkHTMLOListElement.instance.start_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLOListElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLOListElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkHTMLOListElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLOListElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLOListElement.instance.type_Setter_(this, value);
-
+  void set type(String value) => _blink.BlinkHTMLOListElement.instance.type_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -25171,94 +25201,94 @@
 
   @DomName('HTMLObjectElement.data')
   @DocsEditable()
-  String get data => _blink.BlinkHTMLObjectElement.instance.data_Getter_(this);
-
+  String get data => _blink.BlinkHTMLObjectElement.instance.data_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLObjectElement.data')
   @DocsEditable()
-  void set data(String value) => _blink.BlinkHTMLObjectElement.instance.data_Setter_(this, value);
-
+  void set data(String value) => _blink.BlinkHTMLObjectElement.instance.data_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLObjectElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLObjectElement.instance.form_Getter_(this);
-
+  FormElement get form => wrap_jso(_blink.BlinkHTMLObjectElement.instance.form_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLObjectElement.height')
   @DocsEditable()
-  String get height => _blink.BlinkHTMLObjectElement.instance.height_Getter_(this);
-
+  String get height => _blink.BlinkHTMLObjectElement.instance.height_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLObjectElement.height')
   @DocsEditable()
-  void set height(String value) => _blink.BlinkHTMLObjectElement.instance.height_Setter_(this, value);
-
+  void set height(String value) => _blink.BlinkHTMLObjectElement.instance.height_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLObjectElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  String get integrity => _blink.BlinkHTMLObjectElement.instance.integrity_Getter_(this);
-
+  String get integrity => _blink.BlinkHTMLObjectElement.instance.integrity_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLObjectElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLObjectElement.instance.integrity_Setter_(this, value);
-
+  void set integrity(String value) => _blink.BlinkHTMLObjectElement.instance.integrity_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLObjectElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLObjectElement.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkHTMLObjectElement.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLObjectElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLObjectElement.instance.name_Setter_(this, value);
-
+  void set name(String value) => _blink.BlinkHTMLObjectElement.instance.name_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLObjectElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLObjectElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkHTMLObjectElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLObjectElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLObjectElement.instance.type_Setter_(this, value);
-
+  void set type(String value) => _blink.BlinkHTMLObjectElement.instance.type_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLObjectElement.useMap')
   @DocsEditable()
-  String get useMap => _blink.BlinkHTMLObjectElement.instance.useMap_Getter_(this);
-
+  String get useMap => _blink.BlinkHTMLObjectElement.instance.useMap_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLObjectElement.useMap')
   @DocsEditable()
-  void set useMap(String value) => _blink.BlinkHTMLObjectElement.instance.useMap_Setter_(this, value);
-
+  void set useMap(String value) => _blink.BlinkHTMLObjectElement.instance.useMap_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLObjectElement.validationMessage')
   @DocsEditable()
-  String get validationMessage => _blink.BlinkHTMLObjectElement.instance.validationMessage_Getter_(this);
-
+  String get validationMessage => _blink.BlinkHTMLObjectElement.instance.validationMessage_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLObjectElement.validity')
   @DocsEditable()
-  ValidityState get validity => _blink.BlinkHTMLObjectElement.instance.validity_Getter_(this);
-
+  ValidityState get validity => wrap_jso(_blink.BlinkHTMLObjectElement.instance.validity_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLObjectElement.width')
   @DocsEditable()
-  String get width => _blink.BlinkHTMLObjectElement.instance.width_Getter_(this);
-
+  String get width => _blink.BlinkHTMLObjectElement.instance.width_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLObjectElement.width')
   @DocsEditable()
-  void set width(String value) => _blink.BlinkHTMLObjectElement.instance.width_Setter_(this, value);
-
+  void set width(String value) => _blink.BlinkHTMLObjectElement.instance.width_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLObjectElement.willValidate')
   @DocsEditable()
-  bool get willValidate => _blink.BlinkHTMLObjectElement.instance.willValidate_Getter_(this);
-
+  bool get willValidate => _blink.BlinkHTMLObjectElement.instance.willValidate_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLObjectElement.__getter__')
   @DocsEditable()
-  bool __getter__(index_OR_name) => _blink.BlinkHTMLObjectElement.instance.$__getter___Callback_1_(this, index_OR_name);
-
+  bool __getter__(index_OR_name) => _blink.BlinkHTMLObjectElement.instance.$__getter___Callback_1_(unwrap_jso(this), unwrap_jso(index_OR_name));
+  
   @DomName('HTMLObjectElement.__setter__')
   @DocsEditable()
-  void __setter__(index_OR_name, Node value) => _blink.BlinkHTMLObjectElement.instance.$__setter___Callback_2_(this, index_OR_name, value);
-
+  void __setter__(index_OR_name, Node value) => _blink.BlinkHTMLObjectElement.instance.$__setter___Callback_2_(unwrap_jso(this), unwrap_jso(index_OR_name), unwrap_jso(value));
+  
   @DomName('HTMLObjectElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLObjectElement.instance.checkValidity_Callback_0_(this);
-
+  bool checkValidity() => _blink.BlinkHTMLObjectElement.instance.checkValidity_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLObjectElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLObjectElement.instance.setCustomValidity_Callback_1_(this, error);
-
+  void setCustomValidity(String error) => _blink.BlinkHTMLObjectElement.instance.setCustomValidity_Callback_1_(unwrap_jso(this), error);
+  
 }
 // 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
@@ -25285,20 +25315,20 @@
 
   @DomName('HTMLOptGroupElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLOptGroupElement.instance.disabled_Getter_(this);
-
+  bool get disabled => _blink.BlinkHTMLOptGroupElement.instance.disabled_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLOptGroupElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLOptGroupElement.instance.disabled_Setter_(this, value);
-
+  void set disabled(bool value) => _blink.BlinkHTMLOptGroupElement.instance.disabled_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLOptGroupElement.label')
   @DocsEditable()
-  String get label => _blink.BlinkHTMLOptGroupElement.instance.label_Getter_(this);
-
+  String get label => _blink.BlinkHTMLOptGroupElement.instance.label_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLOptGroupElement.label')
   @DocsEditable()
-  void set label(String value) => _blink.BlinkHTMLOptGroupElement.instance.label_Setter_(this, value);
-
+  void set label(String value) => _blink.BlinkHTMLOptGroupElement.instance.label_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -25325,52 +25355,52 @@
 
   @DomName('HTMLOptionElement.defaultSelected')
   @DocsEditable()
-  bool get defaultSelected => _blink.BlinkHTMLOptionElement.instance.defaultSelected_Getter_(this);
-
+  bool get defaultSelected => _blink.BlinkHTMLOptionElement.instance.defaultSelected_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLOptionElement.defaultSelected')
   @DocsEditable()
-  void set defaultSelected(bool value) => _blink.BlinkHTMLOptionElement.instance.defaultSelected_Setter_(this, value);
-
+  void set defaultSelected(bool value) => _blink.BlinkHTMLOptionElement.instance.defaultSelected_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLOptionElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLOptionElement.instance.disabled_Getter_(this);
-
+  bool get disabled => _blink.BlinkHTMLOptionElement.instance.disabled_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLOptionElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLOptionElement.instance.disabled_Setter_(this, value);
-
+  void set disabled(bool value) => _blink.BlinkHTMLOptionElement.instance.disabled_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLOptionElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLOptionElement.instance.form_Getter_(this);
-
+  FormElement get form => wrap_jso(_blink.BlinkHTMLOptionElement.instance.form_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLOptionElement.index')
   @DocsEditable()
-  int get index => _blink.BlinkHTMLOptionElement.instance.index_Getter_(this);
-
+  int get index => _blink.BlinkHTMLOptionElement.instance.index_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLOptionElement.label')
   @DocsEditable()
-  String get label => _blink.BlinkHTMLOptionElement.instance.label_Getter_(this);
-
+  String get label => _blink.BlinkHTMLOptionElement.instance.label_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLOptionElement.label')
   @DocsEditable()
-  void set label(String value) => _blink.BlinkHTMLOptionElement.instance.label_Setter_(this, value);
-
+  void set label(String value) => _blink.BlinkHTMLOptionElement.instance.label_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLOptionElement.selected')
   @DocsEditable()
-  bool get selected => _blink.BlinkHTMLOptionElement.instance.selected_Getter_(this);
-
+  bool get selected => _blink.BlinkHTMLOptionElement.instance.selected_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLOptionElement.selected')
   @DocsEditable()
-  void set selected(bool value) => _blink.BlinkHTMLOptionElement.instance.selected_Setter_(this, value);
-
+  void set selected(bool value) => _blink.BlinkHTMLOptionElement.instance.selected_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLOptionElement.value')
   @DocsEditable()
-  String get value => _blink.BlinkHTMLOptionElement.instance.value_Getter_(this);
-
+  String get value => _blink.BlinkHTMLOptionElement.instance.value_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLOptionElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLOptionElement.instance.value_Setter_(this, value);
-
+  void set value(String value) => _blink.BlinkHTMLOptionElement.instance.value_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -25403,65 +25433,65 @@
 
   @DomName('HTMLOutputElement.defaultValue')
   @DocsEditable()
-  String get defaultValue => _blink.BlinkHTMLOutputElement.instance.defaultValue_Getter_(this);
-
+  String get defaultValue => _blink.BlinkHTMLOutputElement.instance.defaultValue_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLOutputElement.defaultValue')
   @DocsEditable()
-  void set defaultValue(String value) => _blink.BlinkHTMLOutputElement.instance.defaultValue_Setter_(this, value);
-
+  void set defaultValue(String value) => _blink.BlinkHTMLOutputElement.instance.defaultValue_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLOutputElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLOutputElement.instance.form_Getter_(this);
-
+  FormElement get form => wrap_jso(_blink.BlinkHTMLOutputElement.instance.form_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLOutputElement.htmlFor')
   @DocsEditable()
-  DomSettableTokenList get htmlFor => _blink.BlinkHTMLOutputElement.instance.htmlFor_Getter_(this);
-
+  DomSettableTokenList get htmlFor => wrap_jso(_blink.BlinkHTMLOutputElement.instance.htmlFor_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLOutputElement.labels')
   @DocsEditable()
   @Unstable()
-  List<Node> get labels => _blink.BlinkHTMLOutputElement.instance.labels_Getter_(this);
-
+  List<Node> get labels => wrap_jso_list(_blink.BlinkHTMLOutputElement.instance.labels_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLOutputElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLOutputElement.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkHTMLOutputElement.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLOutputElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLOutputElement.instance.name_Setter_(this, value);
-
+  void set name(String value) => _blink.BlinkHTMLOutputElement.instance.name_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLOutputElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLOutputElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkHTMLOutputElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLOutputElement.validationMessage')
   @DocsEditable()
-  String get validationMessage => _blink.BlinkHTMLOutputElement.instance.validationMessage_Getter_(this);
-
+  String get validationMessage => _blink.BlinkHTMLOutputElement.instance.validationMessage_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLOutputElement.validity')
   @DocsEditable()
-  ValidityState get validity => _blink.BlinkHTMLOutputElement.instance.validity_Getter_(this);
-
+  ValidityState get validity => wrap_jso(_blink.BlinkHTMLOutputElement.instance.validity_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLOutputElement.value')
   @DocsEditable()
-  String get value => _blink.BlinkHTMLOutputElement.instance.value_Getter_(this);
-
+  String get value => _blink.BlinkHTMLOutputElement.instance.value_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLOutputElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLOutputElement.instance.value_Setter_(this, value);
-
+  void set value(String value) => _blink.BlinkHTMLOutputElement.instance.value_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLOutputElement.willValidate')
   @DocsEditable()
-  bool get willValidate => _blink.BlinkHTMLOutputElement.instance.willValidate_Getter_(this);
-
+  bool get willValidate => _blink.BlinkHTMLOutputElement.instance.willValidate_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLOutputElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLOutputElement.instance.checkValidity_Callback_0_(this);
-
+  bool checkValidity() => _blink.BlinkHTMLOutputElement.instance.checkValidity_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLOutputElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLOutputElement.instance.setCustomValidity_Callback_1_(this, error);
-
+  void setCustomValidity(String error) => _blink.BlinkHTMLOutputElement.instance.setCustomValidity_Callback_1_(unwrap_jso(this), error);
+  
 }
 // 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
@@ -25491,16 +25521,16 @@
 
   @DomName('OverflowEvent.horizontalOverflow')
   @DocsEditable()
-  bool get horizontalOverflow => _blink.BlinkOverflowEvent.instance.horizontalOverflow_Getter_(this);
-
+  bool get horizontalOverflow => _blink.BlinkOverflowEvent.instance.horizontalOverflow_Getter_(unwrap_jso(this));
+  
   @DomName('OverflowEvent.orient')
   @DocsEditable()
-  int get orient => _blink.BlinkOverflowEvent.instance.orient_Getter_(this);
-
+  int get orient => _blink.BlinkOverflowEvent.instance.orient_Getter_(unwrap_jso(this));
+  
   @DomName('OverflowEvent.verticalOverflow')
   @DocsEditable()
-  bool get verticalOverflow => _blink.BlinkOverflowEvent.instance.verticalOverflow_Getter_(this);
-
+  bool get verticalOverflow => _blink.BlinkOverflowEvent.instance.verticalOverflow_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -25519,8 +25549,8 @@
 
   @DomName('PageTransitionEvent.persisted')
   @DocsEditable()
-  bool get persisted => _blink.BlinkPageTransitionEvent.instance.persisted_Getter_(this);
-
+  bool get persisted => _blink.BlinkPageTransitionEvent.instance.persisted_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -25572,20 +25602,20 @@
 
   @DomName('HTMLParamElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLParamElement.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkHTMLParamElement.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLParamElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLParamElement.instance.name_Setter_(this, value);
-
+  void set name(String value) => _blink.BlinkHTMLParamElement.instance.name_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLParamElement.value')
   @DocsEditable()
-  String get value => _blink.BlinkHTMLParamElement.instance.value_Getter_(this);
-
+  String get value => _blink.BlinkHTMLParamElement.instance.value_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLParamElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLParamElement.instance.value_Setter_(this, value);
-
+  void set value(String value) => _blink.BlinkHTMLParamElement.instance.value_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -25663,58 +25693,58 @@
 
   void addPath(Path2D path, [Matrix transform]) {
     if (transform != null) {
-      _blink.BlinkPath2D.instance.addPath_Callback_2_(this, path, transform);
+      _blink.BlinkPath2D.instance.addPath_Callback_2_(unwrap_jso(this), unwrap_jso(path), unwrap_jso(transform));
       return;
     }
-    _blink.BlinkPath2D.instance.addPath_Callback_1_(this, path);
+    _blink.BlinkPath2D.instance.addPath_Callback_1_(unwrap_jso(this), unwrap_jso(path));
     return;
   }
 
   @DomName('Path2D.arc')
   @DocsEditable()
   @Experimental() // untriaged
-  void arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkPath2D.instance.arc_Callback_6_(this, x, y, radius, startAngle, endAngle, anticlockwise);
-
+  void arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkPath2D.instance.arc_Callback_6_(unwrap_jso(this), x, y, radius, startAngle, endAngle, anticlockwise);
+  
   @DomName('Path2D.arcTo')
   @DocsEditable()
   @Experimental() // untriaged
-  void arcTo(num x1, num y1, num x2, num y2, num radius) => _blink.BlinkPath2D.instance.arcTo_Callback_5_(this, x1, y1, x2, y2, radius);
-
+  void arcTo(num x1, num y1, num x2, num y2, num radius) => _blink.BlinkPath2D.instance.arcTo_Callback_5_(unwrap_jso(this), x1, y1, x2, y2, radius);
+  
   @DomName('Path2D.bezierCurveTo')
   @DocsEditable()
   @Experimental() // untriaged
-  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) => _blink.BlinkPath2D.instance.bezierCurveTo_Callback_6_(this, cp1x, cp1y, cp2x, cp2y, x, y);
-
+  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) => _blink.BlinkPath2D.instance.bezierCurveTo_Callback_6_(unwrap_jso(this), cp1x, cp1y, cp2x, cp2y, x, y);
+  
   @DomName('Path2D.closePath')
   @DocsEditable()
   @Experimental() // untriaged
-  void closePath() => _blink.BlinkPath2D.instance.closePath_Callback_0_(this);
-
+  void closePath() => _blink.BlinkPath2D.instance.closePath_Callback_0_(unwrap_jso(this));
+  
   @DomName('Path2D.ellipse')
   @DocsEditable()
   @Experimental() // untriaged
-  void ellipse(num x, num y, num radiusX, num radiusY, num rotation, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkPath2D.instance.ellipse_Callback_8_(this, x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
-
+  void ellipse(num x, num y, num radiusX, num radiusY, num rotation, num startAngle, num endAngle, bool anticlockwise) => _blink.BlinkPath2D.instance.ellipse_Callback_8_(unwrap_jso(this), x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
+  
   @DomName('Path2D.lineTo')
   @DocsEditable()
   @Experimental() // untriaged
-  void lineTo(num x, num y) => _blink.BlinkPath2D.instance.lineTo_Callback_2_(this, x, y);
-
+  void lineTo(num x, num y) => _blink.BlinkPath2D.instance.lineTo_Callback_2_(unwrap_jso(this), x, y);
+  
   @DomName('Path2D.moveTo')
   @DocsEditable()
   @Experimental() // untriaged
-  void moveTo(num x, num y) => _blink.BlinkPath2D.instance.moveTo_Callback_2_(this, x, y);
-
+  void moveTo(num x, num y) => _blink.BlinkPath2D.instance.moveTo_Callback_2_(unwrap_jso(this), x, y);
+  
   @DomName('Path2D.quadraticCurveTo')
   @DocsEditable()
   @Experimental() // untriaged
-  void quadraticCurveTo(num cpx, num cpy, num x, num y) => _blink.BlinkPath2D.instance.quadraticCurveTo_Callback_4_(this, cpx, cpy, x, y);
-
+  void quadraticCurveTo(num cpx, num cpy, num x, num y) => _blink.BlinkPath2D.instance.quadraticCurveTo_Callback_4_(unwrap_jso(this), cpx, cpy, x, y);
+  
   @DomName('Path2D.rect')
   @DocsEditable()
   @Experimental() // untriaged
-  void rect(num x, num y, num width, num height) => _blink.BlinkPath2D.instance.rect_Callback_4_(this, x, y, width, height);
-
+  void rect(num x, num y, num width, num height) => _blink.BlinkPath2D.instance.rect_Callback_4_(unwrap_jso(this), x, y, width, height);
+  
 }
 // 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
@@ -25752,78 +25782,78 @@
   @DomName('Performance.memory')
   @DocsEditable()
   @Experimental() // nonstandard
-  MemoryInfo get memory => _blink.BlinkPerformance.instance.memory_Getter_(this);
-
+  MemoryInfo get memory => wrap_jso(_blink.BlinkPerformance.instance.memory_Getter_(unwrap_jso(this)));
+  
   @DomName('Performance.navigation')
   @DocsEditable()
-  PerformanceNavigation get navigation => _blink.BlinkPerformance.instance.navigation_Getter_(this);
-
+  PerformanceNavigation get navigation => wrap_jso(_blink.BlinkPerformance.instance.navigation_Getter_(unwrap_jso(this)));
+  
   @DomName('Performance.timing')
   @DocsEditable()
-  PerformanceTiming get timing => _blink.BlinkPerformance.instance.timing_Getter_(this);
-
+  PerformanceTiming get timing => wrap_jso(_blink.BlinkPerformance.instance.timing_Getter_(unwrap_jso(this)));
+  
   @DomName('Performance.clearMarks')
   @DocsEditable()
   // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html#extensions-performance-interface
   @Experimental()
-  void clearMarks(String markName) => _blink.BlinkPerformance.instance.clearMarks_Callback_1_(this, markName);
-
+  void clearMarks(String markName) => _blink.BlinkPerformance.instance.clearMarks_Callback_1_(unwrap_jso(this), markName);
+  
   @DomName('Performance.clearMeasures')
   @DocsEditable()
   // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html#extensions-performance-interface
   @Experimental()
-  void clearMeasures(String measureName) => _blink.BlinkPerformance.instance.clearMeasures_Callback_1_(this, measureName);
-
+  void clearMeasures(String measureName) => _blink.BlinkPerformance.instance.clearMeasures_Callback_1_(unwrap_jso(this), measureName);
+  
   @DomName('Performance.getEntries')
   @DocsEditable()
   // http://www.w3.org/TR/performance-timeline/#sec-window.performance-attribute
   @Experimental()
-  List<PerformanceEntry> getEntries() => _blink.BlinkPerformance.instance.getEntries_Callback_0_(this);
-
+  List<PerformanceEntry> getEntries() => _blink.BlinkPerformance.instance.getEntries_Callback_0_(unwrap_jso(this));
+  
   @DomName('Performance.getEntriesByName')
   @DocsEditable()
   // http://www.w3.org/TR/performance-timeline/#sec-window.performance-attribute
   @Experimental()
-  List<PerformanceEntry> getEntriesByName(String name, String entryType) => _blink.BlinkPerformance.instance.getEntriesByName_Callback_2_(this, name, entryType);
-
+  List<PerformanceEntry> getEntriesByName(String name, String entryType) => _blink.BlinkPerformance.instance.getEntriesByName_Callback_2_(unwrap_jso(this), name, entryType);
+  
   @DomName('Performance.getEntriesByType')
   @DocsEditable()
   // http://www.w3.org/TR/performance-timeline/#sec-window.performance-attribute
   @Experimental()
-  List<PerformanceEntry> getEntriesByType(String entryType) => _blink.BlinkPerformance.instance.getEntriesByType_Callback_1_(this, entryType);
-
+  List<PerformanceEntry> getEntriesByType(String entryType) => _blink.BlinkPerformance.instance.getEntriesByType_Callback_1_(unwrap_jso(this), entryType);
+  
   @DomName('Performance.mark')
   @DocsEditable()
   // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html#extensions-performance-interface
   @Experimental()
-  void mark(String markName) => _blink.BlinkPerformance.instance.mark_Callback_1_(this, markName);
-
+  void mark(String markName) => _blink.BlinkPerformance.instance.mark_Callback_1_(unwrap_jso(this), markName);
+  
   @DomName('Performance.measure')
   @DocsEditable()
   // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html#extensions-performance-interface
   @Experimental()
-  void measure(String measureName, String startMark, String endMark) => _blink.BlinkPerformance.instance.measure_Callback_3_(this, measureName, startMark, endMark);
-
+  void measure(String measureName, String startMark, String endMark) => _blink.BlinkPerformance.instance.measure_Callback_3_(unwrap_jso(this), measureName, startMark, endMark);
+  
   @DomName('Performance.now')
   @DocsEditable()
-  double now() => _blink.BlinkPerformance.instance.now_Callback_0_(this);
-
+  double now() => _blink.BlinkPerformance.instance.now_Callback_0_(unwrap_jso(this));
+  
   @DomName('Performance.webkitClearResourceTimings')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://www.w3c-test.org/webperf/specs/ResourceTiming/#extensions-performance-interface
-  void clearResourceTimings() => _blink.BlinkPerformance.instance.webkitClearResourceTimings_Callback_0_(this);
-
+  void clearResourceTimings() => _blink.BlinkPerformance.instance.webkitClearResourceTimings_Callback_0_(unwrap_jso(this));
+  
   @DomName('Performance.webkitSetResourceTimingBufferSize')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://www.w3c-test.org/webperf/specs/ResourceTiming/#performanceresourcetiming-methods
-  void setResourceTimingBufferSize(int maxSize) => _blink.BlinkPerformance.instance.webkitSetResourceTimingBufferSize_Callback_1_(this, maxSize);
-
+  void setResourceTimingBufferSize(int maxSize) => _blink.BlinkPerformance.instance.webkitSetResourceTimingBufferSize_Callback_1_(unwrap_jso(this), maxSize);
+  
   /// Stream of `resourcetimingbufferfull` events handled by this [Performance].
   @DomName('Performance.onwebkitresourcetimingbufferfull')
   @DocsEditable()
@@ -25849,20 +25879,20 @@
 
   @DomName('PerformanceEntry.duration')
   @DocsEditable()
-  double get duration => _blink.BlinkPerformanceEntry.instance.duration_Getter_(this);
-
+  double get duration => _blink.BlinkPerformanceEntry.instance.duration_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceEntry.entryType')
   @DocsEditable()
-  String get entryType => _blink.BlinkPerformanceEntry.instance.entryType_Getter_(this);
-
+  String get entryType => _blink.BlinkPerformanceEntry.instance.entryType_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceEntry.name')
   @DocsEditable()
-  String get name => _blink.BlinkPerformanceEntry.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkPerformanceEntry.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceEntry.startTime')
   @DocsEditable()
-  double get startTime => _blink.BlinkPerformanceEntry.instance.startTime_Getter_(this);
-
+  double get startTime => _blink.BlinkPerformanceEntry.instance.startTime_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -25928,12 +25958,12 @@
 
   @DomName('PerformanceNavigation.redirectCount')
   @DocsEditable()
-  int get redirectCount => _blink.BlinkPerformanceNavigation.instance.redirectCount_Getter_(this);
-
+  int get redirectCount => _blink.BlinkPerformanceNavigation.instance.redirectCount_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceNavigation.type')
   @DocsEditable()
-  int get type => _blink.BlinkPerformanceNavigation.instance.type_Getter_(this);
-
+  int get type => _blink.BlinkPerformanceNavigation.instance.type_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -25952,55 +25982,55 @@
 
   @DomName('PerformanceResourceTiming.connectEnd')
   @DocsEditable()
-  double get connectEnd => _blink.BlinkPerformanceResourceTiming.instance.connectEnd_Getter_(this);
-
+  double get connectEnd => _blink.BlinkPerformanceResourceTiming.instance.connectEnd_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceResourceTiming.connectStart')
   @DocsEditable()
-  double get connectStart => _blink.BlinkPerformanceResourceTiming.instance.connectStart_Getter_(this);
-
+  double get connectStart => _blink.BlinkPerformanceResourceTiming.instance.connectStart_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceResourceTiming.domainLookupEnd')
   @DocsEditable()
-  double get domainLookupEnd => _blink.BlinkPerformanceResourceTiming.instance.domainLookupEnd_Getter_(this);
-
+  double get domainLookupEnd => _blink.BlinkPerformanceResourceTiming.instance.domainLookupEnd_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceResourceTiming.domainLookupStart')
   @DocsEditable()
-  double get domainLookupStart => _blink.BlinkPerformanceResourceTiming.instance.domainLookupStart_Getter_(this);
-
+  double get domainLookupStart => _blink.BlinkPerformanceResourceTiming.instance.domainLookupStart_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceResourceTiming.fetchStart')
   @DocsEditable()
-  double get fetchStart => _blink.BlinkPerformanceResourceTiming.instance.fetchStart_Getter_(this);
-
+  double get fetchStart => _blink.BlinkPerformanceResourceTiming.instance.fetchStart_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceResourceTiming.initiatorType')
   @DocsEditable()
-  String get initiatorType => _blink.BlinkPerformanceResourceTiming.instance.initiatorType_Getter_(this);
-
+  String get initiatorType => _blink.BlinkPerformanceResourceTiming.instance.initiatorType_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceResourceTiming.redirectEnd')
   @DocsEditable()
-  double get redirectEnd => _blink.BlinkPerformanceResourceTiming.instance.redirectEnd_Getter_(this);
-
+  double get redirectEnd => _blink.BlinkPerformanceResourceTiming.instance.redirectEnd_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceResourceTiming.redirectStart')
   @DocsEditable()
-  double get redirectStart => _blink.BlinkPerformanceResourceTiming.instance.redirectStart_Getter_(this);
-
+  double get redirectStart => _blink.BlinkPerformanceResourceTiming.instance.redirectStart_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceResourceTiming.requestStart')
   @DocsEditable()
   @Experimental() // nonstandard
-  double get requestStart => _blink.BlinkPerformanceResourceTiming.instance.requestStart_Getter_(this);
-
+  double get requestStart => _blink.BlinkPerformanceResourceTiming.instance.requestStart_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceResourceTiming.responseEnd')
   @DocsEditable()
   @Experimental() // nonstandard
-  double get responseEnd => _blink.BlinkPerformanceResourceTiming.instance.responseEnd_Getter_(this);
-
+  double get responseEnd => _blink.BlinkPerformanceResourceTiming.instance.responseEnd_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceResourceTiming.responseStart')
   @DocsEditable()
   @Experimental() // nonstandard
-  double get responseStart => _blink.BlinkPerformanceResourceTiming.instance.responseStart_Getter_(this);
-
+  double get responseStart => _blink.BlinkPerformanceResourceTiming.instance.responseStart_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceResourceTiming.secureConnectionStart')
   @DocsEditable()
-  double get secureConnectionStart => _blink.BlinkPerformanceResourceTiming.instance.secureConnectionStart_Getter_(this);
-
+  double get secureConnectionStart => _blink.BlinkPerformanceResourceTiming.instance.secureConnectionStart_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -26018,88 +26048,88 @@
 
   @DomName('PerformanceTiming.connectEnd')
   @DocsEditable()
-  int get connectEnd => _blink.BlinkPerformanceTiming.instance.connectEnd_Getter_(this);
-
+  int get connectEnd => _blink.BlinkPerformanceTiming.instance.connectEnd_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.connectStart')
   @DocsEditable()
-  int get connectStart => _blink.BlinkPerformanceTiming.instance.connectStart_Getter_(this);
-
+  int get connectStart => _blink.BlinkPerformanceTiming.instance.connectStart_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.domComplete')
   @DocsEditable()
-  int get domComplete => _blink.BlinkPerformanceTiming.instance.domComplete_Getter_(this);
-
+  int get domComplete => _blink.BlinkPerformanceTiming.instance.domComplete_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.domContentLoadedEventEnd')
   @DocsEditable()
-  int get domContentLoadedEventEnd => _blink.BlinkPerformanceTiming.instance.domContentLoadedEventEnd_Getter_(this);
-
+  int get domContentLoadedEventEnd => _blink.BlinkPerformanceTiming.instance.domContentLoadedEventEnd_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.domContentLoadedEventStart')
   @DocsEditable()
-  int get domContentLoadedEventStart => _blink.BlinkPerformanceTiming.instance.domContentLoadedEventStart_Getter_(this);
-
+  int get domContentLoadedEventStart => _blink.BlinkPerformanceTiming.instance.domContentLoadedEventStart_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.domInteractive')
   @DocsEditable()
-  int get domInteractive => _blink.BlinkPerformanceTiming.instance.domInteractive_Getter_(this);
-
+  int get domInteractive => _blink.BlinkPerformanceTiming.instance.domInteractive_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.domLoading')
   @DocsEditable()
-  int get domLoading => _blink.BlinkPerformanceTiming.instance.domLoading_Getter_(this);
-
+  int get domLoading => _blink.BlinkPerformanceTiming.instance.domLoading_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.domainLookupEnd')
   @DocsEditable()
-  int get domainLookupEnd => _blink.BlinkPerformanceTiming.instance.domainLookupEnd_Getter_(this);
-
+  int get domainLookupEnd => _blink.BlinkPerformanceTiming.instance.domainLookupEnd_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.domainLookupStart')
   @DocsEditable()
-  int get domainLookupStart => _blink.BlinkPerformanceTiming.instance.domainLookupStart_Getter_(this);
-
+  int get domainLookupStart => _blink.BlinkPerformanceTiming.instance.domainLookupStart_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.fetchStart')
   @DocsEditable()
-  int get fetchStart => _blink.BlinkPerformanceTiming.instance.fetchStart_Getter_(this);
-
+  int get fetchStart => _blink.BlinkPerformanceTiming.instance.fetchStart_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.loadEventEnd')
   @DocsEditable()
-  int get loadEventEnd => _blink.BlinkPerformanceTiming.instance.loadEventEnd_Getter_(this);
-
+  int get loadEventEnd => _blink.BlinkPerformanceTiming.instance.loadEventEnd_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.loadEventStart')
   @DocsEditable()
-  int get loadEventStart => _blink.BlinkPerformanceTiming.instance.loadEventStart_Getter_(this);
-
+  int get loadEventStart => _blink.BlinkPerformanceTiming.instance.loadEventStart_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.navigationStart')
   @DocsEditable()
-  int get navigationStart => _blink.BlinkPerformanceTiming.instance.navigationStart_Getter_(this);
-
+  int get navigationStart => _blink.BlinkPerformanceTiming.instance.navigationStart_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.redirectEnd')
   @DocsEditable()
-  int get redirectEnd => _blink.BlinkPerformanceTiming.instance.redirectEnd_Getter_(this);
-
+  int get redirectEnd => _blink.BlinkPerformanceTiming.instance.redirectEnd_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.redirectStart')
   @DocsEditable()
-  int get redirectStart => _blink.BlinkPerformanceTiming.instance.redirectStart_Getter_(this);
-
+  int get redirectStart => _blink.BlinkPerformanceTiming.instance.redirectStart_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.requestStart')
   @DocsEditable()
-  int get requestStart => _blink.BlinkPerformanceTiming.instance.requestStart_Getter_(this);
-
+  int get requestStart => _blink.BlinkPerformanceTiming.instance.requestStart_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.responseEnd')
   @DocsEditable()
-  int get responseEnd => _blink.BlinkPerformanceTiming.instance.responseEnd_Getter_(this);
-
+  int get responseEnd => _blink.BlinkPerformanceTiming.instance.responseEnd_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.responseStart')
   @DocsEditable()
-  int get responseStart => _blink.BlinkPerformanceTiming.instance.responseStart_Getter_(this);
-
+  int get responseStart => _blink.BlinkPerformanceTiming.instance.responseStart_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.secureConnectionStart')
   @DocsEditable()
-  int get secureConnectionStart => _blink.BlinkPerformanceTiming.instance.secureConnectionStart_Getter_(this);
-
+  int get secureConnectionStart => _blink.BlinkPerformanceTiming.instance.secureConnectionStart_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.unloadEventEnd')
   @DocsEditable()
-  int get unloadEventEnd => _blink.BlinkPerformanceTiming.instance.unloadEventEnd_Getter_(this);
-
+  int get unloadEventEnd => _blink.BlinkPerformanceTiming.instance.unloadEventEnd_Getter_(unwrap_jso(this));
+  
   @DomName('PerformanceTiming.unloadEventStart')
   @DocsEditable()
-  int get unloadEventStart => _blink.BlinkPerformanceTiming.instance.unloadEventStart_Getter_(this);
-
+  int get unloadEventStart => _blink.BlinkPerformanceTiming.instance.unloadEventStart_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -26138,32 +26168,32 @@
 
   @DomName('Plugin.description')
   @DocsEditable()
-  String get description => _blink.BlinkPlugin.instance.description_Getter_(this);
-
+  String get description => _blink.BlinkPlugin.instance.description_Getter_(unwrap_jso(this));
+  
   @DomName('Plugin.filename')
   @DocsEditable()
-  String get filename => _blink.BlinkPlugin.instance.filename_Getter_(this);
-
+  String get filename => _blink.BlinkPlugin.instance.filename_Getter_(unwrap_jso(this));
+  
   @DomName('Plugin.length')
   @DocsEditable()
-  int get length => _blink.BlinkPlugin.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkPlugin.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('Plugin.name')
   @DocsEditable()
-  String get name => _blink.BlinkPlugin.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkPlugin.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('Plugin.__getter__')
   @DocsEditable()
-  MimeType __getter__(String name) => _blink.BlinkPlugin.instance.$__getter___Callback_1_(this, name);
-
+  MimeType __getter__(String name) => wrap_jso(_blink.BlinkPlugin.instance.$__getter___Callback_1_(unwrap_jso(this), name));
+  
   @DomName('Plugin.item')
   @DocsEditable()
-  MimeType item(int index) => _blink.BlinkPlugin.instance.item_Callback_1_(this, index);
-
+  MimeType item(int index) => wrap_jso(_blink.BlinkPlugin.instance.item_Callback_1_(unwrap_jso(this), index));
+  
   @DomName('Plugin.namedItem')
   @DocsEditable()
-  MimeType namedItem(String name) => _blink.BlinkPlugin.instance.namedItem_Callback_1_(this, name);
-
+  MimeType namedItem(String name) => wrap_jso(_blink.BlinkPlugin.instance.namedItem_Callback_1_(unwrap_jso(this), name));
+  
 }
 // 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
@@ -26181,16 +26211,16 @@
 
   @DomName('PluginArray.length')
   @DocsEditable()
-  int get length => _blink.BlinkPluginArray.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkPluginArray.instance.length_Getter_(unwrap_jso(this));
+  
   Plugin operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkPluginArray.instance.item_Callback_1_(this, index);
+    return wrap_jso(_blink.BlinkPluginArray.instance.item_Callback_1_(unwrap_jso(this), index));
   }
 
-  Plugin _nativeIndexedGetter(int index) => _blink.BlinkPluginArray.instance.item_Callback_1_(this, index);
-
+  Plugin _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkPluginArray.instance.item_Callback_1_(unwrap_jso(this), index));
+ 
   void operator[]=(int index, Plugin value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -26231,20 +26261,20 @@
 
   @DomName('PluginArray.__getter__')
   @DocsEditable()
-  Plugin __getter__(String name) => _blink.BlinkPluginArray.instance.$__getter___Callback_1_(this, name);
-
+  Plugin __getter__(String name) => wrap_jso(_blink.BlinkPluginArray.instance.$__getter___Callback_1_(unwrap_jso(this), name));
+  
   @DomName('PluginArray.item')
   @DocsEditable()
-  Plugin item(int index) => _blink.BlinkPluginArray.instance.item_Callback_1_(this, index);
-
+  Plugin item(int index) => wrap_jso(_blink.BlinkPluginArray.instance.item_Callback_1_(unwrap_jso(this), index));
+  
   @DomName('PluginArray.namedItem')
   @DocsEditable()
-  Plugin namedItem(String name) => _blink.BlinkPluginArray.instance.namedItem_Callback_1_(this, name);
-
+  Plugin namedItem(String name) => wrap_jso(_blink.BlinkPluginArray.instance.namedItem_Callback_1_(unwrap_jso(this), name));
+  
   @DomName('PluginArray.refresh')
   @DocsEditable()
-  void refresh(bool reload) => _blink.BlinkPluginArray.instance.refresh_Callback_1_(this, reload);
-
+  void refresh(bool reload) => _blink.BlinkPluginArray.instance.refresh_Callback_1_(unwrap_jso(this), reload);
+  
 }
 // 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
@@ -26269,18 +26299,18 @@
   @DomName('PluginPlaceholderElement.message')
   @DocsEditable()
   @Experimental() // untriaged
-  String get message => _blink.BlinkPluginPlaceholderElement.instance.message_Getter_(this);
-
+  String get message => _blink.BlinkPluginPlaceholderElement.instance.message_Getter_(unwrap_jso(this));
+  
   @DomName('PluginPlaceholderElement.message')
   @DocsEditable()
   @Experimental() // untriaged
-  void set message(String value) => _blink.BlinkPluginPlaceholderElement.instance.message_Setter_(this, value);
-
+  void set message(String value) => _blink.BlinkPluginPlaceholderElement.instance.message_Setter_(unwrap_jso(this), value);
+  
   @DomName('PluginPlaceholderElement.createdCallback')
   @DocsEditable()
   @Experimental() // untriaged
-  void createdCallback() => _blink.BlinkPluginPlaceholderElement.instance.createdCallback_Callback_0_(this);
-
+  void createdCallback() => _blink.BlinkPluginPlaceholderElement.instance.createdCallback_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -26301,8 +26331,8 @@
 
   @DomName('PopStateEvent.state')
   @DocsEditable()
-  Object get state => _blink.BlinkPopStateEvent.instance.state_Getter_(this);
-
+  Object get state => _blink.BlinkPopStateEvent.instance.state_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -26342,12 +26372,12 @@
 
   @DomName('PositionError.code')
   @DocsEditable()
-  int get code => _blink.BlinkPositionError.instance.code_Getter_(this);
-
+  int get code => _blink.BlinkPositionError.instance.code_Getter_(unwrap_jso(this));
+  
   @DomName('PositionError.message')
   @DocsEditable()
-  String get message => _blink.BlinkPositionError.instance.message_Getter_(this);
-
+  String get message => _blink.BlinkPositionError.instance.message_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -26415,12 +26445,12 @@
   @DomName('ProcessingInstruction.sheet')
   @DocsEditable()
   @Experimental() // non-standard
-  StyleSheet get sheet => _blink.BlinkProcessingInstruction.instance.sheet_Getter_(this);
-
+  StyleSheet get sheet => wrap_jso(_blink.BlinkProcessingInstruction.instance.sheet_Getter_(unwrap_jso(this)));
+  
   @DomName('ProcessingInstruction.target')
   @DocsEditable()
-  String get target => _blink.BlinkProcessingInstruction.instance.target_Getter_(this);
-
+  String get target => _blink.BlinkProcessingInstruction.instance.target_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -26455,28 +26485,28 @@
   @DomName('HTMLProgressElement.labels')
   @DocsEditable()
   @Unstable()
-  List<Node> get labels => _blink.BlinkHTMLProgressElement.instance.labels_Getter_(this);
-
+  List<Node> get labels => wrap_jso_list(_blink.BlinkHTMLProgressElement.instance.labels_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLProgressElement.max')
   @DocsEditable()
-  num get max => _blink.BlinkHTMLProgressElement.instance.max_Getter_(this);
-
+  num get max => _blink.BlinkHTMLProgressElement.instance.max_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLProgressElement.max')
   @DocsEditable()
-  void set max(num value) => _blink.BlinkHTMLProgressElement.instance.max_Setter_(this, value);
-
+  void set max(num value) => _blink.BlinkHTMLProgressElement.instance.max_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLProgressElement.position')
   @DocsEditable()
-  double get position => _blink.BlinkHTMLProgressElement.instance.position_Getter_(this);
-
+  double get position => _blink.BlinkHTMLProgressElement.instance.position_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLProgressElement.value')
   @DocsEditable()
-  num get value => _blink.BlinkHTMLProgressElement.instance.value_Getter_(this);
-
+  num get value => _blink.BlinkHTMLProgressElement.instance.value_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLProgressElement.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkHTMLProgressElement.instance.value_Setter_(this, value);
-
+  void set value(num value) => _blink.BlinkHTMLProgressElement.instance.value_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -26493,16 +26523,16 @@
 
   @DomName('ProgressEvent.lengthComputable')
   @DocsEditable()
-  bool get lengthComputable => _blink.BlinkProgressEvent.instance.lengthComputable_Getter_(this);
-
+  bool get lengthComputable => _blink.BlinkProgressEvent.instance.lengthComputable_Getter_(unwrap_jso(this));
+  
   @DomName('ProgressEvent.loaded')
   @DocsEditable()
-  int get loaded => _blink.BlinkProgressEvent.instance.loaded_Getter_(this);
-
+  int get loaded => _blink.BlinkProgressEvent.instance.loaded_Getter_(unwrap_jso(this));
+  
   @DomName('ProgressEvent.total')
   @DocsEditable()
-  int get total => _blink.BlinkProgressEvent.instance.total_Getter_(this);
-
+  int get total => _blink.BlinkProgressEvent.instance.total_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -26521,8 +26551,8 @@
   @DomName('PushEvent.data')
   @DocsEditable()
   @Experimental() // untriaged
-  String get data => _blink.BlinkPushEvent.instance.data_Getter_(this);
-
+  String get data => _blink.BlinkPushEvent.instance.data_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -26541,8 +26571,8 @@
   @DomName('PushManager.register')
   @DocsEditable()
   @Experimental() // untriaged
-  Future register(String senderId) => _blink.BlinkPushManager.instance.register_Callback_1_(this, senderId);
-
+  Future register(String senderId) => _blink.BlinkPushManager.instance.register_Callback_1_(unwrap_jso(this), senderId);
+  
 }
 // 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
@@ -26561,13 +26591,13 @@
   @DomName('PushRegistration.pushEndpoint')
   @DocsEditable()
   @Experimental() // untriaged
-  String get pushEndpoint => _blink.BlinkPushRegistration.instance.pushEndpoint_Getter_(this);
-
+  String get pushEndpoint => _blink.BlinkPushRegistration.instance.pushEndpoint_Getter_(unwrap_jso(this));
+  
   @DomName('PushRegistration.pushRegistrationId')
   @DocsEditable()
   @Experimental() // untriaged
-  String get pushRegistrationId => _blink.BlinkPushRegistration.instance.pushRegistrationId_Getter_(this);
-
+  String get pushRegistrationId => _blink.BlinkPushRegistration.instance.pushRegistrationId_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -26594,12 +26624,12 @@
 
   @DomName('HTMLQuoteElement.cite')
   @DocsEditable()
-  String get cite => _blink.BlinkHTMLQuoteElement.instance.cite_Getter_(this);
-
+  String get cite => _blink.BlinkHTMLQuoteElement.instance.cite_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLQuoteElement.cite')
   @DocsEditable()
-  void set cite(String value) => _blink.BlinkHTMLQuoteElement.instance.cite_Setter_(this, value);
-
+  void set cite(String value) => _blink.BlinkHTMLQuoteElement.instance.cite_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -26689,127 +26719,127 @@
 
   @DomName('Range.collapsed')
   @DocsEditable()
-  bool get collapsed => _blink.BlinkRange.instance.collapsed_Getter_(this);
-
+  bool get collapsed => _blink.BlinkRange.instance.collapsed_Getter_(unwrap_jso(this));
+  
   @DomName('Range.commonAncestorContainer')
   @DocsEditable()
-  Node get commonAncestorContainer => _blink.BlinkRange.instance.commonAncestorContainer_Getter_(this);
-
+  Node get commonAncestorContainer => wrap_jso(_blink.BlinkRange.instance.commonAncestorContainer_Getter_(unwrap_jso(this)));
+  
   @DomName('Range.endContainer')
   @DocsEditable()
-  Node get endContainer => _blink.BlinkRange.instance.endContainer_Getter_(this);
-
+  Node get endContainer => wrap_jso(_blink.BlinkRange.instance.endContainer_Getter_(unwrap_jso(this)));
+  
   @DomName('Range.endOffset')
   @DocsEditable()
-  int get endOffset => _blink.BlinkRange.instance.endOffset_Getter_(this);
-
+  int get endOffset => _blink.BlinkRange.instance.endOffset_Getter_(unwrap_jso(this));
+  
   @DomName('Range.startContainer')
   @DocsEditable()
-  Node get startContainer => _blink.BlinkRange.instance.startContainer_Getter_(this);
-
+  Node get startContainer => wrap_jso(_blink.BlinkRange.instance.startContainer_Getter_(unwrap_jso(this)));
+  
   @DomName('Range.startOffset')
   @DocsEditable()
-  int get startOffset => _blink.BlinkRange.instance.startOffset_Getter_(this);
-
+  int get startOffset => _blink.BlinkRange.instance.startOffset_Getter_(unwrap_jso(this));
+  
   @DomName('Range.cloneContents')
   @DocsEditable()
-  DocumentFragment cloneContents() => _blink.BlinkRange.instance.cloneContents_Callback_0_(this);
-
+  DocumentFragment cloneContents() => wrap_jso(_blink.BlinkRange.instance.cloneContents_Callback_0_(unwrap_jso(this)));
+  
   @DomName('Range.cloneRange')
   @DocsEditable()
-  Range cloneRange() => _blink.BlinkRange.instance.cloneRange_Callback_0_(this);
-
+  Range cloneRange() => wrap_jso(_blink.BlinkRange.instance.cloneRange_Callback_0_(unwrap_jso(this)));
+  
   void collapse([bool toStart]) {
     if (toStart != null) {
-      _blink.BlinkRange.instance.collapse_Callback_1_(this, toStart);
+      _blink.BlinkRange.instance.collapse_Callback_1_(unwrap_jso(this), toStart);
       return;
     }
-    _blink.BlinkRange.instance.collapse_Callback_0_(this);
+    _blink.BlinkRange.instance.collapse_Callback_0_(unwrap_jso(this));
     return;
   }
 
   @DomName('Range.compareBoundaryPoints')
   @DocsEditable()
   @Experimental() // untriaged
-  int compareBoundaryPoints(int how, Range sourceRange) => _blink.BlinkRange.instance.compareBoundaryPoints_Callback_2_(this, how, sourceRange);
-
+  int compareBoundaryPoints(int how, Range sourceRange) => _blink.BlinkRange.instance.compareBoundaryPoints_Callback_2_(unwrap_jso(this), how, unwrap_jso(sourceRange));
+  
   @DomName('Range.comparePoint')
   @DocsEditable()
-  int comparePoint(Node refNode, int offset) => _blink.BlinkRange.instance.comparePoint_Callback_2_(this, refNode, offset);
-
+  int comparePoint(Node refNode, int offset) => _blink.BlinkRange.instance.comparePoint_Callback_2_(unwrap_jso(this), unwrap_jso(refNode), offset);
+  
   @DomName('Range.createContextualFragment')
   @DocsEditable()
-  DocumentFragment createContextualFragment(String html) => _blink.BlinkRange.instance.createContextualFragment_Callback_1_(this, html);
-
+  DocumentFragment createContextualFragment(String html) => wrap_jso(_blink.BlinkRange.instance.createContextualFragment_Callback_1_(unwrap_jso(this), html));
+  
   @DomName('Range.deleteContents')
   @DocsEditable()
-  void deleteContents() => _blink.BlinkRange.instance.deleteContents_Callback_0_(this);
-
+  void deleteContents() => _blink.BlinkRange.instance.deleteContents_Callback_0_(unwrap_jso(this));
+  
   @DomName('Range.detach')
   @DocsEditable()
-  void detach() => _blink.BlinkRange.instance.detach_Callback_0_(this);
-
+  void detach() => _blink.BlinkRange.instance.detach_Callback_0_(unwrap_jso(this));
+  
   @DomName('Range.expand')
   @DocsEditable()
   @Experimental() // non-standard
-  void expand(String unit) => _blink.BlinkRange.instance.expand_Callback_1_(this, unit);
-
+  void expand(String unit) => _blink.BlinkRange.instance.expand_Callback_1_(unwrap_jso(this), unit);
+  
   @DomName('Range.extractContents')
   @DocsEditable()
-  DocumentFragment extractContents() => _blink.BlinkRange.instance.extractContents_Callback_0_(this);
-
+  DocumentFragment extractContents() => wrap_jso(_blink.BlinkRange.instance.extractContents_Callback_0_(unwrap_jso(this)));
+  
   @DomName('Range.getBoundingClientRect')
   @DocsEditable()
-  Rectangle getBoundingClientRect() => _blink.BlinkRange.instance.getBoundingClientRect_Callback_0_(this);
-
+  Rectangle getBoundingClientRect() => make_dart_rectangle(_blink.BlinkRange.instance.getBoundingClientRect_Callback_0_(unwrap_jso(this)));
+  
   @DomName('Range.getClientRects')
   @DocsEditable()
-  List<Rectangle> getClientRects() => _blink.BlinkRange.instance.getClientRects_Callback_0_(this);
-
+  List<Rectangle> getClientRects() => _blink.BlinkRange.instance.getClientRects_Callback_0_(unwrap_jso(this));
+  
   @DomName('Range.insertNode')
   @DocsEditable()
-  void insertNode(Node newNode) => _blink.BlinkRange.instance.insertNode_Callback_1_(this, newNode);
-
+  void insertNode(Node newNode) => _blink.BlinkRange.instance.insertNode_Callback_1_(unwrap_jso(this), unwrap_jso(newNode));
+  
   @DomName('Range.isPointInRange')
   @DocsEditable()
-  bool isPointInRange(Node refNode, int offset) => _blink.BlinkRange.instance.isPointInRange_Callback_2_(this, refNode, offset);
-
+  bool isPointInRange(Node refNode, int offset) => _blink.BlinkRange.instance.isPointInRange_Callback_2_(unwrap_jso(this), unwrap_jso(refNode), offset);
+  
   @DomName('Range.selectNode')
   @DocsEditable()
-  void selectNode(Node refNode) => _blink.BlinkRange.instance.selectNode_Callback_1_(this, refNode);
-
+  void selectNode(Node refNode) => _blink.BlinkRange.instance.selectNode_Callback_1_(unwrap_jso(this), unwrap_jso(refNode));
+  
   @DomName('Range.selectNodeContents')
   @DocsEditable()
-  void selectNodeContents(Node refNode) => _blink.BlinkRange.instance.selectNodeContents_Callback_1_(this, refNode);
-
+  void selectNodeContents(Node refNode) => _blink.BlinkRange.instance.selectNodeContents_Callback_1_(unwrap_jso(this), unwrap_jso(refNode));
+  
   @DomName('Range.setEnd')
   @DocsEditable()
-  void setEnd(Node refNode, int offset) => _blink.BlinkRange.instance.setEnd_Callback_2_(this, refNode, offset);
-
+  void setEnd(Node refNode, int offset) => _blink.BlinkRange.instance.setEnd_Callback_2_(unwrap_jso(this), unwrap_jso(refNode), offset);
+  
   @DomName('Range.setEndAfter')
   @DocsEditable()
-  void setEndAfter(Node refNode) => _blink.BlinkRange.instance.setEndAfter_Callback_1_(this, refNode);
-
+  void setEndAfter(Node refNode) => _blink.BlinkRange.instance.setEndAfter_Callback_1_(unwrap_jso(this), unwrap_jso(refNode));
+  
   @DomName('Range.setEndBefore')
   @DocsEditable()
-  void setEndBefore(Node refNode) => _blink.BlinkRange.instance.setEndBefore_Callback_1_(this, refNode);
-
+  void setEndBefore(Node refNode) => _blink.BlinkRange.instance.setEndBefore_Callback_1_(unwrap_jso(this), unwrap_jso(refNode));
+  
   @DomName('Range.setStart')
   @DocsEditable()
-  void setStart(Node refNode, int offset) => _blink.BlinkRange.instance.setStart_Callback_2_(this, refNode, offset);
-
+  void setStart(Node refNode, int offset) => _blink.BlinkRange.instance.setStart_Callback_2_(unwrap_jso(this), unwrap_jso(refNode), offset);
+  
   @DomName('Range.setStartAfter')
   @DocsEditable()
-  void setStartAfter(Node refNode) => _blink.BlinkRange.instance.setStartAfter_Callback_1_(this, refNode);
-
+  void setStartAfter(Node refNode) => _blink.BlinkRange.instance.setStartAfter_Callback_1_(unwrap_jso(this), unwrap_jso(refNode));
+  
   @DomName('Range.setStartBefore')
   @DocsEditable()
-  void setStartBefore(Node refNode) => _blink.BlinkRange.instance.setStartBefore_Callback_1_(this, refNode);
-
+  void setStartBefore(Node refNode) => _blink.BlinkRange.instance.setStartBefore_Callback_1_(unwrap_jso(this), unwrap_jso(refNode));
+  
   @DomName('Range.surroundContents')
   @DocsEditable()
-  void surroundContents(Node newParent) => _blink.BlinkRange.instance.surroundContents_Callback_1_(this, newParent);
-
+  void surroundContents(Node newParent) => _blink.BlinkRange.instance.surroundContents_Callback_1_(unwrap_jso(this), unwrap_jso(newParent));
+  
 
   /**
    * Checks if createContextualFragment is supported.
@@ -26837,28 +26867,28 @@
   @DomName('ReadableStream.closed')
   @DocsEditable()
   @Experimental() // untriaged
-  Future get closed => _blink.BlinkReadableStream.instance.closed_Getter_(this);
-
+  Future get closed => _blink.BlinkReadableStream.instance.closed_Getter_(unwrap_jso(this));
+  
   @DomName('ReadableStream.state')
   @DocsEditable()
   @Experimental() // untriaged
-  String get state => _blink.BlinkReadableStream.instance.state_Getter_(this);
-
+  String get state => _blink.BlinkReadableStream.instance.state_Getter_(unwrap_jso(this));
+  
   @DomName('ReadableStream.cancel')
   @DocsEditable()
   @Experimental() // untriaged
-  Future cancel(Object reason) => _blink.BlinkReadableStream.instance.cancel_Callback_1_(this, reason);
-
+  Future cancel(Object reason) => _blink.BlinkReadableStream.instance.cancel_Callback_1_(unwrap_jso(this), reason);
+  
   @DomName('ReadableStream.read')
   @DocsEditable()
   @Experimental() // untriaged
-  Object read() => _blink.BlinkReadableStream.instance.read_Callback_0_(this);
-
+  Object read() => wrap_jso(_blink.BlinkReadableStream.instance.read_Callback_0_(unwrap_jso(this)));
+  
   @DomName('ReadableStream.wait')
   @DocsEditable()
   @Experimental() // untriaged
-  Future wait() => _blink.BlinkReadableStream.instance.wait_Callback_0_(this);
-
+  Future wait() => _blink.BlinkReadableStream.instance.wait_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -26877,8 +26907,8 @@
   @DomName('RelatedEvent.relatedTarget')
   @DocsEditable()
   @Experimental() // untriaged
-  EventTarget get relatedTarget => _blink.BlinkRelatedEvent.instance.relatedTarget_Getter_(this);
-
+  EventTarget get relatedTarget => wrap_jso(_blink.BlinkRelatedEvent.instance.relatedTarget_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -26906,8 +26936,8 @@
 
   @DomName('ResourceProgressEvent.url')
   @DocsEditable()
-  String get url => _blink.BlinkResourceProgressEvent.instance.url_Getter_(this);
-
+  String get url => _blink.BlinkResourceProgressEvent.instance.url_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -26966,77 +26996,77 @@
 
   @DomName('RTCDataChannel.binaryType')
   @DocsEditable()
-  String get binaryType => _blink.BlinkRTCDataChannel.instance.binaryType_Getter_(this);
-
+  String get binaryType => _blink.BlinkRTCDataChannel.instance.binaryType_Getter_(unwrap_jso(this));
+  
   @DomName('RTCDataChannel.binaryType')
   @DocsEditable()
-  void set binaryType(String value) => _blink.BlinkRTCDataChannel.instance.binaryType_Setter_(this, value);
-
+  void set binaryType(String value) => _blink.BlinkRTCDataChannel.instance.binaryType_Setter_(unwrap_jso(this), value);
+  
   @DomName('RTCDataChannel.bufferedAmount')
   @DocsEditable()
-  int get bufferedAmount => _blink.BlinkRTCDataChannel.instance.bufferedAmount_Getter_(this);
-
+  int get bufferedAmount => _blink.BlinkRTCDataChannel.instance.bufferedAmount_Getter_(unwrap_jso(this));
+  
   @DomName('RTCDataChannel.id')
   @DocsEditable()
   @Experimental() // untriaged
-  int get id => _blink.BlinkRTCDataChannel.instance.id_Getter_(this);
-
+  int get id => _blink.BlinkRTCDataChannel.instance.id_Getter_(unwrap_jso(this));
+  
   @DomName('RTCDataChannel.label')
   @DocsEditable()
-  String get label => _blink.BlinkRTCDataChannel.instance.label_Getter_(this);
-
+  String get label => _blink.BlinkRTCDataChannel.instance.label_Getter_(unwrap_jso(this));
+  
   @DomName('RTCDataChannel.maxRetransmitTime')
   @DocsEditable()
   @Experimental() // untriaged
-  int get maxRetransmitTime => _blink.BlinkRTCDataChannel.instance.maxRetransmitTime_Getter_(this);
-
+  int get maxRetransmitTime => _blink.BlinkRTCDataChannel.instance.maxRetransmitTime_Getter_(unwrap_jso(this));
+  
   @DomName('RTCDataChannel.maxRetransmits')
   @DocsEditable()
   @Experimental() // untriaged
-  int get maxRetransmits => _blink.BlinkRTCDataChannel.instance.maxRetransmits_Getter_(this);
-
+  int get maxRetransmits => _blink.BlinkRTCDataChannel.instance.maxRetransmits_Getter_(unwrap_jso(this));
+  
   @DomName('RTCDataChannel.negotiated')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get negotiated => _blink.BlinkRTCDataChannel.instance.negotiated_Getter_(this);
-
+  bool get negotiated => _blink.BlinkRTCDataChannel.instance.negotiated_Getter_(unwrap_jso(this));
+  
   @DomName('RTCDataChannel.ordered')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get ordered => _blink.BlinkRTCDataChannel.instance.ordered_Getter_(this);
-
+  bool get ordered => _blink.BlinkRTCDataChannel.instance.ordered_Getter_(unwrap_jso(this));
+  
   @DomName('RTCDataChannel.protocol')
   @DocsEditable()
   @Experimental() // untriaged
-  String get protocol => _blink.BlinkRTCDataChannel.instance.protocol_Getter_(this);
-
+  String get protocol => _blink.BlinkRTCDataChannel.instance.protocol_Getter_(unwrap_jso(this));
+  
   @DomName('RTCDataChannel.readyState')
   @DocsEditable()
-  String get readyState => _blink.BlinkRTCDataChannel.instance.readyState_Getter_(this);
-
+  String get readyState => _blink.BlinkRTCDataChannel.instance.readyState_Getter_(unwrap_jso(this));
+  
   @DomName('RTCDataChannel.reliable')
   @DocsEditable()
-  bool get reliable => _blink.BlinkRTCDataChannel.instance.reliable_Getter_(this);
-
+  bool get reliable => _blink.BlinkRTCDataChannel.instance.reliable_Getter_(unwrap_jso(this));
+  
   @DomName('RTCDataChannel.close')
   @DocsEditable()
-  void close() => _blink.BlinkRTCDataChannel.instance.close_Callback_0_(this);
-
+  void close() => _blink.BlinkRTCDataChannel.instance.close_Callback_0_(unwrap_jso(this));
+  
   void send(data) {
     if ((data is String || data == null)) {
-      _blink.BlinkRTCDataChannel.instance.send_Callback_1_(this, data);
+      _blink.BlinkRTCDataChannel.instance.send_Callback_1_(unwrap_jso(this), unwrap_jso(data));
       return;
     }
     if ((data is Blob || data == null)) {
-      _blink.BlinkRTCDataChannel.instance.send_Callback_1_(this, data);
+      _blink.BlinkRTCDataChannel.instance.send_Callback_1_(unwrap_jso(this), unwrap_jso(data));
       return;
     }
     if ((data is TypedData || data == null)) {
-      _blink.BlinkRTCDataChannel.instance.send_Callback_1_(this, data);
+      _blink.BlinkRTCDataChannel.instance.send_Callback_1_(unwrap_jso(this), unwrap_jso(data));
       return;
     }
     if ((data is ByteBuffer || data == null)) {
-      _blink.BlinkRTCDataChannel.instance.send_Callback_1_(this, data);
+      _blink.BlinkRTCDataChannel.instance.send_Callback_1_(unwrap_jso(this), unwrap_jso(data));
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -27044,20 +27074,20 @@
 
   @DomName('RTCDataChannel.sendBlob')
   @DocsEditable()
-  void sendBlob(Blob data) => _blink.BlinkRTCDataChannel.instance.send_Callback_1_(this, data);
-
+  void sendBlob(Blob data) => _blink.BlinkRTCDataChannel.instance.send_Callback_1_(unwrap_jso(this), unwrap_jso(data));
+  
   @DomName('RTCDataChannel.sendByteBuffer')
   @DocsEditable()
-  void sendByteBuffer(ByteBuffer data) => _blink.BlinkRTCDataChannel.instance.send_Callback_1_(this, data);
-
+  void sendByteBuffer(ByteBuffer data) => _blink.BlinkRTCDataChannel.instance.send_Callback_1_(unwrap_jso(this), data);
+  
   @DomName('RTCDataChannel.sendString')
   @DocsEditable()
-  void sendString(String data) => _blink.BlinkRTCDataChannel.instance.send_Callback_1_(this, data);
-
+  void sendString(String data) => _blink.BlinkRTCDataChannel.instance.send_Callback_1_(unwrap_jso(this), data);
+  
   @DomName('RTCDataChannel.sendTypedData')
   @DocsEditable()
-  void sendTypedData(TypedData data) => _blink.BlinkRTCDataChannel.instance.send_Callback_1_(this, data);
-
+  void sendTypedData(TypedData data) => _blink.BlinkRTCDataChannel.instance.send_Callback_1_(unwrap_jso(this), unwrap_jso(data));
+  
   /// Stream of `close` events handled by this [RtcDataChannel].
   @DomName('RTCDataChannel.onclose')
   @DocsEditable()
@@ -27096,8 +27126,8 @@
 
   @DomName('RTCDataChannelEvent.channel')
   @DocsEditable()
-  RtcDataChannel get channel => _blink.BlinkRTCDataChannelEvent.instance.channel_Getter_(this);
-
+  RtcDataChannel get channel => wrap_jso(_blink.BlinkRTCDataChannelEvent.instance.channel_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -27126,34 +27156,34 @@
 
   @DomName('RTCDTMFSender.canInsertDTMF')
   @DocsEditable()
-  bool get canInsertDtmf => _blink.BlinkRTCDTMFSender.instance.canInsertDTMF_Getter_(this);
-
+  bool get canInsertDtmf => _blink.BlinkRTCDTMFSender.instance.canInsertDTMF_Getter_(unwrap_jso(this));
+  
   @DomName('RTCDTMFSender.duration')
   @DocsEditable()
-  int get duration => _blink.BlinkRTCDTMFSender.instance.duration_Getter_(this);
-
+  int get duration => _blink.BlinkRTCDTMFSender.instance.duration_Getter_(unwrap_jso(this));
+  
   @DomName('RTCDTMFSender.interToneGap')
   @DocsEditable()
-  int get interToneGap => _blink.BlinkRTCDTMFSender.instance.interToneGap_Getter_(this);
-
+  int get interToneGap => _blink.BlinkRTCDTMFSender.instance.interToneGap_Getter_(unwrap_jso(this));
+  
   @DomName('RTCDTMFSender.toneBuffer')
   @DocsEditable()
-  String get toneBuffer => _blink.BlinkRTCDTMFSender.instance.toneBuffer_Getter_(this);
-
+  String get toneBuffer => _blink.BlinkRTCDTMFSender.instance.toneBuffer_Getter_(unwrap_jso(this));
+  
   @DomName('RTCDTMFSender.track')
   @DocsEditable()
-  MediaStreamTrack get track => _blink.BlinkRTCDTMFSender.instance.track_Getter_(this);
-
+  MediaStreamTrack get track => wrap_jso(_blink.BlinkRTCDTMFSender.instance.track_Getter_(unwrap_jso(this)));
+  
   void insertDtmf(String tones, [int duration, int interToneGap]) {
     if (interToneGap != null) {
-      _blink.BlinkRTCDTMFSender.instance.insertDTMF_Callback_3_(this, tones, duration, interToneGap);
+      _blink.BlinkRTCDTMFSender.instance.insertDTMF_Callback_3_(unwrap_jso(this), tones, duration, interToneGap);
       return;
     }
     if (duration != null) {
-      _blink.BlinkRTCDTMFSender.instance.insertDTMF_Callback_2_(this, tones, duration);
+      _blink.BlinkRTCDTMFSender.instance.insertDTMF_Callback_2_(unwrap_jso(this), tones, duration);
       return;
     }
-    _blink.BlinkRTCDTMFSender.instance.insertDTMF_Callback_1_(this, tones);
+    _blink.BlinkRTCDTMFSender.instance.insertDTMF_Callback_1_(unwrap_jso(this), tones);
     return;
   }
 
@@ -27180,8 +27210,8 @@
 
   @DomName('RTCDTMFToneChangeEvent.tone')
   @DocsEditable()
-  String get tone => _blink.BlinkRTCDTMFToneChangeEvent.instance.tone_Getter_(this);
-
+  String get tone => _blink.BlinkRTCDTMFToneChangeEvent.instance.tone_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -27207,28 +27237,28 @@
 
   @DomName('RTCIceCandidate.candidate')
   @DocsEditable()
-  String get candidate => _blink.BlinkRTCIceCandidate.instance.candidate_Getter_(this);
-
+  String get candidate => _blink.BlinkRTCIceCandidate.instance.candidate_Getter_(unwrap_jso(this));
+  
   @DomName('RTCIceCandidate.candidate')
   @DocsEditable()
-  void set candidate(String value) => _blink.BlinkRTCIceCandidate.instance.candidate_Setter_(this, value);
-
+  void set candidate(String value) => _blink.BlinkRTCIceCandidate.instance.candidate_Setter_(unwrap_jso(this), value);
+  
   @DomName('RTCIceCandidate.sdpMLineIndex')
   @DocsEditable()
-  int get sdpMLineIndex => _blink.BlinkRTCIceCandidate.instance.sdpMLineIndex_Getter_(this);
-
+  int get sdpMLineIndex => _blink.BlinkRTCIceCandidate.instance.sdpMLineIndex_Getter_(unwrap_jso(this));
+  
   @DomName('RTCIceCandidate.sdpMLineIndex')
   @DocsEditable()
-  void set sdpMLineIndex(int value) => _blink.BlinkRTCIceCandidate.instance.sdpMLineIndex_Setter_(this, value);
-
+  void set sdpMLineIndex(int value) => _blink.BlinkRTCIceCandidate.instance.sdpMLineIndex_Setter_(unwrap_jso(this), value);
+  
   @DomName('RTCIceCandidate.sdpMid')
   @DocsEditable()
-  String get sdpMid => _blink.BlinkRTCIceCandidate.instance.sdpMid_Getter_(this);
-
+  String get sdpMid => _blink.BlinkRTCIceCandidate.instance.sdpMid_Getter_(unwrap_jso(this));
+  
   @DomName('RTCIceCandidate.sdpMid')
   @DocsEditable()
-  void set sdpMid(String value) => _blink.BlinkRTCIceCandidate.instance.sdpMid_Setter_(this, value);
-
+  void set sdpMid(String value) => _blink.BlinkRTCIceCandidate.instance.sdpMid_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -27247,8 +27277,8 @@
 
   @DomName('RTCIceCandidateEvent.candidate')
   @DocsEditable()
-  RtcIceCandidate get candidate => _blink.BlinkRTCIceCandidateEvent.instance.candidate_Getter_(this);
-
+  RtcIceCandidate get candidate => wrap_jso(_blink.BlinkRTCIceCandidateEvent.instance.candidate_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -27372,94 +27402,94 @@
 
   @DomName('RTCPeerConnection.iceConnectionState')
   @DocsEditable()
-  String get iceConnectionState => _blink.BlinkRTCPeerConnection.instance.iceConnectionState_Getter_(this);
-
+  String get iceConnectionState => _blink.BlinkRTCPeerConnection.instance.iceConnectionState_Getter_(unwrap_jso(this));
+  
   @DomName('RTCPeerConnection.iceGatheringState')
   @DocsEditable()
-  String get iceGatheringState => _blink.BlinkRTCPeerConnection.instance.iceGatheringState_Getter_(this);
-
+  String get iceGatheringState => _blink.BlinkRTCPeerConnection.instance.iceGatheringState_Getter_(unwrap_jso(this));
+  
   @DomName('RTCPeerConnection.localDescription')
   @DocsEditable()
-  RtcSessionDescription get localDescription => _blink.BlinkRTCPeerConnection.instance.localDescription_Getter_(this);
-
+  RtcSessionDescription get localDescription => wrap_jso(_blink.BlinkRTCPeerConnection.instance.localDescription_Getter_(unwrap_jso(this)));
+  
   @DomName('RTCPeerConnection.remoteDescription')
   @DocsEditable()
-  RtcSessionDescription get remoteDescription => _blink.BlinkRTCPeerConnection.instance.remoteDescription_Getter_(this);
-
+  RtcSessionDescription get remoteDescription => wrap_jso(_blink.BlinkRTCPeerConnection.instance.remoteDescription_Getter_(unwrap_jso(this)));
+  
   @DomName('RTCPeerConnection.signalingState')
   @DocsEditable()
-  String get signalingState => _blink.BlinkRTCPeerConnection.instance.signalingState_Getter_(this);
-
+  String get signalingState => _blink.BlinkRTCPeerConnection.instance.signalingState_Getter_(unwrap_jso(this));
+  
   @DomName('RTCPeerConnection.addIceCandidate')
   @DocsEditable()
-  void addIceCandidate(RtcIceCandidate candidate, VoidCallback successCallback, _RtcErrorCallback failureCallback) => _blink.BlinkRTCPeerConnection.instance.addIceCandidate_Callback_3_(this, candidate, successCallback, failureCallback);
-
+  void addIceCandidate(RtcIceCandidate candidate, VoidCallback successCallback, _RtcErrorCallback failureCallback) => _blink.BlinkRTCPeerConnection.instance.addIceCandidate_Callback_3_(unwrap_jso(this), unwrap_jso(candidate), unwrap_jso(successCallback), unwrap_jso(failureCallback));
+  
   void addStream(MediaStream stream, [Map mediaConstraints]) {
     if (mediaConstraints != null) {
-      _blink.BlinkRTCPeerConnection.instance.addStream_Callback_2_(this, stream, mediaConstraints);
+      _blink.BlinkRTCPeerConnection.instance.addStream_Callback_2_(unwrap_jso(this), unwrap_jso(stream), mediaConstraints);
       return;
     }
-    _blink.BlinkRTCPeerConnection.instance.addStream_Callback_1_(this, stream);
+    _blink.BlinkRTCPeerConnection.instance.addStream_Callback_1_(unwrap_jso(this), unwrap_jso(stream));
     return;
   }
 
   @DomName('RTCPeerConnection.close')
   @DocsEditable()
-  void close() => _blink.BlinkRTCPeerConnection.instance.close_Callback_0_(this);
-
+  void close() => _blink.BlinkRTCPeerConnection.instance.close_Callback_0_(unwrap_jso(this));
+  
   void _createAnswer(_RtcSessionDescriptionCallback successCallback, [_RtcErrorCallback failureCallback, Map mediaConstraints]) {
     if (mediaConstraints != null) {
-      _blink.BlinkRTCPeerConnection.instance.createAnswer_Callback_3_(this, successCallback, failureCallback, mediaConstraints);
+      _blink.BlinkRTCPeerConnection.instance.createAnswer_Callback_3_(unwrap_jso(this), unwrap_jso(successCallback), unwrap_jso(failureCallback), mediaConstraints);
       return;
     }
-    _blink.BlinkRTCPeerConnection.instance.createAnswer_Callback_2_(this, successCallback, failureCallback);
+    _blink.BlinkRTCPeerConnection.instance.createAnswer_Callback_2_(unwrap_jso(this), unwrap_jso(successCallback), unwrap_jso(failureCallback));
     return;
   }
 
   @DomName('RTCPeerConnection.createDTMFSender')
   @DocsEditable()
-  RtcDtmfSender createDtmfSender(MediaStreamTrack track) => _blink.BlinkRTCPeerConnection.instance.createDTMFSender_Callback_1_(this, track);
-
+  RtcDtmfSender createDtmfSender(MediaStreamTrack track) => _blink.BlinkRTCPeerConnection.instance.createDTMFSender_Callback_1_(unwrap_jso(this), unwrap_jso(track));
+  
   RtcDataChannel createDataChannel(String label, [Map options]) {
     if (options != null) {
-      return _blink.BlinkRTCPeerConnection.instance.createDataChannel_Callback_2_(this, label, options);
+      return _blink.BlinkRTCPeerConnection.instance.createDataChannel_Callback_2_(unwrap_jso(this), label, options);
     }
-    return _blink.BlinkRTCPeerConnection.instance.createDataChannel_Callback_1_(this, label);
+    return _blink.BlinkRTCPeerConnection.instance.createDataChannel_Callback_1_(unwrap_jso(this), label);
   }
 
   void _createOffer(_RtcSessionDescriptionCallback successCallback, [_RtcErrorCallback failureCallback, Map rtcOfferOptions]) {
     if (rtcOfferOptions != null) {
-      _blink.BlinkRTCPeerConnection.instance.createOffer_Callback_3_(this, successCallback, failureCallback, rtcOfferOptions);
+      _blink.BlinkRTCPeerConnection.instance.createOffer_Callback_3_(unwrap_jso(this), unwrap_jso(successCallback), unwrap_jso(failureCallback), rtcOfferOptions);
       return;
     }
-    _blink.BlinkRTCPeerConnection.instance.createOffer_Callback_2_(this, successCallback, failureCallback);
+    _blink.BlinkRTCPeerConnection.instance.createOffer_Callback_2_(unwrap_jso(this), unwrap_jso(successCallback), unwrap_jso(failureCallback));
     return;
   }
 
   @DomName('RTCPeerConnection.getLocalStreams')
   @DocsEditable()
-  List<MediaStream> getLocalStreams() => _blink.BlinkRTCPeerConnection.instance.getLocalStreams_Callback_0_(this);
-
+  List<MediaStream> getLocalStreams() => _blink.BlinkRTCPeerConnection.instance.getLocalStreams_Callback_0_(unwrap_jso(this));
+  
   @DomName('RTCPeerConnection.getRemoteStreams')
   @DocsEditable()
-  List<MediaStream> getRemoteStreams() => _blink.BlinkRTCPeerConnection.instance.getRemoteStreams_Callback_0_(this);
-
+  List<MediaStream> getRemoteStreams() => _blink.BlinkRTCPeerConnection.instance.getRemoteStreams_Callback_0_(unwrap_jso(this));
+  
   @DomName('RTCPeerConnection.getStats')
   @DocsEditable()
-  void _getStats(RtcStatsCallback successCallback, MediaStreamTrack selector) => _blink.BlinkRTCPeerConnection.instance.getStats_Callback_2_(this, successCallback, selector);
-
+  void _getStats(RtcStatsCallback successCallback, MediaStreamTrack selector) => _blink.BlinkRTCPeerConnection.instance.getStats_Callback_2_(unwrap_jso(this), unwrap_jso(successCallback), unwrap_jso(selector));
+  
   @DomName('RTCPeerConnection.getStreamById')
   @DocsEditable()
-  MediaStream getStreamById(String streamId) => _blink.BlinkRTCPeerConnection.instance.getStreamById_Callback_1_(this, streamId);
-
+  MediaStream getStreamById(String streamId) => wrap_jso(_blink.BlinkRTCPeerConnection.instance.getStreamById_Callback_1_(unwrap_jso(this), streamId));
+  
   @DomName('RTCPeerConnection.removeStream')
   @DocsEditable()
-  void removeStream(MediaStream stream) => _blink.BlinkRTCPeerConnection.instance.removeStream_Callback_1_(this, stream);
-
+  void removeStream(MediaStream stream) => _blink.BlinkRTCPeerConnection.instance.removeStream_Callback_1_(unwrap_jso(this), unwrap_jso(stream));
+  
   @DomName('RTCPeerConnection.setLocalDescription')
   @DocsEditable()
-  void _setLocalDescription(RtcSessionDescription description, [VoidCallback successCallback, _RtcErrorCallback failureCallback]) => _blink.BlinkRTCPeerConnection.instance.setLocalDescription_Callback_3_(this, description, successCallback, failureCallback);
-
+  void _setLocalDescription(RtcSessionDescription description, [VoidCallback successCallback, _RtcErrorCallback failureCallback]) => _blink.BlinkRTCPeerConnection.instance.setLocalDescription_Callback_3_(unwrap_jso(this), unwrap_jso(description), unwrap_jso(successCallback), unwrap_jso(failureCallback));
+  
   Future setLocalDescription(RtcSessionDescription description) {
     var completer = new Completer();
     _setLocalDescription(description,
@@ -27470,8 +27500,8 @@
 
   @DomName('RTCPeerConnection.setRemoteDescription')
   @DocsEditable()
-  void _setRemoteDescription(RtcSessionDescription description, [VoidCallback successCallback, _RtcErrorCallback failureCallback]) => _blink.BlinkRTCPeerConnection.instance.setRemoteDescription_Callback_3_(this, description, successCallback, failureCallback);
-
+  void _setRemoteDescription(RtcSessionDescription description, [VoidCallback successCallback, _RtcErrorCallback failureCallback]) => _blink.BlinkRTCPeerConnection.instance.setRemoteDescription_Callback_3_(unwrap_jso(this), unwrap_jso(description), unwrap_jso(successCallback), unwrap_jso(failureCallback));
+  
   Future setRemoteDescription(RtcSessionDescription description) {
     var completer = new Completer();
     _setRemoteDescription(description,
@@ -27482,14 +27512,14 @@
 
   void updateIce([Map configuration, Map mediaConstraints]) {
     if (mediaConstraints != null) {
-      _blink.BlinkRTCPeerConnection.instance.updateIce_Callback_2_(this, configuration, mediaConstraints);
+      _blink.BlinkRTCPeerConnection.instance.updateIce_Callback_2_(unwrap_jso(this), configuration, mediaConstraints);
       return;
     }
     if (configuration != null) {
-      _blink.BlinkRTCPeerConnection.instance.updateIce_Callback_1_(this, configuration);
+      _blink.BlinkRTCPeerConnection.instance.updateIce_Callback_1_(unwrap_jso(this), configuration);
       return;
     }
-    _blink.BlinkRTCPeerConnection.instance.updateIce_Callback_0_(this);
+    _blink.BlinkRTCPeerConnection.instance.updateIce_Callback_0_(unwrap_jso(this));
     return;
   }
 
@@ -27556,20 +27586,20 @@
 
   @DomName('RTCSessionDescription.sdp')
   @DocsEditable()
-  String get sdp => _blink.BlinkRTCSessionDescription.instance.sdp_Getter_(this);
-
+  String get sdp => _blink.BlinkRTCSessionDescription.instance.sdp_Getter_(unwrap_jso(this));
+  
   @DomName('RTCSessionDescription.sdp')
   @DocsEditable()
-  void set sdp(String value) => _blink.BlinkRTCSessionDescription.instance.sdp_Setter_(this, value);
-
+  void set sdp(String value) => _blink.BlinkRTCSessionDescription.instance.sdp_Setter_(unwrap_jso(this), value);
+  
   @DomName('RTCSessionDescription.type')
   @DocsEditable()
-  String get type => _blink.BlinkRTCSessionDescription.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkRTCSessionDescription.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('RTCSessionDescription.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkRTCSessionDescription.instance.type_Setter_(this, value);
-
+  void set type(String value) => _blink.BlinkRTCSessionDescription.instance.type_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -27588,32 +27618,32 @@
 
   @DomName('RTCStatsReport.id')
   @DocsEditable()
-  String get id => _blink.BlinkRTCStatsReport.instance.id_Getter_(this);
-
+  String get id => _blink.BlinkRTCStatsReport.instance.id_Getter_(unwrap_jso(this));
+  
   @DomName('RTCStatsReport.local')
   @DocsEditable()
-  RtcStatsReport get local => _blink.BlinkRTCStatsReport.instance.local_Getter_(this);
-
+  RtcStatsReport get local => wrap_jso(_blink.BlinkRTCStatsReport.instance.local_Getter_(unwrap_jso(this)));
+  
   @DomName('RTCStatsReport.remote')
   @DocsEditable()
-  RtcStatsReport get remote => _blink.BlinkRTCStatsReport.instance.remote_Getter_(this);
-
+  RtcStatsReport get remote => wrap_jso(_blink.BlinkRTCStatsReport.instance.remote_Getter_(unwrap_jso(this)));
+  
   @DomName('RTCStatsReport.timestamp')
   @DocsEditable()
-  DateTime get timestamp => _blink.BlinkRTCStatsReport.instance.timestamp_Getter_(this);
-
+  DateTime get timestamp => _blink.BlinkRTCStatsReport.instance.timestamp_Getter_(unwrap_jso(this));
+  
   @DomName('RTCStatsReport.type')
   @DocsEditable()
-  String get type => _blink.BlinkRTCStatsReport.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkRTCStatsReport.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('RTCStatsReport.names')
   @DocsEditable()
-  List<String> names() => _blink.BlinkRTCStatsReport.instance.names_Callback_0_(this);
-
+  List<String> names() => _blink.BlinkRTCStatsReport.instance.names_Callback_0_(unwrap_jso(this));
+  
   @DomName('RTCStatsReport.stat')
   @DocsEditable()
-  String stat(String name) => _blink.BlinkRTCStatsReport.instance.stat_Callback_1_(this, name);
-
+  String stat(String name) => _blink.BlinkRTCStatsReport.instance.stat_Callback_1_(unwrap_jso(this), name);
+  
 }
 // 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
@@ -27632,16 +27662,16 @@
 
   @DomName('RTCStatsResponse.__getter__')
   @DocsEditable()
-  RtcStatsReport __getter__(String name) => _blink.BlinkRTCStatsResponse.instance.$__getter___Callback_1_(this, name);
-
+  RtcStatsReport __getter__(String name) => _blink.BlinkRTCStatsResponse.instance.$__getter___Callback_1_(unwrap_jso(this), name);
+  
   @DomName('RTCStatsResponse.namedItem')
   @DocsEditable()
-  RtcStatsReport namedItem(String name) => _blink.BlinkRTCStatsResponse.instance.namedItem_Callback_1_(this, name);
-
+  RtcStatsReport namedItem(String name) => _blink.BlinkRTCStatsResponse.instance.namedItem_Callback_1_(unwrap_jso(this), name);
+  
   @DomName('RTCStatsResponse.result')
   @DocsEditable()
-  List<RtcStatsReport> result() => _blink.BlinkRTCStatsResponse.instance.result_Callback_0_(this);
-
+  List<RtcStatsReport> result() => _blink.BlinkRTCStatsResponse.instance.result_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -27663,43 +27693,43 @@
 
   @DomName('Screen.availHeight')
   @DocsEditable()
-  int get _availHeight => _blink.BlinkScreen.instance.availHeight_Getter_(this);
-
+  int get _availHeight => _blink.BlinkScreen.instance.availHeight_Getter_(unwrap_jso(this));
+  
   @DomName('Screen.availLeft')
   @DocsEditable()
   @Experimental() // nonstandard
-  int get _availLeft => _blink.BlinkScreen.instance.availLeft_Getter_(this);
-
+  int get _availLeft => _blink.BlinkScreen.instance.availLeft_Getter_(unwrap_jso(this));
+  
   @DomName('Screen.availTop')
   @DocsEditable()
   @Experimental() // nonstandard
-  int get _availTop => _blink.BlinkScreen.instance.availTop_Getter_(this);
-
+  int get _availTop => _blink.BlinkScreen.instance.availTop_Getter_(unwrap_jso(this));
+  
   @DomName('Screen.availWidth')
   @DocsEditable()
-  int get _availWidth => _blink.BlinkScreen.instance.availWidth_Getter_(this);
-
+  int get _availWidth => _blink.BlinkScreen.instance.availWidth_Getter_(unwrap_jso(this));
+  
   @DomName('Screen.colorDepth')
   @DocsEditable()
-  int get colorDepth => _blink.BlinkScreen.instance.colorDepth_Getter_(this);
-
+  int get colorDepth => _blink.BlinkScreen.instance.colorDepth_Getter_(unwrap_jso(this));
+  
   @DomName('Screen.height')
   @DocsEditable()
-  int get height => _blink.BlinkScreen.instance.height_Getter_(this);
-
+  int get height => _blink.BlinkScreen.instance.height_Getter_(unwrap_jso(this));
+  
   @DomName('Screen.orientation')
   @DocsEditable()
   @Experimental() // untriaged
-  ScreenOrientation get orientation => _blink.BlinkScreen.instance.orientation_Getter_(this);
-
+  ScreenOrientation get orientation => wrap_jso(_blink.BlinkScreen.instance.orientation_Getter_(unwrap_jso(this)));
+  
   @DomName('Screen.pixelDepth')
   @DocsEditable()
-  int get pixelDepth => _blink.BlinkScreen.instance.pixelDepth_Getter_(this);
-
+  int get pixelDepth => _blink.BlinkScreen.instance.pixelDepth_Getter_(unwrap_jso(this));
+  
   @DomName('Screen.width')
   @DocsEditable()
-  int get width => _blink.BlinkScreen.instance.width_Getter_(this);
-}
+  int get width => _blink.BlinkScreen.instance.width_Getter_(unwrap_jso(this));
+  }
 // 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.
@@ -27722,23 +27752,23 @@
   @DomName('ScreenOrientation.angle')
   @DocsEditable()
   @Experimental() // untriaged
-  int get angle => _blink.BlinkScreenOrientation.instance.angle_Getter_(this);
-
+  int get angle => _blink.BlinkScreenOrientation.instance.angle_Getter_(unwrap_jso(this));
+  
   @DomName('ScreenOrientation.type')
   @DocsEditable()
   @Experimental() // untriaged
-  String get type => _blink.BlinkScreenOrientation.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkScreenOrientation.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('ScreenOrientation.lock')
   @DocsEditable()
   @Experimental() // untriaged
-  Future lock(String orientation) => _blink.BlinkScreenOrientation.instance.lock_Callback_1_(this, orientation);
-
+  Future lock(String orientation) => _blink.BlinkScreenOrientation.instance.lock_Callback_1_(unwrap_jso(this), orientation);
+  
   @DomName('ScreenOrientation.unlock')
   @DocsEditable()
   @Experimental() // untriaged
-  void unlock() => _blink.BlinkScreenOrientation.instance.unlock_Callback_0_(this);
-
+  void unlock() => _blink.BlinkScreenOrientation.instance.unlock_Callback_0_(unwrap_jso(this));
+  
   @DomName('ScreenOrientation.onchange')
   @DocsEditable()
   @Experimental() // untriaged
@@ -27770,78 +27800,78 @@
 
   @DomName('HTMLScriptElement.async')
   @DocsEditable()
-  bool get async => _blink.BlinkHTMLScriptElement.instance.async_Getter_(this);
-
+  bool get async => _blink.BlinkHTMLScriptElement.instance.async_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLScriptElement.async')
   @DocsEditable()
-  void set async(bool value) => _blink.BlinkHTMLScriptElement.instance.async_Setter_(this, value);
-
+  void set async(bool value) => _blink.BlinkHTMLScriptElement.instance.async_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLScriptElement.charset')
   @DocsEditable()
-  String get charset => _blink.BlinkHTMLScriptElement.instance.charset_Getter_(this);
-
+  String get charset => _blink.BlinkHTMLScriptElement.instance.charset_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLScriptElement.charset')
   @DocsEditable()
-  void set charset(String value) => _blink.BlinkHTMLScriptElement.instance.charset_Setter_(this, value);
-
+  void set charset(String value) => _blink.BlinkHTMLScriptElement.instance.charset_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLScriptElement.crossOrigin')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#attr-script-crossorigin
   @Experimental()
-  String get crossOrigin => _blink.BlinkHTMLScriptElement.instance.crossOrigin_Getter_(this);
-
+  String get crossOrigin => _blink.BlinkHTMLScriptElement.instance.crossOrigin_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLScriptElement.crossOrigin')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#attr-script-crossorigin
   @Experimental()
-  void set crossOrigin(String value) => _blink.BlinkHTMLScriptElement.instance.crossOrigin_Setter_(this, value);
-
+  void set crossOrigin(String value) => _blink.BlinkHTMLScriptElement.instance.crossOrigin_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLScriptElement.defer')
   @DocsEditable()
-  bool get defer => _blink.BlinkHTMLScriptElement.instance.defer_Getter_(this);
-
+  bool get defer => _blink.BlinkHTMLScriptElement.instance.defer_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLScriptElement.defer')
   @DocsEditable()
-  void set defer(bool value) => _blink.BlinkHTMLScriptElement.instance.defer_Setter_(this, value);
-
+  void set defer(bool value) => _blink.BlinkHTMLScriptElement.instance.defer_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLScriptElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  String get integrity => _blink.BlinkHTMLScriptElement.instance.integrity_Getter_(this);
-
+  String get integrity => _blink.BlinkHTMLScriptElement.instance.integrity_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLScriptElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLScriptElement.instance.integrity_Setter_(this, value);
-
+  void set integrity(String value) => _blink.BlinkHTMLScriptElement.instance.integrity_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLScriptElement.nonce')
   @DocsEditable()
   // https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#interaction-with-the-script-src-directive
   @Experimental()
-  String get nonce => _blink.BlinkHTMLScriptElement.instance.nonce_Getter_(this);
-
+  String get nonce => _blink.BlinkHTMLScriptElement.instance.nonce_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLScriptElement.nonce')
   @DocsEditable()
   // https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#interaction-with-the-script-src-directive
   @Experimental()
-  void set nonce(String value) => _blink.BlinkHTMLScriptElement.instance.nonce_Setter_(this, value);
-
+  void set nonce(String value) => _blink.BlinkHTMLScriptElement.instance.nonce_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLScriptElement.src')
   @DocsEditable()
-  String get src => _blink.BlinkHTMLScriptElement.instance.src_Getter_(this);
-
+  String get src => _blink.BlinkHTMLScriptElement.instance.src_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLScriptElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLScriptElement.instance.src_Setter_(this, value);
-
+  void set src(String value) => _blink.BlinkHTMLScriptElement.instance.src_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLScriptElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLScriptElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkHTMLScriptElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLScriptElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLScriptElement.instance.type_Setter_(this, value);
-
+  void set type(String value) => _blink.BlinkHTMLScriptElement.instance.type_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -27860,45 +27890,45 @@
 
   @DomName('SecurityPolicyViolationEvent.blockedURI')
   @DocsEditable()
-  String get blockedUri => _blink.BlinkSecurityPolicyViolationEvent.instance.blockedURI_Getter_(this);
-
+  String get blockedUri => _blink.BlinkSecurityPolicyViolationEvent.instance.blockedURI_Getter_(unwrap_jso(this));
+  
   @DomName('SecurityPolicyViolationEvent.columnNumber')
   @DocsEditable()
-  int get columnNumber => _blink.BlinkSecurityPolicyViolationEvent.instance.columnNumber_Getter_(this);
-
+  int get columnNumber => _blink.BlinkSecurityPolicyViolationEvent.instance.columnNumber_Getter_(unwrap_jso(this));
+  
   @DomName('SecurityPolicyViolationEvent.documentURI')
   @DocsEditable()
-  String get documentUri => _blink.BlinkSecurityPolicyViolationEvent.instance.documentURI_Getter_(this);
-
+  String get documentUri => _blink.BlinkSecurityPolicyViolationEvent.instance.documentURI_Getter_(unwrap_jso(this));
+  
   @DomName('SecurityPolicyViolationEvent.effectiveDirective')
   @DocsEditable()
-  String get effectiveDirective => _blink.BlinkSecurityPolicyViolationEvent.instance.effectiveDirective_Getter_(this);
-
+  String get effectiveDirective => _blink.BlinkSecurityPolicyViolationEvent.instance.effectiveDirective_Getter_(unwrap_jso(this));
+  
   @DomName('SecurityPolicyViolationEvent.lineNumber')
   @DocsEditable()
-  int get lineNumber => _blink.BlinkSecurityPolicyViolationEvent.instance.lineNumber_Getter_(this);
-
+  int get lineNumber => _blink.BlinkSecurityPolicyViolationEvent.instance.lineNumber_Getter_(unwrap_jso(this));
+  
   @DomName('SecurityPolicyViolationEvent.originalPolicy')
   @DocsEditable()
-  String get originalPolicy => _blink.BlinkSecurityPolicyViolationEvent.instance.originalPolicy_Getter_(this);
-
+  String get originalPolicy => _blink.BlinkSecurityPolicyViolationEvent.instance.originalPolicy_Getter_(unwrap_jso(this));
+  
   @DomName('SecurityPolicyViolationEvent.referrer')
   @DocsEditable()
-  String get referrer => _blink.BlinkSecurityPolicyViolationEvent.instance.referrer_Getter_(this);
-
+  String get referrer => _blink.BlinkSecurityPolicyViolationEvent.instance.referrer_Getter_(unwrap_jso(this));
+  
   @DomName('SecurityPolicyViolationEvent.sourceFile')
   @DocsEditable()
-  String get sourceFile => _blink.BlinkSecurityPolicyViolationEvent.instance.sourceFile_Getter_(this);
-
+  String get sourceFile => _blink.BlinkSecurityPolicyViolationEvent.instance.sourceFile_Getter_(unwrap_jso(this));
+  
   @DomName('SecurityPolicyViolationEvent.statusCode')
   @DocsEditable()
   @Experimental() // untriaged
-  int get statusCode => _blink.BlinkSecurityPolicyViolationEvent.instance.statusCode_Getter_(this);
-
+  int get statusCode => _blink.BlinkSecurityPolicyViolationEvent.instance.statusCode_Getter_(unwrap_jso(this));
+  
   @DomName('SecurityPolicyViolationEvent.violatedDirective')
   @DocsEditable()
-  String get violatedDirective => _blink.BlinkSecurityPolicyViolationEvent.instance.violatedDirective_Getter_(this);
-
+  String get violatedDirective => _blink.BlinkSecurityPolicyViolationEvent.instance.violatedDirective_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -27922,126 +27952,126 @@
 
   @DomName('HTMLSelectElement.autofocus')
   @DocsEditable()
-  bool get autofocus => _blink.BlinkHTMLSelectElement.instance.autofocus_Getter_(this);
-
+  bool get autofocus => _blink.BlinkHTMLSelectElement.instance.autofocus_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSelectElement.autofocus')
   @DocsEditable()
-  void set autofocus(bool value) => _blink.BlinkHTMLSelectElement.instance.autofocus_Setter_(this, value);
-
+  void set autofocus(bool value) => _blink.BlinkHTMLSelectElement.instance.autofocus_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLSelectElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLSelectElement.instance.disabled_Getter_(this);
-
+  bool get disabled => _blink.BlinkHTMLSelectElement.instance.disabled_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSelectElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLSelectElement.instance.disabled_Setter_(this, value);
-
+  void set disabled(bool value) => _blink.BlinkHTMLSelectElement.instance.disabled_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLSelectElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLSelectElement.instance.form_Getter_(this);
-
+  FormElement get form => wrap_jso(_blink.BlinkHTMLSelectElement.instance.form_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLSelectElement.labels')
   @DocsEditable()
   @Unstable()
-  List<Node> get labels => _blink.BlinkHTMLSelectElement.instance.labels_Getter_(this);
-
+  List<Node> get labels => wrap_jso_list(_blink.BlinkHTMLSelectElement.instance.labels_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLSelectElement.length')
   @DocsEditable()
-  int get length => _blink.BlinkHTMLSelectElement.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkHTMLSelectElement.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSelectElement.length')
   @DocsEditable()
-  void set length(int value) => _blink.BlinkHTMLSelectElement.instance.length_Setter_(this, value);
-
+  void set length(int value) => _blink.BlinkHTMLSelectElement.instance.length_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLSelectElement.multiple')
   @DocsEditable()
-  bool get multiple => _blink.BlinkHTMLSelectElement.instance.multiple_Getter_(this);
-
+  bool get multiple => _blink.BlinkHTMLSelectElement.instance.multiple_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSelectElement.multiple')
   @DocsEditable()
-  void set multiple(bool value) => _blink.BlinkHTMLSelectElement.instance.multiple_Setter_(this, value);
-
+  void set multiple(bool value) => _blink.BlinkHTMLSelectElement.instance.multiple_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLSelectElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLSelectElement.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkHTMLSelectElement.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSelectElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLSelectElement.instance.name_Setter_(this, value);
-
+  void set name(String value) => _blink.BlinkHTMLSelectElement.instance.name_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLSelectElement.required')
   @DocsEditable()
-  bool get required => _blink.BlinkHTMLSelectElement.instance.required_Getter_(this);
-
+  bool get required => _blink.BlinkHTMLSelectElement.instance.required_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSelectElement.required')
   @DocsEditable()
-  void set required(bool value) => _blink.BlinkHTMLSelectElement.instance.required_Setter_(this, value);
-
+  void set required(bool value) => _blink.BlinkHTMLSelectElement.instance.required_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLSelectElement.selectedIndex')
   @DocsEditable()
-  int get selectedIndex => _blink.BlinkHTMLSelectElement.instance.selectedIndex_Getter_(this);
-
+  int get selectedIndex => _blink.BlinkHTMLSelectElement.instance.selectedIndex_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSelectElement.selectedIndex')
   @DocsEditable()
-  void set selectedIndex(int value) => _blink.BlinkHTMLSelectElement.instance.selectedIndex_Setter_(this, value);
-
+  void set selectedIndex(int value) => _blink.BlinkHTMLSelectElement.instance.selectedIndex_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLSelectElement.size')
   @DocsEditable()
-  int get size => _blink.BlinkHTMLSelectElement.instance.size_Getter_(this);
-
+  int get size => _blink.BlinkHTMLSelectElement.instance.size_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSelectElement.size')
   @DocsEditable()
-  void set size(int value) => _blink.BlinkHTMLSelectElement.instance.size_Setter_(this, value);
-
+  void set size(int value) => _blink.BlinkHTMLSelectElement.instance.size_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLSelectElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLSelectElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkHTMLSelectElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSelectElement.validationMessage')
   @DocsEditable()
-  String get validationMessage => _blink.BlinkHTMLSelectElement.instance.validationMessage_Getter_(this);
-
+  String get validationMessage => _blink.BlinkHTMLSelectElement.instance.validationMessage_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSelectElement.validity')
   @DocsEditable()
-  ValidityState get validity => _blink.BlinkHTMLSelectElement.instance.validity_Getter_(this);
-
+  ValidityState get validity => wrap_jso(_blink.BlinkHTMLSelectElement.instance.validity_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLSelectElement.value')
   @DocsEditable()
-  String get value => _blink.BlinkHTMLSelectElement.instance.value_Getter_(this);
-
+  String get value => _blink.BlinkHTMLSelectElement.instance.value_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSelectElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLSelectElement.instance.value_Setter_(this, value);
-
+  void set value(String value) => _blink.BlinkHTMLSelectElement.instance.value_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLSelectElement.willValidate')
   @DocsEditable()
-  bool get willValidate => _blink.BlinkHTMLSelectElement.instance.willValidate_Getter_(this);
-
+  bool get willValidate => _blink.BlinkHTMLSelectElement.instance.willValidate_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSelectElement.__setter__')
   @DocsEditable()
-  void __setter__(int index, OptionElement value) => _blink.BlinkHTMLSelectElement.instance.$__setter___Callback_2_(this, index, value);
-
+  void __setter__(int index, OptionElement value) => _blink.BlinkHTMLSelectElement.instance.$__setter___Callback_2_(unwrap_jso(this), index, unwrap_jso(value));
+  
   @DomName('HTMLSelectElement.add')
   @DocsEditable()
   @Experimental() // untriaged
-  void add(HtmlElement element, int before) => _blink.BlinkHTMLSelectElement.instance.add_Callback_2_(this, element, before);
-
+  void add(HtmlElement element, int before) => _blink.BlinkHTMLSelectElement.instance.add_Callback_2_(unwrap_jso(this), unwrap_jso(element), before);
+  
   @DomName('HTMLSelectElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLSelectElement.instance.checkValidity_Callback_0_(this);
-
+  bool checkValidity() => _blink.BlinkHTMLSelectElement.instance.checkValidity_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLSelectElement.item')
   @DocsEditable()
-  Element item(int index) => _blink.BlinkHTMLSelectElement.instance.item_Callback_1_(this, index);
-
+  Element item(int index) => wrap_jso(_blink.BlinkHTMLSelectElement.instance.item_Callback_1_(unwrap_jso(this), index));
+  
   @DomName('HTMLSelectElement.namedItem')
   @DocsEditable()
-  Element namedItem(String name) => _blink.BlinkHTMLSelectElement.instance.namedItem_Callback_1_(this, name);
-
+  Element namedItem(String name) => wrap_jso(_blink.BlinkHTMLSelectElement.instance.namedItem_Callback_1_(unwrap_jso(this), name));
+  
   @DomName('HTMLSelectElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLSelectElement.instance.setCustomValidity_Callback_1_(this, error);
-
+  void setCustomValidity(String error) => _blink.BlinkHTMLSelectElement.instance.setCustomValidity_Callback_1_(unwrap_jso(this), error);
+  
 
   // Override default options, since IE returns SelectElement itself and it
   // does not operate as a List.
@@ -28076,125 +28106,125 @@
 
   @DomName('Selection.anchorNode')
   @DocsEditable()
-  Node get anchorNode => _blink.BlinkSelection.instance.anchorNode_Getter_(this);
-
+  Node get anchorNode => wrap_jso(_blink.BlinkSelection.instance.anchorNode_Getter_(unwrap_jso(this)));
+  
   @DomName('Selection.anchorOffset')
   @DocsEditable()
-  int get anchorOffset => _blink.BlinkSelection.instance.anchorOffset_Getter_(this);
-
+  int get anchorOffset => _blink.BlinkSelection.instance.anchorOffset_Getter_(unwrap_jso(this));
+  
   @DomName('Selection.baseNode')
   @DocsEditable()
   @Experimental() // non-standard
-  Node get baseNode => _blink.BlinkSelection.instance.baseNode_Getter_(this);
-
+  Node get baseNode => wrap_jso(_blink.BlinkSelection.instance.baseNode_Getter_(unwrap_jso(this)));
+  
   @DomName('Selection.baseOffset')
   @DocsEditable()
   @Experimental() // non-standard
-  int get baseOffset => _blink.BlinkSelection.instance.baseOffset_Getter_(this);
-
+  int get baseOffset => _blink.BlinkSelection.instance.baseOffset_Getter_(unwrap_jso(this));
+  
   @DomName('Selection.extentNode')
   @DocsEditable()
   @Experimental() // non-standard
-  Node get extentNode => _blink.BlinkSelection.instance.extentNode_Getter_(this);
-
+  Node get extentNode => wrap_jso(_blink.BlinkSelection.instance.extentNode_Getter_(unwrap_jso(this)));
+  
   @DomName('Selection.extentOffset')
   @DocsEditable()
   @Experimental() // non-standard
-  int get extentOffset => _blink.BlinkSelection.instance.extentOffset_Getter_(this);
-
+  int get extentOffset => _blink.BlinkSelection.instance.extentOffset_Getter_(unwrap_jso(this));
+  
   @DomName('Selection.focusNode')
   @DocsEditable()
-  Node get focusNode => _blink.BlinkSelection.instance.focusNode_Getter_(this);
-
+  Node get focusNode => wrap_jso(_blink.BlinkSelection.instance.focusNode_Getter_(unwrap_jso(this)));
+  
   @DomName('Selection.focusOffset')
   @DocsEditable()
-  int get focusOffset => _blink.BlinkSelection.instance.focusOffset_Getter_(this);
-
+  int get focusOffset => _blink.BlinkSelection.instance.focusOffset_Getter_(unwrap_jso(this));
+  
   @DomName('Selection.isCollapsed')
   @DocsEditable()
-  bool get isCollapsed => _blink.BlinkSelection.instance.isCollapsed_Getter_(this);
-
+  bool get isCollapsed => _blink.BlinkSelection.instance.isCollapsed_Getter_(unwrap_jso(this));
+  
   @DomName('Selection.rangeCount')
   @DocsEditable()
-  int get rangeCount => _blink.BlinkSelection.instance.rangeCount_Getter_(this);
-
+  int get rangeCount => _blink.BlinkSelection.instance.rangeCount_Getter_(unwrap_jso(this));
+  
   @DomName('Selection.type')
   @DocsEditable()
   @Experimental() // non-standard
-  String get type => _blink.BlinkSelection.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkSelection.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('Selection.addRange')
   @DocsEditable()
-  void addRange(Range range) => _blink.BlinkSelection.instance.addRange_Callback_1_(this, range);
-
+  void addRange(Range range) => _blink.BlinkSelection.instance.addRange_Callback_1_(unwrap_jso(this), unwrap_jso(range));
+  
   void collapse(Node node, [int offset]) {
     if (offset != null) {
-      _blink.BlinkSelection.instance.collapse_Callback_2_(this, node, offset);
+      _blink.BlinkSelection.instance.collapse_Callback_2_(unwrap_jso(this), unwrap_jso(node), offset);
       return;
     }
-    _blink.BlinkSelection.instance.collapse_Callback_1_(this, node);
+    _blink.BlinkSelection.instance.collapse_Callback_1_(unwrap_jso(this), unwrap_jso(node));
     return;
   }
 
   @DomName('Selection.collapseToEnd')
   @DocsEditable()
-  void collapseToEnd() => _blink.BlinkSelection.instance.collapseToEnd_Callback_0_(this);
-
+  void collapseToEnd() => _blink.BlinkSelection.instance.collapseToEnd_Callback_0_(unwrap_jso(this));
+  
   @DomName('Selection.collapseToStart')
   @DocsEditable()
-  void collapseToStart() => _blink.BlinkSelection.instance.collapseToStart_Callback_0_(this);
-
+  void collapseToStart() => _blink.BlinkSelection.instance.collapseToStart_Callback_0_(unwrap_jso(this));
+  
   @DomName('Selection.containsNode')
   @DocsEditable()
   @Experimental() // non-standard
-  bool containsNode(Node node, bool allowPartial) => _blink.BlinkSelection.instance.containsNode_Callback_2_(this, node, allowPartial);
-
+  bool containsNode(Node node, bool allowPartial) => _blink.BlinkSelection.instance.containsNode_Callback_2_(unwrap_jso(this), unwrap_jso(node), allowPartial);
+  
   @DomName('Selection.deleteFromDocument')
   @DocsEditable()
-  void deleteFromDocument() => _blink.BlinkSelection.instance.deleteFromDocument_Callback_0_(this);
-
+  void deleteFromDocument() => _blink.BlinkSelection.instance.deleteFromDocument_Callback_0_(unwrap_jso(this));
+  
   @DomName('Selection.empty')
   @DocsEditable()
   @Experimental() // non-standard
-  void empty() => _blink.BlinkSelection.instance.empty_Callback_0_(this);
-
+  void empty() => _blink.BlinkSelection.instance.empty_Callback_0_(unwrap_jso(this));
+  
   void extend(Node node, [int offset]) {
     if (offset != null) {
-      _blink.BlinkSelection.instance.extend_Callback_2_(this, node, offset);
+      _blink.BlinkSelection.instance.extend_Callback_2_(unwrap_jso(this), unwrap_jso(node), offset);
       return;
     }
-    _blink.BlinkSelection.instance.extend_Callback_1_(this, node);
+    _blink.BlinkSelection.instance.extend_Callback_1_(unwrap_jso(this), unwrap_jso(node));
     return;
   }
 
   @DomName('Selection.getRangeAt')
   @DocsEditable()
-  Range getRangeAt(int index) => _blink.BlinkSelection.instance.getRangeAt_Callback_1_(this, index);
-
+  Range getRangeAt(int index) => wrap_jso(_blink.BlinkSelection.instance.getRangeAt_Callback_1_(unwrap_jso(this), index));
+  
   @DomName('Selection.modify')
   @DocsEditable()
   @Experimental() // non-standard
-  void modify(String alter, String direction, String granularity) => _blink.BlinkSelection.instance.modify_Callback_3_(this, alter, direction, granularity);
-
+  void modify(String alter, String direction, String granularity) => _blink.BlinkSelection.instance.modify_Callback_3_(unwrap_jso(this), alter, direction, granularity);
+  
   @DomName('Selection.removeAllRanges')
   @DocsEditable()
-  void removeAllRanges() => _blink.BlinkSelection.instance.removeAllRanges_Callback_0_(this);
-
+  void removeAllRanges() => _blink.BlinkSelection.instance.removeAllRanges_Callback_0_(unwrap_jso(this));
+  
   @DomName('Selection.selectAllChildren')
   @DocsEditable()
-  void selectAllChildren(Node node) => _blink.BlinkSelection.instance.selectAllChildren_Callback_1_(this, node);
-
+  void selectAllChildren(Node node) => _blink.BlinkSelection.instance.selectAllChildren_Callback_1_(unwrap_jso(this), unwrap_jso(node));
+  
   @DomName('Selection.setBaseAndExtent')
   @DocsEditable()
   @Experimental() // non-standard
-  void setBaseAndExtent(Node baseNode, int baseOffset, Node extentNode, int extentOffset) => _blink.BlinkSelection.instance.setBaseAndExtent_Callback_4_(this, baseNode, baseOffset, extentNode, extentOffset);
-
+  void setBaseAndExtent(Node baseNode, int baseOffset, Node extentNode, int extentOffset) => _blink.BlinkSelection.instance.setBaseAndExtent_Callback_4_(unwrap_jso(this), unwrap_jso(baseNode), baseOffset, unwrap_jso(extentNode), extentOffset);
+  
   void setPosition(Node node, [int offset]) {
     if (offset != null) {
-      _blink.BlinkSelection.instance.setPosition_Callback_2_(this, node, offset);
+      _blink.BlinkSelection.instance.setPosition_Callback_2_(unwrap_jso(this), unwrap_jso(node), offset);
       return;
     }
-    _blink.BlinkSelection.instance.setPosition_Callback_1_(this, node);
+    _blink.BlinkSelection.instance.setPosition_Callback_1_(unwrap_jso(this), unwrap_jso(node));
     return;
   }
 
@@ -28216,13 +28246,13 @@
   @DomName('ServiceWorkerClient.id')
   @DocsEditable()
   @Experimental() // untriaged
-  int get id => _blink.BlinkServiceWorkerClient.instance.id_Getter_(this);
-
+  int get id => _blink.BlinkServiceWorkerClient.instance.id_Getter_(unwrap_jso(this));
+  
   @DomName('ServiceWorkerClient.postMessage')
   @DocsEditable()
   @Experimental() // untriaged
-  void postMessage(/*SerializedScriptValue*/ message, [List<MessagePort> transfer]) => _blink.BlinkServiceWorkerClient.instance.postMessage_Callback_2_(this, message, transfer);
-
+  void postMessage(/*SerializedScriptValue*/ message, [List<MessagePort> transfer]) => _blink.BlinkServiceWorkerClient.instance.postMessage_Callback_2_(unwrap_jso(this), message, transfer);
+  
 }
 // 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
@@ -28240,9 +28270,9 @@
 
   Future getAll([Map options]) {
     if (options != null) {
-      return _blink.BlinkServiceWorkerClients.instance.getAll_Callback_1_(this, options);
+      return _blink.BlinkServiceWorkerClients.instance.getAll_Callback_1_(unwrap_jso(this), options);
     }
-    return _blink.BlinkServiceWorkerClients.instance.getAll_Callback_0_(this);
+    return _blink.BlinkServiceWorkerClients.instance.getAll_Callback_0_(unwrap_jso(this));
   }
 
 }
@@ -28263,25 +28293,25 @@
   @DomName('ServiceWorkerContainer.controller')
   @DocsEditable()
   @Experimental() // untriaged
-  _ServiceWorker get controller => _blink.BlinkServiceWorkerContainer.instance.controller_Getter_(this);
-
+  _ServiceWorker get controller => wrap_jso(_blink.BlinkServiceWorkerContainer.instance.controller_Getter_(unwrap_jso(this)));
+  
   @DomName('ServiceWorkerContainer.ready')
   @DocsEditable()
   @Experimental() // untriaged
-  Future get ready => _blink.BlinkServiceWorkerContainer.instance.ready_Getter_(this);
-
+  Future get ready => _blink.BlinkServiceWorkerContainer.instance.ready_Getter_(unwrap_jso(this));
+  
   Future getRegistration([String documentURL]) {
     if (documentURL != null) {
-      return _blink.BlinkServiceWorkerContainer.instance.getRegistration_Callback_1_(this, documentURL);
+      return _blink.BlinkServiceWorkerContainer.instance.getRegistration_Callback_1_(unwrap_jso(this), documentURL);
     }
-    return _blink.BlinkServiceWorkerContainer.instance.getRegistration_Callback_0_(this);
+    return _blink.BlinkServiceWorkerContainer.instance.getRegistration_Callback_0_(unwrap_jso(this));
   }
 
   Future register(String url, [Map options]) {
     if (options != null) {
-      return _blink.BlinkServiceWorkerContainer.instance.register_Callback_2_(this, url, options);
+      return _blink.BlinkServiceWorkerContainer.instance.register_Callback_2_(unwrap_jso(this), url, options);
     }
-    return _blink.BlinkServiceWorkerContainer.instance.register_Callback_1_(this, url);
+    return _blink.BlinkServiceWorkerContainer.instance.register_Callback_1_(unwrap_jso(this), url);
   }
 
 }
@@ -28307,35 +28337,35 @@
   @DomName('ServiceWorkerGlobalScope.caches')
   @DocsEditable()
   @Experimental() // untriaged
-  CacheStorage get caches => _blink.BlinkServiceWorkerGlobalScope.instance.caches_Getter_(this);
-
+  CacheStorage get caches => wrap_jso(_blink.BlinkServiceWorkerGlobalScope.instance.caches_Getter_(unwrap_jso(this)));
+  
   @DomName('ServiceWorkerGlobalScope.clients')
   @DocsEditable()
   @Experimental() // untriaged
-  ServiceWorkerClients get clients => _blink.BlinkServiceWorkerGlobalScope.instance.clients_Getter_(this);
-
+  ServiceWorkerClients get clients => wrap_jso(_blink.BlinkServiceWorkerGlobalScope.instance.clients_Getter_(unwrap_jso(this)));
+  
   @DomName('ServiceWorkerGlobalScope.scope')
   @DocsEditable()
   @Experimental() // untriaged
-  String get scope => _blink.BlinkServiceWorkerGlobalScope.instance.scope_Getter_(this);
-
+  String get scope => _blink.BlinkServiceWorkerGlobalScope.instance.scope_Getter_(unwrap_jso(this));
+  
   @DomName('ServiceWorkerGlobalScope.close')
   @DocsEditable()
   @Experimental() // untriaged
-  void close() => _blink.BlinkServiceWorkerGlobalScope.instance.close_Callback_0_(this);
-
+  void close() => _blink.BlinkServiceWorkerGlobalScope.instance.close_Callback_0_(unwrap_jso(this));
+  
   Future _fetch(request, [Map requestInitDict]) {
     if ((request is String || request == null) && requestInitDict == null) {
-      return _blink.BlinkServiceWorkerGlobalScope.instance.fetch_Callback_1_(this, request);
+      return _blink.BlinkServiceWorkerGlobalScope.instance.fetch_Callback_1_(unwrap_jso(this), unwrap_jso(request));
     }
     if ((requestInitDict is Map || requestInitDict == null) && (request is String || request == null)) {
-      return _blink.BlinkServiceWorkerGlobalScope.instance.fetch_Callback_2_(this, request, requestInitDict);
+      return _blink.BlinkServiceWorkerGlobalScope.instance.fetch_Callback_2_(unwrap_jso(this), unwrap_jso(request), requestInitDict);
     }
     if ((request is _Request || request == null) && requestInitDict == null) {
-      return _blink.BlinkServiceWorkerGlobalScope.instance.fetch_Callback_1_(this, request);
+      return _blink.BlinkServiceWorkerGlobalScope.instance.fetch_Callback_1_(unwrap_jso(this), unwrap_jso(request));
     }
     if ((requestInitDict is Map || requestInitDict == null) && (request is _Request || request == null)) {
-      return _blink.BlinkServiceWorkerGlobalScope.instance.fetch_Callback_2_(this, request, requestInitDict);
+      return _blink.BlinkServiceWorkerGlobalScope.instance.fetch_Callback_2_(unwrap_jso(this), unwrap_jso(request), requestInitDict);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -28363,28 +28393,28 @@
   @DomName('ServiceWorkerRegistration.active')
   @DocsEditable()
   @Experimental() // untriaged
-  _ServiceWorker get active => _blink.BlinkServiceWorkerRegistration.instance.active_Getter_(this);
-
+  _ServiceWorker get active => wrap_jso(_blink.BlinkServiceWorkerRegistration.instance.active_Getter_(unwrap_jso(this)));
+  
   @DomName('ServiceWorkerRegistration.installing')
   @DocsEditable()
   @Experimental() // untriaged
-  _ServiceWorker get installing => _blink.BlinkServiceWorkerRegistration.instance.installing_Getter_(this);
-
+  _ServiceWorker get installing => wrap_jso(_blink.BlinkServiceWorkerRegistration.instance.installing_Getter_(unwrap_jso(this)));
+  
   @DomName('ServiceWorkerRegistration.scope')
   @DocsEditable()
   @Experimental() // untriaged
-  String get scope => _blink.BlinkServiceWorkerRegistration.instance.scope_Getter_(this);
-
+  String get scope => _blink.BlinkServiceWorkerRegistration.instance.scope_Getter_(unwrap_jso(this));
+  
   @DomName('ServiceWorkerRegistration.waiting')
   @DocsEditable()
   @Experimental() // untriaged
-  _ServiceWorker get waiting => _blink.BlinkServiceWorkerRegistration.instance.waiting_Getter_(this);
-
+  _ServiceWorker get waiting => wrap_jso(_blink.BlinkServiceWorkerRegistration.instance.waiting_Getter_(unwrap_jso(this)));
+  
   @DomName('ServiceWorkerRegistration.unregister')
   @DocsEditable()
   @Experimental() // untriaged
-  Future unregister() => _blink.BlinkServiceWorkerRegistration.instance.unregister_Callback_0_(this);
-
+  Future unregister() => _blink.BlinkServiceWorkerRegistration.instance.unregister_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -28418,8 +28448,8 @@
   @DomName('HTMLShadowElement.getDistributedNodes')
   @DocsEditable()
   @Experimental() // untriaged
-  List<Node> getDistributedNodes() => _blink.BlinkHTMLShadowElement.instance.getDistributedNodes_Callback_0_(this);
-
+  List<Node> getDistributedNodes() => wrap_jso_list(_blink.BlinkHTMLShadowElement.instance.getDistributedNodes_Callback_0_(unwrap_jso(this)));
+  
 }
 // 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
@@ -28438,55 +28468,55 @@
 
   @DomName('ShadowRoot.activeElement')
   @DocsEditable()
-  Element get activeElement => _blink.BlinkShadowRoot.instance.activeElement_Getter_(this);
-
+  Element get activeElement => wrap_jso(_blink.BlinkShadowRoot.instance.activeElement_Getter_(unwrap_jso(this)));
+  
   @DomName('ShadowRoot.host')
   @DocsEditable()
   @Experimental() // untriaged
-  Element get host => _blink.BlinkShadowRoot.instance.host_Getter_(this);
-
+  Element get host => wrap_jso(_blink.BlinkShadowRoot.instance.host_Getter_(unwrap_jso(this)));
+  
   @DomName('ShadowRoot.innerHTML')
   @DocsEditable()
-  String get innerHtml => _blink.BlinkShadowRoot.instance.innerHTML_Getter_(this);
-
+  String get innerHtml => _blink.BlinkShadowRoot.instance.innerHTML_Getter_(unwrap_jso(this));
+  
   @DomName('ShadowRoot.innerHTML')
   @DocsEditable()
-  void set innerHtml(String value) => _blink.BlinkShadowRoot.instance.innerHTML_Setter_(this, value);
-
+  void set innerHtml(String value) => _blink.BlinkShadowRoot.instance.innerHTML_Setter_(unwrap_jso(this), value);
+  
   @DomName('ShadowRoot.olderShadowRoot')
   @DocsEditable()
   @Experimental() // untriaged
-  ShadowRoot get olderShadowRoot => _blink.BlinkShadowRoot.instance.olderShadowRoot_Getter_(this);
-
+  ShadowRoot get olderShadowRoot => wrap_jso(_blink.BlinkShadowRoot.instance.olderShadowRoot_Getter_(unwrap_jso(this)));
+  
   @DomName('ShadowRoot.styleSheets')
   @DocsEditable()
   @Experimental() // untriaged
-  List<StyleSheet> get styleSheets => _blink.BlinkShadowRoot.instance.styleSheets_Getter_(this);
-
+  List<StyleSheet> get styleSheets => wrap_jso_list(_blink.BlinkShadowRoot.instance.styleSheets_Getter_(unwrap_jso(this)));
+  
   @DomName('ShadowRoot.cloneNode')
   @DocsEditable()
-  Node clone(bool deep) => _blink.BlinkShadowRoot.instance.cloneNode_Callback_1_(this, deep);
-
+  Node clone(bool deep) => wrap_jso(_blink.BlinkShadowRoot.instance.cloneNode_Callback_1_(unwrap_jso(this), deep));
+  
   @DomName('ShadowRoot.elementFromPoint')
   @DocsEditable()
-  Element elementFromPoint(int x, int y) => _blink.BlinkShadowRoot.instance.elementFromPoint_Callback_2_(this, x, y);
-
+  Element elementFromPoint(int x, int y) => wrap_jso(_blink.BlinkShadowRoot.instance.elementFromPoint_Callback_2_(unwrap_jso(this), x, y));
+  
   @DomName('ShadowRoot.getElementById')
   @DocsEditable()
-  Element getElementById(String elementId) => _blink.BlinkShadowRoot.instance.getElementById_Callback_1_(this, elementId);
-
+  Element getElementById(String elementId) => wrap_jso(_blink.BlinkShadowRoot.instance.getElementById_Callback_1_(unwrap_jso(this), elementId));
+  
   @DomName('ShadowRoot.getElementsByClassName')
   @DocsEditable()
-  List<Node> getElementsByClassName(String className) => _blink.BlinkShadowRoot.instance.getElementsByClassName_Callback_1_(this, className);
-
+  List<Node> getElementsByClassName(String className) => wrap_jso_list(_blink.BlinkShadowRoot.instance.getElementsByClassName_Callback_1_(unwrap_jso(this), className));
+  
   @DomName('ShadowRoot.getElementsByTagName')
   @DocsEditable()
-  List<Node> getElementsByTagName(String tagName) => _blink.BlinkShadowRoot.instance.getElementsByTagName_Callback_1_(this, tagName);
-
+  List<Node> getElementsByTagName(String tagName) => wrap_jso_list(_blink.BlinkShadowRoot.instance.getElementsByTagName_Callback_1_(unwrap_jso(this), tagName));
+  
   @DomName('ShadowRoot.getSelection')
   @DocsEditable()
-  Selection getSelection() => _blink.BlinkShadowRoot.instance.getSelection_Callback_0_(this);
-
+  Selection getSelection() => wrap_jso(_blink.BlinkShadowRoot.instance.getSelection_Callback_0_(unwrap_jso(this)));
+  
   static final bool supported = true;
 
   static bool _shadowRootDeprecationReported = false;
@@ -28552,13 +28582,13 @@
 
   @DomName('SharedWorker.port')
   @DocsEditable()
-  MessagePort get port => _blink.BlinkSharedWorker.instance.port_Getter_(this);
-
+  MessagePort get port => wrap_jso(_blink.BlinkSharedWorker.instance.port_Getter_(unwrap_jso(this)));
+  
   @DomName('SharedWorker.workerStart')
   @DocsEditable()
   @Experimental() // untriaged
-  double get workerStart => _blink.BlinkSharedWorker.instance.workerStart_Getter_(this);
-
+  double get workerStart => _blink.BlinkSharedWorker.instance.workerStart_Getter_(unwrap_jso(this));
+  
   @DomName('SharedWorker.onerror')
   @DocsEditable()
   @Experimental() // untriaged
@@ -28593,8 +28623,8 @@
   @DomName('SharedWorkerGlobalScope.name')
   @DocsEditable()
   @Experimental() // untriaged
-  String get name => _blink.BlinkSharedWorkerGlobalScope.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkSharedWorkerGlobalScope.instance.name_Getter_(unwrap_jso(this));
+  
   /// Stream of `connect` events handled by this [SharedWorkerGlobalScope].
   @DomName('SharedWorkerGlobalScope.onconnect')
   @DocsEditable()
@@ -28620,78 +28650,78 @@
   @DomName('SourceBuffer.appendWindowEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  num get appendWindowEnd => _blink.BlinkSourceBuffer.instance.appendWindowEnd_Getter_(this);
-
+  num get appendWindowEnd => _blink.BlinkSourceBuffer.instance.appendWindowEnd_Getter_(unwrap_jso(this));
+  
   @DomName('SourceBuffer.appendWindowEnd')
   @DocsEditable()
   @Experimental() // untriaged
-  void set appendWindowEnd(num value) => _blink.BlinkSourceBuffer.instance.appendWindowEnd_Setter_(this, value);
-
+  void set appendWindowEnd(num value) => _blink.BlinkSourceBuffer.instance.appendWindowEnd_Setter_(unwrap_jso(this), value);
+  
   @DomName('SourceBuffer.appendWindowStart')
   @DocsEditable()
   @Experimental() // untriaged
-  num get appendWindowStart => _blink.BlinkSourceBuffer.instance.appendWindowStart_Getter_(this);
-
+  num get appendWindowStart => _blink.BlinkSourceBuffer.instance.appendWindowStart_Getter_(unwrap_jso(this));
+  
   @DomName('SourceBuffer.appendWindowStart')
   @DocsEditable()
   @Experimental() // untriaged
-  void set appendWindowStart(num value) => _blink.BlinkSourceBuffer.instance.appendWindowStart_Setter_(this, value);
-
+  void set appendWindowStart(num value) => _blink.BlinkSourceBuffer.instance.appendWindowStart_Setter_(unwrap_jso(this), value);
+  
   @DomName('SourceBuffer.buffered')
   @DocsEditable()
-  TimeRanges get buffered => _blink.BlinkSourceBuffer.instance.buffered_Getter_(this);
-
+  TimeRanges get buffered => wrap_jso(_blink.BlinkSourceBuffer.instance.buffered_Getter_(unwrap_jso(this)));
+  
   @DomName('SourceBuffer.mode')
   @DocsEditable()
   @Experimental() // untriaged
-  String get mode => _blink.BlinkSourceBuffer.instance.mode_Getter_(this);
-
+  String get mode => _blink.BlinkSourceBuffer.instance.mode_Getter_(unwrap_jso(this));
+  
   @DomName('SourceBuffer.mode')
   @DocsEditable()
   @Experimental() // untriaged
-  void set mode(String value) => _blink.BlinkSourceBuffer.instance.mode_Setter_(this, value);
-
+  void set mode(String value) => _blink.BlinkSourceBuffer.instance.mode_Setter_(unwrap_jso(this), value);
+  
   @DomName('SourceBuffer.timestampOffset')
   @DocsEditable()
-  num get timestampOffset => _blink.BlinkSourceBuffer.instance.timestampOffset_Getter_(this);
-
+  num get timestampOffset => _blink.BlinkSourceBuffer.instance.timestampOffset_Getter_(unwrap_jso(this));
+  
   @DomName('SourceBuffer.timestampOffset')
   @DocsEditable()
-  void set timestampOffset(num value) => _blink.BlinkSourceBuffer.instance.timestampOffset_Setter_(this, value);
-
+  void set timestampOffset(num value) => _blink.BlinkSourceBuffer.instance.timestampOffset_Setter_(unwrap_jso(this), value);
+  
   @DomName('SourceBuffer.updating')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get updating => _blink.BlinkSourceBuffer.instance.updating_Getter_(this);
-
+  bool get updating => _blink.BlinkSourceBuffer.instance.updating_Getter_(unwrap_jso(this));
+  
   @DomName('SourceBuffer.abort')
   @DocsEditable()
-  void abort() => _blink.BlinkSourceBuffer.instance.abort_Callback_0_(this);
-
+  void abort() => _blink.BlinkSourceBuffer.instance.abort_Callback_0_(unwrap_jso(this));
+  
   @DomName('SourceBuffer.appendBuffer')
   @DocsEditable()
   @Experimental() // untriaged
-  void appendBuffer(ByteBuffer data) => _blink.BlinkSourceBuffer.instance.appendBuffer_Callback_1_(this, data);
-
+  void appendBuffer(ByteBuffer data) => _blink.BlinkSourceBuffer.instance.appendBuffer_Callback_1_(unwrap_jso(this), data);
+  
   void appendStream(FileStream stream, [int maxSize]) {
     if (maxSize != null) {
-      _blink.BlinkSourceBuffer.instance.appendStream_Callback_2_(this, stream, maxSize);
+      _blink.BlinkSourceBuffer.instance.appendStream_Callback_2_(unwrap_jso(this), unwrap_jso(stream), maxSize);
       return;
     }
-    _blink.BlinkSourceBuffer.instance.appendStream_Callback_1_(this, stream);
+    _blink.BlinkSourceBuffer.instance.appendStream_Callback_1_(unwrap_jso(this), unwrap_jso(stream));
     return;
   }
 
   @DomName('SourceBuffer.appendTypedData')
   @DocsEditable()
   @Experimental() // untriaged
-  void appendTypedData(TypedData data) => _blink.BlinkSourceBuffer.instance.appendBuffer_Callback_1_(this, data);
-
+  void appendTypedData(TypedData data) => _blink.BlinkSourceBuffer.instance.appendBuffer_Callback_1_(unwrap_jso(this), unwrap_jso(data));
+  
   @DomName('SourceBuffer.remove')
   @DocsEditable()
   @Experimental() // untriaged
-  void remove(num start, num end) => _blink.BlinkSourceBuffer.instance.remove_Callback_2_(this, start, end);
-
+  void remove(num start, num end) => _blink.BlinkSourceBuffer.instance.remove_Callback_2_(unwrap_jso(this), start, end);
+  
 }
 // 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
@@ -28710,16 +28740,16 @@
 
   @DomName('SourceBufferList.length')
   @DocsEditable()
-  int get length => _blink.BlinkSourceBufferList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkSourceBufferList.instance.length_Getter_(unwrap_jso(this));
+  
   SourceBuffer operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkSourceBufferList.instance.item_Callback_1_(this, index);
+    return wrap_jso(_blink.BlinkSourceBufferList.instance.item_Callback_1_(unwrap_jso(this), index));
   }
 
-  SourceBuffer _nativeIndexedGetter(int index) => _blink.BlinkSourceBufferList.instance.item_Callback_1_(this, index);
-
+  SourceBuffer _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkSourceBufferList.instance.item_Callback_1_(unwrap_jso(this), index));
+ 
   void operator[]=(int index, SourceBuffer value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -28760,8 +28790,8 @@
 
   @DomName('SourceBufferList.item')
   @DocsEditable()
-  SourceBuffer item(int index) => _blink.BlinkSourceBufferList.instance.item_Callback_1_(this, index);
-
+  SourceBuffer item(int index) => wrap_jso(_blink.BlinkSourceBufferList.instance.item_Callback_1_(unwrap_jso(this), index));
+  
 }
 // 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
@@ -28789,57 +28819,57 @@
   @DomName('HTMLSourceElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  String get integrity => _blink.BlinkHTMLSourceElement.instance.integrity_Getter_(this);
-
+  String get integrity => _blink.BlinkHTMLSourceElement.instance.integrity_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSourceElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLSourceElement.instance.integrity_Setter_(this, value);
-
+  void set integrity(String value) => _blink.BlinkHTMLSourceElement.instance.integrity_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLSourceElement.media')
   @DocsEditable()
-  String get media => _blink.BlinkHTMLSourceElement.instance.media_Getter_(this);
-
+  String get media => _blink.BlinkHTMLSourceElement.instance.media_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSourceElement.media')
   @DocsEditable()
-  void set media(String value) => _blink.BlinkHTMLSourceElement.instance.media_Setter_(this, value);
-
+  void set media(String value) => _blink.BlinkHTMLSourceElement.instance.media_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLSourceElement.sizes')
   @DocsEditable()
   @Experimental() // untriaged
-  String get sizes => _blink.BlinkHTMLSourceElement.instance.sizes_Getter_(this);
-
+  String get sizes => _blink.BlinkHTMLSourceElement.instance.sizes_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSourceElement.sizes')
   @DocsEditable()
   @Experimental() // untriaged
-  void set sizes(String value) => _blink.BlinkHTMLSourceElement.instance.sizes_Setter_(this, value);
-
+  void set sizes(String value) => _blink.BlinkHTMLSourceElement.instance.sizes_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLSourceElement.src')
   @DocsEditable()
-  String get src => _blink.BlinkHTMLSourceElement.instance.src_Getter_(this);
-
+  String get src => _blink.BlinkHTMLSourceElement.instance.src_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSourceElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLSourceElement.instance.src_Setter_(this, value);
-
+  void set src(String value) => _blink.BlinkHTMLSourceElement.instance.src_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLSourceElement.srcset')
   @DocsEditable()
   @Experimental() // untriaged
-  String get srcset => _blink.BlinkHTMLSourceElement.instance.srcset_Getter_(this);
-
+  String get srcset => _blink.BlinkHTMLSourceElement.instance.srcset_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSourceElement.srcset')
   @DocsEditable()
   @Experimental() // untriaged
-  void set srcset(String value) => _blink.BlinkHTMLSourceElement.instance.srcset_Setter_(this, value);
-
+  void set srcset(String value) => _blink.BlinkHTMLSourceElement.instance.srcset_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLSourceElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLSourceElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkHTMLSourceElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLSourceElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLSourceElement.instance.type_Setter_(this, value);
-
+  void set type(String value) => _blink.BlinkHTMLSourceElement.instance.type_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -28858,23 +28888,23 @@
   @DomName('SourceInfo.facing')
   @DocsEditable()
   @Experimental() // untriaged
-  String get facing => _blink.BlinkSourceInfo.instance.facing_Getter_(this);
-
+  String get facing => _blink.BlinkSourceInfo.instance.facing_Getter_(unwrap_jso(this));
+  
   @DomName('SourceInfo.id')
   @DocsEditable()
   @Experimental() // untriaged
-  String get id => _blink.BlinkSourceInfo.instance.id_Getter_(this);
-
+  String get id => _blink.BlinkSourceInfo.instance.id_Getter_(unwrap_jso(this));
+  
   @DomName('SourceInfo.kind')
   @DocsEditable()
   @Experimental() // untriaged
-  String get kind => _blink.BlinkSourceInfo.instance.kind_Getter_(this);
-
+  String get kind => _blink.BlinkSourceInfo.instance.kind_Getter_(unwrap_jso(this));
+  
   @DomName('SourceInfo.label')
   @DocsEditable()
   @Experimental() // untriaged
-  String get label => _blink.BlinkSourceInfo.instance.label_Getter_(this);
-
+  String get label => _blink.BlinkSourceInfo.instance.label_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -28923,20 +28953,20 @@
 
   @DomName('SpeechGrammar.src')
   @DocsEditable()
-  String get src => _blink.BlinkSpeechGrammar.instance.src_Getter_(this);
-
+  String get src => _blink.BlinkSpeechGrammar.instance.src_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechGrammar.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkSpeechGrammar.instance.src_Setter_(this, value);
-
+  void set src(String value) => _blink.BlinkSpeechGrammar.instance.src_Setter_(unwrap_jso(this), value);
+  
   @DomName('SpeechGrammar.weight')
   @DocsEditable()
-  num get weight => _blink.BlinkSpeechGrammar.instance.weight_Getter_(this);
-
+  num get weight => _blink.BlinkSpeechGrammar.instance.weight_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechGrammar.weight')
   @DocsEditable()
-  void set weight(num value) => _blink.BlinkSpeechGrammar.instance.weight_Setter_(this, value);
-
+  void set weight(num value) => _blink.BlinkSpeechGrammar.instance.weight_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -28961,16 +28991,16 @@
 
   @DomName('SpeechGrammarList.length')
   @DocsEditable()
-  int get length => _blink.BlinkSpeechGrammarList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkSpeechGrammarList.instance.length_Getter_(unwrap_jso(this));
+  
   SpeechGrammar operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkSpeechGrammarList.instance.item_Callback_1_(this, index);
+    return wrap_jso(_blink.BlinkSpeechGrammarList.instance.item_Callback_1_(unwrap_jso(this), index));
   }
 
-  SpeechGrammar _nativeIndexedGetter(int index) => _blink.BlinkSpeechGrammarList.instance.item_Callback_1_(this, index);
-
+  SpeechGrammar _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkSpeechGrammarList.instance.item_Callback_1_(unwrap_jso(this), index));
+ 
   void operator[]=(int index, SpeechGrammar value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -29011,26 +29041,26 @@
 
   void addFromString(String string, [num weight]) {
     if (weight != null) {
-      _blink.BlinkSpeechGrammarList.instance.addFromString_Callback_2_(this, string, weight);
+      _blink.BlinkSpeechGrammarList.instance.addFromString_Callback_2_(unwrap_jso(this), string, weight);
       return;
     }
-    _blink.BlinkSpeechGrammarList.instance.addFromString_Callback_1_(this, string);
+    _blink.BlinkSpeechGrammarList.instance.addFromString_Callback_1_(unwrap_jso(this), string);
     return;
   }
 
   void addFromUri(String src, [num weight]) {
     if (weight != null) {
-      _blink.BlinkSpeechGrammarList.instance.addFromUri_Callback_2_(this, src, weight);
+      _blink.BlinkSpeechGrammarList.instance.addFromUri_Callback_2_(unwrap_jso(this), src, weight);
       return;
     }
-    _blink.BlinkSpeechGrammarList.instance.addFromUri_Callback_1_(this, src);
+    _blink.BlinkSpeechGrammarList.instance.addFromUri_Callback_1_(unwrap_jso(this), src);
     return;
   }
 
   @DomName('SpeechGrammarList.item')
   @DocsEditable()
-  SpeechGrammar item(int index) => _blink.BlinkSpeechGrammarList.instance.item_Callback_1_(this, index);
-
+  SpeechGrammar item(int index) => wrap_jso(_blink.BlinkSpeechGrammarList.instance.item_Callback_1_(unwrap_jso(this), index));
+  
 }
 // 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
@@ -29169,56 +29199,56 @@
 
   @DomName('SpeechRecognition.continuous')
   @DocsEditable()
-  bool get continuous => _blink.BlinkSpeechRecognition.instance.continuous_Getter_(this);
-
+  bool get continuous => _blink.BlinkSpeechRecognition.instance.continuous_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechRecognition.continuous')
   @DocsEditable()
-  void set continuous(bool value) => _blink.BlinkSpeechRecognition.instance.continuous_Setter_(this, value);
-
+  void set continuous(bool value) => _blink.BlinkSpeechRecognition.instance.continuous_Setter_(unwrap_jso(this), value);
+  
   @DomName('SpeechRecognition.grammars')
   @DocsEditable()
-  SpeechGrammarList get grammars => _blink.BlinkSpeechRecognition.instance.grammars_Getter_(this);
-
+  SpeechGrammarList get grammars => wrap_jso(_blink.BlinkSpeechRecognition.instance.grammars_Getter_(unwrap_jso(this)));
+  
   @DomName('SpeechRecognition.grammars')
   @DocsEditable()
-  void set grammars(SpeechGrammarList value) => _blink.BlinkSpeechRecognition.instance.grammars_Setter_(this, value);
-
+  void set grammars(SpeechGrammarList value) => _blink.BlinkSpeechRecognition.instance.grammars_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('SpeechRecognition.interimResults')
   @DocsEditable()
-  bool get interimResults => _blink.BlinkSpeechRecognition.instance.interimResults_Getter_(this);
-
+  bool get interimResults => _blink.BlinkSpeechRecognition.instance.interimResults_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechRecognition.interimResults')
   @DocsEditable()
-  void set interimResults(bool value) => _blink.BlinkSpeechRecognition.instance.interimResults_Setter_(this, value);
-
+  void set interimResults(bool value) => _blink.BlinkSpeechRecognition.instance.interimResults_Setter_(unwrap_jso(this), value);
+  
   @DomName('SpeechRecognition.lang')
   @DocsEditable()
-  String get lang => _blink.BlinkSpeechRecognition.instance.lang_Getter_(this);
-
+  String get lang => _blink.BlinkSpeechRecognition.instance.lang_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechRecognition.lang')
   @DocsEditable()
-  void set lang(String value) => _blink.BlinkSpeechRecognition.instance.lang_Setter_(this, value);
-
+  void set lang(String value) => _blink.BlinkSpeechRecognition.instance.lang_Setter_(unwrap_jso(this), value);
+  
   @DomName('SpeechRecognition.maxAlternatives')
   @DocsEditable()
-  int get maxAlternatives => _blink.BlinkSpeechRecognition.instance.maxAlternatives_Getter_(this);
-
+  int get maxAlternatives => _blink.BlinkSpeechRecognition.instance.maxAlternatives_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechRecognition.maxAlternatives')
   @DocsEditable()
-  void set maxAlternatives(int value) => _blink.BlinkSpeechRecognition.instance.maxAlternatives_Setter_(this, value);
-
+  void set maxAlternatives(int value) => _blink.BlinkSpeechRecognition.instance.maxAlternatives_Setter_(unwrap_jso(this), value);
+  
   @DomName('SpeechRecognition.abort')
   @DocsEditable()
-  void abort() => _blink.BlinkSpeechRecognition.instance.abort_Callback_0_(this);
-
+  void abort() => _blink.BlinkSpeechRecognition.instance.abort_Callback_0_(unwrap_jso(this));
+  
   @DomName('SpeechRecognition.start')
   @DocsEditable()
-  void start() => _blink.BlinkSpeechRecognition.instance.start_Callback_0_(this);
-
+  void start() => _blink.BlinkSpeechRecognition.instance.start_Callback_0_(unwrap_jso(this));
+  
   @DomName('SpeechRecognition.stop')
   @DocsEditable()
-  void stop() => _blink.BlinkSpeechRecognition.instance.stop_Callback_0_(this);
-
+  void stop() => _blink.BlinkSpeechRecognition.instance.stop_Callback_0_(unwrap_jso(this));
+  
   /// Stream of `audioend` events handled by this [SpeechRecognition].
   @DomName('SpeechRecognition.onaudioend')
   @DocsEditable()
@@ -29293,12 +29323,12 @@
 
   @DomName('SpeechRecognitionAlternative.confidence')
   @DocsEditable()
-  double get confidence => _blink.BlinkSpeechRecognitionAlternative.instance.confidence_Getter_(this);
-
+  double get confidence => _blink.BlinkSpeechRecognitionAlternative.instance.confidence_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechRecognitionAlternative.transcript')
   @DocsEditable()
-  String get transcript => _blink.BlinkSpeechRecognitionAlternative.instance.transcript_Getter_(this);
-
+  String get transcript => _blink.BlinkSpeechRecognitionAlternative.instance.transcript_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -29318,12 +29348,12 @@
 
   @DomName('SpeechRecognitionError.error')
   @DocsEditable()
-  String get error => _blink.BlinkSpeechRecognitionError.instance.error_Getter_(this);
-
+  String get error => _blink.BlinkSpeechRecognitionError.instance.error_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechRecognitionError.message')
   @DocsEditable()
-  String get message => _blink.BlinkSpeechRecognitionError.instance.message_Getter_(this);
-
+  String get message => _blink.BlinkSpeechRecognitionError.instance.message_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -29343,20 +29373,20 @@
 
   @DomName('SpeechRecognitionEvent.emma')
   @DocsEditable()
-  Document get emma => _blink.BlinkSpeechRecognitionEvent.instance.emma_Getter_(this);
-
+  Document get emma => wrap_jso(_blink.BlinkSpeechRecognitionEvent.instance.emma_Getter_(unwrap_jso(this)));
+  
   @DomName('SpeechRecognitionEvent.interpretation')
   @DocsEditable()
-  Document get interpretation => _blink.BlinkSpeechRecognitionEvent.instance.interpretation_Getter_(this);
-
+  Document get interpretation => wrap_jso(_blink.BlinkSpeechRecognitionEvent.instance.interpretation_Getter_(unwrap_jso(this)));
+  
   @DomName('SpeechRecognitionEvent.resultIndex')
   @DocsEditable()
-  int get resultIndex => _blink.BlinkSpeechRecognitionEvent.instance.resultIndex_Getter_(this);
-
+  int get resultIndex => _blink.BlinkSpeechRecognitionEvent.instance.resultIndex_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechRecognitionEvent.results')
   @DocsEditable()
-  List<SpeechRecognitionResult> get results => _blink.BlinkSpeechRecognitionEvent.instance.results_Getter_(this);
-
+  List<SpeechRecognitionResult> get results => wrap_jso_list(_blink.BlinkSpeechRecognitionEvent.instance.results_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -29376,16 +29406,16 @@
 
   @DomName('SpeechRecognitionResult.isFinal')
   @DocsEditable()
-  bool get isFinal => _blink.BlinkSpeechRecognitionResult.instance.isFinal_Getter_(this);
-
+  bool get isFinal => _blink.BlinkSpeechRecognitionResult.instance.isFinal_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechRecognitionResult.length')
   @DocsEditable()
-  int get length => _blink.BlinkSpeechRecognitionResult.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkSpeechRecognitionResult.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechRecognitionResult.item')
   @DocsEditable()
-  SpeechRecognitionAlternative item(int index) => _blink.BlinkSpeechRecognitionResult.instance.item_Callback_1_(this, index);
-
+  SpeechRecognitionAlternative item(int index) => wrap_jso(_blink.BlinkSpeechRecognitionResult.instance.item_Callback_1_(unwrap_jso(this), index));
+  
 }
 // 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
@@ -29404,36 +29434,36 @@
 
   @DomName('SpeechSynthesis.paused')
   @DocsEditable()
-  bool get paused => _blink.BlinkSpeechSynthesis.instance.paused_Getter_(this);
-
+  bool get paused => _blink.BlinkSpeechSynthesis.instance.paused_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesis.pending')
   @DocsEditable()
-  bool get pending => _blink.BlinkSpeechSynthesis.instance.pending_Getter_(this);
-
+  bool get pending => _blink.BlinkSpeechSynthesis.instance.pending_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesis.speaking')
   @DocsEditable()
-  bool get speaking => _blink.BlinkSpeechSynthesis.instance.speaking_Getter_(this);
-
+  bool get speaking => _blink.BlinkSpeechSynthesis.instance.speaking_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesis.cancel')
   @DocsEditable()
-  void cancel() => _blink.BlinkSpeechSynthesis.instance.cancel_Callback_0_(this);
-
+  void cancel() => _blink.BlinkSpeechSynthesis.instance.cancel_Callback_0_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesis.getVoices')
   @DocsEditable()
-  List<SpeechSynthesisVoice> getVoices() => _blink.BlinkSpeechSynthesis.instance.getVoices_Callback_0_(this);
-
+  List<SpeechSynthesisVoice> getVoices() => _blink.BlinkSpeechSynthesis.instance.getVoices_Callback_0_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesis.pause')
   @DocsEditable()
-  void pause() => _blink.BlinkSpeechSynthesis.instance.pause_Callback_0_(this);
-
+  void pause() => _blink.BlinkSpeechSynthesis.instance.pause_Callback_0_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesis.resume')
   @DocsEditable()
-  void resume() => _blink.BlinkSpeechSynthesis.instance.resume_Callback_0_(this);
-
+  void resume() => _blink.BlinkSpeechSynthesis.instance.resume_Callback_0_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesis.speak')
   @DocsEditable()
-  void speak(SpeechSynthesisUtterance utterance) => _blink.BlinkSpeechSynthesis.instance.speak_Callback_1_(this, utterance);
-
+  void speak(SpeechSynthesisUtterance utterance) => _blink.BlinkSpeechSynthesis.instance.speak_Callback_1_(unwrap_jso(this), unwrap_jso(utterance));
+  
 }
 // 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
@@ -29452,16 +29482,16 @@
 
   @DomName('SpeechSynthesisEvent.charIndex')
   @DocsEditable()
-  int get charIndex => _blink.BlinkSpeechSynthesisEvent.instance.charIndex_Getter_(this);
-
+  int get charIndex => _blink.BlinkSpeechSynthesisEvent.instance.charIndex_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesisEvent.elapsedTime')
   @DocsEditable()
-  double get elapsedTime => _blink.BlinkSpeechSynthesisEvent.instance.elapsedTime_Getter_(this);
-
+  double get elapsedTime => _blink.BlinkSpeechSynthesisEvent.instance.elapsedTime_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesisEvent.name')
   @DocsEditable()
-  String get name => _blink.BlinkSpeechSynthesisEvent.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkSpeechSynthesisEvent.instance.name_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -29556,52 +29586,52 @@
 
   @DomName('SpeechSynthesisUtterance.lang')
   @DocsEditable()
-  String get lang => _blink.BlinkSpeechSynthesisUtterance.instance.lang_Getter_(this);
-
+  String get lang => _blink.BlinkSpeechSynthesisUtterance.instance.lang_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesisUtterance.lang')
   @DocsEditable()
-  void set lang(String value) => _blink.BlinkSpeechSynthesisUtterance.instance.lang_Setter_(this, value);
-
+  void set lang(String value) => _blink.BlinkSpeechSynthesisUtterance.instance.lang_Setter_(unwrap_jso(this), value);
+  
   @DomName('SpeechSynthesisUtterance.pitch')
   @DocsEditable()
-  num get pitch => _blink.BlinkSpeechSynthesisUtterance.instance.pitch_Getter_(this);
-
+  num get pitch => _blink.BlinkSpeechSynthesisUtterance.instance.pitch_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesisUtterance.pitch')
   @DocsEditable()
-  void set pitch(num value) => _blink.BlinkSpeechSynthesisUtterance.instance.pitch_Setter_(this, value);
-
+  void set pitch(num value) => _blink.BlinkSpeechSynthesisUtterance.instance.pitch_Setter_(unwrap_jso(this), value);
+  
   @DomName('SpeechSynthesisUtterance.rate')
   @DocsEditable()
-  num get rate => _blink.BlinkSpeechSynthesisUtterance.instance.rate_Getter_(this);
-
+  num get rate => _blink.BlinkSpeechSynthesisUtterance.instance.rate_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesisUtterance.rate')
   @DocsEditable()
-  void set rate(num value) => _blink.BlinkSpeechSynthesisUtterance.instance.rate_Setter_(this, value);
-
+  void set rate(num value) => _blink.BlinkSpeechSynthesisUtterance.instance.rate_Setter_(unwrap_jso(this), value);
+  
   @DomName('SpeechSynthesisUtterance.text')
   @DocsEditable()
-  String get text => _blink.BlinkSpeechSynthesisUtterance.instance.text_Getter_(this);
-
+  String get text => _blink.BlinkSpeechSynthesisUtterance.instance.text_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesisUtterance.text')
   @DocsEditable()
-  void set text(String value) => _blink.BlinkSpeechSynthesisUtterance.instance.text_Setter_(this, value);
-
+  void set text(String value) => _blink.BlinkSpeechSynthesisUtterance.instance.text_Setter_(unwrap_jso(this), value);
+  
   @DomName('SpeechSynthesisUtterance.voice')
   @DocsEditable()
-  SpeechSynthesisVoice get voice => _blink.BlinkSpeechSynthesisUtterance.instance.voice_Getter_(this);
-
+  SpeechSynthesisVoice get voice => wrap_jso(_blink.BlinkSpeechSynthesisUtterance.instance.voice_Getter_(unwrap_jso(this)));
+  
   @DomName('SpeechSynthesisUtterance.voice')
   @DocsEditable()
-  void set voice(SpeechSynthesisVoice value) => _blink.BlinkSpeechSynthesisUtterance.instance.voice_Setter_(this, value);
-
+  void set voice(SpeechSynthesisVoice value) => _blink.BlinkSpeechSynthesisUtterance.instance.voice_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('SpeechSynthesisUtterance.volume')
   @DocsEditable()
-  num get volume => _blink.BlinkSpeechSynthesisUtterance.instance.volume_Getter_(this);
-
+  num get volume => _blink.BlinkSpeechSynthesisUtterance.instance.volume_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesisUtterance.volume')
   @DocsEditable()
-  void set volume(num value) => _blink.BlinkSpeechSynthesisUtterance.instance.volume_Setter_(this, value);
-
+  void set volume(num value) => _blink.BlinkSpeechSynthesisUtterance.instance.volume_Setter_(unwrap_jso(this), value);
+  
   /// Stream of `boundary` events handled by this [SpeechSynthesisUtterance].
   @DomName('SpeechSynthesisUtterance.onboundary')
   @DocsEditable()
@@ -29655,24 +29685,24 @@
 
   @DomName('SpeechSynthesisVoice.default')
   @DocsEditable()
-  bool get defaultValue => _blink.BlinkSpeechSynthesisVoice.instance.default_Getter_(this);
-
+  bool get defaultValue => _blink.BlinkSpeechSynthesisVoice.instance.default_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesisVoice.lang')
   @DocsEditable()
-  String get lang => _blink.BlinkSpeechSynthesisVoice.instance.lang_Getter_(this);
-
+  String get lang => _blink.BlinkSpeechSynthesisVoice.instance.lang_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesisVoice.localService')
   @DocsEditable()
-  bool get localService => _blink.BlinkSpeechSynthesisVoice.instance.localService_Getter_(this);
-
+  bool get localService => _blink.BlinkSpeechSynthesisVoice.instance.localService_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesisVoice.name')
   @DocsEditable()
-  String get name => _blink.BlinkSpeechSynthesisVoice.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkSpeechSynthesisVoice.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('SpeechSynthesisVoice.voiceURI')
   @DocsEditable()
-  String get voiceUri => _blink.BlinkSpeechSynthesisVoice.instance.voiceURI_Getter_(this);
-
+  String get voiceUri => _blink.BlinkSpeechSynthesisVoice.instance.voiceURI_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -29766,35 +29796,35 @@
 
   @DomName('Storage.length')
   @DocsEditable()
-  int get _length => _blink.BlinkStorage.instance.length_Getter_(this);
-
+  int get _length => _blink.BlinkStorage.instance.length_Getter_(unwrap_jso(this));
+  
   bool __delete__(index_OR_name) {
     if ((index_OR_name is int || index_OR_name == null)) {
-      return _blink.BlinkStorage.instance.$__delete___Callback_1_(this, index_OR_name);
+      return _blink.BlinkStorage.instance.$__delete___Callback_1_(unwrap_jso(this), unwrap_jso(index_OR_name));
     }
     if ((index_OR_name is String || index_OR_name == null)) {
-      return _blink.BlinkStorage.instance.$__delete___Callback_1_(this, index_OR_name);
+      return _blink.BlinkStorage.instance.$__delete___Callback_1_(unwrap_jso(this), unwrap_jso(index_OR_name));
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   String __getter__(index_OR_name) {
     if ((index_OR_name is int || index_OR_name == null)) {
-      return _blink.BlinkStorage.instance.$__getter___Callback_1_(this, index_OR_name);
+      return _blink.BlinkStorage.instance.$__getter___Callback_1_(unwrap_jso(this), unwrap_jso(index_OR_name));
     }
     if ((index_OR_name is String || index_OR_name == null)) {
-      return _blink.BlinkStorage.instance.$__getter___Callback_1_(this, index_OR_name);
+      return _blink.BlinkStorage.instance.$__getter___Callback_1_(unwrap_jso(this), unwrap_jso(index_OR_name));
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   void __setter__(index_OR_name, String value) {
     if ((value is String || value == null) && (index_OR_name is int || index_OR_name == null)) {
-      _blink.BlinkStorage.instance.$__setter___Callback_2_(this, index_OR_name, value);
+      _blink.BlinkStorage.instance.$__setter___Callback_2_(unwrap_jso(this), unwrap_jso(index_OR_name), value);
       return;
     }
     if ((value is String || value == null) && (index_OR_name is String || index_OR_name == null)) {
-      _blink.BlinkStorage.instance.$__setter___Callback_2_(this, index_OR_name, value);
+      _blink.BlinkStorage.instance.$__setter___Callback_2_(unwrap_jso(this), unwrap_jso(index_OR_name), value);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -29802,24 +29832,24 @@
 
   @DomName('Storage.clear')
   @DocsEditable()
-  void _clear() => _blink.BlinkStorage.instance.clear_Callback_0_(this);
-
+  void _clear() => _blink.BlinkStorage.instance.clear_Callback_0_(unwrap_jso(this));
+  
   @DomName('Storage.getItem')
   @DocsEditable()
-  String _getItem(String key) => _blink.BlinkStorage.instance.getItem_Callback_1_(this, key);
-
+  String _getItem(String key) => _blink.BlinkStorage.instance.getItem_Callback_1_(unwrap_jso(this), key);
+  
   @DomName('Storage.key')
   @DocsEditable()
-  String _key(int index) => _blink.BlinkStorage.instance.key_Callback_1_(this, index);
-
+  String _key(int index) => _blink.BlinkStorage.instance.key_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('Storage.removeItem')
   @DocsEditable()
-  void _removeItem(String key) => _blink.BlinkStorage.instance.removeItem_Callback_1_(this, key);
-
+  void _removeItem(String key) => _blink.BlinkStorage.instance.removeItem_Callback_1_(unwrap_jso(this), key);
+  
   @DomName('Storage.setItem')
   @DocsEditable()
-  void _setItem(String key, String data) => _blink.BlinkStorage.instance.setItem_Callback_2_(this, key, data);
-
+  void _setItem(String key, String data) => _blink.BlinkStorage.instance.setItem_Callback_2_(unwrap_jso(this), key, data);
+  
 }
 // 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
@@ -29856,28 +29886,28 @@
 
   @DomName('StorageEvent.key')
   @DocsEditable()
-  String get key => _blink.BlinkStorageEvent.instance.key_Getter_(this);
-
+  String get key => _blink.BlinkStorageEvent.instance.key_Getter_(unwrap_jso(this));
+  
   @DomName('StorageEvent.newValue')
   @DocsEditable()
-  String get newValue => _blink.BlinkStorageEvent.instance.newValue_Getter_(this);
-
+  String get newValue => _blink.BlinkStorageEvent.instance.newValue_Getter_(unwrap_jso(this));
+  
   @DomName('StorageEvent.oldValue')
   @DocsEditable()
-  String get oldValue => _blink.BlinkStorageEvent.instance.oldValue_Getter_(this);
-
+  String get oldValue => _blink.BlinkStorageEvent.instance.oldValue_Getter_(unwrap_jso(this));
+  
   @DomName('StorageEvent.storageArea')
   @DocsEditable()
-  Storage get storageArea => _blink.BlinkStorageEvent.instance.storageArea_Getter_(this);
-
+  Storage get storageArea => wrap_jso(_blink.BlinkStorageEvent.instance.storageArea_Getter_(unwrap_jso(this)));
+  
   @DomName('StorageEvent.url')
   @DocsEditable()
-  String get url => _blink.BlinkStorageEvent.instance.url_Getter_(this);
-
+  String get url => _blink.BlinkStorageEvent.instance.url_Getter_(unwrap_jso(this));
+  
   @DomName('StorageEvent.initStorageEvent')
   @DocsEditable()
-  void _initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg) => _blink.BlinkStorageEvent.instance.initStorageEvent_Callback_8_(this, typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, storageAreaArg);
-
+  void _initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg) => _blink.BlinkStorageEvent.instance.initStorageEvent_Callback_8_(unwrap_jso(this), typeArg, canBubbleArg, cancelableArg, keyArg, oldValueArg, newValueArg, urlArg, unwrap_jso(storageAreaArg));
+  
 }
 // 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
@@ -29897,13 +29927,13 @@
   @DomName('StorageInfo.quota')
   @DocsEditable()
   @Experimental() // untriaged
-  int get quota => _blink.BlinkStorageInfo.instance.quota_Getter_(this);
-
+  int get quota => _blink.BlinkStorageInfo.instance.quota_Getter_(unwrap_jso(this));
+  
   @DomName('StorageInfo.usage')
   @DocsEditable()
   @Experimental() // untriaged
-  int get usage => _blink.BlinkStorageInfo.instance.usage_Getter_(this);
-
+  int get usage => _blink.BlinkStorageInfo.instance.usage_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -29923,18 +29953,18 @@
   @DomName('StorageQuota.supportedTypes')
   @DocsEditable()
   @Experimental() // untriaged
-  List<String> get supportedTypes => _blink.BlinkStorageQuota.instance.supportedTypes_Getter_(this);
-
+  List<String> get supportedTypes => _blink.BlinkStorageQuota.instance.supportedTypes_Getter_(unwrap_jso(this));
+  
   @DomName('StorageQuota.queryInfo')
   @DocsEditable()
   @Experimental() // untriaged
-  Future queryInfo(String type) => _blink.BlinkStorageQuota.instance.queryInfo_Callback_1_(this, type);
-
+  Future queryInfo(String type) => _blink.BlinkStorageQuota.instance.queryInfo_Callback_1_(unwrap_jso(this), type);
+  
   @DomName('StorageQuota.requestPersistentQuota')
   @DocsEditable()
   @Experimental() // untriaged
-  Future requestPersistentQuota(int newQuota) => _blink.BlinkStorageQuota.instance.requestPersistentQuota_Callback_1_(this, newQuota);
-
+  Future requestPersistentQuota(int newQuota) => _blink.BlinkStorageQuota.instance.requestPersistentQuota_Callback_1_(unwrap_jso(this), newQuota);
+  
 }
 // 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
@@ -29994,32 +30024,32 @@
 
   @DomName('HTMLStyleElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLStyleElement.instance.disabled_Getter_(this);
-
+  bool get disabled => _blink.BlinkHTMLStyleElement.instance.disabled_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLStyleElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLStyleElement.instance.disabled_Setter_(this, value);
-
+  void set disabled(bool value) => _blink.BlinkHTMLStyleElement.instance.disabled_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLStyleElement.media')
   @DocsEditable()
-  String get media => _blink.BlinkHTMLStyleElement.instance.media_Getter_(this);
-
+  String get media => _blink.BlinkHTMLStyleElement.instance.media_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLStyleElement.media')
   @DocsEditable()
-  void set media(String value) => _blink.BlinkHTMLStyleElement.instance.media_Setter_(this, value);
-
+  void set media(String value) => _blink.BlinkHTMLStyleElement.instance.media_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLStyleElement.sheet')
   @DocsEditable()
-  StyleSheet get sheet => _blink.BlinkHTMLStyleElement.instance.sheet_Getter_(this);
-
+  StyleSheet get sheet => wrap_jso(_blink.BlinkHTMLStyleElement.instance.sheet_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLStyleElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLStyleElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkHTMLStyleElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLStyleElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkHTMLStyleElement.instance.type_Setter_(this, value);
-
+  void set type(String value) => _blink.BlinkHTMLStyleElement.instance.type_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -30038,12 +30068,12 @@
 
   @DomName('StyleMedia.type')
   @DocsEditable()
-  String get type => _blink.BlinkStyleMedia.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkStyleMedia.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('StyleMedia.matchMedium')
   @DocsEditable()
-  bool matchMedium(String mediaquery) => _blink.BlinkStyleMedia.instance.matchMedium_Callback_1_(this, mediaquery);
-
+  bool matchMedium(String mediaquery) => _blink.BlinkStyleMedia.instance.matchMedium_Callback_1_(unwrap_jso(this), mediaquery);
+  
 }
 // 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
@@ -30060,36 +30090,36 @@
 
   @DomName('StyleSheet.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkStyleSheet.instance.disabled_Getter_(this);
-
+  bool get disabled => _blink.BlinkStyleSheet.instance.disabled_Getter_(unwrap_jso(this));
+  
   @DomName('StyleSheet.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkStyleSheet.instance.disabled_Setter_(this, value);
-
+  void set disabled(bool value) => _blink.BlinkStyleSheet.instance.disabled_Setter_(unwrap_jso(this), value);
+  
   @DomName('StyleSheet.href')
   @DocsEditable()
-  String get href => _blink.BlinkStyleSheet.instance.href_Getter_(this);
-
+  String get href => _blink.BlinkStyleSheet.instance.href_Getter_(unwrap_jso(this));
+  
   @DomName('StyleSheet.media')
   @DocsEditable()
-  MediaList get media => _blink.BlinkStyleSheet.instance.media_Getter_(this);
-
+  MediaList get media => wrap_jso(_blink.BlinkStyleSheet.instance.media_Getter_(unwrap_jso(this)));
+  
   @DomName('StyleSheet.ownerNode')
   @DocsEditable()
-  Node get ownerNode => _blink.BlinkStyleSheet.instance.ownerNode_Getter_(this);
-
+  Node get ownerNode => wrap_jso(_blink.BlinkStyleSheet.instance.ownerNode_Getter_(unwrap_jso(this)));
+  
   @DomName('StyleSheet.parentStyleSheet')
   @DocsEditable()
-  StyleSheet get parentStyleSheet => _blink.BlinkStyleSheet.instance.parentStyleSheet_Getter_(this);
-
+  StyleSheet get parentStyleSheet => wrap_jso(_blink.BlinkStyleSheet.instance.parentStyleSheet_Getter_(unwrap_jso(this)));
+  
   @DomName('StyleSheet.title')
   @DocsEditable()
-  String get title => _blink.BlinkStyleSheet.instance.title_Getter_(this);
-
+  String get title => _blink.BlinkStyleSheet.instance.title_Getter_(unwrap_jso(this));
+  
   @DomName('StyleSheet.type')
   @DocsEditable()
-  String get type => _blink.BlinkStyleSheet.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkStyleSheet.instance.type_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -30140,32 +30170,32 @@
 
   @DomName('HTMLTableCellElement.cellIndex')
   @DocsEditable()
-  int get cellIndex => _blink.BlinkHTMLTableCellElement.instance.cellIndex_Getter_(this);
-
+  int get cellIndex => _blink.BlinkHTMLTableCellElement.instance.cellIndex_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTableCellElement.colSpan')
   @DocsEditable()
-  int get colSpan => _blink.BlinkHTMLTableCellElement.instance.colSpan_Getter_(this);
-
+  int get colSpan => _blink.BlinkHTMLTableCellElement.instance.colSpan_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTableCellElement.colSpan')
   @DocsEditable()
-  void set colSpan(int value) => _blink.BlinkHTMLTableCellElement.instance.colSpan_Setter_(this, value);
-
+  void set colSpan(int value) => _blink.BlinkHTMLTableCellElement.instance.colSpan_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTableCellElement.headers')
   @DocsEditable()
-  String get headers => _blink.BlinkHTMLTableCellElement.instance.headers_Getter_(this);
-
+  String get headers => _blink.BlinkHTMLTableCellElement.instance.headers_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTableCellElement.headers')
   @DocsEditable()
-  void set headers(String value) => _blink.BlinkHTMLTableCellElement.instance.headers_Setter_(this, value);
-
+  void set headers(String value) => _blink.BlinkHTMLTableCellElement.instance.headers_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTableCellElement.rowSpan')
   @DocsEditable()
-  int get rowSpan => _blink.BlinkHTMLTableCellElement.instance.rowSpan_Getter_(this);
-
+  int get rowSpan => _blink.BlinkHTMLTableCellElement.instance.rowSpan_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTableCellElement.rowSpan')
   @DocsEditable()
-  void set rowSpan(int value) => _blink.BlinkHTMLTableCellElement.instance.rowSpan_Setter_(this, value);
-
+  void set rowSpan(int value) => _blink.BlinkHTMLTableCellElement.instance.rowSpan_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -30192,12 +30222,12 @@
 
   @DomName('HTMLTableColElement.span')
   @DocsEditable()
-  int get span => _blink.BlinkHTMLTableColElement.instance.span_Getter_(this);
-
+  int get span => _blink.BlinkHTMLTableColElement.instance.span_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTableColElement.span')
   @DocsEditable()
-  void set span(int value) => _blink.BlinkHTMLTableColElement.instance.span_Setter_(this, value);
-
+  void set span(int value) => _blink.BlinkHTMLTableColElement.instance.span_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -30242,73 +30272,73 @@
 
   @DomName('HTMLTableElement.caption')
   @DocsEditable()
-  TableCaptionElement get caption => _blink.BlinkHTMLTableElement.instance.caption_Getter_(this);
-
+  TableCaptionElement get caption => wrap_jso(_blink.BlinkHTMLTableElement.instance.caption_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLTableElement.caption')
   @DocsEditable()
-  void set caption(TableCaptionElement value) => _blink.BlinkHTMLTableElement.instance.caption_Setter_(this, value);
-
+  void set caption(TableCaptionElement value) => _blink.BlinkHTMLTableElement.instance.caption_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('HTMLTableElement.rows')
   @DocsEditable()
-  List<Node> get _rows => _blink.BlinkHTMLTableElement.instance.rows_Getter_(this);
-
+  List<Node> get _rows => wrap_jso_list(_blink.BlinkHTMLTableElement.instance.rows_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLTableElement.tBodies')
   @DocsEditable()
-  List<Node> get _tBodies => _blink.BlinkHTMLTableElement.instance.tBodies_Getter_(this);
-
+  List<Node> get _tBodies => wrap_jso_list(_blink.BlinkHTMLTableElement.instance.tBodies_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLTableElement.tFoot')
   @DocsEditable()
-  TableSectionElement get tFoot => _blink.BlinkHTMLTableElement.instance.tFoot_Getter_(this);
-
+  TableSectionElement get tFoot => wrap_jso(_blink.BlinkHTMLTableElement.instance.tFoot_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLTableElement.tFoot')
   @DocsEditable()
-  void set tFoot(TableSectionElement value) => _blink.BlinkHTMLTableElement.instance.tFoot_Setter_(this, value);
-
+  void set tFoot(TableSectionElement value) => _blink.BlinkHTMLTableElement.instance.tFoot_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('HTMLTableElement.tHead')
   @DocsEditable()
-  TableSectionElement get tHead => _blink.BlinkHTMLTableElement.instance.tHead_Getter_(this);
-
+  TableSectionElement get tHead => wrap_jso(_blink.BlinkHTMLTableElement.instance.tHead_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLTableElement.tHead')
   @DocsEditable()
-  void set tHead(TableSectionElement value) => _blink.BlinkHTMLTableElement.instance.tHead_Setter_(this, value);
-
+  void set tHead(TableSectionElement value) => _blink.BlinkHTMLTableElement.instance.tHead_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('HTMLTableElement.createCaption')
   @DocsEditable()
-  HtmlElement _createCaption() => _blink.BlinkHTMLTableElement.instance.createCaption_Callback_0_(this);
-
+  HtmlElement _createCaption() => wrap_jso(_blink.BlinkHTMLTableElement.instance.createCaption_Callback_0_(unwrap_jso(this)));
+  
   @DomName('HTMLTableElement.createTBody')
   @DocsEditable()
-  HtmlElement _createTBody() => _blink.BlinkHTMLTableElement.instance.createTBody_Callback_0_(this);
-
+  HtmlElement _createTBody() => wrap_jso(_blink.BlinkHTMLTableElement.instance.createTBody_Callback_0_(unwrap_jso(this)));
+  
   @DomName('HTMLTableElement.createTFoot')
   @DocsEditable()
-  HtmlElement _createTFoot() => _blink.BlinkHTMLTableElement.instance.createTFoot_Callback_0_(this);
-
+  HtmlElement _createTFoot() => wrap_jso(_blink.BlinkHTMLTableElement.instance.createTFoot_Callback_0_(unwrap_jso(this)));
+  
   @DomName('HTMLTableElement.createTHead')
   @DocsEditable()
-  HtmlElement _createTHead() => _blink.BlinkHTMLTableElement.instance.createTHead_Callback_0_(this);
-
+  HtmlElement _createTHead() => wrap_jso(_blink.BlinkHTMLTableElement.instance.createTHead_Callback_0_(unwrap_jso(this)));
+  
   @DomName('HTMLTableElement.deleteCaption')
   @DocsEditable()
-  void deleteCaption() => _blink.BlinkHTMLTableElement.instance.deleteCaption_Callback_0_(this);
-
+  void deleteCaption() => _blink.BlinkHTMLTableElement.instance.deleteCaption_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLTableElement.deleteRow')
   @DocsEditable()
-  void deleteRow(int index) => _blink.BlinkHTMLTableElement.instance.deleteRow_Callback_1_(this, index);
-
+  void deleteRow(int index) => _blink.BlinkHTMLTableElement.instance.deleteRow_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('HTMLTableElement.deleteTFoot')
   @DocsEditable()
-  void deleteTFoot() => _blink.BlinkHTMLTableElement.instance.deleteTFoot_Callback_0_(this);
-
+  void deleteTFoot() => _blink.BlinkHTMLTableElement.instance.deleteTFoot_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLTableElement.deleteTHead')
   @DocsEditable()
-  void deleteTHead() => _blink.BlinkHTMLTableElement.instance.deleteTHead_Callback_0_(this);
-
+  void deleteTHead() => _blink.BlinkHTMLTableElement.instance.deleteTHead_Callback_0_(unwrap_jso(this));
+  
   HtmlElement _insertRow([int index]) {
     if (index != null) {
-      return _blink.BlinkHTMLTableElement.instance.insertRow_Callback_1_(this, index);
+      return _blink.BlinkHTMLTableElement.instance.insertRow_Callback_1_(unwrap_jso(this), index);
     }
-    return _blink.BlinkHTMLTableElement.instance.insertRow_Callback_0_(this);
+    return _blink.BlinkHTMLTableElement.instance.insertRow_Callback_0_(unwrap_jso(this));
   }
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -30346,25 +30376,25 @@
 
   @DomName('HTMLTableRowElement.cells')
   @DocsEditable()
-  List<Node> get _cells => _blink.BlinkHTMLTableRowElement.instance.cells_Getter_(this);
-
+  List<Node> get _cells => wrap_jso_list(_blink.BlinkHTMLTableRowElement.instance.cells_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLTableRowElement.rowIndex')
   @DocsEditable()
-  int get rowIndex => _blink.BlinkHTMLTableRowElement.instance.rowIndex_Getter_(this);
-
+  int get rowIndex => _blink.BlinkHTMLTableRowElement.instance.rowIndex_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTableRowElement.sectionRowIndex')
   @DocsEditable()
-  int get sectionRowIndex => _blink.BlinkHTMLTableRowElement.instance.sectionRowIndex_Getter_(this);
-
+  int get sectionRowIndex => _blink.BlinkHTMLTableRowElement.instance.sectionRowIndex_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTableRowElement.deleteCell')
   @DocsEditable()
-  void deleteCell(int index) => _blink.BlinkHTMLTableRowElement.instance.deleteCell_Callback_1_(this, index);
-
+  void deleteCell(int index) => _blink.BlinkHTMLTableRowElement.instance.deleteCell_Callback_1_(unwrap_jso(this), index);
+  
   HtmlElement _insertCell([int index]) {
     if (index != null) {
-      return _blink.BlinkHTMLTableRowElement.instance.insertCell_Callback_1_(this, index);
+      return _blink.BlinkHTMLTableRowElement.instance.insertCell_Callback_1_(unwrap_jso(this), index);
     }
-    return _blink.BlinkHTMLTableRowElement.instance.insertCell_Callback_0_(this);
+    return _blink.BlinkHTMLTableRowElement.instance.insertCell_Callback_0_(unwrap_jso(this));
   }
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -30398,17 +30428,17 @@
 
   @DomName('HTMLTableSectionElement.rows')
   @DocsEditable()
-  List<Node> get _rows => _blink.BlinkHTMLTableSectionElement.instance.rows_Getter_(this);
-
+  List<Node> get _rows => wrap_jso_list(_blink.BlinkHTMLTableSectionElement.instance.rows_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLTableSectionElement.deleteRow')
   @DocsEditable()
-  void deleteRow(int index) => _blink.BlinkHTMLTableSectionElement.instance.deleteRow_Callback_1_(this, index);
-
+  void deleteRow(int index) => _blink.BlinkHTMLTableSectionElement.instance.deleteRow_Callback_1_(unwrap_jso(this), index);
+  
   HtmlElement _insertRow([int index]) {
     if (index != null) {
-      return _blink.BlinkHTMLTableSectionElement.instance.insertRow_Callback_1_(this, index);
+      return _blink.BlinkHTMLTableSectionElement.instance.insertRow_Callback_1_(unwrap_jso(this), index);
     }
-    return _blink.BlinkHTMLTableSectionElement.instance.insertRow_Callback_0_(this);
+    return _blink.BlinkHTMLTableSectionElement.instance.insertRow_Callback_0_(unwrap_jso(this));
   }
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -30442,8 +30472,8 @@
 
   @DomName('HTMLTemplateElement.content')
   @DocsEditable()
-  DocumentFragment get content => _blink.BlinkHTMLTemplateElement.instance.content_Getter_(this);
-
+  DocumentFragment get content => wrap_jso(_blink.BlinkHTMLTemplateElement.instance.content_Getter_(unwrap_jso(this)));
+  
 
   /**
    * An override to place the contents into content rather than as child nodes.
@@ -30476,17 +30506,17 @@
 
   @DomName('Text.wholeText')
   @DocsEditable()
-  String get wholeText => _blink.BlinkText.instance.wholeText_Getter_(this);
-
+  String get wholeText => _blink.BlinkText.instance.wholeText_Getter_(unwrap_jso(this));
+  
   @DomName('Text.getDestinationInsertionPoints')
   @DocsEditable()
   @Experimental() // untriaged
-  List<Node> getDestinationInsertionPoints() => _blink.BlinkText.instance.getDestinationInsertionPoints_Callback_0_(this);
-
+  List<Node> getDestinationInsertionPoints() => wrap_jso_list(_blink.BlinkText.instance.getDestinationInsertionPoints_Callback_0_(unwrap_jso(this)));
+  
   @DomName('Text.splitText')
   @DocsEditable()
-  Text splitText(int offset) => _blink.BlinkText.instance.splitText_Callback_1_(this, offset);
-
+  Text splitText(int offset) => wrap_jso(_blink.BlinkText.instance.splitText_Callback_1_(unwrap_jso(this), offset));
+  
 }
 // 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
@@ -30513,194 +30543,194 @@
 
   @DomName('HTMLTextAreaElement.autofocus')
   @DocsEditable()
-  bool get autofocus => _blink.BlinkHTMLTextAreaElement.instance.autofocus_Getter_(this);
-
+  bool get autofocus => _blink.BlinkHTMLTextAreaElement.instance.autofocus_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.autofocus')
   @DocsEditable()
-  void set autofocus(bool value) => _blink.BlinkHTMLTextAreaElement.instance.autofocus_Setter_(this, value);
-
+  void set autofocus(bool value) => _blink.BlinkHTMLTextAreaElement.instance.autofocus_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTextAreaElement.cols')
   @DocsEditable()
-  int get cols => _blink.BlinkHTMLTextAreaElement.instance.cols_Getter_(this);
-
+  int get cols => _blink.BlinkHTMLTextAreaElement.instance.cols_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.cols')
   @DocsEditable()
-  void set cols(int value) => _blink.BlinkHTMLTextAreaElement.instance.cols_Setter_(this, value);
-
+  void set cols(int value) => _blink.BlinkHTMLTextAreaElement.instance.cols_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTextAreaElement.defaultValue')
   @DocsEditable()
-  String get defaultValue => _blink.BlinkHTMLTextAreaElement.instance.defaultValue_Getter_(this);
-
+  String get defaultValue => _blink.BlinkHTMLTextAreaElement.instance.defaultValue_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.defaultValue')
   @DocsEditable()
-  void set defaultValue(String value) => _blink.BlinkHTMLTextAreaElement.instance.defaultValue_Setter_(this, value);
-
+  void set defaultValue(String value) => _blink.BlinkHTMLTextAreaElement.instance.defaultValue_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTextAreaElement.dirName')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#dom-textarea-dirname
   @Experimental()
-  String get dirName => _blink.BlinkHTMLTextAreaElement.instance.dirName_Getter_(this);
-
+  String get dirName => _blink.BlinkHTMLTextAreaElement.instance.dirName_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.dirName')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#dom-textarea-dirname
   @Experimental()
-  void set dirName(String value) => _blink.BlinkHTMLTextAreaElement.instance.dirName_Setter_(this, value);
-
+  void set dirName(String value) => _blink.BlinkHTMLTextAreaElement.instance.dirName_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTextAreaElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkHTMLTextAreaElement.instance.disabled_Getter_(this);
-
+  bool get disabled => _blink.BlinkHTMLTextAreaElement.instance.disabled_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkHTMLTextAreaElement.instance.disabled_Setter_(this, value);
-
+  void set disabled(bool value) => _blink.BlinkHTMLTextAreaElement.instance.disabled_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTextAreaElement.form')
   @DocsEditable()
-  FormElement get form => _blink.BlinkHTMLTextAreaElement.instance.form_Getter_(this);
-
+  FormElement get form => wrap_jso(_blink.BlinkHTMLTextAreaElement.instance.form_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLTextAreaElement.inputMode')
   @DocsEditable()
   @Experimental() // untriaged
-  String get inputMode => _blink.BlinkHTMLTextAreaElement.instance.inputMode_Getter_(this);
-
+  String get inputMode => _blink.BlinkHTMLTextAreaElement.instance.inputMode_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.inputMode')
   @DocsEditable()
   @Experimental() // untriaged
-  void set inputMode(String value) => _blink.BlinkHTMLTextAreaElement.instance.inputMode_Setter_(this, value);
-
+  void set inputMode(String value) => _blink.BlinkHTMLTextAreaElement.instance.inputMode_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTextAreaElement.labels')
   @DocsEditable()
   @Unstable()
-  List<Node> get labels => _blink.BlinkHTMLTextAreaElement.instance.labels_Getter_(this);
-
+  List<Node> get labels => wrap_jso_list(_blink.BlinkHTMLTextAreaElement.instance.labels_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLTextAreaElement.maxLength')
   @DocsEditable()
-  int get maxLength => _blink.BlinkHTMLTextAreaElement.instance.maxLength_Getter_(this);
-
+  int get maxLength => _blink.BlinkHTMLTextAreaElement.instance.maxLength_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.maxLength')
   @DocsEditable()
-  void set maxLength(int value) => _blink.BlinkHTMLTextAreaElement.instance.maxLength_Setter_(this, value);
-
+  void set maxLength(int value) => _blink.BlinkHTMLTextAreaElement.instance.maxLength_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTextAreaElement.name')
   @DocsEditable()
-  String get name => _blink.BlinkHTMLTextAreaElement.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkHTMLTextAreaElement.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkHTMLTextAreaElement.instance.name_Setter_(this, value);
-
+  void set name(String value) => _blink.BlinkHTMLTextAreaElement.instance.name_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTextAreaElement.placeholder')
   @DocsEditable()
-  String get placeholder => _blink.BlinkHTMLTextAreaElement.instance.placeholder_Getter_(this);
-
+  String get placeholder => _blink.BlinkHTMLTextAreaElement.instance.placeholder_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.placeholder')
   @DocsEditable()
-  void set placeholder(String value) => _blink.BlinkHTMLTextAreaElement.instance.placeholder_Setter_(this, value);
-
+  void set placeholder(String value) => _blink.BlinkHTMLTextAreaElement.instance.placeholder_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTextAreaElement.readOnly')
   @DocsEditable()
-  bool get readOnly => _blink.BlinkHTMLTextAreaElement.instance.readOnly_Getter_(this);
-
+  bool get readOnly => _blink.BlinkHTMLTextAreaElement.instance.readOnly_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.readOnly')
   @DocsEditable()
-  void set readOnly(bool value) => _blink.BlinkHTMLTextAreaElement.instance.readOnly_Setter_(this, value);
-
+  void set readOnly(bool value) => _blink.BlinkHTMLTextAreaElement.instance.readOnly_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTextAreaElement.required')
   @DocsEditable()
-  bool get required => _blink.BlinkHTMLTextAreaElement.instance.required_Getter_(this);
-
+  bool get required => _blink.BlinkHTMLTextAreaElement.instance.required_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.required')
   @DocsEditable()
-  void set required(bool value) => _blink.BlinkHTMLTextAreaElement.instance.required_Setter_(this, value);
-
+  void set required(bool value) => _blink.BlinkHTMLTextAreaElement.instance.required_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTextAreaElement.rows')
   @DocsEditable()
-  int get rows => _blink.BlinkHTMLTextAreaElement.instance.rows_Getter_(this);
-
+  int get rows => _blink.BlinkHTMLTextAreaElement.instance.rows_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.rows')
   @DocsEditable()
-  void set rows(int value) => _blink.BlinkHTMLTextAreaElement.instance.rows_Setter_(this, value);
-
+  void set rows(int value) => _blink.BlinkHTMLTextAreaElement.instance.rows_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTextAreaElement.selectionDirection')
   @DocsEditable()
-  String get selectionDirection => _blink.BlinkHTMLTextAreaElement.instance.selectionDirection_Getter_(this);
-
+  String get selectionDirection => _blink.BlinkHTMLTextAreaElement.instance.selectionDirection_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.selectionDirection')
   @DocsEditable()
-  void set selectionDirection(String value) => _blink.BlinkHTMLTextAreaElement.instance.selectionDirection_Setter_(this, value);
-
+  void set selectionDirection(String value) => _blink.BlinkHTMLTextAreaElement.instance.selectionDirection_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTextAreaElement.selectionEnd')
   @DocsEditable()
-  int get selectionEnd => _blink.BlinkHTMLTextAreaElement.instance.selectionEnd_Getter_(this);
-
+  int get selectionEnd => _blink.BlinkHTMLTextAreaElement.instance.selectionEnd_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.selectionEnd')
   @DocsEditable()
-  void set selectionEnd(int value) => _blink.BlinkHTMLTextAreaElement.instance.selectionEnd_Setter_(this, value);
-
+  void set selectionEnd(int value) => _blink.BlinkHTMLTextAreaElement.instance.selectionEnd_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTextAreaElement.selectionStart')
   @DocsEditable()
-  int get selectionStart => _blink.BlinkHTMLTextAreaElement.instance.selectionStart_Getter_(this);
-
+  int get selectionStart => _blink.BlinkHTMLTextAreaElement.instance.selectionStart_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.selectionStart')
   @DocsEditable()
-  void set selectionStart(int value) => _blink.BlinkHTMLTextAreaElement.instance.selectionStart_Setter_(this, value);
-
+  void set selectionStart(int value) => _blink.BlinkHTMLTextAreaElement.instance.selectionStart_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTextAreaElement.textLength')
   @DocsEditable()
-  int get textLength => _blink.BlinkHTMLTextAreaElement.instance.textLength_Getter_(this);
-
+  int get textLength => _blink.BlinkHTMLTextAreaElement.instance.textLength_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkHTMLTextAreaElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkHTMLTextAreaElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.validationMessage')
   @DocsEditable()
-  String get validationMessage => _blink.BlinkHTMLTextAreaElement.instance.validationMessage_Getter_(this);
-
+  String get validationMessage => _blink.BlinkHTMLTextAreaElement.instance.validationMessage_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.validity')
   @DocsEditable()
-  ValidityState get validity => _blink.BlinkHTMLTextAreaElement.instance.validity_Getter_(this);
-
+  ValidityState get validity => wrap_jso(_blink.BlinkHTMLTextAreaElement.instance.validity_Getter_(unwrap_jso(this)));
+  
   @DomName('HTMLTextAreaElement.value')
   @DocsEditable()
-  String get value => _blink.BlinkHTMLTextAreaElement.instance.value_Getter_(this);
-
+  String get value => _blink.BlinkHTMLTextAreaElement.instance.value_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkHTMLTextAreaElement.instance.value_Setter_(this, value);
-
+  void set value(String value) => _blink.BlinkHTMLTextAreaElement.instance.value_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTextAreaElement.willValidate')
   @DocsEditable()
-  bool get willValidate => _blink.BlinkHTMLTextAreaElement.instance.willValidate_Getter_(this);
-
+  bool get willValidate => _blink.BlinkHTMLTextAreaElement.instance.willValidate_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.wrap')
   @DocsEditable()
-  String get wrap => _blink.BlinkHTMLTextAreaElement.instance.wrap_Getter_(this);
-
+  String get wrap => _blink.BlinkHTMLTextAreaElement.instance.wrap_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.wrap')
   @DocsEditable()
-  void set wrap(String value) => _blink.BlinkHTMLTextAreaElement.instance.wrap_Setter_(this, value);
-
+  void set wrap(String value) => _blink.BlinkHTMLTextAreaElement.instance.wrap_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTextAreaElement.checkValidity')
   @DocsEditable()
-  bool checkValidity() => _blink.BlinkHTMLTextAreaElement.instance.checkValidity_Callback_0_(this);
-
+  bool checkValidity() => _blink.BlinkHTMLTextAreaElement.instance.checkValidity_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.select')
   @DocsEditable()
-  void select() => _blink.BlinkHTMLTextAreaElement.instance.select_Callback_0_(this);
-
+  void select() => _blink.BlinkHTMLTextAreaElement.instance.select_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLTextAreaElement.setCustomValidity')
   @DocsEditable()
-  void setCustomValidity(String error) => _blink.BlinkHTMLTextAreaElement.instance.setCustomValidity_Callback_1_(this, error);
-
+  void setCustomValidity(String error) => _blink.BlinkHTMLTextAreaElement.instance.setCustomValidity_Callback_1_(unwrap_jso(this), error);
+  
   void setRangeText(String replacement, {int start, int end, String selectionMode}) {
     if ((replacement is String || replacement == null) && start == null && end == null && selectionMode == null) {
-      _blink.BlinkHTMLTextAreaElement.instance.setRangeText_Callback_1_(this, replacement);
+      _blink.BlinkHTMLTextAreaElement.instance.setRangeText_Callback_1_(unwrap_jso(this), replacement);
       return;
     }
     if ((selectionMode is String || selectionMode == null) && (end is int || end == null) && (start is int || start == null) && (replacement is String || replacement == null)) {
-      _blink.BlinkHTMLTextAreaElement.instance.setRangeText_Callback_4_(this, replacement, start, end, selectionMode);
+      _blink.BlinkHTMLTextAreaElement.instance.setRangeText_Callback_4_(unwrap_jso(this), replacement, start, end, selectionMode);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -30708,10 +30738,10 @@
 
   void setSelectionRange(int start, int end, [String direction]) {
     if (direction != null) {
-      _blink.BlinkHTMLTextAreaElement.instance.setSelectionRange_Callback_3_(this, start, end, direction);
+      _blink.BlinkHTMLTextAreaElement.instance.setSelectionRange_Callback_3_(unwrap_jso(this), start, end, direction);
       return;
     }
-    _blink.BlinkHTMLTextAreaElement.instance.setSelectionRange_Callback_2_(this, start, end);
+    _blink.BlinkHTMLTextAreaElement.instance.setSelectionRange_Callback_2_(unwrap_jso(this), start, end);
     return;
   }
 
@@ -30740,12 +30770,12 @@
 
   @DomName('TextEvent.data')
   @DocsEditable()
-  String get data => _blink.BlinkTextEvent.instance.data_Getter_(this);
-
+  String get data => _blink.BlinkTextEvent.instance.data_Getter_(unwrap_jso(this));
+  
   @DomName('TextEvent.initTextEvent')
   @DocsEditable()
-  void _initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Window viewArg, String dataArg) => _blink.BlinkTextEvent.instance.initTextEvent_Callback_5_(this, typeArg, canBubbleArg, cancelableArg, viewArg, dataArg);
-
+  void _initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Window viewArg, String dataArg) => _blink.BlinkTextEvent.instance.initTextEvent_Callback_5_(unwrap_jso(this), typeArg, canBubbleArg, cancelableArg, unwrap_jso(viewArg), dataArg);
+  
 }
 // 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
@@ -30763,62 +30793,62 @@
   @DomName('TextMetrics.actualBoundingBoxAscent')
   @DocsEditable()
   @Experimental() // untriaged
-  double get actualBoundingBoxAscent => _blink.BlinkTextMetrics.instance.actualBoundingBoxAscent_Getter_(this);
-
+  double get actualBoundingBoxAscent => _blink.BlinkTextMetrics.instance.actualBoundingBoxAscent_Getter_(unwrap_jso(this));
+  
   @DomName('TextMetrics.actualBoundingBoxDescent')
   @DocsEditable()
   @Experimental() // untriaged
-  double get actualBoundingBoxDescent => _blink.BlinkTextMetrics.instance.actualBoundingBoxDescent_Getter_(this);
-
+  double get actualBoundingBoxDescent => _blink.BlinkTextMetrics.instance.actualBoundingBoxDescent_Getter_(unwrap_jso(this));
+  
   @DomName('TextMetrics.actualBoundingBoxLeft')
   @DocsEditable()
   @Experimental() // untriaged
-  double get actualBoundingBoxLeft => _blink.BlinkTextMetrics.instance.actualBoundingBoxLeft_Getter_(this);
-
+  double get actualBoundingBoxLeft => _blink.BlinkTextMetrics.instance.actualBoundingBoxLeft_Getter_(unwrap_jso(this));
+  
   @DomName('TextMetrics.actualBoundingBoxRight')
   @DocsEditable()
   @Experimental() // untriaged
-  double get actualBoundingBoxRight => _blink.BlinkTextMetrics.instance.actualBoundingBoxRight_Getter_(this);
-
+  double get actualBoundingBoxRight => _blink.BlinkTextMetrics.instance.actualBoundingBoxRight_Getter_(unwrap_jso(this));
+  
   @DomName('TextMetrics.alphabeticBaseline')
   @DocsEditable()
   @Experimental() // untriaged
-  double get alphabeticBaseline => _blink.BlinkTextMetrics.instance.alphabeticBaseline_Getter_(this);
-
+  double get alphabeticBaseline => _blink.BlinkTextMetrics.instance.alphabeticBaseline_Getter_(unwrap_jso(this));
+  
   @DomName('TextMetrics.emHeightAscent')
   @DocsEditable()
   @Experimental() // untriaged
-  double get emHeightAscent => _blink.BlinkTextMetrics.instance.emHeightAscent_Getter_(this);
-
+  double get emHeightAscent => _blink.BlinkTextMetrics.instance.emHeightAscent_Getter_(unwrap_jso(this));
+  
   @DomName('TextMetrics.emHeightDescent')
   @DocsEditable()
   @Experimental() // untriaged
-  double get emHeightDescent => _blink.BlinkTextMetrics.instance.emHeightDescent_Getter_(this);
-
+  double get emHeightDescent => _blink.BlinkTextMetrics.instance.emHeightDescent_Getter_(unwrap_jso(this));
+  
   @DomName('TextMetrics.fontBoundingBoxAscent')
   @DocsEditable()
   @Experimental() // untriaged
-  double get fontBoundingBoxAscent => _blink.BlinkTextMetrics.instance.fontBoundingBoxAscent_Getter_(this);
-
+  double get fontBoundingBoxAscent => _blink.BlinkTextMetrics.instance.fontBoundingBoxAscent_Getter_(unwrap_jso(this));
+  
   @DomName('TextMetrics.fontBoundingBoxDescent')
   @DocsEditable()
   @Experimental() // untriaged
-  double get fontBoundingBoxDescent => _blink.BlinkTextMetrics.instance.fontBoundingBoxDescent_Getter_(this);
-
+  double get fontBoundingBoxDescent => _blink.BlinkTextMetrics.instance.fontBoundingBoxDescent_Getter_(unwrap_jso(this));
+  
   @DomName('TextMetrics.hangingBaseline')
   @DocsEditable()
   @Experimental() // untriaged
-  double get hangingBaseline => _blink.BlinkTextMetrics.instance.hangingBaseline_Getter_(this);
-
+  double get hangingBaseline => _blink.BlinkTextMetrics.instance.hangingBaseline_Getter_(unwrap_jso(this));
+  
   @DomName('TextMetrics.ideographicBaseline')
   @DocsEditable()
   @Experimental() // untriaged
-  double get ideographicBaseline => _blink.BlinkTextMetrics.instance.ideographicBaseline_Getter_(this);
-
+  double get ideographicBaseline => _blink.BlinkTextMetrics.instance.ideographicBaseline_Getter_(unwrap_jso(this));
+  
   @DomName('TextMetrics.width')
   @DocsEditable()
-  double get width => _blink.BlinkTextMetrics.instance.width_Getter_(this);
-
+  double get width => _blink.BlinkTextMetrics.instance.width_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -30847,60 +30877,60 @@
 
   @DomName('TextTrack.activeCues')
   @DocsEditable()
-  TextTrackCueList get activeCues => _blink.BlinkTextTrack.instance.activeCues_Getter_(this);
-
+  TextTrackCueList get activeCues => wrap_jso(_blink.BlinkTextTrack.instance.activeCues_Getter_(unwrap_jso(this)));
+  
   @DomName('TextTrack.cues')
   @DocsEditable()
-  TextTrackCueList get cues => _blink.BlinkTextTrack.instance.cues_Getter_(this);
-
+  TextTrackCueList get cues => wrap_jso(_blink.BlinkTextTrack.instance.cues_Getter_(unwrap_jso(this)));
+  
   @DomName('TextTrack.id')
   @DocsEditable()
   @Experimental() // untriaged
-  String get id => _blink.BlinkTextTrack.instance.id_Getter_(this);
-
+  String get id => _blink.BlinkTextTrack.instance.id_Getter_(unwrap_jso(this));
+  
   @DomName('TextTrack.kind')
   @DocsEditable()
-  String get kind => _blink.BlinkTextTrack.instance.kind_Getter_(this);
-
+  String get kind => _blink.BlinkTextTrack.instance.kind_Getter_(unwrap_jso(this));
+  
   @DomName('TextTrack.label')
   @DocsEditable()
-  String get label => _blink.BlinkTextTrack.instance.label_Getter_(this);
-
+  String get label => _blink.BlinkTextTrack.instance.label_Getter_(unwrap_jso(this));
+  
   @DomName('TextTrack.language')
   @DocsEditable()
-  String get language => _blink.BlinkTextTrack.instance.language_Getter_(this);
-
+  String get language => _blink.BlinkTextTrack.instance.language_Getter_(unwrap_jso(this));
+  
   @DomName('TextTrack.mode')
   @DocsEditable()
-  String get mode => _blink.BlinkTextTrack.instance.mode_Getter_(this);
-
+  String get mode => _blink.BlinkTextTrack.instance.mode_Getter_(unwrap_jso(this));
+  
   @DomName('TextTrack.mode')
   @DocsEditable()
-  void set mode(String value) => _blink.BlinkTextTrack.instance.mode_Setter_(this, value);
-
+  void set mode(String value) => _blink.BlinkTextTrack.instance.mode_Setter_(unwrap_jso(this), value);
+  
   @DomName('TextTrack.regions')
   @DocsEditable()
   @Experimental() // untriaged
-  VttRegionList get regions => _blink.BlinkTextTrack.instance.regions_Getter_(this);
-
+  VttRegionList get regions => wrap_jso(_blink.BlinkTextTrack.instance.regions_Getter_(unwrap_jso(this)));
+  
   @DomName('TextTrack.addCue')
   @DocsEditable()
-  void addCue(TextTrackCue cue) => _blink.BlinkTextTrack.instance.addCue_Callback_1_(this, cue);
-
+  void addCue(TextTrackCue cue) => _blink.BlinkTextTrack.instance.addCue_Callback_1_(unwrap_jso(this), unwrap_jso(cue));
+  
   @DomName('TextTrack.addRegion')
   @DocsEditable()
   @Experimental() // untriaged
-  void addRegion(VttRegion region) => _blink.BlinkTextTrack.instance.addRegion_Callback_1_(this, region);
-
+  void addRegion(VttRegion region) => _blink.BlinkTextTrack.instance.addRegion_Callback_1_(unwrap_jso(this), unwrap_jso(region));
+  
   @DomName('TextTrack.removeCue')
   @DocsEditable()
-  void removeCue(TextTrackCue cue) => _blink.BlinkTextTrack.instance.removeCue_Callback_1_(this, cue);
-
+  void removeCue(TextTrackCue cue) => _blink.BlinkTextTrack.instance.removeCue_Callback_1_(unwrap_jso(this), unwrap_jso(cue));
+  
   @DomName('TextTrack.removeRegion')
   @DocsEditable()
   @Experimental() // untriaged
-  void removeRegion(VttRegion region) => _blink.BlinkTextTrack.instance.removeRegion_Callback_1_(this, region);
-
+  void removeRegion(VttRegion region) => _blink.BlinkTextTrack.instance.removeRegion_Callback_1_(unwrap_jso(this), unwrap_jso(region));
+  
   /// Stream of `cuechange` events handled by this [TextTrack].
   @DomName('TextTrack.oncuechange')
   @DocsEditable()
@@ -30944,40 +30974,40 @@
 
   @DomName('TextTrackCue.endTime')
   @DocsEditable()
-  num get endTime => _blink.BlinkTextTrackCue.instance.endTime_Getter_(this);
-
+  num get endTime => _blink.BlinkTextTrackCue.instance.endTime_Getter_(unwrap_jso(this));
+  
   @DomName('TextTrackCue.endTime')
   @DocsEditable()
-  void set endTime(num value) => _blink.BlinkTextTrackCue.instance.endTime_Setter_(this, value);
-
+  void set endTime(num value) => _blink.BlinkTextTrackCue.instance.endTime_Setter_(unwrap_jso(this), value);
+  
   @DomName('TextTrackCue.id')
   @DocsEditable()
-  String get id => _blink.BlinkTextTrackCue.instance.id_Getter_(this);
-
+  String get id => _blink.BlinkTextTrackCue.instance.id_Getter_(unwrap_jso(this));
+  
   @DomName('TextTrackCue.id')
   @DocsEditable()
-  void set id(String value) => _blink.BlinkTextTrackCue.instance.id_Setter_(this, value);
-
+  void set id(String value) => _blink.BlinkTextTrackCue.instance.id_Setter_(unwrap_jso(this), value);
+  
   @DomName('TextTrackCue.pauseOnExit')
   @DocsEditable()
-  bool get pauseOnExit => _blink.BlinkTextTrackCue.instance.pauseOnExit_Getter_(this);
-
+  bool get pauseOnExit => _blink.BlinkTextTrackCue.instance.pauseOnExit_Getter_(unwrap_jso(this));
+  
   @DomName('TextTrackCue.pauseOnExit')
   @DocsEditable()
-  void set pauseOnExit(bool value) => _blink.BlinkTextTrackCue.instance.pauseOnExit_Setter_(this, value);
-
+  void set pauseOnExit(bool value) => _blink.BlinkTextTrackCue.instance.pauseOnExit_Setter_(unwrap_jso(this), value);
+  
   @DomName('TextTrackCue.startTime')
   @DocsEditable()
-  num get startTime => _blink.BlinkTextTrackCue.instance.startTime_Getter_(this);
-
+  num get startTime => _blink.BlinkTextTrackCue.instance.startTime_Getter_(unwrap_jso(this));
+  
   @DomName('TextTrackCue.startTime')
   @DocsEditable()
-  void set startTime(num value) => _blink.BlinkTextTrackCue.instance.startTime_Setter_(this, value);
-
+  void set startTime(num value) => _blink.BlinkTextTrackCue.instance.startTime_Setter_(unwrap_jso(this), value);
+  
   @DomName('TextTrackCue.track')
   @DocsEditable()
-  TextTrack get track => _blink.BlinkTextTrackCue.instance.track_Getter_(this);
-
+  TextTrack get track => wrap_jso(_blink.BlinkTextTrackCue.instance.track_Getter_(unwrap_jso(this)));
+  
   /// Stream of `enter` events handled by this [TextTrackCue].
   @DomName('TextTrackCue.onenter')
   @DocsEditable()
@@ -31006,16 +31036,16 @@
 
   @DomName('TextTrackCueList.length')
   @DocsEditable()
-  int get length => _blink.BlinkTextTrackCueList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkTextTrackCueList.instance.length_Getter_(unwrap_jso(this));
+  
   TextTrackCue operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkTextTrackCueList.instance.item_Callback_1_(this, index);
+    return wrap_jso(_blink.BlinkTextTrackCueList.instance.item_Callback_1_(unwrap_jso(this), index));
   }
 
-  TextTrackCue _nativeIndexedGetter(int index) => _blink.BlinkTextTrackCueList.instance.item_Callback_1_(this, index);
-
+  TextTrackCue _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkTextTrackCueList.instance.item_Callback_1_(unwrap_jso(this), index));
+ 
   void operator[]=(int index, TextTrackCue value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -31056,12 +31086,12 @@
 
   @DomName('TextTrackCueList.getCueById')
   @DocsEditable()
-  TextTrackCue getCueById(String id) => _blink.BlinkTextTrackCueList.instance.getCueById_Callback_1_(this, id);
-
+  TextTrackCue getCueById(String id) => wrap_jso(_blink.BlinkTextTrackCueList.instance.getCueById_Callback_1_(unwrap_jso(this), id));
+  
   @DomName('TextTrackCueList.item')
   @DocsEditable()
-  TextTrackCue item(int index) => _blink.BlinkTextTrackCueList.instance.item_Callback_1_(this, index);
-
+  TextTrackCue item(int index) => wrap_jso(_blink.BlinkTextTrackCueList.instance.item_Callback_1_(unwrap_jso(this), index));
+  
 }
 // 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
@@ -31095,16 +31125,16 @@
 
   @DomName('TextTrackList.length')
   @DocsEditable()
-  int get length => _blink.BlinkTextTrackList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkTextTrackList.instance.length_Getter_(unwrap_jso(this));
+  
   TextTrack operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkTextTrackList.instance.item_Callback_1_(this, index);
+    return wrap_jso(_blink.BlinkTextTrackList.instance.item_Callback_1_(unwrap_jso(this), index));
   }
 
-  TextTrack _nativeIndexedGetter(int index) => _blink.BlinkTextTrackList.instance.item_Callback_1_(this, index);
-
+  TextTrack _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkTextTrackList.instance.item_Callback_1_(unwrap_jso(this), index));
+ 
   void operator[]=(int index, TextTrack value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -31146,12 +31176,12 @@
   @DomName('TextTrackList.getTrackById')
   @DocsEditable()
   @Experimental() // untriaged
-  TextTrack getTrackById(String id) => _blink.BlinkTextTrackList.instance.getTrackById_Callback_1_(this, id);
-
+  TextTrack getTrackById(String id) => wrap_jso(_blink.BlinkTextTrackList.instance.getTrackById_Callback_1_(unwrap_jso(this), id));
+  
   @DomName('TextTrackList.item')
   @DocsEditable()
-  TextTrack item(int index) => _blink.BlinkTextTrackList.instance.item_Callback_1_(this, index);
-
+  TextTrack item(int index) => wrap_jso(_blink.BlinkTextTrackList.instance.item_Callback_1_(unwrap_jso(this), index));
+  
   /// Stream of `addtrack` events handled by this [TextTrackList].
   @DomName('TextTrackList.onaddtrack')
   @DocsEditable()
@@ -31179,16 +31209,16 @@
 
   @DomName('TimeRanges.length')
   @DocsEditable()
-  int get length => _blink.BlinkTimeRanges.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkTimeRanges.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('TimeRanges.end')
   @DocsEditable()
-  double end(int index) => _blink.BlinkTimeRanges.instance.end_Callback_1_(this, index);
-
+  double end(int index) => _blink.BlinkTimeRanges.instance.end_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('TimeRanges.start')
   @DocsEditable()
-  double start(int index) => _blink.BlinkTimeRanges.instance.start_Callback_1_(this, index);
-
+  double start(int index) => _blink.BlinkTimeRanges.instance.start_Callback_1_(unwrap_jso(this), index);
+  
 }
 // 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
@@ -31216,93 +31246,93 @@
   @DomName('Timing.delay')
   @DocsEditable()
   @Experimental() // untriaged
-  num get delay => _blink.BlinkTiming.instance.delay_Getter_(this);
-
+  num get delay => _blink.BlinkTiming.instance.delay_Getter_(unwrap_jso(this));
+  
   @DomName('Timing.delay')
   @DocsEditable()
   @Experimental() // untriaged
-  void set delay(num value) => _blink.BlinkTiming.instance.delay_Setter_(this, value);
-
+  void set delay(num value) => _blink.BlinkTiming.instance.delay_Setter_(unwrap_jso(this), value);
+  
   @DomName('Timing.direction')
   @DocsEditable()
   @Experimental() // untriaged
-  String get direction => _blink.BlinkTiming.instance.direction_Getter_(this);
-
+  String get direction => _blink.BlinkTiming.instance.direction_Getter_(unwrap_jso(this));
+  
   @DomName('Timing.direction')
   @DocsEditable()
   @Experimental() // untriaged
-  void set direction(String value) => _blink.BlinkTiming.instance.direction_Setter_(this, value);
-
+  void set direction(String value) => _blink.BlinkTiming.instance.direction_Setter_(unwrap_jso(this), value);
+  
   @DomName('Timing.easing')
   @DocsEditable()
   @Experimental() // untriaged
-  String get easing => _blink.BlinkTiming.instance.easing_Getter_(this);
-
+  String get easing => _blink.BlinkTiming.instance.easing_Getter_(unwrap_jso(this));
+  
   @DomName('Timing.easing')
   @DocsEditable()
   @Experimental() // untriaged
-  void set easing(String value) => _blink.BlinkTiming.instance.easing_Setter_(this, value);
-
+  void set easing(String value) => _blink.BlinkTiming.instance.easing_Setter_(unwrap_jso(this), value);
+  
   @DomName('Timing.endDelay')
   @DocsEditable()
   @Experimental() // untriaged
-  num get endDelay => _blink.BlinkTiming.instance.endDelay_Getter_(this);
-
+  num get endDelay => _blink.BlinkTiming.instance.endDelay_Getter_(unwrap_jso(this));
+  
   @DomName('Timing.endDelay')
   @DocsEditable()
   @Experimental() // untriaged
-  void set endDelay(num value) => _blink.BlinkTiming.instance.endDelay_Setter_(this, value);
-
+  void set endDelay(num value) => _blink.BlinkTiming.instance.endDelay_Setter_(unwrap_jso(this), value);
+  
   @DomName('Timing.fill')
   @DocsEditable()
   @Experimental() // untriaged
-  String get fill => _blink.BlinkTiming.instance.fill_Getter_(this);
-
+  String get fill => _blink.BlinkTiming.instance.fill_Getter_(unwrap_jso(this));
+  
   @DomName('Timing.fill')
   @DocsEditable()
   @Experimental() // untriaged
-  void set fill(String value) => _blink.BlinkTiming.instance.fill_Setter_(this, value);
-
+  void set fill(String value) => _blink.BlinkTiming.instance.fill_Setter_(unwrap_jso(this), value);
+  
   @DomName('Timing.iterationStart')
   @DocsEditable()
   @Experimental() // untriaged
-  num get iterationStart => _blink.BlinkTiming.instance.iterationStart_Getter_(this);
-
+  num get iterationStart => _blink.BlinkTiming.instance.iterationStart_Getter_(unwrap_jso(this));
+  
   @DomName('Timing.iterationStart')
   @DocsEditable()
   @Experimental() // untriaged
-  void set iterationStart(num value) => _blink.BlinkTiming.instance.iterationStart_Setter_(this, value);
-
+  void set iterationStart(num value) => _blink.BlinkTiming.instance.iterationStart_Setter_(unwrap_jso(this), value);
+  
   @DomName('Timing.iterations')
   @DocsEditable()
   @Experimental() // untriaged
-  num get iterations => _blink.BlinkTiming.instance.iterations_Getter_(this);
-
+  num get iterations => _blink.BlinkTiming.instance.iterations_Getter_(unwrap_jso(this));
+  
   @DomName('Timing.iterations')
   @DocsEditable()
   @Experimental() // untriaged
-  void set iterations(num value) => _blink.BlinkTiming.instance.iterations_Setter_(this, value);
-
+  void set iterations(num value) => _blink.BlinkTiming.instance.iterations_Setter_(unwrap_jso(this), value);
+  
   @DomName('Timing.playbackRate')
   @DocsEditable()
   @Experimental() // untriaged
-  num get playbackRate => _blink.BlinkTiming.instance.playbackRate_Getter_(this);
-
+  num get playbackRate => _blink.BlinkTiming.instance.playbackRate_Getter_(unwrap_jso(this));
+  
   @DomName('Timing.playbackRate')
   @DocsEditable()
   @Experimental() // untriaged
-  void set playbackRate(num value) => _blink.BlinkTiming.instance.playbackRate_Setter_(this, value);
-
+  void set playbackRate(num value) => _blink.BlinkTiming.instance.playbackRate_Setter_(unwrap_jso(this), value);
+  
   @DomName('Timing.__getter__')
   @DocsEditable()
   @Experimental() // untriaged
-  Object __getter__(String name) => _blink.BlinkTiming.instance.$__getter___Callback_1_(this, name);
-
+  Object __getter__(String name) => wrap_jso(_blink.BlinkTiming.instance.$__getter___Callback_1_(unwrap_jso(this), name));
+  
   @DomName('Timing.__setter__')
   @DocsEditable()
   @Experimental() // untriaged
-  void __setter__(String name, num duration) => _blink.BlinkTiming.instance.$__setter___Callback_2_(this, name, duration);
-
+  void __setter__(String name, num duration) => _blink.BlinkTiming.instance.$__setter___Callback_2_(unwrap_jso(this), name, duration);
+  
 }
 // 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
@@ -31343,69 +31373,69 @@
 
   @DomName('Touch.clientX')
   @DocsEditable()
-  double get _clientX => _blink.BlinkTouch.instance.clientX_Getter_(this);
-
+  double get _clientX => _blink.BlinkTouch.instance.clientX_Getter_(unwrap_jso(this));
+  
   @DomName('Touch.clientY')
   @DocsEditable()
-  double get _clientY => _blink.BlinkTouch.instance.clientY_Getter_(this);
-
+  double get _clientY => _blink.BlinkTouch.instance.clientY_Getter_(unwrap_jso(this));
+  
   @DomName('Touch.force')
   @DocsEditable()
   @Experimental() // untriaged
-  double get force => _blink.BlinkTouch.instance.force_Getter_(this);
-
+  double get force => _blink.BlinkTouch.instance.force_Getter_(unwrap_jso(this));
+  
   @DomName('Touch.identifier')
   @DocsEditable()
-  int get identifier => _blink.BlinkTouch.instance.identifier_Getter_(this);
-
+  int get identifier => _blink.BlinkTouch.instance.identifier_Getter_(unwrap_jso(this));
+  
   @DomName('Touch.pageX')
   @DocsEditable()
-  double get _pageX => _blink.BlinkTouch.instance.pageX_Getter_(this);
-
+  double get _pageX => _blink.BlinkTouch.instance.pageX_Getter_(unwrap_jso(this));
+  
   @DomName('Touch.pageY')
   @DocsEditable()
-  double get _pageY => _blink.BlinkTouch.instance.pageY_Getter_(this);
-
+  double get _pageY => _blink.BlinkTouch.instance.pageY_Getter_(unwrap_jso(this));
+  
   @DomName('Touch.radiusX')
   @DocsEditable()
   @Experimental() // untriaged
-  double get _radiusX => _blink.BlinkTouch.instance.radiusX_Getter_(this);
-
+  double get _radiusX => _blink.BlinkTouch.instance.radiusX_Getter_(unwrap_jso(this));
+  
   @DomName('Touch.radiusY')
   @DocsEditable()
   @Experimental() // untriaged
-  double get _radiusY => _blink.BlinkTouch.instance.radiusY_Getter_(this);
-
+  double get _radiusY => _blink.BlinkTouch.instance.radiusY_Getter_(unwrap_jso(this));
+  
   @DomName('Touch.screenX')
   @DocsEditable()
-  double get _screenX => _blink.BlinkTouch.instance.screenX_Getter_(this);
-
+  double get _screenX => _blink.BlinkTouch.instance.screenX_Getter_(unwrap_jso(this));
+  
   @DomName('Touch.screenY')
   @DocsEditable()
-  double get _screenY => _blink.BlinkTouch.instance.screenY_Getter_(this);
-
+  double get _screenY => _blink.BlinkTouch.instance.screenY_Getter_(unwrap_jso(this));
+  
   @DomName('Touch.target')
   @DocsEditable()
-  EventTarget get target => _blink.BlinkTouch.instance.target_Getter_(this);
-
+  EventTarget get target => wrap_jso(_blink.BlinkTouch.instance.target_Getter_(unwrap_jso(this)));
+  
   @DomName('Touch.webkitRotationAngle')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  double get rotationAngle => _blink.BlinkTouch.instance.webkitRotationAngle_Getter_(this);
-
+  double get rotationAngle => _blink.BlinkTouch.instance.webkitRotationAngle_Getter_(unwrap_jso(this));
+  
 
 // As of Chrome 37, these all changed from long to double.  This code
 // preserves backwards compatability for the time being.
-  int get __clientX => _blink.BlinkTouch.clientX_Getter(this).round();
-  int get __clientY => _blink.BlinkTouch.clientY_Getter(this).round();
-  int get __screenX => _blink.BlinkTouch.screenX_Getter(this).round();
-  int get __screenY => _blink.BlinkTouch.screenY_Getter(this).round();
-  int get __pageX => _blink.BlinkTouch.pageX_Getter(this).round();
-  int get __pageY => _blink.BlinkTouch.pageY_Getter(this).round();
-  int get __radiusX => _blink.BlinkTouch.radiusX_Getter(this).round();
-  int get __radiusY => _blink.BlinkTouch.radiusY_Getter(this).round();
+  int get __clientX => _blink.BlinkTouch.clientX_Getter(unwrap_jso(this)).round();
+  int get __clientY => _blink.BlinkTouch.clientY_Getter(unwrap_jso(this)).round();
+  int get __screenX => _blink.BlinkTouch.screenX_Getter(unwrap_jso(this)).round();
+  int get __screenY => _blink.BlinkTouch.screenY_Getter(unwrap_jso(this)).round();
+  int get __pageX => _blink.BlinkTouch.pageX_Getter(unwrap_jso(this)).round();
+  int get __pageY => _blink.BlinkTouch.pageY_Getter(unwrap_jso(this)).round();
+  int get __radiusX => _blink.BlinkTouch.radiusX_Getter(unwrap_jso(this)).round();
+  int get __radiusY => _blink.BlinkTouch.radiusY_Getter(unwrap_jso(this)).round();
 
   @DomName('Touch.clientX')
   @DomName('Touch.clientY')
@@ -31463,36 +31493,36 @@
 
   @DomName('TouchEvent.altKey')
   @DocsEditable()
-  bool get altKey => _blink.BlinkTouchEvent.instance.altKey_Getter_(this);
-
+  bool get altKey => _blink.BlinkTouchEvent.instance.altKey_Getter_(unwrap_jso(this));
+  
   @DomName('TouchEvent.changedTouches')
   @DocsEditable()
-  TouchList get changedTouches => _blink.BlinkTouchEvent.instance.changedTouches_Getter_(this);
-
+  TouchList get changedTouches => wrap_jso(_blink.BlinkTouchEvent.instance.changedTouches_Getter_(unwrap_jso(this)));
+  
   @DomName('TouchEvent.ctrlKey')
   @DocsEditable()
-  bool get ctrlKey => _blink.BlinkTouchEvent.instance.ctrlKey_Getter_(this);
-
+  bool get ctrlKey => _blink.BlinkTouchEvent.instance.ctrlKey_Getter_(unwrap_jso(this));
+  
   @DomName('TouchEvent.metaKey')
   @DocsEditable()
-  bool get metaKey => _blink.BlinkTouchEvent.instance.metaKey_Getter_(this);
-
+  bool get metaKey => _blink.BlinkTouchEvent.instance.metaKey_Getter_(unwrap_jso(this));
+  
   @DomName('TouchEvent.shiftKey')
   @DocsEditable()
-  bool get shiftKey => _blink.BlinkTouchEvent.instance.shiftKey_Getter_(this);
-
+  bool get shiftKey => _blink.BlinkTouchEvent.instance.shiftKey_Getter_(unwrap_jso(this));
+  
   @DomName('TouchEvent.targetTouches')
   @DocsEditable()
-  TouchList get targetTouches => _blink.BlinkTouchEvent.instance.targetTouches_Getter_(this);
-
+  TouchList get targetTouches => wrap_jso(_blink.BlinkTouchEvent.instance.targetTouches_Getter_(unwrap_jso(this)));
+  
   @DomName('TouchEvent.touches')
   @DocsEditable()
-  TouchList get touches => _blink.BlinkTouchEvent.instance.touches_Getter_(this);
-
+  TouchList get touches => wrap_jso(_blink.BlinkTouchEvent.instance.touches_Getter_(unwrap_jso(this)));
+  
   @DomName('TouchEvent.initTouchEvent')
   @DocsEditable()
-  void _initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, Window view, int unused1, int unused2, int unused3, int unused4, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) => _blink.BlinkTouchEvent.instance.initTouchEvent_Callback_13_(this, touches, targetTouches, changedTouches, type, view, unused1, unused2, unused3, unused4, ctrlKey, altKey, shiftKey, metaKey);
-
+  void _initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, Window view, int unused1, int unused2, int unused3, int unused4, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) => _blink.BlinkTouchEvent.instance.initTouchEvent_Callback_13_(unwrap_jso(this), unwrap_jso(touches), unwrap_jso(targetTouches), unwrap_jso(changedTouches), type, unwrap_jso(view), unused1, unused2, unused3, unused4, ctrlKey, altKey, shiftKey, metaKey);
+  
 
   /**
    * Checks if touch events supported on the current platform.
@@ -31526,16 +31556,16 @@
 
   @DomName('TouchList.length')
   @DocsEditable()
-  int get length => _blink.BlinkTouchList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkTouchList.instance.length_Getter_(unwrap_jso(this));
+  
   Touch operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkTouchList.instance.item_Callback_1_(this, index);
+    return wrap_jso(_blink.BlinkTouchList.instance.item_Callback_1_(unwrap_jso(this), index));
   }
 
-  Touch _nativeIndexedGetter(int index) => _blink.BlinkTouchList.instance.item_Callback_1_(this, index);
-
+  Touch _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkTouchList.instance.item_Callback_1_(unwrap_jso(this), index));
+ 
   void operator[]=(int index, Touch value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -31576,8 +31606,8 @@
 
   @DomName('TouchList.item')
   @DocsEditable()
-  Touch item(int index) => _blink.BlinkTouchList.instance.item_Callback_1_(this, index);
-
+  Touch item(int index) => wrap_jso(_blink.BlinkTouchList.instance.item_Callback_1_(unwrap_jso(this), index));
+  
 }
 // 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
@@ -31628,62 +31658,62 @@
 
   @DomName('HTMLTrackElement.default')
   @DocsEditable()
-  bool get defaultValue => _blink.BlinkHTMLTrackElement.instance.default_Getter_(this);
-
+  bool get defaultValue => _blink.BlinkHTMLTrackElement.instance.default_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTrackElement.default')
   @DocsEditable()
-  void set defaultValue(bool value) => _blink.BlinkHTMLTrackElement.instance.default_Setter_(this, value);
-
+  void set defaultValue(bool value) => _blink.BlinkHTMLTrackElement.instance.default_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTrackElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  String get integrity => _blink.BlinkHTMLTrackElement.instance.integrity_Getter_(this);
-
+  String get integrity => _blink.BlinkHTMLTrackElement.instance.integrity_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTrackElement.integrity')
   @DocsEditable()
   @Experimental() // untriaged
-  void set integrity(String value) => _blink.BlinkHTMLTrackElement.instance.integrity_Setter_(this, value);
-
+  void set integrity(String value) => _blink.BlinkHTMLTrackElement.instance.integrity_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTrackElement.kind')
   @DocsEditable()
-  String get kind => _blink.BlinkHTMLTrackElement.instance.kind_Getter_(this);
-
+  String get kind => _blink.BlinkHTMLTrackElement.instance.kind_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTrackElement.kind')
   @DocsEditable()
-  void set kind(String value) => _blink.BlinkHTMLTrackElement.instance.kind_Setter_(this, value);
-
+  void set kind(String value) => _blink.BlinkHTMLTrackElement.instance.kind_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTrackElement.label')
   @DocsEditable()
-  String get label => _blink.BlinkHTMLTrackElement.instance.label_Getter_(this);
-
+  String get label => _blink.BlinkHTMLTrackElement.instance.label_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTrackElement.label')
   @DocsEditable()
-  void set label(String value) => _blink.BlinkHTMLTrackElement.instance.label_Setter_(this, value);
-
+  void set label(String value) => _blink.BlinkHTMLTrackElement.instance.label_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTrackElement.readyState')
   @DocsEditable()
-  int get readyState => _blink.BlinkHTMLTrackElement.instance.readyState_Getter_(this);
-
+  int get readyState => _blink.BlinkHTMLTrackElement.instance.readyState_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTrackElement.src')
   @DocsEditable()
-  String get src => _blink.BlinkHTMLTrackElement.instance.src_Getter_(this);
-
+  String get src => _blink.BlinkHTMLTrackElement.instance.src_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTrackElement.src')
   @DocsEditable()
-  void set src(String value) => _blink.BlinkHTMLTrackElement.instance.src_Setter_(this, value);
-
+  void set src(String value) => _blink.BlinkHTMLTrackElement.instance.src_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTrackElement.srclang')
   @DocsEditable()
-  String get srclang => _blink.BlinkHTMLTrackElement.instance.srclang_Getter_(this);
-
+  String get srclang => _blink.BlinkHTMLTrackElement.instance.srclang_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLTrackElement.srclang')
   @DocsEditable()
-  void set srclang(String value) => _blink.BlinkHTMLTrackElement.instance.srclang_Setter_(this, value);
-
+  void set srclang(String value) => _blink.BlinkHTMLTrackElement.instance.srclang_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLTrackElement.track')
   @DocsEditable()
-  TextTrack get track => _blink.BlinkHTMLTrackElement.instance.track_Getter_(this);
-
+  TextTrack get track => wrap_jso(_blink.BlinkHTMLTrackElement.instance.track_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -31701,8 +31731,8 @@
 
   @DomName('TrackEvent.track')
   @DocsEditable()
-  Object get track => _blink.BlinkTrackEvent.instance.track_Getter_(this);
-
+  Object get track => _blink.BlinkTrackEvent.instance.track_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -31719,16 +31749,16 @@
 
   @DomName('TransitionEvent.elapsedTime')
   @DocsEditable()
-  double get elapsedTime => _blink.BlinkTransitionEvent.instance.elapsedTime_Getter_(this);
-
+  double get elapsedTime => _blink.BlinkTransitionEvent.instance.elapsedTime_Getter_(unwrap_jso(this));
+  
   @DomName('TransitionEvent.propertyName')
   @DocsEditable()
-  String get propertyName => _blink.BlinkTransitionEvent.instance.propertyName_Getter_(this);
-
+  String get propertyName => _blink.BlinkTransitionEvent.instance.propertyName_Getter_(unwrap_jso(this));
+  
   @DomName('TransitionEvent.pseudoElement')
   @DocsEditable()
-  String get pseudoElement => _blink.BlinkTransitionEvent.instance.pseudoElement_Getter_(this);
-
+  String get pseudoElement => _blink.BlinkTransitionEvent.instance.pseudoElement_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -31746,52 +31776,52 @@
 
   @DomName('TreeWalker.currentNode')
   @DocsEditable()
-  Node get currentNode => _blink.BlinkTreeWalker.instance.currentNode_Getter_(this);
-
+  Node get currentNode => wrap_jso(_blink.BlinkTreeWalker.instance.currentNode_Getter_(unwrap_jso(this)));
+  
   @DomName('TreeWalker.currentNode')
   @DocsEditable()
-  void set currentNode(Node value) => _blink.BlinkTreeWalker.instance.currentNode_Setter_(this, value);
-
+  void set currentNode(Node value) => _blink.BlinkTreeWalker.instance.currentNode_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('TreeWalker.filter')
   @DocsEditable()
-  NodeFilter get filter => _blink.BlinkTreeWalker.instance.filter_Getter_(this);
-
+  NodeFilter get filter => wrap_jso(_blink.BlinkTreeWalker.instance.filter_Getter_(unwrap_jso(this)));
+  
   @DomName('TreeWalker.root')
   @DocsEditable()
-  Node get root => _blink.BlinkTreeWalker.instance.root_Getter_(this);
-
+  Node get root => wrap_jso(_blink.BlinkTreeWalker.instance.root_Getter_(unwrap_jso(this)));
+  
   @DomName('TreeWalker.whatToShow')
   @DocsEditable()
-  int get whatToShow => _blink.BlinkTreeWalker.instance.whatToShow_Getter_(this);
-
+  int get whatToShow => _blink.BlinkTreeWalker.instance.whatToShow_Getter_(unwrap_jso(this));
+  
   @DomName('TreeWalker.firstChild')
   @DocsEditable()
-  Node firstChild() => _blink.BlinkTreeWalker.instance.firstChild_Callback_0_(this);
-
+  Node firstChild() => wrap_jso(_blink.BlinkTreeWalker.instance.firstChild_Callback_0_(unwrap_jso(this)));
+  
   @DomName('TreeWalker.lastChild')
   @DocsEditable()
-  Node lastChild() => _blink.BlinkTreeWalker.instance.lastChild_Callback_0_(this);
-
+  Node lastChild() => wrap_jso(_blink.BlinkTreeWalker.instance.lastChild_Callback_0_(unwrap_jso(this)));
+  
   @DomName('TreeWalker.nextNode')
   @DocsEditable()
-  Node nextNode() => _blink.BlinkTreeWalker.instance.nextNode_Callback_0_(this);
-
+  Node nextNode() => wrap_jso(_blink.BlinkTreeWalker.instance.nextNode_Callback_0_(unwrap_jso(this)));
+  
   @DomName('TreeWalker.nextSibling')
   @DocsEditable()
-  Node nextSibling() => _blink.BlinkTreeWalker.instance.nextSibling_Callback_0_(this);
-
+  Node nextSibling() => wrap_jso(_blink.BlinkTreeWalker.instance.nextSibling_Callback_0_(unwrap_jso(this)));
+  
   @DomName('TreeWalker.parentNode')
   @DocsEditable()
-  Node parentNode() => _blink.BlinkTreeWalker.instance.parentNode_Callback_0_(this);
-
+  Node parentNode() => wrap_jso(_blink.BlinkTreeWalker.instance.parentNode_Callback_0_(unwrap_jso(this)));
+  
   @DomName('TreeWalker.previousNode')
   @DocsEditable()
-  Node previousNode() => _blink.BlinkTreeWalker.instance.previousNode_Callback_0_(this);
-
+  Node previousNode() => wrap_jso(_blink.BlinkTreeWalker.instance.previousNode_Callback_0_(unwrap_jso(this)));
+  
   @DomName('TreeWalker.previousSibling')
   @DocsEditable()
-  Node previousSibling() => _blink.BlinkTreeWalker.instance.previousSibling_Callback_0_(this);
-
+  Node previousSibling() => wrap_jso(_blink.BlinkTreeWalker.instance.previousSibling_Callback_0_(unwrap_jso(this)));
+  
 }
 // 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
@@ -31824,54 +31854,54 @@
   @DomName('UIEvent.charCode')
   @DocsEditable()
   @Unstable()
-  int get _charCode => _blink.BlinkUIEvent.instance.charCode_Getter_(this);
-
+  int get _charCode => _blink.BlinkUIEvent.instance.charCode_Getter_(unwrap_jso(this));
+  
   @DomName('UIEvent.detail')
   @DocsEditable()
-  int get detail => _blink.BlinkUIEvent.instance.detail_Getter_(this);
-
+  int get detail => _blink.BlinkUIEvent.instance.detail_Getter_(unwrap_jso(this));
+  
   @DomName('UIEvent.keyCode')
   @DocsEditable()
   @Unstable()
-  int get _keyCode => _blink.BlinkUIEvent.instance.keyCode_Getter_(this);
-
+  int get _keyCode => _blink.BlinkUIEvent.instance.keyCode_Getter_(unwrap_jso(this));
+  
   @DomName('UIEvent.layerX')
   @DocsEditable()
   // http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#events-mouseevents
   @Experimental() // nonstandard
-  int get _layerX => _blink.BlinkUIEvent.instance.layerX_Getter_(this);
-
+  int get _layerX => _blink.BlinkUIEvent.instance.layerX_Getter_(unwrap_jso(this));
+  
   @DomName('UIEvent.layerY')
   @DocsEditable()
   // http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#events-mouseevents
   @Experimental() // nonstandard
-  int get _layerY => _blink.BlinkUIEvent.instance.layerY_Getter_(this);
-
+  int get _layerY => _blink.BlinkUIEvent.instance.layerY_Getter_(unwrap_jso(this));
+  
   @DomName('UIEvent.pageX')
   @DocsEditable()
   // http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#events-mouseevents
   @Experimental() // nonstandard
-  int get _pageX => _blink.BlinkUIEvent.instance.pageX_Getter_(this);
-
+  int get _pageX => _blink.BlinkUIEvent.instance.pageX_Getter_(unwrap_jso(this));
+  
   @DomName('UIEvent.pageY')
   @DocsEditable()
   // http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#events-mouseevents
   @Experimental() // nonstandard
-  int get _pageY => _blink.BlinkUIEvent.instance.pageY_Getter_(this);
-
+  int get _pageY => _blink.BlinkUIEvent.instance.pageY_Getter_(unwrap_jso(this));
+  
   @DomName('UIEvent.view')
   @DocsEditable()
-  WindowBase get view => _blink.BlinkUIEvent.instance.view_Getter_(this);
-
+  WindowBase get view => wrap_jso(_blink.BlinkUIEvent.instance.view_Getter_(unwrap_jso(this)));
+  
   @DomName('UIEvent.which')
   @DocsEditable()
   @Unstable()
-  int get which => _blink.BlinkUIEvent.instance.which_Getter_(this);
-
+  int get which => _blink.BlinkUIEvent.instance.which_Getter_(unwrap_jso(this));
+  
   @DomName('UIEvent.initUIEvent')
   @DocsEditable()
-  void _initUIEvent(String type, bool canBubble, bool cancelable, Window view, int detail) => _blink.BlinkUIEvent.instance.initUIEvent_Callback_5_(this, type, canBubble, cancelable, view, detail);
-
+  void _initUIEvent(String type, bool canBubble, bool cancelable, Window view, int detail) => _blink.BlinkUIEvent.instance.initUIEvent_Callback_5_(unwrap_jso(this), type, canBubble, cancelable, unwrap_jso(view), detail);
+  
 
   @DomName('UIEvent.layerX')
   @DomName('UIEvent.layerY')
@@ -31940,143 +31970,143 @@
 
   static String createObjectUrl(blob_OR_source_OR_stream) {
     if ((blob_OR_source_OR_stream is Blob || blob_OR_source_OR_stream == null)) {
-      return _blink.BlinkURL.instance.createObjectURL_Callback_1_(blob_OR_source_OR_stream);
+      return _blink.BlinkURL.instance.createObjectURL_Callback_1_(unwrap_jso(blob_OR_source_OR_stream));
     }
     if ((blob_OR_source_OR_stream is MediaSource)) {
-      return _blink.BlinkURL.instance.createObjectURL_Callback_1_(blob_OR_source_OR_stream);
+      return _blink.BlinkURL.instance.createObjectURL_Callback_1_(unwrap_jso(blob_OR_source_OR_stream));
     }
     if ((blob_OR_source_OR_stream is MediaStream)) {
-      return _blink.BlinkURL.instance.createObjectURL_Callback_1_(blob_OR_source_OR_stream);
+      return _blink.BlinkURL.instance.createObjectURL_Callback_1_(unwrap_jso(blob_OR_source_OR_stream));
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('URL.createObjectUrlFromBlob')
   @DocsEditable()
-  static String createObjectUrlFromBlob(Blob blob) => _blink.BlinkURL.instance.createObjectURL_Callback_1_(blob);
-
+  static String createObjectUrlFromBlob(Blob blob) => _blink.BlinkURL.instance.createObjectURL_Callback_1_(unwrap_jso(blob));
+  
   @DomName('URL.createObjectUrlFromSource')
   @DocsEditable()
-  static String createObjectUrlFromSource(MediaSource source) => _blink.BlinkURL.instance.createObjectURL_Callback_1_(source);
-
+  static String createObjectUrlFromSource(MediaSource source) => _blink.BlinkURL.instance.createObjectURL_Callback_1_(unwrap_jso(source));
+  
   @DomName('URL.createObjectUrlFromStream')
   @DocsEditable()
-  static String createObjectUrlFromStream(MediaStream stream) => _blink.BlinkURL.instance.createObjectURL_Callback_1_(stream);
-
+  static String createObjectUrlFromStream(MediaStream stream) => _blink.BlinkURL.instance.createObjectURL_Callback_1_(unwrap_jso(stream));
+  
   @DomName('URL.revokeObjectURL')
   @DocsEditable()
   static void revokeObjectUrl(String url) => _blink.BlinkURL.instance.revokeObjectURL_Callback_1_(url);
-
+  
   @DomName('URL.hash')
   @DocsEditable()
   @Experimental() // untriaged
-  String get hash => _blink.BlinkURL.instance.hash_Getter_(this);
-
+  String get hash => _blink.BlinkURL.instance.hash_Getter_(unwrap_jso(this));
+  
   @DomName('URL.hash')
   @DocsEditable()
   @Experimental() // untriaged
-  void set hash(String value) => _blink.BlinkURL.instance.hash_Setter_(this, value);
-
+  void set hash(String value) => _blink.BlinkURL.instance.hash_Setter_(unwrap_jso(this), value);
+  
   @DomName('URL.host')
   @DocsEditable()
   @Experimental() // untriaged
-  String get host => _blink.BlinkURL.instance.host_Getter_(this);
-
+  String get host => _blink.BlinkURL.instance.host_Getter_(unwrap_jso(this));
+  
   @DomName('URL.host')
   @DocsEditable()
   @Experimental() // untriaged
-  void set host(String value) => _blink.BlinkURL.instance.host_Setter_(this, value);
-
+  void set host(String value) => _blink.BlinkURL.instance.host_Setter_(unwrap_jso(this), value);
+  
   @DomName('URL.hostname')
   @DocsEditable()
   @Experimental() // untriaged
-  String get hostname => _blink.BlinkURL.instance.hostname_Getter_(this);
-
+  String get hostname => _blink.BlinkURL.instance.hostname_Getter_(unwrap_jso(this));
+  
   @DomName('URL.hostname')
   @DocsEditable()
   @Experimental() // untriaged
-  void set hostname(String value) => _blink.BlinkURL.instance.hostname_Setter_(this, value);
-
+  void set hostname(String value) => _blink.BlinkURL.instance.hostname_Setter_(unwrap_jso(this), value);
+  
   @DomName('URL.href')
   @DocsEditable()
   @Experimental() // untriaged
-  String get href => _blink.BlinkURL.instance.href_Getter_(this);
-
+  String get href => _blink.BlinkURL.instance.href_Getter_(unwrap_jso(this));
+  
   @DomName('URL.href')
   @DocsEditable()
   @Experimental() // untriaged
-  void set href(String value) => _blink.BlinkURL.instance.href_Setter_(this, value);
-
+  void set href(String value) => _blink.BlinkURL.instance.href_Setter_(unwrap_jso(this), value);
+  
   @DomName('URL.origin')
   @DocsEditable()
   @Experimental() // untriaged
-  String get origin => _blink.BlinkURL.instance.origin_Getter_(this);
-
+  String get origin => _blink.BlinkURL.instance.origin_Getter_(unwrap_jso(this));
+  
   @DomName('URL.password')
   @DocsEditable()
   @Experimental() // untriaged
-  String get password => _blink.BlinkURL.instance.password_Getter_(this);
-
+  String get password => _blink.BlinkURL.instance.password_Getter_(unwrap_jso(this));
+  
   @DomName('URL.password')
   @DocsEditable()
   @Experimental() // untriaged
-  void set password(String value) => _blink.BlinkURL.instance.password_Setter_(this, value);
-
+  void set password(String value) => _blink.BlinkURL.instance.password_Setter_(unwrap_jso(this), value);
+  
   @DomName('URL.pathname')
   @DocsEditable()
   @Experimental() // untriaged
-  String get pathname => _blink.BlinkURL.instance.pathname_Getter_(this);
-
+  String get pathname => _blink.BlinkURL.instance.pathname_Getter_(unwrap_jso(this));
+  
   @DomName('URL.pathname')
   @DocsEditable()
   @Experimental() // untriaged
-  void set pathname(String value) => _blink.BlinkURL.instance.pathname_Setter_(this, value);
-
+  void set pathname(String value) => _blink.BlinkURL.instance.pathname_Setter_(unwrap_jso(this), value);
+  
   @DomName('URL.port')
   @DocsEditable()
   @Experimental() // untriaged
-  String get port => _blink.BlinkURL.instance.port_Getter_(this);
-
+  String get port => _blink.BlinkURL.instance.port_Getter_(unwrap_jso(this));
+  
   @DomName('URL.port')
   @DocsEditable()
   @Experimental() // untriaged
-  void set port(String value) => _blink.BlinkURL.instance.port_Setter_(this, value);
-
+  void set port(String value) => _blink.BlinkURL.instance.port_Setter_(unwrap_jso(this), value);
+  
   @DomName('URL.protocol')
   @DocsEditable()
   @Experimental() // untriaged
-  String get protocol => _blink.BlinkURL.instance.protocol_Getter_(this);
-
+  String get protocol => _blink.BlinkURL.instance.protocol_Getter_(unwrap_jso(this));
+  
   @DomName('URL.protocol')
   @DocsEditable()
   @Experimental() // untriaged
-  void set protocol(String value) => _blink.BlinkURL.instance.protocol_Setter_(this, value);
-
+  void set protocol(String value) => _blink.BlinkURL.instance.protocol_Setter_(unwrap_jso(this), value);
+  
   @DomName('URL.search')
   @DocsEditable()
   @Experimental() // untriaged
-  String get search => _blink.BlinkURL.instance.search_Getter_(this);
-
+  String get search => _blink.BlinkURL.instance.search_Getter_(unwrap_jso(this));
+  
   @DomName('URL.search')
   @DocsEditable()
   @Experimental() // untriaged
-  void set search(String value) => _blink.BlinkURL.instance.search_Setter_(this, value);
-
+  void set search(String value) => _blink.BlinkURL.instance.search_Setter_(unwrap_jso(this), value);
+  
   @DomName('URL.username')
   @DocsEditable()
   @Experimental() // untriaged
-  String get username => _blink.BlinkURL.instance.username_Getter_(this);
-
+  String get username => _blink.BlinkURL.instance.username_Getter_(unwrap_jso(this));
+  
   @DomName('URL.username')
   @DocsEditable()
   @Experimental() // untriaged
-  void set username(String value) => _blink.BlinkURL.instance.username_Setter_(this, value);
-
+  void set username(String value) => _blink.BlinkURL.instance.username_Setter_(unwrap_jso(this), value);
+  
   @DomName('URL.toString')
   @DocsEditable()
   @Experimental() // untriaged
-  String toString() => _blink.BlinkURL.instance.toString_Callback_0_(this);
-
+  String toString() => _blink.BlinkURL.instance.toString_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -32283,44 +32313,44 @@
 
   @DomName('ValidityState.badInput')
   @DocsEditable()
-  bool get badInput => _blink.BlinkValidityState.instance.badInput_Getter_(this);
-
+  bool get badInput => _blink.BlinkValidityState.instance.badInput_Getter_(unwrap_jso(this));
+  
   @DomName('ValidityState.customError')
   @DocsEditable()
-  bool get customError => _blink.BlinkValidityState.instance.customError_Getter_(this);
-
+  bool get customError => _blink.BlinkValidityState.instance.customError_Getter_(unwrap_jso(this));
+  
   @DomName('ValidityState.patternMismatch')
   @DocsEditable()
-  bool get patternMismatch => _blink.BlinkValidityState.instance.patternMismatch_Getter_(this);
-
+  bool get patternMismatch => _blink.BlinkValidityState.instance.patternMismatch_Getter_(unwrap_jso(this));
+  
   @DomName('ValidityState.rangeOverflow')
   @DocsEditable()
-  bool get rangeOverflow => _blink.BlinkValidityState.instance.rangeOverflow_Getter_(this);
-
+  bool get rangeOverflow => _blink.BlinkValidityState.instance.rangeOverflow_Getter_(unwrap_jso(this));
+  
   @DomName('ValidityState.rangeUnderflow')
   @DocsEditable()
-  bool get rangeUnderflow => _blink.BlinkValidityState.instance.rangeUnderflow_Getter_(this);
-
+  bool get rangeUnderflow => _blink.BlinkValidityState.instance.rangeUnderflow_Getter_(unwrap_jso(this));
+  
   @DomName('ValidityState.stepMismatch')
   @DocsEditable()
-  bool get stepMismatch => _blink.BlinkValidityState.instance.stepMismatch_Getter_(this);
-
+  bool get stepMismatch => _blink.BlinkValidityState.instance.stepMismatch_Getter_(unwrap_jso(this));
+  
   @DomName('ValidityState.tooLong')
   @DocsEditable()
-  bool get tooLong => _blink.BlinkValidityState.instance.tooLong_Getter_(this);
-
+  bool get tooLong => _blink.BlinkValidityState.instance.tooLong_Getter_(unwrap_jso(this));
+  
   @DomName('ValidityState.typeMismatch')
   @DocsEditable()
-  bool get typeMismatch => _blink.BlinkValidityState.instance.typeMismatch_Getter_(this);
-
+  bool get typeMismatch => _blink.BlinkValidityState.instance.typeMismatch_Getter_(unwrap_jso(this));
+  
   @DomName('ValidityState.valid')
   @DocsEditable()
-  bool get valid => _blink.BlinkValidityState.instance.valid_Getter_(this);
-
+  bool get valid => _blink.BlinkValidityState.instance.valid_Getter_(unwrap_jso(this));
+  
   @DomName('ValidityState.valueMissing')
   @DocsEditable()
-  bool get valueMissing => _blink.BlinkValidityState.instance.valueMissing_Getter_(this);
-
+  bool get valueMissing => _blink.BlinkValidityState.instance.valueMissing_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -32344,71 +32374,71 @@
 
   @DomName('HTMLVideoElement.height')
   @DocsEditable()
-  int get height => _blink.BlinkHTMLVideoElement.instance.height_Getter_(this);
-
+  int get height => _blink.BlinkHTMLVideoElement.instance.height_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLVideoElement.height')
   @DocsEditable()
-  void set height(int value) => _blink.BlinkHTMLVideoElement.instance.height_Setter_(this, value);
-
+  void set height(int value) => _blink.BlinkHTMLVideoElement.instance.height_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLVideoElement.poster')
   @DocsEditable()
-  String get poster => _blink.BlinkHTMLVideoElement.instance.poster_Getter_(this);
-
+  String get poster => _blink.BlinkHTMLVideoElement.instance.poster_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLVideoElement.poster')
   @DocsEditable()
-  void set poster(String value) => _blink.BlinkHTMLVideoElement.instance.poster_Setter_(this, value);
-
+  void set poster(String value) => _blink.BlinkHTMLVideoElement.instance.poster_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLVideoElement.videoHeight')
   @DocsEditable()
-  int get videoHeight => _blink.BlinkHTMLVideoElement.instance.videoHeight_Getter_(this);
-
+  int get videoHeight => _blink.BlinkHTMLVideoElement.instance.videoHeight_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLVideoElement.videoWidth')
   @DocsEditable()
-  int get videoWidth => _blink.BlinkHTMLVideoElement.instance.videoWidth_Getter_(this);
-
+  int get videoWidth => _blink.BlinkHTMLVideoElement.instance.videoWidth_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLVideoElement.webkitDecodedFrameCount')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  int get decodedFrameCount => _blink.BlinkHTMLVideoElement.instance.webkitDecodedFrameCount_Getter_(this);
-
+  int get decodedFrameCount => _blink.BlinkHTMLVideoElement.instance.webkitDecodedFrameCount_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLVideoElement.webkitDroppedFrameCount')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  int get droppedFrameCount => _blink.BlinkHTMLVideoElement.instance.webkitDroppedFrameCount_Getter_(this);
-
+  int get droppedFrameCount => _blink.BlinkHTMLVideoElement.instance.webkitDroppedFrameCount_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLVideoElement.width')
   @DocsEditable()
-  int get width => _blink.BlinkHTMLVideoElement.instance.width_Getter_(this);
-
+  int get width => _blink.BlinkHTMLVideoElement.instance.width_Getter_(unwrap_jso(this));
+  
   @DomName('HTMLVideoElement.width')
   @DocsEditable()
-  void set width(int value) => _blink.BlinkHTMLVideoElement.instance.width_Setter_(this, value);
-
+  void set width(int value) => _blink.BlinkHTMLVideoElement.instance.width_Setter_(unwrap_jso(this), value);
+  
   @DomName('HTMLVideoElement.getVideoPlaybackQuality')
   @DocsEditable()
   @Experimental() // untriaged
-  VideoPlaybackQuality getVideoPlaybackQuality() => _blink.BlinkHTMLVideoElement.instance.getVideoPlaybackQuality_Callback_0_(this);
-
+  VideoPlaybackQuality getVideoPlaybackQuality() => wrap_jso(_blink.BlinkHTMLVideoElement.instance.getVideoPlaybackQuality_Callback_0_(unwrap_jso(this)));
+  
   @DomName('HTMLVideoElement.webkitEnterFullscreen')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
-  void enterFullscreen() => _blink.BlinkHTMLVideoElement.instance.webkitEnterFullscreen_Callback_0_(this);
-
+  void enterFullscreen() => _blink.BlinkHTMLVideoElement.instance.webkitEnterFullscreen_Callback_0_(unwrap_jso(this));
+  
   @DomName('HTMLVideoElement.webkitExitFullscreen')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#dom-document-exitfullscreen
-  void exitFullscreen() => _blink.BlinkHTMLVideoElement.instance.webkitExitFullscreen_Callback_0_(this);
-
+  void exitFullscreen() => _blink.BlinkHTMLVideoElement.instance.webkitExitFullscreen_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -32427,23 +32457,23 @@
   @DomName('VideoPlaybackQuality.corruptedVideoFrames')
   @DocsEditable()
   @Experimental() // untriaged
-  int get corruptedVideoFrames => _blink.BlinkVideoPlaybackQuality.instance.corruptedVideoFrames_Getter_(this);
-
+  int get corruptedVideoFrames => _blink.BlinkVideoPlaybackQuality.instance.corruptedVideoFrames_Getter_(unwrap_jso(this));
+  
   @DomName('VideoPlaybackQuality.creationTime')
   @DocsEditable()
   @Experimental() // untriaged
-  double get creationTime => _blink.BlinkVideoPlaybackQuality.instance.creationTime_Getter_(this);
-
+  double get creationTime => _blink.BlinkVideoPlaybackQuality.instance.creationTime_Getter_(unwrap_jso(this));
+  
   @DomName('VideoPlaybackQuality.droppedVideoFrames')
   @DocsEditable()
   @Experimental() // untriaged
-  int get droppedVideoFrames => _blink.BlinkVideoPlaybackQuality.instance.droppedVideoFrames_Getter_(this);
-
+  int get droppedVideoFrames => _blink.BlinkVideoPlaybackQuality.instance.droppedVideoFrames_Getter_(unwrap_jso(this));
+  
   @DomName('VideoPlaybackQuality.totalVideoFrames')
   @DocsEditable()
   @Experimental() // untriaged
-  int get totalVideoFrames => _blink.BlinkVideoPlaybackQuality.instance.totalVideoFrames_Getter_(this);
-
+  int get totalVideoFrames => _blink.BlinkVideoPlaybackQuality.instance.totalVideoFrames_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -32462,33 +32492,33 @@
   @DomName('VideoTrack.id')
   @DocsEditable()
   @Experimental() // untriaged
-  String get id => _blink.BlinkVideoTrack.instance.id_Getter_(this);
-
+  String get id => _blink.BlinkVideoTrack.instance.id_Getter_(unwrap_jso(this));
+  
   @DomName('VideoTrack.kind')
   @DocsEditable()
   @Experimental() // untriaged
-  String get kind => _blink.BlinkVideoTrack.instance.kind_Getter_(this);
-
+  String get kind => _blink.BlinkVideoTrack.instance.kind_Getter_(unwrap_jso(this));
+  
   @DomName('VideoTrack.label')
   @DocsEditable()
   @Experimental() // untriaged
-  String get label => _blink.BlinkVideoTrack.instance.label_Getter_(this);
-
+  String get label => _blink.BlinkVideoTrack.instance.label_Getter_(unwrap_jso(this));
+  
   @DomName('VideoTrack.language')
   @DocsEditable()
   @Experimental() // untriaged
-  String get language => _blink.BlinkVideoTrack.instance.language_Getter_(this);
-
+  String get language => _blink.BlinkVideoTrack.instance.language_Getter_(unwrap_jso(this));
+  
   @DomName('VideoTrack.selected')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get selected => _blink.BlinkVideoTrack.instance.selected_Getter_(this);
-
+  bool get selected => _blink.BlinkVideoTrack.instance.selected_Getter_(unwrap_jso(this));
+  
   @DomName('VideoTrack.selected')
   @DocsEditable()
   @Experimental() // untriaged
-  void set selected(bool value) => _blink.BlinkVideoTrack.instance.selected_Setter_(this, value);
-
+  void set selected(bool value) => _blink.BlinkVideoTrack.instance.selected_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -32512,23 +32542,23 @@
   @DomName('VideoTrackList.length')
   @DocsEditable()
   @Experimental() // untriaged
-  int get length => _blink.BlinkVideoTrackList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkVideoTrackList.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('VideoTrackList.selectedIndex')
   @DocsEditable()
   @Experimental() // untriaged
-  int get selectedIndex => _blink.BlinkVideoTrackList.instance.selectedIndex_Getter_(this);
-
+  int get selectedIndex => _blink.BlinkVideoTrackList.instance.selectedIndex_Getter_(unwrap_jso(this));
+  
   @DomName('VideoTrackList.__getter__')
   @DocsEditable()
   @Experimental() // untriaged
-  VideoTrack __getter__(int index) => _blink.BlinkVideoTrackList.instance.$__getter___Callback_1_(this, index);
-
+  VideoTrack __getter__(int index) => wrap_jso(_blink.BlinkVideoTrackList.instance.$__getter___Callback_1_(unwrap_jso(this), index));
+  
   @DomName('VideoTrackList.getTrackById')
   @DocsEditable()
   @Experimental() // untriaged
-  VideoTrack getTrackById(String id) => _blink.BlinkVideoTrackList.instance.getTrackById_Callback_1_(this, id);
-
+  VideoTrack getTrackById(String id) => wrap_jso(_blink.BlinkVideoTrackList.instance.getTrackById_Callback_1_(unwrap_jso(this), id));
+  
   @DomName('VideoTrackList.onchange')
   @DocsEditable()
   @Experimental() // untriaged
@@ -32569,88 +32599,88 @@
   @DomName('VTTCue.align')
   @DocsEditable()
   @Experimental() // untriaged
-  String get align => _blink.BlinkVTTCue.instance.align_Getter_(this);
-
+  String get align => _blink.BlinkVTTCue.instance.align_Getter_(unwrap_jso(this));
+  
   @DomName('VTTCue.align')
   @DocsEditable()
   @Experimental() // untriaged
-  void set align(String value) => _blink.BlinkVTTCue.instance.align_Setter_(this, value);
-
+  void set align(String value) => _blink.BlinkVTTCue.instance.align_Setter_(unwrap_jso(this), value);
+  
   @DomName('VTTCue.line')
   @DocsEditable()
   @Experimental() // untriaged
-  int get line => _blink.BlinkVTTCue.instance.line_Getter_(this);
-
+  int get line => _blink.BlinkVTTCue.instance.line_Getter_(unwrap_jso(this));
+  
   @DomName('VTTCue.line')
   @DocsEditable()
   @Experimental() // untriaged
-  void set line(int value) => _blink.BlinkVTTCue.instance.line_Setter_(this, value);
-
+  void set line(int value) => _blink.BlinkVTTCue.instance.line_Setter_(unwrap_jso(this), value);
+  
   @DomName('VTTCue.position')
   @DocsEditable()
   @Experimental() // untriaged
-  int get position => _blink.BlinkVTTCue.instance.position_Getter_(this);
-
+  int get position => _blink.BlinkVTTCue.instance.position_Getter_(unwrap_jso(this));
+  
   @DomName('VTTCue.position')
   @DocsEditable()
   @Experimental() // untriaged
-  void set position(int value) => _blink.BlinkVTTCue.instance.position_Setter_(this, value);
-
+  void set position(int value) => _blink.BlinkVTTCue.instance.position_Setter_(unwrap_jso(this), value);
+  
   @DomName('VTTCue.regionId')
   @DocsEditable()
   @Experimental() // untriaged
-  String get regionId => _blink.BlinkVTTCue.instance.regionId_Getter_(this);
-
+  String get regionId => _blink.BlinkVTTCue.instance.regionId_Getter_(unwrap_jso(this));
+  
   @DomName('VTTCue.regionId')
   @DocsEditable()
   @Experimental() // untriaged
-  void set regionId(String value) => _blink.BlinkVTTCue.instance.regionId_Setter_(this, value);
-
+  void set regionId(String value) => _blink.BlinkVTTCue.instance.regionId_Setter_(unwrap_jso(this), value);
+  
   @DomName('VTTCue.size')
   @DocsEditable()
   @Experimental() // untriaged
-  int get size => _blink.BlinkVTTCue.instance.size_Getter_(this);
-
+  int get size => _blink.BlinkVTTCue.instance.size_Getter_(unwrap_jso(this));
+  
   @DomName('VTTCue.size')
   @DocsEditable()
   @Experimental() // untriaged
-  void set size(int value) => _blink.BlinkVTTCue.instance.size_Setter_(this, value);
-
+  void set size(int value) => _blink.BlinkVTTCue.instance.size_Setter_(unwrap_jso(this), value);
+  
   @DomName('VTTCue.snapToLines')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get snapToLines => _blink.BlinkVTTCue.instance.snapToLines_Getter_(this);
-
+  bool get snapToLines => _blink.BlinkVTTCue.instance.snapToLines_Getter_(unwrap_jso(this));
+  
   @DomName('VTTCue.snapToLines')
   @DocsEditable()
   @Experimental() // untriaged
-  void set snapToLines(bool value) => _blink.BlinkVTTCue.instance.snapToLines_Setter_(this, value);
-
+  void set snapToLines(bool value) => _blink.BlinkVTTCue.instance.snapToLines_Setter_(unwrap_jso(this), value);
+  
   @DomName('VTTCue.text')
   @DocsEditable()
   @Experimental() // untriaged
-  String get text => _blink.BlinkVTTCue.instance.text_Getter_(this);
-
+  String get text => _blink.BlinkVTTCue.instance.text_Getter_(unwrap_jso(this));
+  
   @DomName('VTTCue.text')
   @DocsEditable()
   @Experimental() // untriaged
-  void set text(String value) => _blink.BlinkVTTCue.instance.text_Setter_(this, value);
-
+  void set text(String value) => _blink.BlinkVTTCue.instance.text_Setter_(unwrap_jso(this), value);
+  
   @DomName('VTTCue.vertical')
   @DocsEditable()
   @Experimental() // untriaged
-  String get vertical => _blink.BlinkVTTCue.instance.vertical_Getter_(this);
-
+  String get vertical => _blink.BlinkVTTCue.instance.vertical_Getter_(unwrap_jso(this));
+  
   @DomName('VTTCue.vertical')
   @DocsEditable()
   @Experimental() // untriaged
-  void set vertical(String value) => _blink.BlinkVTTCue.instance.vertical_Setter_(this, value);
-
+  void set vertical(String value) => _blink.BlinkVTTCue.instance.vertical_Setter_(unwrap_jso(this), value);
+  
   @DomName('VTTCue.getCueAsHTML')
   @DocsEditable()
   @Experimental() // untriaged
-  DocumentFragment getCueAsHtml() => _blink.BlinkVTTCue.instance.getCueAsHTML_Callback_0_(this);
-
+  DocumentFragment getCueAsHtml() => wrap_jso(_blink.BlinkVTTCue.instance.getCueAsHTML_Callback_0_(unwrap_jso(this)));
+  
 }
 // 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
@@ -32675,88 +32705,88 @@
   @DomName('VTTRegion.height')
   @DocsEditable()
   @Experimental() // untriaged
-  int get height => _blink.BlinkVTTRegion.instance.height_Getter_(this);
-
+  int get height => _blink.BlinkVTTRegion.instance.height_Getter_(unwrap_jso(this));
+  
   @DomName('VTTRegion.height')
   @DocsEditable()
   @Experimental() // untriaged
-  void set height(int value) => _blink.BlinkVTTRegion.instance.height_Setter_(this, value);
-
+  void set height(int value) => _blink.BlinkVTTRegion.instance.height_Setter_(unwrap_jso(this), value);
+  
   @DomName('VTTRegion.id')
   @DocsEditable()
   @Experimental() // untriaged
-  String get id => _blink.BlinkVTTRegion.instance.id_Getter_(this);
-
+  String get id => _blink.BlinkVTTRegion.instance.id_Getter_(unwrap_jso(this));
+  
   @DomName('VTTRegion.id')
   @DocsEditable()
   @Experimental() // untriaged
-  void set id(String value) => _blink.BlinkVTTRegion.instance.id_Setter_(this, value);
-
+  void set id(String value) => _blink.BlinkVTTRegion.instance.id_Setter_(unwrap_jso(this), value);
+  
   @DomName('VTTRegion.regionAnchorX')
   @DocsEditable()
   @Experimental() // untriaged
-  num get regionAnchorX => _blink.BlinkVTTRegion.instance.regionAnchorX_Getter_(this);
-
+  num get regionAnchorX => _blink.BlinkVTTRegion.instance.regionAnchorX_Getter_(unwrap_jso(this));
+  
   @DomName('VTTRegion.regionAnchorX')
   @DocsEditable()
   @Experimental() // untriaged
-  void set regionAnchorX(num value) => _blink.BlinkVTTRegion.instance.regionAnchorX_Setter_(this, value);
-
+  void set regionAnchorX(num value) => _blink.BlinkVTTRegion.instance.regionAnchorX_Setter_(unwrap_jso(this), value);
+  
   @DomName('VTTRegion.regionAnchorY')
   @DocsEditable()
   @Experimental() // untriaged
-  num get regionAnchorY => _blink.BlinkVTTRegion.instance.regionAnchorY_Getter_(this);
-
+  num get regionAnchorY => _blink.BlinkVTTRegion.instance.regionAnchorY_Getter_(unwrap_jso(this));
+  
   @DomName('VTTRegion.regionAnchorY')
   @DocsEditable()
   @Experimental() // untriaged
-  void set regionAnchorY(num value) => _blink.BlinkVTTRegion.instance.regionAnchorY_Setter_(this, value);
-
+  void set regionAnchorY(num value) => _blink.BlinkVTTRegion.instance.regionAnchorY_Setter_(unwrap_jso(this), value);
+  
   @DomName('VTTRegion.scroll')
   @DocsEditable()
   @Experimental() // untriaged
-  String get scroll => _blink.BlinkVTTRegion.instance.scroll_Getter_(this);
-
+  String get scroll => _blink.BlinkVTTRegion.instance.scroll_Getter_(unwrap_jso(this));
+  
   @DomName('VTTRegion.scroll')
   @DocsEditable()
   @Experimental() // untriaged
-  void set scroll(String value) => _blink.BlinkVTTRegion.instance.scroll_Setter_(this, value);
-
+  void set scroll(String value) => _blink.BlinkVTTRegion.instance.scroll_Setter_(unwrap_jso(this), value);
+  
   @DomName('VTTRegion.track')
   @DocsEditable()
   @Experimental() // untriaged
-  TextTrack get track => _blink.BlinkVTTRegion.instance.track_Getter_(this);
-
+  TextTrack get track => wrap_jso(_blink.BlinkVTTRegion.instance.track_Getter_(unwrap_jso(this)));
+  
   @DomName('VTTRegion.viewportAnchorX')
   @DocsEditable()
   @Experimental() // untriaged
-  num get viewportAnchorX => _blink.BlinkVTTRegion.instance.viewportAnchorX_Getter_(this);
-
+  num get viewportAnchorX => _blink.BlinkVTTRegion.instance.viewportAnchorX_Getter_(unwrap_jso(this));
+  
   @DomName('VTTRegion.viewportAnchorX')
   @DocsEditable()
   @Experimental() // untriaged
-  void set viewportAnchorX(num value) => _blink.BlinkVTTRegion.instance.viewportAnchorX_Setter_(this, value);
-
+  void set viewportAnchorX(num value) => _blink.BlinkVTTRegion.instance.viewportAnchorX_Setter_(unwrap_jso(this), value);
+  
   @DomName('VTTRegion.viewportAnchorY')
   @DocsEditable()
   @Experimental() // untriaged
-  num get viewportAnchorY => _blink.BlinkVTTRegion.instance.viewportAnchorY_Getter_(this);
-
+  num get viewportAnchorY => _blink.BlinkVTTRegion.instance.viewportAnchorY_Getter_(unwrap_jso(this));
+  
   @DomName('VTTRegion.viewportAnchorY')
   @DocsEditable()
   @Experimental() // untriaged
-  void set viewportAnchorY(num value) => _blink.BlinkVTTRegion.instance.viewportAnchorY_Setter_(this, value);
-
+  void set viewportAnchorY(num value) => _blink.BlinkVTTRegion.instance.viewportAnchorY_Setter_(unwrap_jso(this), value);
+  
   @DomName('VTTRegion.width')
   @DocsEditable()
   @Experimental() // untriaged
-  num get width => _blink.BlinkVTTRegion.instance.width_Getter_(this);
-
+  num get width => _blink.BlinkVTTRegion.instance.width_Getter_(unwrap_jso(this));
+  
   @DomName('VTTRegion.width')
   @DocsEditable()
   @Experimental() // untriaged
-  void set width(num value) => _blink.BlinkVTTRegion.instance.width_Setter_(this, value);
-
+  void set width(num value) => _blink.BlinkVTTRegion.instance.width_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -32775,18 +32805,18 @@
   @DomName('VTTRegionList.length')
   @DocsEditable()
   @Experimental() // untriaged
-  int get length => _blink.BlinkVTTRegionList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkVTTRegionList.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('VTTRegionList.getRegionById')
   @DocsEditable()
   @Experimental() // untriaged
-  VttRegion getRegionById(String id) => _blink.BlinkVTTRegionList.instance.getRegionById_Callback_1_(this, id);
-
+  VttRegion getRegionById(String id) => _blink.BlinkVTTRegionList.instance.getRegionById_Callback_1_(unwrap_jso(this), id);
+  
   @DomName('VTTRegionList.item')
   @DocsEditable()
   @Experimental() // untriaged
-  VttRegion item(int index) => _blink.BlinkVTTRegionList.instance.item_Callback_1_(this, index);
-
+  VttRegion item(int index) => _blink.BlinkVTTRegionList.instance.item_Callback_1_(unwrap_jso(this), index);
+  
 }
 // 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
@@ -32916,60 +32946,60 @@
 
   @DomName('WebSocket.binaryType')
   @DocsEditable()
-  String get binaryType => _blink.BlinkWebSocket.instance.binaryType_Getter_(this);
-
+  String get binaryType => _blink.BlinkWebSocket.instance.binaryType_Getter_(unwrap_jso(this));
+  
   @DomName('WebSocket.binaryType')
   @DocsEditable()
-  void set binaryType(String value) => _blink.BlinkWebSocket.instance.binaryType_Setter_(this, value);
-
+  void set binaryType(String value) => _blink.BlinkWebSocket.instance.binaryType_Setter_(unwrap_jso(this), value);
+  
   @DomName('WebSocket.bufferedAmount')
   @DocsEditable()
-  int get bufferedAmount => _blink.BlinkWebSocket.instance.bufferedAmount_Getter_(this);
-
+  int get bufferedAmount => _blink.BlinkWebSocket.instance.bufferedAmount_Getter_(unwrap_jso(this));
+  
   @DomName('WebSocket.extensions')
   @DocsEditable()
-  String get extensions => _blink.BlinkWebSocket.instance.extensions_Getter_(this);
-
+  String get extensions => _blink.BlinkWebSocket.instance.extensions_Getter_(unwrap_jso(this));
+  
   @DomName('WebSocket.protocol')
   @DocsEditable()
-  String get protocol => _blink.BlinkWebSocket.instance.protocol_Getter_(this);
-
+  String get protocol => _blink.BlinkWebSocket.instance.protocol_Getter_(unwrap_jso(this));
+  
   @DomName('WebSocket.readyState')
   @DocsEditable()
-  int get readyState => _blink.BlinkWebSocket.instance.readyState_Getter_(this);
-
+  int get readyState => _blink.BlinkWebSocket.instance.readyState_Getter_(unwrap_jso(this));
+  
   @DomName('WebSocket.url')
   @DocsEditable()
-  String get url => _blink.BlinkWebSocket.instance.url_Getter_(this);
-
+  String get url => _blink.BlinkWebSocket.instance.url_Getter_(unwrap_jso(this));
+  
   void close([int code, String reason]) {
     if (reason != null) {
-      _blink.BlinkWebSocket.instance.close_Callback_2_(this, code, reason);
+      _blink.BlinkWebSocket.instance.close_Callback_2_(unwrap_jso(this), code, reason);
       return;
     }
     if (code != null) {
-      _blink.BlinkWebSocket.instance.close_Callback_1_(this, code);
+      _blink.BlinkWebSocket.instance.close_Callback_1_(unwrap_jso(this), code);
       return;
     }
-    _blink.BlinkWebSocket.instance.close_Callback_0_(this);
+    _blink.BlinkWebSocket.instance.close_Callback_0_(unwrap_jso(this));
     return;
   }
 
   void send(data) {
     if ((data is String || data == null)) {
-      _blink.BlinkWebSocket.instance.send_Callback_1_(this, data);
+      _blink.BlinkWebSocket.instance.send_Callback_1_(unwrap_jso(this), unwrap_jso(data));
       return;
     }
     if ((data is Blob || data == null)) {
-      _blink.BlinkWebSocket.instance.send_Callback_1_(this, data);
+      _blink.BlinkWebSocket.instance.send_Callback_1_(unwrap_jso(this), unwrap_jso(data));
       return;
     }
     if ((data is TypedData || data == null)) {
-      _blink.BlinkWebSocket.instance.send_Callback_1_(this, data);
+      _blink.BlinkWebSocket.instance.send_Callback_1_(unwrap_jso(this), unwrap_jso(data));
       return;
     }
     if ((data is ByteBuffer || data == null)) {
-      _blink.BlinkWebSocket.instance.send_Callback_1_(this, data);
+      _blink.BlinkWebSocket.instance.send_Callback_1_(unwrap_jso(this), unwrap_jso(data));
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -32977,20 +33007,20 @@
 
   @DomName('WebSocket.sendBlob')
   @DocsEditable()
-  void sendBlob(Blob data) => _blink.BlinkWebSocket.instance.send_Callback_1_(this, data);
-
+  void sendBlob(Blob data) => _blink.BlinkWebSocket.instance.send_Callback_1_(unwrap_jso(this), unwrap_jso(data));
+  
   @DomName('WebSocket.sendByteBuffer')
   @DocsEditable()
-  void sendByteBuffer(ByteBuffer data) => _blink.BlinkWebSocket.instance.send_Callback_1_(this, data);
-
+  void sendByteBuffer(ByteBuffer data) => _blink.BlinkWebSocket.instance.send_Callback_1_(unwrap_jso(this), data);
+  
   @DomName('WebSocket.sendString')
   @DocsEditable()
-  void sendString(String data) => _blink.BlinkWebSocket.instance.send_Callback_1_(this, data);
-
+  void sendString(String data) => _blink.BlinkWebSocket.instance.send_Callback_1_(unwrap_jso(this), data);
+  
   @DomName('WebSocket.sendTypedData')
   @DocsEditable()
-  void sendTypedData(TypedData data) => _blink.BlinkWebSocket.instance.send_Callback_1_(this, data);
-
+  void sendTypedData(TypedData data) => _blink.BlinkWebSocket.instance.send_Callback_1_(unwrap_jso(this), unwrap_jso(data));
+  
   /// Stream of `close` events handled by this [WebSocket].
   @DomName('WebSocket.onclose')
   @DocsEditable()
@@ -33069,20 +33099,20 @@
 
   @DomName('WheelEvent.deltaMode')
   @DocsEditable()
-  int get deltaMode => _blink.BlinkWheelEvent.instance.deltaMode_Getter_(this);
-
+  int get deltaMode => _blink.BlinkWheelEvent.instance.deltaMode_Getter_(unwrap_jso(this));
+  
   @DomName('WheelEvent.deltaX')
   @DocsEditable()
-  double get _deltaX => _blink.BlinkWheelEvent.instance.deltaX_Getter_(this);
-
+  double get _deltaX => _blink.BlinkWheelEvent.instance.deltaX_Getter_(unwrap_jso(this));
+  
   @DomName('WheelEvent.deltaY')
   @DocsEditable()
-  double get _deltaY => _blink.BlinkWheelEvent.instance.deltaY_Getter_(this);
-
+  double get _deltaY => _blink.BlinkWheelEvent.instance.deltaY_Getter_(unwrap_jso(this));
+  
   @DomName('WheelEvent.deltaZ')
   @DocsEditable()
-  double get deltaZ => _blink.BlinkWheelEvent.instance.deltaZ_Getter_(this);
-
+  double get deltaZ => _blink.BlinkWheelEvent.instance.deltaZ_Getter_(unwrap_jso(this));
+  
 
   /**
    * The amount that is expected to scroll horizontally, in units determined by
@@ -33425,8 +33455,8 @@
    */
   @DomName('Window.CSS')
   @DocsEditable()
-  Css get css => _blink.BlinkWindow.instance.CSS_Getter_(this);
-
+  Css get css => wrap_jso(_blink.BlinkWindow.instance.CSS_Getter_(unwrap_jso(this)));
+  
   /**
    * The application cache for this window.
    *
@@ -33440,16 +33470,16 @@
    */
   @DomName('Window.applicationCache')
   @DocsEditable()
-  ApplicationCache get applicationCache => _blink.BlinkWindow.instance.applicationCache_Getter_(this);
-
+  ApplicationCache get applicationCache => wrap_jso(_blink.BlinkWindow.instance.applicationCache_Getter_(unwrap_jso(this)));
+  
   @DomName('Window.closed')
   @DocsEditable()
-  bool get closed => _blink.BlinkWindow.instance.closed_Getter_(this);
-
+  bool get closed => _blink.BlinkWindow.instance.closed_Getter_(unwrap_jso(this));
+  
   @DomName('Window.console')
   @DocsEditable()
-  Console get console => _blink.BlinkWindow.instance.console_Getter_(this);
-
+  Console get console => wrap_jso(_blink.BlinkWindow.instance.console_Getter_(unwrap_jso(this)));
+  
   /**
    * Entrypoint for the browser's cryptographic functions.
    *
@@ -33461,32 +33491,32 @@
   @DocsEditable()
   // http://www.w3.org/TR/WebCryptoAPI/
   @Experimental()
-  Crypto get crypto => _blink.BlinkWindow.instance.crypto_Getter_(this);
-
+  Crypto get crypto => wrap_jso(_blink.BlinkWindow.instance.crypto_Getter_(unwrap_jso(this)));
+  
   /// *Deprecated*.
   @DomName('Window.defaultStatus')
   @DocsEditable()
   @Experimental() // non-standard
-  String get defaultStatus => _blink.BlinkWindow.instance.defaultStatus_Getter_(this);
-
+  String get defaultStatus => _blink.BlinkWindow.instance.defaultStatus_Getter_(unwrap_jso(this));
+  
   /// *Deprecated*.
   @DomName('Window.defaultStatus')
   @DocsEditable()
   @Experimental() // non-standard
-  void set defaultStatus(String value) => _blink.BlinkWindow.instance.defaultStatus_Setter_(this, value);
-
+  void set defaultStatus(String value) => _blink.BlinkWindow.instance.defaultStatus_Setter_(unwrap_jso(this), value);
+  
   /// *Deprecated*.
   @DomName('Window.defaultstatus')
   @DocsEditable()
   @Experimental() // non-standard
-  String get defaultstatus => _blink.BlinkWindow.instance.defaultstatus_Getter_(this);
-
+  String get defaultstatus => _blink.BlinkWindow.instance.defaultstatus_Getter_(unwrap_jso(this));
+  
   /// *Deprecated*.
   @DomName('Window.defaultstatus')
   @DocsEditable()
   @Experimental() // non-standard
-  void set defaultstatus(String value) => _blink.BlinkWindow.instance.defaultstatus_Setter_(this, value);
-
+  void set defaultstatus(String value) => _blink.BlinkWindow.instance.defaultstatus_Setter_(unwrap_jso(this), value);
+  
   /**
    * The ratio between physical pixels and logical CSS pixels.
    *
@@ -33503,12 +33533,12 @@
   @DocsEditable()
   // http://www.quirksmode.org/blog/archives/2012/06/devicepixelrati.html
   @Experimental() // non-standard
-  double get devicePixelRatio => _blink.BlinkWindow.instance.devicePixelRatio_Getter_(this);
-
+  double get devicePixelRatio => _blink.BlinkWindow.instance.devicePixelRatio_Getter_(unwrap_jso(this));
+  
   @DomName('Window.document')
   @DocsEditable()
-  Document get document => _blink.BlinkWindow.instance.document_Getter_(this);
-
+  Document get document => wrap_jso(_blink.BlinkWindow.instance.document_Getter_(unwrap_jso(this)));
+  
   /**
    * The current session history for this window's newest document.
    *
@@ -33520,16 +33550,16 @@
    */
   @DomName('Window.history')
   @DocsEditable()
-  History get history => _blink.BlinkWindow.instance.history_Getter_(this);
-
+  History get history => wrap_jso(_blink.BlinkWindow.instance.history_Getter_(unwrap_jso(this)));
+  
   @DomName('Window.indexedDB')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX, '15')
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @Experimental()
-  IdbFactory get indexedDB => _blink.BlinkWindow.instance.indexedDB_Getter_(this);
-
+  IdbFactory get indexedDB => wrap_jso(_blink.BlinkWindow.instance.indexedDB_Getter_(unwrap_jso(this)));
+  
   /**
    * The height of the viewport including scrollbars.
    *
@@ -33541,8 +33571,8 @@
    */
   @DomName('Window.innerHeight')
   @DocsEditable()
-  int get innerHeight => _blink.BlinkWindow.instance.innerHeight_Getter_(this);
-
+  int get innerHeight => _blink.BlinkWindow.instance.innerHeight_Getter_(unwrap_jso(this));
+  
   /**
    * The width of the viewport including scrollbars.
    *
@@ -33554,8 +33584,8 @@
    */
   @DomName('Window.innerWidth')
   @DocsEditable()
-  int get innerWidth => _blink.BlinkWindow.instance.innerWidth_Getter_(this);
-
+  int get innerWidth => _blink.BlinkWindow.instance.innerWidth_Getter_(unwrap_jso(this));
+  
   /**
    * Storage for this window that persists across sessions.
    *
@@ -33571,12 +33601,12 @@
    */
   @DomName('Window.localStorage')
   @DocsEditable()
-  Storage get localStorage => _blink.BlinkWindow.instance.localStorage_Getter_(this);
-
+  Storage get localStorage => wrap_jso(_blink.BlinkWindow.instance.localStorage_Getter_(unwrap_jso(this)));
+  
   @DomName('Window.location')
   @DocsEditable()
-  Location get location => _blink.BlinkWindow.instance.location_Getter_(this);
-
+  Location get location => wrap_jso(_blink.BlinkWindow.instance.location_Getter_(unwrap_jso(this)));
+  
   /**
    * This window's location bar, which displays the URL.
    *
@@ -33588,8 +33618,8 @@
    */
   @DomName('Window.locationbar')
   @DocsEditable()
-  BarProp get locationbar => _blink.BlinkWindow.instance.locationbar_Getter_(this);
-
+  BarProp get locationbar => wrap_jso(_blink.BlinkWindow.instance.locationbar_Getter_(unwrap_jso(this)));
+  
   /**
    * This window's menu bar, which displays menu commands.
    *
@@ -33601,8 +33631,8 @@
    */
   @DomName('Window.menubar')
   @DocsEditable()
-  BarProp get menubar => _blink.BlinkWindow.instance.menubar_Getter_(this);
-
+  BarProp get menubar => wrap_jso(_blink.BlinkWindow.instance.menubar_Getter_(unwrap_jso(this)));
+  
   /**
    * The name of this window.
    *
@@ -33614,8 +33644,8 @@
    */
   @DomName('Window.name')
   @DocsEditable()
-  String get name => _blink.BlinkWindow.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkWindow.instance.name_Getter_(unwrap_jso(this));
+  
   /**
    * The name of this window.
    *
@@ -33627,8 +33657,8 @@
    */
   @DomName('Window.name')
   @DocsEditable()
-  void set name(String value) => _blink.BlinkWindow.instance.name_Setter_(this, value);
-
+  void set name(String value) => _blink.BlinkWindow.instance.name_Setter_(unwrap_jso(this), value);
+  
   /**
    * The user agent accessing this window.
    *
@@ -33640,8 +33670,8 @@
    */
   @DomName('Window.navigator')
   @DocsEditable()
-  Navigator get navigator => _blink.BlinkWindow.instance.navigator_Getter_(this);
-
+  Navigator get navigator => wrap_jso(_blink.BlinkWindow.instance.navigator_Getter_(unwrap_jso(this)));
+  
   /**
    * Whether objects are drawn offscreen before being displayed.
    *
@@ -33654,21 +33684,21 @@
   @DomName('Window.offscreenBuffering')
   @DocsEditable()
   @Experimental() // non-standard
-  bool get offscreenBuffering => _blink.BlinkWindow.instance.offscreenBuffering_Getter_(this);
-
+  bool get offscreenBuffering => _blink.BlinkWindow.instance.offscreenBuffering_Getter_(unwrap_jso(this));
+  
   @DomName('Window.opener')
   @DocsEditable()
-  WindowBase get opener => _blink.BlinkWindow.instance.opener_Getter_(this);
-
+  WindowBase get opener => wrap_jso(_blink.BlinkWindow.instance.opener_Getter_(unwrap_jso(this)));
+  
   @DomName('Window.opener')
   @DocsEditable()
-  void set opener(Window value) => _blink.BlinkWindow.instance.opener_Setter_(this, value);
-
+  void set opener(Window value) => _blink.BlinkWindow.instance.opener_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('Window.orientation')
   @DocsEditable()
   @Experimental() // untriaged
-  int get orientation => _blink.BlinkWindow.instance.orientation_Getter_(this);
-
+  int get orientation => _blink.BlinkWindow.instance.orientation_Getter_(unwrap_jso(this));
+  
   /**
    * The height of this window including all user interface elements.
    *
@@ -33680,8 +33710,8 @@
    */
   @DomName('Window.outerHeight')
   @DocsEditable()
-  int get outerHeight => _blink.BlinkWindow.instance.outerHeight_Getter_(this);
-
+  int get outerHeight => _blink.BlinkWindow.instance.outerHeight_Getter_(unwrap_jso(this));
+  
   /**
    * The width of the window including all user interface elements.
    *
@@ -33693,8 +33723,8 @@
    */
   @DomName('Window.outerWidth')
   @DocsEditable()
-  int get outerWidth => _blink.BlinkWindow.instance.outerWidth_Getter_(this);
-
+  int get outerWidth => _blink.BlinkWindow.instance.outerWidth_Getter_(unwrap_jso(this));
+  
   /**
    * The distance this window has been scrolled horizontally.
    *
@@ -33709,8 +33739,8 @@
    */
   @DomName('Window.pageXOffset')
   @DocsEditable()
-  double get _pageXOffset => _blink.BlinkWindow.instance.pageXOffset_Getter_(this);
-
+  double get _pageXOffset => _blink.BlinkWindow.instance.pageXOffset_Getter_(unwrap_jso(this));
+  
   /**
    * The distance this window has been scrolled vertically.
    *
@@ -33725,12 +33755,12 @@
    */
   @DomName('Window.pageYOffset')
   @DocsEditable()
-  double get _pageYOffset => _blink.BlinkWindow.instance.pageYOffset_Getter_(this);
-
+  double get _pageYOffset => _blink.BlinkWindow.instance.pageYOffset_Getter_(unwrap_jso(this));
+  
   @DomName('Window.parent')
   @DocsEditable()
-  WindowBase get parent => _blink.BlinkWindow.instance.parent_Getter_(this);
-
+  WindowBase get parent => wrap_jso(_blink.BlinkWindow.instance.parent_Getter_(unwrap_jso(this)));
+  
   /**
    * Timing and navigation data for this window.
    *
@@ -33747,8 +33777,8 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE)
-  Performance get performance => _blink.BlinkWindow.instance.performance_Getter_(this);
-
+  Performance get performance => wrap_jso(_blink.BlinkWindow.instance.performance_Getter_(unwrap_jso(this)));
+  
   /**
    * Information about the screen displaying this window.
    *
@@ -33759,8 +33789,8 @@
    */
   @DomName('Window.screen')
   @DocsEditable()
-  Screen get screen => _blink.BlinkWindow.instance.screen_Getter_(this);
-
+  Screen get screen => wrap_jso(_blink.BlinkWindow.instance.screen_Getter_(unwrap_jso(this)));
+  
   /**
    * The distance from the left side of the screen to the left side of this
    * window.
@@ -33772,8 +33802,8 @@
    */
   @DomName('Window.screenLeft')
   @DocsEditable()
-  int get screenLeft => _blink.BlinkWindow.instance.screenLeft_Getter_(this);
-
+  int get screenLeft => _blink.BlinkWindow.instance.screenLeft_Getter_(unwrap_jso(this));
+  
   /**
    * The distance from the top of the screen to the top of this window.
    *
@@ -33784,8 +33814,8 @@
    */
   @DomName('Window.screenTop')
   @DocsEditable()
-  int get screenTop => _blink.BlinkWindow.instance.screenTop_Getter_(this);
-
+  int get screenTop => _blink.BlinkWindow.instance.screenTop_Getter_(unwrap_jso(this));
+  
   /**
    * The distance from the left side of the screen to the mouse pointer.
    *
@@ -33796,8 +33826,8 @@
    */
   @DomName('Window.screenX')
   @DocsEditable()
-  int get screenX => _blink.BlinkWindow.instance.screenX_Getter_(this);
-
+  int get screenX => _blink.BlinkWindow.instance.screenX_Getter_(unwrap_jso(this));
+  
   /**
    * The distance from the top of the screen to the mouse pointer.
    *
@@ -33808,16 +33838,16 @@
    */
   @DomName('Window.screenY')
   @DocsEditable()
-  int get screenY => _blink.BlinkWindow.instance.screenY_Getter_(this);
-
+  int get screenY => _blink.BlinkWindow.instance.screenY_Getter_(unwrap_jso(this));
+  
   @DomName('Window.scrollX')
   @DocsEditable()
-  double get _scrollX => _blink.BlinkWindow.instance.scrollX_Getter_(this);
-
+  double get _scrollX => _blink.BlinkWindow.instance.scrollX_Getter_(unwrap_jso(this));
+  
   @DomName('Window.scrollY')
   @DocsEditable()
-  double get _scrollY => _blink.BlinkWindow.instance.scrollY_Getter_(this);
-
+  double get _scrollY => _blink.BlinkWindow.instance.scrollY_Getter_(unwrap_jso(this));
+  
   /**
    * This window's scroll bars.
    *
@@ -33829,8 +33859,8 @@
    */
   @DomName('Window.scrollbars')
   @DocsEditable()
-  BarProp get scrollbars => _blink.BlinkWindow.instance.scrollbars_Getter_(this);
-
+  BarProp get scrollbars => wrap_jso(_blink.BlinkWindow.instance.scrollbars_Getter_(unwrap_jso(this)));
+  
   /**
    * The current window.
    *
@@ -33841,8 +33871,8 @@
    */
   @DomName('Window.self')
   @DocsEditable()
-  WindowBase get self => _blink.BlinkWindow.instance.self_Getter_(this);
-
+  WindowBase get self => wrap_jso(_blink.BlinkWindow.instance.self_Getter_(unwrap_jso(this)));
+  
   /**
    * Storage for this window that is cleared when this session ends.
    *
@@ -33858,8 +33888,8 @@
    */
   @DomName('Window.sessionStorage')
   @DocsEditable()
-  Storage get sessionStorage => _blink.BlinkWindow.instance.sessionStorage_Getter_(this);
-
+  Storage get sessionStorage => wrap_jso(_blink.BlinkWindow.instance.sessionStorage_Getter_(unwrap_jso(this)));
+  
   /**
    * Access to speech synthesis in the browser.
    *
@@ -33873,18 +33903,18 @@
   @DocsEditable()
   // https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section
   @Experimental()
-  SpeechSynthesis get speechSynthesis => _blink.BlinkWindow.instance.speechSynthesis_Getter_(this);
-
+  SpeechSynthesis get speechSynthesis => wrap_jso(_blink.BlinkWindow.instance.speechSynthesis_Getter_(unwrap_jso(this)));
+  
   /// *Deprecated*.
   @DomName('Window.status')
   @DocsEditable()
-  String get status => _blink.BlinkWindow.instance.status_Getter_(this);
-
+  String get status => _blink.BlinkWindow.instance.status_Getter_(unwrap_jso(this));
+  
   /// *Deprecated*.
   @DomName('Window.status')
   @DocsEditable()
-  void set status(String value) => _blink.BlinkWindow.instance.status_Setter_(this, value);
-
+  void set status(String value) => _blink.BlinkWindow.instance.status_Setter_(unwrap_jso(this), value);
+  
   /**
    * This window's status bar.
    *
@@ -33896,8 +33926,8 @@
    */
   @DomName('Window.statusbar')
   @DocsEditable()
-  BarProp get statusbar => _blink.BlinkWindow.instance.statusbar_Getter_(this);
-
+  BarProp get statusbar => wrap_jso(_blink.BlinkWindow.instance.statusbar_Getter_(unwrap_jso(this)));
+  
   /**
    * Access to CSS media queries.
    *
@@ -33911,8 +33941,8 @@
   @DocsEditable()
   // http://developer.apple.com/library/safari/#documentation/SafariDOMAdditions/Reference/StyleMedia/StyleMedia/StyleMedia.html
   @Experimental() // nonstandard
-  StyleMedia get styleMedia => _blink.BlinkWindow.instance.styleMedia_Getter_(this);
-
+  StyleMedia get styleMedia => wrap_jso(_blink.BlinkWindow.instance.styleMedia_Getter_(unwrap_jso(this)));
+  
   /**
    * This window's tool bar.
    *
@@ -33924,12 +33954,12 @@
    */
   @DomName('Window.toolbar')
   @DocsEditable()
-  BarProp get toolbar => _blink.BlinkWindow.instance.toolbar_Getter_(this);
-
+  BarProp get toolbar => wrap_jso(_blink.BlinkWindow.instance.toolbar_Getter_(unwrap_jso(this)));
+  
   @DomName('Window.top')
   @DocsEditable()
-  WindowBase get top => _blink.BlinkWindow.instance.top_Getter_(this);
-
+  WindowBase get top => wrap_jso(_blink.BlinkWindow.instance.top_Getter_(unwrap_jso(this)));
+  
   /**
    * The current window.
    *
@@ -33940,40 +33970,40 @@
    */
   @DomName('Window.window')
   @DocsEditable()
-  WindowBase get window => _blink.BlinkWindow.instance.window_Getter_(this);
-
+  WindowBase get window => wrap_jso(_blink.BlinkWindow.instance.window_Getter_(unwrap_jso(this)));
+  
   WindowBase __getter__(index_OR_name) {
     if ((index_OR_name is int)) {
-      return _blink.BlinkWindow.instance.$__getter___Callback_1_(this, index_OR_name);
+      return _blink.BlinkWindow.instance.$__getter___Callback_1_(unwrap_jso(this), unwrap_jso(index_OR_name));
     }
     if ((index_OR_name is String)) {
-      return _blink.BlinkWindow.instance.$__getter___Callback_1_(this, index_OR_name);
+      return _blink.BlinkWindow.instance.$__getter___Callback_1_(unwrap_jso(this), unwrap_jso(index_OR_name));
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   void alert([String message]) {
     if (message != null) {
-      _blink.BlinkWindow.instance.alert_Callback_1_(this, message);
+      _blink.BlinkWindow.instance.alert_Callback_1_(unwrap_jso(this), message);
       return;
     }
-    _blink.BlinkWindow.instance.alert_Callback_0_(this);
+    _blink.BlinkWindow.instance.alert_Callback_0_(unwrap_jso(this));
     return;
   }
 
   @DomName('Window.cancelAnimationFrame')
   @DocsEditable()
-  void cancelAnimationFrame(int id) => _blink.BlinkWindow.instance.cancelAnimationFrame_Callback_1_(this, id);
-
+  void cancelAnimationFrame(int id) => _blink.BlinkWindow.instance.cancelAnimationFrame_Callback_1_(unwrap_jso(this), id);
+  
   @DomName('Window.close')
   @DocsEditable()
-  void close() => _blink.BlinkWindow.instance.close_Callback_0_(this);
-
+  void close() => _blink.BlinkWindow.instance.close_Callback_0_(unwrap_jso(this));
+  
   bool confirm([String message]) {
     if (message != null) {
-      return _blink.BlinkWindow.instance.confirm_Callback_1_(this, message);
+      return _blink.BlinkWindow.instance.confirm_Callback_1_(unwrap_jso(this), message);
     }
-    return _blink.BlinkWindow.instance.confirm_Callback_0_(this);
+    return _blink.BlinkWindow.instance.confirm_Callback_0_(unwrap_jso(this));
   }
 
   /**
@@ -33987,20 +34017,20 @@
   @DomName('Window.find')
   @DocsEditable()
   @Experimental() // non-standard
-  bool find(String string, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) => _blink.BlinkWindow.instance.find_Callback_7_(this, string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog);
-
+  bool find(String string, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) => _blink.BlinkWindow.instance.find_Callback_7_(unwrap_jso(this), string, caseSensitive, backwards, wrap, wholeWord, searchInFrames, showDialog);
+  
   @DomName('Window.getComputedStyle')
   @DocsEditable()
-  CssStyleDeclaration _getComputedStyle(Element element, String pseudoElement) => _blink.BlinkWindow.instance.getComputedStyle_Callback_2_(this, element, pseudoElement);
-
+  CssStyleDeclaration _getComputedStyle(Element element, String pseudoElement) => _blink.BlinkWindow.instance.getComputedStyle_Callback_2_(unwrap_jso(this), unwrap_jso(element), pseudoElement);
+  
   /**
    * Returns all CSS rules that apply to the element's pseudo-element.
    */
   @DomName('Window.getMatchedCSSRules')
   @DocsEditable()
   @Experimental() // non-standard
-  List<CssRule> getMatchedCssRules(Element element, String pseudoElement) => _blink.BlinkWindow.instance.getMatchedCSSRules_Callback_2_(this, element, pseudoElement);
-
+  List<CssRule> getMatchedCssRules(Element element, String pseudoElement) => _blink.BlinkWindow.instance.getMatchedCSSRules_Callback_2_(unwrap_jso(this), unwrap_jso(element), pseudoElement);
+  
   /**
    * Returns the currently selected text.
    *
@@ -34012,8 +34042,8 @@
    */
   @DomName('Window.getSelection')
   @DocsEditable()
-  Selection getSelection() => _blink.BlinkWindow.instance.getSelection_Callback_0_(this);
-
+  Selection getSelection() => wrap_jso(_blink.BlinkWindow.instance.getSelection_Callback_0_(unwrap_jso(this)));
+  
   /**
    * Returns a list of media queries for the given query string.
    *
@@ -34027,8 +34057,8 @@
    */
   @DomName('Window.matchMedia')
   @DocsEditable()
-  MediaQueryList matchMedia(String query) => _blink.BlinkWindow.instance.matchMedia_Callback_1_(this, query);
-
+  MediaQueryList matchMedia(String query) => wrap_jso(_blink.BlinkWindow.instance.matchMedia_Callback_1_(unwrap_jso(this), query));
+  
   /**
    * Moves this window.
    *
@@ -34043,27 +34073,27 @@
    */
   @DomName('Window.moveBy')
   @DocsEditable()
-  void moveBy(num x, num y) => _blink.BlinkWindow.instance.moveBy_Callback_2_(this, x, y);
-
+  void moveBy(num x, num y) => _blink.BlinkWindow.instance.moveBy_Callback_2_(unwrap_jso(this), x, y);
+  
   @DomName('Window.moveTo')
   @DocsEditable()
-  void _moveTo(num x, num y) => _blink.BlinkWindow.instance.moveTo_Callback_2_(this, x, y);
-
+  void _moveTo(num x, num y) => _blink.BlinkWindow.instance.moveTo_Callback_2_(unwrap_jso(this), x, y);
+  
   @DomName('Window.open')
   @DocsEditable()
-  WindowBase open(String url, String name, [String options]) => _blink.BlinkWindow.instance.open_Callback_3_(this, url, name, options);
-
+  WindowBase open(String url, String name, [String options]) => _blink.BlinkWindow.instance.open_Callback_3_(unwrap_jso(this), url, name, options);
+  
   SqlDatabase openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) {
     if (creationCallback != null) {
-      return _blink.BlinkWindow.instance.openDatabase_Callback_5_(this, name, version, displayName, estimatedSize, creationCallback);
+      return _blink.BlinkWindow.instance.openDatabase_Callback_5_(unwrap_jso(this), name, version, displayName, estimatedSize, unwrap_jso(creationCallback));
     }
-    return _blink.BlinkWindow.instance.openDatabase_Callback_4_(this, name, version, displayName, estimatedSize);
+    return _blink.BlinkWindow.instance.openDatabase_Callback_4_(unwrap_jso(this), name, version, displayName, estimatedSize);
   }
 
   @DomName('Window.postMessage')
   @DocsEditable()
-  void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List<MessagePort> transfer]) => _blink.BlinkWindow.instance.postMessage_Callback_3_(this, message, targetOrigin, transfer);
-
+  void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List<MessagePort> transfer]) => _blink.BlinkWindow.instance.postMessage_Callback_3_(unwrap_jso(this), message, targetOrigin, transfer);
+  
   /**
    * Opens the print dialog for this window.
    *
@@ -34074,12 +34104,12 @@
    */
   @DomName('Window.print')
   @DocsEditable()
-  void print() => _blink.BlinkWindow.instance.print_Callback_0_(this);
-
+  void print() => _blink.BlinkWindow.instance.print_Callback_0_(unwrap_jso(this));
+  
   @DomName('Window.requestAnimationFrame')
   @DocsEditable()
-  int _requestAnimationFrame(RequestAnimationFrameCallback callback) => _blink.BlinkWindow.instance.requestAnimationFrame_Callback_1_(this, callback);
-
+  int _requestAnimationFrame(RequestAnimationFrameCallback callback) => _blink.BlinkWindow.instance.requestAnimationFrame_Callback_1_(unwrap_jso(this), unwrap_jso(callback));
+  
   /**
    * Resizes this window by an offset.
    *
@@ -34090,8 +34120,8 @@
    */
   @DomName('Window.resizeBy')
   @DocsEditable()
-  void resizeBy(num x, num y) => _blink.BlinkWindow.instance.resizeBy_Callback_2_(this, x, y);
-
+  void resizeBy(num x, num y) => _blink.BlinkWindow.instance.resizeBy_Callback_2_(unwrap_jso(this), x, y);
+  
   /**
    * Resizes this window to a specific width and height.
    *
@@ -34102,23 +34132,23 @@
    */
   @DomName('Window.resizeTo')
   @DocsEditable()
-  void resizeTo(num width, num height) => _blink.BlinkWindow.instance.resizeTo_Callback_2_(this, width, height);
-
+  void resizeTo(num width, num height) => _blink.BlinkWindow.instance.resizeTo_Callback_2_(unwrap_jso(this), width, height);
+  
   void scroll(x, y, [Map scrollOptions]) {
     if ((y is num) && (x is num) && scrollOptions == null) {
-      _blink.BlinkWindow.instance.scroll_Callback_2_(this, x, y);
+      _blink.BlinkWindow.instance.scroll_Callback_2_(unwrap_jso(this), unwrap_jso(x), unwrap_jso(y));
       return;
     }
     if ((scrollOptions is Map) && (y is num) && (x is num)) {
-      _blink.BlinkWindow.instance.scroll_Callback_3_(this, x, y, scrollOptions);
+      _blink.BlinkWindow.instance.scroll_Callback_3_(unwrap_jso(this), unwrap_jso(x), unwrap_jso(y), scrollOptions);
       return;
     }
     if ((y is int) && (x is int) && scrollOptions == null) {
-      _blink.BlinkWindow.instance.scroll_Callback_2_(this, x, y);
+      _blink.BlinkWindow.instance.scroll_Callback_2_(unwrap_jso(this), unwrap_jso(x), unwrap_jso(y));
       return;
     }
     if ((scrollOptions is Map) && (y is int) && (x is int)) {
-      _blink.BlinkWindow.instance.scroll_Callback_3_(this, x, y, scrollOptions);
+      _blink.BlinkWindow.instance.scroll_Callback_3_(unwrap_jso(this), unwrap_jso(x), unwrap_jso(y), scrollOptions);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -34126,19 +34156,19 @@
 
   void scrollBy(x, y, [Map scrollOptions]) {
     if ((y is num) && (x is num) && scrollOptions == null) {
-      _blink.BlinkWindow.instance.scrollBy_Callback_2_(this, x, y);
+      _blink.BlinkWindow.instance.scrollBy_Callback_2_(unwrap_jso(this), unwrap_jso(x), unwrap_jso(y));
       return;
     }
     if ((scrollOptions is Map) && (y is num) && (x is num)) {
-      _blink.BlinkWindow.instance.scrollBy_Callback_3_(this, x, y, scrollOptions);
+      _blink.BlinkWindow.instance.scrollBy_Callback_3_(unwrap_jso(this), unwrap_jso(x), unwrap_jso(y), scrollOptions);
       return;
     }
     if ((y is int) && (x is int) && scrollOptions == null) {
-      _blink.BlinkWindow.instance.scrollBy_Callback_2_(this, x, y);
+      _blink.BlinkWindow.instance.scrollBy_Callback_2_(unwrap_jso(this), unwrap_jso(x), unwrap_jso(y));
       return;
     }
     if ((scrollOptions is Map) && (y is int) && (x is int)) {
-      _blink.BlinkWindow.instance.scrollBy_Callback_3_(this, x, y, scrollOptions);
+      _blink.BlinkWindow.instance.scrollBy_Callback_3_(unwrap_jso(this), unwrap_jso(x), unwrap_jso(y), scrollOptions);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -34146,19 +34176,19 @@
 
   void scrollTo(x, y, [Map scrollOptions]) {
     if ((y is num) && (x is num) && scrollOptions == null) {
-      _blink.BlinkWindow.instance.scrollTo_Callback_2_(this, x, y);
+      _blink.BlinkWindow.instance.scrollTo_Callback_2_(unwrap_jso(this), unwrap_jso(x), unwrap_jso(y));
       return;
     }
     if ((scrollOptions is Map) && (y is num) && (x is num)) {
-      _blink.BlinkWindow.instance.scrollTo_Callback_3_(this, x, y, scrollOptions);
+      _blink.BlinkWindow.instance.scrollTo_Callback_3_(unwrap_jso(this), unwrap_jso(x), unwrap_jso(y), scrollOptions);
       return;
     }
     if ((y is int) && (x is int) && scrollOptions == null) {
-      _blink.BlinkWindow.instance.scrollTo_Callback_2_(this, x, y);
+      _blink.BlinkWindow.instance.scrollTo_Callback_2_(unwrap_jso(this), unwrap_jso(x), unwrap_jso(y));
       return;
     }
     if ((scrollOptions is Map) && (y is int) && (x is int)) {
-      _blink.BlinkWindow.instance.scrollTo_Callback_3_(this, x, y, scrollOptions);
+      _blink.BlinkWindow.instance.scrollTo_Callback_3_(unwrap_jso(this), unwrap_jso(x), unwrap_jso(y), scrollOptions);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -34175,8 +34205,8 @@
    */
   @DomName('Window.showModalDialog')
   @DocsEditable()
-  Object showModalDialog(String url, [Object dialogArgs, String featureArgs]) => _blink.BlinkWindow.instance.showModalDialog_Callback_3_(this, url, dialogArgs, featureArgs);
-
+  Object showModalDialog(String url, [Object dialogArgs, String featureArgs]) => wrap_jso(_blink.BlinkWindow.instance.showModalDialog_Callback_3_(unwrap_jso(this), url, dialogArgs, featureArgs));
+  
   /**
    * Stops the window from loading.
    *
@@ -34188,14 +34218,14 @@
    */
   @DomName('Window.stop')
   @DocsEditable()
-  void stop() => _blink.BlinkWindow.instance.stop_Callback_0_(this);
-
+  void stop() => _blink.BlinkWindow.instance.stop_Callback_0_(unwrap_jso(this));
+  
   void __requestFileSystem(int type, int size, _FileSystemCallback successCallback, [_ErrorCallback errorCallback]) {
     if (errorCallback != null) {
-      _blink.BlinkWindow.instance.webkitRequestFileSystem_Callback_4_(this, type, size, successCallback, errorCallback);
+      _blink.BlinkWindow.instance.webkitRequestFileSystem_Callback_4_(unwrap_jso(this), type, size, unwrap_jso(successCallback), unwrap_jso(errorCallback));
       return;
     }
-    _blink.BlinkWindow.instance.webkitRequestFileSystem_Callback_3_(this, type, size, successCallback);
+    _blink.BlinkWindow.instance.webkitRequestFileSystem_Callback_3_(unwrap_jso(this), type, size, unwrap_jso(successCallback));
     return;
   }
 
@@ -34209,10 +34239,10 @@
 
   void _resolveLocalFileSystemUrl(String url, _EntryCallback successCallback, [_ErrorCallback errorCallback]) {
     if (errorCallback != null) {
-      _blink.BlinkWindow.instance.webkitResolveLocalFileSystemURL_Callback_3_(this, url, successCallback, errorCallback);
+      _blink.BlinkWindow.instance.webkitResolveLocalFileSystemURL_Callback_3_(unwrap_jso(this), url, unwrap_jso(successCallback), unwrap_jso(errorCallback));
       return;
     }
-    _blink.BlinkWindow.instance.webkitResolveLocalFileSystemURL_Callback_2_(this, url, successCallback);
+    _blink.BlinkWindow.instance.webkitResolveLocalFileSystemURL_Callback_2_(unwrap_jso(this), url, unwrap_jso(successCallback));
     return;
   }
 
@@ -34226,28 +34256,28 @@
 
   @DomName('Window.atob')
   @DocsEditable()
-  String atob(String string) => _blink.BlinkWindow.instance.atob_Callback_1_(this, string);
-
+  String atob(String string) => _blink.BlinkWindow.instance.atob_Callback_1_(unwrap_jso(this), string);
+  
   @DomName('Window.btoa')
   @DocsEditable()
-  String btoa(String string) => _blink.BlinkWindow.instance.btoa_Callback_1_(this, string);
-
+  String btoa(String string) => _blink.BlinkWindow.instance.btoa_Callback_1_(unwrap_jso(this), string);
+  
   @DomName('Window.clearInterval')
   @DocsEditable()
-  void _clearInterval(int handle) => _blink.BlinkWindow.instance.clearInterval_Callback_1_(this, handle);
-
+  void _clearInterval(int handle) => _blink.BlinkWindow.instance.clearInterval_Callback_1_(unwrap_jso(this), handle);
+  
   @DomName('Window.clearTimeout')
   @DocsEditable()
-  void _clearTimeout(int handle) => _blink.BlinkWindow.instance.clearTimeout_Callback_1_(this, handle);
-
+  void _clearTimeout(int handle) => _blink.BlinkWindow.instance.clearTimeout_Callback_1_(unwrap_jso(this), handle);
+  
   @DomName('Window.setInterval')
   @DocsEditable()
-  int _setInterval(Object handler, int timeout) => _blink.BlinkWindow.instance.setInterval_Callback_2_(this, handler, timeout);
-
+  int _setInterval(Object handler, int timeout) => _blink.BlinkWindow.instance.setInterval_Callback_2_(unwrap_jso(this), handler, timeout);
+  
   @DomName('Window.setTimeout')
   @DocsEditable()
-  int _setTimeout(Object handler, int timeout) => _blink.BlinkWindow.instance.setTimeout_Callback_2_(this, handler, timeout);
-
+  int _setTimeout(Object handler, int timeout) => _blink.BlinkWindow.instance.setTimeout_Callback_2_(unwrap_jso(this), handler, timeout);
+  
   /// Stream of `contentloaded` events handled by this [Window].
   @DomName('Window.onDOMContentLoaded')
   @DocsEditable()
@@ -34655,19 +34685,19 @@
 
   @DomName('Window.pageXOffset')
   @DocsEditable()
-  int get pageXOffset => _blink.BlinkWindow.instance.pageXOffset_Getter_(this).round();
+  int get pageXOffset => _blink.BlinkWindow.instance.pageXOffset_Getter_(unwrap_jso(this)).round();
 
   @DomName('Window.pageYOffset')
   @DocsEditable()
-  int get pageYOffset => _blink.BlinkWindow.instance.pageYOffset_Getter_(this).round();
+  int get pageYOffset => _blink.BlinkWindow.instance.pageYOffset_Getter_(unwrap_jso(this)).round();
 
   @DomName('Window.scrollX')
   @DocsEditable()
-  int get scrollX => _blink.BlinkWindow.instance.scrollX_Getter_(this).round();
+  int get scrollX => _blink.BlinkWindow.instance.scrollX_Getter_(unwrap_jso(this)).round();
 
   @DomName('Window.scrollY')
   @DocsEditable()
-  int get scrollY => _blink.BlinkWindow.instance.scrollY_Getter_(this).round();
+  int get scrollY => _blink.BlinkWindow.instance.scrollY_Getter_(unwrap_jso(this)).round();
 }
 
 
@@ -34853,12 +34883,12 @@
 
   @DomName('Worker.postMessage')
   @DocsEditable()
-  void postMessage(/*SerializedScriptValue*/ message, [List<MessagePort> transfer]) => _blink.BlinkWorker.instance.postMessage_Callback_2_(this, message, transfer);
-
+  void postMessage(/*SerializedScriptValue*/ message, [List<MessagePort> transfer]) => _blink.BlinkWorker.instance.postMessage_Callback_2_(unwrap_jso(this), message, transfer);
+  
   @DomName('Worker.terminate')
   @DocsEditable()
-  void terminate() => _blink.BlinkWorker.instance.terminate_Callback_0_(this);
-
+  void terminate() => _blink.BlinkWorker.instance.terminate_Callback_0_(unwrap_jso(this));
+  
   /// Stream of `error` events handled by this [Worker].
   @DomName('Worker.onerror')
   @DocsEditable()
@@ -34924,58 +34954,58 @@
   @DomName('WorkerGlobalScope.console')
   @DocsEditable()
   @Experimental() // untriaged
-  WorkerConsole get console => _blink.BlinkWorkerGlobalScope.instance.console_Getter_(this);
-
+  WorkerConsole get console => wrap_jso(_blink.BlinkWorkerGlobalScope.instance.console_Getter_(unwrap_jso(this)));
+  
   @DomName('WorkerGlobalScope.crypto')
   @DocsEditable()
   @Experimental() // untriaged
-  Crypto get crypto => _blink.BlinkWorkerGlobalScope.instance.crypto_Getter_(this);
-
+  Crypto get crypto => wrap_jso(_blink.BlinkWorkerGlobalScope.instance.crypto_Getter_(unwrap_jso(this)));
+  
   @DomName('WorkerGlobalScope.indexedDB')
   @DocsEditable()
   @Experimental() // untriaged
-  IdbFactory get indexedDB => _blink.BlinkWorkerGlobalScope.instance.indexedDB_Getter_(this);
-
+  IdbFactory get indexedDB => wrap_jso(_blink.BlinkWorkerGlobalScope.instance.indexedDB_Getter_(unwrap_jso(this)));
+  
   @DomName('WorkerGlobalScope.location')
   @DocsEditable()
   @Experimental() // untriaged
-  _WorkerLocation get location => _blink.BlinkWorkerGlobalScope.instance.location_Getter_(this);
-
+  _WorkerLocation get location => wrap_jso(_blink.BlinkWorkerGlobalScope.instance.location_Getter_(unwrap_jso(this)));
+  
   @DomName('WorkerGlobalScope.navigator')
   @DocsEditable()
   @Experimental() // untriaged
-  _WorkerNavigator get navigator => _blink.BlinkWorkerGlobalScope.instance.navigator_Getter_(this);
-
+  _WorkerNavigator get navigator => wrap_jso(_blink.BlinkWorkerGlobalScope.instance.navigator_Getter_(unwrap_jso(this)));
+  
   @DomName('WorkerGlobalScope.performance')
   @DocsEditable()
   @Experimental() // untriaged
-  WorkerPerformance get performance => _blink.BlinkWorkerGlobalScope.instance.performance_Getter_(this);
-
+  WorkerPerformance get performance => wrap_jso(_blink.BlinkWorkerGlobalScope.instance.performance_Getter_(unwrap_jso(this)));
+  
   @DomName('WorkerGlobalScope.self')
   @DocsEditable()
   @Experimental() // untriaged
-  WorkerGlobalScope get self => _blink.BlinkWorkerGlobalScope.instance.self_Getter_(this);
-
+  WorkerGlobalScope get self => wrap_jso(_blink.BlinkWorkerGlobalScope.instance.self_Getter_(unwrap_jso(this)));
+  
   @DomName('WorkerGlobalScope.close')
   @DocsEditable()
   @Experimental() // untriaged
-  void close() => _blink.BlinkWorkerGlobalScope.instance.close_Callback_0_(this);
-
+  void close() => _blink.BlinkWorkerGlobalScope.instance.close_Callback_0_(unwrap_jso(this));
+  
   @DomName('WorkerGlobalScope.importScripts')
   @DocsEditable()
   @Experimental() // untriaged
-  void importScripts(String urls) => _blink.BlinkWorkerGlobalScope.instance.importScripts_Callback_1_(this, urls);
-
+  void importScripts(String urls) => _blink.BlinkWorkerGlobalScope.instance.importScripts_Callback_1_(unwrap_jso(this), urls);
+  
   void _webkitRequestFileSystem(int type, int size, [_FileSystemCallback successCallback, _ErrorCallback errorCallback]) {
     if (errorCallback != null) {
-      _blink.BlinkWorkerGlobalScope.instance.webkitRequestFileSystem_Callback_4_(this, type, size, successCallback, errorCallback);
+      _blink.BlinkWorkerGlobalScope.instance.webkitRequestFileSystem_Callback_4_(unwrap_jso(this), type, size, unwrap_jso(successCallback), unwrap_jso(errorCallback));
       return;
     }
     if (successCallback != null) {
-      _blink.BlinkWorkerGlobalScope.instance.webkitRequestFileSystem_Callback_3_(this, type, size, successCallback);
+      _blink.BlinkWorkerGlobalScope.instance.webkitRequestFileSystem_Callback_3_(unwrap_jso(this), type, size, unwrap_jso(successCallback));
       return;
     }
-    _blink.BlinkWorkerGlobalScope.instance.webkitRequestFileSystem_Callback_2_(this, type, size);
+    _blink.BlinkWorkerGlobalScope.instance.webkitRequestFileSystem_Callback_2_(unwrap_jso(this), type, size);
     return;
   }
 
@@ -34993,22 +35023,22 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   @Experimental() // untriaged
-  _DOMFileSystemSync requestFileSystemSync(int type, int size) => _blink.BlinkWorkerGlobalScope.instance.webkitRequestFileSystemSync_Callback_2_(this, type, size);
-
+  _DOMFileSystemSync requestFileSystemSync(int type, int size) => _blink.BlinkWorkerGlobalScope.instance.webkitRequestFileSystemSync_Callback_2_(unwrap_jso(this), type, size);
+  
   @DomName('WorkerGlobalScope.webkitResolveLocalFileSystemSyncURL')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   @Experimental() // untriaged
-  _EntrySync resolveLocalFileSystemSyncUrl(String url) => _blink.BlinkWorkerGlobalScope.instance.webkitResolveLocalFileSystemSyncURL_Callback_1_(this, url);
-
+  _EntrySync resolveLocalFileSystemSyncUrl(String url) => _blink.BlinkWorkerGlobalScope.instance.webkitResolveLocalFileSystemSyncURL_Callback_1_(unwrap_jso(this), url);
+  
   void _webkitResolveLocalFileSystemUrl(String url, _EntryCallback successCallback, [_ErrorCallback errorCallback]) {
     if (errorCallback != null) {
-      _blink.BlinkWorkerGlobalScope.instance.webkitResolveLocalFileSystemURL_Callback_3_(this, url, successCallback, errorCallback);
+      _blink.BlinkWorkerGlobalScope.instance.webkitResolveLocalFileSystemURL_Callback_3_(unwrap_jso(this), url, unwrap_jso(successCallback), unwrap_jso(errorCallback));
       return;
     }
-    _blink.BlinkWorkerGlobalScope.instance.webkitResolveLocalFileSystemURL_Callback_2_(this, url, successCallback);
+    _blink.BlinkWorkerGlobalScope.instance.webkitResolveLocalFileSystemURL_Callback_2_(unwrap_jso(this), url, unwrap_jso(successCallback));
     return;
   }
 
@@ -35023,33 +35053,33 @@
   @DomName('WorkerGlobalScope.atob')
   @DocsEditable()
   @Experimental() // untriaged
-  String atob(String string) => _blink.BlinkWorkerGlobalScope.instance.atob_Callback_1_(this, string);
-
+  String atob(String string) => _blink.BlinkWorkerGlobalScope.instance.atob_Callback_1_(unwrap_jso(this), string);
+  
   @DomName('WorkerGlobalScope.btoa')
   @DocsEditable()
   @Experimental() // untriaged
-  String btoa(String string) => _blink.BlinkWorkerGlobalScope.instance.btoa_Callback_1_(this, string);
-
+  String btoa(String string) => _blink.BlinkWorkerGlobalScope.instance.btoa_Callback_1_(unwrap_jso(this), string);
+  
   @DomName('WorkerGlobalScope.clearInterval')
   @DocsEditable()
   @Experimental() // untriaged
-  void _clearInterval(int handle) => _blink.BlinkWorkerGlobalScope.instance.clearInterval_Callback_1_(this, handle);
-
+  void _clearInterval(int handle) => _blink.BlinkWorkerGlobalScope.instance.clearInterval_Callback_1_(unwrap_jso(this), handle);
+  
   @DomName('WorkerGlobalScope.clearTimeout')
   @DocsEditable()
   @Experimental() // untriaged
-  void _clearTimeout(int handle) => _blink.BlinkWorkerGlobalScope.instance.clearTimeout_Callback_1_(this, handle);
-
+  void _clearTimeout(int handle) => _blink.BlinkWorkerGlobalScope.instance.clearTimeout_Callback_1_(unwrap_jso(this), handle);
+  
   @DomName('WorkerGlobalScope.setInterval')
   @DocsEditable()
   @Experimental() // untriaged
-  int _setInterval(Object handler, int timeout) => _blink.BlinkWorkerGlobalScope.instance.setInterval_Callback_2_(this, handler, timeout);
-
+  int _setInterval(Object handler, int timeout) => _blink.BlinkWorkerGlobalScope.instance.setInterval_Callback_2_(unwrap_jso(this), handler, timeout);
+  
   @DomName('WorkerGlobalScope.setTimeout')
   @DocsEditable()
   @Experimental() // untriaged
-  int _setTimeout(Object handler, int timeout) => _blink.BlinkWorkerGlobalScope.instance.setTimeout_Callback_2_(this, handler, timeout);
-
+  int _setTimeout(Object handler, int timeout) => _blink.BlinkWorkerGlobalScope.instance.setTimeout_Callback_2_(unwrap_jso(this), handler, timeout);
+  
   /// Stream of `error` events handled by this [WorkerGlobalScope].
   @DomName('WorkerGlobalScope.onerror')
   @DocsEditable()
@@ -35074,13 +35104,13 @@
   @DomName('WorkerPerformance.memory')
   @DocsEditable()
   @Experimental() // untriaged
-  MemoryInfo get memory => _blink.BlinkWorkerPerformance.instance.memory_Getter_(this);
-
+  MemoryInfo get memory => wrap_jso(_blink.BlinkWorkerPerformance.instance.memory_Getter_(unwrap_jso(this)));
+  
   @DomName('WorkerPerformance.now')
   @DocsEditable()
   @Experimental() // untriaged
-  double now() => _blink.BlinkWorkerPerformance.instance.now_Callback_0_(this);
-
+  double now() => _blink.BlinkWorkerPerformance.instance.now_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -35105,16 +35135,16 @@
 
   @DomName('XPathEvaluator.createExpression')
   @DocsEditable()
-  XPathExpression createExpression(String expression, XPathNSResolver resolver) => _blink.BlinkXPathEvaluator.instance.createExpression_Callback_2_(this, expression, resolver);
-
+  XPathExpression createExpression(String expression, XPathNSResolver resolver) => wrap_jso(_blink.BlinkXPathEvaluator.instance.createExpression_Callback_2_(unwrap_jso(this), expression, unwrap_jso(resolver)));
+  
   @DomName('XPathEvaluator.createNSResolver')
   @DocsEditable()
-  XPathNSResolver createNSResolver(Node nodeResolver) => _blink.BlinkXPathEvaluator.instance.createNSResolver_Callback_1_(this, nodeResolver);
-
+  XPathNSResolver createNSResolver(Node nodeResolver) => wrap_jso(_blink.BlinkXPathEvaluator.instance.createNSResolver_Callback_1_(unwrap_jso(this), unwrap_jso(nodeResolver)));
+  
   @DomName('XPathEvaluator.evaluate')
   @DocsEditable()
-  XPathResult evaluate(String expression, Node contextNode, XPathNSResolver resolver, int type, XPathResult inResult) => _blink.BlinkXPathEvaluator.instance.evaluate_Callback_5_(this, expression, contextNode, resolver, type, inResult);
-
+  XPathResult evaluate(String expression, Node contextNode, XPathNSResolver resolver, int type, XPathResult inResult) => wrap_jso(_blink.BlinkXPathEvaluator.instance.evaluate_Callback_5_(unwrap_jso(this), expression, unwrap_jso(contextNode), unwrap_jso(resolver), type, unwrap_jso(inResult)));
+  
 }
 // 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
@@ -35133,8 +35163,8 @@
 
   @DomName('XPathExpression.evaluate')
   @DocsEditable()
-  XPathResult evaluate(Node contextNode, int type, XPathResult inResult) => _blink.BlinkXPathExpression.instance.evaluate_Callback_3_(this, contextNode, type, inResult);
-
+  XPathResult evaluate(Node contextNode, int type, XPathResult inResult) => wrap_jso(_blink.BlinkXPathExpression.instance.evaluate_Callback_3_(unwrap_jso(this), unwrap_jso(contextNode), type, unwrap_jso(inResult)));
+  
 }
 // 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
@@ -35153,8 +35183,8 @@
 
   @DomName('XPathNSResolver.lookupNamespaceURI')
   @DocsEditable()
-  String lookupNamespaceUri(String prefix) => _blink.BlinkXPathNSResolver.instance.lookupNamespaceURI_Callback_1_(this, prefix);
-
+  String lookupNamespaceUri(String prefix) => _blink.BlinkXPathNSResolver.instance.lookupNamespaceURI_Callback_1_(unwrap_jso(this), prefix);
+  
 }
 // 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
@@ -35213,40 +35243,40 @@
 
   @DomName('XPathResult.booleanValue')
   @DocsEditable()
-  bool get booleanValue => _blink.BlinkXPathResult.instance.booleanValue_Getter_(this);
-
+  bool get booleanValue => _blink.BlinkXPathResult.instance.booleanValue_Getter_(unwrap_jso(this));
+  
   @DomName('XPathResult.invalidIteratorState')
   @DocsEditable()
-  bool get invalidIteratorState => _blink.BlinkXPathResult.instance.invalidIteratorState_Getter_(this);
-
+  bool get invalidIteratorState => _blink.BlinkXPathResult.instance.invalidIteratorState_Getter_(unwrap_jso(this));
+  
   @DomName('XPathResult.numberValue')
   @DocsEditable()
-  double get numberValue => _blink.BlinkXPathResult.instance.numberValue_Getter_(this);
-
+  double get numberValue => _blink.BlinkXPathResult.instance.numberValue_Getter_(unwrap_jso(this));
+  
   @DomName('XPathResult.resultType')
   @DocsEditable()
-  int get resultType => _blink.BlinkXPathResult.instance.resultType_Getter_(this);
-
+  int get resultType => _blink.BlinkXPathResult.instance.resultType_Getter_(unwrap_jso(this));
+  
   @DomName('XPathResult.singleNodeValue')
   @DocsEditable()
-  Node get singleNodeValue => _blink.BlinkXPathResult.instance.singleNodeValue_Getter_(this);
-
+  Node get singleNodeValue => wrap_jso(_blink.BlinkXPathResult.instance.singleNodeValue_Getter_(unwrap_jso(this)));
+  
   @DomName('XPathResult.snapshotLength')
   @DocsEditable()
-  int get snapshotLength => _blink.BlinkXPathResult.instance.snapshotLength_Getter_(this);
-
+  int get snapshotLength => _blink.BlinkXPathResult.instance.snapshotLength_Getter_(unwrap_jso(this));
+  
   @DomName('XPathResult.stringValue')
   @DocsEditable()
-  String get stringValue => _blink.BlinkXPathResult.instance.stringValue_Getter_(this);
-
+  String get stringValue => _blink.BlinkXPathResult.instance.stringValue_Getter_(unwrap_jso(this));
+  
   @DomName('XPathResult.iterateNext')
   @DocsEditable()
-  Node iterateNext() => _blink.BlinkXPathResult.instance.iterateNext_Callback_0_(this);
-
+  Node iterateNext() => wrap_jso(_blink.BlinkXPathResult.instance.iterateNext_Callback_0_(unwrap_jso(this)));
+  
   @DomName('XPathResult.snapshotItem')
   @DocsEditable()
-  Node snapshotItem(int index) => _blink.BlinkXPathResult.instance.snapshotItem_Callback_1_(this, index);
-
+  Node snapshotItem(int index) => wrap_jso(_blink.BlinkXPathResult.instance.snapshotItem_Callback_1_(unwrap_jso(this), index));
+  
 }
 // 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
@@ -35286,8 +35316,8 @@
 
   @DomName('XMLSerializer.serializeToString')
   @DocsEditable()
-  String serializeToString(Node node) => _blink.BlinkXMLSerializer.instance.serializeToString_Callback_1_(this, node);
-
+  String serializeToString(Node node) => _blink.BlinkXMLSerializer.instance.serializeToString_Callback_1_(unwrap_jso(this), unwrap_jso(node));
+  
 }
 // 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
@@ -35317,36 +35347,36 @@
 
   @DomName('XSLTProcessor.clearParameters')
   @DocsEditable()
-  void clearParameters() => _blink.BlinkXSLTProcessor.instance.clearParameters_Callback_0_(this);
-
+  void clearParameters() => _blink.BlinkXSLTProcessor.instance.clearParameters_Callback_0_(unwrap_jso(this));
+  
   @DomName('XSLTProcessor.getParameter')
   @DocsEditable()
-  String getParameter(String namespaceURI, String localName) => _blink.BlinkXSLTProcessor.instance.getParameter_Callback_2_(this, namespaceURI, localName);
-
+  String getParameter(String namespaceURI, String localName) => _blink.BlinkXSLTProcessor.instance.getParameter_Callback_2_(unwrap_jso(this), namespaceURI, localName);
+  
   @DomName('XSLTProcessor.importStylesheet')
   @DocsEditable()
-  void importStylesheet(Node stylesheet) => _blink.BlinkXSLTProcessor.instance.importStylesheet_Callback_1_(this, stylesheet);
-
+  void importStylesheet(Node stylesheet) => _blink.BlinkXSLTProcessor.instance.importStylesheet_Callback_1_(unwrap_jso(this), unwrap_jso(stylesheet));
+  
   @DomName('XSLTProcessor.removeParameter')
   @DocsEditable()
-  void removeParameter(String namespaceURI, String localName) => _blink.BlinkXSLTProcessor.instance.removeParameter_Callback_2_(this, namespaceURI, localName);
-
+  void removeParameter(String namespaceURI, String localName) => _blink.BlinkXSLTProcessor.instance.removeParameter_Callback_2_(unwrap_jso(this), namespaceURI, localName);
+  
   @DomName('XSLTProcessor.reset')
   @DocsEditable()
-  void reset() => _blink.BlinkXSLTProcessor.instance.reset_Callback_0_(this);
-
+  void reset() => _blink.BlinkXSLTProcessor.instance.reset_Callback_0_(unwrap_jso(this));
+  
   @DomName('XSLTProcessor.setParameter')
   @DocsEditable()
-  void setParameter(String namespaceURI, String localName, String value) => _blink.BlinkXSLTProcessor.instance.setParameter_Callback_3_(this, namespaceURI, localName, value);
-
+  void setParameter(String namespaceURI, String localName, String value) => _blink.BlinkXSLTProcessor.instance.setParameter_Callback_3_(unwrap_jso(this), namespaceURI, localName, value);
+  
   @DomName('XSLTProcessor.transformToDocument')
   @DocsEditable()
-  Document transformToDocument(Node source) => _blink.BlinkXSLTProcessor.instance.transformToDocument_Callback_1_(this, source);
-
+  Document transformToDocument(Node source) => wrap_jso(_blink.BlinkXSLTProcessor.instance.transformToDocument_Callback_1_(unwrap_jso(this), unwrap_jso(source)));
+  
   @DomName('XSLTProcessor.transformToFragment')
   @DocsEditable()
-  DocumentFragment transformToFragment(Node source, Document docVal) => _blink.BlinkXSLTProcessor.instance.transformToFragment_Callback_2_(this, source, docVal);
-
+  DocumentFragment transformToFragment(Node source, Document docVal) => wrap_jso(_blink.BlinkXSLTProcessor.instance.transformToFragment_Callback_2_(unwrap_jso(this), unwrap_jso(source), unwrap_jso(docVal)));
+  
 }
 // 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
@@ -35364,40 +35394,40 @@
   @DomName('Attr.localName')
   @DocsEditable()
   @Experimental() // untriaged
-  String get _localName => _blink.BlinkAttr.instance.localName_Getter_(this);
-
+  String get _localName => _blink.BlinkAttr.instance.localName_Getter_(unwrap_jso(this));
+  
   @DomName('Attr.name')
   @DocsEditable()
-  String get name => _blink.BlinkAttr.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkAttr.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('Attr.namespaceURI')
   @DocsEditable()
   @Experimental() // untriaged
-  String get _namespaceUri => _blink.BlinkAttr.instance.namespaceURI_Getter_(this);
-
+  String get _namespaceUri => _blink.BlinkAttr.instance.namespaceURI_Getter_(unwrap_jso(this));
+  
   @DomName('Attr.nodeValue')
   @DocsEditable()
   @Experimental() // untriaged
-  String get nodeValue => _blink.BlinkAttr.instance.nodeValue_Getter_(this);
-
+  String get nodeValue => _blink.BlinkAttr.instance.nodeValue_Getter_(unwrap_jso(this));
+  
   @DomName('Attr.textContent')
   @DocsEditable()
   @Experimental() // untriaged
-  String get text => _blink.BlinkAttr.instance.textContent_Getter_(this);
-
+  String get text => _blink.BlinkAttr.instance.textContent_Getter_(unwrap_jso(this));
+  
   @DomName('Attr.textContent')
   @DocsEditable()
   @Experimental() // untriaged
-  void set text(String value) => _blink.BlinkAttr.instance.textContent_Setter_(this, value);
-
+  void set text(String value) => _blink.BlinkAttr.instance.textContent_Setter_(unwrap_jso(this), value);
+  
   @DomName('Attr.value')
   @DocsEditable()
-  String get value => _blink.BlinkAttr.instance.value_Getter_(this);
-
+  String get value => _blink.BlinkAttr.instance.value_Getter_(unwrap_jso(this));
+  
   @DomName('Attr.value')
   @DocsEditable()
-  void set value(String value) => _blink.BlinkAttr.instance.value_Setter_(this, value);
-
+  void set value(String value) => _blink.BlinkAttr.instance.value_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -35580,28 +35610,28 @@
 
   @DomName('ClientRect.bottom')
   @DocsEditable()
-  double get bottom => _blink.BlinkClientRect.instance.bottom_Getter_(this);
-
+  double get bottom => _blink.BlinkClientRect.instance.bottom_Getter_(unwrap_jso(this));
+  
   @DomName('ClientRect.height')
   @DocsEditable()
-  double get height => _blink.BlinkClientRect.instance.height_Getter_(this);
-
+  double get height => _blink.BlinkClientRect.instance.height_Getter_(unwrap_jso(this));
+  
   @DomName('ClientRect.left')
   @DocsEditable()
-  double get left => _blink.BlinkClientRect.instance.left_Getter_(this);
-
+  double get left => _blink.BlinkClientRect.instance.left_Getter_(unwrap_jso(this));
+  
   @DomName('ClientRect.right')
   @DocsEditable()
-  double get right => _blink.BlinkClientRect.instance.right_Getter_(this);
-
+  double get right => _blink.BlinkClientRect.instance.right_Getter_(unwrap_jso(this));
+  
   @DomName('ClientRect.top')
   @DocsEditable()
-  double get top => _blink.BlinkClientRect.instance.top_Getter_(this);
-
+  double get top => _blink.BlinkClientRect.instance.top_Getter_(unwrap_jso(this));
+  
   @DomName('ClientRect.width')
   @DocsEditable()
-  double get width => _blink.BlinkClientRect.instance.width_Getter_(this);
-}
+  double get width => _blink.BlinkClientRect.instance.width_Getter_(unwrap_jso(this));
+  }
 
 /**
  * This is the [Jenkins hash function][1] but using masking to keep
@@ -35654,16 +35684,16 @@
 
   @DomName('ClientRectList.length')
   @DocsEditable()
-  int get length => _blink.BlinkClientRectList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkClientRectList.instance.length_Getter_(unwrap_jso(this));
+  
   Rectangle operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkClientRectList.instance.item_Callback_1_(this, index);
+    return wrap_jso(_blink.BlinkClientRectList.instance.item_Callback_1_(unwrap_jso(this), index));
   }
 
-  Rectangle _nativeIndexedGetter(int index) => _blink.BlinkClientRectList.instance.item_Callback_1_(this, index);
-
+  Rectangle _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkClientRectList.instance.item_Callback_1_(unwrap_jso(this), index));
+ 
   void operator[]=(int index, Rectangle value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -35704,8 +35734,8 @@
 
   @DomName('ClientRectList.item')
   @DocsEditable()
-  Rectangle item(int index) => _blink.BlinkClientRectList.instance.item_Callback_1_(this, index);
-
+  Rectangle item(int index) => make_dart_rectangle(_blink.BlinkClientRectList.instance.item_Callback_1_(unwrap_jso(this), index));
+  
 }
 // 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
@@ -35738,16 +35768,16 @@
 
   @DomName('CSSRuleList.length')
   @DocsEditable()
-  int get length => _blink.BlinkCSSRuleList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkCSSRuleList.instance.length_Getter_(unwrap_jso(this));
+  
   CssRule operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkCSSRuleList.instance.item_Callback_1_(this, index);
+    return wrap_jso(_blink.BlinkCSSRuleList.instance.item_Callback_1_(unwrap_jso(this), index));
   }
 
-  CssRule _nativeIndexedGetter(int index) => _blink.BlinkCSSRuleList.instance.item_Callback_1_(this, index);
-
+  CssRule _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkCSSRuleList.instance.item_Callback_1_(unwrap_jso(this), index));
+ 
   void operator[]=(int index, CssRule value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -35788,8 +35818,8 @@
 
   @DomName('CSSRuleList.item')
   @DocsEditable()
-  CssRule item(int index) => _blink.BlinkCSSRuleList.instance.item_Callback_1_(this, index);
-
+  CssRule item(int index) => _blink.BlinkCSSRuleList.instance.item_Callback_1_(unwrap_jso(this), index);
+  
 }
 // 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
@@ -35808,16 +35838,16 @@
 
   @DomName('CSSValueList.length')
   @DocsEditable()
-  int get length => _blink.BlinkCSSValueList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkCSSValueList.instance.length_Getter_(unwrap_jso(this));
+  
   _CSSValue operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkCSSValueList.instance.item_Callback_1_(this, index);
+    return wrap_jso(_blink.BlinkCSSValueList.instance.item_Callback_1_(unwrap_jso(this), index));
   }
 
-  _CSSValue _nativeIndexedGetter(int index) => _blink.BlinkCSSValueList.instance.item_Callback_1_(this, index);
-
+  _CSSValue _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkCSSValueList.instance.item_Callback_1_(unwrap_jso(this), index));
+ 
   void operator[]=(int index, _CSSValue value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -35858,8 +35888,8 @@
 
   @DomName('CSSValueList.item')
   @DocsEditable()
-  _CSSValue item(int index) => _blink.BlinkCSSValueList.instance.item_Callback_1_(this, index);
-
+  _CSSValue item(int index) => _blink.BlinkCSSValueList.instance.item_Callback_1_(unwrap_jso(this), index);
+  
 }
 // 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
@@ -35961,43 +35991,43 @@
   @DomName('DOMRect.height')
   @DocsEditable()
   @Experimental() // untriaged
-  num get height => _blink.BlinkDOMRect.instance.height_Getter_(this);
-
+  num get height => _blink.BlinkDOMRect.instance.height_Getter_(unwrap_jso(this));
+  
   @DomName('DOMRect.height')
   @DocsEditable()
   @Experimental() // untriaged
-  void set height(num value) => _blink.BlinkDOMRect.instance.height_Setter_(this, value);
-
+  void set height(num value) => _blink.BlinkDOMRect.instance.height_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMRect.width')
   @DocsEditable()
   @Experimental() // untriaged
-  num get width => _blink.BlinkDOMRect.instance.width_Getter_(this);
-
+  num get width => _blink.BlinkDOMRect.instance.width_Getter_(unwrap_jso(this));
+  
   @DomName('DOMRect.width')
   @DocsEditable()
   @Experimental() // untriaged
-  void set width(num value) => _blink.BlinkDOMRect.instance.width_Setter_(this, value);
-
+  void set width(num value) => _blink.BlinkDOMRect.instance.width_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMRect.x')
   @DocsEditable()
   @Experimental() // untriaged
-  num get x => _blink.BlinkDOMRect.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkDOMRect.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('DOMRect.x')
   @DocsEditable()
   @Experimental() // untriaged
-  void set x(num value) => _blink.BlinkDOMRect.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkDOMRect.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('DOMRect.y')
   @DocsEditable()
   @Experimental() // untriaged
-  num get y => _blink.BlinkDOMRect.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkDOMRect.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('DOMRect.y')
   @DocsEditable()
   @Experimental() // untriaged
-  void set y(num value) => _blink.BlinkDOMRect.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkDOMRect.instance.y_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -36086,16 +36116,16 @@
 
   @DomName('GamepadList.length')
   @DocsEditable()
-  int get length => _blink.BlinkGamepadList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkGamepadList.instance.length_Getter_(unwrap_jso(this));
+  
   Gamepad operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkGamepadList.instance.item_Callback_1_(this, index);
+    return wrap_jso(_blink.BlinkGamepadList.instance.item_Callback_1_(unwrap_jso(this), index));
   }
 
-  Gamepad _nativeIndexedGetter(int index) => _blink.BlinkGamepadList.instance.item_Callback_1_(this, index);
-
+  Gamepad _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkGamepadList.instance.item_Callback_1_(unwrap_jso(this), index));
+ 
   void operator[]=(int index, Gamepad value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -36136,8 +36166,8 @@
 
   @DomName('GamepadList.item')
   @DocsEditable()
-  Gamepad item(int index) => _blink.BlinkGamepadList.instance.item_Callback_1_(this, index);
-
+  Gamepad item(int index) => wrap_jso(_blink.BlinkGamepadList.instance.item_Callback_1_(unwrap_jso(this), index));
+  
 }
 // 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
@@ -36156,8 +36186,8 @@
 
   @DomName('HTMLAllCollection.item')
   @DocsEditable()
-  Element _item(int index) => _blink.BlinkHTMLAllCollection.instance.item_Callback_1_(this, index);
-
+  Element _item(int index) => wrap_jso(_blink.BlinkHTMLAllCollection.instance.item_Callback_1_(unwrap_jso(this), index));
+  
 }
 // 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
@@ -36330,16 +36360,16 @@
 
   @DomName('NamedNodeMap.length')
   @DocsEditable()
-  int get length => _blink.BlinkNamedNodeMap.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkNamedNodeMap.instance.length_Getter_(unwrap_jso(this));
+  
   Node operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkNamedNodeMap.instance.item_Callback_1_(this, index);
+    return wrap_jso(_blink.BlinkNamedNodeMap.instance.item_Callback_1_(unwrap_jso(this), index));
   }
 
-  Node _nativeIndexedGetter(int index) => _blink.BlinkNamedNodeMap.instance.item_Callback_1_(this, index);
-
+  Node _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkNamedNodeMap.instance.item_Callback_1_(unwrap_jso(this), index));
+ 
   void operator[]=(int index, Node value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -36380,36 +36410,36 @@
 
   @DomName('NamedNodeMap.__getter__')
   @DocsEditable()
-  Node __getter__(String name) => _blink.BlinkNamedNodeMap.instance.$__getter___Callback_1_(this, name);
-
+  Node __getter__(String name) => wrap_jso(_blink.BlinkNamedNodeMap.instance.$__getter___Callback_1_(unwrap_jso(this), name));
+  
   @DomName('NamedNodeMap.getNamedItem')
   @DocsEditable()
-  Node getNamedItem(String name) => _blink.BlinkNamedNodeMap.instance.getNamedItem_Callback_1_(this, name);
-
+  Node getNamedItem(String name) => wrap_jso(_blink.BlinkNamedNodeMap.instance.getNamedItem_Callback_1_(unwrap_jso(this), name));
+  
   @DomName('NamedNodeMap.getNamedItemNS')
   @DocsEditable()
-  Node getNamedItemNS(String namespaceURI, String localName) => _blink.BlinkNamedNodeMap.instance.getNamedItemNS_Callback_2_(this, namespaceURI, localName);
-
+  Node getNamedItemNS(String namespaceURI, String localName) => wrap_jso(_blink.BlinkNamedNodeMap.instance.getNamedItemNS_Callback_2_(unwrap_jso(this), namespaceURI, localName));
+  
   @DomName('NamedNodeMap.item')
   @DocsEditable()
-  Node item(int index) => _blink.BlinkNamedNodeMap.instance.item_Callback_1_(this, index);
-
+  Node item(int index) => wrap_jso(_blink.BlinkNamedNodeMap.instance.item_Callback_1_(unwrap_jso(this), index));
+  
   @DomName('NamedNodeMap.removeNamedItem')
   @DocsEditable()
-  Node removeNamedItem(String name) => _blink.BlinkNamedNodeMap.instance.removeNamedItem_Callback_1_(this, name);
-
+  Node removeNamedItem(String name) => wrap_jso(_blink.BlinkNamedNodeMap.instance.removeNamedItem_Callback_1_(unwrap_jso(this), name));
+  
   @DomName('NamedNodeMap.removeNamedItemNS')
   @DocsEditable()
-  Node removeNamedItemNS(String namespaceURI, String localName) => _blink.BlinkNamedNodeMap.instance.removeNamedItemNS_Callback_2_(this, namespaceURI, localName);
-
+  Node removeNamedItemNS(String namespaceURI, String localName) => wrap_jso(_blink.BlinkNamedNodeMap.instance.removeNamedItemNS_Callback_2_(unwrap_jso(this), namespaceURI, localName));
+  
   @DomName('NamedNodeMap.setNamedItem')
   @DocsEditable()
-  Node setNamedItem(Node node) => _blink.BlinkNamedNodeMap.instance.setNamedItem_Callback_1_(this, node);
-
+  Node setNamedItem(Node node) => wrap_jso(_blink.BlinkNamedNodeMap.instance.setNamedItem_Callback_1_(unwrap_jso(this), unwrap_jso(node)));
+  
   @DomName('NamedNodeMap.setNamedItemNS')
   @DocsEditable()
-  Node setNamedItemNS(Node node) => _blink.BlinkNamedNodeMap.instance.setNamedItemNS_Callback_1_(this, node);
-
+  Node setNamedItemNS(Node node) => wrap_jso(_blink.BlinkNamedNodeMap.instance.setNamedItemNS_Callback_1_(unwrap_jso(this), unwrap_jso(node)));
+  
 }
 // 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
@@ -36504,33 +36534,33 @@
   @DomName('Request.credentials')
   @DocsEditable()
   @Experimental() // untriaged
-  String get credentials => _blink.BlinkRequest.instance.credentials_Getter_(this);
-
+  String get credentials => _blink.BlinkRequest.instance.credentials_Getter_(unwrap_jso(this));
+  
   @DomName('Request.headers')
   @DocsEditable()
   @Experimental() // untriaged
-  Headers get headers => _blink.BlinkRequest.instance.headers_Getter_(this);
-
+  Headers get headers => wrap_jso(_blink.BlinkRequest.instance.headers_Getter_(unwrap_jso(this)));
+  
   @DomName('Request.mode')
   @DocsEditable()
   @Experimental() // untriaged
-  String get mode => _blink.BlinkRequest.instance.mode_Getter_(this);
-
+  String get mode => _blink.BlinkRequest.instance.mode_Getter_(unwrap_jso(this));
+  
   @DomName('Request.referrer')
   @DocsEditable()
   @Experimental() // untriaged
-  String get referrer => _blink.BlinkRequest.instance.referrer_Getter_(this);
-
+  String get referrer => _blink.BlinkRequest.instance.referrer_Getter_(unwrap_jso(this));
+  
   @DomName('Request.url')
   @DocsEditable()
   @Experimental() // untriaged
-  String get url => _blink.BlinkRequest.instance.url_Getter_(this);
-
+  String get url => _blink.BlinkRequest.instance.url_Getter_(unwrap_jso(this));
+  
   @DomName('Request.clone')
   @DocsEditable()
   @Experimental() // untriaged
-  _Request clone() => _blink.BlinkRequest.instance.clone_Callback_0_(this);
-
+  _Request clone() => _blink.BlinkRequest.instance.clone_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -36609,16 +36639,16 @@
 
   @DomName('SpeechRecognitionResultList.length')
   @DocsEditable()
-  int get length => _blink.BlinkSpeechRecognitionResultList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkSpeechRecognitionResultList.instance.length_Getter_(unwrap_jso(this));
+  
   SpeechRecognitionResult operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkSpeechRecognitionResultList.instance.item_Callback_1_(this, index);
+    return wrap_jso(_blink.BlinkSpeechRecognitionResultList.instance.item_Callback_1_(unwrap_jso(this), index));
   }
 
-  SpeechRecognitionResult _nativeIndexedGetter(int index) => _blink.BlinkSpeechRecognitionResultList.instance.item_Callback_1_(this, index);
-
+  SpeechRecognitionResult _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkSpeechRecognitionResultList.instance.item_Callback_1_(unwrap_jso(this), index));
+ 
   void operator[]=(int index, SpeechRecognitionResult value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -36659,8 +36689,8 @@
 
   @DomName('SpeechRecognitionResultList.item')
   @DocsEditable()
-  SpeechRecognitionResult item(int index) => _blink.BlinkSpeechRecognitionResultList.instance.item_Callback_1_(this, index);
-
+  SpeechRecognitionResult item(int index) => wrap_jso(_blink.BlinkSpeechRecognitionResultList.instance.item_Callback_1_(unwrap_jso(this), index));
+  
 }
 // 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
@@ -36677,16 +36707,16 @@
 
   @DomName('StyleSheetList.length')
   @DocsEditable()
-  int get length => _blink.BlinkStyleSheetList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkStyleSheetList.instance.length_Getter_(unwrap_jso(this));
+  
   StyleSheet operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkStyleSheetList.instance.item_Callback_1_(this, index);
+    return wrap_jso(_blink.BlinkStyleSheetList.instance.item_Callback_1_(unwrap_jso(this), index));
   }
 
-  StyleSheet _nativeIndexedGetter(int index) => _blink.BlinkStyleSheetList.instance.item_Callback_1_(this, index);
-
+  StyleSheet _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkStyleSheetList.instance.item_Callback_1_(unwrap_jso(this), index));
+ 
   void operator[]=(int index, StyleSheet value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -36727,12 +36757,12 @@
 
   @DomName('StyleSheetList.__getter__')
   @DocsEditable()
-  CssStyleSheet __getter__(String name) => _blink.BlinkStyleSheetList.instance.$__getter___Callback_1_(this, name);
-
+  CssStyleSheet __getter__(String name) => _blink.BlinkStyleSheetList.instance.$__getter___Callback_1_(unwrap_jso(this), name);
+  
   @DomName('StyleSheetList.item')
   @DocsEditable()
-  StyleSheet item(int index) => _blink.BlinkStyleSheetList.instance.item_Callback_1_(this, index);
-
+  StyleSheet item(int index) => wrap_jso(_blink.BlinkStyleSheetList.instance.item_Callback_1_(unwrap_jso(this), index));
+  
 }
 // 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
@@ -36883,7 +36913,7 @@
 @DocsEditable()
 @DomName('XMLHttpRequestProgressEvent')
 @Experimental() // nonstandard
-abstract class _XMLHttpRequestProgressEvent extends ProgressEvent {
+class _XMLHttpRequestProgressEvent extends ProgressEvent {
   // To suppress missing implicit constructor warnings.
   factory _XMLHttpRequestProgressEvent._() { throw new UnsupportedError("Not supported"); }
 
@@ -40322,17 +40352,17 @@
 }
 
 class _SimpleNodeValidator implements NodeValidator {
-  final Set<String> allowedElements;
-  final Set<String> allowedAttributes;
-  final Set<String> allowedUriAttributes;
+  final Set<String> allowedElements = new Set<String>();
+  final Set<String> allowedAttributes = new Set<String>();
+  final Set<String> allowedUriAttributes = new Set<String>();
   final UriPolicy uriPolicy;
 
   factory _SimpleNodeValidator.allowNavigation(UriPolicy uriPolicy) {
     return new _SimpleNodeValidator(uriPolicy,
-      allowedElements: [
+      allowedElements: const [
         'A',
         'FORM'],
-      allowedAttributes: [
+      allowedAttributes: const [
         'A::accesskey',
         'A::coords',
         'A::hreflang',
@@ -40349,7 +40379,7 @@
         'FORM::novalidate',
         'FORM::target',
       ],
-      allowedUriAttributes: [
+      allowedUriAttributes: const [
         'A::href',
         'FORM::action',
       ]);
@@ -40357,10 +40387,10 @@
 
   factory _SimpleNodeValidator.allowImages(UriPolicy uriPolicy) {
     return new _SimpleNodeValidator(uriPolicy,
-      allowedElements: [
+      allowedElements: const [
         'IMG'
       ],
-      allowedAttributes: [
+      allowedAttributes: const [
         'IMG::align',
         'IMG::alt',
         'IMG::border',
@@ -40372,14 +40402,14 @@
         'IMG::vspace',
         'IMG::width',
       ],
-      allowedUriAttributes: [
+      allowedUriAttributes: const [
         'IMG::src',
       ]);
   }
 
   factory _SimpleNodeValidator.allowTextElements() {
     return new _SimpleNodeValidator(null,
-      allowedElements: [
+      allowedElements: const [
         'B',
         'BLOCKQUOTE',
         'BR',
@@ -40407,13 +40437,18 @@
    */
   _SimpleNodeValidator(this.uriPolicy,
       {Iterable<String> allowedElements, Iterable<String> allowedAttributes,
-      Iterable<String> allowedUriAttributes}):
-      this.allowedElements = allowedElements != null ?
-          new Set.from(allowedElements) : new Set(),
-      this.allowedAttributes = allowedAttributes != null ?
-          new Set.from(allowedAttributes) : new Set(),
-      this.allowedUriAttributes = allowedUriAttributes != null ?
-          new Set.from(allowedUriAttributes) : new Set();
+        Iterable<String> allowedUriAttributes}) {
+    this.allowedElements.addAll(allowedElements ?? const []);
+    allowedAttributes = allowedAttributes ?? const [];
+    allowedUriAttributes = allowedUriAttributes ?? const [];
+    var legalAttributes = allowedAttributes.where(
+        (x) => !_Html5NodeValidator._uriAttributes.contains(x));
+    var extraUriAttributes = allowedAttributes.where(
+        (x) => _Html5NodeValidator._uriAttributes.contains(x));
+    this.allowedAttributes.addAll(legalAttributes);
+    this.allowedUriAttributes.addAll(allowedUriAttributes);
+    this.allowedUriAttributes.addAll(extraUriAttributes);
+  }
 
   bool allowsElement(Element element) {
     return allowedElements.contains(element.tagName);
@@ -41622,7 +41657,10 @@
     return element;
   }
 
+  // TODO(terry): Enable below for Dartium w/ interop and remove other static window().
+  // static window() => wrap_jso(_blink.Blink_Utils.window()['window']);
   static window() => _blink.Blink_Utils.window();
+
   static forwardingPrint(String message) => _blink.Blink_Utils.forwardingPrint(message);
   static void spawnDomHelper(Function f, int replyTo) =>
       _blink.Blink_Utils.spawnDomHelper(f, replyTo);
@@ -42233,16 +42271,16 @@
   }
 
   static void _register(Document document, String tag, Type customType,
-    String extendsTagName) => _blink.Blink_Utils.register(document, tag, customType, extendsTagName);
+    String extendsTagName) => _blink.Blink_Utils.register(unwrap_jso(document), tag, customType, extendsTagName);
 
   static Element createElement(Document document, String tagName) =>
-    _blink.Blink_Utils.createElement(document, tagName);
+    wrap_jso(_blink.Blink_Utils.createElement(unwrap_jso(document), tagName));
 
   static void initializeCustomElement(HtmlElement element) =>
-    _blink.Blink_Utils.initializeCustomElement(element);
+    _blink.Blink_Utils.initializeCustomElement(unwrap_jso(element));
 
   static Element changeElementWrapper(HtmlElement element, Type type) =>
-    _blink.Blink_Utils.changeElementWrapper(element, type);
+    _blink.Blink_Utils.changeElementWrapper(unwrap_jso(element), type);
 }
 
 class _DOMWindowCrossFrame extends NativeFieldWrapperClass2 implements
diff --git a/sdk/lib/html/html_common/filtered_element_list.dart b/sdk/lib/html/html_common/filtered_element_list.dart
index 3514cdc..1a55d79 100644
--- a/sdk/lib/html/html_common/filtered_element_list.dart
+++ b/sdk/lib/html/html_common/filtered_element_list.dart
@@ -5,11 +5,10 @@
 part of html_common;
 
 /**
- * An indexable collection of a node's descendants in the document tree,
+ * An indexable collection of a node's direct descendants in the document tree,
  * filtered so that only elements are in the collection.
  */
-class FilteredElementList<T extends Element> extends ListBase<T>
-    implements NodeListWrapper{
+class FilteredElementList extends ListBase<Element> implements NodeListWrapper {
   final Node _node;
   final List<Node> _childNodes;
 
@@ -21,21 +20,28 @@
    *     var filteredElements = new FilteredElementList(query("#container"));
    *     // filteredElements is [a, b, c].
    */
-  FilteredElementList(Node node): _childNodes = node.nodes, _node = node;
+  FilteredElementList(Node node)
+      : _childNodes = node.nodes,
+        _node = node;
 
   // We can't memoize this, since it's possible that children will be messed
   // with externally to this class.
   //
-  // TODO(nweiz): we don't always need to create a new list. For example
-  // forEach, every, any, ... could directly work on the _childNodes.
-  List<T> get _filtered =>
-    new List<T>.from(_childNodes.where((n) => n is Element));
+  // We can't use where directly because the types don't agree and there's
+  // no way to cast it, so take advantage of being in the SDK to construct
+  // a WhereIterable directly. Even so it has to be of dynamic.
+  Iterable<Element> get _iterable =>
+      new WhereIterable(_childNodes, (n) => n is Element);
+  List<Element> get _filtered =>
+      new List<Element>.from(_iterable, growable: false);
 
-  void forEach(void f(T element)) {
+  void forEach(void f(Element element)) {
+    // This cannot use the iterator, because operations during iteration might
+    // modify the collection, e.g. addAll might append a node to another parent.
     _filtered.forEach(f);
   }
 
-  void operator []=(int index, T value) {
+  void operator []=(int index, Element value) {
     this[index].replaceWith(value);
   }
 
@@ -50,43 +56,44 @@
     removeRange(newLength, len);
   }
 
-  void add(T value) {
+  void add(Element value) {
     _childNodes.add(value);
   }
 
-  void addAll(Iterable<T> iterable) {
-    for (T element in iterable) {
+  void addAll(Iterable<Element> iterable) {
+    for (Element element in iterable) {
       add(element);
     }
   }
 
   bool contains(Object needle) {
     if (needle is! Element) return false;
-    T element = needle;
+    Element element = needle;
     return element.parentNode == _node;
   }
 
-  Iterable<T> get reversed => _filtered.reversed;
+  Iterable<Element> get reversed => _filtered.reversed;
 
-  void sort([int compare(T a, T b)]) {
+  void sort([int compare(Element a, Element b)]) {
     throw new UnsupportedError('Cannot sort filtered list');
   }
 
-  void setRange(int start, int end, Iterable<T> iterable,
-                [int skipCount = 0]) {
+  void setRange(int start, int end, Iterable<Element> iterable,
+      [int skipCount = 0]) {
     throw new UnsupportedError('Cannot setRange on filtered list');
   }
 
-  void fillRange(int start, int end, [T fillValue]) {
+  void fillRange(int start, int end, [Element fillValue]) {
     throw new UnsupportedError('Cannot fillRange on filtered list');
   }
 
-  void replaceRange(int start, int end, Iterable<T> iterable) {
+  void replaceRange(int start, int end, Iterable<Element> iterable) {
     throw new UnsupportedError('Cannot replaceRange on filtered list');
   }
 
   void removeRange(int start, int end) {
-    _filtered.sublist(start, end).forEach((el) => el.remove());
+    new List.from(_iterable.skip(start).take(end - start))
+        .forEach((el) => el.remove());
   }
 
   void clear() {
@@ -95,23 +102,33 @@
     _childNodes.clear();
   }
 
-  T removeLast() {
-    final result = this.last;
+  Element removeLast() {
+    final result = _iterable.last;
     if (result != null) {
       result.remove();
     }
     return result;
   }
 
-  void insert(int index, T value) {
-    _childNodes.insert(index, value);
+  void insert(int index, Element value) {
+    if (index == length) {
+      add(value);
+    } else {
+      var element = _iterable.elementAt(index);
+      element.parentNode.insertBefore(value, element);
+    }
   }
 
-  void insertAll(int index, Iterable<T> iterable) {
-    _childNodes.insertAll(index, iterable);
+  void insertAll(int index, Iterable<Element> iterable) {
+    if (index == length) {
+      addAll(iterable);
+    } else {
+      var element = _iterable.elementAt(index);
+      element.parentNode.insertAllBefore(iterable, element);
+    }
   }
 
-  T removeAt(int index) {
+  Element removeAt(int index) {
     final result = this[index];
     result.remove();
     return result;
@@ -119,19 +136,19 @@
 
   bool remove(Object element) {
     if (element is! Element) return false;
-    for (int i = 0; i < length; i++) {
-      T indexElement = this[i];
-      if (identical(indexElement, element)) {
-        indexElement.remove();
-        return true;
-      }
+    if (contains(element)) {
+      (element as Element).remove(); // Placate the type checker
+      return true;
+    } else {
+      return false;
     }
-    return false;
   }
 
-  int get length => _filtered.length;
-  T operator [](int index) => _filtered[index];
-  Iterator<T> get iterator => _filtered.iterator;
+  int get length => _iterable.length;
+  Element operator [](int index) => _iterable.elementAt(index);
+  // This cannot use the iterator, because operations during iteration might
+  // modify the collection, e.g. addAll might append a node to another parent.
+  Iterator<Element> get iterator => _filtered.iterator;
 
   List<Node> get rawList => _node.childNodes;
 }
diff --git a/sdk/lib/html/html_common/html_common.dart b/sdk/lib/html/html_common/html_common.dart
index c504a37..a538266 100644
--- a/sdk/lib/html/html_common/html_common.dart
+++ b/sdk/lib/html/html_common/html_common.dart
@@ -6,6 +6,7 @@
 
 import 'dart:collection';
 import 'dart:html';
+import 'dart:_internal' show WhereIterable;
 
 import 'metadata.dart';
 export 'metadata.dart';
diff --git a/sdk/lib/html/html_common/html_common_dart2js.dart b/sdk/lib/html/html_common/html_common_dart2js.dart
index e823008..9dcd5b9 100644
--- a/sdk/lib/html/html_common/html_common_dart2js.dart
+++ b/sdk/lib/html/html_common/html_common_dart2js.dart
@@ -6,6 +6,7 @@
 
 import 'dart:collection';
 import 'dart:html';
+import 'dart:_internal' show WhereIterable;
 import 'dart:web_gl' as gl;
 import 'dart:_native_typed_data';
 import 'dart:_js_helper' show Creates, Returns;
diff --git a/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart b/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
index ee73b5f..eb045b0 100644
--- a/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
+++ b/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
@@ -121,6 +121,7 @@
   'IDBVersionChangeEvent': () => VersionChangeEvent,
 
 };
+
 // 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.
@@ -152,46 +153,46 @@
 
   @DomName('IDBCursor.direction')
   @DocsEditable()
-  String get direction => _blink.BlinkIDBCursor.instance.direction_Getter_(this);
-
+  String get direction => _blink.BlinkIDBCursor.instance.direction_Getter_(unwrap_jso(this));
+  
   @DomName('IDBCursor.key')
   @DocsEditable()
-  Object get key => _blink.BlinkIDBCursor.instance.key_Getter_(this);
-
+  Object get key => _blink.BlinkIDBCursor.instance.key_Getter_(unwrap_jso(this));
+  
   @DomName('IDBCursor.primaryKey')
   @DocsEditable()
-  Object get primaryKey => _blink.BlinkIDBCursor.instance.primaryKey_Getter_(this);
-
+  Object get primaryKey => _blink.BlinkIDBCursor.instance.primaryKey_Getter_(unwrap_jso(this));
+  
   @DomName('IDBCursor.source')
   @DocsEditable()
-  Object get source => _blink.BlinkIDBCursor.instance.source_Getter_(this);
-
+  Object get source => _blink.BlinkIDBCursor.instance.source_Getter_(unwrap_jso(this));
+  
   @DomName('IDBCursor.advance')
   @DocsEditable()
-  void advance(int count) => _blink.BlinkIDBCursor.instance.advance_Callback_1_(this, count);
-
+  void advance(int count) => _blink.BlinkIDBCursor.instance.advance_Callback_1_(unwrap_jso(this), count);
+  
   @DomName('IDBCursor.continuePrimaryKey')
   @DocsEditable()
   @Experimental() // untriaged
-  void continuePrimaryKey(Object key, Object primaryKey) => _blink.BlinkIDBCursor.instance.continuePrimaryKey_Callback_2_(this, key, primaryKey);
-
+  void continuePrimaryKey(Object key, Object primaryKey) => _blink.BlinkIDBCursor.instance.continuePrimaryKey_Callback_2_(unwrap_jso(this), key, primaryKey);
+  
   @DomName('IDBCursor.delete')
   @DocsEditable()
-  Request _delete() => _blink.BlinkIDBCursor.instance.delete_Callback_0_(this);
-
+  Request _delete() => wrap_jso(_blink.BlinkIDBCursor.instance.delete_Callback_0_(unwrap_jso(this)));
+  
   void next([Object key]) {
     if (key != null) {
-      _blink.BlinkIDBCursor.instance.continue_Callback_1_(this, key);
+      _blink.BlinkIDBCursor.instance.continue_Callback_1_(unwrap_jso(this), key);
       return;
     }
-    _blink.BlinkIDBCursor.instance.continue_Callback_0_(this);
+    _blink.BlinkIDBCursor.instance.continue_Callback_0_(unwrap_jso(this));
     return;
   }
 
   @DomName('IDBCursor.update')
   @DocsEditable()
-  Request _update(Object value) => _blink.BlinkIDBCursor.instance.update_Callback_1_(this, value);
-
+  Request _update(Object value) => wrap_jso(_blink.BlinkIDBCursor.instance.update_Callback_1_(unwrap_jso(this), value));
+  
 }
 // 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
@@ -209,8 +210,8 @@
 
   @DomName('IDBCursorWithValue.value')
   @DocsEditable()
-  Object get value => _blink.BlinkIDBCursorWithValue.instance.value_Getter_(this);
-
+  Object get value => _blink.BlinkIDBCursorWithValue.instance.value_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -292,72 +293,72 @@
 
   @DomName('IDBDatabase.name')
   @DocsEditable()
-  String get name => _blink.BlinkIDBDatabase.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkIDBDatabase.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('IDBDatabase.objectStoreNames')
   @DocsEditable()
-  List<String> get objectStoreNames => _blink.BlinkIDBDatabase.instance.objectStoreNames_Getter_(this);
-
+  List<String> get objectStoreNames => _blink.BlinkIDBDatabase.instance.objectStoreNames_Getter_(unwrap_jso(this));
+  
   @DomName('IDBDatabase.version')
   @DocsEditable()
-  Object get version => _blink.BlinkIDBDatabase.instance.version_Getter_(this);
-
+  Object get version => _blink.BlinkIDBDatabase.instance.version_Getter_(unwrap_jso(this));
+  
   @DomName('IDBDatabase.close')
   @DocsEditable()
-  void close() => _blink.BlinkIDBDatabase.instance.close_Callback_0_(this);
-
+  void close() => _blink.BlinkIDBDatabase.instance.close_Callback_0_(unwrap_jso(this));
+  
   ObjectStore _createObjectStore(String name, [Map options]) {
     if (options != null) {
-      return _blink.BlinkIDBDatabase.instance.createObjectStore_Callback_2_(this, name, options);
+      return _blink.BlinkIDBDatabase.instance.createObjectStore_Callback_2_(unwrap_jso(this), name, options);
     }
-    return _blink.BlinkIDBDatabase.instance.createObjectStore_Callback_1_(this, name);
+    return _blink.BlinkIDBDatabase.instance.createObjectStore_Callback_1_(unwrap_jso(this), name);
   }
 
   @DomName('IDBDatabase.deleteObjectStore')
   @DocsEditable()
-  void deleteObjectStore(String name) => _blink.BlinkIDBDatabase.instance.deleteObjectStore_Callback_1_(this, name);
-
+  void deleteObjectStore(String name) => _blink.BlinkIDBDatabase.instance.deleteObjectStore_Callback_1_(unwrap_jso(this), name);
+  
   Transaction transaction(storeName_OR_storeNames, [String mode]) {
     if ((storeName_OR_storeNames is String || storeName_OR_storeNames == null) && mode == null) {
-      return _blink.BlinkIDBDatabase.instance.transaction_Callback_1_(this, storeName_OR_storeNames);
+      return _blink.BlinkIDBDatabase.instance.transaction_Callback_1_(unwrap_jso(this), unwrap_jso(storeName_OR_storeNames));
     }
     if ((mode is String || mode == null) && (storeName_OR_storeNames is String || storeName_OR_storeNames == null)) {
-      return _blink.BlinkIDBDatabase.instance.transaction_Callback_2_(this, storeName_OR_storeNames, mode);
+      return _blink.BlinkIDBDatabase.instance.transaction_Callback_2_(unwrap_jso(this), unwrap_jso(storeName_OR_storeNames), mode);
     }
     if ((storeName_OR_storeNames is List<String> || storeName_OR_storeNames == null) && mode == null) {
-      return _blink.BlinkIDBDatabase.instance.transaction_Callback_1_(this, storeName_OR_storeNames);
+      return _blink.BlinkIDBDatabase.instance.transaction_Callback_1_(unwrap_jso(this), unwrap_jso(storeName_OR_storeNames));
     }
     if ((mode is String || mode == null) && (storeName_OR_storeNames is List<String> || storeName_OR_storeNames == null)) {
-      return _blink.BlinkIDBDatabase.instance.transaction_Callback_2_(this, storeName_OR_storeNames, mode);
+      return _blink.BlinkIDBDatabase.instance.transaction_Callback_2_(unwrap_jso(this), unwrap_jso(storeName_OR_storeNames), mode);
     }
     if ((storeName_OR_storeNames is DomStringList || storeName_OR_storeNames == null) && mode == null) {
-      return _blink.BlinkIDBDatabase.instance.transaction_Callback_1_(this, storeName_OR_storeNames);
+      return _blink.BlinkIDBDatabase.instance.transaction_Callback_1_(unwrap_jso(this), unwrap_jso(storeName_OR_storeNames));
     }
     if ((mode is String || mode == null) && (storeName_OR_storeNames is DomStringList || storeName_OR_storeNames == null)) {
-      return _blink.BlinkIDBDatabase.instance.transaction_Callback_2_(this, storeName_OR_storeNames, mode);
+      return _blink.BlinkIDBDatabase.instance.transaction_Callback_2_(unwrap_jso(this), unwrap_jso(storeName_OR_storeNames), mode);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   Transaction transactionList(List<String> storeNames, [String mode]) {
     if (mode != null) {
-      return _blink.BlinkIDBDatabase.instance.transaction_Callback_2_(this, storeNames, mode);
+      return _blink.BlinkIDBDatabase.instance.transaction_Callback_2_(unwrap_jso(this), storeNames, mode);
     }
-    return _blink.BlinkIDBDatabase.instance.transaction_Callback_1_(this, storeNames);
+    return _blink.BlinkIDBDatabase.instance.transaction_Callback_1_(unwrap_jso(this), storeNames);
   }
 
   Transaction transactionStore(String storeName, [String mode]) {
     if (mode != null) {
-      return _blink.BlinkIDBDatabase.instance.transaction_Callback_2_(this, storeName, mode);
+      return _blink.BlinkIDBDatabase.instance.transaction_Callback_2_(unwrap_jso(this), storeName, mode);
     }
-    return _blink.BlinkIDBDatabase.instance.transaction_Callback_1_(this, storeName);
+    return _blink.BlinkIDBDatabase.instance.transaction_Callback_1_(unwrap_jso(this), storeName);
   }
 
   Transaction transactionStores(List<String> storeNames, [String mode]) {
     if (mode != null) {
-      return _blink.BlinkIDBDatabase.instance.transaction_Callback_2_(this, storeNames, mode);
+      return _blink.BlinkIDBDatabase.instance.transaction_Callback_2_(unwrap_jso(this), unwrap_jso(storeNames), mode);
     }
-    return _blink.BlinkIDBDatabase.instance.transaction_Callback_1_(this, storeNames);
+    return _blink.BlinkIDBDatabase.instance.transaction_Callback_1_(unwrap_jso(this), unwrap_jso(storeNames));
   }
 
   /// Stream of `abort` events handled by this [Database].
@@ -474,17 +475,17 @@
 
   @DomName('IDBFactory.cmp')
   @DocsEditable()
-  int cmp(Object first, Object second) => _blink.BlinkIDBFactory.instance.cmp_Callback_2_(this, first, second);
-
+  int cmp(Object first, Object second) => _blink.BlinkIDBFactory.instance.cmp_Callback_2_(unwrap_jso(this), first, second);
+  
   @DomName('IDBFactory.deleteDatabase')
   @DocsEditable()
-  OpenDBRequest _deleteDatabase(String name) => _blink.BlinkIDBFactory.instance.deleteDatabase_Callback_1_(this, name);
-
+  OpenDBRequest _deleteDatabase(String name) => _blink.BlinkIDBFactory.instance.deleteDatabase_Callback_1_(unwrap_jso(this), name);
+  
   OpenDBRequest _open(String name, [int version]) {
     if (version != null) {
-      return _blink.BlinkIDBFactory.instance.open_Callback_2_(this, name, version);
+      return _blink.BlinkIDBFactory.instance.open_Callback_2_(unwrap_jso(this), name, version);
     }
-    return _blink.BlinkIDBFactory.instance.open_Callback_1_(this, name);
+    return _blink.BlinkIDBFactory.instance.open_Callback_1_(unwrap_jso(this), name);
   }
 
   @DomName('IDBFactory.webkitGetDatabaseNames')
@@ -492,8 +493,8 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
-  Request _webkitGetDatabaseNames() => _blink.BlinkIDBFactory.instance.webkitGetDatabaseNames_Callback_0_(this);
-
+  Request _webkitGetDatabaseNames() => wrap_jso(_blink.BlinkIDBFactory.instance.webkitGetDatabaseNames_Callback_0_(unwrap_jso(this)));
+  
 }
 
 
@@ -612,48 +613,48 @@
 
   @DomName('IDBIndex.keyPath')
   @DocsEditable()
-  Object get keyPath => _blink.BlinkIDBIndex.instance.keyPath_Getter_(this);
-
+  Object get keyPath => _blink.BlinkIDBIndex.instance.keyPath_Getter_(unwrap_jso(this));
+  
   @DomName('IDBIndex.multiEntry')
   @DocsEditable()
-  bool get multiEntry => _blink.BlinkIDBIndex.instance.multiEntry_Getter_(this);
-
+  bool get multiEntry => _blink.BlinkIDBIndex.instance.multiEntry_Getter_(unwrap_jso(this));
+  
   @DomName('IDBIndex.name')
   @DocsEditable()
-  String get name => _blink.BlinkIDBIndex.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkIDBIndex.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('IDBIndex.objectStore')
   @DocsEditable()
-  ObjectStore get objectStore => _blink.BlinkIDBIndex.instance.objectStore_Getter_(this);
-
+  ObjectStore get objectStore => wrap_jso(_blink.BlinkIDBIndex.instance.objectStore_Getter_(unwrap_jso(this)));
+  
   @DomName('IDBIndex.unique')
   @DocsEditable()
-  bool get unique => _blink.BlinkIDBIndex.instance.unique_Getter_(this);
-
+  bool get unique => _blink.BlinkIDBIndex.instance.unique_Getter_(unwrap_jso(this));
+  
   @DomName('IDBIndex.count')
   @DocsEditable()
-  Request _count(Object key) => _blink.BlinkIDBIndex.instance.count_Callback_1_(this, key);
-
+  Request _count(Object key) => wrap_jso(_blink.BlinkIDBIndex.instance.count_Callback_1_(unwrap_jso(this), key));
+  
   @DomName('IDBIndex.get')
   @DocsEditable()
-  Request _get(Object key) => _blink.BlinkIDBIndex.instance.get_Callback_1_(this, key);
-
+  Request _get(Object key) => wrap_jso(_blink.BlinkIDBIndex.instance.get_Callback_1_(unwrap_jso(this), key));
+  
   @DomName('IDBIndex.getKey')
   @DocsEditable()
-  Request _getKey(Object key) => _blink.BlinkIDBIndex.instance.getKey_Callback_1_(this, key);
-
+  Request _getKey(Object key) => wrap_jso(_blink.BlinkIDBIndex.instance.getKey_Callback_1_(unwrap_jso(this), key));
+  
   Request _openCursor(Object range, [String direction]) {
     if (direction != null) {
-      return _blink.BlinkIDBIndex.instance.openCursor_Callback_2_(this, range, direction);
+      return wrap_jso(_blink.BlinkIDBIndex.instance.openCursor_Callback_2_(unwrap_jso(this), range, direction));
     }
-    return _blink.BlinkIDBIndex.instance.openCursor_Callback_1_(this, range);
+    return wrap_jso(_blink.BlinkIDBIndex.instance.openCursor_Callback_1_(unwrap_jso(this), range));
   }
 
   Request _openKeyCursor(Object range, [String direction]) {
     if (direction != null) {
-      return _blink.BlinkIDBIndex.instance.openKeyCursor_Callback_2_(this, range, direction);
+      return wrap_jso(_blink.BlinkIDBIndex.instance.openKeyCursor_Callback_2_(unwrap_jso(this), range, direction));
     }
-    return _blink.BlinkIDBIndex.instance.openKeyCursor_Callback_1_(this, range);
+    return wrap_jso(_blink.BlinkIDBIndex.instance.openKeyCursor_Callback_1_(unwrap_jso(this), range));
   }
 
 }
@@ -688,20 +689,20 @@
 
   @DomName('IDBKeyRange.lower')
   @DocsEditable()
-  Object get lower => _blink.BlinkIDBKeyRange.instance.lower_Getter_(this);
-
+  Object get lower => _blink.BlinkIDBKeyRange.instance.lower_Getter_(unwrap_jso(this));
+  
   @DomName('IDBKeyRange.lowerOpen')
   @DocsEditable()
-  bool get lowerOpen => _blink.BlinkIDBKeyRange.instance.lowerOpen_Getter_(this);
-
+  bool get lowerOpen => _blink.BlinkIDBKeyRange.instance.lowerOpen_Getter_(unwrap_jso(this));
+  
   @DomName('IDBKeyRange.upper')
   @DocsEditable()
-  Object get upper => _blink.BlinkIDBKeyRange.instance.upper_Getter_(this);
-
+  Object get upper => _blink.BlinkIDBKeyRange.instance.upper_Getter_(unwrap_jso(this));
+  
   @DomName('IDBKeyRange.upperOpen')
   @DocsEditable()
-  bool get upperOpen => _blink.BlinkIDBKeyRange.instance.upperOpen_Getter_(this);
-
+  bool get upperOpen => _blink.BlinkIDBKeyRange.instance.upperOpen_Getter_(unwrap_jso(this));
+  
   static KeyRange bound_(Object lower, Object upper, [bool lowerOpen, bool upperOpen]) {
     if (upperOpen != null) {
       return _blink.BlinkIDBKeyRange.instance.bound_Callback_4_(lower, upper, lowerOpen, upperOpen);
@@ -723,7 +724,7 @@
   @DocsEditable()
   @Experimental() // non-standard
   static KeyRange only_(Object value) => _blink.BlinkIDBKeyRange.instance.only_Callback_1_(value);
-
+  
   static KeyRange upperBound_(Object bound, [bool open]) {
     if (open != null) {
       return _blink.BlinkIDBKeyRange.instance.upperBound_Callback_2_(bound, open);
@@ -872,90 +873,90 @@
 
   @DomName('IDBObjectStore.autoIncrement')
   @DocsEditable()
-  bool get autoIncrement => _blink.BlinkIDBObjectStore.instance.autoIncrement_Getter_(this);
-
+  bool get autoIncrement => _blink.BlinkIDBObjectStore.instance.autoIncrement_Getter_(unwrap_jso(this));
+  
   @DomName('IDBObjectStore.indexNames')
   @DocsEditable()
-  List<String> get indexNames => _blink.BlinkIDBObjectStore.instance.indexNames_Getter_(this);
-
+  List<String> get indexNames => _blink.BlinkIDBObjectStore.instance.indexNames_Getter_(unwrap_jso(this));
+  
   @DomName('IDBObjectStore.keyPath')
   @DocsEditable()
-  Object get keyPath => _blink.BlinkIDBObjectStore.instance.keyPath_Getter_(this);
-
+  Object get keyPath => _blink.BlinkIDBObjectStore.instance.keyPath_Getter_(unwrap_jso(this));
+  
   @DomName('IDBObjectStore.name')
   @DocsEditable()
-  String get name => _blink.BlinkIDBObjectStore.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkIDBObjectStore.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('IDBObjectStore.transaction')
   @DocsEditable()
-  Transaction get transaction => _blink.BlinkIDBObjectStore.instance.transaction_Getter_(this);
-
+  Transaction get transaction => wrap_jso(_blink.BlinkIDBObjectStore.instance.transaction_Getter_(unwrap_jso(this)));
+  
   Request _add(Object value, [Object key]) {
     if (key != null) {
-      return _blink.BlinkIDBObjectStore.instance.add_Callback_2_(this, value, key);
+      return wrap_jso(_blink.BlinkIDBObjectStore.instance.add_Callback_2_(unwrap_jso(this), value, key));
     }
-    return _blink.BlinkIDBObjectStore.instance.add_Callback_1_(this, value);
+    return wrap_jso(_blink.BlinkIDBObjectStore.instance.add_Callback_1_(unwrap_jso(this), value));
   }
 
   @DomName('IDBObjectStore.clear')
   @DocsEditable()
-  Request _clear() => _blink.BlinkIDBObjectStore.instance.clear_Callback_0_(this);
-
+  Request _clear() => wrap_jso(_blink.BlinkIDBObjectStore.instance.clear_Callback_0_(unwrap_jso(this)));
+  
   @DomName('IDBObjectStore.count')
   @DocsEditable()
-  Request _count(Object key) => _blink.BlinkIDBObjectStore.instance.count_Callback_1_(this, key);
-
+  Request _count(Object key) => wrap_jso(_blink.BlinkIDBObjectStore.instance.count_Callback_1_(unwrap_jso(this), key));
+  
   Index _createIndex(String name, keyPath, [Map options]) {
     if ((keyPath is String || keyPath == null) && (name is String || name == null) && options == null) {
-      return _blink.BlinkIDBObjectStore.instance.createIndex_Callback_2_(this, name, keyPath);
+      return _blink.BlinkIDBObjectStore.instance.createIndex_Callback_2_(unwrap_jso(this), name, unwrap_jso(keyPath));
     }
     if ((options is Map || options == null) && (keyPath is String || keyPath == null) && (name is String || name == null)) {
-      return _blink.BlinkIDBObjectStore.instance.createIndex_Callback_3_(this, name, keyPath, options);
+      return _blink.BlinkIDBObjectStore.instance.createIndex_Callback_3_(unwrap_jso(this), name, unwrap_jso(keyPath), options);
     }
     if ((keyPath is List<String> || keyPath == null) && (name is String || name == null) && options == null) {
-      return _blink.BlinkIDBObjectStore.instance.createIndex_Callback_2_(this, name, keyPath);
+      return _blink.BlinkIDBObjectStore.instance.createIndex_Callback_2_(unwrap_jso(this), name, unwrap_jso(keyPath));
     }
     if ((options is Map || options == null) && (keyPath is List<String> || keyPath == null) && (name is String || name == null)) {
-      return _blink.BlinkIDBObjectStore.instance.createIndex_Callback_3_(this, name, keyPath, options);
+      return _blink.BlinkIDBObjectStore.instance.createIndex_Callback_3_(unwrap_jso(this), name, unwrap_jso(keyPath), options);
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @DomName('IDBObjectStore.delete')
   @DocsEditable()
-  Request _delete(Object key) => _blink.BlinkIDBObjectStore.instance.delete_Callback_1_(this, key);
-
+  Request _delete(Object key) => wrap_jso(_blink.BlinkIDBObjectStore.instance.delete_Callback_1_(unwrap_jso(this), key));
+  
   @DomName('IDBObjectStore.deleteIndex')
   @DocsEditable()
-  void deleteIndex(String name) => _blink.BlinkIDBObjectStore.instance.deleteIndex_Callback_1_(this, name);
-
+  void deleteIndex(String name) => _blink.BlinkIDBObjectStore.instance.deleteIndex_Callback_1_(unwrap_jso(this), name);
+  
   @DomName('IDBObjectStore.get')
   @DocsEditable()
-  Request _get(Object key) => _blink.BlinkIDBObjectStore.instance.get_Callback_1_(this, key);
-
+  Request _get(Object key) => wrap_jso(_blink.BlinkIDBObjectStore.instance.get_Callback_1_(unwrap_jso(this), key));
+  
   @DomName('IDBObjectStore.index')
   @DocsEditable()
-  Index index(String name) => _blink.BlinkIDBObjectStore.instance.index_Callback_1_(this, name);
-
+  Index index(String name) => _blink.BlinkIDBObjectStore.instance.index_Callback_1_(unwrap_jso(this), name);
+  
   Request _openCursor(Object range, [String direction]) {
     if (direction != null) {
-      return _blink.BlinkIDBObjectStore.instance.openCursor_Callback_2_(this, range, direction);
+      return wrap_jso(_blink.BlinkIDBObjectStore.instance.openCursor_Callback_2_(unwrap_jso(this), range, direction));
     }
-    return _blink.BlinkIDBObjectStore.instance.openCursor_Callback_1_(this, range);
+    return wrap_jso(_blink.BlinkIDBObjectStore.instance.openCursor_Callback_1_(unwrap_jso(this), range));
   }
 
   Request openKeyCursor(Object range, [String direction]) {
     if (direction != null) {
-      return _blink.BlinkIDBObjectStore.instance.openKeyCursor_Callback_2_(this, range, direction);
+      return wrap_jso(_blink.BlinkIDBObjectStore.instance.openKeyCursor_Callback_2_(unwrap_jso(this), range, direction));
     }
-    return _blink.BlinkIDBObjectStore.instance.openKeyCursor_Callback_1_(this, range);
+    return wrap_jso(_blink.BlinkIDBObjectStore.instance.openKeyCursor_Callback_1_(unwrap_jso(this), range));
   }
 
   Request _put(Object value, [Object key]) {
     if (key != null) {
-      return _blink.BlinkIDBObjectStore.instance.put_Callback_2_(this, value, key);
+      return wrap_jso(_blink.BlinkIDBObjectStore.instance.put_Callback_2_(unwrap_jso(this), value, key));
     }
-    return _blink.BlinkIDBObjectStore.instance.put_Callback_1_(this, value);
+    return wrap_jso(_blink.BlinkIDBObjectStore.instance.put_Callback_1_(unwrap_jso(this), value));
   }
 
 
@@ -1067,24 +1068,24 @@
 
   @DomName('IDBRequest.error')
   @DocsEditable()
-  DomError get error => _blink.BlinkIDBRequest.instance.error_Getter_(this);
-
+  DomError get error => wrap_jso(_blink.BlinkIDBRequest.instance.error_Getter_(unwrap_jso(this)));
+  
   @DomName('IDBRequest.readyState')
   @DocsEditable()
-  String get readyState => _blink.BlinkIDBRequest.instance.readyState_Getter_(this);
-
+  String get readyState => _blink.BlinkIDBRequest.instance.readyState_Getter_(unwrap_jso(this));
+  
   @DomName('IDBRequest.result')
   @DocsEditable()
-  Object get result => _blink.BlinkIDBRequest.instance.result_Getter_(this);
-
+  Object get result => _blink.BlinkIDBRequest.instance.result_Getter_(unwrap_jso(this));
+  
   @DomName('IDBRequest.source')
   @DocsEditable()
-  Object get source => _blink.BlinkIDBRequest.instance.source_Getter_(this);
-
+  Object get source => _blink.BlinkIDBRequest.instance.source_Getter_(unwrap_jso(this));
+  
   @DomName('IDBRequest.transaction')
   @DocsEditable()
-  Transaction get transaction => _blink.BlinkIDBRequest.instance.transaction_Getter_(this);
-
+  Transaction get transaction => wrap_jso(_blink.BlinkIDBRequest.instance.transaction_Getter_(unwrap_jso(this)));
+  
   /// Stream of `error` events handled by this [Request].
   @DomName('IDBRequest.onerror')
   @DocsEditable()
@@ -1168,24 +1169,24 @@
 
   @DomName('IDBTransaction.db')
   @DocsEditable()
-  Database get db => _blink.BlinkIDBTransaction.instance.db_Getter_(this);
-
+  Database get db => wrap_jso(_blink.BlinkIDBTransaction.instance.db_Getter_(unwrap_jso(this)));
+  
   @DomName('IDBTransaction.error')
   @DocsEditable()
-  DomError get error => _blink.BlinkIDBTransaction.instance.error_Getter_(this);
-
+  DomError get error => wrap_jso(_blink.BlinkIDBTransaction.instance.error_Getter_(unwrap_jso(this)));
+  
   @DomName('IDBTransaction.mode')
   @DocsEditable()
-  String get mode => _blink.BlinkIDBTransaction.instance.mode_Getter_(this);
-
+  String get mode => _blink.BlinkIDBTransaction.instance.mode_Getter_(unwrap_jso(this));
+  
   @DomName('IDBTransaction.abort')
   @DocsEditable()
-  void abort() => _blink.BlinkIDBTransaction.instance.abort_Callback_0_(this);
-
+  void abort() => _blink.BlinkIDBTransaction.instance.abort_Callback_0_(unwrap_jso(this));
+  
   @DomName('IDBTransaction.objectStore')
   @DocsEditable()
-  ObjectStore objectStore(String name) => _blink.BlinkIDBTransaction.instance.objectStore_Callback_1_(this, name);
-
+  ObjectStore objectStore(String name) => _blink.BlinkIDBTransaction.instance.objectStore_Callback_1_(unwrap_jso(this), name);
+  
   /// Stream of `abort` events handled by this [Transaction].
   @DomName('IDBTransaction.onabort')
   @DocsEditable()
@@ -1219,19 +1220,19 @@
   @DomName('IDBVersionChangeEvent.dataLoss')
   @DocsEditable()
   @Experimental() // untriaged
-  String get dataLoss => _blink.BlinkIDBVersionChangeEvent.instance.dataLoss_Getter_(this);
-
+  String get dataLoss => _blink.BlinkIDBVersionChangeEvent.instance.dataLoss_Getter_(unwrap_jso(this));
+  
   @DomName('IDBVersionChangeEvent.dataLossMessage')
   @DocsEditable()
   @Experimental() // untriaged
-  String get dataLossMessage => _blink.BlinkIDBVersionChangeEvent.instance.dataLossMessage_Getter_(this);
-
+  String get dataLossMessage => _blink.BlinkIDBVersionChangeEvent.instance.dataLossMessage_Getter_(unwrap_jso(this));
+  
   @DomName('IDBVersionChangeEvent.newVersion')
   @DocsEditable()
-  int get newVersion => _blink.BlinkIDBVersionChangeEvent.instance.newVersion_Getter_(this);
-
+  int get newVersion => _blink.BlinkIDBVersionChangeEvent.instance.newVersion_Getter_(unwrap_jso(this));
+  
   @DomName('IDBVersionChangeEvent.oldVersion')
   @DocsEditable()
-  int get oldVersion => _blink.BlinkIDBVersionChangeEvent.instance.oldVersion_Getter_(this);
-
+  int get oldVersion => _blink.BlinkIDBVersionChangeEvent.instance.oldVersion_Getter_(unwrap_jso(this));
+  
 }
diff --git a/sdk/lib/io/websocket_impl.dart b/sdk/lib/io/websocket_impl.dart
index 2657606..9693873 100644
--- a/sdk/lib/io/websocket_impl.dart
+++ b/sdk/lib/io/websocket_impl.dart
@@ -903,6 +903,10 @@
     _subscription.pause();
     _controller = new StreamController(sync: true,
                                        onListen: _subscription.resume,
+                                       onCancel: () {
+                                         _subscription.cancel();
+                                         _subscription = null;
+                                       },
                                        onPause: _subscription.pause,
                                        onResume: _subscription.resume);
 
@@ -965,7 +969,7 @@
       //      processed if received.
       //   2) set a timer terminate the connection if a close frame is
       //      not received.
-      if (!_controller.hasListener) {
+      if (!_controller.hasListener && _subscription != null) {
         _controller.stream.drain().catchError((_) => {});
       }
       if (_closeTimer == null) {
@@ -974,7 +978,7 @@
           // Reuse code and reason from the local close.
           _closeCode = _outCloseCode;
           _closeReason = _outCloseReason;
-          _subscription.cancel();
+          if (_subscription != null) _subscription.cancel();
           _controller.close();
           _webSockets.remove(_serviceId);
         });
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
index 9b488c2..9a8b313 100644
--- a/sdk/lib/isolate/isolate.dart
+++ b/sdk/lib/isolate/isolate.dart
@@ -144,15 +144,30 @@
    * If the [paused] parameter is set to `true`,
    * the isolate will start up in a paused state,
    * as if by an initial call of `isolate.pause(isolate.pauseCapability)`.
-   * This allows setting up error or exit listeners on the isolate
-   * before it starts running.
    * To resume the isolate, call `isolate.resume(isolate.pauseCapability)`.
    *
+   * If the [errorAreFatal], [onExit] and/or [onError] parameters are provided,
+   * the isolate will act as if, respectively, [setErrorsFatal],
+   * [addOnExitListener] and [addErrorListener] were called with the
+   * corresponding parameter and was processed before the isolate starts
+   * running.
+   *
+   * You can also call the [setErrorsFatal], [addOnExitListener] and
+   * [addErrorListener] methods on the returned isolate, but unless the
+   * isolate was started as [paused], it may already have terminated
+   * before those methods can complete.
+   *
+   * WARNING: The [errorsAreFatal], [onExit] and [onError] parameters are not
+   * implemented yet.
+   *
    * Returns a future that will complete with an [Isolate] instance if the
    * spawning succeeded. It will complete with an error otherwise.
    */
   external static Future<Isolate> spawn(void entryPoint(message), var message,
-                                        { bool paused: false });
+                                        { bool paused: false,
+                                          bool errorsAreFatal,
+                                          SendPort onExit,
+                                          SendPort onError });
 
   /**
    * Creates and spawns an isolate that runs the code from the library with
@@ -161,7 +176,8 @@
    * The isolate starts executing the top-level `main` function of the library
    * with the given URI.
    *
-   * The target `main` must be a subtype of one of these three signatures:
+   * The target `main` must be callable with zero, one or two arguments.
+   * Examples:
    *
    * * `main()`
    * * `main(args)`
@@ -173,10 +189,22 @@
    * If the [paused] parameter is set to `true`,
    * the isolate will start up in a paused state,
    * as if by an initial call of `isolate.pause(isolate.pauseCapability)`.
-   * This allows setting up error or exit listeners on the isolate
-   * before it starts running.
    * To resume the isolate, call `isolate.resume(isolate.pauseCapability)`.
    *
+   * If the [errorAreFatal], [onExit] and/or [onError] parameters are provided,
+   * the isolate will act as if, respectively, [setErrorsFatal],
+   * [addOnExitListener] and [addErrorListener] were called with the
+   * corresponding parameter and was processed before the isolate starts
+   * running.
+   *
+   * You can also call the [setErrorsFatal], [addOnExitListener] and
+   * [addErrorListener] methods on the returned isolate, but unless the
+   * isolate was started as [paused], it may already have terminated
+   * before those methods can complete.
+   *
+   * WARNING: The [errorsAreFatal], [onExit] and [onError] parameters are not
+   * implemented yet.
+   *
    * If the [checked] parameter is set to `true` or `false`,
    * the new isolate will run code in checked mode,
    * respectively in production mode, if possible.
@@ -214,7 +242,10 @@
       var message,
       {bool paused: false,
        bool checked,
-       Uri packageRoot});
+       Uri packageRoot,
+       bool errorsAreFatal,
+       SendPort onExit,
+       SendPort onError});
 
   /**
    * Requests the isolate to pause.
@@ -276,10 +307,13 @@
    * If `response` cannot be sent to the isolate, then the request is ignored.
    * It is recommended to only use simple values that can be sent to all
    * isolates, like `null`, booleans, numbers or strings.
-   * 
+   *
    * Since isolates run concurrently, it's possible for it to exit before the
-   * exit listener is established. To avoid this, start the isolate paused,
-   * add the listener, then resume it.
+   * exit listener is established, and in that case no response will be
+   * sent on [responsePort].
+   * To avoid this, either use the corresponding parameter to the spawn
+   * function, or start the isolate paused, add the listener and
+   * then resume the isolate.
    */
   /* TODO(lrn): Can we do better? Can the system recognize this message and
    * send a reply if the receiving isolate is dead?
@@ -305,6 +339,12 @@
    *
    * This call requires the [terminateCapability] for the isolate.
    * If the capability is not correct, no change is made.
+   *
+   * Since isolates run concurrently, it's possible for it to exit due to an
+   * error before errors are set non-fatal.
+   * To avoid this, either use the corresponding parameter to the spawn
+   * function, or start the isolate paused, set errors non-fatal and
+   * then resume the isolate.
    */
   external void setErrorsFatal(bool errorsAreFatal);
 
@@ -368,10 +408,10 @@
    *
    * Listening using the same port more than once does nothing. It will only
    * get each error once.
-   * 
+   *
    * Since isolates run concurrently, it's possible for it to exit before the
    * error listener is established. To avoid this, start the isolate paused,
-   * add the listener, then resume it.
+   * add the listener and then resume the isolate.
    */
   external void addErrorListener(SendPort port);
 
diff --git a/sdk/lib/svg/dart2js/svg_dart2js.dart b/sdk/lib/svg/dart2js/svg_dart2js.dart
index b8035b3..1e63bd2 100644
--- a/sdk/lib/svg/dart2js/svg_dart2js.dart
+++ b/sdk/lib/svg/dart2js/svg_dart2js.dart
@@ -4799,7 +4799,7 @@
 
   CssClassSet get classes => new _AttributeClassSet(this);
 
-  List<Element> get children => new FilteredElementList<Element>(this);
+  List<Element> get children => new FilteredElementList(this);
 
   void set children(List<Element> value) {
     final children = this.children;
diff --git a/sdk/lib/svg/dartium/svg_dartium.dart b/sdk/lib/svg/dartium/svg_dartium.dart
index 0090a4d..8d52279 100644
--- a/sdk/lib/svg/dartium/svg_dartium.dart
+++ b/sdk/lib/svg/dartium/svg_dartium.dart
@@ -168,6 +168,7 @@
   'SVGZoomEvent': () => ZoomEvent,
 
 };
+
 // 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.
@@ -206,12 +207,12 @@
 
   @DomName('SVGAElement.target')
   @DocsEditable()
-  AnimatedString get target => _blink.BlinkSVGAElement.instance.target_Getter_(this);
-
+  AnimatedString get target => wrap_jso(_blink.BlinkSVGAElement.instance.target_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGAElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGAElement.instance.href_Getter_(this);
-
+  AnimatedString get href => wrap_jso(_blink.BlinkSVGAElement.instance.href_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -245,24 +246,24 @@
 
   @DomName('SVGAltGlyphElement.format')
   @DocsEditable()
-  String get format => _blink.BlinkSVGAltGlyphElement.instance.format_Getter_(this);
-
+  String get format => _blink.BlinkSVGAltGlyphElement.instance.format_Getter_(unwrap_jso(this));
+  
   @DomName('SVGAltGlyphElement.format')
   @DocsEditable()
-  void set format(String value) => _blink.BlinkSVGAltGlyphElement.instance.format_Setter_(this, value);
-
+  void set format(String value) => _blink.BlinkSVGAltGlyphElement.instance.format_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGAltGlyphElement.glyphRef')
   @DocsEditable()
-  String get glyphRef => _blink.BlinkSVGAltGlyphElement.instance.glyphRef_Getter_(this);
-
+  String get glyphRef => _blink.BlinkSVGAltGlyphElement.instance.glyphRef_Getter_(unwrap_jso(this));
+  
   @DomName('SVGAltGlyphElement.glyphRef')
   @DocsEditable()
-  void set glyphRef(String value) => _blink.BlinkSVGAltGlyphElement.instance.glyphRef_Setter_(this, value);
-
+  void set glyphRef(String value) => _blink.BlinkSVGAltGlyphElement.instance.glyphRef_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGAltGlyphElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGAltGlyphElement.instance.href_Getter_(this);
-
+  AnimatedString get href => wrap_jso(_blink.BlinkSVGAltGlyphElement.instance.href_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -300,40 +301,40 @@
 
   @DomName('SVGAngle.unitType')
   @DocsEditable()
-  int get unitType => _blink.BlinkSVGAngle.instance.unitType_Getter_(this);
-
+  int get unitType => _blink.BlinkSVGAngle.instance.unitType_Getter_(unwrap_jso(this));
+  
   @DomName('SVGAngle.value')
   @DocsEditable()
-  num get value => _blink.BlinkSVGAngle.instance.value_Getter_(this);
-
+  num get value => _blink.BlinkSVGAngle.instance.value_Getter_(unwrap_jso(this));
+  
   @DomName('SVGAngle.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkSVGAngle.instance.value_Setter_(this, value);
-
+  void set value(num value) => _blink.BlinkSVGAngle.instance.value_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGAngle.valueAsString')
   @DocsEditable()
-  String get valueAsString => _blink.BlinkSVGAngle.instance.valueAsString_Getter_(this);
-
+  String get valueAsString => _blink.BlinkSVGAngle.instance.valueAsString_Getter_(unwrap_jso(this));
+  
   @DomName('SVGAngle.valueAsString')
   @DocsEditable()
-  void set valueAsString(String value) => _blink.BlinkSVGAngle.instance.valueAsString_Setter_(this, value);
-
+  void set valueAsString(String value) => _blink.BlinkSVGAngle.instance.valueAsString_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGAngle.valueInSpecifiedUnits')
   @DocsEditable()
-  num get valueInSpecifiedUnits => _blink.BlinkSVGAngle.instance.valueInSpecifiedUnits_Getter_(this);
-
+  num get valueInSpecifiedUnits => _blink.BlinkSVGAngle.instance.valueInSpecifiedUnits_Getter_(unwrap_jso(this));
+  
   @DomName('SVGAngle.valueInSpecifiedUnits')
   @DocsEditable()
-  void set valueInSpecifiedUnits(num value) => _blink.BlinkSVGAngle.instance.valueInSpecifiedUnits_Setter_(this, value);
-
+  void set valueInSpecifiedUnits(num value) => _blink.BlinkSVGAngle.instance.valueInSpecifiedUnits_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGAngle.convertToSpecifiedUnits')
   @DocsEditable()
-  void convertToSpecifiedUnits(int unitType) => _blink.BlinkSVGAngle.instance.convertToSpecifiedUnits_Callback_1_(this, unitType);
-
+  void convertToSpecifiedUnits(int unitType) => _blink.BlinkSVGAngle.instance.convertToSpecifiedUnits_Callback_1_(unwrap_jso(this), unitType);
+  
   @DomName('SVGAngle.newValueSpecifiedUnits')
   @DocsEditable()
-  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) => _blink.BlinkSVGAngle.instance.newValueSpecifiedUnits_Callback_2_(this, unitType, valueInSpecifiedUnits);
-
+  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) => _blink.BlinkSVGAngle.instance.newValueSpecifiedUnits_Callback_2_(unwrap_jso(this), unitType, valueInSpecifiedUnits);
+  
 }
 // 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
@@ -444,12 +445,12 @@
 
   @DomName('SVGAnimatedAngle.animVal')
   @DocsEditable()
-  Angle get animVal => _blink.BlinkSVGAnimatedAngle.instance.animVal_Getter_(this);
-
+  Angle get animVal => wrap_jso(_blink.BlinkSVGAnimatedAngle.instance.animVal_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGAnimatedAngle.baseVal')
   @DocsEditable()
-  Angle get baseVal => _blink.BlinkSVGAnimatedAngle.instance.baseVal_Getter_(this);
-
+  Angle get baseVal => wrap_jso(_blink.BlinkSVGAnimatedAngle.instance.baseVal_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -467,16 +468,16 @@
 
   @DomName('SVGAnimatedBoolean.animVal')
   @DocsEditable()
-  bool get animVal => _blink.BlinkSVGAnimatedBoolean.instance.animVal_Getter_(this);
-
+  bool get animVal => _blink.BlinkSVGAnimatedBoolean.instance.animVal_Getter_(unwrap_jso(this));
+  
   @DomName('SVGAnimatedBoolean.baseVal')
   @DocsEditable()
-  bool get baseVal => _blink.BlinkSVGAnimatedBoolean.instance.baseVal_Getter_(this);
-
+  bool get baseVal => _blink.BlinkSVGAnimatedBoolean.instance.baseVal_Getter_(unwrap_jso(this));
+  
   @DomName('SVGAnimatedBoolean.baseVal')
   @DocsEditable()
-  void set baseVal(bool value) => _blink.BlinkSVGAnimatedBoolean.instance.baseVal_Setter_(this, value);
-
+  void set baseVal(bool value) => _blink.BlinkSVGAnimatedBoolean.instance.baseVal_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -494,16 +495,16 @@
 
   @DomName('SVGAnimatedEnumeration.animVal')
   @DocsEditable()
-  int get animVal => _blink.BlinkSVGAnimatedEnumeration.instance.animVal_Getter_(this);
-
+  int get animVal => _blink.BlinkSVGAnimatedEnumeration.instance.animVal_Getter_(unwrap_jso(this));
+  
   @DomName('SVGAnimatedEnumeration.baseVal')
   @DocsEditable()
-  int get baseVal => _blink.BlinkSVGAnimatedEnumeration.instance.baseVal_Getter_(this);
-
+  int get baseVal => _blink.BlinkSVGAnimatedEnumeration.instance.baseVal_Getter_(unwrap_jso(this));
+  
   @DomName('SVGAnimatedEnumeration.baseVal')
   @DocsEditable()
-  void set baseVal(int value) => _blink.BlinkSVGAnimatedEnumeration.instance.baseVal_Setter_(this, value);
-
+  void set baseVal(int value) => _blink.BlinkSVGAnimatedEnumeration.instance.baseVal_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -521,16 +522,16 @@
 
   @DomName('SVGAnimatedInteger.animVal')
   @DocsEditable()
-  int get animVal => _blink.BlinkSVGAnimatedInteger.instance.animVal_Getter_(this);
-
+  int get animVal => _blink.BlinkSVGAnimatedInteger.instance.animVal_Getter_(unwrap_jso(this));
+  
   @DomName('SVGAnimatedInteger.baseVal')
   @DocsEditable()
-  int get baseVal => _blink.BlinkSVGAnimatedInteger.instance.baseVal_Getter_(this);
-
+  int get baseVal => _blink.BlinkSVGAnimatedInteger.instance.baseVal_Getter_(unwrap_jso(this));
+  
   @DomName('SVGAnimatedInteger.baseVal')
   @DocsEditable()
-  void set baseVal(int value) => _blink.BlinkSVGAnimatedInteger.instance.baseVal_Setter_(this, value);
-
+  void set baseVal(int value) => _blink.BlinkSVGAnimatedInteger.instance.baseVal_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -548,12 +549,12 @@
 
   @DomName('SVGAnimatedLength.animVal')
   @DocsEditable()
-  Length get animVal => _blink.BlinkSVGAnimatedLength.instance.animVal_Getter_(this);
-
+  Length get animVal => wrap_jso(_blink.BlinkSVGAnimatedLength.instance.animVal_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGAnimatedLength.baseVal')
   @DocsEditable()
-  Length get baseVal => _blink.BlinkSVGAnimatedLength.instance.baseVal_Getter_(this);
-
+  Length get baseVal => wrap_jso(_blink.BlinkSVGAnimatedLength.instance.baseVal_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -571,12 +572,12 @@
 
   @DomName('SVGAnimatedLengthList.animVal')
   @DocsEditable()
-  LengthList get animVal => _blink.BlinkSVGAnimatedLengthList.instance.animVal_Getter_(this);
-
+  LengthList get animVal => wrap_jso(_blink.BlinkSVGAnimatedLengthList.instance.animVal_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGAnimatedLengthList.baseVal')
   @DocsEditable()
-  LengthList get baseVal => _blink.BlinkSVGAnimatedLengthList.instance.baseVal_Getter_(this);
-
+  LengthList get baseVal => wrap_jso(_blink.BlinkSVGAnimatedLengthList.instance.baseVal_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -594,16 +595,16 @@
 
   @DomName('SVGAnimatedNumber.animVal')
   @DocsEditable()
-  double get animVal => _blink.BlinkSVGAnimatedNumber.instance.animVal_Getter_(this);
-
+  double get animVal => _blink.BlinkSVGAnimatedNumber.instance.animVal_Getter_(unwrap_jso(this));
+  
   @DomName('SVGAnimatedNumber.baseVal')
   @DocsEditable()
-  num get baseVal => _blink.BlinkSVGAnimatedNumber.instance.baseVal_Getter_(this);
-
+  num get baseVal => _blink.BlinkSVGAnimatedNumber.instance.baseVal_Getter_(unwrap_jso(this));
+  
   @DomName('SVGAnimatedNumber.baseVal')
   @DocsEditable()
-  void set baseVal(num value) => _blink.BlinkSVGAnimatedNumber.instance.baseVal_Setter_(this, value);
-
+  void set baseVal(num value) => _blink.BlinkSVGAnimatedNumber.instance.baseVal_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -621,12 +622,12 @@
 
   @DomName('SVGAnimatedNumberList.animVal')
   @DocsEditable()
-  NumberList get animVal => _blink.BlinkSVGAnimatedNumberList.instance.animVal_Getter_(this);
-
+  NumberList get animVal => wrap_jso(_blink.BlinkSVGAnimatedNumberList.instance.animVal_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGAnimatedNumberList.baseVal')
   @DocsEditable()
-  NumberList get baseVal => _blink.BlinkSVGAnimatedNumberList.instance.baseVal_Getter_(this);
-
+  NumberList get baseVal => wrap_jso(_blink.BlinkSVGAnimatedNumberList.instance.baseVal_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -644,12 +645,12 @@
 
   @DomName('SVGAnimatedPreserveAspectRatio.animVal')
   @DocsEditable()
-  PreserveAspectRatio get animVal => _blink.BlinkSVGAnimatedPreserveAspectRatio.instance.animVal_Getter_(this);
-
+  PreserveAspectRatio get animVal => wrap_jso(_blink.BlinkSVGAnimatedPreserveAspectRatio.instance.animVal_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGAnimatedPreserveAspectRatio.baseVal')
   @DocsEditable()
-  PreserveAspectRatio get baseVal => _blink.BlinkSVGAnimatedPreserveAspectRatio.instance.baseVal_Getter_(this);
-
+  PreserveAspectRatio get baseVal => wrap_jso(_blink.BlinkSVGAnimatedPreserveAspectRatio.instance.baseVal_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -667,12 +668,12 @@
 
   @DomName('SVGAnimatedRect.animVal')
   @DocsEditable()
-  Rect get animVal => _blink.BlinkSVGAnimatedRect.instance.animVal_Getter_(this);
-
+  Rect get animVal => wrap_jso(_blink.BlinkSVGAnimatedRect.instance.animVal_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGAnimatedRect.baseVal')
   @DocsEditable()
-  Rect get baseVal => _blink.BlinkSVGAnimatedRect.instance.baseVal_Getter_(this);
-
+  Rect get baseVal => wrap_jso(_blink.BlinkSVGAnimatedRect.instance.baseVal_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -690,16 +691,16 @@
 
   @DomName('SVGAnimatedString.animVal')
   @DocsEditable()
-  String get animVal => _blink.BlinkSVGAnimatedString.instance.animVal_Getter_(this);
-
+  String get animVal => _blink.BlinkSVGAnimatedString.instance.animVal_Getter_(unwrap_jso(this));
+  
   @DomName('SVGAnimatedString.baseVal')
   @DocsEditable()
-  String get baseVal => _blink.BlinkSVGAnimatedString.instance.baseVal_Getter_(this);
-
+  String get baseVal => _blink.BlinkSVGAnimatedString.instance.baseVal_Getter_(unwrap_jso(this));
+  
   @DomName('SVGAnimatedString.baseVal')
   @DocsEditable()
-  void set baseVal(String value) => _blink.BlinkSVGAnimatedString.instance.baseVal_Setter_(this, value);
-
+  void set baseVal(String value) => _blink.BlinkSVGAnimatedString.instance.baseVal_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -717,12 +718,12 @@
 
   @DomName('SVGAnimatedTransformList.animVal')
   @DocsEditable()
-  TransformList get animVal => _blink.BlinkSVGAnimatedTransformList.instance.animVal_Getter_(this);
-
+  TransformList get animVal => wrap_jso(_blink.BlinkSVGAnimatedTransformList.instance.animVal_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGAnimatedTransformList.baseVal')
   @DocsEditable()
-  TransformList get baseVal => _blink.BlinkSVGAnimatedTransformList.instance.baseVal_Getter_(this);
-
+  TransformList get baseVal => wrap_jso(_blink.BlinkSVGAnimatedTransformList.instance.baseVal_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -750,52 +751,52 @@
 
   @DomName('SVGAnimationElement.targetElement')
   @DocsEditable()
-  SvgElement get targetElement => _blink.BlinkSVGAnimationElement.instance.targetElement_Getter_(this);
-
+  SvgElement get targetElement => wrap_jso(_blink.BlinkSVGAnimationElement.instance.targetElement_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGAnimationElement.beginElement')
   @DocsEditable()
-  void beginElement() => _blink.BlinkSVGAnimationElement.instance.beginElement_Callback_0_(this);
-
+  void beginElement() => _blink.BlinkSVGAnimationElement.instance.beginElement_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGAnimationElement.beginElementAt')
   @DocsEditable()
-  void beginElementAt(num offset) => _blink.BlinkSVGAnimationElement.instance.beginElementAt_Callback_1_(this, offset);
-
+  void beginElementAt(num offset) => _blink.BlinkSVGAnimationElement.instance.beginElementAt_Callback_1_(unwrap_jso(this), offset);
+  
   @DomName('SVGAnimationElement.endElement')
   @DocsEditable()
-  void endElement() => _blink.BlinkSVGAnimationElement.instance.endElement_Callback_0_(this);
-
+  void endElement() => _blink.BlinkSVGAnimationElement.instance.endElement_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGAnimationElement.endElementAt')
   @DocsEditable()
-  void endElementAt(num offset) => _blink.BlinkSVGAnimationElement.instance.endElementAt_Callback_1_(this, offset);
-
+  void endElementAt(num offset) => _blink.BlinkSVGAnimationElement.instance.endElementAt_Callback_1_(unwrap_jso(this), offset);
+  
   @DomName('SVGAnimationElement.getCurrentTime')
   @DocsEditable()
-  double getCurrentTime() => _blink.BlinkSVGAnimationElement.instance.getCurrentTime_Callback_0_(this);
-
+  double getCurrentTime() => _blink.BlinkSVGAnimationElement.instance.getCurrentTime_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGAnimationElement.getSimpleDuration')
   @DocsEditable()
-  double getSimpleDuration() => _blink.BlinkSVGAnimationElement.instance.getSimpleDuration_Callback_0_(this);
-
+  double getSimpleDuration() => _blink.BlinkSVGAnimationElement.instance.getSimpleDuration_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGAnimationElement.getStartTime')
   @DocsEditable()
-  double getStartTime() => _blink.BlinkSVGAnimationElement.instance.getStartTime_Callback_0_(this);
-
+  double getStartTime() => _blink.BlinkSVGAnimationElement.instance.getStartTime_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGAnimationElement.requiredExtensions')
   @DocsEditable()
-  StringList get requiredExtensions => _blink.BlinkSVGAnimationElement.instance.requiredExtensions_Getter_(this);
-
+  StringList get requiredExtensions => wrap_jso(_blink.BlinkSVGAnimationElement.instance.requiredExtensions_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGAnimationElement.requiredFeatures')
   @DocsEditable()
-  StringList get requiredFeatures => _blink.BlinkSVGAnimationElement.instance.requiredFeatures_Getter_(this);
-
+  StringList get requiredFeatures => wrap_jso(_blink.BlinkSVGAnimationElement.instance.requiredFeatures_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGAnimationElement.systemLanguage')
   @DocsEditable()
-  StringList get systemLanguage => _blink.BlinkSVGAnimationElement.instance.systemLanguage_Getter_(this);
-
+  StringList get systemLanguage => wrap_jso(_blink.BlinkSVGAnimationElement.instance.systemLanguage_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGAnimationElement.hasExtension')
   @DocsEditable()
-  bool hasExtension(String extension) => _blink.BlinkSVGAnimationElement.instance.hasExtension_Callback_1_(this, extension);
-
+  bool hasExtension(String extension) => _blink.BlinkSVGAnimationElement.instance.hasExtension_Callback_1_(unwrap_jso(this), extension);
+  
 }
 // 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
@@ -823,16 +824,16 @@
 
   @DomName('SVGCircleElement.cx')
   @DocsEditable()
-  AnimatedLength get cx => _blink.BlinkSVGCircleElement.instance.cx_Getter_(this);
-
+  AnimatedLength get cx => wrap_jso(_blink.BlinkSVGCircleElement.instance.cx_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGCircleElement.cy')
   @DocsEditable()
-  AnimatedLength get cy => _blink.BlinkSVGCircleElement.instance.cy_Getter_(this);
-
+  AnimatedLength get cy => wrap_jso(_blink.BlinkSVGCircleElement.instance.cy_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGCircleElement.r')
   @DocsEditable()
-  AnimatedLength get r => _blink.BlinkSVGCircleElement.instance.r_Getter_(this);
-
+  AnimatedLength get r => wrap_jso(_blink.BlinkSVGCircleElement.instance.r_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -860,8 +861,8 @@
 
   @DomName('SVGClipPathElement.clipPathUnits')
   @DocsEditable()
-  AnimatedEnumeration get clipPathUnits => _blink.BlinkSVGClipPathElement.instance.clipPathUnits_Getter_(this);
-
+  AnimatedEnumeration get clipPathUnits => wrap_jso(_blink.BlinkSVGClipPathElement.instance.clipPathUnits_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -960,20 +961,20 @@
 
   @DomName('SVGEllipseElement.cx')
   @DocsEditable()
-  AnimatedLength get cx => _blink.BlinkSVGEllipseElement.instance.cx_Getter_(this);
-
+  AnimatedLength get cx => wrap_jso(_blink.BlinkSVGEllipseElement.instance.cx_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGEllipseElement.cy')
   @DocsEditable()
-  AnimatedLength get cy => _blink.BlinkSVGEllipseElement.instance.cy_Getter_(this);
-
+  AnimatedLength get cy => wrap_jso(_blink.BlinkSVGEllipseElement.instance.cy_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGEllipseElement.rx')
   @DocsEditable()
-  AnimatedLength get rx => _blink.BlinkSVGEllipseElement.instance.rx_Getter_(this);
-
+  AnimatedLength get rx => wrap_jso(_blink.BlinkSVGEllipseElement.instance.rx_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGEllipseElement.ry')
   @DocsEditable()
-  AnimatedLength get ry => _blink.BlinkSVGEllipseElement.instance.ry_Getter_(this);
-
+  AnimatedLength get ry => wrap_jso(_blink.BlinkSVGEllipseElement.instance.ry_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -1032,36 +1033,36 @@
 
   @DomName('SVGFEBlendElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEBlendElement.instance.in1_Getter_(this);
-
+  AnimatedString get in1 => wrap_jso(_blink.BlinkSVGFEBlendElement.instance.in1_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEBlendElement.in2')
   @DocsEditable()
-  AnimatedString get in2 => _blink.BlinkSVGFEBlendElement.instance.in2_Getter_(this);
-
+  AnimatedString get in2 => wrap_jso(_blink.BlinkSVGFEBlendElement.instance.in2_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEBlendElement.mode')
   @DocsEditable()
-  AnimatedEnumeration get mode => _blink.BlinkSVGFEBlendElement.instance.mode_Getter_(this);
-
+  AnimatedEnumeration get mode => wrap_jso(_blink.BlinkSVGFEBlendElement.instance.mode_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEBlendElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEBlendElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGFEBlendElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEBlendElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEBlendElement.instance.result_Getter_(this);
-
+  AnimatedString get result => wrap_jso(_blink.BlinkSVGFEBlendElement.instance.result_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEBlendElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEBlendElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGFEBlendElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEBlendElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEBlendElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGFEBlendElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEBlendElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEBlendElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGFEBlendElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -1116,36 +1117,36 @@
 
   @DomName('SVGFEColorMatrixElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEColorMatrixElement.instance.in1_Getter_(this);
-
+  AnimatedString get in1 => wrap_jso(_blink.BlinkSVGFEColorMatrixElement.instance.in1_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEColorMatrixElement.type')
   @DocsEditable()
-  AnimatedEnumeration get type => _blink.BlinkSVGFEColorMatrixElement.instance.type_Getter_(this);
-
+  AnimatedEnumeration get type => wrap_jso(_blink.BlinkSVGFEColorMatrixElement.instance.type_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEColorMatrixElement.values')
   @DocsEditable()
-  AnimatedNumberList get values => _blink.BlinkSVGFEColorMatrixElement.instance.values_Getter_(this);
-
+  AnimatedNumberList get values => wrap_jso(_blink.BlinkSVGFEColorMatrixElement.instance.values_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEColorMatrixElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEColorMatrixElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGFEColorMatrixElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEColorMatrixElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEColorMatrixElement.instance.result_Getter_(this);
-
+  AnimatedString get result => wrap_jso(_blink.BlinkSVGFEColorMatrixElement.instance.result_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEColorMatrixElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEColorMatrixElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGFEColorMatrixElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEColorMatrixElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEColorMatrixElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGFEColorMatrixElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEColorMatrixElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEColorMatrixElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGFEColorMatrixElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -1180,28 +1181,28 @@
 
   @DomName('SVGFEComponentTransferElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEComponentTransferElement.instance.in1_Getter_(this);
-
+  AnimatedString get in1 => wrap_jso(_blink.BlinkSVGFEComponentTransferElement.instance.in1_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEComponentTransferElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEComponentTransferElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGFEComponentTransferElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEComponentTransferElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEComponentTransferElement.instance.result_Getter_(this);
-
+  AnimatedString get result => wrap_jso(_blink.BlinkSVGFEComponentTransferElement.instance.result_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEComponentTransferElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEComponentTransferElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGFEComponentTransferElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEComponentTransferElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEComponentTransferElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGFEComponentTransferElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEComponentTransferElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEComponentTransferElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGFEComponentTransferElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -1253,52 +1254,52 @@
 
   @DomName('SVGFECompositeElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFECompositeElement.instance.in1_Getter_(this);
-
+  AnimatedString get in1 => wrap_jso(_blink.BlinkSVGFECompositeElement.instance.in1_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFECompositeElement.in2')
   @DocsEditable()
-  AnimatedString get in2 => _blink.BlinkSVGFECompositeElement.instance.in2_Getter_(this);
-
+  AnimatedString get in2 => wrap_jso(_blink.BlinkSVGFECompositeElement.instance.in2_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFECompositeElement.k1')
   @DocsEditable()
-  AnimatedNumber get k1 => _blink.BlinkSVGFECompositeElement.instance.k1_Getter_(this);
-
+  AnimatedNumber get k1 => wrap_jso(_blink.BlinkSVGFECompositeElement.instance.k1_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFECompositeElement.k2')
   @DocsEditable()
-  AnimatedNumber get k2 => _blink.BlinkSVGFECompositeElement.instance.k2_Getter_(this);
-
+  AnimatedNumber get k2 => wrap_jso(_blink.BlinkSVGFECompositeElement.instance.k2_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFECompositeElement.k3')
   @DocsEditable()
-  AnimatedNumber get k3 => _blink.BlinkSVGFECompositeElement.instance.k3_Getter_(this);
-
+  AnimatedNumber get k3 => wrap_jso(_blink.BlinkSVGFECompositeElement.instance.k3_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFECompositeElement.k4')
   @DocsEditable()
-  AnimatedNumber get k4 => _blink.BlinkSVGFECompositeElement.instance.k4_Getter_(this);
-
+  AnimatedNumber get k4 => wrap_jso(_blink.BlinkSVGFECompositeElement.instance.k4_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFECompositeElement.operator')
   @DocsEditable()
-  AnimatedEnumeration get operator => _blink.BlinkSVGFECompositeElement.instance.operator_Getter_(this);
-
+  AnimatedEnumeration get operator => wrap_jso(_blink.BlinkSVGFECompositeElement.instance.operator_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFECompositeElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFECompositeElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGFECompositeElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFECompositeElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFECompositeElement.instance.result_Getter_(this);
-
+  AnimatedString get result => wrap_jso(_blink.BlinkSVGFECompositeElement.instance.result_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFECompositeElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFECompositeElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGFECompositeElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFECompositeElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFECompositeElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGFECompositeElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFECompositeElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFECompositeElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGFECompositeElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -1349,72 +1350,72 @@
 
   @DomName('SVGFEConvolveMatrixElement.bias')
   @DocsEditable()
-  AnimatedNumber get bias => _blink.BlinkSVGFEConvolveMatrixElement.instance.bias_Getter_(this);
-
+  AnimatedNumber get bias => wrap_jso(_blink.BlinkSVGFEConvolveMatrixElement.instance.bias_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEConvolveMatrixElement.divisor')
   @DocsEditable()
-  AnimatedNumber get divisor => _blink.BlinkSVGFEConvolveMatrixElement.instance.divisor_Getter_(this);
-
+  AnimatedNumber get divisor => wrap_jso(_blink.BlinkSVGFEConvolveMatrixElement.instance.divisor_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEConvolveMatrixElement.edgeMode')
   @DocsEditable()
-  AnimatedEnumeration get edgeMode => _blink.BlinkSVGFEConvolveMatrixElement.instance.edgeMode_Getter_(this);
-
+  AnimatedEnumeration get edgeMode => wrap_jso(_blink.BlinkSVGFEConvolveMatrixElement.instance.edgeMode_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEConvolveMatrixElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEConvolveMatrixElement.instance.in1_Getter_(this);
-
+  AnimatedString get in1 => wrap_jso(_blink.BlinkSVGFEConvolveMatrixElement.instance.in1_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEConvolveMatrixElement.kernelMatrix')
   @DocsEditable()
-  AnimatedNumberList get kernelMatrix => _blink.BlinkSVGFEConvolveMatrixElement.instance.kernelMatrix_Getter_(this);
-
+  AnimatedNumberList get kernelMatrix => wrap_jso(_blink.BlinkSVGFEConvolveMatrixElement.instance.kernelMatrix_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEConvolveMatrixElement.kernelUnitLengthX')
   @DocsEditable()
-  AnimatedNumber get kernelUnitLengthX => _blink.BlinkSVGFEConvolveMatrixElement.instance.kernelUnitLengthX_Getter_(this);
-
+  AnimatedNumber get kernelUnitLengthX => wrap_jso(_blink.BlinkSVGFEConvolveMatrixElement.instance.kernelUnitLengthX_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEConvolveMatrixElement.kernelUnitLengthY')
   @DocsEditable()
-  AnimatedNumber get kernelUnitLengthY => _blink.BlinkSVGFEConvolveMatrixElement.instance.kernelUnitLengthY_Getter_(this);
-
+  AnimatedNumber get kernelUnitLengthY => wrap_jso(_blink.BlinkSVGFEConvolveMatrixElement.instance.kernelUnitLengthY_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEConvolveMatrixElement.orderX')
   @DocsEditable()
-  AnimatedInteger get orderX => _blink.BlinkSVGFEConvolveMatrixElement.instance.orderX_Getter_(this);
-
+  AnimatedInteger get orderX => wrap_jso(_blink.BlinkSVGFEConvolveMatrixElement.instance.orderX_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEConvolveMatrixElement.orderY')
   @DocsEditable()
-  AnimatedInteger get orderY => _blink.BlinkSVGFEConvolveMatrixElement.instance.orderY_Getter_(this);
-
+  AnimatedInteger get orderY => wrap_jso(_blink.BlinkSVGFEConvolveMatrixElement.instance.orderY_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEConvolveMatrixElement.preserveAlpha')
   @DocsEditable()
-  AnimatedBoolean get preserveAlpha => _blink.BlinkSVGFEConvolveMatrixElement.instance.preserveAlpha_Getter_(this);
-
+  AnimatedBoolean get preserveAlpha => wrap_jso(_blink.BlinkSVGFEConvolveMatrixElement.instance.preserveAlpha_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEConvolveMatrixElement.targetX')
   @DocsEditable()
-  AnimatedInteger get targetX => _blink.BlinkSVGFEConvolveMatrixElement.instance.targetX_Getter_(this);
-
+  AnimatedInteger get targetX => wrap_jso(_blink.BlinkSVGFEConvolveMatrixElement.instance.targetX_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEConvolveMatrixElement.targetY')
   @DocsEditable()
-  AnimatedInteger get targetY => _blink.BlinkSVGFEConvolveMatrixElement.instance.targetY_Getter_(this);
-
+  AnimatedInteger get targetY => wrap_jso(_blink.BlinkSVGFEConvolveMatrixElement.instance.targetY_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEConvolveMatrixElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEConvolveMatrixElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGFEConvolveMatrixElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEConvolveMatrixElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEConvolveMatrixElement.instance.result_Getter_(this);
-
+  AnimatedString get result => wrap_jso(_blink.BlinkSVGFEConvolveMatrixElement.instance.result_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEConvolveMatrixElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEConvolveMatrixElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGFEConvolveMatrixElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEConvolveMatrixElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEConvolveMatrixElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGFEConvolveMatrixElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEConvolveMatrixElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEConvolveMatrixElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGFEConvolveMatrixElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -1449,44 +1450,44 @@
 
   @DomName('SVGFEDiffuseLightingElement.diffuseConstant')
   @DocsEditable()
-  AnimatedNumber get diffuseConstant => _blink.BlinkSVGFEDiffuseLightingElement.instance.diffuseConstant_Getter_(this);
-
+  AnimatedNumber get diffuseConstant => wrap_jso(_blink.BlinkSVGFEDiffuseLightingElement.instance.diffuseConstant_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDiffuseLightingElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEDiffuseLightingElement.instance.in1_Getter_(this);
-
+  AnimatedString get in1 => wrap_jso(_blink.BlinkSVGFEDiffuseLightingElement.instance.in1_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDiffuseLightingElement.kernelUnitLengthX')
   @DocsEditable()
-  AnimatedNumber get kernelUnitLengthX => _blink.BlinkSVGFEDiffuseLightingElement.instance.kernelUnitLengthX_Getter_(this);
-
+  AnimatedNumber get kernelUnitLengthX => wrap_jso(_blink.BlinkSVGFEDiffuseLightingElement.instance.kernelUnitLengthX_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDiffuseLightingElement.kernelUnitLengthY')
   @DocsEditable()
-  AnimatedNumber get kernelUnitLengthY => _blink.BlinkSVGFEDiffuseLightingElement.instance.kernelUnitLengthY_Getter_(this);
-
+  AnimatedNumber get kernelUnitLengthY => wrap_jso(_blink.BlinkSVGFEDiffuseLightingElement.instance.kernelUnitLengthY_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDiffuseLightingElement.surfaceScale')
   @DocsEditable()
-  AnimatedNumber get surfaceScale => _blink.BlinkSVGFEDiffuseLightingElement.instance.surfaceScale_Getter_(this);
-
+  AnimatedNumber get surfaceScale => wrap_jso(_blink.BlinkSVGFEDiffuseLightingElement.instance.surfaceScale_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDiffuseLightingElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEDiffuseLightingElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGFEDiffuseLightingElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDiffuseLightingElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEDiffuseLightingElement.instance.result_Getter_(this);
-
+  AnimatedString get result => wrap_jso(_blink.BlinkSVGFEDiffuseLightingElement.instance.result_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDiffuseLightingElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEDiffuseLightingElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGFEDiffuseLightingElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDiffuseLightingElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEDiffuseLightingElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGFEDiffuseLightingElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDiffuseLightingElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEDiffuseLightingElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGFEDiffuseLightingElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -1541,44 +1542,44 @@
 
   @DomName('SVGFEDisplacementMapElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEDisplacementMapElement.instance.in1_Getter_(this);
-
+  AnimatedString get in1 => wrap_jso(_blink.BlinkSVGFEDisplacementMapElement.instance.in1_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDisplacementMapElement.in2')
   @DocsEditable()
-  AnimatedString get in2 => _blink.BlinkSVGFEDisplacementMapElement.instance.in2_Getter_(this);
-
+  AnimatedString get in2 => wrap_jso(_blink.BlinkSVGFEDisplacementMapElement.instance.in2_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDisplacementMapElement.scale')
   @DocsEditable()
-  AnimatedNumber get scale => _blink.BlinkSVGFEDisplacementMapElement.instance.scale_Getter_(this);
-
+  AnimatedNumber get scale => wrap_jso(_blink.BlinkSVGFEDisplacementMapElement.instance.scale_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDisplacementMapElement.xChannelSelector')
   @DocsEditable()
-  AnimatedEnumeration get xChannelSelector => _blink.BlinkSVGFEDisplacementMapElement.instance.xChannelSelector_Getter_(this);
-
+  AnimatedEnumeration get xChannelSelector => wrap_jso(_blink.BlinkSVGFEDisplacementMapElement.instance.xChannelSelector_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDisplacementMapElement.yChannelSelector')
   @DocsEditable()
-  AnimatedEnumeration get yChannelSelector => _blink.BlinkSVGFEDisplacementMapElement.instance.yChannelSelector_Getter_(this);
-
+  AnimatedEnumeration get yChannelSelector => wrap_jso(_blink.BlinkSVGFEDisplacementMapElement.instance.yChannelSelector_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDisplacementMapElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEDisplacementMapElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGFEDisplacementMapElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDisplacementMapElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEDisplacementMapElement.instance.result_Getter_(this);
-
+  AnimatedString get result => wrap_jso(_blink.BlinkSVGFEDisplacementMapElement.instance.result_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDisplacementMapElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEDisplacementMapElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGFEDisplacementMapElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDisplacementMapElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEDisplacementMapElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGFEDisplacementMapElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDisplacementMapElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEDisplacementMapElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGFEDisplacementMapElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -1613,12 +1614,12 @@
 
   @DomName('SVGFEDistantLightElement.azimuth')
   @DocsEditable()
-  AnimatedNumber get azimuth => _blink.BlinkSVGFEDistantLightElement.instance.azimuth_Getter_(this);
-
+  AnimatedNumber get azimuth => wrap_jso(_blink.BlinkSVGFEDistantLightElement.instance.azimuth_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEDistantLightElement.elevation')
   @DocsEditable()
-  AnimatedNumber get elevation => _blink.BlinkSVGFEDistantLightElement.instance.elevation_Getter_(this);
-
+  AnimatedNumber get elevation => wrap_jso(_blink.BlinkSVGFEDistantLightElement.instance.elevation_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -1653,24 +1654,24 @@
 
   @DomName('SVGFEFloodElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEFloodElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGFEFloodElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEFloodElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEFloodElement.instance.result_Getter_(this);
-
+  AnimatedString get result => wrap_jso(_blink.BlinkSVGFEFloodElement.instance.result_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEFloodElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEFloodElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGFEFloodElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEFloodElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEFloodElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGFEFloodElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEFloodElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEFloodElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGFEFloodElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -1833,40 +1834,40 @@
 
   @DomName('SVGFEGaussianBlurElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEGaussianBlurElement.instance.in1_Getter_(this);
-
+  AnimatedString get in1 => wrap_jso(_blink.BlinkSVGFEGaussianBlurElement.instance.in1_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEGaussianBlurElement.stdDeviationX')
   @DocsEditable()
-  AnimatedNumber get stdDeviationX => _blink.BlinkSVGFEGaussianBlurElement.instance.stdDeviationX_Getter_(this);
-
+  AnimatedNumber get stdDeviationX => wrap_jso(_blink.BlinkSVGFEGaussianBlurElement.instance.stdDeviationX_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEGaussianBlurElement.stdDeviationY')
   @DocsEditable()
-  AnimatedNumber get stdDeviationY => _blink.BlinkSVGFEGaussianBlurElement.instance.stdDeviationY_Getter_(this);
-
+  AnimatedNumber get stdDeviationY => wrap_jso(_blink.BlinkSVGFEGaussianBlurElement.instance.stdDeviationY_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEGaussianBlurElement.setStdDeviation')
   @DocsEditable()
-  void setStdDeviation(num stdDeviationX, num stdDeviationY) => _blink.BlinkSVGFEGaussianBlurElement.instance.setStdDeviation_Callback_2_(this, stdDeviationX, stdDeviationY);
-
+  void setStdDeviation(num stdDeviationX, num stdDeviationY) => _blink.BlinkSVGFEGaussianBlurElement.instance.setStdDeviation_Callback_2_(unwrap_jso(this), stdDeviationX, stdDeviationY);
+  
   @DomName('SVGFEGaussianBlurElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEGaussianBlurElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGFEGaussianBlurElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEGaussianBlurElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEGaussianBlurElement.instance.result_Getter_(this);
-
+  AnimatedString get result => wrap_jso(_blink.BlinkSVGFEGaussianBlurElement.instance.result_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEGaussianBlurElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEGaussianBlurElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGFEGaussianBlurElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEGaussianBlurElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEGaussianBlurElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGFEGaussianBlurElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEGaussianBlurElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEGaussianBlurElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGFEGaussianBlurElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -1901,32 +1902,32 @@
 
   @DomName('SVGFEImageElement.preserveAspectRatio')
   @DocsEditable()
-  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGFEImageElement.instance.preserveAspectRatio_Getter_(this);
-
+  AnimatedPreserveAspectRatio get preserveAspectRatio => wrap_jso(_blink.BlinkSVGFEImageElement.instance.preserveAspectRatio_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEImageElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEImageElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGFEImageElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEImageElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEImageElement.instance.result_Getter_(this);
-
+  AnimatedString get result => wrap_jso(_blink.BlinkSVGFEImageElement.instance.result_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEImageElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEImageElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGFEImageElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEImageElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEImageElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGFEImageElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEImageElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEImageElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGFEImageElement.instance.y_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEImageElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGFEImageElement.instance.href_Getter_(this);
-
+  AnimatedString get href => wrap_jso(_blink.BlinkSVGFEImageElement.instance.href_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -1961,24 +1962,24 @@
 
   @DomName('SVGFEMergeElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEMergeElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGFEMergeElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEMergeElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEMergeElement.instance.result_Getter_(this);
-
+  AnimatedString get result => wrap_jso(_blink.BlinkSVGFEMergeElement.instance.result_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEMergeElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEMergeElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGFEMergeElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEMergeElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEMergeElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGFEMergeElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEMergeElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEMergeElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGFEMergeElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -2013,8 +2014,8 @@
 
   @DomName('SVGFEMergeNodeElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEMergeNodeElement.instance.in1_Getter_(this);
-
+  AnimatedString get in1 => wrap_jso(_blink.BlinkSVGFEMergeNodeElement.instance.in1_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -2054,40 +2055,40 @@
 
   @DomName('SVGFEMorphologyElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEMorphologyElement.instance.in1_Getter_(this);
-
+  AnimatedString get in1 => wrap_jso(_blink.BlinkSVGFEMorphologyElement.instance.in1_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEMorphologyElement.operator')
   @DocsEditable()
-  AnimatedEnumeration get operator => _blink.BlinkSVGFEMorphologyElement.instance.operator_Getter_(this);
-
+  AnimatedEnumeration get operator => wrap_jso(_blink.BlinkSVGFEMorphologyElement.instance.operator_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEMorphologyElement.radiusX')
   @DocsEditable()
-  AnimatedNumber get radiusX => _blink.BlinkSVGFEMorphologyElement.instance.radiusX_Getter_(this);
-
+  AnimatedNumber get radiusX => wrap_jso(_blink.BlinkSVGFEMorphologyElement.instance.radiusX_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEMorphologyElement.radiusY')
   @DocsEditable()
-  AnimatedNumber get radiusY => _blink.BlinkSVGFEMorphologyElement.instance.radiusY_Getter_(this);
-
+  AnimatedNumber get radiusY => wrap_jso(_blink.BlinkSVGFEMorphologyElement.instance.radiusY_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEMorphologyElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEMorphologyElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGFEMorphologyElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEMorphologyElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEMorphologyElement.instance.result_Getter_(this);
-
+  AnimatedString get result => wrap_jso(_blink.BlinkSVGFEMorphologyElement.instance.result_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEMorphologyElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEMorphologyElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGFEMorphologyElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEMorphologyElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEMorphologyElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGFEMorphologyElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEMorphologyElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEMorphologyElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGFEMorphologyElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -2122,36 +2123,36 @@
 
   @DomName('SVGFEOffsetElement.dx')
   @DocsEditable()
-  AnimatedNumber get dx => _blink.BlinkSVGFEOffsetElement.instance.dx_Getter_(this);
-
+  AnimatedNumber get dx => wrap_jso(_blink.BlinkSVGFEOffsetElement.instance.dx_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEOffsetElement.dy')
   @DocsEditable()
-  AnimatedNumber get dy => _blink.BlinkSVGFEOffsetElement.instance.dy_Getter_(this);
-
+  AnimatedNumber get dy => wrap_jso(_blink.BlinkSVGFEOffsetElement.instance.dy_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEOffsetElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFEOffsetElement.instance.in1_Getter_(this);
-
+  AnimatedString get in1 => wrap_jso(_blink.BlinkSVGFEOffsetElement.instance.in1_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEOffsetElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFEOffsetElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGFEOffsetElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEOffsetElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFEOffsetElement.instance.result_Getter_(this);
-
+  AnimatedString get result => wrap_jso(_blink.BlinkSVGFEOffsetElement.instance.result_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEOffsetElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFEOffsetElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGFEOffsetElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEOffsetElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFEOffsetElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGFEOffsetElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEOffsetElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFEOffsetElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGFEOffsetElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -2186,16 +2187,16 @@
 
   @DomName('SVGFEPointLightElement.x')
   @DocsEditable()
-  AnimatedNumber get x => _blink.BlinkSVGFEPointLightElement.instance.x_Getter_(this);
-
+  AnimatedNumber get x => wrap_jso(_blink.BlinkSVGFEPointLightElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEPointLightElement.y')
   @DocsEditable()
-  AnimatedNumber get y => _blink.BlinkSVGFEPointLightElement.instance.y_Getter_(this);
-
+  AnimatedNumber get y => wrap_jso(_blink.BlinkSVGFEPointLightElement.instance.y_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFEPointLightElement.z')
   @DocsEditable()
-  AnimatedNumber get z => _blink.BlinkSVGFEPointLightElement.instance.z_Getter_(this);
-
+  AnimatedNumber get z => wrap_jso(_blink.BlinkSVGFEPointLightElement.instance.z_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -2230,40 +2231,40 @@
 
   @DomName('SVGFESpecularLightingElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFESpecularLightingElement.instance.in1_Getter_(this);
-
+  AnimatedString get in1 => wrap_jso(_blink.BlinkSVGFESpecularLightingElement.instance.in1_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFESpecularLightingElement.specularConstant')
   @DocsEditable()
-  AnimatedNumber get specularConstant => _blink.BlinkSVGFESpecularLightingElement.instance.specularConstant_Getter_(this);
-
+  AnimatedNumber get specularConstant => wrap_jso(_blink.BlinkSVGFESpecularLightingElement.instance.specularConstant_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFESpecularLightingElement.specularExponent')
   @DocsEditable()
-  AnimatedNumber get specularExponent => _blink.BlinkSVGFESpecularLightingElement.instance.specularExponent_Getter_(this);
-
+  AnimatedNumber get specularExponent => wrap_jso(_blink.BlinkSVGFESpecularLightingElement.instance.specularExponent_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFESpecularLightingElement.surfaceScale')
   @DocsEditable()
-  AnimatedNumber get surfaceScale => _blink.BlinkSVGFESpecularLightingElement.instance.surfaceScale_Getter_(this);
-
+  AnimatedNumber get surfaceScale => wrap_jso(_blink.BlinkSVGFESpecularLightingElement.instance.surfaceScale_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFESpecularLightingElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFESpecularLightingElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGFESpecularLightingElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFESpecularLightingElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFESpecularLightingElement.instance.result_Getter_(this);
-
+  AnimatedString get result => wrap_jso(_blink.BlinkSVGFESpecularLightingElement.instance.result_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFESpecularLightingElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFESpecularLightingElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGFESpecularLightingElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFESpecularLightingElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFESpecularLightingElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGFESpecularLightingElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFESpecularLightingElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFESpecularLightingElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGFESpecularLightingElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -2298,36 +2299,36 @@
 
   @DomName('SVGFESpotLightElement.limitingConeAngle')
   @DocsEditable()
-  AnimatedNumber get limitingConeAngle => _blink.BlinkSVGFESpotLightElement.instance.limitingConeAngle_Getter_(this);
-
+  AnimatedNumber get limitingConeAngle => wrap_jso(_blink.BlinkSVGFESpotLightElement.instance.limitingConeAngle_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFESpotLightElement.pointsAtX')
   @DocsEditable()
-  AnimatedNumber get pointsAtX => _blink.BlinkSVGFESpotLightElement.instance.pointsAtX_Getter_(this);
-
+  AnimatedNumber get pointsAtX => wrap_jso(_blink.BlinkSVGFESpotLightElement.instance.pointsAtX_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFESpotLightElement.pointsAtY')
   @DocsEditable()
-  AnimatedNumber get pointsAtY => _blink.BlinkSVGFESpotLightElement.instance.pointsAtY_Getter_(this);
-
+  AnimatedNumber get pointsAtY => wrap_jso(_blink.BlinkSVGFESpotLightElement.instance.pointsAtY_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFESpotLightElement.pointsAtZ')
   @DocsEditable()
-  AnimatedNumber get pointsAtZ => _blink.BlinkSVGFESpotLightElement.instance.pointsAtZ_Getter_(this);
-
+  AnimatedNumber get pointsAtZ => wrap_jso(_blink.BlinkSVGFESpotLightElement.instance.pointsAtZ_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFESpotLightElement.specularExponent')
   @DocsEditable()
-  AnimatedNumber get specularExponent => _blink.BlinkSVGFESpotLightElement.instance.specularExponent_Getter_(this);
-
+  AnimatedNumber get specularExponent => wrap_jso(_blink.BlinkSVGFESpotLightElement.instance.specularExponent_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFESpotLightElement.x')
   @DocsEditable()
-  AnimatedNumber get x => _blink.BlinkSVGFESpotLightElement.instance.x_Getter_(this);
-
+  AnimatedNumber get x => wrap_jso(_blink.BlinkSVGFESpotLightElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFESpotLightElement.y')
   @DocsEditable()
-  AnimatedNumber get y => _blink.BlinkSVGFESpotLightElement.instance.y_Getter_(this);
-
+  AnimatedNumber get y => wrap_jso(_blink.BlinkSVGFESpotLightElement.instance.y_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFESpotLightElement.z')
   @DocsEditable()
-  AnimatedNumber get z => _blink.BlinkSVGFESpotLightElement.instance.z_Getter_(this);
-
+  AnimatedNumber get z => wrap_jso(_blink.BlinkSVGFESpotLightElement.instance.z_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -2362,28 +2363,28 @@
 
   @DomName('SVGFETileElement.in1')
   @DocsEditable()
-  AnimatedString get in1 => _blink.BlinkSVGFETileElement.instance.in1_Getter_(this);
-
+  AnimatedString get in1 => wrap_jso(_blink.BlinkSVGFETileElement.instance.in1_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFETileElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFETileElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGFETileElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFETileElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFETileElement.instance.result_Getter_(this);
-
+  AnimatedString get result => wrap_jso(_blink.BlinkSVGFETileElement.instance.result_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFETileElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFETileElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGFETileElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFETileElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFETileElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGFETileElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFETileElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFETileElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGFETileElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -2442,48 +2443,48 @@
 
   @DomName('SVGFETurbulenceElement.baseFrequencyX')
   @DocsEditable()
-  AnimatedNumber get baseFrequencyX => _blink.BlinkSVGFETurbulenceElement.instance.baseFrequencyX_Getter_(this);
-
+  AnimatedNumber get baseFrequencyX => wrap_jso(_blink.BlinkSVGFETurbulenceElement.instance.baseFrequencyX_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFETurbulenceElement.baseFrequencyY')
   @DocsEditable()
-  AnimatedNumber get baseFrequencyY => _blink.BlinkSVGFETurbulenceElement.instance.baseFrequencyY_Getter_(this);
-
+  AnimatedNumber get baseFrequencyY => wrap_jso(_blink.BlinkSVGFETurbulenceElement.instance.baseFrequencyY_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFETurbulenceElement.numOctaves')
   @DocsEditable()
-  AnimatedInteger get numOctaves => _blink.BlinkSVGFETurbulenceElement.instance.numOctaves_Getter_(this);
-
+  AnimatedInteger get numOctaves => wrap_jso(_blink.BlinkSVGFETurbulenceElement.instance.numOctaves_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFETurbulenceElement.seed')
   @DocsEditable()
-  AnimatedNumber get seed => _blink.BlinkSVGFETurbulenceElement.instance.seed_Getter_(this);
-
+  AnimatedNumber get seed => wrap_jso(_blink.BlinkSVGFETurbulenceElement.instance.seed_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFETurbulenceElement.stitchTiles')
   @DocsEditable()
-  AnimatedEnumeration get stitchTiles => _blink.BlinkSVGFETurbulenceElement.instance.stitchTiles_Getter_(this);
-
+  AnimatedEnumeration get stitchTiles => wrap_jso(_blink.BlinkSVGFETurbulenceElement.instance.stitchTiles_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFETurbulenceElement.type')
   @DocsEditable()
-  AnimatedEnumeration get type => _blink.BlinkSVGFETurbulenceElement.instance.type_Getter_(this);
-
+  AnimatedEnumeration get type => wrap_jso(_blink.BlinkSVGFETurbulenceElement.instance.type_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFETurbulenceElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFETurbulenceElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGFETurbulenceElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFETurbulenceElement.result')
   @DocsEditable()
-  AnimatedString get result => _blink.BlinkSVGFETurbulenceElement.instance.result_Getter_(this);
-
+  AnimatedString get result => wrap_jso(_blink.BlinkSVGFETurbulenceElement.instance.result_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFETurbulenceElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFETurbulenceElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGFETurbulenceElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFETurbulenceElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFETurbulenceElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGFETurbulenceElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFETurbulenceElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFETurbulenceElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGFETurbulenceElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -2518,44 +2519,44 @@
 
   @DomName('SVGFilterElement.filterResX')
   @DocsEditable()
-  AnimatedInteger get filterResX => _blink.BlinkSVGFilterElement.instance.filterResX_Getter_(this);
-
+  AnimatedInteger get filterResX => wrap_jso(_blink.BlinkSVGFilterElement.instance.filterResX_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFilterElement.filterResY')
   @DocsEditable()
-  AnimatedInteger get filterResY => _blink.BlinkSVGFilterElement.instance.filterResY_Getter_(this);
-
+  AnimatedInteger get filterResY => wrap_jso(_blink.BlinkSVGFilterElement.instance.filterResY_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFilterElement.filterUnits')
   @DocsEditable()
-  AnimatedEnumeration get filterUnits => _blink.BlinkSVGFilterElement.instance.filterUnits_Getter_(this);
-
+  AnimatedEnumeration get filterUnits => wrap_jso(_blink.BlinkSVGFilterElement.instance.filterUnits_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFilterElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGFilterElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGFilterElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFilterElement.primitiveUnits')
   @DocsEditable()
-  AnimatedEnumeration get primitiveUnits => _blink.BlinkSVGFilterElement.instance.primitiveUnits_Getter_(this);
-
+  AnimatedEnumeration get primitiveUnits => wrap_jso(_blink.BlinkSVGFilterElement.instance.primitiveUnits_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFilterElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGFilterElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGFilterElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFilterElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGFilterElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGFilterElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFilterElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGFilterElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGFilterElement.instance.y_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGFilterElement.setFilterRes')
   @DocsEditable()
-  void setFilterRes(int filterResX, int filterResY) => _blink.BlinkSVGFilterElement.instance.setFilterRes_Callback_2_(this, filterResX, filterResY);
-
+  void setFilterRes(int filterResX, int filterResY) => _blink.BlinkSVGFilterElement.instance.setFilterRes_Callback_2_(unwrap_jso(this), filterResX, filterResY);
+  
   @DomName('SVGFilterElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGFilterElement.instance.href_Getter_(this);
-
+  AnimatedString get href => wrap_jso(_blink.BlinkSVGFilterElement.instance.href_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -2647,20 +2648,20 @@
 
   @DomName('SVGForeignObjectElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGForeignObjectElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGForeignObjectElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGForeignObjectElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGForeignObjectElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGForeignObjectElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGForeignObjectElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGForeignObjectElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGForeignObjectElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGForeignObjectElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGForeignObjectElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGForeignObjectElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -2710,13 +2711,13 @@
   @DomName('SVGGeometryElement.isPointInFill')
   @DocsEditable()
   @Experimental() // untriaged
-  bool isPointInFill(Point point) => _blink.BlinkSVGGeometryElement.instance.isPointInFill_Callback_1_(this, point);
-
+  bool isPointInFill(Point point) => _blink.BlinkSVGGeometryElement.instance.isPointInFill_Callback_1_(unwrap_jso(this), unwrap_jso(point));
+  
   @DomName('SVGGeometryElement.isPointInStroke')
   @DocsEditable()
   @Experimental() // untriaged
-  bool isPointInStroke(Point point) => _blink.BlinkSVGGeometryElement.instance.isPointInStroke_Callback_1_(this, point);
-
+  bool isPointInStroke(Point point) => _blink.BlinkSVGGeometryElement.instance.isPointInStroke_Callback_1_(unwrap_jso(this), unwrap_jso(point));
+  
 }
 // 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
@@ -2741,58 +2742,58 @@
   @DomName('SVGGraphicsElement.farthestViewportElement')
   @DocsEditable()
   @Experimental() // untriaged
-  SvgElement get farthestViewportElement => _blink.BlinkSVGGraphicsElement.instance.farthestViewportElement_Getter_(this);
-
+  SvgElement get farthestViewportElement => wrap_jso(_blink.BlinkSVGGraphicsElement.instance.farthestViewportElement_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGGraphicsElement.nearestViewportElement')
   @DocsEditable()
   @Experimental() // untriaged
-  SvgElement get nearestViewportElement => _blink.BlinkSVGGraphicsElement.instance.nearestViewportElement_Getter_(this);
-
+  SvgElement get nearestViewportElement => wrap_jso(_blink.BlinkSVGGraphicsElement.instance.nearestViewportElement_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGGraphicsElement.transform')
   @DocsEditable()
   @Experimental() // untriaged
-  AnimatedTransformList get transform => _blink.BlinkSVGGraphicsElement.instance.transform_Getter_(this);
-
+  AnimatedTransformList get transform => wrap_jso(_blink.BlinkSVGGraphicsElement.instance.transform_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGGraphicsElement.getBBox')
   @DocsEditable()
   @Experimental() // untriaged
-  Rect getBBox() => _blink.BlinkSVGGraphicsElement.instance.getBBox_Callback_0_(this);
-
+  Rect getBBox() => wrap_jso(_blink.BlinkSVGGraphicsElement.instance.getBBox_Callback_0_(unwrap_jso(this)));
+  
   @DomName('SVGGraphicsElement.getCTM')
   @DocsEditable()
   @Experimental() // untriaged
-  Matrix getCtm() => _blink.BlinkSVGGraphicsElement.instance.getCTM_Callback_0_(this);
-
+  Matrix getCtm() => _blink.BlinkSVGGraphicsElement.instance.getCTM_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGGraphicsElement.getScreenCTM')
   @DocsEditable()
   @Experimental() // untriaged
-  Matrix getScreenCtm() => _blink.BlinkSVGGraphicsElement.instance.getScreenCTM_Callback_0_(this);
-
+  Matrix getScreenCtm() => _blink.BlinkSVGGraphicsElement.instance.getScreenCTM_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGGraphicsElement.getTransformToElement')
   @DocsEditable()
   @Experimental() // untriaged
-  Matrix getTransformToElement(SvgElement element) => _blink.BlinkSVGGraphicsElement.instance.getTransformToElement_Callback_1_(this, element);
-
+  Matrix getTransformToElement(SvgElement element) => _blink.BlinkSVGGraphicsElement.instance.getTransformToElement_Callback_1_(unwrap_jso(this), unwrap_jso(element));
+  
   @DomName('SVGGraphicsElement.requiredExtensions')
   @DocsEditable()
   @Experimental() // untriaged
-  StringList get requiredExtensions => _blink.BlinkSVGGraphicsElement.instance.requiredExtensions_Getter_(this);
-
+  StringList get requiredExtensions => wrap_jso(_blink.BlinkSVGGraphicsElement.instance.requiredExtensions_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGGraphicsElement.requiredFeatures')
   @DocsEditable()
   @Experimental() // untriaged
-  StringList get requiredFeatures => _blink.BlinkSVGGraphicsElement.instance.requiredFeatures_Getter_(this);
-
+  StringList get requiredFeatures => wrap_jso(_blink.BlinkSVGGraphicsElement.instance.requiredFeatures_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGGraphicsElement.systemLanguage')
   @DocsEditable()
   @Experimental() // untriaged
-  StringList get systemLanguage => _blink.BlinkSVGGraphicsElement.instance.systemLanguage_Getter_(this);
-
+  StringList get systemLanguage => wrap_jso(_blink.BlinkSVGGraphicsElement.instance.systemLanguage_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGGraphicsElement.hasExtension')
   @DocsEditable()
   @Experimental() // untriaged
-  bool hasExtension(String extension) => _blink.BlinkSVGGraphicsElement.instance.hasExtension_Callback_1_(this, extension);
-
+  bool hasExtension(String extension) => _blink.BlinkSVGGraphicsElement.instance.hasExtension_Callback_1_(unwrap_jso(this), extension);
+  
 }
 // 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
@@ -2820,28 +2821,28 @@
 
   @DomName('SVGImageElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGImageElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGImageElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGImageElement.preserveAspectRatio')
   @DocsEditable()
-  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGImageElement.instance.preserveAspectRatio_Getter_(this);
-
+  AnimatedPreserveAspectRatio get preserveAspectRatio => wrap_jso(_blink.BlinkSVGImageElement.instance.preserveAspectRatio_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGImageElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGImageElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGImageElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGImageElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGImageElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGImageElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGImageElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGImageElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGImageElement.instance.y_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGImageElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGImageElement.instance.href_Getter_(this);
-
+  AnimatedString get href => wrap_jso(_blink.BlinkSVGImageElement.instance.href_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -2903,40 +2904,40 @@
 
   @DomName('SVGLength.unitType')
   @DocsEditable()
-  int get unitType => _blink.BlinkSVGLength.instance.unitType_Getter_(this);
-
+  int get unitType => _blink.BlinkSVGLength.instance.unitType_Getter_(unwrap_jso(this));
+  
   @DomName('SVGLength.value')
   @DocsEditable()
-  num get value => _blink.BlinkSVGLength.instance.value_Getter_(this);
-
+  num get value => _blink.BlinkSVGLength.instance.value_Getter_(unwrap_jso(this));
+  
   @DomName('SVGLength.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkSVGLength.instance.value_Setter_(this, value);
-
+  void set value(num value) => _blink.BlinkSVGLength.instance.value_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGLength.valueAsString')
   @DocsEditable()
-  String get valueAsString => _blink.BlinkSVGLength.instance.valueAsString_Getter_(this);
-
+  String get valueAsString => _blink.BlinkSVGLength.instance.valueAsString_Getter_(unwrap_jso(this));
+  
   @DomName('SVGLength.valueAsString')
   @DocsEditable()
-  void set valueAsString(String value) => _blink.BlinkSVGLength.instance.valueAsString_Setter_(this, value);
-
+  void set valueAsString(String value) => _blink.BlinkSVGLength.instance.valueAsString_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGLength.valueInSpecifiedUnits')
   @DocsEditable()
-  num get valueInSpecifiedUnits => _blink.BlinkSVGLength.instance.valueInSpecifiedUnits_Getter_(this);
-
+  num get valueInSpecifiedUnits => _blink.BlinkSVGLength.instance.valueInSpecifiedUnits_Getter_(unwrap_jso(this));
+  
   @DomName('SVGLength.valueInSpecifiedUnits')
   @DocsEditable()
-  void set valueInSpecifiedUnits(num value) => _blink.BlinkSVGLength.instance.valueInSpecifiedUnits_Setter_(this, value);
-
+  void set valueInSpecifiedUnits(num value) => _blink.BlinkSVGLength.instance.valueInSpecifiedUnits_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGLength.convertToSpecifiedUnits')
   @DocsEditable()
-  void convertToSpecifiedUnits(int unitType) => _blink.BlinkSVGLength.instance.convertToSpecifiedUnits_Callback_1_(this, unitType);
-
+  void convertToSpecifiedUnits(int unitType) => _blink.BlinkSVGLength.instance.convertToSpecifiedUnits_Callback_1_(unwrap_jso(this), unitType);
+  
   @DomName('SVGLength.newValueSpecifiedUnits')
   @DocsEditable()
-  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) => _blink.BlinkSVGLength.instance.newValueSpecifiedUnits_Callback_2_(this, unitType, valueInSpecifiedUnits);
-
+  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) => _blink.BlinkSVGLength.instance.newValueSpecifiedUnits_Callback_2_(unwrap_jso(this), unitType, valueInSpecifiedUnits);
+  
 }
 // 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
@@ -2955,12 +2956,12 @@
   @DomName('SVGLengthList.length')
   @DocsEditable()
   @Experimental() // untriaged
-  int get length => _blink.BlinkSVGLengthList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkSVGLengthList.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('SVGLengthList.numberOfItems')
   @DocsEditable()
-  int get numberOfItems => _blink.BlinkSVGLengthList.instance.numberOfItems_Getter_(this);
-
+  int get numberOfItems => _blink.BlinkSVGLengthList.instance.numberOfItems_Getter_(unwrap_jso(this));
+  
   Length operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
@@ -3008,36 +3009,36 @@
   @DomName('SVGLengthList.__setter__')
   @DocsEditable()
   @Experimental() // untriaged
-  void __setter__(int index, Length value) => _blink.BlinkSVGLengthList.instance.$__setter___Callback_2_(this, index, value);
-
+  void __setter__(int index, Length value) => _blink.BlinkSVGLengthList.instance.$__setter___Callback_2_(unwrap_jso(this), index, unwrap_jso(value));
+  
   @DomName('SVGLengthList.appendItem')
   @DocsEditable()
-  Length appendItem(Length item) => _blink.BlinkSVGLengthList.instance.appendItem_Callback_1_(this, item);
-
+  Length appendItem(Length item) => _blink.BlinkSVGLengthList.instance.appendItem_Callback_1_(unwrap_jso(this), unwrap_jso(item));
+  
   @DomName('SVGLengthList.clear')
   @DocsEditable()
-  void clear() => _blink.BlinkSVGLengthList.instance.clear_Callback_0_(this);
-
+  void clear() => _blink.BlinkSVGLengthList.instance.clear_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGLengthList.getItem')
   @DocsEditable()
-  Length getItem(int index) => _blink.BlinkSVGLengthList.instance.getItem_Callback_1_(this, index);
-
+  Length getItem(int index) => _blink.BlinkSVGLengthList.instance.getItem_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('SVGLengthList.initialize')
   @DocsEditable()
-  Length initialize(Length item) => _blink.BlinkSVGLengthList.instance.initialize_Callback_1_(this, item);
-
+  Length initialize(Length item) => _blink.BlinkSVGLengthList.instance.initialize_Callback_1_(unwrap_jso(this), unwrap_jso(item));
+  
   @DomName('SVGLengthList.insertItemBefore')
   @DocsEditable()
-  Length insertItemBefore(Length item, int index) => _blink.BlinkSVGLengthList.instance.insertItemBefore_Callback_2_(this, item, index);
-
+  Length insertItemBefore(Length item, int index) => _blink.BlinkSVGLengthList.instance.insertItemBefore_Callback_2_(unwrap_jso(this), unwrap_jso(item), index);
+  
   @DomName('SVGLengthList.removeItem')
   @DocsEditable()
-  Length removeItem(int index) => _blink.BlinkSVGLengthList.instance.removeItem_Callback_1_(this, index);
-
+  Length removeItem(int index) => _blink.BlinkSVGLengthList.instance.removeItem_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('SVGLengthList.replaceItem')
   @DocsEditable()
-  Length replaceItem(Length item, int index) => _blink.BlinkSVGLengthList.instance.replaceItem_Callback_2_(this, item, index);
-
+  Length replaceItem(Length item, int index) => _blink.BlinkSVGLengthList.instance.replaceItem_Callback_2_(unwrap_jso(this), unwrap_jso(item), index);
+  
 }
 // 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
@@ -3065,20 +3066,20 @@
 
   @DomName('SVGLineElement.x1')
   @DocsEditable()
-  AnimatedLength get x1 => _blink.BlinkSVGLineElement.instance.x1_Getter_(this);
-
+  AnimatedLength get x1 => wrap_jso(_blink.BlinkSVGLineElement.instance.x1_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGLineElement.x2')
   @DocsEditable()
-  AnimatedLength get x2 => _blink.BlinkSVGLineElement.instance.x2_Getter_(this);
-
+  AnimatedLength get x2 => wrap_jso(_blink.BlinkSVGLineElement.instance.x2_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGLineElement.y1')
   @DocsEditable()
-  AnimatedLength get y1 => _blink.BlinkSVGLineElement.instance.y1_Getter_(this);
-
+  AnimatedLength get y1 => wrap_jso(_blink.BlinkSVGLineElement.instance.y1_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGLineElement.y2')
   @DocsEditable()
-  AnimatedLength get y2 => _blink.BlinkSVGLineElement.instance.y2_Getter_(this);
-
+  AnimatedLength get y2 => wrap_jso(_blink.BlinkSVGLineElement.instance.y2_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -3106,20 +3107,20 @@
 
   @DomName('SVGLinearGradientElement.x1')
   @DocsEditable()
-  AnimatedLength get x1 => _blink.BlinkSVGLinearGradientElement.instance.x1_Getter_(this);
-
+  AnimatedLength get x1 => wrap_jso(_blink.BlinkSVGLinearGradientElement.instance.x1_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGLinearGradientElement.x2')
   @DocsEditable()
-  AnimatedLength get x2 => _blink.BlinkSVGLinearGradientElement.instance.x2_Getter_(this);
-
+  AnimatedLength get x2 => wrap_jso(_blink.BlinkSVGLinearGradientElement.instance.x2_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGLinearGradientElement.y1')
   @DocsEditable()
-  AnimatedLength get y1 => _blink.BlinkSVGLinearGradientElement.instance.y1_Getter_(this);
-
+  AnimatedLength get y1 => wrap_jso(_blink.BlinkSVGLinearGradientElement.instance.y1_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGLinearGradientElement.y2')
   @DocsEditable()
-  AnimatedLength get y2 => _blink.BlinkSVGLinearGradientElement.instance.y2_Getter_(this);
-
+  AnimatedLength get y2 => wrap_jso(_blink.BlinkSVGLinearGradientElement.instance.y2_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -3171,48 +3172,48 @@
 
   @DomName('SVGMarkerElement.markerHeight')
   @DocsEditable()
-  AnimatedLength get markerHeight => _blink.BlinkSVGMarkerElement.instance.markerHeight_Getter_(this);
-
+  AnimatedLength get markerHeight => wrap_jso(_blink.BlinkSVGMarkerElement.instance.markerHeight_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGMarkerElement.markerUnits')
   @DocsEditable()
-  AnimatedEnumeration get markerUnits => _blink.BlinkSVGMarkerElement.instance.markerUnits_Getter_(this);
-
+  AnimatedEnumeration get markerUnits => wrap_jso(_blink.BlinkSVGMarkerElement.instance.markerUnits_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGMarkerElement.markerWidth')
   @DocsEditable()
-  AnimatedLength get markerWidth => _blink.BlinkSVGMarkerElement.instance.markerWidth_Getter_(this);
-
+  AnimatedLength get markerWidth => wrap_jso(_blink.BlinkSVGMarkerElement.instance.markerWidth_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGMarkerElement.orientAngle')
   @DocsEditable()
-  AnimatedAngle get orientAngle => _blink.BlinkSVGMarkerElement.instance.orientAngle_Getter_(this);
-
+  AnimatedAngle get orientAngle => wrap_jso(_blink.BlinkSVGMarkerElement.instance.orientAngle_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGMarkerElement.orientType')
   @DocsEditable()
-  AnimatedEnumeration get orientType => _blink.BlinkSVGMarkerElement.instance.orientType_Getter_(this);
-
+  AnimatedEnumeration get orientType => wrap_jso(_blink.BlinkSVGMarkerElement.instance.orientType_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGMarkerElement.refX')
   @DocsEditable()
-  AnimatedLength get refX => _blink.BlinkSVGMarkerElement.instance.refX_Getter_(this);
-
+  AnimatedLength get refX => wrap_jso(_blink.BlinkSVGMarkerElement.instance.refX_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGMarkerElement.refY')
   @DocsEditable()
-  AnimatedLength get refY => _blink.BlinkSVGMarkerElement.instance.refY_Getter_(this);
-
+  AnimatedLength get refY => wrap_jso(_blink.BlinkSVGMarkerElement.instance.refY_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGMarkerElement.setOrientToAngle')
   @DocsEditable()
-  void setOrientToAngle(Angle angle) => _blink.BlinkSVGMarkerElement.instance.setOrientToAngle_Callback_1_(this, angle);
-
+  void setOrientToAngle(Angle angle) => _blink.BlinkSVGMarkerElement.instance.setOrientToAngle_Callback_1_(unwrap_jso(this), unwrap_jso(angle));
+  
   @DomName('SVGMarkerElement.setOrientToAuto')
   @DocsEditable()
-  void setOrientToAuto() => _blink.BlinkSVGMarkerElement.instance.setOrientToAuto_Callback_0_(this);
-
+  void setOrientToAuto() => _blink.BlinkSVGMarkerElement.instance.setOrientToAuto_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGMarkerElement.preserveAspectRatio')
   @DocsEditable()
-  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGMarkerElement.instance.preserveAspectRatio_Getter_(this);
-
+  AnimatedPreserveAspectRatio get preserveAspectRatio => wrap_jso(_blink.BlinkSVGMarkerElement.instance.preserveAspectRatio_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGMarkerElement.viewBox')
   @DocsEditable()
-  AnimatedRect get viewBox => _blink.BlinkSVGMarkerElement.instance.viewBox_Getter_(this);
-
+  AnimatedRect get viewBox => wrap_jso(_blink.BlinkSVGMarkerElement.instance.viewBox_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -3240,44 +3241,44 @@
 
   @DomName('SVGMaskElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGMaskElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGMaskElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGMaskElement.maskContentUnits')
   @DocsEditable()
-  AnimatedEnumeration get maskContentUnits => _blink.BlinkSVGMaskElement.instance.maskContentUnits_Getter_(this);
-
+  AnimatedEnumeration get maskContentUnits => wrap_jso(_blink.BlinkSVGMaskElement.instance.maskContentUnits_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGMaskElement.maskUnits')
   @DocsEditable()
-  AnimatedEnumeration get maskUnits => _blink.BlinkSVGMaskElement.instance.maskUnits_Getter_(this);
-
+  AnimatedEnumeration get maskUnits => wrap_jso(_blink.BlinkSVGMaskElement.instance.maskUnits_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGMaskElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGMaskElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGMaskElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGMaskElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGMaskElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGMaskElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGMaskElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGMaskElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGMaskElement.instance.y_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGMaskElement.requiredExtensions')
   @DocsEditable()
-  StringList get requiredExtensions => _blink.BlinkSVGMaskElement.instance.requiredExtensions_Getter_(this);
-
+  StringList get requiredExtensions => wrap_jso(_blink.BlinkSVGMaskElement.instance.requiredExtensions_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGMaskElement.requiredFeatures')
   @DocsEditable()
-  StringList get requiredFeatures => _blink.BlinkSVGMaskElement.instance.requiredFeatures_Getter_(this);
-
+  StringList get requiredFeatures => wrap_jso(_blink.BlinkSVGMaskElement.instance.requiredFeatures_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGMaskElement.systemLanguage')
   @DocsEditable()
-  StringList get systemLanguage => _blink.BlinkSVGMaskElement.instance.systemLanguage_Getter_(this);
-
+  StringList get systemLanguage => wrap_jso(_blink.BlinkSVGMaskElement.instance.systemLanguage_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGMaskElement.hasExtension')
   @DocsEditable()
-  bool hasExtension(String extension) => _blink.BlinkSVGMaskElement.instance.hasExtension_Callback_1_(this, extension);
-
+  bool hasExtension(String extension) => _blink.BlinkSVGMaskElement.instance.hasExtension_Callback_1_(unwrap_jso(this), extension);
+  
 }
 // 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
@@ -3295,96 +3296,96 @@
 
   @DomName('SVGMatrix.a')
   @DocsEditable()
-  num get a => _blink.BlinkSVGMatrix.instance.a_Getter_(this);
-
+  num get a => _blink.BlinkSVGMatrix.instance.a_Getter_(unwrap_jso(this));
+  
   @DomName('SVGMatrix.a')
   @DocsEditable()
-  void set a(num value) => _blink.BlinkSVGMatrix.instance.a_Setter_(this, value);
-
+  void set a(num value) => _blink.BlinkSVGMatrix.instance.a_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGMatrix.b')
   @DocsEditable()
-  num get b => _blink.BlinkSVGMatrix.instance.b_Getter_(this);
-
+  num get b => _blink.BlinkSVGMatrix.instance.b_Getter_(unwrap_jso(this));
+  
   @DomName('SVGMatrix.b')
   @DocsEditable()
-  void set b(num value) => _blink.BlinkSVGMatrix.instance.b_Setter_(this, value);
-
+  void set b(num value) => _blink.BlinkSVGMatrix.instance.b_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGMatrix.c')
   @DocsEditable()
-  num get c => _blink.BlinkSVGMatrix.instance.c_Getter_(this);
-
+  num get c => _blink.BlinkSVGMatrix.instance.c_Getter_(unwrap_jso(this));
+  
   @DomName('SVGMatrix.c')
   @DocsEditable()
-  void set c(num value) => _blink.BlinkSVGMatrix.instance.c_Setter_(this, value);
-
+  void set c(num value) => _blink.BlinkSVGMatrix.instance.c_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGMatrix.d')
   @DocsEditable()
-  num get d => _blink.BlinkSVGMatrix.instance.d_Getter_(this);
-
+  num get d => _blink.BlinkSVGMatrix.instance.d_Getter_(unwrap_jso(this));
+  
   @DomName('SVGMatrix.d')
   @DocsEditable()
-  void set d(num value) => _blink.BlinkSVGMatrix.instance.d_Setter_(this, value);
-
+  void set d(num value) => _blink.BlinkSVGMatrix.instance.d_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGMatrix.e')
   @DocsEditable()
-  num get e => _blink.BlinkSVGMatrix.instance.e_Getter_(this);
-
+  num get e => _blink.BlinkSVGMatrix.instance.e_Getter_(unwrap_jso(this));
+  
   @DomName('SVGMatrix.e')
   @DocsEditable()
-  void set e(num value) => _blink.BlinkSVGMatrix.instance.e_Setter_(this, value);
-
+  void set e(num value) => _blink.BlinkSVGMatrix.instance.e_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGMatrix.f')
   @DocsEditable()
-  num get f => _blink.BlinkSVGMatrix.instance.f_Getter_(this);
-
+  num get f => _blink.BlinkSVGMatrix.instance.f_Getter_(unwrap_jso(this));
+  
   @DomName('SVGMatrix.f')
   @DocsEditable()
-  void set f(num value) => _blink.BlinkSVGMatrix.instance.f_Setter_(this, value);
-
+  void set f(num value) => _blink.BlinkSVGMatrix.instance.f_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGMatrix.flipX')
   @DocsEditable()
-  Matrix flipX() => _blink.BlinkSVGMatrix.instance.flipX_Callback_0_(this);
-
+  Matrix flipX() => _blink.BlinkSVGMatrix.instance.flipX_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGMatrix.flipY')
   @DocsEditable()
-  Matrix flipY() => _blink.BlinkSVGMatrix.instance.flipY_Callback_0_(this);
-
+  Matrix flipY() => _blink.BlinkSVGMatrix.instance.flipY_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGMatrix.inverse')
   @DocsEditable()
-  Matrix inverse() => _blink.BlinkSVGMatrix.instance.inverse_Callback_0_(this);
-
+  Matrix inverse() => _blink.BlinkSVGMatrix.instance.inverse_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGMatrix.multiply')
   @DocsEditable()
-  Matrix multiply(Matrix secondMatrix) => _blink.BlinkSVGMatrix.instance.multiply_Callback_1_(this, secondMatrix);
-
+  Matrix multiply(Matrix secondMatrix) => _blink.BlinkSVGMatrix.instance.multiply_Callback_1_(unwrap_jso(this), unwrap_jso(secondMatrix));
+  
   @DomName('SVGMatrix.rotate')
   @DocsEditable()
-  Matrix rotate(num angle) => _blink.BlinkSVGMatrix.instance.rotate_Callback_1_(this, angle);
-
+  Matrix rotate(num angle) => _blink.BlinkSVGMatrix.instance.rotate_Callback_1_(unwrap_jso(this), angle);
+  
   @DomName('SVGMatrix.rotateFromVector')
   @DocsEditable()
-  Matrix rotateFromVector(num x, num y) => _blink.BlinkSVGMatrix.instance.rotateFromVector_Callback_2_(this, x, y);
-
+  Matrix rotateFromVector(num x, num y) => _blink.BlinkSVGMatrix.instance.rotateFromVector_Callback_2_(unwrap_jso(this), x, y);
+  
   @DomName('SVGMatrix.scale')
   @DocsEditable()
-  Matrix scale(num scaleFactor) => _blink.BlinkSVGMatrix.instance.scale_Callback_1_(this, scaleFactor);
-
+  Matrix scale(num scaleFactor) => _blink.BlinkSVGMatrix.instance.scale_Callback_1_(unwrap_jso(this), scaleFactor);
+  
   @DomName('SVGMatrix.scaleNonUniform')
   @DocsEditable()
-  Matrix scaleNonUniform(num scaleFactorX, num scaleFactorY) => _blink.BlinkSVGMatrix.instance.scaleNonUniform_Callback_2_(this, scaleFactorX, scaleFactorY);
-
+  Matrix scaleNonUniform(num scaleFactorX, num scaleFactorY) => _blink.BlinkSVGMatrix.instance.scaleNonUniform_Callback_2_(unwrap_jso(this), scaleFactorX, scaleFactorY);
+  
   @DomName('SVGMatrix.skewX')
   @DocsEditable()
-  Matrix skewX(num angle) => _blink.BlinkSVGMatrix.instance.skewX_Callback_1_(this, angle);
-
+  Matrix skewX(num angle) => _blink.BlinkSVGMatrix.instance.skewX_Callback_1_(unwrap_jso(this), angle);
+  
   @DomName('SVGMatrix.skewY')
   @DocsEditable()
-  Matrix skewY(num angle) => _blink.BlinkSVGMatrix.instance.skewY_Callback_1_(this, angle);
-
+  Matrix skewY(num angle) => _blink.BlinkSVGMatrix.instance.skewY_Callback_1_(unwrap_jso(this), angle);
+  
   @DomName('SVGMatrix.translate')
   @DocsEditable()
-  Matrix translate(num x, num y) => _blink.BlinkSVGMatrix.instance.translate_Callback_2_(this, x, y);
-
+  Matrix translate(num x, num y) => _blink.BlinkSVGMatrix.instance.translate_Callback_2_(unwrap_jso(this), x, y);
+  
 }
 // 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
@@ -3423,12 +3424,12 @@
 
   @DomName('SVGNumber.value')
   @DocsEditable()
-  num get value => _blink.BlinkSVGNumber.instance.value_Getter_(this);
-
+  num get value => _blink.BlinkSVGNumber.instance.value_Getter_(unwrap_jso(this));
+  
   @DomName('SVGNumber.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkSVGNumber.instance.value_Setter_(this, value);
-
+  void set value(num value) => _blink.BlinkSVGNumber.instance.value_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -3447,12 +3448,12 @@
   @DomName('SVGNumberList.length')
   @DocsEditable()
   @Experimental() // untriaged
-  int get length => _blink.BlinkSVGNumberList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkSVGNumberList.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('SVGNumberList.numberOfItems')
   @DocsEditable()
-  int get numberOfItems => _blink.BlinkSVGNumberList.instance.numberOfItems_Getter_(this);
-
+  int get numberOfItems => _blink.BlinkSVGNumberList.instance.numberOfItems_Getter_(unwrap_jso(this));
+  
   Number operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
@@ -3500,36 +3501,36 @@
   @DomName('SVGNumberList.__setter__')
   @DocsEditable()
   @Experimental() // untriaged
-  void __setter__(int index, Number value) => _blink.BlinkSVGNumberList.instance.$__setter___Callback_2_(this, index, value);
-
+  void __setter__(int index, Number value) => _blink.BlinkSVGNumberList.instance.$__setter___Callback_2_(unwrap_jso(this), index, unwrap_jso(value));
+  
   @DomName('SVGNumberList.appendItem')
   @DocsEditable()
-  Number appendItem(Number item) => _blink.BlinkSVGNumberList.instance.appendItem_Callback_1_(this, item);
-
+  Number appendItem(Number item) => _blink.BlinkSVGNumberList.instance.appendItem_Callback_1_(unwrap_jso(this), unwrap_jso(item));
+  
   @DomName('SVGNumberList.clear')
   @DocsEditable()
-  void clear() => _blink.BlinkSVGNumberList.instance.clear_Callback_0_(this);
-
+  void clear() => _blink.BlinkSVGNumberList.instance.clear_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGNumberList.getItem')
   @DocsEditable()
-  Number getItem(int index) => _blink.BlinkSVGNumberList.instance.getItem_Callback_1_(this, index);
-
+  Number getItem(int index) => _blink.BlinkSVGNumberList.instance.getItem_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('SVGNumberList.initialize')
   @DocsEditable()
-  Number initialize(Number item) => _blink.BlinkSVGNumberList.instance.initialize_Callback_1_(this, item);
-
+  Number initialize(Number item) => _blink.BlinkSVGNumberList.instance.initialize_Callback_1_(unwrap_jso(this), unwrap_jso(item));
+  
   @DomName('SVGNumberList.insertItemBefore')
   @DocsEditable()
-  Number insertItemBefore(Number item, int index) => _blink.BlinkSVGNumberList.instance.insertItemBefore_Callback_2_(this, item, index);
-
+  Number insertItemBefore(Number item, int index) => _blink.BlinkSVGNumberList.instance.insertItemBefore_Callback_2_(unwrap_jso(this), unwrap_jso(item), index);
+  
   @DomName('SVGNumberList.removeItem')
   @DocsEditable()
-  Number removeItem(int index) => _blink.BlinkSVGNumberList.instance.removeItem_Callback_1_(this, index);
-
+  Number removeItem(int index) => _blink.BlinkSVGNumberList.instance.removeItem_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('SVGNumberList.replaceItem')
   @DocsEditable()
-  Number replaceItem(Number item, int index) => _blink.BlinkSVGNumberList.instance.replaceItem_Callback_2_(this, item, index);
-
+  Number replaceItem(Number item, int index) => _blink.BlinkSVGNumberList.instance.replaceItem_Callback_2_(unwrap_jso(this), unwrap_jso(item), index);
+  
 }
 // 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
@@ -3557,112 +3558,112 @@
 
   @DomName('SVGPathElement.animatedNormalizedPathSegList')
   @DocsEditable()
-  PathSegList get animatedNormalizedPathSegList => _blink.BlinkSVGPathElement.instance.animatedNormalizedPathSegList_Getter_(this);
-
+  PathSegList get animatedNormalizedPathSegList => wrap_jso(_blink.BlinkSVGPathElement.instance.animatedNormalizedPathSegList_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPathElement.animatedPathSegList')
   @DocsEditable()
-  PathSegList get animatedPathSegList => _blink.BlinkSVGPathElement.instance.animatedPathSegList_Getter_(this);
-
+  PathSegList get animatedPathSegList => wrap_jso(_blink.BlinkSVGPathElement.instance.animatedPathSegList_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPathElement.normalizedPathSegList')
   @DocsEditable()
-  PathSegList get normalizedPathSegList => _blink.BlinkSVGPathElement.instance.normalizedPathSegList_Getter_(this);
-
+  PathSegList get normalizedPathSegList => wrap_jso(_blink.BlinkSVGPathElement.instance.normalizedPathSegList_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPathElement.pathLength')
   @DocsEditable()
-  AnimatedNumber get pathLength => _blink.BlinkSVGPathElement.instance.pathLength_Getter_(this);
-
+  AnimatedNumber get pathLength => wrap_jso(_blink.BlinkSVGPathElement.instance.pathLength_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPathElement.pathSegList')
   @DocsEditable()
-  PathSegList get pathSegList => _blink.BlinkSVGPathElement.instance.pathSegList_Getter_(this);
-
+  PathSegList get pathSegList => wrap_jso(_blink.BlinkSVGPathElement.instance.pathSegList_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPathElement.createSVGPathSegArcAbs')
   @DocsEditable()
-  PathSegArcAbs createSvgPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) => _blink.BlinkSVGPathElement.instance.createSVGPathSegArcAbs_Callback_7_(this, x, y, r1, r2, angle, largeArcFlag, sweepFlag);
-
+  PathSegArcAbs createSvgPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) => _blink.BlinkSVGPathElement.instance.createSVGPathSegArcAbs_Callback_7_(unwrap_jso(this), x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+  
   @DomName('SVGPathElement.createSVGPathSegArcRel')
   @DocsEditable()
-  PathSegArcRel createSvgPathSegArcRel(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) => _blink.BlinkSVGPathElement.instance.createSVGPathSegArcRel_Callback_7_(this, x, y, r1, r2, angle, largeArcFlag, sweepFlag);
-
+  PathSegArcRel createSvgPathSegArcRel(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) => _blink.BlinkSVGPathElement.instance.createSVGPathSegArcRel_Callback_7_(unwrap_jso(this), x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+  
   @DomName('SVGPathElement.createSVGPathSegClosePath')
   @DocsEditable()
-  PathSegClosePath createSvgPathSegClosePath() => _blink.BlinkSVGPathElement.instance.createSVGPathSegClosePath_Callback_0_(this);
-
+  PathSegClosePath createSvgPathSegClosePath() => _blink.BlinkSVGPathElement.instance.createSVGPathSegClosePath_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGPathElement.createSVGPathSegCurvetoCubicAbs')
   @DocsEditable()
-  PathSegCurvetoCubicAbs createSvgPathSegCurvetoCubicAbs(num x, num y, num x1, num y1, num x2, num y2) => _blink.BlinkSVGPathElement.instance.createSVGPathSegCurvetoCubicAbs_Callback_6_(this, x, y, x1, y1, x2, y2);
-
+  PathSegCurvetoCubicAbs createSvgPathSegCurvetoCubicAbs(num x, num y, num x1, num y1, num x2, num y2) => _blink.BlinkSVGPathElement.instance.createSVGPathSegCurvetoCubicAbs_Callback_6_(unwrap_jso(this), x, y, x1, y1, x2, y2);
+  
   @DomName('SVGPathElement.createSVGPathSegCurvetoCubicRel')
   @DocsEditable()
-  PathSegCurvetoCubicRel createSvgPathSegCurvetoCubicRel(num x, num y, num x1, num y1, num x2, num y2) => _blink.BlinkSVGPathElement.instance.createSVGPathSegCurvetoCubicRel_Callback_6_(this, x, y, x1, y1, x2, y2);
-
+  PathSegCurvetoCubicRel createSvgPathSegCurvetoCubicRel(num x, num y, num x1, num y1, num x2, num y2) => _blink.BlinkSVGPathElement.instance.createSVGPathSegCurvetoCubicRel_Callback_6_(unwrap_jso(this), x, y, x1, y1, x2, y2);
+  
   @DomName('SVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs')
   @DocsEditable()
-  PathSegCurvetoCubicSmoothAbs createSvgPathSegCurvetoCubicSmoothAbs(num x, num y, num x2, num y2) => _blink.BlinkSVGPathElement.instance.createSVGPathSegCurvetoCubicSmoothAbs_Callback_4_(this, x, y, x2, y2);
-
+  PathSegCurvetoCubicSmoothAbs createSvgPathSegCurvetoCubicSmoothAbs(num x, num y, num x2, num y2) => _blink.BlinkSVGPathElement.instance.createSVGPathSegCurvetoCubicSmoothAbs_Callback_4_(unwrap_jso(this), x, y, x2, y2);
+  
   @DomName('SVGPathElement.createSVGPathSegCurvetoCubicSmoothRel')
   @DocsEditable()
-  PathSegCurvetoCubicSmoothRel createSvgPathSegCurvetoCubicSmoothRel(num x, num y, num x2, num y2) => _blink.BlinkSVGPathElement.instance.createSVGPathSegCurvetoCubicSmoothRel_Callback_4_(this, x, y, x2, y2);
-
+  PathSegCurvetoCubicSmoothRel createSvgPathSegCurvetoCubicSmoothRel(num x, num y, num x2, num y2) => _blink.BlinkSVGPathElement.instance.createSVGPathSegCurvetoCubicSmoothRel_Callback_4_(unwrap_jso(this), x, y, x2, y2);
+  
   @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticAbs')
   @DocsEditable()
-  PathSegCurvetoQuadraticAbs createSvgPathSegCurvetoQuadraticAbs(num x, num y, num x1, num y1) => _blink.BlinkSVGPathElement.instance.createSVGPathSegCurvetoQuadraticAbs_Callback_4_(this, x, y, x1, y1);
-
+  PathSegCurvetoQuadraticAbs createSvgPathSegCurvetoQuadraticAbs(num x, num y, num x1, num y1) => _blink.BlinkSVGPathElement.instance.createSVGPathSegCurvetoQuadraticAbs_Callback_4_(unwrap_jso(this), x, y, x1, y1);
+  
   @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticRel')
   @DocsEditable()
-  PathSegCurvetoQuadraticRel createSvgPathSegCurvetoQuadraticRel(num x, num y, num x1, num y1) => _blink.BlinkSVGPathElement.instance.createSVGPathSegCurvetoQuadraticRel_Callback_4_(this, x, y, x1, y1);
-
+  PathSegCurvetoQuadraticRel createSvgPathSegCurvetoQuadraticRel(num x, num y, num x1, num y1) => _blink.BlinkSVGPathElement.instance.createSVGPathSegCurvetoQuadraticRel_Callback_4_(unwrap_jso(this), x, y, x1, y1);
+  
   @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs')
   @DocsEditable()
-  PathSegCurvetoQuadraticSmoothAbs createSvgPathSegCurvetoQuadraticSmoothAbs(num x, num y) => _blink.BlinkSVGPathElement.instance.createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_2_(this, x, y);
-
+  PathSegCurvetoQuadraticSmoothAbs createSvgPathSegCurvetoQuadraticSmoothAbs(num x, num y) => _blink.BlinkSVGPathElement.instance.createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_2_(unwrap_jso(this), x, y);
+  
   @DomName('SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel')
   @DocsEditable()
-  PathSegCurvetoQuadraticSmoothRel createSvgPathSegCurvetoQuadraticSmoothRel(num x, num y) => _blink.BlinkSVGPathElement.instance.createSVGPathSegCurvetoQuadraticSmoothRel_Callback_2_(this, x, y);
-
+  PathSegCurvetoQuadraticSmoothRel createSvgPathSegCurvetoQuadraticSmoothRel(num x, num y) => _blink.BlinkSVGPathElement.instance.createSVGPathSegCurvetoQuadraticSmoothRel_Callback_2_(unwrap_jso(this), x, y);
+  
   @DomName('SVGPathElement.createSVGPathSegLinetoAbs')
   @DocsEditable()
-  PathSegLinetoAbs createSvgPathSegLinetoAbs(num x, num y) => _blink.BlinkSVGPathElement.instance.createSVGPathSegLinetoAbs_Callback_2_(this, x, y);
-
+  PathSegLinetoAbs createSvgPathSegLinetoAbs(num x, num y) => _blink.BlinkSVGPathElement.instance.createSVGPathSegLinetoAbs_Callback_2_(unwrap_jso(this), x, y);
+  
   @DomName('SVGPathElement.createSVGPathSegLinetoHorizontalAbs')
   @DocsEditable()
-  PathSegLinetoHorizontalAbs createSvgPathSegLinetoHorizontalAbs(num x) => _blink.BlinkSVGPathElement.instance.createSVGPathSegLinetoHorizontalAbs_Callback_1_(this, x);
-
+  PathSegLinetoHorizontalAbs createSvgPathSegLinetoHorizontalAbs(num x) => _blink.BlinkSVGPathElement.instance.createSVGPathSegLinetoHorizontalAbs_Callback_1_(unwrap_jso(this), x);
+  
   @DomName('SVGPathElement.createSVGPathSegLinetoHorizontalRel')
   @DocsEditable()
-  PathSegLinetoHorizontalRel createSvgPathSegLinetoHorizontalRel(num x) => _blink.BlinkSVGPathElement.instance.createSVGPathSegLinetoHorizontalRel_Callback_1_(this, x);
-
+  PathSegLinetoHorizontalRel createSvgPathSegLinetoHorizontalRel(num x) => _blink.BlinkSVGPathElement.instance.createSVGPathSegLinetoHorizontalRel_Callback_1_(unwrap_jso(this), x);
+  
   @DomName('SVGPathElement.createSVGPathSegLinetoRel')
   @DocsEditable()
-  PathSegLinetoRel createSvgPathSegLinetoRel(num x, num y) => _blink.BlinkSVGPathElement.instance.createSVGPathSegLinetoRel_Callback_2_(this, x, y);
-
+  PathSegLinetoRel createSvgPathSegLinetoRel(num x, num y) => _blink.BlinkSVGPathElement.instance.createSVGPathSegLinetoRel_Callback_2_(unwrap_jso(this), x, y);
+  
   @DomName('SVGPathElement.createSVGPathSegLinetoVerticalAbs')
   @DocsEditable()
-  PathSegLinetoVerticalAbs createSvgPathSegLinetoVerticalAbs(num y) => _blink.BlinkSVGPathElement.instance.createSVGPathSegLinetoVerticalAbs_Callback_1_(this, y);
-
+  PathSegLinetoVerticalAbs createSvgPathSegLinetoVerticalAbs(num y) => _blink.BlinkSVGPathElement.instance.createSVGPathSegLinetoVerticalAbs_Callback_1_(unwrap_jso(this), y);
+  
   @DomName('SVGPathElement.createSVGPathSegLinetoVerticalRel')
   @DocsEditable()
-  PathSegLinetoVerticalRel createSvgPathSegLinetoVerticalRel(num y) => _blink.BlinkSVGPathElement.instance.createSVGPathSegLinetoVerticalRel_Callback_1_(this, y);
-
+  PathSegLinetoVerticalRel createSvgPathSegLinetoVerticalRel(num y) => _blink.BlinkSVGPathElement.instance.createSVGPathSegLinetoVerticalRel_Callback_1_(unwrap_jso(this), y);
+  
   @DomName('SVGPathElement.createSVGPathSegMovetoAbs')
   @DocsEditable()
-  PathSegMovetoAbs createSvgPathSegMovetoAbs(num x, num y) => _blink.BlinkSVGPathElement.instance.createSVGPathSegMovetoAbs_Callback_2_(this, x, y);
-
+  PathSegMovetoAbs createSvgPathSegMovetoAbs(num x, num y) => _blink.BlinkSVGPathElement.instance.createSVGPathSegMovetoAbs_Callback_2_(unwrap_jso(this), x, y);
+  
   @DomName('SVGPathElement.createSVGPathSegMovetoRel')
   @DocsEditable()
-  PathSegMovetoRel createSvgPathSegMovetoRel(num x, num y) => _blink.BlinkSVGPathElement.instance.createSVGPathSegMovetoRel_Callback_2_(this, x, y);
-
+  PathSegMovetoRel createSvgPathSegMovetoRel(num x, num y) => _blink.BlinkSVGPathElement.instance.createSVGPathSegMovetoRel_Callback_2_(unwrap_jso(this), x, y);
+  
   @DomName('SVGPathElement.getPathSegAtLength')
   @DocsEditable()
-  int getPathSegAtLength(num distance) => _blink.BlinkSVGPathElement.instance.getPathSegAtLength_Callback_1_(this, distance);
-
+  int getPathSegAtLength(num distance) => _blink.BlinkSVGPathElement.instance.getPathSegAtLength_Callback_1_(unwrap_jso(this), distance);
+  
   @DomName('SVGPathElement.getPointAtLength')
   @DocsEditable()
-  Point getPointAtLength(num distance) => _blink.BlinkSVGPathElement.instance.getPointAtLength_Callback_1_(this, distance);
-
+  Point getPointAtLength(num distance) => _blink.BlinkSVGPathElement.instance.getPointAtLength_Callback_1_(unwrap_jso(this), distance);
+  
   @DomName('SVGPathElement.getTotalLength')
   @DocsEditable()
-  double getTotalLength() => _blink.BlinkSVGPathElement.instance.getTotalLength_Callback_0_(this);
-
+  double getTotalLength() => _blink.BlinkSVGPathElement.instance.getTotalLength_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -3760,12 +3761,12 @@
 
   @DomName('SVGPathSeg.pathSegType')
   @DocsEditable()
-  int get pathSegType => _blink.BlinkSVGPathSeg.instance.pathSegType_Getter_(this);
-
+  int get pathSegType => _blink.BlinkSVGPathSeg.instance.pathSegType_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSeg.pathSegTypeAsLetter')
   @DocsEditable()
-  String get pathSegTypeAsLetter => _blink.BlinkSVGPathSeg.instance.pathSegTypeAsLetter_Getter_(this);
-
+  String get pathSegTypeAsLetter => _blink.BlinkSVGPathSeg.instance.pathSegTypeAsLetter_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -3783,60 +3784,60 @@
 
   @DomName('SVGPathSegArcAbs.angle')
   @DocsEditable()
-  num get angle => _blink.BlinkSVGPathSegArcAbs.instance.angle_Getter_(this);
-
+  num get angle => _blink.BlinkSVGPathSegArcAbs.instance.angle_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegArcAbs.angle')
   @DocsEditable()
-  void set angle(num value) => _blink.BlinkSVGPathSegArcAbs.instance.angle_Setter_(this, value);
-
+  void set angle(num value) => _blink.BlinkSVGPathSegArcAbs.instance.angle_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegArcAbs.largeArcFlag')
   @DocsEditable()
-  bool get largeArcFlag => _blink.BlinkSVGPathSegArcAbs.instance.largeArcFlag_Getter_(this);
-
+  bool get largeArcFlag => _blink.BlinkSVGPathSegArcAbs.instance.largeArcFlag_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegArcAbs.largeArcFlag')
   @DocsEditable()
-  void set largeArcFlag(bool value) => _blink.BlinkSVGPathSegArcAbs.instance.largeArcFlag_Setter_(this, value);
-
+  void set largeArcFlag(bool value) => _blink.BlinkSVGPathSegArcAbs.instance.largeArcFlag_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegArcAbs.r1')
   @DocsEditable()
-  num get r1 => _blink.BlinkSVGPathSegArcAbs.instance.r1_Getter_(this);
-
+  num get r1 => _blink.BlinkSVGPathSegArcAbs.instance.r1_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegArcAbs.r1')
   @DocsEditable()
-  void set r1(num value) => _blink.BlinkSVGPathSegArcAbs.instance.r1_Setter_(this, value);
-
+  void set r1(num value) => _blink.BlinkSVGPathSegArcAbs.instance.r1_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegArcAbs.r2')
   @DocsEditable()
-  num get r2 => _blink.BlinkSVGPathSegArcAbs.instance.r2_Getter_(this);
-
+  num get r2 => _blink.BlinkSVGPathSegArcAbs.instance.r2_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegArcAbs.r2')
   @DocsEditable()
-  void set r2(num value) => _blink.BlinkSVGPathSegArcAbs.instance.r2_Setter_(this, value);
-
+  void set r2(num value) => _blink.BlinkSVGPathSegArcAbs.instance.r2_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegArcAbs.sweepFlag')
   @DocsEditable()
-  bool get sweepFlag => _blink.BlinkSVGPathSegArcAbs.instance.sweepFlag_Getter_(this);
-
+  bool get sweepFlag => _blink.BlinkSVGPathSegArcAbs.instance.sweepFlag_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegArcAbs.sweepFlag')
   @DocsEditable()
-  void set sweepFlag(bool value) => _blink.BlinkSVGPathSegArcAbs.instance.sweepFlag_Setter_(this, value);
-
+  void set sweepFlag(bool value) => _blink.BlinkSVGPathSegArcAbs.instance.sweepFlag_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegArcAbs.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegArcAbs.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGPathSegArcAbs.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegArcAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegArcAbs.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGPathSegArcAbs.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegArcAbs.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegArcAbs.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGPathSegArcAbs.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegArcAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegArcAbs.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGPathSegArcAbs.instance.y_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -3854,60 +3855,60 @@
 
   @DomName('SVGPathSegArcRel.angle')
   @DocsEditable()
-  num get angle => _blink.BlinkSVGPathSegArcRel.instance.angle_Getter_(this);
-
+  num get angle => _blink.BlinkSVGPathSegArcRel.instance.angle_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegArcRel.angle')
   @DocsEditable()
-  void set angle(num value) => _blink.BlinkSVGPathSegArcRel.instance.angle_Setter_(this, value);
-
+  void set angle(num value) => _blink.BlinkSVGPathSegArcRel.instance.angle_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegArcRel.largeArcFlag')
   @DocsEditable()
-  bool get largeArcFlag => _blink.BlinkSVGPathSegArcRel.instance.largeArcFlag_Getter_(this);
-
+  bool get largeArcFlag => _blink.BlinkSVGPathSegArcRel.instance.largeArcFlag_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegArcRel.largeArcFlag')
   @DocsEditable()
-  void set largeArcFlag(bool value) => _blink.BlinkSVGPathSegArcRel.instance.largeArcFlag_Setter_(this, value);
-
+  void set largeArcFlag(bool value) => _blink.BlinkSVGPathSegArcRel.instance.largeArcFlag_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegArcRel.r1')
   @DocsEditable()
-  num get r1 => _blink.BlinkSVGPathSegArcRel.instance.r1_Getter_(this);
-
+  num get r1 => _blink.BlinkSVGPathSegArcRel.instance.r1_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegArcRel.r1')
   @DocsEditable()
-  void set r1(num value) => _blink.BlinkSVGPathSegArcRel.instance.r1_Setter_(this, value);
-
+  void set r1(num value) => _blink.BlinkSVGPathSegArcRel.instance.r1_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegArcRel.r2')
   @DocsEditable()
-  num get r2 => _blink.BlinkSVGPathSegArcRel.instance.r2_Getter_(this);
-
+  num get r2 => _blink.BlinkSVGPathSegArcRel.instance.r2_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegArcRel.r2')
   @DocsEditable()
-  void set r2(num value) => _blink.BlinkSVGPathSegArcRel.instance.r2_Setter_(this, value);
-
+  void set r2(num value) => _blink.BlinkSVGPathSegArcRel.instance.r2_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegArcRel.sweepFlag')
   @DocsEditable()
-  bool get sweepFlag => _blink.BlinkSVGPathSegArcRel.instance.sweepFlag_Getter_(this);
-
+  bool get sweepFlag => _blink.BlinkSVGPathSegArcRel.instance.sweepFlag_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegArcRel.sweepFlag')
   @DocsEditable()
-  void set sweepFlag(bool value) => _blink.BlinkSVGPathSegArcRel.instance.sweepFlag_Setter_(this, value);
-
+  void set sweepFlag(bool value) => _blink.BlinkSVGPathSegArcRel.instance.sweepFlag_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegArcRel.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegArcRel.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGPathSegArcRel.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegArcRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegArcRel.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGPathSegArcRel.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegArcRel.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegArcRel.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGPathSegArcRel.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegArcRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegArcRel.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGPathSegArcRel.instance.y_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -3940,52 +3941,52 @@
 
   @DomName('SVGPathSegCurvetoCubicAbs.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoCubicAbs.x1')
   @DocsEditable()
-  num get x1 => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.x1_Getter_(this);
-
+  num get x1 => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.x1_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicAbs.x1')
   @DocsEditable()
-  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.x1_Setter_(this, value);
-
+  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.x1_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoCubicAbs.x2')
   @DocsEditable()
-  num get x2 => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.x2_Getter_(this);
-
+  num get x2 => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.x2_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicAbs.x2')
   @DocsEditable()
-  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.x2_Setter_(this, value);
-
+  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.x2_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoCubicAbs.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.y_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoCubicAbs.y1')
   @DocsEditable()
-  num get y1 => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.y1_Getter_(this);
-
+  num get y1 => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.y1_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicAbs.y1')
   @DocsEditable()
-  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.y1_Setter_(this, value);
-
+  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.y1_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoCubicAbs.y2')
   @DocsEditable()
-  num get y2 => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.y2_Getter_(this);
-
+  num get y2 => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.y2_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicAbs.y2')
   @DocsEditable()
-  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.y2_Setter_(this, value);
-
+  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicAbs.instance.y2_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -4003,52 +4004,52 @@
 
   @DomName('SVGPathSegCurvetoCubicRel.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoCubicRel.x1')
   @DocsEditable()
-  num get x1 => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.x1_Getter_(this);
-
+  num get x1 => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.x1_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicRel.x1')
   @DocsEditable()
-  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.x1_Setter_(this, value);
-
+  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.x1_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoCubicRel.x2')
   @DocsEditable()
-  num get x2 => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.x2_Getter_(this);
-
+  num get x2 => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.x2_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicRel.x2')
   @DocsEditable()
-  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.x2_Setter_(this, value);
-
+  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.x2_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoCubicRel.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.y_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoCubicRel.y1')
   @DocsEditable()
-  num get y1 => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.y1_Getter_(this);
-
+  num get y1 => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.y1_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicRel.y1')
   @DocsEditable()
-  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.y1_Setter_(this, value);
-
+  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.y1_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoCubicRel.y2')
   @DocsEditable()
-  num get y2 => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.y2_Getter_(this);
-
+  num get y2 => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.y2_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicRel.y2')
   @DocsEditable()
-  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.y2_Setter_(this, value);
-
+  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicRel.instance.y2_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -4066,36 +4067,36 @@
 
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.x2')
   @DocsEditable()
-  num get x2 => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.instance.x2_Getter_(this);
-
+  num get x2 => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.instance.x2_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.x2')
   @DocsEditable()
-  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.instance.x2_Setter_(this, value);
-
+  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.instance.x2_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.instance.y_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.y2')
   @DocsEditable()
-  num get y2 => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.instance.y2_Getter_(this);
-
+  num get y2 => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.instance.y2_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicSmoothAbs.y2')
   @DocsEditable()
-  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.instance.y2_Setter_(this, value);
-
+  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothAbs.instance.y2_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -4113,36 +4114,36 @@
 
   @DomName('SVGPathSegCurvetoCubicSmoothRel.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicSmoothRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoCubicSmoothRel.x2')
   @DocsEditable()
-  num get x2 => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.instance.x2_Getter_(this);
-
+  num get x2 => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.instance.x2_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicSmoothRel.x2')
   @DocsEditable()
-  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.instance.x2_Setter_(this, value);
-
+  void set x2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.instance.x2_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoCubicSmoothRel.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicSmoothRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.instance.y_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoCubicSmoothRel.y2')
   @DocsEditable()
-  num get y2 => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.instance.y2_Getter_(this);
-
+  num get y2 => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.instance.y2_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoCubicSmoothRel.y2')
   @DocsEditable()
-  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.instance.y2_Setter_(this, value);
-
+  void set y2(num value) => _blink.BlinkSVGPathSegCurvetoCubicSmoothRel.instance.y2_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -4160,36 +4161,36 @@
 
   @DomName('SVGPathSegCurvetoQuadraticAbs.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoQuadraticAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoQuadraticAbs.x1')
   @DocsEditable()
-  num get x1 => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.instance.x1_Getter_(this);
-
+  num get x1 => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.instance.x1_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoQuadraticAbs.x1')
   @DocsEditable()
-  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.instance.x1_Setter_(this, value);
-
+  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.instance.x1_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoQuadraticAbs.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoQuadraticAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.instance.y_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoQuadraticAbs.y1')
   @DocsEditable()
-  num get y1 => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.instance.y1_Getter_(this);
-
+  num get y1 => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.instance.y1_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoQuadraticAbs.y1')
   @DocsEditable()
-  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.instance.y1_Setter_(this, value);
-
+  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticAbs.instance.y1_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -4207,36 +4208,36 @@
 
   @DomName('SVGPathSegCurvetoQuadraticRel.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegCurvetoQuadraticRel.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGPathSegCurvetoQuadraticRel.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoQuadraticRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoQuadraticRel.x1')
   @DocsEditable()
-  num get x1 => _blink.BlinkSVGPathSegCurvetoQuadraticRel.instance.x1_Getter_(this);
-
+  num get x1 => _blink.BlinkSVGPathSegCurvetoQuadraticRel.instance.x1_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoQuadraticRel.x1')
   @DocsEditable()
-  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.instance.x1_Setter_(this, value);
-
+  void set x1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.instance.x1_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoQuadraticRel.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegCurvetoQuadraticRel.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGPathSegCurvetoQuadraticRel.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoQuadraticRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.instance.y_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoQuadraticRel.y1')
   @DocsEditable()
-  num get y1 => _blink.BlinkSVGPathSegCurvetoQuadraticRel.instance.y1_Getter_(this);
-
+  num get y1 => _blink.BlinkSVGPathSegCurvetoQuadraticRel.instance.y1_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoQuadraticRel.y1')
   @DocsEditable()
-  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.instance.y1_Setter_(this, value);
-
+  void set y1(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticRel.instance.y1_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -4254,20 +4255,20 @@
 
   @DomName('SVGPathSegCurvetoQuadraticSmoothAbs.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoQuadraticSmoothAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoQuadraticSmoothAbs.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoQuadraticSmoothAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothAbs.instance.y_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -4285,20 +4286,20 @@
 
   @DomName('SVGPathSegCurvetoQuadraticSmoothRel.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoQuadraticSmoothRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegCurvetoQuadraticSmoothRel.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegCurvetoQuadraticSmoothRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGPathSegCurvetoQuadraticSmoothRel.instance.y_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -4316,20 +4317,20 @@
 
   @DomName('SVGPathSegLinetoAbs.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegLinetoAbs.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGPathSegLinetoAbs.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegLinetoAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegLinetoAbs.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGPathSegLinetoAbs.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegLinetoAbs.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegLinetoAbs.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGPathSegLinetoAbs.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegLinetoAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegLinetoAbs.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGPathSegLinetoAbs.instance.y_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -4347,12 +4348,12 @@
 
   @DomName('SVGPathSegLinetoHorizontalAbs.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegLinetoHorizontalAbs.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGPathSegLinetoHorizontalAbs.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegLinetoHorizontalAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegLinetoHorizontalAbs.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGPathSegLinetoHorizontalAbs.instance.x_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -4370,12 +4371,12 @@
 
   @DomName('SVGPathSegLinetoHorizontalRel.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegLinetoHorizontalRel.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGPathSegLinetoHorizontalRel.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegLinetoHorizontalRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegLinetoHorizontalRel.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGPathSegLinetoHorizontalRel.instance.x_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -4393,20 +4394,20 @@
 
   @DomName('SVGPathSegLinetoRel.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegLinetoRel.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGPathSegLinetoRel.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegLinetoRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegLinetoRel.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGPathSegLinetoRel.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegLinetoRel.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegLinetoRel.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGPathSegLinetoRel.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegLinetoRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegLinetoRel.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGPathSegLinetoRel.instance.y_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -4424,12 +4425,12 @@
 
   @DomName('SVGPathSegLinetoVerticalAbs.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegLinetoVerticalAbs.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGPathSegLinetoVerticalAbs.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegLinetoVerticalAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegLinetoVerticalAbs.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGPathSegLinetoVerticalAbs.instance.y_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -4447,12 +4448,12 @@
 
   @DomName('SVGPathSegLinetoVerticalRel.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegLinetoVerticalRel.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGPathSegLinetoVerticalRel.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegLinetoVerticalRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegLinetoVerticalRel.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGPathSegLinetoVerticalRel.instance.y_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -4471,12 +4472,12 @@
   @DomName('SVGPathSegList.length')
   @DocsEditable()
   @Experimental() // untriaged
-  int get length => _blink.BlinkSVGPathSegList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkSVGPathSegList.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegList.numberOfItems')
   @DocsEditable()
-  int get numberOfItems => _blink.BlinkSVGPathSegList.instance.numberOfItems_Getter_(this);
-
+  int get numberOfItems => _blink.BlinkSVGPathSegList.instance.numberOfItems_Getter_(unwrap_jso(this));
+  
   PathSeg operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
@@ -4524,36 +4525,36 @@
   @DomName('SVGPathSegList.__setter__')
   @DocsEditable()
   @Experimental() // untriaged
-  void __setter__(int index, PathSeg value) => _blink.BlinkSVGPathSegList.instance.$__setter___Callback_2_(this, index, value);
-
+  void __setter__(int index, PathSeg value) => _blink.BlinkSVGPathSegList.instance.$__setter___Callback_2_(unwrap_jso(this), index, unwrap_jso(value));
+  
   @DomName('SVGPathSegList.appendItem')
   @DocsEditable()
-  PathSeg appendItem(PathSeg newItem) => _blink.BlinkSVGPathSegList.instance.appendItem_Callback_1_(this, newItem);
-
+  PathSeg appendItem(PathSeg newItem) => _blink.BlinkSVGPathSegList.instance.appendItem_Callback_1_(unwrap_jso(this), unwrap_jso(newItem));
+  
   @DomName('SVGPathSegList.clear')
   @DocsEditable()
-  void clear() => _blink.BlinkSVGPathSegList.instance.clear_Callback_0_(this);
-
+  void clear() => _blink.BlinkSVGPathSegList.instance.clear_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGPathSegList.getItem')
   @DocsEditable()
-  PathSeg getItem(int index) => _blink.BlinkSVGPathSegList.instance.getItem_Callback_1_(this, index);
-
+  PathSeg getItem(int index) => _blink.BlinkSVGPathSegList.instance.getItem_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('SVGPathSegList.initialize')
   @DocsEditable()
-  PathSeg initialize(PathSeg newItem) => _blink.BlinkSVGPathSegList.instance.initialize_Callback_1_(this, newItem);
-
+  PathSeg initialize(PathSeg newItem) => _blink.BlinkSVGPathSegList.instance.initialize_Callback_1_(unwrap_jso(this), unwrap_jso(newItem));
+  
   @DomName('SVGPathSegList.insertItemBefore')
   @DocsEditable()
-  PathSeg insertItemBefore(PathSeg newItem, int index) => _blink.BlinkSVGPathSegList.instance.insertItemBefore_Callback_2_(this, newItem, index);
-
+  PathSeg insertItemBefore(PathSeg newItem, int index) => _blink.BlinkSVGPathSegList.instance.insertItemBefore_Callback_2_(unwrap_jso(this), unwrap_jso(newItem), index);
+  
   @DomName('SVGPathSegList.removeItem')
   @DocsEditable()
-  PathSeg removeItem(int index) => _blink.BlinkSVGPathSegList.instance.removeItem_Callback_1_(this, index);
-
+  PathSeg removeItem(int index) => _blink.BlinkSVGPathSegList.instance.removeItem_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('SVGPathSegList.replaceItem')
   @DocsEditable()
-  PathSeg replaceItem(PathSeg newItem, int index) => _blink.BlinkSVGPathSegList.instance.replaceItem_Callback_2_(this, newItem, index);
-
+  PathSeg replaceItem(PathSeg newItem, int index) => _blink.BlinkSVGPathSegList.instance.replaceItem_Callback_2_(unwrap_jso(this), unwrap_jso(newItem), index);
+  
 }
 // 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
@@ -4571,20 +4572,20 @@
 
   @DomName('SVGPathSegMovetoAbs.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegMovetoAbs.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGPathSegMovetoAbs.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegMovetoAbs.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegMovetoAbs.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGPathSegMovetoAbs.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegMovetoAbs.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegMovetoAbs.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGPathSegMovetoAbs.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegMovetoAbs.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegMovetoAbs.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGPathSegMovetoAbs.instance.y_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -4602,20 +4603,20 @@
 
   @DomName('SVGPathSegMovetoRel.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPathSegMovetoRel.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGPathSegMovetoRel.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegMovetoRel.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPathSegMovetoRel.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGPathSegMovetoRel.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPathSegMovetoRel.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPathSegMovetoRel.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGPathSegMovetoRel.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPathSegMovetoRel.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPathSegMovetoRel.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGPathSegMovetoRel.instance.y_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -4643,60 +4644,60 @@
 
   @DomName('SVGPatternElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGPatternElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGPatternElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPatternElement.patternContentUnits')
   @DocsEditable()
-  AnimatedEnumeration get patternContentUnits => _blink.BlinkSVGPatternElement.instance.patternContentUnits_Getter_(this);
-
+  AnimatedEnumeration get patternContentUnits => wrap_jso(_blink.BlinkSVGPatternElement.instance.patternContentUnits_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPatternElement.patternTransform')
   @DocsEditable()
-  AnimatedTransformList get patternTransform => _blink.BlinkSVGPatternElement.instance.patternTransform_Getter_(this);
-
+  AnimatedTransformList get patternTransform => wrap_jso(_blink.BlinkSVGPatternElement.instance.patternTransform_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPatternElement.patternUnits')
   @DocsEditable()
-  AnimatedEnumeration get patternUnits => _blink.BlinkSVGPatternElement.instance.patternUnits_Getter_(this);
-
+  AnimatedEnumeration get patternUnits => wrap_jso(_blink.BlinkSVGPatternElement.instance.patternUnits_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPatternElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGPatternElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGPatternElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPatternElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGPatternElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGPatternElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPatternElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGPatternElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGPatternElement.instance.y_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPatternElement.preserveAspectRatio')
   @DocsEditable()
-  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGPatternElement.instance.preserveAspectRatio_Getter_(this);
-
+  AnimatedPreserveAspectRatio get preserveAspectRatio => wrap_jso(_blink.BlinkSVGPatternElement.instance.preserveAspectRatio_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPatternElement.viewBox')
   @DocsEditable()
-  AnimatedRect get viewBox => _blink.BlinkSVGPatternElement.instance.viewBox_Getter_(this);
-
+  AnimatedRect get viewBox => wrap_jso(_blink.BlinkSVGPatternElement.instance.viewBox_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPatternElement.requiredExtensions')
   @DocsEditable()
-  StringList get requiredExtensions => _blink.BlinkSVGPatternElement.instance.requiredExtensions_Getter_(this);
-
+  StringList get requiredExtensions => wrap_jso(_blink.BlinkSVGPatternElement.instance.requiredExtensions_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPatternElement.requiredFeatures')
   @DocsEditable()
-  StringList get requiredFeatures => _blink.BlinkSVGPatternElement.instance.requiredFeatures_Getter_(this);
-
+  StringList get requiredFeatures => wrap_jso(_blink.BlinkSVGPatternElement.instance.requiredFeatures_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPatternElement.systemLanguage')
   @DocsEditable()
-  StringList get systemLanguage => _blink.BlinkSVGPatternElement.instance.systemLanguage_Getter_(this);
-
+  StringList get systemLanguage => wrap_jso(_blink.BlinkSVGPatternElement.instance.systemLanguage_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPatternElement.hasExtension')
   @DocsEditable()
-  bool hasExtension(String extension) => _blink.BlinkSVGPatternElement.instance.hasExtension_Callback_1_(this, extension);
-
+  bool hasExtension(String extension) => _blink.BlinkSVGPatternElement.instance.hasExtension_Callback_1_(unwrap_jso(this), extension);
+  
   @DomName('SVGPatternElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGPatternElement.instance.href_Getter_(this);
-
+  AnimatedString get href => wrap_jso(_blink.BlinkSVGPatternElement.instance.href_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -4714,24 +4715,24 @@
 
   @DomName('SVGPoint.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGPoint.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGPoint.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPoint.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGPoint.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGPoint.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPoint.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGPoint.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGPoint.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPoint.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGPoint.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGPoint.instance.y_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPoint.matrixTransform')
   @DocsEditable()
-  Point matrixTransform(Matrix matrix) => _blink.BlinkSVGPoint.instance.matrixTransform_Callback_1_(this, matrix);
-
+  Point matrixTransform(Matrix matrix) => _blink.BlinkSVGPoint.instance.matrixTransform_Callback_1_(unwrap_jso(this), unwrap_jso(matrix));
+  
 }
 // 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
@@ -4750,45 +4751,45 @@
   @DomName('SVGPointList.length')
   @DocsEditable()
   @Experimental() // untriaged
-  int get length => _blink.BlinkSVGPointList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkSVGPointList.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPointList.numberOfItems')
   @DocsEditable()
-  int get numberOfItems => _blink.BlinkSVGPointList.instance.numberOfItems_Getter_(this);
-
+  int get numberOfItems => _blink.BlinkSVGPointList.instance.numberOfItems_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPointList.__setter__')
   @DocsEditable()
   @Experimental() // untriaged
-  void __setter__(int index, Point value) => _blink.BlinkSVGPointList.instance.$__setter___Callback_2_(this, index, value);
-
+  void __setter__(int index, Point value) => _blink.BlinkSVGPointList.instance.$__setter___Callback_2_(unwrap_jso(this), index, unwrap_jso(value));
+  
   @DomName('SVGPointList.appendItem')
   @DocsEditable()
-  Point appendItem(Point item) => _blink.BlinkSVGPointList.instance.appendItem_Callback_1_(this, item);
-
+  Point appendItem(Point item) => _blink.BlinkSVGPointList.instance.appendItem_Callback_1_(unwrap_jso(this), unwrap_jso(item));
+  
   @DomName('SVGPointList.clear')
   @DocsEditable()
-  void clear() => _blink.BlinkSVGPointList.instance.clear_Callback_0_(this);
-
+  void clear() => _blink.BlinkSVGPointList.instance.clear_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGPointList.getItem')
   @DocsEditable()
-  Point getItem(int index) => _blink.BlinkSVGPointList.instance.getItem_Callback_1_(this, index);
-
+  Point getItem(int index) => _blink.BlinkSVGPointList.instance.getItem_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('SVGPointList.initialize')
   @DocsEditable()
-  Point initialize(Point item) => _blink.BlinkSVGPointList.instance.initialize_Callback_1_(this, item);
-
+  Point initialize(Point item) => _blink.BlinkSVGPointList.instance.initialize_Callback_1_(unwrap_jso(this), unwrap_jso(item));
+  
   @DomName('SVGPointList.insertItemBefore')
   @DocsEditable()
-  Point insertItemBefore(Point item, int index) => _blink.BlinkSVGPointList.instance.insertItemBefore_Callback_2_(this, item, index);
-
+  Point insertItemBefore(Point item, int index) => _blink.BlinkSVGPointList.instance.insertItemBefore_Callback_2_(unwrap_jso(this), unwrap_jso(item), index);
+  
   @DomName('SVGPointList.removeItem')
   @DocsEditable()
-  Point removeItem(int index) => _blink.BlinkSVGPointList.instance.removeItem_Callback_1_(this, index);
-
+  Point removeItem(int index) => _blink.BlinkSVGPointList.instance.removeItem_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('SVGPointList.replaceItem')
   @DocsEditable()
-  Point replaceItem(Point item, int index) => _blink.BlinkSVGPointList.instance.replaceItem_Callback_2_(this, item, index);
-
+  Point replaceItem(Point item, int index) => _blink.BlinkSVGPointList.instance.replaceItem_Callback_2_(unwrap_jso(this), unwrap_jso(item), index);
+  
 }
 // 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
@@ -4816,12 +4817,12 @@
 
   @DomName('SVGPolygonElement.animatedPoints')
   @DocsEditable()
-  PointList get animatedPoints => _blink.BlinkSVGPolygonElement.instance.animatedPoints_Getter_(this);
-
+  PointList get animatedPoints => wrap_jso(_blink.BlinkSVGPolygonElement.instance.animatedPoints_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPolygonElement.points')
   @DocsEditable()
-  PointList get points => _blink.BlinkSVGPolygonElement.instance.points_Getter_(this);
-
+  PointList get points => wrap_jso(_blink.BlinkSVGPolygonElement.instance.points_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -4849,12 +4850,12 @@
 
   @DomName('SVGPolylineElement.animatedPoints')
   @DocsEditable()
-  PointList get animatedPoints => _blink.BlinkSVGPolylineElement.instance.animatedPoints_Getter_(this);
-
+  PointList get animatedPoints => wrap_jso(_blink.BlinkSVGPolylineElement.instance.animatedPoints_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGPolylineElement.points')
   @DocsEditable()
-  PointList get points => _blink.BlinkSVGPolylineElement.instance.points_Getter_(this);
-
+  PointList get points => wrap_jso(_blink.BlinkSVGPolylineElement.instance.points_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -4928,20 +4929,20 @@
 
   @DomName('SVGPreserveAspectRatio.align')
   @DocsEditable()
-  int get align => _blink.BlinkSVGPreserveAspectRatio.instance.align_Getter_(this);
-
+  int get align => _blink.BlinkSVGPreserveAspectRatio.instance.align_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPreserveAspectRatio.align')
   @DocsEditable()
-  void set align(int value) => _blink.BlinkSVGPreserveAspectRatio.instance.align_Setter_(this, value);
-
+  void set align(int value) => _blink.BlinkSVGPreserveAspectRatio.instance.align_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGPreserveAspectRatio.meetOrSlice')
   @DocsEditable()
-  int get meetOrSlice => _blink.BlinkSVGPreserveAspectRatio.instance.meetOrSlice_Getter_(this);
-
+  int get meetOrSlice => _blink.BlinkSVGPreserveAspectRatio.instance.meetOrSlice_Getter_(unwrap_jso(this));
+  
   @DomName('SVGPreserveAspectRatio.meetOrSlice')
   @DocsEditable()
-  void set meetOrSlice(int value) => _blink.BlinkSVGPreserveAspectRatio.instance.meetOrSlice_Setter_(this, value);
-
+  void set meetOrSlice(int value) => _blink.BlinkSVGPreserveAspectRatio.instance.meetOrSlice_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -4969,28 +4970,28 @@
 
   @DomName('SVGRadialGradientElement.cx')
   @DocsEditable()
-  AnimatedLength get cx => _blink.BlinkSVGRadialGradientElement.instance.cx_Getter_(this);
-
+  AnimatedLength get cx => wrap_jso(_blink.BlinkSVGRadialGradientElement.instance.cx_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGRadialGradientElement.cy')
   @DocsEditable()
-  AnimatedLength get cy => _blink.BlinkSVGRadialGradientElement.instance.cy_Getter_(this);
-
+  AnimatedLength get cy => wrap_jso(_blink.BlinkSVGRadialGradientElement.instance.cy_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGRadialGradientElement.fr')
   @DocsEditable()
-  AnimatedLength get fr => _blink.BlinkSVGRadialGradientElement.instance.fr_Getter_(this);
-
+  AnimatedLength get fr => wrap_jso(_blink.BlinkSVGRadialGradientElement.instance.fr_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGRadialGradientElement.fx')
   @DocsEditable()
-  AnimatedLength get fx => _blink.BlinkSVGRadialGradientElement.instance.fx_Getter_(this);
-
+  AnimatedLength get fx => wrap_jso(_blink.BlinkSVGRadialGradientElement.instance.fx_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGRadialGradientElement.fy')
   @DocsEditable()
-  AnimatedLength get fy => _blink.BlinkSVGRadialGradientElement.instance.fy_Getter_(this);
-
+  AnimatedLength get fy => wrap_jso(_blink.BlinkSVGRadialGradientElement.instance.fy_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGRadialGradientElement.r')
   @DocsEditable()
-  AnimatedLength get r => _blink.BlinkSVGRadialGradientElement.instance.r_Getter_(this);
-
+  AnimatedLength get r => wrap_jso(_blink.BlinkSVGRadialGradientElement.instance.r_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -5008,36 +5009,36 @@
 
   @DomName('SVGRect.height')
   @DocsEditable()
-  num get height => _blink.BlinkSVGRect.instance.height_Getter_(this);
-
+  num get height => _blink.BlinkSVGRect.instance.height_Getter_(unwrap_jso(this));
+  
   @DomName('SVGRect.height')
   @DocsEditable()
-  void set height(num value) => _blink.BlinkSVGRect.instance.height_Setter_(this, value);
-
+  void set height(num value) => _blink.BlinkSVGRect.instance.height_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGRect.width')
   @DocsEditable()
-  num get width => _blink.BlinkSVGRect.instance.width_Getter_(this);
-
+  num get width => _blink.BlinkSVGRect.instance.width_Getter_(unwrap_jso(this));
+  
   @DomName('SVGRect.width')
   @DocsEditable()
-  void set width(num value) => _blink.BlinkSVGRect.instance.width_Setter_(this, value);
-
+  void set width(num value) => _blink.BlinkSVGRect.instance.width_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGRect.x')
   @DocsEditable()
-  num get x => _blink.BlinkSVGRect.instance.x_Getter_(this);
-
+  num get x => _blink.BlinkSVGRect.instance.x_Getter_(unwrap_jso(this));
+  
   @DomName('SVGRect.x')
   @DocsEditable()
-  void set x(num value) => _blink.BlinkSVGRect.instance.x_Setter_(this, value);
-
+  void set x(num value) => _blink.BlinkSVGRect.instance.x_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGRect.y')
   @DocsEditable()
-  num get y => _blink.BlinkSVGRect.instance.y_Getter_(this);
-
+  num get y => _blink.BlinkSVGRect.instance.y_Getter_(unwrap_jso(this));
+  
   @DomName('SVGRect.y')
   @DocsEditable()
-  void set y(num value) => _blink.BlinkSVGRect.instance.y_Setter_(this, value);
-
+  void set y(num value) => _blink.BlinkSVGRect.instance.y_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -5065,28 +5066,28 @@
 
   @DomName('SVGRectElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGRectElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGRectElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGRectElement.rx')
   @DocsEditable()
-  AnimatedLength get rx => _blink.BlinkSVGRectElement.instance.rx_Getter_(this);
-
+  AnimatedLength get rx => wrap_jso(_blink.BlinkSVGRectElement.instance.rx_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGRectElement.ry')
   @DocsEditable()
-  AnimatedLength get ry => _blink.BlinkSVGRectElement.instance.ry_Getter_(this);
-
+  AnimatedLength get ry => wrap_jso(_blink.BlinkSVGRectElement.instance.ry_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGRectElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGRectElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGRectElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGRectElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGRectElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGRectElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGRectElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGRectElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGRectElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -5153,16 +5154,16 @@
 
   @DomName('SVGScriptElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkSVGScriptElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkSVGScriptElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('SVGScriptElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkSVGScriptElement.instance.type_Setter_(this, value);
-
+  void set type(String value) => _blink.BlinkSVGScriptElement.instance.type_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGScriptElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGScriptElement.instance.href_Getter_(this);
-
+  AnimatedString get href => wrap_jso(_blink.BlinkSVGScriptElement.instance.href_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -5221,8 +5222,8 @@
 
   @DomName('SVGStopElement.offset')
   @DocsEditable()
-  AnimatedNumber get gradientOffset => _blink.BlinkSVGStopElement.instance.offset_Getter_(this);
-
+  AnimatedNumber get gradientOffset => wrap_jso(_blink.BlinkSVGStopElement.instance.offset_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -5241,12 +5242,12 @@
   @DomName('SVGStringList.length')
   @DocsEditable()
   @Experimental() // untriaged
-  int get length => _blink.BlinkSVGStringList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkSVGStringList.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('SVGStringList.numberOfItems')
   @DocsEditable()
-  int get numberOfItems => _blink.BlinkSVGStringList.instance.numberOfItems_Getter_(this);
-
+  int get numberOfItems => _blink.BlinkSVGStringList.instance.numberOfItems_Getter_(unwrap_jso(this));
+  
   String operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
@@ -5294,36 +5295,36 @@
   @DomName('SVGStringList.__setter__')
   @DocsEditable()
   @Experimental() // untriaged
-  void __setter__(int index, String value) => _blink.BlinkSVGStringList.instance.$__setter___Callback_2_(this, index, value);
-
+  void __setter__(int index, String value) => _blink.BlinkSVGStringList.instance.$__setter___Callback_2_(unwrap_jso(this), index, value);
+  
   @DomName('SVGStringList.appendItem')
   @DocsEditable()
-  String appendItem(String item) => _blink.BlinkSVGStringList.instance.appendItem_Callback_1_(this, item);
-
+  String appendItem(String item) => _blink.BlinkSVGStringList.instance.appendItem_Callback_1_(unwrap_jso(this), item);
+  
   @DomName('SVGStringList.clear')
   @DocsEditable()
-  void clear() => _blink.BlinkSVGStringList.instance.clear_Callback_0_(this);
-
+  void clear() => _blink.BlinkSVGStringList.instance.clear_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGStringList.getItem')
   @DocsEditable()
-  String getItem(int index) => _blink.BlinkSVGStringList.instance.getItem_Callback_1_(this, index);
-
+  String getItem(int index) => _blink.BlinkSVGStringList.instance.getItem_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('SVGStringList.initialize')
   @DocsEditable()
-  String initialize(String item) => _blink.BlinkSVGStringList.instance.initialize_Callback_1_(this, item);
-
+  String initialize(String item) => _blink.BlinkSVGStringList.instance.initialize_Callback_1_(unwrap_jso(this), item);
+  
   @DomName('SVGStringList.insertItemBefore')
   @DocsEditable()
-  String insertItemBefore(String item, int index) => _blink.BlinkSVGStringList.instance.insertItemBefore_Callback_2_(this, item, index);
-
+  String insertItemBefore(String item, int index) => _blink.BlinkSVGStringList.instance.insertItemBefore_Callback_2_(unwrap_jso(this), item, index);
+  
   @DomName('SVGStringList.removeItem')
   @DocsEditable()
-  String removeItem(int index) => _blink.BlinkSVGStringList.instance.removeItem_Callback_1_(this, index);
-
+  String removeItem(int index) => _blink.BlinkSVGStringList.instance.removeItem_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('SVGStringList.replaceItem')
   @DocsEditable()
-  String replaceItem(String item, int index) => _blink.BlinkSVGStringList.instance.replaceItem_Callback_2_(this, item, index);
-
+  String replaceItem(String item, int index) => _blink.BlinkSVGStringList.instance.replaceItem_Callback_2_(unwrap_jso(this), item, index);
+  
 }
 // 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
@@ -5352,41 +5353,41 @@
 
   @DomName('SVGStyleElement.disabled')
   @DocsEditable()
-  bool get disabled => _blink.BlinkSVGStyleElement.instance.disabled_Getter_(this);
-
+  bool get disabled => _blink.BlinkSVGStyleElement.instance.disabled_Getter_(unwrap_jso(this));
+  
   @DomName('SVGStyleElement.disabled')
   @DocsEditable()
-  void set disabled(bool value) => _blink.BlinkSVGStyleElement.instance.disabled_Setter_(this, value);
-
+  void set disabled(bool value) => _blink.BlinkSVGStyleElement.instance.disabled_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGStyleElement.media')
   @DocsEditable()
-  String get media => _blink.BlinkSVGStyleElement.instance.media_Getter_(this);
-
+  String get media => _blink.BlinkSVGStyleElement.instance.media_Getter_(unwrap_jso(this));
+  
   @DomName('SVGStyleElement.media')
   @DocsEditable()
-  void set media(String value) => _blink.BlinkSVGStyleElement.instance.media_Setter_(this, value);
-
+  void set media(String value) => _blink.BlinkSVGStyleElement.instance.media_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGStyleElement.sheet')
   @DocsEditable()
   @Experimental() // untriaged
-  StyleSheet get sheet => _blink.BlinkSVGStyleElement.instance.sheet_Getter_(this);
-
+  StyleSheet get sheet => wrap_jso(_blink.BlinkSVGStyleElement.instance.sheet_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGStyleElement.title')
   @DocsEditable()
-  String get title => _blink.BlinkSVGStyleElement.instance.title_Getter_(this);
-
+  String get title => _blink.BlinkSVGStyleElement.instance.title_Getter_(unwrap_jso(this));
+  
   @DomName('SVGStyleElement.title')
   @DocsEditable()
-  void set title(String value) => _blink.BlinkSVGStyleElement.instance.title_Setter_(this, value);
-
+  void set title(String value) => _blink.BlinkSVGStyleElement.instance.title_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGStyleElement.type')
   @DocsEditable()
-  String get type => _blink.BlinkSVGStyleElement.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkSVGStyleElement.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('SVGStyleElement.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkSVGStyleElement.instance.type_Setter_(this, value);
-
+  void set type(String value) => _blink.BlinkSVGStyleElement.instance.type_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -5447,7 +5448,7 @@
 
   CssClassSet get classes => new _AttributeClassSet(this);
 
-  List<Element> get children => new FilteredElementList<Element>(this);
+  List<Element> get children => new FilteredElementList(this);
 
   void set children(List<Element> value) {
     final children = this.children;
@@ -5806,59 +5807,59 @@
   @DomName('SVGElement.className')
   @DocsEditable()
   @Experimental() // untriaged
-  AnimatedString get _svgClassName => _blink.BlinkSVGElement.instance.className_Getter_(this);
-
+  AnimatedString get _svgClassName => wrap_jso(_blink.BlinkSVGElement.instance.className_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGElement.ownerSVGElement')
   @DocsEditable()
-  SvgSvgElement get ownerSvgElement => _blink.BlinkSVGElement.instance.ownerSVGElement_Getter_(this);
-
+  SvgSvgElement get ownerSvgElement => wrap_jso(_blink.BlinkSVGElement.instance.ownerSVGElement_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGElement.style')
   @DocsEditable()
   @Experimental() // untriaged
-  CssStyleDeclaration get style => _blink.BlinkSVGElement.instance.style_Getter_(this);
-
+  CssStyleDeclaration get style => wrap_jso(_blink.BlinkSVGElement.instance.style_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGElement.tabIndex')
   @DocsEditable()
   @Experimental() // untriaged
-  int get tabIndex => _blink.BlinkSVGElement.instance.tabIndex_Getter_(this);
-
+  int get tabIndex => _blink.BlinkSVGElement.instance.tabIndex_Getter_(unwrap_jso(this));
+  
   @DomName('SVGElement.tabIndex')
   @DocsEditable()
   @Experimental() // untriaged
-  void set tabIndex(int value) => _blink.BlinkSVGElement.instance.tabIndex_Setter_(this, value);
-
+  void set tabIndex(int value) => _blink.BlinkSVGElement.instance.tabIndex_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGElement.viewportElement')
   @DocsEditable()
-  SvgElement get viewportElement => _blink.BlinkSVGElement.instance.viewportElement_Getter_(this);
-
+  SvgElement get viewportElement => wrap_jso(_blink.BlinkSVGElement.instance.viewportElement_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGElement.xmlbase')
   @DocsEditable()
-  String get xmlbase => _blink.BlinkSVGElement.instance.xmlbase_Getter_(this);
-
+  String get xmlbase => _blink.BlinkSVGElement.instance.xmlbase_Getter_(unwrap_jso(this));
+  
   @DomName('SVGElement.xmlbase')
   @DocsEditable()
-  void set xmlbase(String value) => _blink.BlinkSVGElement.instance.xmlbase_Setter_(this, value);
-
+  void set xmlbase(String value) => _blink.BlinkSVGElement.instance.xmlbase_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGElement.xmllang')
   @DocsEditable()
   @Experimental() // untriaged
-  String get xmllang => _blink.BlinkSVGElement.instance.xmllang_Getter_(this);
-
+  String get xmllang => _blink.BlinkSVGElement.instance.xmllang_Getter_(unwrap_jso(this));
+  
   @DomName('SVGElement.xmllang')
   @DocsEditable()
   @Experimental() // untriaged
-  void set xmllang(String value) => _blink.BlinkSVGElement.instance.xmllang_Setter_(this, value);
-
+  void set xmllang(String value) => _blink.BlinkSVGElement.instance.xmllang_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGElement.xmlspace')
   @DocsEditable()
   @Experimental() // untriaged
-  String get xmlspace => _blink.BlinkSVGElement.instance.xmlspace_Getter_(this);
-
+  String get xmlspace => _blink.BlinkSVGElement.instance.xmlspace_Getter_(unwrap_jso(this));
+  
   @DomName('SVGElement.xmlspace')
   @DocsEditable()
   @Experimental() // untriaged
-  void set xmlspace(String value) => _blink.BlinkSVGElement.instance.xmlspace_Setter_(this, value);
-
+  void set xmlspace(String value) => _blink.BlinkSVGElement.instance.xmlspace_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGElement.onabort')
   @DocsEditable()
   @Experimental() // untriaged
@@ -6146,168 +6147,168 @@
 
   @DomName('SVGSVGElement.currentScale')
   @DocsEditable()
-  num get currentScale => _blink.BlinkSVGSVGElement.instance.currentScale_Getter_(this);
-
+  num get currentScale => _blink.BlinkSVGSVGElement.instance.currentScale_Getter_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.currentScale')
   @DocsEditable()
-  void set currentScale(num value) => _blink.BlinkSVGSVGElement.instance.currentScale_Setter_(this, value);
-
+  void set currentScale(num value) => _blink.BlinkSVGSVGElement.instance.currentScale_Setter_(unwrap_jso(this), value);
+  
   @DomName('SVGSVGElement.currentTranslate')
   @DocsEditable()
-  Point get currentTranslate => _blink.BlinkSVGSVGElement.instance.currentTranslate_Getter_(this);
-
+  Point get currentTranslate => wrap_jso(_blink.BlinkSVGSVGElement.instance.currentTranslate_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGSVGElement.currentView')
   @DocsEditable()
-  ViewSpec get currentView => _blink.BlinkSVGSVGElement.instance.currentView_Getter_(this);
-
+  ViewSpec get currentView => wrap_jso(_blink.BlinkSVGSVGElement.instance.currentView_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGSVGElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGSVGElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGSVGElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGSVGElement.pixelUnitToMillimeterX')
   @DocsEditable()
-  double get pixelUnitToMillimeterX => _blink.BlinkSVGSVGElement.instance.pixelUnitToMillimeterX_Getter_(this);
-
+  double get pixelUnitToMillimeterX => _blink.BlinkSVGSVGElement.instance.pixelUnitToMillimeterX_Getter_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.pixelUnitToMillimeterY')
   @DocsEditable()
-  double get pixelUnitToMillimeterY => _blink.BlinkSVGSVGElement.instance.pixelUnitToMillimeterY_Getter_(this);
-
+  double get pixelUnitToMillimeterY => _blink.BlinkSVGSVGElement.instance.pixelUnitToMillimeterY_Getter_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.screenPixelToMillimeterX')
   @DocsEditable()
-  double get screenPixelToMillimeterX => _blink.BlinkSVGSVGElement.instance.screenPixelToMillimeterX_Getter_(this);
-
+  double get screenPixelToMillimeterX => _blink.BlinkSVGSVGElement.instance.screenPixelToMillimeterX_Getter_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.screenPixelToMillimeterY')
   @DocsEditable()
-  double get screenPixelToMillimeterY => _blink.BlinkSVGSVGElement.instance.screenPixelToMillimeterY_Getter_(this);
-
+  double get screenPixelToMillimeterY => _blink.BlinkSVGSVGElement.instance.screenPixelToMillimeterY_Getter_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.useCurrentView')
   @DocsEditable()
-  bool get useCurrentView => _blink.BlinkSVGSVGElement.instance.useCurrentView_Getter_(this);
-
+  bool get useCurrentView => _blink.BlinkSVGSVGElement.instance.useCurrentView_Getter_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.viewport')
   @DocsEditable()
-  Rect get viewport => _blink.BlinkSVGSVGElement.instance.viewport_Getter_(this);
-
+  Rect get viewport => wrap_jso(_blink.BlinkSVGSVGElement.instance.viewport_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGSVGElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGSVGElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGSVGElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGSVGElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGSVGElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGSVGElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGSVGElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGSVGElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGSVGElement.instance.y_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGSVGElement.animationsPaused')
   @DocsEditable()
-  bool animationsPaused() => _blink.BlinkSVGSVGElement.instance.animationsPaused_Callback_0_(this);
-
+  bool animationsPaused() => _blink.BlinkSVGSVGElement.instance.animationsPaused_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.checkEnclosure')
   @DocsEditable()
-  bool checkEnclosure(SvgElement element, Rect rect) => _blink.BlinkSVGSVGElement.instance.checkEnclosure_Callback_2_(this, element, rect);
-
+  bool checkEnclosure(SvgElement element, Rect rect) => _blink.BlinkSVGSVGElement.instance.checkEnclosure_Callback_2_(unwrap_jso(this), unwrap_jso(element), unwrap_jso(rect));
+  
   @DomName('SVGSVGElement.checkIntersection')
   @DocsEditable()
-  bool checkIntersection(SvgElement element, Rect rect) => _blink.BlinkSVGSVGElement.instance.checkIntersection_Callback_2_(this, element, rect);
-
+  bool checkIntersection(SvgElement element, Rect rect) => _blink.BlinkSVGSVGElement.instance.checkIntersection_Callback_2_(unwrap_jso(this), unwrap_jso(element), unwrap_jso(rect));
+  
   @DomName('SVGSVGElement.createSVGAngle')
   @DocsEditable()
-  Angle createSvgAngle() => _blink.BlinkSVGSVGElement.instance.createSVGAngle_Callback_0_(this);
-
+  Angle createSvgAngle() => _blink.BlinkSVGSVGElement.instance.createSVGAngle_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.createSVGLength')
   @DocsEditable()
-  Length createSvgLength() => _blink.BlinkSVGSVGElement.instance.createSVGLength_Callback_0_(this);
-
+  Length createSvgLength() => _blink.BlinkSVGSVGElement.instance.createSVGLength_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.createSVGMatrix')
   @DocsEditable()
-  Matrix createSvgMatrix() => _blink.BlinkSVGSVGElement.instance.createSVGMatrix_Callback_0_(this);
-
+  Matrix createSvgMatrix() => _blink.BlinkSVGSVGElement.instance.createSVGMatrix_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.createSVGNumber')
   @DocsEditable()
-  Number createSvgNumber() => _blink.BlinkSVGSVGElement.instance.createSVGNumber_Callback_0_(this);
-
+  Number createSvgNumber() => _blink.BlinkSVGSVGElement.instance.createSVGNumber_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.createSVGPoint')
   @DocsEditable()
-  Point createSvgPoint() => _blink.BlinkSVGSVGElement.instance.createSVGPoint_Callback_0_(this);
-
+  Point createSvgPoint() => _blink.BlinkSVGSVGElement.instance.createSVGPoint_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.createSVGRect')
   @DocsEditable()
-  Rect createSvgRect() => _blink.BlinkSVGSVGElement.instance.createSVGRect_Callback_0_(this);
-
+  Rect createSvgRect() => wrap_jso(_blink.BlinkSVGSVGElement.instance.createSVGRect_Callback_0_(unwrap_jso(this)));
+  
   @DomName('SVGSVGElement.createSVGTransform')
   @DocsEditable()
-  Transform createSvgTransform() => _blink.BlinkSVGSVGElement.instance.createSVGTransform_Callback_0_(this);
-
+  Transform createSvgTransform() => _blink.BlinkSVGSVGElement.instance.createSVGTransform_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.createSVGTransformFromMatrix')
   @DocsEditable()
-  Transform createSvgTransformFromMatrix(Matrix matrix) => _blink.BlinkSVGSVGElement.instance.createSVGTransformFromMatrix_Callback_1_(this, matrix);
-
+  Transform createSvgTransformFromMatrix(Matrix matrix) => _blink.BlinkSVGSVGElement.instance.createSVGTransformFromMatrix_Callback_1_(unwrap_jso(this), unwrap_jso(matrix));
+  
   @DomName('SVGSVGElement.deselectAll')
   @DocsEditable()
-  void deselectAll() => _blink.BlinkSVGSVGElement.instance.deselectAll_Callback_0_(this);
-
+  void deselectAll() => _blink.BlinkSVGSVGElement.instance.deselectAll_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.forceRedraw')
   @DocsEditable()
-  void forceRedraw() => _blink.BlinkSVGSVGElement.instance.forceRedraw_Callback_0_(this);
-
+  void forceRedraw() => _blink.BlinkSVGSVGElement.instance.forceRedraw_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.getCurrentTime')
   @DocsEditable()
-  double getCurrentTime() => _blink.BlinkSVGSVGElement.instance.getCurrentTime_Callback_0_(this);
-
+  double getCurrentTime() => _blink.BlinkSVGSVGElement.instance.getCurrentTime_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.getElementById')
   @DocsEditable()
-  Element getElementById(String elementId) => _blink.BlinkSVGSVGElement.instance.getElementById_Callback_1_(this, elementId);
-
+  Element getElementById(String elementId) => wrap_jso(_blink.BlinkSVGSVGElement.instance.getElementById_Callback_1_(unwrap_jso(this), elementId));
+  
   @DomName('SVGSVGElement.getEnclosureList')
   @DocsEditable()
-  List<Node> getEnclosureList(Rect rect, SvgElement referenceElement) => _blink.BlinkSVGSVGElement.instance.getEnclosureList_Callback_2_(this, rect, referenceElement);
-
+  List<Node> getEnclosureList(Rect rect, SvgElement referenceElement) => wrap_jso_list(_blink.BlinkSVGSVGElement.instance.getEnclosureList_Callback_2_(unwrap_jso(this), unwrap_jso(rect), unwrap_jso(referenceElement)));
+  
   @DomName('SVGSVGElement.getIntersectionList')
   @DocsEditable()
-  List<Node> getIntersectionList(Rect rect, SvgElement referenceElement) => _blink.BlinkSVGSVGElement.instance.getIntersectionList_Callback_2_(this, rect, referenceElement);
-
+  List<Node> getIntersectionList(Rect rect, SvgElement referenceElement) => wrap_jso_list(_blink.BlinkSVGSVGElement.instance.getIntersectionList_Callback_2_(unwrap_jso(this), unwrap_jso(rect), unwrap_jso(referenceElement)));
+  
   @DomName('SVGSVGElement.pauseAnimations')
   @DocsEditable()
-  void pauseAnimations() => _blink.BlinkSVGSVGElement.instance.pauseAnimations_Callback_0_(this);
-
+  void pauseAnimations() => _blink.BlinkSVGSVGElement.instance.pauseAnimations_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.setCurrentTime')
   @DocsEditable()
-  void setCurrentTime(num seconds) => _blink.BlinkSVGSVGElement.instance.setCurrentTime_Callback_1_(this, seconds);
-
+  void setCurrentTime(num seconds) => _blink.BlinkSVGSVGElement.instance.setCurrentTime_Callback_1_(unwrap_jso(this), seconds);
+  
   @DomName('SVGSVGElement.suspendRedraw')
   @DocsEditable()
-  int suspendRedraw(int maxWaitMilliseconds) => _blink.BlinkSVGSVGElement.instance.suspendRedraw_Callback_1_(this, maxWaitMilliseconds);
-
+  int suspendRedraw(int maxWaitMilliseconds) => _blink.BlinkSVGSVGElement.instance.suspendRedraw_Callback_1_(unwrap_jso(this), maxWaitMilliseconds);
+  
   @DomName('SVGSVGElement.unpauseAnimations')
   @DocsEditable()
-  void unpauseAnimations() => _blink.BlinkSVGSVGElement.instance.unpauseAnimations_Callback_0_(this);
-
+  void unpauseAnimations() => _blink.BlinkSVGSVGElement.instance.unpauseAnimations_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.unsuspendRedraw')
   @DocsEditable()
-  void unsuspendRedraw(int suspendHandleId) => _blink.BlinkSVGSVGElement.instance.unsuspendRedraw_Callback_1_(this, suspendHandleId);
-
+  void unsuspendRedraw(int suspendHandleId) => _blink.BlinkSVGSVGElement.instance.unsuspendRedraw_Callback_1_(unwrap_jso(this), suspendHandleId);
+  
   @DomName('SVGSVGElement.unsuspendRedrawAll')
   @DocsEditable()
-  void unsuspendRedrawAll() => _blink.BlinkSVGSVGElement.instance.unsuspendRedrawAll_Callback_0_(this);
-
+  void unsuspendRedrawAll() => _blink.BlinkSVGSVGElement.instance.unsuspendRedrawAll_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.preserveAspectRatio')
   @DocsEditable()
-  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGSVGElement.instance.preserveAspectRatio_Getter_(this);
-
+  AnimatedPreserveAspectRatio get preserveAspectRatio => wrap_jso(_blink.BlinkSVGSVGElement.instance.preserveAspectRatio_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGSVGElement.viewBox')
   @DocsEditable()
-  AnimatedRect get viewBox => _blink.BlinkSVGSVGElement.instance.viewBox_Getter_(this);
-
+  AnimatedRect get viewBox => wrap_jso(_blink.BlinkSVGSVGElement.instance.viewBox_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGSVGElement.zoomAndPan')
   @DocsEditable()
-  int get zoomAndPan => _blink.BlinkSVGSVGElement.instance.zoomAndPan_Getter_(this);
-
+  int get zoomAndPan => _blink.BlinkSVGSVGElement.instance.zoomAndPan_Getter_(unwrap_jso(this));
+  
   @DomName('SVGSVGElement.zoomAndPan')
   @DocsEditable()
-  void set zoomAndPan(int value) => _blink.BlinkSVGSVGElement.instance.zoomAndPan_Setter_(this, value);
-
+  void set zoomAndPan(int value) => _blink.BlinkSVGSVGElement.instance.zoomAndPan_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -6360,12 +6361,12 @@
 
   @DomName('SVGSymbolElement.preserveAspectRatio')
   @DocsEditable()
-  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGSymbolElement.instance.preserveAspectRatio_Getter_(this);
-
+  AnimatedPreserveAspectRatio get preserveAspectRatio => wrap_jso(_blink.BlinkSVGSymbolElement.instance.preserveAspectRatio_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGSymbolElement.viewBox')
   @DocsEditable()
-  AnimatedRect get viewBox => _blink.BlinkSVGSymbolElement.instance.viewBox_Getter_(this);
-
+  AnimatedRect get viewBox => wrap_jso(_blink.BlinkSVGSymbolElement.instance.viewBox_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -6457,48 +6458,48 @@
 
   @DomName('SVGTextContentElement.lengthAdjust')
   @DocsEditable()
-  AnimatedEnumeration get lengthAdjust => _blink.BlinkSVGTextContentElement.instance.lengthAdjust_Getter_(this);
-
+  AnimatedEnumeration get lengthAdjust => wrap_jso(_blink.BlinkSVGTextContentElement.instance.lengthAdjust_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGTextContentElement.textLength')
   @DocsEditable()
-  AnimatedLength get textLength => _blink.BlinkSVGTextContentElement.instance.textLength_Getter_(this);
-
+  AnimatedLength get textLength => wrap_jso(_blink.BlinkSVGTextContentElement.instance.textLength_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGTextContentElement.getCharNumAtPosition')
   @DocsEditable()
-  int getCharNumAtPosition(Point point) => _blink.BlinkSVGTextContentElement.instance.getCharNumAtPosition_Callback_1_(this, point);
-
+  int getCharNumAtPosition(Point point) => _blink.BlinkSVGTextContentElement.instance.getCharNumAtPosition_Callback_1_(unwrap_jso(this), unwrap_jso(point));
+  
   @DomName('SVGTextContentElement.getComputedTextLength')
   @DocsEditable()
-  double getComputedTextLength() => _blink.BlinkSVGTextContentElement.instance.getComputedTextLength_Callback_0_(this);
-
+  double getComputedTextLength() => _blink.BlinkSVGTextContentElement.instance.getComputedTextLength_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGTextContentElement.getEndPositionOfChar')
   @DocsEditable()
-  Point getEndPositionOfChar(int offset) => _blink.BlinkSVGTextContentElement.instance.getEndPositionOfChar_Callback_1_(this, offset);
-
+  Point getEndPositionOfChar(int offset) => _blink.BlinkSVGTextContentElement.instance.getEndPositionOfChar_Callback_1_(unwrap_jso(this), offset);
+  
   @DomName('SVGTextContentElement.getExtentOfChar')
   @DocsEditable()
-  Rect getExtentOfChar(int offset) => _blink.BlinkSVGTextContentElement.instance.getExtentOfChar_Callback_1_(this, offset);
-
+  Rect getExtentOfChar(int offset) => wrap_jso(_blink.BlinkSVGTextContentElement.instance.getExtentOfChar_Callback_1_(unwrap_jso(this), offset));
+  
   @DomName('SVGTextContentElement.getNumberOfChars')
   @DocsEditable()
-  int getNumberOfChars() => _blink.BlinkSVGTextContentElement.instance.getNumberOfChars_Callback_0_(this);
-
+  int getNumberOfChars() => _blink.BlinkSVGTextContentElement.instance.getNumberOfChars_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGTextContentElement.getRotationOfChar')
   @DocsEditable()
-  double getRotationOfChar(int offset) => _blink.BlinkSVGTextContentElement.instance.getRotationOfChar_Callback_1_(this, offset);
-
+  double getRotationOfChar(int offset) => _blink.BlinkSVGTextContentElement.instance.getRotationOfChar_Callback_1_(unwrap_jso(this), offset);
+  
   @DomName('SVGTextContentElement.getStartPositionOfChar')
   @DocsEditable()
-  Point getStartPositionOfChar(int offset) => _blink.BlinkSVGTextContentElement.instance.getStartPositionOfChar_Callback_1_(this, offset);
-
+  Point getStartPositionOfChar(int offset) => _blink.BlinkSVGTextContentElement.instance.getStartPositionOfChar_Callback_1_(unwrap_jso(this), offset);
+  
   @DomName('SVGTextContentElement.getSubStringLength')
   @DocsEditable()
-  double getSubStringLength(int offset, int length) => _blink.BlinkSVGTextContentElement.instance.getSubStringLength_Callback_2_(this, offset, length);
-
+  double getSubStringLength(int offset, int length) => _blink.BlinkSVGTextContentElement.instance.getSubStringLength_Callback_2_(unwrap_jso(this), offset, length);
+  
   @DomName('SVGTextContentElement.selectSubString')
   @DocsEditable()
-  void selectSubString(int offset, int length) => _blink.BlinkSVGTextContentElement.instance.selectSubString_Callback_2_(this, offset, length);
-
+  void selectSubString(int offset, int length) => _blink.BlinkSVGTextContentElement.instance.selectSubString_Callback_2_(unwrap_jso(this), offset, length);
+  
 }
 // 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
@@ -6571,20 +6572,20 @@
 
   @DomName('SVGTextPathElement.method')
   @DocsEditable()
-  AnimatedEnumeration get method => _blink.BlinkSVGTextPathElement.instance.method_Getter_(this);
-
+  AnimatedEnumeration get method => wrap_jso(_blink.BlinkSVGTextPathElement.instance.method_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGTextPathElement.spacing')
   @DocsEditable()
-  AnimatedEnumeration get spacing => _blink.BlinkSVGTextPathElement.instance.spacing_Getter_(this);
-
+  AnimatedEnumeration get spacing => wrap_jso(_blink.BlinkSVGTextPathElement.instance.spacing_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGTextPathElement.startOffset')
   @DocsEditable()
-  AnimatedLength get startOffset => _blink.BlinkSVGTextPathElement.instance.startOffset_Getter_(this);
-
+  AnimatedLength get startOffset => wrap_jso(_blink.BlinkSVGTextPathElement.instance.startOffset_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGTextPathElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGTextPathElement.instance.href_Getter_(this);
-
+  AnimatedString get href => wrap_jso(_blink.BlinkSVGTextPathElement.instance.href_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -6608,24 +6609,24 @@
 
   @DomName('SVGTextPositioningElement.dx')
   @DocsEditable()
-  AnimatedLengthList get dx => _blink.BlinkSVGTextPositioningElement.instance.dx_Getter_(this);
-
+  AnimatedLengthList get dx => wrap_jso(_blink.BlinkSVGTextPositioningElement.instance.dx_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGTextPositioningElement.dy')
   @DocsEditable()
-  AnimatedLengthList get dy => _blink.BlinkSVGTextPositioningElement.instance.dy_Getter_(this);
-
+  AnimatedLengthList get dy => wrap_jso(_blink.BlinkSVGTextPositioningElement.instance.dy_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGTextPositioningElement.rotate')
   @DocsEditable()
-  AnimatedNumberList get rotate => _blink.BlinkSVGTextPositioningElement.instance.rotate_Getter_(this);
-
+  AnimatedNumberList get rotate => wrap_jso(_blink.BlinkSVGTextPositioningElement.instance.rotate_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGTextPositioningElement.x')
   @DocsEditable()
-  AnimatedLengthList get x => _blink.BlinkSVGTextPositioningElement.instance.x_Getter_(this);
-
+  AnimatedLengthList get x => wrap_jso(_blink.BlinkSVGTextPositioningElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGTextPositioningElement.y')
   @DocsEditable()
-  AnimatedLengthList get y => _blink.BlinkSVGTextPositioningElement.instance.y_Getter_(this);
-
+  AnimatedLengthList get y => wrap_jso(_blink.BlinkSVGTextPositioningElement.instance.y_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -6696,40 +6697,40 @@
 
   @DomName('SVGTransform.angle')
   @DocsEditable()
-  double get angle => _blink.BlinkSVGTransform.instance.angle_Getter_(this);
-
+  double get angle => _blink.BlinkSVGTransform.instance.angle_Getter_(unwrap_jso(this));
+  
   @DomName('SVGTransform.matrix')
   @DocsEditable()
-  Matrix get matrix => _blink.BlinkSVGTransform.instance.matrix_Getter_(this);
-
+  Matrix get matrix => wrap_jso(_blink.BlinkSVGTransform.instance.matrix_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGTransform.type')
   @DocsEditable()
-  int get type => _blink.BlinkSVGTransform.instance.type_Getter_(this);
-
+  int get type => _blink.BlinkSVGTransform.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('SVGTransform.setMatrix')
   @DocsEditable()
-  void setMatrix(Matrix matrix) => _blink.BlinkSVGTransform.instance.setMatrix_Callback_1_(this, matrix);
-
+  void setMatrix(Matrix matrix) => _blink.BlinkSVGTransform.instance.setMatrix_Callback_1_(unwrap_jso(this), unwrap_jso(matrix));
+  
   @DomName('SVGTransform.setRotate')
   @DocsEditable()
-  void setRotate(num angle, num cx, num cy) => _blink.BlinkSVGTransform.instance.setRotate_Callback_3_(this, angle, cx, cy);
-
+  void setRotate(num angle, num cx, num cy) => _blink.BlinkSVGTransform.instance.setRotate_Callback_3_(unwrap_jso(this), angle, cx, cy);
+  
   @DomName('SVGTransform.setScale')
   @DocsEditable()
-  void setScale(num sx, num sy) => _blink.BlinkSVGTransform.instance.setScale_Callback_2_(this, sx, sy);
-
+  void setScale(num sx, num sy) => _blink.BlinkSVGTransform.instance.setScale_Callback_2_(unwrap_jso(this), sx, sy);
+  
   @DomName('SVGTransform.setSkewX')
   @DocsEditable()
-  void setSkewX(num angle) => _blink.BlinkSVGTransform.instance.setSkewX_Callback_1_(this, angle);
-
+  void setSkewX(num angle) => _blink.BlinkSVGTransform.instance.setSkewX_Callback_1_(unwrap_jso(this), angle);
+  
   @DomName('SVGTransform.setSkewY')
   @DocsEditable()
-  void setSkewY(num angle) => _blink.BlinkSVGTransform.instance.setSkewY_Callback_1_(this, angle);
-
+  void setSkewY(num angle) => _blink.BlinkSVGTransform.instance.setSkewY_Callback_1_(unwrap_jso(this), angle);
+  
   @DomName('SVGTransform.setTranslate')
   @DocsEditable()
-  void setTranslate(num tx, num ty) => _blink.BlinkSVGTransform.instance.setTranslate_Callback_2_(this, tx, ty);
-
+  void setTranslate(num tx, num ty) => _blink.BlinkSVGTransform.instance.setTranslate_Callback_2_(unwrap_jso(this), tx, ty);
+  
 }
 // 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
@@ -6748,12 +6749,12 @@
   @DomName('SVGTransformList.length')
   @DocsEditable()
   @Experimental() // untriaged
-  int get length => _blink.BlinkSVGTransformList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkSVGTransformList.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('SVGTransformList.numberOfItems')
   @DocsEditable()
-  int get numberOfItems => _blink.BlinkSVGTransformList.instance.numberOfItems_Getter_(this);
-
+  int get numberOfItems => _blink.BlinkSVGTransformList.instance.numberOfItems_Getter_(unwrap_jso(this));
+  
   Transform operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
@@ -6801,44 +6802,44 @@
   @DomName('SVGTransformList.__setter__')
   @DocsEditable()
   @Experimental() // untriaged
-  void __setter__(int index, Transform value) => _blink.BlinkSVGTransformList.instance.$__setter___Callback_2_(this, index, value);
-
+  void __setter__(int index, Transform value) => _blink.BlinkSVGTransformList.instance.$__setter___Callback_2_(unwrap_jso(this), index, unwrap_jso(value));
+  
   @DomName('SVGTransformList.appendItem')
   @DocsEditable()
-  Transform appendItem(Transform item) => _blink.BlinkSVGTransformList.instance.appendItem_Callback_1_(this, item);
-
+  Transform appendItem(Transform item) => _blink.BlinkSVGTransformList.instance.appendItem_Callback_1_(unwrap_jso(this), unwrap_jso(item));
+  
   @DomName('SVGTransformList.clear')
   @DocsEditable()
-  void clear() => _blink.BlinkSVGTransformList.instance.clear_Callback_0_(this);
-
+  void clear() => _blink.BlinkSVGTransformList.instance.clear_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGTransformList.consolidate')
   @DocsEditable()
-  Transform consolidate() => _blink.BlinkSVGTransformList.instance.consolidate_Callback_0_(this);
-
+  Transform consolidate() => _blink.BlinkSVGTransformList.instance.consolidate_Callback_0_(unwrap_jso(this));
+  
   @DomName('SVGTransformList.createSVGTransformFromMatrix')
   @DocsEditable()
-  Transform createSvgTransformFromMatrix(Matrix matrix) => _blink.BlinkSVGTransformList.instance.createSVGTransformFromMatrix_Callback_1_(this, matrix);
-
+  Transform createSvgTransformFromMatrix(Matrix matrix) => _blink.BlinkSVGTransformList.instance.createSVGTransformFromMatrix_Callback_1_(unwrap_jso(this), unwrap_jso(matrix));
+  
   @DomName('SVGTransformList.getItem')
   @DocsEditable()
-  Transform getItem(int index) => _blink.BlinkSVGTransformList.instance.getItem_Callback_1_(this, index);
-
+  Transform getItem(int index) => _blink.BlinkSVGTransformList.instance.getItem_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('SVGTransformList.initialize')
   @DocsEditable()
-  Transform initialize(Transform item) => _blink.BlinkSVGTransformList.instance.initialize_Callback_1_(this, item);
-
+  Transform initialize(Transform item) => _blink.BlinkSVGTransformList.instance.initialize_Callback_1_(unwrap_jso(this), unwrap_jso(item));
+  
   @DomName('SVGTransformList.insertItemBefore')
   @DocsEditable()
-  Transform insertItemBefore(Transform item, int index) => _blink.BlinkSVGTransformList.instance.insertItemBefore_Callback_2_(this, item, index);
-
+  Transform insertItemBefore(Transform item, int index) => _blink.BlinkSVGTransformList.instance.insertItemBefore_Callback_2_(unwrap_jso(this), unwrap_jso(item), index);
+  
   @DomName('SVGTransformList.removeItem')
   @DocsEditable()
-  Transform removeItem(int index) => _blink.BlinkSVGTransformList.instance.removeItem_Callback_1_(this, index);
-
+  Transform removeItem(int index) => _blink.BlinkSVGTransformList.instance.removeItem_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('SVGTransformList.replaceItem')
   @DocsEditable()
-  Transform replaceItem(Transform item, int index) => _blink.BlinkSVGTransformList.instance.replaceItem_Callback_2_(this, item, index);
-
+  Transform replaceItem(Transform item, int index) => _blink.BlinkSVGTransformList.instance.replaceItem_Callback_2_(unwrap_jso(this), unwrap_jso(item), index);
+  
 }
 // 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
@@ -6912,24 +6913,24 @@
 
   @DomName('SVGUseElement.height')
   @DocsEditable()
-  AnimatedLength get height => _blink.BlinkSVGUseElement.instance.height_Getter_(this);
-
+  AnimatedLength get height => wrap_jso(_blink.BlinkSVGUseElement.instance.height_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGUseElement.width')
   @DocsEditable()
-  AnimatedLength get width => _blink.BlinkSVGUseElement.instance.width_Getter_(this);
-
+  AnimatedLength get width => wrap_jso(_blink.BlinkSVGUseElement.instance.width_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGUseElement.x')
   @DocsEditable()
-  AnimatedLength get x => _blink.BlinkSVGUseElement.instance.x_Getter_(this);
-
+  AnimatedLength get x => wrap_jso(_blink.BlinkSVGUseElement.instance.x_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGUseElement.y')
   @DocsEditable()
-  AnimatedLength get y => _blink.BlinkSVGUseElement.instance.y_Getter_(this);
-
+  AnimatedLength get y => wrap_jso(_blink.BlinkSVGUseElement.instance.y_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGUseElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGUseElement.instance.href_Getter_(this);
-
+  AnimatedString get href => wrap_jso(_blink.BlinkSVGUseElement.instance.href_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -6957,24 +6958,24 @@
 
   @DomName('SVGViewElement.viewTarget')
   @DocsEditable()
-  StringList get viewTarget => _blink.BlinkSVGViewElement.instance.viewTarget_Getter_(this);
-
+  StringList get viewTarget => wrap_jso(_blink.BlinkSVGViewElement.instance.viewTarget_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGViewElement.preserveAspectRatio')
   @DocsEditable()
-  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGViewElement.instance.preserveAspectRatio_Getter_(this);
-
+  AnimatedPreserveAspectRatio get preserveAspectRatio => wrap_jso(_blink.BlinkSVGViewElement.instance.preserveAspectRatio_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGViewElement.viewBox')
   @DocsEditable()
-  AnimatedRect get viewBox => _blink.BlinkSVGViewElement.instance.viewBox_Getter_(this);
-
+  AnimatedRect get viewBox => wrap_jso(_blink.BlinkSVGViewElement.instance.viewBox_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGViewElement.zoomAndPan')
   @DocsEditable()
-  int get zoomAndPan => _blink.BlinkSVGViewElement.instance.zoomAndPan_Getter_(this);
-
+  int get zoomAndPan => _blink.BlinkSVGViewElement.instance.zoomAndPan_Getter_(unwrap_jso(this));
+  
   @DomName('SVGViewElement.zoomAndPan')
   @DocsEditable()
-  void set zoomAndPan(int value) => _blink.BlinkSVGViewElement.instance.zoomAndPan_Setter_(this, value);
-
+  void set zoomAndPan(int value) => _blink.BlinkSVGViewElement.instance.zoomAndPan_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -6992,48 +6993,48 @@
 
   @DomName('SVGViewSpec.preserveAspectRatioString')
   @DocsEditable()
-  String get preserveAspectRatioString => _blink.BlinkSVGViewSpec.instance.preserveAspectRatioString_Getter_(this);
-
+  String get preserveAspectRatioString => _blink.BlinkSVGViewSpec.instance.preserveAspectRatioString_Getter_(unwrap_jso(this));
+  
   @DomName('SVGViewSpec.transform')
   @DocsEditable()
-  TransformList get transform => _blink.BlinkSVGViewSpec.instance.transform_Getter_(this);
-
+  TransformList get transform => wrap_jso(_blink.BlinkSVGViewSpec.instance.transform_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGViewSpec.transformString')
   @DocsEditable()
-  String get transformString => _blink.BlinkSVGViewSpec.instance.transformString_Getter_(this);
-
+  String get transformString => _blink.BlinkSVGViewSpec.instance.transformString_Getter_(unwrap_jso(this));
+  
   @DomName('SVGViewSpec.viewBoxString')
   @DocsEditable()
-  String get viewBoxString => _blink.BlinkSVGViewSpec.instance.viewBoxString_Getter_(this);
-
+  String get viewBoxString => _blink.BlinkSVGViewSpec.instance.viewBoxString_Getter_(unwrap_jso(this));
+  
   @DomName('SVGViewSpec.viewTarget')
   @DocsEditable()
-  SvgElement get viewTarget => _blink.BlinkSVGViewSpec.instance.viewTarget_Getter_(this);
-
+  SvgElement get viewTarget => wrap_jso(_blink.BlinkSVGViewSpec.instance.viewTarget_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGViewSpec.viewTargetString')
   @DocsEditable()
-  String get viewTargetString => _blink.BlinkSVGViewSpec.instance.viewTargetString_Getter_(this);
-
+  String get viewTargetString => _blink.BlinkSVGViewSpec.instance.viewTargetString_Getter_(unwrap_jso(this));
+  
   @DomName('SVGViewSpec.preserveAspectRatio')
   @DocsEditable()
   @Experimental() // nonstandard
-  AnimatedPreserveAspectRatio get preserveAspectRatio => _blink.BlinkSVGViewSpec.instance.preserveAspectRatio_Getter_(this);
-
+  AnimatedPreserveAspectRatio get preserveAspectRatio => wrap_jso(_blink.BlinkSVGViewSpec.instance.preserveAspectRatio_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGViewSpec.viewBox')
   @DocsEditable()
   @Experimental() // nonstandard
-  AnimatedRect get viewBox => _blink.BlinkSVGViewSpec.instance.viewBox_Getter_(this);
-
+  AnimatedRect get viewBox => wrap_jso(_blink.BlinkSVGViewSpec.instance.viewBox_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGViewSpec.zoomAndPan')
   @DocsEditable()
   @Experimental() // nonstandard
-  int get zoomAndPan => _blink.BlinkSVGViewSpec.instance.zoomAndPan_Getter_(this);
-
+  int get zoomAndPan => _blink.BlinkSVGViewSpec.instance.zoomAndPan_Getter_(unwrap_jso(this));
+  
   @DomName('SVGViewSpec.zoomAndPan')
   @DocsEditable()
   @Experimental() // nonstandard
-  void set zoomAndPan(int value) => _blink.BlinkSVGViewSpec.instance.zoomAndPan_Setter_(this, value);
-
+  void set zoomAndPan(int value) => _blink.BlinkSVGViewSpec.instance.zoomAndPan_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -7086,24 +7087,24 @@
 
   @DomName('SVGZoomEvent.newScale')
   @DocsEditable()
-  double get newScale => _blink.BlinkSVGZoomEvent.instance.newScale_Getter_(this);
-
+  double get newScale => _blink.BlinkSVGZoomEvent.instance.newScale_Getter_(unwrap_jso(this));
+  
   @DomName('SVGZoomEvent.newTranslate')
   @DocsEditable()
-  Point get newTranslate => _blink.BlinkSVGZoomEvent.instance.newTranslate_Getter_(this);
-
+  Point get newTranslate => wrap_jso(_blink.BlinkSVGZoomEvent.instance.newTranslate_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGZoomEvent.previousScale')
   @DocsEditable()
-  double get previousScale => _blink.BlinkSVGZoomEvent.instance.previousScale_Getter_(this);
-
+  double get previousScale => _blink.BlinkSVGZoomEvent.instance.previousScale_Getter_(unwrap_jso(this));
+  
   @DomName('SVGZoomEvent.previousTranslate')
   @DocsEditable()
-  Point get previousTranslate => _blink.BlinkSVGZoomEvent.instance.previousTranslate_Getter_(this);
-
+  Point get previousTranslate => wrap_jso(_blink.BlinkSVGZoomEvent.instance.previousTranslate_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGZoomEvent.zoomRectScreen')
   @DocsEditable()
-  Rect get zoomRectScreen => _blink.BlinkSVGZoomEvent.instance.zoomRectScreen_Getter_(this);
-
+  Rect get zoomRectScreen => wrap_jso(_blink.BlinkSVGZoomEvent.instance.zoomRectScreen_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -7143,20 +7144,20 @@
 
   @DomName('SVGGradientElement.gradientTransform')
   @DocsEditable()
-  AnimatedTransformList get gradientTransform => _blink.BlinkSVGGradientElement.instance.gradientTransform_Getter_(this);
-
+  AnimatedTransformList get gradientTransform => wrap_jso(_blink.BlinkSVGGradientElement.instance.gradientTransform_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGGradientElement.gradientUnits')
   @DocsEditable()
-  AnimatedEnumeration get gradientUnits => _blink.BlinkSVGGradientElement.instance.gradientUnits_Getter_(this);
-
+  AnimatedEnumeration get gradientUnits => wrap_jso(_blink.BlinkSVGGradientElement.instance.gradientUnits_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGGradientElement.spreadMethod')
   @DocsEditable()
-  AnimatedEnumeration get spreadMethod => _blink.BlinkSVGGradientElement.instance.spreadMethod_Getter_(this);
-
+  AnimatedEnumeration get spreadMethod => wrap_jso(_blink.BlinkSVGGradientElement.instance.spreadMethod_Getter_(unwrap_jso(this)));
+  
   @DomName('SVGGradientElement.href')
   @DocsEditable()
-  AnimatedString get href => _blink.BlinkSVGGradientElement.instance.href_Getter_(this);
-
+  AnimatedString get href => wrap_jso(_blink.BlinkSVGGradientElement.instance.href_Getter_(unwrap_jso(this)));
+  
 }
 // 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
diff --git a/sdk/lib/web_audio/dartium/web_audio_dartium.dart b/sdk/lib/web_audio/dartium/web_audio_dartium.dart
index 0d2124c..f38441b 100644
--- a/sdk/lib/web_audio/dartium/web_audio_dartium.dart
+++ b/sdk/lib/web_audio/dartium/web_audio_dartium.dart
@@ -48,6 +48,7 @@
   'WaveShaperNode': () => WaveShaperNode,
 
 };
+
 // 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.
@@ -65,57 +66,57 @@
 
   @DomName('AnalyserNode.fftSize')
   @DocsEditable()
-  int get fftSize => _blink.BlinkAnalyserNode.instance.fftSize_Getter_(this);
-
+  int get fftSize => _blink.BlinkAnalyserNode.instance.fftSize_Getter_(unwrap_jso(this));
+  
   @DomName('AnalyserNode.fftSize')
   @DocsEditable()
-  void set fftSize(int value) => _blink.BlinkAnalyserNode.instance.fftSize_Setter_(this, value);
-
+  void set fftSize(int value) => _blink.BlinkAnalyserNode.instance.fftSize_Setter_(unwrap_jso(this), value);
+  
   @DomName('AnalyserNode.frequencyBinCount')
   @DocsEditable()
-  int get frequencyBinCount => _blink.BlinkAnalyserNode.instance.frequencyBinCount_Getter_(this);
-
+  int get frequencyBinCount => _blink.BlinkAnalyserNode.instance.frequencyBinCount_Getter_(unwrap_jso(this));
+  
   @DomName('AnalyserNode.maxDecibels')
   @DocsEditable()
-  num get maxDecibels => _blink.BlinkAnalyserNode.instance.maxDecibels_Getter_(this);
-
+  num get maxDecibels => _blink.BlinkAnalyserNode.instance.maxDecibels_Getter_(unwrap_jso(this));
+  
   @DomName('AnalyserNode.maxDecibels')
   @DocsEditable()
-  void set maxDecibels(num value) => _blink.BlinkAnalyserNode.instance.maxDecibels_Setter_(this, value);
-
+  void set maxDecibels(num value) => _blink.BlinkAnalyserNode.instance.maxDecibels_Setter_(unwrap_jso(this), value);
+  
   @DomName('AnalyserNode.minDecibels')
   @DocsEditable()
-  num get minDecibels => _blink.BlinkAnalyserNode.instance.minDecibels_Getter_(this);
-
+  num get minDecibels => _blink.BlinkAnalyserNode.instance.minDecibels_Getter_(unwrap_jso(this));
+  
   @DomName('AnalyserNode.minDecibels')
   @DocsEditable()
-  void set minDecibels(num value) => _blink.BlinkAnalyserNode.instance.minDecibels_Setter_(this, value);
-
+  void set minDecibels(num value) => _blink.BlinkAnalyserNode.instance.minDecibels_Setter_(unwrap_jso(this), value);
+  
   @DomName('AnalyserNode.smoothingTimeConstant')
   @DocsEditable()
-  num get smoothingTimeConstant => _blink.BlinkAnalyserNode.instance.smoothingTimeConstant_Getter_(this);
-
+  num get smoothingTimeConstant => _blink.BlinkAnalyserNode.instance.smoothingTimeConstant_Getter_(unwrap_jso(this));
+  
   @DomName('AnalyserNode.smoothingTimeConstant')
   @DocsEditable()
-  void set smoothingTimeConstant(num value) => _blink.BlinkAnalyserNode.instance.smoothingTimeConstant_Setter_(this, value);
-
+  void set smoothingTimeConstant(num value) => _blink.BlinkAnalyserNode.instance.smoothingTimeConstant_Setter_(unwrap_jso(this), value);
+  
   @DomName('AnalyserNode.getByteFrequencyData')
   @DocsEditable()
-  void getByteFrequencyData(Uint8List array) => _blink.BlinkAnalyserNode.instance.getByteFrequencyData_Callback_1_(this, array);
-
+  void getByteFrequencyData(Uint8List array) => _blink.BlinkAnalyserNode.instance.getByteFrequencyData_Callback_1_(unwrap_jso(this), array);
+  
   @DomName('AnalyserNode.getByteTimeDomainData')
   @DocsEditable()
-  void getByteTimeDomainData(Uint8List array) => _blink.BlinkAnalyserNode.instance.getByteTimeDomainData_Callback_1_(this, array);
-
+  void getByteTimeDomainData(Uint8List array) => _blink.BlinkAnalyserNode.instance.getByteTimeDomainData_Callback_1_(unwrap_jso(this), array);
+  
   @DomName('AnalyserNode.getFloatFrequencyData')
   @DocsEditable()
-  void getFloatFrequencyData(Float32List array) => _blink.BlinkAnalyserNode.instance.getFloatFrequencyData_Callback_1_(this, array);
-
+  void getFloatFrequencyData(Float32List array) => _blink.BlinkAnalyserNode.instance.getFloatFrequencyData_Callback_1_(unwrap_jso(this), array);
+  
   @DomName('AnalyserNode.getFloatTimeDomainData')
   @DocsEditable()
   @Experimental() // untriaged
-  void getFloatTimeDomainData(Float32List array) => _blink.BlinkAnalyserNode.instance.getFloatTimeDomainData_Callback_1_(this, array);
-
+  void getFloatTimeDomainData(Float32List array) => _blink.BlinkAnalyserNode.instance.getFloatTimeDomainData_Callback_1_(unwrap_jso(this), array);
+  
 }
 // 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
@@ -134,24 +135,24 @@
 
   @DomName('AudioBuffer.duration')
   @DocsEditable()
-  double get duration => _blink.BlinkAudioBuffer.instance.duration_Getter_(this);
-
+  double get duration => _blink.BlinkAudioBuffer.instance.duration_Getter_(unwrap_jso(this));
+  
   @DomName('AudioBuffer.length')
   @DocsEditable()
-  int get length => _blink.BlinkAudioBuffer.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkAudioBuffer.instance.length_Getter_(unwrap_jso(this));
+  
   @DomName('AudioBuffer.numberOfChannels')
   @DocsEditable()
-  int get numberOfChannels => _blink.BlinkAudioBuffer.instance.numberOfChannels_Getter_(this);
-
+  int get numberOfChannels => _blink.BlinkAudioBuffer.instance.numberOfChannels_Getter_(unwrap_jso(this));
+  
   @DomName('AudioBuffer.sampleRate')
   @DocsEditable()
-  double get sampleRate => _blink.BlinkAudioBuffer.instance.sampleRate_Getter_(this);
-
+  double get sampleRate => _blink.BlinkAudioBuffer.instance.sampleRate_Getter_(unwrap_jso(this));
+  
   @DomName('AudioBuffer.getChannelData')
   @DocsEditable()
-  Float32List getChannelData(int channelIndex) => _blink.BlinkAudioBuffer.instance.getChannelData_Callback_1_(this, channelIndex);
-
+  Float32List getChannelData(int channelIndex) => _blink.BlinkAudioBuffer.instance.getChannelData_Callback_1_(unwrap_jso(this), channelIndex);
+  
 }
 // 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
@@ -194,63 +195,63 @@
 
   @DomName('AudioBufferSourceNode.buffer')
   @DocsEditable()
-  AudioBuffer get buffer => _blink.BlinkAudioBufferSourceNode.instance.buffer_Getter_(this);
-
+  AudioBuffer get buffer => wrap_jso(_blink.BlinkAudioBufferSourceNode.instance.buffer_Getter_(unwrap_jso(this)));
+  
   @DomName('AudioBufferSourceNode.buffer')
   @DocsEditable()
-  void set buffer(AudioBuffer value) => _blink.BlinkAudioBufferSourceNode.instance.buffer_Setter_(this, value);
-
+  void set buffer(AudioBuffer value) => _blink.BlinkAudioBufferSourceNode.instance.buffer_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('AudioBufferSourceNode.loop')
   @DocsEditable()
-  bool get loop => _blink.BlinkAudioBufferSourceNode.instance.loop_Getter_(this);
-
+  bool get loop => _blink.BlinkAudioBufferSourceNode.instance.loop_Getter_(unwrap_jso(this));
+  
   @DomName('AudioBufferSourceNode.loop')
   @DocsEditable()
-  void set loop(bool value) => _blink.BlinkAudioBufferSourceNode.instance.loop_Setter_(this, value);
-
+  void set loop(bool value) => _blink.BlinkAudioBufferSourceNode.instance.loop_Setter_(unwrap_jso(this), value);
+  
   @DomName('AudioBufferSourceNode.loopEnd')
   @DocsEditable()
-  num get loopEnd => _blink.BlinkAudioBufferSourceNode.instance.loopEnd_Getter_(this);
-
+  num get loopEnd => _blink.BlinkAudioBufferSourceNode.instance.loopEnd_Getter_(unwrap_jso(this));
+  
   @DomName('AudioBufferSourceNode.loopEnd')
   @DocsEditable()
-  void set loopEnd(num value) => _blink.BlinkAudioBufferSourceNode.instance.loopEnd_Setter_(this, value);
-
+  void set loopEnd(num value) => _blink.BlinkAudioBufferSourceNode.instance.loopEnd_Setter_(unwrap_jso(this), value);
+  
   @DomName('AudioBufferSourceNode.loopStart')
   @DocsEditable()
-  num get loopStart => _blink.BlinkAudioBufferSourceNode.instance.loopStart_Getter_(this);
-
+  num get loopStart => _blink.BlinkAudioBufferSourceNode.instance.loopStart_Getter_(unwrap_jso(this));
+  
   @DomName('AudioBufferSourceNode.loopStart')
   @DocsEditable()
-  void set loopStart(num value) => _blink.BlinkAudioBufferSourceNode.instance.loopStart_Setter_(this, value);
-
+  void set loopStart(num value) => _blink.BlinkAudioBufferSourceNode.instance.loopStart_Setter_(unwrap_jso(this), value);
+  
   @DomName('AudioBufferSourceNode.playbackRate')
   @DocsEditable()
-  AudioParam get playbackRate => _blink.BlinkAudioBufferSourceNode.instance.playbackRate_Getter_(this);
-
+  AudioParam get playbackRate => wrap_jso(_blink.BlinkAudioBufferSourceNode.instance.playbackRate_Getter_(unwrap_jso(this)));
+  
   void start([num when, num grainOffset, num grainDuration]) {
     if (grainDuration != null) {
-      _blink.BlinkAudioBufferSourceNode.instance.start_Callback_3_(this, when, grainOffset, grainDuration);
+      _blink.BlinkAudioBufferSourceNode.instance.start_Callback_3_(unwrap_jso(this), when, grainOffset, grainDuration);
       return;
     }
     if (grainOffset != null) {
-      _blink.BlinkAudioBufferSourceNode.instance.start_Callback_2_(this, when, grainOffset);
+      _blink.BlinkAudioBufferSourceNode.instance.start_Callback_2_(unwrap_jso(this), when, grainOffset);
       return;
     }
     if (when != null) {
-      _blink.BlinkAudioBufferSourceNode.instance.start_Callback_1_(this, when);
+      _blink.BlinkAudioBufferSourceNode.instance.start_Callback_1_(unwrap_jso(this), when);
       return;
     }
-    _blink.BlinkAudioBufferSourceNode.instance.start_Callback_0_(this);
+    _blink.BlinkAudioBufferSourceNode.instance.start_Callback_0_(unwrap_jso(this));
     return;
   }
 
   void stop([num when]) {
     if (when != null) {
-      _blink.BlinkAudioBufferSourceNode.instance.stop_Callback_1_(this, when);
+      _blink.BlinkAudioBufferSourceNode.instance.stop_Callback_1_(unwrap_jso(this), when);
       return;
     }
-    _blink.BlinkAudioBufferSourceNode.instance.stop_Callback_0_(this);
+    _blink.BlinkAudioBufferSourceNode.instance.stop_Callback_0_(unwrap_jso(this));
     return;
   }
 
@@ -296,119 +297,119 @@
 
   @DomName('AudioContext.currentTime')
   @DocsEditable()
-  double get currentTime => _blink.BlinkAudioContext.instance.currentTime_Getter_(this);
-
+  double get currentTime => _blink.BlinkAudioContext.instance.currentTime_Getter_(unwrap_jso(this));
+  
   @DomName('AudioContext.destination')
   @DocsEditable()
-  AudioDestinationNode get destination => _blink.BlinkAudioContext.instance.destination_Getter_(this);
-
+  AudioDestinationNode get destination => wrap_jso(_blink.BlinkAudioContext.instance.destination_Getter_(unwrap_jso(this)));
+  
   @DomName('AudioContext.listener')
   @DocsEditable()
-  AudioListener get listener => _blink.BlinkAudioContext.instance.listener_Getter_(this);
-
+  AudioListener get listener => wrap_jso(_blink.BlinkAudioContext.instance.listener_Getter_(unwrap_jso(this)));
+  
   @DomName('AudioContext.sampleRate')
   @DocsEditable()
-  double get sampleRate => _blink.BlinkAudioContext.instance.sampleRate_Getter_(this);
-
+  double get sampleRate => _blink.BlinkAudioContext.instance.sampleRate_Getter_(unwrap_jso(this));
+  
   @DomName('AudioContext.createAnalyser')
   @DocsEditable()
-  AnalyserNode createAnalyser() => _blink.BlinkAudioContext.instance.createAnalyser_Callback_0_(this);
-
+  AnalyserNode createAnalyser() => wrap_jso(_blink.BlinkAudioContext.instance.createAnalyser_Callback_0_(unwrap_jso(this)));
+  
   @DomName('AudioContext.createBiquadFilter')
   @DocsEditable()
-  BiquadFilterNode createBiquadFilter() => _blink.BlinkAudioContext.instance.createBiquadFilter_Callback_0_(this);
-
+  BiquadFilterNode createBiquadFilter() => wrap_jso(_blink.BlinkAudioContext.instance.createBiquadFilter_Callback_0_(unwrap_jso(this)));
+  
   @DomName('AudioContext.createBuffer')
   @DocsEditable()
-  AudioBuffer createBuffer(int numberOfChannels, int numberOfFrames, num sampleRate) => _blink.BlinkAudioContext.instance.createBuffer_Callback_3_(this, numberOfChannels, numberOfFrames, sampleRate);
-
+  AudioBuffer createBuffer(int numberOfChannels, int numberOfFrames, num sampleRate) => wrap_jso(_blink.BlinkAudioContext.instance.createBuffer_Callback_3_(unwrap_jso(this), numberOfChannels, numberOfFrames, sampleRate));
+  
   @DomName('AudioContext.createBufferSource')
   @DocsEditable()
-  AudioBufferSourceNode createBufferSource() => _blink.BlinkAudioContext.instance.createBufferSource_Callback_0_(this);
-
+  AudioBufferSourceNode createBufferSource() => wrap_jso(_blink.BlinkAudioContext.instance.createBufferSource_Callback_0_(unwrap_jso(this)));
+  
   ChannelMergerNode createChannelMerger([int numberOfInputs]) {
     if (numberOfInputs != null) {
-      return _blink.BlinkAudioContext.instance.createChannelMerger_Callback_1_(this, numberOfInputs);
+      return wrap_jso(_blink.BlinkAudioContext.instance.createChannelMerger_Callback_1_(unwrap_jso(this), numberOfInputs));
     }
-    return _blink.BlinkAudioContext.instance.createChannelMerger_Callback_0_(this);
+    return wrap_jso(_blink.BlinkAudioContext.instance.createChannelMerger_Callback_0_(unwrap_jso(this)));
   }
 
   ChannelSplitterNode createChannelSplitter([int numberOfOutputs]) {
     if (numberOfOutputs != null) {
-      return _blink.BlinkAudioContext.instance.createChannelSplitter_Callback_1_(this, numberOfOutputs);
+      return wrap_jso(_blink.BlinkAudioContext.instance.createChannelSplitter_Callback_1_(unwrap_jso(this), numberOfOutputs));
     }
-    return _blink.BlinkAudioContext.instance.createChannelSplitter_Callback_0_(this);
+    return wrap_jso(_blink.BlinkAudioContext.instance.createChannelSplitter_Callback_0_(unwrap_jso(this)));
   }
 
   @DomName('AudioContext.createConvolver')
   @DocsEditable()
-  ConvolverNode createConvolver() => _blink.BlinkAudioContext.instance.createConvolver_Callback_0_(this);
-
+  ConvolverNode createConvolver() => wrap_jso(_blink.BlinkAudioContext.instance.createConvolver_Callback_0_(unwrap_jso(this)));
+  
   DelayNode createDelay([num maxDelayTime]) {
     if (maxDelayTime != null) {
-      return _blink.BlinkAudioContext.instance.createDelay_Callback_1_(this, maxDelayTime);
+      return wrap_jso(_blink.BlinkAudioContext.instance.createDelay_Callback_1_(unwrap_jso(this), maxDelayTime));
     }
-    return _blink.BlinkAudioContext.instance.createDelay_Callback_0_(this);
+    return wrap_jso(_blink.BlinkAudioContext.instance.createDelay_Callback_0_(unwrap_jso(this)));
   }
 
   @DomName('AudioContext.createDynamicsCompressor')
   @DocsEditable()
-  DynamicsCompressorNode createDynamicsCompressor() => _blink.BlinkAudioContext.instance.createDynamicsCompressor_Callback_0_(this);
-
+  DynamicsCompressorNode createDynamicsCompressor() => wrap_jso(_blink.BlinkAudioContext.instance.createDynamicsCompressor_Callback_0_(unwrap_jso(this)));
+  
   @DomName('AudioContext.createGain')
   @DocsEditable()
-  GainNode createGain() => _blink.BlinkAudioContext.instance.createGain_Callback_0_(this);
-
+  GainNode createGain() => wrap_jso(_blink.BlinkAudioContext.instance.createGain_Callback_0_(unwrap_jso(this)));
+  
   @DomName('AudioContext.createMediaElementSource')
   @DocsEditable()
-  MediaElementAudioSourceNode createMediaElementSource(MediaElement mediaElement) => _blink.BlinkAudioContext.instance.createMediaElementSource_Callback_1_(this, mediaElement);
-
+  MediaElementAudioSourceNode createMediaElementSource(MediaElement mediaElement) => wrap_jso(_blink.BlinkAudioContext.instance.createMediaElementSource_Callback_1_(unwrap_jso(this), unwrap_jso(mediaElement)));
+  
   @DomName('AudioContext.createMediaStreamDestination')
   @DocsEditable()
-  MediaStreamAudioDestinationNode createMediaStreamDestination() => _blink.BlinkAudioContext.instance.createMediaStreamDestination_Callback_0_(this);
-
+  MediaStreamAudioDestinationNode createMediaStreamDestination() => wrap_jso(_blink.BlinkAudioContext.instance.createMediaStreamDestination_Callback_0_(unwrap_jso(this)));
+  
   @DomName('AudioContext.createMediaStreamSource')
   @DocsEditable()
-  MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream) => _blink.BlinkAudioContext.instance.createMediaStreamSource_Callback_1_(this, mediaStream);
-
+  MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream) => wrap_jso(_blink.BlinkAudioContext.instance.createMediaStreamSource_Callback_1_(unwrap_jso(this), unwrap_jso(mediaStream)));
+  
   @DomName('AudioContext.createOscillator')
   @DocsEditable()
-  OscillatorNode createOscillator() => _blink.BlinkAudioContext.instance.createOscillator_Callback_0_(this);
-
+  OscillatorNode createOscillator() => wrap_jso(_blink.BlinkAudioContext.instance.createOscillator_Callback_0_(unwrap_jso(this)));
+  
   @DomName('AudioContext.createPanner')
   @DocsEditable()
-  PannerNode createPanner() => _blink.BlinkAudioContext.instance.createPanner_Callback_0_(this);
-
+  PannerNode createPanner() => wrap_jso(_blink.BlinkAudioContext.instance.createPanner_Callback_0_(unwrap_jso(this)));
+  
   @DomName('AudioContext.createPeriodicWave')
   @DocsEditable()
   @Experimental() // untriaged
-  PeriodicWave createPeriodicWave(Float32List real, Float32List imag) => _blink.BlinkAudioContext.instance.createPeriodicWave_Callback_2_(this, real, imag);
-
+  PeriodicWave createPeriodicWave(Float32List real, Float32List imag) => wrap_jso(_blink.BlinkAudioContext.instance.createPeriodicWave_Callback_2_(unwrap_jso(this), real, imag));
+  
   ScriptProcessorNode createScriptProcessor([int bufferSize, int numberOfInputChannels, int numberOfOutputChannels]) {
     if (numberOfOutputChannels != null) {
-      return _blink.BlinkAudioContext.instance.createScriptProcessor_Callback_3_(this, bufferSize, numberOfInputChannels, numberOfOutputChannels);
+      return wrap_jso(_blink.BlinkAudioContext.instance.createScriptProcessor_Callback_3_(unwrap_jso(this), bufferSize, numberOfInputChannels, numberOfOutputChannels));
     }
     if (numberOfInputChannels != null) {
-      return _blink.BlinkAudioContext.instance.createScriptProcessor_Callback_2_(this, bufferSize, numberOfInputChannels);
+      return wrap_jso(_blink.BlinkAudioContext.instance.createScriptProcessor_Callback_2_(unwrap_jso(this), bufferSize, numberOfInputChannels));
     }
     if (bufferSize != null) {
-      return _blink.BlinkAudioContext.instance.createScriptProcessor_Callback_1_(this, bufferSize);
+      return wrap_jso(_blink.BlinkAudioContext.instance.createScriptProcessor_Callback_1_(unwrap_jso(this), bufferSize));
     }
-    return _blink.BlinkAudioContext.instance.createScriptProcessor_Callback_0_(this);
+    return wrap_jso(_blink.BlinkAudioContext.instance.createScriptProcessor_Callback_0_(unwrap_jso(this)));
   }
 
   @DomName('AudioContext.createWaveShaper')
   @DocsEditable()
-  WaveShaperNode createWaveShaper() => _blink.BlinkAudioContext.instance.createWaveShaper_Callback_0_(this);
-
+  WaveShaperNode createWaveShaper() => wrap_jso(_blink.BlinkAudioContext.instance.createWaveShaper_Callback_0_(unwrap_jso(this)));
+  
   @DomName('AudioContext.decodeAudioData')
   @DocsEditable()
-  void _decodeAudioData(ByteBuffer audioData, AudioBufferCallback successCallback, [AudioBufferCallback errorCallback]) => _blink.BlinkAudioContext.instance.decodeAudioData_Callback_3_(this, audioData, successCallback, errorCallback);
-
+  void _decodeAudioData(ByteBuffer audioData, AudioBufferCallback successCallback, [AudioBufferCallback errorCallback]) => _blink.BlinkAudioContext.instance.decodeAudioData_Callback_3_(unwrap_jso(this), audioData, unwrap_jso(successCallback), unwrap_jso(errorCallback));
+  
   @DomName('AudioContext.startRendering')
   @DocsEditable()
-  void startRendering() => _blink.BlinkAudioContext.instance.startRendering_Callback_0_(this);
-
+  void startRendering() => _blink.BlinkAudioContext.instance.startRendering_Callback_0_(unwrap_jso(this));
+  
   /// Stream of `complete` events handled by this [AudioContext].
   @DomName('AudioContext.oncomplete')
   @DocsEditable()
@@ -446,8 +447,8 @@
 
   @DomName('AudioDestinationNode.maxChannelCount')
   @DocsEditable()
-  int get maxChannelCount => _blink.BlinkAudioDestinationNode.instance.maxChannelCount_Getter_(this);
-
+  int get maxChannelCount => _blink.BlinkAudioDestinationNode.instance.maxChannelCount_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -466,32 +467,32 @@
 
   @DomName('AudioListener.dopplerFactor')
   @DocsEditable()
-  num get dopplerFactor => _blink.BlinkAudioListener.instance.dopplerFactor_Getter_(this);
-
+  num get dopplerFactor => _blink.BlinkAudioListener.instance.dopplerFactor_Getter_(unwrap_jso(this));
+  
   @DomName('AudioListener.dopplerFactor')
   @DocsEditable()
-  void set dopplerFactor(num value) => _blink.BlinkAudioListener.instance.dopplerFactor_Setter_(this, value);
-
+  void set dopplerFactor(num value) => _blink.BlinkAudioListener.instance.dopplerFactor_Setter_(unwrap_jso(this), value);
+  
   @DomName('AudioListener.speedOfSound')
   @DocsEditable()
-  num get speedOfSound => _blink.BlinkAudioListener.instance.speedOfSound_Getter_(this);
-
+  num get speedOfSound => _blink.BlinkAudioListener.instance.speedOfSound_Getter_(unwrap_jso(this));
+  
   @DomName('AudioListener.speedOfSound')
   @DocsEditable()
-  void set speedOfSound(num value) => _blink.BlinkAudioListener.instance.speedOfSound_Setter_(this, value);
-
+  void set speedOfSound(num value) => _blink.BlinkAudioListener.instance.speedOfSound_Setter_(unwrap_jso(this), value);
+  
   @DomName('AudioListener.setOrientation')
   @DocsEditable()
-  void setOrientation(num x, num y, num z, num xUp, num yUp, num zUp) => _blink.BlinkAudioListener.instance.setOrientation_Callback_6_(this, x, y, z, xUp, yUp, zUp);
-
+  void setOrientation(num x, num y, num z, num xUp, num yUp, num zUp) => _blink.BlinkAudioListener.instance.setOrientation_Callback_6_(unwrap_jso(this), x, y, z, xUp, yUp, zUp);
+  
   @DomName('AudioListener.setPosition')
   @DocsEditable()
-  void setPosition(num x, num y, num z) => _blink.BlinkAudioListener.instance.setPosition_Callback_3_(this, x, y, z);
-
+  void setPosition(num x, num y, num z) => _blink.BlinkAudioListener.instance.setPosition_Callback_3_(unwrap_jso(this), x, y, z);
+  
   @DomName('AudioListener.setVelocity')
   @DocsEditable()
-  void setVelocity(num x, num y, num z) => _blink.BlinkAudioListener.instance.setVelocity_Callback_3_(this, x, y, z);
-
+  void setVelocity(num x, num y, num z) => _blink.BlinkAudioListener.instance.setVelocity_Callback_3_(unwrap_jso(this), x, y, z);
+  
 }
 // 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
@@ -507,47 +508,47 @@
 
   @DomName('AudioNode.channelCount')
   @DocsEditable()
-  int get channelCount => _blink.BlinkAudioNode.instance.channelCount_Getter_(this);
-
+  int get channelCount => _blink.BlinkAudioNode.instance.channelCount_Getter_(unwrap_jso(this));
+  
   @DomName('AudioNode.channelCount')
   @DocsEditable()
-  void set channelCount(int value) => _blink.BlinkAudioNode.instance.channelCount_Setter_(this, value);
-
+  void set channelCount(int value) => _blink.BlinkAudioNode.instance.channelCount_Setter_(unwrap_jso(this), value);
+  
   @DomName('AudioNode.channelCountMode')
   @DocsEditable()
-  String get channelCountMode => _blink.BlinkAudioNode.instance.channelCountMode_Getter_(this);
-
+  String get channelCountMode => _blink.BlinkAudioNode.instance.channelCountMode_Getter_(unwrap_jso(this));
+  
   @DomName('AudioNode.channelCountMode')
   @DocsEditable()
-  void set channelCountMode(String value) => _blink.BlinkAudioNode.instance.channelCountMode_Setter_(this, value);
-
+  void set channelCountMode(String value) => _blink.BlinkAudioNode.instance.channelCountMode_Setter_(unwrap_jso(this), value);
+  
   @DomName('AudioNode.channelInterpretation')
   @DocsEditable()
-  String get channelInterpretation => _blink.BlinkAudioNode.instance.channelInterpretation_Getter_(this);
-
+  String get channelInterpretation => _blink.BlinkAudioNode.instance.channelInterpretation_Getter_(unwrap_jso(this));
+  
   @DomName('AudioNode.channelInterpretation')
   @DocsEditable()
-  void set channelInterpretation(String value) => _blink.BlinkAudioNode.instance.channelInterpretation_Setter_(this, value);
-
+  void set channelInterpretation(String value) => _blink.BlinkAudioNode.instance.channelInterpretation_Setter_(unwrap_jso(this), value);
+  
   @DomName('AudioNode.context')
   @DocsEditable()
-  AudioContext get context => _blink.BlinkAudioNode.instance.context_Getter_(this);
-
+  AudioContext get context => wrap_jso(_blink.BlinkAudioNode.instance.context_Getter_(unwrap_jso(this)));
+  
   @DomName('AudioNode.numberOfInputs')
   @DocsEditable()
-  int get numberOfInputs => _blink.BlinkAudioNode.instance.numberOfInputs_Getter_(this);
-
+  int get numberOfInputs => _blink.BlinkAudioNode.instance.numberOfInputs_Getter_(unwrap_jso(this));
+  
   @DomName('AudioNode.numberOfOutputs')
   @DocsEditable()
-  int get numberOfOutputs => _blink.BlinkAudioNode.instance.numberOfOutputs_Getter_(this);
-
+  int get numberOfOutputs => _blink.BlinkAudioNode.instance.numberOfOutputs_Getter_(unwrap_jso(this));
+  
   void _connect(destination, int output, [int input]) {
     if ((input is int || input == null) && (output is int || output == null) && (destination is AudioNode || destination == null)) {
-      _blink.BlinkAudioNode.instance.connect_Callback_3_(this, destination, output, input);
+      _blink.BlinkAudioNode.instance.connect_Callback_3_(unwrap_jso(this), unwrap_jso(destination), output, input);
       return;
     }
     if ((output is int || output == null) && (destination is AudioParam || destination == null) && input == null) {
-      _blink.BlinkAudioNode.instance.connect_Callback_2_(this, destination, output);
+      _blink.BlinkAudioNode.instance.connect_Callback_2_(unwrap_jso(this), unwrap_jso(destination), output);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -555,8 +556,8 @@
 
   @DomName('AudioNode.disconnect')
   @DocsEditable()
-  void disconnect(int output) => _blink.BlinkAudioNode.instance.disconnect_Callback_1_(this, output);
-
+  void disconnect(int output) => _blink.BlinkAudioNode.instance.disconnect_Callback_1_(unwrap_jso(this), output);
+  
   @DomName('AudioNode.connect')
   void connectNode(AudioNode destination, [int output = 0, int input = 0]) =>
       _connect(destination, output, input);
@@ -582,40 +583,40 @@
 
   @DomName('AudioParam.defaultValue')
   @DocsEditable()
-  double get defaultValue => _blink.BlinkAudioParam.instance.defaultValue_Getter_(this);
-
+  double get defaultValue => _blink.BlinkAudioParam.instance.defaultValue_Getter_(unwrap_jso(this));
+  
   @DomName('AudioParam.value')
   @DocsEditable()
-  num get value => _blink.BlinkAudioParam.instance.value_Getter_(this);
-
+  num get value => _blink.BlinkAudioParam.instance.value_Getter_(unwrap_jso(this));
+  
   @DomName('AudioParam.value')
   @DocsEditable()
-  void set value(num value) => _blink.BlinkAudioParam.instance.value_Setter_(this, value);
-
+  void set value(num value) => _blink.BlinkAudioParam.instance.value_Setter_(unwrap_jso(this), value);
+  
   @DomName('AudioParam.cancelScheduledValues')
   @DocsEditable()
-  void cancelScheduledValues(num startTime) => _blink.BlinkAudioParam.instance.cancelScheduledValues_Callback_1_(this, startTime);
-
+  void cancelScheduledValues(num startTime) => _blink.BlinkAudioParam.instance.cancelScheduledValues_Callback_1_(unwrap_jso(this), startTime);
+  
   @DomName('AudioParam.exponentialRampToValueAtTime')
   @DocsEditable()
-  void exponentialRampToValueAtTime(num value, num time) => _blink.BlinkAudioParam.instance.exponentialRampToValueAtTime_Callback_2_(this, value, time);
-
+  void exponentialRampToValueAtTime(num value, num time) => _blink.BlinkAudioParam.instance.exponentialRampToValueAtTime_Callback_2_(unwrap_jso(this), value, time);
+  
   @DomName('AudioParam.linearRampToValueAtTime')
   @DocsEditable()
-  void linearRampToValueAtTime(num value, num time) => _blink.BlinkAudioParam.instance.linearRampToValueAtTime_Callback_2_(this, value, time);
-
+  void linearRampToValueAtTime(num value, num time) => _blink.BlinkAudioParam.instance.linearRampToValueAtTime_Callback_2_(unwrap_jso(this), value, time);
+  
   @DomName('AudioParam.setTargetAtTime')
   @DocsEditable()
-  void setTargetAtTime(num target, num time, num timeConstant) => _blink.BlinkAudioParam.instance.setTargetAtTime_Callback_3_(this, target, time, timeConstant);
-
+  void setTargetAtTime(num target, num time, num timeConstant) => _blink.BlinkAudioParam.instance.setTargetAtTime_Callback_3_(unwrap_jso(this), target, time, timeConstant);
+  
   @DomName('AudioParam.setValueAtTime')
   @DocsEditable()
-  void setValueAtTime(num value, num time) => _blink.BlinkAudioParam.instance.setValueAtTime_Callback_2_(this, value, time);
-
+  void setValueAtTime(num value, num time) => _blink.BlinkAudioParam.instance.setValueAtTime_Callback_2_(unwrap_jso(this), value, time);
+  
   @DomName('AudioParam.setValueCurveAtTime')
   @DocsEditable()
-  void setValueCurveAtTime(Float32List values, num time, num duration) => _blink.BlinkAudioParam.instance.setValueCurveAtTime_Callback_3_(this, values, time, duration);
-
+  void setValueCurveAtTime(Float32List values, num time, num duration) => _blink.BlinkAudioParam.instance.setValueCurveAtTime_Callback_3_(unwrap_jso(this), values, time, duration);
+  
 }
 // 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
@@ -634,17 +635,17 @@
 
   @DomName('AudioProcessingEvent.inputBuffer')
   @DocsEditable()
-  AudioBuffer get inputBuffer => _blink.BlinkAudioProcessingEvent.instance.inputBuffer_Getter_(this);
-
+  AudioBuffer get inputBuffer => wrap_jso(_blink.BlinkAudioProcessingEvent.instance.inputBuffer_Getter_(unwrap_jso(this)));
+  
   @DomName('AudioProcessingEvent.outputBuffer')
   @DocsEditable()
-  AudioBuffer get outputBuffer => _blink.BlinkAudioProcessingEvent.instance.outputBuffer_Getter_(this);
-
+  AudioBuffer get outputBuffer => wrap_jso(_blink.BlinkAudioProcessingEvent.instance.outputBuffer_Getter_(unwrap_jso(this)));
+  
   @DomName('AudioProcessingEvent.playbackTime')
   @DocsEditable()
   @Experimental() // untriaged
-  double get playbackTime => _blink.BlinkAudioProcessingEvent.instance.playbackTime_Getter_(this);
-
+  double get playbackTime => _blink.BlinkAudioProcessingEvent.instance.playbackTime_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -679,32 +680,32 @@
 
   @DomName('BiquadFilterNode.Q')
   @DocsEditable()
-  AudioParam get Q => _blink.BlinkBiquadFilterNode.instance.Q_Getter_(this);
-
+  AudioParam get Q => wrap_jso(_blink.BlinkBiquadFilterNode.instance.Q_Getter_(unwrap_jso(this)));
+  
   @DomName('BiquadFilterNode.detune')
   @DocsEditable()
-  AudioParam get detune => _blink.BlinkBiquadFilterNode.instance.detune_Getter_(this);
-
+  AudioParam get detune => wrap_jso(_blink.BlinkBiquadFilterNode.instance.detune_Getter_(unwrap_jso(this)));
+  
   @DomName('BiquadFilterNode.frequency')
   @DocsEditable()
-  AudioParam get frequency => _blink.BlinkBiquadFilterNode.instance.frequency_Getter_(this);
-
+  AudioParam get frequency => wrap_jso(_blink.BlinkBiquadFilterNode.instance.frequency_Getter_(unwrap_jso(this)));
+  
   @DomName('BiquadFilterNode.gain')
   @DocsEditable()
-  AudioParam get gain => _blink.BlinkBiquadFilterNode.instance.gain_Getter_(this);
-
+  AudioParam get gain => wrap_jso(_blink.BlinkBiquadFilterNode.instance.gain_Getter_(unwrap_jso(this)));
+  
   @DomName('BiquadFilterNode.type')
   @DocsEditable()
-  String get type => _blink.BlinkBiquadFilterNode.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkBiquadFilterNode.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('BiquadFilterNode.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkBiquadFilterNode.instance.type_Setter_(this, value);
-
+  void set type(String value) => _blink.BlinkBiquadFilterNode.instance.type_Setter_(unwrap_jso(this), value);
+  
   @DomName('BiquadFilterNode.getFrequencyResponse')
   @DocsEditable()
-  void getFrequencyResponse(Float32List frequencyHz, Float32List magResponse, Float32List phaseResponse) => _blink.BlinkBiquadFilterNode.instance.getFrequencyResponse_Callback_3_(this, frequencyHz, magResponse, phaseResponse);
-
+  void getFrequencyResponse(Float32List frequencyHz, Float32List magResponse, Float32List phaseResponse) => _blink.BlinkBiquadFilterNode.instance.getFrequencyResponse_Callback_3_(unwrap_jso(this), frequencyHz, magResponse, phaseResponse);
+  
 }
 // 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
@@ -755,20 +756,20 @@
 
   @DomName('ConvolverNode.buffer')
   @DocsEditable()
-  AudioBuffer get buffer => _blink.BlinkConvolverNode.instance.buffer_Getter_(this);
-
+  AudioBuffer get buffer => wrap_jso(_blink.BlinkConvolverNode.instance.buffer_Getter_(unwrap_jso(this)));
+  
   @DomName('ConvolverNode.buffer')
   @DocsEditable()
-  void set buffer(AudioBuffer value) => _blink.BlinkConvolverNode.instance.buffer_Setter_(this, value);
-
+  void set buffer(AudioBuffer value) => _blink.BlinkConvolverNode.instance.buffer_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('ConvolverNode.normalize')
   @DocsEditable()
-  bool get normalize => _blink.BlinkConvolverNode.instance.normalize_Getter_(this);
-
+  bool get normalize => _blink.BlinkConvolverNode.instance.normalize_Getter_(unwrap_jso(this));
+  
   @DomName('ConvolverNode.normalize')
   @DocsEditable()
-  void set normalize(bool value) => _blink.BlinkConvolverNode.instance.normalize_Setter_(this, value);
-
+  void set normalize(bool value) => _blink.BlinkConvolverNode.instance.normalize_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -787,8 +788,8 @@
 
   @DomName('DelayNode.delayTime')
   @DocsEditable()
-  AudioParam get delayTime => _blink.BlinkDelayNode.instance.delayTime_Getter_(this);
-
+  AudioParam get delayTime => wrap_jso(_blink.BlinkDelayNode.instance.delayTime_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -807,28 +808,28 @@
 
   @DomName('DynamicsCompressorNode.attack')
   @DocsEditable()
-  AudioParam get attack => _blink.BlinkDynamicsCompressorNode.instance.attack_Getter_(this);
-
+  AudioParam get attack => wrap_jso(_blink.BlinkDynamicsCompressorNode.instance.attack_Getter_(unwrap_jso(this)));
+  
   @DomName('DynamicsCompressorNode.knee')
   @DocsEditable()
-  AudioParam get knee => _blink.BlinkDynamicsCompressorNode.instance.knee_Getter_(this);
-
+  AudioParam get knee => wrap_jso(_blink.BlinkDynamicsCompressorNode.instance.knee_Getter_(unwrap_jso(this)));
+  
   @DomName('DynamicsCompressorNode.ratio')
   @DocsEditable()
-  AudioParam get ratio => _blink.BlinkDynamicsCompressorNode.instance.ratio_Getter_(this);
-
+  AudioParam get ratio => wrap_jso(_blink.BlinkDynamicsCompressorNode.instance.ratio_Getter_(unwrap_jso(this)));
+  
   @DomName('DynamicsCompressorNode.reduction')
   @DocsEditable()
-  AudioParam get reduction => _blink.BlinkDynamicsCompressorNode.instance.reduction_Getter_(this);
-
+  AudioParam get reduction => wrap_jso(_blink.BlinkDynamicsCompressorNode.instance.reduction_Getter_(unwrap_jso(this)));
+  
   @DomName('DynamicsCompressorNode.release')
   @DocsEditable()
-  AudioParam get release => _blink.BlinkDynamicsCompressorNode.instance.release_Getter_(this);
-
+  AudioParam get release => wrap_jso(_blink.BlinkDynamicsCompressorNode.instance.release_Getter_(unwrap_jso(this)));
+  
   @DomName('DynamicsCompressorNode.threshold')
   @DocsEditable()
-  AudioParam get threshold => _blink.BlinkDynamicsCompressorNode.instance.threshold_Getter_(this);
-
+  AudioParam get threshold => wrap_jso(_blink.BlinkDynamicsCompressorNode.instance.threshold_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -847,8 +848,8 @@
 
   @DomName('GainNode.gain')
   @DocsEditable()
-  AudioParam get gain => _blink.BlinkGainNode.instance.gain_Getter_(this);
-
+  AudioParam get gain => wrap_jso(_blink.BlinkGainNode.instance.gain_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -868,8 +869,8 @@
   @DomName('MediaElementAudioSourceNode.mediaElement')
   @DocsEditable()
   @Experimental() // non-standard
-  MediaElement get mediaElement => _blink.BlinkMediaElementAudioSourceNode.instance.mediaElement_Getter_(this);
-
+  MediaElement get mediaElement => wrap_jso(_blink.BlinkMediaElementAudioSourceNode.instance.mediaElement_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -888,8 +889,8 @@
 
   @DomName('MediaStreamAudioDestinationNode.stream')
   @DocsEditable()
-  MediaStream get stream => _blink.BlinkMediaStreamAudioDestinationNode.instance.stream_Getter_(this);
-
+  MediaStream get stream => wrap_jso(_blink.BlinkMediaStreamAudioDestinationNode.instance.stream_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -908,8 +909,8 @@
 
   @DomName('MediaStreamAudioSourceNode.mediaStream')
   @DocsEditable()
-  MediaStream get mediaStream => _blink.BlinkMediaStreamAudioSourceNode.instance.mediaStream_Getter_(this);
-
+  MediaStream get mediaStream => wrap_jso(_blink.BlinkMediaStreamAudioSourceNode.instance.mediaStream_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -928,8 +929,8 @@
 
   @DomName('OfflineAudioCompletionEvent.renderedBuffer')
   @DocsEditable()
-  AudioBuffer get renderedBuffer => _blink.BlinkOfflineAudioCompletionEvent.instance.renderedBuffer_Getter_(this);
-
+  AudioBuffer get renderedBuffer => wrap_jso(_blink.BlinkOfflineAudioCompletionEvent.instance.renderedBuffer_Getter_(unwrap_jso(this)));
+  
 }
 // 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
@@ -981,48 +982,48 @@
 
   @DomName('OscillatorNode.detune')
   @DocsEditable()
-  AudioParam get detune => _blink.BlinkOscillatorNode.instance.detune_Getter_(this);
-
+  AudioParam get detune => wrap_jso(_blink.BlinkOscillatorNode.instance.detune_Getter_(unwrap_jso(this)));
+  
   @DomName('OscillatorNode.frequency')
   @DocsEditable()
-  AudioParam get frequency => _blink.BlinkOscillatorNode.instance.frequency_Getter_(this);
-
+  AudioParam get frequency => wrap_jso(_blink.BlinkOscillatorNode.instance.frequency_Getter_(unwrap_jso(this)));
+  
   @DomName('OscillatorNode.type')
   @DocsEditable()
-  String get type => _blink.BlinkOscillatorNode.instance.type_Getter_(this);
-
+  String get type => _blink.BlinkOscillatorNode.instance.type_Getter_(unwrap_jso(this));
+  
   @DomName('OscillatorNode.type')
   @DocsEditable()
-  void set type(String value) => _blink.BlinkOscillatorNode.instance.type_Setter_(this, value);
-
+  void set type(String value) => _blink.BlinkOscillatorNode.instance.type_Setter_(unwrap_jso(this), value);
+  
   @DomName('OscillatorNode.noteOff')
   @DocsEditable()
-  void noteOff(num when) => _blink.BlinkOscillatorNode.instance.noteOff_Callback_1_(this, when);
-
+  void noteOff(num when) => _blink.BlinkOscillatorNode.instance.noteOff_Callback_1_(unwrap_jso(this), when);
+  
   @DomName('OscillatorNode.noteOn')
   @DocsEditable()
-  void noteOn(num when) => _blink.BlinkOscillatorNode.instance.noteOn_Callback_1_(this, when);
-
+  void noteOn(num when) => _blink.BlinkOscillatorNode.instance.noteOn_Callback_1_(unwrap_jso(this), when);
+  
   @DomName('OscillatorNode.setPeriodicWave')
   @DocsEditable()
   @Experimental() // untriaged
-  void setPeriodicWave(PeriodicWave periodicWave) => _blink.BlinkOscillatorNode.instance.setPeriodicWave_Callback_1_(this, periodicWave);
-
+  void setPeriodicWave(PeriodicWave periodicWave) => _blink.BlinkOscillatorNode.instance.setPeriodicWave_Callback_1_(unwrap_jso(this), unwrap_jso(periodicWave));
+  
   void start([num when]) {
     if (when != null) {
-      _blink.BlinkOscillatorNode.instance.start_Callback_1_(this, when);
+      _blink.BlinkOscillatorNode.instance.start_Callback_1_(unwrap_jso(this), when);
       return;
     }
-    _blink.BlinkOscillatorNode.instance.start_Callback_0_(this);
+    _blink.BlinkOscillatorNode.instance.start_Callback_0_(unwrap_jso(this));
     return;
   }
 
   void stop([num when]) {
     if (when != null) {
-      _blink.BlinkOscillatorNode.instance.stop_Callback_1_(this, when);
+      _blink.BlinkOscillatorNode.instance.stop_Callback_1_(unwrap_jso(this), when);
       return;
     }
-    _blink.BlinkOscillatorNode.instance.stop_Callback_0_(this);
+    _blink.BlinkOscillatorNode.instance.stop_Callback_0_(unwrap_jso(this));
     return;
   }
 
@@ -1050,80 +1051,80 @@
 
   @DomName('PannerNode.coneInnerAngle')
   @DocsEditable()
-  num get coneInnerAngle => _blink.BlinkPannerNode.instance.coneInnerAngle_Getter_(this);
-
+  num get coneInnerAngle => _blink.BlinkPannerNode.instance.coneInnerAngle_Getter_(unwrap_jso(this));
+  
   @DomName('PannerNode.coneInnerAngle')
   @DocsEditable()
-  void set coneInnerAngle(num value) => _blink.BlinkPannerNode.instance.coneInnerAngle_Setter_(this, value);
-
+  void set coneInnerAngle(num value) => _blink.BlinkPannerNode.instance.coneInnerAngle_Setter_(unwrap_jso(this), value);
+  
   @DomName('PannerNode.coneOuterAngle')
   @DocsEditable()
-  num get coneOuterAngle => _blink.BlinkPannerNode.instance.coneOuterAngle_Getter_(this);
-
+  num get coneOuterAngle => _blink.BlinkPannerNode.instance.coneOuterAngle_Getter_(unwrap_jso(this));
+  
   @DomName('PannerNode.coneOuterAngle')
   @DocsEditable()
-  void set coneOuterAngle(num value) => _blink.BlinkPannerNode.instance.coneOuterAngle_Setter_(this, value);
-
+  void set coneOuterAngle(num value) => _blink.BlinkPannerNode.instance.coneOuterAngle_Setter_(unwrap_jso(this), value);
+  
   @DomName('PannerNode.coneOuterGain')
   @DocsEditable()
-  num get coneOuterGain => _blink.BlinkPannerNode.instance.coneOuterGain_Getter_(this);
-
+  num get coneOuterGain => _blink.BlinkPannerNode.instance.coneOuterGain_Getter_(unwrap_jso(this));
+  
   @DomName('PannerNode.coneOuterGain')
   @DocsEditable()
-  void set coneOuterGain(num value) => _blink.BlinkPannerNode.instance.coneOuterGain_Setter_(this, value);
-
+  void set coneOuterGain(num value) => _blink.BlinkPannerNode.instance.coneOuterGain_Setter_(unwrap_jso(this), value);
+  
   @DomName('PannerNode.distanceModel')
   @DocsEditable()
-  String get distanceModel => _blink.BlinkPannerNode.instance.distanceModel_Getter_(this);
-
+  String get distanceModel => _blink.BlinkPannerNode.instance.distanceModel_Getter_(unwrap_jso(this));
+  
   @DomName('PannerNode.distanceModel')
   @DocsEditable()
-  void set distanceModel(String value) => _blink.BlinkPannerNode.instance.distanceModel_Setter_(this, value);
-
+  void set distanceModel(String value) => _blink.BlinkPannerNode.instance.distanceModel_Setter_(unwrap_jso(this), value);
+  
   @DomName('PannerNode.maxDistance')
   @DocsEditable()
-  num get maxDistance => _blink.BlinkPannerNode.instance.maxDistance_Getter_(this);
-
+  num get maxDistance => _blink.BlinkPannerNode.instance.maxDistance_Getter_(unwrap_jso(this));
+  
   @DomName('PannerNode.maxDistance')
   @DocsEditable()
-  void set maxDistance(num value) => _blink.BlinkPannerNode.instance.maxDistance_Setter_(this, value);
-
+  void set maxDistance(num value) => _blink.BlinkPannerNode.instance.maxDistance_Setter_(unwrap_jso(this), value);
+  
   @DomName('PannerNode.panningModel')
   @DocsEditable()
-  String get panningModel => _blink.BlinkPannerNode.instance.panningModel_Getter_(this);
-
+  String get panningModel => _blink.BlinkPannerNode.instance.panningModel_Getter_(unwrap_jso(this));
+  
   @DomName('PannerNode.panningModel')
   @DocsEditable()
-  void set panningModel(String value) => _blink.BlinkPannerNode.instance.panningModel_Setter_(this, value);
-
+  void set panningModel(String value) => _blink.BlinkPannerNode.instance.panningModel_Setter_(unwrap_jso(this), value);
+  
   @DomName('PannerNode.refDistance')
   @DocsEditable()
-  num get refDistance => _blink.BlinkPannerNode.instance.refDistance_Getter_(this);
-
+  num get refDistance => _blink.BlinkPannerNode.instance.refDistance_Getter_(unwrap_jso(this));
+  
   @DomName('PannerNode.refDistance')
   @DocsEditable()
-  void set refDistance(num value) => _blink.BlinkPannerNode.instance.refDistance_Setter_(this, value);
-
+  void set refDistance(num value) => _blink.BlinkPannerNode.instance.refDistance_Setter_(unwrap_jso(this), value);
+  
   @DomName('PannerNode.rolloffFactor')
   @DocsEditable()
-  num get rolloffFactor => _blink.BlinkPannerNode.instance.rolloffFactor_Getter_(this);
-
+  num get rolloffFactor => _blink.BlinkPannerNode.instance.rolloffFactor_Getter_(unwrap_jso(this));
+  
   @DomName('PannerNode.rolloffFactor')
   @DocsEditable()
-  void set rolloffFactor(num value) => _blink.BlinkPannerNode.instance.rolloffFactor_Setter_(this, value);
-
+  void set rolloffFactor(num value) => _blink.BlinkPannerNode.instance.rolloffFactor_Setter_(unwrap_jso(this), value);
+  
   @DomName('PannerNode.setOrientation')
   @DocsEditable()
-  void setOrientation(num x, num y, num z) => _blink.BlinkPannerNode.instance.setOrientation_Callback_3_(this, x, y, z);
-
+  void setOrientation(num x, num y, num z) => _blink.BlinkPannerNode.instance.setOrientation_Callback_3_(unwrap_jso(this), x, y, z);
+  
   @DomName('PannerNode.setPosition')
   @DocsEditable()
-  void setPosition(num x, num y, num z) => _blink.BlinkPannerNode.instance.setPosition_Callback_3_(this, x, y, z);
-
+  void setPosition(num x, num y, num z) => _blink.BlinkPannerNode.instance.setPosition_Callback_3_(unwrap_jso(this), x, y, z);
+  
   @DomName('PannerNode.setVelocity')
   @DocsEditable()
-  void setVelocity(num x, num y, num z) => _blink.BlinkPannerNode.instance.setVelocity_Callback_3_(this, x, y, z);
-
+  void setVelocity(num x, num y, num z) => _blink.BlinkPannerNode.instance.setVelocity_Callback_3_(unwrap_jso(this), x, y, z);
+  
 }
 // 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
@@ -1168,13 +1169,13 @@
 
   @DomName('ScriptProcessorNode.bufferSize')
   @DocsEditable()
-  int get bufferSize => _blink.BlinkScriptProcessorNode.instance.bufferSize_Getter_(this);
-
+  int get bufferSize => _blink.BlinkScriptProcessorNode.instance.bufferSize_Getter_(unwrap_jso(this));
+  
   @DomName('ScriptProcessorNode.setEventListener')
   @DocsEditable()
   @Experimental() // untriaged
-  void setEventListener(EventListener eventListener) => _blink.BlinkScriptProcessorNode.instance.setEventListener_Callback_1_(this, eventListener);
-
+  void setEventListener(EventListener eventListener) => _blink.BlinkScriptProcessorNode.instance.setEventListener_Callback_1_(unwrap_jso(this), unwrap_jso(eventListener));
+  
   /// Stream of `audioprocess` events handled by this [ScriptProcessorNode].
 /**
    * Get a Stream that fires events when AudioProcessingEvents occur.
@@ -1206,18 +1207,18 @@
 
   @DomName('WaveShaperNode.curve')
   @DocsEditable()
-  Float32List get curve => _blink.BlinkWaveShaperNode.instance.curve_Getter_(this);
-
+  Float32List get curve => wrap_jso(_blink.BlinkWaveShaperNode.instance.curve_Getter_(unwrap_jso(this)));
+  
   @DomName('WaveShaperNode.curve')
   @DocsEditable()
-  void set curve(Float32List value) => _blink.BlinkWaveShaperNode.instance.curve_Setter_(this, value);
-
+  void set curve(Float32List value) => _blink.BlinkWaveShaperNode.instance.curve_Setter_(unwrap_jso(this), unwrap_jso(value));
+  
   @DomName('WaveShaperNode.oversample')
   @DocsEditable()
-  String get oversample => _blink.BlinkWaveShaperNode.instance.oversample_Getter_(this);
-
+  String get oversample => _blink.BlinkWaveShaperNode.instance.oversample_Getter_(unwrap_jso(this));
+  
   @DomName('WaveShaperNode.oversample')
   @DocsEditable()
-  void set oversample(String value) => _blink.BlinkWaveShaperNode.instance.oversample_Setter_(this, value);
-
+  void set oversample(String value) => _blink.BlinkWaveShaperNode.instance.oversample_Setter_(unwrap_jso(this), value);
+  
 }
diff --git a/sdk/lib/web_gl/dartium/web_gl_dartium.dart b/sdk/lib/web_gl/dartium/web_gl_dartium.dart
index cf2f5f7..d587afd 100644
--- a/sdk/lib/web_gl/dartium/web_gl_dartium.dart
+++ b/sdk/lib/web_gl/dartium/web_gl_dartium.dart
@@ -57,6 +57,7 @@
   'WebGLVertexArrayObjectOES': () => VertexArrayObject,
 
 };
+
 // 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.
@@ -374,16 +375,16 @@
 
   @DomName('WebGLActiveInfo.name')
   @DocsEditable()
-  String get name => _blink.BlinkWebGLActiveInfo.instance.name_Getter_(this);
-
+  String get name => _blink.BlinkWebGLActiveInfo.instance.name_Getter_(unwrap_jso(this));
+  
   @DomName('WebGLActiveInfo.size')
   @DocsEditable()
-  int get size => _blink.BlinkWebGLActiveInfo.instance.size_Getter_(this);
-
+  int get size => _blink.BlinkWebGLActiveInfo.instance.size_Getter_(unwrap_jso(this));
+  
   @DomName('WebGLActiveInfo.type')
   @DocsEditable()
-  int get type => _blink.BlinkWebGLActiveInfo.instance.type_Getter_(this);
-
+  int get type => _blink.BlinkWebGLActiveInfo.instance.type_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -407,18 +408,18 @@
   @DomName('ANGLEInstancedArrays.drawArraysInstancedANGLE')
   @DocsEditable()
   @Experimental() // untriaged
-  void drawArraysInstancedAngle(int mode, int first, int count, int primcount) => _blink.BlinkANGLEInstancedArrays.instance.drawArraysInstancedANGLE_Callback_4_(this, mode, first, count, primcount);
-
+  void drawArraysInstancedAngle(int mode, int first, int count, int primcount) => _blink.BlinkANGLEInstancedArrays.instance.drawArraysInstancedANGLE_Callback_4_(unwrap_jso(this), mode, first, count, primcount);
+  
   @DomName('ANGLEInstancedArrays.drawElementsInstancedANGLE')
   @DocsEditable()
   @Experimental() // untriaged
-  void drawElementsInstancedAngle(int mode, int count, int type, int offset, int primcount) => _blink.BlinkANGLEInstancedArrays.instance.drawElementsInstancedANGLE_Callback_5_(this, mode, count, type, offset, primcount);
-
+  void drawElementsInstancedAngle(int mode, int count, int type, int offset, int primcount) => _blink.BlinkANGLEInstancedArrays.instance.drawElementsInstancedANGLE_Callback_5_(unwrap_jso(this), mode, count, type, offset, primcount);
+  
   @DomName('ANGLEInstancedArrays.vertexAttribDivisorANGLE')
   @DocsEditable()
   @Experimental() // untriaged
-  void vertexAttribDivisorAngle(int index, int divisor) => _blink.BlinkANGLEInstancedArrays.instance.vertexAttribDivisorANGLE_Callback_2_(this, index, divisor);
-
+  void vertexAttribDivisorAngle(int index, int divisor) => _blink.BlinkANGLEInstancedArrays.instance.vertexAttribDivisorANGLE_Callback_2_(unwrap_jso(this), index, divisor);
+  
 }
 // 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
@@ -585,62 +586,62 @@
 
   @DomName('WebGLContextAttributes.alpha')
   @DocsEditable()
-  bool get alpha => _blink.BlinkWebGLContextAttributes.instance.alpha_Getter_(this);
-
+  bool get alpha => _blink.BlinkWebGLContextAttributes.instance.alpha_Getter_(unwrap_jso(this));
+  
   @DomName('WebGLContextAttributes.alpha')
   @DocsEditable()
-  void set alpha(bool value) => _blink.BlinkWebGLContextAttributes.instance.alpha_Setter_(this, value);
-
+  void set alpha(bool value) => _blink.BlinkWebGLContextAttributes.instance.alpha_Setter_(unwrap_jso(this), value);
+  
   @DomName('WebGLContextAttributes.antialias')
   @DocsEditable()
-  bool get antialias => _blink.BlinkWebGLContextAttributes.instance.antialias_Getter_(this);
-
+  bool get antialias => _blink.BlinkWebGLContextAttributes.instance.antialias_Getter_(unwrap_jso(this));
+  
   @DomName('WebGLContextAttributes.antialias')
   @DocsEditable()
-  void set antialias(bool value) => _blink.BlinkWebGLContextAttributes.instance.antialias_Setter_(this, value);
-
+  void set antialias(bool value) => _blink.BlinkWebGLContextAttributes.instance.antialias_Setter_(unwrap_jso(this), value);
+  
   @DomName('WebGLContextAttributes.depth')
   @DocsEditable()
-  bool get depth => _blink.BlinkWebGLContextAttributes.instance.depth_Getter_(this);
-
+  bool get depth => _blink.BlinkWebGLContextAttributes.instance.depth_Getter_(unwrap_jso(this));
+  
   @DomName('WebGLContextAttributes.depth')
   @DocsEditable()
-  void set depth(bool value) => _blink.BlinkWebGLContextAttributes.instance.depth_Setter_(this, value);
-
+  void set depth(bool value) => _blink.BlinkWebGLContextAttributes.instance.depth_Setter_(unwrap_jso(this), value);
+  
   @DomName('WebGLContextAttributes.failIfMajorPerformanceCaveat')
   @DocsEditable()
   @Experimental() // untriaged
-  bool get failIfMajorPerformanceCaveat => _blink.BlinkWebGLContextAttributes.instance.failIfMajorPerformanceCaveat_Getter_(this);
-
+  bool get failIfMajorPerformanceCaveat => _blink.BlinkWebGLContextAttributes.instance.failIfMajorPerformanceCaveat_Getter_(unwrap_jso(this));
+  
   @DomName('WebGLContextAttributes.failIfMajorPerformanceCaveat')
   @DocsEditable()
   @Experimental() // untriaged
-  void set failIfMajorPerformanceCaveat(bool value) => _blink.BlinkWebGLContextAttributes.instance.failIfMajorPerformanceCaveat_Setter_(this, value);
-
+  void set failIfMajorPerformanceCaveat(bool value) => _blink.BlinkWebGLContextAttributes.instance.failIfMajorPerformanceCaveat_Setter_(unwrap_jso(this), value);
+  
   @DomName('WebGLContextAttributes.premultipliedAlpha')
   @DocsEditable()
-  bool get premultipliedAlpha => _blink.BlinkWebGLContextAttributes.instance.premultipliedAlpha_Getter_(this);
-
+  bool get premultipliedAlpha => _blink.BlinkWebGLContextAttributes.instance.premultipliedAlpha_Getter_(unwrap_jso(this));
+  
   @DomName('WebGLContextAttributes.premultipliedAlpha')
   @DocsEditable()
-  void set premultipliedAlpha(bool value) => _blink.BlinkWebGLContextAttributes.instance.premultipliedAlpha_Setter_(this, value);
-
+  void set premultipliedAlpha(bool value) => _blink.BlinkWebGLContextAttributes.instance.premultipliedAlpha_Setter_(unwrap_jso(this), value);
+  
   @DomName('WebGLContextAttributes.preserveDrawingBuffer')
   @DocsEditable()
-  bool get preserveDrawingBuffer => _blink.BlinkWebGLContextAttributes.instance.preserveDrawingBuffer_Getter_(this);
-
+  bool get preserveDrawingBuffer => _blink.BlinkWebGLContextAttributes.instance.preserveDrawingBuffer_Getter_(unwrap_jso(this));
+  
   @DomName('WebGLContextAttributes.preserveDrawingBuffer')
   @DocsEditable()
-  void set preserveDrawingBuffer(bool value) => _blink.BlinkWebGLContextAttributes.instance.preserveDrawingBuffer_Setter_(this, value);
-
+  void set preserveDrawingBuffer(bool value) => _blink.BlinkWebGLContextAttributes.instance.preserveDrawingBuffer_Setter_(unwrap_jso(this), value);
+  
   @DomName('WebGLContextAttributes.stencil')
   @DocsEditable()
-  bool get stencil => _blink.BlinkWebGLContextAttributes.instance.stencil_Getter_(this);
-
+  bool get stencil => _blink.BlinkWebGLContextAttributes.instance.stencil_Getter_(unwrap_jso(this));
+  
   @DomName('WebGLContextAttributes.stencil')
   @DocsEditable()
-  void set stencil(bool value) => _blink.BlinkWebGLContextAttributes.instance.stencil_Setter_(this, value);
-
+  void set stencil(bool value) => _blink.BlinkWebGLContextAttributes.instance.stencil_Setter_(unwrap_jso(this), value);
+  
 }
 // 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
@@ -658,8 +659,8 @@
 
   @DomName('WebGLContextEvent.statusMessage')
   @DocsEditable()
-  String get statusMessage => _blink.BlinkWebGLContextEvent.instance.statusMessage_Getter_(this);
-
+  String get statusMessage => _blink.BlinkWebGLContextEvent.instance.statusMessage_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -702,8 +703,8 @@
 
   @DomName('WebGLDebugShaders.getTranslatedShaderSource')
   @DocsEditable()
-  String getTranslatedShaderSource(Shader shader) => _blink.BlinkWebGLDebugShaders.instance.getTranslatedShaderSource_Callback_1_(this, shader);
-
+  String getTranslatedShaderSource(Shader shader) => _blink.BlinkWebGLDebugShaders.instance.getTranslatedShaderSource_Callback_1_(unwrap_jso(this), unwrap_jso(shader));
+  
 }
 // 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
@@ -878,8 +879,8 @@
 
   @DomName('WebGLDrawBuffers.drawBuffersWEBGL')
   @DocsEditable()
-  void drawBuffersWebgl(List<int> buffers) => _blink.BlinkWebGLDrawBuffers.instance.drawBuffersWEBGL_Callback_1_(this, buffers);
-
+  void drawBuffersWebgl(List<int> buffers) => _blink.BlinkWebGLDrawBuffers.instance.drawBuffersWEBGL_Callback_1_(unwrap_jso(this), buffers);
+  
 }
 // 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
@@ -993,12 +994,12 @@
 
   @DomName('WebGLLoseContext.loseContext')
   @DocsEditable()
-  void loseContext() => _blink.BlinkWebGLLoseContext.instance.loseContext_Callback_0_(this);
-
+  void loseContext() => _blink.BlinkWebGLLoseContext.instance.loseContext_Callback_0_(unwrap_jso(this));
+  
   @DomName('WebGLLoseContext.restoreContext')
   @DocsEditable()
-  void restoreContext() => _blink.BlinkWebGLLoseContext.instance.restoreContext_Callback_0_(this);
-
+  void restoreContext() => _blink.BlinkWebGLLoseContext.instance.restoreContext_Callback_0_(unwrap_jso(this));
+  
 }
 // 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
@@ -1125,20 +1126,20 @@
 
   @DomName('OESVertexArrayObject.bindVertexArrayOES')
   @DocsEditable()
-  void bindVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.instance.bindVertexArrayOES_Callback_1_(this, arrayObject);
-
+  void bindVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.instance.bindVertexArrayOES_Callback_1_(unwrap_jso(this), unwrap_jso(arrayObject));
+  
   @DomName('OESVertexArrayObject.createVertexArrayOES')
   @DocsEditable()
-  VertexArrayObject createVertexArray() => _blink.BlinkOESVertexArrayObject.instance.createVertexArrayOES_Callback_0_(this);
-
+  VertexArrayObject createVertexArray() => _blink.BlinkOESVertexArrayObject.instance.createVertexArrayOES_Callback_0_(unwrap_jso(this));
+  
   @DomName('OESVertexArrayObject.deleteVertexArrayOES')
   @DocsEditable()
-  void deleteVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.instance.deleteVertexArrayOES_Callback_1_(this, arrayObject);
-
+  void deleteVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.instance.deleteVertexArrayOES_Callback_1_(unwrap_jso(this), unwrap_jso(arrayObject));
+  
   @DomName('OESVertexArrayObject.isVertexArrayOES')
   @DocsEditable()
-  bool isVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.instance.isVertexArrayOES_Callback_1_(this, arrayObject);
-
+  bool isVertexArray(VertexArrayObject arrayObject) => _blink.BlinkOESVertexArrayObject.instance.isVertexArrayOES_Callback_1_(unwrap_jso(this), unwrap_jso(arrayObject));
+  
 }
 // 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
@@ -2380,79 +2381,79 @@
   @DomName('WebGLRenderingContext.canvas')
   @DocsEditable()
   @Experimental() // untriaged
-  CanvasElement get canvas => _blink.BlinkWebGLRenderingContext.instance.canvas_Getter_(this);
-
+  CanvasElement get canvas => wrap_jso(_blink.BlinkWebGLRenderingContext.instance.canvas_Getter_(unwrap_jso(this)));
+  
   @DomName('WebGLRenderingContext.drawingBufferHeight')
   @DocsEditable()
-  int get drawingBufferHeight => _blink.BlinkWebGLRenderingContext.instance.drawingBufferHeight_Getter_(this);
-
+  int get drawingBufferHeight => _blink.BlinkWebGLRenderingContext.instance.drawingBufferHeight_Getter_(unwrap_jso(this));
+  
   @DomName('WebGLRenderingContext.drawingBufferWidth')
   @DocsEditable()
-  int get drawingBufferWidth => _blink.BlinkWebGLRenderingContext.instance.drawingBufferWidth_Getter_(this);
-
+  int get drawingBufferWidth => _blink.BlinkWebGLRenderingContext.instance.drawingBufferWidth_Getter_(unwrap_jso(this));
+  
   @DomName('WebGLRenderingContext.activeTexture')
   @DocsEditable()
-  void activeTexture(int texture) => _blink.BlinkWebGLRenderingContext.instance.activeTexture_Callback_1_(this, texture);
-
+  void activeTexture(int texture) => _blink.BlinkWebGLRenderingContext.instance.activeTexture_Callback_1_(unwrap_jso(this), texture);
+  
   @DomName('WebGLRenderingContext.attachShader')
   @DocsEditable()
-  void attachShader(Program program, Shader shader) => _blink.BlinkWebGLRenderingContext.instance.attachShader_Callback_2_(this, program, shader);
-
+  void attachShader(Program program, Shader shader) => _blink.BlinkWebGLRenderingContext.instance.attachShader_Callback_2_(unwrap_jso(this), unwrap_jso(program), unwrap_jso(shader));
+  
   @DomName('WebGLRenderingContext.bindAttribLocation')
   @DocsEditable()
-  void bindAttribLocation(Program program, int index, String name) => _blink.BlinkWebGLRenderingContext.instance.bindAttribLocation_Callback_3_(this, program, index, name);
-
+  void bindAttribLocation(Program program, int index, String name) => _blink.BlinkWebGLRenderingContext.instance.bindAttribLocation_Callback_3_(unwrap_jso(this), unwrap_jso(program), index, name);
+  
   @DomName('WebGLRenderingContext.bindBuffer')
   @DocsEditable()
-  void bindBuffer(int target, Buffer buffer) => _blink.BlinkWebGLRenderingContext.instance.bindBuffer_Callback_2_(this, target, buffer);
-
+  void bindBuffer(int target, Buffer buffer) => _blink.BlinkWebGLRenderingContext.instance.bindBuffer_Callback_2_(unwrap_jso(this), target, unwrap_jso(buffer));
+  
   @DomName('WebGLRenderingContext.bindFramebuffer')
   @DocsEditable()
-  void bindFramebuffer(int target, Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.instance.bindFramebuffer_Callback_2_(this, target, framebuffer);
-
+  void bindFramebuffer(int target, Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.instance.bindFramebuffer_Callback_2_(unwrap_jso(this), target, unwrap_jso(framebuffer));
+  
   @DomName('WebGLRenderingContext.bindRenderbuffer')
   @DocsEditable()
-  void bindRenderbuffer(int target, Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.instance.bindRenderbuffer_Callback_2_(this, target, renderbuffer);
-
+  void bindRenderbuffer(int target, Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.instance.bindRenderbuffer_Callback_2_(unwrap_jso(this), target, unwrap_jso(renderbuffer));
+  
   @DomName('WebGLRenderingContext.bindTexture')
   @DocsEditable()
-  void bindTexture(int target, Texture texture) => _blink.BlinkWebGLRenderingContext.instance.bindTexture_Callback_2_(this, target, texture);
-
+  void bindTexture(int target, Texture texture) => _blink.BlinkWebGLRenderingContext.instance.bindTexture_Callback_2_(unwrap_jso(this), target, unwrap_jso(texture));
+  
   @DomName('WebGLRenderingContext.blendColor')
   @DocsEditable()
-  void blendColor(num red, num green, num blue, num alpha) => _blink.BlinkWebGLRenderingContext.instance.blendColor_Callback_4_(this, red, green, blue, alpha);
-
+  void blendColor(num red, num green, num blue, num alpha) => _blink.BlinkWebGLRenderingContext.instance.blendColor_Callback_4_(unwrap_jso(this), red, green, blue, alpha);
+  
   @DomName('WebGLRenderingContext.blendEquation')
   @DocsEditable()
-  void blendEquation(int mode) => _blink.BlinkWebGLRenderingContext.instance.blendEquation_Callback_1_(this, mode);
-
+  void blendEquation(int mode) => _blink.BlinkWebGLRenderingContext.instance.blendEquation_Callback_1_(unwrap_jso(this), mode);
+  
   @DomName('WebGLRenderingContext.blendEquationSeparate')
   @DocsEditable()
-  void blendEquationSeparate(int modeRGB, int modeAlpha) => _blink.BlinkWebGLRenderingContext.instance.blendEquationSeparate_Callback_2_(this, modeRGB, modeAlpha);
-
+  void blendEquationSeparate(int modeRGB, int modeAlpha) => _blink.BlinkWebGLRenderingContext.instance.blendEquationSeparate_Callback_2_(unwrap_jso(this), modeRGB, modeAlpha);
+  
   @DomName('WebGLRenderingContext.blendFunc')
   @DocsEditable()
-  void blendFunc(int sfactor, int dfactor) => _blink.BlinkWebGLRenderingContext.instance.blendFunc_Callback_2_(this, sfactor, dfactor);
-
+  void blendFunc(int sfactor, int dfactor) => _blink.BlinkWebGLRenderingContext.instance.blendFunc_Callback_2_(unwrap_jso(this), sfactor, dfactor);
+  
   @DomName('WebGLRenderingContext.blendFuncSeparate')
   @DocsEditable()
-  void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) => _blink.BlinkWebGLRenderingContext.instance.blendFuncSeparate_Callback_4_(this, srcRGB, dstRGB, srcAlpha, dstAlpha);
-
+  void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) => _blink.BlinkWebGLRenderingContext.instance.blendFuncSeparate_Callback_4_(unwrap_jso(this), srcRGB, dstRGB, srcAlpha, dstAlpha);
+  
   @DomName('WebGLRenderingContext.bufferByteData')
   @DocsEditable()
-  void bufferByteData(int target, ByteBuffer data, int usage) => _blink.BlinkWebGLRenderingContext.instance.bufferData_Callback_3_(this, target, data, usage);
-
+  void bufferByteData(int target, ByteBuffer data, int usage) => _blink.BlinkWebGLRenderingContext.instance.bufferData_Callback_3_(unwrap_jso(this), target, data, usage);
+  
   void bufferData(int target, data_OR_size, int usage) {
     if ((usage is int) && (data_OR_size is int) && (target is int)) {
-      _blink.BlinkWebGLRenderingContext.instance.bufferData_Callback_3_(this, target, data_OR_size, usage);
+      _blink.BlinkWebGLRenderingContext.instance.bufferData_Callback_3_(unwrap_jso(this), target, unwrap_jso(data_OR_size), usage);
       return;
     }
     if ((usage is int) && (data_OR_size is TypedData) && (target is int)) {
-      _blink.BlinkWebGLRenderingContext.instance.bufferData_Callback_3_(this, target, data_OR_size, usage);
+      _blink.BlinkWebGLRenderingContext.instance.bufferData_Callback_3_(unwrap_jso(this), target, unwrap_jso(data_OR_size), usage);
       return;
     }
     if ((usage is int) && (data_OR_size is ByteBuffer || data_OR_size == null) && (target is int)) {
-      _blink.BlinkWebGLRenderingContext.instance.bufferData_Callback_3_(this, target, data_OR_size, usage);
+      _blink.BlinkWebGLRenderingContext.instance.bufferData_Callback_3_(unwrap_jso(this), target, unwrap_jso(data_OR_size), usage);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2460,19 +2461,19 @@
 
   @DomName('WebGLRenderingContext.bufferDataTyped')
   @DocsEditable()
-  void bufferDataTyped(int target, TypedData data, int usage) => _blink.BlinkWebGLRenderingContext.instance.bufferData_Callback_3_(this, target, data, usage);
-
+  void bufferDataTyped(int target, TypedData data, int usage) => _blink.BlinkWebGLRenderingContext.instance.bufferData_Callback_3_(unwrap_jso(this), target, unwrap_jso(data), usage);
+  
   @DomName('WebGLRenderingContext.bufferSubByteData')
   @DocsEditable()
-  void bufferSubByteData(int target, int offset, ByteBuffer data) => _blink.BlinkWebGLRenderingContext.instance.bufferSubData_Callback_3_(this, target, offset, data);
-
+  void bufferSubByteData(int target, int offset, ByteBuffer data) => _blink.BlinkWebGLRenderingContext.instance.bufferSubData_Callback_3_(unwrap_jso(this), target, offset, data);
+  
   void bufferSubData(int target, int offset, data) {
     if ((data is TypedData) && (offset is int) && (target is int)) {
-      _blink.BlinkWebGLRenderingContext.instance.bufferSubData_Callback_3_(this, target, offset, data);
+      _blink.BlinkWebGLRenderingContext.instance.bufferSubData_Callback_3_(unwrap_jso(this), target, offset, unwrap_jso(data));
       return;
     }
     if ((data is ByteBuffer || data == null) && (offset is int) && (target is int)) {
-      _blink.BlinkWebGLRenderingContext.instance.bufferSubData_Callback_3_(this, target, offset, data);
+      _blink.BlinkWebGLRenderingContext.instance.bufferSubData_Callback_3_(unwrap_jso(this), target, offset, unwrap_jso(data));
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2480,375 +2481,375 @@
 
   @DomName('WebGLRenderingContext.bufferSubDataTyped')
   @DocsEditable()
-  void bufferSubDataTyped(int target, int offset, TypedData data) => _blink.BlinkWebGLRenderingContext.instance.bufferSubData_Callback_3_(this, target, offset, data);
-
+  void bufferSubDataTyped(int target, int offset, TypedData data) => _blink.BlinkWebGLRenderingContext.instance.bufferSubData_Callback_3_(unwrap_jso(this), target, offset, unwrap_jso(data));
+  
   @DomName('WebGLRenderingContext.checkFramebufferStatus')
   @DocsEditable()
-  int checkFramebufferStatus(int target) => _blink.BlinkWebGLRenderingContext.instance.checkFramebufferStatus_Callback_1_(this, target);
-
+  int checkFramebufferStatus(int target) => _blink.BlinkWebGLRenderingContext.instance.checkFramebufferStatus_Callback_1_(unwrap_jso(this), target);
+  
   @DomName('WebGLRenderingContext.clear')
   @DocsEditable()
-  void clear(int mask) => _blink.BlinkWebGLRenderingContext.instance.clear_Callback_1_(this, mask);
-
+  void clear(int mask) => _blink.BlinkWebGLRenderingContext.instance.clear_Callback_1_(unwrap_jso(this), mask);
+  
   @DomName('WebGLRenderingContext.clearColor')
   @DocsEditable()
-  void clearColor(num red, num green, num blue, num alpha) => _blink.BlinkWebGLRenderingContext.instance.clearColor_Callback_4_(this, red, green, blue, alpha);
-
+  void clearColor(num red, num green, num blue, num alpha) => _blink.BlinkWebGLRenderingContext.instance.clearColor_Callback_4_(unwrap_jso(this), red, green, blue, alpha);
+  
   @DomName('WebGLRenderingContext.clearDepth')
   @DocsEditable()
-  void clearDepth(num depth) => _blink.BlinkWebGLRenderingContext.instance.clearDepth_Callback_1_(this, depth);
-
+  void clearDepth(num depth) => _blink.BlinkWebGLRenderingContext.instance.clearDepth_Callback_1_(unwrap_jso(this), depth);
+  
   @DomName('WebGLRenderingContext.clearStencil')
   @DocsEditable()
-  void clearStencil(int s) => _blink.BlinkWebGLRenderingContext.instance.clearStencil_Callback_1_(this, s);
-
+  void clearStencil(int s) => _blink.BlinkWebGLRenderingContext.instance.clearStencil_Callback_1_(unwrap_jso(this), s);
+  
   @DomName('WebGLRenderingContext.colorMask')
   @DocsEditable()
-  void colorMask(bool red, bool green, bool blue, bool alpha) => _blink.BlinkWebGLRenderingContext.instance.colorMask_Callback_4_(this, red, green, blue, alpha);
-
+  void colorMask(bool red, bool green, bool blue, bool alpha) => _blink.BlinkWebGLRenderingContext.instance.colorMask_Callback_4_(unwrap_jso(this), red, green, blue, alpha);
+  
   @DomName('WebGLRenderingContext.compileShader')
   @DocsEditable()
-  void compileShader(Shader shader) => _blink.BlinkWebGLRenderingContext.instance.compileShader_Callback_1_(this, shader);
-
+  void compileShader(Shader shader) => _blink.BlinkWebGLRenderingContext.instance.compileShader_Callback_1_(unwrap_jso(this), unwrap_jso(shader));
+  
   @DomName('WebGLRenderingContext.compressedTexImage2D')
   @DocsEditable()
-  void compressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, TypedData data) => _blink.BlinkWebGLRenderingContext.instance.compressedTexImage2D_Callback_7_(this, target, level, internalformat, width, height, border, data);
-
+  void compressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, TypedData data) => _blink.BlinkWebGLRenderingContext.instance.compressedTexImage2D_Callback_7_(unwrap_jso(this), target, level, internalformat, width, height, border, unwrap_jso(data));
+  
   @DomName('WebGLRenderingContext.compressedTexSubImage2D')
   @DocsEditable()
-  void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, TypedData data) => _blink.BlinkWebGLRenderingContext.instance.compressedTexSubImage2D_Callback_8_(this, target, level, xoffset, yoffset, width, height, format, data);
-
+  void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, TypedData data) => _blink.BlinkWebGLRenderingContext.instance.compressedTexSubImage2D_Callback_8_(unwrap_jso(this), target, level, xoffset, yoffset, width, height, format, unwrap_jso(data));
+  
   @DomName('WebGLRenderingContext.copyTexImage2D')
   @DocsEditable()
-  void copyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border) => _blink.BlinkWebGLRenderingContext.instance.copyTexImage2D_Callback_8_(this, target, level, internalformat, x, y, width, height, border);
-
+  void copyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border) => _blink.BlinkWebGLRenderingContext.instance.copyTexImage2D_Callback_8_(unwrap_jso(this), target, level, internalformat, x, y, width, height, border);
+  
   @DomName('WebGLRenderingContext.copyTexSubImage2D')
   @DocsEditable()
-  void copyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.instance.copyTexSubImage2D_Callback_8_(this, target, level, xoffset, yoffset, x, y, width, height);
-
+  void copyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.instance.copyTexSubImage2D_Callback_8_(unwrap_jso(this), target, level, xoffset, yoffset, x, y, width, height);
+  
   @DomName('WebGLRenderingContext.createBuffer')
   @DocsEditable()
-  Buffer createBuffer() => _blink.BlinkWebGLRenderingContext.instance.createBuffer_Callback_0_(this);
-
+  Buffer createBuffer() => _blink.BlinkWebGLRenderingContext.instance.createBuffer_Callback_0_(unwrap_jso(this));
+  
   @DomName('WebGLRenderingContext.createFramebuffer')
   @DocsEditable()
-  Framebuffer createFramebuffer() => _blink.BlinkWebGLRenderingContext.instance.createFramebuffer_Callback_0_(this);
-
+  Framebuffer createFramebuffer() => _blink.BlinkWebGLRenderingContext.instance.createFramebuffer_Callback_0_(unwrap_jso(this));
+  
   @DomName('WebGLRenderingContext.createProgram')
   @DocsEditable()
-  Program createProgram() => _blink.BlinkWebGLRenderingContext.instance.createProgram_Callback_0_(this);
-
+  Program createProgram() => _blink.BlinkWebGLRenderingContext.instance.createProgram_Callback_0_(unwrap_jso(this));
+  
   @DomName('WebGLRenderingContext.createRenderbuffer')
   @DocsEditable()
-  Renderbuffer createRenderbuffer() => _blink.BlinkWebGLRenderingContext.instance.createRenderbuffer_Callback_0_(this);
-
+  Renderbuffer createRenderbuffer() => _blink.BlinkWebGLRenderingContext.instance.createRenderbuffer_Callback_0_(unwrap_jso(this));
+  
   @DomName('WebGLRenderingContext.createShader')
   @DocsEditable()
-  Shader createShader(int type) => _blink.BlinkWebGLRenderingContext.instance.createShader_Callback_1_(this, type);
-
+  Shader createShader(int type) => _blink.BlinkWebGLRenderingContext.instance.createShader_Callback_1_(unwrap_jso(this), type);
+  
   @DomName('WebGLRenderingContext.createTexture')
   @DocsEditable()
-  Texture createTexture() => _blink.BlinkWebGLRenderingContext.instance.createTexture_Callback_0_(this);
-
+  Texture createTexture() => _blink.BlinkWebGLRenderingContext.instance.createTexture_Callback_0_(unwrap_jso(this));
+  
   @DomName('WebGLRenderingContext.cullFace')
   @DocsEditable()
-  void cullFace(int mode) => _blink.BlinkWebGLRenderingContext.instance.cullFace_Callback_1_(this, mode);
-
+  void cullFace(int mode) => _blink.BlinkWebGLRenderingContext.instance.cullFace_Callback_1_(unwrap_jso(this), mode);
+  
   @DomName('WebGLRenderingContext.deleteBuffer')
   @DocsEditable()
-  void deleteBuffer(Buffer buffer) => _blink.BlinkWebGLRenderingContext.instance.deleteBuffer_Callback_1_(this, buffer);
-
+  void deleteBuffer(Buffer buffer) => _blink.BlinkWebGLRenderingContext.instance.deleteBuffer_Callback_1_(unwrap_jso(this), unwrap_jso(buffer));
+  
   @DomName('WebGLRenderingContext.deleteFramebuffer')
   @DocsEditable()
-  void deleteFramebuffer(Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.instance.deleteFramebuffer_Callback_1_(this, framebuffer);
-
+  void deleteFramebuffer(Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.instance.deleteFramebuffer_Callback_1_(unwrap_jso(this), unwrap_jso(framebuffer));
+  
   @DomName('WebGLRenderingContext.deleteProgram')
   @DocsEditable()
-  void deleteProgram(Program program) => _blink.BlinkWebGLRenderingContext.instance.deleteProgram_Callback_1_(this, program);
-
+  void deleteProgram(Program program) => _blink.BlinkWebGLRenderingContext.instance.deleteProgram_Callback_1_(unwrap_jso(this), unwrap_jso(program));
+  
   @DomName('WebGLRenderingContext.deleteRenderbuffer')
   @DocsEditable()
-  void deleteRenderbuffer(Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.instance.deleteRenderbuffer_Callback_1_(this, renderbuffer);
-
+  void deleteRenderbuffer(Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.instance.deleteRenderbuffer_Callback_1_(unwrap_jso(this), unwrap_jso(renderbuffer));
+  
   @DomName('WebGLRenderingContext.deleteShader')
   @DocsEditable()
-  void deleteShader(Shader shader) => _blink.BlinkWebGLRenderingContext.instance.deleteShader_Callback_1_(this, shader);
-
+  void deleteShader(Shader shader) => _blink.BlinkWebGLRenderingContext.instance.deleteShader_Callback_1_(unwrap_jso(this), unwrap_jso(shader));
+  
   @DomName('WebGLRenderingContext.deleteTexture')
   @DocsEditable()
-  void deleteTexture(Texture texture) => _blink.BlinkWebGLRenderingContext.instance.deleteTexture_Callback_1_(this, texture);
-
+  void deleteTexture(Texture texture) => _blink.BlinkWebGLRenderingContext.instance.deleteTexture_Callback_1_(unwrap_jso(this), unwrap_jso(texture));
+  
   @DomName('WebGLRenderingContext.depthFunc')
   @DocsEditable()
-  void depthFunc(int func) => _blink.BlinkWebGLRenderingContext.instance.depthFunc_Callback_1_(this, func);
-
+  void depthFunc(int func) => _blink.BlinkWebGLRenderingContext.instance.depthFunc_Callback_1_(unwrap_jso(this), func);
+  
   @DomName('WebGLRenderingContext.depthMask')
   @DocsEditable()
-  void depthMask(bool flag) => _blink.BlinkWebGLRenderingContext.instance.depthMask_Callback_1_(this, flag);
-
+  void depthMask(bool flag) => _blink.BlinkWebGLRenderingContext.instance.depthMask_Callback_1_(unwrap_jso(this), flag);
+  
   @DomName('WebGLRenderingContext.depthRange')
   @DocsEditable()
-  void depthRange(num zNear, num zFar) => _blink.BlinkWebGLRenderingContext.instance.depthRange_Callback_2_(this, zNear, zFar);
-
+  void depthRange(num zNear, num zFar) => _blink.BlinkWebGLRenderingContext.instance.depthRange_Callback_2_(unwrap_jso(this), zNear, zFar);
+  
   @DomName('WebGLRenderingContext.detachShader')
   @DocsEditable()
-  void detachShader(Program program, Shader shader) => _blink.BlinkWebGLRenderingContext.instance.detachShader_Callback_2_(this, program, shader);
-
+  void detachShader(Program program, Shader shader) => _blink.BlinkWebGLRenderingContext.instance.detachShader_Callback_2_(unwrap_jso(this), unwrap_jso(program), unwrap_jso(shader));
+  
   @DomName('WebGLRenderingContext.disable')
   @DocsEditable()
-  void disable(int cap) => _blink.BlinkWebGLRenderingContext.instance.disable_Callback_1_(this, cap);
-
+  void disable(int cap) => _blink.BlinkWebGLRenderingContext.instance.disable_Callback_1_(unwrap_jso(this), cap);
+  
   @DomName('WebGLRenderingContext.disableVertexAttribArray')
   @DocsEditable()
-  void disableVertexAttribArray(int index) => _blink.BlinkWebGLRenderingContext.instance.disableVertexAttribArray_Callback_1_(this, index);
-
+  void disableVertexAttribArray(int index) => _blink.BlinkWebGLRenderingContext.instance.disableVertexAttribArray_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('WebGLRenderingContext.drawArrays')
   @DocsEditable()
-  void drawArrays(int mode, int first, int count) => _blink.BlinkWebGLRenderingContext.instance.drawArrays_Callback_3_(this, mode, first, count);
-
+  void drawArrays(int mode, int first, int count) => _blink.BlinkWebGLRenderingContext.instance.drawArrays_Callback_3_(unwrap_jso(this), mode, first, count);
+  
   @DomName('WebGLRenderingContext.drawElements')
   @DocsEditable()
-  void drawElements(int mode, int count, int type, int offset) => _blink.BlinkWebGLRenderingContext.instance.drawElements_Callback_4_(this, mode, count, type, offset);
-
+  void drawElements(int mode, int count, int type, int offset) => _blink.BlinkWebGLRenderingContext.instance.drawElements_Callback_4_(unwrap_jso(this), mode, count, type, offset);
+  
   @DomName('WebGLRenderingContext.enable')
   @DocsEditable()
-  void enable(int cap) => _blink.BlinkWebGLRenderingContext.instance.enable_Callback_1_(this, cap);
-
+  void enable(int cap) => _blink.BlinkWebGLRenderingContext.instance.enable_Callback_1_(unwrap_jso(this), cap);
+  
   @DomName('WebGLRenderingContext.enableVertexAttribArray')
   @DocsEditable()
-  void enableVertexAttribArray(int index) => _blink.BlinkWebGLRenderingContext.instance.enableVertexAttribArray_Callback_1_(this, index);
-
+  void enableVertexAttribArray(int index) => _blink.BlinkWebGLRenderingContext.instance.enableVertexAttribArray_Callback_1_(unwrap_jso(this), index);
+  
   @DomName('WebGLRenderingContext.finish')
   @DocsEditable()
-  void finish() => _blink.BlinkWebGLRenderingContext.instance.finish_Callback_0_(this);
-
+  void finish() => _blink.BlinkWebGLRenderingContext.instance.finish_Callback_0_(unwrap_jso(this));
+  
   @DomName('WebGLRenderingContext.flush')
   @DocsEditable()
-  void flush() => _blink.BlinkWebGLRenderingContext.instance.flush_Callback_0_(this);
-
+  void flush() => _blink.BlinkWebGLRenderingContext.instance.flush_Callback_0_(unwrap_jso(this));
+  
   @DomName('WebGLRenderingContext.framebufferRenderbuffer')
   @DocsEditable()
-  void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.instance.framebufferRenderbuffer_Callback_4_(this, target, attachment, renderbuffertarget, renderbuffer);
-
+  void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.instance.framebufferRenderbuffer_Callback_4_(unwrap_jso(this), target, attachment, renderbuffertarget, unwrap_jso(renderbuffer));
+  
   @DomName('WebGLRenderingContext.framebufferTexture2D')
   @DocsEditable()
-  void framebufferTexture2D(int target, int attachment, int textarget, Texture texture, int level) => _blink.BlinkWebGLRenderingContext.instance.framebufferTexture2D_Callback_5_(this, target, attachment, textarget, texture, level);
-
+  void framebufferTexture2D(int target, int attachment, int textarget, Texture texture, int level) => _blink.BlinkWebGLRenderingContext.instance.framebufferTexture2D_Callback_5_(unwrap_jso(this), target, attachment, textarget, unwrap_jso(texture), level);
+  
   @DomName('WebGLRenderingContext.frontFace')
   @DocsEditable()
-  void frontFace(int mode) => _blink.BlinkWebGLRenderingContext.instance.frontFace_Callback_1_(this, mode);
-
+  void frontFace(int mode) => _blink.BlinkWebGLRenderingContext.instance.frontFace_Callback_1_(unwrap_jso(this), mode);
+  
   @DomName('WebGLRenderingContext.generateMipmap')
   @DocsEditable()
-  void generateMipmap(int target) => _blink.BlinkWebGLRenderingContext.instance.generateMipmap_Callback_1_(this, target);
-
+  void generateMipmap(int target) => _blink.BlinkWebGLRenderingContext.instance.generateMipmap_Callback_1_(unwrap_jso(this), target);
+  
   @DomName('WebGLRenderingContext.getActiveAttrib')
   @DocsEditable()
-  ActiveInfo getActiveAttrib(Program program, int index) => _blink.BlinkWebGLRenderingContext.instance.getActiveAttrib_Callback_2_(this, program, index);
-
+  ActiveInfo getActiveAttrib(Program program, int index) => _blink.BlinkWebGLRenderingContext.instance.getActiveAttrib_Callback_2_(unwrap_jso(this), unwrap_jso(program), index);
+  
   @DomName('WebGLRenderingContext.getActiveUniform')
   @DocsEditable()
-  ActiveInfo getActiveUniform(Program program, int index) => _blink.BlinkWebGLRenderingContext.instance.getActiveUniform_Callback_2_(this, program, index);
-
+  ActiveInfo getActiveUniform(Program program, int index) => _blink.BlinkWebGLRenderingContext.instance.getActiveUniform_Callback_2_(unwrap_jso(this), unwrap_jso(program), index);
+  
   @DomName('WebGLRenderingContext.getAttachedShaders')
   @DocsEditable()
-  List<Shader> getAttachedShaders(Program program) => _blink.BlinkWebGLRenderingContext.instance.getAttachedShaders_Callback_1_(this, program);
-
+  List<Shader> getAttachedShaders(Program program) => _blink.BlinkWebGLRenderingContext.instance.getAttachedShaders_Callback_1_(unwrap_jso(this), unwrap_jso(program));
+  
   @DomName('WebGLRenderingContext.getAttribLocation')
   @DocsEditable()
-  int getAttribLocation(Program program, String name) => _blink.BlinkWebGLRenderingContext.instance.getAttribLocation_Callback_2_(this, program, name);
-
+  int getAttribLocation(Program program, String name) => _blink.BlinkWebGLRenderingContext.instance.getAttribLocation_Callback_2_(unwrap_jso(this), unwrap_jso(program), name);
+  
   @DomName('WebGLRenderingContext.getBufferParameter')
   @DocsEditable()
-  Object getBufferParameter(int target, int pname) => _blink.BlinkWebGLRenderingContext.instance.getBufferParameter_Callback_2_(this, target, pname);
-
+  Object getBufferParameter(int target, int pname) => wrap_jso(_blink.BlinkWebGLRenderingContext.instance.getBufferParameter_Callback_2_(unwrap_jso(this), target, pname));
+  
   @DomName('WebGLRenderingContext.getContextAttributes')
   @DocsEditable()
-  ContextAttributes getContextAttributes() => _blink.BlinkWebGLRenderingContext.instance.getContextAttributes_Callback_0_(this);
-
+  ContextAttributes getContextAttributes() => _blink.BlinkWebGLRenderingContext.instance.getContextAttributes_Callback_0_(unwrap_jso(this));
+  
   @DomName('WebGLRenderingContext.getError')
   @DocsEditable()
-  int getError() => _blink.BlinkWebGLRenderingContext.instance.getError_Callback_0_(this);
-
+  int getError() => _blink.BlinkWebGLRenderingContext.instance.getError_Callback_0_(unwrap_jso(this));
+  
   @DomName('WebGLRenderingContext.getExtension')
   @DocsEditable()
-  Object getExtension(String name) => _blink.BlinkWebGLRenderingContext.instance.getExtension_Callback_1_(this, name);
-
+  Object getExtension(String name) => wrap_jso(_blink.BlinkWebGLRenderingContext.instance.getExtension_Callback_1_(unwrap_jso(this), name));
+  
   @DomName('WebGLRenderingContext.getFramebufferAttachmentParameter')
   @DocsEditable()
-  Object getFramebufferAttachmentParameter(int target, int attachment, int pname) => _blink.BlinkWebGLRenderingContext.instance.getFramebufferAttachmentParameter_Callback_3_(this, target, attachment, pname);
-
+  Object getFramebufferAttachmentParameter(int target, int attachment, int pname) => wrap_jso(_blink.BlinkWebGLRenderingContext.instance.getFramebufferAttachmentParameter_Callback_3_(unwrap_jso(this), target, attachment, pname));
+  
   @DomName('WebGLRenderingContext.getParameter')
   @DocsEditable()
-  Object getParameter(int pname) => _blink.BlinkWebGLRenderingContext.instance.getParameter_Callback_1_(this, pname);
-
+  Object getParameter(int pname) => wrap_jso(_blink.BlinkWebGLRenderingContext.instance.getParameter_Callback_1_(unwrap_jso(this), pname));
+  
   @DomName('WebGLRenderingContext.getProgramInfoLog')
   @DocsEditable()
-  String getProgramInfoLog(Program program) => _blink.BlinkWebGLRenderingContext.instance.getProgramInfoLog_Callback_1_(this, program);
-
+  String getProgramInfoLog(Program program) => _blink.BlinkWebGLRenderingContext.instance.getProgramInfoLog_Callback_1_(unwrap_jso(this), unwrap_jso(program));
+  
   @DomName('WebGLRenderingContext.getProgramParameter')
   @DocsEditable()
-  Object getProgramParameter(Program program, int pname) => _blink.BlinkWebGLRenderingContext.instance.getProgramParameter_Callback_2_(this, program, pname);
-
+  Object getProgramParameter(Program program, int pname) => wrap_jso(_blink.BlinkWebGLRenderingContext.instance.getProgramParameter_Callback_2_(unwrap_jso(this), unwrap_jso(program), pname));
+  
   @DomName('WebGLRenderingContext.getRenderbufferParameter')
   @DocsEditable()
-  Object getRenderbufferParameter(int target, int pname) => _blink.BlinkWebGLRenderingContext.instance.getRenderbufferParameter_Callback_2_(this, target, pname);
-
+  Object getRenderbufferParameter(int target, int pname) => wrap_jso(_blink.BlinkWebGLRenderingContext.instance.getRenderbufferParameter_Callback_2_(unwrap_jso(this), target, pname));
+  
   @DomName('WebGLRenderingContext.getShaderInfoLog')
   @DocsEditable()
-  String getShaderInfoLog(Shader shader) => _blink.BlinkWebGLRenderingContext.instance.getShaderInfoLog_Callback_1_(this, shader);
-
+  String getShaderInfoLog(Shader shader) => _blink.BlinkWebGLRenderingContext.instance.getShaderInfoLog_Callback_1_(unwrap_jso(this), unwrap_jso(shader));
+  
   @DomName('WebGLRenderingContext.getShaderParameter')
   @DocsEditable()
-  Object getShaderParameter(Shader shader, int pname) => _blink.BlinkWebGLRenderingContext.instance.getShaderParameter_Callback_2_(this, shader, pname);
-
+  Object getShaderParameter(Shader shader, int pname) => wrap_jso(_blink.BlinkWebGLRenderingContext.instance.getShaderParameter_Callback_2_(unwrap_jso(this), unwrap_jso(shader), pname));
+  
   @DomName('WebGLRenderingContext.getShaderPrecisionFormat')
   @DocsEditable()
-  ShaderPrecisionFormat getShaderPrecisionFormat(int shadertype, int precisiontype) => _blink.BlinkWebGLRenderingContext.instance.getShaderPrecisionFormat_Callback_2_(this, shadertype, precisiontype);
-
+  ShaderPrecisionFormat getShaderPrecisionFormat(int shadertype, int precisiontype) => _blink.BlinkWebGLRenderingContext.instance.getShaderPrecisionFormat_Callback_2_(unwrap_jso(this), shadertype, precisiontype);
+  
   @DomName('WebGLRenderingContext.getShaderSource')
   @DocsEditable()
-  String getShaderSource(Shader shader) => _blink.BlinkWebGLRenderingContext.instance.getShaderSource_Callback_1_(this, shader);
-
+  String getShaderSource(Shader shader) => _blink.BlinkWebGLRenderingContext.instance.getShaderSource_Callback_1_(unwrap_jso(this), unwrap_jso(shader));
+  
   @DomName('WebGLRenderingContext.getSupportedExtensions')
   @DocsEditable()
-  List<String> getSupportedExtensions() => _blink.BlinkWebGLRenderingContext.instance.getSupportedExtensions_Callback_0_(this);
-
+  List<String> getSupportedExtensions() => _blink.BlinkWebGLRenderingContext.instance.getSupportedExtensions_Callback_0_(unwrap_jso(this));
+  
   @DomName('WebGLRenderingContext.getTexParameter')
   @DocsEditable()
-  Object getTexParameter(int target, int pname) => _blink.BlinkWebGLRenderingContext.instance.getTexParameter_Callback_2_(this, target, pname);
-
+  Object getTexParameter(int target, int pname) => wrap_jso(_blink.BlinkWebGLRenderingContext.instance.getTexParameter_Callback_2_(unwrap_jso(this), target, pname));
+  
   @DomName('WebGLRenderingContext.getUniform')
   @DocsEditable()
-  Object getUniform(Program program, UniformLocation location) => _blink.BlinkWebGLRenderingContext.instance.getUniform_Callback_2_(this, program, location);
-
+  Object getUniform(Program program, UniformLocation location) => wrap_jso(_blink.BlinkWebGLRenderingContext.instance.getUniform_Callback_2_(unwrap_jso(this), unwrap_jso(program), unwrap_jso(location)));
+  
   @DomName('WebGLRenderingContext.getUniformLocation')
   @DocsEditable()
-  UniformLocation getUniformLocation(Program program, String name) => _blink.BlinkWebGLRenderingContext.instance.getUniformLocation_Callback_2_(this, program, name);
-
+  UniformLocation getUniformLocation(Program program, String name) => _blink.BlinkWebGLRenderingContext.instance.getUniformLocation_Callback_2_(unwrap_jso(this), unwrap_jso(program), name);
+  
   @DomName('WebGLRenderingContext.getVertexAttrib')
   @DocsEditable()
-  Object getVertexAttrib(int index, int pname) => _blink.BlinkWebGLRenderingContext.instance.getVertexAttrib_Callback_2_(this, index, pname);
-
+  Object getVertexAttrib(int index, int pname) => wrap_jso(_blink.BlinkWebGLRenderingContext.instance.getVertexAttrib_Callback_2_(unwrap_jso(this), index, pname));
+  
   @DomName('WebGLRenderingContext.getVertexAttribOffset')
   @DocsEditable()
-  int getVertexAttribOffset(int index, int pname) => _blink.BlinkWebGLRenderingContext.instance.getVertexAttribOffset_Callback_2_(this, index, pname);
-
+  int getVertexAttribOffset(int index, int pname) => _blink.BlinkWebGLRenderingContext.instance.getVertexAttribOffset_Callback_2_(unwrap_jso(this), index, pname);
+  
   @DomName('WebGLRenderingContext.hint')
   @DocsEditable()
-  void hint(int target, int mode) => _blink.BlinkWebGLRenderingContext.instance.hint_Callback_2_(this, target, mode);
-
+  void hint(int target, int mode) => _blink.BlinkWebGLRenderingContext.instance.hint_Callback_2_(unwrap_jso(this), target, mode);
+  
   @DomName('WebGLRenderingContext.isBuffer')
   @DocsEditable()
-  bool isBuffer(Buffer buffer) => _blink.BlinkWebGLRenderingContext.instance.isBuffer_Callback_1_(this, buffer);
-
+  bool isBuffer(Buffer buffer) => _blink.BlinkWebGLRenderingContext.instance.isBuffer_Callback_1_(unwrap_jso(this), unwrap_jso(buffer));
+  
   @DomName('WebGLRenderingContext.isContextLost')
   @DocsEditable()
-  bool isContextLost() => _blink.BlinkWebGLRenderingContext.instance.isContextLost_Callback_0_(this);
-
+  bool isContextLost() => _blink.BlinkWebGLRenderingContext.instance.isContextLost_Callback_0_(unwrap_jso(this));
+  
   @DomName('WebGLRenderingContext.isEnabled')
   @DocsEditable()
-  bool isEnabled(int cap) => _blink.BlinkWebGLRenderingContext.instance.isEnabled_Callback_1_(this, cap);
-
+  bool isEnabled(int cap) => _blink.BlinkWebGLRenderingContext.instance.isEnabled_Callback_1_(unwrap_jso(this), cap);
+  
   @DomName('WebGLRenderingContext.isFramebuffer')
   @DocsEditable()
-  bool isFramebuffer(Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.instance.isFramebuffer_Callback_1_(this, framebuffer);
-
+  bool isFramebuffer(Framebuffer framebuffer) => _blink.BlinkWebGLRenderingContext.instance.isFramebuffer_Callback_1_(unwrap_jso(this), unwrap_jso(framebuffer));
+  
   @DomName('WebGLRenderingContext.isProgram')
   @DocsEditable()
-  bool isProgram(Program program) => _blink.BlinkWebGLRenderingContext.instance.isProgram_Callback_1_(this, program);
-
+  bool isProgram(Program program) => _blink.BlinkWebGLRenderingContext.instance.isProgram_Callback_1_(unwrap_jso(this), unwrap_jso(program));
+  
   @DomName('WebGLRenderingContext.isRenderbuffer')
   @DocsEditable()
-  bool isRenderbuffer(Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.instance.isRenderbuffer_Callback_1_(this, renderbuffer);
-
+  bool isRenderbuffer(Renderbuffer renderbuffer) => _blink.BlinkWebGLRenderingContext.instance.isRenderbuffer_Callback_1_(unwrap_jso(this), unwrap_jso(renderbuffer));
+  
   @DomName('WebGLRenderingContext.isShader')
   @DocsEditable()
-  bool isShader(Shader shader) => _blink.BlinkWebGLRenderingContext.instance.isShader_Callback_1_(this, shader);
-
+  bool isShader(Shader shader) => _blink.BlinkWebGLRenderingContext.instance.isShader_Callback_1_(unwrap_jso(this), unwrap_jso(shader));
+  
   @DomName('WebGLRenderingContext.isTexture')
   @DocsEditable()
-  bool isTexture(Texture texture) => _blink.BlinkWebGLRenderingContext.instance.isTexture_Callback_1_(this, texture);
-
+  bool isTexture(Texture texture) => _blink.BlinkWebGLRenderingContext.instance.isTexture_Callback_1_(unwrap_jso(this), unwrap_jso(texture));
+  
   @DomName('WebGLRenderingContext.lineWidth')
   @DocsEditable()
-  void lineWidth(num width) => _blink.BlinkWebGLRenderingContext.instance.lineWidth_Callback_1_(this, width);
-
+  void lineWidth(num width) => _blink.BlinkWebGLRenderingContext.instance.lineWidth_Callback_1_(unwrap_jso(this), width);
+  
   @DomName('WebGLRenderingContext.linkProgram')
   @DocsEditable()
-  void linkProgram(Program program) => _blink.BlinkWebGLRenderingContext.instance.linkProgram_Callback_1_(this, program);
-
+  void linkProgram(Program program) => _blink.BlinkWebGLRenderingContext.instance.linkProgram_Callback_1_(unwrap_jso(this), unwrap_jso(program));
+  
   @DomName('WebGLRenderingContext.pixelStorei')
   @DocsEditable()
-  void pixelStorei(int pname, int param) => _blink.BlinkWebGLRenderingContext.instance.pixelStorei_Callback_2_(this, pname, param);
-
+  void pixelStorei(int pname, int param) => _blink.BlinkWebGLRenderingContext.instance.pixelStorei_Callback_2_(unwrap_jso(this), pname, param);
+  
   @DomName('WebGLRenderingContext.polygonOffset')
   @DocsEditable()
-  void polygonOffset(num factor, num units) => _blink.BlinkWebGLRenderingContext.instance.polygonOffset_Callback_2_(this, factor, units);
-
+  void polygonOffset(num factor, num units) => _blink.BlinkWebGLRenderingContext.instance.polygonOffset_Callback_2_(unwrap_jso(this), factor, units);
+  
   @DomName('WebGLRenderingContext.readPixels')
   @DocsEditable()
-  void readPixels(int x, int y, int width, int height, int format, int type, TypedData pixels) => _blink.BlinkWebGLRenderingContext.instance.readPixels_Callback_7_(this, x, y, width, height, format, type, pixels);
-
+  void readPixels(int x, int y, int width, int height, int format, int type, TypedData pixels) => _blink.BlinkWebGLRenderingContext.instance.readPixels_Callback_7_(unwrap_jso(this), x, y, width, height, format, type, unwrap_jso(pixels));
+  
   @DomName('WebGLRenderingContext.renderbufferStorage')
   @DocsEditable()
-  void renderbufferStorage(int target, int internalformat, int width, int height) => _blink.BlinkWebGLRenderingContext.instance.renderbufferStorage_Callback_4_(this, target, internalformat, width, height);
-
+  void renderbufferStorage(int target, int internalformat, int width, int height) => _blink.BlinkWebGLRenderingContext.instance.renderbufferStorage_Callback_4_(unwrap_jso(this), target, internalformat, width, height);
+  
   @DomName('WebGLRenderingContext.sampleCoverage')
   @DocsEditable()
-  void sampleCoverage(num value, bool invert) => _blink.BlinkWebGLRenderingContext.instance.sampleCoverage_Callback_2_(this, value, invert);
-
+  void sampleCoverage(num value, bool invert) => _blink.BlinkWebGLRenderingContext.instance.sampleCoverage_Callback_2_(unwrap_jso(this), value, invert);
+  
   @DomName('WebGLRenderingContext.scissor')
   @DocsEditable()
-  void scissor(int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.instance.scissor_Callback_4_(this, x, y, width, height);
-
+  void scissor(int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.instance.scissor_Callback_4_(unwrap_jso(this), x, y, width, height);
+  
   @DomName('WebGLRenderingContext.shaderSource')
   @DocsEditable()
-  void shaderSource(Shader shader, String string) => _blink.BlinkWebGLRenderingContext.instance.shaderSource_Callback_2_(this, shader, string);
-
+  void shaderSource(Shader shader, String string) => _blink.BlinkWebGLRenderingContext.instance.shaderSource_Callback_2_(unwrap_jso(this), unwrap_jso(shader), string);
+  
   @DomName('WebGLRenderingContext.stencilFunc')
   @DocsEditable()
-  void stencilFunc(int func, int ref, int mask) => _blink.BlinkWebGLRenderingContext.instance.stencilFunc_Callback_3_(this, func, ref, mask);
-
+  void stencilFunc(int func, int ref, int mask) => _blink.BlinkWebGLRenderingContext.instance.stencilFunc_Callback_3_(unwrap_jso(this), func, ref, mask);
+  
   @DomName('WebGLRenderingContext.stencilFuncSeparate')
   @DocsEditable()
-  void stencilFuncSeparate(int face, int func, int ref, int mask) => _blink.BlinkWebGLRenderingContext.instance.stencilFuncSeparate_Callback_4_(this, face, func, ref, mask);
-
+  void stencilFuncSeparate(int face, int func, int ref, int mask) => _blink.BlinkWebGLRenderingContext.instance.stencilFuncSeparate_Callback_4_(unwrap_jso(this), face, func, ref, mask);
+  
   @DomName('WebGLRenderingContext.stencilMask')
   @DocsEditable()
-  void stencilMask(int mask) => _blink.BlinkWebGLRenderingContext.instance.stencilMask_Callback_1_(this, mask);
-
+  void stencilMask(int mask) => _blink.BlinkWebGLRenderingContext.instance.stencilMask_Callback_1_(unwrap_jso(this), mask);
+  
   @DomName('WebGLRenderingContext.stencilMaskSeparate')
   @DocsEditable()
-  void stencilMaskSeparate(int face, int mask) => _blink.BlinkWebGLRenderingContext.instance.stencilMaskSeparate_Callback_2_(this, face, mask);
-
+  void stencilMaskSeparate(int face, int mask) => _blink.BlinkWebGLRenderingContext.instance.stencilMaskSeparate_Callback_2_(unwrap_jso(this), face, mask);
+  
   @DomName('WebGLRenderingContext.stencilOp')
   @DocsEditable()
-  void stencilOp(int fail, int zfail, int zpass) => _blink.BlinkWebGLRenderingContext.instance.stencilOp_Callback_3_(this, fail, zfail, zpass);
-
+  void stencilOp(int fail, int zfail, int zpass) => _blink.BlinkWebGLRenderingContext.instance.stencilOp_Callback_3_(unwrap_jso(this), fail, zfail, zpass);
+  
   @DomName('WebGLRenderingContext.stencilOpSeparate')
   @DocsEditable()
-  void stencilOpSeparate(int face, int fail, int zfail, int zpass) => _blink.BlinkWebGLRenderingContext.instance.stencilOpSeparate_Callback_4_(this, face, fail, zfail, zpass);
-
+  void stencilOpSeparate(int face, int fail, int zfail, int zpass) => _blink.BlinkWebGLRenderingContext.instance.stencilOpSeparate_Callback_4_(unwrap_jso(this), face, fail, zfail, zpass);
+  
   void texImage2D(int target, int level, int internalformat, int format_OR_width, int height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, [int format, int type, TypedData pixels]) {
     if ((pixels is TypedData || pixels == null) && (type is int) && (format is int) && (border_OR_canvas_OR_image_OR_pixels_OR_video is int) && (height_OR_type is int) && (format_OR_width is int) && (internalformat is int) && (level is int) && (target is int)) {
-      _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_9_(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels);
+      _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_9_(unwrap_jso(this), target, level, internalformat, format_OR_width, height_OR_type, unwrap_jso(border_OR_canvas_OR_image_OR_pixels_OR_video), format, type, unwrap_jso(pixels));
       return;
     }
     if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageData || border_OR_canvas_OR_image_OR_pixels_OR_video == null) && (height_OR_type is int) && (format_OR_width is int) && (internalformat is int) && (level is int) && (target is int) && format == null && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_6_(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_6_(unwrap_jso(this), target, level, internalformat, format_OR_width, height_OR_type, unwrap_jso(border_OR_canvas_OR_image_OR_pixels_OR_video));
       return;
     }
     if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageElement) && (height_OR_type is int) && (format_OR_width is int) && (internalformat is int) && (level is int) && (target is int) && format == null && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_6_(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_6_(unwrap_jso(this), target, level, internalformat, format_OR_width, height_OR_type, unwrap_jso(border_OR_canvas_OR_image_OR_pixels_OR_video));
       return;
     }
     if ((border_OR_canvas_OR_image_OR_pixels_OR_video is CanvasElement) && (height_OR_type is int) && (format_OR_width is int) && (internalformat is int) && (level is int) && (target is int) && format == null && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_6_(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_6_(unwrap_jso(this), target, level, internalformat, format_OR_width, height_OR_type, unwrap_jso(border_OR_canvas_OR_image_OR_pixels_OR_video));
       return;
     }
     if ((border_OR_canvas_OR_image_OR_pixels_OR_video is VideoElement) && (height_OR_type is int) && (format_OR_width is int) && (internalformat is int) && (level is int) && (target is int) && format == null && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_6_(this, target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_6_(unwrap_jso(this), target, level, internalformat, format_OR_width, height_OR_type, unwrap_jso(border_OR_canvas_OR_image_OR_pixels_OR_video));
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2856,47 +2857,47 @@
 
   @DomName('WebGLRenderingContext.texImage2DCanvas')
   @DocsEditable()
-  void texImage2DCanvas(int target, int level, int internalformat, int format, int type, CanvasElement canvas) => _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_6_(this, target, level, internalformat, format, type, canvas);
-
+  void texImage2DCanvas(int target, int level, int internalformat, int format, int type, CanvasElement canvas) => _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_6_(unwrap_jso(this), target, level, internalformat, format, type, unwrap_jso(canvas));
+  
   @DomName('WebGLRenderingContext.texImage2DImage')
   @DocsEditable()
-  void texImage2DImage(int target, int level, int internalformat, int format, int type, ImageElement image) => _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_6_(this, target, level, internalformat, format, type, image);
-
+  void texImage2DImage(int target, int level, int internalformat, int format, int type, ImageElement image) => _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_6_(unwrap_jso(this), target, level, internalformat, format, type, unwrap_jso(image));
+  
   @DomName('WebGLRenderingContext.texImage2DImageData')
   @DocsEditable()
-  void texImage2DImageData(int target, int level, int internalformat, int format, int type, ImageData pixels) => _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_6_(this, target, level, internalformat, format, type, pixels);
-
+  void texImage2DImageData(int target, int level, int internalformat, int format, int type, ImageData pixels) => _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_6_(unwrap_jso(this), target, level, internalformat, format, type, unwrap_jso(pixels));
+  
   @DomName('WebGLRenderingContext.texImage2DVideo')
   @DocsEditable()
-  void texImage2DVideo(int target, int level, int internalformat, int format, int type, VideoElement video) => _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_6_(this, target, level, internalformat, format, type, video);
-
+  void texImage2DVideo(int target, int level, int internalformat, int format, int type, VideoElement video) => _blink.BlinkWebGLRenderingContext.instance.texImage2D_Callback_6_(unwrap_jso(this), target, level, internalformat, format, type, unwrap_jso(video));
+  
   @DomName('WebGLRenderingContext.texParameterf')
   @DocsEditable()
-  void texParameterf(int target, int pname, num param) => _blink.BlinkWebGLRenderingContext.instance.texParameterf_Callback_3_(this, target, pname, param);
-
+  void texParameterf(int target, int pname, num param) => _blink.BlinkWebGLRenderingContext.instance.texParameterf_Callback_3_(unwrap_jso(this), target, pname, param);
+  
   @DomName('WebGLRenderingContext.texParameteri')
   @DocsEditable()
-  void texParameteri(int target, int pname, int param) => _blink.BlinkWebGLRenderingContext.instance.texParameteri_Callback_3_(this, target, pname, param);
-
+  void texParameteri(int target, int pname, int param) => _blink.BlinkWebGLRenderingContext.instance.texParameteri_Callback_3_(unwrap_jso(this), target, pname, param);
+  
   void texSubImage2D(int target, int level, int xoffset, int yoffset, int format_OR_width, int height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, [int type, TypedData pixels]) {
     if ((pixels is TypedData || pixels == null) && (type is int) && (canvas_OR_format_OR_image_OR_pixels_OR_video is int) && (height_OR_type is int) && (format_OR_width is int) && (yoffset is int) && (xoffset is int) && (level is int) && (target is int)) {
-      _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_9_(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels);
+      _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_9_(unwrap_jso(this), target, level, xoffset, yoffset, format_OR_width, height_OR_type, unwrap_jso(canvas_OR_format_OR_image_OR_pixels_OR_video), type, unwrap_jso(pixels));
       return;
     }
     if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageData || canvas_OR_format_OR_image_OR_pixels_OR_video == null) && (height_OR_type is int) && (format_OR_width is int) && (yoffset is int) && (xoffset is int) && (level is int) && (target is int) && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_7_(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_7_(unwrap_jso(this), target, level, xoffset, yoffset, format_OR_width, height_OR_type, unwrap_jso(canvas_OR_format_OR_image_OR_pixels_OR_video));
       return;
     }
     if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageElement) && (height_OR_type is int) && (format_OR_width is int) && (yoffset is int) && (xoffset is int) && (level is int) && (target is int) && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_7_(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_7_(unwrap_jso(this), target, level, xoffset, yoffset, format_OR_width, height_OR_type, unwrap_jso(canvas_OR_format_OR_image_OR_pixels_OR_video));
       return;
     }
     if ((canvas_OR_format_OR_image_OR_pixels_OR_video is CanvasElement) && (height_OR_type is int) && (format_OR_width is int) && (yoffset is int) && (xoffset is int) && (level is int) && (target is int) && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_7_(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_7_(unwrap_jso(this), target, level, xoffset, yoffset, format_OR_width, height_OR_type, unwrap_jso(canvas_OR_format_OR_image_OR_pixels_OR_video));
       return;
     }
     if ((canvas_OR_format_OR_image_OR_pixels_OR_video is VideoElement) && (height_OR_type is int) && (format_OR_width is int) && (yoffset is int) && (xoffset is int) && (level is int) && (target is int) && type == null && pixels == null) {
-      _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_7_(this, target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
+      _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_7_(unwrap_jso(this), target, level, xoffset, yoffset, format_OR_width, height_OR_type, unwrap_jso(canvas_OR_format_OR_image_OR_pixels_OR_video));
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -2904,144 +2905,144 @@
 
   @DomName('WebGLRenderingContext.texSubImage2DCanvas')
   @DocsEditable()
-  void texSubImage2DCanvas(int target, int level, int xoffset, int yoffset, int format, int type, CanvasElement canvas) => _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_7_(this, target, level, xoffset, yoffset, format, type, canvas);
-
+  void texSubImage2DCanvas(int target, int level, int xoffset, int yoffset, int format, int type, CanvasElement canvas) => _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_7_(unwrap_jso(this), target, level, xoffset, yoffset, format, type, unwrap_jso(canvas));
+  
   @DomName('WebGLRenderingContext.texSubImage2DImage')
   @DocsEditable()
-  void texSubImage2DImage(int target, int level, int xoffset, int yoffset, int format, int type, ImageElement image) => _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_7_(this, target, level, xoffset, yoffset, format, type, image);
-
+  void texSubImage2DImage(int target, int level, int xoffset, int yoffset, int format, int type, ImageElement image) => _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_7_(unwrap_jso(this), target, level, xoffset, yoffset, format, type, unwrap_jso(image));
+  
   @DomName('WebGLRenderingContext.texSubImage2DImageData')
   @DocsEditable()
-  void texSubImage2DImageData(int target, int level, int xoffset, int yoffset, int format, int type, ImageData pixels) => _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_7_(this, target, level, xoffset, yoffset, format, type, pixels);
-
+  void texSubImage2DImageData(int target, int level, int xoffset, int yoffset, int format, int type, ImageData pixels) => _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_7_(unwrap_jso(this), target, level, xoffset, yoffset, format, type, unwrap_jso(pixels));
+  
   @DomName('WebGLRenderingContext.texSubImage2DVideo')
   @DocsEditable()
-  void texSubImage2DVideo(int target, int level, int xoffset, int yoffset, int format, int type, VideoElement video) => _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_7_(this, target, level, xoffset, yoffset, format, type, video);
-
+  void texSubImage2DVideo(int target, int level, int xoffset, int yoffset, int format, int type, VideoElement video) => _blink.BlinkWebGLRenderingContext.instance.texSubImage2D_Callback_7_(unwrap_jso(this), target, level, xoffset, yoffset, format, type, unwrap_jso(video));
+  
   @DomName('WebGLRenderingContext.uniform1f')
   @DocsEditable()
-  void uniform1f(UniformLocation location, num x) => _blink.BlinkWebGLRenderingContext.instance.uniform1f_Callback_2_(this, location, x);
-
+  void uniform1f(UniformLocation location, num x) => _blink.BlinkWebGLRenderingContext.instance.uniform1f_Callback_2_(unwrap_jso(this), unwrap_jso(location), x);
+  
   @DomName('WebGLRenderingContext.uniform1fv')
   @DocsEditable()
-  void uniform1fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.instance.uniform1fv_Callback_2_(this, location, v);
-
+  void uniform1fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.instance.uniform1fv_Callback_2_(unwrap_jso(this), unwrap_jso(location), v);
+  
   @DomName('WebGLRenderingContext.uniform1i')
   @DocsEditable()
-  void uniform1i(UniformLocation location, int x) => _blink.BlinkWebGLRenderingContext.instance.uniform1i_Callback_2_(this, location, x);
-
+  void uniform1i(UniformLocation location, int x) => _blink.BlinkWebGLRenderingContext.instance.uniform1i_Callback_2_(unwrap_jso(this), unwrap_jso(location), x);
+  
   @DomName('WebGLRenderingContext.uniform1iv')
   @DocsEditable()
-  void uniform1iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.instance.uniform1iv_Callback_2_(this, location, v);
-
+  void uniform1iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.instance.uniform1iv_Callback_2_(unwrap_jso(this), unwrap_jso(location), v);
+  
   @DomName('WebGLRenderingContext.uniform2f')
   @DocsEditable()
-  void uniform2f(UniformLocation location, num x, num y) => _blink.BlinkWebGLRenderingContext.instance.uniform2f_Callback_3_(this, location, x, y);
-
+  void uniform2f(UniformLocation location, num x, num y) => _blink.BlinkWebGLRenderingContext.instance.uniform2f_Callback_3_(unwrap_jso(this), unwrap_jso(location), x, y);
+  
   @DomName('WebGLRenderingContext.uniform2fv')
   @DocsEditable()
-  void uniform2fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.instance.uniform2fv_Callback_2_(this, location, v);
-
+  void uniform2fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.instance.uniform2fv_Callback_2_(unwrap_jso(this), unwrap_jso(location), v);
+  
   @DomName('WebGLRenderingContext.uniform2i')
   @DocsEditable()
-  void uniform2i(UniformLocation location, int x, int y) => _blink.BlinkWebGLRenderingContext.instance.uniform2i_Callback_3_(this, location, x, y);
-
+  void uniform2i(UniformLocation location, int x, int y) => _blink.BlinkWebGLRenderingContext.instance.uniform2i_Callback_3_(unwrap_jso(this), unwrap_jso(location), x, y);
+  
   @DomName('WebGLRenderingContext.uniform2iv')
   @DocsEditable()
-  void uniform2iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.instance.uniform2iv_Callback_2_(this, location, v);
-
+  void uniform2iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.instance.uniform2iv_Callback_2_(unwrap_jso(this), unwrap_jso(location), v);
+  
   @DomName('WebGLRenderingContext.uniform3f')
   @DocsEditable()
-  void uniform3f(UniformLocation location, num x, num y, num z) => _blink.BlinkWebGLRenderingContext.instance.uniform3f_Callback_4_(this, location, x, y, z);
-
+  void uniform3f(UniformLocation location, num x, num y, num z) => _blink.BlinkWebGLRenderingContext.instance.uniform3f_Callback_4_(unwrap_jso(this), unwrap_jso(location), x, y, z);
+  
   @DomName('WebGLRenderingContext.uniform3fv')
   @DocsEditable()
-  void uniform3fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.instance.uniform3fv_Callback_2_(this, location, v);
-
+  void uniform3fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.instance.uniform3fv_Callback_2_(unwrap_jso(this), unwrap_jso(location), v);
+  
   @DomName('WebGLRenderingContext.uniform3i')
   @DocsEditable()
-  void uniform3i(UniformLocation location, int x, int y, int z) => _blink.BlinkWebGLRenderingContext.instance.uniform3i_Callback_4_(this, location, x, y, z);
-
+  void uniform3i(UniformLocation location, int x, int y, int z) => _blink.BlinkWebGLRenderingContext.instance.uniform3i_Callback_4_(unwrap_jso(this), unwrap_jso(location), x, y, z);
+  
   @DomName('WebGLRenderingContext.uniform3iv')
   @DocsEditable()
-  void uniform3iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.instance.uniform3iv_Callback_2_(this, location, v);
-
+  void uniform3iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.instance.uniform3iv_Callback_2_(unwrap_jso(this), unwrap_jso(location), v);
+  
   @DomName('WebGLRenderingContext.uniform4f')
   @DocsEditable()
-  void uniform4f(UniformLocation location, num x, num y, num z, num w) => _blink.BlinkWebGLRenderingContext.instance.uniform4f_Callback_5_(this, location, x, y, z, w);
-
+  void uniform4f(UniformLocation location, num x, num y, num z, num w) => _blink.BlinkWebGLRenderingContext.instance.uniform4f_Callback_5_(unwrap_jso(this), unwrap_jso(location), x, y, z, w);
+  
   @DomName('WebGLRenderingContext.uniform4fv')
   @DocsEditable()
-  void uniform4fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.instance.uniform4fv_Callback_2_(this, location, v);
-
+  void uniform4fv(UniformLocation location, Float32List v) => _blink.BlinkWebGLRenderingContext.instance.uniform4fv_Callback_2_(unwrap_jso(this), unwrap_jso(location), v);
+  
   @DomName('WebGLRenderingContext.uniform4i')
   @DocsEditable()
-  void uniform4i(UniformLocation location, int x, int y, int z, int w) => _blink.BlinkWebGLRenderingContext.instance.uniform4i_Callback_5_(this, location, x, y, z, w);
-
+  void uniform4i(UniformLocation location, int x, int y, int z, int w) => _blink.BlinkWebGLRenderingContext.instance.uniform4i_Callback_5_(unwrap_jso(this), unwrap_jso(location), x, y, z, w);
+  
   @DomName('WebGLRenderingContext.uniform4iv')
   @DocsEditable()
-  void uniform4iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.instance.uniform4iv_Callback_2_(this, location, v);
-
+  void uniform4iv(UniformLocation location, Int32List v) => _blink.BlinkWebGLRenderingContext.instance.uniform4iv_Callback_2_(unwrap_jso(this), unwrap_jso(location), v);
+  
   @DomName('WebGLRenderingContext.uniformMatrix2fv')
   @DocsEditable()
-  void uniformMatrix2fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.instance.uniformMatrix2fv_Callback_3_(this, location, transpose, array);
-
+  void uniformMatrix2fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.instance.uniformMatrix2fv_Callback_3_(unwrap_jso(this), unwrap_jso(location), transpose, array);
+  
   @DomName('WebGLRenderingContext.uniformMatrix3fv')
   @DocsEditable()
-  void uniformMatrix3fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.instance.uniformMatrix3fv_Callback_3_(this, location, transpose, array);
-
+  void uniformMatrix3fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.instance.uniformMatrix3fv_Callback_3_(unwrap_jso(this), unwrap_jso(location), transpose, array);
+  
   @DomName('WebGLRenderingContext.uniformMatrix4fv')
   @DocsEditable()
-  void uniformMatrix4fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.instance.uniformMatrix4fv_Callback_3_(this, location, transpose, array);
-
+  void uniformMatrix4fv(UniformLocation location, bool transpose, Float32List array) => _blink.BlinkWebGLRenderingContext.instance.uniformMatrix4fv_Callback_3_(unwrap_jso(this), unwrap_jso(location), transpose, array);
+  
   @DomName('WebGLRenderingContext.useProgram')
   @DocsEditable()
-  void useProgram(Program program) => _blink.BlinkWebGLRenderingContext.instance.useProgram_Callback_1_(this, program);
-
+  void useProgram(Program program) => _blink.BlinkWebGLRenderingContext.instance.useProgram_Callback_1_(unwrap_jso(this), unwrap_jso(program));
+  
   @DomName('WebGLRenderingContext.validateProgram')
   @DocsEditable()
-  void validateProgram(Program program) => _blink.BlinkWebGLRenderingContext.instance.validateProgram_Callback_1_(this, program);
-
+  void validateProgram(Program program) => _blink.BlinkWebGLRenderingContext.instance.validateProgram_Callback_1_(unwrap_jso(this), unwrap_jso(program));
+  
   @DomName('WebGLRenderingContext.vertexAttrib1f')
   @DocsEditable()
-  void vertexAttrib1f(int indx, num x) => _blink.BlinkWebGLRenderingContext.instance.vertexAttrib1f_Callback_2_(this, indx, x);
-
+  void vertexAttrib1f(int indx, num x) => _blink.BlinkWebGLRenderingContext.instance.vertexAttrib1f_Callback_2_(unwrap_jso(this), indx, x);
+  
   @DomName('WebGLRenderingContext.vertexAttrib1fv')
   @DocsEditable()
-  void vertexAttrib1fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.instance.vertexAttrib1fv_Callback_2_(this, indx, values);
-
+  void vertexAttrib1fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.instance.vertexAttrib1fv_Callback_2_(unwrap_jso(this), indx, values);
+  
   @DomName('WebGLRenderingContext.vertexAttrib2f')
   @DocsEditable()
-  void vertexAttrib2f(int indx, num x, num y) => _blink.BlinkWebGLRenderingContext.instance.vertexAttrib2f_Callback_3_(this, indx, x, y);
-
+  void vertexAttrib2f(int indx, num x, num y) => _blink.BlinkWebGLRenderingContext.instance.vertexAttrib2f_Callback_3_(unwrap_jso(this), indx, x, y);
+  
   @DomName('WebGLRenderingContext.vertexAttrib2fv')
   @DocsEditable()
-  void vertexAttrib2fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.instance.vertexAttrib2fv_Callback_2_(this, indx, values);
-
+  void vertexAttrib2fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.instance.vertexAttrib2fv_Callback_2_(unwrap_jso(this), indx, values);
+  
   @DomName('WebGLRenderingContext.vertexAttrib3f')
   @DocsEditable()
-  void vertexAttrib3f(int indx, num x, num y, num z) => _blink.BlinkWebGLRenderingContext.instance.vertexAttrib3f_Callback_4_(this, indx, x, y, z);
-
+  void vertexAttrib3f(int indx, num x, num y, num z) => _blink.BlinkWebGLRenderingContext.instance.vertexAttrib3f_Callback_4_(unwrap_jso(this), indx, x, y, z);
+  
   @DomName('WebGLRenderingContext.vertexAttrib3fv')
   @DocsEditable()
-  void vertexAttrib3fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.instance.vertexAttrib3fv_Callback_2_(this, indx, values);
-
+  void vertexAttrib3fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.instance.vertexAttrib3fv_Callback_2_(unwrap_jso(this), indx, values);
+  
   @DomName('WebGLRenderingContext.vertexAttrib4f')
   @DocsEditable()
-  void vertexAttrib4f(int indx, num x, num y, num z, num w) => _blink.BlinkWebGLRenderingContext.instance.vertexAttrib4f_Callback_5_(this, indx, x, y, z, w);
-
+  void vertexAttrib4f(int indx, num x, num y, num z, num w) => _blink.BlinkWebGLRenderingContext.instance.vertexAttrib4f_Callback_5_(unwrap_jso(this), indx, x, y, z, w);
+  
   @DomName('WebGLRenderingContext.vertexAttrib4fv')
   @DocsEditable()
-  void vertexAttrib4fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.instance.vertexAttrib4fv_Callback_2_(this, indx, values);
-
+  void vertexAttrib4fv(int indx, Float32List values) => _blink.BlinkWebGLRenderingContext.instance.vertexAttrib4fv_Callback_2_(unwrap_jso(this), indx, values);
+  
   @DomName('WebGLRenderingContext.vertexAttribPointer')
   @DocsEditable()
-  void vertexAttribPointer(int indx, int size, int type, bool normalized, int stride, int offset) => _blink.BlinkWebGLRenderingContext.instance.vertexAttribPointer_Callback_6_(this, indx, size, type, normalized, stride, offset);
-
+  void vertexAttribPointer(int indx, int size, int type, bool normalized, int stride, int offset) => _blink.BlinkWebGLRenderingContext.instance.vertexAttribPointer_Callback_6_(unwrap_jso(this), indx, size, type, normalized, stride, offset);
+  
   @DomName('WebGLRenderingContext.viewport')
   @DocsEditable()
-  void viewport(int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.instance.viewport_Callback_4_(this, x, y, width, height);
-
+  void viewport(int x, int y, int width, int height) => _blink.BlinkWebGLRenderingContext.instance.viewport_Callback_4_(unwrap_jso(this), x, y, width, height);
+  
 
   /**
    * Sets the currently bound texture to [data].
@@ -3132,16 +3133,16 @@
 
   @DomName('WebGLShaderPrecisionFormat.precision')
   @DocsEditable()
-  int get precision => _blink.BlinkWebGLShaderPrecisionFormat.instance.precision_Getter_(this);
-
+  int get precision => _blink.BlinkWebGLShaderPrecisionFormat.instance.precision_Getter_(unwrap_jso(this));
+  
   @DomName('WebGLShaderPrecisionFormat.rangeMax')
   @DocsEditable()
-  int get rangeMax => _blink.BlinkWebGLShaderPrecisionFormat.instance.rangeMax_Getter_(this);
-
+  int get rangeMax => _blink.BlinkWebGLShaderPrecisionFormat.instance.rangeMax_Getter_(unwrap_jso(this));
+  
   @DomName('WebGLShaderPrecisionFormat.rangeMin')
   @DocsEditable()
-  int get rangeMin => _blink.BlinkWebGLShaderPrecisionFormat.instance.rangeMin_Getter_(this);
-
+  int get rangeMin => _blink.BlinkWebGLShaderPrecisionFormat.instance.rangeMin_Getter_(unwrap_jso(this));
+  
 }
 // 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
diff --git a/sdk/lib/web_sql/dartium/web_sql_dartium.dart b/sdk/lib/web_sql/dartium/web_sql_dartium.dart
index 380f393..540f88d 100644
--- a/sdk/lib/web_sql/dartium/web_sql_dartium.dart
+++ b/sdk/lib/web_sql/dartium/web_sql_dartium.dart
@@ -33,6 +33,7 @@
   'SQLTransaction': () => SqlTransaction,
 
 };
+
 // 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.
@@ -100,48 +101,48 @@
 
   @DomName('Database.version')
   @DocsEditable()
-  String get version => _blink.BlinkDatabase.instance.version_Getter_(this);
-
+  String get version => _blink.BlinkDatabase.instance.version_Getter_(unwrap_jso(this));
+  
   void changeVersion(String oldVersion, String newVersion, [SqlTransactionCallback callback, SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) {
     if (successCallback != null) {
-      _blink.BlinkDatabase.instance.changeVersion_Callback_5_(this, oldVersion, newVersion, callback, errorCallback, successCallback);
+      _blink.BlinkDatabase.instance.changeVersion_Callback_5_(unwrap_jso(this), oldVersion, newVersion, unwrap_jso(callback), unwrap_jso(errorCallback), unwrap_jso(successCallback));
       return;
     }
     if (errorCallback != null) {
-      _blink.BlinkDatabase.instance.changeVersion_Callback_4_(this, oldVersion, newVersion, callback, errorCallback);
+      _blink.BlinkDatabase.instance.changeVersion_Callback_4_(unwrap_jso(this), oldVersion, newVersion, unwrap_jso(callback), unwrap_jso(errorCallback));
       return;
     }
     if (callback != null) {
-      _blink.BlinkDatabase.instance.changeVersion_Callback_3_(this, oldVersion, newVersion, callback);
+      _blink.BlinkDatabase.instance.changeVersion_Callback_3_(unwrap_jso(this), oldVersion, newVersion, unwrap_jso(callback));
       return;
     }
-    _blink.BlinkDatabase.instance.changeVersion_Callback_2_(this, oldVersion, newVersion);
+    _blink.BlinkDatabase.instance.changeVersion_Callback_2_(unwrap_jso(this), oldVersion, newVersion);
     return;
   }
 
   void readTransaction(SqlTransactionCallback callback, [SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) {
     if (successCallback != null) {
-      _blink.BlinkDatabase.instance.readTransaction_Callback_3_(this, callback, errorCallback, successCallback);
+      _blink.BlinkDatabase.instance.readTransaction_Callback_3_(unwrap_jso(this), unwrap_jso(callback), unwrap_jso(errorCallback), unwrap_jso(successCallback));
       return;
     }
     if (errorCallback != null) {
-      _blink.BlinkDatabase.instance.readTransaction_Callback_2_(this, callback, errorCallback);
+      _blink.BlinkDatabase.instance.readTransaction_Callback_2_(unwrap_jso(this), unwrap_jso(callback), unwrap_jso(errorCallback));
       return;
     }
-    _blink.BlinkDatabase.instance.readTransaction_Callback_1_(this, callback);
+    _blink.BlinkDatabase.instance.readTransaction_Callback_1_(unwrap_jso(this), unwrap_jso(callback));
     return;
   }
 
   void transaction(SqlTransactionCallback callback, [SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) {
     if (successCallback != null) {
-      _blink.BlinkDatabase.instance.transaction_Callback_3_(this, callback, errorCallback, successCallback);
+      _blink.BlinkDatabase.instance.transaction_Callback_3_(unwrap_jso(this), unwrap_jso(callback), unwrap_jso(errorCallback), unwrap_jso(successCallback));
       return;
     }
     if (errorCallback != null) {
-      _blink.BlinkDatabase.instance.transaction_Callback_2_(this, callback, errorCallback);
+      _blink.BlinkDatabase.instance.transaction_Callback_2_(unwrap_jso(this), unwrap_jso(callback), unwrap_jso(errorCallback));
       return;
     }
-    _blink.BlinkDatabase.instance.transaction_Callback_1_(this, callback);
+    _blink.BlinkDatabase.instance.transaction_Callback_1_(unwrap_jso(this), unwrap_jso(callback));
     return;
   }
 
@@ -195,12 +196,12 @@
 
   @DomName('SQLError.code')
   @DocsEditable()
-  int get code => _blink.BlinkSQLError.instance.code_Getter_(this);
-
+  int get code => _blink.BlinkSQLError.instance.code_Getter_(unwrap_jso(this));
+  
   @DomName('SQLError.message')
   @DocsEditable()
-  String get message => _blink.BlinkSQLError.instance.message_Getter_(this);
-
+  String get message => _blink.BlinkSQLError.instance.message_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -219,16 +220,16 @@
 
   @DomName('SQLResultSet.insertId')
   @DocsEditable()
-  int get insertId => _blink.BlinkSQLResultSet.instance.insertId_Getter_(this);
-
+  int get insertId => _blink.BlinkSQLResultSet.instance.insertId_Getter_(unwrap_jso(this));
+  
   @DomName('SQLResultSet.rows')
   @DocsEditable()
-  SqlResultSetRowList get rows => _blink.BlinkSQLResultSet.instance.rows_Getter_(this);
-
+  SqlResultSetRowList get rows => wrap_jso(_blink.BlinkSQLResultSet.instance.rows_Getter_(unwrap_jso(this)));
+  
   @DomName('SQLResultSet.rowsAffected')
   @DocsEditable()
-  int get rowsAffected => _blink.BlinkSQLResultSet.instance.rowsAffected_Getter_(this);
-
+  int get rowsAffected => _blink.BlinkSQLResultSet.instance.rowsAffected_Getter_(unwrap_jso(this));
+  
 }
 // 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
@@ -247,16 +248,16 @@
 
   @DomName('SQLResultSetRowList.length')
   @DocsEditable()
-  int get length => _blink.BlinkSQLResultSetRowList.instance.length_Getter_(this);
-
+  int get length => _blink.BlinkSQLResultSetRowList.instance.length_Getter_(unwrap_jso(this));
+  
   Map operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.index(index, this);
-    return _blink.BlinkSQLResultSetRowList.instance.item_Callback_1_(this, index);
+    return _blink.BlinkSQLResultSetRowList.instance.item_Callback_1_(unwrap_jso(this), index);
   }
 
-  Map _nativeIndexedGetter(int index) => _blink.BlinkSQLResultSetRowList.instance.item_Callback_1_(this, index);
-
+  Map _nativeIndexedGetter(int index) => _blink.BlinkSQLResultSetRowList.instance.item_Callback_1_(unwrap_jso(this), index);
+ 
   void operator[]=(int index, Map value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
@@ -297,8 +298,8 @@
 
   @DomName('SQLResultSetRowList.item')
   @DocsEditable()
-  Map item(int index) => _blink.BlinkSQLResultSetRowList.instance.item_Callback_1_(this, index);
-
+  Map item(int index) => _blink.BlinkSQLResultSetRowList.instance.item_Callback_1_(unwrap_jso(this), index);
+  
 }
 // 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
@@ -320,6 +321,6 @@
 
   @DomName('SQLTransaction.executeSql')
   @DocsEditable()
-  void executeSql(String sqlStatement, List<Object> arguments, [SqlStatementCallback callback, SqlStatementErrorCallback errorCallback]) => _blink.BlinkSQLTransaction.instance.executeSql_Callback_4_(this, sqlStatement, arguments, callback, errorCallback);
-
+  void executeSql(String sqlStatement, List<Object> arguments, [SqlStatementCallback callback, SqlStatementErrorCallback errorCallback]) => _blink.BlinkSQLTransaction.instance.executeSql_Callback_4_(unwrap_jso(this), sqlStatement, arguments, unwrap_jso(callback), unwrap_jso(errorCallback));
+  
 }
diff --git a/site/try/src/compiler_isolate.dart b/site/try/src/compiler_isolate.dart
index b4e0cfc..810de41 100644
--- a/site/try/src/compiler_isolate.dart
+++ b/site/try/src/compiler_isolate.dart
@@ -13,6 +13,9 @@
 
 import 'package:compiler/compiler.dart' as compiler;
 
+import 'package:compiler/src/old_to_new_api.dart' show
+    LegacyCompilerDiagnostics, LegacyCompilerInput;
+
 import 'package:dart2js_incremental/dart2js_incremental.dart' show
     reuseCompiler, OutputProvider;
 
@@ -112,8 +115,8 @@
   Stopwatch compilationTimer = new Stopwatch()..start();
   OutputProvider outputProvider = new OutputProvider();
   reuseCompiler(
-      diagnosticHandler: handler,
-      inputProvider: inputProvider,
+      diagnosticHandler: new LegacyCompilerDiagnostics(handler),
+      inputProvider: new LegacyCompilerInput(inputProvider),
       outputProvider: outputProvider,
       options: options,
       cachedCompiler: cachedCompiler,
diff --git a/tests/co19/co19-analyzer2.status b/tests/co19/co19-analyzer2.status
index 42ad5a8..6790464 100644
--- a/tests/co19/co19-analyzer2.status
+++ b/tests/co19/co19-analyzer2.status
@@ -289,3 +289,4 @@
 Language/15_Types/4_Interface_Types_A10_t09: StaticWarning # co19 issue 745
 Language/13_Statements/15_Assert_A04_t07: StaticWarning # Issue 23663
 Language/13_Statements/15_Assert_A03_t08: StaticWarning # Issue 23663
+
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 922066a..59d8942c 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -236,6 +236,7 @@
 WebPlatformTest/dom/nodes/Document-createElement_t01: CompileTimeError # co19-roll r722: Please triage this failure.
 WebPlatformTest/dom/nodes/Element-childElementCount-nochild_t01: CompileTimeError # co19-roll r722: Please triage this failure.
 LayoutTests/fast/loader/loadInProgress_t01: Skip # Issue 23466
+LayoutTests/fast/dom/css-innerHTML_t01: SkipByDesign # Test is incorrect.
 
 [ $compiler == dart2js && $checked ]
 Language/13_Statements/09_Switch_A05_t01: Fail # Missing type check in switch expression
@@ -1265,9 +1266,7 @@
 WebPlatformTest/html-imports/loading-import_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/innerhtml-on-templates/innerhtml_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/generating-of-implied-end-tags_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/template-end-tag-without-start-one_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/parsing-html-templates/creating-an-element-for-the-token/template-owner-document_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-image_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-video_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html/browsers/browsing-the-web/read-text/load-text-plain_t01: RuntimeError # Please triage this failure
@@ -2165,7 +2164,6 @@
 LayoutTests/fast/dom/client-width-height-quirks_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/containerNode_t01: Skip # Times out. Please triage this failure
 LayoutTests/fast/dom/css-delete-doc_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/css-innerHTML_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/css-mediarule-functions_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/css-rule-functions_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/css-selectorText_t01: RuntimeError # Please triage this failure
@@ -2903,7 +2901,7 @@
 WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/generating-of-implied-end-tags_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/parsing-html-templates/creating-an-element-for-the-token/template-owner-document_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/template-element/node-document-changes_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01 : RuntimeError # In Firefox, setting innerHTML on a Frameset element does nothing.
 WebPlatformTest/html-templates/template-element/template-content_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-image_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-video_t01: RuntimeError # Please triage this failure
@@ -3989,7 +3987,6 @@
 LayoutTests/fast/writing-mode/table-hit-test_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/writing-mode/vertical-font-vmtx-units-per-em_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/xmlhttprequest/xmlhttprequest-get_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-quirks_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-xml-text-responsetype_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-arraybuffer_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-before-open-sync-request_t01: RuntimeError # Please triage this failure
@@ -4185,10 +4182,8 @@
 WebPlatformTest/html-templates/definitions/template-contents-owner-test-001_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/innerhtml-on-templates/innerhtml_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/generating-of-implied-end-tags_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/template-end-tag-without-start-one_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/parsing-html-templates/creating-an-element-for-the-token/template-owner-document_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/template-element/node-document-changes_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-image_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-video_t01: Skip # Times out. Please triage this failure
 WebPlatformTest/html/browsers/browsing-the-web/read-text/load-text-plain_t01: RuntimeError # Please triage this failure
@@ -5500,7 +5495,6 @@
 WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-html-token_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/start-tag-body_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/generating-of-implied-end-tags_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/template-end-tag-without-start-one_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-table-insertion-mode/end-tag-table_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/parsing-html-templates/appending-to-a-template/template-child-nodes_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context_t01: RuntimeError # Please triage this failure
@@ -5510,7 +5504,7 @@
 WebPlatformTest/html-templates/serializing-html-templates/outerhtml_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/template-element/content-attribute_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/template-element/node-document-changes_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01 : RuntimeError # In Safari mobile sim, setting innerHTML on a Frameset element does nothing.
 WebPlatformTest/html-templates/template-element/template-content-node-document_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/template-element/template-content_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-image_t01: RuntimeError # Please triage this failure
@@ -6445,7 +6439,6 @@
 LayoutTests/fast/dom/createElementNS-namespace-errors_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/createElement_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/css-delete-doc_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/css-innerHTML_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/css-insert-import-rule-twice_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/dom/css-insert-import-rule_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/dom/css-mediarule-functions_t01: RuntimeError # Please triage this failure
@@ -7518,7 +7511,7 @@
 WebPlatformTest/html-templates/serializing-html-templates/outerhtml_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/template-element/content-attribute_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/template-element/node-document-changes_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01 : RuntimeError # In IE, setting innerHTML on a Frameset element does nothing.
 WebPlatformTest/html-templates/template-element/template-content-node-document_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/template-element/template-content_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-image_t01: Skip # Times out. Please triage this failure
@@ -8440,7 +8433,6 @@
 LayoutTests/fast/dom/createElementNS-namespace-errors_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/createElement_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/css-delete-doc_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/dom/css-innerHTML_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/css-insert-import-rule-twice_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/dom/css-insert-import-rule_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/dom/css-mediarule-functions_t01: RuntimeError # Please triage this failure
@@ -9079,7 +9071,6 @@
 LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-before-open_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-sync-request_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/xmlhttprequest/xmlhttprequest-set-responsetype_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/xmlhttprequest/xmlhttprequest-withcredentials-before-open_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/xpath/4XPath/Borrowed/cz_20030217_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/xpath/4XPath/Borrowed/kd_20010423_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/xpath/4XPath/Borrowed/namespace-nodes_t01: RuntimeError # Please triage this failure
@@ -9283,8 +9274,7 @@
 LibTest/html/Window/resizeBy_A01_t01: RuntimeError # Please triage this failure
 LibTest/html/Window/resizeTo_A01_t01: RuntimeError # Please triage this failure
 LibTest/math/sqrt_A02_t02: Skip # Times out. Please triage this failure
-LibTest/typed_data/ByteData/ByteData.view_A01_t01: RuntimeError # Please triage this failure
-LibTest/typed_data/ByteData/offsetInBytes_A01_t01: RuntimeError # Please triage this failure
+LibTest/typed_data/ByteData/ByteData.view_A01_t01: Pass, RuntimeError # Please triage this failure
 LibTest/typed_data/Float32List/removeWhere_A01_t01: Skip # Times out. Please triage this failure
 LibTest/typed_data/Float32x4List/Float32x4List.view_A06_t01: RuntimeError # Please triage this failure
 LibTest/typed_data/Int32List/lastWhere_A01_t01: Skip # Times out. Please triage this failure
@@ -9387,7 +9377,7 @@
 WebPlatformTest/html-templates/serializing-html-templates/outerhtml_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/template-element/content-attribute_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/template-element/node-document-changes_t01: RuntimeError # Please triage this failure
-WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01: RuntimeError # Please triage this failure
+WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01 : RuntimeError # In IE, setting innerHTML on a Frameset element does nothing.
 WebPlatformTest/html-templates/template-element/template-content-node-document_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html-templates/template-element/template-content_t01: RuntimeError # Please triage this failure
 WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-image_t01: Skip # Times out. Please triage this failure
@@ -9604,299 +9594,13 @@
 Language/12_Expressions/13_Property_Extraction_A03_t01: RuntimeError # Cannot read property 'call' of undefined
 Language/12_Expressions/13_Property_Extraction_A03_t02: RuntimeError # Cannot read property 'call' of undefined
 Language/12_Expressions/13_Property_Extraction_A03_t03: RuntimeError # Cannot read property 'call' of undefined
-Language/12_Expressions/13_Spawning_an_Isolate_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
 Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A01_t01: RuntimeError # Cannot read property 'call' of undefined
 Language/12_Expressions/30_Identifier_Reference_A09_t03: Crash # (i=0): For-loop variable captured in loop header
 Language/13_Statements/06_For_A01_t07: Crash # unsupported operation on erroneous element
 Language/13_Statements/12_Labels_A03_t04: Crash # (switch (i){L:case 0:flag=true;break;case 2:continue L;}): continue to a labeled switch case
 Language/13_Statements/14_Continue_A02_t12: Crash # (switch (2){L:case 1:flag=true;break;case 2:continue L;}): continue to a labeled switch case
 Language/13_Statements/14_Continue_A02_t13: Crash # (switch (2){case 2:continue L;L:case 1:flag=true;}): continue to a labeled switch case
-Language/14_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t04: Crash # The null object does not have a getter 'name'.
-Language/14_Libraries_and_Scripts/4_Scripts_A03_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LayoutTests/fast/canvas/webgl/framebuffer-object-attachment_t01: Crash # The null object does not have a getter 'name'.
-LayoutTests/fast/canvas/webgl/webgl-specific_t01: Crash # The null object does not have a getter 'name'.
-LibTest/async/Completer/Completer.sync_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Completer/completeError_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Completer/completeError_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Completer/completeError_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Completer/completeError_A01_t04: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Completer/completeError_A03_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Completer/completeError_A03_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Completer/complete_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Completer/complete_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Completer/complete_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Completer/complete_A01_t04: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Completer/complete_A01_t05: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Completer/complete_A01_t06: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Completer/complete_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Completer/complete_A02_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Completer/isCompleted_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/DeferredLibrary/DeferredLibrary_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future.delayed_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future.delayed_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future.delayed_A03_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future.error_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future.microtask_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future.microtask_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future.microtask_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future.microtask_A01_t04: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future.sync_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future.sync_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future.sync_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future.sync_A01_t04: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future.value_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future.value_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/Future_A01_t04: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/asStream_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/asStream_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/asStream_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/asStream_A02_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/catchError_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/catchError_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/catchError_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/catchError_A03_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/catchError_A03_t02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Future/catchError_A03_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/catchError_A03_t04: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/catchError_A03_t05: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/forEach_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/forEach_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/forEach_A03_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Future/then_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/then_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/then_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/then_A01_t04: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/then_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/then_A03_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/then_A03_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/then_A04_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/then_A05_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/then_A05_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/then_A05_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/wait_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Future/wait_A01_t03: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Future/wait_A01_t04: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Future/wait_A01_t05: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Future/wait_A01_t06: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Future/wait_A01_t07: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Future/wait_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/wait_A02_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/whenComplete_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/whenComplete_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/whenComplete_A03_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/whenComplete_A04_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Future/whenComplete_A04_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/Stream.eventTransformed_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Stream/Stream.eventTransformed_A01_t02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Stream/Stream.fromFuture_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/Stream.fromFuture_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/Stream.fromFuture_A02_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/Stream.fromIterable_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/Stream.fromIterable_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/Stream.fromIterable_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/Stream.periodic_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/Stream.periodic_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/Stream.periodic_A03_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/Stream_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/any_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/any_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/any_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/asBroadcastStream_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Stream/asBroadcastStream_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/asBroadcastStream_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/asBroadcastStream_A01_t04: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/asBroadcastStream_A03_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/asBroadcastStream_A03_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/asBroadcastStream_A03_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/asBroadcastStream_A04_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/asBroadcastStream_A04_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/asBroadcastStream_A04_t03: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Stream/contains_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/contains_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/contains_A03_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/distinct_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/distinct_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/drain_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/drain_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/drain_A02_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/elementAt_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/elementAt_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/elementAt_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/elementAt_A03_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/every_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/every_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/expand_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Stream/firstWhere_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/firstWhere_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/firstWhere_A03_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/firstWhere_A03_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/first_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/first_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/first_A02_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/first_A03_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/fold_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/fold_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/forEach_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Stream/forEach_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/forEach_A02_t02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Stream/handleError_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Stream/handleError_A02_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Stream/handleError_A03_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Stream/handleError_A04_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/handleError_A04_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/handleError_A04_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/isBroadcast_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/isBroadcast_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/isEmpty_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/join_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/join_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/join_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/join_A02_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/lastWhere_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/lastWhere_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/lastWhere_A03_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/lastWhere_A04_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/last_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/last_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/last_A03_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/length_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/listen_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Stream/listen_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/listen_A03_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Stream/listen_A04_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/listen_A05_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/listen_A05_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/listen_A05_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/listen_A06_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/map_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Stream/pipe_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Stream/reduce_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/reduce_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/reduce_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/singleWhere_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/singleWhere_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/single_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/single_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/skipWhile_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/skip_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/takeWhile_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/take_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/take_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/take_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/toList_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Stream/toSet_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/transform_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Stream/transform_A01_t02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Stream/where_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Stream/where_A01_t02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamController/StreamController.broadcast_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamController/StreamController.broadcast_A03_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/StreamController.broadcast_A04_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/StreamController.broadcast_A05_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/StreamController.broadcast_A06_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/StreamController.broadcast_A07_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/StreamController.broadcast_A07_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/StreamController.broadcast_A08_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/StreamController_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/StreamController_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/StreamController_A03_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamController/StreamController_A04_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/StreamController_A05_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/StreamController_A06_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/StreamController_A06_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/addError_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/addError_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/addStream_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamController/addStream_A02_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamController/addStream_A02_t02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamController/addStream_A03_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamController/addStream_A03_t02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamController/add_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/close_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/close_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/done_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/done_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/done_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/hasListener_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/hasListener_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/isClosed_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/isClosed_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/isPaused_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/isPaused_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/isPaused_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/sink_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamController/stream_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamIterator/StreamIterator_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamIterator/cancel_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamIterator/current_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamIterator/moveNext_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamIterator/moveNext_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamSink/addError_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamSink/addStream_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamSink/addStream_A01_t02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamSink/addStream_A01_t03: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamSink/addStream_A01_t04: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamSink/addStream_A01_t05: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamSink/add_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamSink/close_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamSink/done_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t04: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamTransformer/StreamTransformer_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamTransformer/StreamTransformer_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamTransformer/StreamTransformer_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamTransformer/StreamTransformer_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamTransformer/StreamTransformer_A02_t02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamTransformer/StreamTransformer_A03_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/StreamTransformer/StreamTransformer_A03_t02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/StreamTransformer/bind_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Timer/Timer.periodic_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Timer/Timer.periodic_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Timer/Timer_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Timer/Timer_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Timer/cancel_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Timer/isActive_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Timer/isActive_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Timer/run_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Timer/run_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/bindBinaryCallback_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/bindBinaryCallback_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/bindCallback_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/bindCallback_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/bindUnaryCallback_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/bindUnaryCallback_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/createPeriodicTimer_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/createTimer_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/current_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/current_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/fork_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/handleUncaughtError_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/handleUncaughtError_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/handleUncaughtError_A01_t03: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Zone/handleUncaughtError_A01_t04: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/inSameErrorZone_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/inSameErrorZone_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/inSameErrorZone_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/inSameErrorZone_A01_t04: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/inSameErrorZone_A01_t05: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/operator_subscript_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/async/Zone/parent_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/registerBinaryCallback_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/registerCallback_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/registerUnaryCallback_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/runBinaryGuarded_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/runBinary_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/runGuarded_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/runUnaryGuarded_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/runUnary_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/run_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/scheduleMicrotask_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/async/Zone/scheduleMicrotask_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
+LibTest/async/DeferredLibrary/DeferredLibrary_A01_t01: Crash # (lazy.method()): deferred access is not implemented
 LibTest/collection/ListBase/ListBase_class_A01_t02: Crash # Stack Overflow
 LibTest/collection/ListMixin/ListMixin_class_A01_t02: Crash # Stack Overflow
 LibTest/core/Invocation/isAccessor_A01_t01: Crash # Class 'PartialMethodElement' has no instance getter 'initializer'.
@@ -9909,108 +9613,10 @@
 LibTest/core/Invocation/namedArguments_A01_t01: RuntimeError # Please triage this failure.
 LibTest/core/Invocation/positionalArguments_A01_t01: RuntimeError # Please triage this failure.
 LibTest/core/List/List_class_A01_t02: Crash # Stack Overflow
-LibTest/core/Stopwatch/elapsedInMs_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/core/Stopwatch/elapsedInUs_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/core/Stopwatch/elapsedTicks_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/core/Stopwatch/elapsedTicks_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/core/Stopwatch/elapsedTicks_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/core/Stopwatch/elapsed_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/core/Stopwatch/elapsed_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/core/Stopwatch/elapsed_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/core/Stopwatch/start_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/core/Stopwatch/start_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/core/Stopwatch/start_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/core/Stopwatch/stop_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
 LibTest/core/Symbol/Symbol_A01_t03: RuntimeError # Please triage this failure.
 LibTest/core/Symbol/Symbol_A01_t05: RuntimeError # Please triage this failure.
 LibTest/core/double/INFINITY_A01_t04: Pass # Please triage this failure.
 LibTest/core/double/NEGATIVE_INFINITY_A01_t04: Pass # Please triage this failure.
-LibTest/isolate/Isolate/spawnUri_A02_t02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/Isolate/spawnUri_A02_t03: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/Isolate/spawnUri_A02_t04: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/Isolate/spawn_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/Isolate/spawn_A01_t02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/Isolate/spawn_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/Isolate/spawn_A01_t04: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/Isolate/spawn_A01_t05: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/Isolate/spawn_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/RawReceivePort/RawReceivePort_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/RawReceivePort/RawReceivePort_A01_t02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/RawReceivePort/close_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/RawReceivePort/handler_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/RawReceivePort/sendPort_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/ReceivePort.fromRawReceivePort_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/ReceivePort.fromRawReceivePort_A02_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/ReceivePort_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/any_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/any_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/asBroadcastStream_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/asBroadcastStream_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/asBroadcastStream_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/asBroadcastStream_A01_t04: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/asBroadcastStream_A03_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/asBroadcastStream_A03_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/asBroadcastStream_A03_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/asBroadcastStream_A04_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/asBroadcastStream_A04_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/asBroadcastStream_A04_t03: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/close_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/close_A02_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/contains_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/distinct_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/distinct_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/drain_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/drain_A02_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/elementAt_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/elementAt_A03_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/every_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/expand_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/firstWhere_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/firstWhere_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/firstWhere_A03_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/first_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/first_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/first_A02_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/fold_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/fold_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/forEach_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/isBroadcast_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/isBroadcast_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/isEmpty_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/join_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/join_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/lastWhere_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/lastWhere_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/lastWhere_A04_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/last_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/last_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/length_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/listen_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/map_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/pipe_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/reduce_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/reduce_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/reduce_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/singleWhere_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/singleWhere_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/single_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/single_A02_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/skipWhile_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/skip_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/takeWhile_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/take_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/take_A01_t02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/take_A01_t03: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/toList_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/toSet_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/transform_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/transform_A01_t02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/where_A01_t01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-LibTest/isolate/ReceivePort/where_A01_t02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/SendPort/hashCode_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/SendPort/operator_equality_A01_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/SendPort/send_A01_t04: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-LibTest/isolate/SendPort/send_A02_t01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
 LibTest/typed_data/Float32List/setAll_A01_t01: RuntimeError # this.get$length is not a function
 LibTest/typed_data/Float32List/setRange_A01_t01: RuntimeError # this.get$length is not a function
 LibTest/typed_data/Float32List/setRange_A02_t01: RuntimeError # this.get$length is not a function
diff --git a/tests/co19/co19-dartium.status b/tests/co19/co19-dartium.status
index f1db90b..26e1d15 100644
--- a/tests/co19/co19-dartium.status
+++ b/tests/co19/co19-dartium.status
@@ -281,9 +281,7 @@
 WebPlatformTest/custom-elements/concepts/type_A06_t01: RuntimeError # co19-roll r722: Please triage this failure.
 WebPlatformTest/html-templates/innerhtml-on-templates/innerhtml_t01: RuntimeError # co19-roll r722: Please triage this failure.
 WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/generating-of-implied-end-tags_t01: RuntimeError # co19-roll r722: Please triage this failure.
-WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/template-end-tag-without-start-one_t01: RuntimeError # co19-roll r722: Please triage this failure.
 WebPlatformTest/html-templates/parsing-html-templates/creating-an-element-for-the-token/template-owner-document_t01: RuntimeError # co19-roll r722: Please triage this failure.
-WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01: RuntimeError # co19-roll r722: Please triage this failure.
 WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-001_t01: RuntimeError # co19-roll r722: Please triage this failure.
 WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-004_t01: RuntimeError # co19-roll r722: Please triage this failure.
 WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-004_t02: RuntimeError # co19-roll r722: Please triage this failure.
@@ -376,6 +374,8 @@
 WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-002_t01: RuntimeError # Please triage this failure.
 WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-009_t01: RuntimeError # Please triage this failure.
 
+LayoutTests/fast/dom/css-innerHTML_t01: RuntimeError # Test is incorrect.
+
 # co19-roll r738.
 WebPlatformTest/DOMEvents/approved/ProcessingInstruction.DOMCharacterDataModified_t01: Skip # Times out. co19-roll r738: Please triage this failure.
 WebPlatformTest/html/semantics/embedded-content/media-elements/error-codes/error_t01: Skip # Times out and fails. # co19-roll r738: Please triage this failure.
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index f29cfd3..b5c5bc4c 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -5,7 +5,6 @@
 
 [ $compiler == none && ($runtime == vm || $runtime == dartium || $runtime == ContentShellOnAndroid) ]
 
-LibTest/core/Invocation/namedArguments_A01_t01: RuntimeError # Issue 13714
 LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: Fail # Issue 22200
 LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: Fail # Issue 22200
 LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: Fail # Issue 22200
diff --git a/tests/compiler/dart2js/analyze_helper.dart b/tests/compiler/dart2js/analyze_helper.dart
index b901595..7636eb2 100644
--- a/tests/compiler/dart2js/analyze_helper.dart
+++ b/tests/compiler/dart2js/analyze_helper.dart
@@ -95,8 +95,9 @@
     return false;
   }
 
-  void diagnosticHandler(Uri uri, int begin, int end, String message,
-                         api.Diagnostic kind) {
+  @override
+  void report(Uri uri, int begin, int end, String message,
+              api.Diagnostic kind) {
     if (kind == api.Diagnostic.WARNING) {
       if (checkWhiteList(uri, message)) {
         // Suppress whitelisted warnings.
@@ -125,7 +126,7 @@
       return;
     }
     lastWasWhitelisted = false;
-    super.diagnosticHandler(uri, begin, end, message, kind);
+    super.report(uri, begin, end, message, kind);
   }
 }
 
@@ -158,10 +159,11 @@
     '--show-package-warnings'];
   if (analyzeAll) options.add('--analyze-all');
   var compiler = new Compiler(
-      provider.readStringFromUri,
+      provider,
       null,
-      handler.diagnosticHandler,
-      libraryRoot, packageRoot,
+      handler,
+      libraryRoot,
+      packageRoot,
       options,
       {});
   String MESSAGE = """
diff --git a/tests/compiler/dart2js/async_await_js_transform_test.dart b/tests/compiler/dart2js/async_await_js_transform_test.dart
index 0cce49c..863f1c8 100644
--- a/tests/compiler/dart2js/async_await_js_transform_test.dart
+++ b/tests/compiler/dart2js/async_await_js_transform_test.dart
@@ -9,15 +9,9 @@
 
 import "backend_dart/dart_printer_test.dart" show PrintDiagnosticListener;
 
-void testTransform(String source, String expected) {
+void testTransform(String source, String expected, AsyncRewriterBase rewriter) {
   Fun fun = js(source);
-  Fun rewritten = new AsyncRewriter(
-      null, // The diagnostic helper should not be used in these tests.
-      null,
-      asyncHelper: new VariableUse("thenHelper"),
-      newCompleter: new VariableUse("Completer"),
-      safeVariableName: (String name) => "__$name",
-      bodyName: new StringBackedName("body")).rewrite(fun);
+  Fun rewritten = rewriter.rewrite(fun);
 
   JavaScriptPrintingOptions options = new JavaScriptPrintingOptions();
   SimpleJavaScriptPrintingContext context =
@@ -27,8 +21,30 @@
   Expect.stringEquals(expected, context.getText());
 }
 
+void testAsyncTransform(String source, String expected) {
+  testTransform(source, expected, new AsyncRewriter(
+      null, // The diagnostic helper should not be used in these tests.
+      null,
+      asyncHelper: new VariableUse("thenHelper"),
+      newCompleter: new VariableUse("Completer"),
+      safeVariableName: (String name) => "__$name",
+      bodyName: new StringBackedName("body")));
+}
+
+void testSyncStarTransform(String source, String expected) {
+  testTransform(source, expected, new SyncStarRewriter(
+      null,
+      null,
+      endOfIteration: new VariableUse("endOfIteration"),
+      newIterable: new VariableUse("newIterable"),
+      yieldStarExpression: new VariableUse("yieldStar"),
+      uncaughtErrorExpression: new VariableUse("uncaughtError"),
+      safeVariableName: (String name) => "__$name",
+      bodyName: new StringBackedName("body")));
+}
+
 main() {
-  testTransform("""
+  testAsyncTransform("""
 function(a) async {
   print(this.x); // Ensure `this` is translated in the helper function.
   await foo();
@@ -59,7 +75,7 @@
   return thenHelper(null, body, __completer, null);
 }""");
 
-  testTransform("""
+  testAsyncTransform("""
   function(b) async {
     try {
       __outer: while (true) { // Overlapping label name.
@@ -183,7 +199,7 @@
   return thenHelper(null, body, __completer, null);
 }""");
 
-    testTransform("""
+  testAsyncTransform("""
 function(c) async {
   var a, b, c, d, e, f;
   a = b++; // post- and preincrements.
@@ -238,7 +254,7 @@
   return thenHelper(null, body, __completer, null);
 }""");
 
-  testTransform("""
+  testAsyncTransform("""
   function(d2) async {
     var a, b, c, d, e, f, g, h; // empty initializer
     a = foo1() || await foo2(); // short circuiting operators
@@ -371,7 +387,7 @@
   return thenHelper(null, body, __completer, null);
 }""");
 
-    testTransform("""
+  testAsyncTransform("""
 function(x, y) async {
   while (true) {
     switch(y) { // Switch with no awaits in case key expressions
@@ -465,7 +481,7 @@
   return thenHelper(null, body, __completer, null);
 }""");
 
-  testTransform("""
+  testAsyncTransform("""
   function(f) async {
     do {
       var a = await foo();
@@ -526,7 +542,7 @@
   return thenHelper(null, body, __completer, null);
 }""");
 
-    testTransform("""
+  testAsyncTransform("""
 function(g) async {
   for (var i = 0; i < await foo1(); i += await foo2()) {
     if (foo(i))
@@ -616,7 +632,7 @@
   return thenHelper(null, body, __completer, null);
 }""");
 
-  testTransform("""
+  testAsyncTransform("""
   function(a, h) async {
     var x = {"a": foo1(), "b": await foo2(), "c": foo3()};
     x["a"] = 2; // Different assignments
@@ -691,7 +707,7 @@
   return thenHelper(null, body, __completer, null);
 }""");
 
-    testTransform("""
+  testAsyncTransform("""
 function(c, i) async {
   try {
     var x = c ? await foo() : foo(); // conditional
@@ -808,7 +824,7 @@
   return thenHelper(null, body, __completer, null);
 }""");
 
-  testTransform("""
+  testAsyncTransform("""
   function(x, y, j) async {
     print(await(foo(x))); // calls
     (await print)(foo(x));
@@ -874,7 +890,7 @@
   return thenHelper(null, body, __completer, null);
 }""");
 
-    testTransform("""
+  testAsyncTransform("""
 function(x, y, k) async {
   while (await(foo())) {
     lab: { // labelled statement
@@ -1013,7 +1029,8 @@
   }
   return thenHelper(null, body, __completer, null);
 }""");
-  testTransform("""
+
+  testAsyncTransform("""
   function(l) async {
     switch(await l) {
       case 1:
@@ -1062,7 +1079,7 @@
   return thenHelper(null, body, __completer, null);
 }""");
 
-  testTransform("""
+  testAsyncTransform("""
   function(m) async {
     var exception = 1;
     try {
@@ -1140,4 +1157,38 @@
   }
   return thenHelper(null, body, __completer, null);
 }""");
+
+  testSyncStarTransform("""
+function(a) sync* {
+  // Ensure that return of a value is treated as first evaluating the value, and
+  // then returning.
+  return foo();
+}""", """
+function(__a) {
+  return new newIterable(function() {
+    var a = __a;
+    var __goto = 0, __handler = 2, __currentError;
+    return function body(__errorCode, __result) {
+      if (__errorCode === 1) {
+        __currentError = __result;
+        __goto = __handler;
+      }
+      while (true)
+        switch (__goto) {
+          case 0:
+            // Function start
+            foo();
+            // goto return
+            __goto = 1;
+            break;
+          case 1:
+            // return
+            return endOfIteration();
+          case 2:
+            // rethrow
+            return uncaughtError(__currentError);
+        }
+    };
+  });
+}""");
 }
diff --git a/tests/compiler/dart2js/backend_dart/sexpr_unstringifier.dart b/tests/compiler/dart2js/backend_dart/sexpr_unstringifier.dart
index 8b7b7cd..df70baf 100644
--- a/tests/compiler/dart2js/backend_dart/sexpr_unstringifier.dart
+++ b/tests/compiler/dart2js/backend_dart/sexpr_unstringifier.dart
@@ -134,25 +134,27 @@
   static const String LET_PRIM = "LetPrim";
   static const String LET_CONT = "LetCont";
   static const String LET_MUTABLE = "LetMutable";
-  static const String SET_MUTABLE_VARIABLE = "SetMutableVariable";
   static const String TYPE_CAST = "TypeCast";
-  static const String SET_STATIC = "SetStatic";
   static const String GET_LAZY_STATIC = "GetLazyStatic";
   static const String UNREACHABLE = "Unreachable";
 
   // Primitives
   static const String CONSTANT = "Constant";
   static const String CREATE_FUNCTION = "CreateFunction";
-  static const String GET_MUTABLE_VARIABLE = "GetMutableVariable";
+  static const String GET_MUTABLE = "GetMutable";
+  static const String SET_MUTABLE = "SetMutable";
   static const String LITERAL_LIST = "LiteralList";
   static const String LITERAL_MAP = "LiteralMap";
   static const String REIFY_TYPE_VAR = "ReifyTypeVar";
   static const String GET_STATIC = "GetStatic";
+  static const String SET_STATIC = "SetStatic";
   static const String TYPE_TEST = "TypeTest";
   static const String APPLY_BUILTIN_OPERATOR = "ApplyBuiltinOperator";
   static const String GET_LENGTH = "GetLength";
   static const String GET_INDEX = "GetIndex";
   static const String SET_INDEX = "SetIndex";
+  static const String GET_FIELD = "GetField";
+  static const String SET_FIELD = "SetField";
 
   // Other
   static const String FUNCTION_DEFINITION = "FunctionDefinition";
@@ -251,12 +253,8 @@
         return parseLetCont();
       case LET_MUTABLE:
         return parseLetMutable();
-      case SET_MUTABLE_VARIABLE:
-        return parseSetMutableVariable();
       case TYPE_CAST:
         return parseTypeCast();
-      case SET_STATIC:
-        return parseSetStatic();
       case GET_LAZY_STATIC:
         return parseGetLazyStatic();
       case UNREACHABLE:
@@ -546,19 +544,16 @@
     return new LetMutable(local, value)..plug(body);
   }
 
-  /// (SetMutableVariable name value body)
-  SetMutableVariable parseSetMutableVariable() {
-    tokens.consumeStart(SET_MUTABLE_VARIABLE);
+  /// (SetMutable name value)
+  SetMutable parseSetMutable() {
+    tokens.consumeStart(SET_MUTABLE);
 
     MutableVariable local = name2variable[tokens.read()];
     Primitive value = name2variable[tokens.read()];
     assert(value != null);
 
-    Expression body = parseExpression();
-
     tokens.consumeEnd();
-    return new SetMutableVariable(local, value)
-                  ..plug(body);
+    return new SetMutable(local, value);
   }
 
   /// (TypeCast value type args cont)
@@ -640,17 +635,16 @@
     return new SetIndex(object, index, value);
   }
 
-  /// (SetStatic field value body)
+  /// (SetStatic field value)
   SetStatic parseSetStatic() {
     tokens.consumeStart(SET_STATIC);
 
     Element fieldElement = new DummyElement(tokens.read());
     Primitive value = name2variable[tokens.read()];
     assert(value != null);
-    Expression body = parseExpression();
 
     tokens.consumeEnd();
-    return new SetStatic(fieldElement, value, null)..plug(body);
+    return new SetStatic(fieldElement, value, null);
   }
 
   /// (GetLazyStatic field cont)
@@ -700,8 +694,10 @@
         return parseConstant();
       case CREATE_FUNCTION:
         return parseCreateFunction();
-      case GET_MUTABLE_VARIABLE:
-        return parseGetMutableVariable();
+      case GET_MUTABLE:
+        return parseGetMutable();
+      case SET_MUTABLE:
+        return parseSetMutable();
       case LITERAL_LIST:
         return parseLiteralList();
       case LITERAL_MAP:
@@ -710,6 +706,8 @@
         return parseReifyTypeVar();
       case GET_STATIC:
         return parseGetStatic();
+      case SET_STATIC:
+        return parseSetStatic();
       case TYPE_TEST:
         return parseTypeTest();
       case APPLY_BUILTIN_OPERATOR:
@@ -720,6 +718,10 @@
         return parseGetIndex();
       case SET_INDEX:
         return parseSetIndex();
+      case GET_FIELD:
+        return parseGetField();
+      case SET_FIELD:
+        return parseSetField();
       default:
         assert(false);
     }
@@ -803,13 +805,13 @@
     return variable;
   }
 
-  /// (GetMutableVariable name)
-  GetMutableVariable parseGetMutableVariable() {
-    tokens.consumeStart(GET_MUTABLE_VARIABLE);
+  /// (GetMutable name)
+  GetMutable parseGetMutable() {
+    tokens.consumeStart(GET_MUTABLE);
     MutableVariable local = name2variable[tokens.read()];
     tokens.consumeEnd();
 
-    return new GetMutableVariable(local);
+    return new GetMutable(local);
   }
 
   /// (LiteralList (values))
@@ -855,4 +857,27 @@
     tokens.consumeEnd();
     return new GetStatic(field, null);
   }
+
+  /// (GetField object field)
+  GetField parseGetField() {
+    tokens.consumeStart(GET_FIELD);
+
+    Primitive object = name2variable[tokens.read()];
+    Element field = new DummyElement(tokens.read());
+
+    tokens.consumeEnd();
+    return new GetField(object, field);
+  }
+
+  /// (SetField object field value)
+  SetField parseSetField() {
+    tokens.consumeStart(SET_FIELD);
+
+    Primitive object = name2variable[tokens.read()];
+    Element field = new DummyElement(tokens.read());
+    Primitive value = name2variable[tokens.read()];
+
+    tokens.consumeEnd();
+    return new SetField(object, field, value);
+  }
 }
diff --git a/tests/compiler/dart2js/bad_loop_test.dart b/tests/compiler/dart2js/bad_loop_test.dart
index fd9291b7..82d8607 100644
--- a/tests/compiler/dart2js/bad_loop_test.dart
+++ b/tests/compiler/dart2js/bad_loop_test.dart
@@ -8,6 +8,7 @@
 
 import 'package:compiler/compiler.dart'
        show Diagnostic;
+import 'package:compiler/src/old_to_new_api.dart';
 
 main() {
   Uri script = currentDirectory.resolveUri(Platform.script);
@@ -31,13 +32,14 @@
     }
   }
 
-  Compiler compiler = new Compiler(provider.readStringFromUri,
-                                   (name, extension) => null,
-                                   diagnosticHandler,
-                                   libraryRoot,
-                                   packageRoot,
-                                   ['--analyze-only'],
-                                   {});
+  Compiler compiler = new Compiler(
+      new LegacyCompilerInput(provider.readStringFromUri),
+      new LegacyCompilerOutput(),
+      new LegacyCompilerDiagnostics(diagnosticHandler),
+      libraryRoot,
+      packageRoot,
+      ['--analyze-only'],
+      {});
   asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
     Expect.isTrue(compiler.compilationFailed);
     Expect.equals(5, errorCount);
diff --git a/tests/compiler/dart2js/bad_output_io_test.dart b/tests/compiler/dart2js/bad_output_io_test.dart
index d2429f0..ad2b0b9 100644
--- a/tests/compiler/dart2js/bad_output_io_test.dart
+++ b/tests/compiler/dart2js/bad_output_io_test.dart
@@ -37,12 +37,14 @@
    messages.add([message, kind]);
   }
 
-  void diagnosticHandler(Uri uri, int begin, int end, String message, kind) {
+  @override
+  void report(Uri uri, int begin, int end, String message, kind) {
     messages.add([message, kind]);
   }
 
+  @override
   void call(Uri uri, int begin, int end, String message, kind) {
-    diagnosticHandler(uri, begin, end, message, kind);
+    report(uri, begin, end, message, kind);
   }
 
   String prefixMessage(String message, Diagnostic kind) {
diff --git a/tests/compiler/dart2js/codegen_helper.dart b/tests/compiler/dart2js/codegen_helper.dart
index 52f4312..1512442 100644
--- a/tests/compiler/dart2js/codegen_helper.dart
+++ b/tests/compiler/dart2js/codegen_helper.dart
@@ -4,7 +4,7 @@
 
 import 'dart:async';
 import 'package:expect/expect.dart';
-
+import 'package:compiler/src/null_compiler_output.dart';
 import 'memory_source_file_helper.dart';
 
 Future<Map<String, String>> generate(String code,
@@ -16,9 +16,9 @@
   var provider = new MemorySourceFileProvider({ 'main.dart': code });
   var handler = new FormattingDiagnosticHandler(provider);
 
-  Compiler compiler = new Compiler(provider.readStringFromUri,
-                                   null,
-                                   handler.diagnosticHandler,
+  Compiler compiler = new Compiler(provider,
+                                   const NullCompilerOutput(),
+                                   handler,
                                    libraryRoot,
                                    packageRoot,
                                    options,
diff --git a/tests/compiler/dart2js/deferred_custom_element_test.dart b/tests/compiler/dart2js/deferred_custom_element_test.dart
index 9cbf87f..1fa5d12 100644
--- a/tests/compiler/dart2js/deferred_custom_element_test.dart
+++ b/tests/compiler/dart2js/deferred_custom_element_test.dart
@@ -6,32 +6,13 @@
 // to determine which elements can be deferred and which libraries
 // much be included in the initial download (loaded eagerly).
 
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/dart2jslib.dart';
 import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'memory_source_file_helper.dart';
-import "dart:async";
-
-class FakeOutputStream<T> extends EventSink<T> {
-  void add(T event) {}
-  void addError(T event, [StackTrace stackTrace]) {}
-  void close() {}
-}
+import 'memory_compiler.dart';
 
 void main() {
-  Uri script = currentDirectory.resolveUri(Platform.script);
-  Uri libraryRoot = script.resolve('../../../sdk/');
-  Uri packageRoot = script.resolve('./packages/');
-
-  var provider = new MemorySourceFileProvider(MEMORY_SOURCE_FILES);
-  var handler = new FormattingDiagnosticHandler(provider);
-
-  Compiler compiler = new Compiler(provider.readStringFromUri,
-                                   (name, extension) => new FakeOutputStream(),
-                                   handler.diagnosticHandler,
-                                   libraryRoot,
-                                   packageRoot,
-                                   [],
-                                   {});
+  Compiler compiler = compilerFor(MEMORY_SOURCE_FILES);
   asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
     var outputUnitForElement = compiler.deferredLoadTask.outputUnitForElement;
     var mainOutputUnit = compiler.deferredLoadTask.mainOutputUnit;
diff --git a/tests/compiler/dart2js/deferred_dont_inline_deferred_constants_test.dart b/tests/compiler/dart2js/deferred_dont_inline_deferred_constants_test.dart
index e0f93e5..0cbcc0b 100644
--- a/tests/compiler/dart2js/deferred_dont_inline_deferred_constants_test.dart
+++ b/tests/compiler/dart2js/deferred_dont_inline_deferred_constants_test.dart
@@ -5,57 +5,23 @@
 // Test that the additional runtime type support is output to the right
 // Files when using deferred loading.
 
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/dart2jslib.dart';
 import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'memory_source_file_helper.dart';
-import "dart:async";
-
-import 'package:compiler/src/dart2jslib.dart'
-       as dart2js;
-
-class MemoryOutputSink extends EventSink<String> {
-  StringBuffer mem = new StringBuffer();
-  void add(String event) {
-    mem.write(event);
-  }
-  void addError(String event, [StackTrace stackTrace]) {
-    Expect.isTrue(false);
-  }
-  void close() {}
-}
+import 'memory_compiler.dart';
+import 'output_collector.dart';
 
 void main() {
-  Uri script = currentDirectory.resolveUri(Platform.script);
-  Uri libraryRoot = script.resolve('../../../sdk/');
-  Uri packageRoot = script.resolve('./packages/');
-
-  var provider = new MemorySourceFileProvider(MEMORY_SOURCE_FILES);
-  var handler = new FormattingDiagnosticHandler(provider);
-
-  Map<String, MemoryOutputSink> outputs = new Map<String, MemoryOutputSink>();
-
-  MemoryOutputSink outputSaver(name, extension) {
-    if (name == '') {
-      name = 'main';
-    }
-    return outputs.putIfAbsent("$name.$extension", () {
-      return new MemoryOutputSink();
-    });
-  }
-
-  Compiler compiler = new Compiler(provider.readStringFromUri,
-                                   outputSaver,
-                                   handler.diagnosticHandler,
-                                   libraryRoot,
-                                   packageRoot,
-                                   [],
-                                   {});
+  OutputCollector collector = new OutputCollector();
+  Compiler compiler = compilerFor(
+      MEMORY_SOURCE_FILES,
+      outputProvider: collector);
   asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
     lookupLibrary(name) {
       return compiler.libraryLoader.lookupLibrary(Uri.parse(name));
     }
 
-    var main = compiler.mainApp.find(dart2js.Compiler.MAIN);
+    var main = compiler.mainApp.find(Compiler.MAIN);
     Expect.isNotNull(main, "Could not find 'main'");
     compiler.deferredLoadTask.onResolutionComplete(main);
 
@@ -72,11 +38,11 @@
     var fooMain = compiler.mainApp.find("foo");
     var ou_lib1_lib2 = outputUnitForElement(fooMain);
 
-    String mainOutput = outputs["main.js"].mem.toString();
-    String lib1Output = outputs["out_${ou_lib1.name}.part.js"].mem.toString();
-    String lib2Output = outputs["out_${ou_lib2.name}.part.js"].mem.toString();
+    String mainOutput = collector.getOutput("","js");
+    String lib1Output = collector.getOutput("out_${ou_lib1.name}", "part.js");
+    String lib2Output = collector.getOutput("out_${ou_lib2.name}", "part.js");
     String lib12Output =
-        outputs["out_${ou_lib1_lib2.name}.part.js"].mem.toString();
+        collector.getOutput("out_${ou_lib1_lib2.name}", "part.js");
     // Test that the deferred constants are not inlined into the main file.
     RegExp re1 = new RegExp(r"= .string1");
     RegExp re2 = new RegExp(r"= .string2");
diff --git a/tests/compiler/dart2js/deferred_dont_inline_deferred_globals_test.dart b/tests/compiler/dart2js/deferred_dont_inline_deferred_globals_test.dart
index 2868661..4f516e4 100644
--- a/tests/compiler/dart2js/deferred_dont_inline_deferred_globals_test.dart
+++ b/tests/compiler/dart2js/deferred_dont_inline_deferred_globals_test.dart
@@ -5,57 +5,23 @@
 // Test that the additional runtime type support is output to the right
 // Files when using deferred loading.
 
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/dart2jslib.dart';
 import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'memory_source_file_helper.dart';
-import "dart:async";
-
-import 'package:compiler/src/dart2jslib.dart'
-       as dart2js;
-
-class MemoryOutputSink extends EventSink<String> {
-  StringBuffer mem = new StringBuffer();
-  void add(String event) {
-    mem.write(event);
-  }
-  void addError(String event, [StackTrace stackTrace]) {
-    Expect.isTrue(false);
-  }
-  void close() {}
-}
+import 'memory_compiler.dart';
+import 'output_collector.dart';
 
 void main() {
-  Uri script = currentDirectory.resolveUri(Platform.script);
-  Uri libraryRoot = script.resolve('../../../sdk/');
-  Uri packageRoot = script.resolve('./packages/');
-
-  var provider = new MemorySourceFileProvider(MEMORY_SOURCE_FILES);
-  var handler = new FormattingDiagnosticHandler(provider);
-
-  Map<String, MemoryOutputSink> outputs = new Map<String, MemoryOutputSink>();
-
-  MemoryOutputSink outputSaver(name, extension) {
-    if (name == '') {
-      name = 'main';
-    }
-    return outputs.putIfAbsent("$name.$extension", () {
-      return new MemoryOutputSink();
-    });
-  }
-
-  Compiler compiler = new Compiler(provider.readStringFromUri,
-                                   outputSaver,
-                                   handler.diagnosticHandler,
-                                   libraryRoot,
-                                   packageRoot,
-                                   [],
-                                   {});
+  OutputCollector collector = new OutputCollector();
+  Compiler compiler = compilerFor(
+      MEMORY_SOURCE_FILES,
+      outputProvider: collector);
   asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
     lookupLibrary(name) {
       return compiler.libraryLoader.lookupLibrary(Uri.parse(name));
     }
 
-    var main = compiler.mainApp.find(dart2js.Compiler.MAIN);
+    var main = compiler.mainApp.find(Compiler.MAIN);
     Expect.isNotNull(main, "Could not find 'main'");
     compiler.deferredLoadTask.onResolutionComplete(main);
 
@@ -65,8 +31,8 @@
     var foo1 = lib1.find("finalVar");
     var ou_lib1 = outputUnitForElement(foo1);
 
-    String mainOutput = outputs["main.js"].mem.toString();
-    String lib1Output = outputs["out_${ou_lib1.name}.part.js"].mem.toString();
+    String mainOutput = collector.getOutput("", "js");
+    String lib1Output = collector.getOutput("out_${ou_lib1.name}", "part.js");
     // Test that the deferred globals are not inlined into the main file.
     RegExp re1 = new RegExp(r"= .string1");
     RegExp re2 = new RegExp(r"= .string2");
diff --git a/tests/compiler/dart2js/deferred_emit_type_checks_test.dart b/tests/compiler/dart2js/deferred_emit_type_checks_test.dart
index 2976f7e..3fe7752 100644
--- a/tests/compiler/dart2js/deferred_emit_type_checks_test.dart
+++ b/tests/compiler/dart2js/deferred_emit_type_checks_test.dart
@@ -5,32 +5,24 @@
 // Test that the additional runtime type support is output to the right
 // Files when using deferred loading.
 
-import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
-import 'memory_source_file_helper.dart';
+import 'package:compiler/src/dart2jslib.dart';
+import 'package:compiler/src/js_backend/js_backend.dart'
+       show JavaScriptBackend;
+import 'package:expect/expect.dart';
+import 'memory_compiler.dart';
 import 'output_collector.dart';
 
 void main() {
-  Uri script = currentDirectory.resolveUri(Platform.script);
-  Uri libraryRoot = script.resolve('../../../sdk/');
-  Uri packageRoot = script.resolve('./packages/');
-
-  var provider = new MemorySourceFileProvider(MEMORY_SOURCE_FILES);
-  var handler = new FormattingDiagnosticHandler(provider);
-
   OutputCollector collector = new OutputCollector();
-
-  Compiler compiler = new Compiler(provider.readStringFromUri,
-      collector,
-                                   handler.diagnosticHandler,
-                                   libraryRoot,
-                                   packageRoot,
-                                   [],
-                                   {});
+  Compiler compiler = compilerFor(
+      MEMORY_SOURCE_FILES,
+      outputProvider: collector);
   asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
     String mainOutput = collector.getOutput('', 'js');
     String deferredOutput =  collector.getOutput('out_1', 'part.js');
-    String isPrefix = compiler.backend.namer.operatorIsPrefix;
+    JavaScriptBackend backend = compiler.backend;
+    String isPrefix = backend.namer.operatorIsPrefix;
     Expect.isTrue(deferredOutput.contains('${isPrefix}A: 1'),
         "Deferred output doesn't contain '${isPrefix}A: 1':\n"
         "$deferredOutput");
diff --git a/tests/compiler/dart2js/deferred_follow_constant_dependencies_test.dart b/tests/compiler/dart2js/deferred_follow_constant_dependencies_test.dart
index d35780e..e675f3f 100644
--- a/tests/compiler/dart2js/deferred_follow_constant_dependencies_test.dart
+++ b/tests/compiler/dart2js/deferred_follow_constant_dependencies_test.dart
@@ -4,34 +4,14 @@
 
 // Test that constants depended on by other constants are correctly deferred.
 
-import 'dart:async';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/constants/values.dart';
+import 'package:compiler/src/dart2jslib.dart';
 import 'package:expect/expect.dart';
-import 'memory_source_file_helper.dart';
-
-
-class FakeOutputStream<T> extends EventSink<T> {
-  void add(T event) {}
-  void addError(T event, [StackTrace stackTrace]) {}
-  void close() {}
-}
+import 'memory_compiler.dart';
 
 void main() {
-  Uri script = currentDirectory.resolveUri(Platform.script);
-  Uri libraryRoot = script.resolve('../../../sdk/');
-  Uri packageRoot = script.resolve('./packages/');
-
-  var provider = new MemorySourceFileProvider(MEMORY_SOURCE_FILES);
-  var handler = new FormattingDiagnosticHandler(provider);
-
-  Compiler compiler = new Compiler(provider.readStringFromUri,
-                                   (name, extension) => new FakeOutputStream(),
-                                   handler.diagnosticHandler,
-                                   libraryRoot,
-                                   packageRoot,
-                                   [],
-                                   {});
+  Compiler compiler = compilerFor(MEMORY_SOURCE_FILES);
   asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
     var outputUnitForElement = compiler.deferredLoadTask.outputUnitForElement;
     var outputUnitForConstant = compiler.deferredLoadTask.outputUnitForConstant;
diff --git a/tests/compiler/dart2js/deferred_inline_restrictions_test.dart b/tests/compiler/dart2js/deferred_inline_restrictions_test.dart
index 2bedda3..7ae382b 100644
--- a/tests/compiler/dart2js/deferred_inline_restrictions_test.dart
+++ b/tests/compiler/dart2js/deferred_inline_restrictions_test.dart
@@ -5,51 +5,17 @@
 // Test that we do not accidentially leak code from deferred libraries but do
 // allow inlining of empty functions and from main.
 
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/dart2jslib.dart';
 import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'memory_source_file_helper.dart';
-import "dart:async";
-
-import 'package:compiler/src/dart2jslib.dart'
-       as dart2js;
-
-class MemoryOutputSink extends EventSink<String> {
-  StringBuffer mem = new StringBuffer();
-  void add(String event) {
-    mem.write(event);
-  }
-  void addError(String event, [StackTrace stackTrace]) {
-    Expect.isTrue(false);
-  }
-  void close() {}
-}
+import 'memory_compiler.dart';
+import 'output_collector.dart';
 
 void main() {
-  Uri script = currentDirectory.resolveUri(Platform.script);
-  Uri libraryRoot = script.resolve('../../../sdk/');
-  Uri packageRoot = script.resolve('./packages/');
-
-  var provider = new MemorySourceFileProvider(MEMORY_SOURCE_FILES);
-  var handler = new FormattingDiagnosticHandler(provider);
-
-  Map<String, MemoryOutputSink> outputs = new Map<String, MemoryOutputSink>();
-
-  MemoryOutputSink outputSaver(name, extension) {
-    if (name == '') {
-      name = 'main';
-    }
-    return outputs.putIfAbsent("$name.$extension", () {
-      return new MemoryOutputSink();
-    });
-  }
-
-  Compiler compiler = new Compiler(provider.readStringFromUri,
-                                   outputSaver,
-                                   handler.diagnosticHandler,
-                                   libraryRoot,
-                                   packageRoot,
-                                   [],
-                                   {});
+  OutputCollector collector = new OutputCollector();
+  Compiler compiler = compilerFor(
+      MEMORY_SOURCE_FILES,
+      outputProvider: collector);
   asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
     lookupLibrary(name) {
       return compiler.libraryLoader.lookupLibrary(Uri.parse(name));
@@ -68,9 +34,9 @@
     // Test that we actually got differnt output units.
     Expect.notEquals(ou_lib1.name, ou_lib3.name);
 
-    String mainOutput = outputs["main.js"].mem.toString();
-    String lib1Output = outputs["out_${ou_lib1.name}.part.js"].mem.toString();
-    String lib3Output = outputs["out_${ou_lib3.name}.part.js"].mem.toString();
+    String mainOutput = collector.getOutput("", "js");
+    String lib1Output = collector.getOutput("out_${ou_lib1.name}", "part.js");
+    String lib3Output = collector.getOutput("out_${ou_lib3.name}", "part.js");
 
     RegExp re1 = new RegExp(r"inlined as empty");
     RegExp re2 = new RegExp(r"inlined from main");
diff --git a/tests/compiler/dart2js/deferred_load_graph_segmentation2_test.dart b/tests/compiler/dart2js/deferred_load_graph_segmentation2_test.dart
index 2297f0e..3467d2c 100644
--- a/tests/compiler/dart2js/deferred_load_graph_segmentation2_test.dart
+++ b/tests/compiler/dart2js/deferred_load_graph_segmentation2_test.dart
@@ -6,32 +6,13 @@
 // to determine which elements can be deferred and which libraries
 // much be included in the initial download (loaded eagerly).
 
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/dart2jslib.dart';
 import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'memory_source_file_helper.dart';
-import "dart:async";
-
-class FakeOutputStream<T> extends EventSink<T> {
-  void add(T event) {}
-  void addError(T event, [StackTrace stackTrace]) {}
-  void close() {}
-}
+import 'memory_compiler.dart';
 
 void main() {
-  Uri script = currentDirectory.resolveUri(Platform.script);
-  Uri libraryRoot = script.resolve('../../../sdk/');
-  Uri packageRoot = script.resolve('./packages/');
-
-  var provider = new MemorySourceFileProvider(MEMORY_SOURCE_FILES);
-  var handler = new FormattingDiagnosticHandler(provider);
-
-  Compiler compiler = new Compiler(provider.readStringFromUri,
-                                   (name, extension) => new FakeOutputStream(),
-                                   handler.diagnosticHandler,
-                                   libraryRoot,
-                                   packageRoot,
-                                   [],
-                                   {});
+  Compiler compiler = compilerFor(MEMORY_SOURCE_FILES);
   asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
     var outputUnitForElement = compiler.deferredLoadTask.outputUnitForElement;
     var mainOutputUnit = compiler.deferredLoadTask.mainOutputUnit;
diff --git a/tests/compiler/dart2js/deferred_load_graph_segmentation_test.dart b/tests/compiler/dart2js/deferred_load_graph_segmentation_test.dart
index a3624f0..59b39e3 100644
--- a/tests/compiler/dart2js/deferred_load_graph_segmentation_test.dart
+++ b/tests/compiler/dart2js/deferred_load_graph_segmentation_test.dart
@@ -6,43 +6,20 @@
 // to determine which elements can be deferred and which libraries
 // much be included in the initial download (loaded eagerly).
 
-import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'memory_source_file_helper.dart';
-import "dart:async";
-
-import 'package:compiler/src/dart2jslib.dart'
-       as dart2js;
-
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/dart2jslib.dart';
 import 'package:compiler/src/deferred_load.dart';
-
-class FakeOutputStream<T> extends EventSink<T> {
-  void add(T event) {}
-  void addError(T event, [StackTrace stackTrace]) {}
-  void close() {}
-}
+import 'package:expect/expect.dart';
+import 'memory_compiler.dart';
 
 void main() {
-  Uri script = currentDirectory.resolveUri(Platform.script);
-  Uri libraryRoot = script.resolve('../../../sdk/');
-  Uri packageRoot = script.resolve('./packages/');
-
-  var provider = new MemorySourceFileProvider(MEMORY_SOURCE_FILES);
-  var handler = new FormattingDiagnosticHandler(provider);
-
-  Compiler compiler = new Compiler(provider.readStringFromUri,
-                                   (name, extension) => new FakeOutputStream(),
-                                   handler.diagnosticHandler,
-                                   libraryRoot,
-                                   packageRoot,
-                                   [],
-                                   {});
+  Compiler compiler = compilerFor(MEMORY_SOURCE_FILES);
   asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
     lookupLibrary(name) {
       return compiler.libraryLoader.lookupLibrary(Uri.parse(name));
     }
 
-    var main = compiler.mainApp.find(dart2js.Compiler.MAIN);
+    var main = compiler.mainApp.find(Compiler.MAIN);
     Expect.isNotNull(main, "Could not find 'main'");
     compiler.deferredLoadTask.onResolutionComplete(main);
 
diff --git a/tests/compiler/dart2js/deferred_not_in_main_test.dart b/tests/compiler/dart2js/deferred_not_in_main_test.dart
index a4b8435..0b8ef3a 100644
--- a/tests/compiler/dart2js/deferred_not_in_main_test.dart
+++ b/tests/compiler/dart2js/deferred_not_in_main_test.dart
@@ -6,41 +6,19 @@
 // to determine which elements can be deferred and which libraries
 // much be included in the initial download (loaded eagerly).
 
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/dart2jslib.dart';
 import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'memory_source_file_helper.dart';
-import "dart:async";
-
-import 'package:compiler/src/dart2jslib.dart'
-       as dart2js;
-
-class FakeOutputStream<T> extends EventSink<T> {
-  void add(T event) {}
-  void addError(T event, [StackTrace stackTrace]) {}
-  void close() {}
-}
+import 'memory_compiler.dart';
 
 void main() {
-  Uri script = currentDirectory.resolveUri(Platform.script);
-  Uri libraryRoot = script.resolve('../../../sdk/');
-  Uri packageRoot = script.resolve('./packages/');
-
-  var provider = new MemorySourceFileProvider(MEMORY_SOURCE_FILES);
-  var handler = new FormattingDiagnosticHandler(provider);
-
-  Compiler compiler = new Compiler(provider.readStringFromUri,
-                                   (name, extension) => new FakeOutputStream(),
-                                   handler.diagnosticHandler,
-                                   libraryRoot,
-                                   packageRoot,
-                                   [],
-                                   {});
+  Compiler compiler = compilerFor(MEMORY_SOURCE_FILES);
   asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
     lookupLibrary(name) {
       return compiler.libraryLoader.lookupLibrary(Uri.parse(name));
     }
 
-    var main = compiler.mainApp.find(dart2js.Compiler.MAIN);
+    var main = compiler.mainApp.find(Compiler.MAIN);
     var outputUnitForElement = compiler.deferredLoadTask.outputUnitForElement;
 
     var mainOutputUnit = compiler.deferredLoadTask.mainOutputUnit;
diff --git a/tests/compiler/dart2js/diagnose_ambiguous_test.dart b/tests/compiler/dart2js/diagnose_ambiguous_test.dart
index d70c8e4..9d96426 100644
--- a/tests/compiler/dart2js/diagnose_ambiguous_test.dart
+++ b/tests/compiler/dart2js/diagnose_ambiguous_test.dart
@@ -2,36 +2,25 @@
 // 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:async_helper/async_helper.dart';
+import 'package:compiler/compiler_new.dart' show Diagnostic;
+import 'package:compiler/src/dart2jslib.dart';
 import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'memory_source_file_helper.dart';
+import 'memory_compiler.dart';
 
-import 'package:compiler/compiler.dart'
-       show Diagnostic;
-
-main() {
-  Uri script = currentDirectory.resolveUri(Platform.script);
-  Uri libraryRoot = script.resolve('../../../sdk/');
-  Uri packageRoot = script.resolve('./packages/');
-
-  var provider = new MemorySourceFileProvider(MEMORY_SOURCE_FILES);
-  var diagnostics = [];
-  void diagnosticHandler(Uri uri, int begin, int end,
-                         String message, Diagnostic kind) {
-    if (kind == Diagnostic.VERBOSE_INFO) {
-      return;
-    }
-    diagnostics.add('$uri:$begin:$end:$message:$kind');
-  }
-
-  Compiler compiler = new Compiler(provider.readStringFromUri,
-                                   (name, extension) => null,
-                                   diagnosticHandler,
-                                   libraryRoot,
-                                   packageRoot,
-                                   ['--analyze-all'],
-                                   {});
+void main() {
+  DiagnosticCollector collector = new DiagnosticCollector();
+  Compiler compiler = compilerFor(
+      MEMORY_SOURCE_FILES,
+      diagnosticHandler: collector,
+      options: ['--analyze-all']);
   asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
+    List<String> diagnostics = <String>[];
+    collector.messages.forEach((DiagnosticMessage message) {
+      if (message.kind == Diagnostic.VERBOSE_INFO) return;
+      diagnostics.add(message.toString());
+    });
     diagnostics.sort();
     var expected = [
         "memory:exporter.dart:43:47:'hest' is defined here.:info",
diff --git a/tests/compiler/dart2js/exit_code_test.dart b/tests/compiler/dart2js/exit_code_test.dart
index f69a271..0ef45e3 100644
--- a/tests/compiler/dart2js/exit_code_test.dart
+++ b/tests/compiler/dart2js/exit_code_test.dart
@@ -11,13 +11,16 @@
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 
-import 'package:compiler/compiler.dart' as api;
+import 'package:compiler/compiler.dart' as old_api;
+import 'package:compiler/compiler_new.dart' as api;
 import 'package:compiler/src/compile_time_constants.dart';
 import 'package:compiler/src/dart2js.dart' as entry;
 import 'package:compiler/src/dart2jslib.dart';
 import 'package:compiler/src/apiimpl.dart' as apiimpl;
 import 'package:compiler/src/elements/elements.dart';
 import 'package:compiler/src/library_loader.dart';
+import 'package:compiler/src/null_compiler_output.dart';
+import 'package:compiler/src/old_to_new_api.dart';
 import 'package:compiler/src/resolution/resolution.dart';
 import 'package:compiler/src/scanner/scannerlib.dart';
 import 'package:compiler/src/util/util.dart';
@@ -27,18 +30,18 @@
   final String testType;
   final Function onTest;
 
-  TestCompiler(api.CompilerInputProvider inputProvider,
-                api.CompilerOutputProvider outputProvider,
-                api.DiagnosticHandler handler,
-                Uri libraryRoot,
-                Uri packageRoot,
-                List<String> options,
-                Map<String, dynamic> environment,
-                Uri packageConfig,
-                api.PackagesDiscoveryProvider findPackages,
-                String this.testMarker,
-                String this.testType,
-                Function this.onTest)
+  TestCompiler(api.CompilerInput inputProvider,
+               api.CompilerOutput outputProvider,
+               api.CompilerDiagnostics handler,
+               Uri libraryRoot,
+               Uri packageRoot,
+               List<String> options,
+               Map<String, dynamic> environment,
+               Uri packageConfig,
+               api.PackagesDiscoveryProvider findPackages,
+               String this.testMarker,
+               String this.testType,
+               Function this.onTest)
       : super(inputProvider, outputProvider, handler, libraryRoot,
               packageRoot, options, environment, packageConfig, findPackages) {
     scanner = new TestScanner(this);
@@ -150,14 +153,14 @@
     }
   }
   return new Future(() {
-    Future<api.CompilationResult> compile(
+    Future<old_api.CompilationResult> compile(
         Uri script,
         Uri libraryRoot,
         Uri packageRoot,
-        api.CompilerInputProvider inputProvider,
-        api.DiagnosticHandler handler,
+        old_api.CompilerInputProvider inputProvider,
+        old_api.DiagnosticHandler handler,
         [List<String> options = const [],
-         api.CompilerOutputProvider outputProvider,
+         old_api.CompilerOutputProvider outputProvider,
          Map<String, dynamic> environment = const {},
          Uri packageConfig,
          api.PackagesDiscoveryProvider findPackages]) {
@@ -165,20 +168,21 @@
       outputProvider = NullSink.outputProvider;
       // Use this to silence the test when debugging:
       // handler = (uri, begin, end, message, kind) {};
-      Compiler compiler = new TestCompiler(inputProvider,
-                                           outputProvider,
-                                           handler,
-                                           libraryRoot,
-                                           packageRoot,
-                                           options,
-                                           environment,
-                                           packageConfig,
-                                           findPackages,
-                                           marker,
-                                           type,
-                                           onTest);
+      Compiler compiler = new TestCompiler(
+          new LegacyCompilerInput(inputProvider),
+          new LegacyCompilerOutput(outputProvider),
+          new LegacyCompilerDiagnostics(handler),
+          libraryRoot,
+          packageRoot,
+          options,
+          environment,
+          packageConfig,
+          findPackages,
+          marker,
+          type,
+          onTest);
       return compiler.run(script).then((bool success) {
-        return new api.CompilationResult(compiler, isSuccess: success);
+        return new old_api.CompilationResult(compiler, isSuccess: success);
       });
     }
 
diff --git a/tests/compiler/dart2js/incremental/compile_all.dart b/tests/compiler/dart2js/incremental/compile_all.dart
index c2c7a9e..ea41d2c 100644
--- a/tests/compiler/dart2js/incremental/compile_all.dart
+++ b/tests/compiler/dart2js/incremental/compile_all.dart
@@ -14,6 +14,8 @@
 
 import 'package:dart2js_incremental/dart2js_incremental.dart' show
     IncrementalCompiler;
+import 'package:compiler/src/source_file_provider.dart' show
+    FormattingDiagnosticHandler;
 
 import '../memory_source_file_helper.dart' show
     Compiler;
@@ -42,13 +44,14 @@
   int skipCount = 0;
   Set<String> crashes = new Set<String>();
   Compiler memoryCompiler = compilerFor(sources);
-  memoryCompiler.handler.verbose = verbose;
+  FormattingDiagnosticHandler handler = memoryCompiler.handler;
+  handler.verbose = verbose;
   var options = ['--analyze-main'];
   if (true || verbose) options.add('--verbose');
   IncrementalCompiler compiler = new IncrementalCompiler(
       libraryRoot: memoryCompiler.libraryRoot,
       inputProvider: memoryCompiler.provider,
-      outputProvider: memoryCompiler.outputProvider,
+      outputProvider: memoryCompiler.userOutputProvider,
       diagnosticHandler: memoryCompiler.handler,
       packageRoot: memoryCompiler.packageRoot,
       options: options);
diff --git a/tests/compiler/dart2js/incremental/hello_test.dart b/tests/compiler/dart2js/incremental/hello_test.dart
index 7dad2e8..83215dc 100644
--- a/tests/compiler/dart2js/incremental/hello_test.dart
+++ b/tests/compiler/dart2js/incremental/hello_test.dart
@@ -17,8 +17,11 @@
 import 'package:compiler/compiler.dart' show
     Diagnostic;
 
-import 'package:compiler/src/dart2jslib.dart' show
-    NullSink;
+import 'package:compiler/src/null_compiler_output.dart' show
+    NullCompilerOutput;
+
+import 'package:compiler/src/old_to_new_api.dart' show
+    LegacyCompilerDiagnostics;
 
 import 'package:async_helper/async_helper.dart' show
     asyncTest;
@@ -94,9 +97,9 @@
     Uri packageRoot,
     MemorySourceFileProvider provider) {
   IncrementalCompiler compiler = new IncrementalCompiler(
-      diagnosticHandler: handler,
+      diagnosticHandler: new LegacyCompilerDiagnostics(handler),
       inputProvider: provider,
-      outputProvider: NullSink.outputProvider,
+      outputProvider: const NullCompilerOutput(),
       options: ['--analyze-main'],
       libraryRoot: libraryRoot,
       packageRoot: packageRoot);
diff --git a/tests/compiler/dart2js/js_backend_cps_ir_basic_test.dart b/tests/compiler/dart2js/js_backend_cps_ir_basic_test.dart
index 8ba0f45..6873d05 100644
--- a/tests/compiler/dart2js/js_backend_cps_ir_basic_test.dart
+++ b/tests/compiler/dart2js/js_backend_cps_ir_basic_test.dart
@@ -25,15 +25,14 @@
   print('($m)');
 }""",r"""
 function() {
-  var l = [1, 2, 3], m = P.LinkedHashMap_LinkedHashMap$_literal(["s", 1]);
   P.print("()");
   P.print("(true)");
   P.print("(1)");
   P.print("(" + H.S([1, 2, 3]) + ")");
   P.print("(" + H.S(P.LinkedHashMap_LinkedHashMap$_literal(["s", 1])) + ")");
   P.print("(1)");
-  P.print("(" + H.S(l) + ")");
-  P.print("(" + H.S(m) + ")");
+  P.print("(" + H.S([1, 2, 3]) + ")");
+  P.print("(" + H.S(P.LinkedHashMap_LinkedHashMap$_literal(["s", 1])) + ")");
 }"""),
   const TestEntry("""
 foo(a, [b = "b"]) => b;
diff --git a/tests/compiler/dart2js/js_backend_cps_ir_closures_test.dart b/tests/compiler/dart2js/js_backend_cps_ir_closures_test.dart
index 42d4e5a..2f58293 100644
--- a/tests/compiler/dart2js/js_backend_cps_ir_closures_test.dart
+++ b/tests/compiler/dart2js/js_backend_cps_ir_closures_test.dart
@@ -20,10 +20,10 @@
 """,
 r"""
 function(x) {
-  var _box_0 = {}, a = new V.main_a(_box_0);
+  var _box_0 = {};
   _box_0._captured_x_0 = x;
   _box_0._captured_x_0 = J.getInterceptor$ns(x = _box_0._captured_x_0).$add(x, "1");
-  P.print(a.call$0());
+  P.print(new V.main_a(_box_0).call$0());
 }"""),
 
   const TestEntry("""
@@ -49,10 +49,10 @@
 """,
 r"""
 function() {
-  var _box_0 = {}, a = new V.main_closure(_box_0);
+  var _box_0 = {};
   _box_0._captured_x_0 = 122;
   _box_0._captured_x_0 = _box_0._captured_x_0 + 1;
-  P.print(a.call$0());
+  P.print(new V.main_closure(_box_0).call$0());
 }"""),
 
   const TestEntry("""
@@ -68,10 +68,10 @@
 """,
 r"""
 function() {
-  var _box_0 = {}, a = new V.main_closure(_box_0);
+  var _box_0 = {};
   _box_0._captured_x_0 = 122;
   _box_0._captured_x_0 = _box_0._captured_x_0 + 1;
-  P.print(a.call$0().call$0());
+  P.print(new V.main_closure(_box_0).call$0().call$0());
 }"""),
 
   const TestEntry("""
diff --git a/tests/compiler/dart2js/js_backend_cps_ir_control_flow_test.dart b/tests/compiler/dart2js/js_backend_cps_ir_control_flow_test.dart
index adf8db7..e777044 100644
--- a/tests/compiler/dart2js/js_backend_cps_ir_control_flow_test.dart
+++ b/tests/compiler/dart2js/js_backend_cps_ir_control_flow_test.dart
@@ -127,6 +127,52 @@
   V.foo();
   P.print("good");
 }"""),
+  const TestEntry("""
+main() {
+  var list = [1,2,3,4,5,6];
+  for (var x in list) {
+    print(x);
+  }
+}""",r"""
+function() {
+  var list = [1, 2, 3, 4, 5, 6], $length = list.length, i = 0;
+  while (i < list.length) {
+    P.print(list[i]);
+    if ($length !== list.length)
+      H.throwConcurrentModificationError(list);
+    i = i + 1;
+  }
+}"""),
+  const TestEntry("""
+main() {
+  var xs = ['x', 'y', 'z'], ys = ['A', 'B', 'C'];
+  var xit = xs.iterator, yit = ys.iterator;
+  while (xit.moveNext() && yit.moveNext()) {
+    print(xit.current);
+    print(yit.current);
+  }
+}""",r"""
+function() {
+  var xs = ["x", "y", "z"], ys = ["A", "B", "C"], $length = xs.length, length1 = ys.length, i, i1, current, current1;
+  if ($length !== xs.length)
+    H.throwConcurrentModificationError(xs);
+  i = 0;
+  i1 = 0;
+  while (i < xs.length) {
+    current = xs[i];
+    if (length1 !== ys.length)
+      H.throwConcurrentModificationError(ys);
+    if (!(i1 < ys.length))
+      break;
+    current1 = ys[i1];
+    P.print(current);
+    P.print(current1);
+    if ($length !== xs.length)
+      H.throwConcurrentModificationError(xs);
+    i = i + 1;
+    i1 = i1 + 1;
+  }
+}"""),
 ];
 
 void main() {
diff --git a/tests/compiler/dart2js/js_backend_cps_ir_interceptors_test.dart b/tests/compiler/dart2js/js_backend_cps_ir_interceptors_test.dart
index 374b751..4e7b0cf 100644
--- a/tests/compiler/dart2js/js_backend_cps_ir_interceptors_test.dart
+++ b/tests/compiler/dart2js/js_backend_cps_ir_interceptors_test.dart
@@ -33,15 +33,15 @@
 }""",
 r"""
 function() {
-  var l = ["hest", ["h", "e", "s", "t"]], i = 0, x, j;
+  var l = ["hest", ["h", "e", "s", "t"]], i = 0, x_, x, j;
   P.print(l.length);
   while (i < l.length) {
     if (i < 0 || i >= l.length)
       H.ioore(l, i);
-    x = l[i];
+    x_ = J.getInterceptor$as(x = l[i]);
     j = 0;
-    while (j < J.getInterceptor$as(x).get$length(x)) {
-      P.print(J.getInterceptor$as(x).$index(x, j));
+    while (j < x_.get$length(x)) {
+      P.print(x_.$index(x, j));
       j = j + 1;
     }
     i = i + 1;
diff --git a/tests/compiler/dart2js/library_resolution_test.dart b/tests/compiler/dart2js/library_resolution_test.dart
index c7058471..ed41ebe 100644
--- a/tests/compiler/dart2js/library_resolution_test.dart
+++ b/tests/compiler/dart2js/library_resolution_test.dart
@@ -21,8 +21,14 @@
     LibraryElement;
 
 import 'package:compiler/src/dart2jslib.dart' show
-    MessageKind,
-    NullSink;
+    MessageKind;
+
+import 'package:compiler/src/null_compiler_output.dart' show
+    NullCompilerOutput;
+
+import 'package:compiler/src/old_to_new_api.dart' show
+    LegacyCompilerDiagnostics,
+    LegacyCompilerInput;
 
 import 'package:sdk_library_metadata/libraries.dart' show
     DART2JS_PLATFORM,
@@ -40,13 +46,13 @@
     documented: false,
     platforms: DART2JS_PLATFORM);
 
+
 class CustomCompiler extends Compiler {
   final Map<String, LibraryInfo> customLibraryInfo;
 
   CustomCompiler(
       this.customLibraryInfo,
       provider,
-      outputProvider,
       handler,
       libraryRoot,
       packageRoot,
@@ -54,7 +60,7 @@
       environment)
       : super(
           provider,
-          outputProvider,
+          const NullCompilerOutput(),
           handler,
           libraryRoot,
           packageRoot,
@@ -75,11 +81,6 @@
   var provider = new MemorySourceFileProvider(MEMORY_SOURCE_FILES);
   var handler = new FormattingDiagnosticHandler(provider);
 
-  outputProvider(String name, String extension) {
-    if (name != '') throw 'Attempt to output file "$name.$extension"';
-    return new NullSink('$name.$extension');
-  }
-
   Future wrappedProvider(Uri uri) {
     if (uri == sdkRoot.resolve('lib/mock1.dart')) {
       return provider.readStringFromUri(Uri.parse('memory:mock1.dart'));
@@ -111,9 +112,8 @@
 
   Compiler compiler = new CustomCompiler(
       {},
-      wrappedProvider,
-      outputProvider,
-      wrappedHandler,
+      new LegacyCompilerInput(wrappedProvider),
+      new LegacyCompilerDiagnostics(wrappedHandler),
       sdkRoot,
       packageRoot,
       [],
diff --git a/tests/compiler/dart2js/memory_compiler.dart b/tests/compiler/dart2js/memory_compiler.dart
index 7a4a809..44902d8 100644
--- a/tests/compiler/dart2js/memory_compiler.dart
+++ b/tests/compiler/dart2js/memory_compiler.dart
@@ -6,15 +6,17 @@
 
 import 'memory_source_file_helper.dart';
 
-import 'package:compiler/src/compile_time_constants.dart';
 
-import 'package:compiler/src/dart2jslib.dart'
-       show NullSink;
+import 'package:compiler/src/null_compiler_output.dart'
+       show NullCompilerOutput;
 
 import 'package:compiler/compiler.dart' show
-    CompilerOutputProvider,
+    DiagnosticHandler;
+
+import 'package:compiler/compiler_new.dart' show
+    CompilerDiagnostics,
+    CompilerOutput,
     Diagnostic,
-    DiagnosticHandler,
     PackagesDiscoveryProvider;
 
 import 'dart:async';
@@ -25,6 +27,8 @@
 import 'package:compiler/src/library_loader.dart'
     show LoadedLibraries;
 
+import 'package:compiler/src/old_to_new_api.dart';
+
 export 'output_collector.dart';
 
 class DiagnosticMessage {
@@ -39,11 +43,15 @@
   String toString() => '$uri:$begin:$end:$message:$kind';
 }
 
-class DiagnosticCollector {
+class DiagnosticCollector implements CompilerDiagnostics {
   List<DiagnosticMessage> messages = <DiagnosticMessage>[];
 
-  void call(Uri uri, int begin, int end, String message,
-                         Diagnostic kind) {
+  void call(Uri uri, int begin, int end, String message, Diagnostic kind) {
+    report(uri, begin, end, message, kind);
+  }
+
+  @override
+  void report(Uri uri, int begin, int end, String message, Diagnostic kind) {
     messages.add(new DiagnosticMessage(uri, begin, end, message, kind));
   }
 
@@ -67,24 +75,40 @@
   Iterable<DiagnosticMessage> get infos {
     return filterMessagesByKind(Diagnostic.INFO);
   }
+
+  /// `true` if non-verbose messages has been collected.
+  bool get hasRegularMessages {
+    return messages.any((m) => m.kind != Diagnostic.VERBOSE_INFO);
+  }
 }
 
-DiagnosticHandler createDiagnosticHandler(DiagnosticHandler diagnosticHandler,
-                                          SourceFileProvider provider,
-                                          bool showDiagnostics) {
-  var handler = diagnosticHandler;
+class MultiDiagnostics implements CompilerDiagnostics {
+  final List<CompilerDiagnostics> diagnosticsList;
+
+  const MultiDiagnostics([this.diagnosticsList = const []]);
+
+  @override
+  void report(Uri uri, int begin, int end, String message, Diagnostic kind) {
+    for (CompilerDiagnostics diagnostics in diagnosticsList) {
+      diagnostics.report(uri, begin, end, message, kind);
+    }
+  }
+}
+
+CompilerDiagnostics createCompilerDiagnostics(
+    CompilerDiagnostics diagnostics,
+    SourceFileProvider provider,
+    bool showDiagnostics) {
+  CompilerDiagnostics handler = diagnostics;
   if (showDiagnostics) {
-    if (diagnosticHandler == null) {
+    if (diagnostics == null) {
       handler = new FormattingDiagnosticHandler(provider);
     } else {
       var formattingHandler = new FormattingDiagnosticHandler(provider);
-      handler = (Uri uri, int begin, int end, String message, Diagnostic kind) {
-        diagnosticHandler(uri, begin, end, message, kind);
-        formattingHandler(uri, begin, end, message, kind);
-      };
+      handler = new MultiDiagnostics([diagnostics, formattingHandler]);
     }
-  } else if (diagnosticHandler == null) {
-    handler = (Uri uri, int begin, int end, String message, Diagnostic kind) {};
+  } else if (diagnostics == null) {
+    handler = new MultiDiagnostics();
   }
   return handler;
 }
@@ -94,8 +118,8 @@
 
 Compiler compilerFor(
     Map<String, String> memorySourceFiles,
-    {DiagnosticHandler diagnosticHandler,
-     CompilerOutputProvider outputProvider,
+    {CompilerDiagnostics diagnosticHandler,
+     CompilerOutput outputProvider,
      List<String> options: const [],
      Compiler cachedCompiler,
      bool showDiagnostics: true,
@@ -110,35 +134,28 @@
   }
 
   MemorySourceFileProvider provider;
-  var readStringFromUri;
   if (cachedCompiler == null) {
     provider = new MemorySourceFileProvider(memorySourceFiles);
-    readStringFromUri = provider.readStringFromUri;
     // Saving the provider in case we need it later for a cached compiler.
-    expando[readStringFromUri] = provider;
+    expando[provider] = provider;
   } else {
     // When using a cached compiler, it has read a number of files from disk
     // already (and will not attempt to read them again due to caching). These
     // files must be available to the new diagnostic handler.
     provider = expando[cachedCompiler.provider];
-    readStringFromUri = cachedCompiler.provider;
     provider.memorySourceFiles = memorySourceFiles;
   }
-  var handler =
-      createDiagnosticHandler(diagnosticHandler, provider, showDiagnostics);
+  diagnosticHandler =
+      createCompilerDiagnostics(diagnosticHandler, provider, showDiagnostics);
 
-  EventSink<String> noOutputProvider(String name, String extension) {
-    if (name != '') throw 'Attempt to output file "$name.$extension"';
-    return new NullSink('$name.$extension');
-  }
   if (outputProvider == null) {
-    outputProvider = noOutputProvider;
+    outputProvider = const NullCompilerOutput();
   }
 
   Compiler compiler = new Compiler(
-      readStringFromUri,
+      provider,
       outputProvider,
-      handler,
+      diagnosticHandler,
       libraryRoot,
       packageRoot,
       options,
@@ -236,6 +253,27 @@
   Uri get rootUri => null;
 }
 
+
+DiagnosticHandler createDiagnosticHandler(DiagnosticHandler diagnosticHandler,
+                                          SourceFileProvider provider,
+                                          bool showDiagnostics) {
+  var handler = diagnosticHandler;
+  if (showDiagnostics) {
+    if (diagnosticHandler == null) {
+      handler = new FormattingDiagnosticHandler(provider);
+    } else {
+      var formattingHandler = new FormattingDiagnosticHandler(provider);
+      handler = (Uri uri, int begin, int end, String message, Diagnostic kind) {
+        diagnosticHandler(uri, begin, end, message, kind);
+        formattingHandler(uri, begin, end, message, kind);
+      };
+    }
+  } else if (diagnosticHandler == null) {
+    handler = (Uri uri, int begin, int end, String message, Diagnostic kind) {};
+  }
+  return handler;
+}
+
 Future<MirrorSystem> mirrorSystemFor(Map<String,String> memorySourceFiles,
                                      {DiagnosticHandler diagnosticHandler,
                                       List<String> options: const [],
diff --git a/tests/compiler/dart2js/memory_source_file_helper.dart b/tests/compiler/dart2js/memory_source_file_helper.dart
index 0a0428b..3ff2ba5 100644
--- a/tests/compiler/dart2js/memory_source_file_helper.dart
+++ b/tests/compiler/dart2js/memory_source_file_helper.dart
@@ -52,4 +52,7 @@
     }
     return new StringSourceFile.fromUri(resourceUri, source);
   }
+
+  @override
+  Future readFromUri(Uri resourceUri) => readStringFromUri(resourceUri);
 }
diff --git a/tests/compiler/dart2js/message_kind_helper.dart b/tests/compiler/dart2js/message_kind_helper.dart
index 7bc63ce..244d5a0 100644
--- a/tests/compiler/dart2js/message_kind_helper.dart
+++ b/tests/compiler/dart2js/message_kind_helper.dart
@@ -12,6 +12,8 @@
     MessageKind;
 import 'package:compiler/src/dart_backend/dart_backend.dart' show
     DartBackend;
+import 'package:compiler/src/old_to_new_api.dart' show
+    LegacyCompilerDiagnostics;
 
 import 'memory_compiler.dart';
 
@@ -79,7 +81,7 @@
 
     Compiler compiler = compilerFor(
         example,
-        diagnosticHandler: collect,
+        diagnosticHandler: new LegacyCompilerDiagnostics(collect),
         options: ['--analyze-only',
                   '--enable-experimental-mirrors']..addAll(kind.options),
         cachedCompiler:
diff --git a/tests/compiler/dart2js/mirror_tree_shaking_test.dart b/tests/compiler/dart2js/mirror_tree_shaking_test.dart
index 91a397d..4548a70 100644
--- a/tests/compiler/dart2js/mirror_tree_shaking_test.dart
+++ b/tests/compiler/dart2js/mirror_tree_shaking_test.dart
@@ -4,51 +4,24 @@
 
 // Test that tree-shaking hasn't been turned off.
 
-import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'memory_source_file_helper.dart';
-
-import 'package:compiler/src/dart2jslib.dart'
-       show NullSink;
-
-import 'package:compiler/compiler.dart'
-       show Diagnostic;
-
-import 'dart:async';
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/dart2jslib.dart';
 import 'package:compiler/src/js_backend/js_backend.dart'
        show JavaScriptBackend;
+import 'package:expect/expect.dart';
+import 'memory_compiler.dart';
 
 main() {
-  Uri script = currentDirectory.resolveUri(Platform.script);
-  Uri libraryRoot = script.resolve('../../../sdk/');
-  Uri packageRoot = script.resolve('./packages/');
-
-  var provider = new MemorySourceFileProvider(MEMORY_SOURCE_FILES);
-  void diagnosticHandler(Uri uri, int begin, int end,
-                         String message, Diagnostic kind) {
-    if (kind == Diagnostic.VERBOSE_INFO
-        || kind == Diagnostic.WARNING
-        || kind == Diagnostic.HINT) {
-      return;
-    }
-    throw '$uri:$begin:$end:$message:$kind';
-  }
-
-  EventSink<String> outputProvider(String name, String extension) {
-    return new NullSink('$name.$extension');
-  }
-
-  Compiler compiler = new Compiler(provider.readStringFromUri,
-                                   outputProvider,
-                                   diagnosticHandler,
-                                   libraryRoot,
-                                   packageRoot,
-                                   [],
-                                   {});
+  DiagnosticCollector collector = new DiagnosticCollector();
+  Compiler compiler = compilerFor(
+      MEMORY_SOURCE_FILES, diagnosticHandler: collector);
   asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
+    Expect.isTrue(collector.errors.isEmpty);
+    Expect.isTrue(collector.infos.isEmpty);
     Expect.isFalse(compiler.compilationFailed);
     Expect.isFalse(compiler.enqueuer.resolution.hasEnqueuedReflectiveElements);
-    Expect.isFalse(compiler.enqueuer.resolution.hasEnqueuedReflectiveStaticFields);
+    Expect.isFalse(
+        compiler.enqueuer.resolution.hasEnqueuedReflectiveStaticFields);
     Expect.isFalse(compiler.enqueuer.codegen.hasEnqueuedReflectiveElements);
     Expect.isFalse(compiler.enqueuer.codegen.hasEnqueuedReflectiveStaticFields);
     Expect.isFalse(compiler.disableTypeInference);
diff --git a/tests/compiler/dart2js/mirrors_test.dart b/tests/compiler/dart2js/mirrors_test.dart
index 2b5d992..2c7b09f 100644
--- a/tests/compiler/dart2js/mirrors_test.dart
+++ b/tests/compiler/dart2js/mirrors_test.dart
@@ -47,8 +47,7 @@
   Uri libUri = scriptUri.resolve('../../../sdk/');
   Uri inputUri = scriptUri.resolve('mirrors_helper.dart');
   var provider = new CompilerSourceFileProvider();
-  var diagnosticHandler =
-        new FormattingDiagnosticHandler(provider).diagnosticHandler;
+  var diagnosticHandler = new FormattingDiagnosticHandler(provider);
   asyncStart();
   var result = analyze([inputUri], libUri, packageRoot,
                        provider.readStringFromUri, diagnosticHandler,
diff --git a/tests/compiler/dart2js/mirrors_used_test.dart b/tests/compiler/dart2js/mirrors_used_test.dart
index e79df96..2a525c9 100644
--- a/tests/compiler/dart2js/mirrors_used_test.dart
+++ b/tests/compiler/dart2js/mirrors_used_test.dart
@@ -29,6 +29,9 @@
 import 'package:compiler/src/js_emitter/full_emitter/emitter.dart'
     as full show Emitter;
 
+import 'package:compiler/src/old_to_new_api.dart' show
+    LegacyCompilerDiagnostics;
+
 void expectOnlyVerboseInfo(Uri uri, int begin, int end, String message, kind) {
   if (kind.name == 'verbose info') {
     print(message);
@@ -48,7 +51,8 @@
 
 void main() {
   Compiler compiler = compilerFor(
-      MEMORY_SOURCE_FILES, diagnosticHandler: expectOnlyVerboseInfo,
+      MEMORY_SOURCE_FILES,
+      diagnosticHandler: new LegacyCompilerDiagnostics(expectOnlyVerboseInfo),
       options: ['--enable-experimental-mirrors']);
   asyncTest(() => compiler.runCompiler(Uri.parse('memory:main.dart')).then((_) {
     print('');
diff --git a/tests/compiler/dart2js/missing_file_test.dart b/tests/compiler/dart2js/missing_file_test.dart
index 630063b..7d88eb8 100644
--- a/tests/compiler/dart2js/missing_file_test.dart
+++ b/tests/compiler/dart2js/missing_file_test.dart
@@ -6,17 +6,11 @@
 
 library dart2js.test.missing_file;
 
-import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'memory_source_file_helper.dart';
-
-import 'package:compiler/src/dart2jslib.dart'
-       show NullSink;
-
-import 'package:compiler/compiler.dart'
-       show DiagnosticHandler, Diagnostic;
-
 import 'dart:async';
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/dart2jslib.dart';
+import 'package:expect/expect.dart';
+import 'memory_compiler.dart';
 
 const MEMORY_SOURCE_FILES = const {
   'main.dart': '''
@@ -29,40 +23,18 @@
 
 Future runCompiler(Uri main, String expectedMessage) {
   print("\n\n\n");
-  Uri script = currentDirectory.resolveUri(Platform.script);
-  Uri libraryRoot = script.resolve('../../../sdk/');
-  Uri packageRoot = script.resolve('./packages/');
 
-  var provider = new MemorySourceFileProvider(MEMORY_SOURCE_FILES);
-  var handler = new FormattingDiagnosticHandler(provider);
-  var errors = [];
-
-  void diagnosticHandler(Uri uri, int begin, int end, String message,
-                         Diagnostic kind) {
-    if (kind == Diagnostic.ERROR) {
-      errors.add(message);
-    }
-    handler(uri, begin, end, message, kind);
-  }
-
-
-  EventSink<String> outputProvider(String name, String extension) {
-    if (name != '') throw 'Attempt to output file "$name.$extension"';
-    return new NullSink('$name.$extension');
-  }
-
-  Compiler compiler = new Compiler(provider,
-                                   outputProvider,
-                                   diagnosticHandler,
-                                   libraryRoot,
-                                   packageRoot,
-                                   [],
-                                   {});
+  DiagnosticCollector diagnostics = new DiagnosticCollector();
+  OutputCollector output = new OutputCollector();
+  Compiler compiler = compilerFor(
+      MEMORY_SOURCE_FILES,
+      diagnosticHandler: diagnostics,
+      outputProvider: output);
 
   return compiler.run(main).then((_) {
-    Expect.equals(1, errors.length);
-    Expect.equals(expectedMessage,
-                  errors[0]);
+    Expect.isFalse(output.hasExtraOutput);
+    Expect.equals(1, diagnostics.errors.length);
+    Expect.equals(expectedMessage, diagnostics.errors.first.message);
   });
 }
 
diff --git a/tests/compiler/dart2js/mock_compiler.dart b/tests/compiler/dart2js/mock_compiler.dart
index 3d879df..3284514 100644
--- a/tests/compiler/dart2js/mock_compiler.dart
+++ b/tests/compiler/dart2js/mock_compiler.dart
@@ -16,6 +16,7 @@
 import 'package:compiler/src/resolution/resolution.dart';
 import 'package:compiler/src/io/source_file.dart';
 import 'package:compiler/src/tree/tree.dart';
+import 'package:compiler/src/old_to_new_api.dart';
 import 'package:compiler/src/util/util.dart';
 import 'parser_helper.dart';
 
@@ -93,7 +94,7 @@
               preserveComments: preserveComments,
               trustTypeAnnotations: trustTypeAnnotations,
               showPackageWarnings: true,
-              outputProvider: outputProvider) {
+              outputProvider: new LegacyCompilerOutput(outputProvider)) {
     this.disableInlining = disableInlining;
 
     deferredLoadTask = new MockDeferredLoadTask(this);
diff --git a/tests/compiler/dart2js/output_collector.dart b/tests/compiler/dart2js/output_collector.dart
index d2d3af4..7eb7486 100644
--- a/tests/compiler/dart2js/output_collector.dart
+++ b/tests/compiler/dart2js/output_collector.dart
@@ -7,6 +7,7 @@
 library output_collector;
 
 import 'dart:async';
+import 'package:compiler/compiler_new.dart';
 
 class BufferedEventSink implements EventSink<String> {
   StringBuffer sb = new StringBuffer();
@@ -49,13 +50,11 @@
   }
 }
 
-class OutputCollector {
+class OutputCollector implements CompilerOutput {
   Map<String, Map<String, BufferedEventSink>> outputMap = {};
 
   EventSink<String> call(String name, String extension) {
-    Map<String, BufferedEventSink> sinkMap =
-        outputMap.putIfAbsent(extension, () => {});
-    return sinkMap.putIfAbsent(name, () => new BufferedEventSink());
+    return createEventSink(name, extension);
   }
 
   String getOutput(String name, String extension) {
@@ -64,4 +63,24 @@
     BufferedEventSink sink = sinkMap[name];
     return sink != null ? sink.text : null;
   }
+
+  /// `true` if any output has been collected.
+  bool get hasOutput => !outputMap.isEmpty;
+
+  /// `true` if any output other than main output has been collected.
+  bool get hasExtraOutput {
+    for (String extension in outputMap.keys) {
+      for (String name in outputMap[extension].keys) {
+        if (name != '') return true;
+      }
+    }
+    return false;
+  }
+
+  @override
+  EventSink<String> createEventSink(String name, String extension) {
+    Map<String, BufferedEventSink> sinkMap =
+        outputMap.putIfAbsent(extension, () => {});
+    return sinkMap.putIfAbsent(name, () => new BufferedEventSink());
+  }
 }
diff --git a/tests/compiler/dart2js/proxy_test.dart b/tests/compiler/dart2js/proxy_test.dart
index b9d8444..bdba67f 100644
--- a/tests/compiler/dart2js/proxy_test.dart
+++ b/tests/compiler/dart2js/proxy_test.dart
@@ -17,6 +17,6 @@
     'language/proxy2_test.dart': null,
 };
 
-void main() {
-  checkWarnings(TESTS);
+void main(List<String> args) {
+  checkWarnings(TESTS, args);
 }
diff --git a/tests/compiler/dart2js/semantic_visitor_test.dart b/tests/compiler/dart2js/semantic_visitor_test.dart
index 19c1694..40b36ea 100644
--- a/tests/compiler/dart2js/semantic_visitor_test.dart
+++ b/tests/compiler/dart2js/semantic_visitor_test.dart
@@ -142,17 +142,19 @@
 
 class Test {
   final String codeByPrefix;
+  final bool isDeferred;
   final String code;
   final /*Visit | List<Visit>*/ expectedVisits;
   final String cls;
   final String method;
 
   const Test(this.code, this.expectedVisits)
-      : cls = null, method = 'm', codeByPrefix = null;
+      : cls = null, method = 'm', codeByPrefix = null, isDeferred = false;
   const Test.clazz(this.code, this.expectedVisits,
                    {this.cls: 'C', this.method: 'm'})
-      : codeByPrefix = null;
-  const Test.prefix(this.codeByPrefix, this.code, this.expectedVisits)
+      : codeByPrefix = null, isDeferred = false;
+  const Test.prefix(this.codeByPrefix, this.code, this.expectedVisits,
+                   {this.isDeferred: false})
       : cls = null, method = 'm';
 
   String toString() {
@@ -276,7 +278,11 @@
       if (test.codeByPrefix != null) {
         String prefixFilename = 'pre$index.dart';
         sourceFiles[prefixFilename] = test.codeByPrefix;
-        testSource.writeln("import '$prefixFilename' as p;");
+        if (test.isDeferred) {
+          testSource.writeln("import '$prefixFilename' deferred as p;");
+        } else {
+          testSource.writeln("import '$prefixFilename' as p;");
+        }
       }
 
       String filename = 'lib$index.dart';
@@ -703,4 +709,6 @@
 
   VISIT_CONSTANT_GET,
   VISIT_CONSTANT_INVOKE,
+
+  PREVISIT_DEFERRED_ACCESS,
 }
diff --git a/tests/compiler/dart2js/semantic_visitor_test_send_data.dart b/tests/compiler/dart2js/semantic_visitor_test_send_data.dart
index 7ffca23..9a420d6 100644
--- a/tests/compiler/dart2js/semantic_visitor_test_send_data.dart
+++ b/tests/compiler/dart2js/semantic_visitor_test_send_data.dart
@@ -107,6 +107,20 @@
         'm() => p.C.o;',
         const Visit(VisitKind.VISIT_STATIC_FIELD_GET,
                     element: 'field(C#o)')),
+    const Test.prefix(
+        '''
+        class C {
+          static var o;
+        }
+        ''',
+        'm() => p.C.o;',
+        const [
+          const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS,
+                      element: 'prefix(p)'),
+          const Visit(VisitKind.VISIT_STATIC_FIELD_GET,
+                      element: 'field(C#o)'),
+        ],
+        isDeferred: true),
     const Test(
         '''
         class C {
@@ -125,6 +139,48 @@
         ''',
         const Visit(VisitKind.VISIT_UNRESOLVED_GET,
                     name: 'o')),
+    const Test.prefix(
+        '''
+        ''',
+        'm() => p.C.o;',
+        const [
+          const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET,
+                      receiver: 'p.C', name: 'o'),
+          const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'C'),
+        ]),
+    const Test.prefix(
+        '''
+        class C {
+        }
+        ''',
+        'm() => p.C.o;',
+        const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o')),
+    const Test.prefix(
+        '''
+        ''',
+        'm() => p.C.o;',
+        const [
+          const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET,
+                      receiver: 'p.C', name: 'o'),
+          const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS,
+                      element: 'prefix(p)'),
+          const Visit(VisitKind.VISIT_UNRESOLVED_GET,
+                      name: 'C'),
+        ],
+        isDeferred: true),
+    const Test.prefix(
+        '''
+        class C {
+        }
+        ''',
+        'm() => p.C.o;',
+        const [
+          const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS,
+                      element: 'prefix(p)'),
+          const Visit(VisitKind.VISIT_UNRESOLVED_GET,
+                      name: 'o'),
+        ],
+        isDeferred: true),
     const Test(
         '''
         class C {}
@@ -659,6 +715,35 @@
         'm() => p.o;',
         const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET,
                     element: 'field(o)')),
+    const Test.prefix(
+        '''
+        var o;
+        ''',
+        'm() => p.o;',
+        const [
+          const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS,
+                      element: 'prefix(p)'),
+          const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET,
+                      element: 'field(o)'),
+        ],
+        isDeferred: true),
+    const Test.prefix(
+        '''
+        ''',
+        'm() => p.o;',
+        const Visit(VisitKind.VISIT_UNRESOLVED_GET,
+                    name: 'o')),
+    const Test.prefix(
+        '''
+        ''',
+        'm() => p.o;',
+        const [
+          const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS,
+                      element: 'prefix(p)'),
+          const Visit(VisitKind.VISIT_UNRESOLVED_GET,
+                      name: 'o'),
+        ],
+        isDeferred: true),
     const Test(
         '''
         var o;
diff --git a/tests/compiler/dart2js/semantic_visitor_test_send_visitor.dart b/tests/compiler/dart2js/semantic_visitor_test_send_visitor.dart
index a602e2e..713a8c3 100644
--- a/tests/compiler/dart2js/semantic_visitor_test_send_visitor.dart
+++ b/tests/compiler/dart2js/semantic_visitor_test_send_visitor.dart
@@ -2940,4 +2940,12 @@
         constant: constant.getText()));
     super.visitConstantInvoke(node, constant, arguments, callStructure, arg);
   }
+
+  @override
+  previsitDeferredAccess(
+      Send node,
+      PrefixElement prefix,
+      arg) {
+    visits.add(new Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: prefix));
+  }
 }
diff --git a/tests/compiler/dart2js/sourcemaps/sourcemap_helper.dart b/tests/compiler/dart2js/sourcemaps/sourcemap_helper.dart
index b0dfb21..697bf02 100644
--- a/tests/compiler/dart2js/sourcemaps/sourcemap_helper.dart
+++ b/tests/compiler/dart2js/sourcemaps/sourcemap_helper.dart
@@ -5,8 +5,9 @@
 library sourcemap.helper;
 
 import 'dart:async';
+import 'package:compiler/compiler_new.dart';
 import 'package:compiler/src/apiimpl.dart' as api;
-import 'package:compiler/src/dart2jslib.dart' show NullSink;
+import 'package:compiler/src/null_compiler_output.dart' show NullSink;
 import 'package:compiler/src/elements/elements.dart';
 import 'package:compiler/src/helpers/helpers.dart';
 import 'package:compiler/src/filenames.dart';
@@ -20,10 +21,11 @@
 import '../memory_compiler.dart';
 import '../output_collector.dart';
 
-class OutputProvider {
+class OutputProvider implements CompilerOutput {
   BufferedEventSink jsMapOutput;
 
-  EventSink<String> call(String name, String extension) {
+  @override
+  EventSink<String> createEventSink(String name, String extension) {
     if (extension == 'js.map') {
       return jsMapOutput = new BufferedEventSink();
     }
@@ -37,7 +39,8 @@
   CloningOutputProvider(Uri jsUri, Uri jsMapUri)
     : outputProvider = new RandomAccessFileOutputProvider(jsUri, jsMapUri);
 
-  EventSink<String> call(String name, String extension) {
+  @override
+  EventSink<String> createEventSink(String name, String extension) {
     EventSink<String> output = outputProvider(name, extension);
     if (extension == 'js.map') {
       output = new CloningEventSink(
diff --git a/tests/compiler/dart2js/unneeded_part_js_test.dart b/tests/compiler/dart2js/unneeded_part_js_test.dart
index 6c52339..2ad0c3e 100644
--- a/tests/compiler/dart2js/unneeded_part_js_test.dart
+++ b/tests/compiler/dart2js/unneeded_part_js_test.dart
@@ -4,45 +4,22 @@
 
 // Test that no parts are emitted when deferred loading isn't used.
 
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/dart2jslib.dart';
 import 'package:expect/expect.dart';
-import "package:async_helper/async_helper.dart";
-import 'memory_source_file_helper.dart';
-
-import 'package:compiler/src/dart2jslib.dart'
-       show NullSink;
-
-import 'package:compiler/compiler.dart'
-       show Diagnostic;
-
-import 'dart:async';
+import 'memory_compiler.dart';
 
 main() {
-  Uri script = currentDirectory.resolveUri(Platform.script);
-  Uri libraryRoot = script.resolve('../../../sdk/');
-  Uri packageRoot = script.resolve('./packages/');
+  DiagnosticCollector diagnostics = new DiagnosticCollector();
+  OutputCollector output = new OutputCollector();
+  Compiler compiler = compilerFor(
+      MEMORY_SOURCE_FILES,
+      diagnosticHandler: diagnostics,
+      outputProvider: output);
 
-  var provider = new MemorySourceFileProvider(MEMORY_SOURCE_FILES);
-  void diagnosticHandler(Uri uri, int begin, int end,
-                         String message, Diagnostic kind) {
-    if (kind == Diagnostic.VERBOSE_INFO) {
-      return;
-    }
-    throw '$uri:$begin:$end:$message:$kind';
-  }
-
-  EventSink<String> outputProvider(String name, String extension) {
-    if (name != '') throw 'Attempt to output file "$name.$extension"';
-    return new NullSink('$name.$extension');
-  }
-
-  Compiler compiler = new Compiler(provider.readStringFromUri,
-                                   outputProvider,
-                                   diagnosticHandler,
-                                   libraryRoot,
-                                   packageRoot,
-                                   [],
-                                   {});
   asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
+    Expect.isFalse(diagnostics.hasRegularMessages);
+    Expect.isFalse(output.hasExtraOutput);
     Expect.isFalse(compiler.compilationFailed);
   }));
 }
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/compiler/dart2js_extra/dart2js_extra.status
index 5c61219..e61053c 100644
--- a/tests/compiler/dart2js_extra/dart2js_extra.status
+++ b/tests/compiler/dart2js_extra/dart2js_extra.status
@@ -67,24 +67,21 @@
 16407_test: Pass # Please triage this failure.
 22868_test: Crash # (main()async{var clo...  cannot handle async/sync*/async* functions
 22895_test: Crash # (main()async{var clo...  cannot handle async/sync*/async* functions
-23432_test: RuntimeError # Please triage this failure.
+23432_test: RuntimeError, Pass # Please triage this failure. (Passes for the wrong reason)
 async_stacktrace_test/asyncStar: Crash # (runTests()async{awa...  cannot handle async/sync*/async* functions
 async_stacktrace_test/none: Crash # (runTests()async{awa...  cannot handle async/sync*/async* functions
 closure_capture5_test: Crash # (i=0): For-loop variable captured in loop header
-conditional_send_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred/deferred_class_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred/deferred_constant2_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred/deferred_constant3_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred/deferred_constant4_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred/deferred_function_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred/deferred_mirrors1_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred/deferred_mirrors2_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-deferred/deferred_overlapping_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-if_null_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirror_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors_used_warning2_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors_used_warning_test/minif: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors_used_warning_test/none: RuntimeError # receiver._addHashTableEntry$2 is not a function
-reflect_native_types_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
+deferred/deferred_class_test: RuntimeError # Z.loadLibrary is not a function
+deferred/deferred_constant2_test: Crash # (lib.C1): deferred access is not implemented
+deferred/deferred_constant3_test: Crash # (lib.C1): deferred access is not implemented
+deferred/deferred_constant4_test: RuntimeError # B.loadLibrary is not a function
+deferred/deferred_function_test: Crash # (lib.foo): deferred access is not implemented
+deferred/deferred_mirrors1_test: Crash # (lazy.foo()): deferred access is not implemented
+deferred/deferred_overlapping_test: RuntimeError # E.loadLibrary is not a function
+deferred_fail_and_retry_test: Crash # (lib.foo()): deferred access is not implemented
+deferred_fail_and_retry_worker_test: Crash # (lib.foo()): deferred access is not implemented
+deferred_split_test: Crash # (b.createA()): deferred access is not implemented
+mirror_printer_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirror_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+reflect_native_types_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
 switch_test/none: Crash # (switch (val){foo:ba...  continue to a labeled switch case
-timer_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
diff --git a/tests/compiler/dart2js_extra/deferred_split_lib1.dart b/tests/compiler/dart2js_extra/deferred_split_lib1.dart
new file mode 100644
index 0000000..195357a
--- /dev/null
+++ b/tests/compiler/dart2js_extra/deferred_split_lib1.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2015, 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 loaded eagerly by deferred_split_test.dart
+
+class A<T> {}
diff --git a/tests/compiler/dart2js_extra/deferred_split_lib2.dart b/tests/compiler/dart2js_extra/deferred_split_lib2.dart
new file mode 100644
index 0000000..d690e31
--- /dev/null
+++ b/tests/compiler/dart2js_extra/deferred_split_lib2.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2015, 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.
+
+// Deferred library loaded by deferred_split_test.dart
+
+import 'deferred_split_lib1.dart';
+
+createA() => new A();
diff --git a/tests/compiler/dart2js_extra/deferred_split_test.dart b/tests/compiler/dart2js_extra/deferred_split_test.dart
new file mode 100644
index 0000000..de8b3e8
--- /dev/null
+++ b/tests/compiler/dart2js_extra/deferred_split_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2015, 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.
+
+/// Regression for issue 23853: we used to incorreclty split and put a type in a
+/// deferred hunk if the type was used explicitly in the deferred library and
+/// was used only in a generic type in the main library.
+library compiler.test.dart2js_extra.deferred_split_test;
+
+import 'deferred_split_lib1.dart';
+import 'deferred_split_lib2.dart' deferred as b;
+
+class TypeLiteral<T> {
+  Type get type => T;
+}
+
+main() {
+  // This line failed with a runtime error prior to the fix:
+  new TypeLiteral<A<Object>>().type;
+
+  b.loadLibrary().then((_) => b.createA());
+}
diff --git a/tests/compiler/dart2js_native/dart2js_native.status b/tests/compiler/dart2js_native/dart2js_native.status
index bacc7ed..34e5a50 100644
--- a/tests/compiler/dart2js_native/dart2js_native.status
+++ b/tests/compiler/dart2js_native/dart2js_native.status
@@ -21,19 +21,12 @@
 compute_this_script_test: Skip # Issue 17458
 
 [ $compiler == dart2js && $cps_ir ]
-compute_this_script_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-event_loop_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-internal_library_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirror_intercepted_field_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-native_closure_identity_frog_test: RuntimeError # invoke is not a function
+mirror_intercepted_field_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
 native_exception_test: RuntimeError # J.getInterceptor(...).toString$0 is not a function
 native_method_inlining_test: RuntimeError # Please triage this failure.
-native_mirror_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
+native_mirror_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
 native_no_such_method_exception3_frog_test: RuntimeError # Please triage this failure.
-native_wrapping_function3_frog_test: RuntimeError # invoke is not a function
-native_wrapping_function_frog_test: RuntimeError # invoke is not a function
 optimization_hints_test: RuntimeError # Please triage this failure.
-static_methods_test: RuntimeError # invoke is not a function
 subclassing_constructor_1_test: RuntimeError # Please triage this failure.
 subclassing_constructor_2_test: RuntimeError # Please triage this failure.
 subclassing_super_call_test: RuntimeError # this.get$afield is not a function
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 2061caf..acae7a0 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -221,13 +221,11 @@
 iterable_to_set_test: RuntimeError # Please triage this failure.
 list_test/01: RuntimeError # this.get$length is not a function
 list_test/none: RuntimeError # this.get$length is not a function
-main_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
 map_values2_test: RuntimeError # Please triage this failure.
 map_values3_test: RuntimeError # Please triage this failure.
 map_values4_test: RuntimeError # Please triage this failure.
 regexp/pcre_test: Crash # Stack Overflow
 shuffle_test: RuntimeError # this.get$length is not a function
-stacktrace_fromstring_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
 string_fromcharcodes_test: RuntimeError # this.get$length is not a function
 symbol_operator_test/03: RuntimeError # Please triage this failure.
 symbol_reserved_word_test/03: Pass # Please triage this failure.
diff --git a/tests/corelib/uri_normalize_path_test.dart b/tests/corelib/uri_normalize_path_test.dart
index 03c818f..f485cbe 100644
--- a/tests/corelib/uri_normalize_path_test.dart
+++ b/tests/corelib/uri_normalize_path_test.dart
@@ -45,7 +45,7 @@
   test("./../foo", "foo");
   test("./../", "");
   test("./../.", "");
-  test("foo/bar/baz/../../../../qux", "qux");
+  test("foo/bar/baz/../../../../qux", "/qux");
   test("/foo/bar/baz/../../../../qux", "/qux");
   test(".", "");
   test("..", "");
diff --git a/tests/corelib/uri_normalize_test.dart b/tests/corelib/uri_normalize_test.dart
index 91bbe10..5c2f814 100644
--- a/tests/corelib/uri_normalize_test.dart
+++ b/tests/corelib/uri_normalize_test.dart
@@ -5,10 +5,12 @@
 import "package:expect/expect.dart";
 
 testNormalizePath() {
-  test(String expected, String path) {
-    var uri = new Uri(path: path);
-    Expect.equals(expected, uri.path);
+  test(String expected, String path, {String scheme, String host}) {
+    var uri = new Uri(scheme: scheme, host: host, path: path);
     Expect.equals(expected, uri.toString());
+    if (scheme == null && host == null) {
+      Expect.equals(expected, uri.path);
+    }
   }
 
   var unreserved = "-._~0123456789"
@@ -32,9 +34,42 @@
       x.write(i.toRadixString(16));
     }
   }
-  print(x.toString().toUpperCase());
   Expect.equals(x.toString().toUpperCase(),
                 new Uri(path: x.toString()).toString().toUpperCase());
+
+  // Normalized paths.
+
+  // Full absolute path normalization for absolute paths.
+  test("/a/b/c/", "/../a/./b/z/../c/d/..");
+  test("/a/b/c/", "/./a/b/c/");
+  test("/a/b/c/", "/./../a/b/c/");
+  test("/a/b/c/", "/./../a/b/c/.");
+  test("/a/b/c/", "/./../a/b/c/z/./..");
+  test("/", "/a/..");
+  // Full absolute path normalization for URIs with scheme.
+  test("s:a/b/c/", "../a/./b/z/../c/d/..", scheme: "s");
+  test("s:a/b/c/", "./a/b/c/", scheme: "s");
+  test("s:a/b/c/", "./../a/b/c/", scheme: "s");
+  test("s:a/b/c/", "./../a/b/c/.", scheme: "s");
+  test("s:a/b/c/", "./../a/b/c/z/./..", scheme: "s");
+  test("s:/", "/a/..", scheme: "s");
+  test("s:/", "a/..", scheme: "s");
+  // Full absolute path normalization for URIs with authority.
+  test("//h/a/b/c/", "../a/./b/z/../c/d/..", host: "h");
+  test("//h/a/b/c/", "./a/b/c/", host: "h");
+  test("//h/a/b/c/", "./../a/b/c/", host: "h");
+  test("//h/a/b/c/", "./../a/b/c/.", host: "h");
+  test("//h/a/b/c/", "./../a/b/c/z/./..", host: "h");
+  test("//h/", "/a/..", host: "h");
+  test("//h/", "a/..", host: "h");
+  // Partial relative normalization (allowing leading .. or ./ for current dir).
+  test("../a/b/c/", "../a/./b/z/../c/d/..");
+  test("a/b/c/", "./a/b/c/");
+  test("../a/b/c/", "./../a/b/c/");
+  test("../a/b/c/", "./../a/b/c/.");
+  test("../a/b/c/", "./../a/b/c/z/./..");
+  test("/", "/a/..");
+  test("./", "a/..");
 }
 
 main() {
diff --git a/tests/corelib/uri_test.dart b/tests/corelib/uri_test.dart
index 7971256..834cadc 100644
--- a/tests/corelib/uri_test.dart
+++ b/tests/corelib/uri_test.dart
@@ -61,64 +61,74 @@
   }
 }
 
-testUriPerRFCs(Uri base) {
+testUriPerRFCs() {
+  final urisSample = "http://a/b/c/d;p?q";
+  Uri base = Uri.parse(urisSample);
+  testResolve(expect, relative) {
+    Expect.stringEquals(expect, base.resolve(relative).toString());
+  }
+
   // From RFC 3986.
-  Expect.stringEquals("g:h", base.resolve("g:h").toString());
-  Expect.stringEquals("http://a/b/c/g", base.resolve("g").toString());
-  Expect.stringEquals("http://a/b/c/g", base.resolve("./g").toString());
-  Expect.stringEquals("http://a/b/c/g/", base.resolve("g/").toString());
-  Expect.stringEquals("http://a/g", base.resolve("/g").toString());
-  Expect.stringEquals("http://g", base.resolve("//g").toString());
-  Expect.stringEquals("http://a/b/c/d;p?y", base.resolve("?y").toString());
-  Expect.stringEquals("http://a/b/c/g?y", base.resolve("g?y").toString());
-  Expect.stringEquals("http://a/b/c/d;p?q#s", base.resolve("#s").toString());
-  Expect.stringEquals("http://a/b/c/g#s", base.resolve("g#s").toString());
-  Expect.stringEquals("http://a/b/c/g?y#s", base.resolve("g?y#s").toString());
-  Expect.stringEquals("http://a/b/c/;x", base.resolve(";x").toString());
-  Expect.stringEquals("http://a/b/c/g;x", base.resolve("g;x").toString());
-  Expect.stringEquals("http://a/b/c/g;x?y#s",
-                      base.resolve("g;x?y#s").toString());
-  Expect.stringEquals("http://a/b/c/d;p?q", base.resolve("").toString());
-  Expect.stringEquals("http://a/b/c/", base.resolve(".").toString());
-  Expect.stringEquals("http://a/b/c/", base.resolve("./").toString());
-  Expect.stringEquals("http://a/b/", base.resolve("..").toString());
-  Expect.stringEquals("http://a/b/", base.resolve("../").toString());
-  Expect.stringEquals("http://a/b/g", base.resolve("../g").toString());
-  Expect.stringEquals("http://a/", base.resolve("../..").toString());
-  Expect.stringEquals("http://a/", base.resolve("../../").toString());
-  Expect.stringEquals("http://a/g", base.resolve("../../g").toString());
-  Expect.stringEquals("http://a/g", base.resolve("../../../g").toString());
-  Expect.stringEquals("http://a/g", base.resolve("../../../../g").toString());
-  Expect.stringEquals("http://a/g", base.resolve("/./g").toString());
-  Expect.stringEquals("http://a/g", base.resolve("/../g").toString());
-  Expect.stringEquals("http://a/b/c/g.", base.resolve("g.").toString());
-  Expect.stringEquals("http://a/b/c/.g", base.resolve(".g").toString());
-  Expect.stringEquals("http://a/b/c/g..", base.resolve("g..").toString());
-  Expect.stringEquals("http://a/b/c/..g", base.resolve("..g").toString());
-  Expect.stringEquals("http://a/b/g", base.resolve("./../g").toString());
-  Expect.stringEquals("http://a/b/c/g/", base.resolve("./g/.").toString());
-  Expect.stringEquals("http://a/b/c/g/h", base.resolve("g/./h").toString());
-  Expect.stringEquals("http://a/b/c/h", base.resolve("g/../h").toString());
-  Expect.stringEquals("http://a/b/c/g;x=1/y",
-                      base.resolve("g;x=1/./y").toString());
-  Expect.stringEquals("http://a/b/c/y", base.resolve("g;x=1/../y").toString());
-  Expect.stringEquals("http://a/b/c/g?y/./x",
-                      base.resolve("g?y/./x").toString());
-  Expect.stringEquals("http://a/b/c/g?y/../x",
-                      base.resolve("g?y/../x").toString());
-  Expect.stringEquals("http://a/b/c/g#s/./x",
-                      base.resolve("g#s/./x").toString());
-  Expect.stringEquals("http://a/b/c/g#s/../x",
-                      base.resolve("g#s/../x").toString());
-  Expect.stringEquals("http:g", base.resolve("http:g").toString());
+  testResolve("g:h",                   "g:h");
+  testResolve("http://a/b/c/g",        "g");
+  testResolve("http://a/b/c/g",        "./g");
+  testResolve("http://a/b/c/g/",       "g/");
+  testResolve("http://a/g",            "/g");
+  testResolve("http://g",              "//g");
+  testResolve("http://a/b/c/d;p?y",    "?y");
+  testResolve("http://a/b/c/g?y",      "g?y");
+  testResolve("http://a/b/c/d;p?q#s",  "#s");
+  testResolve("http://a/b/c/g#s",      "g#s");
+  testResolve("http://a/b/c/g?y#s",    "g?y#s");
+  testResolve("http://a/b/c/;x",       ";x");
+  testResolve("http://a/b/c/g;x",      "g;x");
+  testResolve("http://a/b/c/g;x?y#s",  "g;x?y#s");
+  testResolve("http://a/b/c/d;p?q",    "");
+  testResolve("http://a/b/c/",         ".");
+  testResolve("http://a/b/c/",         "./");
+  testResolve("http://a/b/",           "..");
+  testResolve("http://a/b/",           "../");
+  testResolve("http://a/b/g",          "../g");
+  testResolve("http://a/",             "../..");
+  testResolve("http://a/",             "../../");
+  testResolve("http://a/g",            "../../g");
+  testResolve("http://a/g",            "../../../g");
+  testResolve("http://a/g",            "../../../../g");
+  testResolve("http://a/g",            "/./g");
+  testResolve("http://a/g",            "/../g");
+  testResolve("http://a/b/c/g.",       "g.");
+  testResolve("http://a/b/c/.g",       ".g");
+  testResolve("http://a/b/c/g..",      "g..");
+  testResolve("http://a/b/c/..g",      "..g");
+  testResolve("http://a/b/g",          "./../g");
+  testResolve("http://a/b/c/g/",       "./g/.");
+  testResolve("http://a/b/c/g/h",      "g/./h");
+  testResolve("http://a/b/c/h",        "g/../h");
+  testResolve("http://a/b/c/g;x=1/y",  "g;x=1/./y");
+  testResolve("http://a/b/c/y",        "g;x=1/../y");
+  testResolve("http://a/b/c/g?y/./x",  "g?y/./x");
+  testResolve("http://a/b/c/g?y/../x", "g?y/../x");
+  testResolve("http://a/b/c/g#s/./x",  "g#s/./x");
+  testResolve("http://a/b/c/g#s/../x", "g#s/../x");
+  testResolve("http:g",                "http:g");
 
   // Additional tests (not from RFC 3986).
-  Expect.stringEquals("http://a/b/g;p/h;s",
-                      base.resolve("../g;p/h;s").toString());
+  testResolve("http://a/b/g;p/h;s",    "../g;p/h;s");
+
+  // Test non-URI base (no scheme, no authority, relative path).
+  base = Uri.parse("a/b/c?_#_");
+  testResolve("a/b/g?q#f", "g?q#f");
+  testResolve("../", "../../..");
+  testResolve("a/b/", ".");
+  testResolve("c", "../../c");
+
+  base = Uri.parse("s:a/b");
+  testResolve("s:/c", "../c");
 }
 
 void testResolvePath(String expected, String path) {
-  Expect.equals(expected, new Uri().resolveUri(new Uri(path: path)).path);
+  Expect.equals(expected,
+                new Uri(path: '/').resolveUri(new Uri(path: path)).path);
   Expect.equals(
       "http://localhost$expected",
       Uri.parse("http://localhost").resolveUri(new Uri(path: path)).toString());
@@ -471,11 +481,7 @@
   testResolvePath("/a/b/e/", "./a/b/./c/d/../../e/./.");
   testResolvePath("/a/b/e/", "./a/b/./c/d/../../e/././.");
 
-  final urisSample = "http://a/b/c/d;p?q";
-  Uri baseFromString = Uri.parse(urisSample);
-  testUriPerRFCs(baseFromString);
-  Uri base = Uri.parse(urisSample);
-  testUriPerRFCs(base);
+  testUriPerRFCs();
 
   Expect.stringEquals(
       "http://example.com",
diff --git a/tests/html/element_add_test.dart b/tests/html/element_add_test.dart
index 8346129..2c2ea01 100644
--- a/tests/html/element_add_test.dart
+++ b/tests/html/element_add_test.dart
@@ -62,6 +62,35 @@
       expect(fragment.children.length, equals(1));
       expect(fragment.children[0], isSpanElement);
     });
+
+    test('html interpreted in correct context', () {
+      // appendHtml, in order to sanitize, needs to create a document fragment,
+      // but it needs to be created in the right context. If we try to append
+      // table components then the document fragment needs the table context
+      // or it will fail to create them.
+      var el = new TableElement();
+      el.appendHtml('<tr><td>foo</td></tr>');
+      expect(el.children.length, 1);
+      var section = el.children.first;
+      expect(section is TableSectionElement, isTrue);
+      var row = section.children.first;
+      expect(row is TableRowElement, isTrue);
+      var item = row.children.first;
+      expect(item is TableCellElement, isTrue);
+      expect(item.innerHtml, 'foo');
+    });
+
+    test("use body context for elements that are don't support it", () {
+      // Some elements can't be used as context for createContextualFragment,
+      // often because it doesn't make any sense. So adding children to a
+      // <br> has no real effect on the page, but we can do it. But the
+      // document fragment will have to be created in the body context. Verify
+      // that this doesn't throw and that the children show up.
+      var el = new BRElement();
+      el.appendHtml("<p>Stuff</p>");
+      expect(el.children.length, 1);
+      expect(el.children[0].outerHtml, "<p>Stuff</p>");
+    });
   });
 
   group('appendText', () {
diff --git a/tests/html/filteredelementlist_test.dart b/tests/html/filteredelementlist_test.dart
new file mode 100644
index 0000000..b4110f7
--- /dev/null
+++ b/tests/html/filteredelementlist_test.dart
@@ -0,0 +1,111 @@
+library filteredelementlist_test;
+
+import 'package:unittest/unittest.dart';
+import 'package:unittest/html_config.dart';
+import 'dart:html';
+import 'dart:html_common';
+
+main() {
+  var t1 = new Text('T1'),
+      t2 = new Text('T2'),
+      t3 = new Text('T3'),
+      t4 = new Text('T4');
+
+  var d1 = new DivElement(),
+      d2 = new DivElement(),
+      d3 = new DivElement();
+
+  createTestDiv() {
+    var testDiv = new DivElement();
+    testDiv
+      ..append(t1)
+      ..append(d1)
+      ..append(t2)
+      ..append(d2)
+      ..append(t3)
+      ..append(d3)
+      ..append(t4);
+    return testDiv;
+  }
+
+  useHtmlConfiguration();
+
+  test('FilteredElementList.insert test', () {
+    var i = new DivElement();
+
+    // Insert before first element
+    var nodeList = createTestDiv();
+    var elementList = new FilteredElementList(nodeList);
+    elementList.insert(0, i);
+    expect(nodeList.childNodes[0], t1);
+    expect(nodeList.childNodes[1], i);
+    expect(nodeList.childNodes[2], d1);
+
+    // Insert in middle
+    nodeList = createTestDiv();
+    elementList = new FilteredElementList(nodeList);
+    elementList.insert(1, i);
+    expect(nodeList.childNodes[2], t2);
+    expect(nodeList.childNodes[3], i);
+    expect(nodeList.childNodes[4], d2);
+
+    // Insert before last element
+    nodeList = createTestDiv();
+    elementList = new FilteredElementList(nodeList);
+    elementList.insert(2, i);
+    expect(nodeList.childNodes[4], t3);
+    expect(nodeList.childNodes[5], i);
+    expect(nodeList.childNodes[6], d3);
+  });
+
+  test('FilteredElementList.insertAll test', () {
+    var i1 = new DivElement(),
+        i2 = new DivElement();
+
+    var it = [i1, i2];
+
+    // Insert before first element
+    var nodeList = createTestDiv();
+    var elementList = new FilteredElementList(nodeList);
+    elementList.insertAll(0, it);
+    expect(nodeList.childNodes[0], t1);
+    expect(nodeList.childNodes[1], i1);
+    expect(nodeList.childNodes[2], i2);
+    expect(nodeList.childNodes[3], d1);
+
+    // Insert in middle
+    nodeList = createTestDiv();
+    elementList = new FilteredElementList(nodeList);
+    elementList.insertAll(1, it);
+    expect(nodeList.childNodes[2], t2);
+    expect(nodeList.childNodes[3], i1);
+    expect(nodeList.childNodes[4], i2);
+    expect(nodeList.childNodes[5], d2);
+
+    // Insert before last element
+    nodeList = createTestDiv();
+    elementList = new FilteredElementList(nodeList);
+    elementList.insertAll(2, it);
+    expect(nodeList.childNodes[4], t3);
+    expect(nodeList.childNodes[5], i1);
+    expect(nodeList.childNodes[6], i2);
+    expect(nodeList.childNodes[7], d3);
+  });
+
+ test('FilteredElementList.insertAndRemove', () {
+    var emptyDiv = new DivElement();
+    var elementList = new FilteredElementList(emptyDiv);
+    expect(() => elementList[0], throwsA(isRangeError));
+    expect(() => elementList.insert(2, new BRElement()), throwsA(isRangeError));
+    var br = new BRElement();
+    elementList.insert(0, br);
+    expect(elementList.removeLast(), br);
+    elementList.add(br);
+    expect(elementList.remove(br), isTrue);
+    var br2 = new BRElement();
+    elementList.add(br);
+    expect(elementList.remove(br2), isFalse);
+    expect(elementList[0], br);
+    expect(() => elementList[1], throwsA(isRangeError));
+ });
+}
diff --git a/tests/html/node_validator_important_if_you_suppress_make_the_bug_critical_test.dart b/tests/html/node_validator_important_if_you_suppress_make_the_bug_critical_test.dart
index dfdcbdb..e5c5622 100644
--- a/tests/html/node_validator_important_if_you_suppress_make_the_bug_critical_test.dart
+++ b/tests/html/node_validator_important_if_you_suppress_make_the_bug_critical_test.dart
@@ -293,6 +293,18 @@
         '<div></div>');
   });
 
+  group('identify Uri attributes listed as attributes', () {
+    var validator = new NodeValidatorBuilder()
+      ..allowElement(
+          'a',
+          attributes: ['href']);
+  
+    testHtml('reject different-origin link',
+      validator,
+        '<a href="http://www.google.com/foo">Google-Foo</a>',
+        '<a>Google-Foo</a>');
+  });
+
   group('allowTagExtension', () {
      var validator = new NodeValidatorBuilder()
       ..allowTagExtension(
diff --git a/tests/isolate/error_at_spawn_test.dart b/tests/isolate/error_at_spawn_test.dart
new file mode 100644
index 0000000..bd17b63
--- /dev/null
+++ b/tests/isolate/error_at_spawn_test.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2015, 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 error_at_spawn;
+
+import "dart:isolate";
+import "dart:async";
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+isomain(args) {
+  throw new ArgumentError("fast error");
+}
+
+main(){
+  asyncStart();
+
+  // Capture errors from other isolate as raw messages.
+  RawReceivePort errorPort = new RawReceivePort();
+  errorPort.handler = (message) {
+    String error = message[0];
+    String stack = message[1];
+    Expect.equals(new ArgumentError("fast error").toString(), "$error");
+    errorPort.close();
+    asyncEnd();
+  };
+  
+  Isolate.spawn(isomain,
+                null,
+                // Setup handler as part of spawn.
+                errorsAreFatal: false,
+                onError: errorPort.sendPort);
+}
diff --git a/tests/isolate/error_at_spawnuri_iso.dart b/tests/isolate/error_at_spawnuri_iso.dart
new file mode 100644
index 0000000..b165051
--- /dev/null
+++ b/tests/isolate/error_at_spawnuri_iso.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2015, 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 error_at_spawnuri_iso;
+
+main() {
+  throw new ArgumentError("fast error");
+}
diff --git a/tests/isolate/error_at_spawnuri_test.dart b/tests/isolate/error_at_spawnuri_test.dart
new file mode 100644
index 0000000..1edcdf74
--- /dev/null
+++ b/tests/isolate/error_at_spawnuri_test.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2015, 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.
+//
+// OtherScripts=error_at_spawnuri_iso.dart
+
+library error_at_spawnuri;
+
+import "dart:isolate";
+import "dart:async";
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+main(){
+  asyncStart();
+
+  // Capture errors from other isolate as raw messages.
+  RawReceivePort errorPort = new RawReceivePort();
+  errorPort.handler = (message) {
+    String error = message[0];
+    String stack = message[1];
+    Expect.equals(new ArgumentError("fast error").toString(), "$error");
+    errorPort.close();
+    asyncEnd();
+  };
+  
+  Isolate.spawnUri(Uri.parse("error_at_spawnuri_iso.dart"), [],
+                   null,
+                   // Setup handler as part of spawn.
+                   errorsAreFatal: false,
+                   onError: errorPort.sendPort);
+}
diff --git a/tests/isolate/error_exit_at_spawn_test.dart b/tests/isolate/error_exit_at_spawn_test.dart
new file mode 100644
index 0000000..d26dfd2
--- /dev/null
+++ b/tests/isolate/error_exit_at_spawn_test.dart
@@ -0,0 +1,88 @@
+// Copyright (c) 2015, 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 error_exit_at_spawn;
+
+import "dart:isolate";
+import "dart:async";
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+isomain(replyPort) {
+  RawReceivePort port = new RawReceivePort();
+  port.handler = (v) {
+    switch (v) {
+      case 0:
+        replyPort.send(42);
+        break;
+      case 1:
+        throw new ArgumentError("whoops");
+      case 2:
+        throw new RangeError.value(37);
+      case 3:
+        port.close();
+    }
+  };
+  replyPort.send(port.sendPort);
+}
+
+main(){
+  asyncStart();
+  // Setup the port for communication with the newly spawned isolate.
+  RawReceivePort reply = new RawReceivePort(null);
+  SendPort sendPort;
+  int state = 0;
+  reply.handler = (port) {
+    sendPort = port;
+    port.send(state);
+    reply.handler = (v) {
+      Expect.equals(0, state);
+      Expect.equals(42, v);
+      state++;
+      sendPort.send(state);
+    };
+  };
+
+  // Capture errors from other isolate as raw messages.
+  RawReceivePort errorPort = new RawReceivePort();
+  errorPort.handler = (message) {
+    String error = message[0];
+    String stack = message[1];
+    switch (state) {
+      case 1:
+        Expect.equals(new ArgumentError("whoops").toString(), "$error");
+        state++;
+        sendPort.send(state);
+        break;
+      case 2:
+        Expect.equals(new RangeError.value(37).toString(), "$error");
+        state++;
+        sendPort.send(state);
+        reply.close();
+        errorPort.close();
+        break;
+      default:
+        throw "Bad state for error: $state: $error";
+    }
+  };
+  
+  // Get exit notifications from other isolate as raw messages.
+  RawReceivePort exitPort = new RawReceivePort();
+  exitPort.handler = (message) {
+    // onExit ports registered at spawn cannot have a particular message
+    // associated.
+    Expect.equals(null, message);
+    // Only exit after sending the termination message.
+    Expect.equals(3, state);
+    exitPort.close();
+    asyncEnd();
+  };
+  
+  Isolate.spawn(isomain,
+                reply.sendPort,
+                // Setup handlers as part of spawn.
+                errorsAreFatal: false,
+                onError: errorPort.sendPort,
+                onExit: exitPort.sendPort);
+}
diff --git a/tests/isolate/error_exit_at_spawnuri_iso.dart b/tests/isolate/error_exit_at_spawnuri_iso.dart
new file mode 100644
index 0000000..4c968f8
--- /dev/null
+++ b/tests/isolate/error_exit_at_spawnuri_iso.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2015, 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 error_exit_at_spawnuri_iso;
+
+import "dart:isolate";
+
+main(args, replyPort) {
+  RawReceivePort port = new RawReceivePort();
+  port.handler = (v) {
+    switch (v) {
+      case 0:
+        replyPort.send(42);
+        break;
+      case 1:
+        throw new ArgumentError("whoops");
+      case 2:
+        throw new RangeError.value(37);
+      case 3:
+        port.close();
+    }
+  };
+  replyPort.send(port.sendPort);
+}
diff --git a/tests/isolate/error_exit_at_spawnuri_test.dart b/tests/isolate/error_exit_at_spawnuri_test.dart
new file mode 100644
index 0000000..27446e0
--- /dev/null
+++ b/tests/isolate/error_exit_at_spawnuri_test.dart
@@ -0,0 +1,72 @@
+// Copyright (c) 2015, 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.
+//
+// OtherScripts=error_exit_at_spawnuri_iso.dart
+
+library error_exit_at_spawnuri;
+
+import "dart:isolate";
+import "dart:async";
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+main(){
+  asyncStart();
+  // Setup the port for communication with the newly spawned isolate.
+  RawReceivePort reply = new RawReceivePort(null);
+  SendPort sendPort;
+  int state = 0;
+  reply.handler = (port) {
+    sendPort = port;
+    port.send(state);
+    reply.handler = (v) {
+      Expect.equals(0, state);
+      Expect.equals(42, v);
+      state++;
+      sendPort.send(state);
+    };
+  };
+
+  // Capture errors from other isolate as raw messages.
+  RawReceivePort errorPort = new RawReceivePort();
+  errorPort.handler = (message) {
+    String error = message[0];
+    String stack = message[1];
+    switch (state) {
+      case 1:
+        Expect.equals(new ArgumentError("whoops").toString(), "$error");
+        state++;
+        sendPort.send(state);
+        break;
+      case 2:
+        Expect.equals(new RangeError.value(37).toString(), "$error");
+        state++;
+        sendPort.send(state);
+        reply.close();
+        errorPort.close();
+        break;
+      default:
+        throw "Bad state for error: $state: $error";
+    }
+  };
+  
+  // Get exit notifications from other isolate as raw messages.
+  RawReceivePort exitPort = new RawReceivePort();
+  exitPort.handler = (message) {
+    // onExit ports registered at spawn cannot have a particular message
+    // associated.
+    Expect.equals(null, message);
+    // Only exit after sending the termination message.
+    Expect.equals(3, state);
+    exitPort.close();
+    asyncEnd();
+  };
+  
+  Isolate.spawnUri(Uri.parse("error_exit_at_spawnuri_iso.dart"), [],
+                   reply.sendPort,
+                   // Setup handlers as part of spawn.
+                   errorsAreFatal: false,
+                   onError: errorPort.sendPort,
+                   onExit: exitPort.sendPort);
+}
diff --git a/tests/isolate/exit_at_spawn_test.dart b/tests/isolate/exit_at_spawn_test.dart
new file mode 100644
index 0000000..a03b565
--- /dev/null
+++ b/tests/isolate/exit_at_spawn_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2015, 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 exit_at_spawn;
+
+import "dart:isolate";
+import "dart:async";
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+isomain(args) {}
+
+main(){
+  asyncStart();
+
+  RawReceivePort exitPort = new RawReceivePort();
+  exitPort.handler = (message) {
+    Expect.equals(null, message);
+    exitPort.close();
+    asyncEnd();
+  };
+  
+  Isolate.spawn(isomain,
+                null,
+                // Setup handler as part of spawn.
+                errorsAreFatal: false,
+                onExit: exitPort.sendPort);
+}
diff --git a/tests/isolate/exit_at_spawnuri_iso.dart b/tests/isolate/exit_at_spawnuri_iso.dart
new file mode 100644
index 0000000..9bc892e
--- /dev/null
+++ b/tests/isolate/exit_at_spawnuri_iso.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2015, 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 exit_at_spawn_iso;
+
+main() {}
diff --git a/tests/isolate/exit_at_spawnuri_test.dart b/tests/isolate/exit_at_spawnuri_test.dart
new file mode 100644
index 0000000..a3c08cc
--- /dev/null
+++ b/tests/isolate/exit_at_spawnuri_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2015, 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.
+//
+// OtherScripts=exit_at_spawnuri_iso.dart
+
+library exit_at_spawn;
+
+import "dart:isolate";
+import "dart:async";
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+main(){
+  asyncStart();
+
+  RawReceivePort exitPort = new RawReceivePort();
+  exitPort.handler = (message) {
+    Expect.equals(null, message);
+    exitPort.close();
+    asyncEnd();
+  };
+  
+  Isolate.spawnUri(Uri.parse("exit_at_spawnuri_iso.dart"), [],
+                   null,
+                   // Setup handler as part of spawn.
+                   errorsAreFatal: false,
+                   onExit: exitPort.sendPort);
+}
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index ca463e5..a683b66 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -49,12 +49,18 @@
 issue_21398_parent_isolate1_test: SkipByDesign # Test uses a ".dart" URI.
 issue_21398_parent_isolate2_test: SkipByDesign # Test uses a ".dart" URI.
 function_send1_test: SkipByDesign   # Test uses a ".dart" URI.
+error_exit_at_spawnuri_test: SkipByDesign  # Test uses a ".dart" URI.
+error_at_spawnuri_test: SkipByDesign  # Test uses a ".dart" URI.
+exit_at_spawnuri_test: SkipByDesign  # Test uses a ".dart" URI.
 message3_test/constList: RuntimeError # Issue 21817
 message3_test/constList_identical: RuntimeError # Issue 21817
 message3_test/constMap: RuntimeError  # Issue 21817
 message3_test/constInstance: RuntimeError # Issue 21817
 browser/issue_12474_test: CompileTimeError # Issue 22529
 enum_const_test/02: RuntimeError # Issue 21817
+error_exit_at_spawn_test: Fail, Timeout  # Issue 23876
+error_at_spawn_test: Fail, Timeout  # Issue 23876
+exit_at_spawn_test: Fail, Timeout  # Issue 23876
 
 [ $compiler == dart2js && $jscl ]
 spawn_uri_test: SkipByDesign # Loading another file is not supported in JS shell
@@ -117,6 +123,13 @@
 bool_from_environment_default_value_test: Skip
 int_from_environment_default_value_test: Skip
 string_from_environment_default_value_test: Skip
+error_exit_at_spawn_test: SkipByDesign  # 13921 Dom isolates don't support spawnFunction
+error_at_spawn_test: SkipByDesign  # 13921 Dom isolates don't support spawnFunction
+exit_at_spawn_test: SkipByDesign  # 13921 Dom isolates don't support spawnFunction
+error_exit_at_spawnuri_test: SkipByDesign  # 13921 Dom isolates don't support spawnFunction
+error_at_spawnuri_test: SkipByDesign  # 13921 Dom isolates don't support spawnFunction
+exit_at_spawnuri_test: SkipByDesign  # 13921 Dom isolates don't support spawnFunction
+
 
 [ $compiler == dartanalyzer || $compiler == dart2analyzer ]
 browser/typed_data_message_test: StaticWarning
@@ -126,55 +139,9 @@
 package_root_test: SkipByDesign # Uses dart:io.
 
 [ $compiler == dart2js && $cps_ir ]
-bool_from_environment_default_value_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-capability_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-compile_time_error_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-count_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-cross_isolate_message_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_in_isolate2_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-deferred_in_isolate_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-function_send_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-handle_error2_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-handle_error3_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-handle_error_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-illegal_msg_function_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-illegal_msg_mirror_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-int_from_environment_default_value_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-isolate_complex_messages_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-isolate_current_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-isolate_import_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-issue_22778_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-kill2_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-kill_self_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-kill_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mandel_isolate_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-message2_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-message3_test/byteBuffer: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-message3_test/fun: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-message3_test/int32x4: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-message3_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-message_enum_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-message_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mint_maker_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-nested_spawn2_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-nested_spawn_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-object_leak_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-ondone_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-pause_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-ping_pause_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-ping_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-port_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-raw_port_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-request_reply_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-simple_message_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-spawn_function_custom_class_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-spawn_function_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-spawn_uri_missing_from_isolate_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-spawn_uri_missing_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-stacktrace_message_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-start_paused_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-static_function_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-string_from_environment_default_value_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-timer_isolate_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-typed_message_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-unresolved_ports_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
+deferred_in_isolate2_test: Crash # (lib.f()): deferred access is not implemented
+isolate_current_test: RuntimeError # Please triage this failure.
+message3_test/byteBuffer: RuntimeError # Please triage this failure.
+message3_test/fun: RuntimeError # Please triage this failure.
+message3_test/int32x4: RuntimeError # Please triage this failure.
+message3_test/none: RuntimeError # Please triage this failure.
diff --git a/tests/language/conditional_method_invocation_test.dart b/tests/language/conditional_method_invocation_test.dart
index f6844a1..cfe0545 100644
--- a/tests/language/conditional_method_invocation_test.dart
+++ b/tests/language/conditional_method_invocation_test.dart
@@ -4,8 +4,6 @@
 
 // Verify semantics of the ?. operator when it is used to invoke a method.
 
-// SharedOptions=--enable-null-aware-operators
-
 import "package:expect/expect.dart";
 import "conditional_access_helper.dart" as h;
 
diff --git a/tests/language/conditional_property_access_test.dart b/tests/language/conditional_property_access_test.dart
index 0a58a53..ca44f2d 100644
--- a/tests/language/conditional_property_access_test.dart
+++ b/tests/language/conditional_property_access_test.dart
@@ -5,8 +5,6 @@
 // Verify semantics of the ?. operator when it does not appear on the LHS of an
 // assignment.
 
-// SharedOptions=--enable-null-aware-operators
-
 import "package:expect/expect.dart";
 import "conditional_access_helper.dart" as h;
 
diff --git a/tests/language/conditional_property_assignment_test.dart b/tests/language/conditional_property_assignment_test.dart
index 6b34821..87e2bd0 100644
--- a/tests/language/conditional_property_assignment_test.dart
+++ b/tests/language/conditional_property_assignment_test.dart
@@ -5,8 +5,6 @@
 // Verify semantics of the ?. operator when it appears on the LHS of an
 // assignment.
 
-// SharedOptions=--enable-null-aware-operators
-
 import "package:expect/expect.dart";
 import "conditional_access_helper.dart" as h;
 
diff --git a/tests/language/conditional_property_increment_decrement_test.dart b/tests/language/conditional_property_increment_decrement_test.dart
index 03b48f8..6858a69 100644
--- a/tests/language/conditional_property_increment_decrement_test.dart
+++ b/tests/language/conditional_property_increment_decrement_test.dart
@@ -5,8 +5,6 @@
 // Verify semantics of the ?. operator when it appears in a postincrement or
 // preincrement expression (or a postdecrement or predecrement expression).
 
-// SharedOptions=--enable-null-aware-operators
-
 import "package:expect/expect.dart";
 
 class C {
diff --git a/tests/language/if_null_assignment_behavior_test.dart b/tests/language/if_null_assignment_behavior_test.dart
index ca2ce93..bf01dbe 100644
--- a/tests/language/if_null_assignment_behavior_test.dart
+++ b/tests/language/if_null_assignment_behavior_test.dart
@@ -5,8 +5,6 @@
 // Verify semantics of the ??= operator, including order of operations, by
 // keeping track of the operations performed.
 
-// SharedOptions=--enable-null-aware-operators
-
 import "package:expect/expect.dart";
 import "if_null_assignment_helper.dart" as h;
 
diff --git a/tests/language/if_null_assignment_static_test.dart b/tests/language/if_null_assignment_static_test.dart
index 03739c4..9a651cf 100644
--- a/tests/language/if_null_assignment_static_test.dart
+++ b/tests/language/if_null_assignment_static_test.dart
@@ -5,8 +5,6 @@
 // Verify that the static type of a ??= b is the least upper bound of the
 // static types of a and b.
 
-// SharedOptions=--enable-null-aware-operators
-
 import "package:expect/expect.dart";
 
 // Determine whether the VM is running in checked mode.
diff --git a/tests/language/if_null_behavior_test.dart b/tests/language/if_null_behavior_test.dart
index 4fcbfa7..c023d89 100644
--- a/tests/language/if_null_behavior_test.dart
+++ b/tests/language/if_null_behavior_test.dart
@@ -7,8 +7,6 @@
 // static type of e is the least upper bound of the static type of e1 and the
 // static type of e2.
 
-// SharedOptions=--enable-null-aware-operators
-
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/language/if_null_evaluation_order_test.dart b/tests/language/if_null_evaluation_order_test.dart
index bc067e1..9ebdafd 100644
--- a/tests/language/if_null_evaluation_order_test.dart
+++ b/tests/language/if_null_evaluation_order_test.dart
@@ -8,8 +8,6 @@
 // Therefore, e1 should be evaluated first; if it is non-null, e2 should not
 // be evaluated.
 
-// SharedOptions=--enable-null-aware-operators
-
 import "package:expect/expect.dart";
 
 void bad() {
diff --git a/tests/language/if_null_precedence_test.dart b/tests/language/if_null_precedence_test.dart
index 32d49ce..fcce3d4 100644
--- a/tests/language/if_null_precedence_test.dart
+++ b/tests/language/if_null_precedence_test.dart
@@ -4,8 +4,6 @@
 
 // Verify that '??' binds tighter than '?:' and less tightly than '||'.
 
-// SharedOptions=--enable-null-aware-operators
-
 import "package:expect/expect.dart";
 
 assertionError(e) => e is AssertionError;
diff --git a/tests/language/language.status b/tests/language/language.status
index 6898b8c..44d45bf 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -96,3 +96,7 @@
 
 [ $compiler == none && $runtime == vm && ( $arch == simarm || $arch == arm || $arch == simarmv5te || $arch == armv5te || $arch == simarm64 || $arch == arm64 || $arch == simmips || $arch == mips) ]
 vm/load_to_load_unaligned_forwarding_vm_test: Pass, Crash # Unaligned offset. Issue 22151
+
+[ $compiler == none && $runtime == dartium ]
+mixin_super_test: Fail # Can't pass VMOptions to dartium.
+mixin_super_bound2_test: Fail # Can't pass VMOptions to dartium.
diff --git a/tests/language/language_analyzer.status b/tests/language/language_analyzer.status
index d000c34..b86fe4b 100644
--- a/tests/language/language_analyzer.status
+++ b/tests/language/language_analyzer.status
@@ -350,6 +350,9 @@
 mixin_with_two_implicit_constructors_test: StaticWarning
 mixin_invalid_bound_test/none: StaticWarning # legitimate StaticWarning, cannot be annotated
 mixin_invalid_bound2_test/none: StaticWarning # legitimate StaticWarning, cannot be annotated
+mixin_super_bound_test: StaticWarning # legitimate StaticWarning, cannot be annotated
+mixin_super_bound2_test: CompileTimeError # Issue 23772
+mixin_super_test: CompileTimeError # Issue 23772
 named_constructor_test/01: StaticWarning
 named_constructor_test/03: StaticWarning
 named_parameters2_test: StaticWarning
diff --git a/tests/language/language_analyzer2.status b/tests/language/language_analyzer2.status
index fbd47b1..b94754d 100644
--- a/tests/language/language_analyzer2.status
+++ b/tests/language/language_analyzer2.status
@@ -7,6 +7,8 @@
 # Runtime negative test. No static errors or warnings.
 closure_call_wrong_argument_count_negative_test: skip
 
+symbol_conflict_test: CompileTimeError # 23870
+
 enum_syntax_test/02: Fail # 21649
 enum_syntax_test/03: Fail # 21649
 enum_syntax_test/04: Fail # 21649
@@ -295,6 +297,9 @@
 mixin_with_two_implicit_constructors_test: StaticWarning
 mixin_invalid_bound_test/none: StaticWarning # legitimate StaticWarning, cannot be annotated
 mixin_invalid_bound2_test/none: StaticWarning # legitimate StaticWarning, cannot be annotated
+mixin_super_bound_test: StaticWarning # legitimate StaticWarning, cannot be annotated
+mixin_super_bound2_test: CompileTimeError # Issue 23772
+mixin_super_test: CompileTimeError # Issue 23772
 named_constructor_test/01: StaticWarning
 named_constructor_test/03: StaticWarning
 named_parameters2_test: StaticWarning
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 0a9e2cf..b6ce534 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -44,6 +44,8 @@
 mixin_forwarding_constructor4_test/03: MissingCompileTimeError # Issue 15101
 mixin_super_constructor_named_test/01: Fail # Issue 15101
 mixin_super_constructor_positionals_test/01: Fail # Issue 15101
+mixin_super_test: CompileTimeError # Issue 23773
+mixin_super_bound2_test: CompileTimeError # Issue 23773
 
 ref_before_declaration_test/00: MissingCompileTimeError
 ref_before_declaration_test/01: MissingCompileTimeError
@@ -135,6 +137,7 @@
 mixin_mixin6_test: Fail # Issue 12605
 mixin_mixin_bound_test: RuntimeError # Issue 12605
 mixin_mixin_bound2_test: RuntimeError # Issue 12605
+symbol_conflict_test: RuntimeError # Issue 23857
 
 [ $compiler == dart2js ]
 async_await_syntax_test/a05h: Fail # 23716
@@ -343,56 +346,55 @@
 await_postfix_expr_test: Crash # (test()async{Expect....  cannot handle async/sync*/async* functions
 await_regression_test: Crash # (main()async{testNes...  cannot handle async/sync*/async* functions
 await_test: Crash # (others()async{var a...  cannot handle async/sync*/async* functions
-cha_deopt1_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-cha_deopt2_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-cha_deopt3_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-closure_cycles_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
+cha_deopt1_test: Crash # (d.make_u()): deferred access is not implemented
+cha_deopt2_test: Crash # (d.make_u()): deferred access is not implemented
+cha_deopt3_test: Crash # (d.make_u()): deferred access is not implemented
 closure_in_constructor_test: Crash # Invalid argument(s)
 closure_type_variables_test: Crash # Invalid argument(s)
-const_evaluation_test/01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
+const_evaluation_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
 constructor12_test: RuntimeError # Please triage this failure.
 crash_6725_test/01: Crash # The null object does not have a getter '_element'.
 custom_await_stack_trace_test: Crash # (main()async{try {va...  cannot handle async/sync*/async* functions
-deferred_closurize_load_library_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constant_list_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constraints_constants_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-deferred_constraints_constants_test/reference_after_load: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-deferred_constraints_type_annotation_test/as_operation: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constraints_type_annotation_test/catch_check: Crash # The null object does not have a getter '_element'.
-deferred_constraints_type_annotation_test/is_check: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constraints_type_annotation_test/new: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constraints_type_annotation_test/new_before_load: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constraints_type_annotation_test/new_generic1: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constraints_type_annotation_test/new_generic2: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constraints_type_annotation_test/new_generic3: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constraints_type_annotation_test/none: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constraints_type_annotation_test/static_method: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constraints_type_annotation_test/type_annotation1: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constraints_type_annotation_test/type_annotation_generic1: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constraints_type_annotation_test/type_annotation_generic2: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constraints_type_annotation_test/type_annotation_generic3: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constraints_type_annotation_test/type_annotation_generic4: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constraints_type_annotation_test/type_annotation_non_deferred: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constraints_type_annotation_test/type_annotation_null: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_constraints_type_annotation_test/type_annotation_top_level: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_function_type_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_global_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_inlined_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_load_constants_test/none: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_load_inval_code_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_load_library_wrong_args_test/none: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_mixin_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_no_such_method_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_not_loaded_check_test: RuntimeError # Please triage this failure.
-deferred_only_constant_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_optimized_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
+deferred_call_empty_before_load_test: Crash # (lib1.thefun()): deferred access is not implemented
+deferred_closurize_load_library_test: Crash # (lib.trueVar): deferred access is not implemented
+deferred_constant_list_test: Crash # (lib.finalConstList): deferred access is not implemented
+deferred_constraints_constants_test/none: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_constants_test/reference_after_load: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/as_operation: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/catch_check: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/is_check: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/new: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/new_before_load: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/new_generic1: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/new_generic2: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/new_generic3: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/none: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/static_method: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/type_annotation1: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/type_annotation_generic1: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/type_annotation_generic2: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/type_annotation_generic3: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/type_annotation_generic4: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/type_annotation_non_deferred: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/type_annotation_null: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_constraints_type_annotation_test/type_annotation_top_level: Crash # (lib.constantInstance): deferred access is not implemented
+deferred_function_type_test: Crash # (lib.runTest()): deferred access is not implemented
+deferred_global_test: Crash # (lib.finalConstGlobal): deferred access is not implemented
+deferred_inlined_test: Crash # (lib.foo()): deferred access is not implemented
+deferred_load_constants_test/none: Crash # (foo.c): deferred access is not implemented
+deferred_load_inval_code_test: Crash # (d.foo()): deferred access is not implemented
+deferred_load_library_wrong_args_test/none: RuntimeError # Y.loadLibrary is not a function
+deferred_mixin_test: RuntimeError # X.loadLibrary is not a function
+deferred_no_such_method_test: RuntimeError # D.loadLibrary is not a function
+deferred_not_loaded_check_test: Crash # (lib.closure(sideEffect())): deferred access is not implemented
+deferred_only_constant_test: Crash # (lib.constant): deferred access is not implemented
+deferred_optimized_test: Crash # (lib.foo()): deferred access is not implemented
 deferred_redirecting_factory_test: Crash # (test()async{await t...  cannot handle async/sync*/async* functions
-deferred_regression_22995_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_shadow_load_library_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_shared_and_unshared_classes_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-deferred_static_seperate_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-dynamic_prefix_core_test/01: Crash # The null object does not have a getter 'name'.
-enum_mirror_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
+deferred_regression_22995_test: Crash # (lib.foofoo()): deferred access is not implemented
+deferred_shadow_load_library_test: Crash # (lib.trueVar): deferred access is not implemented
+deferred_shared_and_unshared_classes_test: Crash # (lib2.foo()): deferred access is not implemented
+deferred_static_seperate_test: Crash # (lib1.x): deferred access is not implemented
+enum_mirror_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
 final_super_field_set_test/01: RuntimeError # Please triage this failure.
 flatten_test/01: Crash # (test()async{int x=await new Derived<int>();}): cannot handle async/sync*/async* functions
 flatten_test/02: Crash # (test()async{Future<int> f()async=>new Derived<int>();}): cannot handle async/sync*/async* functions
@@ -424,27 +426,14 @@
 if_null_assignment_static_test/38: RuntimeError # v0.get$a is not a function
 if_null_assignment_static_test/39: RuntimeError # v0.get$b is not a function
 if_null_assignment_static_test/40: RuntimeError # v0.get$a is not a function
-import_self_test/01: Crash # The null object does not have a getter 'name'.
 infinite_switch_label_test: Crash # (switch (target){l0:...  continue to a labeled switch case
-instance_creation_in_function_annotation_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
+instance_creation_in_function_annotation_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
 instanceof4_test/01: RuntimeError # Please triage this failure.
 invocation_mirror_invoke_on_test: RuntimeError # Please triage this failure.
 invocation_mirror_test: Crash # (super[37]=42): visitUnresolvedSuperIndexSet
-issue_1751477_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
+issue_1751477_test: RuntimeError # O.loadLibrary is not a function
 large_class_declaration_test: Crash # Stack Overflow
 list_test: RuntimeError # Please triage this failure.
-main_test/01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-main_test/02: RuntimeError # receiver._addHashTableEntry$2 is not a function
-main_test/04: RuntimeError # receiver._addHashTableEntry$2 is not a function
-main_test/05: RuntimeError # receiver._addHashTableEntry$2 is not a function
-main_test/20: RuntimeError # receiver._addHashTableEntry$2 is not a function
-main_test/21: RuntimeError # receiver._addHashTableEntry$2 is not a function
-main_test/22: RuntimeError # receiver._addHashTableEntry$2 is not a function
-main_test/41: RuntimeError # receiver._addHashTableEntry$2 is not a function
-main_test/42: RuntimeError # receiver._addHashTableEntry$2 is not a function
-main_test/43: RuntimeError # receiver._addHashTableEntry$2 is not a function
-main_test/44: RuntimeError # receiver._addHashTableEntry$2 is not a function
-main_test/45: RuntimeError # receiver._addHashTableEntry$2 is not a function
 many_overridden_no_such_method_test: RuntimeError # Please triage this failure.
 mixin_type_parameters_mixin_extends_test: Crash # The null object does not have a getter '_element'.
 mixin_type_parameters_mixin_test: Crash # The null object does not have a getter '_element'.
@@ -452,22 +441,19 @@
 mixin_type_parameters_super_test: Crash # The null object does not have a getter '_element'.
 nested_switch_label_test: Crash # (switch (target){out...  continue to a labeled switch case
 no_such_method_test: RuntimeError # Please triage this failure.
-null_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
+null_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
 overridden_no_such_method_test: RuntimeError # Please triage this failure.
-prefix12_negative_test: Crash # The null object does not have a getter 'name'.
-prefix2_negative_test: Crash # The null object does not have a getter 'name'.
-private_access_test/02: Crash # The null object does not have a getter 'name'.
-redirecting_factory_reflection_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-regress_18535_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
+redirecting_factory_reflection_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+regress_18535_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
 regress_22438_test: Crash # (main()async{var err...  cannot handle async/sync*/async* functions
-regress_22443_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
+regress_22443_test: RuntimeError # M.loadLibrary is not a function
 regress_22445_test: Crash # (main()async{var err...  cannot handle async/sync*/async* functions
 regress_22579_test: Crash # (main()async{var err...  cannot handle async/sync*/async* functions
 regress_22728_test: Crash # (main()async{bool fa...  cannot handle async/sync*/async* functions
 regress_22777_test: Crash # (test()async{try {te...  cannot handle async/sync*/async* functions
 regress_22936_test/01: Crash # The null object does not have a getter '_element'.
 regress_22936_test/none: Crash # The null object does not have a getter '_element'.
-regress_23408_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
+regress_23408_test: RuntimeError # G.loadLibrary is not a function
 regress_23498_test: Crash # (main()async{var err...  cannot handle async/sync*/async* functions
 regress_23500_test/01: Crash # (main()async{var err...  cannot handle async/sync*/async* functions
 regress_23500_test/02: Crash # (main()async{var err...  cannot handle async/sync*/async* functions
@@ -493,6 +479,7 @@
 sync_generator2_test/none: Crash # (sync()sync*{yield sync;}): cannot handle async/sync*/async* functions
 sync_generator3_test/test1: Crash # (f()sync*{try {yield...  cannot handle async/sync*/async* functions
 sync_generator3_test/test2: Crash # (g()sync*{try {yield...  cannot handle async/sync*/async* functions
+syncstar_less_than_test: Crash # (Iterable<int> foo()...  cannot handle async/sync*/async* functions
 syncstar_yield_test/copyParameters: Crash # (Iterable<int> foo3(...  cannot handle async/sync*/async* functions
 syncstar_yield_test/none: Crash # (Iterable<int> foo3(...  cannot handle async/sync*/async* functions
 syncstar_yieldstar_test: Crash # (main()async{Expect....  cannot handle async/sync*/async* functions
diff --git a/tests/language/mixin_illegal_object_test.dart b/tests/language/mixin_illegal_object_test.dart
index f3dae74..8b5340f 100644
--- a/tests/language/mixin_illegal_object_test.dart
+++ b/tests/language/mixin_illegal_object_test.dart
@@ -2,11 +2,15 @@
 // 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.
 
-class C0 extends Object
+// Object has a non-trivial constructor and hence cannot be used as mixin.
+
+class S { }
+
+class C0 extends S
 with Object                       /// 01: compile-time error
 { }
 
-class C1 = Object with Object;  /// 02: compile-time error
+class C1 = S with Object;         /// 02: compile-time error
 
 main() {
   new C0();
diff --git a/tests/language/mixin_super_bound2_test.dart b/tests/language/mixin_super_bound2_test.dart
new file mode 100644
index 0000000..543a029
--- /dev/null
+++ b/tests/language/mixin_super_bound2_test.dart
@@ -0,0 +1,65 @@
+// Copyright (c) 2015, 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.
+// VMOptions=--supermixin
+
+import "package:expect/expect.dart";
+
+bool inCheckedMode() {
+  try {
+    var i = 42;
+    String s = i;
+  } on TypeError catch (e) {
+    return true;
+  }
+  return false;
+}
+
+class MS<U, V extends U> { }
+
+class M<U extends V, V> extends MS<V, U> { }
+
+class NS<U extends V, V> { }
+
+class N<U, V extends U> extends NS<V, U> { }
+
+class S<T> { }
+
+class MNA<U, V, W> extends S<List<U>>
+    with M<List<V>, List<U>>, N<List<W>, List<W>> { }
+
+class MNA2<U, V, W> = S<List<U>>
+    with M<List<W>, List<W>>, N<List<U>, List<V>>;
+
+class MNA3<U, V, W> extends S<List<U>>
+    with MNA<U, V, W>, MNA2<List<U>, List<V>, List<W>> { }
+
+class MNA4<U, V, W> = S<List<U>>
+    with MNA<U, V, W>, MNA2<List<U>, List<V>, List<W>>;
+
+main() {
+  new MNA<num, int, bool>();
+  new MNA2<num, int, bool>();
+  new MNA3<num, int, bool>();
+  new MNA4<num, int, bool>();
+  if (inCheckedMode()) {
+    // Type parameter U of M must extend type parameter V, but
+    // type argument List<num> is not a subtype of List<int>.
+    Expect.throws(() => new MNA<int, num, bool>(), (e) => e is TypeError);
+    // Type parameter V of N must extend type parameter U, but
+    // type argument List<num> is not a subtype of List<int>.
+    Expect.throws(() => new MNA2<int, num, bool>(), (e) => e is TypeError);
+    // Type parameter V of N must extend type parameter U, but
+    // type argument List<List<num>> is not a subtype of List<List<int>>.
+    Expect.throws(() => new MNA3<int, num, bool>(), (e) => e is TypeError);
+    // Type parameter V of N must extend type parameter U, but
+    // type argument List<List<num>> is not a subtype of List<List<int>>.
+    Expect.throws(() => new MNA4<int, num, bool>(), (e) => e is TypeError);
+  } else {
+    new MNA<int, num, bool>();
+    new MNA2<int, num, bool>();
+    new MNA3<int, num, bool>();
+    new MNA4<int, num, bool>();
+  }
+}
+
diff --git a/tests/language/mixin_super_bound_test.dart b/tests/language/mixin_super_bound_test.dart
new file mode 100644
index 0000000..1e8ef80
--- /dev/null
+++ b/tests/language/mixin_super_bound_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2015, 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";
+
+bool inCheckedMode() {
+  try {
+    var i = 42;
+    String s = i;
+  } on TypeError catch (e) {
+    return true;
+  }
+  return false;
+}
+
+class M<U extends V, V> { }
+
+class N<U, V extends U> { }
+
+class S<T> { }
+
+class MNA<U, V, W> extends S<List<U>> with M<V, U>, N<List<W>, List<W>> { }
+
+class MNA2<U, V, W> = S<List<U>> with M<V, U>, N<List<W>, List<W>>;
+
+main() {
+  new MNA<num, int, bool>();
+  new MNA2<num, int, bool>();
+  if (inCheckedMode()) {
+    // Type parameter U of M must extend type parameter V, but
+    // type argument num is not a subtype of int.
+    Expect.throws(() => new MNA<int, num, bool>(), (e) => e is TypeError);
+    // Type parameter U of M must extend type parameter V, but
+    // type argument num is not a subtype of int.
+    Expect.throws(() => new MNA2<int, num, bool>(), (e) => e is TypeError);
+  } else {
+    new MNA<int, num, bool>();
+    new MNA2<int, num, bool>();
+  }
+}
+
diff --git a/tests/language/mixin_super_test.dart b/tests/language/mixin_super_test.dart
new file mode 100644
index 0000000..85e53e7
--- /dev/null
+++ b/tests/language/mixin_super_test.dart
@@ -0,0 +1,81 @@
+// Copyright (c) 2015, 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.
+// VMOptions=--supermixin
+
+import "package:expect/expect.dart";
+
+class MS<T> {
+  foo() {
+    return "MS<$T>.foo\n";
+  }
+}
+
+class M<T> extends MS<List<T>> {
+  foo() {
+    return super.foo() + "M<$T>.foo\n";
+  }
+}
+
+class NS<T> {
+  foo() {
+    return "NS<$T>.foo\n";
+  }
+}
+
+class N<T> extends NS<List<T>> {
+  foo() {
+    return super.foo() + "N<$T>.foo\n";
+  }
+}
+
+class S<T> {
+  foo() {
+    return "S<$T>.foo\n";
+  }
+}
+
+class SM<U, V> = S<List<U>> with M<Map<U, V>>;
+
+class MNA1<U, V, W> extends S<List<U>> with M<Map<U, V>>, N<W> {
+  foo() {
+    return super.foo() + "MNA1<$U, $V, $W>.foo\n";
+  }
+}
+
+class MNA2<U, V, W> extends SM<U, V> with N<W> {
+  foo() {
+    return super.foo() + "MNA2<$U, $V, $W>.foo\n";
+  }
+}
+
+class MNA3<U, V, W> extends S<List<U>> with SM<U, V>, N<W> {
+  foo() {
+    return super.foo() + "MNA3<$U, $V, $W>.foo\n";
+  }
+}
+
+main(){
+  Expect.equals("MS<List<double>>.foo\n"
+                "M<double>.foo\n",
+                new M<double>().foo());
+  Expect.equals("S<List<int>>.foo\n"
+                "M<Map<int, String>>.foo\n",
+                new SM<int, String>().foo());
+  Expect.equals("S<List<int>>.foo\n"
+                "M<Map<int, String>>.foo\n"
+                "N<bool>.foo\n"
+                "MNA1<int, String, bool>.foo\n",
+                new MNA1<int, String, bool>().foo());
+  Expect.equals("S<List<int>>.foo\n"
+                "M<Map<int, String>>.foo\n"
+                "N<bool>.foo\n"
+                "MNA2<int, String, bool>.foo\n",
+                new MNA2<int, String, bool>().foo());
+  Expect.equals("S<List<int>>.foo\n"
+                "M<Map<int, String>>.foo\n"
+                "N<bool>.foo\n"
+                "MNA3<int, String, bool>.foo\n",
+                new MNA3<int, String, bool>().foo());
+}
+
diff --git a/tests/language/nullaware_opt_test.dart b/tests/language/nullaware_opt_test.dart
index 625ccc9..05b57e8 100644
--- a/tests/language/nullaware_opt_test.dart
+++ b/tests/language/nullaware_opt_test.dart
@@ -2,7 +2,6 @@
 // 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.
 //
-// SharedOptions=--enable-null-aware-operators
 // VMOptions=--optimization_counter_threshold=5
 //
 // Basic null-aware operator test that invokes the optimizing compiler.
diff --git a/tests/language/super_conditional_operator_test.dart b/tests/language/super_conditional_operator_test.dart
index 83914ee..100a9a4 100644
--- a/tests/language/super_conditional_operator_test.dart
+++ b/tests/language/super_conditional_operator_test.dart
@@ -4,8 +4,6 @@
 
 // Verify that the ?. operator cannot be used with "super".
 
-// SharedOptions=--enable-null-aware-operators
-
 class B {
   B();
   B.namedConstructor();
diff --git a/tests/language/symbol_conflict_test.dart b/tests/language/symbol_conflict_test.dart
new file mode 100644
index 0000000..d896c9e
--- /dev/null
+++ b/tests/language/symbol_conflict_test.dart
@@ -0,0 +1,2810 @@
+// Copyright (c) 2015, 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.
+
+// Tests that const symbols are only equal to the symbol they represent.
+
+import 'package:expect/expect.dart';
+
+class A {
+  noSuchMethod(invocation) {
+    Expect.isFalse(oneAndTwoCharacterSymbols.contains(invocation.memberName));
+  }
+}
+
+main() {
+  var a = new A();
+  a.foo = 23;
+  a.foo;
+  a.bar;
+  a.longer;
+  a.anotherOne;
+  a.add(1);
+  a.isEmpty;
+}
+
+/**
+ The following constant was generated with the following program:
+
+   get chars sync* {
+      for (int i = "a".codeUnitAt(0); i <= "z".codeUnitAt(0); i++) {
+        yield new String.fromCharCodes([i]);
+      }
+      for (int i = "A".codeUnitAt(0); i <= "Z".codeUnitAt(0); i++) {
+        yield new String.fromCharCodes([i]);
+      }
+    }
+
+    main() {
+      print("const oneAndTwoCharacterSymbols = const [");
+      // One character symbols.
+      for (String c in chars) {
+        print("  const Symbol('$c'),");
+      }
+      // Two character symbols.
+      for (String c1 in chars) {
+        for (String c2 in chars) {
+          print("  const Symbol('$c1$c2'),");
+        }
+      }
+      print("];");
+    }
+*/
+const oneAndTwoCharacterSymbols = const [
+  const Symbol('a'),
+  const Symbol('b'),
+  const Symbol('c'),
+  const Symbol('d'),
+  const Symbol('e'),
+  const Symbol('f'),
+  const Symbol('g'),
+  const Symbol('h'),
+  const Symbol('i'),
+  const Symbol('j'),
+  const Symbol('k'),
+  const Symbol('l'),
+  const Symbol('m'),
+  const Symbol('n'),
+  const Symbol('o'),
+  const Symbol('p'),
+  const Symbol('q'),
+  const Symbol('r'),
+  const Symbol('s'),
+  const Symbol('t'),
+  const Symbol('u'),
+  const Symbol('v'),
+  const Symbol('w'),
+  const Symbol('x'),
+  const Symbol('y'),
+  const Symbol('z'),
+  const Symbol('A'),
+  const Symbol('B'),
+  const Symbol('C'),
+  const Symbol('D'),
+  const Symbol('E'),
+  const Symbol('F'),
+  const Symbol('G'),
+  const Symbol('H'),
+  const Symbol('I'),
+  const Symbol('J'),
+  const Symbol('K'),
+  const Symbol('L'),
+  const Symbol('M'),
+  const Symbol('N'),
+  const Symbol('O'),
+  const Symbol('P'),
+  const Symbol('Q'),
+  const Symbol('R'),
+  const Symbol('S'),
+  const Symbol('T'),
+  const Symbol('U'),
+  const Symbol('V'),
+  const Symbol('W'),
+  const Symbol('X'),
+  const Symbol('Y'),
+  const Symbol('Z'),
+  const Symbol('aa'),
+  const Symbol('ab'),
+  const Symbol('ac'),
+  const Symbol('ad'),
+  const Symbol('ae'),
+  const Symbol('af'),
+  const Symbol('ag'),
+  const Symbol('ah'),
+  const Symbol('ai'),
+  const Symbol('aj'),
+  const Symbol('ak'),
+  const Symbol('al'),
+  const Symbol('am'),
+  const Symbol('an'),
+  const Symbol('ao'),
+  const Symbol('ap'),
+  const Symbol('aq'),
+  const Symbol('ar'),
+  const Symbol('as'),
+  const Symbol('at'),
+  const Symbol('au'),
+  const Symbol('av'),
+  const Symbol('aw'),
+  const Symbol('ax'),
+  const Symbol('ay'),
+  const Symbol('az'),
+  const Symbol('aA'),
+  const Symbol('aB'),
+  const Symbol('aC'),
+  const Symbol('aD'),
+  const Symbol('aE'),
+  const Symbol('aF'),
+  const Symbol('aG'),
+  const Symbol('aH'),
+  const Symbol('aI'),
+  const Symbol('aJ'),
+  const Symbol('aK'),
+  const Symbol('aL'),
+  const Symbol('aM'),
+  const Symbol('aN'),
+  const Symbol('aO'),
+  const Symbol('aP'),
+  const Symbol('aQ'),
+  const Symbol('aR'),
+  const Symbol('aS'),
+  const Symbol('aT'),
+  const Symbol('aU'),
+  const Symbol('aV'),
+  const Symbol('aW'),
+  const Symbol('aX'),
+  const Symbol('aY'),
+  const Symbol('aZ'),
+  const Symbol('ba'),
+  const Symbol('bb'),
+  const Symbol('bc'),
+  const Symbol('bd'),
+  const Symbol('be'),
+  const Symbol('bf'),
+  const Symbol('bg'),
+  const Symbol('bh'),
+  const Symbol('bi'),
+  const Symbol('bj'),
+  const Symbol('bk'),
+  const Symbol('bl'),
+  const Symbol('bm'),
+  const Symbol('bn'),
+  const Symbol('bo'),
+  const Symbol('bp'),
+  const Symbol('bq'),
+  const Symbol('br'),
+  const Symbol('bs'),
+  const Symbol('bt'),
+  const Symbol('bu'),
+  const Symbol('bv'),
+  const Symbol('bw'),
+  const Symbol('bx'),
+  const Symbol('by'),
+  const Symbol('bz'),
+  const Symbol('bA'),
+  const Symbol('bB'),
+  const Symbol('bC'),
+  const Symbol('bD'),
+  const Symbol('bE'),
+  const Symbol('bF'),
+  const Symbol('bG'),
+  const Symbol('bH'),
+  const Symbol('bI'),
+  const Symbol('bJ'),
+  const Symbol('bK'),
+  const Symbol('bL'),
+  const Symbol('bM'),
+  const Symbol('bN'),
+  const Symbol('bO'),
+  const Symbol('bP'),
+  const Symbol('bQ'),
+  const Symbol('bR'),
+  const Symbol('bS'),
+  const Symbol('bT'),
+  const Symbol('bU'),
+  const Symbol('bV'),
+  const Symbol('bW'),
+  const Symbol('bX'),
+  const Symbol('bY'),
+  const Symbol('bZ'),
+  const Symbol('ca'),
+  const Symbol('cb'),
+  const Symbol('cc'),
+  const Symbol('cd'),
+  const Symbol('ce'),
+  const Symbol('cf'),
+  const Symbol('cg'),
+  const Symbol('ch'),
+  const Symbol('ci'),
+  const Symbol('cj'),
+  const Symbol('ck'),
+  const Symbol('cl'),
+  const Symbol('cm'),
+  const Symbol('cn'),
+  const Symbol('co'),
+  const Symbol('cp'),
+  const Symbol('cq'),
+  const Symbol('cr'),
+  const Symbol('cs'),
+  const Symbol('ct'),
+  const Symbol('cu'),
+  const Symbol('cv'),
+  const Symbol('cw'),
+  const Symbol('cx'),
+  const Symbol('cy'),
+  const Symbol('cz'),
+  const Symbol('cA'),
+  const Symbol('cB'),
+  const Symbol('cC'),
+  const Symbol('cD'),
+  const Symbol('cE'),
+  const Symbol('cF'),
+  const Symbol('cG'),
+  const Symbol('cH'),
+  const Symbol('cI'),
+  const Symbol('cJ'),
+  const Symbol('cK'),
+  const Symbol('cL'),
+  const Symbol('cM'),
+  const Symbol('cN'),
+  const Symbol('cO'),
+  const Symbol('cP'),
+  const Symbol('cQ'),
+  const Symbol('cR'),
+  const Symbol('cS'),
+  const Symbol('cT'),
+  const Symbol('cU'),
+  const Symbol('cV'),
+  const Symbol('cW'),
+  const Symbol('cX'),
+  const Symbol('cY'),
+  const Symbol('cZ'),
+  const Symbol('da'),
+  const Symbol('db'),
+  const Symbol('dc'),
+  const Symbol('dd'),
+  const Symbol('de'),
+  const Symbol('df'),
+  const Symbol('dg'),
+  const Symbol('dh'),
+  const Symbol('di'),
+  const Symbol('dj'),
+  const Symbol('dk'),
+  const Symbol('dl'),
+  const Symbol('dm'),
+  const Symbol('dn'),
+  const Symbol('do'),
+  const Symbol('dp'),
+  const Symbol('dq'),
+  const Symbol('dr'),
+  const Symbol('ds'),
+  const Symbol('dt'),
+  const Symbol('du'),
+  const Symbol('dv'),
+  const Symbol('dw'),
+  const Symbol('dx'),
+  const Symbol('dy'),
+  const Symbol('dz'),
+  const Symbol('dA'),
+  const Symbol('dB'),
+  const Symbol('dC'),
+  const Symbol('dD'),
+  const Symbol('dE'),
+  const Symbol('dF'),
+  const Symbol('dG'),
+  const Symbol('dH'),
+  const Symbol('dI'),
+  const Symbol('dJ'),
+  const Symbol('dK'),
+  const Symbol('dL'),
+  const Symbol('dM'),
+  const Symbol('dN'),
+  const Symbol('dO'),
+  const Symbol('dP'),
+  const Symbol('dQ'),
+  const Symbol('dR'),
+  const Symbol('dS'),
+  const Symbol('dT'),
+  const Symbol('dU'),
+  const Symbol('dV'),
+  const Symbol('dW'),
+  const Symbol('dX'),
+  const Symbol('dY'),
+  const Symbol('dZ'),
+  const Symbol('ea'),
+  const Symbol('eb'),
+  const Symbol('ec'),
+  const Symbol('ed'),
+  const Symbol('ee'),
+  const Symbol('ef'),
+  const Symbol('eg'),
+  const Symbol('eh'),
+  const Symbol('ei'),
+  const Symbol('ej'),
+  const Symbol('ek'),
+  const Symbol('el'),
+  const Symbol('em'),
+  const Symbol('en'),
+  const Symbol('eo'),
+  const Symbol('ep'),
+  const Symbol('eq'),
+  const Symbol('er'),
+  const Symbol('es'),
+  const Symbol('et'),
+  const Symbol('eu'),
+  const Symbol('ev'),
+  const Symbol('ew'),
+  const Symbol('ex'),
+  const Symbol('ey'),
+  const Symbol('ez'),
+  const Symbol('eA'),
+  const Symbol('eB'),
+  const Symbol('eC'),
+  const Symbol('eD'),
+  const Symbol('eE'),
+  const Symbol('eF'),
+  const Symbol('eG'),
+  const Symbol('eH'),
+  const Symbol('eI'),
+  const Symbol('eJ'),
+  const Symbol('eK'),
+  const Symbol('eL'),
+  const Symbol('eM'),
+  const Symbol('eN'),
+  const Symbol('eO'),
+  const Symbol('eP'),
+  const Symbol('eQ'),
+  const Symbol('eR'),
+  const Symbol('eS'),
+  const Symbol('eT'),
+  const Symbol('eU'),
+  const Symbol('eV'),
+  const Symbol('eW'),
+  const Symbol('eX'),
+  const Symbol('eY'),
+  const Symbol('eZ'),
+  const Symbol('fa'),
+  const Symbol('fb'),
+  const Symbol('fc'),
+  const Symbol('fd'),
+  const Symbol('fe'),
+  const Symbol('ff'),
+  const Symbol('fg'),
+  const Symbol('fh'),
+  const Symbol('fi'),
+  const Symbol('fj'),
+  const Symbol('fk'),
+  const Symbol('fl'),
+  const Symbol('fm'),
+  const Symbol('fn'),
+  const Symbol('fo'),
+  const Symbol('fp'),
+  const Symbol('fq'),
+  const Symbol('fr'),
+  const Symbol('fs'),
+  const Symbol('ft'),
+  const Symbol('fu'),
+  const Symbol('fv'),
+  const Symbol('fw'),
+  const Symbol('fx'),
+  const Symbol('fy'),
+  const Symbol('fz'),
+  const Symbol('fA'),
+  const Symbol('fB'),
+  const Symbol('fC'),
+  const Symbol('fD'),
+  const Symbol('fE'),
+  const Symbol('fF'),
+  const Symbol('fG'),
+  const Symbol('fH'),
+  const Symbol('fI'),
+  const Symbol('fJ'),
+  const Symbol('fK'),
+  const Symbol('fL'),
+  const Symbol('fM'),
+  const Symbol('fN'),
+  const Symbol('fO'),
+  const Symbol('fP'),
+  const Symbol('fQ'),
+  const Symbol('fR'),
+  const Symbol('fS'),
+  const Symbol('fT'),
+  const Symbol('fU'),
+  const Symbol('fV'),
+  const Symbol('fW'),
+  const Symbol('fX'),
+  const Symbol('fY'),
+  const Symbol('fZ'),
+  const Symbol('ga'),
+  const Symbol('gb'),
+  const Symbol('gc'),
+  const Symbol('gd'),
+  const Symbol('ge'),
+  const Symbol('gf'),
+  const Symbol('gg'),
+  const Symbol('gh'),
+  const Symbol('gi'),
+  const Symbol('gj'),
+  const Symbol('gk'),
+  const Symbol('gl'),
+  const Symbol('gm'),
+  const Symbol('gn'),
+  const Symbol('go'),
+  const Symbol('gp'),
+  const Symbol('gq'),
+  const Symbol('gr'),
+  const Symbol('gs'),
+  const Symbol('gt'),
+  const Symbol('gu'),
+  const Symbol('gv'),
+  const Symbol('gw'),
+  const Symbol('gx'),
+  const Symbol('gy'),
+  const Symbol('gz'),
+  const Symbol('gA'),
+  const Symbol('gB'),
+  const Symbol('gC'),
+  const Symbol('gD'),
+  const Symbol('gE'),
+  const Symbol('gF'),
+  const Symbol('gG'),
+  const Symbol('gH'),
+  const Symbol('gI'),
+  const Symbol('gJ'),
+  const Symbol('gK'),
+  const Symbol('gL'),
+  const Symbol('gM'),
+  const Symbol('gN'),
+  const Symbol('gO'),
+  const Symbol('gP'),
+  const Symbol('gQ'),
+  const Symbol('gR'),
+  const Symbol('gS'),
+  const Symbol('gT'),
+  const Symbol('gU'),
+  const Symbol('gV'),
+  const Symbol('gW'),
+  const Symbol('gX'),
+  const Symbol('gY'),
+  const Symbol('gZ'),
+  const Symbol('ha'),
+  const Symbol('hb'),
+  const Symbol('hc'),
+  const Symbol('hd'),
+  const Symbol('he'),
+  const Symbol('hf'),
+  const Symbol('hg'),
+  const Symbol('hh'),
+  const Symbol('hi'),
+  const Symbol('hj'),
+  const Symbol('hk'),
+  const Symbol('hl'),
+  const Symbol('hm'),
+  const Symbol('hn'),
+  const Symbol('ho'),
+  const Symbol('hp'),
+  const Symbol('hq'),
+  const Symbol('hr'),
+  const Symbol('hs'),
+  const Symbol('ht'),
+  const Symbol('hu'),
+  const Symbol('hv'),
+  const Symbol('hw'),
+  const Symbol('hx'),
+  const Symbol('hy'),
+  const Symbol('hz'),
+  const Symbol('hA'),
+  const Symbol('hB'),
+  const Symbol('hC'),
+  const Symbol('hD'),
+  const Symbol('hE'),
+  const Symbol('hF'),
+  const Symbol('hG'),
+  const Symbol('hH'),
+  const Symbol('hI'),
+  const Symbol('hJ'),
+  const Symbol('hK'),
+  const Symbol('hL'),
+  const Symbol('hM'),
+  const Symbol('hN'),
+  const Symbol('hO'),
+  const Symbol('hP'),
+  const Symbol('hQ'),
+  const Symbol('hR'),
+  const Symbol('hS'),
+  const Symbol('hT'),
+  const Symbol('hU'),
+  const Symbol('hV'),
+  const Symbol('hW'),
+  const Symbol('hX'),
+  const Symbol('hY'),
+  const Symbol('hZ'),
+  const Symbol('ia'),
+  const Symbol('ib'),
+  const Symbol('ic'),
+  const Symbol('id'),
+  const Symbol('ie'),
+  const Symbol('if'),
+  const Symbol('ig'),
+  const Symbol('ih'),
+  const Symbol('ii'),
+  const Symbol('ij'),
+  const Symbol('ik'),
+  const Symbol('il'),
+  const Symbol('im'),
+  const Symbol('in'),
+  const Symbol('io'),
+  const Symbol('ip'),
+  const Symbol('iq'),
+  const Symbol('ir'),
+  const Symbol('is'),
+  const Symbol('it'),
+  const Symbol('iu'),
+  const Symbol('iv'),
+  const Symbol('iw'),
+  const Symbol('ix'),
+  const Symbol('iy'),
+  const Symbol('iz'),
+  const Symbol('iA'),
+  const Symbol('iB'),
+  const Symbol('iC'),
+  const Symbol('iD'),
+  const Symbol('iE'),
+  const Symbol('iF'),
+  const Symbol('iG'),
+  const Symbol('iH'),
+  const Symbol('iI'),
+  const Symbol('iJ'),
+  const Symbol('iK'),
+  const Symbol('iL'),
+  const Symbol('iM'),
+  const Symbol('iN'),
+  const Symbol('iO'),
+  const Symbol('iP'),
+  const Symbol('iQ'),
+  const Symbol('iR'),
+  const Symbol('iS'),
+  const Symbol('iT'),
+  const Symbol('iU'),
+  const Symbol('iV'),
+  const Symbol('iW'),
+  const Symbol('iX'),
+  const Symbol('iY'),
+  const Symbol('iZ'),
+  const Symbol('ja'),
+  const Symbol('jb'),
+  const Symbol('jc'),
+  const Symbol('jd'),
+  const Symbol('je'),
+  const Symbol('jf'),
+  const Symbol('jg'),
+  const Symbol('jh'),
+  const Symbol('ji'),
+  const Symbol('jj'),
+  const Symbol('jk'),
+  const Symbol('jl'),
+  const Symbol('jm'),
+  const Symbol('jn'),
+  const Symbol('jo'),
+  const Symbol('jp'),
+  const Symbol('jq'),
+  const Symbol('jr'),
+  const Symbol('js'),
+  const Symbol('jt'),
+  const Symbol('ju'),
+  const Symbol('jv'),
+  const Symbol('jw'),
+  const Symbol('jx'),
+  const Symbol('jy'),
+  const Symbol('jz'),
+  const Symbol('jA'),
+  const Symbol('jB'),
+  const Symbol('jC'),
+  const Symbol('jD'),
+  const Symbol('jE'),
+  const Symbol('jF'),
+  const Symbol('jG'),
+  const Symbol('jH'),
+  const Symbol('jI'),
+  const Symbol('jJ'),
+  const Symbol('jK'),
+  const Symbol('jL'),
+  const Symbol('jM'),
+  const Symbol('jN'),
+  const Symbol('jO'),
+  const Symbol('jP'),
+  const Symbol('jQ'),
+  const Symbol('jR'),
+  const Symbol('jS'),
+  const Symbol('jT'),
+  const Symbol('jU'),
+  const Symbol('jV'),
+  const Symbol('jW'),
+  const Symbol('jX'),
+  const Symbol('jY'),
+  const Symbol('jZ'),
+  const Symbol('ka'),
+  const Symbol('kb'),
+  const Symbol('kc'),
+  const Symbol('kd'),
+  const Symbol('ke'),
+  const Symbol('kf'),
+  const Symbol('kg'),
+  const Symbol('kh'),
+  const Symbol('ki'),
+  const Symbol('kj'),
+  const Symbol('kk'),
+  const Symbol('kl'),
+  const Symbol('km'),
+  const Symbol('kn'),
+  const Symbol('ko'),
+  const Symbol('kp'),
+  const Symbol('kq'),
+  const Symbol('kr'),
+  const Symbol('ks'),
+  const Symbol('kt'),
+  const Symbol('ku'),
+  const Symbol('kv'),
+  const Symbol('kw'),
+  const Symbol('kx'),
+  const Symbol('ky'),
+  const Symbol('kz'),
+  const Symbol('kA'),
+  const Symbol('kB'),
+  const Symbol('kC'),
+  const Symbol('kD'),
+  const Symbol('kE'),
+  const Symbol('kF'),
+  const Symbol('kG'),
+  const Symbol('kH'),
+  const Symbol('kI'),
+  const Symbol('kJ'),
+  const Symbol('kK'),
+  const Symbol('kL'),
+  const Symbol('kM'),
+  const Symbol('kN'),
+  const Symbol('kO'),
+  const Symbol('kP'),
+  const Symbol('kQ'),
+  const Symbol('kR'),
+  const Symbol('kS'),
+  const Symbol('kT'),
+  const Symbol('kU'),
+  const Symbol('kV'),
+  const Symbol('kW'),
+  const Symbol('kX'),
+  const Symbol('kY'),
+  const Symbol('kZ'),
+  const Symbol('la'),
+  const Symbol('lb'),
+  const Symbol('lc'),
+  const Symbol('ld'),
+  const Symbol('le'),
+  const Symbol('lf'),
+  const Symbol('lg'),
+  const Symbol('lh'),
+  const Symbol('li'),
+  const Symbol('lj'),
+  const Symbol('lk'),
+  const Symbol('ll'),
+  const Symbol('lm'),
+  const Symbol('ln'),
+  const Symbol('lo'),
+  const Symbol('lp'),
+  const Symbol('lq'),
+  const Symbol('lr'),
+  const Symbol('ls'),
+  const Symbol('lt'),
+  const Symbol('lu'),
+  const Symbol('lv'),
+  const Symbol('lw'),
+  const Symbol('lx'),
+  const Symbol('ly'),
+  const Symbol('lz'),
+  const Symbol('lA'),
+  const Symbol('lB'),
+  const Symbol('lC'),
+  const Symbol('lD'),
+  const Symbol('lE'),
+  const Symbol('lF'),
+  const Symbol('lG'),
+  const Symbol('lH'),
+  const Symbol('lI'),
+  const Symbol('lJ'),
+  const Symbol('lK'),
+  const Symbol('lL'),
+  const Symbol('lM'),
+  const Symbol('lN'),
+  const Symbol('lO'),
+  const Symbol('lP'),
+  const Symbol('lQ'),
+  const Symbol('lR'),
+  const Symbol('lS'),
+  const Symbol('lT'),
+  const Symbol('lU'),
+  const Symbol('lV'),
+  const Symbol('lW'),
+  const Symbol('lX'),
+  const Symbol('lY'),
+  const Symbol('lZ'),
+  const Symbol('ma'),
+  const Symbol('mb'),
+  const Symbol('mc'),
+  const Symbol('md'),
+  const Symbol('me'),
+  const Symbol('mf'),
+  const Symbol('mg'),
+  const Symbol('mh'),
+  const Symbol('mi'),
+  const Symbol('mj'),
+  const Symbol('mk'),
+  const Symbol('ml'),
+  const Symbol('mm'),
+  const Symbol('mn'),
+  const Symbol('mo'),
+  const Symbol('mp'),
+  const Symbol('mq'),
+  const Symbol('mr'),
+  const Symbol('ms'),
+  const Symbol('mt'),
+  const Symbol('mu'),
+  const Symbol('mv'),
+  const Symbol('mw'),
+  const Symbol('mx'),
+  const Symbol('my'),
+  const Symbol('mz'),
+  const Symbol('mA'),
+  const Symbol('mB'),
+  const Symbol('mC'),
+  const Symbol('mD'),
+  const Symbol('mE'),
+  const Symbol('mF'),
+  const Symbol('mG'),
+  const Symbol('mH'),
+  const Symbol('mI'),
+  const Symbol('mJ'),
+  const Symbol('mK'),
+  const Symbol('mL'),
+  const Symbol('mM'),
+  const Symbol('mN'),
+  const Symbol('mO'),
+  const Symbol('mP'),
+  const Symbol('mQ'),
+  const Symbol('mR'),
+  const Symbol('mS'),
+  const Symbol('mT'),
+  const Symbol('mU'),
+  const Symbol('mV'),
+  const Symbol('mW'),
+  const Symbol('mX'),
+  const Symbol('mY'),
+  const Symbol('mZ'),
+  const Symbol('na'),
+  const Symbol('nb'),
+  const Symbol('nc'),
+  const Symbol('nd'),
+  const Symbol('ne'),
+  const Symbol('nf'),
+  const Symbol('ng'),
+  const Symbol('nh'),
+  const Symbol('ni'),
+  const Symbol('nj'),
+  const Symbol('nk'),
+  const Symbol('nl'),
+  const Symbol('nm'),
+  const Symbol('nn'),
+  const Symbol('no'),
+  const Symbol('np'),
+  const Symbol('nq'),
+  const Symbol('nr'),
+  const Symbol('ns'),
+  const Symbol('nt'),
+  const Symbol('nu'),
+  const Symbol('nv'),
+  const Symbol('nw'),
+  const Symbol('nx'),
+  const Symbol('ny'),
+  const Symbol('nz'),
+  const Symbol('nA'),
+  const Symbol('nB'),
+  const Symbol('nC'),
+  const Symbol('nD'),
+  const Symbol('nE'),
+  const Symbol('nF'),
+  const Symbol('nG'),
+  const Symbol('nH'),
+  const Symbol('nI'),
+  const Symbol('nJ'),
+  const Symbol('nK'),
+  const Symbol('nL'),
+  const Symbol('nM'),
+  const Symbol('nN'),
+  const Symbol('nO'),
+  const Symbol('nP'),
+  const Symbol('nQ'),
+  const Symbol('nR'),
+  const Symbol('nS'),
+  const Symbol('nT'),
+  const Symbol('nU'),
+  const Symbol('nV'),
+  const Symbol('nW'),
+  const Symbol('nX'),
+  const Symbol('nY'),
+  const Symbol('nZ'),
+  const Symbol('oa'),
+  const Symbol('ob'),
+  const Symbol('oc'),
+  const Symbol('od'),
+  const Symbol('oe'),
+  const Symbol('of'),
+  const Symbol('og'),
+  const Symbol('oh'),
+  const Symbol('oi'),
+  const Symbol('oj'),
+  const Symbol('ok'),
+  const Symbol('ol'),
+  const Symbol('om'),
+  const Symbol('on'),
+  const Symbol('oo'),
+  const Symbol('op'),
+  const Symbol('oq'),
+  const Symbol('or'),
+  const Symbol('os'),
+  const Symbol('ot'),
+  const Symbol('ou'),
+  const Symbol('ov'),
+  const Symbol('ow'),
+  const Symbol('ox'),
+  const Symbol('oy'),
+  const Symbol('oz'),
+  const Symbol('oA'),
+  const Symbol('oB'),
+  const Symbol('oC'),
+  const Symbol('oD'),
+  const Symbol('oE'),
+  const Symbol('oF'),
+  const Symbol('oG'),
+  const Symbol('oH'),
+  const Symbol('oI'),
+  const Symbol('oJ'),
+  const Symbol('oK'),
+  const Symbol('oL'),
+  const Symbol('oM'),
+  const Symbol('oN'),
+  const Symbol('oO'),
+  const Symbol('oP'),
+  const Symbol('oQ'),
+  const Symbol('oR'),
+  const Symbol('oS'),
+  const Symbol('oT'),
+  const Symbol('oU'),
+  const Symbol('oV'),
+  const Symbol('oW'),
+  const Symbol('oX'),
+  const Symbol('oY'),
+  const Symbol('oZ'),
+  const Symbol('pa'),
+  const Symbol('pb'),
+  const Symbol('pc'),
+  const Symbol('pd'),
+  const Symbol('pe'),
+  const Symbol('pf'),
+  const Symbol('pg'),
+  const Symbol('ph'),
+  const Symbol('pi'),
+  const Symbol('pj'),
+  const Symbol('pk'),
+  const Symbol('pl'),
+  const Symbol('pm'),
+  const Symbol('pn'),
+  const Symbol('po'),
+  const Symbol('pp'),
+  const Symbol('pq'),
+  const Symbol('pr'),
+  const Symbol('ps'),
+  const Symbol('pt'),
+  const Symbol('pu'),
+  const Symbol('pv'),
+  const Symbol('pw'),
+  const Symbol('px'),
+  const Symbol('py'),
+  const Symbol('pz'),
+  const Symbol('pA'),
+  const Symbol('pB'),
+  const Symbol('pC'),
+  const Symbol('pD'),
+  const Symbol('pE'),
+  const Symbol('pF'),
+  const Symbol('pG'),
+  const Symbol('pH'),
+  const Symbol('pI'),
+  const Symbol('pJ'),
+  const Symbol('pK'),
+  const Symbol('pL'),
+  const Symbol('pM'),
+  const Symbol('pN'),
+  const Symbol('pO'),
+  const Symbol('pP'),
+  const Symbol('pQ'),
+  const Symbol('pR'),
+  const Symbol('pS'),
+  const Symbol('pT'),
+  const Symbol('pU'),
+  const Symbol('pV'),
+  const Symbol('pW'),
+  const Symbol('pX'),
+  const Symbol('pY'),
+  const Symbol('pZ'),
+  const Symbol('qa'),
+  const Symbol('qb'),
+  const Symbol('qc'),
+  const Symbol('qd'),
+  const Symbol('qe'),
+  const Symbol('qf'),
+  const Symbol('qg'),
+  const Symbol('qh'),
+  const Symbol('qi'),
+  const Symbol('qj'),
+  const Symbol('qk'),
+  const Symbol('ql'),
+  const Symbol('qm'),
+  const Symbol('qn'),
+  const Symbol('qo'),
+  const Symbol('qp'),
+  const Symbol('qq'),
+  const Symbol('qr'),
+  const Symbol('qs'),
+  const Symbol('qt'),
+  const Symbol('qu'),
+  const Symbol('qv'),
+  const Symbol('qw'),
+  const Symbol('qx'),
+  const Symbol('qy'),
+  const Symbol('qz'),
+  const Symbol('qA'),
+  const Symbol('qB'),
+  const Symbol('qC'),
+  const Symbol('qD'),
+  const Symbol('qE'),
+  const Symbol('qF'),
+  const Symbol('qG'),
+  const Symbol('qH'),
+  const Symbol('qI'),
+  const Symbol('qJ'),
+  const Symbol('qK'),
+  const Symbol('qL'),
+  const Symbol('qM'),
+  const Symbol('qN'),
+  const Symbol('qO'),
+  const Symbol('qP'),
+  const Symbol('qQ'),
+  const Symbol('qR'),
+  const Symbol('qS'),
+  const Symbol('qT'),
+  const Symbol('qU'),
+  const Symbol('qV'),
+  const Symbol('qW'),
+  const Symbol('qX'),
+  const Symbol('qY'),
+  const Symbol('qZ'),
+  const Symbol('ra'),
+  const Symbol('rb'),
+  const Symbol('rc'),
+  const Symbol('rd'),
+  const Symbol('re'),
+  const Symbol('rf'),
+  const Symbol('rg'),
+  const Symbol('rh'),
+  const Symbol('ri'),
+  const Symbol('rj'),
+  const Symbol('rk'),
+  const Symbol('rl'),
+  const Symbol('rm'),
+  const Symbol('rn'),
+  const Symbol('ro'),
+  const Symbol('rp'),
+  const Symbol('rq'),
+  const Symbol('rr'),
+  const Symbol('rs'),
+  const Symbol('rt'),
+  const Symbol('ru'),
+  const Symbol('rv'),
+  const Symbol('rw'),
+  const Symbol('rx'),
+  const Symbol('ry'),
+  const Symbol('rz'),
+  const Symbol('rA'),
+  const Symbol('rB'),
+  const Symbol('rC'),
+  const Symbol('rD'),
+  const Symbol('rE'),
+  const Symbol('rF'),
+  const Symbol('rG'),
+  const Symbol('rH'),
+  const Symbol('rI'),
+  const Symbol('rJ'),
+  const Symbol('rK'),
+  const Symbol('rL'),
+  const Symbol('rM'),
+  const Symbol('rN'),
+  const Symbol('rO'),
+  const Symbol('rP'),
+  const Symbol('rQ'),
+  const Symbol('rR'),
+  const Symbol('rS'),
+  const Symbol('rT'),
+  const Symbol('rU'),
+  const Symbol('rV'),
+  const Symbol('rW'),
+  const Symbol('rX'),
+  const Symbol('rY'),
+  const Symbol('rZ'),
+  const Symbol('sa'),
+  const Symbol('sb'),
+  const Symbol('sc'),
+  const Symbol('sd'),
+  const Symbol('se'),
+  const Symbol('sf'),
+  const Symbol('sg'),
+  const Symbol('sh'),
+  const Symbol('si'),
+  const Symbol('sj'),
+  const Symbol('sk'),
+  const Symbol('sl'),
+  const Symbol('sm'),
+  const Symbol('sn'),
+  const Symbol('so'),
+  const Symbol('sp'),
+  const Symbol('sq'),
+  const Symbol('sr'),
+  const Symbol('ss'),
+  const Symbol('st'),
+  const Symbol('su'),
+  const Symbol('sv'),
+  const Symbol('sw'),
+  const Symbol('sx'),
+  const Symbol('sy'),
+  const Symbol('sz'),
+  const Symbol('sA'),
+  const Symbol('sB'),
+  const Symbol('sC'),
+  const Symbol('sD'),
+  const Symbol('sE'),
+  const Symbol('sF'),
+  const Symbol('sG'),
+  const Symbol('sH'),
+  const Symbol('sI'),
+  const Symbol('sJ'),
+  const Symbol('sK'),
+  const Symbol('sL'),
+  const Symbol('sM'),
+  const Symbol('sN'),
+  const Symbol('sO'),
+  const Symbol('sP'),
+  const Symbol('sQ'),
+  const Symbol('sR'),
+  const Symbol('sS'),
+  const Symbol('sT'),
+  const Symbol('sU'),
+  const Symbol('sV'),
+  const Symbol('sW'),
+  const Symbol('sX'),
+  const Symbol('sY'),
+  const Symbol('sZ'),
+  const Symbol('ta'),
+  const Symbol('tb'),
+  const Symbol('tc'),
+  const Symbol('td'),
+  const Symbol('te'),
+  const Symbol('tf'),
+  const Symbol('tg'),
+  const Symbol('th'),
+  const Symbol('ti'),
+  const Symbol('tj'),
+  const Symbol('tk'),
+  const Symbol('tl'),
+  const Symbol('tm'),
+  const Symbol('tn'),
+  const Symbol('to'),
+  const Symbol('tp'),
+  const Symbol('tq'),
+  const Symbol('tr'),
+  const Symbol('ts'),
+  const Symbol('tt'),
+  const Symbol('tu'),
+  const Symbol('tv'),
+  const Symbol('tw'),
+  const Symbol('tx'),
+  const Symbol('ty'),
+  const Symbol('tz'),
+  const Symbol('tA'),
+  const Symbol('tB'),
+  const Symbol('tC'),
+  const Symbol('tD'),
+  const Symbol('tE'),
+  const Symbol('tF'),
+  const Symbol('tG'),
+  const Symbol('tH'),
+  const Symbol('tI'),
+  const Symbol('tJ'),
+  const Symbol('tK'),
+  const Symbol('tL'),
+  const Symbol('tM'),
+  const Symbol('tN'),
+  const Symbol('tO'),
+  const Symbol('tP'),
+  const Symbol('tQ'),
+  const Symbol('tR'),
+  const Symbol('tS'),
+  const Symbol('tT'),
+  const Symbol('tU'),
+  const Symbol('tV'),
+  const Symbol('tW'),
+  const Symbol('tX'),
+  const Symbol('tY'),
+  const Symbol('tZ'),
+  const Symbol('ua'),
+  const Symbol('ub'),
+  const Symbol('uc'),
+  const Symbol('ud'),
+  const Symbol('ue'),
+  const Symbol('uf'),
+  const Symbol('ug'),
+  const Symbol('uh'),
+  const Symbol('ui'),
+  const Symbol('uj'),
+  const Symbol('uk'),
+  const Symbol('ul'),
+  const Symbol('um'),
+  const Symbol('un'),
+  const Symbol('uo'),
+  const Symbol('up'),
+  const Symbol('uq'),
+  const Symbol('ur'),
+  const Symbol('us'),
+  const Symbol('ut'),
+  const Symbol('uu'),
+  const Symbol('uv'),
+  const Symbol('uw'),
+  const Symbol('ux'),
+  const Symbol('uy'),
+  const Symbol('uz'),
+  const Symbol('uA'),
+  const Symbol('uB'),
+  const Symbol('uC'),
+  const Symbol('uD'),
+  const Symbol('uE'),
+  const Symbol('uF'),
+  const Symbol('uG'),
+  const Symbol('uH'),
+  const Symbol('uI'),
+  const Symbol('uJ'),
+  const Symbol('uK'),
+  const Symbol('uL'),
+  const Symbol('uM'),
+  const Symbol('uN'),
+  const Symbol('uO'),
+  const Symbol('uP'),
+  const Symbol('uQ'),
+  const Symbol('uR'),
+  const Symbol('uS'),
+  const Symbol('uT'),
+  const Symbol('uU'),
+  const Symbol('uV'),
+  const Symbol('uW'),
+  const Symbol('uX'),
+  const Symbol('uY'),
+  const Symbol('uZ'),
+  const Symbol('va'),
+  const Symbol('vb'),
+  const Symbol('vc'),
+  const Symbol('vd'),
+  const Symbol('ve'),
+  const Symbol('vf'),
+  const Symbol('vg'),
+  const Symbol('vh'),
+  const Symbol('vi'),
+  const Symbol('vj'),
+  const Symbol('vk'),
+  const Symbol('vl'),
+  const Symbol('vm'),
+  const Symbol('vn'),
+  const Symbol('vo'),
+  const Symbol('vp'),
+  const Symbol('vq'),
+  const Symbol('vr'),
+  const Symbol('vs'),
+  const Symbol('vt'),
+  const Symbol('vu'),
+  const Symbol('vv'),
+  const Symbol('vw'),
+  const Symbol('vx'),
+  const Symbol('vy'),
+  const Symbol('vz'),
+  const Symbol('vA'),
+  const Symbol('vB'),
+  const Symbol('vC'),
+  const Symbol('vD'),
+  const Symbol('vE'),
+  const Symbol('vF'),
+  const Symbol('vG'),
+  const Symbol('vH'),
+  const Symbol('vI'),
+  const Symbol('vJ'),
+  const Symbol('vK'),
+  const Symbol('vL'),
+  const Symbol('vM'),
+  const Symbol('vN'),
+  const Symbol('vO'),
+  const Symbol('vP'),
+  const Symbol('vQ'),
+  const Symbol('vR'),
+  const Symbol('vS'),
+  const Symbol('vT'),
+  const Symbol('vU'),
+  const Symbol('vV'),
+  const Symbol('vW'),
+  const Symbol('vX'),
+  const Symbol('vY'),
+  const Symbol('vZ'),
+  const Symbol('wa'),
+  const Symbol('wb'),
+  const Symbol('wc'),
+  const Symbol('wd'),
+  const Symbol('we'),
+  const Symbol('wf'),
+  const Symbol('wg'),
+  const Symbol('wh'),
+  const Symbol('wi'),
+  const Symbol('wj'),
+  const Symbol('wk'),
+  const Symbol('wl'),
+  const Symbol('wm'),
+  const Symbol('wn'),
+  const Symbol('wo'),
+  const Symbol('wp'),
+  const Symbol('wq'),
+  const Symbol('wr'),
+  const Symbol('ws'),
+  const Symbol('wt'),
+  const Symbol('wu'),
+  const Symbol('wv'),
+  const Symbol('ww'),
+  const Symbol('wx'),
+  const Symbol('wy'),
+  const Symbol('wz'),
+  const Symbol('wA'),
+  const Symbol('wB'),
+  const Symbol('wC'),
+  const Symbol('wD'),
+  const Symbol('wE'),
+  const Symbol('wF'),
+  const Symbol('wG'),
+  const Symbol('wH'),
+  const Symbol('wI'),
+  const Symbol('wJ'),
+  const Symbol('wK'),
+  const Symbol('wL'),
+  const Symbol('wM'),
+  const Symbol('wN'),
+  const Symbol('wO'),
+  const Symbol('wP'),
+  const Symbol('wQ'),
+  const Symbol('wR'),
+  const Symbol('wS'),
+  const Symbol('wT'),
+  const Symbol('wU'),
+  const Symbol('wV'),
+  const Symbol('wW'),
+  const Symbol('wX'),
+  const Symbol('wY'),
+  const Symbol('wZ'),
+  const Symbol('xa'),
+  const Symbol('xb'),
+  const Symbol('xc'),
+  const Symbol('xd'),
+  const Symbol('xe'),
+  const Symbol('xf'),
+  const Symbol('xg'),
+  const Symbol('xh'),
+  const Symbol('xi'),
+  const Symbol('xj'),
+  const Symbol('xk'),
+  const Symbol('xl'),
+  const Symbol('xm'),
+  const Symbol('xn'),
+  const Symbol('xo'),
+  const Symbol('xp'),
+  const Symbol('xq'),
+  const Symbol('xr'),
+  const Symbol('xs'),
+  const Symbol('xt'),
+  const Symbol('xu'),
+  const Symbol('xv'),
+  const Symbol('xw'),
+  const Symbol('xx'),
+  const Symbol('xy'),
+  const Symbol('xz'),
+  const Symbol('xA'),
+  const Symbol('xB'),
+  const Symbol('xC'),
+  const Symbol('xD'),
+  const Symbol('xE'),
+  const Symbol('xF'),
+  const Symbol('xG'),
+  const Symbol('xH'),
+  const Symbol('xI'),
+  const Symbol('xJ'),
+  const Symbol('xK'),
+  const Symbol('xL'),
+  const Symbol('xM'),
+  const Symbol('xN'),
+  const Symbol('xO'),
+  const Symbol('xP'),
+  const Symbol('xQ'),
+  const Symbol('xR'),
+  const Symbol('xS'),
+  const Symbol('xT'),
+  const Symbol('xU'),
+  const Symbol('xV'),
+  const Symbol('xW'),
+  const Symbol('xX'),
+  const Symbol('xY'),
+  const Symbol('xZ'),
+  const Symbol('ya'),
+  const Symbol('yb'),
+  const Symbol('yc'),
+  const Symbol('yd'),
+  const Symbol('ye'),
+  const Symbol('yf'),
+  const Symbol('yg'),
+  const Symbol('yh'),
+  const Symbol('yi'),
+  const Symbol('yj'),
+  const Symbol('yk'),
+  const Symbol('yl'),
+  const Symbol('ym'),
+  const Symbol('yn'),
+  const Symbol('yo'),
+  const Symbol('yp'),
+  const Symbol('yq'),
+  const Symbol('yr'),
+  const Symbol('ys'),
+  const Symbol('yt'),
+  const Symbol('yu'),
+  const Symbol('yv'),
+  const Symbol('yw'),
+  const Symbol('yx'),
+  const Symbol('yy'),
+  const Symbol('yz'),
+  const Symbol('yA'),
+  const Symbol('yB'),
+  const Symbol('yC'),
+  const Symbol('yD'),
+  const Symbol('yE'),
+  const Symbol('yF'),
+  const Symbol('yG'),
+  const Symbol('yH'),
+  const Symbol('yI'),
+  const Symbol('yJ'),
+  const Symbol('yK'),
+  const Symbol('yL'),
+  const Symbol('yM'),
+  const Symbol('yN'),
+  const Symbol('yO'),
+  const Symbol('yP'),
+  const Symbol('yQ'),
+  const Symbol('yR'),
+  const Symbol('yS'),
+  const Symbol('yT'),
+  const Symbol('yU'),
+  const Symbol('yV'),
+  const Symbol('yW'),
+  const Symbol('yX'),
+  const Symbol('yY'),
+  const Symbol('yZ'),
+  const Symbol('za'),
+  const Symbol('zb'),
+  const Symbol('zc'),
+  const Symbol('zd'),
+  const Symbol('ze'),
+  const Symbol('zf'),
+  const Symbol('zg'),
+  const Symbol('zh'),
+  const Symbol('zi'),
+  const Symbol('zj'),
+  const Symbol('zk'),
+  const Symbol('zl'),
+  const Symbol('zm'),
+  const Symbol('zn'),
+  const Symbol('zo'),
+  const Symbol('zp'),
+  const Symbol('zq'),
+  const Symbol('zr'),
+  const Symbol('zs'),
+  const Symbol('zt'),
+  const Symbol('zu'),
+  const Symbol('zv'),
+  const Symbol('zw'),
+  const Symbol('zx'),
+  const Symbol('zy'),
+  const Symbol('zz'),
+  const Symbol('zA'),
+  const Symbol('zB'),
+  const Symbol('zC'),
+  const Symbol('zD'),
+  const Symbol('zE'),
+  const Symbol('zF'),
+  const Symbol('zG'),
+  const Symbol('zH'),
+  const Symbol('zI'),
+  const Symbol('zJ'),
+  const Symbol('zK'),
+  const Symbol('zL'),
+  const Symbol('zM'),
+  const Symbol('zN'),
+  const Symbol('zO'),
+  const Symbol('zP'),
+  const Symbol('zQ'),
+  const Symbol('zR'),
+  const Symbol('zS'),
+  const Symbol('zT'),
+  const Symbol('zU'),
+  const Symbol('zV'),
+  const Symbol('zW'),
+  const Symbol('zX'),
+  const Symbol('zY'),
+  const Symbol('zZ'),
+  const Symbol('Aa'),
+  const Symbol('Ab'),
+  const Symbol('Ac'),
+  const Symbol('Ad'),
+  const Symbol('Ae'),
+  const Symbol('Af'),
+  const Symbol('Ag'),
+  const Symbol('Ah'),
+  const Symbol('Ai'),
+  const Symbol('Aj'),
+  const Symbol('Ak'),
+  const Symbol('Al'),
+  const Symbol('Am'),
+  const Symbol('An'),
+  const Symbol('Ao'),
+  const Symbol('Ap'),
+  const Symbol('Aq'),
+  const Symbol('Ar'),
+  const Symbol('As'),
+  const Symbol('At'),
+  const Symbol('Au'),
+  const Symbol('Av'),
+  const Symbol('Aw'),
+  const Symbol('Ax'),
+  const Symbol('Ay'),
+  const Symbol('Az'),
+  const Symbol('AA'),
+  const Symbol('AB'),
+  const Symbol('AC'),
+  const Symbol('AD'),
+  const Symbol('AE'),
+  const Symbol('AF'),
+  const Symbol('AG'),
+  const Symbol('AH'),
+  const Symbol('AI'),
+  const Symbol('AJ'),
+  const Symbol('AK'),
+  const Symbol('AL'),
+  const Symbol('AM'),
+  const Symbol('AN'),
+  const Symbol('AO'),
+  const Symbol('AP'),
+  const Symbol('AQ'),
+  const Symbol('AR'),
+  const Symbol('AS'),
+  const Symbol('AT'),
+  const Symbol('AU'),
+  const Symbol('AV'),
+  const Symbol('AW'),
+  const Symbol('AX'),
+  const Symbol('AY'),
+  const Symbol('AZ'),
+  const Symbol('Ba'),
+  const Symbol('Bb'),
+  const Symbol('Bc'),
+  const Symbol('Bd'),
+  const Symbol('Be'),
+  const Symbol('Bf'),
+  const Symbol('Bg'),
+  const Symbol('Bh'),
+  const Symbol('Bi'),
+  const Symbol('Bj'),
+  const Symbol('Bk'),
+  const Symbol('Bl'),
+  const Symbol('Bm'),
+  const Symbol('Bn'),
+  const Symbol('Bo'),
+  const Symbol('Bp'),
+  const Symbol('Bq'),
+  const Symbol('Br'),
+  const Symbol('Bs'),
+  const Symbol('Bt'),
+  const Symbol('Bu'),
+  const Symbol('Bv'),
+  const Symbol('Bw'),
+  const Symbol('Bx'),
+  const Symbol('By'),
+  const Symbol('Bz'),
+  const Symbol('BA'),
+  const Symbol('BB'),
+  const Symbol('BC'),
+  const Symbol('BD'),
+  const Symbol('BE'),
+  const Symbol('BF'),
+  const Symbol('BG'),
+  const Symbol('BH'),
+  const Symbol('BI'),
+  const Symbol('BJ'),
+  const Symbol('BK'),
+  const Symbol('BL'),
+  const Symbol('BM'),
+  const Symbol('BN'),
+  const Symbol('BO'),
+  const Symbol('BP'),
+  const Symbol('BQ'),
+  const Symbol('BR'),
+  const Symbol('BS'),
+  const Symbol('BT'),
+  const Symbol('BU'),
+  const Symbol('BV'),
+  const Symbol('BW'),
+  const Symbol('BX'),
+  const Symbol('BY'),
+  const Symbol('BZ'),
+  const Symbol('Ca'),
+  const Symbol('Cb'),
+  const Symbol('Cc'),
+  const Symbol('Cd'),
+  const Symbol('Ce'),
+  const Symbol('Cf'),
+  const Symbol('Cg'),
+  const Symbol('Ch'),
+  const Symbol('Ci'),
+  const Symbol('Cj'),
+  const Symbol('Ck'),
+  const Symbol('Cl'),
+  const Symbol('Cm'),
+  const Symbol('Cn'),
+  const Symbol('Co'),
+  const Symbol('Cp'),
+  const Symbol('Cq'),
+  const Symbol('Cr'),
+  const Symbol('Cs'),
+  const Symbol('Ct'),
+  const Symbol('Cu'),
+  const Symbol('Cv'),
+  const Symbol('Cw'),
+  const Symbol('Cx'),
+  const Symbol('Cy'),
+  const Symbol('Cz'),
+  const Symbol('CA'),
+  const Symbol('CB'),
+  const Symbol('CC'),
+  const Symbol('CD'),
+  const Symbol('CE'),
+  const Symbol('CF'),
+  const Symbol('CG'),
+  const Symbol('CH'),
+  const Symbol('CI'),
+  const Symbol('CJ'),
+  const Symbol('CK'),
+  const Symbol('CL'),
+  const Symbol('CM'),
+  const Symbol('CN'),
+  const Symbol('CO'),
+  const Symbol('CP'),
+  const Symbol('CQ'),
+  const Symbol('CR'),
+  const Symbol('CS'),
+  const Symbol('CT'),
+  const Symbol('CU'),
+  const Symbol('CV'),
+  const Symbol('CW'),
+  const Symbol('CX'),
+  const Symbol('CY'),
+  const Symbol('CZ'),
+  const Symbol('Da'),
+  const Symbol('Db'),
+  const Symbol('Dc'),
+  const Symbol('Dd'),
+  const Symbol('De'),
+  const Symbol('Df'),
+  const Symbol('Dg'),
+  const Symbol('Dh'),
+  const Symbol('Di'),
+  const Symbol('Dj'),
+  const Symbol('Dk'),
+  const Symbol('Dl'),
+  const Symbol('Dm'),
+  const Symbol('Dn'),
+  const Symbol('Do'),
+  const Symbol('Dp'),
+  const Symbol('Dq'),
+  const Symbol('Dr'),
+  const Symbol('Ds'),
+  const Symbol('Dt'),
+  const Symbol('Du'),
+  const Symbol('Dv'),
+  const Symbol('Dw'),
+  const Symbol('Dx'),
+  const Symbol('Dy'),
+  const Symbol('Dz'),
+  const Symbol('DA'),
+  const Symbol('DB'),
+  const Symbol('DC'),
+  const Symbol('DD'),
+  const Symbol('DE'),
+  const Symbol('DF'),
+  const Symbol('DG'),
+  const Symbol('DH'),
+  const Symbol('DI'),
+  const Symbol('DJ'),
+  const Symbol('DK'),
+  const Symbol('DL'),
+  const Symbol('DM'),
+  const Symbol('DN'),
+  const Symbol('DO'),
+  const Symbol('DP'),
+  const Symbol('DQ'),
+  const Symbol('DR'),
+  const Symbol('DS'),
+  const Symbol('DT'),
+  const Symbol('DU'),
+  const Symbol('DV'),
+  const Symbol('DW'),
+  const Symbol('DX'),
+  const Symbol('DY'),
+  const Symbol('DZ'),
+  const Symbol('Ea'),
+  const Symbol('Eb'),
+  const Symbol('Ec'),
+  const Symbol('Ed'),
+  const Symbol('Ee'),
+  const Symbol('Ef'),
+  const Symbol('Eg'),
+  const Symbol('Eh'),
+  const Symbol('Ei'),
+  const Symbol('Ej'),
+  const Symbol('Ek'),
+  const Symbol('El'),
+  const Symbol('Em'),
+  const Symbol('En'),
+  const Symbol('Eo'),
+  const Symbol('Ep'),
+  const Symbol('Eq'),
+  const Symbol('Er'),
+  const Symbol('Es'),
+  const Symbol('Et'),
+  const Symbol('Eu'),
+  const Symbol('Ev'),
+  const Symbol('Ew'),
+  const Symbol('Ex'),
+  const Symbol('Ey'),
+  const Symbol('Ez'),
+  const Symbol('EA'),
+  const Symbol('EB'),
+  const Symbol('EC'),
+  const Symbol('ED'),
+  const Symbol('EE'),
+  const Symbol('EF'),
+  const Symbol('EG'),
+  const Symbol('EH'),
+  const Symbol('EI'),
+  const Symbol('EJ'),
+  const Symbol('EK'),
+  const Symbol('EL'),
+  const Symbol('EM'),
+  const Symbol('EN'),
+  const Symbol('EO'),
+  const Symbol('EP'),
+  const Symbol('EQ'),
+  const Symbol('ER'),
+  const Symbol('ES'),
+  const Symbol('ET'),
+  const Symbol('EU'),
+  const Symbol('EV'),
+  const Symbol('EW'),
+  const Symbol('EX'),
+  const Symbol('EY'),
+  const Symbol('EZ'),
+  const Symbol('Fa'),
+  const Symbol('Fb'),
+  const Symbol('Fc'),
+  const Symbol('Fd'),
+  const Symbol('Fe'),
+  const Symbol('Ff'),
+  const Symbol('Fg'),
+  const Symbol('Fh'),
+  const Symbol('Fi'),
+  const Symbol('Fj'),
+  const Symbol('Fk'),
+  const Symbol('Fl'),
+  const Symbol('Fm'),
+  const Symbol('Fn'),
+  const Symbol('Fo'),
+  const Symbol('Fp'),
+  const Symbol('Fq'),
+  const Symbol('Fr'),
+  const Symbol('Fs'),
+  const Symbol('Ft'),
+  const Symbol('Fu'),
+  const Symbol('Fv'),
+  const Symbol('Fw'),
+  const Symbol('Fx'),
+  const Symbol('Fy'),
+  const Symbol('Fz'),
+  const Symbol('FA'),
+  const Symbol('FB'),
+  const Symbol('FC'),
+  const Symbol('FD'),
+  const Symbol('FE'),
+  const Symbol('FF'),
+  const Symbol('FG'),
+  const Symbol('FH'),
+  const Symbol('FI'),
+  const Symbol('FJ'),
+  const Symbol('FK'),
+  const Symbol('FL'),
+  const Symbol('FM'),
+  const Symbol('FN'),
+  const Symbol('FO'),
+  const Symbol('FP'),
+  const Symbol('FQ'),
+  const Symbol('FR'),
+  const Symbol('FS'),
+  const Symbol('FT'),
+  const Symbol('FU'),
+  const Symbol('FV'),
+  const Symbol('FW'),
+  const Symbol('FX'),
+  const Symbol('FY'),
+  const Symbol('FZ'),
+  const Symbol('Ga'),
+  const Symbol('Gb'),
+  const Symbol('Gc'),
+  const Symbol('Gd'),
+  const Symbol('Ge'),
+  const Symbol('Gf'),
+  const Symbol('Gg'),
+  const Symbol('Gh'),
+  const Symbol('Gi'),
+  const Symbol('Gj'),
+  const Symbol('Gk'),
+  const Symbol('Gl'),
+  const Symbol('Gm'),
+  const Symbol('Gn'),
+  const Symbol('Go'),
+  const Symbol('Gp'),
+  const Symbol('Gq'),
+  const Symbol('Gr'),
+  const Symbol('Gs'),
+  const Symbol('Gt'),
+  const Symbol('Gu'),
+  const Symbol('Gv'),
+  const Symbol('Gw'),
+  const Symbol('Gx'),
+  const Symbol('Gy'),
+  const Symbol('Gz'),
+  const Symbol('GA'),
+  const Symbol('GB'),
+  const Symbol('GC'),
+  const Symbol('GD'),
+  const Symbol('GE'),
+  const Symbol('GF'),
+  const Symbol('GG'),
+  const Symbol('GH'),
+  const Symbol('GI'),
+  const Symbol('GJ'),
+  const Symbol('GK'),
+  const Symbol('GL'),
+  const Symbol('GM'),
+  const Symbol('GN'),
+  const Symbol('GO'),
+  const Symbol('GP'),
+  const Symbol('GQ'),
+  const Symbol('GR'),
+  const Symbol('GS'),
+  const Symbol('GT'),
+  const Symbol('GU'),
+  const Symbol('GV'),
+  const Symbol('GW'),
+  const Symbol('GX'),
+  const Symbol('GY'),
+  const Symbol('GZ'),
+  const Symbol('Ha'),
+  const Symbol('Hb'),
+  const Symbol('Hc'),
+  const Symbol('Hd'),
+  const Symbol('He'),
+  const Symbol('Hf'),
+  const Symbol('Hg'),
+  const Symbol('Hh'),
+  const Symbol('Hi'),
+  const Symbol('Hj'),
+  const Symbol('Hk'),
+  const Symbol('Hl'),
+  const Symbol('Hm'),
+  const Symbol('Hn'),
+  const Symbol('Ho'),
+  const Symbol('Hp'),
+  const Symbol('Hq'),
+  const Symbol('Hr'),
+  const Symbol('Hs'),
+  const Symbol('Ht'),
+  const Symbol('Hu'),
+  const Symbol('Hv'),
+  const Symbol('Hw'),
+  const Symbol('Hx'),
+  const Symbol('Hy'),
+  const Symbol('Hz'),
+  const Symbol('HA'),
+  const Symbol('HB'),
+  const Symbol('HC'),
+  const Symbol('HD'),
+  const Symbol('HE'),
+  const Symbol('HF'),
+  const Symbol('HG'),
+  const Symbol('HH'),
+  const Symbol('HI'),
+  const Symbol('HJ'),
+  const Symbol('HK'),
+  const Symbol('HL'),
+  const Symbol('HM'),
+  const Symbol('HN'),
+  const Symbol('HO'),
+  const Symbol('HP'),
+  const Symbol('HQ'),
+  const Symbol('HR'),
+  const Symbol('HS'),
+  const Symbol('HT'),
+  const Symbol('HU'),
+  const Symbol('HV'),
+  const Symbol('HW'),
+  const Symbol('HX'),
+  const Symbol('HY'),
+  const Symbol('HZ'),
+  const Symbol('Ia'),
+  const Symbol('Ib'),
+  const Symbol('Ic'),
+  const Symbol('Id'),
+  const Symbol('Ie'),
+  const Symbol('If'),
+  const Symbol('Ig'),
+  const Symbol('Ih'),
+  const Symbol('Ii'),
+  const Symbol('Ij'),
+  const Symbol('Ik'),
+  const Symbol('Il'),
+  const Symbol('Im'),
+  const Symbol('In'),
+  const Symbol('Io'),
+  const Symbol('Ip'),
+  const Symbol('Iq'),
+  const Symbol('Ir'),
+  const Symbol('Is'),
+  const Symbol('It'),
+  const Symbol('Iu'),
+  const Symbol('Iv'),
+  const Symbol('Iw'),
+  const Symbol('Ix'),
+  const Symbol('Iy'),
+  const Symbol('Iz'),
+  const Symbol('IA'),
+  const Symbol('IB'),
+  const Symbol('IC'),
+  const Symbol('ID'),
+  const Symbol('IE'),
+  const Symbol('IF'),
+  const Symbol('IG'),
+  const Symbol('IH'),
+  const Symbol('II'),
+  const Symbol('IJ'),
+  const Symbol('IK'),
+  const Symbol('IL'),
+  const Symbol('IM'),
+  const Symbol('IN'),
+  const Symbol('IO'),
+  const Symbol('IP'),
+  const Symbol('IQ'),
+  const Symbol('IR'),
+  const Symbol('IS'),
+  const Symbol('IT'),
+  const Symbol('IU'),
+  const Symbol('IV'),
+  const Symbol('IW'),
+  const Symbol('IX'),
+  const Symbol('IY'),
+  const Symbol('IZ'),
+  const Symbol('Ja'),
+  const Symbol('Jb'),
+  const Symbol('Jc'),
+  const Symbol('Jd'),
+  const Symbol('Je'),
+  const Symbol('Jf'),
+  const Symbol('Jg'),
+  const Symbol('Jh'),
+  const Symbol('Ji'),
+  const Symbol('Jj'),
+  const Symbol('Jk'),
+  const Symbol('Jl'),
+  const Symbol('Jm'),
+  const Symbol('Jn'),
+  const Symbol('Jo'),
+  const Symbol('Jp'),
+  const Symbol('Jq'),
+  const Symbol('Jr'),
+  const Symbol('Js'),
+  const Symbol('Jt'),
+  const Symbol('Ju'),
+  const Symbol('Jv'),
+  const Symbol('Jw'),
+  const Symbol('Jx'),
+  const Symbol('Jy'),
+  const Symbol('Jz'),
+  const Symbol('JA'),
+  const Symbol('JB'),
+  const Symbol('JC'),
+  const Symbol('JD'),
+  const Symbol('JE'),
+  const Symbol('JF'),
+  const Symbol('JG'),
+  const Symbol('JH'),
+  const Symbol('JI'),
+  const Symbol('JJ'),
+  const Symbol('JK'),
+  const Symbol('JL'),
+  const Symbol('JM'),
+  const Symbol('JN'),
+  const Symbol('JO'),
+  const Symbol('JP'),
+  const Symbol('JQ'),
+  const Symbol('JR'),
+  const Symbol('JS'),
+  const Symbol('JT'),
+  const Symbol('JU'),
+  const Symbol('JV'),
+  const Symbol('JW'),
+  const Symbol('JX'),
+  const Symbol('JY'),
+  const Symbol('JZ'),
+  const Symbol('Ka'),
+  const Symbol('Kb'),
+  const Symbol('Kc'),
+  const Symbol('Kd'),
+  const Symbol('Ke'),
+  const Symbol('Kf'),
+  const Symbol('Kg'),
+  const Symbol('Kh'),
+  const Symbol('Ki'),
+  const Symbol('Kj'),
+  const Symbol('Kk'),
+  const Symbol('Kl'),
+  const Symbol('Km'),
+  const Symbol('Kn'),
+  const Symbol('Ko'),
+  const Symbol('Kp'),
+  const Symbol('Kq'),
+  const Symbol('Kr'),
+  const Symbol('Ks'),
+  const Symbol('Kt'),
+  const Symbol('Ku'),
+  const Symbol('Kv'),
+  const Symbol('Kw'),
+  const Symbol('Kx'),
+  const Symbol('Ky'),
+  const Symbol('Kz'),
+  const Symbol('KA'),
+  const Symbol('KB'),
+  const Symbol('KC'),
+  const Symbol('KD'),
+  const Symbol('KE'),
+  const Symbol('KF'),
+  const Symbol('KG'),
+  const Symbol('KH'),
+  const Symbol('KI'),
+  const Symbol('KJ'),
+  const Symbol('KK'),
+  const Symbol('KL'),
+  const Symbol('KM'),
+  const Symbol('KN'),
+  const Symbol('KO'),
+  const Symbol('KP'),
+  const Symbol('KQ'),
+  const Symbol('KR'),
+  const Symbol('KS'),
+  const Symbol('KT'),
+  const Symbol('KU'),
+  const Symbol('KV'),
+  const Symbol('KW'),
+  const Symbol('KX'),
+  const Symbol('KY'),
+  const Symbol('KZ'),
+  const Symbol('La'),
+  const Symbol('Lb'),
+  const Symbol('Lc'),
+  const Symbol('Ld'),
+  const Symbol('Le'),
+  const Symbol('Lf'),
+  const Symbol('Lg'),
+  const Symbol('Lh'),
+  const Symbol('Li'),
+  const Symbol('Lj'),
+  const Symbol('Lk'),
+  const Symbol('Ll'),
+  const Symbol('Lm'),
+  const Symbol('Ln'),
+  const Symbol('Lo'),
+  const Symbol('Lp'),
+  const Symbol('Lq'),
+  const Symbol('Lr'),
+  const Symbol('Ls'),
+  const Symbol('Lt'),
+  const Symbol('Lu'),
+  const Symbol('Lv'),
+  const Symbol('Lw'),
+  const Symbol('Lx'),
+  const Symbol('Ly'),
+  const Symbol('Lz'),
+  const Symbol('LA'),
+  const Symbol('LB'),
+  const Symbol('LC'),
+  const Symbol('LD'),
+  const Symbol('LE'),
+  const Symbol('LF'),
+  const Symbol('LG'),
+  const Symbol('LH'),
+  const Symbol('LI'),
+  const Symbol('LJ'),
+  const Symbol('LK'),
+  const Symbol('LL'),
+  const Symbol('LM'),
+  const Symbol('LN'),
+  const Symbol('LO'),
+  const Symbol('LP'),
+  const Symbol('LQ'),
+  const Symbol('LR'),
+  const Symbol('LS'),
+  const Symbol('LT'),
+  const Symbol('LU'),
+  const Symbol('LV'),
+  const Symbol('LW'),
+  const Symbol('LX'),
+  const Symbol('LY'),
+  const Symbol('LZ'),
+  const Symbol('Ma'),
+  const Symbol('Mb'),
+  const Symbol('Mc'),
+  const Symbol('Md'),
+  const Symbol('Me'),
+  const Symbol('Mf'),
+  const Symbol('Mg'),
+  const Symbol('Mh'),
+  const Symbol('Mi'),
+  const Symbol('Mj'),
+  const Symbol('Mk'),
+  const Symbol('Ml'),
+  const Symbol('Mm'),
+  const Symbol('Mn'),
+  const Symbol('Mo'),
+  const Symbol('Mp'),
+  const Symbol('Mq'),
+  const Symbol('Mr'),
+  const Symbol('Ms'),
+  const Symbol('Mt'),
+  const Symbol('Mu'),
+  const Symbol('Mv'),
+  const Symbol('Mw'),
+  const Symbol('Mx'),
+  const Symbol('My'),
+  const Symbol('Mz'),
+  const Symbol('MA'),
+  const Symbol('MB'),
+  const Symbol('MC'),
+  const Symbol('MD'),
+  const Symbol('ME'),
+  const Symbol('MF'),
+  const Symbol('MG'),
+  const Symbol('MH'),
+  const Symbol('MI'),
+  const Symbol('MJ'),
+  const Symbol('MK'),
+  const Symbol('ML'),
+  const Symbol('MM'),
+  const Symbol('MN'),
+  const Symbol('MO'),
+  const Symbol('MP'),
+  const Symbol('MQ'),
+  const Symbol('MR'),
+  const Symbol('MS'),
+  const Symbol('MT'),
+  const Symbol('MU'),
+  const Symbol('MV'),
+  const Symbol('MW'),
+  const Symbol('MX'),
+  const Symbol('MY'),
+  const Symbol('MZ'),
+  const Symbol('Na'),
+  const Symbol('Nb'),
+  const Symbol('Nc'),
+  const Symbol('Nd'),
+  const Symbol('Ne'),
+  const Symbol('Nf'),
+  const Symbol('Ng'),
+  const Symbol('Nh'),
+  const Symbol('Ni'),
+  const Symbol('Nj'),
+  const Symbol('Nk'),
+  const Symbol('Nl'),
+  const Symbol('Nm'),
+  const Symbol('Nn'),
+  const Symbol('No'),
+  const Symbol('Np'),
+  const Symbol('Nq'),
+  const Symbol('Nr'),
+  const Symbol('Ns'),
+  const Symbol('Nt'),
+  const Symbol('Nu'),
+  const Symbol('Nv'),
+  const Symbol('Nw'),
+  const Symbol('Nx'),
+  const Symbol('Ny'),
+  const Symbol('Nz'),
+  const Symbol('NA'),
+  const Symbol('NB'),
+  const Symbol('NC'),
+  const Symbol('ND'),
+  const Symbol('NE'),
+  const Symbol('NF'),
+  const Symbol('NG'),
+  const Symbol('NH'),
+  const Symbol('NI'),
+  const Symbol('NJ'),
+  const Symbol('NK'),
+  const Symbol('NL'),
+  const Symbol('NM'),
+  const Symbol('NN'),
+  const Symbol('NO'),
+  const Symbol('NP'),
+  const Symbol('NQ'),
+  const Symbol('NR'),
+  const Symbol('NS'),
+  const Symbol('NT'),
+  const Symbol('NU'),
+  const Symbol('NV'),
+  const Symbol('NW'),
+  const Symbol('NX'),
+  const Symbol('NY'),
+  const Symbol('NZ'),
+  const Symbol('Oa'),
+  const Symbol('Ob'),
+  const Symbol('Oc'),
+  const Symbol('Od'),
+  const Symbol('Oe'),
+  const Symbol('Of'),
+  const Symbol('Og'),
+  const Symbol('Oh'),
+  const Symbol('Oi'),
+  const Symbol('Oj'),
+  const Symbol('Ok'),
+  const Symbol('Ol'),
+  const Symbol('Om'),
+  const Symbol('On'),
+  const Symbol('Oo'),
+  const Symbol('Op'),
+  const Symbol('Oq'),
+  const Symbol('Or'),
+  const Symbol('Os'),
+  const Symbol('Ot'),
+  const Symbol('Ou'),
+  const Symbol('Ov'),
+  const Symbol('Ow'),
+  const Symbol('Ox'),
+  const Symbol('Oy'),
+  const Symbol('Oz'),
+  const Symbol('OA'),
+  const Symbol('OB'),
+  const Symbol('OC'),
+  const Symbol('OD'),
+  const Symbol('OE'),
+  const Symbol('OF'),
+  const Symbol('OG'),
+  const Symbol('OH'),
+  const Symbol('OI'),
+  const Symbol('OJ'),
+  const Symbol('OK'),
+  const Symbol('OL'),
+  const Symbol('OM'),
+  const Symbol('ON'),
+  const Symbol('OO'),
+  const Symbol('OP'),
+  const Symbol('OQ'),
+  const Symbol('OR'),
+  const Symbol('OS'),
+  const Symbol('OT'),
+  const Symbol('OU'),
+  const Symbol('OV'),
+  const Symbol('OW'),
+  const Symbol('OX'),
+  const Symbol('OY'),
+  const Symbol('OZ'),
+  const Symbol('Pa'),
+  const Symbol('Pb'),
+  const Symbol('Pc'),
+  const Symbol('Pd'),
+  const Symbol('Pe'),
+  const Symbol('Pf'),
+  const Symbol('Pg'),
+  const Symbol('Ph'),
+  const Symbol('Pi'),
+  const Symbol('Pj'),
+  const Symbol('Pk'),
+  const Symbol('Pl'),
+  const Symbol('Pm'),
+  const Symbol('Pn'),
+  const Symbol('Po'),
+  const Symbol('Pp'),
+  const Symbol('Pq'),
+  const Symbol('Pr'),
+  const Symbol('Ps'),
+  const Symbol('Pt'),
+  const Symbol('Pu'),
+  const Symbol('Pv'),
+  const Symbol('Pw'),
+  const Symbol('Px'),
+  const Symbol('Py'),
+  const Symbol('Pz'),
+  const Symbol('PA'),
+  const Symbol('PB'),
+  const Symbol('PC'),
+  const Symbol('PD'),
+  const Symbol('PE'),
+  const Symbol('PF'),
+  const Symbol('PG'),
+  const Symbol('PH'),
+  const Symbol('PI'),
+  const Symbol('PJ'),
+  const Symbol('PK'),
+  const Symbol('PL'),
+  const Symbol('PM'),
+  const Symbol('PN'),
+  const Symbol('PO'),
+  const Symbol('PP'),
+  const Symbol('PQ'),
+  const Symbol('PR'),
+  const Symbol('PS'),
+  const Symbol('PT'),
+  const Symbol('PU'),
+  const Symbol('PV'),
+  const Symbol('PW'),
+  const Symbol('PX'),
+  const Symbol('PY'),
+  const Symbol('PZ'),
+  const Symbol('Qa'),
+  const Symbol('Qb'),
+  const Symbol('Qc'),
+  const Symbol('Qd'),
+  const Symbol('Qe'),
+  const Symbol('Qf'),
+  const Symbol('Qg'),
+  const Symbol('Qh'),
+  const Symbol('Qi'),
+  const Symbol('Qj'),
+  const Symbol('Qk'),
+  const Symbol('Ql'),
+  const Symbol('Qm'),
+  const Symbol('Qn'),
+  const Symbol('Qo'),
+  const Symbol('Qp'),
+  const Symbol('Qq'),
+  const Symbol('Qr'),
+  const Symbol('Qs'),
+  const Symbol('Qt'),
+  const Symbol('Qu'),
+  const Symbol('Qv'),
+  const Symbol('Qw'),
+  const Symbol('Qx'),
+  const Symbol('Qy'),
+  const Symbol('Qz'),
+  const Symbol('QA'),
+  const Symbol('QB'),
+  const Symbol('QC'),
+  const Symbol('QD'),
+  const Symbol('QE'),
+  const Symbol('QF'),
+  const Symbol('QG'),
+  const Symbol('QH'),
+  const Symbol('QI'),
+  const Symbol('QJ'),
+  const Symbol('QK'),
+  const Symbol('QL'),
+  const Symbol('QM'),
+  const Symbol('QN'),
+  const Symbol('QO'),
+  const Symbol('QP'),
+  const Symbol('QQ'),
+  const Symbol('QR'),
+  const Symbol('QS'),
+  const Symbol('QT'),
+  const Symbol('QU'),
+  const Symbol('QV'),
+  const Symbol('QW'),
+  const Symbol('QX'),
+  const Symbol('QY'),
+  const Symbol('QZ'),
+  const Symbol('Ra'),
+  const Symbol('Rb'),
+  const Symbol('Rc'),
+  const Symbol('Rd'),
+  const Symbol('Re'),
+  const Symbol('Rf'),
+  const Symbol('Rg'),
+  const Symbol('Rh'),
+  const Symbol('Ri'),
+  const Symbol('Rj'),
+  const Symbol('Rk'),
+  const Symbol('Rl'),
+  const Symbol('Rm'),
+  const Symbol('Rn'),
+  const Symbol('Ro'),
+  const Symbol('Rp'),
+  const Symbol('Rq'),
+  const Symbol('Rr'),
+  const Symbol('Rs'),
+  const Symbol('Rt'),
+  const Symbol('Ru'),
+  const Symbol('Rv'),
+  const Symbol('Rw'),
+  const Symbol('Rx'),
+  const Symbol('Ry'),
+  const Symbol('Rz'),
+  const Symbol('RA'),
+  const Symbol('RB'),
+  const Symbol('RC'),
+  const Symbol('RD'),
+  const Symbol('RE'),
+  const Symbol('RF'),
+  const Symbol('RG'),
+  const Symbol('RH'),
+  const Symbol('RI'),
+  const Symbol('RJ'),
+  const Symbol('RK'),
+  const Symbol('RL'),
+  const Symbol('RM'),
+  const Symbol('RN'),
+  const Symbol('RO'),
+  const Symbol('RP'),
+  const Symbol('RQ'),
+  const Symbol('RR'),
+  const Symbol('RS'),
+  const Symbol('RT'),
+  const Symbol('RU'),
+  const Symbol('RV'),
+  const Symbol('RW'),
+  const Symbol('RX'),
+  const Symbol('RY'),
+  const Symbol('RZ'),
+  const Symbol('Sa'),
+  const Symbol('Sb'),
+  const Symbol('Sc'),
+  const Symbol('Sd'),
+  const Symbol('Se'),
+  const Symbol('Sf'),
+  const Symbol('Sg'),
+  const Symbol('Sh'),
+  const Symbol('Si'),
+  const Symbol('Sj'),
+  const Symbol('Sk'),
+  const Symbol('Sl'),
+  const Symbol('Sm'),
+  const Symbol('Sn'),
+  const Symbol('So'),
+  const Symbol('Sp'),
+  const Symbol('Sq'),
+  const Symbol('Sr'),
+  const Symbol('Ss'),
+  const Symbol('St'),
+  const Symbol('Su'),
+  const Symbol('Sv'),
+  const Symbol('Sw'),
+  const Symbol('Sx'),
+  const Symbol('Sy'),
+  const Symbol('Sz'),
+  const Symbol('SA'),
+  const Symbol('SB'),
+  const Symbol('SC'),
+  const Symbol('SD'),
+  const Symbol('SE'),
+  const Symbol('SF'),
+  const Symbol('SG'),
+  const Symbol('SH'),
+  const Symbol('SI'),
+  const Symbol('SJ'),
+  const Symbol('SK'),
+  const Symbol('SL'),
+  const Symbol('SM'),
+  const Symbol('SN'),
+  const Symbol('SO'),
+  const Symbol('SP'),
+  const Symbol('SQ'),
+  const Symbol('SR'),
+  const Symbol('SS'),
+  const Symbol('ST'),
+  const Symbol('SU'),
+  const Symbol('SV'),
+  const Symbol('SW'),
+  const Symbol('SX'),
+  const Symbol('SY'),
+  const Symbol('SZ'),
+  const Symbol('Ta'),
+  const Symbol('Tb'),
+  const Symbol('Tc'),
+  const Symbol('Td'),
+  const Symbol('Te'),
+  const Symbol('Tf'),
+  const Symbol('Tg'),
+  const Symbol('Th'),
+  const Symbol('Ti'),
+  const Symbol('Tj'),
+  const Symbol('Tk'),
+  const Symbol('Tl'),
+  const Symbol('Tm'),
+  const Symbol('Tn'),
+  const Symbol('To'),
+  const Symbol('Tp'),
+  const Symbol('Tq'),
+  const Symbol('Tr'),
+  const Symbol('Ts'),
+  const Symbol('Tt'),
+  const Symbol('Tu'),
+  const Symbol('Tv'),
+  const Symbol('Tw'),
+  const Symbol('Tx'),
+  const Symbol('Ty'),
+  const Symbol('Tz'),
+  const Symbol('TA'),
+  const Symbol('TB'),
+  const Symbol('TC'),
+  const Symbol('TD'),
+  const Symbol('TE'),
+  const Symbol('TF'),
+  const Symbol('TG'),
+  const Symbol('TH'),
+  const Symbol('TI'),
+  const Symbol('TJ'),
+  const Symbol('TK'),
+  const Symbol('TL'),
+  const Symbol('TM'),
+  const Symbol('TN'),
+  const Symbol('TO'),
+  const Symbol('TP'),
+  const Symbol('TQ'),
+  const Symbol('TR'),
+  const Symbol('TS'),
+  const Symbol('TT'),
+  const Symbol('TU'),
+  const Symbol('TV'),
+  const Symbol('TW'),
+  const Symbol('TX'),
+  const Symbol('TY'),
+  const Symbol('TZ'),
+  const Symbol('Ua'),
+  const Symbol('Ub'),
+  const Symbol('Uc'),
+  const Symbol('Ud'),
+  const Symbol('Ue'),
+  const Symbol('Uf'),
+  const Symbol('Ug'),
+  const Symbol('Uh'),
+  const Symbol('Ui'),
+  const Symbol('Uj'),
+  const Symbol('Uk'),
+  const Symbol('Ul'),
+  const Symbol('Um'),
+  const Symbol('Un'),
+  const Symbol('Uo'),
+  const Symbol('Up'),
+  const Symbol('Uq'),
+  const Symbol('Ur'),
+  const Symbol('Us'),
+  const Symbol('Ut'),
+  const Symbol('Uu'),
+  const Symbol('Uv'),
+  const Symbol('Uw'),
+  const Symbol('Ux'),
+  const Symbol('Uy'),
+  const Symbol('Uz'),
+  const Symbol('UA'),
+  const Symbol('UB'),
+  const Symbol('UC'),
+  const Symbol('UD'),
+  const Symbol('UE'),
+  const Symbol('UF'),
+  const Symbol('UG'),
+  const Symbol('UH'),
+  const Symbol('UI'),
+  const Symbol('UJ'),
+  const Symbol('UK'),
+  const Symbol('UL'),
+  const Symbol('UM'),
+  const Symbol('UN'),
+  const Symbol('UO'),
+  const Symbol('UP'),
+  const Symbol('UQ'),
+  const Symbol('UR'),
+  const Symbol('US'),
+  const Symbol('UT'),
+  const Symbol('UU'),
+  const Symbol('UV'),
+  const Symbol('UW'),
+  const Symbol('UX'),
+  const Symbol('UY'),
+  const Symbol('UZ'),
+  const Symbol('Va'),
+  const Symbol('Vb'),
+  const Symbol('Vc'),
+  const Symbol('Vd'),
+  const Symbol('Ve'),
+  const Symbol('Vf'),
+  const Symbol('Vg'),
+  const Symbol('Vh'),
+  const Symbol('Vi'),
+  const Symbol('Vj'),
+  const Symbol('Vk'),
+  const Symbol('Vl'),
+  const Symbol('Vm'),
+  const Symbol('Vn'),
+  const Symbol('Vo'),
+  const Symbol('Vp'),
+  const Symbol('Vq'),
+  const Symbol('Vr'),
+  const Symbol('Vs'),
+  const Symbol('Vt'),
+  const Symbol('Vu'),
+  const Symbol('Vv'),
+  const Symbol('Vw'),
+  const Symbol('Vx'),
+  const Symbol('Vy'),
+  const Symbol('Vz'),
+  const Symbol('VA'),
+  const Symbol('VB'),
+  const Symbol('VC'),
+  const Symbol('VD'),
+  const Symbol('VE'),
+  const Symbol('VF'),
+  const Symbol('VG'),
+  const Symbol('VH'),
+  const Symbol('VI'),
+  const Symbol('VJ'),
+  const Symbol('VK'),
+  const Symbol('VL'),
+  const Symbol('VM'),
+  const Symbol('VN'),
+  const Symbol('VO'),
+  const Symbol('VP'),
+  const Symbol('VQ'),
+  const Symbol('VR'),
+  const Symbol('VS'),
+  const Symbol('VT'),
+  const Symbol('VU'),
+  const Symbol('VV'),
+  const Symbol('VW'),
+  const Symbol('VX'),
+  const Symbol('VY'),
+  const Symbol('VZ'),
+  const Symbol('Wa'),
+  const Symbol('Wb'),
+  const Symbol('Wc'),
+  const Symbol('Wd'),
+  const Symbol('We'),
+  const Symbol('Wf'),
+  const Symbol('Wg'),
+  const Symbol('Wh'),
+  const Symbol('Wi'),
+  const Symbol('Wj'),
+  const Symbol('Wk'),
+  const Symbol('Wl'),
+  const Symbol('Wm'),
+  const Symbol('Wn'),
+  const Symbol('Wo'),
+  const Symbol('Wp'),
+  const Symbol('Wq'),
+  const Symbol('Wr'),
+  const Symbol('Ws'),
+  const Symbol('Wt'),
+  const Symbol('Wu'),
+  const Symbol('Wv'),
+  const Symbol('Ww'),
+  const Symbol('Wx'),
+  const Symbol('Wy'),
+  const Symbol('Wz'),
+  const Symbol('WA'),
+  const Symbol('WB'),
+  const Symbol('WC'),
+  const Symbol('WD'),
+  const Symbol('WE'),
+  const Symbol('WF'),
+  const Symbol('WG'),
+  const Symbol('WH'),
+  const Symbol('WI'),
+  const Symbol('WJ'),
+  const Symbol('WK'),
+  const Symbol('WL'),
+  const Symbol('WM'),
+  const Symbol('WN'),
+  const Symbol('WO'),
+  const Symbol('WP'),
+  const Symbol('WQ'),
+  const Symbol('WR'),
+  const Symbol('WS'),
+  const Symbol('WT'),
+  const Symbol('WU'),
+  const Symbol('WV'),
+  const Symbol('WW'),
+  const Symbol('WX'),
+  const Symbol('WY'),
+  const Symbol('WZ'),
+  const Symbol('Xa'),
+  const Symbol('Xb'),
+  const Symbol('Xc'),
+  const Symbol('Xd'),
+  const Symbol('Xe'),
+  const Symbol('Xf'),
+  const Symbol('Xg'),
+  const Symbol('Xh'),
+  const Symbol('Xi'),
+  const Symbol('Xj'),
+  const Symbol('Xk'),
+  const Symbol('Xl'),
+  const Symbol('Xm'),
+  const Symbol('Xn'),
+  const Symbol('Xo'),
+  const Symbol('Xp'),
+  const Symbol('Xq'),
+  const Symbol('Xr'),
+  const Symbol('Xs'),
+  const Symbol('Xt'),
+  const Symbol('Xu'),
+  const Symbol('Xv'),
+  const Symbol('Xw'),
+  const Symbol('Xx'),
+  const Symbol('Xy'),
+  const Symbol('Xz'),
+  const Symbol('XA'),
+  const Symbol('XB'),
+  const Symbol('XC'),
+  const Symbol('XD'),
+  const Symbol('XE'),
+  const Symbol('XF'),
+  const Symbol('XG'),
+  const Symbol('XH'),
+  const Symbol('XI'),
+  const Symbol('XJ'),
+  const Symbol('XK'),
+  const Symbol('XL'),
+  const Symbol('XM'),
+  const Symbol('XN'),
+  const Symbol('XO'),
+  const Symbol('XP'),
+  const Symbol('XQ'),
+  const Symbol('XR'),
+  const Symbol('XS'),
+  const Symbol('XT'),
+  const Symbol('XU'),
+  const Symbol('XV'),
+  const Symbol('XW'),
+  const Symbol('XX'),
+  const Symbol('XY'),
+  const Symbol('XZ'),
+  const Symbol('Ya'),
+  const Symbol('Yb'),
+  const Symbol('Yc'),
+  const Symbol('Yd'),
+  const Symbol('Ye'),
+  const Symbol('Yf'),
+  const Symbol('Yg'),
+  const Symbol('Yh'),
+  const Symbol('Yi'),
+  const Symbol('Yj'),
+  const Symbol('Yk'),
+  const Symbol('Yl'),
+  const Symbol('Ym'),
+  const Symbol('Yn'),
+  const Symbol('Yo'),
+  const Symbol('Yp'),
+  const Symbol('Yq'),
+  const Symbol('Yr'),
+  const Symbol('Ys'),
+  const Symbol('Yt'),
+  const Symbol('Yu'),
+  const Symbol('Yv'),
+  const Symbol('Yw'),
+  const Symbol('Yx'),
+  const Symbol('Yy'),
+  const Symbol('Yz'),
+  const Symbol('YA'),
+  const Symbol('YB'),
+  const Symbol('YC'),
+  const Symbol('YD'),
+  const Symbol('YE'),
+  const Symbol('YF'),
+  const Symbol('YG'),
+  const Symbol('YH'),
+  const Symbol('YI'),
+  const Symbol('YJ'),
+  const Symbol('YK'),
+  const Symbol('YL'),
+  const Symbol('YM'),
+  const Symbol('YN'),
+  const Symbol('YO'),
+  const Symbol('YP'),
+  const Symbol('YQ'),
+  const Symbol('YR'),
+  const Symbol('YS'),
+  const Symbol('YT'),
+  const Symbol('YU'),
+  const Symbol('YV'),
+  const Symbol('YW'),
+  const Symbol('YX'),
+  const Symbol('YY'),
+  const Symbol('YZ'),
+  const Symbol('Za'),
+  const Symbol('Zb'),
+  const Symbol('Zc'),
+  const Symbol('Zd'),
+  const Symbol('Ze'),
+  const Symbol('Zf'),
+  const Symbol('Zg'),
+  const Symbol('Zh'),
+  const Symbol('Zi'),
+  const Symbol('Zj'),
+  const Symbol('Zk'),
+  const Symbol('Zl'),
+  const Symbol('Zm'),
+  const Symbol('Zn'),
+  const Symbol('Zo'),
+  const Symbol('Zp'),
+  const Symbol('Zq'),
+  const Symbol('Zr'),
+  const Symbol('Zs'),
+  const Symbol('Zt'),
+  const Symbol('Zu'),
+  const Symbol('Zv'),
+  const Symbol('Zw'),
+  const Symbol('Zx'),
+  const Symbol('Zy'),
+  const Symbol('Zz'),
+  const Symbol('ZA'),
+  const Symbol('ZB'),
+  const Symbol('ZC'),
+  const Symbol('ZD'),
+  const Symbol('ZE'),
+  const Symbol('ZF'),
+  const Symbol('ZG'),
+  const Symbol('ZH'),
+  const Symbol('ZI'),
+  const Symbol('ZJ'),
+  const Symbol('ZK'),
+  const Symbol('ZL'),
+  const Symbol('ZM'),
+  const Symbol('ZN'),
+  const Symbol('ZO'),
+  const Symbol('ZP'),
+  const Symbol('ZQ'),
+  const Symbol('ZR'),
+  const Symbol('ZS'),
+  const Symbol('ZT'),
+  const Symbol('ZU'),
+  const Symbol('ZV'),
+  const Symbol('ZW'),
+  const Symbol('ZX'),
+  const Symbol('ZY'),
+  const Symbol('ZZ'),
+];
diff --git a/tests/language/syncstar_less_than_test.dart b/tests/language/syncstar_less_than_test.dart
new file mode 100644
index 0000000..b0551a8
--- /dev/null
+++ b/tests/language/syncstar_less_than_test.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2015, the Dart Team. 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";
+
+confuse(x) => [1, 'x', true, null, x].last;
+
+Iterable<int> foo() sync* {
+ var a = confuse(1);
+ if (a < 10) {
+   yield 2;
+ }
+}
+
+main() {
+  Expect.listEquals(foo().toList(), [2]);
+}
\ No newline at end of file
diff --git a/tests/language/this_conditional_operator_test.dart b/tests/language/this_conditional_operator_test.dart
index 0a88c49..c45b7b6 100644
--- a/tests/language/this_conditional_operator_test.dart
+++ b/tests/language/this_conditional_operator_test.dart
@@ -5,8 +5,6 @@
 // Verify that the ?. operator cannot be used for forwarding "this"
 // constructors.
 
-// SharedOptions=--enable-null-aware-operators
-
 class B {
   B();
   B.namedConstructor();
diff --git a/tests/lib/async/stream_controller_test.dart b/tests/lib/async/stream_controller_test.dart
index e4ddecf..c03dc4a 100644
--- a/tests/lib/async/stream_controller_test.dart
+++ b/tests/lib/async/stream_controller_test.dart
@@ -719,6 +719,144 @@
   asyncEnd();
 }
 
+void testSettingCallbacks() {
+  const int initial = 0;
+  const int running = 1;
+  const int paused  = 2;
+  const int canceled = 3;
+
+  var controller = new StreamController();
+  var stream = controller.stream;
+  var state = initial;
+
+  controller..onListen = () { state = running; }
+            ..onPause  = () { state = paused; }
+            ..onResume = () { state = running; }
+            ..onCancel = () { state = canceled; };
+
+  Expect.equals(initial, state);
+  var sub = stream.listen(null);
+  Expect.equals(running, state);
+  sub.pause();
+  Expect.equals(paused, state);
+  Expect.isTrue(controller.isPaused);
+  sub.resume();
+  Expect.equals(running, state);
+  Expect.isFalse(controller.isPaused);
+
+  // Changing them later does make a difference.
+  controller..onListen = () { throw "Second listen?"; }
+            ..onPause  = () { state = -paused; }
+            ..onResume = () { state = -running; }
+            ..onCancel = () { state = -canceled; };
+
+  Expect.equals(running, state);
+  sub.pause();
+  Expect.equals(-paused, state);
+  Expect.isTrue(controller.isPaused);
+  sub.resume();
+  Expect.equals(-running, state);
+  Expect.isFalse(controller.isPaused);
+  sub.cancel();
+  Expect.equals(-canceled, state);
+}
+
+void testSettingNullCallbacks() {
+  failCallback() => fail("Callback should not be called");
+  var controller = new StreamController(onListen: failCallback,
+                                        onPause : failCallback,
+                                        onResume: failCallback,
+                                        onCancel: failCallback);
+
+  var stream = controller.stream;
+
+  Expect.isFalse(controller.hasListener);
+  Expect.isTrue(controller.isPaused);
+
+  controller.onListen = null;
+
+  var sub = stream.listen(null);
+
+  Expect.isTrue(controller.hasListener);
+  Expect.isFalse(controller.isPaused);
+
+  controller.onPause = null;
+
+  sub.pause();
+
+  Expect.isTrue(controller.hasListener);
+  Expect.isTrue(controller.isPaused);
+
+  controller.onResume = null;
+
+  sub.resume();
+
+  Expect.isTrue(controller.hasListener);
+  Expect.isFalse(controller.isPaused);
+
+  controller.onCancel = null;
+
+  sub.cancel();
+
+  Expect.isFalse(controller.hasListener);
+  Expect.isFalse(controller.isPaused);
+}
+
+void testBroadcastSettingCallbacks() {
+  const int initial = 0;
+  const int running = 1;
+  const int canceled = 2;
+
+  var controller = new StreamController.broadcast();
+  var stream = controller.stream;
+  var state = initial;
+
+  Expect.throws(() { controller.onPause = (){}; },
+                (e) => e is UnsupportedError);
+  Expect.throws(() { controller.onResume = (){}; },
+                (e) => e is UnsupportedError);
+
+  controller..onListen = () { state = running; }
+            ..onCancel = () { state = canceled; };
+
+  Expect.equals(initial, state);
+  var sub = stream.listen(null);
+  Expect.equals(running, state);
+  sub.cancel();
+  Expect.equals(canceled, state);
+
+  // Changing them later does make a difference.
+  controller..onListen = () { state = -running; }
+            ..onCancel = () { state = -canceled; };
+
+  var sub2 = stream.listen(null);
+  Expect.equals(-running, state);
+  sub2.cancel();
+  Expect.equals(-canceled, state);
+}
+
+void testBroadcastSettingNullCallbacks() {
+  failCallback() => fail("Callback should not be called");
+  var controller = new StreamController.broadcast(onListen: failCallback,
+                                                  onCancel: failCallback);
+
+  var stream = controller.stream;
+
+  Expect.isFalse(controller.hasListener);
+
+  controller.onListen = null;
+
+  var sub = stream.listen(null);
+
+  Expect.isTrue(controller.hasListener);
+
+  controller.onCancel = null;
+
+  sub.cancel();
+
+  Expect.isFalse(controller.hasListener);
+}
+
 main() {
   asyncStart();
   testMultiController();
@@ -738,5 +876,9 @@
   testAsBroadcastListenAfterClosePaused();
   testEventInListen();
   testSyncControllerNotReentrant();
+  testSettingCallbacks();
+  testSettingNullCallbacks();
+  testBroadcastSettingCallbacks();
+  testBroadcastSettingNullCallbacks();
   asyncEnd();
 }
diff --git a/tests/lib/convert/line_splitter_test.dart b/tests/lib/convert/line_splitter_test.dart
index 2d8f5e0..d9956e0 100644
--- a/tests/lib/convert/line_splitter_test.dart
+++ b/tests/lib/convert/line_splitter_test.dart
@@ -11,9 +11,12 @@
 
 void main() {
   testSimpleConvert();
+  testSplit();
+  testSplitWithOffsets();
   testManyLines();
   testReadLine1();
   testReadLine2();
+  testChunkedConversion();
 }
 
 void testManyLines() {
@@ -136,3 +139,90 @@
   controller.close();
   Expect.equals(expectedLines.length, index);
 }
+
+
+void testSplit() {
+  var test = """line1
+line2
+line3""";
+
+
+  var result = LineSplitter.split(test).toList();
+
+  Expect.listEquals(['line1', 'line2', 'line3'], result);
+
+  test = "Line1\nLine2\r\nLine3\rLi"
+      "ne4\n"
+       "\n\n\r\n\r\n\r\r";
+
+  result = LineSplitter.split(test).toList();
+
+  Expect.listEquals(
+      ['Line1', 'Line2', 'Line3', 'Line4', '', '', '', '', '', ''],
+      result);
+}
+
+void testSplitWithOffsets() {
+  var test = """line1
+line2
+line3""";
+
+  var result = LineSplitter.split(test, 4).toList();
+  Expect.listEquals(['1', 'line2', 'line3'], result);
+
+  result = LineSplitter.split(test, 5).toList();
+  Expect.listEquals(['', 'line2', 'line3'], result);
+
+  result = LineSplitter.split(test, 6).toList();
+  Expect.listEquals(['line2', 'line3'], result);
+
+  result = LineSplitter.split(test, 0, 8).toList();
+  Expect.listEquals(['line1', 'li'], result);
+
+  result = LineSplitter.split(test, 6, 11).toList();
+  Expect.listEquals(['line2'], result);
+
+  test = "Line1\nLine2\r\nLine3\rLi"
+      "ne4\n"
+       "\n\n\r\n\r\n\r\r";
+
+  result = LineSplitter.split(test).toList();
+
+  Expect.listEquals(
+      ['Line1', 'Line2', 'Line3', 'Line4', '', '', '', '', '', ''],
+      result);
+
+  test = "a\n\nb\r\nc\n\rd\r\re\r\n\nf\r\n";
+  result = LineSplitter.split(test).toList();
+  Expect.listEquals(["a", "", "b", "c", "", "d", "", "e", "", "f"], result);
+}
+
+void testChunkedConversion() {
+  // Test any split of this complex string.
+  var test = "a\n\nb\r\nc\n\rd\r\re\r\n\nf\rg\nh\r\n";
+  var result = ["a", "", "b","c", "", "d", "", "e", "", "f", "g", "h"];
+  for (int i = 0; i < test.length; i++) {
+    var output = [];
+    var splitter = new LineSplitter();
+    var outSink = new ChunkedConversionSink.withCallback(output.addAll);
+    var sink = splitter.startChunkedConversion(outSink);
+    sink.addSlice(test, 0, i, false);
+    sink.addSlice(test, i, test.length, false);
+    sink.close();
+    Expect.listEquals(result, output);
+  }
+
+  // Test the string split into three parts in any way.
+  for (int i = 0; i < test.length; i++) {
+    for (int j = i; j < test.length; j++) {
+      var output = [];
+      var splitter = new LineSplitter();
+      var outSink = new ChunkedConversionSink.withCallback(output.addAll);
+      var sink = splitter.startChunkedConversion(outSink);
+      sink.addSlice(test, 0, i, false);
+      sink.addSlice(test, i, j, false);
+      sink.addSlice(test, j, test.length, true);
+      Expect.listEquals(result, output);
+    }
+  }
+}
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 02a9e192..69c9605 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -319,6 +319,9 @@
 [ $mode == debug && $arch == ia32 && $system == windows ]
 convert/streamed_conversion_json_utf8_decode_test: Skip  # Verification OOM.
 
+[ $runtime == vm && $mode == debug && $arch == x64 && $system == windows ]
+convert/streamed_conversion_json_utf8_decode_test: Pass, Slow
+
 [ $mode == debug && $arch != ia32 && $arch != x64 && $arch != simarm && $arch != simarmv5te ]
 convert/streamed_conversion_json_utf8_decode_test: Skip  # Verification not yet implemented.
 
@@ -326,298 +329,239 @@
 mirrors/immutable_collections_test: SkipSlow  # Timeout.
 convert/streamed_conversion_json_utf8_decode_test: Skip  # Timeout.
 
+[ $compiler == dart2js && $system == windows && $runtime == chrome ]
+convert/line_splitter_test: RuntimeError
+
+[ $compiler == dart2js && $system == windows && $runtime == ff ]
+convert/line_splitter_test: RuntimeError
+
 [ $compiler == dart2js && $cps_ir ]
-async/catch_errors11_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors12_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors13_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors14_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors15_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors16_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors17_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors18_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors19_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors20_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors21_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors22_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors23_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors24_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors25_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors26_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors27_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors28_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors2_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors3_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors4_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors5_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors6_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors7_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors8_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/catch_errors_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/first_regression_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/future_constructor_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/future_delayed_error_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/future_microtask_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
 async/future_test/01: Crash # (()async=>new Future.value(value)): cannot handle async/sync*/async* functions
-async/future_test/none: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/future_timeout_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/future_value_chain2_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/future_value_chain3_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/future_value_chain4_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/future_value_chain_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/futures_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/intercept_print1_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-async/intercept_schedule_microtask1_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/intercept_schedule_microtask2_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/intercept_schedule_microtask3_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/intercept_schedule_microtask4_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/intercept_schedule_microtask5_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/intercept_schedule_microtask6_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/multiple_timer_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/print_test/none: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/run_zoned1_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/run_zoned4_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/run_zoned5_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/run_zoned6_test/none: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/run_zoned7_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/run_zoned8_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/run_zoned9_test/none: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/schedule_microtask2_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/schedule_microtask3_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/schedule_microtask5_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/schedule_microtask_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/slow_consumer2_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/slow_consumer3_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/slow_consumer_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace01_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace02_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace03_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace04_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace05_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace06_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace07_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace08_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace09_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace10_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace11_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace12_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace13_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace14_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace15_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace16_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace17_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace18_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace19_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace20_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace21_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace22_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace23_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace24_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stack_trace25_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_controller_async_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_controller_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
 async/stream_empty_test: Crash # (Future runTest()asy...  cannot handle async/sync*/async* functions
-async/stream_event_transformed_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_first_where_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_from_iterable_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_iterator_double_cancel_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
 async/stream_iterator_test: Crash # (()async{var stream=...  cannot handle async/sync*/async* functions
-async/stream_join_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_last_where_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_listen_zone_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_periodic2_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_periodic3_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_periodic4_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_periodic5_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_periodic_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_single_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_single_to_multi_subscriber_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_state_nonzero_timer_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_state_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_subscription_as_future_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_subscription_cancel_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_timeout_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_transform_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_transformation_broadcast_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_transformer_from_handlers_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_transformer_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/stream_zones_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/timer_cancel1_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/timer_cancel2_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/timer_cancel_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/timer_isActive_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/timer_regress22626_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/timer_repeat_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/timer_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_bind_callback_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_bind_callback_unary_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_bind_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_create_periodic_timer_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_create_timer2_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_create_timer_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_debug_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_empty_description2_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_empty_description_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_error_callback_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_fork_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_future_schedule_microtask_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_register_callback_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_register_callback_unary_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_root_bind_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_run_guarded_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_run_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_run_unary_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-async/zone_value_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
 convert/ascii_test: RuntimeError # this.get$length is not a function
-convert/encoding_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-convert/html_escape_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-convert/json_lib_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
+convert/json_pretty_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
 convert/latin1_test: RuntimeError # this.get$length is not a function
-convert/line_splitter_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-convert/streamed_conversion_json_decode1_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-convert/streamed_conversion_json_encode1_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-convert/streamed_conversion_json_utf8_decode_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-convert/streamed_conversion_json_utf8_encode_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-convert/streamed_conversion_utf8_decode_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-convert/streamed_conversion_utf8_encode_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-math/pi_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-math/point_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-math/rectangle_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors/abstract_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/accessor_cache_overflow_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/array_tracing2_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/array_tracing_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/basic_types_in_dart_core_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/circular_factory_redirection_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/class_declarations_test/01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors/class_mirror_type_variables_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/closures_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/constructors_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/dart2js_mirrors_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors/declarations_type_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/deferred_mirrors_metadata_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/deferred_mirrors_metatarget_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/deferred_mirrors_update_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
+convert/line_splitter_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/abstract_class_test/00: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/abstract_class_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/abstract_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/accessor_cache_overflow_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/array_tracing2_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/array_tracing_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/basic_types_in_dart_core_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/circular_factory_redirection_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/class_declarations_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/class_declarations_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/class_mirror_location_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/class_mirror_type_variables_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/closures_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/closurization_equivalence_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/constructor_kinds_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/constructor_kinds_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/constructors_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/dart2js_mirrors_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/declarations_type_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/deferred_mirrors_metadata_test: Crash # (lib1.foo()): deferred access is not implemented
+mirrors/deferred_mirrors_metatarget_test: Crash # (lib.foo()): deferred access is not implemented
+mirrors/deferred_mirrors_update_test: Crash # (l.foo()): deferred access is not implemented
+mirrors/deferred_type_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
 mirrors/delegate_call_through_getter_test: RuntimeError # Please triage this failure.
 mirrors/delegate_test: RuntimeError # Please triage this failure.
-mirrors/disable_tree_shaking_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/equality_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/field_type_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generic_bounded_by_type_parameter_test/01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generic_bounded_by_type_parameter_test/02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generic_bounded_by_type_parameter_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generic_bounded_test/01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generic_bounded_test/02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generic_bounded_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generic_class_declaration_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors/generic_f_bounded_test/01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generic_f_bounded_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generic_list_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generic_superclass_test/01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generic_superclass_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generic_type_mirror_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generics_double_substitution_test/01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generics_double_substitution_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generics_dynamic_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generics_special_types_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generics_substitution_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generics_test/01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/generics_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/globalized_closures2_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/globalized_closures_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/inherit_field_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/initializing_formals_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/instance_members_easier_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors/instance_members_unimplemented_interface_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors/instance_members_with_override_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors/intercepted_cache_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/intercepted_class_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/intercepted_object_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/intercepted_superclass_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/invocation_fuzz_test/emptyarray: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors/invocation_fuzz_test/false: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors/invocation_fuzz_test/none: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors/invocation_fuzz_test/smi: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors/invocation_fuzz_test/string: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors/invoke_call_through_getter_previously_accessed_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/invoke_call_through_getter_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/invoke_call_through_implicit_getter_previously_accessed_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/invoke_closurization2_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/invoke_closurization_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/invoke_import_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/invoke_named_test/01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/invoke_natives_malicious_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/invoke_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/invoke_throws_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/is_odd_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/lazy_static_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/libraries_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/library_declarations_test/01: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors/library_enumeration_deferred_loading_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/library_metadata2_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/library_metadata_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/library_uri_package_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors/list_constructor_test/01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/list_constructor_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/local_isolate_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/metadata_allowed_values_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/metadata_class_mirror_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/metadata_constructed_constant_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/metadata_constructor_arguments_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/metadata_nested_constructor_call_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/metadata_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/method_mirror_returntype_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/mirror_in_static_init_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/mirrors_nsm_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/mirrors_resolve_fields_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/mixin_members_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/new_instance_with_type_arguments_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/no_metadata_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/null2_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/null_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/operator_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/parameter_is_const_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/parameter_metadata_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/private_symbol_mangling_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/proxy_type_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/raw_type_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/redirecting_factory_test/01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/reflect_class_test/01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/reflect_class_test/02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/reflect_class_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/reflect_model_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/reflect_runtime_type_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/reflect_uninstantiated_class_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/reflected_type_classes_test/01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/reflected_type_classes_test/02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/reflected_type_classes_test/03: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/reflected_type_classes_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/reflected_type_test/01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/reflected_type_test/02: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/reflected_type_test/03: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/reflected_type_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/reflectively_instantiate_uninstantiated_class_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/regress_14304_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/regress_16321_test/01: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/regress_16321_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/regress_19731_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors/relation_subclass_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/removed_api_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/set_field_with_final_inheritance_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/set_field_with_final_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/spawn_function_root_library_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/static_members_easier_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-mirrors/static_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/superclass2_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/superclass_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
+mirrors/disable_tree_shaking_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/empty_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/enum_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/equality_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/fake_function_with_call_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/fake_function_without_call_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/field_type_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/function_type_mirror_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_bounded_by_type_parameter_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_bounded_by_type_parameter_test/02: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_bounded_by_type_parameter_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_bounded_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_bounded_test/02: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_bounded_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_class_declaration_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_f_bounded_mixin_application_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_f_bounded_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_f_bounded_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_function_typedef_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_interface_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_interface_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_list_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_local_function_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_mixin_applications_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_mixin_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_superclass_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_superclass_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generic_type_mirror_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generics_double_substitution_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generics_double_substitution_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generics_dynamic_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generics_special_types_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generics_substitution_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generics_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/generics_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/globalized_closures2_test/00: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/globalized_closures2_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/globalized_closures_test/00: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/globalized_closures_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/hierarchy_invariants_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/immutable_collections_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/inherit_field_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/initializing_formals_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/initializing_formals_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/instance_members_easier_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/instance_members_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/instance_members_unimplemented_interface_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/instance_members_with_override_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/instantiate_abstract_class_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/intercepted_cache_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/intercepted_class_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/intercepted_object_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/intercepted_superclass_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invocation_fuzz_test/emptyarray: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invocation_fuzz_test/false: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invocation_fuzz_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invocation_fuzz_test/smi: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invocation_fuzz_test/string: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invoke_call_on_closure_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invoke_call_through_getter_previously_accessed_test/named: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invoke_call_through_getter_previously_accessed_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invoke_call_through_getter_test/named: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invoke_call_through_getter_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invoke_call_through_implicit_getter_previously_accessed_test/named: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invoke_call_through_implicit_getter_previously_accessed_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invoke_call_through_implicit_getter_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invoke_closurization2_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invoke_closurization_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invoke_import_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invoke_named_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invoke_named_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invoke_natives_malicious_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invoke_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/invoke_throws_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/is_odd_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/lazy_static_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/libraries_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/library_declarations_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/library_declarations_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/library_enumeration_deferred_loading_test: Crash # (other.topLevelMethod()): deferred access is not implemented
+mirrors/library_exports_hidden_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/library_exports_shown_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/library_import_deferred_loading_test: Crash # (other.topLevelMethod()): deferred access is not implemented
+mirrors/library_imports_bad_metadata_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/library_imports_deferred_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/library_imports_hidden_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/library_imports_metadata_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/library_imports_prefixed_show_hide_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/library_imports_prefixed_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/library_imports_shown_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/library_metadata2_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/library_metadata_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/library_uri_package_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/list_constructor_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/list_constructor_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/load_library_test: Crash # (other.topLevelMethod()): deferred access is not implemented
+mirrors/local_function_is_static_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/local_isolate_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/metadata_allowed_values_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/metadata_allowed_values_test/05: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/metadata_allowed_values_test/10: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/metadata_allowed_values_test/11: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/metadata_allowed_values_test/13: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/metadata_allowed_values_test/14: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/metadata_allowed_values_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/metadata_class_mirror_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/metadata_constructed_constant_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/metadata_constructor_arguments_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/metadata_nested_constructor_call_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/metadata_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/method_mirror_location_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/method_mirror_name_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/method_mirror_properties_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/method_mirror_returntype_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/method_mirror_source_line_ending_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/method_mirror_source_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/mirror_in_static_init_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/mirrors_nsm_mismatch_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/mirrors_nsm_test/dart2js: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/mirrors_nsm_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/mirrors_reader_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/mirrors_resolve_fields_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/mirrors_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/mixin_application_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/mixin_members_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/mixin_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/native_class_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/new_instance_with_type_arguments_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/no_metadata_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/null2_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/null_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/operator_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/parameter_is_const_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/parameter_metadata_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/parameter_of_mixin_app_constructor_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/private_symbol_mangling_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/private_types_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/proxy_type_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/raw_type_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/raw_type_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/redirecting_factory_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/redirecting_factory_test/02: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/redirecting_factory_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflect_class_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflect_class_test/02: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflect_class_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflect_model_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflect_runtime_type_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflect_uninstantiated_class_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflected_type_classes_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflected_type_classes_test/02: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflected_type_classes_test/03: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflected_type_classes_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflected_type_function_type_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflected_type_special_types_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflected_type_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflected_type_test/02: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflected_type_test/03: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflected_type_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflected_type_typedefs_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflected_type_typevars_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/reflectively_instantiate_uninstantiated_class_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/regress_14304_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/regress_16321_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/regress_16321_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/regress_19731_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/relation_assignable_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/relation_subclass_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/relation_subtype_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/removed_api_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/repeated_private_anon_mixin_app_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/set_field_with_final_inheritance_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/set_field_with_final_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/spawn_function_root_library_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/static_members_easier_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/static_members_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/static_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/superclass2_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/superclass_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/symbol_validation_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
 mirrors/symbol_validation_test/none: RuntimeError # Please triage this failure.
-mirrors/syntax_error_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/synthetic_accessor_properties_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/to_string_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/top_level_accessors_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/type_argument_is_type_variable_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/type_variable_owner_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/typearguments_mirror_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/typedef_deferred_library_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/typedef_reflected_type_test/none: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
-mirrors/unnamed_library_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
+mirrors/syntax_error_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/synthetic_accessor_properties_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/to_string_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/top_level_accessors_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/type_argument_is_type_variable_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/type_variable_is_static_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/type_variable_owner_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/type_variable_owner_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/typearguments_mirror_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/typedef_deferred_library_test: RuntimeError # G.loadLibrary is not a function
+mirrors/typedef_metadata_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/typedef_reflected_type_test/01: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/typedef_reflected_type_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/unnamed_library_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+mirrors/variable_is_const_test/none: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
 typed_data/typed_data_list_test: RuntimeError # this.get$length is not a function
diff --git a/tests/standalone/debugger/break_at_equals_test.dart b/tests/standalone/debugger/break_at_equals_test.dart
index ab0cce3..5000e6d 100644
--- a/tests/standalone/debugger/break_at_equals_test.dart
+++ b/tests/standalone/debugger/break_at_equals_test.dart
@@ -33,7 +33,7 @@
 
 var testScript = [
   MatchFrames(["main"]),
-  MatchLine(15),
+  MatchLine(14),
   SetBreakpoint(18),
   SetBreakpoint(21),
   SetBreakpoint(10),
diff --git a/tests/standalone/full_coverage_test.dart b/tests/standalone/full_coverage_test.dart
index 05a2645..2ee1979 100644
--- a/tests/standalone/full_coverage_test.dart
+++ b/tests/standalone/full_coverage_test.dart
@@ -93,7 +93,11 @@
     var dartArgs = new List.from(dartBaseArgs)
       ..addAll(['--coverage-dir=${progPath}', '${script}']);
     var result = Process.runSync(Platform.executable, dartArgs);
-    expect(result.exitCode, 0);
+    if (result.exitCode != 0) {
+      print("Coverage generator returned exitCode: ${result.exitCode}.");
+      print("stderr:\n${result.stderr}\n");
+      expect(result.exitCode, 0);
+    }
   }
 }
 
diff --git a/tests/standalone/io/web_socket_test.dart b/tests/standalone/io/web_socket_test.dart
index f3213e6..9ae1758 100644
--- a/tests/standalone/io/web_socket_test.dart
+++ b/tests/standalone/io/web_socket_test.dart
@@ -187,6 +187,36 @@
   }
 
 
+  void testCancelThenClose() {
+    createServer().then((server) {
+      server.transform(new WebSocketTransformer()).listen((webSocket) {
+        webSocket.listen(null).cancel();
+        webSocket.close();
+        server.close();
+      });
+
+      createClient(server.port).then((webSocket) {
+        webSocket.close();
+      });
+    });
+  }
+
+  void testCloseThenCancel() {
+    createServer().then((server) {
+      server.transform(new WebSocketTransformer()).listen((webSocket) {
+        var subscription = webSocket.listen(null);
+        webSocket.close();
+        subscription.cancel();
+        server.close();
+      });
+
+      createClient(server.port).then((webSocket) {
+        webSocket.close();
+      });
+    });
+  }
+
+
   void testListenAfterClose() {
     createServer().then((server) {
       server.transform(new WebSocketTransformer()).listen((webSocket) {
@@ -543,6 +573,8 @@
     testMessageLength(65535);
     testMessageLength(65536);
     testCloseNoListen();
+    testCancelThenClose();
+    testCloseThenCancel();
     testListenAfterClose();
     testDoubleCloseClient();
     testDoubleCloseServer();
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index e095467..2819827e 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -170,14 +170,19 @@
 io/http_client_stays_alive_test: Skip  # Timeout.
 
 [ $compiler == dart2js && $cps_ir ]
+coverage_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+io/addlatexhash_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+io/file_error_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+io/file_read_encoded_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
 io/file_test: Crash # (static testWriteFro...  cannot handle async/sync*/async* functions
 io/file_write_only_test: Crash # (main()async{asyncSt...  cannot handle async/sync*/async* functions
 io/http_bind_test: Crash # (testBindShared(Stri...  cannot handle async/sync*/async* functions
-io/http_parser_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
+io/http_client_connect_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
 io/https_bad_certificate_test: Crash # (main()async{var cli...  cannot handle async/sync*/async* functions
 io/issue_22636_test: Crash # (test()async{server=...  cannot handle async/sync*/async* functions
 io/issue_22637_test: Crash # (test()async{server=...  cannot handle async/sync*/async* functions
+io/observatory_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
+io/skipping_dart2js_compilations_test: Crash # (static Iterable<Str...  cannot handle async/sync*/async* functions
 io/socket_bind_test: Crash # (testListenCloseList...  cannot handle async/sync*/async* functions
 io/socket_source_address_test: Crash # (Future testConnect(...  cannot handle async/sync*/async* functions
-priority_queue_stress_test: RuntimeError # receiver._addHashTableEntry$2 is not a function
-typed_array_test: RuntimeError # receiver._collection$_addHashTableEntry$2 is not a function
+priority_queue_stress_test: RuntimeError # Cannot read property 'any$1' of undefined
diff --git a/tools/VERSION b/tools/VERSION
index c04e365..c43f1ce 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 1
 MINOR 12
 PATCH 0
-PRERELEASE 3
-PRERELEASE_PATCH 1
+PRERELEASE 4
+PRERELEASE_PATCH 0
diff --git a/tools/bots/dart_sdk.py b/tools/bots/dart_sdk.py
index bb7b2f4..40244cb 100644
--- a/tools/bots/dart_sdk.py
+++ b/tools/bots/dart_sdk.py
@@ -42,10 +42,12 @@
   packages_dir = os.path.join(bot_utils.DART_DIR,
                               utils.GetBuildRoot(BUILD_OS, 'release', 'ia32'),
                               'packages')
+  footer_file = os.path.join(bot_utils.DART_DIR,
+                              'tools', 'bots', 'dartdoc_footer.html')
   with bot.BuildStep('Build API docs by dartdoc'):
     subprocess.call([dart_exe, '--package-root=' + packages_dir, dartdoc_dart, 
-                     '--sdk-docs','--output', dirname, '--dart-sdk', dart_sdk, 
-                     '--package-root=%s' % packages_dir], 
+                    '--sdk-docs','--output', dirname, '--dart-sdk', dart_sdk, 
+                    '--footer' , footer_file, '--package-root=%s' % packages_dir], 
                      stdout=open(os.devnull, 'wb'))
 
 def CreateUploadVersionFile():
diff --git a/tools/bots/dartdoc_footer.html b/tools/bots/dartdoc_footer.html
new file mode 100644
index 0000000..63de697
--- /dev/null
+++ b/tools/bots/dartdoc_footer.html
@@ -0,0 +1,13 @@
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-26406144-9', 'auto');
+  ga('send', 'pageview');
+
+</script>
+
+<script async src="//survey.g.doubleclick.net/async_survey?site=4vq7qmqpfn4zjduve64c4h6lqa">
+</script>
diff --git a/tools/deps/dartium.deps/DEPS b/tools/deps/dartium.deps/DEPS
index f3d4784..afdbaa2 100644
--- a/tools/deps/dartium.deps/DEPS
+++ b/tools/deps/dartium.deps/DEPS
@@ -33,7 +33,7 @@
   "mime_rev": "@75890811d4af5af080351ba8a2853ad4c8df98dd",
   "metatest_rev": "@e5aa8e4e19fc4188ac2f6d38368a47d8f07c3df1",
   "oauth2_rev": "@1bff41f4d54505c36f2d1a001b83b8b745c452f5",
-  "observatory_pub_packages_rev": "@45565",
+  "observatory_pub_packages_rev": "@cdc4b3d4c15b9c0c8e7702dff127b440afbb7485",
   "package_config_tag": "@0.1.1",
   "path_rev": "@b657c0854d1cf41c014986fa9d2321f1173df805",
   "plugin_tag": "@0.1.0",
@@ -146,6 +146,9 @@
       "https://github.com/dart-lang/matcher.git" + Var("matcher_tag"),
   "src/dart/third_party/pkg/metatest":
       "https://github.com/dart-lang/metatest.git" + Var("metatest_rev"),
+  "src/dart/third_party/observatory_pub_packages":
+      "https://github.com/dart-lang/observatory_pub_packages.git"
+      + Var("observatory_pub_packages_rev"),
   "src/dart/third_party/pkg/path":
       "https://github.com/dart-lang/path.git" + Var("path_rev"),
   "src/dart/third_party/pkg/package_config":
@@ -177,10 +180,6 @@
   "src/dart/tests/co19/src": ((Var("googlecode_url") % "co19") +
     "/trunk/co19/tests/co19/src" + Var("co19_rev")),
 
-  "src/dart/third_party/observatory_pub_packages":
-      "http://dart.googlecode.com/svn/third_party/observatory_pub_packages" +
-      Var("observatory_pub_packages_rev"),
-
   "src/dart/third_party/zlib":
       Var("chromium_git") + "/chromium/src/third_party/zlib.git" +
       Var("zlib_rev"),
diff --git a/tools/dom/scripts/css_code_generator.py b/tools/dom/scripts/css_code_generator.py
index fc437dd..3a00dde 100644
--- a/tools/dom/scripts/css_code_generator.py
+++ b/tools/dom/scripts/css_code_generator.py
@@ -102,8 +102,18 @@
 
 
   class_file.write("""
+$if DART2JS
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME $EXTENDS with
     $(CLASSNAME)Base $IMPLEMENTS {
+$else
+  $if JSINTEROP
+$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS) class $CLASSNAME extends
+    $(CLASSNAME)Base $IMPLEMENTS {
+  $else
+$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME $EXTENDS with
+    $(CLASSNAME)Base $IMPLEMENTS {
+  $endif
+$endif
   factory $CLASSNAME() => new CssStyleDeclaration.css('');
 
   factory $CLASSNAME.css(String css) {
@@ -150,10 +160,14 @@
     return _hasProperty(propertyName);
 $endif
   }
-$if DARTIUM
 
+$if DARTIUM
   bool _hasProperty(String propertyName) =>
+  $if JSINTEROP
+      _blink.BlinkCSSStyleDeclaration.instance.$__propertyQuery___Callback_1_(unwrap_jso(this), propertyName) != null;
+  $else
       _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback_1(this, propertyName);
+  $endif
 $endif
 
   @DomName('CSSStyleDeclaration.setProperty')
@@ -252,7 +266,15 @@
 $endif
 }
 
+$if DART2JS
 class _CssStyleDeclarationSet extends Object with CssStyleDeclarationBase {
+$else
+  $if JSINTEROP
+class _CssStyleDeclarationSet extends CssStyleDeclarationBase {
+  $else
+class _CssStyleDeclarationSet extends Object with CssStyleDeclarationBase {
+  $endif
+$endif
   final Iterable<Element> _elementIterable;
   Iterable<CssStyleDeclaration> _elementCssStyleDeclarationSetIterable;
 
@@ -302,9 +324,23 @@
   // items in the MEMBERS set if you want that functionality.
 }
 
+$if DART2JS
 abstract class CssStyleDeclarationBase {
   String getPropertyValue(String propertyName);
   void setProperty(String propertyName, String value, [String priority]);
+$else
+  $if JSINTEROP
+class CssStyleDeclarationBase {
+  String getPropertyValue(String propertyName) =>
+    throw new StateError('getProperty not overridden in dart:html');
+  void setProperty(String propertyName, String value, [String priority]) =>
+    throw new StateError('setProperty not overridden in dart:html');
+  $else
+abstract class CssStyleDeclarationBase {
+  String getPropertyValue(String propertyName);
+  void setProperty(String propertyName, String value, [String priority]);
+  $endif
+$endif
 """)
 
   class_lines = [];
diff --git a/tools/dom/scripts/dartdomgenerator.py b/tools/dom/scripts/dartdomgenerator.py
index a2fef65..5a35903 100755
--- a/tools/dom/scripts/dartdomgenerator.py
+++ b/tools/dom/scripts/dartdomgenerator.py
@@ -62,12 +62,13 @@
 
 class GeneratorOptions(object):
   def __init__(self, templates, database, type_registry, renamer,
-      metadata):
+      metadata, dart_js_interop):
     self.templates = templates
     self.database = database
     self.type_registry = type_registry
     self.renamer = renamer
     self.metadata = metadata;
+    self.dart_js_interop = dart_js_interop
 
 def LoadDatabase(database_dir, use_database_cache):
   common_database = database.Database(database_dir)
@@ -79,7 +80,9 @@
 
 def GenerateFromDatabase(common_database, dart2js_output_dir,
                          dartium_output_dir, update_dom_metadata=False,
-                         logging_level=logging.WARNING):
+                         logging_level=logging.WARNING, dart_js_interop=False):
+  print '\n ----- Accessing DOM using %s -----\n' % ('dart:js' if dart_js_interop else 'C++')
+
   start_time = time.time()
 
   current_dir = os.path.dirname(__file__)
@@ -113,10 +116,10 @@
   print 'GenerateFromDatabase %s seconds' % round((time.time() - start_time), 2)
 
   def RunGenerator(dart_libraries, dart_output_dir,
-                   template_loader, backend_factory):
+                   template_loader, backend_factory, dart_js_interop):
     options = GeneratorOptions(
         template_loader, webkit_database, type_registry, renamer,
-        metadata)
+        metadata, dart_js_interop)
     dart_library_emitter = DartLibraryEmitter(
         emitters, dart_output_dir, dart_libraries)
     event_generator = HtmlEventGenerator(webkit_database, renamer, metadata,
@@ -130,28 +133,30 @@
 
     generator.Generate(webkit_database, common_database, generate_interface)
 
-    dart_library_emitter.EmitLibraries(auxiliary_dir)
+    dart_library_emitter.EmitLibraries(auxiliary_dir, dart_js_interop)
 
   if dart2js_output_dir:
     template_paths = ['html/dart2js', 'html/impl', 'html/interface', '']
     template_loader = TemplateLoader(template_dir,
                                      template_paths,
-                                     {'DARTIUM': False, 'DART2JS': True})
+                                     {'DARTIUM': False,
+                                      'DART2JS': True,
+                                      'JSINTEROP': False})
     backend_options = GeneratorOptions(
         template_loader, webkit_database, type_registry, renamer,
-        metadata)
+        metadata, dart_js_interop)
     backend_factory = lambda interface:\
         Dart2JSBackend(interface, backend_options, logging_level)
 
     dart_output_dir = os.path.join(dart2js_output_dir, 'dart')
     dart_libraries = DartLibraries(
-        HTML_LIBRARY_NAMES, template_loader, 'dart2js', dart2js_output_dir)
+        HTML_LIBRARY_NAMES, template_loader, 'dart2js', dart2js_output_dir, dart_js_interop)
 
     print '\nGenerating dart2js:\n'
     start_time = time.time()
 
     RunGenerator(dart_libraries, dart_output_dir, template_loader,
-                 backend_factory)
+                 backend_factory, dart_js_interop)
 
     print 'Generated dart2js in %s seconds' % round(time.time() - start_time, 2)
 
@@ -159,23 +164,25 @@
     template_paths = ['html/dartium', 'html/impl', 'html/interface', '']
     template_loader = TemplateLoader(template_dir,
                                      template_paths,
-                                     {'DARTIUM': True, 'DART2JS': False})
+                                     {'DARTIUM': True,
+                                      'DART2JS': False,
+                                      'JSINTEROP': dart_js_interop})
     backend_options = GeneratorOptions(
         template_loader, webkit_database, type_registry, renamer,
-        metadata)
+        metadata, dart_js_interop)
     cpp_output_dir = os.path.join(dartium_output_dir, 'cpp')
     cpp_library_emitter = CPPLibraryEmitter(emitters, cpp_output_dir)
     dart_output_dir = os.path.join(dartium_output_dir, 'dart')
     backend_factory = lambda interface:\
         DartiumBackend(interface, cpp_library_emitter, backend_options)
     dart_libraries = DartLibraries(
-        HTML_LIBRARY_NAMES, template_loader, 'dartium', dartium_output_dir)
+        HTML_LIBRARY_NAMES, template_loader, 'dartium', dartium_output_dir, dart_js_interop)
 
     print '\nGenerating dartium:\n'
     start_time = time.time()
 
-    RunGenerator(dart_libraries, dart_output_dir,
-                 template_loader, backend_factory)
+    RunGenerator(dart_libraries, dart_output_dir, template_loader,
+                 backend_factory, dart_js_interop)
     print 'Generated dartium in %s seconds' % round(time.time() - start_time, 2)
 
     cpp_library_emitter.EmitDerivedSources(
@@ -239,6 +246,9 @@
   parser.add_option('--logging', dest='logging', type='int',
                     action='store', default=logging.NOTSET,
                     help='Level of logging 20 is Info, 30 is Warnings, 40 is Errors')
+  parser.add_option('--gen-interop', dest='dart_js_interop',
+                    action='store_true', default=False,
+                    help='Use Javascript objects (dart:js) accessing the DOM in _blink')
 
   (options, args) = parser.parse_args()
 
@@ -269,7 +279,7 @@
   database = fremontcutbuilder.main(options.parallel, logging_level=logging_level, examine_idls=options.examine_idls)
 
   GenerateFromDatabase(database, dart2js_output_dir, dartium_output_dir,
-      options.update_dom_metadata, logging_level)
+      options.update_dom_metadata, logging_level, options.dart_js_interop)
 
   file_generation_start_time = time.time()
 
diff --git a/tools/dom/scripts/generator.py b/tools/dom/scripts/generator.py
index 7ad6070..688a5f9 100644
--- a/tools/dom/scripts/generator.py
+++ b/tools/dom/scripts/generator.py
@@ -514,13 +514,55 @@
       parameter_count = len(self.param_infos)
     return ', '.join(map(param_name, self.param_infos[:parameter_count]))
 
-  def ParametersAsListOfVariables(self, parameter_count=None):
+  def wrap_unwrap_list_blink(self, return_type, type_registry):
+    """Return True if the type is a List<Node>"""
+    return return_type.startswith('List<Node>')
+
+  def wrap_unwrap_type_blink(self, return_type, type_registry):
+    """Returns True if the type is a blink type that requires wrap_jso or unwrap_jso.
+    Notice we look for any class that starts with HtmlNNNN e.g., HtmlDocument, etc. """
+    return (type_registry.HasInterface(return_type) or not(return_type) or
+            return_type == 'Object' or return_type.startswith('Html') or
+            return_type == 'MutationObserver')
+
+  def ParametersAsListOfVariables(self, parameter_count=None, type_registry=None, dart_js_interop=False):
     """Returns a list of the first parameter_count parameter names
     as raw variables.
     """
     if parameter_count is None:
       parameter_count = len(self.param_infos)
-    return [p.name for p in self.param_infos[:parameter_count]]
+    if not type_registry:
+      return [p.name for p in self.param_infos[:parameter_count]]
+    else:
+      parameters = []
+      for p in self.param_infos[:parameter_count]:
+        type_id = p.type_id
+        # Unwrap the type to get the JsObject if Type is:
+        #
+        #    - known IDL type
+        #    - type_id is None then it's probably a union type or overloaded
+        #      it's a dynamic/any type
+        #    - type is Object
+        #
+        # JsObject maybe stored in the Dart class.
+        if (self.wrap_unwrap_type_blink(type_id, type_registry)):
+          if dart_js_interop and type_id == 'EventListener' and (self.name == 'addEventListener' or
+                                                                 self.name == 'addListener'):
+            # Events fired need to wrap the Javascript Object passed as a parameter in event.
+            parameters.append('unwrap_jso((Event event) => %s(wrap_jso(event)))' % p.name)
+          else:
+            parameters.append('unwrap_jso(%s)' % p.name)
+        else:
+          if dart_js_interop:
+            passParam = p.name
+            if type_id == 'Dictionary':
+              # Need to pass the IDL Dictionary from Dart Map to JavaScript object.
+              passParam = '{0} != null ? new js.JsObject.jsify({0}) : {0}'.format(p.name)
+          else:
+            passParam = p.name
+          parameters.append(passParam)
+
+      return parameters
 
   def ParametersAsStringOfVariables(self, parameter_count=None):
     """Returns a string containing the first parameter_count parameter names
@@ -1282,6 +1324,9 @@
     self._renamer = renamer
     self._cache = {}
 
+  def HasInterface(self, type_name):
+    return self._database.HasInterface(type_name)
+
   def TypeInfo(self, type_name):
     if not type_name in self._cache:
       self._cache[type_name] = self._TypeInfo(type_name)
diff --git a/tools/dom/scripts/htmldartgenerator.py b/tools/dom/scripts/htmldartgenerator.py
index 860d7e1..3edf60e 100644
--- a/tools/dom/scripts/htmldartgenerator.py
+++ b/tools/dom/scripts/htmldartgenerator.py
@@ -68,7 +68,7 @@
         "\n  $TYPE get on =>\n    new $TYPE(this);\n",
         TYPE=events_class_name)
 
-  def AddMembers(self, interface, declare_only=False):
+  def AddMembers(self, interface, declare_only=False, dart_js_interop=False):
     for const in sorted(interface.constants, ConstantOutputOrder):
       self.AddConstant(const)
 
@@ -102,7 +102,7 @@
     for id in sorted(operationsByName.keys()):
       operations = operationsByName[id]
       info = AnalyzeOperation(interface, operations)
-      self.AddOperation(info, declare_only)
+      self.AddOperation(info, declare_only, dart_js_interop)
       if ('%s.%s' % (interface.id, info.declared_name) in
           convert_to_future_members):
         self.AddOperation(ConvertToFuture(info), declare_only)
@@ -309,7 +309,7 @@
     else:
       self.EmitAttribute(attribute, attr_name, read_only)
 
-  def AddOperation(self, info, declare_only=False):
+  def AddOperation(self, info, declare_only=False, dart_js_interop=False):
     """ Adds an operation to the generated class.
     Arguments:
       info - The operation info of the operation to be added.
@@ -334,7 +334,7 @@
       self.DeclareOperation(info,
           self.SecureOutputType(info.type_name), method_name)
     else:
-      self.EmitOperation(info, method_name)
+      self.EmitOperation(info, method_name, dart_js_interop)
 
   def _GenerateOverloadDispatcher(self,
       info,
@@ -786,6 +786,13 @@
     if type_name in _secure_base_types:
       return _secure_base_types[type_name]
 
+  def is_DOM_type(self, type_name):
+    try:
+        self._type_registry.TypeInfo(type_name)
+        return True
+    except RuntimeError:
+        return False
+
   def _NarrowToImplementationType(self, type_name):
     return self._type_registry.TypeInfo(type_name).narrow_dart_type()
 
diff --git a/tools/dom/scripts/htmlrenamer.py b/tools/dom/scripts/htmlrenamer.py
index 8d0b7ee..96d3cfc 100644
--- a/tools/dom/scripts/htmlrenamer.py
+++ b/tools/dom/scripts/htmlrenamer.py
@@ -787,6 +787,7 @@
     'Node.get:DOCUMENT_POSITION_FOLLOWING',
     'Node.get:DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC',
     'Node.get:DOCUMENT_POSITION_PRECEDING',
+    'Node.get:childNodes',
     'Node.get:prefix',
     'Node.hasAttributes',
     'Node.isDefaultNamespace',
diff --git a/tools/dom/scripts/systemhtml.py b/tools/dom/scripts/systemhtml.py
index de039ed..69ee642 100644
--- a/tools/dom/scripts/systemhtml.py
+++ b/tools/dom/scripts/systemhtml.py
@@ -558,6 +558,11 @@
       implements_str = ' implements ' + ', '.join(set(implements))
 
     mixins = self._backend.Mixins()
+
+    # TODO(terry): Do we need a more generic solution other than handling NamedNodeMap
+    #              we can't call super on a mixin interface - yet.
+    if self._options.templates._conditions['DARTIUM'] and self._options.dart_js_interop and self._interface.id == 'NamedNodeMap':
+      mixins = None
     mixins_str = ''
     if mixins:
       mixins_str = ' with ' + ', '.join(mixins)
@@ -569,13 +574,63 @@
 
     class_modifiers = ''
     if (self._renamer.ShouldSuppressInterface(self._interface) or
-        IsPureInterface(self._interface.id)):
-      class_modifiers = 'abstract '
+      IsPureInterface(self._interface.id)):
+      # XMLHttpRequestProgressEvent can't be abstract we need to instantiate
+      # for JsInterop.
+      if (not(isinstance(self._backend, Dart2JSBackend)) and
+        self._interface.id == 'XMLHttpRequestProgressEvent'):
+        # Only suppress abstract for XMLHttpRequestProgressEvent for Dartium.
+        # Need to be able to instantiate the class; can't be abstract.
+        class_modifiers = ''
+      else:
+        class_modifiers = 'abstract '
 
     native_spec = ''
     if not IsPureInterface(self._interface.id):
       native_spec = self._backend.NativeSpec()
 
+    class_name = self._interface_type_info.implementation_name()
+
+    js_interop_equivalence_op = \
+      '  bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);\n'
+    # ClientRect overrides the equivalence operator.
+    if interface_name == 'ClientRect' or interface_name == 'DomRectReadOnly':
+        js_interop_equivalence_op = ''
+
+    js_interop_wrapper = '''
+
+  static {0} internalCreate{0}() {{
+    return new {0}._internalWrap();
+  }}
+
+  factory {0}._internalWrap() {{
+    return new {0}._internal();
+  }}
+
+  {0}._internal() : super._internal();
+
+'''.format(class_name)
+    """
+    TODO(terry): Don't use Dart expando really don't need.
+      final Object expandoJsObject = new Object();
+      final Expando<JsObject> dartium_expando = new Expando<JsObject>("Expando_jsObject");
+    """
+    if base_class == 'NativeFieldWrapperClass2':
+        js_interop_wrapper = '''
+  static {0} internalCreate{0}() {{
+    return new {0}._internalWrap();
+  }}
+
+  JsObject blink_jsObject = null;
+
+  factory {0}._internalWrap() {{
+    return new {0}._internal();
+  }}
+
+  {0}._internal() {{ }}
+
+{1}'''.format(class_name, js_interop_equivalence_op)
+
     implementation_members_emitter = implementation_emitter.Emit(
         self._backend.ImplementationTemplate(),
         LIBRARYNAME='dart.dom.%s' % self._library_name,
@@ -614,6 +669,13 @@
     for parent in self._database.Hierarchy(self._interface):
       if parent.id == 'Element':
         isElement = True
+
+    # Write out the JsInterop code.
+    if (implementation_members_emitter and
+        self._options.templates._conditions['DARTIUM'] and
+        self._options.dart_js_interop):
+      implementation_members_emitter.Emit(js_interop_wrapper)
+
     if isElement and self._interface.id != 'Element':
       implementation_members_emitter.Emit(
           '  /**\n'
@@ -631,7 +693,7 @@
       self._backend.AddMembers(self._database.GetInterface(merged_interface),
         not self._backend.ImplementsMergedMembers())
 
-    self._backend.AddMembers(self._interface)
+    self._backend.AddMembers(self._interface, False, self._options.dart_js_interop)
     self._backend.AddSecondaryMembers(self._interface)
     self._event_generator.EmitStreamGetters(
         self._interface,
@@ -967,7 +1029,7 @@
   def OmitOperationOverrides(self):
     return True
 
-  def EmitOperation(self, info, html_name):
+  def EmitOperation(self, info, html_name, dart_js_interop=False):
     """
     Arguments:
       info: An OperationInfo object.
@@ -1225,18 +1287,19 @@
   def AddTypeEntry(self, basename, idl_name, dart_name):
     self._dart_libraries.AddTypeEntry(basename, idl_name, dart_name)
 
-  def EmitLibraries(self, auxiliary_dir):
+  def EmitLibraries(self, auxiliary_dir, dart_js_interop):
     self._dart_libraries.Emit(self._multiemitter, auxiliary_dir)
 
 # ------------------------------------------------------------------------------
 class DartLibrary():
-  def __init__(self, name, template_loader, library_type, output_dir):
+  def __init__(self, name, template_loader, library_type, output_dir, dart_js_interop):
     self._template = template_loader.Load(
         '%s_%s.darttemplate' % (name, library_type))
     self._dart_path = os.path.join(
         output_dir, '%s_%s.dart' % (name, library_type))
     self._paths = []
     self._typeMap = {}
+    self._dart_js_interop = dart_js_interop
 
   def AddFile(self, path):
     self._paths.append(path)
@@ -1255,16 +1318,20 @@
     emitters = library_emitter.Emit(
         self._template, AUXILIARY_DIR=massage_path(auxiliary_dir))
     if isinstance(emitters, tuple):
-      imports_emitter, map_emitter = emitters
+      if self._dart_js_interop:
+        imports_emitter, map_emitter, function_emitter = emitters
+      else:
+        imports_emitter, map_emitter = emitters
+        function_emitter = None
     else:
-      imports_emitter, map_emitter = emitters, None
-
+      imports_emitter, map_emitter, function_emitter = emitters, None, None
 
     for path in sorted(self._paths):
       relpath = os.path.relpath(path, library_file_dir)
       imports_emitter.Emit(
           "part '$PATH';\n", PATH=massage_path(relpath))
 
+    # Emit the $!TYPE_MAP
     if map_emitter:
       items = self._typeMap.items()
       items.sort()
@@ -1274,15 +1341,27 @@
           IDL_NAME=idl_name,
           DART_NAME=dart_name)
 
+    # Emit the $!TYPE_FUNCTION_MAP
+    if function_emitter:
+      items = self._typeMap.items()
+      items.sort()
+      for (idl_name, dart_name) in items:
+        function_emitter.Emit(
+          "  '$IDL_NAME': () => $DART_NAME.internalCreate$DART_NAME,\n",
+          IDL_NAME=idl_name,
+          DART_NAME=dart_name)
+      if self._dart_path.endswith('html_dartium.dart'):
+        function_emitter.Emit("  'polymer-element': () => HtmlElement.internalCreateHtmlElement,\n")
+
 
 # ------------------------------------------------------------------------------
 
 class DartLibraries():
-  def __init__(self, libraries, template_loader, library_type, output_dir):
+  def __init__(self, libraries, template_loader, library_type, output_dir, dart_js_interop):
     self._libraries = {}
     for library_name in libraries:
       self._libraries[library_name] = DartLibrary(
-          library_name, template_loader, library_type, output_dir)
+          library_name, template_loader, library_type, output_dir, dart_js_interop)
 
   def AddFile(self, basename, library_name, path):
     self._libraries[library_name].AddFile(path)
diff --git a/tools/dom/scripts/systemnative.py b/tools/dom/scripts/systemnative.py
index 541b5ba..99e511a 100644
--- a/tools/dom/scripts/systemnative.py
+++ b/tools/dom/scripts/systemnative.py
@@ -383,6 +383,7 @@
     self._cpp_impl_includes = None
     self._cpp_definitions_emitter = None
     self._cpp_resolver_emitter = None
+    self._dart_js_interop = options.dart_js_interop
 
   def ImplementsMergedMembers(self):
     # We could not add merged functions to implementation class because
@@ -666,22 +667,24 @@
         self._interface, self._interface.id, '  ')
 
     self._members_emitter.Emit(
-        '\n  $(ANNOTATIONS)factory $CTOR($PARAMS) => _create($FACTORY_PARAMS);\n',
+        '\n  $(ANNOTATIONS)factory $CTOR($PARAMS) => wrap_jso(_create($FACTORY_PARAMS));\n',
         ANNOTATIONS=annotations,
         CTOR=constructor_info._ConstructorFullName(self._DartType),
         PARAMS=constructor_info.ParametersAsDeclaration(self._DartType),
         FACTORY_PARAMS= \
             constructor_info.ParametersAsArgumentList())
 
-    constructor_callback_cpp_name = 'constructorCallback'
-    self._EmitConstructorInfrastructure(
-        constructor_info, "", constructor_callback_cpp_name, '_create',
-        is_custom=True)
+    # MutationObserver has custom _create.  TODO(terry): Consider table but this is only one.
+    if self._interface.id != 'MutationObserver':
+        constructor_callback_cpp_name = 'constructorCallback'
+        self._EmitConstructorInfrastructure(
+            constructor_info, "", constructor_callback_cpp_name, '_create',
+            is_custom=True)
 
-    self._cpp_declarations_emitter.Emit(
-        '\n'
-        'void $CPP_CALLBACK(Dart_NativeArguments);\n',
-        CPP_CALLBACK=constructor_callback_cpp_name)
+        self._cpp_declarations_emitter.Emit(
+            '\n'
+            'void $CPP_CALLBACK(Dart_NativeArguments);\n',
+            CPP_CALLBACK=constructor_callback_cpp_name)
 
     return True
 
@@ -916,6 +919,24 @@
     dart_declaration = '%s get %s' % (return_type, html_name)
     is_custom = _IsCustom(attr) and (_IsCustomValue(attr, None) or
                                      _IsCustomValue(attr, 'Getter'))
+
+    # Operation uses blink?
+    wrap_unwrap_list = [];
+    return_wrap_jso = False
+    if self._dart_use_blink:
+        # Unwrap the type to get the JsObject if Type is:
+        #
+        #    - known IDL type
+        #    - type_id is None then it's probably a union type or overloaded
+        #      it's a dynamic/any type
+        #    - type is Object
+        #
+        # JsObject maybe stored in the Dart class.
+        return_wrap_jso = (isinstance(type_info, InterfaceIDLTypeInfo) or
+                           not(type_info) or attr.type.id == 'Object')
+    wrap_unwrap_list.append(return_wrap_jso)       # wrap_jso the returned object
+    wrap_unwrap_list.append(self._dart_use_blink)  # this must be unwrap_jso
+
     # This seems to have been replaced with Custom=Getter (see above), but
     # check to be sure we don't see the old syntax
     assert(not ('CustomGetter' in attr.ext_attrs))
@@ -925,7 +946,8 @@
         self.DeriveNativeEntry(attr.id, 'Getter', None)
     cpp_callback_name = self._GenerateNativeBinding(attr.id, 1,
         dart_declaration, attr.is_static, return_type, parameters,
-        native_suffix, is_custom, auto_scope_setup, native_entry=native_entry)
+        native_suffix, is_custom, auto_scope_setup, native_entry=native_entry,
+        wrap_unwrap_list=wrap_unwrap_list)
     if is_custom:
       return
 
@@ -963,10 +985,17 @@
         auto_scope_setup)
 
   def _AddSetter(self, attr, html_name):
-    type_info = self._TypeInfo(attr.type.id)
     return_type = 'void'
-    parameters = ['value']
     ptype = self._DartType(attr.type.id)
+
+    type_info = self._TypeInfo(attr.type.id)
+
+    # Is the setter value a DartClass (that has a JsObject) or the type is
+    # None (it's a dynamic/any type) then unwrap_jso before passing to blink.
+    parameters = ['unwrap_jso(value)' if (isinstance(type_info, InterfaceIDLTypeInfo) or
+                                          not(attr.type.id) or ptype == 'Object')
+                  else 'value']
+
     dart_declaration = 'void set %s(%s value)' % (html_name, ptype)
     is_custom = _IsCustom(attr) and (_IsCustomValue(attr, None) or
                                      _IsCustomValue(attr, 'Setter'))
@@ -978,9 +1007,14 @@
     auto_scope_setup = self._GenerateAutoSetupScope(attr.id, native_suffix)
     native_entry = \
         self.DeriveNativeEntry(attr.id, 'Setter', None)
+
+    # setters return no object and if blink this must be unwrapped.?
+    wrap_unwrap_list = [False, self._dart_use_blink];
+
     cpp_callback_name = self._GenerateNativeBinding(attr.id, 2,
         dart_declaration, attr.is_static, return_type, parameters,
-        native_suffix, is_custom, auto_scope_setup, native_entry=native_entry)
+        native_suffix, is_custom, auto_scope_setup, native_entry=native_entry,
+        wrap_unwrap_list=wrap_unwrap_list)
     if is_custom:
       return
 
@@ -1047,18 +1081,41 @@
       dart_qualified_name = \
           self.DeriveQualifiedBlinkName(self._interface.id,
                                         dart_native_name)
-      self._members_emitter.Emit(
-          '\n'
-          '  $TYPE operator[](int index) {\n'
-          '    if (index < 0 || index >= length)\n'
-          '      throw new RangeError.index(index, this);\n'
-          '    return $(DART_NATIVE_NAME)(this, index);\n'
-          '  }\n\n'
-          '  $TYPE _nativeIndexedGetter(int index) =>'
-          ' $(DART_NATIVE_NAME)(this, index);\n',
-          DART_NATIVE_NAME=dart_qualified_name,
-          TYPE=self.SecureOutputType(element_type),
-          INTERFACE=self._interface.id)
+
+      type_info = self._TypeInfo(element_type)
+      # Does nativeIndexGetter return a DartClass (JsObject) if so wrap_jso.
+      wrap_jso_start = ''
+      wrap_jso_end = ''
+      if isinstance(type_info, InterfaceIDLTypeInfo):
+          wrap_jso_start = 'wrap_jso('
+          wrap_jso_end = ')'
+      blinkNativeIndexed = """
+  $TYPE operator[](int index) {
+    if (index < 0 || index >= length)
+      throw new RangeError.index(index, this);
+    return %s$(DART_NATIVE_NAME)(unwrap_jso(this), index)%s;
+  }
+
+  $TYPE _nativeIndexedGetter(int index) => %s$(DART_NATIVE_NAME)(unwrap_jso(this), index)%s;
+ """ % (wrap_jso_start, wrap_jso_end, wrap_jso_start, wrap_jso_end)
+      # Wrap the type to store the JsObject if Type is:
+      #
+      #    - known IDL type
+      #    - type_id is None then it's probably a union type or overloaded
+      #      it's a dynamic/any type
+      #    - type is Object
+      #
+      # JsObject maybe stored in the Dart class.
+      if isinstance(type_info, InterfaceIDLTypeInfo) or not(type_info) or dart_element_type == 'Object':
+          blinkNativeIndexedGetter = \
+              ' {0}$(DART_NATIVE_NAME)(unwrap_jso(this), index){1};\n'.format('wrap_jso(', ')')
+      else:
+          blinkNativeIndexedGetter = \
+              ' $(DART_NATIVE_NAME)(unwrap_jso(this), index);\n'
+      self._members_emitter.Emit(blinkNativeIndexed,
+                                 DART_NATIVE_NAME=dart_qualified_name,
+                                 TYPE=self.SecureOutputType(element_type),
+                                 INTERFACE=self._interface.id)
 
     if self._HasNativeIndexSetter():
       self._EmitNativeIndexSetter(dart_element_type)
@@ -1127,14 +1184,16 @@
       dart_declaration, False, return_type, parameters,
       'Callback', True, False)
 
-  def EmitOperation(self, info, html_name):
+  def EmitOperation(self, info, html_name, dart_js_interop=False):
     """
     Arguments:
       info: An OperationInfo object.
     """
     return_type = self.SecureOutputType(info.type_name, False, True)
+
     formals = info.ParametersAsDeclaration(self._DartType)
-    parameters = info.ParametersAsListOfVariables()
+
+    parameters = info.ParametersAsListOfVariables(None, self._type_registry if self._dart_use_blink else None, dart_js_interop)
     dart_declaration = '%s%s %s(%s)' % (
         'static ' if info.IsStatic() else '',
         return_type,
@@ -1142,10 +1201,30 @@
         formals)
 
     operation = info.operations[0]
+
     is_custom = _IsCustom(operation)
     has_optional_arguments = any(IsOptional(argument) for argument in operation.arguments)
     needs_dispatcher = not is_custom and (len(info.operations) > 1 or has_optional_arguments)
 
+    # Operation uses blink?
+    wrap_unwrap_list = [];
+    return_wrap_jso = False
+    # return type wrapped?
+    if self._dart_use_blink:
+        # Wrap the type to store the JsObject if Type is:
+        #
+        #    - known IDL type
+        #    - type_id is None then it's probably a union type or overloaded
+        #      it's a dynamic/any type
+        #    - type is Object
+        #
+        # JsObject maybe stored in the Dart class.
+        return_wrap_jso = (info.wrap_unwrap_type_blink(return_type, self._type_registry) or
+                           return_type == 'Rectangle' or
+                           info.wrap_unwrap_list_blink(return_type, self._type_registry))
+    wrap_unwrap_list.append(return_wrap_jso)       # wrap_jso the returned object
+    wrap_unwrap_list.append(self._dart_use_blink)  # The 'this' parameter must be unwrap_jso
+
     if info.callback_args:
       self._AddFutureifiedOperation(info, html_name)
     elif not needs_dispatcher:
@@ -1159,7 +1238,8 @@
         info.name, argument_count, dart_declaration,
         info.IsStatic(), return_type, parameters,
         native_suffix, is_custom, auto_scope_setup,
-        native_entry=native_entry)
+        native_entry=native_entry,
+        wrap_unwrap_list=wrap_unwrap_list)
       if not is_custom:
         self._GenerateOperationNativeCallback(operation, operation.arguments, cpp_callback_name, auto_scope_setup)
     else:
@@ -1170,16 +1250,23 @@
     def GenerateCall(
         stmts_emitter, call_emitter, version, operation, argument_count):
       native_suffix = 'Callback'
-      actuals = info.ParametersAsListOfVariables(argument_count)
+      actuals = info.ParametersAsListOfVariables(argument_count,
+                                                 self._type_registry if self._dart_use_blink else None,
+                                                 self._dart_js_interop)
       actuals_s = ", ".join(actuals)
       formals=actuals
       return_type = self.SecureOutputType(operation.type.id)
+
+      return_wrap_jso = False
+      if self._dart_use_blink:
+         return_wrap_jso = self._type_registry.HasInterface(return_type)
+
       native_suffix = 'Callback'
       is_custom = _IsCustom(operation)
       base_name = '_%s_%s' % (operation.id, version)
       static = True
       if not operation.is_static:
-        actuals = ['this'] + actuals
+        actuals = ['unwrap_jso(this)' if self._dart_use_blink else 'this'] + actuals
         formals = ['mthis'] + formals
       actuals_s = ", ".join(actuals)
       formals_s = ", ".join(formals)
@@ -1191,7 +1278,10 @@
       overload_name = \
           self.DeriveQualifiedBlinkName(self._interface.id,
                                         overload_base_name)
-      call_emitter.Emit('$NAME($ARGS)', NAME=overload_name, ARGS=actuals_s)
+      if return_wrap_jso:
+          call_emitter.Emit('wrap_jso($NAME($ARGS))', NAME=overload_name, ARGS=actuals_s)
+      else:
+          call_emitter.Emit('$NAME($ARGS)', NAME=overload_name, ARGS=actuals_s)
       auto_scope_setup = \
         self._GenerateAutoSetupScope(base_name, native_suffix)
       cpp_callback_name = self._GenerateNativeBinding(
@@ -1604,7 +1694,7 @@
   def _GenerateNativeBinding(self, idl_name, argument_count, dart_declaration,
       static, return_type, parameters, native_suffix, is_custom,
       auto_scope_setup=True, emit_metadata=True, emit_to_native=False,
-      native_entry=None):
+      native_entry=None, wrap_unwrap_list=[]):
     metadata = []
     if emit_metadata:
       metadata = self._metadata.GetFormattedMetadata(
@@ -1623,7 +1713,10 @@
 
     if not static:
         formals = ", ".join(['mthis'] + parameters)
-        actuals = ", ".join(['this'] + parameters)
+        if wrap_unwrap_list and wrap_unwrap_list[1]:
+            actuals = ", ".join(['unwrap_jso(this)'] + parameters)
+        else:
+            actuals = ", ".join(['this'] + parameters)
     else:
         formals = ", ".join(parameters)
         actuals = ", ".join(parameters)
@@ -1640,13 +1733,28 @@
                 METADATA=metadata,
                 DART_DECLARATION=dart_declaration)
         else:
-            caller_emitter.Emit(
-                '\n'
-                '  $METADATA$DART_DECLARATION => $DART_NAME($ACTUALS);\n',
-                METADATA=metadata,
-                DART_DECLARATION=dart_declaration,
-                DART_NAME=full_dart_name,
-                ACTUALS=actuals)
+            emit_template = '''
+  $METADATA$DART_DECLARATION => $DART_NAME($ACTUALS);
+  '''
+            if wrap_unwrap_list and wrap_unwrap_list[0]:
+                emit_jso_template = '''
+  $METADATA$DART_DECLARATION => %s($DART_NAME($ACTUALS));
+  '''
+                if return_type == 'Rectangle':
+                    jso_util_method = 'make_dart_rectangle'
+                # TODO(terry): More checks that the return is a List<Node>.
+                elif return_type.startswith('List<'):
+                    jso_util_method = 'wrap_jso_list'
+                else:
+                    jso_util_method = 'wrap_jso'
+                # Always return List<String> unwrapped.
+                if return_type != 'List<String>':
+                  emit_template = emit_jso_template % jso_util_method
+            caller_emitter.Emit(emit_template,
+                                METADATA=metadata,
+                                DART_DECLARATION=dart_declaration,
+                                DART_NAME=full_dart_name,
+                                ACTUALS=actuals)
     cpp_callback_name = '%s%s' % (idl_name, native_suffix)
 
     self._cpp_resolver_emitter.Emit(
diff --git a/tools/dom/src/NodeValidatorBuilder.dart b/tools/dom/src/NodeValidatorBuilder.dart
index 7ebeb36..4a41232 100644
--- a/tools/dom/src/NodeValidatorBuilder.dart
+++ b/tools/dom/src/NodeValidatorBuilder.dart
@@ -259,17 +259,17 @@
 }
 
 class _SimpleNodeValidator implements NodeValidator {
-  final Set<String> allowedElements;
-  final Set<String> allowedAttributes;
-  final Set<String> allowedUriAttributes;
+  final Set<String> allowedElements = new Set<String>();
+  final Set<String> allowedAttributes = new Set<String>();
+  final Set<String> allowedUriAttributes = new Set<String>();
   final UriPolicy uriPolicy;
 
   factory _SimpleNodeValidator.allowNavigation(UriPolicy uriPolicy) {
     return new _SimpleNodeValidator(uriPolicy,
-      allowedElements: [
+      allowedElements: const [
         'A',
         'FORM'],
-      allowedAttributes: [
+      allowedAttributes: const [
         'A::accesskey',
         'A::coords',
         'A::hreflang',
@@ -286,7 +286,7 @@
         'FORM::novalidate',
         'FORM::target',
       ],
-      allowedUriAttributes: [
+      allowedUriAttributes: const [
         'A::href',
         'FORM::action',
       ]);
@@ -294,10 +294,10 @@
 
   factory _SimpleNodeValidator.allowImages(UriPolicy uriPolicy) {
     return new _SimpleNodeValidator(uriPolicy,
-      allowedElements: [
+      allowedElements: const [
         'IMG'
       ],
-      allowedAttributes: [
+      allowedAttributes: const [
         'IMG::align',
         'IMG::alt',
         'IMG::border',
@@ -309,14 +309,14 @@
         'IMG::vspace',
         'IMG::width',
       ],
-      allowedUriAttributes: [
+      allowedUriAttributes: const [
         'IMG::src',
       ]);
   }
 
   factory _SimpleNodeValidator.allowTextElements() {
     return new _SimpleNodeValidator(null,
-      allowedElements: [
+      allowedElements: const [
         'B',
         'BLOCKQUOTE',
         'BR',
@@ -344,13 +344,18 @@
    */
   _SimpleNodeValidator(this.uriPolicy,
       {Iterable<String> allowedElements, Iterable<String> allowedAttributes,
-      Iterable<String> allowedUriAttributes}):
-      this.allowedElements = allowedElements != null ?
-          new Set.from(allowedElements) : new Set(),
-      this.allowedAttributes = allowedAttributes != null ?
-          new Set.from(allowedAttributes) : new Set(),
-      this.allowedUriAttributes = allowedUriAttributes != null ?
-          new Set.from(allowedUriAttributes) : new Set();
+        Iterable<String> allowedUriAttributes}) {
+    this.allowedElements.addAll(allowedElements ?? const []);
+    allowedAttributes = allowedAttributes ?? const [];
+    allowedUriAttributes = allowedUriAttributes ?? const [];
+    var legalAttributes = allowedAttributes.where(
+        (x) => !_Html5NodeValidator._uriAttributes.contains(x));
+    var extraUriAttributes = allowedAttributes.where(
+        (x) => _Html5NodeValidator._uriAttributes.contains(x));
+    this.allowedAttributes.addAll(legalAttributes);
+    this.allowedUriAttributes.addAll(allowedUriAttributes);
+    this.allowedUriAttributes.addAll(extraUriAttributes);
+  }
 
   bool allowsElement(Element element) {
     return allowedElements.contains(element.tagName);
diff --git a/tools/dom/src/native_DOMImplementation.dart b/tools/dom/src/native_DOMImplementation.dart
index c0eee34..34c032b 100644
--- a/tools/dom/src/native_DOMImplementation.dart
+++ b/tools/dom/src/native_DOMImplementation.dart
@@ -187,7 +187,10 @@
     return element;
   }
 
+  // TODO(terry): Enable below for Dartium w/ interop and remove other static window().
+  // static window() => wrap_jso(_blink.Blink_Utils.window()['window']);
   static window() => _blink.Blink_Utils.window();
+
   static forwardingPrint(String message) => _blink.Blink_Utils.forwardingPrint(message);
   static void spawnDomHelper(Function f, int replyTo) =>
       _blink.Blink_Utils.spawnDomHelper(f, replyTo);
@@ -798,16 +801,16 @@
   }
 
   static void _register(Document document, String tag, Type customType,
-    String extendsTagName) => _blink.Blink_Utils.register(document, tag, customType, extendsTagName);
+    String extendsTagName) => _blink.Blink_Utils.register(unwrap_jso(document), tag, customType, extendsTagName);
 
   static Element createElement(Document document, String tagName) =>
-    _blink.Blink_Utils.createElement(document, tagName);
+    wrap_jso(_blink.Blink_Utils.createElement(unwrap_jso(document), tagName));
 
   static void initializeCustomElement(HtmlElement element) =>
-    _blink.Blink_Utils.initializeCustomElement(element);
+    _blink.Blink_Utils.initializeCustomElement(unwrap_jso(element));
 
   static Element changeElementWrapper(HtmlElement element, Type type) =>
-    _blink.Blink_Utils.changeElementWrapper(element, type);
+    _blink.Blink_Utils.changeElementWrapper(unwrap_jso(element), type);
 }
 
 class _DOMWindowCrossFrame extends NativeFieldWrapperClass2 implements
diff --git a/tools/dom/templates/html/dartium/html_dartium.darttemplate b/tools/dom/templates/html/dartium/html_dartium.darttemplate
index 1d55826..c6a200f 100644
--- a/tools/dom/templates/html/dartium/html_dartium.darttemplate
+++ b/tools/dom/templates/html/dartium/html_dartium.darttemplate
@@ -37,6 +37,7 @@
 import 'dart:html_common';
 import 'dart:indexed_db';
 import 'dart:indexed_db' show indexed_dbBlinkMap;
+import 'dart:indexed_db' show indexed_dbBlinkFunctionMap;
 import 'dart:isolate';
 import 'dart:js' as js;
 import "dart:convert";
@@ -48,14 +49,17 @@
 import 'dart:typed_data';
 import 'dart:web_gl' as gl;
 import 'dart:web_gl' show web_glBlinkMap;
+import 'dart:web_gl' show web_glBlinkFunctionMap;
 import 'dart:web_sql';
 // Not actually used, but imported since dart:html can generate these objects.
 import 'dart:svg' as svg;
 import 'dart:svg' show svgBlinkMap;
+import 'dart:svg' show svgBlinkFunctionMap;
 import 'dart:svg' show Matrix;
 import 'dart:svg' show SvgSvgElement;
 import 'dart:web_audio' as web_audio;
 import 'dart:web_audio' show web_audioBlinkMap;
+import 'dart:web_audio' show web_audioBlinkFunctionMap;
 import 'dart:_blink' as _blink;
 
 export 'dart:math' show Rectangle, Point;
@@ -111,7 +115,13 @@
   if (_window != null) {
     return _window;
   }
+$if DARTIUM
+$if JSINTEROP
+  _window = wrap_jso(js.context['window']);
+$else
   _window = _Utils.window();
+$endif
+$endif
   return _window;
 }
 
@@ -239,3 +249,187 @@
   }
   return null;
 }
+
+
+$if JSINTEROP
+// FIXME: Can we make this private?
+final htmlBlinkFunctionMap = {
+$!TYPE_FUNCTION_MAP
+};
+
+// TODO(terry): We may want to move this elsewhere if html becomes
+// a package to avoid dartium depending on pkg:html.
+getHtmlCreateFunction(String key) {
+  var result;
+
+  // TODO(vsm): Add Cross Frame and JS types here as well.
+
+  // Check the html library.
+  result = _getHtmlFunction(key);
+  if (result != null) {
+    return result;
+  }
+
+  // Check the web gl library.
+  result = _getWebGlFunction(key);
+  if (result != null) {
+    return result;
+  }
+
+  // Check the indexed db library.
+  result = _getIndexDbFunction(key);
+  if (result != null) {
+    return result;
+  }
+
+  // Check the web audio library.
+  result = _getWebAudioFunction(key);
+  if (result != null) {
+    return result;
+  }
+
+  // Check the web sql library.
+  result = _getWebSqlFunction(key);
+  if (result != null) {
+    return result;
+  }
+
+  // Check the svg library.
+  result = _getSvgFunction(key);
+  if (result != null) {
+    return result;
+  }
+
+  return null;
+}
+
+Type _getHtmlFunction(String key) {
+  if (htmlBlinkFunctionMap.containsKey(key)) {
+    return htmlBlinkFunctionMap[key]();
+  }
+  return null;
+}
+
+Type _getWebGlFunction(String key) {
+  if (web_glBlinkFunctionMap.containsKey(key)) {
+    return web_glBlinkFunctionMap[key]();
+  }
+  return null;
+}
+
+Type _getIndexDbFunction(String key) {
+  if (indexed_dbBlinkFunctionMap.containsKey(key)) {
+    return indexed_dbBlinkFunctionMap[key]();
+  }
+  return null;
+}
+
+Type _getWebAudioFunction(String key) {
+  if (web_audioBlinkFunctionMap.containsKey(key)) {
+    return web_audioBlinkFunctionMap[key]();
+  }
+  return null;
+}
+
+Type _getWebSqlFunction(String key) {
+  if (web_sqlBlinkFunctionMap.containsKey(key)) {
+    return web_sqlBlinkFunctionMap[key]();
+  }
+  return null;
+}
+
+Type _getSvgFunction(String key) {
+  if (svgBlinkFunctionMap.containsKey(key)) {
+    return svgBlinkFunctionMap[key]();
+  }
+  return null;
+}
+
+
+/******************************************************************************
+ **********                                                          **********
+ **********                    JS Interop Support                    **********
+ **********                                                          **********
+ ******************************************************************************/
+
+Rectangle make_dart_rectangle(r) => new Rectangle(r['top'], r['left'], r['width'], r['height']);
+
+
+/** Expando for JsObject, used by every Dart class associated with a Javascript
+ *  class (e.g., DOM, WebAudio, etc.).
+ */
+
+/**
+ * Return the JsObject associated with a Dart class [dartClass_instance].
+ */
+js.JsObject unwrap_jso(dartClass_instance) {
+  try {
+      if (dartClass_instance != null)
+          return dartClass_instance is! Function ? dartClass_instance.blink_jsObject : dartClass_instance;
+      else
+          return null;
+//      return dartClass_instance.dartium_expando[dartClass_instance.expandoJsObject];
+  } catch(NoSuchMethodException) {
+      // No blink_jsObject then return the dartClass_instance is probably an
+      // array that was already converted to a Dart class e.g., Uint8ClampedList.
+      return dartClass_instance;
+  }
+}
+
+/**
+ * Create Dart class that maps to the JS Type, add the JsObject as an expando
+ * on the Dart class and return the created Dart class. 
+ */
+wrap_jso(jsObject) {
+try {
+//  debug_or_assert("jsObject != null", jsObject != null);
+  if (jsObject is! js.JsObject) {
+      // JS Interop converted the object to a Dart class e.g., Uint8ClampedList.
+      return jsObject;
+  }
+  var constructor = jsObject['constructor'];
+  debug_or_assert("constructor != null", constructor != null);
+  var jsTypeName = constructor['name'];
+  debug_or_assert("constructor != null && jsTypeName.length > 0", constructor != null && jsTypeName.length > 0);
+  var func = getHtmlCreateFunction(jsTypeName);
+  debug_or_assert("func != null name = ${jsTypeName}", func != null);
+  var dartClass_instance = func();
+  dartClass_instance.blink_jsObject = jsObject;
+//  dartClass_instance.dartium_expando[dartClass_instance.expandoJsObject] = jsObject;
+  return dartClass_instance;
+} catch(e, stacktrace){
+  if (e is DebugAssertException)
+    window.console.log("${e.message}\n ${stacktrace}");
+  else
+    window.console.log("${stacktrace}");
+}
+}
+
+class DebugAssertException implements Exception {
+  String message;
+  DebugAssertException(this.message);
+}
+
+debug_or_assert(message, expression) {
+  if (!expression) {
+    throw new DebugAssertException("$message");
+  }
+}
+
+// Wrap JsObject node list to return a List<node>.
+List<Node> wrap_jso_list(jso_nodes) {
+  List<Node> nodes = new List<Node>();
+  var collectionLen = jso_nodes['length'];
+  for (var i = 0; i < collectionLen; i++) {
+    nodes.add(wrap_jso(jso_nodes.callMethod('item', [i])));
+  }
+  var frozen_nodes = new _FrozenElementList._wrap(nodes);
+  frozen_nodes.dartClass_instance = jso_nodes;
+  return frozen_nodes;
+}
+$else
+unwrap_jso(dartClass_instance) => dartClass_instance;
+wrap_jso(jsObject) => jsObject;
+wrap_jso_list(jso_nodes) => jso_nodes;
+make_dart_rectangle(r) => r;
+$endif
diff --git a/tools/dom/templates/html/dartium/indexed_db_dartium.darttemplate b/tools/dom/templates/html/dartium/indexed_db_dartium.darttemplate
index 256a12a..62dd7e9 100644
--- a/tools/dom/templates/html/dartium/indexed_db_dartium.darttemplate
+++ b/tools/dom/templates/html/dartium/indexed_db_dartium.darttemplate
@@ -109,3 +109,10 @@
 final indexed_dbBlinkMap = {
 $!TYPE_MAP
 };
+
+$if JSINTEROP
+// FIXME: Can we make this private?
+final indexed_dbBlinkFunctionMap = {
+$!TYPE_FUNCTION_MAP
+};
+$endif
diff --git a/tools/dom/templates/html/dartium/svg_dartium.darttemplate b/tools/dom/templates/html/dartium/svg_dartium.darttemplate
index faa3d4f..6dff8b6 100644
--- a/tools/dom/templates/html/dartium/svg_dartium.darttemplate
+++ b/tools/dom/templates/html/dartium/svg_dartium.darttemplate
@@ -26,3 +26,10 @@
 final svgBlinkMap = {
 $!TYPE_MAP
 };
+
+$if JSINTEROP
+// FIXME: Can we make this private?
+final svgBlinkFunctionMap = {
+$!TYPE_FUNCTION_MAP
+};
+$endif
diff --git a/tools/dom/templates/html/dartium/web_audio_dartium.darttemplate b/tools/dom/templates/html/dartium/web_audio_dartium.darttemplate
index 52ed27d..c79c9d4 100644
--- a/tools/dom/templates/html/dartium/web_audio_dartium.darttemplate
+++ b/tools/dom/templates/html/dartium/web_audio_dartium.darttemplate
@@ -20,3 +20,10 @@
 final web_audioBlinkMap = {
 $!TYPE_MAP
 };
+
+$if JSINTEROP
+// FIXME: Can we make this private?
+final web_audioBlinkFunctionMap = {
+$!TYPE_FUNCTION_MAP
+};
+$endif
diff --git a/tools/dom/templates/html/dartium/web_gl_dartium.darttemplate b/tools/dom/templates/html/dartium/web_gl_dartium.darttemplate
index 86c642c..5f12a23 100644
--- a/tools/dom/templates/html/dartium/web_gl_dartium.darttemplate
+++ b/tools/dom/templates/html/dartium/web_gl_dartium.darttemplate
@@ -22,3 +22,10 @@
 final web_glBlinkMap = {
 $!TYPE_MAP
 };
+
+$if JSINTEROP
+// FIXME: Can we make this private?
+final web_glBlinkFunctionMap = {
+$!TYPE_FUNCTION_MAP
+};
+$endif
diff --git a/tools/dom/templates/html/dartium/web_sql_dartium.darttemplate b/tools/dom/templates/html/dartium/web_sql_dartium.darttemplate
index f31353e..9823042 100644
--- a/tools/dom/templates/html/dartium/web_sql_dartium.darttemplate
+++ b/tools/dom/templates/html/dartium/web_sql_dartium.darttemplate
@@ -27,3 +27,10 @@
 final web_sqlBlinkMap = {
 $!TYPE_MAP
 };
+
+$if JSINTEROP
+// FIXME: Can we make this private?
+final web_sqlBlinkFunctionMap = {
+$!TYPE_FUNCTION_MAP
+};
+$endif
\ No newline at end of file
diff --git a/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate b/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
index 186848e..12caf8c 100644
--- a/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
+++ b/tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
@@ -11,8 +11,18 @@
 
 part of $LIBRARYNAME;
 
+$if DART2JS
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME $EXTENDS with
     $(CLASSNAME)Base $IMPLEMENTS {
+$else
+  $if JSINTEROP
+$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS) class $CLASSNAME extends
+    $(CLASSNAME)Base $IMPLEMENTS {
+  $else
+$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME $EXTENDS with
+    $(CLASSNAME)Base $IMPLEMENTS {
+  $endif
+$endif
   factory $CLASSNAME() => new CssStyleDeclaration.css('');
 
   factory $CLASSNAME.css(String css) {
@@ -59,10 +69,14 @@
     return _hasProperty(propertyName);
 $endif
   }
-$if DARTIUM
 
+$if DARTIUM
   bool _hasProperty(String propertyName) =>
+  $if JSINTEROP
+      _blink.BlinkCSSStyleDeclaration.instance.$__propertyQuery___Callback_1_(unwrap_jso(this), propertyName) != null;
+  $else
       _blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback_1(this, propertyName);
+  $endif
 $endif
 
   @DomName('CSSStyleDeclaration.setProperty')
@@ -1132,7 +1146,15 @@
 $endif
 }
 
+$if DART2JS
 class _CssStyleDeclarationSet extends Object with CssStyleDeclarationBase {
+$else
+  $if JSINTEROP
+class _CssStyleDeclarationSet extends CssStyleDeclarationBase {
+  $else
+class _CssStyleDeclarationSet extends Object with CssStyleDeclarationBase {
+  $endif
+$endif
   final Iterable<Element> _elementIterable;
   Iterable<CssStyleDeclaration> _elementCssStyleDeclarationSetIterable;
 
@@ -1618,9 +1640,23 @@
   // items in the MEMBERS set if you want that functionality.
 }
 
+$if DART2JS
 abstract class CssStyleDeclarationBase {
   String getPropertyValue(String propertyName);
   void setProperty(String propertyName, String value, [String priority]);
+$else
+  $if JSINTEROP
+class CssStyleDeclarationBase {
+  String getPropertyValue(String propertyName) =>
+    throw new StateError('getProperty not overridden in dart:html');
+  void setProperty(String propertyName, String value, [String priority]) =>
+    throw new StateError('setProperty not overridden in dart:html');
+  $else
+abstract class CssStyleDeclarationBase {
+  String getPropertyValue(String propertyName);
+  void setProperty(String propertyName, String value, [String priority]);
+  $endif
+$endif
 
   /** Gets the value of "align-content" */
   String get alignContent =>
diff --git a/tools/dom/templates/html/impl/impl_Document.darttemplate b/tools/dom/templates/html/impl/impl_Document.darttemplate
index 0640f99..a9b19cf 100644
--- a/tools/dom/templates/html/impl/impl_Document.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Document.darttemplate
@@ -26,7 +26,11 @@
    * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
    */
   ElementList<Element> querySelectorAll(String selectors) {
+$if JSINTEROP
+    return _querySelectorAll(selectors);
+$else
     return new _FrozenElementList._wrap(_querySelectorAll(selectors));
+$endif
   }
 
   /**
@@ -66,12 +70,16 @@
 $if DART2JS
     return _createElement(tagName, typeExtension);
 $else
-    if (typeExtension != null) {
-      return _createElement(tagName, typeExtension);
-    } else {
-      // Fast-path for Dartium when typeExtension is not needed.
-      return _Utils.createElement(this, tagName);
-    }
+  $if JSINTEROP
+    return _createElement(tagName, typeExtension);
+  $else
+    if (typeExtension != null) {  
+      return _createElement(tagName, typeExtension);  
+    } else {  
+      // Fast-path for Dartium when typeExtension is not needed.  
+      return _Utils.createElement(this, tagName); 
+    } 
+  $endif
 $endif
   }
 
diff --git a/tools/dom/templates/html/impl/impl_DocumentFragment.darttemplate b/tools/dom/templates/html/impl/impl_DocumentFragment.darttemplate
index d533e49..122b6f9 100644
--- a/tools/dom/templates/html/impl/impl_DocumentFragment.darttemplate
+++ b/tools/dom/templates/html/impl/impl_DocumentFragment.darttemplate
@@ -58,8 +58,11 @@
    * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
    */
   ElementList<Element> querySelectorAll(String selectors) =>
+$if JSINTEROP
+    _querySelectorAll(selectors);
+$else
     new _FrozenElementList._wrap(_querySelectorAll(selectors));
-
+$endif
 
 
   String get innerHtml {
diff --git a/tools/dom/templates/html/impl/impl_Element.darttemplate b/tools/dom/templates/html/impl/impl_Element.darttemplate
index fcf3c0c..6f5ae1b 100644
--- a/tools/dom/templates/html/impl/impl_Element.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Element.darttemplate
@@ -263,7 +263,15 @@
     implements ElementList, NodeListWrapper {
   final List<Node> _nodeList;
 
+$if JSINTEROP
+  var dartClass_instance;
+
+  _FrozenElementList._wrap(this._nodeList) {
+      this.dartClass_instance = this._nodeList;
+  }
+$else
   _FrozenElementList._wrap(this._nodeList);
+$endif
 
   int get length => _nodeList.length;
 
@@ -572,7 +580,15 @@
    *       element.style.background = 'red'; // Turns every child of body red.
    *     }
    */
+$if DART2JS
   List<Element> get children => new _ChildrenElementList._wrap(this);
+$else
+  $if JSINTEROP
+  List<Element> get children => new FilteredElementList(this);
+  $else
+  List<Element> get children => new _ChildrenElementList._wrap(this);
+  $endif
+$endif
 
   void set children(List<Element> value) {
     // Copy list first since we don't want liveness during iteration.
@@ -595,7 +611,11 @@
    */
   @DomName('Element.querySelectorAll')
   ElementList<Element> querySelectorAll(String selectors) =>
+$if JSINTEROP
+    _querySelectorAll(selectors);
+$else
     new _FrozenElementList._wrap(_querySelectorAll(selectors));
+$endif
 
   /**
    * Alias for [querySelector]. Note this function is deprecated because its
@@ -1017,7 +1037,7 @@
       if (treeSanitizer is _TrustedHtmlTreeSanitizer) {
         _insertAdjacentHtml(where, html);
       } else {
-        _insertAdjacentNode(where, new DocumentFragment.html(html,
+        _insertAdjacentNode(where, createFragment(html,
             validator: validator, treeSanitizer: treeSanitizer));
       }
   }
@@ -1308,10 +1328,11 @@
     if (_parseDocument == null) {
       _parseDocument = document.implementation.createHtmlDocument('');
       _parseRange = _parseDocument.createRange();
-
-      // Workaround for Chrome bug 229142- URIs are not resolved in new doc.
-      var base = _parseDocument.createElement('base');
-      base.href = document.baseUri;
+	
+      // Workaround for Safari bug. Was also previously Chrome bug 229142
+      // - URIs are not resolved in new doc.	
+      var base = _parseDocument.createElement('base');	
+      base.href = document.baseUri;	
       _parseDocument.head.append(base);
     }
     var contextElement;
@@ -1322,7 +1343,8 @@
       _parseDocument.body.append(contextElement);
     }
     var fragment;
-    if (Range.supportsCreateContextualFragment) {
+    if (Range.supportsCreateContextualFragment &&
+        _canBeUsedToCreateContextualFragment) {
       _parseRange.selectNodeContents(contextElement);
       fragment = _parseRange.createContextualFragment(html);
     } else {
@@ -1344,6 +1366,24 @@
     return fragment;
   }
 
+  /** Test if createContextualFragment is supported for this element type */
+  bool get _canBeUsedToCreateContextualFragment =>
+      !_cannotBeUsedToCreateContextualFragment;
+
+  /** Test if createContextualFragment is NOT supported for this element type */
+  bool get _cannotBeUsedToCreateContextualFragment =>
+      _tagsForWhichCreateContextualFragmentIsNotSupported.contains(tagName);
+
+  /**
+   * A hard-coded list of the tag names for which createContextualFragment
+   * isn't supported.
+   */
+  static const _tagsForWhichCreateContextualFragmentIsNotSupported =
+      const ['HEAD', 'AREA',
+      'BASE', 'BASEFONT', 'BR', 'COL', 'COLGROUP', 'EMBED', 'FRAME', 'FRAMESET',
+      'HR', 'IMAGE', 'IMG', 'INPUT', 'ISINDEX', 'LINK', 'META', 'PARAM',
+      'SOURCE', 'STYLE', 'TITLE', 'WBR'];
+
   /**
    * Parses the HTML fragment and sets it as the contents of this element.
    *
@@ -1487,6 +1527,63 @@
   int get scrollWidth => JS('num', '#.scrollWidth', this).round();
 
 $else
+  $if JSINTEROP
+  @DomName('Element.offsetHeight')
+  @DocsEditable()
+  int get offsetHeight => _blink.BlinkElement.instance.offsetHeight_Getter_(unwrap_jso(this)).round();
+
+  @DomName('Element.offsetLeft')
+  @DocsEditable()
+  int get offsetLeft => _blink.BlinkElement.instance.offsetLeft_Getter_(unwrap_jso(this)).round();
+
+  @DomName('Element.offsetTop')
+  @DocsEditable()
+  int get offsetTop => _blink.BlinkElement.instance.offsetTop_Getter_(unwrap_jso(this)).round();
+
+  @DomName('Element.offsetWidth')
+  @DocsEditable()
+  int get offsetWidth => _blink.BlinkElement.instance.offsetWidth_Getter_(unwrap_jso(this)).round();
+
+  @DomName('Element.clientHeight')
+  @DocsEditable()
+  int get clientHeight => _blink.BlinkElement.instance.clientHeight_Getter_(unwrap_jso(this)).round();
+
+  @DomName('Element.clientLeft')
+  @DocsEditable()
+  int get clientLeft => _blink.BlinkElement.instance.clientLeft_Getter_(unwrap_jso(this)).round();
+
+  @DomName('Element.clientTop')
+  @DocsEditable()
+  int get clientTop => _blink.BlinkElement.instance.clientTop_Getter_(unwrap_jso(this)).round();
+
+  @DomName('Element.clientWidth')
+  @DocsEditable()
+  int get clientWidth => _blink.BlinkElement.instance.clientWidth_Getter_(unwrap_jso(this)).round();
+
+  @DomName('Element.scrollHeight')
+  @DocsEditable()
+  int get scrollHeight => _blink.BlinkElement.instance.scrollHeight_Getter_(unwrap_jso(this)).round();
+
+  @DomName('Element.scrollLeft')
+  @DocsEditable()
+  int get scrollLeft => _blink.BlinkElement.instance.scrollLeft_Getter_(unwrap_jso(this)).round();
+
+  @DomName('Element.scrollLeft')
+  @DocsEditable()
+  void set scrollLeft(int value) => _blink.BlinkElement.instance.scrollLeft_Setter_(unwrap_jso(this), value.round());
+
+  @DomName('Element.scrollTop')
+  @DocsEditable()
+  int get scrollTop => _blink.BlinkElement.instance.scrollTop_Getter_(unwrap_jso(this)).round();
+
+  @DomName('Element.scrollTop')
+  @DocsEditable()
+  void set scrollTop(int value) => _blink.BlinkElement.instance.scrollTop_Setter_(unwrap_jso(this), value.round());
+
+  @DomName('Element.scrollWidth')
+  @DocsEditable()
+  int get scrollWidth => _blink.BlinkElement.instance.scrollWidth_Getter_(unwrap_jso(this)).round();
+  $else
   @DomName('Element.offsetHeight')
   @DocsEditable()
   int get offsetHeight => _blink.BlinkElement.offsetHeight_Getter(this).round();
@@ -1542,6 +1639,7 @@
   @DomName('Element.scrollWidth')
   @DocsEditable()
   int get scrollWidth => _blink.BlinkElement.scrollWidth_Getter(this).round();
+  $endif
 $endif
 
 $!MEMBERS
diff --git a/tools/dom/templates/html/impl/impl_FileReader.darttemplate b/tools/dom/templates/html/impl/impl_FileReader.darttemplate
index c7bc8ba..0864441 100644
--- a/tools/dom/templates/html/impl/impl_FileReader.darttemplate
+++ b/tools/dom/templates/html/impl/impl_FileReader.darttemplate
@@ -13,7 +13,7 @@
 $if DART2JS
     var res = JS('Null|String|NativeByteBuffer', '#.result', this);
 $else
-    var res = _blink.BlinkFileReader.result_Getter(this);
+    var res = _blink.BlinkFileReader.result_Getter(unwrap_jso(this));
 $endif
     if (res is ByteBuffer) {
       return new Uint8List.view(res);
diff --git a/tools/dom/templates/html/impl/impl_MutationObserver.darttemplate b/tools/dom/templates/html/impl/impl_MutationObserver.darttemplate
index 4208322..d45e98a 100644
--- a/tools/dom/templates/html/impl/impl_MutationObserver.darttemplate
+++ b/tools/dom/templates/html/impl/impl_MutationObserver.darttemplate
@@ -18,6 +18,22 @@
         '!!(window.MutationObserver || window.WebKitMutationObserver)');
 $endif
   }
+$if DARTIUM
+  @DocsEditable()
+  $if JSINTEROP
+  static MutationObserver _create(callback) => wrap_jso(_blink.BlinkMutationObserver.instance.constructorCallback_1_((List<MutationRecord> mutations, MutationObserver observer) {
+      var wrapped_mutations = [];
+      for (var mutation in mutations) {
+        // Wrap the Javascript object for each MutationRecord.
+        wrapped_mutations.add(wrap_jso(mutation));
+      }
+      // Wrap the MutationObserver too.
+      callback(wrapped_mutations, wrap_jso(observer));
+  }));
+  $else
+  static MutationObserver _create(callback) => _blink.BlinkMutationObserver.instance.constructorCallback_1_(callback);
+  $endif
+$endif
 
   /**
    * Observes the target for the specified changes.
diff --git a/tools/dom/templates/html/impl/impl_Node.darttemplate b/tools/dom/templates/html/impl/impl_Node.darttemplate
index 166c346..2a751d7 100644
--- a/tools/dom/templates/html/impl/impl_Node.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Node.darttemplate
@@ -276,5 +276,68 @@
     String value = nodeValue;  // Fetch DOM Node property once.
     return value == null ? super.toString() : value;
   }
+
+$if JSINTEROP
+  List<Node> _childNodes;
+
+  /**
+   * A list of this node's children.
+   *
+   * ## Other resources
+   *
+   * * [Node.childNodes]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes)
+   * from MDN.
+   */
+  @DomName('Node.childNodes')
+  @DocsEditable()
+  @Returns('NodeList')
+  @Creates('NodeList')
+  List<Node> get childNodes {
+    if (_childNodes == null) {
+       List<Node> nodes = new List<Node>();
+       var jsCollection = _blink.BlinkNode.instance.childNodes_Getter_(unwrap_jso(this));
+       var collectionLen = jsCollection['length'];
+       for (var i = 0; i < collectionLen; i++) {
+         nodes.add(wrap_jso(jsCollection.callMethod('item', [i])));
+       }
+      _childNodes = nodes;
+    }
+    return _childNodes;
+  }
+$else
+  $if DARTIUM
+  /**
+   * A list of this node's children.
+   *
+   * ## Other resources
+   *
+   * * [Node.childNodes]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes)
+   * from MDN.
+   */
+  @DomName('Node.childNodes')
+  @DocsEditable()
+  @Returns('NodeList')
+  @Creates('NodeList')
+  List<Node> get childNodes => _blink.BlinkNode.instance.childNodes_Getter_(this);
+  $else
+  /**
+   * A list of this node's children.
+   *
+   * ## Other resources
+   *
+   * * [Node.childNodes]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes)
+   * from MDN.
+   */
+  @DomName('Node.childNodes')
+  @DocsEditable()
+  @Returns('NodeList')
+  @Creates('NodeList')
+  final List<Node> childNodes;
+
+  $endif
+$endif
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/impl/impl_SVGElement.darttemplate b/tools/dom/templates/html/impl/impl_SVGElement.darttemplate
index 378dec8..2eaafe6 100644
--- a/tools/dom/templates/html/impl/impl_SVGElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_SVGElement.darttemplate
@@ -56,7 +56,7 @@
 
   CssClassSet get classes => new _AttributeClassSet(this);
 
-  List<Element> get children => new FilteredElementList<Element>(this);
+  List<Element> get children => new FilteredElementList(this);
 
   void set children(List<Element> value) {
     final children = this.children;
diff --git a/tools/dom/templates/html/impl/impl_Touch.darttemplate b/tools/dom/templates/html/impl/impl_Touch.darttemplate
index 095e6a0..fbab125 100644
--- a/tools/dom/templates/html/impl/impl_Touch.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Touch.darttemplate
@@ -20,14 +20,14 @@
   int get __radiusX => JS('num', '#.radiusX', this).round();
   int get __radiusY => JS('num', '#.radiusY', this).round();
 $else
-  int get __clientX => _blink.BlinkTouch.clientX_Getter(this).round();
-  int get __clientY => _blink.BlinkTouch.clientY_Getter(this).round();
-  int get __screenX => _blink.BlinkTouch.screenX_Getter(this).round();
-  int get __screenY => _blink.BlinkTouch.screenY_Getter(this).round();
-  int get __pageX => _blink.BlinkTouch.pageX_Getter(this).round();
-  int get __pageY => _blink.BlinkTouch.pageY_Getter(this).round();
-  int get __radiusX => _blink.BlinkTouch.radiusX_Getter(this).round();
-  int get __radiusY => _blink.BlinkTouch.radiusY_Getter(this).round();
+  int get __clientX => _blink.BlinkTouch.clientX_Getter(unwrap_jso(this)).round();
+  int get __clientY => _blink.BlinkTouch.clientY_Getter(unwrap_jso(this)).round();
+  int get __screenX => _blink.BlinkTouch.screenX_Getter(unwrap_jso(this)).round();
+  int get __screenY => _blink.BlinkTouch.screenY_Getter(unwrap_jso(this)).round();
+  int get __pageX => _blink.BlinkTouch.pageX_Getter(unwrap_jso(this)).round();
+  int get __pageY => _blink.BlinkTouch.pageY_Getter(unwrap_jso(this)).round();
+  int get __radiusX => _blink.BlinkTouch.radiusX_Getter(unwrap_jso(this)).round();
+  int get __radiusY => _blink.BlinkTouch.radiusY_Getter(unwrap_jso(this)).round();
 $endif
 
   @DomName('Touch.clientX')
diff --git a/tools/dom/templates/html/impl/impl_Window.darttemplate b/tools/dom/templates/html/impl/impl_Window.darttemplate
index 81ee2b1..b119a08 100644
--- a/tools/dom/templates/html/impl/impl_Window.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Window.darttemplate
@@ -296,19 +296,19 @@
 $else
   @DomName('Window.pageXOffset')
   @DocsEditable()
-  int get pageXOffset => _blink.BlinkWindow.instance.pageXOffset_Getter_(this).round();
+  int get pageXOffset => _blink.BlinkWindow.instance.pageXOffset_Getter_(unwrap_jso(this)).round();
 
   @DomName('Window.pageYOffset')
   @DocsEditable()
-  int get pageYOffset => _blink.BlinkWindow.instance.pageYOffset_Getter_(this).round();
+  int get pageYOffset => _blink.BlinkWindow.instance.pageYOffset_Getter_(unwrap_jso(this)).round();
 
   @DomName('Window.scrollX')
   @DocsEditable()
-  int get scrollX => _blink.BlinkWindow.instance.scrollX_Getter_(this).round();
+  int get scrollX => _blink.BlinkWindow.instance.scrollX_Getter_(unwrap_jso(this)).round();
 
   @DomName('Window.scrollY')
   @DocsEditable()
-  int get scrollY => _blink.BlinkWindow.instance.scrollY_Getter_(this).round();
+  int get scrollY => _blink.BlinkWindow.instance.scrollY_Getter_(unwrap_jso(this)).round();
 $endif
 }
 
diff --git a/tools/gyp/configurations_make.gypi b/tools/gyp/configurations_make.gypi
index d8f7965..9f8b0e2 100644
--- a/tools/gyp/configurations_make.gypi
+++ b/tools/gyp/configurations_make.gypi
@@ -10,6 +10,9 @@
     'configurations': {
       'Dart_Linux_Base': {
         'abstract': 1,
+        'defines': [
+          '_FORTIFY_SOURCE=2',
+        ],
         'cflags': [
           '-Werror',
           '<@(common_gcc_warning_flags)',
@@ -25,6 +28,12 @@
           '-fno-exceptions',
           # '-fvisibility=hidden',
           # '-fvisibility-inlines-hidden',
+          '-fstack-protector',
+        ],
+        'ldflags': [
+          '-Wa,--noexecstack',
+          '-Wl,-z,now',
+          '-Wl,-z,relro',
         ],
       },