diff --git a/pkg/analyzer/bin/analyzer.dart b/pkg/analyzer/bin/analyzer.dart
index a9333c0..bab77b6 100644
--- a/pkg/analyzer/bin/analyzer.dart
+++ b/pkg/analyzer/bin/analyzer.dart
@@ -70,7 +70,14 @@
   if (async) {
     return analyzer.analyzeAsync();
   } else {
-    return analyzer.analyzeSync();
+    var errorSeverity = analyzer.analyzeSync();
+    if (errorSeverity == ErrorSeverity.ERROR) {
+      exitCode = errorSeverity.ordinal;
+    }
+    if (options.warningsAreFatal && errorSeverity == ErrorSeverity.WARNING) {
+      exitCode = errorSeverity.ordinal;
+    }
+    return errorSeverity;
   }
 }
 
diff --git a/pkg/web_components/lib/dart_support.js b/pkg/web_components/lib/dart_support.js
index 44b5a38c..503faee 100644
--- a/pkg/web_components/lib/dart_support.js
+++ b/pkg/web_components/lib/dart_support.js
@@ -15,11 +15,18 @@
   var needsConstructorFix = window.constructor === window.Window;
 
   // TODO(jmesserly): we need to wrap document somehow (a dart:html hook?)
-  window.dartExperimentalFixupGetTag = function(originalGetTag) {
+
+  // dartNativeDispatchHooksTransformer is described on initHooks() in
+  // sdk/lib/_internal/lib/native_helper.dart.
+  if (typeof window.dartNativeDispatchHooksTransformer == 'undefined')
+    window.dartNativeDispatchHooksTransformer = [];
+
+  window.dartNativeDispatchHooksTransformer.push(function(hooks) {
     var NodeList = ShadowDOMPolyfill.wrappers.NodeList;
     var ShadowRoot = ShadowDOMPolyfill.wrappers.ShadowRoot;
     var unwrapIfNeeded = ShadowDOMPolyfill.unwrapIfNeeded;
-    function getTag(obj) {
+    var originalGetTag = hooks.getTag;
+    hooks.getTag = function getTag(obj) {
       // TODO(jmesserly): do we still need these?
       if (obj instanceof NodeList) return 'NodeList';
       if (obj instanceof ShadowRoot) return 'ShadowRoot';
@@ -44,8 +51,7 @@
         if (ctor === unwrapped.constructor) {
           var name = ctor._ShadowDOMPolyfill$cacheTag_;
           if (!name) {
-            name = Object.prototype.toString.call(unwrapped);
-            name = name.substring(8, name.length - 1);
+            name = originalGetTag(unwrapped);
             ctor._ShadowDOMPolyfill$cacheTag_ = name;
           }
           return name;
@@ -55,7 +61,5 @@
       }
       return originalGetTag(obj);
     }
-
-    return getTag;
-  };
+  });
 })();
diff --git a/sdk/lib/_internal/lib/native_helper.dart b/sdk/lib/_internal/lib/native_helper.dart
index 3d7e17b..8f96d07 100644
--- a/sdk/lib/_internal/lib/native_helper.dart
+++ b/sdk/lib/_internal/lib/native_helper.dart
@@ -309,6 +309,7 @@
 
   if (JS('bool', 'typeof window != "undefined"')) {
     var context = JS('=Object', 'window');
+    var fun = JS('=Object', 'function () {}');
     for (int i = 0; i < tags.length; i++) {
       var tag = tags[i];
       var proto = prototypeForTagFunction(tag);
@@ -317,6 +318,9 @@
         var record = makeDefaultDispatchRecord(tag, interceptorClass, proto);
         if (record != null) {
           setDispatchProperty(proto, record);
+          // Ensure the modified prototype is still fast by assigning it to
+          // the prototype property of a function object.
+          JS('', '#.prototype = #', fun, proto);
         }
       }
     }
@@ -495,13 +499,23 @@
   if (typeof constructor == "function") {
     var name = constructor.name;
     // If the name is a non-empty string, we use that as the type name of this
-    // object. On Firefox, we often get "Object" as the constructor name even
-    // for more specialized objects so we have to fall through to the toString()
-    // based implementation below in that case.
-    if (typeof name == "string"
-        && name !== ""
-        && name !== "Object"
-        && name !== "Function.prototype") {  // Can happen in Opera.
+    // object.  There are various cases where that does not work, so we have to
+    // detect them and fall through to the toString() based implementation.
+
+    if (typeof name == "string" &&
+
+        // Sometimes the string is empty.  This test also catches minified
+        // shadow dom polyfil wrapper for Window on Firefox where the faked
+        // constructor name does not 'stick'.  The shortest real DOM object
+        // names have three characters (e.g. URL, CSS).
+        name.length > 2 &&
+
+        // On Firefox we often get "Object" as the constructor name, even for
+        // more specialized DOM objects.
+        name !== "Object" &&
+
+        // This can happen in Opera.
+        name !== "Function.prototype") {
       return name;
     }
   }
diff --git a/tools/VERSION b/tools/VERSION
index 423c53d..637a721 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 4
 PATCH 0
 PRERELEASE 6
-PRERELEASE_PATCH 5
+PRERELEASE_PATCH 6
