Version 0.2.5.0

svn merge -r 15013:15295  https://dart.googlecode.com/svn/branches/bleeding_edge trunk

git-svn-id: http://dart.googlecode.com/svn/trunk@15296 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/.gitignore b/.gitignore
index 5c2afd1..ce9b95f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -74,3 +74,6 @@
 
 # Pub generated "packages" directories
 packages
+
+# Vim temporary swap files.
+*.swp
diff --git a/client/dart.js b/client/dart.js
index c76e3fa..1c8b333 100644
--- a/client/dart.js
+++ b/client/dart.js
@@ -159,11 +159,21 @@
 
   window.registerPort = function(name, port) {
     var stringified = JSON.stringify(serialize(port));
-    window.localStorage['dart-port:' + name] = stringified;
+    var attrName = 'dart-port:' + name;
+    document.documentElement.setAttribute(attrName, stringified);
+    // TODO(vsm): Phase out usage of localStorage.  We're leaving it in
+    // temporarily for backwards compatibility.
+    window.localStorage[attrName] = stringified;
   };
 
   window.lookupPort = function(name) {
-    var stringified = window.localStorage['dart-port:' + name];
+    var attrName = 'dart-port:' + name;
+    var stringified = document.documentElement.getAttribute(attrName);
+    // TODO(vsm): Phase out usage of localStorage.  We're leaving it in
+    // temporarily for backwards compatibility.
+    if (!stringified) {
+      stringified = window.localStorage[attrName];
+    }
     return deserialize(JSON.parse(stringified));
   };
 
diff --git a/compiler/java/com/google/dart/compiler/UrlLibrarySource.java b/compiler/java/com/google/dart/compiler/UrlLibrarySource.java
index efc71d3..f5ec48c 100644
--- a/compiler/java/com/google/dart/compiler/UrlLibrarySource.java
+++ b/compiler/java/com/google/dart/compiler/UrlLibrarySource.java
@@ -70,6 +70,12 @@
     try {
       // Force the creation of an escaped relative URI to deal with spaces, etc.
       URI uri = getUri().resolve(new URI(null, null, relPath, null, null)).normalize();
+      if (PackageLibraryManager.isPackageUri(uri)) {
+        URI fileUri = packageLibraryManager.resolveDartUri(uri);
+        if (fileUri != null) {
+          uri = fileUri;
+        }
+      }
       return createDartSource(uri, relPath, this, packageLibraryManager);
     } catch (Throwable e) {
       return null;
diff --git a/compiler/java/com/google/dart/compiler/ast/DartDeclaration.java b/compiler/java/com/google/dart/compiler/ast/DartDeclaration.java
index 5080bb1..35f3013 100644
--- a/compiler/java/com/google/dart/compiler/ast/DartDeclaration.java
+++ b/compiler/java/com/google/dart/compiler/ast/DartDeclaration.java
@@ -10,7 +10,8 @@
  * considered a part of the declaration, not an independent node. So the name is not visited when
  * traversing the AST.
  */
-public abstract class DartDeclaration<N extends DartExpression> extends DartNodeWithMetadata {
+public abstract class DartDeclaration<N extends DartExpression> extends DartNodeWithMetadata
+    implements HasObsoleteMetadata {
 
   private N name; // Not visited.
   private DartComment dartDoc;
diff --git a/compiler/java/com/google/dart/compiler/ast/DartDirective.java b/compiler/java/com/google/dart/compiler/ast/DartDirective.java
index ad1a9ec..7c039c1 100644
--- a/compiler/java/com/google/dart/compiler/ast/DartDirective.java
+++ b/compiler/java/com/google/dart/compiler/ast/DartDirective.java
@@ -1,4 +1,4 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -9,9 +9,19 @@
 /**
  * Base class for directives.
  */
-public abstract class DartDirective extends DartNodeWithMetadata {
+public abstract class DartDirective extends DartNodeWithMetadata implements HasObsoleteMetadata {
+  private DartObsoleteMetadata obsoleteMetadata = DartObsoleteMetadata.EMPTY;
+
   @Override
   public NodeElement getElement() {
     throw new UnsupportedOperationException(getClass().getSimpleName());
   }
+
+  public DartObsoleteMetadata getObsoleteMetadata() {
+    return obsoleteMetadata;
+  }
+
+  public void setObsoleteMetadata(DartObsoleteMetadata metadata) {
+    this.obsoleteMetadata = metadata;
+  }
 }
diff --git a/compiler/java/com/google/dart/compiler/ast/DartStringLiteral.java b/compiler/java/com/google/dart/compiler/ast/DartStringLiteral.java
index 91c69d9..e2a83bf 100644
--- a/compiler/java/com/google/dart/compiler/ast/DartStringLiteral.java
+++ b/compiler/java/com/google/dart/compiler/ast/DartStringLiteral.java
@@ -5,6 +5,7 @@
 package com.google.dart.compiler.ast;
 
 import com.google.common.collect.ImmutableList;
+import com.google.dart.compiler.resolver.Element;
 
 import java.util.List;
 
@@ -12,6 +13,8 @@
  * Represents a Dart string literal value.
  */
 public class DartStringLiteral extends DartLiteral {
+  
+  private Element element;
 
   public static DartStringLiteral get(String x) {
     return new DartStringLiteral(x, null);
@@ -43,6 +46,16 @@
     }
     return parts;
   }
+  
+  @Override
+  public void setElement(Element element) {
+    this.element = element;
+  }
+  
+  @Override
+  public Element getElement() {
+    return element;
+  }
 
   @Override
   public void visitChildren(ASTVisitor<?> visitor) {
diff --git a/compiler/java/com/google/dart/compiler/ast/HasObsoleteMetadata.java b/compiler/java/com/google/dart/compiler/ast/HasObsoleteMetadata.java
new file mode 100644
index 0000000..b1648aa
--- /dev/null
+++ b/compiler/java/com/google/dart/compiler/ast/HasObsoleteMetadata.java
@@ -0,0 +1,12 @@
+// Copyright (c) 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.
+
+package com.google.dart.compiler.ast;
+
+public interface HasObsoleteMetadata {
+
+  DartObsoleteMetadata getObsoleteMetadata();
+
+  void setObsoleteMetadata(DartObsoleteMetadata metadata);
+}
diff --git a/compiler/java/com/google/dart/compiler/ast/LibraryUnit.java b/compiler/java/com/google/dart/compiler/ast/LibraryUnit.java
index d6e2a31..2bd491f 100644
--- a/compiler/java/com/google/dart/compiler/ast/LibraryUnit.java
+++ b/compiler/java/com/google/dart/compiler/ast/LibraryUnit.java
@@ -187,6 +187,14 @@
 
   public void setSelfDartUnit(DartUnit unit) {
     this.selfDartUnit = unit;
+    // set DartObsoleteMetadata for LibraryElement
+    if (unit != null) {
+      List<DartDirective> directives = unit.getDirectives();
+      if (!directives.isEmpty() && directives.get(0) instanceof DartLibraryDirective) {
+        DartLibraryDirective libraryDirective = (DartLibraryDirective) directives.get(0);
+        Elements.setLibraryMetadata(element, libraryDirective.getObsoleteMetadata());
+      }
+    }
   }
 
   /**
diff --git a/compiler/java/com/google/dart/compiler/parser/DartParser.java b/compiler/java/com/google/dart/compiler/parser/DartParser.java
index 7537e43..a79148c 100644
--- a/compiler/java/com/google/dart/compiler/parser/DartParser.java
+++ b/compiler/java/com/google/dart/compiler/parser/DartParser.java
@@ -96,6 +96,7 @@
 import com.google.dart.compiler.ast.DartVariable;
 import com.google.dart.compiler.ast.DartVariableStatement;
 import com.google.dart.compiler.ast.DartWhileStatement;
+import com.google.dart.compiler.ast.HasObsoleteMetadata;
 import com.google.dart.compiler.ast.ImportCombinator;
 import com.google.dart.compiler.ast.ImportHideCombinator;
 import com.google.dart.compiler.ast.ImportShowCombinator;
@@ -336,8 +337,7 @@
           // TODO(scheglov) remove after http://code.google.com/p/dart/issues/detail?id=6318 
           if (!Elements.isCoreLibrarySource(source)
               && !Elements.isLibrarySource(source, "/isolate/isolate.dart")
-              && !Elements.isLibrarySource(source, "crypto/crypto.dart")
-              && !Elements.isDart2JsLibrarySource(source)) {
+              && !Elements.isLibrarySource(source, "crypto/crypto.dart")) {
             reportError(position(), ParserErrorCode.DEPRECATED_INTERFACE);
           }
           node = done(parseClass());
@@ -385,19 +385,26 @@
    * @param metadata the metadata to be associated with the node
    */
   private void setMetadata(DartNodeWithMetadata node, List<DartAnnotation> annotations) {
+    if (node instanceof DartFieldDefinition) {
+      DartFieldDefinition fieldDefinition = (DartFieldDefinition) node;
+      List<DartField> fields = fieldDefinition.getFields();
+      for (DartField field : fields) {
+        setMetadata(field, annotations);
+      }
+      return;
+    }
     if (annotations != null && !annotations.isEmpty()) {
       node.setMetadata(annotations);
-      if (node instanceof DartDeclaration<?>) {
+      if (node instanceof HasObsoleteMetadata) {
+        HasObsoleteMetadata declaration = (HasObsoleteMetadata) node;
         for (int i = 0, size = annotations.size(); i < size; i++) {
           DartAnnotation annotation = annotations.get(i);
           DartExpression nameNode = annotation.getName();
           if (nameNode instanceof DartIdentifier) {
             String name = ((DartIdentifier) nameNode).getName();
             if (name.equals("deprecated")) {
-              DartDeclaration<?> declaration = (DartDeclaration<?>) node;
               declaration.setObsoleteMetadata(declaration.getObsoleteMetadata().makeDeprecated());
             } else if (name.equals("override")) {
-              DartDeclaration<?> declaration = (DartDeclaration<?>) node;
               declaration.setObsoleteMetadata(declaration.getObsoleteMetadata().makeOverride());
             }
           }
@@ -1319,8 +1326,7 @@
           && !Elements.isLibrarySource(source, "/math/math.dart")
           && !Elements.isLibrarySource(source, "/io/io_runtime.dart")
           && !Elements.isLibrarySource(source, "/crypto/crypto.dart")
-          && !Elements.isLibrarySource(source, "/utf/utf.dart")
-          && !Elements.isDart2JsLibrarySource(source)) {
+          && !Elements.isLibrarySource(source, "/utf/utf.dart")) {
         reportError(position(), ParserErrorCode.DEPRECATED_ABSTRACT_METHOD);
       }
     }
@@ -3750,9 +3756,8 @@
           constructor = doneWithoutConsuming(toPrefixedType(parts));
         } else {
           // Named constructor.
-          DartIdentifier identifier = (DartIdentifier)part2.getIdentifier();
-          constructor = doneWithoutConsuming(new DartPropertyAccess(doneWithoutConsuming(part1),
-                                                                    identifier));
+          DartIdentifier identifier = (DartIdentifier) part2.getIdentifier();
+          constructor = doneWithoutConsuming(new DartPropertyAccess(part1, identifier));
         }
         break;
       }
diff --git a/compiler/java/com/google/dart/compiler/resolver/Elements.java b/compiler/java/com/google/dart/compiler/resolver/Elements.java
index 5fadc57..b95d48c 100644
--- a/compiler/java/com/google/dart/compiler/resolver/Elements.java
+++ b/compiler/java/com/google/dart/compiler/resolver/Elements.java
@@ -87,6 +87,10 @@
     return new LibraryElementImplementation(libraryUnit);
   }
   
+  public static void setLibraryMetadata(LibraryElement element, DartObsoleteMetadata metadata) {
+    ((LibraryElementImplementation) element).setMetadata(metadata);
+  }
+  
   public static void addExportedElement(LibraryElement libraryElement, Element element) {
     ((LibraryElementImplementation) libraryElement).addExportedElements(element);
   }
@@ -744,21 +748,6 @@
     }
     return false;
   }
-  
-  /**
-   * @return <code>true</code> if given {@link Source} represents library with given name.
-   */
-  public static boolean isDart2JsLibrarySource(Source source) {
-    if (source instanceof DartSource) {
-      DartSource dartSource = (DartSource) source;
-      LibrarySource library = dartSource.getLibrary();
-      if (library != null) {
-        String libraryName = library.getName();
-        return libraryName.contains("lib/compiler/implementation/");
-      }
-    }
-    return false;
-  }
 
   /**
    * @return <code>true</code> if given {@link Source} represents code library declaration or
diff --git a/compiler/java/com/google/dart/compiler/resolver/LibraryElementImplementation.java b/compiler/java/com/google/dart/compiler/resolver/LibraryElementImplementation.java
index 8059600..ea4d530 100644
--- a/compiler/java/com/google/dart/compiler/resolver/LibraryElementImplementation.java
+++ b/compiler/java/com/google/dart/compiler/resolver/LibraryElementImplementation.java
@@ -5,6 +5,7 @@
 package com.google.dart.compiler.resolver;
 
 import com.google.common.collect.Lists;
+import com.google.dart.compiler.ast.DartObsoleteMetadata;
 import com.google.dart.compiler.ast.LibraryUnit;
 
 import java.util.Collection;
@@ -17,6 +18,7 @@
   private final List<Element> exportedElements = Lists.newArrayList();
   private LibraryUnit libraryUnit;
   private MethodElement entryPoint;
+  private DartObsoleteMetadata metadata;
 
   public LibraryElementImplementation(LibraryUnit libraryUnit) {
     // TODO(ngeoffray): What should we pass the super? Should a LibraryUnit be a node?
@@ -85,4 +87,13 @@
   void addMethod(MethodElement method) {
     scope.declareElement(method.getName(), method);
   }
+  
+  @Override
+  public DartObsoleteMetadata getMetadata() {
+    return metadata;
+  }
+
+  public void setMetadata(DartObsoleteMetadata metadata) {
+    this.metadata = metadata;
+  }
 }
diff --git a/compiler/java/com/google/dart/compiler/resolver/ResolveVisitor.java b/compiler/java/com/google/dart/compiler/resolver/ResolveVisitor.java
index ad1da78..3068877 100644
--- a/compiler/java/com/google/dart/compiler/resolver/ResolveVisitor.java
+++ b/compiler/java/com/google/dart/compiler/resolver/ResolveVisitor.java
@@ -16,6 +16,7 @@
 import com.google.dart.compiler.ast.DartThisExpression;
 import com.google.dart.compiler.ast.DartTypeNode;
 import com.google.dart.compiler.ast.DartTypeParameter;
+import com.google.dart.compiler.common.HasSourceInfo;
 import com.google.dart.compiler.type.FunctionType;
 import com.google.dart.compiler.type.Type;
 import com.google.dart.compiler.type.Types;
@@ -143,11 +144,15 @@
     node.setType(type);
     Element element = type.getElement();
     recordElement(node.getIdentifier(), element);
+    checkDeprecated(node, element);
+    return type;
+  }
+
+  protected final void checkDeprecated(HasSourceInfo nameNode, Element element) {
     if (element != null && element.getMetadata().isDeprecated()) {
-      getContext().onError(node.getIdentifier(), TypeErrorCode.DEPRECATED_ELEMENT,
+      getContext().onError(nameNode, TypeErrorCode.DEPRECATED_ELEMENT,
          Elements.getDeprecatedElementTitle(element));
     }
-    return type;
   }
 
   protected <E extends Element> E recordElement(DartNode node, E element) {
diff --git a/compiler/java/com/google/dart/compiler/resolver/Resolver.java b/compiler/java/com/google/dart/compiler/resolver/Resolver.java
index 71d67b2..88b06e4 100644
--- a/compiler/java/com/google/dart/compiler/resolver/Resolver.java
+++ b/compiler/java/com/google/dart/compiler/resolver/Resolver.java
@@ -40,6 +40,7 @@
 import com.google.dart.compiler.ast.DartGotoStatement;
 import com.google.dart.compiler.ast.DartIdentifier;
 import com.google.dart.compiler.ast.DartIfStatement;
+import com.google.dart.compiler.ast.DartImportDirective;
 import com.google.dart.compiler.ast.DartInitializer;
 import com.google.dart.compiler.ast.DartIntegerLiteral;
 import com.google.dart.compiler.ast.DartInvocation;
@@ -76,6 +77,8 @@
 import com.google.dart.compiler.ast.DartVariable;
 import com.google.dart.compiler.ast.DartVariableStatement;
 import com.google.dart.compiler.ast.DartWhileStatement;
+import com.google.dart.compiler.ast.LibraryImport;
+import com.google.dart.compiler.ast.LibraryUnit;
 import com.google.dart.compiler.ast.Modifiers;
 import com.google.dart.compiler.common.HasSourceInfo;
 import com.google.dart.compiler.common.SourceInfo;
@@ -230,11 +233,33 @@
 
     @Override
     public Element visitUnit(DartUnit unit) {
+      List<DartImportDirective> importDirectives = Lists.newArrayList();
       for (DartDirective directive : unit.getDirectives()) {
+        if (directive instanceof DartImportDirective) {
+          importDirectives.add((DartImportDirective) directive);
+        }
         if (directive instanceof DartPartOfDirective) {
           directive.accept(this);
         }
       }
+      // set LibraryElement for "import" directives
+      {
+        LibraryUnit library = unit.getLibrary();
+        if (library != null) {
+          Iterator<LibraryImport> importIterator = library.getImports().iterator();
+          Iterator<DartImportDirective> directiveIterator = importDirectives.iterator();
+          while (importIterator.hasNext() && directiveIterator.hasNext()) {
+            LibraryImport imp = importIterator.next();
+            DartImportDirective dir = directiveIterator.next();
+            DartStringLiteral uri = dir.getLibraryUri();
+            LibraryUnit impLibrary = imp.getLibrary();
+            if (uri != null && impLibrary != null) {
+              uri.setElement(impLibrary.getElement());
+            }
+          }
+        }
+      }
+      // visit top-level nodes
       for (DartNode node : unit.getTopLevelNodes()) {
         node.accept(this);
       }
@@ -715,10 +740,19 @@
       }
       resolve(functionNode.getBody());
 
-      if (Elements.isNonFactoryConstructor(member)
-          && !(body instanceof DartNativeBlock)) {
+      if (Elements.isNonFactoryConstructor(member) && !(body instanceof DartNativeBlock)) {
         resolveInitializers(node, initializedFields);
       }
+
+      // only generative constructor can have initializers, so resolve them, but report error 
+      if (!member.isConstructor() || member.getModifiers().isFactory()) {
+        for (DartInitializer initializer : node.getInitializers()) {
+          resolve(initializer);
+          if (initializer.getName() != null) {
+            onError(initializer, ResolverErrorCode.INITIALIZER_ONLY_IN_GENERATIVE_CONSTRUCTOR);
+          }
+        }
+      }
       
       // resolve redirecting factory constructor
       {
@@ -1253,6 +1287,20 @@
         }
       }
 
+      if (ElementKind.of(element) == ElementKind.FIELD) {
+        FieldElement fieldElement = (FieldElement) element;
+        if (fieldElement.getModifiers().isAbstractField()) {
+          if (fieldElement.getGetter() == null && ASTNodes.inGetterContext(x)) {
+            topLevelContext.onError(x, ResolverErrorCode.FIELD_DOES_NOT_HAVE_A_GETTER);
+            x.markResolutionAlreadyReportedThatTheMethodCouldNotBeFound();
+          }
+          if (fieldElement.getSetter() == null && ASTNodes.inSetterContext(x)) {
+            topLevelContext.onError(x, ResolverErrorCode.FIELD_DOES_NOT_HAVE_A_SETTER);
+            x.markResolutionAlreadyReportedThatTheMethodCouldNotBeFound();
+          }
+        }
+      }
+
       // May be local variable declared in lexical scope, but its declaration is not visited yet.
       if (getContext().getScope().isDeclaredButNotReachedVariable(name)) {
         onError(x, ResolverErrorCode.USING_LOCAL_VARIABLE_BEFORE_DECLARATION, x);
@@ -1278,6 +1326,7 @@
       // If we we haven't resolved the identifier, it will be normalized to
       // this.<identifier>.
 
+      checkDeprecated(x, element);
       return recordElement(x, element);
     }
 
@@ -1319,19 +1368,9 @@
             return typeProvider.getTypeType().getElement();
           }
           break;
+        case FUNCTION_TYPE_ALIAS:
         case TYPE_VARIABLE:
-          // Type variables are not legal in identifier expressions, but the type variable
-          // may be hiding a class element.
-          LibraryElement libraryElement = scope.getLibrary();
-          Scope libraryScope = libraryElement.getScope();
-          // dip again at the library level.
-          element = libraryScope.findElement(libraryElement, name);
-          if (element == null) {
-            onError(x, ResolverErrorCode.TYPE_VARIABLE_NOT_ALLOWED_IN_IDENTIFIER);
-          } else {
-            return checkResolvedIdentifier(x, isQualifier, libraryScope, name, element);
-          }
-          break;
+          return typeProvider.getTypeType().getElement();
         default:
           break;
       }
diff --git a/compiler/java/com/google/dart/compiler/resolver/ResolverErrorCode.java b/compiler/java/com/google/dart/compiler/resolver/ResolverErrorCode.java
index 550ea7e..f6d91c6 100644
--- a/compiler/java/com/google/dart/compiler/resolver/ResolverErrorCode.java
+++ b/compiler/java/com/google/dart/compiler/resolver/ResolverErrorCode.java
@@ -127,6 +127,7 @@
   ILLEGAL_ACCESS_TO_PRIVATE_MEMBER("\"%s\" refers to \"%s\" which is in a different library"),
   ILLEGAL_FIELD_ACCESS_FROM_STATIC("Illegal access of instance field %s from static scope"),
   ILLEGAL_METHOD_ACCESS_FROM_STATIC("Illegal access of instance method %s from static scope"),
+  INITIALIZER_ONLY_IN_GENERATIVE_CONSTRUCTOR("Initializers are allowed only in non-redirecting generative constructors"),
   INIT_FIELD_ONLY_IMMEDIATELY_SURROUNDING_CLASS(
       "Only fields of immediately surrounding class can be initialized"),
   INSTANCE_METHOD_FROM_INITIALIZER("Instance methods cannot be referenced from constructor initializer"),
diff --git a/compiler/java/com/google/dart/compiler/type/InterfaceType.java b/compiler/java/com/google/dart/compiler/type/InterfaceType.java
index 7a746c1..99b7c9d 100644
--- a/compiler/java/com/google/dart/compiler/type/InterfaceType.java
+++ b/compiler/java/com/google/dart/compiler/type/InterfaceType.java
@@ -35,6 +35,10 @@
   
   void registerSubClass(ClassElement subClass);
   void unregisterSubClass(ClassElement subClass);
+  /**
+   * @return the unique {@link Member} with given name, defined in one of the subtypes. May be
+   *         <code>null</code> if not found or not unique.
+   */
   Member lookupSubTypeMember(String name);
 
   interface Member {
diff --git a/compiler/java/com/google/dart/compiler/type/InterfaceTypeImplementation.java b/compiler/java/com/google/dart/compiler/type/InterfaceTypeImplementation.java
index fac151a..52c63ce 100644
--- a/compiler/java/com/google/dart/compiler/type/InterfaceTypeImplementation.java
+++ b/compiler/java/com/google/dart/compiler/type/InterfaceTypeImplementation.java
@@ -233,21 +233,32 @@
   
   @Override
   public Member lookupSubTypeMember(String name) {
+    Member foundMember = null;
     for (ClassElement subClass : subClasses.keySet()) {
+      // find one or more members in subClass elements
       {
         Element element = subClass.lookupLocalElement(name);
         if (element != null) {
-          return new MemberImplementation(this, element);
+          if (foundMember != null) {
+            return null;
+          }
+          foundMember = new MemberImplementation(this, element);
+          continue;
         }
       }
+      // try to find deeper
       InterfaceType type = subClass.getType();
       if (type != null) {
         Member member = type.lookupSubTypeMember(name);
         if (member != null) {
-          return member;
+          if (foundMember != null) {
+            return null;
+          }
+          foundMember = member;
         }
       }
     }
-    return null;
+    // may be found
+    return foundMember;
   }
 }
diff --git a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
index 1ca3593..e6a6419 100644
--- a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
+++ b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
@@ -1860,7 +1860,7 @@
     @Override
     public Type visitFunctionExpression(DartFunctionExpression node) {
       node.visitChildren(this);
-      Type result = ((Element) node.getElement()).getType();
+      Type result = node.getElement().getType();
       result.getClass(); // quick null check
       return result;
     }
diff --git a/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java b/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java
index 75dfde1..90d8486 100644
--- a/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java
+++ b/compiler/javatests/com/google/dart/compiler/resolver/ResolverTest.java
@@ -823,8 +823,7 @@
         "  try {",
         "    0.25 - f;",
         "  } catch(e) {}",
-        "}"),
-        ResolverErrorCode.CANNOT_USE_TYPE);
+        "}"));
   }
 
   public void test_classUsedAsExpression() {
@@ -841,11 +840,11 @@
         "class A<B> {",
         "  var field = B;",
         "  f() {",
-        "    0.25 - B;",
+        "    process(x);",
         "  }",
-        "}"),
-        ResolverErrorCode.TYPE_VARIABLE_NOT_ALLOWED_IN_IDENTIFIER,
-    ResolverErrorCode.TYPE_VARIABLE_NOT_ALLOWED_IN_IDENTIFIER);
+        "}",
+        "process(x) {}",
+        ""));
   }
 
   public void test_shadowType_withVariable() throws Exception {
@@ -1057,6 +1056,8 @@
         "  result = instance.setter3;",
         "  instance.setter3 = 1;",
         "}"),
+        errEx(ResolverErrorCode.FIELD_DOES_NOT_HAVE_A_SETTER, 13, 3, 7),
+        errEx(ResolverErrorCode.FIELD_DOES_NOT_HAVE_A_GETTER, 14, 12, 7),
         errEx(ResolverErrorCode.FIELD_DOES_NOT_HAVE_A_SETTER, 17, 5, 7),
         errEx(ResolverErrorCode.FIELD_DOES_NOT_HAVE_A_GETTER, 18, 14, 7));
   }
diff --git a/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java b/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java
index f1a8dcb..5f72504 100644
--- a/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java
+++ b/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java
@@ -3707,6 +3707,8 @@
         "const deprecated = 0;",
         "@deprecated",
         "ttt() {}",
+        "@deprecated",
+        "get topLevelGet => 42;",
         "class A {",
         "  var @deprecated fff;",
         "  @deprecated",
@@ -3716,6 +3718,7 @@
         "}",
         "method() {",
         "  ttt();",
+        "  print(topLevelGet);",
         "  A a = new A();",
         "  a.fff = 0;",
         "  a.mmmm();",
@@ -3724,10 +3727,11 @@
         "");
     assertErrors(
         libraryResult.getErrors(),
-        errEx(TypeErrorCode.DEPRECATED_ELEMENT, 13, 3, 3),
-        errEx(TypeErrorCode.DEPRECATED_ELEMENT, 15, 5, 3),
-        errEx(TypeErrorCode.DEPRECATED_ELEMENT, 16, 5, 4),
-        errEx(TypeErrorCode.DEPRECATED_ELEMENT, 17, 5, 1));
+        errEx(TypeErrorCode.DEPRECATED_ELEMENT, 16, 9, 11),
+        errEx(TypeErrorCode.DEPRECATED_ELEMENT, 15, 3, 3),
+        errEx(TypeErrorCode.DEPRECATED_ELEMENT, 18, 5, 3),
+        errEx(TypeErrorCode.DEPRECATED_ELEMENT, 19, 5, 4),
+        errEx(TypeErrorCode.DEPRECATED_ELEMENT, 20, 5, 1));
   }
 
   public void test_metadataComment_deprecated_2() throws Exception {
@@ -5351,6 +5355,32 @@
     assertErrors(result.getErrors(), errEx(TypeErrorCode.CANNOT_BE_RESOLVED, 5, 5, 1));
   }
 
+  public void test_field_unqualifiedAccess_read() throws Exception {
+    AnalyzeLibraryResult result = analyzeLibrary(
+        "// filler filler filler filler filler filler filler filler filler filler",
+        "class A {",
+        "  set f(x) {}",
+        "  run() {",
+        "    var v = f;",
+        "  }",
+        "}",
+        "");
+    assertErrors(result.getErrors(), errEx(ResolverErrorCode.FIELD_DOES_NOT_HAVE_A_GETTER, 5, 13, 1));
+  }
+  
+  public void test_field_unqualifiedAccess_write() throws Exception {
+    AnalyzeLibraryResult result = analyzeLibrary(
+        "// filler filler filler filler filler filler filler filler filler filler",
+        "class A {",
+        "  get f => 0;",
+        "  run() {",
+        "    f = 1;",
+        "  }",
+        "}",
+        "");
+    assertErrors(result.getErrors(), errEx(ResolverErrorCode.FIELD_DOES_NOT_HAVE_A_SETTER, 5, 5, 1));
+  }
+
   public void test_typeVariableScope_staticField() throws Exception {
     AnalyzeLibraryResult result = analyzeLibrary(
         "// filler filler filler filler filler filler filler filler filler filler",
@@ -5470,6 +5500,41 @@
   }
   
   /**
+   * We should resolve sub-type member only if there is only sub-type with such member.
+   * <p>
+   * http://code.google.com/p/dart/issues/detail?id=6776
+   */
+  public void test_trySubTypeMember_moreThanOneMember() throws Exception {
+    compilerConfiguration = new DefaultCompilerConfiguration(new CompilerOptions() {
+      @Override
+      public boolean typeChecksForInferredTypes() {
+        return true;
+      }
+    });
+    AnalyzeLibraryResult result = analyzeLibrary(
+        "// filler filler filler filler filler filler filler filler filler filler",
+        "class Event {}",
+        "class MouseEvent extends Event {",
+        "  int clientX;",
+        "}",
+        "class ScreenEvent extends Event {",
+        "  int clientX;",
+        "}",
+        "typedef Listener(Event event);",
+        "class Button {",
+        "  addListener(Listener listener) {}",
+        "}",
+        "main() {",
+        "  Button button = new Button();",
+        "  button.addListener((event) {",
+        "    event.clientX;",
+        "  });",
+        "}",
+        "");
+    assertErrors(result.getErrors(), errEx(TypeErrorCode.NOT_A_MEMBER_OF_INFERRED, 16, 11, 7));
+  }
+  
+  /**
    * <p>
    * http://code.google.com/p/dart/issues/detail?id=6491
    */
@@ -5625,4 +5690,20 @@
     assertErrors(result.getErrors(),
         errEx(ResolverErrorCode.NOT_GENERATIVE_SUPER_CONSTRUCTOR, 8, 9, 13));
   }
+  
+  /**
+   * <p>
+   * http://code.google.com/p/dart/issues/detail?id=6718
+   */
+  public void test_initializerInMethod() throws Exception {
+    AnalyzeLibraryResult result = analyzeLibrary(
+        "// filler filler filler filler filler filler filler filler filler filler",
+        "class A {",
+        "  var x;",
+        "  B() : x = (foo() { }) {}",
+        "}",
+        "");
+    assertErrors(result.getErrors(),
+        errEx(ResolverErrorCode.INITIALIZER_ONLY_IN_GENERATIVE_CONSTRUCTOR, 4, 9, 15));
+  }
 }
diff --git a/dart.gyp b/dart.gyp
index 3ec8489..b76a758 100644
--- a/dart.gyp
+++ b/dart.gyp
@@ -13,6 +13,9 @@
       'actions': []
     },
     {
+      # This is the target that is built on the VM build bots.  It
+      # must depend on anything that is required by the VM test
+      # suites.
       'target_name': 'runtime',
       'type': 'none',
       'dependencies': [
@@ -21,6 +24,7 @@
         'runtime/dart-runtime.gyp:run_vm_tests',
         'runtime/dart-runtime.gyp:process_test',
         'runtime/dart-runtime.gyp:test_extension',
+        'packages',
       ],
     },
     {
@@ -104,11 +108,15 @@
       ],
     },
     {
+      # This is the target that is built on the dart2js build bots.
+      # It must depend on anything that is required by the dart2js
+      # test suites.
       'target_name': 'dart2js_bot',
       'type': 'none',
       'dependencies': [
         'third_party/v8/src/d8.gyp:d8',
         'create_sdk',
+        'packages',
       ],
     },
     {
@@ -125,5 +133,12 @@
         'samples/sample_extension/sample_extension.gyp:sample_extension',
       ],
     },
+    {
+      'target_name': 'packages',
+      'type': 'none',
+      'dependencies': [
+        'pkg/pkg.gyp:pkg_packages',
+      ],
+    },
   ],
 }
diff --git a/pkg/args/test/args_test.dart b/pkg/args/test/args_test.dart
index 10c68fe..728ff7d 100644
--- a/pkg/args/test/args_test.dart
+++ b/pkg/args/test/args_test.dart
@@ -6,8 +6,7 @@
 
 import '../../../pkg/unittest/lib/unittest.dart';
 
-// TODO(rnystrom): Use "package:" URL here when test.dart can handle pub.
-import '../lib/args.dart';
+import 'package:args/args.dart';
 
 main() {
   group('ArgParser.addFlag()', () {
diff --git a/pkg/fixnum/lib/src/int32.dart b/pkg/fixnum/lib/src/int32.dart
index 80f5f3c..ac92a7e 100644
--- a/pkg/fixnum/lib/src/int32.dart
+++ b/pkg/fixnum/lib/src/int32.dart
@@ -142,7 +142,7 @@
   // will be truncated.
   int _convert(other) {
     if (other == null) {
-      throw new NullPointerException();
+      throw new ArgumentError(null);
     } else if (other is intx) {
       return other.toInt32()._i;
     } else if (other is int) {
diff --git a/pkg/fixnum/lib/src/int64.dart b/pkg/fixnum/lib/src/int64.dart
index cefb2c0..3ef0bc0 100644
--- a/pkg/fixnum/lib/src/int64.dart
+++ b/pkg/fixnum/lib/src/int64.dart
@@ -242,7 +242,7 @@
 
   int64 _promote(other) {
     if (other == null) {
-      throw new NullPointerException();
+      throw new ArgumentError(null);
     } else if (other is intx) {
       other = other.toInt64();
     } else if (other is int) {
diff --git a/pkg/fixnum/test/int_32_test.dart b/pkg/fixnum/test/int_32_test.dart
index 7ea6591..e719fa6 100644
--- a/pkg/fixnum/test/int_32_test.dart
+++ b/pkg/fixnum/test/int_32_test.dart
@@ -132,26 +132,26 @@
 
   try {
     new int32.fromInt(17) < null;
-    Expect.fail("x < null should throw NullPointerException");
-  } on NullPointerException catch (e) {
+    Expect.fail("x < null should throw ArgumentError");
+  } on ArgumentError catch (e) {
   }
 
   try {
     new int32.fromInt(17) <= null;
-    Expect.fail("x <= null should throw NullPointerException");
-  } on NullPointerException catch (e) {
+    Expect.fail("x <= null should throw ArgumentError");
+  } on ArgumentError catch (e) {
   }
 
   try {
     new int32.fromInt(17) > null;
-    Expect.fail("x > null should throw NullPointerException");
-  } on NullPointerException catch (e) {
+    Expect.fail("x > null should throw ArgumentError");
+  } on ArgumentError catch (e) {
   }
 
   try {
     new int32.fromInt(17) < null;
-    Expect.fail("x >= null should throw NullPointerException");
-  } on NullPointerException catch (e) {
+    Expect.fail("x >= null should throw ArgumentError");
+  } on ArgumentError catch (e) {
   }
 
   Expect.isFalse(new int32.fromInt(17) == null);
diff --git a/pkg/fixnum/test/int_64_test.dart b/pkg/fixnum/test/int_64_test.dart
index 65d47b3..f41f45c 100644
--- a/pkg/fixnum/test/int_64_test.dart
+++ b/pkg/fixnum/test/int_64_test.dart
@@ -145,26 +145,26 @@
 
   try {
     new int64.fromInt(17) < null;
-    Expect.fail("x < null should throw NullPointerException");
-  } on NullPointerException catch (e) {
+    Expect.fail("x < null should throw ArgumentError");
+  } on ArgumentError catch (e) {
   }
 
   try {
     new int64.fromInt(17) <= null;
-    Expect.fail("x <= null should throw NullPointerException");
-  } on NullPointerException catch (e) {
+    Expect.fail("x <= null should throw ArgumentError");
+  } on ArgumentError catch (e) {
   }
 
   try {
     new int64.fromInt(17) > null;
-    Expect.fail("x > null should throw NullPointerException");
-  } on NullPointerException catch (e) {
+    Expect.fail("x > null should throw ArgumentError");
+  } on ArgumentError catch (e) {
   }
 
   try {
     new int64.fromInt(17) < null;
-    Expect.fail("x >= null should throw NullPointerException");
-  } on NullPointerException catch (e) {
+    Expect.fail("x >= null should throw ArgumentError");
+  } on ArgumentError catch (e) {
   }
 
   Expect.isFalse(new int64.fromInt(17) == null);
diff --git a/pkg/http/lib/http.dart b/pkg/http/lib/http.dart
index 4ee2c61..ee074f7 100644
--- a/pkg/http/lib/http.dart
+++ b/pkg/http/lib/http.dart
@@ -37,11 +37,11 @@
 /// This package is designed to be composable. This makes it easy for external
 /// libraries to work with one another to add behavior to it. Libraries wishing
 /// to add behavior should create a subclass of [BaseClient] that wraps another
-/// [BaseClient] and adds the desired behavior:
+/// [Client] and adds the desired behavior:
 ///
 ///     class UserAgentClient extends http.BaseClient {
 ///       final String userAgent;
-///       final HttpClient _inner;
+///       final http.Client _inner;
 ///
 ///       UserAgentClient(this.userAgent, this._inner);
 ///
@@ -50,9 +50,6 @@
 ///         return _inner.send(request);
 ///       }
 ///     }
-///
-/// In turn, libraries using [Client] should take a [BaseClient] so that the
-/// decorated clients can be used transparently.
 
 library http;
 
@@ -65,7 +62,6 @@
 export 'src/base_client.dart';
 export 'src/base_request.dart';
 export 'src/base_response.dart';
-export 'src/curl_client.dart';
 export 'src/client.dart';
 export 'src/multipart_file.dart';
 export 'src/multipart_request.dart';
diff --git a/pkg/http/lib/src/base_client.dart b/pkg/http/lib/src/base_client.dart
index 0b9c52d..1662f00 100644
--- a/pkg/http/lib/src/base_client.dart
+++ b/pkg/http/lib/src/base_client.dart
@@ -9,6 +9,7 @@
 import 'dart:uri';
 
 import 'base_request.dart';
+import 'client.dart';
 import 'request.dart';
 import 'response.dart';
 import 'streamed_response.dart';
@@ -17,7 +18,7 @@
 /// The abstract base class for an HTTP client. This is a mixin-style class;
 /// subclasses only need to implement [send] and maybe [close], and then they
 /// get various convenience methods for free.
-abstract class BaseClient {
+abstract class BaseClient implements Client {
   /// Sends an HTTP HEAD request with the given headers to the given URL, which
   /// can be a [Uri] or a [String].
   ///
diff --git a/pkg/http/lib/src/client.dart b/pkg/http/lib/src/client.dart
index bbee58d..d60df93 100644
--- a/pkg/http/lib/src/client.dart
+++ b/pkg/http/lib/src/client.dart
@@ -8,75 +8,89 @@
 
 import 'base_client.dart';
 import 'base_request.dart';
+import 'io_client.dart';
 import 'streamed_response.dart';
 import 'utils.dart';
 
-/// An HTTP client which takes care of maintaining persistent connections across
-/// multiple requests to the same server. If you only need to send a single
-/// request, it's usually easier to use [head], [get], [post],
+/// The interface for HTTP clients that take care of maintaining persistent
+/// connections across multiple requests to the same server. If you only need to
+/// send a single request, it's usually easier to use [head], [get], [post],
 /// [put], or [delete] instead.
 ///
-/// When creating an HTTP client class with additional functionality, it's
-/// recommended that you subclass [BaseClient] and wrap another instance of
-/// [BaseClient] rather than subclassing [Client] directly. This allows all
-/// subclasses of [BaseClient] to be mutually composable.
-class Client extends BaseClient {
-  /// The underlying `dart:io` HTTP client.
-  HttpClient _inner;
+/// When creating an HTTP client class with additional functionality, you must
+/// extend [BaseClient] rather than [Client]. In most cases, you can wrap
+/// another instance of [Client] and add functionality on top of that. This
+/// allows all classes implementing [Client] to be mutually composable.
+abstract class Client {
+  /// Creates a new Client using the default implementation. This implementation
+  /// uses an underlying `dart:io` [HttpClient] to make requests.
+  factory Client() => new IOClient();
 
-  /// Creates a new HTTP client.
-  Client() : _inner = new HttpClient();
+  /// Sends an HTTP HEAD request with the given headers to the given URL, which
+  /// can be a [Uri] or a [String].
+  ///
+  /// For more fine-grained control over the request, use [send] instead.
+  Future<Response> head(url, {Map<String, String> headers});
+
+  /// Sends an HTTP GET request with the given headers to the given URL, which
+  /// can be a [Uri] or a [String].
+  ///
+  /// For more fine-grained control over the request, use [send] instead.
+  Future<Response> get(url, {Map<String, String> headers});
+
+  /// Sends an HTTP POST request with the given headers and fields to the given
+  /// URL, which can be a [Uri] or a [String]. If any fields are specified, the
+  /// content-type is automatically set to
+  /// `"application/x-www-form-urlencoded"`.
+  ///
+  /// For more fine-grained control over the request, use [send] instead.
+  Future<Response> post(url,
+      {Map<String, String> headers,
+       Map<String, String> fields});
+
+  /// Sends an HTTP PUT request with the given headers and fields to the given
+  /// URL, which can be a [Uri] or a [String]. If any fields are specified, the
+  /// content-type is automatically set to
+  /// `"application/x-www-form-urlencoded"`.
+  ///
+  /// For more fine-grained control over the request, use [send] instead.
+  Future<Response> put(url,
+      {Map<String, String> headers,
+       Map<String, String> fields});
+
+  /// Sends an HTTP DELETE request with the given headers to the given URL,
+  /// which can be a [Uri] or a [String].
+  ///
+  /// For more fine-grained control over the request, use [send] instead.
+  Future<Response> delete(url, {Map<String, String> headers});
+
+  /// Sends an HTTP GET request with the given headers to the given URL, which
+  /// can be a [Uri] or a [String], and returns a Future that completes to the
+  /// body of the response as a String.
+  ///
+  /// The Future will emit an [HttpException] if the response doesn't have a
+  /// success status code.
+  ///
+  /// For more fine-grained control over the request and response, use [send] or
+  /// [get] instead.
+  Future<String> read(url, {Map<String, String> headers});
+
+  /// Sends an HTTP GET request with the given headers to the given URL, which
+  /// can be a [Uri] or a [String], and returns a Future that completes to the
+  /// body of the response as a list of bytes.
+  ///
+  /// The Future will emit an [HttpException] if the response doesn't have a
+  /// success status code.
+  ///
+  /// For more fine-grained control over the request and response, use [send] or
+  /// [get] instead.
+  Future<Uint8List> readBytes(url, {Map<String, String> headers});
 
   /// Sends an HTTP request and asynchronously returns the response.
-  Future<StreamedResponse> send(BaseRequest request) {
-    var stream = request.finalize();
+  Future<StreamedResponse> send(BaseRequest request);
 
-    var completer = new Completer<StreamedResponse>();
-    var connection = _inner.openUrl(request.method, request.url);
-    connection.onError = (e) {
-      async.then((_) {
-        // TODO(nweiz): remove this when issue 4974 is fixed
-        if (completer.future.isComplete) throw e;
-
-        completer.completeException(e);
-      });
-    };
-
-    connection.onRequest = (underlyingRequest) {
-      underlyingRequest.contentLength = request.contentLength;
-      underlyingRequest.persistentConnection = request.persistentConnection;
-      request.headers.forEach((name, value) {
-        underlyingRequest.headers.set(name, value);
-      });
-
-      if (stream.closed) {
-        underlyingRequest.outputStream.close();
-      } else {
-        stream.pipe(underlyingRequest.outputStream);
-      }
-    };
-
-    connection.onResponse = (response) {
-      var headers = <String>{};
-      response.headers.forEach((key, value) => headers[key] = value);
-
-      completer.complete(new StreamedResponse(
-          response.inputStream,
-          response.statusCode,
-          response.contentLength,
-          headers: headers,
-          isRedirect: response.isRedirect,
-          persistentConnection: response.persistentConnection,
-          reasonPhrase: response.reasonPhrase));
-    };
-
-    return completer.future;
-  }
-
-  /// Closes the client. This terminates all active connections. If a client
-  /// remains unclosed, the Dart process may not terminate.
-  void close() {
-    if (_inner != null) _inner.shutdown();
-    _inner = null;
-  }
+  /// Closes the client and cleans up any resources associated with it. It's
+  /// important to close each client when it's done being used; failing to do so
+  /// can cause the Dart process to hang.
+  void close();
 }
diff --git a/pkg/http/lib/src/io_client.dart b/pkg/http/lib/src/io_client.dart
new file mode 100644
index 0000000..995ff3b
--- /dev/null
+++ b/pkg/http/lib/src/io_client.dart
@@ -0,0 +1,74 @@
+// Copyright (c) 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.
+
+library io_client;
+
+import 'dart:io';
+
+import 'base_client.dart';
+import 'base_request.dart';
+import 'streamed_response.dart';
+import 'utils.dart';
+
+/// A `dart:io`-based HTTP client. This is the default client.
+class IOClient extends BaseClient {
+  /// The underlying `dart:io` HTTP client.
+  HttpClient _inner;
+
+  /// Creates a new HTTP client.
+  IOClient() : _inner = new HttpClient();
+
+  /// Sends an HTTP request and asynchronously returns the response.
+  Future<StreamedResponse> send(BaseRequest request) {
+    var stream = request.finalize();
+
+    var completer = new Completer<StreamedResponse>();
+    var connection = _inner.openUrl(request.method, request.url);
+    connection.onError = (e) {
+      async.then((_) {
+        // TODO(nweiz): remove this when issue 4974 is fixed
+        if (completer.future.isComplete) throw e;
+
+        completer.completeException(e);
+      });
+    };
+
+    connection.onRequest = (underlyingRequest) {
+      underlyingRequest.contentLength = request.contentLength;
+      underlyingRequest.persistentConnection = request.persistentConnection;
+      request.headers.forEach((name, value) {
+        underlyingRequest.headers.set(name, value);
+      });
+
+      if (stream.closed) {
+        underlyingRequest.outputStream.close();
+      } else {
+        stream.pipe(underlyingRequest.outputStream);
+      }
+    };
+
+    connection.onResponse = (response) {
+      var headers = <String>{};
+      response.headers.forEach((key, value) => headers[key] = value);
+
+      completer.complete(new StreamedResponse(
+          response.inputStream,
+          response.statusCode,
+          response.contentLength,
+          headers: headers,
+          isRedirect: response.isRedirect,
+          persistentConnection: response.persistentConnection,
+          reasonPhrase: response.reasonPhrase));
+    };
+
+    return completer.future;
+  }
+
+  /// Closes the client. This terminates all active connections. If a client
+  /// remains unclosed, the Dart process may not terminate.
+  void close() {
+    if (_inner != null) _inner.shutdown();
+    _inner = null;
+  }
+}
diff --git a/pkg/http/lib/src/utils.dart b/pkg/http/lib/src/utils.dart
index 665ee1e..8431603 100644
--- a/pkg/http/lib/src/utils.dart
+++ b/pkg/http/lib/src/utils.dart
@@ -185,26 +185,3 @@
   }
   return nextElement(null);
 }
-
-/// Creates a temporary directory and passes its path to [fn]. Once the [Future]
-/// returned by [fn] completes, the temporary directory and all its contents
-/// will be deleted.
-Future withTempDir(Future fn(String path)) {
-  var tempDir;
-  var future = new Directory('').createTemp().chain((dir) {
-    tempDir = dir;
-    return fn(tempDir.path);
-  });
-  future.onComplete((_) => tempDir.delete(recursive: true));
-  return future;
-}
-
-/// Configures [future] so that its result (success or exception) is passed on
-/// to [completer].
-void chainToCompleter(Future future, Completer completer) {
-  future.handleException((e) {
-    completer.completeException(e);
-    return true;
-  });
-  future.then(completer.complete);
-}
diff --git a/pkg/http/test/request_test.dart b/pkg/http/test/request_test.dart
index 5c2d98c..319abfb 100644
--- a/pkg/http/test/request_test.dart
+++ b/pkg/http/test/request_test.dart
@@ -13,23 +13,16 @@
 
 void main() {
   test('.send', () {
-    print("This test is known to be flaky, please ignore "
-          "(debug prints below added by sgjesse@)");
-    print(".send test starting server...");
     startServer();
-    print(".send test server running");
 
     var request = new http.Request('POST', serverUrl);
     request.body = "hello";
     var future = request.send().chain((response) {
-      print(".send test response received");
       expect(response.statusCode, equals(200));
       return consumeInputStream(response.stream);
     }).transform((bytes) => new String.fromCharCodes(bytes));
     future.onComplete((_) {
-      print(".send test stopping server...");
       stopServer();
-      print(".send test server stopped");
     });
 
     expect(future, completion(parse(equals({
@@ -41,7 +34,6 @@
       },
       'body': 'hello'
     }))));
-    print(".send test started");
   });
 
   group('#contentLength', () {
diff --git a/pkg/oauth2/lib/oauth2.dart b/pkg/oauth2/lib/oauth2.dart
new file mode 100644
index 0000000..a7e9307
--- /dev/null
+++ b/pkg/oauth2/lib/oauth2.dart
@@ -0,0 +1,109 @@
+// Copyright (c) 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.
+
+/// A client library for authenticating with a remote service via OAuth2 on
+/// behalf of a user, and making authorized HTTP requests with the user's OAuth2
+/// credentials.
+///
+/// OAuth2 allows a client (the program using this library) to access and
+/// manipulate a resource that's owned by a resource owner (the end user) and
+/// lives on a remote server. The client directs the resource owner to an
+/// authorization server (usually but not always the same as the server that
+/// hosts the resource), where the resource owner tells the authorization server
+/// to give the client an access token. This token serves as proof that the
+/// client has permission to access resources on behalf of the resource owner.
+///
+/// OAuth2 provides several different methods for the client to obtain
+/// authorization. At the time of writing, this library only supports the
+/// [AuthorizationCodeGrant] method, but further methods may be added in the
+/// future. The following example uses this method to authenticate, and assumes
+/// that the library is being used by a server-side application.
+///
+///     import 'dart:io'
+///     import 'dart:uri'
+///     import 'package:oauth2/oauth2.dart' as oauth2;
+///
+///     // These URLs are endpoints that are provided by the authorization
+///     // server. They're usually included in the server's documentation of its
+///     // OAuth2 API.
+///     final authorizationEndpoint =
+///         new Uri.fromString("http://example.com/oauth2/authorization");
+///     final tokenEndpoint =
+///         new Uri.fromString("http://example.com/oauth2/token");
+///     
+///     // The authorization server will issue each client a separate client
+///     // identifier and secret, which allows the server to tell which client
+///     // is accessing it. Some servers may also have an anonymous
+///     // identifier/secret pair that any client may use.
+///     //
+///     // Note that clients whose source code or binary executable is readily
+///     // available may not be able to make sure the client secret is kept a
+///     // secret. This is fine; OAuth2 servers generally won't rely on knowing
+///     // with certainty that a client is who it claims to be.
+///     final identifier = "my client identifier";
+///     final secret = "my client secret";
+///
+///     // This is a URL on your application's server. The authorization server
+///     // will redirect the resource owner here once they've authorized the
+///     // client. The redirection will include the authorization code in the
+///     // query parameters.
+///     final redirectUrl = new Uri.fromString(
+///         "http://my-site.com/oauth2-redirect");
+///     
+///     var credentialsFile = new File("~/.myapp/credentials.json");
+///     return credentialsFile.exists().chain((exists) {
+///       // If the OAuth2 credentials have already been saved from a previous
+///       // run, we just want to reload them.
+///       if (exists) {
+///         return credentialsFile.readAsText().transform((json) {
+///           var credentials = new oauth2.Credentials.fromJson(json);
+///           return new oauth2.Client(identifier, secret, credentials);
+///         });
+///       }
+///     
+///       // If we don't have OAuth2 credentials yet, we need to get the
+///       // resource owner to authorize us. We're assuming here that we're a
+///       // command-line application.
+///       var grant = new oauth2.AuthorizationCodeGrant(
+///           identifier, secret, authorizationEndpoint, tokenEndpoint);
+///     
+///       // Redirect the resource owner to the authorization URL. This will be
+///       // a URL on the authorization server (authorizationEndpoint with some
+///       // additional query parameters). Once the resource owner has
+///       // authorized, they'll be redirected to `redirectUrl` with an
+///       // authorization code.
+///       //
+///       // `redirect` is an imaginary function that redirects the resource
+///       // owner's browser.
+///       return redirect(grant.getAuthorizationUrl(redirectUrl)).chain((_) {
+///         // Another imaginary function that listens for a request to
+///         // `redirectUrl`.
+///         return listen(redirectUrl);
+///       }).transform((request) {
+///         // Once the user is redirected to `redirectUrl`, pass the query
+///         // parameters to the AuthorizationCodeGrant. It will validate them
+///         // and extract the authorization code to create a new Client.
+///         return grant.handleAuthorizationResponse(request.queryParameters);
+///       })
+///     }).chain((client) {
+///       // Once you have a Client, you can use it just like any other HTTP
+///       // client.
+///       return client.read("http://example.com/protected-resources.txt")
+///           .transform((result) {
+///         // Once we're done with the client, save the credentials file. This
+///         // ensures that if the credentials were automatically refreshed
+///         // while using the client, the new credentials are available for the
+///         // next run of the program.
+///         return credentialsFile.open(FileMode.WRITE).chain((file) {
+///           return file.writeString(client.credentials.toJson());
+///         }).chain((file) => file.close()).transform((_) => result);
+///       });
+///     }).then(print);
+library oauth2;
+
+export 'src/authorization_code_grant.dart';
+export 'src/client.dart';
+export 'src/credentials.dart';
+export 'src/authorization_exception.dart';
+export 'src/expiration_exception.dart';
diff --git a/pkg/oauth2/lib/src/authorization_code_grant.dart b/pkg/oauth2/lib/src/authorization_code_grant.dart
new file mode 100644
index 0000000..dcb36d06
--- /dev/null
+++ b/pkg/oauth2/lib/src/authorization_code_grant.dart
@@ -0,0 +1,258 @@
+// Copyright (c) 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.
+
+library authorization_code_grant;
+
+import 'dart:uri';
+
+// TODO(nweiz): This should be a "package:" import. See issue 6745.
+import '../../../http/lib/http.dart' as http;
+
+import 'client.dart';
+import 'authorization_exception.dart';
+import 'handle_access_token_response.dart';
+import 'utils.dart';
+
+/// A class for obtaining credentials via an [authorization code grant][]. This
+/// method of authorization involves sending the resource owner to the
+/// authorization server where they will authorize the client. They're then
+/// redirected back to your server, along with an authorization code. This is
+/// used to obtain [Credentials] and create a fully-authorized [Client].
+///
+/// To use this class, you must first call [getAuthorizationUrl] to get the URL
+/// to which to redirect the resource owner. Then once they've been redirected
+/// back to your application, call [handleAuthorizationResponse] or
+/// [handleAuthorizationCode] to process the authorization server's response and
+/// construct a [Client].
+///
+/// [authorization code grant]: http://tools.ietf.org/html/draft-ietf-oauth-v2-31#section-4.1
+class AuthorizationCodeGrant {
+  /// An enum value for [_state] indicating that [getAuthorizationUrl] has not
+  /// yet been called for this grant.
+  static const _INITIAL_STATE = 0;
+
+  // An enum value for [_state] indicating that [getAuthorizationUrl] has been
+  // called but neither [handleAuthorizationResponse] nor
+  // [handleAuthorizationCode] has been called.
+  static const _AWAITING_RESPONSE_STATE = 1;
+
+  // An enum value for [_state] indicating that [getAuthorizationUrl] and either
+  // [handleAuthorizationResponse] or [handleAuthorizationCode] have been
+  // called.
+  static const _FINISHED_STATE = 2;
+
+  /// The client identifier for this client. The authorization server will issue
+  /// each client a separate client identifier and secret, which allows the
+  /// server to tell which client is accessing it. Some servers may also have an
+  /// anonymous identifier/secret pair that any client may use.
+  ///
+  /// This is usually global to the program using this library.
+  final String identifier;
+
+  /// The client secret for this client. The authorization server will issue
+  /// each client a separate client identifier and secret, which allows the
+  /// server to tell which client is accessing it. Some servers may also have an
+  /// anonymous identifier/secret pair that any client may use.
+  ///
+  /// This is usually global to the program using this library.
+  ///
+  /// Note that clients whose source code or binary executable is readily
+  /// available may not be able to make sure the client secret is kept a secret.
+  /// This is fine; OAuth2 servers generally won't rely on knowing with
+  /// certainty that a client is who it claims to be.
+  final String secret;
+
+  /// A URL provided by the authorization server that serves as the base for the
+  /// URL that the resource owner will be redirected to to authorize this
+  /// client. This will usually be listed in the authorization server's
+  /// OAuth2 API documentation.
+  final Uri authorizationEndpoint;
+
+  /// A URL provided by the authorization server that this library uses to
+  /// obtain long-lasting credentials. This will usually be listed in the
+  /// authorization server's OAuth2 API documentation.
+  final Uri tokenEndpoint;
+
+  /// The HTTP client used to make HTTP requests.
+  http.Client _httpClient;
+
+  /// The URL to which the resource owner will be redirected after they
+  /// authorize this client with the authorization server.
+  Uri _redirectEndpoint;
+
+  /// The scopes that the client is requesting access to.
+  List<String> _scopes;
+
+  /// An opaque string that users of this library may specify that will be
+  /// included in the response query parameters.
+  String _stateString;
+
+  /// The current state of the grant object. One of [_INITIAL_STATE],
+  /// [_AWAITING_RESPONSE_STATE], or [_FINISHED_STATE].
+  int _state = _INITIAL_STATE;
+
+  /// Creates a new grant.
+  ///
+  /// [httpClient] is used for all HTTP requests made by this grant, as well as
+  /// those of the [Client] is constructs.
+  AuthorizationCodeGrant(
+      this.identifier,
+      this.secret,
+      this.authorizationEndpoint,
+      this.tokenEndpoint,
+      {http.Client httpClient})
+    : _httpClient = httpClient == null ? new http.Client() : httpClient;
+
+  /// Returns the URL to which the resource owner should be redirected to
+  /// authorize this client. The resource owner will then be redirected to
+  /// [redirect], which should point to a server controlled by the client. This
+  /// redirect will have additional query parameters that should be passed to
+  /// [handleAuthorizationResponse].
+  ///
+  /// The specific permissions being requested from the authorization server may
+  /// be specified via [scopes]. The scope strings are specific to the
+  /// authorization server and may be found in its documentation. Note that you
+  /// may not be granted access to every scope you request; you may check the
+  /// [Credentials.scopes] field of [Client.credentials] to see which scopes you
+  /// were granted.
+  ///
+  /// An opaque [state] string may also be passed that will be present in the
+  /// query parameters provided to the redirect URL.
+  ///
+  /// It is a [StateError] to call this more than once.
+  Uri getAuthorizationUrl(Uri redirect,
+      {List<String> scopes: const <String>[], String state}) {
+    if (_state != _INITIAL_STATE) {
+      throw new StateError('The authorization URL has already been generated.');
+    }
+    _state = _AWAITING_RESPONSE_STATE;
+
+    this._redirectEndpoint = redirect;
+    this._scopes = scopes;
+    this._stateString = state;
+    var parameters = {
+      "response_type": "code",
+      "client_id": this.identifier,
+      "redirect_uri": redirect.toString()
+    };
+
+    if (state != null) parameters['state'] = state;
+    if (!scopes.isEmpty) parameters['scope'] = Strings.join(scopes, ' ');
+
+    return addQueryParameters(this.authorizationEndpoint, parameters);
+  }
+
+  /// Processes the query parameters added to a redirect from the authorization
+  /// server. Note that this "response" is not an HTTP response, but rather the
+  /// data passed to a server controlled by the client as query parameters on
+  /// the redirect URL.
+  ///
+  /// It is a [StateError] to call this more than once, to call it before
+  /// [getAuthorizationUrl] is called, or to call it after
+  /// [handleAuthorizationCode] is called.
+  ///
+  /// Throws [FormatError] if [parameters] is invalid according to the OAuth2
+  /// spec or if the authorization server otherwise provides invalid responses.
+  /// If `state` was passed to [getAuthorizationUrl], this will throw a
+  /// [FormatError] if the `state` parameter doesn't match the original value.
+  ///
+  /// Throws [AuthorizationException] if the authorization fails.
+  Future<Client> handleAuthorizationResponse(Map<String, String> parameters) {
+    return async.chain((_) {
+      if (_state == _INITIAL_STATE) {
+        throw new StateError(
+            'The authorization URL has not yet been generated.');
+      } else if (_state == _FINISHED_STATE) {
+        throw new StateError(
+            'The authorization code has already been received.');
+      }
+      _state = _FINISHED_STATE;
+
+      if (_stateString != null) {
+        if (!parameters.containsKey('state')) {
+          throw new FormatException('Invalid OAuth response for '
+              '"$authorizationEndpoint": parameter "state" expected to be '
+              '"$_stateString", was missing.');
+        } else if (parameters['state'] != _stateString) {
+          throw new FormatException('Invalid OAuth response for '
+              '"$authorizationEndpoint": parameter "state" expected to be '
+              '"$_stateString", was "${parameters['state']}".');
+        }
+      }
+
+      if (parameters.containsKey('error')) {
+        var description = parameters['error_description'];
+        var uriString = parameters['error_uri'];
+        var uri = uriString == null ? null : new Uri.fromString(uriString);
+        throw new AuthorizationException(parameters['error'], description, uri);
+      } else if (!parameters.containsKey('code')) {
+        throw new FormatException('Invalid OAuth response for '
+            '"$authorizationEndpoint": did not contain required parameter '
+            '"code".');
+      }
+
+      return _handleAuthorizationCode(parameters['code']);
+    });
+  }
+
+  /// Processes an authorization code directly. Usually
+  /// [handleAuthorizationResponse] is preferable to this method, since it
+  /// validates all of the query parameters. However, some authorization servers
+  /// allow the user to copy and paste an authorization code into a command-line
+  /// application, in which case this method must be used.
+  ///
+  /// It is a [StateError] to call this more than once, to call it before
+  /// [getAuthorizationUrl] is called, or to call it after
+  /// [handleAuthorizationCode] is called.
+  ///
+  /// Throws [FormatError] if the authorization server provides invalid
+  /// responses while retrieving credentials.
+  ///
+  /// Throws [AuthorizationException] if the authorization fails.
+  Future<Client> handleAuthorizationCode(String authorizationCode) {
+    return async.chain((_) {
+      if (_state == _INITIAL_STATE) {
+        throw new StateError(
+            'The authorization URL has not yet been generated.');
+      } else if (_state == _FINISHED_STATE) {
+        throw new StateError(
+            'The authorization code has already been received.');
+      }
+      _state = _FINISHED_STATE;
+
+      return _handleAuthorizationCode(authorizationCode);
+    });
+  }
+
+  /// This works just like [handleAuthorizationCode], except it doesn't validate
+  /// the state beforehand.
+  Future<Client> _handleAuthorizationCode(String authorizationCode) {
+    var startTime = new Date.now();
+    return _httpClient.post(this.tokenEndpoint, fields: {
+      "grant_type": "authorization_code",
+      "code": authorizationCode,
+      "redirect_uri": this._redirectEndpoint.toString(),
+      // TODO(nweiz): the spec recommends that HTTP basic auth be used in
+      // preference to form parameters, but Google doesn't support that. Should
+      // it be configurable?
+      "client_id": this.identifier,
+      "client_secret": this.secret
+    }).transform((response) {
+      var credentials = handleAccessTokenResponse(
+          response, tokenEndpoint, startTime, _scopes);
+      return new Client(
+          this.identifier, this.secret, credentials, httpClient: _httpClient);
+    });
+  }
+
+  /// Closes the grant and frees its resources.
+  ///
+  /// This will close the underlying HTTP client, which is shared by the
+  /// [Client] created by this grant, so it's not safe to close the grant and
+  /// continue using the client.
+  void close() {
+    if (_httpClient != null) _httpClient.close();
+    _httpClient = null;
+  }
+}
diff --git a/pkg/oauth2/lib/src/authorization_exception.dart b/pkg/oauth2/lib/src/authorization_exception.dart
new file mode 100644
index 0000000..1062aa9
--- /dev/null
+++ b/pkg/oauth2/lib/src/authorization_exception.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 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.
+
+library authorization_exception;
+
+import 'dart:io';
+import 'dart:uri';
+
+/// An exception raised when OAuth2 authorization fails.
+class AuthorizationException implements Exception {
+  /// The name of the error. Possible names are enumerated in [the spec][].
+  ///
+  /// [the spec]: http://tools.ietf.org/html/draft-ietf-oauth-v2-31#section-5.2
+  final String error;
+
+  /// The description of the error, provided by the server. Defaults to null.
+  final String description;
+
+  /// A URI for a page that describes the error in more detail, provided by the
+  /// server. Defaults to null.
+  final Uri uri;
+
+  /// Creates an AuthorizationException.
+  AuthorizationException(this.error, this.description, this.uri);
+
+  /// Provides a string description of the AuthorizationException.
+  String toString() {
+    var header = 'OAuth authorization error ($error)';
+    if (description != null) {
+      header = '$header: $description';
+    } else if (uri != null) {
+      header = '$header: $uri';
+    }
+    return '$header.';
+  }
+}
diff --git a/pkg/oauth2/lib/src/client.dart b/pkg/oauth2/lib/src/client.dart
new file mode 100644
index 0000000..7322afa
--- /dev/null
+++ b/pkg/oauth2/lib/src/client.dart
@@ -0,0 +1,124 @@
+// Copyright (c) 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.
+
+library client;
+
+import 'dart:uri';
+
+import '../../../http/lib/http.dart' as http;
+
+import 'credentials.dart';
+import 'expiration_exception.dart';
+import 'utils.dart';
+
+// TODO(nweiz): Add an onCredentialsRefreshed event once we have some event
+// infrastructure.
+/// An OAuth2 client. This acts as a drop-in replacement for an [http.Client],
+/// while sending OAuth2 authorization credentials along with each request.
+///
+/// The client also automatically refreshes its credentials if possible. When it
+/// makes a request, if its credentials are expired, it will first refresh them.
+/// This means that any request may throw an [AuthorizationException] if the
+/// refresh is not authorized for some reason, a [FormatException] if the
+/// authorization server provides ill-formatted responses, or an
+/// [ExpirationException] if the credentials are expired and can't be refreshed.
+///
+/// Currently this client doesn't attempt to identify errors from the resource
+/// server that are caused by authentication failure. However, it may throw
+/// [AuthorizationException]s for such errors in the future.
+///
+/// If you already have a set of [Credentials], you can construct a [Client]
+/// directly. However, in order to first obtain the credentials, you must
+/// authorize. At the time of writing, the only authorization method this
+/// library supports is [AuthorizationCodeGrant].
+class Client extends http.BaseClient {
+  /// The client identifier for this client. The authorization server will issue
+  /// each client a separate client identifier and secret, which allows the
+  /// server to tell which client is accessing it. Some servers may also have an
+  /// anonymous identifier/secret pair that any client may use.
+  ///
+  /// This is usually global to the program using this library.
+  final String identifier;
+
+  /// The client secret for this client. The authorization server will issue
+  /// each client a separate client identifier and secret, which allows the
+  /// server to tell which client is accessing it. Some servers may also have an
+  /// anonymous identifier/secret pair that any client may use.
+  ///
+  /// This is usually global to the program using this library.
+  ///
+  /// Note that clients whose source code or binary executable is readily
+  /// available may not be able to make sure the client secret is kept a secret.
+  /// This is fine; OAuth2 servers generally won't rely on knowing with
+  /// certainty that a client is who it claims to be.
+  final String secret;
+
+  /// The credentials this client uses to prove to the resource server that it's
+  /// authorized. This may change from request to request as the credentials
+  /// expire and the client refreshes them automatically.
+  Credentials get credentials => _credentials;
+  Credentials _credentials;
+
+  /// The underlying HTTP client.
+  http.Client _httpClient;
+
+  /// Creates a new client from a pre-existing set of credentials. When
+  /// authorizing a client for the first time, you should use
+  /// [AuthorizationCodeGrant] instead of constructing a [Client] directly.
+  ///
+  /// [httpClient] is the underlying client that this forwards requests to after
+  /// adding authorization credentials to them.
+  Client(
+      this.identifier,
+      this.secret,
+      this._credentials,
+      {http.Client httpClient})
+    : _httpClient = httpClient == null ? new http.Client() : httpClient;
+
+  /// Sends an HTTP request with OAuth2 authorization credentials attached. This
+  /// will also automatically refresh this client's [Credentials] before sending
+  /// the request if necessary.
+  Future<http.StreamedResponse> send(http.BaseRequest request) {
+    return async.chain((_) {
+      if (!credentials.isExpired) return new Future.immediate(null);
+      if (!credentials.canRefresh) throw new ExpirationException(credentials);
+      return refreshCredentials();
+    }).chain((_) {
+      request.headers['authorization'] = "Bearer ${credentials.accessToken}";
+      return _httpClient.send(request);
+    });
+    // TODO(nweiz): parse 401 errors that are caused by OAuth errors here.
+  }
+
+  /// Explicitly refreshes this client's credentials. Returns this client.
+  ///
+  /// This will throw a [StateError] if the [Credentials] can't be refreshed, an
+  /// [AuthorizationException] if refreshing the credentials fails, or a
+  /// [FormatError] if the authorization server returns invalid responses.
+  ///
+  /// You may request different scopes than the default by passing in
+  /// [newScopes]. These must be a subset of the scopes in the
+  /// [Credentials.scopes] field of [Client.credentials].
+  Future<Client> refreshCredentials([List<String> newScopes]) {
+    return async.chain((_) {
+      if (!credentials.canRefresh) {
+        var prefix = "OAuth credentials";
+        if (credentials.isExpired) prefix = "$prefix have expired and";
+        throw new StateError("$prefix can't be refreshed.");
+      }
+
+      return credentials.refresh(identifier, secret,
+          newScopes: newScopes, httpClient: _httpClient);
+    }).transform((credentials) {
+      _credentials = credentials;
+      return this;
+    });
+  }
+
+  /// Closes this client and its underlying HTTP client.
+  void close() {
+    if (_httpClient != null) _httpClient.close();
+    _httpClient = null;
+  }
+}
diff --git a/pkg/oauth2/lib/src/credentials.dart b/pkg/oauth2/lib/src/credentials.dart
new file mode 100644
index 0000000..89af777
--- /dev/null
+++ b/pkg/oauth2/lib/src/credentials.dart
@@ -0,0 +1,191 @@
+// Copyright (c) 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.
+
+library credentials;
+
+import 'dart:json';
+import 'dart:uri';
+
+import '../../../http/lib/http.dart' as http;
+import 'handle_access_token_response.dart';
+import 'utils.dart';
+
+/// Credentials that prove that a client is allowed to access a resource on the
+/// resource owner's behalf. These credentials are long-lasting and can be
+/// safely persisted across multiple runs of the program.
+///
+/// Many authorization servers will attach an expiration date to a set of
+/// credentials, along with a token that can be used to refresh the credentials
+/// once they've expired. The [Client] will automatically refresh its
+/// credentials when necessary. It's also possible to explicitly refresh them
+/// via [Client.refreshCredentials] or [Credentials.refresh].
+///
+/// Note that a given set of credentials can only be refreshed once, so be sure
+/// to save the refreshed credentials for future use.
+class Credentials {
+  /// The token that is sent to the resource server to prove the authorization
+  /// of a client.
+  final String accessToken;
+
+  /// The token that is sent to the authorization server to refresh the
+  /// credentials. This is optional.
+  final String refreshToken;
+
+  /// The URL of the authorization server endpoint that's used to refresh the
+  /// credentials. This is optional.
+  final Uri tokenEndpoint;
+
+  /// The specific permissions being requested from the authorization server.
+  /// The scope strings are specific to the authorization server and may be
+  /// found in its documentation.
+  final List<String> scopes;
+
+  /// The date at which these credentials will expire. This is likely to be a
+  /// few seconds earlier than the server's idea of the expiration date.
+  final Date expiration;
+
+  /// Whether or not these credentials have expired. Note that it's possible the
+  /// credentials will expire shortly after this is called. However, since the
+  /// client's expiration date is kept a few seconds earlier than the server's,
+  /// there should be enough leeway to rely on this.
+  bool get isExpired => expiration != null && new Date.now() > expiration;
+
+  /// Whether it's possible to refresh these credentials.
+  bool get canRefresh => refreshToken != null && tokenEndpoint != null;
+
+  /// Creates a new set of credentials.
+  ///
+  /// This class is usually not constructed directly; rather, it's accessed via
+  /// [Client.credentials] after a [Client] is created by
+  /// [AuthorizationCodeGrant]. Alternately, it may be loaded from a serialized
+  /// form via [Credentials.fromJson].
+  Credentials(
+      this.accessToken,
+      [this.refreshToken,
+       this.tokenEndpoint,
+       this.scopes,
+       this.expiration]);
+
+  /// Loads a set of credentials from a JSON-serialized form. Throws
+  /// [FormatException] if the JSON is incorrectly formatted.
+  factory Credentials.fromJson(String json) {
+    void validate(bool condition, String message) {
+      if (condition) return;
+      throw new FormatException(
+          "Failed to load credentials: $message.\n\n$json");
+    }
+
+    var parsed;
+    try {
+      parsed = JSON.parse(json);
+    } catch (e) {
+      // TODO(nweiz): narrow this catch clause once issue 6775 is fixed.
+      validate(false, 'invalid JSON');
+    }
+
+    validate(parsed is Map, 'was not a JSON map');
+    validate(parsed.containsKey('accessToken'),
+        'did not contain required field "accessToken"');
+    validate(parsed['accessToken'] is String,
+        'required field "accessToken" was not a string, was '
+        '${parsed["accessToken"]}');
+
+
+    for (var stringField in ['refreshToken', 'tokenEndpoint']) {
+      var value = parsed[stringField];
+      validate(value == null || value is String,
+          'field "$stringField" was not a string, was "$value"');
+    }
+
+    var scopes = parsed['scopes'];
+    validate(scopes == null || scopes is List,
+        'field "scopes" was not a list, was "$scopes"');
+
+    var tokenEndpoint = parsed['tokenEndpoint'];
+    if (tokenEndpoint != null) {
+      tokenEndpoint = new Uri.fromString(tokenEndpoint);
+    }
+    var expiration = parsed['expiration'];
+    if (expiration != null) {
+      validate(expiration is int,
+          'field "expiration" was not an int, was "$expiration"');
+      expiration = new Date.fromMillisecondsSinceEpoch(expiration);
+    }
+
+    return new Credentials(
+        parsed['accessToken'],
+        parsed['refreshToken'],
+        tokenEndpoint,
+        scopes,
+        expiration);
+  }
+
+  /// Serializes a set of credentials to JSON. Nothing is guaranteed about the
+  /// output except that it's valid JSON and compatible with
+  /// [Credentials.toJson].
+  String toJson() => JSON.stringify({
+    'accessToken': accessToken,
+    'refreshToken': refreshToken,
+    'tokenEndpoint': tokenEndpoint == null ? null : tokenEndpoint.toString(),
+    'scopes': scopes,
+    'expiration': expiration == null ? null : expiration.millisecondsSinceEpoch
+  });
+
+  /// Returns a new set of refreshed credentials. See [Client.identifier] and
+  /// [Client.secret] for explanations of those parameters.
+  ///
+  /// You may request different scopes than the default by passing in
+  /// [newScopes]. These must be a subset of [scopes].
+  ///
+  /// This will throw a [StateError] if these credentials can't be refreshed, an
+  /// [AuthorizationException] if refreshing the credentials fails, or a
+  /// [FormatError] if the authorization server returns invalid responses.
+  Future<Credentials> refresh(
+      String identifier,
+      String secret,
+      {List<String> newScopes,
+       http.Client httpClient}) {
+    var scopes = this.scopes;
+    if (newScopes != null) scopes = newScopes;
+    if (scopes == null) scopes = <String>[];
+    if (httpClient == null) httpClient = new http.Client();
+
+    var startTime = new Date.now();
+    return async.chain((_) {
+      if (refreshToken == null) {
+        throw new StateError("Can't refresh credentials without a refresh "
+            "token.");
+      } else if (tokenEndpoint == null) {
+        throw new StateError("Can't refresh credentials without a token "
+            "endpoint.");
+      }
+
+      var fields = {
+        "grant_type": "refresh_token",
+        "refresh_token": refreshToken,
+        // TODO(nweiz): the spec recommends that HTTP basic auth be used in
+        // preference to form parameters, but Google doesn't support that.
+        // Should it be configurable?
+        "client_id": identifier,
+        "client_secret": secret
+      };
+      if (!scopes.isEmpty) fields["scope"] = Strings.join(scopes, ' ');
+
+      return httpClient.post(tokenEndpoint, fields: fields);
+    }).transform((response) {
+      return handleAccessTokenResponse(
+          response, tokenEndpoint, startTime, scopes);
+    }).transform((credentials) {
+      // The authorization server may issue a new refresh token. If it doesn't,
+      // we should re-use the one we already have.
+      if (credentials.refreshToken != null) return credentials;
+      return new Credentials(
+          credentials.accessToken,
+          this.refreshToken,
+          credentials.tokenEndpoint,
+          credentials.scopes,
+          credentials.expiration);
+    });
+  }
+}
diff --git a/pkg/oauth2/lib/src/expiration_exception.dart b/pkg/oauth2/lib/src/expiration_exception.dart
new file mode 100644
index 0000000..8c8ad1f
--- /dev/null
+++ b/pkg/oauth2/lib/src/expiration_exception.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 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.
+
+library expiration_exception;
+
+import 'dart:io';
+
+import 'credentials.dart';
+
+/// An exception raised when attempting to use expired OAuth2 credentials.
+class ExpirationException implements Exception {
+  /// The expired credentials.
+  final Credentials credentials;
+
+  /// Creates an ExpirationException.
+  ExpirationException(this.credentials);
+
+  /// Provides a string description of the ExpirationException.
+  String toString() =>
+    "OAuth2 credentials have expired and can't be refreshed.";
+}
diff --git a/pkg/oauth2/lib/src/handle_access_token_response.dart b/pkg/oauth2/lib/src/handle_access_token_response.dart
new file mode 100644
index 0000000..cb08d8f
--- /dev/null
+++ b/pkg/oauth2/lib/src/handle_access_token_response.dart
@@ -0,0 +1,145 @@
+// Copyright (c) 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.
+
+library handle_access_token_response;
+
+import 'dart:io';
+import 'dart:json';
+import 'dart:uri';
+
+import '../../../http/lib/http.dart' as http;
+
+import 'credentials.dart';
+import 'authorization_exception.dart';
+
+/// The amount of time, in seconds, to add as a "grace period" for credential
+/// expiration. This allows credential expiration checks to remain valid for a
+/// reasonable amount of time.
+const _EXPIRATION_GRACE = 10;
+
+/// Handles a response from the authorization server that contains an access
+/// token. This response format is common across several different components of
+/// the OAuth2 flow.
+Credentials handleAccessTokenResponse(
+    http.Response response,
+    Uri tokenEndpoint,
+    Date startTime,
+    List<String> scopes) {
+  if (response.statusCode != 200) _handleErrorResponse(response, tokenEndpoint);
+
+  void validate(bool condition, String message) =>
+    _validate(response, tokenEndpoint, condition, message);
+
+  var contentType = response.headers['content-type'];
+  if (contentType != null) {
+    contentType = new ContentType.fromString(contentType);
+  }
+  validate(contentType != null && contentType.value == "application/json",
+      'content-type was "$contentType", expected "application/json"');
+
+  var parameters;
+  try {
+    parameters = JSON.parse(response.body);
+  } catch (e) {
+    // TODO(nweiz): narrow this catch clause once issue 6775 is fixed.
+    validate(false, 'invalid JSON');
+  }
+
+  for (var requiredParameter in ['access_token', 'token_type']) {
+    validate(parameters.containsKey(requiredParameter),
+        'did not contain required parameter "$requiredParameter"');
+    validate(parameters[requiredParameter] is String,
+        'required parameter "$requiredParameter" was not a string, was '
+        '"${parameters[requiredParameter]}"');
+  }
+
+  // TODO(nweiz): support the "mac" token type
+  // (http://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-01)
+  validate(parameters['token_type'].toLowerCase() == 'bearer',
+      '"$tokenEndpoint": unknown token type "${parameters['token_type']}"');
+
+  var expiresIn = parameters['expires_in'];
+  validate(expiresIn == null || expiresIn is int,
+      'parameter "expires_in" was not an int, was "$expiresIn"');
+
+  for (var name in ['refresh_token', 'scope']) {
+    var value = parameters[name];
+    validate(value == null || value is String,
+        'parameter "$name" was not a string, was "$value"');
+  }
+
+  var scope = parameters['scope'];
+  if (scope != null) scopes = scope.split(" ");
+
+  var expiration = expiresIn == null ? null :
+      startTime.add(new Duration(seconds: expiresIn - _EXPIRATION_GRACE));
+
+  return new Credentials(
+      parameters['access_token'],
+      parameters['refresh_token'],
+      tokenEndpoint,
+      scopes,
+      expiration);
+}
+
+/// Throws the appropriate exception for an error response from the
+/// authorization server.
+void _handleErrorResponse(http.Response response, Uri tokenEndpoint) {
+  void validate(bool condition, String message) =>
+    _validate(response, tokenEndpoint, condition, message);
+
+  // OAuth2 mandates a 400 or 401 response code for access token error
+  // responses. If it's not a 400 reponse, the server is either broken or
+  // off-spec.
+  if (response.statusCode != 400 && response.statusCode != 401) {
+    var reason = '';
+    if (response.reasonPhrase != null && !response.reasonPhrase.isEmpty) {
+      ' ${response.reasonPhrase}';
+    }
+    throw new FormatException('OAuth request for "$tokenEndpoint" failed '
+        'with status ${response.statusCode}$reason.\n\n${response.body}');
+  }
+
+  var contentType = response.headers['content-type'];
+  if (contentType != null) {
+    contentType = new ContentType.fromString(contentType);
+  }
+  validate(contentType != null && contentType.value == "application/json",
+      'content-type was "$contentType", expected "application/json"');
+
+  var parameters;
+  try {
+    parameters = JSON.parse(response.body);
+  } catch (e) {
+    // TODO(nweiz): narrow this catch clause once issue 6775 is fixed.
+    validate(false, 'invalid JSON');
+  }
+
+  validate(parameters.containsKey('error'),
+      'did not contain required parameter "error"');
+  validate(parameters["error"] is String,
+      'required parameter "error" was not a string, was '
+      '"${parameters["error"]}"');
+
+  for (var name in ['error_description', 'error_uri']) {
+    var value = parameters[name];
+    validate(value == null || value is String,
+        'parameter "$name" was not a string, was "$value"');
+  }
+
+  var description = parameters['error_description'];
+  var uriString = parameters['error_uri'];
+  var uri = uriString == null ? null : new Uri.fromString(uriString);
+  throw new AuthorizationException(parameters['error'], description, uri);
+}
+
+void _validate(
+    http.Response response,
+    Uri tokenEndpoint,
+    bool condition,
+    String message) {
+  if (condition) return;
+  throw new FormatException('Invalid OAuth response for "$tokenEndpoint": '
+      '$message.\n\n${response.body}');
+}
diff --git a/pkg/oauth2/lib/src/utils.dart b/pkg/oauth2/lib/src/utils.dart
new file mode 100644
index 0000000..583a5bc
--- /dev/null
+++ b/pkg/oauth2/lib/src/utils.dart
@@ -0,0 +1,73 @@
+// Copyright (c) 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.
+
+library utils;
+
+import 'dart:uri';
+import 'dart:isolate';
+import 'dart:crypto';
+
+/// Adds additional query parameters to [url], overwriting the original
+/// parameters if a name conflict occurs.
+Uri addQueryParameters(Uri url, Map<String, String> parameters) {
+  var queryMap = queryToMap(url.query);
+  mapAddAll(queryMap, parameters);
+  return url.resolve("?${mapToQuery(queryMap)}");
+}
+
+/// Convert a URL query string (or `application/x-www-form-urlencoded` body)
+/// into a [Map] from parameter names to values.
+Map<String, String> queryToMap(String queryList) {
+  var map = <String>{};
+  for (var pair in queryList.split("&")) {
+    var split = split1(pair, "=");
+    if (split.isEmpty) continue;
+    var key = urlDecode(split[0]);
+    var value = split.length > 1 ? urlDecode(split[1]) : "";
+    map[key] = value;
+  }
+  return map;
+}
+
+/// Convert a [Map] from parameter names to values to a URL query string.
+String mapToQuery(Map<String, String> map) {
+  var pairs = <List<String>>[];
+  map.forEach((key, value) {
+    key = encodeUriComponent(key);
+    value = (value == null || value.isEmpty) ? null : encodeUriComponent(value);
+    pairs.add([key, value]);
+  });
+  return Strings.join(pairs.map((pair) {
+    if (pair[1] == null) return pair[0];
+    return "${pair[0]}=${pair[1]}";
+  }), "&");
+}
+
+/// Add all key/value pairs from [source] to [destination], overwriting any
+/// pre-existing values.
+void mapAddAll(Map destination, Map source) =>
+  source.forEach((key, value) => destination[key] = value);
+
+/// Decode a URL-encoded string. Unlike [decodeUriComponent], this includes
+/// replacing `+` with ` `.
+String urlDecode(String encoded) =>
+  decodeUriComponent(encoded.replaceAll("+", " "));
+
+/// Like [String.split], but only splits on the first occurrence of the pattern.
+/// This will always return a list of two elements or fewer.
+List<String> split1(String toSplit, String pattern) {
+  if (toSplit.isEmpty) return <String>[];
+
+  var index = toSplit.indexOf(pattern);
+  if (index == -1) return [toSplit];
+  return [toSplit.substring(0, index),
+      toSplit.substring(index + pattern.length)];
+}
+
+/// Returns a [Future] that asynchronously completes to `null`.
+Future get async {
+  var completer = new Completer();
+  new Timer(0, (_) => completer.complete(null));
+  return completer.future;
+}
diff --git a/pkg/oauth2/test/authorization_code_grant_test.dart b/pkg/oauth2/test/authorization_code_grant_test.dart
new file mode 100644
index 0000000..c4ccc21
--- /dev/null
+++ b/pkg/oauth2/test/authorization_code_grant_test.dart
@@ -0,0 +1,196 @@
+// Copyright (c) 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.
+
+library authorization_code_grant_test;
+
+import 'dart:io';
+import 'dart:json';
+import 'dart:uri';
+
+import '../../unittest/lib/unittest.dart';
+import '../../http/lib/http.dart' as http;
+import '../../http/lib/testing.dart';
+import '../lib/oauth2.dart' as oauth2;
+import 'utils.dart';
+
+final redirectUrl = new Uri.fromString('http://example.com/redirect');
+
+ExpectClient client;
+
+oauth2.AuthorizationCodeGrant grant;
+
+void createGrant() {
+  client = new ExpectClient();
+  grant = new oauth2.AuthorizationCodeGrant(
+      'identifier',
+      'secret',
+      new Uri.fromString('https://example.com/authorization'),
+      new Uri.fromString('https://example.com/token'),
+      httpClient: client);
+}
+
+void main() {
+  group('.getAuthorizationUrl', () {
+    setUp(createGrant);
+
+    test('builds the correct URL', () {
+      expect(grant.getAuthorizationUrl(redirectUrl).toString(),
+          equals('https://example.com/authorization'
+              '?response_type=code'
+              '&client_id=identifier'
+              '&redirect_uri=http%3A%2F%2Fexample.com%2Fredirect'));
+    });
+
+    test('builds the correct URL with scopes', () {
+      var authorizationUrl = grant.getAuthorizationUrl(
+          redirectUrl, scopes: ['scope', 'other/scope']);
+      expect(authorizationUrl.toString(),
+          equals('https://example.com/authorization'
+              '?response_type=code'
+              '&client_id=identifier'
+              '&redirect_uri=http%3A%2F%2Fexample.com%2Fredirect'
+              '&scope=scope%20other%2Fscope'));
+    });
+
+    test('builds the correct URL with state', () {
+      var authorizationUrl = grant.getAuthorizationUrl(
+          redirectUrl, state: 'state');
+      expect(authorizationUrl.toString(),
+          equals('https://example.com/authorization'
+              '?response_type=code'
+              '&client_id=identifier'
+              '&redirect_uri=http%3A%2F%2Fexample.com%2Fredirect'
+              '&state=state'));
+    });
+
+    test('merges with existing query parameters', () {
+      grant = new oauth2.AuthorizationCodeGrant(
+          'identifier',
+          'secret',
+          new Uri.fromString('https://example.com/authorization?query=value'),
+          new Uri.fromString('https://example.com/token'),
+          httpClient: client);
+
+      var authorizationUrl = grant.getAuthorizationUrl(redirectUrl);
+      expect(authorizationUrl.toString(),
+          equals('https://example.com/authorization'
+              '?query=value'
+              '&response_type=code'
+              '&client_id=identifier'
+              '&redirect_uri=http%3A%2F%2Fexample.com%2Fredirect'));
+    });
+
+    test("can't be called twice", () {
+      grant.getAuthorizationUrl(redirectUrl);
+      expect(() => grant.getAuthorizationUrl(redirectUrl), throwsStateError);
+    });
+  });
+
+  group('.handleAuthorizationResponse', () {
+    setUp(createGrant);
+
+    test("can't be called before .getAuthorizationUrl", () {
+      expect(grant.handleAuthorizationResponse({}), throwsStateError);
+    });
+
+    test("can't be called twice", () {
+      grant.getAuthorizationUrl(redirectUrl);
+      grant.handleAuthorizationResponse({'code': 'auth code'});
+      expect(grant.handleAuthorizationResponse({'code': 'auth code'}),
+          throwsStateError);
+    });
+
+    test('must have a state parameter if the authorization URL did', () {
+      grant.getAuthorizationUrl(redirectUrl, state: 'state');
+      expect(grant.handleAuthorizationResponse({'code': 'auth code'}),
+          throwsFormatException);
+    });
+
+    test('must have the same state parameter the authorization URL did', () {
+      grant.getAuthorizationUrl(redirectUrl, state: 'state');
+      expect(grant.handleAuthorizationResponse({
+        'code': 'auth code',
+        'state': 'other state'
+      }), throwsFormatException);
+    });
+
+    test('must have a code parameter', () {
+      grant.getAuthorizationUrl(redirectUrl);
+      expect(grant.handleAuthorizationResponse({}), throwsFormatException);
+    });
+
+    test('with an error parameter throws an AuthorizationException', () {
+      grant.getAuthorizationUrl(redirectUrl);
+      expect(grant.handleAuthorizationResponse({'error': 'invalid_request'}),
+          throwsAuthorizationException);
+    });
+
+    test('sends an authorization code request', () {
+      grant.getAuthorizationUrl(redirectUrl);
+      client.expectRequest((request) {
+        expect(request.method, equals('POST'));
+        expect(request.url.toString(), equals(grant.tokenEndpoint.toString()));
+        expect(request.bodyFields, equals({
+          'grant_type': 'authorization_code',
+          'code': 'auth code',
+          'redirect_uri': redirectUrl.toString(),
+          'client_id': 'identifier',
+          'client_secret': 'secret'
+        }));
+
+        return new Future.immediate(new http.Response(JSON.stringify({
+          'access_token': 'access token',
+          'token_type': 'bearer',
+        }), 200, headers: {'content-type': 'application/json'}));
+      });
+
+      expect(grant.handleAuthorizationResponse({'code': 'auth code'}),
+          completion(predicate((client) {
+            expect(client.credentials.accessToken, equals('access token'));
+            return true;
+          })));
+    });
+  });
+
+  group('.handleAuthorizationCode', () {
+    setUp(createGrant);
+
+    test("can't be called before .getAuthorizationUrl", () {
+      expect(grant.handleAuthorizationCode('auth code'), throwsStateError);
+    });
+
+    test("can't be called twice", () {
+      grant.getAuthorizationUrl(redirectUrl);
+      grant.handleAuthorizationCode('auth code');
+      expect(grant.handleAuthorizationCode('auth code'),
+          throwsStateError);
+    });
+
+    test('sends an authorization code request', () {
+      grant.getAuthorizationUrl(redirectUrl);
+      client.expectRequest((request) {
+        expect(request.method, equals('POST'));
+        expect(request.url.toString(), equals(grant.tokenEndpoint.toString()));
+        expect(request.bodyFields, equals({
+          'grant_type': 'authorization_code',
+          'code': 'auth code',
+          'redirect_uri': redirectUrl.toString(),
+          'client_id': 'identifier',
+          'client_secret': 'secret'
+        }));
+
+        return new Future.immediate(new http.Response(JSON.stringify({
+          'access_token': 'access token',
+          'token_type': 'bearer',
+        }), 200, headers: {'content-type': 'application/json'}));
+      });
+
+      expect(grant.handleAuthorizationCode('auth code'),
+          completion(predicate((client) {
+            expect(client.credentials.accessToken, equals('access token'));
+            return true;
+          })));
+    });
+  });
+}
diff --git a/pkg/oauth2/test/client_test.dart b/pkg/oauth2/test/client_test.dart
new file mode 100644
index 0000000..94b7920
--- /dev/null
+++ b/pkg/oauth2/test/client_test.dart
@@ -0,0 +1,120 @@
+// Copyright (c) 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.
+
+library client_test;
+
+import 'dart:io';
+import 'dart:json';
+import 'dart:uri';
+
+import '../../unittest/lib/unittest.dart';
+import '../../http/lib/http.dart' as http;
+import '../lib/oauth2.dart' as oauth2;
+import 'utils.dart';
+
+final Uri requestUri = new Uri.fromString("http://example.com/resource");
+
+final Uri tokenEndpoint = new Uri.fromString('http://example.com/token');
+
+ExpectClient httpClient;
+
+void createHttpClient() {
+  httpClient = new ExpectClient();
+}
+
+void main() {
+  group('with expired credentials', () {
+    setUp(createHttpClient);
+
+    test("that can't be refreshed throws an ExpirationException on send", () {
+      var expiration = new Date.now().subtract(new Duration(hours: 1));
+      var credentials = new oauth2.Credentials(
+          'access token', null, null, [], expiration);
+      var client = new oauth2.Client('identifier', 'secret', credentials,
+          httpClient: httpClient);
+
+      expect(client.get(requestUri), throwsExpirationException);
+    });
+
+    test("that can be refreshed refreshes the credentials and sends the "
+        "request", () {
+      var expiration = new Date.now().subtract(new Duration(hours: 1));
+      var credentials = new oauth2.Credentials(
+          'access token', 'refresh token', tokenEndpoint, [], expiration);
+      var client = new oauth2.Client('identifier', 'secret', credentials,
+          httpClient: httpClient);
+
+      httpClient.expectRequest((request) {
+        expect(request.method, equals('POST'));
+        expect(request.url.toString(), equals(tokenEndpoint.toString()));
+        return new Future.immediate(new http.Response(JSON.stringify({
+          'access_token': 'new access token',
+          'token_type': 'bearer'
+        }), 200, headers: {'content-type': 'application/json'}));
+      });
+
+      httpClient.expectRequest((request) {
+        expect(request.method, equals('GET'));
+        expect(request.url.toString(), equals(requestUri.toString()));
+        expect(request.headers['authorization'],
+            equals('Bearer new access token'));
+
+        return new Future.immediate(new http.Response('good job', 200));
+      });
+
+      expect(client.read(requestUri).transform((_) {
+        expect(client.credentials.accessToken, equals('new access token'));
+      }), completes);
+    });
+  });
+
+  group('with valid credentials', () {
+    setUp(createHttpClient);
+
+    test("sends a request with bearer authorization", () {
+      var credentials = new oauth2.Credentials('access token');
+      var client = new oauth2.Client('identifier', 'secret', credentials,
+          httpClient: httpClient);
+
+      httpClient.expectRequest((request) {
+        expect(request.method, equals('GET'));
+        expect(request.url.toString(), equals(requestUri.toString()));
+        expect(request.headers['authorization'],
+            equals('Bearer access token'));
+
+        return new Future.immediate(new http.Response('good job', 200));
+      });
+
+      expect(client.read(requestUri), completion(equals('good job')));
+    });
+
+    test("can manually refresh the credentials", () {
+      var credentials = new oauth2.Credentials(
+          'access token', 'refresh token', tokenEndpoint);
+      var client = new oauth2.Client('identifier', 'secret', credentials,
+          httpClient: httpClient);
+
+      httpClient.expectRequest((request) {
+        expect(request.method, equals('POST'));
+        expect(request.url.toString(), equals(tokenEndpoint.toString()));
+        return new Future.immediate(new http.Response(JSON.stringify({
+          'access_token': 'new access token',
+          'token_type': 'bearer'
+        }), 200, headers: {'content-type': 'application/json'}));
+      });
+
+      expect(client.refreshCredentials().transform((_) {
+        expect(client.credentials.accessToken, equals('new access token'));
+      }), completes);
+    });
+
+    test("without a refresh token can't manually refresh the credentials", () {
+      var credentials = new oauth2.Credentials('access token');
+      var client = new oauth2.Client('identifier', 'secret', credentials,
+          httpClient: httpClient);
+
+      expect(client.refreshCredentials(), throwsStateError);
+    });
+  });
+}
diff --git a/pkg/oauth2/test/credentials_test.dart b/pkg/oauth2/test/credentials_test.dart
new file mode 100644
index 0000000..5faf2d0
--- /dev/null
+++ b/pkg/oauth2/test/credentials_test.dart
@@ -0,0 +1,174 @@
+// Copyright (c) 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.
+
+library credentials_test;
+
+import 'dart:io';
+import 'dart:json';
+import 'dart:uri';
+
+import '../../unittest/lib/unittest.dart';
+import '../../http/lib/http.dart' as http;
+import '../lib/oauth2.dart' as oauth2;
+import 'utils.dart';
+
+final Uri tokenEndpoint = new Uri.fromString('http://example.com/token');
+
+ExpectClient httpClient;
+
+void main() {
+  setUp(() => httpClient = new ExpectClient());
+
+  test('is not expired if no expiration exists', () {
+    var credentials = new oauth2.Credentials('access token');
+    expect(credentials.isExpired, isFalse);
+  });
+
+  test('is not expired if the expiration is in the future', () {
+    var expiration = new Date.now().add(new Duration(hours: 1));
+    var credentials = new oauth2.Credentials(
+        'access token', null, null, null, expiration);
+    expect(credentials.isExpired, isFalse);
+  });
+
+  test('is expired if the expiration is in the past', () {
+    var expiration = new Date.now().subtract(new Duration(hours: 1));
+    var credentials = new oauth2.Credentials(
+        'access token', null, null, null, expiration);
+    expect(credentials.isExpired, isTrue);
+  });
+
+  test("can't refresh without a refresh token", () {
+    var credentials = new oauth2.Credentials(
+        'access token', null, tokenEndpoint);
+    expect(credentials.canRefresh, false);
+    expect(credentials.refresh('identifier', 'secret', httpClient: httpClient),
+        throwsStateError);
+  });
+
+  test("can't refresh without a token endpoint", () {
+    var credentials = new oauth2.Credentials('access token', 'refresh token');
+    expect(credentials.canRefresh, false);
+    expect(credentials.refresh('identifier', 'secret', httpClient: httpClient),
+        throwsStateError);
+  });
+
+  test("can refresh with a refresh token and a token endpoint", () {
+    var credentials = new oauth2.Credentials(
+        'access token', 'refresh token', tokenEndpoint, ['scope1', 'scope2']);
+    expect(credentials.canRefresh, true);
+
+    httpClient.expectRequest((request) {
+      expect(request.method, equals('POST'));
+      expect(request.url.toString(), equals(tokenEndpoint.toString()));
+      expect(request.bodyFields, equals({
+        "grant_type": "refresh_token",
+        "refresh_token": "refresh token",
+        "scope": "scope1 scope2",
+        "client_id": "identifier",
+        "client_secret": "secret"
+      }));
+
+      return new Future.immediate(new http.Response(JSON.stringify({
+        'access_token': 'new access token',
+        'token_type': 'bearer',
+        'refresh_token': 'new refresh token'
+      }), 200, headers: {'content-type': 'application/json'}));
+    });
+
+    
+    expect(credentials.refresh('identifier', 'secret', httpClient: httpClient)
+        .transform((credentials) {
+      expect(credentials.accessToken, equals('new access token'));
+      expect(credentials.refreshToken, equals('new refresh token'));
+    }), completes);
+  });
+
+  test("uses the old refresh token if a new one isn't provided", () {
+    var credentials = new oauth2.Credentials(
+        'access token', 'refresh token', tokenEndpoint);
+    expect(credentials.canRefresh, true);
+
+    httpClient.expectRequest((request) {
+      expect(request.method, equals('POST'));
+      expect(request.url.toString(), equals(tokenEndpoint.toString()));
+      expect(request.bodyFields, equals({
+        "grant_type": "refresh_token",
+        "refresh_token": "refresh token",
+        "client_id": "identifier",
+        "client_secret": "secret"
+      }));
+
+      return new Future.immediate(new http.Response(JSON.stringify({
+        'access_token': 'new access token',
+        'token_type': 'bearer'
+      }), 200, headers: {'content-type': 'application/json'}));
+    });
+
+    
+    expect(credentials.refresh('identifier', 'secret', httpClient: httpClient)
+        .transform((credentials) {
+      expect(credentials.accessToken, equals('new access token'));
+      expect(credentials.refreshToken, equals('refresh token'));
+    }), completes);
+  });
+
+  group("fromJson", () {
+    oauth2.Credentials fromMap(Map map) =>
+      new oauth2.Credentials.fromJson(JSON.stringify(map));
+
+    test("should load the same credentials from toJson", () {
+      var expiration = new Date.now().subtract(new Duration(hours: 1));
+      var credentials = new oauth2.Credentials(
+          'access token', 'refresh token', tokenEndpoint, ['scope1', 'scope2'],
+          expiration);
+      var reloaded = new oauth2.Credentials.fromJson(credentials.toJson());
+
+      expect(reloaded.accessToken, equals(credentials.accessToken));
+      expect(reloaded.refreshToken, equals(credentials.refreshToken));
+      expect(reloaded.tokenEndpoint.toString(),
+          equals(credentials.tokenEndpoint.toString()));
+      expect(reloaded.scopes, equals(credentials.scopes));
+      expect(reloaded.expiration, equals(credentials.expiration));
+    });
+
+    test("should throw a FormatException for invalid JSON", () {
+      expect(() => new oauth2.Credentials.fromJson("foo bar"),
+          throwsFormatException);
+    });
+
+    test("should throw a FormatException for JSON that's not a map", () {
+      expect(() => new oauth2.Credentials.fromJson("null"),
+          throwsFormatException);
+    });
+
+    test("should throw a FormatException if there is no accessToken", () {
+      expect(() => fromMap({}), throwsFormatException);
+    });
+
+    test("should throw a FormatException if accessToken is not a string", () {
+      expect(() => fromMap({"accessToken": 12}), throwsFormatException);
+    });
+
+    test("should throw a FormatException if refreshToken is not a string", () {
+      expect(() => fromMap({"accessToken": "foo", "refreshToken": 12}),
+          throwsFormatException);
+    });
+
+    test("should throw a FormatException if tokenEndpoint is not a string", () {
+      expect(() => fromMap({"accessToken": "foo", "tokenEndpoint": 12}),
+          throwsFormatException);
+    });
+
+    test("should throw a FormatException if scopes is not a list", () {
+      expect(() => fromMap({"accessToken": "foo", "scopes": 12}),
+          throwsFormatException);
+    });
+
+    test("should throw a FormatException if expiration is not an int", () {
+      expect(() => fromMap({"accessToken": "foo", "expiration": "12"}),
+          throwsFormatException);
+    });
+  });
+}
diff --git a/pkg/oauth2/test/handle_access_token_response_test.dart b/pkg/oauth2/test/handle_access_token_response_test.dart
new file mode 100644
index 0000000..4757dc1
--- /dev/null
+++ b/pkg/oauth2/test/handle_access_token_response_test.dart
@@ -0,0 +1,191 @@
+// Copyright (c) 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.
+
+library handle_access_token_response_test;
+
+import 'dart:io';
+import 'dart:json';
+import 'dart:uri';
+
+import '../../unittest/lib/unittest.dart';
+import '../../http/lib/http.dart' as http;
+import '../lib/oauth2.dart' as oauth2;
+import '../lib/src/handle_access_token_response.dart';
+import 'utils.dart';
+
+final Uri tokenEndpoint = new Uri.fromString("https://example.com/token");
+
+final Date startTime = new Date.now();
+
+oauth2.Credentials handle(http.Response response) =>
+  handleAccessTokenResponse(response, tokenEndpoint, startTime, ["scope"]);
+
+void main() {
+  group('an error response', () {
+    oauth2.Credentials handleError(
+        {String body: '{"error": "invalid_request"}',
+         int statusCode: 400,
+         Map<String, String> headers:
+             const {"content-type": "application/json"}}) =>
+      handle(new http.Response(body, statusCode, headers: headers));
+
+    test('causes an AuthorizationException', () {
+      expect(() => handleError(), throwsAuthorizationException);
+    });
+
+    test('with a 401 code causes an AuthorizationException', () {
+      expect(() => handleError(statusCode: 401), throwsAuthorizationException);
+    });
+
+    test('with an unexpected code causes a FormatException', () {
+      expect(() => handleError(statusCode: 500),
+          throwsFormatException);
+    });
+
+    test('with no content-type causes a FormatException', () {
+      expect(() => handleError(headers: {}), throwsFormatException);
+    });
+
+    test('with a non-JSON content-type causes a FormatException', () {
+      expect(() => handleError(headers: {
+        'content-type': 'text/plain'
+      }), throwsFormatException);
+    });
+
+    test('with a JSON content-type and charset causes an '
+        'AuthorizationException', () {
+      expect(() => handleError(headers: {
+        'content-type': 'application/json; charset=UTF-8'
+      }), throwsAuthorizationException);
+    });
+
+    test('with invalid JSON causes a FormatException', () {
+      expect(() => handleError(body: 'not json'),
+          throwsFormatException);
+    });
+
+    test('with a non-string error causes a FormatException', () {
+      expect(() => handleError(body: '{"error": 12}'),
+          throwsFormatException);
+    });
+
+    test('with a non-string error_description causes a FormatException', () {
+      expect(() => handleError(body: JSON.stringify({
+        "error": "invalid_request",
+        "error_description": 12
+      })), throwsFormatException);
+    });
+
+    test('with a non-string error_uri causes a FormatException', () {
+      expect(() => handleError(body: JSON.stringify({
+        "error": "invalid_request",
+        "error_uri": 12
+      })), throwsFormatException);
+    });
+
+    test('with a string error_description causes a AuthorizationException', () {
+      expect(() => handleError(body: JSON.stringify({
+        "error": "invalid_request",
+        "error_description": "description"
+      })), throwsAuthorizationException);
+    });
+
+    test('with a string error_uri causes a AuthorizationException', () {
+      expect(() => handleError(body: JSON.stringify({
+        "error": "invalid_request",
+        "error_uri": "http://example.com/error"
+      })), throwsAuthorizationException);
+    });
+  });
+
+  group('a success response', () {
+    oauth2.Credentials handleSuccess(
+        {String contentType: "application/json",
+         accessToken: 'access token',
+         tokenType: 'bearer',
+         expiresIn,
+         refreshToken,
+         scope}) {
+      return handle(new http.Response(JSON.stringify({
+        'access_token': accessToken,
+        'token_type': tokenType,
+        'expires_in': expiresIn,
+        'refresh_token': refreshToken,
+        'scope': scope
+      }), 200, headers: {'content-type': contentType}));
+    }
+
+    test('returns the correct credentials', () {
+      var credentials = handleSuccess();
+      expect(credentials.accessToken, equals('access token'));
+      expect(credentials.tokenEndpoint.toString(),
+          equals(tokenEndpoint.toString()));
+    });
+
+    test('with no content-type causes a FormatException', () {
+      expect(() => handleSuccess(contentType: null), throwsFormatException);
+    });
+
+    test('with a non-JSON content-type causes a FormatException', () {
+      expect(() => handleSuccess(contentType: 'text/plain'),
+          throwsFormatException);
+    });
+
+    test('with a JSON content-type and charset returns the correct '
+        'credentials', () {
+      var credentials = handleSuccess(
+          contentType: 'application/json; charset=UTF-8');
+      expect(credentials.accessToken, equals('access token'));
+    });
+
+    test('with a null access token throws a FormatException', () {
+      expect(() => handleSuccess(accessToken: null), throwsFormatException);
+    });
+
+    test('with a non-string access token throws a FormatException', () {
+      expect(() => handleSuccess(accessToken: 12), throwsFormatException);
+    });
+
+    test('with a null token type throws a FormatException', () {
+      expect(() => handleSuccess(tokenType: null), throwsFormatException);
+    });
+
+    test('with a non-string token type throws a FormatException', () {
+      expect(() => handleSuccess(tokenType: 12), throwsFormatException);
+    });
+
+    test('with a non-"bearer" token type throws a FormatException', () {
+      expect(() => handleSuccess(tokenType: "mac"), throwsFormatException);
+    });
+
+    test('with a non-int expires-in throws a FormatException', () {
+      expect(() => handleSuccess(expiresIn: "whenever"), throwsFormatException);
+    });
+
+    test('with expires-in sets the expiration to ten seconds earlier than the '
+        'server says', () {
+      var credentials = handleSuccess(expiresIn: 100);
+      expect(credentials.expiration.millisecondsSinceEpoch,
+          startTime.millisecondsSinceEpoch + 90 * 1000);
+    });
+
+    test('with a non-string refresh token throws a FormatException', () {
+      expect(() => handleSuccess(refreshToken: 12), throwsFormatException);
+    });
+
+    test('with a refresh token sets the refresh token', () {
+      var credentials = handleSuccess(refreshToken: "refresh me");
+      expect(credentials.refreshToken, equals("refresh me"));
+    });
+
+    test('with a non-string scope throws a FormatException', () {
+      expect(() => handleSuccess(scope: 12), throwsFormatException);
+    });
+
+    test('with a scope sets the scopes', () {
+      var credentials = handleSuccess(scope: "scope1 scope2");
+      expect(credentials.scopes, equals(["scope1", "scope2"]));
+    });
+  });
+}
diff --git a/pkg/oauth2/test/utils.dart b/pkg/oauth2/test/utils.dart
new file mode 100644
index 0000000..631ea95
--- /dev/null
+++ b/pkg/oauth2/test/utils.dart
@@ -0,0 +1,82 @@
+// Copyright (c) 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.
+
+library utils;
+
+import '../../unittest/lib/unittest.dart';
+import '../../http/lib/http.dart' as http;
+import '../../http/lib/testing.dart';
+import '../lib/oauth2.dart' as oauth2;
+
+class ExpectClient extends MockClient {
+  final Queue<MockClientHandler> _handlers;
+
+  ExpectClient._(MockClientHandler fn)
+    : _handlers = new Queue<MockClientHandler>(),
+      super(fn);
+
+  factory ExpectClient() {
+    var client;
+    client = new ExpectClient._((request) =>
+        client._handleRequest(request));
+    return client;
+  }
+
+  void expectRequest(MockClientHandler fn) {
+    var completer = new Completer();
+    expect(completer.future, completes);
+
+    _handlers.add((request) {
+      completer.complete(null);
+      return fn(request);
+    });
+  }
+
+  Future<http.Response> _handleRequest(http.Request request) {
+    if (_handlers.isEmpty) {
+      return new Future.immediate(new http.Response('not found', 404));
+    } else {
+      return _handlers.removeFirst()(request);
+    }
+  }
+}
+
+// TODO(nweiz): remove this once it's built in to unittest
+/// A matcher for StateErrors.
+const isStateError = const _StateError();
+
+/// A matcher for functions that throw StateError.
+const Matcher throwsStateError =
+    const Throws(isStateError);
+
+class _StateError extends TypeMatcher {
+  const _StateError() : super("StateError");
+  bool matches(item, MatchState matchState) => item is StateError;
+}
+
+/// A matcher for AuthorizationExceptions.
+const isAuthorizationException = const _AuthorizationException();
+
+/// A matcher for functions that throw AuthorizationException.
+const Matcher throwsAuthorizationException =
+    const Throws(isAuthorizationException);
+
+class _AuthorizationException extends TypeMatcher {
+  const _AuthorizationException() : super("AuthorizationException");
+  bool matches(item, MatchState matchState) =>
+    item is oauth2.AuthorizationException;
+}
+
+/// A matcher for ExpirationExceptions.
+const isExpirationException = const _ExpirationException();
+
+/// A matcher for functions that throw ExpirationException.
+const Matcher throwsExpirationException =
+    const Throws(isExpirationException);
+
+class _ExpirationException extends TypeMatcher {
+  const _ExpirationException() : super("ExpirationException");
+  bool matches(item, MatchState matchState) =>
+    item is oauth2.ExpirationException;
+}
diff --git a/pkg/pkg.gyp b/pkg/pkg.gyp
new file mode 100644
index 0000000..e5c2c35
--- /dev/null
+++ b/pkg/pkg.gyp
@@ -0,0 +1,45 @@
+# Copyright (c) 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.
+
+{
+  'targets': [
+    {
+      'target_name': 'pkg_packages',
+      'type': 'none',
+      'actions': [
+        {
+          'action_name': 'make_pkg_packages',
+          'inputs': [
+            '../tools/make_links.py',
+            'args/lib',
+            'fixnum/lib',
+            'htmlescape/lib',
+            'http/lib',
+            'intl/lib',
+            'logging/lib',
+            'meta/lib',
+            'unittest/lib',
+            'webdriver/lib',
+          ],
+          'outputs': [
+            '<(PRODUCT_DIR)/packages/args',
+            '<(PRODUCT_DIR)/packages/fixnum',
+            '<(PRODUCT_DIR)/packages/htmlescape',
+            '<(PRODUCT_DIR)/packages/http',
+            '<(PRODUCT_DIR)/packages/intl',
+            '<(PRODUCT_DIR)/packages/logging',
+            '<(PRODUCT_DIR)/packages/meta',
+            '<(PRODUCT_DIR)/packages/unittest',
+            '<(PRODUCT_DIR)/packages/webdriver',
+          ],
+          'action': [
+            'python', '../tools/make_links.py',
+            '<(PRODUCT_DIR)/packages',
+            '<@(_inputs)',
+          ],
+        },
+      ],
+    }
+  ],
+}
diff --git a/pkg/pkg.status b/pkg/pkg.status
index d7aadb7..32d4068 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -9,20 +9,18 @@
 # arithmetic natively, i.e., the VM.
 fixnum/test/int_64_vm_test: Skip
 
-# Skip the cURL tests until we have bundled binaries to run them on all
-# platforms.
-http/test/curl_client_test: Skip
-
 [$compiler == dart2dart]
 *: Skip
 
 # Don't compiile tests that use dart:io to JS
 [ $compiler == dart2js || $compiler == dart2dart || $compiler == dartc ]
 http/test/*: Skip
+oauth2/test/*: Skip
 
 # Skip tests that use local file access if we're running in any browser
 [ $runtime == opera || $runtime == ff || $runtime == ie9 || $runtime == dartium || $runtime == chrome || $runtime == safari || $runtime == drt ]
 http/test/*: Skip
+oauth2/test/*: Skip
 intl/test/date_time_format_file_even_test: Skip
 intl/test/date_time_format_file_odd_test: Skip
 intl/test/find_default_locale_standalone_test: Skip
@@ -50,13 +48,11 @@
 [ $compiler == dartc ]
 unittest/test/mock_regexp_negative_test: Fail
 unittest/test/mock_stepwise_negative_test: Fail
-
-[ $system == windows ]
-http/test/request_test: Pass, Timeout # Issue 6594
+args/test/args_test: Fail # http://dartbug.com/6790
 
 [ $compiler == dart2js || $compiler == dartc ]
 unittest/test/instance_test: Skip
 
 [ $compiler == none && $runtime == drt ]
 dartdoc/test/dartdoc_test: Skip # See dartbug.com/4541.
-
+args/test/args_test: Skip # http://dartbug.com/6744
diff --git a/pkg/unittest/lib/src/core_matchers.dart b/pkg/unittest/lib/src/core_matchers.dart
index 20e9db2..3846fdd 100644
--- a/pkg/unittest/lib/src/core_matchers.dart
+++ b/pkg/unittest/lib/src/core_matchers.dart
@@ -489,18 +489,6 @@
   bool matches(item, MatchState matchState) => item is UnimplementedError;
 }
 
-/** A matcher for NullPointerExceptions. */
-const isNullPointerException = const _NullPointerException();
-
-/** A matcher for functions that throw NotNullPointerException. */
-const Matcher throwsNullPointerException =
-    const Throws(isNullPointerException);
-
-class _NullPointerException extends TypeMatcher {
-  const _NullPointerException() : super("NullPointerException");
-  bool matches(item, MatchState matchState) => item is NullPointerException;
-}
-
 /** A matcher for UnsupportedError. */
 const isUnsupportedError = const _UnsupportedError();
 
diff --git a/pkg/unittest/test/matchers_test.dart b/pkg/unittest/test/matchers_test.dart
index c9045ad..81be8fb 100644
--- a/pkg/unittest/test/matchers_test.dart
+++ b/pkg/unittest/test/matchers_test.dart
@@ -155,16 +155,6 @@
             "UnimplementedError.");
     });
 
-    test('throwsNullPointerException', () {
-      shouldPass(() { throw new NullPointerException(''); },
-          throwsNullPointerException);
-      shouldFail(() { throw new Exception(); },
-          throwsNullPointerException,
-        "Expected: throws an exception which matches NullPointerException "
-        "but:  exception <Exception> does not match "
-            "NullPointerException.");
-    });
-
     test('throwsUnsupportedError', () {
       shouldPass(() { throw new UnsupportedError(''); },
           throwsUnsupportedError);
diff --git a/runtime/bin/bin.gypi b/runtime/bin/bin.gypi
index 084cd51..c8108b7 100644
--- a/runtime/bin/bin.gypi
+++ b/runtime/bin/bin.gypi
@@ -268,6 +268,10 @@
         'builtin_natives.cc',
         'builtin.h',
         'io_natives.h',
+        'log_android.cc',
+        'log_linux.cc',
+        'log_macos.cc',
+        'log_win.cc',
       ],
       'includes': [
         'builtin_impl_sources.gypi',
@@ -391,7 +395,13 @@
           'link_settings': {
             'libraries': [ '-lws2_32.lib', '-lRpcrt4.lib' ],
           },
-       }]],
+       }],
+        ['OS=="android"', {
+          'link_settings': {
+            'libraries': [ '-llog' ],
+          },
+       }]
+      ],
     },
     {
       # Generate snapshot bin file.
@@ -482,7 +492,14 @@
             },
           },
         }],
-       ],
+        ['OS=="linux"', {
+          # Have the linker add all symbols to the dynamic symbol table
+          # so that extensions can look them up dynamically in the binary.
+          'ldflags': [
+            '-rdynamic',
+          ],
+        }],
+      ],
     },
     {
       # dart binary without any snapshot built in.
@@ -521,7 +538,15 @@
               'AdditionalOptions': [ '/EXPORT:Dart_True' ],
             },
           },
-       }]],
+        }],
+        ['OS=="linux"', {
+          # Have the linker add all symbols to the dynamic symbol table
+          # so that extensions can look them up dynamically in the binary.
+          'ldflags': [
+            '-rdynamic',
+          ],
+        }],
+      ],
     },
     {
       'target_name': 'process_test',
diff --git a/runtime/bin/builtin.dart b/runtime/bin/builtin.dart
index 4aea641..f84a50f 100644
--- a/runtime/bin/builtin.dart
+++ b/runtime/bin/builtin.dart
@@ -71,12 +71,20 @@
   var baseUri = new Uri.fromString(base);
   _logResolution("# Resolving: $userString from $base");
 
-  // Relative URIs with scheme dart-ext should be resolved as if with no scheme.
   var uri = new Uri.fromString(userString);
   var resolved;
   if ('dart-ext' == uri.scheme) {
+    // Relative URIs with scheme dart-ext should be resolved as if with no
+    // scheme.
     resolved = baseUri.resolve(uri.path);
-    resolved = new Uri.fromComponents(scheme: "dart-ext", path: resolved.path);
+    var path = resolved.path;
+    if (resolved.scheme == 'package') {
+      // If we are resolving relative to a package URI we go directly to the
+      // file path and keep the dart-ext scheme. Otherwise, we will lose the
+      // package URI path part.
+      path = _filePathFromPackageUri(resolved);
+    }
+    resolved = new Uri.fromComponents(scheme: "dart-ext", path: path);
   } else {
     resolved = baseUri.resolve(userString);
   }
diff --git a/runtime/bin/dbg_connection.cc b/runtime/bin/dbg_connection.cc
index 4c23dd4..4918d0d 100644
--- a/runtime/bin/dbg_connection.cc
+++ b/runtime/bin/dbg_connection.cc
@@ -5,6 +5,7 @@
 #include "bin/dbg_connection.h"
 #include "bin/dbg_message.h"
 #include "bin/dartutils.h"
+#include "bin/log.h"
 #include "bin/socket.h"
 #include "bin/thread.h"
 #include "bin/utils.h"
@@ -198,7 +199,8 @@
       FATAL("Illegal JSON message received");
     }
     if (!found) {
-      printf("'command' not found in JSON message: '%s'\n", msgbuf_->buf());
+      Log::Print("'command' not found in JSON message: '%s'\n",
+                      msgbuf_->buf());
       msgbuf_->PopMessage();
     }
 
@@ -242,7 +244,7 @@
       }
 
       // This is an unrecognized command, report error and move on to next.
-      printf("unrecognized command received: '%s'\n", msgbuf_->buf());
+      Log::Print("unrecognized command received: '%s'\n", msgbuf_->buf());
       HandleUnknownMsg();
       msgbuf_->PopMessage();
     }
diff --git a/runtime/bin/dbg_connection_android.cc b/runtime/bin/dbg_connection_android.cc
index 7fe7e94..a0bce37 100644
--- a/runtime/bin/dbg_connection_android.cc
+++ b/runtime/bin/dbg_connection_android.cc
@@ -9,6 +9,7 @@
 
 #include "bin/dbg_connection.h"
 #include "bin/fdutils.h"
+#include "bin/log.h"
 #include "bin/socket.h"
 
 int DebuggerConnectionImpl::epoll_fd_ = -1;
@@ -32,7 +33,7 @@
     // Sync message. Not yet implemented.
     UNIMPLEMENTED();
   } else {
-    printf("unexpected: receiving debugger connection event.\n");
+    Log::Print("unexpected: receiving debugger connection event.\n");
     UNIMPLEMENTED();
   }
 }
diff --git a/runtime/bin/dbg_connection_linux.cc b/runtime/bin/dbg_connection_linux.cc
index 7fe7e94..a0bce37 100644
--- a/runtime/bin/dbg_connection_linux.cc
+++ b/runtime/bin/dbg_connection_linux.cc
@@ -9,6 +9,7 @@
 
 #include "bin/dbg_connection.h"
 #include "bin/fdutils.h"
+#include "bin/log.h"
 #include "bin/socket.h"
 
 int DebuggerConnectionImpl::epoll_fd_ = -1;
@@ -32,7 +33,7 @@
     // Sync message. Not yet implemented.
     UNIMPLEMENTED();
   } else {
-    printf("unexpected: receiving debugger connection event.\n");
+    Log::Print("unexpected: receiving debugger connection event.\n");
     UNIMPLEMENTED();
   }
 }
diff --git a/runtime/bin/dbg_connection_macos.cc b/runtime/bin/dbg_connection_macos.cc
index cc0f13a..8464abf 100644
--- a/runtime/bin/dbg_connection_macos.cc
+++ b/runtime/bin/dbg_connection_macos.cc
@@ -12,6 +12,7 @@
 #include "bin/dartutils.h"
 #include "bin/dbg_connection.h"
 #include "bin/fdutils.h"
+#include "bin/log.h"
 #include "bin/socket.h"
 #include "platform/thread.h"
 #include "platform/utils.h"
@@ -87,10 +88,10 @@
   } else if (ident == wakeup_fds_[0]) {
     Message msg;
     if (ReceiveMessage(&msg)) {
-      printf("Received sync message id %d.\n", msg.msg_id);
+      Log::Print("Received sync message id %d.\n", msg.msg_id);
     }
   } else {
-    printf("unexpected: receiving debugger connection event.\n");
+    Log::Print("unexpected: receiving debugger connection event.\n");
     UNIMPLEMENTED();
   }
 }
@@ -113,7 +114,7 @@
       }
     }
   }
-  printf("shutting down debugger thread\n");
+  Log::Print("shutting down debugger thread\n");
 }
 
 
diff --git a/runtime/bin/directory_win.cc b/runtime/bin/directory_win.cc
index 9508dae..ca6c601 100644
--- a/runtime/bin/directory_win.cc
+++ b/runtime/bin/directory_win.cc
@@ -7,8 +7,7 @@
 #include <errno.h>
 #include <sys/stat.h>
 
-#include "bin/platform.h"
-
+#include "bin/log.h"
 
 static int SetOsErrorMessage(char* os_error_message,
                              int os_error_message_len) {
@@ -23,7 +22,7 @@
                     NULL);
   if (message_size == 0) {
     if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
-      fprintf(stderr, "FormatMessage failed %d\n", GetLastError());
+      Log::PrintErr("FormatMessage failed %d\n", GetLastError());
     }
     snprintf(os_error_message, os_error_message_len, "OS Error %d", error_code);
   }
diff --git a/runtime/bin/eventhandler_android.cc b/runtime/bin/eventhandler_android.cc
index de28f03..878c7eb 100644
--- a/runtime/bin/eventhandler_android.cc
+++ b/runtime/bin/eventhandler_android.cc
@@ -15,6 +15,7 @@
 
 #include "bin/dartutils.h"
 #include "bin/fdutils.h"
+#include "bin/log.h"
 #include "platform/hashmap.h"
 #include "platform/thread.h"
 #include "platform/utils.h"
@@ -229,21 +230,21 @@
 
 #ifdef DEBUG_POLL
 static void PrintEventMask(intptr_t fd, intptr_t events) {
-  printf("%d ", fd);
-  if ((events & EPOLLIN) != 0) printf("EPOLLIN ");
-  if ((events & EPOLLPRI) != 0) printf("EPOLLPRI ");
-  if ((events & EPOLLOUT) != 0) printf("EPOLLOUT ");
-  if ((events & EPOLLERR) != 0) printf("EPOLLERR ");
-  if ((events & EPOLLHUP) != 0) printf("EPOLLHUP ");
-  if ((events & EPOLLRDHUP) != 0) printf("EPOLLRDHUP ");
+  Log::Print("%d ", fd);
+  if ((events & EPOLLIN) != 0) Log::Print("EPOLLIN ");
+  if ((events & EPOLLPRI) != 0) Log::Print("EPOLLPRI ");
+  if ((events & EPOLLOUT) != 0) Log::Print("EPOLLOUT ");
+  if ((events & EPOLLERR) != 0) Log::Print("EPOLLERR ");
+  if ((events & EPOLLHUP) != 0) Log::Print("EPOLLHUP ");
+  if ((events & EPOLLRDHUP) != 0) Log::Print("EPOLLRDHUP ");
   int all_events = EPOLLIN | EPOLLPRI | EPOLLOUT |
       EPOLLERR | EPOLLHUP | EPOLLRDHUP;
   if ((events & ~all_events) != 0) {
-    printf("(and %08x) ", events & ~all_events);
+    Log::Print("(and %08x) ", events & ~all_events);
   }
-  printf("(available %d) ", FDUtils::AvailableBytes(fd));
+  Log::Print("(available %d) ", FDUtils::AvailableBytes(fd));
 
-  printf("\n");
+  Log::Print("\n");
 }
 #endif
 
@@ -299,7 +300,7 @@
             event_mask = (1 << kCloseEvent);
             sd->MarkClosedRead();
           } else if (errno != EWOULDBLOCK) {
-            fprintf(stderr, "Error recv: %s\n", strerror(errno));
+            Log::PrintErr("Error recv: %s\n", strerror(errno));
           }
         }
       }
diff --git a/runtime/bin/eventhandler_linux.cc b/runtime/bin/eventhandler_linux.cc
index 886388f3..49b6ca1 100644
--- a/runtime/bin/eventhandler_linux.cc
+++ b/runtime/bin/eventhandler_linux.cc
@@ -15,6 +15,7 @@
 
 #include "bin/dartutils.h"
 #include "bin/fdutils.h"
+#include "bin/log.h"
 #include "platform/hashmap.h"
 #include "platform/thread.h"
 #include "platform/utils.h"
@@ -229,21 +230,21 @@
 
 #ifdef DEBUG_POLL
 static void PrintEventMask(intptr_t fd, intptr_t events) {
-  printf("%d ", fd);
-  if ((events & EPOLLIN) != 0) printf("EPOLLIN ");
-  if ((events & EPOLLPRI) != 0) printf("EPOLLPRI ");
-  if ((events & EPOLLOUT) != 0) printf("EPOLLOUT ");
-  if ((events & EPOLLERR) != 0) printf("EPOLLERR ");
-  if ((events & EPOLLHUP) != 0) printf("EPOLLHUP ");
-  if ((events & EPOLLRDHUP) != 0) printf("EPOLLRDHUP ");
+  Log::Print("%d ", fd);
+  if ((events & EPOLLIN) != 0) Log::Print("EPOLLIN ");
+  if ((events & EPOLLPRI) != 0) Log::Print("EPOLLPRI ");
+  if ((events & EPOLLOUT) != 0) Log::Print("EPOLLOUT ");
+  if ((events & EPOLLERR) != 0) Log::Print("EPOLLERR ");
+  if ((events & EPOLLHUP) != 0) Log::Print("EPOLLHUP ");
+  if ((events & EPOLLRDHUP) != 0) Log::Print("EPOLLRDHUP ");
   int all_events = EPOLLIN | EPOLLPRI | EPOLLOUT |
       EPOLLERR | EPOLLHUP | EPOLLRDHUP;
   if ((events & ~all_events) != 0) {
-    printf("(and %08x) ", events & ~all_events);
+    Log::Print("(and %08x) ", events & ~all_events);
   }
-  printf("(available %d) ", FDUtils::AvailableBytes(fd));
+  Log::Print("(available %d) ", FDUtils::AvailableBytes(fd));
 
-  printf("\n");
+  Log::Print("\n");
 }
 #endif
 
@@ -299,7 +300,7 @@
             event_mask = (1 << kCloseEvent);
             sd->MarkClosedRead();
           } else if (errno != EWOULDBLOCK) {
-            fprintf(stderr, "Error recv: %s\n", strerror(errno));
+            Log::PrintErr("Error recv: %s\n", strerror(errno));
           }
         }
       }
diff --git a/runtime/bin/eventhandler_macos.cc b/runtime/bin/eventhandler_macos.cc
index 59a3d65..3954190 100644
--- a/runtime/bin/eventhandler_macos.cc
+++ b/runtime/bin/eventhandler_macos.cc
@@ -14,6 +14,7 @@
 
 #include "bin/dartutils.h"
 #include "bin/fdutils.h"
+#include "bin/log.h"
 #include "platform/hashmap.h"
 #include "platform/thread.h"
 #include "platform/utils.h"
@@ -240,15 +241,16 @@
 
 #ifdef DEBUG_KQUEUE
 static void PrintEventMask(intptr_t fd, struct kevent* event) {
-  printf("%d ", static_cast<int>(fd));
-  if (event->filter == EVFILT_READ) printf("EVFILT_READ ");
-  if (event->filter == EVFILT_WRITE) printf("EVFILT_WRITE ");
-  printf("flags: %x: ", event->flags);
-  if ((event->flags & EV_EOF) != 0) printf("EV_EOF ");
-  if ((event->flags & EV_ERROR) != 0) printf("EV_ERROR ");
-  printf("- fflags: %d ", event->fflags);
-  printf("(available %d) ", static_cast<int>(FDUtils::AvailableBytes(fd)));
-  printf("\n");
+  Log::Print("%d ", static_cast<int>(fd));
+  if (event->filter == EVFILT_READ) Log::Print("EVFILT_READ ");
+  if (event->filter == EVFILT_WRITE) Log::Print("EVFILT_WRITE ");
+  Log::Print("flags: %x: ", event->flags);
+  if ((event->flags & EV_EOF) != 0) Log::Print("EV_EOF ");
+  if ((event->flags & EV_ERROR) != 0) Log::Print("EV_ERROR ");
+  Log::Print("- fflags: %d ", event->fflags);
+  Log::Print("(available %d) ",
+      static_cast<int>(FDUtils::AvailableBytes(fd)));
+  Log::Print("\n");
 }
 #endif
 
diff --git a/runtime/bin/eventhandler_win.cc b/runtime/bin/eventhandler_win.cc
index 2d4343b..bc2f480 100644
--- a/runtime/bin/eventhandler_win.cc
+++ b/runtime/bin/eventhandler_win.cc
@@ -11,6 +11,7 @@
 
 #include "bin/builtin.h"
 #include "bin/dartutils.h"
+#include "bin/log.h"
 #include "bin/socket.h"
 #include "platform/thread.h"
 
@@ -143,7 +144,7 @@
                                             reinterpret_cast<ULONG_PTR>(this),
                                             0);
   if (completion_port_ == NULL) {
-    fprintf(stderr, "Error CreateIoCompletionPort: %d\n", GetLastError());
+    Log::PrintErr("Error CreateIoCompletionPort: %d\n", GetLastError());
     return false;
   }
   return true;
@@ -224,7 +225,7 @@
                      NULL);
   if (!ok) {
     if (GetLastError() != ERROR_BROKEN_PIPE) {
-      fprintf(stderr, "ReadFile failed %d\n", GetLastError());
+      Log::PrintErr("ReadFile failed %d\n", GetLastError());
     }
     bytes_read = 0;
   }
@@ -259,7 +260,7 @@
     }
 
     if (GetLastError() != ERROR_BROKEN_PIPE) {
-      fprintf(stderr, "ReadFile failed: %d\n", GetLastError());
+      Log::PrintErr("ReadFile failed: %d\n", GetLastError());
     }
     event_handler_->HandleClosed(this);
     IOBuffer::DisposeBuffer(buffer);
@@ -298,7 +299,7 @@
   }
 
   if (GetLastError() != ERROR_BROKEN_PIPE) {
-    fprintf(stderr, "WriteFile failed: %d\n", GetLastError());
+    Log::PrintErr("WriteFile failed: %d\n", GetLastError());
   }
   event_handler_->HandleClosed(this);
   IOBuffer::DisposeBuffer(buffer);
@@ -344,7 +345,7 @@
                         NULL,
                         NULL);
   if (status == SOCKET_ERROR) {
-    fprintf(stderr, "Error WSAIoctl failed: %d\n", WSAGetLastError());
+    Log::PrintErr("Error WSAIoctl failed: %d\n", WSAGetLastError());
     return false;
   }
   return true;
@@ -376,7 +377,7 @@
                  buffer->GetCleanOverlapped());
   if (!ok) {
     if (WSAGetLastError() != WSA_IO_PENDING) {
-      fprintf(stderr, "AcceptEx failed: %d\n", WSAGetLastError());
+      Log::PrintErr("AcceptEx failed: %d\n", WSAGetLastError());
       closesocket(buffer->client());
       IOBuffer::DisposeBuffer(buffer);
       return false;
@@ -422,7 +423,7 @@
         accepted_tail_ = client_socket;
       }
     } else {
-      fprintf(stderr, "setsockopt failed: %d\n", WSAGetLastError());
+      Log::PrintErr("setsockopt failed: %d\n", WSAGetLastError());
       closesocket(buffer->client());
     }
   }
@@ -514,7 +515,7 @@
                         NULL);
     if (!ok) {
       if (GetLastError() != ERROR_BROKEN_PIPE) {
-        fprintf(stderr, "WriteFile failed: %d\n", GetLastError());
+        Log::PrintErr("WriteFile failed: %d\n", GetLastError());
       }
       event_handler_->HandleClosed(this);
     }
@@ -526,7 +527,7 @@
 void ClientSocket::Shutdown(int how) {
   int rc = shutdown(socket(), how);
   if (rc == SOCKET_ERROR) {
-    fprintf(stderr, "shutdown failed: %d %d\n", socket(), WSAGetLastError());
+    Log::PrintErr("shutdown failed: %d %d\n", socket(), WSAGetLastError());
   }
   if (how == SD_RECEIVE) MarkClosedRead();
   if (how == SD_SEND) MarkClosedWrite();
@@ -559,7 +560,7 @@
   }
 
   if (WSAGetLastError() != WSAECONNRESET) {
-    fprintf(stderr, "WSARecv failed: %d\n", WSAGetLastError());
+    Log::PrintErr("WSARecv failed: %d\n", WSAGetLastError());
   }
   event_handler_->HandleClosed(this);
   IOBuffer::DisposeBuffer(buffer);
@@ -584,7 +585,7 @@
     return true;
   }
 
-  fprintf(stderr, "WSASend failed: %d\n", WSAGetLastError());
+  Log::PrintErr("WSASend failed: %d\n", WSAGetLastError());
   IOBuffer::DisposeBuffer(pending_write_);
   pending_write_ = NULL;
   return false;
@@ -876,7 +877,7 @@
     if (!ok && overlapped == NULL) {
       if (GetLastError() == ERROR_ABANDONED_WAIT_0) {
         // The completion port should never be closed.
-        printf("Completion port closed\n");
+        Log::Print("Completion port closed\n");
         UNREACHABLE();
       } else {
         // Timeout is signalled by false result and NULL in overlapped.
diff --git a/runtime/bin/extensions.cc b/runtime/bin/extensions.cc
index 244a631..d8b13f9 100644
--- a/runtime/bin/extensions.cc
+++ b/runtime/bin/extensions.cc
@@ -15,17 +15,18 @@
 Dart_Handle Extensions::LoadExtension(const char* extension_url,
                                       Dart_Handle parent_library) {
   char* library_path = strdup(extension_url);
-  if (!library_path || !File::IsAbsolutePath(library_path)) {
-    free(library_path);
-    return Dart_Error("unexpected error in library path");
+
+  if (library_path == NULL) {
+    return Dart_Error("Out of memory in LoadExtension");
   }
+
   // Extract the path and the extension name from the url.
   char* last_path_separator = strrchr(library_path, '/');
   char* extension_name = last_path_separator + 1;
   *last_path_separator = '\0';  // Terminate library_path at last separator.
 
   void* library_handle = LoadExtensionLibrary(library_path, extension_name);
-  if (!library_handle) {
+  if (library_handle == NULL) {
     free(library_path);
     return Dart_Error("cannot find extension library");
   }
diff --git a/runtime/bin/file_android.cc b/runtime/bin/file_android.cc
index 66e6251..ddcec13 100644
--- a/runtime/bin/file_android.cc
+++ b/runtime/bin/file_android.cc
@@ -11,6 +11,7 @@
 #include <libgen.h>
 
 #include "bin/builtin.h"
+#include "bin/log.h"
 
 class FileHandle {
  public:
@@ -42,7 +43,7 @@
     const int kBufferSize = 1024;
     char error_message[kBufferSize];
     strerror_r(errno, error_message, kBufferSize);
-    fprintf(stderr, "%s\n", error_message);
+    Log::PrintErr("%s\n", error_message);
   }
   handle_->set_fd(kClosedFd);
 }
diff --git a/runtime/bin/file_linux.cc b/runtime/bin/file_linux.cc
index 66e6251..ddcec13 100644
--- a/runtime/bin/file_linux.cc
+++ b/runtime/bin/file_linux.cc
@@ -11,6 +11,7 @@
 #include <libgen.h>
 
 #include "bin/builtin.h"
+#include "bin/log.h"
 
 class FileHandle {
  public:
@@ -42,7 +43,7 @@
     const int kBufferSize = 1024;
     char error_message[kBufferSize];
     strerror_r(errno, error_message, kBufferSize);
-    fprintf(stderr, "%s\n", error_message);
+    Log::PrintErr("%s\n", error_message);
   }
   handle_->set_fd(kClosedFd);
 }
diff --git a/runtime/bin/file_macos.cc b/runtime/bin/file_macos.cc
index b5bc95a..0fd0c8d 100644
--- a/runtime/bin/file_macos.cc
+++ b/runtime/bin/file_macos.cc
@@ -13,6 +13,7 @@
 
 #include "bin/builtin.h"
 #include "bin/fdutils.h"
+#include "bin/log.h"
 
 class FileHandle {
  public:
@@ -44,7 +45,7 @@
     const int kBufferSize = 1024;
     char error_message[kBufferSize];
     strerror_r(errno, error_message, kBufferSize);
-    fprintf(stderr, "%s\n", error_message);
+    Log::PrintErr("%s\n", error_message);
   }
   handle_->set_fd(kClosedFd);
 }
diff --git a/runtime/bin/file_win.cc b/runtime/bin/file_win.cc
index 97a98a6..a9cef38 100644
--- a/runtime/bin/file_win.cc
+++ b/runtime/bin/file_win.cc
@@ -11,6 +11,7 @@
 #include <sys/stat.h>
 
 #include "bin/builtin.h"
+#include "bin/log.h"
 
 class FileHandle {
  public:
@@ -39,7 +40,7 @@
   ASSERT(handle_->fd() >= 0);
   int err = close(handle_->fd());
   if (err != 0) {
-    fprintf(stderr, "%s\n", strerror(errno));
+    Log::PrintErr("%s\n", strerror(errno));
   }
   handle_->set_fd(kClosedFd);
 }
diff --git a/runtime/bin/gen_snapshot.cc b/runtime/bin/gen_snapshot.cc
index b3513e4..2f2c6f2 100644
--- a/runtime/bin/gen_snapshot.cc
+++ b/runtime/bin/gen_snapshot.cc
@@ -14,12 +14,14 @@
 #include "bin/builtin.h"
 #include "bin/dartutils.h"
 #include "bin/file.h"
+#include "bin/log.h"
+
 #include "platform/globals.h"
 
 #define CHECK_RESULT(result)                                                   \
   if (Dart_IsError(result)) {                                                  \
     free(snapshot_buffer);                                                     \
-    fprintf(stderr, "Error: %s", Dart_GetError(result));                       \
+    Log::PrintErr("Error: %s", Dart_GetError(result));                    \
     Dart_ExitScope();                                                          \
     Dart_ShutdownIsolate();                                                    \
     exit(255);                                                                 \
@@ -205,16 +207,14 @@
 
 
 static void PrintUsage() {
-  fprintf(stderr,
-          "dart [<vm-flags>] "
-          "[<dart-script-file>]\n");
+  Log::PrintErr("dart [<vm-flags>] [<dart-script-file>]\n");
 }
 
 
 static void VerifyLoaded(Dart_Handle library) {
   if (Dart_IsError(library)) {
     const char* err_msg = Dart_GetError(library);
-    fprintf(stderr, "Errors encountered while loading: %s\n", err_msg);
+    Log::PrintErr("Errors encountered while loading: %s\n", err_msg);
     Dart_ExitScope();
     Dart_ShutdownIsolate();
     exit(255);
@@ -251,7 +251,7 @@
   // Set up the library tag handler for this isolate.
   Dart_Handle result = Dart_SetLibraryTagHandler(DartUtils::LibraryTagHandler);
   if (Dart_IsError(result)) {
-    fprintf(stderr, "%s", Dart_GetError(result));
+    Log::PrintErr("%s", Dart_GetError(result));
     Dart_ExitScope();
     Dart_ShutdownIsolate();
     exit(255);
@@ -290,7 +290,7 @@
   }
 
   if (snapshot_filename == NULL) {
-    fprintf(stderr, "No snapshot output file specified\n");
+    Log::PrintErr("No snapshot output file specified\n");
     return 255;
   }
 
@@ -302,14 +302,14 @@
   // Note: We don't expect isolates to be created from dart code during
   // snapshot generation.
   if (!Dart_Initialize(NULL, NULL, NULL)) {
-    fprintf(stderr, "VM initialization failed\n");
+    Log::PrintErr("VM initialization failed\n");
     return 255;
   }
 
   char* error;
   Dart_Isolate isolate = Dart_CreateIsolate(NULL, NULL, NULL, NULL, &error);
   if (isolate == NULL) {
-    fprintf(stderr, "Error: %s", error);
+    Log::PrintErr("Error: %s", error);
     free(error);
     exit(255);
   }
@@ -360,7 +360,7 @@
                                                 NULL,
                                                 &error);
       if (isolate == NULL) {
-        fprintf(stderr, "%s", error);
+        Log::PrintErr("%s", error);
         free(error);
         free(snapshot_buffer);
         exit(255);
diff --git a/runtime/bin/io_impl_sources.gypi b/runtime/bin/io_impl_sources.gypi
index f86ca02..552ac3d 100644
--- a/runtime/bin/io_impl_sources.gypi
+++ b/runtime/bin/io_impl_sources.gypi
@@ -41,7 +41,7 @@
     'socket_linux.cc',
     'socket_macos.cc',
     'socket_win.cc',
-    'tls_socket.cc',
-    'tls_socket.h',
+    'secure_socket.cc',
+    'secure_socket.h',
   ],
 }
diff --git a/runtime/bin/io_natives.cc b/runtime/bin/io_natives.cc
index 1cd0236..16fd532 100644
--- a/runtime/bin/io_natives.cc
+++ b/runtime/bin/io_natives.cc
@@ -40,13 +40,13 @@
   V(Socket_GetError, 1)                                                        \
   V(Socket_GetStdioHandle, 2)                                                  \
   V(Socket_NewServicePort, 0)                                                  \
-  V(TlsSocket_Connect, 3)                                                      \
-  V(TlsSocket_Destroy, 1)                                                      \
-  V(TlsSocket_Handshake, 1)                                                    \
-  V(TlsSocket_Init, 1)                                                         \
-  V(TlsSocket_ProcessBuffer, 2)                                                \
-  V(TlsSocket_RegisterHandshakeCompleteCallback, 2)                            \
-  V(TlsSocket_SetCertificateDatabase, 1)
+  V(SecureSocket_Connect, 5)                                                   \
+  V(SecureSocket_Destroy, 1)                                                   \
+  V(SecureSocket_Handshake, 1)                                                 \
+  V(SecureSocket_Init, 1)                                                      \
+  V(SecureSocket_ProcessBuffer, 2)                                             \
+  V(SecureSocket_RegisterHandshakeCompleteCallback, 2)                         \
+  V(SecureSocket_SetCertificateDatabase, 2)
 
 IO_NATIVE_LIST(DECLARE_FUNCTION);
 
diff --git a/runtime/bin/io_sources.gypi b/runtime/bin/io_sources.gypi
index 9300c1c..69100f0 100644
--- a/runtime/bin/io_sources.gypi
+++ b/runtime/bin/io_sources.gypi
@@ -14,6 +14,6 @@
     'process_patch.dart',
     'socket_patch.dart',
     'stdio_patch.dart',
-    'tls_socket_patch.dart',
+    'secure_socket_patch.dart',
   ],
 }
diff --git a/runtime/bin/log.h b/runtime/bin/log.h
new file mode 100644
index 0000000..c495840
--- /dev/null
+++ b/runtime/bin/log.h
@@ -0,0 +1,37 @@
+// Copyright (c) 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.
+
+#ifndef BIN_LOG_H_
+#define BIN_LOG_H_
+
+#include <stdarg.h>
+
+#include "platform/globals.h"
+
+class Log {
+ public:
+  // Print formatted output for debugging.
+  static void Print(const char* format, ...) PRINTF_ATTRIBUTE(1, 2) {
+    va_list args;
+    va_start(args, format);
+    VPrint(format, args);
+    va_end(args);
+  }
+
+  static void VPrint(const char* format, va_list args);
+
+  static void PrintErr(const char* format, ...) PRINTF_ATTRIBUTE(1, 2) {
+    va_list args;
+    va_start(args, format);
+    VPrintErr(format, args);
+    va_end(args);
+  }
+
+  static void VPrintErr(const char* format, va_list args);
+
+  DISALLOW_ALLOCATION();
+  DISALLOW_IMPLICIT_CONSTRUCTORS(Log);
+};
+
+#endif  // BIN_LOG_H_
diff --git a/runtime/bin/log_android.cc b/runtime/bin/log_android.cc
new file mode 100644
index 0000000..0a6b552
--- /dev/null
+++ b/runtime/bin/log_android.cc
@@ -0,0 +1,20 @@
+// Copyright (c) 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.
+
+#include "bin/log.h"
+
+#include <stdio.h>
+#include <android/log.h>
+
+// TODO(gram): We should be buffering the data and only outputting
+// it when we see a '\n'.
+
+void Log::VPrint(const char* format, va_list args) {
+  __android_log_vprint(ANDROID_LOG_INFO, "Dart", format, args);
+}
+
+void Log::VPrintErr(const char* format, va_list args) {
+  __android_log_vprint(ANDROID_LOG_ERROR, "Dart", format, args);
+}
+
diff --git a/runtime/bin/log_linux.cc b/runtime/bin/log_linux.cc
new file mode 100644
index 0000000..1b99c70
--- /dev/null
+++ b/runtime/bin/log_linux.cc
@@ -0,0 +1,18 @@
+// Copyright (c) 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.
+
+#include "bin/log.h"
+
+#include <stdio.h>
+
+void Log::VPrint(const char* format, va_list args) {
+  vfprintf(stdout, format, args);
+  fflush(stdout);
+}
+
+void Log::VPrintErr(const char* format, va_list args) {
+  vfprintf(stderr, format, args);
+  fflush(stdout);
+}
+
diff --git a/runtime/bin/log_macos.cc b/runtime/bin/log_macos.cc
new file mode 100644
index 0000000..2f0d371
--- /dev/null
+++ b/runtime/bin/log_macos.cc
@@ -0,0 +1,17 @@
+// Copyright (c) 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.
+
+#include "bin/log.h"
+
+#include <stdio.h>
+
+void Log::VPrint(const char* format, va_list args) {
+  vfprintf(stdout, format, args);
+  fflush(stdout);
+}
+
+void Log::VPrintErr(const char* format, va_list args) {
+  vfprintf(stderr, format, args);
+  fflush(stderr);
+}
diff --git a/runtime/bin/log_win.cc b/runtime/bin/log_win.cc
new file mode 100644
index 0000000..2f0d371
--- /dev/null
+++ b/runtime/bin/log_win.cc
@@ -0,0 +1,17 @@
+// Copyright (c) 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.
+
+#include "bin/log.h"
+
+#include <stdio.h>
+
+void Log::VPrint(const char* format, va_list args) {
+  vfprintf(stdout, format, args);
+  fflush(stdout);
+}
+
+void Log::VPrintErr(const char* format, va_list args) {
+  vfprintf(stderr, format, args);
+  fflush(stderr);
+}
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index 534f886..81c1373 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -17,6 +17,7 @@
 #include "bin/extensions.h"
 #include "bin/file.h"
 #include "bin/isolate_data.h"
+#include "bin/log.h"
 #include "bin/platform.h"
 #include "bin/process.h"
 #include "platform/globals.h"
@@ -142,7 +143,7 @@
     }
   }
   if (debug_port == 0) {
-    fprintf(stderr, "unrecognized --debug option syntax. "
+    Log::PrintErr("unrecognized --debug option syntax. "
                     "Use --debug[:<port number>]\n");
     return false;
   }
@@ -516,25 +517,25 @@
 
 
 static void PrintVersion() {
-  fprintf(stderr, "Dart VM version: %s\n", Dart_VersionString());
+  Log::PrintErr("Dart VM version: %s\n", Dart_VersionString());
 }
 
 
 static void PrintUsage() {
-  fprintf(stderr,
+  Log::PrintErr(
       "Usage: dart [<vm-flags>] <dart-script-file> [<dart-options>]\n"
       "\n"
       "Executes the Dart script passed as <dart-script-file>.\n"
       "\n");
   if (!has_verbose_option) {
-    fprintf(stderr,
+    Log::PrintErr(
 "Common options:\n"
 "--checked Insert runtime type checks and enable assertions (checked mode).\n"
 "--version Print the VM version.\n"
 "--help    Display this message (add --verbose for information about all\n"
 "          VM options).\n");
   } else {
-    fprintf(stderr,
+    Log::PrintErr(
 "Supported options:\n"
 "--checked\n"
 "  Insert runtime type checks and enable assertions (checked mode).\n"
@@ -626,8 +627,9 @@
 static int ErrorExit(const char* format, ...) {
   va_list arguments;
   va_start(arguments, format);
-  vfprintf(stderr, format, arguments);
+  Log::VPrintErr(format, arguments);
   va_end(arguments);
+  fflush(stderr);
 
   Dart_ExitScope();
   Dart_ShutdownIsolate();
@@ -653,7 +655,7 @@
 
   // Perform platform specific initialization.
   if (!Platform::Initialize()) {
-    fprintf(stderr, "Initialization failed\n");
+    Log::PrintErr("Initialization failed\n");
   }
 
   // On Windows, the argv strings are code page encoded and not
@@ -691,7 +693,9 @@
   if (!Dart_Initialize(CreateIsolateAndSetup,
                        NULL,
                        ShutdownIsolate)) {
-    return ErrorExit("VM initialization failed\n");
+    fprintf(stderr, "%s", "VM initialization failed\n");
+    fflush(stderr);
+    return kErrorExitCode;
   }
 
   DartUtils::SetOriginalWorkingDirectory();
@@ -710,7 +714,7 @@
                                    "main",
                                    new IsolateData(),
                                    &error)) {
-    fprintf(stderr, "%s\n", error);
+    Log::PrintErr("%s\n", error);
     free(error);
     delete [] isolate_name;
     return kErrorExitCode;  // Indicates we encountered an error.
diff --git a/runtime/bin/net/nss.gyp b/runtime/bin/net/nss.gyp
index ad5d888..64402b5 100644
--- a/runtime/bin/net/nss.gyp
+++ b/runtime/bin/net/nss.gyp
@@ -7,7 +7,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 # This file is a modified copy of Chromium's deps/third_party/nss/nss.gyp.
-# Revision 165464 (this should agree with "nss_rev" in DEPS).
+# Revision 169195 (this should agree with "nss_rev" in DEPS).
 {
   # Added by Dart. All Dart comments refer to the following block or line.
   'includes': [
@@ -88,7 +88,7 @@
   'conditions': [[ 'dart_io_support==1', {
   'targets': [
     {
-      'target_name': 'nspr_dart',
+      'target_name': 'nspr_dart',  # Added by Dart (the _dart postfix)
       'product_name': 'crnspr',
       'type': '<(component)',
       # Changed by Dart: '<(nss_directory)/' added to all paths.
@@ -455,14 +455,14 @@
       ],
     },
     {
-      'target_name': 'nss_dart',
+      'target_name': 'nss_dart',  # Added by Dart (the _dart postfix)
       'product_name': 'crnss',
       'type': '<(component)',
       'dependencies': [
-        'nss_static_dart',
+        'nss_static_dart',  # Added by Dart (the _dart postfix)
       ],
       'export_dependent_settings': [
-        'nss_static_dart',
+        'nss_static_dart',  # Added by Dart (the _dart postfix)
       ],
       'sources': [
         # Ensure at least one object file is produced, so that MSVC does not
@@ -473,10 +473,10 @@
       'conditions': [
         ['exclude_nss_root_certs==0', {
           'dependencies': [
-            'nssckbi_dart',
+            'nssckbi_dart',  # Added by Dart (the _dart postfix)
           ],
           'export_dependent_settings': [
-            'nssckbi_dart',
+            'nssckbi_dart',  # Added by Dart (the _dart postfix)
           ],
         }],
         ['OS == "mac" and component == "shared_library"', {
@@ -506,7 +506,7 @@
       #
       # TODO(rsleevi): http://crbug.com/128134 - Break the circular dependency
       # without requiring nssckbi to be built as a shared library.
-      'target_name': 'nssckbi_dart',
+      'target_name': 'nssckbi_dart',  # Added by Dart (the _dart postfix)
       'product_name': 'crnssckbi',
       'type': 'static_library',
       # This target is an implementation detail - the public dependencies
@@ -554,10 +554,10 @@
         '<(nss_directory)/mozilla/security/nss/lib/ckfw/wrap.c',
       ],
       'dependencies': [
-        'nss_static_dart',
+        'nss_static_dart',  # Added by Dart (the _dart postfix)
       ],
       'export_dependent_settings': [
-        'nss_static_dart',
+        'nss_static_dart',  # Added by Dart (the _dart postfix)
       ],
       'include_dirs': [
         '<(nss_directory)/mozilla/security/nss/lib/ckfw',
@@ -569,7 +569,7 @@
       },
     },
     {
-      'target_name': 'nss_static_dart',
+      'target_name': 'nss_static_dart',  # Added by Dart (the _dart postfix)
       'type': 'static_library',
       # This target is an implementation detail - the public dependencies
       # should be on 'nss'.
@@ -630,6 +630,7 @@
         '<(nss_directory)/mozilla/security/nss/lib/cryptohi/keyt.h',
         '<(nss_directory)/mozilla/security/nss/lib/cryptohi/keythi.h',
         '<(nss_directory)/mozilla/security/nss/lib/cryptohi/sechash.c',
+        '<(nss_directory)/mozilla/security/nss/lib/cryptohi/sechash.h',
         '<(nss_directory)/mozilla/security/nss/lib/cryptohi/seckey.c',
         '<(nss_directory)/mozilla/security/nss/lib/cryptohi/secsign.c',
         '<(nss_directory)/mozilla/security/nss/lib/cryptohi/secvfy.c',
@@ -678,7 +679,6 @@
         '<(nss_directory)/mozilla/security/nss/lib/freebl/ecl/ecp_jm.c',
         '<(nss_directory)/mozilla/security/nss/lib/freebl/ecl/ecp_mont.c',
         '<(nss_directory)/mozilla/security/nss/lib/freebl/ecl/ec_naf.c',
-        '<(nss_directory)/mozilla/security/nss/lib/freebl/hasht.h',
         '<(nss_directory)/mozilla/security/nss/lib/freebl/jpake.c',
         '<(nss_directory)/mozilla/security/nss/lib/freebl/md2.c',
         '<(nss_directory)/mozilla/security/nss/lib/freebl/md5.c',
@@ -700,12 +700,12 @@
         '<(nss_directory)/mozilla/security/nss/lib/freebl/mpi/mp_gf2m.h',
         '<(nss_directory)/mozilla/security/nss/lib/freebl/mpi/primes.c',
         '<(nss_directory)/mozilla/security/nss/lib/freebl/pqg.c',
+        '<(nss_directory)/mozilla/security/nss/lib/freebl/pqg.h',
         '<(nss_directory)/mozilla/security/nss/lib/freebl/rawhash.c',
         '<(nss_directory)/mozilla/security/nss/lib/freebl/rijndael.c',
         '<(nss_directory)/mozilla/security/nss/lib/freebl/rijndael.h',
         '<(nss_directory)/mozilla/security/nss/lib/freebl/rijndael32.tab',
         '<(nss_directory)/mozilla/security/nss/lib/freebl/rsa.c',
-        '<(nss_directory)/mozilla/security/nss/lib/freebl/sechash.h',
         '<(nss_directory)/mozilla/security/nss/lib/freebl/secmpi.h',
         '<(nss_directory)/mozilla/security/nss/lib/freebl/secrng.h',
         '<(nss_directory)/mozilla/security/nss/lib/freebl/seed.c',
@@ -920,6 +920,7 @@
         '<(nss_directory)/mozilla/security/nss/lib/pk11wrap/pk11util.c',
         '<(nss_directory)/mozilla/security/nss/lib/pk11wrap/secmod.h',
         '<(nss_directory)/mozilla/security/nss/lib/pk11wrap/secmodi.h',
+        '<(nss_directory)/mozilla/security/nss/lib/pk11wrap/secmodt.h',
         '<(nss_directory)/mozilla/security/nss/lib/pk11wrap/secmodti.h',
         '<(nss_directory)/mozilla/security/nss/lib/pk11wrap/secpkcs5.h',
         '<(nss_directory)/mozilla/security/nss/lib/pkcs7/certread.c',
@@ -969,8 +970,6 @@
         '<(nss_directory)/mozilla/security/nss/lib/softoken/lowpbe.c',
         '<(nss_directory)/mozilla/security/nss/lib/softoken/lowpbe.h',
         '<(nss_directory)/mozilla/security/nss/lib/softoken/padbuf.c',
-        '<(nss_directory)/mozilla/security/nss/lib/softoken/pk11init.h',
-        '<(nss_directory)/mozilla/security/nss/lib/softoken/pk11pars.h',
         '<(nss_directory)/mozilla/security/nss/lib/softoken/pkcs11.c',
         '<(nss_directory)/mozilla/security/nss/lib/softoken/pkcs11c.c',
         '<(nss_directory)/mozilla/security/nss/lib/softoken/pkcs11i.h',
@@ -979,12 +978,10 @@
         '<(nss_directory)/mozilla/security/nss/lib/softoken/rsawrapr.c',
         '<(nss_directory)/mozilla/security/nss/lib/softoken/sdb.c',
         '<(nss_directory)/mozilla/security/nss/lib/softoken/sdb.h',
-        '<(nss_directory)/mozilla/security/nss/lib/softoken/secmodt.h',
         '<(nss_directory)/mozilla/security/nss/lib/softoken/sftkdb.c',
         '<(nss_directory)/mozilla/security/nss/lib/softoken/sftkdb.h',
         '<(nss_directory)/mozilla/security/nss/lib/softoken/sftkdbt.h',
         '<(nss_directory)/mozilla/security/nss/lib/softoken/sftkdbti.h',
-        '<(nss_directory)/mozilla/security/nss/lib/softoken/sftkmod.c',
         '<(nss_directory)/mozilla/security/nss/lib/softoken/sftkpars.c',
         '<(nss_directory)/mozilla/security/nss/lib/softoken/sftkpars.h',
         '<(nss_directory)/mozilla/security/nss/lib/softoken/sftkpwd.c',
@@ -1002,6 +999,7 @@
         '<(nss_directory)/mozilla/security/nss/lib/util/dersubr.c',
         '<(nss_directory)/mozilla/security/nss/lib/util/dertime.c',
         '<(nss_directory)/mozilla/security/nss/lib/util/errstrs.c',
+        '<(nss_directory)/mozilla/security/nss/lib/util/hasht.h',
         '<(nss_directory)/mozilla/security/nss/lib/util/nssb64.h',
         '<(nss_directory)/mozilla/security/nss/lib/util/nssb64d.c',
         '<(nss_directory)/mozilla/security/nss/lib/util/nssb64e.c',
@@ -1047,6 +1045,11 @@
         '<(nss_directory)/mozilla/security/nss/lib/util/sectime.c',
         '<(nss_directory)/mozilla/security/nss/lib/util/templates.c',
         '<(nss_directory)/mozilla/security/nss/lib/util/utf8.c',
+        '<(nss_directory)/mozilla/security/nss/lib/util/utilmod.c',
+        '<(nss_directory)/mozilla/security/nss/lib/util/utilmodt.h',
+        '<(nss_directory)/mozilla/security/nss/lib/util/utilpars.c',
+        '<(nss_directory)/mozilla/security/nss/lib/util/utilpars.h',
+        '<(nss_directory)/mozilla/security/nss/lib/util/utilparst.h',
         '<(nss_directory)/mozilla/security/nss/lib/util/utilrename.h',
       ],
       'sources!': [
@@ -1059,11 +1062,11 @@
         '<(nss_directory)/mozilla/security/nss/lib/pk11wrap/debug_module.c',
       ],
       'dependencies': [
-        'nspr_dart',
-        'sqlite.gyp:sqlite_dart',
+        'nspr_dart',  # Added by Dart (the _dart postfix)
+        'sqlite.gyp:sqlite_dart',  # Changed by Dart prefix ../sqllite removed _dart postfix added.
       ],
       'export_dependent_settings': [
-        'nspr_dart',
+        'nspr_dart',  # Added by Dart (the _dart postfix)
       ],
       'defines': [
         'MP_API_COMPATIBLE',
@@ -1148,6 +1151,9 @@
           'defines': [
             'NSS_DISABLE_LIBPKIX',
           ],
+          # Changed by Dart:
+          # nss_directory contains .., which is bad in a regular expression.
+          # So we use the partial match by dropping '^' from '^mozilla/...
           'sources/': [
             ['exclude', 'mozilla/security/nss/lib/libpkix/'],
           ],
@@ -1155,6 +1161,9 @@
             '<(nss_directory)/mozilla/security/nss/lib/certhigh/certvfypkix.c',
             '<(nss_directory)/mozilla/security/nss/lib/certhigh/certvfypkixprint.c',
           ],
+          # Changed by Dart:
+          # nss_directory contains .., which is bad in a regular expression.
+          # So we use the partial match by dropping '^' from '^mozilla/...
           'include_dirs/': [
             ['exclude', 'mozilla/security/nss/lib/libpkix/'],
           ],
@@ -1164,7 +1173,6 @@
             ['exclude', 'amd64'],
           ],
         }],
-        # Added by Dart.
         ['OS=="linux"', {
           'defines': [
             'XP_UNIX',
diff --git a/runtime/bin/net/sqlite.gyp b/runtime/bin/net/sqlite.gyp
index 543ca77..aa7ec81 100644
--- a/runtime/bin/net/sqlite.gyp
+++ b/runtime/bin/net/sqlite.gyp
@@ -7,7 +7,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 # This file is a modified copy of Chromium's src/third_party/sqlite/sqlite.gyp.
-# Revision 165464 (this should agree with "nss_rev" in DEPS).
+# Revision 169195 (this should agree with "nss_rev" in DEPS).
 {
   # Added by Dart. All Dart comments refer to the following block or line.
   'includes': [
@@ -38,7 +38,7 @@
   'conditions': [[ 'dart_io_support==1', {
   'targets': [
     {
-      'target_name': 'sqlite_dart',
+      'target_name': 'sqlite_dart',  # Added by Dart (the _dart postfix)
       'conditions': [
         [ 'chromeos==1' , {
             'defines': [
@@ -184,12 +184,12 @@
     ['os_posix == 1 and OS != "mac" and OS != "ios" and OS != "android" and not use_system_sqlite', {
       'targets': [
         {
-          'target_name': 'sqlite_shell_dart',
+          'target_name': 'sqlite_shell_dart',  # Added by Dart (the _dart postfix)
           'type': 'executable',
           'dependencies': [
             # Disabled by Dart.
             # '../icu/icu.gyp:icuuc',
-            'sqlite_dart',
+            'sqlite_dart',  # Added by Dart (the _dart postfix)
           ],
           'sources': [
             '<(sqlite_directory)/src/src/shell.c',
diff --git a/runtime/bin/net/ssl.gyp b/runtime/bin/net/ssl.gyp
index cee5997..3798baa 100644
--- a/runtime/bin/net/ssl.gyp
+++ b/runtime/bin/net/ssl.gyp
@@ -7,7 +7,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 # This file is a modified copy of Chromium's src/net/third_party/nss/ssl.gyp.
-# Revision 165464 (this should agree with "nss_rev" in DEPS).
+# Revision 169195 (this should agree with "nss_rev" in DEPS).
 {
   # Conditions section for ssl-bodge (Compiling SSL on linux using system
   # NSS and NSPR libraries) removed:
@@ -30,15 +30,14 @@
   'conditions': [[ 'dart_io_support==1', {
   'targets': [
     {
-      'target_name': 'libssl_dart',
+      'target_name': 'libssl_dart',  # Added by Dart (the _dart postfix)
       'type': 'static_library',
       # Changed by Dart: '<(ssl_directory)/' added to all paths.
       'sources': [
         '<(ssl_directory)/ssl/authcert.c',
         '<(ssl_directory)/ssl/cmpcert.c',
         '<(ssl_directory)/ssl/derive.c',
-        '<(ssl_directory)/ssl/dtls1con.c',
-        '<(ssl_directory)/ssl/nsskea.c',
+        '<(ssl_directory)/ssl/dtlscon.c',
         '<(ssl_directory)/ssl/os2_err.c',
         '<(ssl_directory)/ssl/os2_err.h',
         '<(ssl_directory)/ssl/preenc.h',
@@ -77,7 +76,9 @@
         '<(ssl_directory)/ssl/unix_err.h',
         '<(ssl_directory)/ssl/win32err.c',
         '<(ssl_directory)/ssl/win32err.h',
+        # Changed by Dart: All files under '<(ssl_directory)/ssl/bodge' removed.
       ],
+      # Changed by Dart: '<(ssl_directory)/' added to all paths.
       'sources!': [
         '<(ssl_directory)/ssl/os2_err.c',
         '<(ssl_directory)/ssl/os2_err.h',
@@ -92,14 +93,15 @@
         'NO_NSPR_10_SUPPORT',
       ],
       'dependencies': [
-        'zlib.gyp:zlib_dart',
+        # Changed by Dart.
+        'zlib.gyp:zlib_dart',  # Added by Dart (the _dart postfix)
         # Dart: Start of copy of code from 'bodge' conditions section below.
-        'nss.gyp:nspr_dart',
-        'nss.gyp:nss_dart',
+        'nss.gyp:nspr_dart',  # Added by Dart (the _dart postfix)
+        'nss.gyp:nss_dart',  # Added by Dart (the _dart postfix)
       ],
       'export_dependent_settings': [
-        'nss.gyp:nspr_dart',
-        'nss.gyp:nss_dart',
+        'nss.gyp:nspr_dart',  # Added by Dart (the _dart postfix)
+        'nss.gyp:nss_dart',  # Added by Dart (the _dart postfix)
       ],
       'direct_dependent_settings': {
         'include_dirs': [
diff --git a/runtime/bin/net/zlib.gyp b/runtime/bin/net/zlib.gyp
index e2dcd3f..99bca0f 100644
--- a/runtime/bin/net/zlib.gyp
+++ b/runtime/bin/net/zlib.gyp
@@ -7,7 +7,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 # This file is a modified copy of src/third_party/zlib/zlib.gyp from Chromium.
-# Revision 165464 (this should agree with "nss_rev" in DEPS).
+# Revision 169195 (this should agree with "nss_rev" in DEPS).
 {
   # Added by Dart. All Dart comments refer to the following block or line.
   'includes': [
@@ -33,7 +33,7 @@
   'conditions': [[ 'dart_io_support==1', {
   'targets': [
     {
-      'target_name': 'zlib_dart',
+      'target_name': 'zlib_dart',  # Added by Dart (the _dart postfix)
       'type': 'static_library',
       'conditions': [
         ['use_system_zlib==0', {
@@ -96,7 +96,7 @@
       ],
     },
     {
-      'target_name': 'minizip_dart',
+      'target_name': 'minizip_dart',  # Added by Dart (the _dart postfix)
       'type': 'static_library',
       'conditions': [
         ['use_system_minizip==0', {
diff --git a/runtime/bin/platform_win.cc b/runtime/bin/platform_win.cc
index 0af539d..750caa6 100644
--- a/runtime/bin/platform_win.cc
+++ b/runtime/bin/platform_win.cc
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include "bin/platform.h"
+#include "bin/log.h"
 #include "bin/socket.h"
 
 bool Platform::Initialize() {
@@ -73,7 +74,7 @@
                     NULL);
   if (message_size == 0) {
     if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
-      fprintf(stderr, "FormatMessage failed %d\n", GetLastError());
+      Log::PrintErr("FormatMessage failed %d\n", GetLastError());
     }
     snprintf(error, kBufferSize, "OS Error %d", error_code);
   }
diff --git a/runtime/bin/process_android.cc b/runtime/bin/process_android.cc
index c834988..3d593e2 100644
--- a/runtime/bin/process_android.cc
+++ b/runtime/bin/process_android.cc
@@ -15,6 +15,7 @@
 #include <unistd.h>
 
 #include "bin/fdutils.h"
+#include "bin/log.h"
 #include "bin/thread.h"
 
 
@@ -326,16 +327,15 @@
   bool initialized = ExitCodeHandler::EnsureInitialized();
   if (!initialized) {
     SetChildOsErrorMessage(os_error_message, os_error_message_len);
-    fprintf(stderr,
-            "Error initializing exit code handler: %s\n",
-            os_error_message);
+    Log::PrintErr("Error initializing exit code handler: %s\n",
+                 os_error_message);
     return errno;
   }
 
   result = TEMP_FAILURE_RETRY(pipe(read_in));
   if (result < 0) {
     SetChildOsErrorMessage(os_error_message, os_error_message_len);
-    fprintf(stderr, "Error pipe creation failed: %s\n", os_error_message);
+    Log::PrintErr("Error pipe creation failed: %s\n", os_error_message);
     return errno;
   }
 
@@ -344,7 +344,7 @@
     SetChildOsErrorMessage(os_error_message, os_error_message_len);
     TEMP_FAILURE_RETRY(close(read_in[0]));
     TEMP_FAILURE_RETRY(close(read_in[1]));
-    fprintf(stderr, "Error pipe creation failed: %s\n", os_error_message);
+    Log::PrintErr("Error pipe creation failed: %s\n", os_error_message);
     return errno;
   }
 
@@ -355,7 +355,7 @@
     TEMP_FAILURE_RETRY(close(read_in[1]));
     TEMP_FAILURE_RETRY(close(read_err[0]));
     TEMP_FAILURE_RETRY(close(read_err[1]));
-    fprintf(stderr, "Error pipe creation failed: %s\n", os_error_message);
+    Log::PrintErr("Error pipe creation failed: %s\n", os_error_message);
     return errno;
   }
 
@@ -368,7 +368,7 @@
     TEMP_FAILURE_RETRY(close(read_err[1]));
     TEMP_FAILURE_RETRY(close(write_out[0]));
     TEMP_FAILURE_RETRY(close(write_out[1]));
-    fprintf(stderr, "Error pipe creation failed: %s\n", os_error_message);
+    Log::PrintErr("Error pipe creation failed: %s\n", os_error_message);
     return errno;
   }
 
@@ -387,7 +387,7 @@
     TEMP_FAILURE_RETRY(close(write_out[1]));
     TEMP_FAILURE_RETRY(close(exec_control[0]));
     TEMP_FAILURE_RETRY(close(exec_control[1]));
-    fprintf(stderr, "fcntl failed: %s\n", os_error_message);
+    Log::PrintErr("fcntl failed: %s\n", os_error_message);
     return errno;
   }
 
@@ -488,7 +488,7 @@
     TEMP_FAILURE_RETRY(close(read_err[1]));
     TEMP_FAILURE_RETRY(close(write_out[0]));
     TEMP_FAILURE_RETRY(close(write_out[1]));
-    fprintf(stderr, "Error pipe creation failed: %s\n", os_error_message);
+    Log::PrintErr("Error pipe creation failed: %s\n", os_error_message);
     return errno;
   }
 
diff --git a/runtime/bin/process_linux.cc b/runtime/bin/process_linux.cc
index ffc5c88..bd4ed87 100644
--- a/runtime/bin/process_linux.cc
+++ b/runtime/bin/process_linux.cc
@@ -15,6 +15,7 @@
 #include <unistd.h>
 
 #include "bin/fdutils.h"
+#include "bin/log.h"
 #include "bin/thread.h"
 
 extern char **environ;
@@ -327,7 +328,7 @@
   bool initialized = ExitCodeHandler::EnsureInitialized();
   if (!initialized) {
     SetChildOsErrorMessage(os_error_message, os_error_message_len);
-    fprintf(stderr,
+    Log::PrintErr(
             "Error initializing exit code handler: %s\n",
             os_error_message);
     return errno;
@@ -336,7 +337,7 @@
   result = TEMP_FAILURE_RETRY(pipe(read_in));
   if (result < 0) {
     SetChildOsErrorMessage(os_error_message, os_error_message_len);
-    fprintf(stderr, "Error pipe creation failed: %s\n", os_error_message);
+    Log::PrintErr("Error pipe creation failed: %s\n", os_error_message);
     return errno;
   }
 
@@ -345,7 +346,7 @@
     SetChildOsErrorMessage(os_error_message, os_error_message_len);
     TEMP_FAILURE_RETRY(close(read_in[0]));
     TEMP_FAILURE_RETRY(close(read_in[1]));
-    fprintf(stderr, "Error pipe creation failed: %s\n", os_error_message);
+    Log::PrintErr("Error pipe creation failed: %s\n", os_error_message);
     return errno;
   }
 
@@ -356,7 +357,7 @@
     TEMP_FAILURE_RETRY(close(read_in[1]));
     TEMP_FAILURE_RETRY(close(read_err[0]));
     TEMP_FAILURE_RETRY(close(read_err[1]));
-    fprintf(stderr, "Error pipe creation failed: %s\n", os_error_message);
+    Log::PrintErr("Error pipe creation failed: %s\n", os_error_message);
     return errno;
   }
 
@@ -369,7 +370,7 @@
     TEMP_FAILURE_RETRY(close(read_err[1]));
     TEMP_FAILURE_RETRY(close(write_out[0]));
     TEMP_FAILURE_RETRY(close(write_out[1]));
-    fprintf(stderr, "Error pipe creation failed: %s\n", os_error_message);
+    Log::PrintErr("Error pipe creation failed: %s\n", os_error_message);
     return errno;
   }
 
@@ -388,7 +389,7 @@
     TEMP_FAILURE_RETRY(close(write_out[1]));
     TEMP_FAILURE_RETRY(close(exec_control[0]));
     TEMP_FAILURE_RETRY(close(exec_control[1]));
-    fprintf(stderr, "fcntl failed: %s\n", os_error_message);
+    Log::PrintErr("fcntl failed: %s\n", os_error_message);
     return errno;
   }
 
@@ -487,7 +488,7 @@
     TEMP_FAILURE_RETRY(close(read_err[1]));
     TEMP_FAILURE_RETRY(close(write_out[0]));
     TEMP_FAILURE_RETRY(close(write_out[1]));
-    fprintf(stderr, "Error pipe creation failed: %s\n", os_error_message);
+    Log::PrintErr("Error pipe creation failed: %s\n", os_error_message);
     return errno;
   }
 
diff --git a/runtime/bin/process_macos.cc b/runtime/bin/process_macos.cc
index 11aac9f..aa15940 100644
--- a/runtime/bin/process_macos.cc
+++ b/runtime/bin/process_macos.cc
@@ -14,6 +14,7 @@
 #include <unistd.h>
 
 #include "bin/fdutils.h"
+#include "bin/log.h"
 #include "bin/thread.h"
 
 extern char **environ;
@@ -326,16 +327,15 @@
   bool initialized = ExitCodeHandler::EnsureInitialized();
   if (!initialized) {
     SetChildOsErrorMessage(os_error_message, os_error_message_len);
-    fprintf(stderr,
-            "Error initializing exit code handler: %s\n",
-            os_error_message);
+    Log::PrintErr("Error initializing exit code handler: %s\n",
+                       os_error_message);
     return errno;
   }
 
   result = TEMP_FAILURE_RETRY(pipe(read_in));
   if (result < 0) {
     SetChildOsErrorMessage(os_error_message, os_error_message_len);
-    fprintf(stderr, "Error pipe creation failed: %s\n", os_error_message);
+    Log::PrintErr("Error pipe creation failed: %s\n", os_error_message);
     return errno;
   }
 
@@ -344,7 +344,7 @@
     SetChildOsErrorMessage(os_error_message, os_error_message_len);
     TEMP_FAILURE_RETRY(close(read_in[0]));
     TEMP_FAILURE_RETRY(close(read_in[1]));
-    fprintf(stderr, "Error pipe creation failed: %s\n", os_error_message);
+    Log::PrintErr("Error pipe creation failed: %s\n", os_error_message);
     return errno;
   }
 
@@ -355,7 +355,7 @@
     TEMP_FAILURE_RETRY(close(read_in[1]));
     TEMP_FAILURE_RETRY(close(read_err[0]));
     TEMP_FAILURE_RETRY(close(read_err[1]));
-    fprintf(stderr, "Error pipe creation failed: %s\n", os_error_message);
+    Log::PrintErr("Error pipe creation failed: %s\n", os_error_message);
     return errno;
   }
 
@@ -368,7 +368,7 @@
     TEMP_FAILURE_RETRY(close(read_err[1]));
     TEMP_FAILURE_RETRY(close(write_out[0]));
     TEMP_FAILURE_RETRY(close(write_out[1]));
-    fprintf(stderr, "Error pipe creation failed: %s\n", os_error_message);
+    Log::PrintErr("Error pipe creation failed: %s\n", os_error_message);
     return errno;
   }
 
@@ -387,7 +387,7 @@
     TEMP_FAILURE_RETRY(close(write_out[1]));
     TEMP_FAILURE_RETRY(close(exec_control[0]));
     TEMP_FAILURE_RETRY(close(exec_control[1]));
-    fprintf(stderr, "fcntl failed: %s\n", os_error_message);
+    Log::PrintErr("fcntl failed: %s\n", os_error_message);
     return errno;
   }
 
@@ -486,7 +486,7 @@
     TEMP_FAILURE_RETRY(close(read_err[1]));
     TEMP_FAILURE_RETRY(close(write_out[0]));
     TEMP_FAILURE_RETRY(close(write_out[1]));
-    fprintf(stderr, "Error pipe creation failed: %s\n", os_error_message);
+    Log::PrintErr("Error pipe creation failed: %s\n", os_error_message);
     return errno;
   }
 
diff --git a/runtime/bin/process_win.cc b/runtime/bin/process_win.cc
index 3094176..0a9eb52 100644
--- a/runtime/bin/process_win.cc
+++ b/runtime/bin/process_win.cc
@@ -7,6 +7,7 @@
 #include "bin/builtin.h"
 #include "bin/process.h"
 #include "bin/eventhandler.h"
+#include "bin/log.h"
 #include "bin/thread.h"
 #include "bin/utils.h"
 #include "platform/globals.h"
@@ -221,7 +222,7 @@
                         NULL);
 
     if (handles[kWriteHandle] == INVALID_HANDLE_VALUE) {
-      fprintf(stderr, "CreateNamedPipe failed %d\n", GetLastError());
+      Log::PrintErr("CreateNamedPipe failed %d\n", GetLastError());
       return false;
     }
 
@@ -234,7 +235,7 @@
                    FILE_READ_ATTRIBUTES | FILE_FLAG_OVERLAPPED,
                    NULL);
     if (handles[kReadHandle] == INVALID_HANDLE_VALUE) {
-      fprintf(stderr, "CreateFile failed %d\n", GetLastError());
+      Log::PrintErr("CreateFile failed %d\n", GetLastError());
       return false;
     }
   } else {
@@ -250,7 +251,7 @@
                         NULL);
 
     if (handles[kReadHandle] == INVALID_HANDLE_VALUE) {
-      fprintf(stderr, "CreateNamedPipe failed %d\n", GetLastError());
+      Log::PrintErr("CreateNamedPipe failed %d\n", GetLastError());
       return false;
     }
 
@@ -263,7 +264,7 @@
                    FILE_WRITE_ATTRIBUTES | FILE_FLAG_OVERLAPPED,
                    NULL);
     if (handles[kWriteHandle] == INVALID_HANDLE_VALUE) {
-      fprintf(stderr, "CreateFile failed %d\n", GetLastError());
+      Log::PrintErr("CreateFile failed %d\n", GetLastError());
       return false;
     }
   }
@@ -275,7 +276,7 @@
   for (int i = kReadHandle; i < kWriteHandle; i++) {
     if (handles[i] != INVALID_HANDLE_VALUE) {
       if (!CloseHandle(handles[i])) {
-        fprintf(stderr, "CloseHandle failed %d\n", GetLastError());
+        Log::PrintErr("CloseHandle failed %d\n", GetLastError());
       }
       handles[i] = INVALID_HANDLE_VALUE;
     }
@@ -306,7 +307,7 @@
                     NULL);
   if (message_size == 0) {
     if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
-      fprintf(stderr, "FormatMessage failed %d\n", GetLastError());
+      Log::PrintErr("FormatMessage failed %d\n", GetLastError());
     }
     snprintf(os_error_message, os_error_message_len, "OS Error %d", error_code);
   }
@@ -338,14 +339,14 @@
   UUID uuid;
   RPC_STATUS status = UuidCreateSequential(&uuid);
   if (status != RPC_S_OK && status != RPC_S_UUID_LOCAL_ONLY) {
-    fprintf(stderr, "UuidCreateSequential failed %d\n", status);
+    Log::PrintErr("UuidCreateSequential failed %d\n", status);
     SetOsErrorMessage(os_error_message, os_error_message_len);
     return status;
   }
   RPC_CSTR uuid_string;
   status = UuidToString(&uuid, &uuid_string);
   if (status != RPC_S_OK) {
-    fprintf(stderr, "UuidToString failed %d\n", status);
+    Log::PrintErr("UuidToString failed %d\n", status);
     SetOsErrorMessage(os_error_message, os_error_message_len);
     return status;
   }
@@ -357,7 +358,7 @@
   }
   status = RpcStringFree(&uuid_string);
   if (status != RPC_S_OK) {
-    fprintf(stderr, "RpcStringFree failed %d\n", status);
+    Log::PrintErr("RpcStringFree failed %d\n", status);
     SetOsErrorMessage(os_error_message, os_error_message_len);
     return status;
   }
diff --git a/runtime/bin/run_vm_tests.cc b/runtime/bin/run_vm_tests.cc
index f539d31..d73b046 100644
--- a/runtime/bin/run_vm_tests.cc
+++ b/runtime/bin/run_vm_tests.cc
@@ -138,8 +138,8 @@
   bool set_vm_flags_success = Flags::ProcessCommandLineFlags(dart_argc,
                                                              dart_argv);
   ASSERT(set_vm_flags_success);
-  bool init_success = Dart::InitOnce(NULL, NULL, NULL);
-  ASSERT(init_success);
+  const char* err_msg = Dart::InitOnce(NULL, NULL, NULL);
+  ASSERT(err_msg == NULL);
   // Apply the filter to all registered tests.
   TestCaseBase::RunAll();
   // Apply the filter to all registered benchmarks.
diff --git a/runtime/bin/secure_socket.cc b/runtime/bin/secure_socket.cc
new file mode 100644
index 0000000..f297aed
--- /dev/null
+++ b/runtime/bin/secure_socket.cc
@@ -0,0 +1,484 @@
+// Copyright (c) 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.
+
+#include "bin/secure_socket.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <nss.h>
+#include <pk11pub.h>
+#include <prerror.h>
+#include <prinit.h>
+#include <prnetdb.h>
+#include <ssl.h>
+#include <sslproto.h>
+
+#include "bin/builtin.h"
+#include "bin/dartutils.h"
+#include "bin/net/nss_memio.h"
+#include "bin/thread.h"
+#include "bin/utils.h"
+#include "platform/utils.h"
+
+#include "include/dart_api.h"
+
+bool SSLFilter::library_initialized_ = false;
+dart::Mutex SSLFilter::mutex_;  // To protect library initialization.
+// The password is needed when creating secure server sockets.  It can
+// be null if only secure client sockets are used.
+const char* SSLFilter::password_ = NULL;
+
+static const int kSSLFilterNativeFieldIndex = 0;
+
+static SSLFilter* GetFilter(Dart_NativeArguments args) {
+  SSLFilter* filter;
+  Dart_Handle dart_this = ThrowIfError(Dart_GetNativeArgument(args, 0));
+  ASSERT(Dart_IsInstance(dart_this));
+  ThrowIfError(Dart_GetNativeInstanceField(
+      dart_this,
+      kSSLFilterNativeFieldIndex,
+      reinterpret_cast<intptr_t*>(&filter)));
+  return filter;
+}
+
+
+static void SetFilter(Dart_NativeArguments args, SSLFilter* filter) {
+  Dart_Handle dart_this = ThrowIfError(Dart_GetNativeArgument(args, 0));
+  ASSERT(Dart_IsInstance(dart_this));
+  ThrowIfError(Dart_SetNativeInstanceField(
+      dart_this,
+      kSSLFilterNativeFieldIndex,
+      reinterpret_cast<intptr_t>(filter)));
+}
+
+
+void FUNCTION_NAME(SecureSocket_Init)(Dart_NativeArguments args) {
+  Dart_EnterScope();
+  Dart_Handle dart_this = ThrowIfError(Dart_GetNativeArgument(args, 0));
+  SSLFilter* filter = new SSLFilter;
+  SetFilter(args, filter);
+  filter->Init(dart_this);
+  Dart_ExitScope();
+}
+
+
+void FUNCTION_NAME(SecureSocket_Connect)(Dart_NativeArguments args) {
+  Dart_EnterScope();
+  Dart_Handle host_name_object = ThrowIfError(Dart_GetNativeArgument(args, 1));
+  Dart_Handle port_object = ThrowIfError(Dart_GetNativeArgument(args, 2));
+  Dart_Handle is_server_object = ThrowIfError(Dart_GetNativeArgument(args, 3));
+  Dart_Handle certificate_name_object =
+      ThrowIfError(Dart_GetNativeArgument(args, 4));
+
+  const char* host_name = NULL;
+  // TODO(whesse): Is truncating a Dart string containing \0 what we want?
+  ThrowIfError(Dart_StringToCString(host_name_object, &host_name));
+
+  int64_t port;
+  if (!DartUtils::GetInt64Value(port_object, &port) ||
+      port < 0 || port > 65535) {
+    Dart_ThrowException(DartUtils::NewDartArgumentError(
+      "Illegal port parameter in _SSLFilter.connect"));
+  }
+
+  if (!Dart_IsBoolean(is_server_object)) {
+    Dart_ThrowException(DartUtils::NewDartArgumentError(
+      "Illegal is_server parameter in _SSLFilter.connect"));
+  }
+  bool is_server = DartUtils::GetBooleanValue(is_server_object);
+
+  const char* certificate_name = NULL;
+  // If this is a server connection, get the certificate to connect with.
+  // TODO(whesse): Use this parameter for a client certificate as well.
+  if (is_server) {
+    if (!Dart_IsString(certificate_name_object)) {
+      Dart_ThrowException(DartUtils::NewDartArgumentError(
+          "Non-String certificate parameter in _SSLFilter.connect"));
+    }
+    ThrowIfError(Dart_StringToCString(certificate_name_object,
+                                      &certificate_name));
+  }
+
+  GetFilter(args)->Connect(host_name,
+                              static_cast<int>(port),
+                              is_server,
+                              certificate_name);
+  Dart_ExitScope();
+}
+
+
+void FUNCTION_NAME(SecureSocket_Destroy)(Dart_NativeArguments args) {
+  Dart_EnterScope();
+  SSLFilter* filter = GetFilter(args);
+  SetFilter(args, NULL);
+  filter->Destroy();
+  delete filter;
+  Dart_ExitScope();
+}
+
+
+void FUNCTION_NAME(SecureSocket_Handshake)(Dart_NativeArguments args) {
+  Dart_EnterScope();
+  GetFilter(args)->Handshake();
+  Dart_ExitScope();
+}
+
+
+void FUNCTION_NAME(SecureSocket_RegisterHandshakeCompleteCallback)(
+    Dart_NativeArguments args) {
+  Dart_EnterScope();
+  Dart_Handle handshake_complete =
+      ThrowIfError(Dart_GetNativeArgument(args, 1));
+  if (!Dart_IsClosure(handshake_complete)) {
+    Dart_ThrowException(DartUtils::NewDartArgumentError(
+        "Illegal argument to RegisterHandshakeCompleteCallback"));
+  }
+  GetFilter(args)->RegisterHandshakeCompleteCallback(handshake_complete);
+  Dart_ExitScope();
+}
+
+
+void FUNCTION_NAME(SecureSocket_ProcessBuffer)(Dart_NativeArguments args) {
+  Dart_EnterScope();
+  Dart_Handle buffer_id_object = ThrowIfError(Dart_GetNativeArgument(args, 1));
+  int64_t buffer_id = DartUtils::GetIntegerValue(buffer_id_object);
+  if (buffer_id < 0 || buffer_id >= SSLFilter::kNumBuffers) {
+    Dart_ThrowException(DartUtils::NewDartArgumentError(
+        "Illegal argument to ProcessBuffer"));
+  }
+
+  intptr_t bytes_read =
+      GetFilter(args)->ProcessBuffer(static_cast<int>(buffer_id));
+  Dart_SetReturnValue(args, Dart_NewInteger(bytes_read));
+  Dart_ExitScope();
+}
+
+
+void FUNCTION_NAME(SecureSocket_SetCertificateDatabase)
+    (Dart_NativeArguments args) {
+  Dart_EnterScope();
+  Dart_Handle certificate_database_object =
+      ThrowIfError(Dart_GetNativeArgument(args, 0));
+  // Check that the type is string, and get the UTF-8 C string value from it.
+  const char* certificate_database = NULL;
+  if (Dart_IsString(certificate_database_object)) {
+    ThrowIfError(Dart_StringToCString(certificate_database_object,
+                                      &certificate_database));
+  } else {
+    Dart_ThrowException(DartUtils::NewDartArgumentError(
+        "Non-String certificate directory argument to SetCertificateDatabase"));
+  }
+
+  Dart_Handle password_object = ThrowIfError(Dart_GetNativeArgument(args, 1));
+  // Check that the type is string or null,
+  // and get the UTF-8 C string value from it.
+  const char* password = NULL;
+  if (Dart_IsString(password_object)) {
+    ThrowIfError(Dart_StringToCString(password_object, &password));
+  } else if (Dart_IsNull(password_object)) {
+    // Pass the empty string as the password.
+    password = "";
+  } else {
+    Dart_ThrowException(DartUtils::NewDartArgumentError(
+        "Password argument to SetCertificateDatabase is not a String or null"));
+  }
+
+  SSLFilter::InitializeLibrary(certificate_database, password);
+  Dart_ExitScope();
+}
+
+
+void SSLFilter::Init(Dart_Handle dart_this) {
+  string_start_ = ThrowIfError(
+      Dart_NewPersistentHandle(DartUtils::NewString("start")));
+  string_length_ = ThrowIfError(
+      Dart_NewPersistentHandle(DartUtils::NewString("length")));
+
+  InitializeBuffers(dart_this);
+  filter_ = memio_CreateIOLayer(kMemioBufferSize);
+}
+
+
+void SSLFilter::InitializeBuffers(Dart_Handle dart_this) {
+  // Create SSLFilter buffers as ExternalUint8Array objects.
+  Dart_Handle dart_buffers_object = ThrowIfError(
+      Dart_GetField(dart_this, DartUtils::NewString("buffers")));
+  Dart_Handle dart_buffer_object =
+      Dart_ListGetAt(dart_buffers_object, kReadPlaintext);
+  Dart_Handle external_buffer_class =
+      Dart_InstanceGetClass(dart_buffer_object);
+  Dart_Handle dart_buffer_size = ThrowIfError(
+      Dart_GetField(external_buffer_class, DartUtils::NewString("SIZE")));
+  buffer_size_ = DartUtils::GetIntegerValue(dart_buffer_size);
+  if (buffer_size_ <= 0 || buffer_size_ > 1024 * 1024) {
+    Dart_ThrowException(
+        DartUtils::NewString("Invalid buffer size in _ExternalBuffer"));
+  }
+
+  Dart_Handle data_identifier = DartUtils::NewString("data");
+  for (int i = 0; i < kNumBuffers; ++i) {
+    dart_buffer_objects_[i] = ThrowIfError(
+        Dart_NewPersistentHandle(Dart_ListGetAt(dart_buffers_object, i)));
+    buffers_[i] = new uint8_t[buffer_size_];
+    Dart_Handle data = ThrowIfError(
+      Dart_NewExternalByteArray(buffers_[i], buffer_size_, NULL, NULL));
+    ThrowIfError(Dart_SetField(dart_buffer_objects_[i],
+                               data_identifier,
+                               data));
+  }
+}
+
+
+void SSLFilter::RegisterHandshakeCompleteCallback(Dart_Handle complete) {
+  ASSERT(NULL == handshake_complete_);
+  handshake_complete_ = ThrowIfError(Dart_NewPersistentHandle(complete));
+}
+
+
+void SSLFilter::InitializeLibrary(const char* certificate_database,
+                                  const char* password) {
+  MutexLocker locker(&mutex_);
+  if (!library_initialized_) {
+    library_initialized_ = true;
+    password_ = strdup(password);  // This one copy persists until Dart exits.
+    PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 0);
+    // TODO(whesse): Verify there are no UTF-8 issues here.
+    SECStatus status = NSS_Init(certificate_database);
+    if (status != SECSuccess) {
+      ThrowPRException("Unsuccessful NSS_Init call.");
+    }
+
+    status = NSS_SetDomesticPolicy();
+    if (status != SECSuccess) {
+      ThrowPRException("Unsuccessful NSS_SetDomesticPolicy call.");
+    }
+    // Enable TLS, as well as SSL3 and SSL2.
+    status = SSL_OptionSetDefault(SSL_ENABLE_TLS, PR_TRUE);
+    if (status != SECSuccess) {
+      ThrowPRException("Unsuccessful SSL_OptionSetDefault enable TLS call.");
+    }
+  } else {
+    ThrowException("Called SSLFilter::InitializeLibrary more than once");
+  }
+}
+
+char* PasswordCallback(PK11SlotInfo* slot, PRBool retry, void* arg) {
+  if (!retry) {
+    return PL_strdup(static_cast<char*>(arg));  // Freed by NSS internals.
+  }
+  return NULL;
+}
+
+void SSLFilter::Connect(const char* host_name,
+                        int port,
+                        bool is_server,
+                        const char* certificate_name) {
+  is_server_ = is_server;
+  if (in_handshake_) {
+    ThrowException("Connect called while already in handshake state.");
+  }
+
+  filter_ = SSL_ImportFD(NULL, filter_);
+  if (filter_ == NULL) {
+    ThrowPRException("Unsuccessful SSL_ImportFD call");
+  }
+
+  SECStatus status;
+  if (is_server) {
+    PK11_SetPasswordFunc(PasswordCallback);
+    CERTCertDBHandle* certificate_database = CERT_GetDefaultCertDB();
+    if (certificate_database == NULL) {
+      ThrowPRException("Certificate database cannot be loaded");
+    }
+    CERTCertificate* certificate = CERT_FindCertByNameString(
+        certificate_database,
+        const_cast<char*>(certificate_name));
+    if (certificate == NULL) {
+      ThrowPRException("Cannot find server certificate by name");
+    }
+    SECKEYPrivateKey* key = PK11_FindKeyByAnyCert(
+        certificate,
+        static_cast<void*>(const_cast<char*>(password_)));
+    if (key == NULL) {
+      if (PR_GetError() == -8177) {
+        ThrowPRException("Certificate database password incorrect");
+      } else {
+        ThrowPRException("Unsuccessful PK11_FindKeyByAnyCert call."
+                         " Cannot find private key for certificate");
+      }
+    }
+    // kt_rsa (key type RSA) is an enum constant from the NSS libraries.
+    // TODO(whesse): Allow different key types.
+    status = SSL_ConfigSecureServer(filter_, certificate, key, kt_rsa);
+    if (status != SECSuccess) {
+      ThrowPRException("Unsuccessful SSL_ConfigSecureServer call");
+    }
+  } else {  // Client.
+    if (SSL_SetURL(filter_, host_name) == -1) {
+      ThrowPRException("Unsuccessful SetURL call");
+    }
+  }
+
+  PRBool as_server = is_server ? PR_TRUE : PR_FALSE;  // Convert bool to PRBool.
+  status = SSL_ResetHandshake(filter_, as_server);
+  if (status != SECSuccess) {
+    ThrowPRException("Unsuccessful SSL_ResetHandshake call");
+  }
+
+  // SetPeerAddress
+  PRNetAddr host_address;
+  char host_entry_buffer[PR_NETDB_BUF_SIZE];
+  PRHostEnt host_entry;
+  PRStatus rv = PR_GetHostByName(host_name, host_entry_buffer,
+                                 PR_NETDB_BUF_SIZE, &host_entry);
+  if (rv != PR_SUCCESS) {
+    ThrowPRException("Unsuccessful PR_GetHostByName call");
+  }
+
+  int index = PR_EnumerateHostEnt(0, &host_entry, port, &host_address);
+  if (index == -1 || index == 0) {
+    ThrowPRException("Unsuccessful PR_EnumerateHostEnt call");
+  }
+  memio_SetPeerName(filter_, &host_address);
+}
+
+
+void SSLFilter::Handshake() {
+  SECStatus status = SSL_ForceHandshake(filter_);
+  if (status == SECSuccess) {
+    if (in_handshake_) {
+      ThrowIfError(Dart_InvokeClosure(handshake_complete_, 0, NULL));
+      in_handshake_ = false;
+    }
+  } else {
+    PRErrorCode error = PR_GetError();
+    if (error == PR_WOULD_BLOCK_ERROR) {
+      if (!in_handshake_) {
+        in_handshake_ = true;
+      }
+    } else {
+      if (is_server_) {
+        ThrowPRException("Unexpected handshake error in server");
+      } else {
+        ThrowPRException("Unexpected handshake error in client");
+      }
+    }
+  }
+}
+
+
+void SSLFilter::Destroy() {
+  for (int i = 0; i < kNumBuffers; ++i) {
+    Dart_DeletePersistentHandle(dart_buffer_objects_[i]);
+    delete[] buffers_[i];
+  }
+  Dart_DeletePersistentHandle(string_start_);
+  Dart_DeletePersistentHandle(string_length_);
+  Dart_DeletePersistentHandle(handshake_complete_);
+  // TODO(whesse): Free NSS objects here.
+}
+
+
+intptr_t SSLFilter::ProcessBuffer(int buffer_index) {
+  Dart_Handle buffer_object = dart_buffer_objects_[buffer_index];
+  Dart_Handle start_object = ThrowIfError(
+      Dart_GetField(buffer_object, string_start_));
+  Dart_Handle length_object = ThrowIfError(
+      Dart_GetField(buffer_object, string_length_));
+  int64_t unsafe_start = DartUtils::GetIntegerValue(start_object);
+  int64_t unsafe_length = DartUtils::GetIntegerValue(length_object);
+  ASSERT(unsafe_start >= 0);
+  ASSERT(unsafe_start < buffer_size_);
+  ASSERT(unsafe_length >= 0);
+  ASSERT(unsafe_length <= buffer_size_);
+  intptr_t start = static_cast<intptr_t>(unsafe_start);
+  intptr_t length = static_cast<intptr_t>(unsafe_length);
+  uint8_t* buffer = buffers_[buffer_index];
+
+  int bytes_processed = 0;
+  switch (buffer_index) {
+    case kReadPlaintext: {
+      int bytes_free = buffer_size_ - start - length;
+      bytes_processed = PR_Read(filter_,
+                                buffer + start + length,
+                                bytes_free);
+      if (bytes_processed < 0) {
+        ASSERT(bytes_processed == -1);
+        // TODO(whesse): Handle unexpected errors here.
+        PRErrorCode pr_error = PR_GetError();
+        if (PR_WOULD_BLOCK_ERROR != pr_error) {
+          ThrowPRException("Error reading plaintext from SSLFilter");
+        }
+        bytes_processed = 0;
+      }
+      break;
+    }
+
+    case kWriteEncrypted: {
+      const uint8_t* buf1;
+      const uint8_t* buf2;
+      unsigned int len1;
+      unsigned int len2;
+      int bytes_free = buffer_size_ - start - length;
+      memio_Private* secret = memio_GetSecret(filter_);
+      memio_GetWriteParams(secret, &buf1, &len1, &buf2, &len2);
+      int bytes_to_send =
+          dart::Utils::Minimum(len1, static_cast<unsigned>(bytes_free));
+      if (bytes_to_send > 0) {
+        memmove(buffer + start + length, buf1, bytes_to_send);
+        bytes_processed = bytes_to_send;
+      }
+      bytes_to_send = dart::Utils::Minimum(len2,
+          static_cast<unsigned>(bytes_free - bytes_processed));
+      if (bytes_to_send > 0) {
+        memmove(buffer + start + length + bytes_processed, buf2,
+                bytes_to_send);
+        bytes_processed += bytes_to_send;
+      }
+      if (bytes_processed > 0) {
+        memio_PutWriteResult(secret, bytes_processed);
+      }
+      break;
+    }
+
+    case kReadEncrypted: {
+      if (length > 0) {
+        bytes_processed = length;
+        memio_Private* secret = memio_GetSecret(filter_);
+        uint8_t* filter_buf;
+        int free_bytes = memio_GetReadParams(secret, &filter_buf);
+        if (free_bytes < bytes_processed) bytes_processed = free_bytes;
+        memmove(filter_buf,
+                buffer + start,
+                bytes_processed);
+        memio_PutReadResult(secret, bytes_processed);
+      }
+      break;
+    }
+
+    case kWritePlaintext: {
+      if (length > 0) {
+        bytes_processed = PR_Write(filter_,
+                                   buffer + start,
+                                   length);
+      }
+
+      if (bytes_processed < 0) {
+        ASSERT(bytes_processed == -1);
+        // TODO(whesse): Handle unexpected errors here.
+        PRErrorCode pr_error = PR_GetError();
+        if (PR_WOULD_BLOCK_ERROR != pr_error) {
+          ThrowPRException("Error reading plaintext from SSLFilter");
+        }
+        bytes_processed = 0;
+      }
+      break;
+    }
+  }
+  return bytes_processed;
+}
diff --git a/runtime/bin/tls_socket.h b/runtime/bin/secure_socket.h
similarity index 77%
rename from runtime/bin/tls_socket.h
rename to runtime/bin/secure_socket.h
index fc39b70..22ef7dc 100644
--- a/runtime/bin/tls_socket.h
+++ b/runtime/bin/secure_socket.h
@@ -2,8 +2,8 @@
 // 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.
 
-#ifndef BIN_TLS_SOCKET_H_
-#define BIN_TLS_SOCKET_H_
+#ifndef BIN_SECURE_SOCKET_H_
+#define BIN_SECURE_SOCKET_H_
 
 #include <stdlib.h>
 #include <string.h>
@@ -44,15 +44,15 @@
 }
 
 /*
- * TlsFilter encapsulates the NSS SSL(TLS) code in a filter, that communicates
- * with the containing _TlsFilterImpl Dart object through four shared
+ * SSLFilter encapsulates the NSS SSL(TLS) code in a filter, that communicates
+ * with the containing _SecureFilterImpl Dart object through four shared
  * ExternalByteArray buffers, for reading and writing plaintext, and
  * reading and writing encrypted text.  The filter handles handshaking
  * and certificate verification.
  */
-class TlsFilter {
+class SSLFilter {
  public:
-  // These enums must agree with those in sdk/lib/io/tls_socket.dart.
+  // These enums must agree with those in sdk/lib/io/secure_socket.dart.
   enum BufferIndex {
     kReadPlaintext,
     kWritePlaintext,
@@ -61,26 +61,30 @@
     kNumBuffers
   };
 
-  TlsFilter()
+  SSLFilter()
       : string_start_(NULL),
         string_length_(NULL),
         handshake_complete_(NULL),
         in_handshake_(false),
-        memio_(NULL) { }
+        filter_(NULL) { }
 
   void Init(Dart_Handle dart_this);
-  void Connect(const char* host, int port);
+  void Connect(const char* host,
+               int port,
+               bool is_server,
+               const char* certificate_name);
   void Destroy();
-  void DestroyPlatformIndependent();
   void Handshake();
   void RegisterHandshakeCompleteCallback(Dart_Handle handshake_complete);
-  static void InitializeLibrary(const char* pkcert_directory);
+  static void InitializeLibrary(const char* certificate_database,
+                                const char* password);
 
   intptr_t ProcessBuffer(int bufferIndex);
 
  private:
   static const int kMemioBufferSize = 20 * KB;
   static bool library_initialized_;
+  static const char* password_;
   static dart::Mutex mutex_;  // To protect library initialization.
 
   uint8_t* buffers_[kNumBuffers];
@@ -90,12 +94,13 @@
   Dart_Handle dart_buffer_objects_[kNumBuffers];
   Dart_Handle handshake_complete_;
   bool in_handshake_;
-  PRFileDesc* memio_;
+  bool is_server_;
+  PRFileDesc* filter_;
 
   void InitializeBuffers(Dart_Handle dart_this);
   void InitializePlatformData();
 
-  DISALLOW_COPY_AND_ASSIGN(TlsFilter);
+  DISALLOW_COPY_AND_ASSIGN(SSLFilter);
 };
 
-#endif  // BIN_TLS_SOCKET_H_
+#endif  // BIN_SECURE_SOCKET_H_
diff --git a/runtime/bin/secure_socket_patch.dart b/runtime/bin/secure_socket_patch.dart
new file mode 100644
index 0000000..34edc7e
--- /dev/null
+++ b/runtime/bin/secure_socket_patch.dart
@@ -0,0 +1,58 @@
+// Copyright (c) 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.
+
+patch class SecureSocket {
+  /* patch */ static void setCertificateDatabase(String certificateDatabase,
+                                                 [String password])
+      native "SecureSocket_SetCertificateDatabase";
+}
+
+
+patch class _SecureFilter {
+  /* patch */ factory _SecureFilter() => new _SecureFilterImpl();
+}
+
+
+/**
+ * _SecureFilterImpl wraps a filter that encrypts and decrypts data travelling
+ * over an encrypted socket.  The filter also handles the handshaking
+ * and certificate verification.
+ *
+ * The filter exposes its input and output buffers as Dart objects that
+ * are backed by an external C array of bytes, so that both Dart code and
+ * native code can access the same data.
+ */
+class _SecureFilterImpl
+    extends NativeFieldWrapperClass1
+    implements _SecureFilter {
+  _SecureFilterImpl() {
+    buffers = new List<_ExternalBuffer>(_SecureSocket.NUM_BUFFERS);
+    for (int i = 0; i < _SecureSocket.NUM_BUFFERS; ++i) {
+      buffers[i] = new _ExternalBuffer();
+    }
+  }
+
+  void connect(String hostName,
+               int port,
+               bool is_server,
+               String certificate_name) native "SecureSocket_Connect";
+
+  void destroy() {
+    buffers = null;
+    _destroy();
+  }
+
+  void _destroy() native "SecureSocket_Destroy";
+
+  void handshake() native "SecureSocket_Handshake";
+
+  void init() native "SecureSocket_Init";
+
+  int processBuffer(int bufferIndex) native "SecureSocket_ProcessBuffer";
+
+  void registerHandshakeCompleteCallback(Function handshakeCompleteHandler)
+      native "SecureSocket_RegisterHandshakeCompleteCallback";
+
+  List<_ExternalBuffer> buffers;
+}
diff --git a/runtime/bin/socket_android.cc b/runtime/bin/socket_android.cc
index eac7d12..cffae9f 100644
--- a/runtime/bin/socket_android.cc
+++ b/runtime/bin/socket_android.cc
@@ -8,8 +8,9 @@
 #include <string.h>
 #include <unistd.h>
 
-#include "bin/fdutils.h"
 #include "bin/socket.h"
+#include "bin/fdutils.h"
+#include "bin/log.h"
 
 
 bool Socket::Initialize() {
@@ -25,7 +26,7 @@
 
   fd = TEMP_FAILURE_RETRY(socket(AF_INET, SOCK_STREAM, 0));
   if (fd < 0) {
-    fprintf(stderr, "Error CreateConnect: %s\n", strerror(errno));
+    Log::PrintErr("Error CreateConnect: %s\n", strerror(errno));
     return -1;
   }
 
@@ -35,7 +36,7 @@
   server = gethostbyname(host);
   if (server == NULL) {
     TEMP_FAILURE_RETRY(close(fd));
-    fprintf(stderr, "Error CreateConnect: %s\n", strerror(errno));
+    Log::PrintErr("Error CreateConnect: %s\n", strerror(errno));
     return -1;
   }
 
@@ -93,7 +94,7 @@
           getsockname(fd,
                       reinterpret_cast<struct sockaddr *>(&socket_address),
                       &size))) {
-    fprintf(stderr, "Error getsockname: %s\n", strerror(errno));
+    Log::PrintErr("Error getsockname: %s\n", strerror(errno));
     return 0;
   }
   return ntohs(socket_address.sin_port);
@@ -108,14 +109,14 @@
           getpeername(fd,
                       reinterpret_cast<struct sockaddr *>(&socket_address),
                       &size))) {
-    fprintf(stderr, "Error getpeername: %s\n", strerror(errno));
+    Log::PrintErr("Error getpeername: %s\n", strerror(errno));
     return false;
   }
   if (inet_ntop(socket_address.sin_family,
                 reinterpret_cast<const void *>(&socket_address.sin_addr),
                 host,
                 INET_ADDRSTRLEN) == NULL) {
-    fprintf(stderr, "Error inet_ntop: %s\n", strerror(errno));
+    Log::PrintErr("Error inet_ntop: %s\n", strerror(errno));
     return false;
   }
   *port = ntohs(socket_address.sin_port);
@@ -185,7 +186,7 @@
 
   fd = TEMP_FAILURE_RETRY(socket(AF_INET, SOCK_STREAM, 0));
   if (fd < 0) {
-    fprintf(stderr, "Error CreateBind: %s\n", strerror(errno));
+    Log::PrintErr("Error CreateBind: %s\n", strerror(errno));
     return -1;
   }
 
@@ -205,12 +206,12 @@
                reinterpret_cast<struct sockaddr *>(&server_address),
                sizeof(server_address))) < 0) {
     TEMP_FAILURE_RETRY(close(fd));
-    fprintf(stderr, "Error Bind: %s\n", strerror(errno));
+    Log::PrintErr("Error Bind: %s\n", strerror(errno));
     return -1;
   }
 
   if (TEMP_FAILURE_RETRY(listen(fd, backlog)) != 0) {
-    fprintf(stderr, "Error Listen: %s\n", strerror(errno));
+    Log::PrintErr("Error Listen: %s\n", strerror(errno));
     return -1;
   }
 
diff --git a/runtime/bin/socket_linux.cc b/runtime/bin/socket_linux.cc
index 89dd267..d8be1dc 100644
--- a/runtime/bin/socket_linux.cc
+++ b/runtime/bin/socket_linux.cc
@@ -9,6 +9,7 @@
 #include <unistd.h>
 
 #include "bin/fdutils.h"
+#include "bin/log.h"
 #include "bin/socket.h"
 
 
@@ -25,7 +26,7 @@
 
   fd = TEMP_FAILURE_RETRY(socket(AF_INET, SOCK_STREAM, 0));
   if (fd < 0) {
-    fprintf(stderr, "Error CreateConnect: %s\n", strerror(errno));
+    Log::PrintErr("Error CreateConnect: %s\n", strerror(errno));
     return -1;
   }
 
@@ -39,7 +40,7 @@
   if (gethostbyname_r(
           host, &server, temp_buf, kTempBufSize, &unused, &err) != 0) {
     TEMP_FAILURE_RETRY(close(fd));
-    fprintf(stderr, "Error CreateConnect: %s\n", strerror(errno));
+    Log::PrintErr("Error CreateConnect: %s\n", strerror(errno));
     return -1;
   }
 
@@ -97,7 +98,7 @@
           getsockname(fd,
                       reinterpret_cast<struct sockaddr *>(&socket_address),
                       &size))) {
-    fprintf(stderr, "Error getsockname: %s\n", strerror(errno));
+    Log::PrintErr("Error getsockname: %s\n", strerror(errno));
     return 0;
   }
   return ntohs(socket_address.sin_port);
@@ -112,14 +113,14 @@
           getpeername(fd,
                       reinterpret_cast<struct sockaddr *>(&socket_address),
                       &size))) {
-    fprintf(stderr, "Error getpeername: %s\n", strerror(errno));
+    Log::PrintErr("Error getpeername: %s\n", strerror(errno));
     return false;
   }
   if (inet_ntop(socket_address.sin_family,
                 reinterpret_cast<const void *>(&socket_address.sin_addr),
                 host,
                 INET_ADDRSTRLEN) == NULL) {
-    fprintf(stderr, "Error inet_ntop: %s\n", strerror(errno));
+    Log::PrintErr("Error inet_ntop: %s\n", strerror(errno));
     return false;
   }
   *port = ntohs(socket_address.sin_port);
@@ -188,7 +189,7 @@
 
   fd = TEMP_FAILURE_RETRY(socket(AF_INET, SOCK_STREAM, 0));
   if (fd < 0) {
-    fprintf(stderr, "Error CreateBind: %s\n", strerror(errno));
+    Log::PrintErr("Error CreateBind: %s\n", strerror(errno));
     return -1;
   }
 
@@ -208,12 +209,12 @@
                reinterpret_cast<struct sockaddr *>(&server_address),
                sizeof(server_address))) < 0) {
     TEMP_FAILURE_RETRY(close(fd));
-    fprintf(stderr, "Error Bind: %s\n", strerror(errno));
+    Log::PrintErr("Error Bind: %s\n", strerror(errno));
     return -1;
   }
 
   if (TEMP_FAILURE_RETRY(listen(fd, backlog)) != 0) {
-    fprintf(stderr, "Error Listen: %s\n", strerror(errno));
+    Log::PrintErr("Error Listen: %s\n", strerror(errno));
     return -1;
   }
 
diff --git a/runtime/bin/socket_macos.cc b/runtime/bin/socket_macos.cc
index 32db433..275169f 100644
--- a/runtime/bin/socket_macos.cc
+++ b/runtime/bin/socket_macos.cc
@@ -9,6 +9,7 @@
 #include <unistd.h>
 
 #include "bin/fdutils.h"
+#include "bin/log.h"
 #include "bin/socket.h"
 
 
@@ -25,7 +26,7 @@
 
   fd = TEMP_FAILURE_RETRY(socket(AF_INET, SOCK_STREAM, 0));
   if (fd < 0) {
-    fprintf(stderr, "Error CreateConnect: %s\n", strerror(errno));
+    Log::PrintErr("Error CreateConnect: %s\n", strerror(errno));
     return -1;
   }
 
@@ -35,7 +36,7 @@
   server = gethostbyname(host);
   if (server == NULL) {
     TEMP_FAILURE_RETRY(close(fd));
-    fprintf(stderr, "Error CreateConnect: %s\n", strerror(errno));
+    Log::PrintErr("Error CreateConnect: %s\n", strerror(errno));
     return -1;
   }
 
@@ -93,7 +94,7 @@
           getsockname(fd,
                       reinterpret_cast<struct sockaddr *>(&socket_address),
                       &size))) {
-    fprintf(stderr, "Error getsockname: %s\n", strerror(errno));
+    Log::PrintErr("Error getsockname: %s\n", strerror(errno));
     return 0;
   }
   return ntohs(socket_address.sin_port);
@@ -108,14 +109,14 @@
           getpeername(fd,
                       reinterpret_cast<struct sockaddr *>(&socket_address),
                       &size))) {
-    fprintf(stderr, "Error getpeername: %s\n", strerror(errno));
+    Log::PrintErr("Error getpeername: %s\n", strerror(errno));
     return false;
   }
   if (inet_ntop(socket_address.sin_family,
                 reinterpret_cast<const void *>(&socket_address.sin_addr),
                 host,
                 INET_ADDRSTRLEN) == NULL) {
-    fprintf(stderr, "Error inet_ntop: %s\n", strerror(errno));
+    Log::PrintErr("Error inet_ntop: %s\n", strerror(errno));
     return false;
   }
   *port = ntohs(socket_address.sin_port);
@@ -184,7 +185,7 @@
 
   fd = TEMP_FAILURE_RETRY(socket(AF_INET, SOCK_STREAM, 0));
   if (fd < 0) {
-    fprintf(stderr, "Error CreateBind: %s\n", strerror(errno));
+    Log::PrintErr("Error CreateBind: %s\n", strerror(errno));
     return -1;
   }
 
@@ -204,12 +205,12 @@
                reinterpret_cast<struct sockaddr *>(&server_address),
                sizeof(server_address))) < 0) {
     TEMP_FAILURE_RETRY(close(fd));
-    fprintf(stderr, "Error Bind: %s\n", strerror(errno));
+    Log::PrintErr("Error Bind: %s\n", strerror(errno));
     return -1;
   }
 
   if (TEMP_FAILURE_RETRY(listen(fd, backlog)) != 0) {
-    fprintf(stderr, "Error Listen: %s\n", strerror(errno));
+    Log::PrintErr("Error Listen: %s\n", strerror(errno));
     return -1;
   }
 
diff --git a/runtime/bin/socket_patch.dart b/runtime/bin/socket_patch.dart
index 7ce75d3..6e58985 100644
--- a/runtime/bin/socket_patch.dart
+++ b/runtime/bin/socket_patch.dart
@@ -239,8 +239,8 @@
 
   bool _propagateError(Exception e) => false;
 
-  abstract bool _isListenSocket();
-  abstract bool _isPipe();
+  bool _isListenSocket();
+  bool _isPipe();
 
   // Is this socket closed.
   bool _closed;
@@ -465,7 +465,7 @@
   }
 
   void set onConnect(void callback()) {
-    if (_seenFirstOutEvent || _outputStream != null) {
+    if (_seenFirstOutEvent) {
       throw new StreamException(
           "Cannot set connect handler when already connected");
     }
@@ -509,7 +509,7 @@
     if (_outputStream == null) {
       if (_handlerMap[_SocketBase._OUT_EVENT] != null) {
         throw new StreamException(
-            "Cannot get input stream when socket handlers are used");
+            "Cannot get output stream when socket handlers are used");
       }
       _outputStream = new _SocketOutputStream(this);
     }
diff --git a/runtime/bin/socket_win.cc b/runtime/bin/socket_win.cc
index 102f078..6e1a0bc 100644
--- a/runtime/bin/socket_win.cc
+++ b/runtime/bin/socket_win.cc
@@ -4,6 +4,7 @@
 
 #include "bin/builtin.h"
 #include "bin/eventhandler.h"
+#include "bin/log.h"
 #include "bin/socket.h"
 
 bool Socket::Initialize() {
@@ -12,7 +13,7 @@
   WORD version_requested = MAKEWORD(1, 0);
   err = WSAStartup(version_requested, &winsock_data);
   if (err != 0) {
-    fprintf(stderr, "Unable to initialize Winsock: %d\n", WSAGetLastError());
+    Log::PrintErr("Unable to initialize Winsock: %d\n", WSAGetLastError());
   }
   return err == 0;
 }
@@ -43,7 +44,7 @@
   if (getsockname(socket_handle->socket(),
                   reinterpret_cast<struct sockaddr *>(&socket_address),
                   &size)) {
-    fprintf(stderr, "Error getsockname: %s\n", strerror(errno));
+    Log::PrintErr("Error getsockname: %s\n", strerror(errno));
     return 0;
   }
   return ntohs(socket_address.sin_port);
@@ -58,7 +59,7 @@
   if (getpeername(socket_handle->socket(),
                   reinterpret_cast<struct sockaddr *>(&socket_address),
                   &size)) {
-    fprintf(stderr, "Error getpeername: %s\n", strerror(errno));
+    Log::PrintErr("Error getpeername: %s\n", strerror(errno));
     return false;
   }
   *port = ntohs(socket_address.sin_port);
@@ -72,7 +73,7 @@
                                host,
                                &len);
   if (err != 0) {
-    fprintf(stderr, "Error WSAAddressToString: %d\n", WSAGetLastError());
+    Log::PrintErr("Error WSAAddressToString: %d\n", WSAGetLastError());
     return false;
   }
   return true;
diff --git a/runtime/bin/tls_socket.cc b/runtime/bin/tls_socket.cc
deleted file mode 100644
index c4bc0a5..0000000
--- a/runtime/bin/tls_socket.cc
+++ /dev/null
@@ -1,385 +0,0 @@
-// Copyright (c) 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.
-
-#include "bin/tls_socket.h"
-
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <nss.h>
-#include <prerror.h>
-#include <prinit.h>
-#include <prnetdb.h>
-#include <ssl.h>
-
-#include "bin/builtin.h"
-#include "bin/dartutils.h"
-#include "bin/net/nss_memio.h"
-#include "bin/thread.h"
-#include "bin/utils.h"
-#include "platform/utils.h"
-
-#include "include/dart_api.h"
-
-bool TlsFilter::library_initialized_ = false;
-dart::Mutex TlsFilter::mutex_;  // To protect library initialization.
-static const int kTlsFilterNativeFieldIndex = 0;
-
-static TlsFilter* GetTlsFilter(Dart_NativeArguments args) {
-  TlsFilter* filter;
-  Dart_Handle dart_this = ThrowIfError(Dart_GetNativeArgument(args, 0));
-  ASSERT(Dart_IsInstance(dart_this));
-  ThrowIfError(Dart_GetNativeInstanceField(
-      dart_this,
-      kTlsFilterNativeFieldIndex,
-      reinterpret_cast<intptr_t*>(&filter)));
-  return filter;
-}
-
-
-static void SetTlsFilter(Dart_NativeArguments args, TlsFilter* filter) {
-  Dart_Handle dart_this = ThrowIfError(Dart_GetNativeArgument(args, 0));
-  ASSERT(Dart_IsInstance(dart_this));
-  ThrowIfError(Dart_SetNativeInstanceField(
-      dart_this,
-      kTlsFilterNativeFieldIndex,
-      reinterpret_cast<intptr_t>(filter)));
-}
-
-
-void FUNCTION_NAME(TlsSocket_Init)(Dart_NativeArguments args) {
-  Dart_EnterScope();
-  Dart_Handle dart_this = ThrowIfError(Dart_GetNativeArgument(args, 0));
-  TlsFilter* filter = new TlsFilter;
-  SetTlsFilter(args, filter);
-  filter->Init(dart_this);
-  Dart_ExitScope();
-}
-
-
-void FUNCTION_NAME(TlsSocket_Connect)(Dart_NativeArguments args) {
-  Dart_EnterScope();
-  Dart_Handle host_name = ThrowIfError(Dart_GetNativeArgument(args, 1));
-  Dart_Handle port_object = ThrowIfError(Dart_GetNativeArgument(args, 2));
-
-  const char* host_name_string = NULL;
-  // TODO(whesse): Is truncating a Dart string containing \0 what we want?
-  ThrowIfError(Dart_StringToCString(host_name, &host_name_string));
-
-  int64_t port;
-  if (!DartUtils::GetInt64Value(port_object, &port) ||
-      port < 0 || port > 65535) {
-    Dart_ThrowException(DartUtils::NewDartArgumentError(
-      "Illegal port parameter in TlsSocket"));
-  }
-
-  GetTlsFilter(args)->Connect(host_name_string, static_cast<int>(port));
-  Dart_ExitScope();
-}
-
-
-void FUNCTION_NAME(TlsSocket_Destroy)(Dart_NativeArguments args) {
-  Dart_EnterScope();
-  TlsFilter* filter = GetTlsFilter(args);
-  SetTlsFilter(args, NULL);
-  filter->Destroy();
-  delete filter;
-  Dart_ExitScope();
-}
-
-
-void FUNCTION_NAME(TlsSocket_Handshake)(Dart_NativeArguments args) {
-  Dart_EnterScope();
-  GetTlsFilter(args)->Handshake();
-  Dart_ExitScope();
-}
-
-
-void FUNCTION_NAME(TlsSocket_RegisterHandshakeCompleteCallback)(
-    Dart_NativeArguments args) {
-  Dart_EnterScope();
-  Dart_Handle handshake_complete =
-      ThrowIfError(Dart_GetNativeArgument(args, 1));
-  if (!Dart_IsClosure(handshake_complete)) {
-    Dart_ThrowException(DartUtils::NewDartArgumentError(
-        "Illegal argument to RegisterHandshakeCompleteCallback"));
-  }
-  GetTlsFilter(args)->RegisterHandshakeCompleteCallback(handshake_complete);
-  Dart_ExitScope();
-}
-
-
-void FUNCTION_NAME(TlsSocket_ProcessBuffer)(Dart_NativeArguments args) {
-  Dart_EnterScope();
-  Dart_Handle buffer_id_object = ThrowIfError(Dart_GetNativeArgument(args, 1));
-  int64_t buffer_id = DartUtils::GetIntegerValue(buffer_id_object);
-  if (buffer_id < 0 || buffer_id >= TlsFilter::kNumBuffers) {
-    Dart_ThrowException(DartUtils::NewDartArgumentError(
-        "Illegal argument to ProcessBuffer"));
-  }
-
-  intptr_t bytes_read =
-      GetTlsFilter(args)->ProcessBuffer(static_cast<int>(buffer_id));
-  Dart_SetReturnValue(args, Dart_NewInteger(bytes_read));
-  Dart_ExitScope();
-}
-
-
-void FUNCTION_NAME(TlsSocket_SetCertificateDatabase)
-    (Dart_NativeArguments args) {
-  Dart_EnterScope();
-  Dart_Handle dart_pkcert_dir = ThrowIfError(Dart_GetNativeArgument(args, 0));
-  // Check that the type is string, and get the UTF-8 C string value from it.
-  if (Dart_IsString(dart_pkcert_dir)) {
-    const char* pkcert_dir = NULL;
-    ThrowIfError(Dart_StringToCString(dart_pkcert_dir, &pkcert_dir));
-    TlsFilter::InitializeLibrary(pkcert_dir);
-  } else {
-    Dart_ThrowException(DartUtils::NewDartArgumentError(
-        "Non-String argument to SetCertificateDatabase"));
-  }
-  Dart_ExitScope();
-}
-
-
-void TlsFilter::Init(Dart_Handle dart_this) {
-  string_start_ = ThrowIfError(
-      Dart_NewPersistentHandle(DartUtils::NewString("start")));
-  string_length_ = ThrowIfError(
-      Dart_NewPersistentHandle(DartUtils::NewString("length")));
-
-  InitializeBuffers(dart_this);
-  memio_ = memio_CreateIOLayer(kMemioBufferSize);
-}
-
-
-void TlsFilter::InitializeBuffers(Dart_Handle dart_this) {
-  // Create TlsFilter buffers as ExternalUint8Array objects.
-  Dart_Handle dart_buffers_object = ThrowIfError(
-      Dart_GetField(dart_this, DartUtils::NewString("buffers")));
-  Dart_Handle dart_buffer_object =
-      Dart_ListGetAt(dart_buffers_object, kReadPlaintext);
-  Dart_Handle tls_external_buffer_class =
-      Dart_InstanceGetClass(dart_buffer_object);
-  Dart_Handle dart_buffer_size = ThrowIfError(
-      Dart_GetField(tls_external_buffer_class, DartUtils::NewString("SIZE")));
-  buffer_size_ = DartUtils::GetIntegerValue(dart_buffer_size);
-  if (buffer_size_ <= 0 || buffer_size_ > 1024 * 1024) {
-    Dart_ThrowException(
-        DartUtils::NewString("Invalid buffer size in _TlsExternalBuffer"));
-  }
-
-  Dart_Handle data_identifier = DartUtils::NewString("data");
-  for (int i = 0; i < kNumBuffers; ++i) {
-    dart_buffer_objects_[i] = ThrowIfError(
-        Dart_NewPersistentHandle(Dart_ListGetAt(dart_buffers_object, i)));
-    buffers_[i] = new uint8_t[buffer_size_];
-    Dart_Handle data = ThrowIfError(
-      Dart_NewExternalByteArray(buffers_[i], buffer_size_, NULL, NULL));
-    ThrowIfError(Dart_SetField(dart_buffer_objects_[i],
-                               data_identifier,
-                               data));
-  }
-}
-
-
-void TlsFilter::RegisterHandshakeCompleteCallback(Dart_Handle complete) {
-  ASSERT(NULL == handshake_complete_);
-  handshake_complete_ = ThrowIfError(Dart_NewPersistentHandle(complete));
-}
-
-
-void TlsFilter::InitializeLibrary(const char* pkcert_database) {
-  MutexLocker locker(&mutex_);
-  if (!library_initialized_) {
-    PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 0);
-    // TODO(whesse): Verify there are no UTF-8 issues here.
-    SECStatus status = NSS_Init(pkcert_database);
-    if (status != SECSuccess) {
-      ThrowPRException("Unsuccessful NSS_Init call.");
-    }
-
-    status = NSS_SetDomesticPolicy();
-    if (status != SECSuccess) {
-      ThrowPRException("Unsuccessful NSS_SetDomesticPolicy call.");
-    }
-  } else {
-    ThrowException("Called TlsFilter::InitializeLibrary more than once");
-  }
-}
-
-
-void TlsFilter::Connect(const char* host, int port) {
-  if (in_handshake_) {
-    ThrowException("Connect called while already in handshake state.");
-  }
-  PRFileDesc* my_socket = memio_;
-
-  my_socket = SSL_ImportFD(NULL, my_socket);
-  if (my_socket == NULL) {
-    ThrowPRException("Unsuccessful SSL_ImportFD call");
-  }
-
-  if (SSL_SetURL(my_socket, host) == -1) {
-    ThrowPRException("Unsuccessful SetURL call");
-  }
-
-  SECStatus status = SSL_ResetHandshake(my_socket, PR_FALSE);
-  if (status != SECSuccess) {
-    ThrowPRException("Unsuccessful SSL_ResetHandshake call");
-  }
-
-  // SetPeerAddress
-  PRNetAddr host_address;
-  char host_entry_buffer[PR_NETDB_BUF_SIZE];
-  PRHostEnt host_entry;
-  PRStatus rv = PR_GetHostByName(host, host_entry_buffer,
-                                 PR_NETDB_BUF_SIZE, &host_entry);
-  if (rv != PR_SUCCESS) {
-    ThrowPRException("Unsuccessful PR_GetHostByName call");
-  }
-
-  int index = PR_EnumerateHostEnt(0, &host_entry, port, &host_address);
-  if (index == -1 || index == 0) {
-    ThrowPRException("Unsuccessful PR_EnumerateHostEnt call");
-  }
-
-  memio_SetPeerName(my_socket, &host_address);
-  memio_ = my_socket;
-}
-
-
-void TlsFilter::Handshake() {
-  SECStatus status = SSL_ForceHandshake(memio_);
-  if (status == SECSuccess) {
-    if (in_handshake_) {
-      ThrowIfError(Dart_InvokeClosure(handshake_complete_, 0, NULL));
-      in_handshake_ = false;
-    }
-  } else {
-    PRErrorCode error = PR_GetError();
-    if (error == PR_WOULD_BLOCK_ERROR) {
-      if (!in_handshake_) {
-        in_handshake_ = true;
-      }
-    } else {
-      ThrowPRException("Unexpected handshake error");
-    }
-  }
-}
-
-
-void TlsFilter::Destroy() {
-  for (int i = 0; i < kNumBuffers; ++i) {
-    Dart_DeletePersistentHandle(dart_buffer_objects_[i]);
-    delete[] buffers_[i];
-  }
-  Dart_DeletePersistentHandle(string_start_);
-  Dart_DeletePersistentHandle(string_length_);
-  Dart_DeletePersistentHandle(handshake_complete_);
-  // TODO(whesse): Free NSS objects here.
-}
-
-
-intptr_t TlsFilter::ProcessBuffer(int buffer_index) {
-  Dart_Handle buffer_object = dart_buffer_objects_[buffer_index];
-  Dart_Handle start_object = ThrowIfError(
-      Dart_GetField(buffer_object, string_start_));
-  Dart_Handle length_object = ThrowIfError(
-      Dart_GetField(buffer_object, string_length_));
-  int64_t unsafe_start = DartUtils::GetIntegerValue(start_object);
-  int64_t unsafe_length = DartUtils::GetIntegerValue(length_object);
-  ASSERT(unsafe_start >= 0);
-  ASSERT(unsafe_start < buffer_size_);
-  ASSERT(unsafe_length >= 0);
-  ASSERT(unsafe_length <= buffer_size_);
-  intptr_t start = static_cast<intptr_t>(unsafe_start);
-  intptr_t length = static_cast<intptr_t>(unsafe_length);
-  uint8_t* buffer = buffers_[buffer_index];
-
-  int bytes_processed = 0;
-  switch (buffer_index) {
-    case kReadPlaintext: {
-      int bytes_free = buffer_size_ - start - length;
-      bytes_processed = PR_Read(memio_,
-                                buffer + start + length,
-                                bytes_free);
-      if (bytes_processed < 0) {
-        ASSERT(bytes_processed == -1);
-        // TODO(whesse): Handle unexpected errors here.
-        PRErrorCode pr_error = PR_GetError();
-        if (PR_WOULD_BLOCK_ERROR != pr_error) {
-          ThrowPRException("Error reading plaintext from TlsFilter");
-        }
-        bytes_processed = 0;
-      }
-      break;
-    }
-
-    case kWriteEncrypted: {
-      const uint8_t* buf1;
-      const uint8_t* buf2;
-      unsigned int len1;
-      unsigned int len2;
-      int bytes_free = buffer_size_ - start - length;
-      memio_Private* secret = memio_GetSecret(memio_);
-      memio_GetWriteParams(secret, &buf1, &len1, &buf2, &len2);
-      int bytes_to_send =
-          dart::Utils::Minimum(len1, static_cast<unsigned>(bytes_free));
-      if (bytes_to_send > 0) {
-        memmove(buffer + start + length, buf1, bytes_to_send);
-        bytes_processed = bytes_to_send;
-      }
-      bytes_to_send = dart::Utils::Minimum(len2,
-          static_cast<unsigned>(bytes_free - bytes_processed));
-      if (bytes_to_send > 0) {
-        memmove(buffer + start + length + bytes_processed, buf2,
-                bytes_to_send);
-        bytes_processed += bytes_to_send;
-      }
-      if (bytes_processed > 0) {
-        memio_PutWriteResult(secret, bytes_processed);
-      }
-      break;
-    }
-
-    case kReadEncrypted: {
-      if (length > 0) {
-        bytes_processed = length;
-        memio_Private* secret = memio_GetSecret(memio_);
-        uint8_t* memio_buf;
-        int free_bytes = memio_GetReadParams(secret, &memio_buf);
-        if (free_bytes < bytes_processed) bytes_processed = free_bytes;
-        memmove(memio_buf,
-                buffer + start,
-                bytes_processed);
-        memio_PutReadResult(secret, bytes_processed);
-      }
-      break;
-    }
-
-    case kWritePlaintext: {
-      if (length > 0) {
-        bytes_processed = PR_Write(memio_,
-                                   buffer + start,
-                                   length);
-      }
-
-      if (bytes_processed < 0) {
-        ASSERT(bytes_processed == -1);
-        // TODO(whesse): Handle unexpected errors here.
-        PRErrorCode pr_error = PR_GetError();
-        if (PR_WOULD_BLOCK_ERROR != pr_error) {
-          ThrowPRException("Error reading plaintext from TlsFilter");
-        }
-        bytes_processed = 0;
-      }
-      break;
-    }
-  }
-  return bytes_processed;
-}
diff --git a/runtime/bin/tls_socket_patch.dart b/runtime/bin/tls_socket_patch.dart
deleted file mode 100644
index 73e40e8..0000000
--- a/runtime/bin/tls_socket_patch.dart
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (c) 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.
-
-patch class TlsSocket {
-  /* patch */ static void setCertificateDatabase(String pkcertDirectory)
-      native "TlsSocket_SetCertificateDatabase";
-}
-
-
-patch class _TlsFilter {
-  /* patch */ factory _TlsFilter() => new _TlsFilterImpl();
-}
-
-
-/**
- * _TlsFilterImpl wraps a filter that encrypts and decrypts data travelling
- * over a TLS encrypted socket.  The filter also handles the handshaking
- * and certificate verification.
- *
- * The filter exposes its input and output buffers as Dart objects that
- * are backed by an external C array of bytes, so that both Dart code and
- * native code can access the same data.
- */
-class _TlsFilterImpl extends NativeFieldWrapperClass1 implements _TlsFilter {
-  _TlsFilterImpl() {
-    buffers = new List<_TlsExternalBuffer>(_TlsSocket.NUM_BUFFERS);
-    for (int i = 0; i < _TlsSocket.NUM_BUFFERS; ++i) {
-      buffers[i] = new _TlsExternalBuffer();
-    }
-  }
-
-  void connect(String hostName, int port) native "TlsSocket_Connect";
-
-  void destroy() {
-    buffers = null;
-    _destroy();
-  }
-
-  void _destroy() native "TlsSocket_Destroy";
-
-  void handshake() native "TlsSocket_Handshake";
-
-  void init() native "TlsSocket_Init";
-
-  int processBuffer(int bufferIndex) native "TlsSocket_ProcessBuffer";
-
-  void registerHandshakeCompleteCallback(Function handshakeCompleteHandler)
-      native "TlsSocket_RegisterHandshakeCompleteCallback";
-
-  List<_TlsExternalBuffer> buffers;
-}
diff --git a/runtime/bin/utils_win.cc b/runtime/bin/utils_win.cc
index 9ee1777..f9603f8 100644
--- a/runtime/bin/utils_win.cc
+++ b/runtime/bin/utils_win.cc
@@ -5,6 +5,7 @@
 #include <errno.h>
 
 #include "bin/utils.h"
+#include "bin/log.h"
 
 static void FormatMessageIntoBuffer(DWORD code,
                                     char* buffer,
@@ -19,7 +20,7 @@
                     NULL);
   if (message_size == 0) {
     if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
-      fprintf(stderr, "FormatMessage failed %d\n", GetLastError());
+      Log::PrintErr("FormatMessage failed %d\n", GetLastError());
     }
     snprintf(buffer, buffer_length, "OS Error %d", code);
   }
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 8cc518a..821014c 100755
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -1388,7 +1388,7 @@
  * \return The String object if no error occurs. Otherwise returns
  *   an error handle.
  */
-DART_EXPORT Dart_Handle Dart_NewStringFromUTF32(const uint32_t* utf32_array,
+DART_EXPORT Dart_Handle Dart_NewStringFromUTF32(const int32_t* utf32_array,
                                                 intptr_t length);
 
 /**
diff --git a/runtime/lib/array.dart b/runtime/lib/array.dart
index 1fb17fb..5bef0d0 100644
--- a/runtime/lib/array.dart
+++ b/runtime/lib/array.dart
@@ -138,6 +138,10 @@
         "Cannot remove in a non-extendable array");
   }
 
+  E get first {
+    return this[0];
+  }
+
   E get last {
     return this[length - 1];
   }
@@ -285,6 +289,10 @@
         "Cannot remove in a non-extendable array");
   }
 
+  E get first {
+    return this[0];
+  }
+
   E get last {
     return this[length - 1];
   }
diff --git a/runtime/lib/array_patch.dart b/runtime/lib/array_patch.dart
index 5bb7ec2c..2887a99 100644
--- a/runtime/lib/array_patch.dart
+++ b/runtime/lib/array_patch.dart
@@ -5,7 +5,7 @@
 // Note that the optimizing compiler depends on the algorithm which
 // returns a _GrowableObjectArray if length is null, otherwise returns
 // fixed size array.
-patch class _ListImpl<E> {
+patch class List<E> {
   /* patch */ factory List([int length = null]) {
     if (length == null) {
       return new _GrowableObjectArray<E>();
@@ -14,14 +14,6 @@
     }
   }
 
-  /* patch */ factory List.from(Iterable<E> other) {
-    _GrowableObjectArray<E> list = new _GrowableObjectArray<E>();
-    for (final e in other) {
-      list.add(e);
-    }
-    return list;
-  }
-
   // Factory constructing a mutable List from a parser generated List literal.
   // [elements] contains elements that are already type checked.
   factory List._fromLiteral(List elements) {
diff --git a/runtime/lib/byte_array.dart b/runtime/lib/byte_array.dart
index 0f97c3d..aa8e5dc 100644
--- a/runtime/lib/byte_array.dart
+++ b/runtime/lib/byte_array.dart
@@ -115,11 +115,11 @@
 
 
 abstract class _ByteArrayBase {
-  abstract int lengthInBytes();
+  int lengthInBytes();
 
-  abstract int bytesPerElement();
+  int bytesPerElement();
 
-  abstract operator[](int index);
+  operator[](int index);
 
   // Methods implementing the Collection interface.
 
@@ -184,7 +184,7 @@
   }
 
   void sort([Comparator compare = Comparable.compare]) {
-    _Sort.sort(this, compare);
+    coreSort(this, compare);
   }
 
   int indexOf(element, [int start = 0]) {
@@ -206,6 +206,10 @@
         "Cannot remove from a non-extendable array");
   }
 
+  get first {
+    return this[0];
+  }
+
   get last {
     return this[length - 1];
   }
@@ -1601,7 +1605,7 @@
 
 
 class _ByteArrayViewBase {
-  abstract num operator[](int index);
+  num operator[](int index);
 
   // Methods implementing the Collection interface.
 
@@ -1637,7 +1641,7 @@
     return this.length == 0;
   }
 
-  abstract int get length;
+  int get length;
 
   // Methods implementing the List interface.
 
@@ -1662,7 +1666,7 @@
   }
 
   void sort([Comparator compare = Comparable.compare]) {
-    _Sort.sort(this, compare);
+    coreSort(this, compare);
   }
 
   int indexOf(element, [int start = 0]) {
@@ -1684,6 +1688,10 @@
         "Cannot remove from a non-extendable array");
   }
 
+  get first {
+    return this[0];
+  }
+
   get last {
     return this[length - 1];
   }
diff --git a/runtime/lib/double.cc b/runtime/lib/double.cc
index 05977ba..76babac 100644
--- a/runtime/lib/double.cc
+++ b/runtime/lib/double.cc
@@ -11,6 +11,7 @@
 #include "vm/exceptions.h"
 #include "vm/native_entry.h"
 #include "vm/object.h"
+#include "vm/symbols.h"
 
 namespace dart {
 
@@ -202,6 +203,61 @@
 }
 
 
+DEFINE_NATIVE_ENTRY(Double_parse, 1) {
+  GET_NATIVE_ARGUMENT(String, value, arguments->NativeArgAt(0));
+  const String& dummy_key = String::Handle(Symbols::Empty());
+  Scanner scanner(value, dummy_key);
+  const Scanner::GrowableTokenStream& tokens = scanner.GetStream();
+  String* number_string;
+  bool is_positive;
+  if (Scanner::IsValidLiteral(tokens,
+                              Token::kDOUBLE,
+                              &is_positive,
+                              &number_string)) {
+    const char* cstr = number_string->ToCString();
+    char* p_end = NULL;
+    double double_value = strtod(cstr, &p_end);
+    ASSERT(p_end != cstr);
+    if (!is_positive) {
+      double_value = -double_value;
+    }
+    return Double::New(double_value);
+  }
+
+  if (Scanner::IsValidLiteral(tokens,
+                              Token::kINTEGER,
+                              &is_positive,
+                              &number_string)) {
+    Integer& res = Integer::Handle(Integer::New(*number_string));
+    if (is_positive) {
+      return Double::New(res.AsDoubleValue());
+    }
+    return Double::New(-res.AsDoubleValue());
+  }
+
+  // Infinity and nan.
+  if (Scanner::IsValidLiteral(tokens,
+                              Token::kIDENT,
+                              &is_positive,
+                              &number_string)) {
+    if (number_string->Equals("NaN")) {
+      return Double::New(NAN);
+    }
+    if (number_string->Equals("Infinity")) {
+      if (is_positive) {
+        return Double::New(INFINITY);
+      }
+      return Double::New(-INFINITY);
+    }
+  }
+
+  GrowableArray<const Object*> args;
+  args.Add(&value);
+  Exceptions::ThrowByType(Exceptions::kFormat, args);
+  return Object::null();
+}
+
+
 DEFINE_NATIVE_ENTRY(Double_toStringAsFixed, 2) {
   // The boundaries are exclusive.
   static const double kLowerBoundary = -1e21;
diff --git a/runtime/lib/double.dart b/runtime/lib/double.dart
index f4025f3..aee84e2 100644
--- a/runtime/lib/double.dart
+++ b/runtime/lib/double.dart
@@ -114,7 +114,9 @@
     if (exponent == 0) {
       return 1.0;  // ECMA-262 15.8.2.13
     }
-    // Throw NullPointerException if exponent is null.
+    if (exponent is! num) {
+      throw new ArgumentError(null);
+    }
     double doubleExponent = exponent.toDouble();
     if (isNaN || exponent.isNaN) {
       return double.NAN;
diff --git a/runtime/lib/double_patch.dart b/runtime/lib/double_patch.dart
index d293249..5e6cc11 100644
--- a/runtime/lib/double_patch.dart
+++ b/runtime/lib/double_patch.dart
@@ -7,5 +7,5 @@
 
 patch class double {
   /* patch */
-  static double parse(String string) native "MathNatives_parseDouble";
+  static double parse(String string) native "Double_parse";
 }
diff --git a/runtime/lib/errors_patch.dart b/runtime/lib/errors_patch.dart
index d09dc3d..12caead 100644
--- a/runtime/lib/errors_patch.dart
+++ b/runtime/lib/errors_patch.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-patch class NoSuchMethodError {
+patch class Error {
   /* patch */ static String _objectToString(Object object) {
     return Object._toString(object);
   }
diff --git a/runtime/lib/expando_patch.dart b/runtime/lib/expando_patch.dart
index a218af6..5c61969 100644
--- a/runtime/lib/expando_patch.dart
+++ b/runtime/lib/expando_patch.dart
@@ -54,10 +54,7 @@
   }
 
   static _checkType(object) {
-    if (object == null) {
-      throw new NullPointerException();
-    }
-    if (object is bool || object is num || object is String) {
+    if (object == null || object is bool || object is num || object is String) {
       throw new ArgumentError(object);
     }
   }
diff --git a/runtime/lib/growable_array.dart b/runtime/lib/growable_array.dart
index a34bca0..2e012c2 100644
--- a/runtime/lib/growable_array.dart
+++ b/runtime/lib/growable_array.dart
@@ -145,6 +145,10 @@
     return elem;
   }
 
+  T get first {
+    return this[0];
+  }
+
   T get last {
     return this[length - 1];
   }
diff --git a/runtime/lib/integers.cc b/runtime/lib/integers.cc
index c9cf18d..9c379ca 100644
--- a/runtime/lib/integers.cc
+++ b/runtime/lib/integers.cc
@@ -9,6 +9,7 @@
 #include "vm/exceptions.h"
 #include "vm/native_entry.h"
 #include "vm/object.h"
+#include "vm/symbols.h"
 
 namespace dart {
 
@@ -172,6 +173,32 @@
 }
 
 
+DEFINE_NATIVE_ENTRY(Integer_parse, 1) {
+  GET_NATIVE_ARGUMENT(String, value, arguments->NativeArgAt(0));
+  const String& dummy_key = String::Handle(Symbols::Empty());
+  Scanner scanner(value, dummy_key);
+  const Scanner::GrowableTokenStream& tokens = scanner.GetStream();
+  String* int_string;
+  bool is_positive;
+  if (Scanner::IsValidLiteral(tokens,
+                             Token::kINTEGER,
+                             &is_positive,
+                             &int_string)) {
+    if (is_positive) {
+      return Integer::New(*int_string);
+    }
+    String& temp = String::Handle();
+    temp = String::Concat(String::Handle(Symbols::New("-")), *int_string);
+    return Integer::New(temp);
+  }
+
+  GrowableArray<const Object*> args;
+  args.Add(&value);
+  Exceptions::ThrowByType(Exceptions::kFormat, args);
+  return Object::null();
+}
+
+
 static RawInteger* ShiftOperationHelper(Token::Kind kind,
                                         const Integer& value,
                                         const Smi& amount) {
diff --git a/runtime/lib/integers_patch.dart b/runtime/lib/integers_patch.dart
index c931ed4..162c050 100644
--- a/runtime/lib/integers_patch.dart
+++ b/runtime/lib/integers_patch.dart
@@ -6,5 +6,5 @@
 // VM implementation of int.
 
 patch class int {
-  /* patch */ static int parse(String str) native "MathNatives_parseInt";
+  /* patch */ static int parse(String str) native "Integer_parse";
 }
diff --git a/runtime/lib/lib_sources.gypi b/runtime/lib/lib_sources.gypi
index 2bffa7e..28c9afd 100644
--- a/runtime/lib/lib_sources.gypi
+++ b/runtime/lib/lib_sources.gypi
@@ -28,8 +28,6 @@
     'integers_patch.dart',
     'invocation_mirror_patch.dart',
     'map_patch.dart',
-    'math.dart',
-    'math.cc',
     'object.cc',
     'object_patch.dart',
     'print_patch.dart',
diff --git a/runtime/lib/math.cc b/runtime/lib/math.cc
index de48b16..ff4e6af 100644
--- a/runtime/lib/math.cc
+++ b/runtime/lib/math.cc
@@ -10,168 +10,60 @@
 #include "vm/exceptions.h"
 #include "vm/native_entry.h"
 #include "vm/object.h"
-#include "vm/random.h"
 #include "vm/scanner.h"
 #include "vm/symbols.h"
 
 namespace dart {
 
-DEFINE_NATIVE_ENTRY(MathNatives_sqrt, 1) {
+DEFINE_NATIVE_ENTRY(Math_sqrt, 1) {
   GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
   return Double::New(sqrt(operand.value()));
 }
 
-DEFINE_NATIVE_ENTRY(MathNatives_sin, 1) {
+DEFINE_NATIVE_ENTRY(Math_sin, 1) {
   GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
   return Double::New(sin(operand.value()));
 }
 
-DEFINE_NATIVE_ENTRY(MathNatives_cos, 1) {
+DEFINE_NATIVE_ENTRY(Math_cos, 1) {
   GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
   return Double::New(cos(operand.value()));
 }
 
-DEFINE_NATIVE_ENTRY(MathNatives_tan, 1) {
+DEFINE_NATIVE_ENTRY(Math_tan, 1) {
   GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
   return Double::New(tan(operand.value()));
 }
 
-DEFINE_NATIVE_ENTRY(MathNatives_asin, 1) {
+DEFINE_NATIVE_ENTRY(Math_asin, 1) {
   GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
   return Double::New(asin(operand.value()));
 }
 
-DEFINE_NATIVE_ENTRY(MathNatives_acos, 1) {
+DEFINE_NATIVE_ENTRY(Math_acos, 1) {
   GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
   return Double::New(acos(operand.value()));
 }
 
-DEFINE_NATIVE_ENTRY(MathNatives_atan, 1) {
+DEFINE_NATIVE_ENTRY(Math_atan, 1) {
   GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
   return Double::New(atan(operand.value()));
 }
 
-DEFINE_NATIVE_ENTRY(MathNatives_atan2, 2) {
+DEFINE_NATIVE_ENTRY(Math_atan2, 2) {
   GET_NATIVE_ARGUMENT(Double, operand1, arguments->NativeArgAt(0));
   GET_NATIVE_ARGUMENT(Double, operand2, arguments->NativeArgAt(1));
   return Double::New(atan2(operand1.value(), operand2.value()));
 }
 
-DEFINE_NATIVE_ENTRY(MathNatives_exp, 1) {
+DEFINE_NATIVE_ENTRY(Math_exp, 1) {
   GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
   return Double::New(exp(operand.value()));
 }
 
-DEFINE_NATIVE_ENTRY(MathNatives_log, 1) {
+DEFINE_NATIVE_ENTRY(Math_log, 1) {
   GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
   return Double::New(log(operand.value()));
 }
 
-DEFINE_NATIVE_ENTRY(MathNatives_random, 0) {
-  return Double::New(static_cast<double>(Random::RandomInt32()-1)/0x80000000);
-}
-
-
-// TODO(srdjan): Investigate for performance hit; the integer and double parsing
-// may not be efficient as we need to generate two extra growable arrays.
-static bool IsValidLiteral(const Scanner::GrowableTokenStream& tokens,
-                           Token::Kind literal_kind,
-                           bool* is_positive,
-                           String** value) {
-  if ((tokens.length() == 2) &&
-      (tokens[0].kind == literal_kind) &&
-      (tokens[1].kind == Token::kEOS)) {
-    *is_positive = true;
-    *value = tokens[0].literal;
-    return true;
-  }
-  if ((tokens.length() == 3) &&
-      ((tokens[0].kind == Token::kTIGHTADD) ||
-          (tokens[0].kind == Token::kSUB)) &&
-      (tokens[1].kind == literal_kind) &&
-      (tokens[2].kind == Token::kEOS)) {
-    // Check there is no space between "+/-" and number.
-    if ((tokens[0].offset + 1) != tokens[1].offset) {
-      return false;
-    }
-    *is_positive = tokens[0].kind == Token::kTIGHTADD;
-    *value = tokens[1].literal;
-    return true;
-  }
-  return false;
-}
-
-
-DEFINE_NATIVE_ENTRY(MathNatives_parseInt, 1) {
-  GET_NATIVE_ARGUMENT(String, value, arguments->NativeArgAt(0));
-  const String& dummy_key = String::Handle(Symbols::Empty());
-  Scanner scanner(value, dummy_key);
-  const Scanner::GrowableTokenStream& tokens = scanner.GetStream();
-  String* int_string;
-  bool is_positive;
-  if (IsValidLiteral(tokens, Token::kINTEGER, &is_positive, &int_string)) {
-    if (is_positive) {
-      return Integer::New(*int_string);
-    } else {
-      String& temp = String::Handle();
-      temp = String::Concat(String::Handle(Symbols::New("-")),
-                            *int_string);
-      return Integer::New(temp);
-    }
-  } else {
-    GrowableArray<const Object*> args;
-    args.Add(&value);
-    Exceptions::ThrowByType(Exceptions::kFormat, args);
-    return Object::null();
-  }
-}
-
-
-DEFINE_NATIVE_ENTRY(MathNatives_parseDouble, 1) {
-  GET_NATIVE_ARGUMENT(String, value, arguments->NativeArgAt(0));
-  const String& dummy_key = String::Handle(Symbols::Empty());
-  Scanner scanner(value, dummy_key);
-  const Scanner::GrowableTokenStream& tokens = scanner.GetStream();
-  String* number_string;
-  bool is_positive;
-  if (IsValidLiteral(tokens, Token::kDOUBLE, &is_positive, &number_string)) {
-    const char* cstr = number_string->ToCString();
-    char* p_end = NULL;
-    double double_value = strtod(cstr, &p_end);
-    ASSERT(p_end != cstr);
-    if (!is_positive) {
-      double_value = -double_value;
-    }
-    return Double::New(double_value);
-  }
-
-  if (IsValidLiteral(tokens, Token::kINTEGER, &is_positive, &number_string)) {
-    Integer& res = Integer::Handle(Integer::New(*number_string));
-    if (is_positive) {
-      return Double::New(res.AsDoubleValue());
-    } else {
-      return Double::New(-res.AsDoubleValue());
-    }
-  }
-
-  // Infinity and nan.
-  if (IsValidLiteral(tokens, Token::kIDENT, &is_positive, &number_string)) {
-    if (number_string->Equals("NaN")) {
-      return Double::New(NAN);
-    }
-    if (number_string->Equals("Infinity")) {
-      if (is_positive) {
-        return Double::New(INFINITY);
-      } else {
-        return Double::New(-INFINITY);
-      }
-    }
-  }
-
-  GrowableArray<const Object*> args;
-  args.Add(&value);
-  Exceptions::ThrowByType(Exceptions::kFormat, args);
-  return Object::null();
-}
-
 }  // namespace dart
diff --git a/runtime/lib/math.dart b/runtime/lib/math.dart
deleted file mode 100644
index bb32560..0000000
--- a/runtime/lib/math.dart
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-class MathNatives {
-  static num pow(num value, num exponent) {
-    if (exponent is int) {
-      return value.pow(exponent);
-    }
-    // Double.pow will call exponent.toDouble().
-    return value.toDouble().pow(exponent);
-  }
-  static double random() => _random();
-  static double sqrt(num value) => _sqrt(value.toDouble());
-  static double sin(num value) => _sin(value.toDouble());
-  static double cos(num value) => _cos(value.toDouble());
-  static double tan(num value) => _tan(value.toDouble());
-  static double acos(num value) => _acos(value.toDouble());
-  static double asin(num value) => _asin(value.toDouble());
-  static double atan(num value) => _atan(value.toDouble());
-  static double atan2(num a, num b) => _atan2(a.toDouble(), b.toDouble());
-  static double exp(num value) => _exp(value.toDouble());
-  static double log(num value) => _log(value.toDouble());
-
-  static double _random() native "MathNatives_random";
-  static double _sqrt(double value) native "MathNatives_sqrt";
-  static double _sin(double value) native "MathNatives_sin";
-  static double _cos(double value) native "MathNatives_cos";
-  static double _tan(double value) native "MathNatives_tan";
-  static double _acos(double value) native "MathNatives_acos";
-  static double _asin(double value) native "MathNatives_asin";
-  static double _atan(double value) native "MathNatives_atan";
-  static double _atan2(double a, double b) native "MathNatives_atan2";
-  static double _exp(double value) native "MathNatives_exp";
-  static double _log(double value) native "MathNatives_log";
-}
diff --git a/runtime/lib/math_patch.dart b/runtime/lib/math_patch.dart
index 0612d3d..bfcbacc 100644
--- a/runtime/lib/math_patch.dart
+++ b/runtime/lib/math_patch.dart
@@ -3,17 +3,35 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // A VM patch of the dart:math library.
-patch num pow(num x, num exponent) => MathNatives.pow(x, exponent);
-patch double atan2(num a, num b) => MathNatives.atan2(a, b);
-patch double sin(num x) => MathNatives.sin(x);
-patch double cos(num x) => MathNatives.cos(x);
-patch double tan(num x) => MathNatives.tan(x);
-patch double acos(num x) => MathNatives.acos(x);
-patch double asin(num x) => MathNatives.asin(x);
-patch double atan(num x) => MathNatives.atan(x);
-patch double sqrt(num x) => MathNatives.sqrt(x);
-patch double exp(num x) => MathNatives.exp(x);
-patch double log(num x) => MathNatives.log(x);
+patch num pow(num x, num exponent) {
+  if (exponent is int) {
+    return x.pow(exponent);
+  }
+  // Double.pow will call exponent.toDouble().
+  return x.toDouble().pow(exponent);
+}
+
+patch double atan2(num a, num b) => _atan2(a.toDouble(), b.toDouble());
+patch double sin(num value) => _sin(value.toDouble());
+patch double cos(num value) => _cos(value.toDouble());
+patch double tan(num value) => _tan(value.toDouble());
+patch double acos(num value) => _acos(value.toDouble());
+patch double asin(num value) => _asin(value.toDouble());
+patch double atan(num value) => _atan(value.toDouble());
+patch double sqrt(num value) => _sqrt(value.toDouble());
+patch double exp(num value) => _exp(value.toDouble());
+patch double log(num value) => _log(value.toDouble());
+
+double _atan2(double a, double b) native "Math_atan2";
+double _sin(double x) native "Math_sin";
+double _cos(double x) native "Math_cos";
+double _tan(double x) native "Math_tan";
+double _acos(double x) native "Math_acos";
+double _asin(double x) native "Math_asin";
+double _atan(double x) native "Math_atan";
+double _sqrt(double x) native "Math_sqrt";
+double _exp(double x) native "Math_exp";
+double _log(double x) native "Math_log";
 
 
 // TODO(iposva): Handle patch methods within a patch class correctly.
@@ -33,20 +51,24 @@
 
 class _Random implements Random {
   // Internal state of the random number generator.
-  var _state_lo;
-  var _state_hi;
+  var _state;
+  static const kSTATE_LO = 0;
+  static const kSTATE_HI = 1;
 
-  _Random._internal(state)
-      : _state_lo = (state & _MASK_32), _state_hi = (state >> 32);
+  _Random._internal(state) {
+    _state = new List(2);
+    _state[kSTATE_LO] = state & _MASK_32;
+    _state[kSTATE_HI] = state >> 32;
+  }
 
   // The algorithm used here is Multiply with Carry (MWC) with a Base b = 2^32.
   // http://en.wikipedia.org/wiki/Multiply-with-carry
   // The constant A is selected from "Numerical Recipes 3rd Edition" p.348 B1.
   int _nextInt32() {
-    var state = ((_A * (_state_lo)) + _state_hi) & _MASK_64;
-    _state_lo = state & _MASK_32;
-    _state_hi = state >> 32;
-    return _state_lo;
+    var state = ((_A * (_state[kSTATE_LO])) + _state[kSTATE_HI]) & _MASK_64;
+    _state[kSTATE_LO] = state & _MASK_32;
+    _state[kSTATE_HI] = state >> 32;
+    return _state[kSTATE_LO];
   }
 
   int nextInt(int max) {
diff --git a/runtime/lib/math_sources.gypi b/runtime/lib/math_sources.gypi
index 5fb0d9e..2a18173 100644
--- a/runtime/lib/math_sources.gypi
+++ b/runtime/lib/math_sources.gypi
@@ -4,6 +4,7 @@
 
 {
   'sources': [
+    'math.cc',
     'math_patch.dart',
   ],
 }
diff --git a/runtime/lib/object.cc b/runtime/lib/object.cc
index 3d9ed92..6f1fef5 100644
--- a/runtime/lib/object.cc
+++ b/runtime/lib/object.cc
@@ -22,14 +22,8 @@
       Instance::CheckedHandle(arguments->NativeArgAt(0));
   GET_NATIVE_ARGUMENT(String, function_name, arguments->NativeArgAt(1));
   GET_NATIVE_ARGUMENT(Array, func_args, arguments->NativeArgAt(2));
-  if (instance.IsNull()) {
-    GrowableArray<const Object*> args;
-    args.Add(&function_name);
-    args.Add(&func_args);
-    Exceptions::ThrowByType(Exceptions::kNullPointer, args);
-  }
   const Object& null_object = Object::Handle(Object::null());
-  GrowableArray<const Object*> dart_arguments(3);
+  GrowableArray<const Object*> dart_arguments(4);
   dart_arguments.Add(&instance);
   dart_arguments.Add(&function_name);
   dart_arguments.Add(&func_args);
diff --git a/runtime/lib/regexp.cc b/runtime/lib/regexp.cc
index 00088b5..969d5ff 100644
--- a/runtime/lib/regexp.cc
+++ b/runtime/lib/regexp.cc
@@ -12,19 +12,9 @@
 
 namespace dart {
 
-static void CheckAndThrowExceptionIfNull(const Instance& obj) {
-  if (obj.IsNull()) {
-    GrowableArray<const Object*> args;
-    Exceptions::ThrowByType(Exceptions::kNullPointer, args);
-  }
-}
-
-
 DEFINE_NATIVE_ENTRY(JSSyntaxRegExp_factory, 4) {
   ASSERT(AbstractTypeArguments::CheckedHandle(
       arguments->NativeArgAt(0)).IsNull());
-  const Instance& arg1 = Instance::CheckedHandle(arguments->NativeArgAt(1));
-  CheckAndThrowExceptionIfNull(arg1);
   GET_NATIVE_ARGUMENT(String, pattern, arguments->NativeArgAt(1));
   GET_NATIVE_ARGUMENT(Instance, handle_multi_line, arguments->NativeArgAt(2));
   GET_NATIVE_ARGUMENT(Instance, handle_ignore_case, arguments->NativeArgAt(3));
@@ -75,8 +65,6 @@
 DEFINE_NATIVE_ENTRY(JSSyntaxRegExp_ExecuteMatch, 3) {
   const JSRegExp& regexp = JSRegExp::CheckedHandle(arguments->NativeArgAt(0));
   ASSERT(!regexp.IsNull());
-  const Instance& arg1 = Instance::CheckedHandle(arguments->NativeArgAt(1));
-  CheckAndThrowExceptionIfNull(arg1);
   GET_NATIVE_ARGUMENT(String, str, arguments->NativeArgAt(1));
   GET_NATIVE_ARGUMENT(Smi, start_index, arguments->NativeArgAt(2));
   return Jscre::Execute(regexp, str, start_index.Value());
diff --git a/runtime/lib/regexp_patch.dart b/runtime/lib/regexp_patch.dart
index d6e830c..6a921fa 100644
--- a/runtime/lib/regexp_patch.dart
+++ b/runtime/lib/regexp_patch.dart
@@ -77,6 +77,7 @@
   }
 
   Iterable<Match> allMatches(String str) {
+    if (str is! String) throw new ArgumentError(str);
     List<Match> result = new List<Match>();
     int length = str.length;
     int startIndex = 0;
diff --git a/runtime/lib/string.cc b/runtime/lib/string.cc
index 76c097a..797cad2 100644
--- a/runtime/lib/string.cc
+++ b/runtime/lib/string.cc
@@ -20,7 +20,7 @@
   // Unbox the array and determine the maximum element width.
   bool is_one_byte_string = true;
   intptr_t utf16_len = array_len;
-  uint32_t* utf32_array = zone->Alloc<uint32_t>(array_len);
+  int32_t* utf32_array = zone->Alloc<int32_t>(array_len);
   Object& index_object = Object::Handle(isolate);
   for (intptr_t i = 0; i < array_len; i++) {
     index_object = a.At(i);
@@ -102,7 +102,7 @@
   GET_NATIVE_ARGUMENT(Integer, index, arguments->NativeArgAt(1));
   uint32_t value = StringValueAt(receiver, index);
   ASSERT(value <= 0x10FFFF);
-  return Symbols::New(&value, 1);
+  return Symbols::FromCharCode(value);
 }
 
 DEFINE_NATIVE_ENTRY(String_charCodeAt, 2) {
@@ -144,10 +144,6 @@
   Instance& elem = Instance::Handle();
   for (intptr_t i = 0; i < strings.Length(); i++) {
     elem ^= strings.At(i);
-    if (elem.IsNull()) {
-      GrowableArray<const Object*> args;
-      Exceptions::ThrowByType(Exceptions::kNullPointer, args);
-    }
     if (!elem.IsString()) {
       GrowableArray<const Object*> args;
       args.Add(&elem);
diff --git a/runtime/tests/vm/dart/isolate_mirror_local_test.dart b/runtime/tests/vm/dart/isolate_mirror_local_test.dart
index 821912b..d4b8b88 100644
--- a/runtime/tests/vm/dart/isolate_mirror_local_test.dart
+++ b/runtime/tests/vm/dart/isolate_mirror_local_test.dart
@@ -304,9 +304,8 @@
   Expect.equals('dart:core.List', list_intf.qualifiedName);
   Expect.isFalse(list_intf.isPrivate);
   Expect.equals('Object', list_intf.superclass.simpleName);
-  Expect.equals('_ListImpl', list_intf.defaultFactory.simpleName);
   Expect.equals('dart:core', list_intf.owner.simpleName);
-  Expect.isFalse(list_intf.isClass);
+  Expect.isTrue(list_intf.isClass);
   Expect.equals('Collection', list_intf.superinterfaces[0].simpleName);
   Expect.equals("ClassMirror on 'List'", list_intf.toString());
 
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 5f2ec21..9b8ab80 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -5,6 +5,8 @@
 # When a spawned isolate throws an uncaught exception, we terminate the vm.
 cc/RunLoop_ExceptionChild: Fail
 
+cc/SymbolUnicode: Fail
+
 # These tests are expected to crash on all platforms.
 cc/ArrayNew_Overflow_Crash: Crash
 cc/AllocGeneric_Overflow: Crash
diff --git a/runtime/tools/gyp/nss_configurations.gypi b/runtime/tools/gyp/nss_configurations.gypi
index 2897c6c..74c857c 100644
--- a/runtime/tools/gyp/nss_configurations.gypi
+++ b/runtime/tools/gyp/nss_configurations.gypi
@@ -37,9 +37,6 @@
       '-Werror',
       '-Wall',
       '-ansi',
-      # This flag would let a certain assembly function be inlined,
-      # causing errors in mpcpucache.c.
-      '-fvisibility=hidden',
       # Not supported for C, only for C++.
       '-Wnon-virtual-dtor',
       '-Wno-conversion-null',
diff --git a/runtime/vm/assembler_ia32.cc b/runtime/vm/assembler_ia32.cc
index ec7f4c1..7fa7e21 100644
--- a/runtime/vm/assembler_ia32.cc
+++ b/runtime/vm/assembler_ia32.cc
@@ -19,15 +19,16 @@
 DEFINE_FLAG(bool, use_sse41, true, "Use SSE 4.1 if available");
 
 
-bool CPUFeatures::sse3_supported_ = false;
+bool CPUFeatures::sse2_supported_ = false;
 bool CPUFeatures::sse4_1_supported_ = false;
 #ifdef DEBUG
 bool CPUFeatures::initialized_ = false;
 #endif
 
-bool CPUFeatures::sse3_supported() {
+
+bool CPUFeatures::sse2_supported() {
   DEBUG_ASSERT(initialized_);
-  return sse3_supported_;
+  return sse2_supported_;
 }
 
 
@@ -60,7 +61,7 @@
   typedef uint64_t (*DetectCPUFeatures)();
   uint64_t features =
       reinterpret_cast<DetectCPUFeatures>(instructions.EntryPoint())();
-  sse3_supported_ = (features & kSSE3BitMask) != 0;
+  sse2_supported_ = (features & kSSE2BitMask) != 0;
   sse4_1_supported_ = (features & kSSE4_1BitMask) != 0;
 #ifdef DEBUG
   initialized_ = true;
diff --git a/runtime/vm/assembler_ia32.h b/runtime/vm/assembler_ia32.h
index 5d80c8b..a738df3 100644
--- a/runtime/vm/assembler_ia32.h
+++ b/runtime/vm/assembler_ia32.h
@@ -258,14 +258,14 @@
 class CPUFeatures : public AllStatic {
  public:
   static void InitOnce();
-  static bool sse3_supported();
+  static bool sse2_supported();
   static bool sse4_1_supported();
 
  private:
-  static const uint64_t kSSE3BitMask = static_cast<uint64_t>(1) << 32;
+  static const uint64_t kSSE2BitMask = static_cast<uint64_t>(1) << 26;
   static const uint64_t kSSE4_1BitMask = static_cast<uint64_t>(1) << 51;
 
-  static bool sse3_supported_;
+  static bool sse2_supported_;
   static bool sse4_1_supported_;
 #ifdef DEBUG
   static bool initialized_;
diff --git a/runtime/vm/assembler_x64.cc b/runtime/vm/assembler_x64.cc
index 373925e..57ffd01 100644
--- a/runtime/vm/assembler_x64.cc
+++ b/runtime/vm/assembler_x64.cc
@@ -19,18 +19,11 @@
 DEFINE_FLAG(bool, use_sse41, true, "Use SSE 4.1 if available");
 
 
-bool CPUFeatures::sse3_supported_ = false;
 bool CPUFeatures::sse4_1_supported_ = false;
 #ifdef DEBUG
 bool CPUFeatures::initialized_ = false;
 #endif
 
-bool CPUFeatures::sse3_supported() {
-  DEBUG_ASSERT(initialized_);
-  return sse3_supported_;
-}
-
-
 bool CPUFeatures::sse4_1_supported() {
   DEBUG_ASSERT(initialized_);
   return sse4_1_supported_ && FLAG_use_sse41;
@@ -63,7 +56,6 @@
   typedef uint64_t (*DetectCPUFeatures)();
   uint64_t features =
       reinterpret_cast<DetectCPUFeatures>(instructions.EntryPoint())();
-  sse3_supported_ = (features & kSSE3BitMask) != 0;
   sse4_1_supported_ = (features & kSSE4_1BitMask) != 0;
 #ifdef DEBUG
   initialized_ = true;
@@ -395,11 +387,10 @@
 
 
 void Assembler::movss(XmmRegister dst, const Address& src) {
-  // TODO(srdjan): implement and test XMM8 - XMM15.
-  ASSERT(dst <= XMM7);
+  ASSERT(dst <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF3);
-  EmitOperandREX(0, src, REX_NONE);
+  EmitREX_RB(dst, src);
   EmitUint8(0x0F);
   EmitUint8(0x10);
   EmitOperand(dst & 7, src);
@@ -407,11 +398,10 @@
 
 
 void Assembler::movss(const Address& dst, XmmRegister src) {
-  // TODO(srdjan): implement and test XMM8 - XMM15.
-  ASSERT(src <= XMM7);
+  ASSERT(src <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF3);
-  EmitOperandREX(0, dst, REX_NONE);
+  EmitREX_RB(src, dst);
   EmitUint8(0x0F);
   EmitUint8(0x11);
   EmitOperand(src & 7, dst);
@@ -419,11 +409,11 @@
 
 
 void Assembler::movss(XmmRegister dst, XmmRegister src) {
-  // TODO(srdjan): implement and test XMM8 - XMM15.
-  ASSERT(src <= XMM7);
-  ASSERT(dst <= XMM7);
+  ASSERT(src <= XMM15);
+  ASSERT(dst <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF3);
+  EmitREX_RB(src, dst);
   EmitUint8(0x0F);
   EmitUint8(0x11);
   EmitXmmRegisterOperand(src & 7, dst);
@@ -431,9 +421,10 @@
 
 
 void Assembler::movd(XmmRegister dst, Register src) {
-  ASSERT(dst <= XMM7);
+  ASSERT(dst <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0x66);
+  EmitREX_RB(dst, src);
   EmitUint8(0x0F);
   EmitUint8(0x6E);
   EmitOperand(dst & 7, Operand(src));
@@ -441,9 +432,10 @@
 
 
 void Assembler::movd(Register dst, XmmRegister src) {
-  ASSERT(src <= XMM7);
+  ASSERT(src <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0x66);
+  EmitREX_RB(src, dst);
   EmitUint8(0x0F);
   EmitUint8(0x7E);
   EmitOperand(src & 7, Operand(dst));
@@ -451,59 +443,58 @@
 
 
 void Assembler::addss(XmmRegister dst, XmmRegister src) {
-  // TODO(srdjan): implement and test XMM8 - XMM15.
-  ASSERT(src <= XMM7);
-  ASSERT(dst <= XMM7);
+  ASSERT(src <= XMM15);
+  ASSERT(dst <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF3);
+  EmitREX_RB(dst, src);
   EmitUint8(0x0F);
   EmitUint8(0x58);
-  EmitXmmRegisterOperand(dst, src);
+  EmitXmmRegisterOperand(dst & 7, src);
 }
 
 
 void Assembler::subss(XmmRegister dst, XmmRegister src) {
-  // TODO(srdjan): implement and test XMM8 - XMM15.
-  ASSERT(src <= XMM7);
-  ASSERT(dst <= XMM7);
+  ASSERT(src <= XMM15);
+  ASSERT(dst <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF3);
+  EmitREX_RB(dst, src);
   EmitUint8(0x0F);
   EmitUint8(0x5C);
-  EmitXmmRegisterOperand(dst, src);
+  EmitXmmRegisterOperand(dst & 7, src);
 }
 
 
 void Assembler::mulss(XmmRegister dst, XmmRegister src) {
-  // TODO(srdjan): implement and test XMM8 - XMM15.
-  ASSERT(src <= XMM7);
-  ASSERT(dst <= XMM7);
+  ASSERT(src <= XMM15);
+  ASSERT(dst <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF3);
+  EmitREX_RB(dst, src);
   EmitUint8(0x0F);
   EmitUint8(0x59);
-  EmitXmmRegisterOperand(dst, src);
+  EmitXmmRegisterOperand(dst & 7, src);
 }
 
 
 void Assembler::divss(XmmRegister dst, XmmRegister src) {
-  // TODO(srdjan): implement and test XMM8 - XMM15.
-  ASSERT(src <= XMM7);
-  ASSERT(dst <= XMM7);
+  ASSERT(src <= XMM15);
+  ASSERT(dst <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF3);
+  EmitREX_RB(dst, src);
   EmitUint8(0x0F);
   EmitUint8(0x5E);
-  EmitXmmRegisterOperand(dst, src);
+  EmitXmmRegisterOperand(dst & 7, src);
 }
 
 
 void Assembler::movsd(XmmRegister dst, const Address& src) {
-  // TODO(srdjan): implement and test XMM8 - XMM15.
-  ASSERT(dst <= XMM7);
+  ASSERT(dst <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF2);
-  EmitOperandREX(0, src, REX_NONE);
+  EmitREX_RB(dst, src);
   EmitUint8(0x0F);
   EmitUint8(0x10);
   EmitOperand(dst & 7, src);
@@ -511,11 +502,10 @@
 
 
 void Assembler::movsd(const Address& dst, XmmRegister src) {
-  // TODO(srdjan): implement and test XMM8 - XMM15.
-  ASSERT(src <= XMM7);
+  ASSERT(src <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF2);
-  EmitOperandREX(0, dst, REX_NONE);
+  EmitREX_RB(src, dst);
   EmitUint8(0x0F);
   EmitUint8(0x11);
   EmitOperand(src & 7, dst);
@@ -523,11 +513,11 @@
 
 
 void Assembler::movsd(XmmRegister dst, XmmRegister src) {
-  // TODO(srdjan): implement and test XMM8 - XMM15.
-  ASSERT(src <= XMM7);
-  ASSERT(dst <= XMM7);
+  ASSERT(src <= XMM15);
+  ASSERT(dst <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF2);
+  EmitREX_RB(src, dst);
   EmitUint8(0x0F);
   EmitUint8(0x11);
   EmitXmmRegisterOperand(src & 7, dst);
@@ -535,10 +525,10 @@
 
 
 void Assembler::movaps(XmmRegister dst, XmmRegister src) {
-  // TODO(vegorov): implement and test XMM8 - XMM15.
-  ASSERT(src <= XMM7);
-  ASSERT(dst <= XMM7);
+  ASSERT(src <= XMM15);
+  ASSERT(dst <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
+  EmitREX_RB(dst, src);
   EmitUint8(0x0F);
   EmitUint8(0x28);
   EmitXmmRegisterOperand(dst & 7, src);
@@ -546,90 +536,93 @@
 
 
 void Assembler::addsd(XmmRegister dst, XmmRegister src) {
-  // TODO(srdjan): implement and test XMM8 - XMM15.
-  ASSERT(src <= XMM7);
-  ASSERT(dst <= XMM7);
+  ASSERT(src <= XMM15);
+  ASSERT(dst <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF2);
+  EmitREX_RB(dst, src);
   EmitUint8(0x0F);
   EmitUint8(0x58);
-  EmitXmmRegisterOperand(dst, src);
+  EmitXmmRegisterOperand(dst & 7, src);
 }
 
 
 void Assembler::subsd(XmmRegister dst, XmmRegister src) {
-  // TODO(srdjan): implement and test XMM8 - XMM15.
-  ASSERT(src <= XMM7);
-  ASSERT(dst <= XMM7);
+  ASSERT(src <= XMM15);
+  ASSERT(dst <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF2);
+  EmitREX_RB(dst, src);
   EmitUint8(0x0F);
   EmitUint8(0x5C);
-  EmitXmmRegisterOperand(dst, src);
+  EmitXmmRegisterOperand(dst & 7, src);
 }
 
 
 void Assembler::mulsd(XmmRegister dst, XmmRegister src) {
-  // TODO(srdjan): implement and test XMM8 - XMM15.
-  ASSERT(src <= XMM7);
-  ASSERT(dst <= XMM7);
+  ASSERT(src <= XMM15);
+  ASSERT(dst <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF2);
+  EmitREX_RB(dst, src);
   EmitUint8(0x0F);
   EmitUint8(0x59);
-  EmitXmmRegisterOperand(dst, src);
+  EmitXmmRegisterOperand(dst & 7, src);
 }
 
 
 void Assembler::divsd(XmmRegister dst, XmmRegister src) {
-  // TODO(srdjan): implement and test XMM8 - XMM15.
-  ASSERT(src <= XMM7);
-  ASSERT(dst <= XMM7);
+  ASSERT(src <= XMM15);
+  ASSERT(dst <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF2);
+  EmitREX_RB(dst, src);
   EmitUint8(0x0F);
   EmitUint8(0x5E);
-  EmitXmmRegisterOperand(dst, src);
+  EmitXmmRegisterOperand(dst & 7, src);
 }
 
 
 void Assembler::comisd(XmmRegister a, XmmRegister b) {
-  ASSERT(a <= XMM7);
-  ASSERT(b <= XMM7);
+  ASSERT(a <= XMM15);
+  ASSERT(b <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0x66);
+  EmitREX_RB(a, b);
   EmitUint8(0x0F);
   EmitUint8(0x2F);
-  EmitXmmRegisterOperand(a, b);
+  EmitXmmRegisterOperand(a & 7, b);
 }
 
 
 void Assembler::movmskpd(Register dst, XmmRegister src) {
-  ASSERT(src <= XMM7);
+  ASSERT(src <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0x66);
+  EmitREX_RB(dst, src);
   EmitUint8(0x0F);
   EmitUint8(0x50);
-  EmitXmmRegisterOperand(dst, src);
+  EmitXmmRegisterOperand(dst & 7, src);
 }
 
 
 void Assembler::sqrtsd(XmmRegister dst, XmmRegister src) {
-  ASSERT(dst <= XMM7);
-  ASSERT(src <= XMM7);
+  ASSERT(dst <= XMM15);
+  ASSERT(src <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF2);
+  EmitREX_RB(dst, src);
   EmitUint8(0x0F);
   EmitUint8(0x51);
-  EmitXmmRegisterOperand(dst, src);
+  EmitXmmRegisterOperand(dst & 7, src);
 }
 
 
 void Assembler::xorpd(XmmRegister dst, const Address& src) {
-  ASSERT(dst <= XMM7);
+  ASSERT(dst <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0x66);
-  EmitOperandREX(0, src, REX_NONE);
+  EmitOperandREX(dst, src, REX_NONE);
   EmitUint8(0x0F);
   EmitUint8(0x57);
   EmitOperand(dst & 7, src);
@@ -637,59 +630,62 @@
 
 
 void Assembler::xorpd(XmmRegister dst, XmmRegister src) {
-  ASSERT(dst <= XMM7);
-  ASSERT(src <= XMM7);
+  ASSERT(dst <= XMM15);
+  ASSERT(src <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0x66);
+  EmitREX_RB(dst, src);
   EmitUint8(0x0F);
   EmitUint8(0x57);
-  EmitXmmRegisterOperand(dst, src);
+  EmitXmmRegisterOperand(dst & 7, src);
 }
 
 
 void Assembler::cvtsi2sd(XmmRegister dst, Register src) {
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
-  ASSERT(dst <= XMM7);
+  ASSERT(dst <= XMM15);
   Operand operand(src);
   EmitUint8(0xF2);
-  EmitOperandREX(0, operand, REX_W);
+  EmitOperandREX(dst, operand, REX_W);
   EmitUint8(0x0F);
   EmitUint8(0x2A);
-  EmitOperand(dst, operand);
+  EmitOperand(dst & 7, operand);
 }
 
 
 void Assembler::cvttsd2siq(Register dst, XmmRegister src) {
-  ASSERT(src <= XMM7);
+  ASSERT(src <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF2);
   Operand operand(dst);
-  EmitOperandREX(0, operand, REX_W);
+  EmitREX_RB(dst, src, REX_W);
   EmitUint8(0x0F);
   EmitUint8(0x2C);
-  EmitXmmRegisterOperand(dst, src);
+  EmitXmmRegisterOperand(dst & 7, src);
 }
 
 
 void Assembler::cvtss2sd(XmmRegister dst, XmmRegister src) {
-  ASSERT(src <= XMM7);
-  ASSERT(dst <= XMM7);
+  ASSERT(src <= XMM15);
+  ASSERT(dst <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF3);
+  EmitREX_RB(dst, src);
   EmitUint8(0x0F);
   EmitUint8(0x5A);
-  EmitXmmRegisterOperand(dst, src);
+  EmitXmmRegisterOperand(dst & 7, src);
 }
 
 
 void Assembler::cvtsd2ss(XmmRegister dst, XmmRegister src) {
-  ASSERT(src <= XMM7);
-  ASSERT(dst <= XMM7);
+  ASSERT(src <= XMM15);
+  ASSERT(dst <= XMM15);
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF2);
+  EmitREX_RB(dst, src);
   EmitUint8(0x0F);
   EmitUint8(0x5A);
-  EmitXmmRegisterOperand(dst, src);
+  EmitXmmRegisterOperand(dst & 7, src);
 }
 
 
@@ -2107,7 +2103,8 @@
 
 
 static const char* xmm_reg_names[kNumberOfXmmRegisters] = {
-  "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"
+  "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7",
+  "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15"
 };
 
 
diff --git a/runtime/vm/assembler_x64.h b/runtime/vm/assembler_x64.h
index cebc865..ab97b2a 100644
--- a/runtime/vm/assembler_x64.h
+++ b/runtime/vm/assembler_x64.h
@@ -275,14 +275,13 @@
 class CPUFeatures : public AllStatic {
  public:
   static void InitOnce();
-  static bool sse3_supported();
+  // x64 always has at least SSE2.
+  static bool sse2_supported() { return true; }
   static bool sse4_1_supported();
 
  private:
-  static const uint64_t kSSE3BitMask = static_cast<uint64_t>(1) << 32;
   static const uint64_t kSSE4_1BitMask = static_cast<uint64_t>(1) << 51;
 
-  static bool sse3_supported_;
   static bool sse4_1_supported_;
 #ifdef DEBUG
   static bool initialized_;
@@ -678,7 +677,18 @@
   inline void EmitXmmRegisterOperand(int rm, XmmRegister reg);
   inline void EmitFixup(AssemblerFixup* fixup);
   inline void EmitOperandSizeOverride();
-
+  inline void EmitREX_RB(XmmRegister reg,
+                         XmmRegister base,
+                         uint8_t rex = REX_NONE);
+  inline void EmitREX_RB(XmmRegister reg,
+                         const Operand& operand,
+                         uint8_t rex = REX_NONE);
+  inline void EmitREX_RB(XmmRegister reg,
+                         Register base,
+                         uint8_t rex = REX_NONE);
+  inline void EmitREX_RB(Register reg,
+                         XmmRegister base,
+                         uint8_t rex = REX_NONE);
   void EmitOperand(int rm, const Operand& operand);
   void EmitImmediate(const Immediate& imm);
   void EmitComplex(int rm, const Operand& operand, const Immediate& immediate);
@@ -726,6 +736,42 @@
 }
 
 
+inline void Assembler::EmitREX_RB(XmmRegister reg,
+                                  XmmRegister base,
+                                  uint8_t rex) {
+  if (reg > 7) rex |= REX_R;
+  if (base > 7) rex |= REX_B;
+  if (rex != REX_NONE) EmitUint8(REX_PREFIX | rex);
+}
+
+
+inline void Assembler::EmitREX_RB(XmmRegister reg,
+                                  const Operand& operand,
+                                  uint8_t rex) {
+  if (reg > 7) rex |= REX_R;
+  rex |= operand.rex();
+  if (rex != REX_NONE) EmitUint8(REX_PREFIX | rex);
+}
+
+
+inline void Assembler::EmitREX_RB(XmmRegister reg,
+                                  Register base,
+                                  uint8_t rex) {
+  if (reg > 7) rex |= REX_R;
+  if (base > 7) rex |= REX_B;
+  if (rex != REX_NONE) EmitUint8(REX_PREFIX | rex);
+}
+
+
+inline void Assembler::EmitREX_RB(Register reg,
+                                  XmmRegister base,
+                                  uint8_t rex) {
+  if (reg > 7) rex |= REX_R;
+  if (base > 7) rex |= REX_B;
+  if (rex != REX_NONE) EmitUint8(REX_PREFIX | rex);
+}
+
+
 inline void Assembler::EmitFixup(AssemblerFixup* fixup) {
   buffer_.EmitFixup(fixup);
 }
diff --git a/runtime/vm/assembler_x64_test.cc b/runtime/vm/assembler_x64_test.cc
index f2d6fce..32a54fa 100644
--- a/runtime/vm/assembler_x64_test.cc
+++ b/runtime/vm/assembler_x64_test.cc
@@ -1244,6 +1244,14 @@
   __ movss(XMM5, XMM4);
   __ movss(XMM6, XMM5);
   __ movss(XMM7, XMM6);
+  __ movss(XMM8, XMM7);
+  __ movss(XMM9, XMM8);
+  __ movss(XMM10, XMM9);
+  __ movss(XMM11, XMM10);
+  __ movss(XMM12, XMM11);
+  __ movss(XMM13, XMM12);
+  __ movss(XMM14, XMM13);
+  __ movss(XMM15, XMM14);
   __ pushq(R15);  // Callee saved.
   __ pushq(RAX);
   __ movq(Address(RSP, 0), Immediate(0));
@@ -1258,8 +1266,23 @@
   __ movss(XMM3, Address(R15, 0));
   __ movq(RAX, RSP);
   __ movss(Address(RAX, 0), XMM3);
-  __ movss(XMM4, Address(RAX, 0));
-  __ movss(XMM0, Address(RAX, 0));
+  __ movss(XMM1, Address(RAX, 0));
+  __ movss(XMM15, Address(RAX, 0));
+  __ movss(XMM14, XMM15);
+  __ movss(XMM13, XMM14);
+  __ movss(XMM12, XMM13);
+  __ movss(XMM11, XMM12);
+  __ movss(XMM10, XMM11);
+  __ movss(XMM9, XMM10);
+  __ movss(XMM8, XMM9);
+  __ movss(XMM7, XMM8);
+  __ movss(XMM6, XMM7);
+  __ movss(XMM5, XMM6);
+  __ movss(XMM4, XMM5);
+  __ movss(XMM3, XMM4);
+  __ movss(XMM2, XMM3);
+  __ movss(XMM1, XMM2);
+  __ movss(XMM0, XMM1);
   __ popq(RAX);
   __ popq(R15);  // Callee saved.
   __ ret();
@@ -1275,12 +1298,18 @@
 ASSEMBLER_TEST_GENERATE(SingleFPMoves2, assembler) {
   __ movq(RAX, Immediate(bit_cast<int32_t, float>(234.0f)));
   __ movd(XMM0, RAX);
-  __ movss(XMM1, XMM0);
+  __ movd(XMM8, RAX);
+  __ movss(XMM1, XMM8);
   __ pushq(RAX);
   __ movq(Address(RSP, 0), Immediate(0));
   __ movss(XMM0, Address(RSP, 0));
   __ movss(Address(RSP, 0), XMM1);
   __ movss(XMM0, Address(RSP, 0));
+  __ movq(Address(RSP, 0), Immediate(0));
+  __ movss(XMM9, XMM8);
+  __ movss(Address(RSP, 0), XMM9);
+  __ movss(XMM8, Address(RSP, 0));
+  __ movss(XMM0, XMM8);
   __ popq(RAX);
   __ ret();
 }
@@ -1297,12 +1326,19 @@
   __ pushq(RCX);
   __ movq(RBX, Immediate(bit_cast<int32_t, float>(12.3f)));
   __ movd(XMM0, RBX);
+  __ movd(XMM8, RBX);
   __ movq(RCX, Immediate(bit_cast<int32_t, float>(3.4f)));
   __ movd(XMM1, RCX);
+  __ movd(XMM9, RCX);
   __ addss(XMM0, XMM1);  // 15.7f
   __ mulss(XMM0, XMM1);  // 53.38f
   __ subss(XMM0, XMM1);  // 49.98f
   __ divss(XMM0, XMM1);  // 14.7f
+  __ addss(XMM8, XMM9);  // 15.7f
+  __ mulss(XMM8, XMM9);  // 53.38f
+  __ subss(XMM8, XMM9);  // 49.98f
+  __ divss(XMM8, XMM9);  // 14.7f
+  __ subss(XMM0, XMM8);  // 0.0f
   __ popq(RCX);
   __ popq(RBX);
   __ ret();
@@ -1312,7 +1348,7 @@
 ASSEMBLER_TEST_RUN(SingleFPOperations, entry) {
   typedef float (*SingleFPOperationsCode)();
   float res = reinterpret_cast<SingleFPOperationsCode>(entry)();
-  EXPECT_FLOAT_EQ(14.7f, res, 0.001f);
+  EXPECT_FLOAT_EQ(0.0f, res, 0.001f);
 }
 
 
@@ -1328,9 +1364,17 @@
   __ movsd(XMM5, XMM4);
   __ movsd(XMM6, XMM5);
   __ movsd(XMM7, XMM6);
+  __ movsd(XMM8, XMM7);
+  __ movsd(XMM9, XMM8);
+  __ movsd(XMM10, XMM9);
+  __ movsd(XMM11, XMM10);
+  __ movsd(XMM12, XMM11);
+  __ movsd(XMM13, XMM12);
+  __ movsd(XMM14, XMM13);
+  __ movsd(XMM15, XMM14);
   __ movq(Address(RSP, 0), Immediate(0));
   __ movsd(XMM0, Address(RSP, 0));
-  __ movsd(Address(RSP, 0), XMM7);
+  __ movsd(Address(RSP, 0), XMM15);
   __ movsd(XMM1, Address(RSP, 0));
   __ movq(R10, RSP);
   __ movsd(Address(R10, 0), XMM1);
@@ -1341,7 +1385,15 @@
   __ movq(RAX, RSP);
   __ movsd(Address(RAX, 0), XMM3);
   __ movsd(XMM4, Address(RAX, 0));
-  __ movsd(XMM7, Address(RSP, 0));
+  __ movsd(XMM15, Address(RSP, 0));
+  __ movaps(XMM14, XMM15);
+  __ movaps(XMM13, XMM14);
+  __ movaps(XMM12, XMM13);
+  __ movaps(XMM11, XMM12);
+  __ movaps(XMM10, XMM11);
+  __ movaps(XMM9, XMM10);
+  __ movaps(XMM8, XMM9);
+  __ movaps(XMM7, XMM8);
   __ movaps(XMM6, XMM7);
   __ movaps(XMM5, XMM6);
   __ movaps(XMM4, XMM5);
@@ -1365,13 +1417,22 @@
   __ movq(RAX, Immediate(bit_cast<int64_t, double>(12.3)));
   __ pushq(RAX);
   __ movsd(XMM0, Address(RSP, 0));
+  __ movsd(XMM8, Address(RSP, 0));
   __ movq(RAX, Immediate(bit_cast<int64_t, double>(3.4)));
   __ movq(Address(RSP, 0), RAX);
+  __ movsd(XMM12, Address(RSP, 0));
+  __ addsd(XMM8, XMM12);  // 15.7
+  __ mulsd(XMM8, XMM12);  // 53.38
+  __ subsd(XMM8, XMM12);  // 49.98
+  __ divsd(XMM8, XMM12);  // 14.7
+  __ sqrtsd(XMM8, XMM8);  // 3.834
   __ movsd(XMM1, Address(RSP, 0));
   __ addsd(XMM0, XMM1);  // 15.7
   __ mulsd(XMM0, XMM1);  // 53.38
   __ subsd(XMM0, XMM1);  // 49.98
   __ divsd(XMM0, XMM1);  // 14.7
+  __ sqrtsd(XMM0, XMM0);  // 3.834057902
+  __ addsd(XMM0, XMM8);  // 7.6681
   __ popq(RAX);
   __ ret();
 }
@@ -1380,13 +1441,16 @@
 ASSEMBLER_TEST_RUN(DoubleFPOperations, entry) {
   typedef double (*SingleFPOperationsCode)();
   double res = reinterpret_cast<SingleFPOperationsCode>(entry)();
-  EXPECT_FLOAT_EQ(14.7, res, 0.001);
+  EXPECT_FLOAT_EQ(7.668, res, 0.001);
 }
 
 
 ASSEMBLER_TEST_GENERATE(Int32ToDoubleConversion, assembler) {
   __ movl(RDX, Immediate(6));
   __ cvtsi2sd(XMM0, RDX);
+  __ movl(RDX, Immediate(8));
+  __ cvtsi2sd(XMM8, RDX);
+  __ subsd(XMM0, XMM8);
   __ ret();
 }
 
@@ -1394,13 +1458,16 @@
 ASSEMBLER_TEST_RUN(Int32ToDoubleConversion, entry) {
   typedef double (*IntToDoubleConversionCode)();
   double res = reinterpret_cast<IntToDoubleConversionCode>(entry)();
-  EXPECT_FLOAT_EQ(6.0, res, 0.001);
+  EXPECT_FLOAT_EQ(-2.0, res, 0.001);
 }
 
 
 ASSEMBLER_TEST_GENERATE(Int64ToDoubleConversion, assembler) {
   __ movq(RDX, Immediate(12LL << 32));
   __ cvtsi2sd(XMM0, RDX);
+  __ movsd(XMM15, XMM0);  // Move to high register
+  __ addsd(XMM0, XMM0);  // Stomp XMM0
+  __ movsd(XMM0, XMM15);  // Move back to XMM0
   __ ret();
 }
 
@@ -1415,9 +1482,14 @@
 ASSEMBLER_TEST_GENERATE(DoubleToInt64Conversion, assembler) {
   __ movq(RAX, Immediate(bit_cast<int64_t, double>(12.3)));
   __ pushq(RAX);
+  __ movsd(XMM9, Address(RSP, 0));
   __ movsd(XMM6, Address(RSP, 0));
   __ popq(RAX);
+  __ cvttsd2siq(R10, XMM6);
   __ cvttsd2siq(RDX, XMM6);
+  __ cvttsd2siq(R10, XMM9);
+  __ cvttsd2siq(RDX, XMM9);
+  __ subq(RDX, R10);
   __ movq(RAX, RDX);
   __ ret();
 }
@@ -1426,7 +1498,7 @@
 ASSEMBLER_TEST_RUN(DoubleToInt64Conversion, entry) {
   typedef int64_t (*DoubleToInt64ConversionCode)();
   int64_t res = reinterpret_cast<DoubleToInt64ConversionCode>(entry)();
-  EXPECT_EQ(12, res);
+  EXPECT_EQ(0, res);
 }
 
 
@@ -1605,7 +1677,14 @@
 
 
 ASSEMBLER_TEST_GENERATE(XorpdZeroing2, assembler) {
+  Label done;
+  __ xorpd(XMM15, XMM15);
   __ xorpd(XMM0, XMM0);
+  __ xorpd(XMM0, XMM15);
+  __ comisd(XMM0, XMM15);
+  __ j(ZERO, &done);
+  __ int3();
+  __ Bind(&done);
   __ ret();
 }
 
diff --git a/runtime/vm/benchmark_test.cc b/runtime/vm/benchmark_test.cc
index 29a2417..d719b0e 100644
--- a/runtime/vm/benchmark_test.cc
+++ b/runtime/vm/benchmark_test.cc
@@ -275,7 +275,7 @@
   char* script = NULL;
   if (dart_root != NULL) {
     const char* kFormatStr =
-        "#import('%s/sdk/lib/_internal/compiler/compiler.dart');";
+        "import '%s/sdk/lib/_internal/compiler/compiler.dart';";
     intptr_t len = OS::SNPrint(NULL, 0, kFormatStr, dart_root) + 1;
     script = reinterpret_cast<char*>(malloc(len));
     EXPECT(script != NULL);
@@ -286,7 +286,7 @@
     EXPECT_VALID(lib);
   } else {
     Dart_Handle lib = TestCase::LoadTestScript(
-        "#import('sdk/lib/_internal/compiler/compiler.dart');",
+        "import 'sdk/lib/_internal/compiler/compiler.dart';",
         reinterpret_cast<Dart_NativeEntryResolver>(NativeResolver));
     EXPECT_VALID(lib);
   }
diff --git a/runtime/vm/bootstrap_natives.cc b/runtime/vm/bootstrap_natives.cc
index 47a8c3a..9978bf7 100644
--- a/runtime/vm/bootstrap_natives.cc
+++ b/runtime/vm/bootstrap_natives.cc
@@ -60,7 +60,7 @@
   ASSERT(!library.IsNull());
   library.set_native_entry_resolver(resolver);
 
-  library = Library::CollectionLibrary();
+  library = Library::MathLibrary();
   ASSERT(!library.IsNull());
   library.set_native_entry_resolver(resolver);
 
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index 7b424b0..fad33c9 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -27,6 +27,7 @@
   V(Integer_moduloFromInteger, 2)                                              \
   V(Integer_greaterThanFromInteger, 2)                                         \
   V(Integer_equalToInteger, 2)                                                 \
+  V(Integer_parse, 1)                                                          \
   V(ReceivePortImpl_factory, 1)                                                \
   V(ReceivePortImpl_closeInternal, 1)                                          \
   V(SendPortImpl_sendInternal_, 3)                                             \
@@ -55,6 +56,7 @@
   V(Double_ceil, 1)                                                            \
   V(Double_truncate, 1)                                                        \
   V(Double_toInt, 1)                                                           \
+  V(Double_parse, 1)                                                           \
   V(Double_toStringAsFixed, 2)                                                 \
   V(Double_toStringAsExponential, 2)                                           \
   V(Double_toStringAsPrecision, 2)                                             \
@@ -80,19 +82,16 @@
   V(String_toLowerCase, 1)                                                     \
   V(String_toUpperCase, 1)                                                     \
   V(Strings_concatAll, 1)                                                      \
-  V(MathNatives_sqrt, 1)                                                       \
-  V(MathNatives_sin, 1)                                                        \
-  V(MathNatives_cos, 1)                                                        \
-  V(MathNatives_tan, 1)                                                        \
-  V(MathNatives_asin, 1)                                                       \
-  V(MathNatives_acos, 1)                                                       \
-  V(MathNatives_atan, 1)                                                       \
-  V(MathNatives_atan2, 2)                                                      \
-  V(MathNatives_exp, 1)                                                        \
-  V(MathNatives_log, 1)                                                        \
-  V(MathNatives_random, 0)                                                     \
-  V(MathNatives_parseInt, 1)                                                   \
-  V(MathNatives_parseDouble, 1)                                                \
+  V(Math_sqrt, 1)                                                              \
+  V(Math_sin, 1)                                                               \
+  V(Math_cos, 1)                                                               \
+  V(Math_tan, 1)                                                               \
+  V(Math_asin, 1)                                                              \
+  V(Math_acos, 1)                                                              \
+  V(Math_atan, 1)                                                              \
+  V(Math_atan2, 2)                                                             \
+  V(Math_exp, 1)                                                               \
+  V(Math_log, 1)                                                               \
   V(DateNatives_currentTimeMillis, 0)                                          \
   V(DateNatives_timeZoneName, 1)                                               \
   V(DateNatives_timeZoneOffsetInSeconds, 1)                                    \
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 3283db1..bae68fd 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -838,16 +838,6 @@
       type_argument = arguments.TypeAt(i);
       type_argument = FinalizeType(cls, type_argument, finalization);
       if (type_argument.IsMalformed()) {
-        // Malformed type arguments to a constructor of a generic type are
-        // reported as a compile-time error.
-        if (finalization >= kCanonicalizeForCreation) {
-          const Script& script = Script::Handle(cls.script());
-          const String& type_name =
-              String::Handle(parameterized_type.UserVisibleName());
-          ReportError(script, parameterized_type.token_pos(),
-                      "type '%s' has malformed type argument",
-                      type_name.ToCString());
-        }
         // In production mode, malformed type arguments are mapped to dynamic.
         // In checked mode, a type with malformed type arguments is malformed.
         if (FLAG_enable_type_checks || FLAG_error_on_malformed_type) {
@@ -877,7 +867,7 @@
   // However, type parameter bounds are checked below, even for a raw type.
   if (!arguments.IsNull() && (arguments.Length() != num_type_parameters)) {
     // Wrong number of type arguments. The type is malformed.
-    if (finalization >= kCanonicalizeForCreation) {
+    if (finalization >= kCanonicalizeExpression) {
       const Script& script = Script::Handle(cls.script());
       const String& type_name =
           String::Handle(parameterized_type.UserVisibleName());
diff --git a/runtime/vm/class_finalizer.h b/runtime/vm/class_finalizer.h
index 18ce755..2fe9ea6 100644
--- a/runtime/vm/class_finalizer.h
+++ b/runtime/vm/class_finalizer.h
@@ -33,10 +33,13 @@
     kDoNotResolve,             // Type resolution is postponed.
     kTryResolve,               // Type resolution is attempted.
     kFinalize,                 // Type resolution and type finalization are
-                               // required; a malformed type is tolerated.
+                               // required; a malformed type is tolerated, since
+                               // the type may be used as a type annotation.
     kCanonicalize,             // Same as kFinalize, but with canonicalization.
-    kCanonicalizeForCreation,  // Same as kCanonicalize, but do not tolerate
-                               // wrong number of type arguments.
+    kCanonicalizeExpression,   // Same as kCanonicalize, but do not tolerate
+                               // wrong number of type arguments or ambiguous
+                               // type reference, since the type is not used as
+                               // a type annotation, but as a type expression.
     kCanonicalizeWellFormed    // Error-free resolution, finalization, and
                                // canonicalization are required; a malformed
                                // type is not tolerated.
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index 008673f..f24bd03 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -770,73 +770,38 @@
 }
 
 
-static bool UpdateResolvedStaticCall(const Code& code,
-                              intptr_t offset,
-                              const Code& target_code) {
-  // PC offsets are mapped to the corresponding code object in the
-  // resolved_static_calls array. The array grows as static calls are being
-  // resolved.
-  const int kOffset = 0;
-  const int kCode = 1;
-  const int kEntrySize = 2;
-
-  GrowableObjectArray& resolved_static_calls =
-      GrowableObjectArray::Handle(code.resolved_static_calls());
-  intptr_t index = -1;
-  if (resolved_static_calls.IsNull()) {
-    resolved_static_calls = GrowableObjectArray::New(2, Heap::kOld);
-    code.set_resolved_static_calls(resolved_static_calls);
-  } else {
-    // Search for the offset in the resolved static calls.
-    const intptr_t len = resolved_static_calls.Length();
-    Object& off = Object::Handle();
-    for (intptr_t i = 0; i < len; i += kEntrySize) {
-      off = resolved_static_calls.At(i + kOffset);
-      if (Smi::Cast(off).Value() == offset) {
-        index = i;
-        break;
-      }
-    }
-  }
-  if (index == -1) {
-    // The static call with this offset is not yet present: Add it.
-    resolved_static_calls.Add(Smi::Handle(Smi::New(offset)));
-    resolved_static_calls.Add(target_code);
-  } else {
-    // Overwrite the currently recorded target.
-    resolved_static_calls.SetAt(index + kCode, target_code);
-  }
-  return index != -1;
-}
-
-
+// Patches static call with the target's entry point. Compiles target if
+// necessary.
 DEFINE_RUNTIME_ENTRY(PatchStaticCall, 0) {
-  // This function is called after successful resolving and compilation of
-  // the target method.
   ASSERT(arguments.ArgCount() == kPatchStaticCallRuntimeEntry.argument_count());
   DartFrameIterator iterator;
   StackFrame* caller_frame = iterator.NextFrame();
   ASSERT(caller_frame != NULL);
-  uword target = 0;
-  Function& target_function = Function::Handle();
-  CodePatcher::GetStaticCallAt(caller_frame->pc(), &target_function, &target);
-  ASSERT(target_function.HasCode());
+  const Code& caller_code = Code::Handle(caller_frame->LookupDartCode());
+  ASSERT(!caller_code.IsNull());
+  const Function& target_function = Function::Handle(
+      caller_code.GetStaticCallTargetFunctionAt(caller_frame->pc()));
+  if (!target_function.HasCode()) {
+    const Error& error =
+        Error::Handle(Compiler::CompileFunction(target_function));
+    if (!error.IsNull()) {
+      Exceptions::PropagateError(error);
+    }
+  }
   const Code& target_code = Code::Handle(target_function.CurrentCode());
-  uword new_target = target_code.EntryPoint();
-  // Verify that we are not patching repeatedly.
-  ASSERT(target != new_target);
-  CodePatcher::PatchStaticCallAt(caller_frame->pc(), new_target);
-  const Code& code = Code::Handle(caller_frame->LookupDartCode());
-  bool found = UpdateResolvedStaticCall(code,
-                                        caller_frame->pc() - code.EntryPoint(),
-                                        target_code);
-  ASSERT(!found);
+  // Before patching verify that we are not repeatedly patching to the same
+  // target.
+  ASSERT(target_code.EntryPoint() !=
+         CodePatcher::GetStaticCallTargetAt(caller_frame->pc()));
+  CodePatcher::PatchStaticCallAt(caller_frame->pc(), target_code.EntryPoint());
+  caller_code.SetStaticCallTargetCodeAt(caller_frame->pc(), target_code);
   if (FLAG_trace_patching) {
     OS::Print("PatchStaticCall: patching from %#"Px" to '%s' %#"Px"\n",
         caller_frame->pc(),
         target_function.ToFullyQualifiedCString(),
-        new_target);
+        target_code.EntryPoint());
   }
+  arguments.SetReturn(target_code);
 }
 
 
@@ -904,8 +869,7 @@
 
 
 // Gets called from debug stub when code reaches a breakpoint.
-//   Arg0: function object of the static function that was about to be called.
-DEFINE_RUNTIME_ENTRY(BreakpointStaticHandler, 1) {
+DEFINE_RUNTIME_ENTRY(BreakpointStaticHandler, 0) {
   ASSERT(arguments.ArgCount() ==
       kBreakpointStaticHandlerRuntimeEntry.argument_count());
   ASSERT(isolate->debugger() != NULL);
@@ -913,13 +877,20 @@
   // Make sure the static function that is about to be called is
   // compiled. The stub will jump to the entry point without any
   // further tests.
-  const Function& function = Function::CheckedHandle(arguments.ArgAt(0));
+  DartFrameIterator iterator;
+  StackFrame* caller_frame = iterator.NextFrame();
+  ASSERT(caller_frame != NULL);
+  const Code& code = Code::Handle(caller_frame->LookupDartCode());
+  const Function& function =
+      Function::Handle(code.GetStaticCallTargetFunctionAt(caller_frame->pc()));
+
   if (!function.HasCode()) {
     const Error& error = Error::Handle(Compiler::CompileFunction(function));
     if (!error.IsNull()) {
       Exceptions::PropagateError(error);
     }
   }
+  arguments.SetReturn(Code::ZoneHandle(function.CurrentCode()));
 }
 
 
@@ -1376,12 +1347,6 @@
   const Array& function_args = Array::CheckedHandle(arguments.ArgAt(1));
   const String& function_name = String::Handle(Symbols::Call());
   GrowableArray<const Object*> dart_arguments(5);
-  if (instance.IsNull()) {
-    dart_arguments.Add(&function_name);
-    dart_arguments.Add(&function_args);
-    Exceptions::ThrowByType(Exceptions::kNullPointer, dart_arguments);
-    UNREACHABLE();
-  }
 
   // TODO(regis): Resolve and invoke "call" method, if existing.
 
@@ -1565,13 +1530,10 @@
 
 
 // The caller must be a static call in a Dart frame, or an entry frame.
-// Patch static call to point to 'new_entry_point'.
-DEFINE_RUNTIME_ENTRY(FixCallersTarget, 1) {
+// Patch static call to point to valid code's entry point.
+DEFINE_RUNTIME_ENTRY(FixCallersTarget, 0) {
   ASSERT(arguments.ArgCount() ==
       kFixCallersTargetRuntimeEntry.argument_count());
-  const Function& function = Function::CheckedHandle(arguments.ArgAt(0));
-  ASSERT(!function.IsNull());
-  ASSERT(function.HasCode());
 
   StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames);
   StackFrame* frame = iterator.NextFrame();
@@ -1579,29 +1541,25 @@
     frame = iterator.NextFrame();
   }
   ASSERT(frame != NULL);
-  if (!frame->IsEntryFrame()) {
-    ASSERT(frame->IsDartFrame());
-    uword target = 0;
-    Function& target_function = Function::Handle();
-    CodePatcher::GetStaticCallAt(frame->pc(), &target_function, &target);
-    ASSERT(target_function.HasCode());
-    ASSERT(target_function.raw() == function.raw());
-    const Code& target_code = Code::Handle(function.CurrentCode());
-    const uword new_entry_point = target_code.EntryPoint();
-    ASSERT(target != new_entry_point);  // Why patch otherwise.
-    CodePatcher::PatchStaticCallAt(frame->pc(), new_entry_point);
-    const Code& code = Code::Handle(frame->LookupDartCode());
-    bool found = UpdateResolvedStaticCall(code,
-                                          frame->pc() - code.EntryPoint(),
-                                          target_code);
-    ASSERT(found);
-    if (FLAG_trace_patching) {
-      OS::Print("FixCallersTarget: patching from %#"Px" to '%s' %#"Px"\n",
-          frame->pc(),
-          target_function.ToFullyQualifiedCString(),
-          new_entry_point);
-    }
+  if (frame->IsEntryFrame()) {
+    // Since function's current code is always unpatched, the entry frame always
+    // calls to unpatched code.
+    UNREACHABLE();
   }
+  ASSERT(frame->IsDartFrame());
+  const Code& caller_code = Code::Handle(frame->LookupDartCode());
+  const Function& target_function = Function::Handle(
+      caller_code.GetStaticCallTargetFunctionAt(frame->pc()));
+  const Code& target_code = Code::Handle(target_function.CurrentCode());
+  CodePatcher::PatchStaticCallAt(frame->pc(), target_code.EntryPoint());
+  caller_code.SetStaticCallTargetCodeAt(frame->pc(), target_code);
+  if (FLAG_trace_patching) {
+    OS::Print("FixCallersTarget: patching from %#"Px" to '%s' %#"Px"\n",
+        frame->pc(),
+        Function::Handle(target_code.function()).ToFullyQualifiedCString(),
+        target_code.EntryPoint());
+  }
+  arguments.SetReturn(target_code);
 }
 
 
diff --git a/runtime/vm/code_patcher.h b/runtime/vm/code_patcher.h
index ebe8980..8377692 100644
--- a/runtime/vm/code_patcher.h
+++ b/runtime/vm/code_patcher.h
@@ -43,10 +43,7 @@
   // or dynamic Dart call.
   static bool IsDartCall(uword return_address);
 
-  // Get static call information.
-  static void GetStaticCallAt(uword return_address,
-                              Function* function,
-                              uword* target);
+  static uword GetStaticCallTargetAt(uword return_address);
 
   // Get instance call information.
   static void GetInstanceCallAt(uword return_address,
diff --git a/runtime/vm/code_patcher_arm.cc b/runtime/vm/code_patcher_arm.cc
index e67ce9d..0211183 100644
--- a/runtime/vm/code_patcher_arm.cc
+++ b/runtime/vm/code_patcher_arm.cc
@@ -10,7 +10,6 @@
 namespace dart {
 
 void CodePatcher::GetStaticCallAt(uword return_address,
-                                  Function* function,
                                   uword* target) {
   UNIMPLEMENTED();
 }
diff --git a/runtime/vm/code_patcher_ia32.cc b/runtime/vm/code_patcher_ia32.cc
index fc9a340..83260ce 100644
--- a/runtime/vm/code_patcher_ia32.cc
+++ b/runtime/vm/code_patcher_ia32.cc
@@ -14,7 +14,7 @@
 
 namespace dart {
 
-// The pattern of a Dart call is:
+// The pattern of a Dart instance call is:
 //  1: mov ECX, immediate 1
 //  2: mov EDX, immediate 2
 //  3: call target_address
@@ -97,27 +97,6 @@
 };
 
 
-// The expected pattern of a dart static call:
-//  mov ECX, function_object
-//  mov EDX, argument_descriptor_array
-//  call target_address
-//  <- return address
-class StaticCall : public DartCallPattern {
- public:
-  explicit StaticCall(uword return_address)
-      : DartCallPattern(return_address) {}
-
-  RawFunction* function() const {
-    Function& f = Function::Handle();
-    f ^= reinterpret_cast<RawObject*>(immediate_one());
-    return f.raw();
-  }
-
- private:
-  DISALLOW_IMPLICIT_CONSTRUCTORS(StaticCall);
-};
-
-
 // The expected pattern of a dart instance call:
 //  mov ECX, ic-data
 //  mov EDX, argument_descriptor_array
@@ -139,14 +118,59 @@
 };
 
 
-void CodePatcher::GetStaticCallAt(uword return_address,
-                                  Function* function,
-                                  uword* target) {
-  ASSERT(function != NULL);
-  ASSERT(target != NULL);
+// The expected pattern of a dart static call:
+//  mov EDX, argument_descriptor_array
+//  call target_address
+//  <- return address
+class StaticCall : public ValueObject {
+ public:
+  explicit StaticCall(uword return_address)
+      : start_(return_address - (kNumInstructions * kInstructionSize)) {
+    ASSERT(IsValid(return_address));
+    ASSERT(kInstructionSize == Assembler::kCallExternalLabelSize);
+  }
+
+  static bool IsValid(uword return_address) {
+    uint8_t* code_bytes =
+        reinterpret_cast<uint8_t*>(
+            return_address - (kNumInstructions * kInstructionSize));
+    return (code_bytes[0] == 0xBA) &&
+           (code_bytes[1 * kInstructionSize] == 0xE8);
+  }
+
+  uword target() const {
+    const uword offset = *reinterpret_cast<uword*>(call_address() + 1);
+    return return_address() + offset;
+  }
+
+  void set_target(uword target) const {
+    uword* target_addr = reinterpret_cast<uword*>(call_address() + 1);
+    uword offset = target - return_address();
+    *target_addr = offset;
+    CPU::FlushICache(call_address(), kInstructionSize);
+  }
+
+  static const int kNumInstructions = 2;
+  static const int kInstructionSize = 5;  // All instructions have same length.
+
+ private:
+  uword return_address() const {
+    return start_ + kNumInstructions * kInstructionSize;
+  }
+
+  uword call_address() const {
+    return start_ + 1 * kInstructionSize;
+  }
+
+  uword start_;
+
+  DISALLOW_IMPLICIT_CONSTRUCTORS(StaticCall);
+};
+
+
+uword CodePatcher::GetStaticCallTargetAt(uword return_address) {
   StaticCall call(return_address);
-  *target = call.target();
-  *function = call.function();
+  return call.target();
 }
 
 
diff --git a/runtime/vm/code_patcher_x64.cc b/runtime/vm/code_patcher_x64.cc
index 059c9cd..58a3785 100644
--- a/runtime/vm/code_patcher_x64.cc
+++ b/runtime/vm/code_patcher_x64.cc
@@ -14,7 +14,7 @@
 
 namespace dart {
 
-// The pattern of a Dart call is:
+// The pattern of a Dart instance call is:
 //  00: 48 bb imm64  mov RBX, immediate 1
 //  10: 49 ba imm64  mov R10, immediate 2
 //  20: 49 bb imm64  mov R11, target_address
@@ -87,24 +87,13 @@
 };
 
 
-// A Dart static call passes the function object in RBX.
-class StaticCall : public DartCallPattern {
- public:
-  explicit StaticCall(uword return_address)
-      : DartCallPattern(return_address) {}
-
-  RawFunction* function() const {
-    Function& f = Function::Handle();
-    f ^= reinterpret_cast<RawObject*>(immediate_one());
-    return f.raw();
-  }
-
- private:
-  DISALLOW_IMPLICIT_CONSTRUCTORS(StaticCall);
-};
-
-
 // A Dart instance call passes the ic-data in RBX.
+// The expected pattern of a dart instance call:
+//  mov RBX, ic-data
+//  mov R10, argument_descriptor_array
+//  mov R11, target_address
+//  call R11
+//  <- return address
 class InstanceCall : public DartCallPattern {
  public:
   explicit InstanceCall(uword return_address)
@@ -121,14 +110,50 @@
 };
 
 
-void CodePatcher::GetStaticCallAt(uword return_address,
-                                  Function* function,
-                                  uword* target) {
-  ASSERT(function != NULL);
-  ASSERT(target != NULL);
+// The expected pattern of a dart static call:
+//  mov R10, argument_descriptor_array (10 bytes)
+//  mov R11, target_address (10 bytes)
+//  call R11  (3 bytes)
+//  <- return address
+class StaticCall : public ValueObject {
+ public:
+  explicit StaticCall(uword return_address)
+      : start_(return_address - kCallPatternSize) {
+    ASSERT(IsValid(return_address));
+    ASSERT((kCallPatternSize - 10) == Assembler::kCallExternalLabelSize);
+  }
+
+  static const int kCallPatternSize = 23;
+
+  static bool IsValid(uword return_address) {
+    uint8_t* code_bytes =
+        reinterpret_cast<uint8_t*>(return_address - kCallPatternSize);
+    return (code_bytes[00] == 0x49) && (code_bytes[01] == 0xBA) &&
+           (code_bytes[10] == 0x49) && (code_bytes[11] == 0xBB) &&
+           (code_bytes[20] == 0x41) && (code_bytes[21] == 0xFF) &&
+           (code_bytes[22] == 0xD3);
+  }
+
+  uword target() const {
+    return *reinterpret_cast<uword*>(start_ + 10 + 2);
+  }
+
+  void set_target(uword target) const {
+    uword* target_addr = reinterpret_cast<uword*>(start_ + 10 + 2);
+    *target_addr = target;
+    CPU::FlushICache(start_ + 10, 2 + 8);
+  }
+
+ private:
+  uword start_;
+
+  DISALLOW_IMPLICIT_CONSTRUCTORS(StaticCall);
+};
+
+
+uword CodePatcher::GetStaticCallTargetAt(uword return_address) {
   StaticCall call(return_address);
-  *target = call.target();
-  *function = call.function();
+  return call.target();
 }
 
 
diff --git a/runtime/vm/compiler.cc b/runtime/vm/compiler.cc
index 4b11672..25cb8a3 100644
--- a/runtime/vm/compiler.cc
+++ b/runtime/vm/compiler.cc
@@ -277,6 +277,7 @@
       graph_compiler.FinalizeVarDescriptors(code);
       graph_compiler.FinalizeExceptionHandlers(code);
       graph_compiler.FinalizeComments(code);
+      graph_compiler.FinalizeStaticCallTargetsTable(code);
       if (optimized) {
         CodePatcher::PatchEntry(Code::Handle(function.CurrentCode()));
         function.SetCode(code);
@@ -416,6 +417,25 @@
   const ExceptionHandlers& handlers =
         ExceptionHandlers::Handle(code.exception_handlers());
   OS::Print("%s}\n", handlers.ToCString());
+
+  {
+    OS::Print("Static call target functions {\n");
+    const Array& table = Array::Handle(code.static_calls_target_table());
+    Smi& offset = Smi::Handle();
+    Function& function = Function::Handle();
+    Code& code = Code::Handle();
+    for (intptr_t i = 0; i < table.Length();
+        i += Code::kSCallTableEntryLength) {
+      offset ^= table.At(i + Code::kSCallTableOffsetEntry);
+      function ^= table.At(i + Code::kSCallTableFunctionEntry);
+      code ^= table.At(i + Code::kSCallTableCodeEntry);
+      OS::Print("  0x%"Px": %s, %p\n",
+          start + offset.Value(),
+          function.ToFullyQualifiedCString(),
+          code.raw());
+    }
+    OS::Print("}\n");
+  }
 }
 
 
diff --git a/runtime/vm/constants_ia32.h b/runtime/vm/constants_ia32.h
index 1c8325f..02a84b7 100644
--- a/runtime/vm/constants_ia32.h
+++ b/runtime/vm/constants_ia32.h
@@ -69,7 +69,8 @@
   TIMES_1 = 0,
   TIMES_2 = 1,
   TIMES_4 = 2,
-  TIMES_8 = 3
+  TIMES_8 = 3,
+  TIMES_HALF_WORD_SIZE = kWordSizeLog2 - 1
 };
 
 
diff --git a/runtime/vm/constants_x64.h b/runtime/vm/constants_x64.h
index 579ea56..38a2046 100644
--- a/runtime/vm/constants_x64.h
+++ b/runtime/vm/constants_x64.h
@@ -51,7 +51,15 @@
   XMM5 = 5,
   XMM6 = 6,
   XMM7 = 7,
-  kNumberOfXmmRegisters = 8,
+  XMM8 = 8,
+  XMM9 = 9,
+  XMM10 = 10,
+  XMM11 = 11,
+  XMM12 = 12,
+  XMM13 = 13,
+  XMM14 = 14,
+  XMM15 = 15,
+  kNumberOfXmmRegisters = 16,
   kNoXmmRegister = -1  // Signals an illegal register.
 };
 
@@ -84,7 +92,8 @@
   TIMES_1 = 0,
   TIMES_2 = 1,
   TIMES_4 = 2,
-  TIMES_8 = 3
+  TIMES_8 = 3,
+  TIMES_HALF_WORD_SIZE = kWordSizeLog2 - 1
 };
 
 
diff --git a/runtime/vm/custom_isolate_test.cc b/runtime/vm/custom_isolate_test.cc
index 2090a7d..d8e2444 100644
--- a/runtime/vm/custom_isolate_test.cc
+++ b/runtime/vm/custom_isolate_test.cc
@@ -24,7 +24,7 @@
 
 
 static const char* kCustomIsolateScriptChars =
-    "#import('dart:isolate');\n"
+    "import 'dart:isolate';\n"
     "\n"
     "ReceivePort mainPort;\n"
     "\n"
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index 99e2886..fcc3501 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -48,12 +48,12 @@
 
 
 // TODO(turnidge): We should add a corresponding Dart::Cleanup.
-bool Dart::InitOnce(Dart_IsolateCreateCallback create,
+const char* Dart::InitOnce(Dart_IsolateCreateCallback create,
                     Dart_IsolateInterruptCallback interrupt,
                     Dart_IsolateShutdownCallback shutdown) {
   // TODO(iposva): Fix race condition here.
   if (vm_isolate_ != NULL || !Flags::Initialized()) {
-    return false;
+    return "VM already initialized.";
   }
   OS::InitOnce();
   VirtualMemory::InitOnce();
@@ -78,8 +78,10 @@
     Symbols::InitOnce(vm_isolate_);
     CPUFeatures::InitOnce();
 #if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
-    // Dart VM requires at least SSE3.
-    if (!CPUFeatures::sse3_supported()) return false;
+    // Dart VM requires at least SSE2.
+    if (!CPUFeatures::sse2_supported()) {
+      return "SSE2 is required.";
+    }
 #endif
     PremarkingVisitor premarker(vm_isolate_);
     vm_isolate_->heap()->IterateOldObjects(&premarker);
@@ -89,7 +91,7 @@
   Isolate::SetCreateCallback(create);
   Isolate::SetInterruptCallback(interrupt);
   Isolate::SetShutdownCallback(shutdown);
-  return true;
+  return NULL;
 }
 
 
diff --git a/runtime/vm/dart.h b/runtime/vm/dart.h
index 4b741e0..585cddd 100644
--- a/runtime/vm/dart.h
+++ b/runtime/vm/dart.h
@@ -18,9 +18,9 @@
 
 class Dart : public AllStatic {
  public:
-  static bool InitOnce(Dart_IsolateCreateCallback create,
-                       Dart_IsolateInterruptCallback interrupt,
-                       Dart_IsolateShutdownCallback shutdown);
+  static const char* InitOnce(Dart_IsolateCreateCallback create,
+                              Dart_IsolateInterruptCallback interrupt,
+                              Dart_IsolateShutdownCallback shutdown);
 
   static Isolate* CreateIsolate(const char* name_prefix);
   static RawError* InitializeIsolate(const uint8_t* snapshot, void* data);
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 88d0389..aed8a10 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -739,7 +739,12 @@
 DART_EXPORT bool Dart_Initialize(Dart_IsolateCreateCallback create,
                                  Dart_IsolateInterruptCallback interrupt,
                                  Dart_IsolateShutdownCallback shutdown) {
-  return Dart::InitOnce(create, interrupt, shutdown);
+  const char* err_msg = Dart::InitOnce(create, interrupt, shutdown);
+  if (err_msg != NULL) {
+    OS::PrintErr("Dart_Initialize: %s\n", err_msg);
+    return false;
+  }
+  return true;
 }
 
 DART_EXPORT bool Dart_SetVMFlags(int argc, const char** argv) {
@@ -1571,7 +1576,7 @@
 }
 
 
-DART_EXPORT Dart_Handle Dart_NewStringFromUTF32(const uint32_t* utf32_array,
+DART_EXPORT Dart_Handle Dart_NewStringFromUTF32(const int32_t* utf32_array,
                                                 intptr_t length) {
   Isolate* isolate = Isolate::Current();
   DARTSCOPE(isolate);
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 0fa7e0b..ecc1df1 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -541,7 +541,7 @@
   EXPECT(Dart_IsString(ext16));
   EXPECT(Dart_IsExternalString(ext16));
 
-  uint32_t data32[] = { 'f', 'o', 'u', 'r', 0x10FFFF };
+  int32_t data32[] = { 'f', 'o', 'u', 'r', 0x10FFFF };
 
   Dart_Handle str32 = Dart_NewStringFromUTF32(data32, ARRAY_SIZE(data32));
   EXPECT_VALID(str32);
@@ -2647,7 +2647,7 @@
       "  return new Fields();\n"
       "}\n";
   const char* kImportedScriptChars =
-      "#library('library_name');\n"
+      "library library_name;\n"
       "var imported_fld = 'imported';\n"
       "var _imported_fld = 'hidden imported';\n"
       "get imported_getset_fld { return _gs_fld1; }\n"
@@ -2951,7 +2951,7 @@
 
 TEST_CASE(InjectNativeFields3) {
   const char* kScriptChars =
-      "#import('dart:nativewrappers');"
+      "import 'dart:nativewrappers';"
       "class NativeFields extends NativeFieldWrapperClass2 {\n"
       "  NativeFields(int i, int j) : fld1 = i, fld2 = j {}\n"
       "  int fld1;\n"
@@ -2993,7 +2993,7 @@
 
 TEST_CASE(InjectNativeFields4) {
   const char* kScriptChars =
-      "#import('dart:nativewrappers');"
+      "import 'dart:nativewrappers';"
       "class NativeFields extends NativeFieldWrapperClass2 {\n"
       "  NativeFields(int i, int j) : fld1 = i, fld2 = j {}\n"
       "  int fld1;\n"
@@ -3015,7 +3015,7 @@
   // We expect the test script to fail finalization with the error below:
   EXPECT(Dart_IsError(result));
   Dart_Handle expected_error = Dart_Error(
-      "'dart:test-lib': Error: line 1 pos 38: "
+      "'dart:test-lib': Error: line 1 pos 36: "
       "class 'NativeFields' is trying to extend a native fields class, "
       "but library '%s' has no native resolvers",
       TestCase::url());
@@ -3025,7 +3025,7 @@
 
 TEST_CASE(InjectNativeFieldsSuperClass) {
   const char* kScriptChars =
-      "#import('dart:nativewrappers');"
+      "import 'dart:nativewrappers';"
       "class NativeFieldsSuper extends NativeFieldWrapperClass1 {\n"
       "  NativeFieldsSuper() : fld1 = 42 {}\n"
       "  int fld1;\n"
@@ -3185,7 +3185,7 @@
 
 TEST_CASE(ImplicitNativeFieldAccess) {
   const char* kScriptChars =
-      "#import('dart:nativewrappers');"
+      "import 'dart:nativewrappers';"
       "class NativeFields extends NativeFieldWrapperClass4 {\n"
       "  NativeFields(int i, int j) : fld1 = i, fld2 = j {}\n"
       "  int fld0;\n"
@@ -3811,11 +3811,11 @@
 
 TEST_CASE(Invoke_CrossLibrary) {
   const char* kLibrary1Chars =
-      "#library('library1_name');\n"
+      "library library1_name;\n"
       "void local() {}\n"
       "void _local() {}\n";
   const char* kLibrary2Chars =
-      "#library('library2_name');\n"
+      "library library2_name;\n"
       "void imported() {}\n"
       "void _imported() {}\n";
 
@@ -5115,11 +5115,11 @@
 
 TEST_CASE(LookupLibrary) {
   const char* kScriptChars =
-      "#import('library1.dart');"
+      "import 'library1_dart';"
       "main() {}";
   const char* kLibrary1Chars =
-      "#library('library1.dart');"
-      "#import('library2.dart');";
+      "library library1_dart;"
+      "import 'library2_dart';";
 
   // Create a test library and Load up a test script in it.
   Dart_Handle url = NewString(TestCase::url());
@@ -5129,7 +5129,7 @@
   result = Dart_LoadScript(url, source);
   EXPECT_VALID(result);
 
-  url = NewString("library1.dart");
+  url = NewString("library1_dart");
   source = NewString(kLibrary1Chars);
   result = Dart_LoadLibrary(url, source);
   EXPECT_VALID(result);
@@ -5162,7 +5162,7 @@
 
 TEST_CASE(LibraryName) {
   const char* kLibrary1Chars =
-      "#library('library1_name');";
+      "library library1_name;";
   Dart_Handle url = NewString("library1_url");
   Dart_Handle source = NewString(kLibrary1Chars);
   Dart_Handle lib = Dart_LoadLibrary(url, source);
@@ -5195,7 +5195,7 @@
 
 TEST_CASE(LibraryUrl) {
   const char* kLibrary1Chars =
-      "#library('library1_name');";
+      "library library1_name;";
   Dart_Handle url = NewString("library1_url");
   Dart_Handle source = NewString(kLibrary1Chars);
   Dart_Handle lib = Dart_LoadLibrary(url, source);
@@ -5228,7 +5228,7 @@
 
 TEST_CASE(LibraryGetClassNames) {
   const char* kLibraryChars =
-      "#library('library_name');\n"
+      "library library_name;\n"
       "\n"
       "class A {}\n"
       "class B {}\n"
@@ -5265,7 +5265,7 @@
 
 TEST_CASE(GetFunctionNames) {
   const char* kLibraryChars =
-      "#library('library_name');\n"
+      "library library_name;\n"
       "\n"
       "void A() {}\n"
       "get B => 11;\n"
@@ -5335,7 +5335,7 @@
 
 TEST_CASE(GetVariableNames) {
   const char* kLibraryChars =
-      "#library('library_name');\n"
+      "library library_name;\n"
       "\n"
       "var A;\n"
       "get B => 12;\n"
@@ -5400,9 +5400,9 @@
 
 TEST_CASE(LibraryImportLibrary) {
   const char* kLibrary1Chars =
-      "#library('library1_name');";
+      "library library1_name;";
   const char* kLibrary2Chars =
-      "#library('library2_name');";
+      "library library2_name;";
   Dart_Handle error = Dart_Error("incoming error");
   Dart_Handle result;
 
@@ -5455,7 +5455,7 @@
 
 TEST_CASE(ImportLibraryWithPrefix) {
   const char* kLibrary1Chars =
-      "#library('library1_name');"
+      "library library1_name;"
       "int bar() => 42;";
   Dart_Handle url1 = NewString("library1_url");
   Dart_Handle source1 = NewString(kLibrary1Chars);
@@ -5464,7 +5464,7 @@
   EXPECT(Dart_IsLibrary(lib1));
 
   const char* kLibrary2Chars =
-      "#library('library2_name');"
+      "library library2_name;"
       "int foobar() => foo.bar();";
   Dart_Handle url2 = NewString("library2_url");
   Dart_Handle source2 = NewString(kLibrary2Chars);
@@ -5496,7 +5496,7 @@
 
 TEST_CASE(LoadLibrary) {
   const char* kLibrary1Chars =
-      "#library('library1_name');";
+      "library library1_name;";
   Dart_Handle error = Dart_Error("incoming error");
   Dart_Handle result;
 
@@ -5548,7 +5548,7 @@
 
 TEST_CASE(LoadLibrary_CompileError) {
   const char* kLibrary1Chars =
-      "#library('library1_name');"
+      "library library1_name;"
       ")";
   Dart_Handle url = NewString("library1_url");
   Dart_Handle source = NewString(kLibrary1Chars);
@@ -5560,7 +5560,7 @@
 
 TEST_CASE(LoadSource) {
   const char* kLibrary1Chars =
-      "#library('library1_name');";
+      "library library1_name;";
   const char* kSourceChars =
       "// Something innocuous";
   const char* kBadSourceChars =
@@ -5643,7 +5643,7 @@
 
 TEST_CASE(LoadSource_LateLoad) {
   const char* kLibrary1Chars =
-      "#library('library1_name');\n"
+      "library library1_name;\n"
       "class OldClass {\n"
       "  foo() => 'foo';\n"
       "}\n";
@@ -5688,7 +5688,7 @@
 
 TEST_CASE(LoadPatch) {
   const char* kLibrary1Chars =
-      "#library('library1_name');";
+      "library library1_name;";
   const char* kSourceChars =
       "external int foo();";
   const char* kPatchChars =
@@ -5737,7 +5737,7 @@
 
 TEST_CASE(ParsePatchLibrary) {
   const char* kLibraryChars =
-  "#library('patched_library');\n"
+  "library patched_library;\n"
   "class A {\n"
   "  final fvalue;\n"
   "  var _f;\n"
@@ -5779,7 +5779,7 @@
   "patch(x) => x*3;\n";
 
   const char* kScriptChars =
-  "#import('theLibrary');\n"
+  "import 'theLibrary';\n"
   "e1() => unpatched();\n"
   "m1() => topLevel(2);\n"
   "m2() {\n"
@@ -5982,16 +5982,16 @@
 // in the importing library.
 TEST_CASE(ImportLibrary2) {
   const char* kScriptChars =
-      "#import('library1.dart');\n"
+      "import 'library1_dart';\n"
       "var foo;\n"
       "main() { foo = 0; }\n";
   const char* kLibrary1Chars =
-      "#library('library1.dart');\n"
-      "#import('library2.dart');\n"
+      "library library1_dart;\n"
+      "import 'library2_dart';\n"
       "var foo;\n";
   const char* kLibrary2Chars =
-      "#library('library2.dart');\n"
-      "#import('library1.dart');\n"
+      "library library2_dart;\n"
+      "import 'library1_dart';\n"
       "var foo;\n";
   Dart_Handle result;
   // Create a test library and Load up a test script in it.
@@ -6001,11 +6001,11 @@
   EXPECT_VALID(result);
   result = Dart_LoadScript(url, source);
 
-  url = NewString("library1.dart");
+  url = NewString("library1_dart");
   source = NewString(kLibrary1Chars);
   Dart_LoadLibrary(url, source);
 
-  url = NewString("library2.dart");
+  url = NewString("library2_dart");
   source = NewString(kLibrary2Chars);
   Dart_LoadLibrary(url, source);
 
@@ -6018,15 +6018,15 @@
 // an error if that name is referenced.
 TEST_CASE(ImportLibrary3) {
   const char* kScriptChars =
-      "#import('library2.dart');\n"
-      "#import('library1.dart');\n"
+      "import 'library2_dart';\n"
+      "import 'library1_dart';\n"
       "var foo_top = 10;  // foo has dup def. So should be an error.\n"
       "main() { foo = 0; }\n";
   const char* kLibrary1Chars =
-      "#library('library1.dart');\n"
+      "library library1_dart;\n"
       "var foo;";
   const char* kLibrary2Chars =
-      "#library('library2.dart');\n"
+      "library library2_dart;\n"
       "var foo;";
   Dart_Handle result;
 
@@ -6038,11 +6038,11 @@
   result = Dart_LoadScript(url, source);
   EXPECT_VALID(result);
 
-  url = NewString("library2.dart");
+  url = NewString("library2_dart");
   source = NewString(kLibrary2Chars);
   Dart_LoadLibrary(url, source);
 
-  url = NewString("library1.dart");
+  url = NewString("library1_dart");
   source = NewString(kLibrary1Chars);
   Dart_LoadLibrary(url, source);
 
@@ -6056,14 +6056,14 @@
 // not an error if that name is not used.
 TEST_CASE(ImportLibrary4) {
   const char* kScriptChars =
-      "#import('library2.dart');\n"
-      "#import('library1.dart');\n"
+      "import 'library2_dart';\n"
+      "import 'library1_dart';\n"
       "main() {  }\n";
   const char* kLibrary1Chars =
-      "#library('library1.dart');\n"
+      "library library1_dart;\n"
       "var foo;";
   const char* kLibrary2Chars =
-      "#library('library2.dart');\n"
+      "library library2_dart;\n"
       "var foo;";
   Dart_Handle result;
 
@@ -6075,11 +6075,11 @@
   result = Dart_LoadScript(url, source);
   EXPECT_VALID(result);
 
-  url = NewString("library2.dart");
+  url = NewString("library2_dart");
   source = NewString(kLibrary2Chars);
   Dart_LoadLibrary(url, source);
 
-  url = NewString("library1.dart");
+  url = NewString("library1_dart");
   source = NewString(kLibrary1Chars);
   Dart_LoadLibrary(url, source);
 
@@ -6090,13 +6090,13 @@
 
 TEST_CASE(ImportLibrary5) {
   const char* kScriptChars =
-      "#import('lib.dart');\n"
+      "import 'lib.dart';\n"
       "interface Y {\n"
       "  void set handler(void callback(List<int> x));\n"
       "}\n"
       "void main() {}\n";
   const char* kLibraryChars =
-      "#library('lib.dart');\n"
+      "library lib.dart;\n"
       "interface X {\n"
       "  void set handler(void callback(List<int> x));\n"
       "}\n";
@@ -6161,7 +6161,7 @@
 
   TestIsolateScope __test_isolate__;
   const char* kScriptChars =
-      "#import('dart:isolate');\n"
+      "import 'dart:isolate';\n"
       "void callPort(SendPort port) {\n"
       "    port.call(null).then((message) {\n"
       "      throw new Exception(message);\n"
@@ -6212,8 +6212,8 @@
                                 void* data,
                                 char** error) {
   const char* kScriptChars =
-      "#import('builtin');\n"
-      "#import('dart:isolate');\n"
+      "import 'builtin';\n"
+      "import 'dart:isolate';\n"
       "void entry() {\n"
       "  port.receive((message, replyTo) {\n"
       "    if (message) {\n"
@@ -6770,7 +6770,7 @@
 TEST_CASE(RangeLimits) {
   uint8_t chars8[1] = {'a'};
   uint16_t chars16[1] = {'a'};
-  uint32_t chars32[1] = {'a'};
+  int32_t chars32[1] = {'a'};
 
   EXPECT_ERROR(Dart_NewList(-1),
                "expects argument 'length' to be in the range");
diff --git a/runtime/vm/dart_api_message.cc b/runtime/vm/dart_api_message.cc
index 64eea31..4cee392 100644
--- a/runtime/vm/dart_api_message.cc
+++ b/runtime/vm/dart_api_message.cc
@@ -17,7 +17,8 @@
                                    ReAlloc alloc)
     : BaseReader(buffer, length),
       alloc_(alloc),
-      backward_references_(kNumInitialReferences) {
+      backward_references_(kNumInitialReferences),
+      vm_symbol_references_(NULL) {
   Init();
 }
 
@@ -215,13 +216,29 @@
 
 Dart_CObject* ApiMessageReader::ReadVMSymbol(intptr_t object_id) {
   if (Symbols::IsVMSymbolId(object_id)) {
+    intptr_t symbol_id = object_id - kMaxPredefinedObjectIds;
+    Dart_CObject* object;
+    if (vm_symbol_references_ != NULL &&
+        (object = vm_symbol_references_[symbol_id]) != NULL) {
+      return object;
+    }
+
+    if (vm_symbol_references_ == NULL) {
+      intptr_t size = sizeof(*vm_symbol_references_) * Symbols::kMaxId;
+      vm_symbol_references_ =
+          reinterpret_cast<Dart_CObject**>(alloc_(NULL, 0, size));
+      memset(vm_symbol_references_, 0, size);
+    }
+
     RawOneByteString* str =
         reinterpret_cast<RawOneByteString*>(Symbols::GetVMSymbol(object_id));
     intptr_t len = Smi::Value(str->ptr()->length_);
-    Dart_CObject* object = AllocateDartCObjectString(len);
+    object = AllocateDartCObjectString(len);
     char* p = object->value.as_string;
     memmove(p, str->ptr()->data_, len);
     p[len] = '\0';
+    ASSERT(vm_symbol_references_[symbol_id] == NULL);
+    vm_symbol_references_[symbol_id] = object;
     return object;
   }
   // No other VM isolate objects are supported.
diff --git a/runtime/vm/dart_api_message.h b/runtime/vm/dart_api_message.h
index c37d8fb..dbd7278 100644
--- a/runtime/vm/dart_api_message.h
+++ b/runtime/vm/dart_api_message.h
@@ -109,6 +109,7 @@
   // function.
   ReAlloc alloc_;
   ApiGrowableArray<BackRefNode*> backward_references_;
+  Dart_CObject** vm_symbol_references_;
 
   Dart_CObject type_arguments_marker;
   Dart_CObject dynamic_type_marker;
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 96019a9..5d5cf71 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -575,8 +575,7 @@
       break;
     }
     case PcDescriptors::kFuncCall: {
-      Function& func = Function::Handle();
-      CodePatcher::GetStaticCallAt(pc_, &func, &saved_bytes_.target_address_);
+      saved_bytes_.target_address_ = CodePatcher::GetStaticCallTargetAt(pc_);
       CodePatcher::PatchStaticCallAt(pc_,
           StubCode::BreakpointStaticEntryPoint());
       break;
@@ -1403,9 +1402,10 @@
       }
     } else if (bpt->breakpoint_kind_ == PcDescriptors::kFuncCall) {
       func_to_instrument = bpt->function();
-      Function& callee = Function::Handle();
-      uword target;
-      CodePatcher::GetStaticCallAt(bpt->pc_, &callee, &target);
+      const Code& code = Code::Handle(func_to_instrument.CurrentCode());
+      const Function& callee =
+          Function::Handle(code.GetStaticCallTargetFunctionAt(bpt->pc_));
+      ASSERT(!callee.IsNull());
       if (IsDebuggable(callee)) {
         func_to_instrument = callee.raw();
       }
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index fc2e2c9..479ad64 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -144,7 +144,7 @@
   Instance& exception = Instance::Handle(incoming_exception.raw());
   if (exception.IsNull()) {
     GrowableArray<const Object*> arguments;
-    exception ^= Exceptions::Create(Exceptions::kNullPointer, arguments);
+    exception ^= Exceptions::Create(Exceptions::kNullThrown, arguments);
   }
   uword handler_pc = 0;
   uword handler_sp = 0;
@@ -427,18 +427,14 @@
       library = Library::CoreLibrary();
       class_name = Symbols::New("InternalError");
       break;
-    case kNullPointer:
+    case kNullThrown:
       library = Library::CoreLibrary();
-      class_name = Symbols::New("NullPointerException");
+      class_name = Symbols::New("NullThrownError");
       break;
     case kIllegalJSRegExp:
       library = Library::CoreLibrary();
       class_name = Symbols::New("IllegalJSRegExpException");
       break;
-    case kArgumentError:
-      library = Library::CoreLibrary();
-      class_name = Symbols::New("ArgumentError");
-      break;
     case kIsolateSpawn:
       library = Library::IsolateLibrary();
       class_name = Symbols::New("IsolateSpawnException");
diff --git a/runtime/vm/exceptions.h b/runtime/vm/exceptions.h
index 1fe2665..0cc048f 100644
--- a/runtime/vm/exceptions.h
+++ b/runtime/vm/exceptions.h
@@ -56,9 +56,8 @@
     kStackOverflow,
     kOutOfMemory,
     kInternalError,
-    kNullPointer,
+    kNullThrown,
     kIllegalJSRegExp,
-    kArgumentError,
     kIsolateSpawn
   };
 
diff --git a/runtime/vm/flow_graph_allocator.cc b/runtime/vm/flow_graph_allocator.cc
index 609d1d6..939f393 100644
--- a/runtime/vm/flow_graph_allocator.cc
+++ b/runtime/vm/flow_graph_allocator.cc
@@ -62,6 +62,7 @@
 
 FlowGraphAllocator::FlowGraphAllocator(const FlowGraph& flow_graph)
   : flow_graph_(flow_graph),
+    reaching_defs_(flow_graph),
     mint_values_(NULL),
     block_order_(flow_graph.reverse_postorder()),
     postorder_(flow_graph.postorder()),
@@ -146,9 +147,15 @@
       }
 
       // Handle uses.
+      LocationSummary* locs = current->locs();
+      ASSERT(locs->input_count() == current->InputCount());
       for (intptr_t j = 0; j < current->InputCount(); j++) {
         Value* input = current->InputAt(j);
         const intptr_t use = input->definition()->ssa_temp_index();
+
+        ASSERT(!locs->in(j).IsConstant() || input->BindsToConstant());
+        if (locs->in(j).IsConstant()) continue;
+
         live_in->Add(use);
       }
 
@@ -182,6 +189,8 @@
           // live-in for a predecessor.
           for (intptr_t k = 0; k < phi->InputCount(); k++) {
             Value* val = phi->InputAt(k);
+            if (val->BindsToConstant()) continue;
+
             BlockEntryInstr* pred = block->PredecessorAt(k);
             const intptr_t use = val->definition()->ssa_temp_index();
             if (!kill_[pred->postorder_number()]->Contains(use)) {
@@ -517,9 +526,12 @@
 void FlowGraphAllocator::BuildLiveRanges() {
   const intptr_t block_count = postorder_.length();
   ASSERT(postorder_.Last()->IsGraphEntry());
+  BitVector* current_interference_set = NULL;
   for (intptr_t i = 0; i < (block_count - 1); i++) {
     BlockEntryInstr* block = postorder_[i];
 
+    BlockInfo* block_info = BlockInfoAt(block->start_pos());
+
     // For every SSA value that is live out of this block, create an interval
     // that covers the whole block.  It will be shortened if we encounter a
     // definition of this value in this block.
@@ -528,23 +540,33 @@
       range->AddUseInterval(block->start_pos(), block->end_pos());
     }
 
+    BlockInfo* loop_header = block_info->loop_header();
+    if ((loop_header != NULL) && (loop_header->last_block() == block)) {
+      current_interference_set =
+          new BitVector(flow_graph_.max_virtual_register_number());
+      ASSERT(loop_header->backedge_interference() == NULL);
+      loop_header->set_backedge_interference(
+          current_interference_set);
+    }
+
     // Connect outgoing phi-moves that were created in NumberInstructions
     // and find last instruction that contributes to liveness.
-    Instruction* current = ConnectOutgoingPhiMoves(block);
+    Instruction* current = ConnectOutgoingPhiMoves(block,
+                                                   current_interference_set);
 
     // Now process all instructions in reverse order.
     while (current != block) {
       // Skip parallel moves that we insert while processing instructions.
       if (!current->IsParallelMove()) {
-        ProcessOneInstruction(block, current);
+        ProcessOneInstruction(block, current, current_interference_set);
       }
       current = current->previous();
     }
 
 
     // Check if any values live into the loop can be spilled for free.
-    BlockInfo* block_info = BlockInfoAt(block->start_pos());
     if (block_info->is_loop_header()) {
+      current_interference_set = NULL;
       for (BitVector::Iterator it(live_in_[i]); !it.Done(); it.Advance()) {
         LiveRange* range = GetLiveRange(it.Current());
         if (HasOnlyUnconstrainedUsesInLoop(range, block_info)) {
@@ -650,7 +672,7 @@
 //
 
 Instruction* FlowGraphAllocator::ConnectOutgoingPhiMoves(
-    BlockEntryInstr* block) {
+    BlockEntryInstr* block, BitVector* interfere_at_backedge) {
   Instruction* last = block->last_instruction();
 
   GotoInstr* goto_instr = last->AsGoto();
@@ -696,7 +718,9 @@
     //      value    --*
     //
 
-    LiveRange* range = GetLiveRange(val->definition()->ssa_temp_index());
+    const intptr_t vreg = val->definition()->ssa_temp_index();
+    LiveRange* range = GetLiveRange(vreg);
+    if (interfere_at_backedge != NULL) interfere_at_backedge->Add(vreg);
 
     range->AddUseInterval(block->start_pos(), pos);
     range->AddHintedUse(pos, move->src_slot(), move->dest_slot());
@@ -821,7 +845,8 @@
 // Create and update live ranges corresponding to instruction's inputs,
 // temporaries and output.
 void FlowGraphAllocator::ProcessOneInstruction(BlockEntryInstr* block,
-                                               Instruction* current) {
+                                               Instruction* current,
+                                               BitVector* interference_set) {
   LocationSummary* locs = current->locs();
 
   Definition* def = current->AsDefinition();
@@ -1065,6 +1090,12 @@
     range->AddHintedUse(pos, out, move->src_slot());
     range->AddUse(pos, move->dest_slot());
     range->AddUse(pos, locs->in_slot(0));
+
+    if ((interference_set != NULL) &&
+        (range->vreg() >= 0) &&
+        interference_set->Contains(range->vreg())) {
+      interference_set->Add(input->ssa_temp_index());
+    }
   } else {
     // Normal unallocated location that requires a register. Expected shape of
     // live range:
@@ -1451,7 +1482,7 @@
 LiveRange* FlowGraphAllocator::SplitBetween(LiveRange* range,
                                             intptr_t from,
                                             intptr_t to) {
-  TRACE_ALLOC(OS::Print("split %"Pd" [%"Pd", %"Pd") between [%"Pd", %"Pd")\n",
+  TRACE_ALLOC(OS::Print("split v%"Pd" [%"Pd", %"Pd") between [%"Pd", %"Pd")\n",
                         range->vreg(), range->Start(), range->End(), from, to));
 
   intptr_t split_pos = kIllegalPosition;
@@ -1489,7 +1520,7 @@
                                       intptr_t from,
                                       intptr_t to) {
   ASSERT(from < to);
-  TRACE_ALLOC(OS::Print("spill %"Pd" [%"Pd", %"Pd") "
+  TRACE_ALLOC(OS::Print("spill v%"Pd" [%"Pd", %"Pd") "
                         "between [%"Pd", %"Pd")\n",
                         range->vreg(), range->Start(), range->End(), from, to));
   LiveRange* tail = range->SplitAt(from);
@@ -1507,7 +1538,7 @@
 
 
 void FlowGraphAllocator::SpillAfter(LiveRange* range, intptr_t from) {
-  TRACE_ALLOC(OS::Print("spill %"Pd" [%"Pd", %"Pd") after %"Pd"\n",
+  TRACE_ALLOC(OS::Print("spill v%"Pd" [%"Pd", %"Pd") after %"Pd"\n",
                         range->vreg(), range->Start(), range->End(), from));
 
   // When spilling the value inside the loop check if this spill can
@@ -1614,6 +1645,72 @@
 }
 
 
+void ReachingDefs::AddPhi(PhiInstr* phi) {
+  if (phi->reaching_defs() == NULL) {
+    phi->set_reaching_defs(
+        new BitVector(flow_graph_.max_virtual_register_number()));
+
+    // Compute initial set reaching defs set.
+    bool depends_on_phi = false;
+    for (intptr_t i = 0; i < phi->InputCount(); i++) {
+      Definition* input = phi->InputAt(i)->definition();
+      if (input->IsPhi()) {
+        depends_on_phi = true;
+      }
+      phi->reaching_defs()->Add(input->ssa_temp_index());
+    }
+
+    // If this phi depends on another phi then we need fix point iteration.
+    if (depends_on_phi) phis_.Add(phi);
+  }
+}
+
+
+void ReachingDefs::Compute() {
+  // Transitively collect all phis that are used by the given phi.
+  for (intptr_t i = 0; i < phis_.length(); i++) {
+    PhiInstr* phi = phis_[i];
+
+    // Add all phis that affect this phi to the list.
+    for (intptr_t i = 0; i < phi->InputCount(); i++) {
+      PhiInstr* input_phi = phi->InputAt(i)->definition()->AsPhi();
+      if (input_phi != NULL) {
+        AddPhi(input_phi);
+      }
+    }
+  }
+
+  // Propagate values until fix point is reached.
+  bool changed;
+  do {
+    changed = false;
+    for (intptr_t i = 0; i < phis_.length(); i++) {
+      PhiInstr* phi = phis_[i];
+      for (intptr_t i = 0; i < phi->InputCount(); i++) {
+        PhiInstr* input_phi = phi->InputAt(i)->definition()->AsPhi();
+        if (input_phi != NULL) {
+          if (phi->reaching_defs()->AddAll(input_phi->reaching_defs())) {
+            changed = true;
+          }
+        }
+      }
+    }
+  } while (changed);
+
+  phis_.Clear();
+}
+
+
+BitVector* ReachingDefs::Get(PhiInstr* phi) {
+  if (phi->reaching_defs() == NULL) {
+    ASSERT(phis_.is_empty());
+    AddPhi(phi);
+    Compute();
+  }
+  return phi->reaching_defs();
+}
+
+
 bool FlowGraphAllocator::AllocateFreeRegister(LiveRange* unallocated) {
   intptr_t candidate = kNoRegister;
   intptr_t free_until = 0;
@@ -1628,10 +1725,10 @@
       candidate = hint.register_code();
     }
 
-    TRACE_ALLOC(OS::Print("found hint "));
-    TRACE_ALLOC(hint.Print());
-    TRACE_ALLOC(OS::Print(" for %"Pd": free until %"Pd"\n",
-                          unallocated->vreg(), free_until));
+    TRACE_ALLOC(OS::Print("found hint %s for v%"Pd": free until %"Pd"\n",
+                          hint.Name(),
+                          unallocated->vreg(),
+                          free_until));
   } else if (free_until != kMaxPosition) {
     for (intptr_t reg = 0; reg < NumberOfRegisters(); ++reg) {
       if (!blocked_registers_[reg] && (registers_[reg].length() == 0)) {
@@ -1642,6 +1739,66 @@
     }
   }
 
+  // We have a very good candidate (either hinted to us or completely free).
+  // If we are in a loop try to reduce number of moves on the back edge by
+  // searching for a candidate that does not interfere with phis on the back
+  // edge.
+  BlockInfo* loop_header = BlockInfoAt(unallocated->Start())->loop_header();
+  if ((unallocated->vreg() >= 0) &&
+      (loop_header != NULL) &&
+      (free_until >= loop_header->last_block()->end_pos()) &&
+      loop_header->backedge_interference()->Contains(unallocated->vreg())) {
+    ASSERT(static_cast<intptr_t>(kNumberOfXmmRegisters) <=
+           kNumberOfCpuRegisters);
+    bool used_on_backedge[kNumberOfCpuRegisters] = { false };
+
+    for (PhiIterator it(loop_header->entry()->AsJoinEntry());
+         !it.Done();
+         it.Advance()) {
+      PhiInstr* phi = it.Current();
+      if (phi->is_alive()) {
+        const intptr_t phi_vreg = phi->ssa_temp_index();
+        LiveRange* range = GetLiveRange(phi_vreg);
+        if (range->assigned_location().kind() == register_kind_) {
+          const intptr_t reg = range->assigned_location().register_code();
+
+          if (!reaching_defs_.Get(phi)->Contains(unallocated->vreg())) {
+            used_on_backedge[reg] = true;
+          }
+        }
+      }
+    }
+
+    if (used_on_backedge[candidate]) {
+      TRACE_ALLOC(OS::Print(
+          "considering %s for v%"Pd": has interference on the back edge"
+          " {loop [%"Pd", %"Pd")}\n",
+          MakeRegisterLocation(candidate, Location::kDouble).Name(),
+          unallocated->vreg(),
+          loop_header->entry()->start_pos(),
+          loop_header->last_block()->end_pos()));
+      for (intptr_t reg = 0; reg < NumberOfRegisters(); ++reg) {
+        if (blocked_registers_[reg] ||
+            (reg == candidate) ||
+            used_on_backedge[reg]) {
+          continue;
+        }
+
+        const intptr_t intersection =
+            FirstIntersectionWithAllocated(reg, unallocated);
+        if (intersection >= free_until) {
+          candidate = reg;
+          free_until = intersection;
+          TRACE_ALLOC(OS::Print(
+              "found %s for v%"Pd" with no interference on the back edge\n",
+              MakeRegisterLocation(candidate, Location::kDouble).Name(),
+              candidate));
+          break;
+        }
+      }
+    }
+  }
+
   ASSERT(0 <= kMaxPosition);
   if (free_until != kMaxPosition) {
     for (intptr_t reg = 0; reg < NumberOfRegisters(); ++reg) {
@@ -1661,7 +1818,7 @@
 
   TRACE_ALLOC(OS::Print("assigning free register "));
   TRACE_ALLOC(MakeRegisterLocation(candidate, Location::kDouble).Print());
-  TRACE_ALLOC(OS::Print(" to %"Pd"\n", unallocated->vreg()));
+  TRACE_ALLOC(OS::Print(" to v%"Pd"\n", unallocated->vreg()));
 
   if (free_until != kMaxPosition) {
     // There was an intersection. Split unallocated.
@@ -1764,7 +1921,7 @@
 
   TRACE_ALLOC(OS::Print("assigning blocked register "));
   TRACE_ALLOC(MakeRegisterLocation(candidate, Location::kDouble).Print());
-  TRACE_ALLOC(OS::Print(" to live range %"Pd" until %"Pd"\n",
+  TRACE_ALLOC(OS::Print(" to live range v%"Pd" until %"Pd"\n",
                         unallocated->vreg(), blocked_at));
 
   if (blocked_at < unallocated->End()) {
@@ -2070,6 +2227,7 @@
   const GrowableArray<LiveRange*>& unallocated,
   LiveRange** blocking_ranges,
   bool* blocked_registers) {
+  ASSERT(number_of_registers <= kNumberOfCpuRegisters);
   register_kind_ = register_kind;
   number_of_registers_ = number_of_registers;
 
@@ -2097,7 +2255,7 @@
   while (!unallocated_.is_empty()) {
     LiveRange* range = unallocated_.RemoveLast();
     const intptr_t start = range->Start();
-    TRACE_ALLOC(OS::Print("Processing live range for vreg %"Pd" "
+    TRACE_ALLOC(OS::Print("Processing live range for v%"Pd" "
                           "starting at %"Pd"\n",
                           range->vreg(),
                           start));
@@ -2134,12 +2292,13 @@
 void FlowGraphAllocator::ConnectSplitSiblings(LiveRange* parent,
                                               BlockEntryInstr* source_block,
                                               BlockEntryInstr* target_block) {
-  TRACE_ALLOC(OS::Print("Connect source_block=%"Pd", target_block=%"Pd"\n",
+  TRACE_ALLOC(OS::Print("Connect v%"Pd" on the edge B%"Pd" -> B%"Pd"\n",
+                        parent->vreg(),
                         source_block->block_id(),
                         target_block->block_id()));
   if (parent->next_sibling() == NULL) {
     // Nothing to connect. The whole range was allocated to the same location.
-    TRACE_ALLOC(OS::Print("range %"Pd" has no siblings\n", parent->vreg()));
+    TRACE_ALLOC(OS::Print("range v%"Pd" has no siblings\n", parent->vreg()));
     return;
   }
 
@@ -2176,13 +2335,15 @@
     range = range->next_sibling();
   }
 
-  TRACE_ALLOC(OS::Print("connecting [%"Pd", %"Pd") [",
-                        source_cover->Start(), source_cover->End()));
-  TRACE_ALLOC(source.Print());
-  TRACE_ALLOC(OS::Print("] to [%"Pd", %"Pd") [",
-                        target_cover->Start(), target_cover->End()));
-  TRACE_ALLOC(target.Print());
-  TRACE_ALLOC(OS::Print("]\n"));
+  TRACE_ALLOC(OS::Print("connecting v%"Pd" between [%"Pd", %"Pd") {%s} "
+                        "to [%"Pd", %"Pd") {%s}\n",
+                        parent->vreg(),
+                        source_cover->Start(),
+                        source_cover->End(),
+                        source.Name(),
+                        target_cover->Start(),
+                        target_cover->End(),
+                        target.Name()));
 
   // Siblings were allocated to the same register.
   if (source.Equals(target)) return;
diff --git a/runtime/vm/flow_graph_allocator.h b/runtime/vm/flow_graph_allocator.h
index b98fbb3..d88e6e1 100644
--- a/runtime/vm/flow_graph_allocator.h
+++ b/runtime/vm/flow_graph_allocator.h
@@ -17,6 +17,24 @@
 class UseInterval;
 class UsePosition;
 
+
+class ReachingDefs : public ValueObject {
+ public:
+  explicit ReachingDefs(const FlowGraph& flow_graph)
+      : flow_graph_(flow_graph),
+        phis_(10) { }
+
+  BitVector* Get(PhiInstr* phi);
+
+ private:
+  void AddPhi(PhiInstr* phi);
+  void Compute();
+
+  const FlowGraph& flow_graph_;
+  GrowableArray<PhiInstr*> phis_;
+};
+
+
 class FlowGraphAllocator : public ValueObject {
  public:
   // Number of stack slots needed for a double spill slot.
@@ -94,9 +112,12 @@
   // Visit instructions in the postorder and build live ranges for
   // all SSA values.
   void BuildLiveRanges();
-  Instruction* ConnectOutgoingPhiMoves(BlockEntryInstr* block);
+  Instruction* ConnectOutgoingPhiMoves(BlockEntryInstr* block,
+                                       BitVector* interference_set);
   void ProcessEnvironmentUses(BlockEntryInstr* block, Instruction* current);
-  void ProcessOneInstruction(BlockEntryInstr* block, Instruction* instr);
+  void ProcessOneInstruction(BlockEntryInstr* block,
+                             Instruction* instr,
+                             BitVector* interference_set);
   void ConnectIncomingPhiMoves(BlockEntryInstr* block);
   void BlockLocation(Location loc, intptr_t from, intptr_t to);
   void BlockRegisterLocation(Location loc,
@@ -214,6 +235,8 @@
 
   const FlowGraph& flow_graph_;
 
+  ReachingDefs reaching_defs_;
+
   // Set of SSA values that have unboxed mint representation. Indexed
   // by SSA temp index.
   BitVector* mint_values_;
@@ -299,7 +322,10 @@
 class BlockInfo : public ZoneAllocated {
  public:
   explicit BlockInfo(BlockEntryInstr* entry)
-    : entry_(entry), loop_(NULL), is_loop_header_(false) {
+    : entry_(entry),
+      loop_(NULL),
+      is_loop_header_(false),
+      backedge_interference_(NULL) {
   }
 
   BlockEntryInstr* entry() const { return entry_; }
@@ -307,6 +333,17 @@
   // Returns true is this node is a header of a structural loop.
   bool is_loop_header() const { return is_loop_header_; }
 
+  // Returns header of the innermost loop containing this block.
+  BlockInfo* loop_header() {
+    if (is_loop_header()) {
+      return this;
+    } else if (loop() != NULL) {
+      return loop();
+    } else {
+      return NULL;
+    }
+  }
+
   // Innermost reducible loop containing this node. Loop headers point to
   // outer loop not to themselves.
   BlockInfo* loop() const { return loop_; }
@@ -326,6 +363,14 @@
   intptr_t loop_id() const { return loop_id_; }
   void set_loop_id(intptr_t loop_id) { loop_id_ = loop_id; }
 
+  BitVector* backedge_interference() const {
+    return backedge_interference_;
+  }
+
+  void set_backedge_interference(BitVector* backedge_interference) {
+    backedge_interference_ = backedge_interference;
+  }
+
  private:
   BlockEntryInstr* entry_;
   BlockInfo* loop_;
@@ -334,6 +379,8 @@
   BlockEntryInstr* last_block_;
   intptr_t loop_id_;
 
+  BitVector* backedge_interference_;
+
   DISALLOW_COPY_AND_ASSIGN(BlockInfo);
 };
 
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index 96d4cb8..c9d67eb 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -1763,7 +1763,7 @@
   }
 
   if (node->constructor().IsFactory()) {
-    if ((function_class.Name() == Symbols::ListImplementation()) &&
+    if ((function_class.Name() == Symbols::List()) &&
         (function.name() == Symbols::ListFactory())) {
       // If there are no arguments then the result is guaranteed to be a
       // GrowableObjectArray. However if there is an argument the result
diff --git a/runtime/vm/flow_graph_compiler.cc b/runtime/vm/flow_graph_compiler.cc
index 879799f..02d94fc 100644
--- a/runtime/vm/flow_graph_compiler.cc
+++ b/runtime/vm/flow_graph_compiler.cc
@@ -144,6 +144,8 @@
           is_optimizing ? new StackmapTableBuilder() : NULL),
       block_info_(block_order_.length()),
       deopt_infos_(),
+      static_calls_target_table_(GrowableObjectArray::ZoneHandle(
+          GrowableObjectArray::New())),
       is_optimizing_(is_optimizing),
       may_reoptimize_(false),
       bool_true_(Bool::ZoneHandle(Bool::True())),
@@ -282,6 +284,18 @@
 }
 
 
+void FlowGraphCompiler::AddStaticCallTarget(const Function& func) {
+  ASSERT(Code::kSCallTableEntryLength == 3);
+  ASSERT(Code::kSCallTableOffsetEntry == 0);
+  static_calls_target_table_.Add(
+      Smi::Handle(Smi::New(assembler()->CodeSize())));
+  ASSERT(Code::kSCallTableFunctionEntry == 1);
+  static_calls_target_table_.Add(func);
+  ASSERT(Code::kSCallTableCodeEntry == 2);
+  static_calls_target_table_.Add(Code::Handle());
+}
+
+
 void FlowGraphCompiler::AddDeoptIndexAtCall(intptr_t deopt_id,
                                             intptr_t token_pos) {
   ASSERT(is_optimizing());
@@ -396,6 +410,7 @@
   code.set_deopt_info_array(array);
   const Array& object_array =
       Array::Handle(Array::MakeArray(builder.object_table()));
+  ASSERT(code.object_table() == Array::null());
   code.set_object_table(object_array);
 }
 
@@ -426,6 +441,13 @@
 }
 
 
+void FlowGraphCompiler::FinalizeStaticCallTargetsTable(const Code& code) {
+  ASSERT(code.static_calls_target_table() == Array::null());
+  code.set_static_calls_target_table(
+      Array::Handle(Array::MakeArray(static_calls_target_table_)));
+}
+
+
 // Returns 'true' if code generation for this function is complete, i.e.,
 // no fall-through to regular code is needed.
 bool FlowGraphCompiler::TryIntrinsify() {
diff --git a/runtime/vm/flow_graph_compiler_ia32.cc b/runtime/vm/flow_graph_compiler_ia32.cc
index 3a78f8c..f0236df 100644
--- a/runtime/vm/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/flow_graph_compiler_ia32.cc
@@ -158,7 +158,7 @@
       __ cmpl(kClassIdReg, Immediate(type_class.id()));
       __ j(EQUAL, is_instance_lbl);
     }
-    if (type_class.raw() == Isolate::Current()->object_store()->list_class()) {
+    if (type_class.IsListClass()) {
       GenerateListTypeCheck(kClassIdReg, is_instance_lbl);
     }
     return GenerateSubtype1TestCacheLookup(
@@ -1092,7 +1092,6 @@
                                        intptr_t deopt_id,
                                        intptr_t token_pos,
                                        LocationSummary* locs) {
-  __ LoadObject(ECX, function);
   __ LoadObject(EDX, arguments_descriptor);
   // Do not use the code from the function, but let the code be patched so that
   // we can record the outgoing edges to other code.
@@ -1101,6 +1100,7 @@
                    &StubCode::CallStaticFunctionLabel(),
                    PcDescriptors::kFuncCall,
                    locs);
+  AddStaticCallTarget(function);
   __ Drop(argument_count);
 }
 
diff --git a/runtime/vm/flow_graph_compiler_ia32.h b/runtime/vm/flow_graph_compiler_ia32.h
index f949317..201b964 100644
--- a/runtime/vm/flow_graph_compiler_ia32.h
+++ b/runtime/vm/flow_graph_compiler_ia32.h
@@ -192,6 +192,7 @@
   void FinalizeStackmaps(const Code& code);
   void FinalizeVarDescriptors(const Code& code);
   void FinalizeComments(const Code& code);
+  void FinalizeStaticCallTargetsTable(const Code& code);
 
   const Bool& bool_true() const { return bool_true_; }
   const Bool& bool_false() const { return bool_false_; }
@@ -227,6 +228,8 @@
                                                 Register index);
 
  private:
+  void AddStaticCallTarget(const Function& function);
+
   void GenerateDeferredCode();
 
   void EmitInstructionPrologue(Instruction* instr);
@@ -320,6 +323,8 @@
   GrowableArray<BlockInfo*> block_info_;
   GrowableArray<CompilerDeoptInfo*> deopt_infos_;
   GrowableArray<SlowPathCode*> slow_path_code_;
+  // Stores: [code offset, function, null(code)].
+  const GrowableObjectArray& static_calls_target_table_;
   const bool is_optimizing_;
   // Set to true if optimized code has IC calls.
   bool may_reoptimize_;
diff --git a/runtime/vm/flow_graph_compiler_x64.cc b/runtime/vm/flow_graph_compiler_x64.cc
index eee2c68..a407051 100644
--- a/runtime/vm/flow_graph_compiler_x64.cc
+++ b/runtime/vm/flow_graph_compiler_x64.cc
@@ -158,7 +158,7 @@
       __ cmpl(kClassIdReg, Immediate(type_class.id()));
       __ j(EQUAL, is_instance_lbl);
     }
-    if (type_class.raw() == Isolate::Current()->object_store()->list_class()) {
+    if (type_class.IsListClass()) {
       GenerateListTypeCheck(kClassIdReg, is_instance_lbl);
     }
     return GenerateSubtype1TestCacheLookup(
@@ -1096,7 +1096,6 @@
                                        intptr_t deopt_id,
                                        intptr_t token_pos,
                                        LocationSummary* locs) {
-  __ LoadObject(RBX, function);
   __ LoadObject(R10, arguments_descriptor);
   // Do not use the code from the function, but let the code be patched so that
   // we can record the outgoing edges to other code.
@@ -1105,6 +1104,7 @@
                    &StubCode::CallStaticFunctionLabel(),
                    PcDescriptors::kFuncCall,
                    locs);
+  AddStaticCallTarget(function);
   __ Drop(argument_count);
 }
 
diff --git a/runtime/vm/flow_graph_compiler_x64.h b/runtime/vm/flow_graph_compiler_x64.h
index 146d9eb..3f74bc8 100644
--- a/runtime/vm/flow_graph_compiler_x64.h
+++ b/runtime/vm/flow_graph_compiler_x64.h
@@ -192,6 +192,7 @@
   void FinalizeStackmaps(const Code& code);
   void FinalizeVarDescriptors(const Code& code);
   void FinalizeComments(const Code& code);
+  void FinalizeStaticCallTargetsTable(const Code& code);
 
   const Bool& bool_true() const { return bool_true_; }
   const Bool& bool_false() const { return bool_false_; }
@@ -227,6 +228,8 @@
                                                 Register index);
 
  private:
+  void AddStaticCallTarget(const Function& function);
+
   void GenerateDeferredCode();
 
   void EmitInstructionPrologue(Instruction* instr);
@@ -320,6 +323,8 @@
   GrowableArray<BlockInfo*> block_info_;
   GrowableArray<CompilerDeoptInfo*> deopt_infos_;
   GrowableArray<SlowPathCode*> slow_path_code_;
+  // Stores: [code offset, function, null(code)].
+  const GrowableObjectArray& static_calls_target_table_;
   const bool is_optimizing_;
   // Set to true if optimized code has IC calls.
   bool may_reoptimize_;
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
index 6172ca5..2321f54 100644
--- a/runtime/vm/flow_graph_optimizer.cc
+++ b/runtime/vm/flow_graph_optimizer.cc
@@ -1107,6 +1107,43 @@
 }
 
 
+StringCharCodeAtInstr* FlowGraphOptimizer::BuildStringCharCodeAt(
+    InstanceCallInstr* call,
+    intptr_t cid) {
+  Value* str = call->ArgumentAt(0)->value();
+  Value* index = call->ArgumentAt(1)->value();
+  AddCheckClass(call, str->Copy());
+  InsertBefore(call,
+               new CheckSmiInstr(index->Copy(), call->deopt_id()),
+               call->env(),
+               Definition::kEffect);
+  // If both index and string are constants, then do a compile-time check.
+  // TODO(srdjan): Remove once constant propagation handles bounds checks.
+  bool skip_check = false;
+  if (str->BindsToConstant() && index->BindsToConstant()) {
+    ConstantInstr* string_def = str->definition()->AsConstant();
+    const String& constant_string =
+        String::Cast(string_def->value());
+    ConstantInstr* index_def = index->definition()->AsConstant();
+    if (index_def->value().IsSmi()) {
+      intptr_t constant_index = Smi::Cast(index_def->value()).Value();
+      skip_check = (constant_index < constant_string.Length());
+    }
+  }
+  if (!skip_check) {
+    // Insert bounds check.
+    InsertBefore(call,
+                 new CheckArrayBoundInstr(str->Copy(),
+                                          index->Copy(),
+                                          cid,
+                                          call),
+                 call->env(),
+                 Definition::kEffect);
+  }
+  return new StringCharCodeAtInstr(str, index, cid);
+}
+
+
 // Inline only simple, frequently called core library methods.
 bool FlowGraphOptimizer::TryInlineInstanceMethod(InstanceCallInstr* call) {
   ASSERT(call->HasICData());
@@ -1124,42 +1161,24 @@
       (ic_data.NumberOfChecks() == 1) &&
       ((class_ids[0] == kOneByteStringCid) ||
        (class_ids[0] == kTwoByteStringCid))) {
-    Value* str= call->ArgumentAt(0)->value();
-    Value* index = call->ArgumentAt(1)->value();
-    AddCheckClass(call, str->Copy());
-    InsertBefore(call,
-                 new CheckSmiInstr(index->Copy(), call->deopt_id()),
-                 call->env(),
-                 Definition::kEffect);
-    // If both index and string are constants, then do a compile-time check.
-    // TODO(srdjan): Remove once constant propagation handles bounds checks.
-    bool skip_check = false;
-    if (str->BindsToConstant() && index->BindsToConstant()) {
-      ConstantInstr* string_def = str->definition()->AsConstant();
-      const String& constant_string =
-          String::Cast(string_def->value());
-      ConstantInstr* index_def = index->definition()->AsConstant();
-      if (index_def->value().IsSmi()) {
-        intptr_t constant_index = Smi::Cast(index_def->value()).Value();
-        skip_check = (constant_index < constant_string.Length());
-      }
-    }
-    if (!skip_check) {
-      // Insert bounds check.
-      InsertBefore(call,
-                   new CheckArrayBoundInstr(str->Copy(),
-                                            index->Copy(),
-                                            class_ids[0],
-                                            call),
-                   call->env(),
-                   Definition::kEffect);
-    }
-    StringCharCodeAtInstr* instr =
-        new StringCharCodeAtInstr(str, index, class_ids[0]);
+    StringCharCodeAtInstr* instr = BuildStringCharCodeAt(call, class_ids[0]);
     call->ReplaceWith(instr, current_iterator());
     RemovePushArguments(call);
     return true;
   }
+  if ((recognized_kind == MethodRecognizer::kStringBaseCharAt) &&
+      (ic_data.NumberOfChecks() == 1) &&
+      (class_ids[0] == kOneByteStringCid)) {
+    // TODO(fschneider): Handle TwoByteString.
+    StringCharCodeAtInstr* load_char_code =
+        BuildStringCharCodeAt(call, class_ids[0]);
+    InsertBefore(call, load_char_code, NULL, Definition::kValue);
+    StringFromCharCodeInstr* char_at =
+        new StringFromCharCodeInstr(new Value(load_char_code));
+    call->ReplaceWith(char_at, current_iterator());
+    RemovePushArguments(call);
+    return true;
+  }
 
   if ((recognized_kind == MethodRecognizer::kIntegerToDouble) &&
       (class_ids[0] == kSmiCid)) {
@@ -3302,6 +3321,12 @@
 }
 
 
+void ConstantPropagator::VisitStringFromCharCode(
+    StringFromCharCodeInstr* instr) {
+  SetValue(instr, non_constant_);
+}
+
+
 void ConstantPropagator::VisitLoadIndexed(LoadIndexedInstr* instr) {
   SetValue(instr, non_constant_);
 }
diff --git a/runtime/vm/flow_graph_optimizer.h b/runtime/vm/flow_graph_optimizer.h
index 047dd0c..3c81b4a 100644
--- a/runtime/vm/flow_graph_optimizer.h
+++ b/runtime/vm/flow_graph_optimizer.h
@@ -68,6 +68,9 @@
 
   bool TryInlineInstanceMethod(InstanceCallInstr* call);
 
+  StringCharCodeAtInstr* BuildStringCharCodeAt(InstanceCallInstr* call,
+                                               intptr_t cid);
+
   void AddCheckClass(InstanceCallInstr* call, Value* value);
 
   void InsertAfter(Instruction* prev,
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index 21d220d..70a1ee8 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -241,9 +241,10 @@
   const String& function_name = String::Handle(function.name());
   const String& class_name = String::Handle(function_class.Name());
 
-#define RECOGNIZE_FUNCTION(test_class_name, test_function_name, enum_name)     \
+#define RECOGNIZE_FUNCTION(test_class_name, test_function_name, enum_name, fp) \
   if (CompareNames(lib, #test_function_name, function_name) &&                 \
       CompareNames(lib, #test_class_name, class_name)) {                       \
+    ASSERT(function.CheckSourceFingerprint(fp));                               \
     return k##enum_name;                                                       \
   }
 RECOGNIZED_LIST(RECOGNIZE_FUNCTION)
@@ -253,7 +254,7 @@
 
 
 const char* MethodRecognizer::KindToCString(Kind kind) {
-#define KIND_TO_STRING(class_name, function_name, enum_name)                   \
+#define KIND_TO_STRING(class_name, function_name, enum_name, fp)               \
   if (kind == k##enum_name) return #enum_name;
 RECOGNIZED_LIST(KIND_TO_STRING)
 #undef KIND_TO_STRING
@@ -1128,6 +1129,16 @@
 }
 
 
+RawAbstractType* StringFromCharCodeInstr::CompileType() const {
+  return Type::StringType();
+}
+
+
+intptr_t StringFromCharCodeInstr::ResultCid() const {
+  return kDynamicCid;
+}
+
+
 RawAbstractType* LoadIndexedInstr::CompileType() const {
   switch (class_id_) {
     case kArrayCid:
@@ -2657,6 +2668,7 @@
   }
 }
 
+
 #undef __
 
 }  // namespace dart
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index 23af66f..59ba34e 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.h
@@ -29,18 +29,21 @@
 
 
 // TODO(srdjan): Add _ByteArrayBase, get:length.
-
+// TODO(srdjan): Unify with INTRINSIC_LIST.
+// (class-name, function-name, recognized enum, fingerprint).
+// See intrinsifier for fingerprint computation.
 #define RECOGNIZED_LIST(V)                                                     \
-  V(_ObjectArray, get:length, ObjectArrayLength)                               \
-  V(_ImmutableArray, get:length, ImmutableArrayLength)                         \
-  V(_GrowableObjectArray, get:length, GrowableArrayLength)                     \
-  V(_GrowableObjectArray, get:capacity, GrowableArrayCapacity)                 \
-  V(_StringBase, get:length, StringBaseLength)                                 \
-  V(_StringBase, get:isEmpty, StringBaseIsEmpty)                               \
-  V(_StringBase, charCodeAt, StringBaseCharCodeAt)                             \
-  V(_IntegerImplementation, toDouble, IntegerToDouble)                         \
-  V(_Double, toInt, DoubleToInteger)                                           \
-  V(::, sqrt, MathSqrt)                                                        \
+  V(_ObjectArray, get:length, ObjectArrayLength, 405297088)                    \
+  V(_ImmutableArray, get:length, ImmutableArrayLength, 433698233)              \
+  V(_GrowableObjectArray, get:length, GrowableArrayLength, 725548050)          \
+  V(_GrowableObjectArray, get:capacity, GrowableArrayCapacity, 725548050)      \
+  V(_StringBase, get:length, StringBaseLength, 320803993)                      \
+  V(_StringBase, get:isEmpty, StringBaseIsEmpty, 1065961093)                   \
+  V(_StringBase, charCodeAt, StringBaseCharCodeAt, 984449525)                  \
+  V(_StringBase, [], StringBaseCharAt, 1062366987)                             \
+  V(_IntegerImplementation, toDouble, IntegerToDouble, 1396338041)             \
+  V(_Double, toInt, DoubleToInteger, 362666636)                                \
+  V(::, sqrt, MathSqrt, 2232519)                                               \
 
 // Class that recognizes the name and owner of a function and returns the
 // corresponding enum. See RECOGNIZED_LIST above for list of recognizable
@@ -49,7 +52,7 @@
  public:
   enum Kind {
     kUnknown,
-#define DEFINE_ENUM_LIST(class_name, function_name, enum_name) k##enum_name,
+#define DEFINE_ENUM_LIST(class_name, function_name, enum_name, fp) k##enum_name,
 RECOGNIZED_LIST(DEFINE_ENUM_LIST)
 #undef DEFINE_ENUM_LIST
   };
@@ -264,7 +267,8 @@
   M(UnaryMintOp)                                                               \
   M(CheckArrayBound)                                                           \
   M(Constraint)                                                                \
-  M(StringCharCodeAt)
+  M(StringCharCodeAt)                                                          \
+  M(StringFromCharCode)
 
 
 #define FORWARD_DECLARATION(type) class type##Instr;
@@ -1162,7 +1166,8 @@
     : block_(block),
       inputs_(num_inputs),
       is_alive_(false),
-      representation_(kTagged) {
+      representation_(kTagged),
+      reaching_defs_(NULL) {
     for (intptr_t i = 0; i < num_inputs; ++i) {
       inputs_.Add(NULL);
     }
@@ -1223,6 +1228,14 @@
 
   virtual void InferRange();
 
+  BitVector* reaching_defs() const {
+    return reaching_defs_;
+  }
+
+  void set_reaching_defs(BitVector* reaching_defs) {
+    reaching_defs_ = reaching_defs;
+  }
+
  private:
   friend class ConstantPropagator;  // Direct access to inputs_.
 
@@ -1231,6 +1244,8 @@
   bool is_alive_;
   Representation representation_;
 
+  BitVector* reaching_defs_;
+
   DISALLOW_COPY_AND_ASSIGN(PhiInstr);
 };
 
@@ -2682,6 +2697,36 @@
 };
 
 
+class StringFromCharCodeInstr : public TemplateDefinition<1> {
+ public:
+  explicit StringFromCharCodeInstr(Value* char_code) {
+    ASSERT(char_code != NULL);
+    ASSERT(char_code->definition()->IsStringCharCodeAt() &&
+           (char_code->definition()->AsStringCharCodeAt()->class_id() ==
+            kOneByteStringCid));
+    inputs_[0] = char_code;
+  }
+
+  DECLARE_INSTRUCTION(StringFromCharCode)
+  virtual RawAbstractType* CompileType() const;
+
+  Value* char_code() const { return inputs_[0]; }
+
+  virtual bool CanDeoptimize() const { return false; }
+
+  virtual bool HasSideEffect() const { return false; }
+
+  virtual intptr_t ResultCid() const;
+
+  virtual bool AttributesEqual(Instruction* other) const { return true; }
+
+  virtual bool AffectedBySideEffect() const { return false; }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(StringFromCharCodeInstr);
+};
+
+
 class LoadIndexedInstr : public TemplateDefinition<2> {
  public:
   LoadIndexedInstr(Value* array, Value* index, intptr_t class_id)
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index 74b2a17..fd2c971 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -1124,6 +1124,30 @@
 }
 
 
+LocationSummary* StringFromCharCodeInstr::MakeLocationSummary() const {
+  const intptr_t kNumInputs = 1;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* locs =
+      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  // TODO(fschneider): Allow immediate operands for the char code.
+  locs->set_in(0, Location::RequiresRegister());
+  locs->set_out(Location::RequiresRegister());
+  return locs;
+}
+
+
+void StringFromCharCodeInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  Register char_code = locs()->in(0).reg();
+  Register result = locs()->out().reg();
+  __ movl(result,
+          Immediate(reinterpret_cast<uword>(Symbols::PredefinedAddress())));
+  __ movl(result, Address(result,
+                          char_code,
+                          TIMES_HALF_WORD_SIZE,  // Char code is a smi.
+                          Symbols::kNullCharId * kWordSize));
+}
+
+
 LocationSummary* LoadIndexedInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 2;
   const intptr_t kNumTemps = 0;
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index 32766ac1..6933867 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -992,6 +992,30 @@
 }
 
 
+LocationSummary* StringFromCharCodeInstr::MakeLocationSummary() const {
+  const intptr_t kNumInputs = 1;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* locs =
+      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  // TODO(fschneider): Allow immediate operands for the char code.
+  locs->set_in(0, Location::RequiresRegister());
+  locs->set_out(Location::RequiresRegister());
+  return locs;
+}
+
+
+void StringFromCharCodeInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  Register char_code = locs()->in(0).reg();
+  Register result = locs()->out().reg();
+  __ movq(result,
+          Immediate(reinterpret_cast<uword>(Symbols::PredefinedAddress())));
+  __ movq(result, Address(result,
+                          char_code,
+                          TIMES_HALF_WORD_SIZE,  // Char code is a smi.
+                          Symbols::kNullCharId * kWordSize));
+}
+
+
 LocationSummary* LoadIndexedInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 2;
   const intptr_t kNumTemps = 0;
diff --git a/runtime/vm/intrinsifier.cc b/runtime/vm/intrinsifier.cc
index 59adb5c..9e4188b 100644
--- a/runtime/vm/intrinsifier.cc
+++ b/runtime/vm/intrinsifier.cc
@@ -64,6 +64,8 @@
 bool Intrinsifier::CanIntrinsify(const Function& function) {
   if (!FLAG_intrinsify) return false;
   if (function.IsClosureFunction()) return false;
+  // Can occur because of compile-all flag.
+  if (function.is_external()) return false;
   // Intrinsic kind is set lazily below.
   if (function.intrinsic_kind() == Function::kIsIntrinsic) return true;
   if (function.intrinsic_kind() == Function::kIsNotIntrinsic) return false;
@@ -77,7 +79,7 @@
     return false;
   }
   const char* class_name = String::Handle(function_class.Name()).ToCString();
-#define FIND_INTRINSICS(test_class_name, test_function_name, destination)      \
+#define FIND_INTRINSICS(test_class_name, test_function_name, destination, fp)  \
   if (TestFunction(function,                                                   \
                    class_name, function_name,                                  \
                    #test_class_name, #test_function_name)) {                   \
@@ -91,15 +93,17 @@
   return false;
 }
 
+
 bool Intrinsifier::Intrinsify(const Function& function, Assembler* assembler) {
   if (!CanIntrinsify(function)) return false;
   const char* function_name = String::Handle(function.name()).ToCString();
   const Class& function_class = Class::Handle(function.Owner());
   const char* class_name = String::Handle(function_class.Name()).ToCString();
-#define FIND_INTRINSICS(test_class_name, test_function_name, destination)      \
+#define FIND_INTRINSICS(test_class_name, test_function_name, destination, fp)  \
   if (TestFunction(function,                                                   \
                    class_name, function_name,                                  \
                    #test_class_name, #test_function_name)) {                   \
+    ASSERT(function.CheckSourceFingerprint(fp));                               \
     return destination(assembler);                                             \
   }                                                                            \
 
diff --git a/runtime/vm/intrinsifier.h b/runtime/vm/intrinsifier.h
index d127750..af4f8d4 100644
--- a/runtime/vm/intrinsifier.h
+++ b/runtime/vm/intrinsifier.h
@@ -10,88 +10,97 @@
 
 namespace dart {
 
-// List of intrinsics: (class-name, function-name, intrinsification method).
+// List of intrinsics:
+// (class-name, function-name, intrinsification method, fingerprint).
+//
+// When adding a new function for intrinsification add a 0 as fingerprint,
+// build and run to get the correct fingerprint from the mismatch error.
 #define INTRINSIC_LIST(V)                                                      \
-  V(_IntegerImplementation, _addFromInteger, Integer_addFromInteger)           \
-  V(_IntegerImplementation, +, Integer_add)                                    \
-  V(_IntegerImplementation, _subFromInteger, Integer_subFromInteger)           \
-  V(_IntegerImplementation, -, Integer_sub)                                    \
-  V(_IntegerImplementation, _mulFromInteger, Integer_mulFromInteger)           \
-  V(_IntegerImplementation, *, Integer_mul)                                    \
-  V(_IntegerImplementation, %, Integer_modulo)                                 \
-  V(_IntegerImplementation, ~/, Integer_truncDivide)                           \
-  V(_IntegerImplementation, unary-, Integer_negate)                            \
-  V(_IntegerImplementation, _bitAndFromInteger, Integer_bitAndFromInteger)     \
-  V(_IntegerImplementation, &, Integer_bitAnd)                                 \
-  V(_IntegerImplementation, _bitOrFromInteger, Integer_bitOrFromInteger)       \
-  V(_IntegerImplementation, |, Integer_bitOr)                                  \
-  V(_IntegerImplementation, _bitXorFromInteger, Integer_bitXorFromInteger)     \
-  V(_IntegerImplementation, ^, Integer_bitXor)                                 \
+  V(_IntegerImplementation, _addFromInteger, Integer_addFromInteger, 726019207)\
+  V(_IntegerImplementation, +, Integer_add, 13708438)                          \
+  V(_IntegerImplementation, _subFromInteger, Integer_subFromInteger, 726019207)\
+  V(_IntegerImplementation, -, Integer_sub, 284482664)                         \
+  V(_IntegerImplementation, _mulFromInteger, Integer_mulFromInteger, 726019207)\
+  V(_IntegerImplementation, *, Integer_mul, 486761895)                         \
+  V(_IntegerImplementation, %, Integer_modulo, 1370017357)                     \
+  V(_IntegerImplementation, ~/, Integer_truncDivide, 450435650)                \
+  V(_IntegerImplementation, unary-, Integer_negate, 1734168384)                \
+  V(_IntegerImplementation, _bitAndFromInteger,                                \
+    Integer_bitAndFromInteger, 726019207)                                      \
+  V(_IntegerImplementation, &, Integer_bitAnd, 1267520437)                     \
+  V(_IntegerImplementation, _bitOrFromInteger,                                 \
+    Integer_bitOrFromInteger, 726019207)                                       \
+  V(_IntegerImplementation, |, Integer_bitOr, 249432836)                       \
+  V(_IntegerImplementation, _bitXorFromInteger,                                \
+    Integer_bitXorFromInteger, 726019207)                                      \
+  V(_IntegerImplementation, ^, Integer_bitXor, 1177061571)                     \
   V(_IntegerImplementation,                                                    \
     _greaterThanFromInteger,                                                   \
-    Integer_greaterThanFromInt)                                                \
-  V(_IntegerImplementation, >, Integer_greaterThan)                            \
-  V(_IntegerImplementation, ==, Integer_equal)                                 \
-  V(_IntegerImplementation, _equalToInteger, Integer_equalToInteger)           \
-  V(_IntegerImplementation, <, Integer_lessThan)                               \
-  V(_IntegerImplementation, <=, Integer_lessEqualThan)                         \
-  V(_IntegerImplementation, >=, Integer_greaterEqualThan)                      \
-  V(_IntegerImplementation, <<, Integer_shl)                                   \
-  V(_IntegerImplementation, >>, Integer_sar)                                   \
-  V(_Smi, ~, Smi_bitNegate)                                                    \
-  V(_Double, >, Double_greaterThan)                                            \
-  V(_Double, >=, Double_greaterEqualThan)                                      \
-  V(_Double, <, Double_lessThan)                                               \
-  V(_Double, <=, Double_lessEqualThan)                                         \
-  V(_Double, ==, Double_equal)                                                 \
-  V(_Double, +, Double_add)                                                    \
-  V(_Double, -, Double_sub)                                                    \
-  V(_Double, *, Double_mul)                                                    \
-  V(_Double, /, Double_div)                                                    \
-  V(_Double, get:isNaN, Double_getIsNaN)                                       \
-  V(_Double, get:isNegative, Double_getIsNegative)                             \
-  V(_Double, _mulFromInteger, Double_mulFromInteger)                           \
-  V(_Double, .fromInteger, Double_fromInteger)                                 \
-  V(_Double, toInt, Double_toInt)                                              \
-  V(_ObjectArray, ., ObjectArray_Allocate)                                     \
-  V(_ObjectArray, get:length, Array_getLength)                                 \
-  V(_ObjectArray, [], Array_getIndexed)                                        \
-  V(_ObjectArray, []=, Array_setIndexed)                                       \
-  V(_GrowableObjectArray, .fromObjectArray, GArray_Allocate)                   \
-  V(_GrowableObjectArray, get:length, GrowableArray_getLength)                 \
-  V(_GrowableObjectArray, get:capacity, GrowableArray_getCapacity)             \
-  V(_GrowableObjectArray, [], GrowableArray_getIndexed)                        \
-  V(_GrowableObjectArray, []=, GrowableArray_setIndexed)                       \
-  V(_GrowableObjectArray, _setLength, GrowableArray_setLength)                 \
-  V(_GrowableObjectArray, _setData, GrowableArray_setData)                     \
-  V(_GrowableObjectArray, add, GrowableArray_add)                              \
-  V(_ImmutableArray, [], ImmutableArray_getIndexed)                            \
-  V(_ImmutableArray, get:length, ImmutableArray_getLength)                     \
-  V(::, sqrt, Math_sqrt)                                                       \
-  V(::, sin, Math_sin)                                                         \
-  V(::, cos, Math_cos)                                                         \
-  V(Object, ==, Object_equal)                                                  \
-  V(_FixedSizeArrayIterator, get:hasNext, FixedSizeArrayIterator_getHasNext)   \
-  V(_FixedSizeArrayIterator, next, FixedSizeArrayIterator_next)                \
-  V(_StringBase, get:hashCode, String_getHashCode)                             \
-  V(_StringBase, get:isEmpty, String_getIsEmpty)                               \
-  V(_StringBase, get:length, String_getLength)                                 \
-  V(_StringBase, charCodeAt, String_charCodeAt)                                \
-  V(_ByteArrayBase, get:length, ByteArrayBase_getLength)                       \
-  V(_Int8Array, [], Int8Array_getIndexed)                                      \
-  V(_Int8Array, []=, Int8Array_setIndexed)                                     \
-  V(_Uint8Array, [], Uint8Array_getIndexed)                                    \
-  V(_Uint8Array, []=, Uint8Array_setIndexed)                                   \
-  V(_Int16Array, [], Int16Array_getIndexed)                                    \
-  V(_Uint16Array, [], Uint16Array_getIndexed)                                  \
-  V(_Int32Array, [], Int32Array_getIndexed)                                    \
-  V(_Uint32Array, [], Uint32Array_getIndexed)                                  \
-  V(_Int64Array, [], Int64Array_getIndexed)                                    \
-  V(_Uint64Array, [], Uint64Array_getIndexed)                                  \
-  V(_Float32Array, [], Float32Array_getIndexed)                                \
-  V(_Float32Array, []=, Float32Array_setIndexed)                               \
-  V(_Float64Array, [], Float64Array_getIndexed)                                \
-  V(_Float64Array, []=, Float64Array_setIndexed)                               \
+    Integer_greaterThanFromInt, 79222670)                                      \
+  V(_IntegerImplementation, >, Integer_greaterThan, 319553701)                 \
+  V(_IntegerImplementation, ==, Integer_equal, 1163202222)                     \
+  V(_IntegerImplementation, _equalToInteger, Integer_equalToInteger, 79222670) \
+  V(_IntegerImplementation, <, Integer_lessThan, 1306209983)                   \
+  V(_IntegerImplementation, <=, Integer_lessEqualThan, 458673122)              \
+  V(_IntegerImplementation, >=, Integer_greaterEqualThan, 459596643)           \
+  V(_IntegerImplementation, <<, Integer_shl, 1586407617)                       \
+  V(_IntegerImplementation, >>, Integer_sar, 130211175)                        \
+  V(_Smi, ~, Smi_bitNegate, 882629793)                                         \
+  V(_Double, >, Double_greaterThan, 1821658410)                                \
+  V(_Double, >=, Double_greaterEqualThan, 1317118885)                          \
+  V(_Double, <, Double_lessThan, 177557761)                                    \
+  V(_Double, <=, Double_lessEqualThan, 1316195364)                             \
+  V(_Double, ==, Double_equal, 1896071176)                                     \
+  V(_Double, +, Double_add, 1137022234)                                        \
+  V(_Double, -, Double_sub, 1425469940)                                        \
+  V(_Double, *, Double_mul, 1865672692)                                        \
+  V(_Double, /, Double_div, 1832148629)                                        \
+  V(_Double, get:isNaN, Double_getIsNaN, 54462366)                             \
+  V(_Double, get:isNegative, Double_getIsNegative, 54462366)                   \
+  V(_Double, _mulFromInteger, Double_mulFromInteger, 795128)                   \
+  V(_Double, .fromInteger, Double_fromInteger, 842078193)                      \
+  V(_Double, toInt, Double_toInt, 362666636)                                   \
+  V(_ObjectArray, ., ObjectArray_Allocate, 577949617)                          \
+  V(_ObjectArray, get:length, Array_getLength, 405297088)                      \
+  V(_ObjectArray, [], Array_getIndexed, 71937385)                              \
+  V(_ObjectArray, []=, Array_setIndexed, 255863719)                            \
+  V(_GrowableObjectArray, .fromObjectArray, GArray_Allocate, 989879928)        \
+  V(_GrowableObjectArray, get:length, GrowableArray_getLength, 725548050)      \
+  V(_GrowableObjectArray, get:capacity, GrowableArray_getCapacity, 725548050)  \
+  V(_GrowableObjectArray, [], GrowableArray_getIndexed, 581838973)             \
+  V(_GrowableObjectArray, []=, GrowableArray_setIndexed, 1048007636)           \
+  V(_GrowableObjectArray, _setLength, GrowableArray_setLength, 796709584)      \
+  V(_GrowableObjectArray, _setData, GrowableArray_setData, 477312179)          \
+  V(_GrowableObjectArray, add, GrowableArray_add, 1776744235)                  \
+  V(_ImmutableArray, [], ImmutableArray_getIndexed, 486821199)                 \
+  V(_ImmutableArray, get:length, ImmutableArray_getLength, 433698233)          \
+  V(::, sqrt, Math_sqrt, 2232519)                                              \
+  V(::, sin, Math_sin, 837187616)                                              \
+  V(::, cos, Math_cos, 548880317)                                              \
+  V(Object, ==, Object_equal, 1512068535)                                      \
+  V(_FixedSizeArrayIterator, get:hasNext,                                      \
+    FixedSizeArrayIterator_getHasNext, 1847855366)                             \
+  V(_FixedSizeArrayIterator, next, FixedSizeArrayIterator_next, 1739352783)    \
+  V(_StringBase, get:hashCode, String_getHashCode, 320803993)                  \
+  V(_StringBase, get:isEmpty, String_getIsEmpty, 1065961093)                   \
+  V(_StringBase, get:length, String_getLength, 320803993)                      \
+  V(_StringBase, charCodeAt, String_charCodeAt, 984449525)                     \
+  V(_ByteArrayBase, get:length, ByteArrayBase_getLength, 1856909152)           \
+  V(_Int8Array, [], Int8Array_getIndexed, 239810357)                           \
+  V(_Int8Array, []=, Int8Array_setIndexed, 1469038436)                         \
+  V(_Uint8Array, [], Uint8Array_getIndexed, 1635923899)                        \
+  V(_Uint8Array, []=, Uint8Array_setIndexed, 1619321522)                       \
+  V(_Int16Array, [], Int16Array_getIndexed, 2090761657)                        \
+  V(_Uint16Array, [], Uint16Array_getIndexed, 289929708)                       \
+  V(_Int32Array, [], Int32Array_getIndexed, 589442411)                         \
+  V(_Uint32Array, [], Uint32Array_getIndexed, 1474116947)                      \
+  V(_Int64Array, [], Int64Array_getIndexed, 1506836119)                        \
+  V(_Uint64Array, [], Uint64Array_getIndexed, 1856952148)                      \
+  V(_Float32Array, [], Float32Array_getIndexed, 1167607283)                    \
+  V(_Float32Array, []=, Float32Array_setIndexed, 1270729544)                   \
+  V(_Float64Array, [], Float64Array_getIndexed, 1363897161)                    \
+  V(_Float64Array, []=, Float64Array_setIndexed, 283625119)                    \
+  V(_ExternalUint8Array, [], ExternalUint8Array_getIndexed, 632699940)         \
 
 // Forward declarations.
 class Assembler;
@@ -106,7 +115,7 @@
   static bool CanIntrinsify(const Function& function);
 
  private:
-#define DECLARE_FUNCTION(test_class_name, test_function_name, destination)    \
+#define DECLARE_FUNCTION(test_class_name, test_function_name, destination, fp) \
   static bool destination(Assembler* assembler);
 
 INTRINSIC_LIST(DECLARE_FUNCTION)
diff --git a/runtime/vm/intrinsifier_ia32.cc b/runtime/vm/intrinsifier_ia32.cc
index cf47309..5675214 100644
--- a/runtime/vm/intrinsifier_ia32.cc
+++ b/runtime/vm/intrinsifier_ia32.cc
@@ -538,22 +538,19 @@
   // * EBX has the index into the array.
   // EBX contains the SMI index which is shifted by 1.
   __ SmiUntag(EBX);
-  // Move EBX into EDI.
+  // Free EBX for the value since we want a byte register.
   __ movl(EDI, EBX);
-  // Load the value into EBX.
   __ movl(EBX, Address(ESP, + 1 * kWordSize));  // Value.
-  // If EBX is not an Smi, jump to fall through.
   __ testl(EBX, Immediate(kSmiTagMask));
   __ j(NOT_ZERO, &fall_through, Assembler::kNearJump);
   __ SmiUntag(EBX);
-  // Add 128 to EBX to bring it into 0..FF.
+  // Check that the value is a byte. Add 128 to EBX to bring it into
+  // the range 0..FF.
   __ addl(EBX, Immediate(128));
   __ cmpl(EBX, Immediate(0xFF));
-  // If EBX is too large an Int8, jump to fall through.
   __ j(ABOVE, &fall_through, Assembler::kNearJump);
-  // Remove addition.
+  // Undo addition.
   __ subl(EBX, Immediate(128));
-  // Store BL into array EAX[EDI] = BL.
   __ movb(FieldAddress(EAX, EDI, TIMES_1, Int8Array::data_offset()), BL);
   __ ret();
   __ Bind(&fall_through);
@@ -585,18 +582,15 @@
   // * EBX has the index into the array.
   // EBX contains the SMI index which is shifted by 1.
   __ SmiUntag(EBX);
-  // Move EBX into EDI.
+  // Free EBX for the value since we want a byte register.
   __ movl(EDI, EBX);
-  // Load the value into EBX.
   __ movl(EBX, Address(ESP, + 1 * kWordSize));  // Value.
-  // If EBX is not an Smi, jump to fall through.
   __ testl(EBX, Immediate(kSmiTagMask));
   __ j(NOT_ZERO, &fall_through, Assembler::kNearJump);
   __ SmiUntag(EBX);
-  // If EBX is too large an Uint8, jump to fall through.
+  // Check that the value is a byte.
   __ cmpl(EBX, Immediate(0xFF));
   __ j(ABOVE, &fall_through, Assembler::kNearJump);
-  // Store BL into array EAX[EDI] = BL.
   __ movb(FieldAddress(EAX, EDI, TIMES_1, Uint8Array::data_offset()), BL);
   __ ret();
   __ Bind(&fall_through);
@@ -792,6 +786,20 @@
 }
 
 
+bool Intrinsifier::ExternalUint8Array_getIndexed(Assembler* assembler) {
+  Label fall_through;
+  TestByteArrayIndex(assembler, &fall_through);
+  __ SmiUntag(EBX);
+  __ movl(EAX, FieldAddress(EAX, ExternalUint8Array::external_data_offset()));
+  __ movl(EAX, Address(EAX, ExternalByteArrayData<uint8_t>::data_offset()));
+  __ movzxb(EAX, Address(EAX, EBX, TIMES_1, 0));
+  __ SmiTag(EAX);
+  __ ret();
+  __ Bind(&fall_through);
+  return false;
+}
+
+
 // Tests if two top most arguments are smis, jumps to label not_smi if not.
 // Topmost argument is in EAX.
 static void TestBothArgumentsSmis(Assembler* assembler, Label* not_smi) {
diff --git a/runtime/vm/intrinsifier_x64.cc b/runtime/vm/intrinsifier_x64.cc
index 5f3f96d..8d52b6a 100644
--- a/runtime/vm/intrinsifier_x64.cc
+++ b/runtime/vm/intrinsifier_x64.cc
@@ -471,6 +471,26 @@
 
 bool Intrinsifier::Int8Array_setIndexed(Assembler* assembler) {
   Label fall_through;
+  // Verify that the array index is valid.
+  TestByteArraySetIndex(assembler, &fall_through);
+  // After TestByteArraySetIndex:
+  // * RAX has the base address of the byte array.
+  // * R12 has the index into the array.
+  // R12 contains the SMI index which is shifted by 1.
+  __ SmiUntag(R12);
+  __ movq(RDI, Address(RSP, + 1 * kWordSize));  // Value.
+  __ testq(RDI, Immediate(kSmiTagMask));
+  __ j(NOT_ZERO, &fall_through, Assembler::kNearJump);
+  __ SmiUntag(RDI);
+  // Check that the value is a byte. Add 128 to the value to bring it into
+  // the range 0..FF.
+  __ addq(RDI, Immediate(128));
+  __ cmpq(RDI, Immediate(0xFF));
+  __ j(ABOVE, &fall_through, Assembler::kNearJump);
+  // Undo addition.
+  __ subq(RDI, Immediate(128));
+  __ movb(FieldAddress(RAX, R12, TIMES_1, Uint8Array::data_offset()), RDI);
+  __ ret();
   __ Bind(&fall_through);
   return false;
 }
@@ -478,6 +498,22 @@
 
 bool Intrinsifier::Uint8Array_setIndexed(Assembler* assembler) {
   Label fall_through;
+  // Verify that the array index is valid.
+  TestByteArraySetIndex(assembler, &fall_through);
+  // After TestByteArraySetIndex:
+  // * RAX has the base address of the byte array.
+  // * R12 has the index into the array.
+  // R12 contains the SMI index which is shifted by 1.
+  __ SmiUntag(R12);
+  __ movq(RDI, Address(RSP, + 1 * kWordSize));  // Value.
+  __ testq(RDI, Immediate(kSmiTagMask));
+  __ j(NOT_ZERO, &fall_through, Assembler::kNearJump);
+  __ SmiUntag(RDI);
+  // Check that value is a byte.
+  __ cmpq(RDI, Immediate(0xFF));
+  __ j(ABOVE, &fall_through, Assembler::kNearJump);
+  __ movb(FieldAddress(RAX, R12, TIMES_1, Uint8Array::data_offset()), RDI);
+  __ ret();
   __ Bind(&fall_through);
   return false;
 }
@@ -700,6 +736,20 @@
 }
 
 
+bool Intrinsifier::ExternalUint8Array_getIndexed(Assembler* assembler) {
+  Label fall_through;
+  TestByteArrayIndex(assembler, &fall_through);
+  __ SmiUntag(R12);
+  __ movq(RAX, FieldAddress(RAX, ExternalUint8Array::external_data_offset()));
+  __ movq(RAX, Address(RAX, ExternalByteArrayData<uint8_t>::data_offset()));
+  __ movzxb(RAX, Address(RAX, R12, TIMES_1, 0));
+  __ SmiTag(RAX);
+  __ ret();
+  __ Bind(&fall_through);
+  return false;
+}
+
+
 // Tests if two top most arguments are smis, jumps to label not_smi if not.
 // Topmost argument is in RAX.
 static void TestBothArgumentsSmis(Assembler* assembler, Label* not_smi) {
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index af8f5e3..6b9178d 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -17,7 +17,6 @@
 #include "vm/object_store.h"
 #include "vm/parser.h"
 #include "vm/port.h"
-#include "vm/random.h"
 #include "vm/stack_frame.h"
 #include "vm/stub_code.h"
 #include "vm/symbols.h"
@@ -150,7 +149,6 @@
       heap_(NULL),
       object_store_(NULL),
       top_context_(Context::null()),
-      random_seed_(Random::kDefaultRandomSeed),
       top_exit_frame_info_(0),
       init_callback_data_(NULL),
       library_tag_handler_(NULL),
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 76afa3e..5849640 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -145,9 +145,6 @@
     return OFFSET_OF(Isolate, top_context_);
   }
 
-  int32_t random_seed() const { return random_seed_; }
-  void set_random_seed(int32_t value) { random_seed_ = value; }
-
   uword top_exit_frame_info() const { return top_exit_frame_info_; }
   void set_top_exit_frame_info(uword value) { top_exit_frame_info_ = value; }
   static intptr_t top_exit_frame_info_offset() {
@@ -326,7 +323,6 @@
   Heap* heap_;
   ObjectStore* object_store_;
   RawContext* top_context_;
-  int32_t random_seed_;
   uword top_exit_frame_info_;
   void* init_callback_data_;
   Dart_LibraryTagHandler library_tag_handler_;
diff --git a/runtime/vm/isolate_test.cc b/runtime/vm/isolate_test.cc
index 2aadf6d..9812840 100644
--- a/runtime/vm/isolate_test.cc
+++ b/runtime/vm/isolate_test.cc
@@ -23,7 +23,7 @@
 // callback has been set by the embedder when an isolate is spawned.
 TEST_CASE(IsolateSpawn) {
   const char* kScriptChars =
-      "#import('dart:isolate');\n"
+      "import 'dart:isolate';\n"
       "void entry() {}\n"
       "int testMain() {\n"
       "  try {\n"
diff --git a/runtime/vm/locations.h b/runtime/vm/locations.h
index 4522b1a..0c2bc09 100644
--- a/runtime/vm/locations.h
+++ b/runtime/vm/locations.h
@@ -277,6 +277,12 @@
     return value_ == other.value_;
   }
 
+  // If current location is constant might return something that
+  // is not equal to any Kind.
+  Kind kind() const {
+    return KindField::decode(value_);
+  }
+
  private:
   explicit Location(uword value) : value_(value) { }
 
@@ -287,12 +293,6 @@
     return PayloadField::decode(value_);
   }
 
-  // If current location is constant might return something that
-  // is not equal to any Kind.
-  Kind kind() const {
-    return KindField::decode(value_);
-  }
-
   typedef BitField<Kind, 0, kBitsForKind> KindField;
   typedef BitField<uword, kBitsForKind, kBitsForPayload> PayloadField;
 
diff --git a/runtime/vm/native_entry_test.cc b/runtime/vm/native_entry_test.cc
index 6f945b4..8c58b66 100644
--- a/runtime/vm/native_entry_test.cc
+++ b/runtime/vm/native_entry_test.cc
@@ -58,14 +58,15 @@
 // Test code patching.
 void TestStaticCallPatching(Dart_NativeArguments args) {
   Dart_EnterScope();
-  uword target_address = 0;
-  Function& target_function = Function::Handle();
   DartFrameIterator iterator;
   iterator.NextFrame();  // Skip native call.
   StackFrame* static_caller_frame = iterator.NextFrame();
-  CodePatcher::GetStaticCallAt(static_caller_frame->pc(),
-                               &target_function,
-                               &target_address);
+  uword target_address =
+      CodePatcher::GetStaticCallTargetAt(static_caller_frame->pc());
+  const Code& code = Code::Handle(static_caller_frame->LookupDartCode());
+  const Function& target_function =
+      Function::Handle(code.GetStaticCallTargetFunctionAt(
+          static_caller_frame->pc()));
   EXPECT(String::Handle(target_function.name()).
       Equals(String::Handle(String::New("NativePatchStaticCall"))));
   const uword function_entry_address =
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 5dc09dd..6867359 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -408,6 +408,8 @@
   isolate->object_store()->set_array_class(cls);
   cls = Class::NewStringClass(kOneByteStringCid);
   isolate->object_store()->set_one_byte_string_class(cls);
+  cls = Class::NewStringClass(kTwoByteStringCid);
+  isolate->object_store()->set_two_byte_string_class(cls);
 
   // Allocate and initialize the empty_array instance.
   {
@@ -516,17 +518,6 @@
 }
 
 
-RawClass* Object::CreateAndRegisterInterface(const char* cname,
-                                             const Script& script,
-                                             const Library& lib) {
-  const String& name = String::Handle(Symbols::New(cname));
-  const Class& cls = Class::Handle(
-      Class::NewInterface(name, script, Scanner::kDummyTokenIndex));
-  lib.AddClass(cls);
-  return cls.raw();
-}
-
-
 void Object::RegisterClass(const Class& cls,
                            const String& name,
                            const Library& lib) {
@@ -590,6 +581,10 @@
   cls = Class::NewStringClass(kOneByteStringCid);
   object_store->set_one_byte_string_class(cls);
 
+  // Pre-allocate the TwoByteString class needed by the symbol table.
+  cls = Class::NewStringClass(kTwoByteStringCid);
+  object_store->set_two_byte_string_class(cls);
+
   // Setup the symbol table for the symbols created in the isolate.
   Symbols::SetupSymbolTable(isolate);
 
@@ -650,8 +645,7 @@
   RegisterPrivateClass(cls, name, core_lib);
   pending_classes.Add(cls, Heap::kOld);
 
-  cls = Class::NewStringClass(kTwoByteStringCid);
-  object_store->set_two_byte_string_class(cls);
+  cls = object_store->two_byte_string_class();  // Was allocated above.
   name = Symbols::TwoByteString();
   RegisterPrivateClass(cls, name, core_lib);
   pending_classes.Add(cls, Heap::kOld);
@@ -886,7 +880,9 @@
   type = Type::NewNonParameterizedType(cls);
   object_store->set_string_type(type);
 
-  cls = CreateAndRegisterInterface("List", script, core_lib);
+  name = Symbols::New("List");
+  cls = Class::New<Instance>(name, script, Scanner::kDummyTokenIndex);
+  RegisterClass(cls, name, core_lib);
   pending_classes.Add(cls, Heap::kOld);
   object_store->set_list_class(cls);
 
@@ -2038,6 +2034,11 @@
 }
 
 
+bool Class::IsListClass() const {
+  return raw() == Isolate::Current()->object_store()->list_class();
+}
+
+
 bool Class::IsCanonicalSignatureClass() const {
   const Function& function = Function::Handle(signature_function());
   return (!function.IsNull() && (function.signature_class() == raw()));
@@ -2476,7 +2477,12 @@
 
 
 const char* UnresolvedClass::ToCString() const {
-  return "UnresolvedClass";
+  const char* format = "unresolved class '%s'";
+  const char* cname =  String::Handle(Name()).ToCString();
+  intptr_t len = OS::SNPrint(NULL, 0, format, cname) + 1;
+  char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
+  OS::SNPrint(chars, len, format, cname);
+  return chars;
 }
 
 
@@ -4180,6 +4186,45 @@
 }
 
 
+// Construct fingerprint from token stream. The token stream contains also
+// arguments.
+int32_t Function::SourceFingerprint() const {
+  uint32_t result = String::Handle(Signature()).Hash();
+  TokenStream::Iterator tokens_iterator(TokenStream::Handle(
+      Script::Handle(script()).tokens()), token_pos());
+  Object& obj = Object::Handle();
+  String& literal = String::Handle();
+  while (tokens_iterator.CurrentPosition() < end_token_pos()) {
+    uint32_t val = 0;
+    obj = tokens_iterator.CurrentToken();
+    if (obj.IsSmi()) {
+      val = Smi::Cast(obj).Value();
+    } else {
+      literal = tokens_iterator.MakeLiteralToken(obj);
+      val = literal.Hash();
+    }
+    result = 31 * result + val;
+    tokens_iterator.Advance();
+  }
+  result = result & ((static_cast<uint32_t>(1) << 31) - 1);
+  ASSERT(result <= static_cast<uint32_t>(kMaxInt32));
+  return result;
+}
+
+
+bool Function::CheckSourceFingerprint(intptr_t fp) const {
+  if (SourceFingerprint() != fp) {
+    OS::Print("FP mismatch while recogbnizing method %s:"
+      " expecting %"Pd" found %d\n",
+      ToFullyQualifiedCString(),
+      fp,
+      SourceFingerprint());
+    return false;
+  }
+  return true;
+}
+
+
 const char* Function::ToCString() const {
   const char* static_str = is_static() ? " static" : "";
   const char* abstract_str = is_abstract() ? " abstract" : "";
@@ -7002,8 +7047,41 @@
 }
 
 
-void Code::set_resolved_static_calls(const GrowableObjectArray& val) const {
-  StorePointer(&raw_ptr()->resolved_static_calls_, val.raw());
+void Code::set_static_calls_target_table(const Array& value) const {
+  StorePointer(&raw_ptr()->static_calls_target_table_, value.raw());
+}
+
+
+RawFunction* Code::GetStaticCallTargetFunctionAt(uword pc) const {
+  RawObject* raw_code_offset =
+      reinterpret_cast<RawObject*>(Smi::New(pc - EntryPoint()));
+  const Array& array =
+      Array::Handle(raw_ptr()->static_calls_target_table_);
+  for (intptr_t i = 0; i < array.Length(); i += kSCallTableEntryLength) {
+    if (array.At(i) == raw_code_offset) {
+      Function& function = Function::Handle();
+      function ^= array.At(i + kSCallTableFunctionEntry);
+      return function.raw();
+    }
+  }
+  return Function::null();
+}
+
+
+void Code::SetStaticCallTargetCodeAt(uword pc, const Code& code) const {
+  RawObject* raw_code_offset =
+      reinterpret_cast<RawObject*>(Smi::New(pc - EntryPoint()));
+  const Array& array =
+      Array::Handle(raw_ptr()->static_calls_target_table_);
+  for (intptr_t i = 0; i < array.Length(); i += kSCallTableEntryLength) {
+    if (array.At(i) == raw_code_offset) {
+      ASSERT(code.IsNull() ||
+             (code.function() == array.At(i + kSCallTableFunctionEntry)));
+      array.SetAt(i + kSCallTableCodeEntry, code);
+      return;
+    }
+  }
+  UNREACHABLE();
 }
 
 
@@ -7276,12 +7354,11 @@
   deopt_ids->Clear();
   const PcDescriptors& descriptors =
       PcDescriptors::Handle(this->pc_descriptors());
-  Function& function = Function::Handle();
   for (intptr_t i = 0; i < descriptors.Length(); i++) {
     if (descriptors.DescriptorKind(i) == PcDescriptors::kFuncCall) {
       // Static call.
-      uword target_addr;
-      CodePatcher::GetStaticCallAt(descriptors.PC(i), &function, &target_addr);
+      const uword target_addr =
+          CodePatcher::GetStaticCallTargetAt(descriptors.PC(i));
       if (target_addr == StubCode::CallStaticFunctionEntryPoint()) {
         deopt_ids->Add(descriptors.DeoptId(i));
       }
@@ -8977,18 +9054,21 @@
   if (IsResolved()) {
     const AbstractTypeArguments& type_arguments =
         AbstractTypeArguments::Handle(arguments());
+    const char* class_name;
+    if (HasResolvedTypeClass()) {
+      class_name = String::Handle(
+          Class::Handle(type_class()).Name()).ToCString();
+    } else {
+      class_name = UnresolvedClass::Handle(unresolved_class()).ToCString();
+    }
     if (type_arguments.IsNull()) {
       const char* format = "Type: class '%s'";
-      const char* class_name =
-          String::Handle(Class::Handle(type_class()).Name()).ToCString();
       intptr_t len = OS::SNPrint(NULL, 0, format, class_name) + 1;
       char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
       OS::SNPrint(chars, len, format, class_name);
       return chars;
     } else {
       const char* format = "Type: class '%s', args:[%s]";
-      const char* class_name =
-          String::Handle(Class::Handle(type_class()).Name()).ToCString();
       const char* args_cstr =
           AbstractTypeArguments::Handle(arguments()).ToCString();
       intptr_t len = OS::SNPrint(NULL, 0, format, class_name, args_cstr) + 1;
@@ -9875,11 +9955,11 @@
     hash_ ^= hash_ >> 11;
     hash_ += hash_ << 15;
     hash_ = hash_ & ((static_cast<intptr_t>(1) << bits) - 1);
-    ASSERT(hash_ >= 0);
+    ASSERT(hash_ <= static_cast<uint32_t>(kMaxInt32));
     return hash_ == 0 ? 1 : hash_;
   }
  private:
-  intptr_t hash_;
+  uint32_t hash_;
 };
 
 
@@ -9927,7 +10007,7 @@
 }
 
 
-intptr_t String::Hash(const uint32_t* characters, intptr_t len) {
+intptr_t String::Hash(const int32_t* characters, intptr_t len) {
   return HashImpl(characters, len);
 }
 
@@ -9990,36 +10070,37 @@
 }
 
 
-bool String::Equals(const char* str) const {
-  ASSERT(str != NULL);
-  intptr_t len = strlen(str);
-  for (intptr_t i = 0; i < this->Length(); ++i) {
-    if (*str == '\0') {
+bool String::Equals(const char* cstr) const {
+  ASSERT(cstr != NULL);
+  CodePointIterator it(*this);
+  intptr_t len = strlen(cstr);
+  while (it.Next()) {
+    if (*cstr == '\0') {
       // Lengths don't match.
       return false;
     }
     int32_t ch;
-    intptr_t consumed = Utf8::Decode(reinterpret_cast<const uint8_t*>(str),
+    intptr_t consumed = Utf8::Decode(reinterpret_cast<const uint8_t*>(cstr),
                                      len,
                                      &ch);
-    if (consumed == 0 || this->CharAt(i) != ch) {
+    if (consumed == 0 || it.Current() != ch) {
       return false;
     }
-    str += consumed;
+    cstr += consumed;
     len -= consumed;
   }
-  return *str == '\0';
+  return *cstr == '\0';
 }
 
 
-bool String::Equals(const uint8_t* characters, intptr_t len) const {
+bool String::Equals(const uint8_t* latin1_array, intptr_t len) const {
   if (len != this->Length()) {
     // Lengths don't match.
     return false;
   }
 
   for (intptr_t i = 0; i < len; i++) {
-    if (this->CharAt(i) != characters[i]) {
+    if (this->CharAt(i) != latin1_array[i]) {
       return false;
     }
   }
@@ -10027,14 +10108,14 @@
 }
 
 
-bool String::Equals(const uint16_t* characters, intptr_t len) const {
+bool String::Equals(const uint16_t* utf16_array, intptr_t len) const {
   if (len != this->Length()) {
     // Lengths don't match.
     return false;
   }
 
   for (intptr_t i = 0; i < len; i++) {
-    if (this->CharAt(i) != characters[i]) {
+    if (this->CharAt(i) != utf16_array[i]) {
       return false;
     }
   }
@@ -10042,16 +10123,17 @@
 }
 
 
-bool String::Equals(const uint32_t* characters, intptr_t len) const {
-  if (len != this->Length()) {
-    // Lengths don't match.
-    return false;
-  }
-
-  for (intptr_t i = 0; i < len; i++) {
-    if (this->CharAt(i) != static_cast<int32_t>(characters[i])) {
+bool String::Equals(const int32_t* utf32_array, intptr_t len) const {
+  CodePointIterator it(*this);
+  intptr_t i = 0;
+  while (it.Next()) {
+    if (it.Current() != static_cast<int32_t>(utf32_array[i])) {
       return false;
     }
+    ++i;
+  }
+  if (i != len) {
+    return false;
   }
   return true;
 }
@@ -10121,7 +10203,7 @@
     }
     return strobj.raw();
   }
-  ASSERT((type == Utf8::kBMP) || (type == Utf8::kSMP));
+  ASSERT((type == Utf8::kBMP) || (type == Utf8::kSupplementary));
   const String& strobj = String::Handle(TwoByteString::New(len, space));
   NoGCScope no_gc;
   Utf8::DecodeToUTF16(utf8_array, array_len,
@@ -10147,7 +10229,7 @@
 }
 
 
-RawString* String::New(const uint32_t* utf32_array,
+RawString* String::New(const int32_t* utf32_array,
                        intptr_t array_len,
                        Heap::Space space) {
   bool is_one_byte_string = true;
@@ -10512,10 +10594,9 @@
   ASSERT(!str.IsNull());
   bool has_mapping = false;
   int32_t dst_max = 0;
-  intptr_t len = str.Length();
-  // TODO(cshapiro): assume a transform is required, rollback if not.
-  for (intptr_t i = 0; i < len; ++i) {
-    int32_t src = str.CharAt(i);
+  CodePointIterator it(str);
+  while (it.Next()) {
+    int32_t src = it.Current();
     int32_t dst = mapping(src);
     if (src != dst) {
       has_mapping = true;
@@ -10545,6 +10626,25 @@
 }
 
 
+bool String::CodePointIterator::Next() {
+  ASSERT(index_ >= -1);
+  ASSERT(index_ < str_.Length());
+  int d = Utf16::Length(ch_);
+  if (index_ == (str_.Length() - d)) {
+    return false;
+  }
+  index_ += d;
+  ch_ = str_.CharAt(index_);
+  if (Utf16::IsLeadSurrogate(ch_) && (index_ != (str_.Length() - 1))) {
+    int32_t ch2 = str_.CharAt(index_ + 1);
+    if (Utf16::IsTrailSurrogate(ch2)) {
+      ch_ = Utf16::Decode(ch_, ch2);
+    }
+  }
+  return true;
+}
+
+
 RawOneByteString* OneByteString::EscapeSpecialCharacters(const String& str,
                                                          bool raw_str) {
   intptr_t len = str.Length();
@@ -10683,7 +10783,7 @@
 }
 
 
-RawOneByteString* OneByteString::New(const uint32_t* characters,
+RawOneByteString* OneByteString::New(const int32_t* characters,
                                      intptr_t len,
                                      Heap::Space space) {
   const String& result = String::Handle(OneByteString::New(len, space));
@@ -10818,7 +10918,7 @@
 
 
 RawTwoByteString* TwoByteString::New(intptr_t utf16_len,
-                                     const uint32_t* utf32_array,
+                                     const int32_t* utf32_array,
                                      intptr_t array_len,
                                      Heap::Space space) {
   ASSERT((array_len > 0) && (utf16_len >= array_len));
@@ -10829,7 +10929,7 @@
     for (intptr_t i = 0; i < array_len; ++i) {
       if (utf32_array[i] > 0xffff) {
         ASSERT(j < (utf16_len - 1));
-        Utf8::ConvertUTF32ToUTF16(utf32_array[i], CharAddr(result, j));
+        Utf16::Encode(utf32_array[i], CharAddr(result, j));
         j += 2;
       } else {
         ASSERT(j < utf16_len);
@@ -10887,10 +10987,20 @@
   ASSERT(!str.IsNull());
   intptr_t len = str.Length();
   const String& result = String::Handle(TwoByteString::New(len, space));
-  for (intptr_t i = 0; i < len; ++i) {
-    int32_t ch = mapping(str.CharAt(i));
-    ASSERT(ch >= 0 && ch <= 0xFFFF);
-    *CharAddr(result, i) = ch;
+  String::CodePointIterator it(str);
+  intptr_t i = 0;
+  while (it.Next()) {
+    int32_t src = it.Current();
+    int32_t dst = mapping(src);
+    ASSERT(dst >= 0 && dst <= 0x10FFFF);
+    intptr_t len = Utf16::Length(dst);
+    if (len == 1) {
+      *CharAddr(result, i) = dst;
+    } else {
+      ASSERT(len == 2);
+      Utf16::Encode(dst, CharAddr(result, i));
+    }
+    i += len;
   }
   return TwoByteString::raw(result);
 }
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 07cb5bf..e40d545 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -366,9 +366,6 @@
  private:
   static void InitializeObject(uword address, intptr_t id, intptr_t size);
 
-  static RawClass* CreateAndRegisterInterface(const char* cname,
-                                              const Script& script,
-                                              const Library& lib);
   static void RegisterClass(const Class& cls,
                             const String& name,
                             const Library& lib);
@@ -605,6 +602,9 @@
   // Check if this class represents the 'Object' class.
   bool IsObjectClass() const { return id() == kInstanceCid; }
 
+  // Check if this class represents the 'List' class.
+  bool IsListClass() const;
+
   // Check if this class represents a signature class.
   bool IsSignatureClass() const {
     return signature_function() != Object::null();
@@ -1433,6 +1433,13 @@
                                          const Function& parent,
                                          intptr_t token_pos);
 
+  // Slow function, use in asserts to track changes in important library
+  // functions.
+  int32_t SourceFingerprint() const;
+
+  // Return false and report an error if the fingerprint does not match.
+  bool CheckSourceFingerprint(intptr_t fp) const;
+
   static const int kCtorPhaseInit = 1 << 0;
   static const int kCtorPhaseBody = 1 << 1;
   static const int kCtorPhaseAll = (kCtorPhaseInit | kCtorPhaseBody);
@@ -2486,10 +2493,22 @@
   void set_stackmaps(const Array& maps) const;
   RawStackmap* GetStackmap(uword pc, Array* stackmaps, Stackmap* map) const;
 
-  RawGrowableObjectArray* resolved_static_calls() const {
-    return raw_ptr()->resolved_static_calls_;
+  enum {
+    kSCallTableOffsetEntry = 0,
+    kSCallTableFunctionEntry = 1,
+    kSCallTableCodeEntry = 2,
+    kSCallTableEntryLength = 3,
+  };
+
+  void set_static_calls_target_table(const Array& value) const;
+  RawArray* static_calls_target_table() const {
+    return raw_ptr()->static_calls_target_table_;
   }
-  void set_resolved_static_calls(const GrowableObjectArray& val) const;
+
+  // Returns null if there is no static call at 'pc'.
+  RawFunction* GetStaticCallTargetFunctionAt(uword pc) const;
+  // Aborts if there is no static call at 'pc'.
+  void SetStaticCallTargetCodeAt(uword pc, const Code& code) const;
 
   class Comments : public ZoneAllocated {
    public:
@@ -3708,6 +3727,29 @@
   static const intptr_t kSizeofRawString = sizeof(RawObject) + (2 * kWordSize);
   static const intptr_t kMaxElements = kSmiMax / kTwoByteChar;
 
+  class CodePointIterator : public ValueObject {
+   public:
+    explicit CodePointIterator(const String& str)
+        : str_(str),
+          index_(-1),
+          ch_(-1) {
+    }
+
+    int32_t Current() {
+      ASSERT(index_ >= 0);
+      ASSERT(index_ < str_.Length());
+      return ch_;
+    }
+
+    bool Next();
+
+   private:
+    const String& str_;
+    intptr_t index_;
+    int32_t ch_;
+    DISALLOW_IMPLICIT_CONSTRUCTORS(CodePointIterator);
+  };
+
   intptr_t Length() const { return Smi::Value(raw_ptr()->length_); }
   static intptr_t length_offset() { return OFFSET_OF(RawString, length_); }
 
@@ -3716,7 +3758,7 @@
   static intptr_t Hash(const String& str, intptr_t begin_index, intptr_t len);
   static intptr_t Hash(const uint8_t* characters, intptr_t len);
   static intptr_t Hash(const uint16_t* characters, intptr_t len);
-  static intptr_t Hash(const uint32_t* characters, intptr_t len);
+  static intptr_t Hash(const int32_t* characters, intptr_t len);
 
   int32_t CharAt(intptr_t index) const;
 
@@ -3726,10 +3768,18 @@
   inline bool Equals(const String& str,
                      intptr_t begin_index,  // begin index on 'str'.
                      intptr_t len) const;  // len on 'str'.
-  bool Equals(const char* str) const;
+
+  // Compares to a '\0' terminated array of UTF-8 encoded characters.
+  bool Equals(const char* cstr) const;
+
+  // Compares to an array of UTF-8 encoded characters.
   bool Equals(const uint8_t* characters, intptr_t len) const;
+
+  // Compares to an array of UTF-16 encoded characters.
   bool Equals(const uint16_t* characters, intptr_t len) const;
-  bool Equals(const uint32_t* characters, intptr_t len) const;
+
+  // Compares to an array of UTF-32 encoded characters.
+  bool Equals(const int32_t* characters, intptr_t len) const;
 
   virtual bool Equals(const Instance& other) const;
 
@@ -3791,7 +3841,7 @@
                         Heap::Space space = Heap::kNew);
 
   // Creates a new String object from an array of UTF-32 encoded characters.
-  static RawString* New(const uint32_t* utf32_array,
+  static RawString* New(const int32_t* utf32_array,
                         intptr_t array_len,
                         Heap::Space space = Heap::kNew);
 
@@ -3937,7 +3987,7 @@
   static RawOneByteString* New(const uint16_t* characters,
                                intptr_t len,
                                Heap::Space space);
-  static RawOneByteString* New(const uint32_t* characters,
+  static RawOneByteString* New(const int32_t* characters,
                                intptr_t len,
                                Heap::Space space);
   static RawOneByteString* New(const String& str,
@@ -4020,7 +4070,7 @@
                                intptr_t len,
                                Heap::Space space);
   static RawTwoByteString* New(intptr_t utf16_len,
-                               const uint32_t* characters,
+                               const int32_t* characters,
                                intptr_t len,
                                Heap::Space space);
   static RawTwoByteString* New(const String& str,
@@ -4515,7 +4565,7 @@
   static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
 
   static intptr_t data_offset() {
-    return length_offset() + kWordSize;
+    return OFFSET_OF(RawInt8Array, data_);
   }
 
   static intptr_t InstanceSize() {
@@ -4567,7 +4617,7 @@
   static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
 
   static intptr_t data_offset() {
-    return length_offset() + kWordSize;
+    return OFFSET_OF(RawUint8Array, data_);
   }
 
   static intptr_t InstanceSize() {
@@ -4619,7 +4669,7 @@
   static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
 
   static intptr_t data_offset() {
-    return length_offset() + kWordSize;
+    return OFFSET_OF(RawInt16Array, data_);
   }
 
   static intptr_t InstanceSize() {
@@ -4671,7 +4721,7 @@
   static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
 
   static intptr_t data_offset() {
-    return length_offset() + kWordSize;
+    return OFFSET_OF(RawUint16Array, data_);
   }
 
   static intptr_t InstanceSize() {
@@ -4723,7 +4773,7 @@
   static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
 
   static intptr_t data_offset() {
-    return length_offset() + kWordSize;
+    return OFFSET_OF(RawInt32Array, data_);
   }
 
   static intptr_t InstanceSize() {
@@ -4775,7 +4825,7 @@
   static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
 
   static intptr_t data_offset() {
-    return length_offset() + kWordSize;
+    return OFFSET_OF(RawUint32Array, data_);
   }
 
   static intptr_t InstanceSize() {
@@ -4827,7 +4877,7 @@
   static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
 
   static intptr_t data_offset() {
-    return length_offset() + kWordSize;
+    return OFFSET_OF(RawInt64Array, data_);
   }
 
   static intptr_t InstanceSize() {
@@ -4879,7 +4929,7 @@
   static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
 
   static intptr_t data_offset() {
-    return length_offset() + kWordSize;
+    return OFFSET_OF(RawUint64Array, data_);
   }
 
   static intptr_t InstanceSize() {
@@ -4931,7 +4981,7 @@
   static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
 
   static intptr_t data_offset() {
-    return length_offset() + kWordSize;
+    return OFFSET_OF(RawFloat32Array, data_);
   }
 
   static intptr_t InstanceSize() {
@@ -4988,7 +5038,7 @@
   }
 
   static intptr_t data_offset() {
-    return length_offset() + kWordSize;
+    return OFFSET_OF(RawFloat64Array, data_);
   }
 
   static intptr_t InstanceSize(intptr_t len) {
@@ -5107,6 +5157,10 @@
     return RoundedAllocationSize(sizeof(RawExternalUint8Array));
   }
 
+  static intptr_t external_data_offset() {
+    return OFFSET_OF(RawExternalUint8Array, external_data_);
+  }
+
   static RawExternalUint8Array* New(uint8_t* data,
                                     intptr_t len,
                                     void* peer,
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index 354c11c..f91f5d6 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -5,6 +5,7 @@
 #include "platform/assert.h"
 #include "vm/assembler.h"
 #include "vm/bigint_operations.h"
+#include "vm/class_finalizer.h"
 #include "vm/isolate.h"
 #include "vm/object.h"
 #include "vm/object_store.h"
@@ -273,6 +274,48 @@
 }
 
 
+TEST_CASE(StringCompareTo) {
+  const String& abcd = String::Handle(String::New("abcd"));
+  const String& abce = String::Handle(String::New("abce"));
+  EXPECT_EQ(0, abcd.CompareTo(abcd));
+  EXPECT_EQ(0, abce.CompareTo(abce));
+  EXPECT(abcd.CompareTo(abce) < 0);
+  EXPECT(abce.CompareTo(abcd) > 0);
+
+  const int kMonkeyLen = 4;
+  const uint8_t monkey_utf8[kMonkeyLen] = { 0xf0, 0x9f, 0x90, 0xb5 };
+  const String& monkey_face =
+      String::Handle(String::New(monkey_utf8, kMonkeyLen));
+  const int kDogLen = 4;
+  // 0x1f436 DOG FACE.
+  const uint8_t dog_utf8[kDogLen] = { 0xf0, 0x9f, 0x90, 0xb6 };
+  const String& dog_face = String::Handle(String::New(dog_utf8, kDogLen));
+  EXPECT_EQ(0, monkey_face.CompareTo(monkey_face));
+  EXPECT_EQ(0, dog_face.CompareTo(dog_face));
+  EXPECT(monkey_face.CompareTo(dog_face) < 0);
+  EXPECT(dog_face.CompareTo(monkey_face) > 0);
+
+  const int kDominoLen = 4;
+  // 0x1f036 DOMINO TILE HORIZONTAL-00-05.
+  const uint8_t domino_utf8[kDominoLen] = { 0xf0, 0x9f, 0x80, 0xb6 };
+  const String& domino = String::Handle(String::New(domino_utf8, kDominoLen));
+  EXPECT_EQ(0, domino.CompareTo(domino));
+  EXPECT(domino.CompareTo(dog_face) < 0);
+  EXPECT(domino.CompareTo(monkey_face) < 0);
+  EXPECT(dog_face.CompareTo(domino) > 0);
+  EXPECT(monkey_face.CompareTo(domino) > 0);
+
+  EXPECT(abcd.CompareTo(monkey_face) < 0);
+  EXPECT(abce.CompareTo(monkey_face) < 0);
+  EXPECT(abcd.CompareTo(domino) < 0);
+  EXPECT(abce.CompareTo(domino) < 0);
+  EXPECT(domino.CompareTo(abcd) > 0);
+  EXPECT(domino.CompareTo(abcd) > 0);
+  EXPECT(monkey_face.CompareTo(abce) > 0);
+  EXPECT(monkey_face.CompareTo(abce) > 0);
+}
+
+
 TEST_CASE(Mint) {
 // On 64-bit architectures a Smi is stored in a 64 bit word. A Midint cannot
 // be allocated if it does fit into a Smi.
@@ -559,7 +602,7 @@
     EXPECT_EQ(false, str1.StartsWith(str3));
   }
 
-  const uint32_t four_chars[] = { 'C', 0xFF, 'h', 0xFFFF, 'a', 0x10FFFF, 'r' };
+  const int32_t four_chars[] = { 'C', 0xFF, 'h', 0xFFFF, 'a', 0x10FFFF, 'r' };
   const String& four_str = String::Handle(String::New(four_chars, 7));
   EXPECT_EQ(four_str.Hash(), four_str.Hash());
   EXPECT(four_str.IsTwoByteString());
@@ -587,7 +630,7 @@
 
   // Create a 1-byte string from an array of 4-byte elements.
   {
-    const uint32_t char32[] = { 0x00, 0x1F, 0x7F };
+    const int32_t char32[] = { 0x00, 0x1F, 0x7F };
     const String& str8 = String::Handle(String::New(char32, 3));
     EXPECT(str8.IsOneByteString());
     EXPECT(!str8.IsTwoByteString());
@@ -598,7 +641,7 @@
 
   // Create a 2-byte string from an array of 4-byte elements.
   {
-    const uint32_t char32[] = { 0, 0x7FFF, 0xFFFF };
+    const int32_t char32[] = { 0, 0x7FFF, 0xFFFF };
     const String& str16 = String::Handle(String::New(char32, 3));
     EXPECT(!str16.IsOneByteString());
     EXPECT(str16.IsTwoByteString());
@@ -943,7 +986,7 @@
     EXPECT(str1.IsOneByteString());
     EXPECT_EQ(0, str1.Length());
 
-    uint32_t four[] = { 0x1D4D5, 0x1D4DE, 0x1D4E4, 0x1D4E1 };
+    int32_t four[] = { 0x1D4D5, 0x1D4DE, 0x1D4E4, 0x1D4E1 };
     intptr_t four_len = sizeof(four) / sizeof(four[0]);
     intptr_t expected_len = (four_len * 2);
     const String& str2 = String::Handle(String::New(four, four_len));
@@ -988,8 +1031,8 @@
     array3.SetAt(2, str2);
     const String& str7 = String::Handle(String::ConcatAll(array3));
     EXPECT(str7.IsTwoByteString());
-    uint32_t fourfour[] = { 0x1D4D5, 0x1D4DE, 0x1D4E4, 0x1D4E1,
-                            0x1D4D5, 0x1D4DE, 0x1D4E4, 0x1D4E1 };
+    int32_t fourfour[] = { 0x1D4D5, 0x1D4DE, 0x1D4E4, 0x1D4E1,
+                           0x1D4D5, 0x1D4DE, 0x1D4E4, 0x1D4E1 };
     intptr_t fourfour_len = sizeof(fourfour) / sizeof(fourfour[0]);
     EXPECT_EQ((fourfour_len * 2), str7.Length());
     const String& fourfour_str =
@@ -999,13 +1042,13 @@
 
   // Concatenate non-empty strings built from 4-byte elements.
   {
-    const uint32_t one[] = { 0x105D0, 0x105D9, 0x105D9, 0x105DF };
+    const int32_t one[] = { 0x105D0, 0x105D9, 0x105D9, 0x105DF };
     intptr_t one_len = sizeof(one) / sizeof(one[0]);
     const String& onestr = String::Handle(String::New(one, one_len));
     EXPECT(onestr.IsTwoByteString());
     EXPECT_EQ((one_len *2), onestr.Length());
 
-    const uint32_t two[] = { 0x105E6, 0x105D5, 0x105D5, 0x105D9, 0x105D9 };
+    const int32_t two[] = { 0x105E6, 0x105D5, 0x105D5, 0x105D9, 0x105D9 };
     intptr_t two_len = sizeof(two) / sizeof(two[0]);
     const String& twostr = String::Handle(String::New(two, two_len));
     EXPECT(twostr.IsTwoByteString());
@@ -1015,8 +1058,8 @@
 
     const String& str1 = String::Handle(String::Concat(onestr, twostr));
     EXPECT(str1.IsTwoByteString());
-    const uint32_t one_two[] = { 0x105D0, 0x105D9, 0x105D9, 0x105DF,
-                                 0x105E6, 0x105D5, 0x105D5, 0x105D9, 0x105D9 };
+    const int32_t one_two[] = { 0x105D0, 0x105D9, 0x105D9, 0x105DF,
+                                0x105E6, 0x105D5, 0x105D5, 0x105D9, 0x105D9 };
     intptr_t one_two_len = sizeof(one_two) / sizeof(one_two[0]);
     EXPECT_EQ((one_two_len * 2), str1.Length());
     const String& one_two_str =
@@ -1025,8 +1068,8 @@
 
     const String& str2 = String::Handle(String::Concat(twostr, onestr));
     EXPECT(str2.IsTwoByteString());
-    const uint32_t two_one[] = { 0x105E6, 0x105D5, 0x105D5, 0x105D9, 0x105D9,
-                                 0x105D0, 0x105D9, 0x105D9, 0x105DF };
+    const int32_t two_one[] = { 0x105E6, 0x105D5, 0x105D5, 0x105D9, 0x105D9,
+                                0x105D0, 0x105D9, 0x105D9, 0x105DF };
     intptr_t two_one_len = sizeof(two_one) / sizeof(two_one[0]);
     EXPECT_EQ((two_one_len * 2), str2.Length());
     const String& two_one_str =
@@ -1060,10 +1103,10 @@
     array3.SetAt(2, onestr);
     const String& str5 = String::Handle(String::ConcatAll(array3));
     EXPECT(str5.IsTwoByteString());
-    const uint32_t one_two_one[] = { 0x105D0, 0x105D9, 0x105D9, 0x105DF,
-                                     0x105E6, 0x105D5, 0x105D5, 0x105D9,
-                                     0x105D9,
-                                     0x105D0, 0x105D9, 0x105D9, 0x105DF };
+    const int32_t one_two_one[] = { 0x105D0, 0x105D9, 0x105D9, 0x105DF,
+                                    0x105E6, 0x105D5, 0x105D5, 0x105D9,
+                                    0x105D9,
+                                    0x105D0, 0x105D9, 0x105D9, 0x105DF };
     intptr_t one_two_one_len = sizeof(one_two_one) / sizeof(one_two_one[0]);
     EXPECT_EQ((one_two_one_len * 2), str5.Length());
     const String& one_two_one_str =
@@ -1077,11 +1120,11 @@
     array4.SetAt(2, twostr);
     const String& str6 = String::Handle(String::ConcatAll(array4));
     EXPECT(str6.IsTwoByteString());
-    const uint32_t two_one_two[] = { 0x105E6, 0x105D5, 0x105D5, 0x105D9,
-                                     0x105D9,
-                                     0x105D0, 0x105D9, 0x105D9, 0x105DF,
-                                     0x105E6, 0x105D5, 0x105D5, 0x105D9,
-                                     0x105D9 };
+    const int32_t two_one_two[] = { 0x105E6, 0x105D5, 0x105D5, 0x105D9,
+                                    0x105D9,
+                                    0x105D0, 0x105D9, 0x105D9, 0x105DF,
+                                    0x105E6, 0x105D5, 0x105D5, 0x105D9,
+                                    0x105D9 };
     intptr_t two_one_two_len = sizeof(two_one_two) / sizeof(two_one_two[0]);
     EXPECT_EQ((two_one_two_len * 2), str6.Length());
     const String& two_one_two_str =
@@ -1312,7 +1355,8 @@
     }
   }
 
-  // Create a SMP 2-byte string from a UTF-8 string literal.
+  // Create a 2-byte string with supplementary characters from a UTF-8
+  // string literal.
   {
     const char* src =
         "\xF0\x9D\x91\xA0\xF0\x9D\x91\xA1"
@@ -1385,6 +1429,37 @@
 }
 
 
+TEST_CASE(StringEqualsUtf8) {
+  const char* onesrc = "abc";
+  const String& onestr = String::Handle(String::New(onesrc));
+  EXPECT(onestr.IsOneByteString());
+  EXPECT(!onestr.Equals(""));
+  EXPECT(!onestr.Equals("a"));
+  EXPECT(!onestr.Equals("ab"));
+  EXPECT(onestr.Equals("abc"));
+  EXPECT(!onestr.Equals("abcd"));
+
+  const char* twosrc = "\xD7\x90\xD7\x91\xD7\x92";
+  const String& twostr = String::Handle(String::New(twosrc));
+  EXPECT(twostr.IsTwoByteString());
+  EXPECT(!twostr.Equals(""));
+  EXPECT(!twostr.Equals("\xD7\x90"));
+  EXPECT(!twostr.Equals("\xD7\x90\xD7\x91"));
+  EXPECT(twostr.Equals("\xD7\x90\xD7\x91\xD7\x92"));
+  EXPECT(!twostr.Equals("\xD7\x90\xD7\x91\xD7\x92\xD7\x93"));
+
+  const char* foursrc = "\xF0\x90\x8E\xA0\xF0\x90\x8E\xA1\xF0\x90\x8E\xA2";
+  const String& fourstr = String::Handle(String::New(foursrc));
+  EXPECT(fourstr.IsTwoByteString());
+  EXPECT(!fourstr.Equals(""));
+  EXPECT(!fourstr.Equals("\xF0\x90\x8E\xA0"));
+  EXPECT(!fourstr.Equals("\xF0\x90\x8E\xA0\xF0\x90\x8E\xA1"));
+  EXPECT(fourstr.Equals("\xF0\x90\x8E\xA0\xF0\x90\x8E\xA1\xF0\x90\x8E\xA2"));
+  EXPECT(!fourstr.Equals("\xF0\x90\x8E\xA0\xF0\x90\x8E\xA1"
+                         "\xF0\x90\x8E\xA2\xF0\x90\x8E\xA3"));
+}
+
+
 TEST_CASE(ExternalOneByteString) {
   uint8_t characters[] = { 0xF6, 0xF1, 0xE9 };
   intptr_t len = ARRAY_SIZE(characters);
@@ -1501,10 +1576,36 @@
   EXPECT_EQ(one.raw(), ein_symbol.raw());
   EXPECT(one.raw() != eins.raw());
 
-  uint32_t char32[] = { 'E', 'l', 'f' };
-  String& elf = String::Handle(Symbols::New(char32, 3));
-  EXPECT(elf.IsSymbol());
-  EXPECT_EQ(elf.raw(), Symbols::New("Elf"));
+  uint16_t char16[] = { 'E', 'l', 'f' };
+  String& elf1 = String::Handle(Symbols::New(char16, 3));
+  int32_t char32[] = { 'E', 'l', 'f' };
+  String& elf2 = String::Handle(Symbols::New(char32, 3));
+  EXPECT(elf1.IsSymbol());
+  EXPECT(elf2.IsSymbol());
+  EXPECT_EQ(elf1.raw(), Symbols::New("Elf"));
+  EXPECT_EQ(elf2.raw(), Symbols::New("Elf"));
+}
+
+
+TEST_CASE(SymbolUnicode) {
+  uint16_t monkey_utf16[] = { 0xd83d, 0xdc35 };  // Unicode Monkey Face.
+  String& monkey = String::Handle(Symbols::New(monkey_utf16, 2));
+  EXPECT(monkey.IsSymbol());
+  const char monkey_utf8[] = {0xf0, 0x9f, 0x90, 0xb5, 0};
+  EXPECT_EQ(monkey.raw(), Symbols::New(monkey_utf8));
+
+  int32_t kMonkeyFace = 0x1f435;
+  String& monkey2 = String::Handle(Symbols::FromCharCode(kMonkeyFace));
+  EXPECT_EQ(monkey.raw(), monkey2.raw());
+
+  // Unicode cat face with tears of joy.
+  int32_t kCatFaceWithTearsOfJoy = 0x1f639;
+  String& cat = String::Handle(Symbols::FromCharCode(kCatFaceWithTearsOfJoy));
+
+  uint16_t cat_utf16[] = { 0xd83d, 0xde39 };
+  String& cat2 = String::Handle(Symbols::New(cat_utf16, 2));
+  EXPECT(cat2.IsSymbol());
+  EXPECT_EQ(cat2.raw(), cat.raw());
 }
 
 
@@ -1552,6 +1653,61 @@
 }
 
 
+TEST_CASE(StringCodePointIterator) {
+  const String& str0 = String::Handle(String::New(""));
+  String::CodePointIterator it0(str0);
+  EXPECT(!it0.Next());
+
+  const String& str1 = String::Handle(String::New(" \xc3\xa7 "));
+  String::CodePointIterator it1(str1);
+  EXPECT(it1.Next());
+  EXPECT_EQ(' ', it1.Current());
+  EXPECT(it1.Next());
+  EXPECT_EQ(0xE7, it1.Current());
+  EXPECT(it1.Next());
+  EXPECT_EQ(' ', it1.Current());
+  EXPECT(!it1.Next());
+
+  const String& str2 = String::Handle(String::New("\xD7\x92\xD7\x9C"
+                                                  "\xD7\xA2\xD7\x93"
+                                                  "\xD7\x91\xD7\xA8"
+                                                  "\xD7\x9B\xD7\x94"));
+  String::CodePointIterator it2(str2);
+  EXPECT(it2.Next());
+  EXPECT_EQ(0x5D2, it2.Current());
+  EXPECT(it2.Next());
+  EXPECT_EQ(0x5DC, it2.Current());
+  EXPECT(it2.Next());
+  EXPECT_EQ(0x5E2, it2.Current());
+  EXPECT(it2.Next());
+  EXPECT_EQ(0x5D3, it2.Current());
+  EXPECT(it2.Next());
+  EXPECT_EQ(0x5D1, it2.Current());
+  EXPECT(it2.Next());
+  EXPECT_EQ(0x5E8, it2.Current());
+  EXPECT(it2.Next());
+  EXPECT_EQ(0x5DB, it2.Current());
+  EXPECT(it2.Next());
+  EXPECT_EQ(0x5D4, it2.Current());
+  EXPECT(!it2.Next());
+
+  const String& str3 = String::Handle(String::New("\xF0\x9D\x91\xA0"
+                                                  "\xF0\x9D\x91\xA1"
+                                                  "\xF0\x9D\x91\xA2"
+                                                  "\xF0\x9D\x91\xA3"));
+  String::CodePointIterator it3(str3);
+  EXPECT(it3.Next());
+  EXPECT_EQ(0x1D460, it3.Current());
+  EXPECT(it3.Next());
+  EXPECT_EQ(0x1D461, it3.Current());
+  EXPECT(it3.Next());
+  EXPECT_EQ(0x1D462, it3.Current());
+  EXPECT(it3.Next());
+  EXPECT_EQ(0x1D463, it3.Current());
+  EXPECT(!it3.Next());
+}
+
+
 TEST_CASE(GrowableObjectArray) {
   const int kArrayLen = 5;
   Smi& value = Smi::Handle();
@@ -3035,6 +3191,64 @@
   EXPECT(weak2.value() == Object::null());
 }
 
+
+static RawFunction* GetFunction(const Class& cls, const char* name) {
+  const Function& result = Function::Handle(cls.LookupDynamicFunction(
+      String::Handle(String::New(name))));
+  ASSERT(!result.IsNull());
+  return result.raw();
+}
+
+
+TEST_CASE(FunctionSourceFingerprint) {
+  const char* kScriptChars =
+      "class A {\n"
+      "  void test1(int a) {\n"
+      "    return a > 1 ? a + 1 : a;\n"
+      "  }\n"
+      "  void test2(int a) {\n"
+      "    return a > 1 ? a + 1 : a;\n"
+      "  }\n"
+      "  void test3(a) {\n"
+      "    return a > 1 ? a + 1 : a;\n"
+      "  }\n"
+      "  void test4(b) {\n"
+      "    return b > 1 ? b + 1 : b;\n"
+      "  }\n"
+      "  void test5(b) {\n"
+      "    return b > 1 ? b - 1 : b;\n"
+      "  }\n"
+      "  void test6(b) {\n"
+      "    return b > 1 ? b - 2 : b;\n"
+      "  }\n"
+      "  void test7(b) {\n"
+      "    return b > 1 ?\n"
+      "        b - 2 : b;\n"
+      "  }\n"
+      "}";
+  TestCase::LoadTestScript(kScriptChars, NULL);
+  EXPECT(ClassFinalizer::FinalizePendingClasses());
+  const String& name = String::Handle(String::New(TestCase::url()));
+  const Library& lib = Library::Handle(Library::LookupLibrary(name));
+  EXPECT(!lib.IsNull());
+
+  const Class& class_a = Class::Handle(
+      lib.LookupClass(String::Handle(Symbols::New("A"))));
+  const Function& test1 = Function::Handle(GetFunction(class_a, "test1"));
+  const Function& test2 = Function::Handle(GetFunction(class_a, "test2"));
+  const Function& test3 = Function::Handle(GetFunction(class_a, "test3"));
+  const Function& test4 = Function::Handle(GetFunction(class_a, "test4"));
+  const Function& test5 = Function::Handle(GetFunction(class_a, "test5"));
+  const Function& test6 = Function::Handle(GetFunction(class_a, "test6"));
+  const Function& test7 = Function::Handle(GetFunction(class_a, "test7"));
+  EXPECT_EQ(test1.SourceFingerprint(), test2.SourceFingerprint());
+  EXPECT_NE(test1.SourceFingerprint(), test3.SourceFingerprint());
+  EXPECT_NE(test3.SourceFingerprint(), test4.SourceFingerprint());
+  EXPECT_NE(test4.SourceFingerprint(), test5.SourceFingerprint());
+  EXPECT_NE(test5.SourceFingerprint(), test6.SourceFingerprint());
+  EXPECT_EQ(test6.SourceFingerprint(), test7.SourceFingerprint());
+}
+
 #endif  // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64).
 
 }  // namespace dart
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 4c9027b..3273891 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -35,6 +35,8 @@
             "Warning on legacy getter syntax");
 DEFINE_FLAG(bool, strict_function_literals, false,
             "enforce new function literal rules");
+DEFINE_FLAG(bool, fail_legacy_abstract, false,
+            "error on explicit use of abstract on class members");
 
 static void CheckedModeHandler(bool value) {
   FLAG_enable_asserts = value;
@@ -2543,7 +2545,8 @@
     const intptr_t type_pos = TokenPos();
     const AbstractType& type = AbstractType::Handle(
         ParseType(ClassFinalizer::kTryResolve));
-    if (type.IsTypeParameter() || type.IsDynamicType()) {
+    if (!type.IsMalformed() &&
+        (type.IsTypeParameter() || type.IsDynamicType())) {
       // Replace the type with a malformed type and compile a throw when called.
       redirection_type = ClassFinalizer::NewFinalizedMalformedType(
           Error::Handle(),  // No previous error.
@@ -2895,6 +2898,9 @@
   current_member_ = &member;
   if ((CurrentToken() == Token::kABSTRACT) &&
       (LookaheadToken(1) != Token::kLPAREN)) {
+    if (FLAG_fail_legacy_abstract) {
+      ErrorMsg("illegal use of abstract");
+    }
     ConsumeToken();
     member.has_abstract = true;
   }
@@ -3736,10 +3742,7 @@
       // Map a malformed type argument to dynamic, so that malformed types with
       // a resolved type class are handled properly in production mode.
       if (type.IsMalformed()) {
-        ASSERT(finalization != ClassFinalizer::kCanonicalizeWellFormed);
-        if (finalization == ClassFinalizer::kCanonicalizeForCreation) {
-          ErrorMsg(*malformed_error);
-        }
+        ASSERT(finalization < ClassFinalizer::kCanonicalizeWellFormed);
         type = Type::DynamicType();
       }
       types.Add(type);
@@ -5035,9 +5038,13 @@
   // class in the current library (but not in its imports) and only create a new
   // canonical signature class if it does not exist yet.
   const String& signature = String::Handle(function.Signature());
-  Class& signature_class = Class::ZoneHandle(
-      library_.LookupLocalClass(signature));
-
+  Class& signature_class = Class::ZoneHandle();
+  if (!is_new_closure) {
+    signature_class = function.signature_class();
+  }
+  if (signature_class.IsNull()) {
+    signature_class = library_.LookupLocalClass(signature);
+  }
   if (signature_class.IsNull()) {
     // If we don't have a signature class yet, this must be a closure we
     // have not parsed before.
@@ -6179,6 +6186,8 @@
     catch_seen = true;
     if (IsLiteral("on")) {
       ConsumeToken();
+      // TODO(regis): The spec may change in the way a malformed 'on' type is
+      // treated. For now, we require the type to be wellformed.
       exception_param.type = &AbstractType::ZoneHandle(
           ParseType(ClassFinalizer::kCanonicalizeWellFormed));
     } else {
@@ -6736,9 +6745,7 @@
 
 
 bool Parser::IsLiteral(const char* literal) {
-  const uint8_t* characters = reinterpret_cast<const uint8_t*>(literal);
-  intptr_t len = strlen(literal);
-  return IsIdentifier() && CurrentLiteral()->Equals(characters, len);
+  return IsIdentifier() && CurrentLiteral()->Equals(literal);
 }
 
 
@@ -6837,8 +6844,8 @@
           op_kind = Token::kISNOT;
         }
         const intptr_t type_pos = TokenPos();
-        const AbstractType& type =
-            AbstractType::ZoneHandle(ParseType(ClassFinalizer::kCanonicalize));
+        const AbstractType& type = AbstractType::ZoneHandle(
+            ParseType(ClassFinalizer::kCanonicalizeExpression));
         if (!type.IsInstantiated() &&
             (current_block_->scope->function_level() > 0)) {
           // Make sure that the instantiator is captured.
@@ -7804,10 +7811,14 @@
       }
       // Resolve classname in the scope of the current library.
       Error& error = Error::Handle();
-      resolved_type_class =
-          ResolveClassInCurrentLibraryScope(unresolved_class.token_pos(),
-                                            unresolved_class_name,
-                                            &error);
+      // If we finalize a type expression, as opposed to a type annotation, we
+      // tell the resolver (by passing NULL) to immediately report an ambiguous
+      // type as a compile time error.
+      resolved_type_class = ResolveClassInCurrentLibraryScope(
+          unresolved_class.token_pos(),
+          unresolved_class_name,
+          finalization >= ClassFinalizer::kCanonicalizeExpression ?
+              NULL : &error);
       if (!error.IsNull()) {
         *type = ClassFinalizer::NewFinalizedMalformedType(
             error,
@@ -7823,11 +7834,15 @@
           LibraryPrefix::Handle(unresolved_class.library_prefix());
       // Resolve class name in the scope of the library prefix.
       Error& error = Error::Handle();
-      resolved_type_class =
-          ResolveClassInPrefixScope(unresolved_class.token_pos(),
-                                    lib_prefix,
-                                    unresolved_class_name,
-                                    &error);
+      // If we finalize a type expression, as opposed to a type annotation, we
+      // tell the resolver (by passing NULL) to immediately report an ambiguous
+      // type as a compile time error.
+      resolved_type_class = ResolveClassInPrefixScope(
+          unresolved_class.token_pos(),
+          lib_prefix,
+          unresolved_class_name,
+          finalization >= ClassFinalizer::kCanonicalizeExpression ?
+              NULL : &error);
       if (!error.IsNull()) {
         *type = ClassFinalizer::NewFinalizedMalformedType(
             error,
@@ -8695,7 +8710,7 @@
   }
   ASSERT(type_arguments.IsNull() || (type_arguments.Length() == 1));
   const Class& array_class = Class::Handle(
-      Type::Handle(Type::ArrayType()).type_class());
+      Isolate::Current()->object_store()->array_class());
   Type& type = Type::ZoneHandle(
       Type::New(array_class, type_arguments, type_pos));
   type ^= ClassFinalizer::FinalizeType(
@@ -8763,9 +8778,7 @@
     return new LiteralNode(literal_pos, const_list);
   } else {
     // Factory call at runtime.
-    // TODO(regis): Once _ListImpl is removed, use Symbols::List() instead of
-    // Symbols::ListImplementation() on the following line.
-    String& factory_class_name = String::Handle(Symbols::ListImplementation());
+    String& factory_class_name = String::Handle(Symbols::List());
     const Class& factory_class =
         Class::Handle(LookupCoreClass(factory_class_name));
     ASSERT(!factory_class.IsNull());
@@ -9100,11 +9113,10 @@
   }
   intptr_t type_pos = TokenPos();
   AbstractType& type = AbstractType::Handle(
-      ParseType(ClassFinalizer::kCanonicalizeForCreation));
+      ParseType(ClassFinalizer::kCanonicalizeExpression));
   // In case the type is malformed, throw a dynamic type error after finishing
   // parsing the instance creation expression.
-  if (type.IsTypeParameter() || type.IsDynamicType()) {
-    ASSERT(!type.IsMalformed());
+  if (!type.IsMalformed() && (type.IsTypeParameter() || type.IsDynamicType())) {
     // Replace the type with a malformed type.
     type = ClassFinalizer::NewFinalizedMalformedType(
         Error::Handle(),  // No previous error.
diff --git a/runtime/vm/random.cc b/runtime/vm/random.cc
deleted file mode 100644
index ef2455c..0000000
--- a/runtime/vm/random.cc
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 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.
-
-#include "vm/random.h"
-
-#include "platform/assert.h"
-#include "vm/isolate.h"
-
-namespace dart {
-
-// LSFR step with a period of 31-bits.
-// Based on http://en.wikipedia.org/wiki/Linear_feedback_shift_register
-static int32_t LinearFeedbackShiftRegisterStep(int32_t seed) {
-  return (seed >> 1) ^ ((-(seed & 1)) & (1 << 30 | 1 << 27));
-}
-
-
-int32_t Random::RandomInt32() {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate != NULL);
-  int32_t result = isolate->random_seed();
-  int32_t new_random_seed = LinearFeedbackShiftRegisterStep(result);
-  isolate->set_random_seed(new_random_seed);
-  return result;
-}
-
-}  // namespace dart
diff --git a/runtime/vm/random.h b/runtime/vm/random.h
deleted file mode 100644
index ca1d039..0000000
--- a/runtime/vm/random.h
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#ifndef VM_RANDOM_H_
-#define VM_RANDOM_H_
-
-#include "vm/allocation.h"
-
-namespace dart {
-
-class Random : public AllStatic {
- public:
-  static const int32_t kDefaultRandomSeed = 294967;
-
-  // Generate a random number in the range [1, 2^31[ (will never return 0 or a
-  // negative number). Not cryptographically safe.
-  static int32_t RandomInt32();
-};
-
-}  // namespace dart
-
-#endif  // VM_RANDOM_H_
diff --git a/runtime/vm/random_test.cc b/runtime/vm/random_test.cc
deleted file mode 100644
index 2b7f726..0000000
--- a/runtime/vm/random_test.cc
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 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.
-
-#include "platform/assert.h"
-#include "vm/globals.h"
-#include "vm/random.h"
-#include "vm/unit_test.h"
-
-namespace dart {
-
-TEST_CASE(Random) {
-  EXPECT(Random::RandomInt32() != 0);
-}
-
-}  // namespace dart
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index a29c3ae..a99dde7 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -350,10 +350,9 @@
   static bool IsByteArrayClassId(intptr_t index);
   static bool IsExternalByteArrayClassId(intptr_t index);
 
- protected:
+ private:
   uword tags_;  // Various object tags (bits).
 
- private:
   class FreeBit : public BitField<bool, kFreeBit, 1> {};
 
   class MarkBit : public BitField<bool, kMarkBit, 1> {};
@@ -745,9 +744,9 @@
   RawPcDescriptors* pc_descriptors_;
   RawArray* deopt_info_array_;
   RawArray* object_table_;
+  RawArray* static_calls_target_table_;  // (code-offset, function, code).
   RawArray* stackmaps_;
   RawLocalVarDescriptors* var_descriptors_;
-  RawGrowableObjectArray* resolved_static_calls_;
   RawArray* comments_;
   RawObject** to() {
     return reinterpret_cast<RawObject**>(&ptr()->comments_);
@@ -1364,6 +1363,10 @@
     return peer_;
   }
 
+  static intptr_t data_offset() {
+    return OFFSET_OF(ExternalByteArrayData<T>, data_);
+  }
+
  private:
   T* data_;
   void* peer_;
diff --git a/runtime/vm/scanner.cc b/runtime/vm/scanner.cc
index 229dfdf..26920c6 100644
--- a/runtime/vm/scanner.cc
+++ b/runtime/vm/scanner.cc
@@ -11,6 +11,7 @@
 #include "vm/symbols.h"
 #include "vm/thread.h"
 #include "vm/token.h"
+#include "vm/unicode.h"
 
 namespace dart {
 
@@ -174,6 +175,36 @@
 }
 
 
+// This method is used when parsing integers and doubles in Dart code. We
+// are reusing the Scanner's handling of number literals in that situation.
+bool Scanner::IsValidLiteral(const Scanner::GrowableTokenStream& tokens,
+                             Token::Kind literal_kind,
+                             bool* is_positive,
+                             String** value) {
+  if ((tokens.length() == 2) &&
+      (tokens[0].kind == literal_kind) &&
+      (tokens[1].kind == Token::kEOS)) {
+    *is_positive = true;
+    *value = tokens[0].literal;
+    return true;
+  }
+  if ((tokens.length() == 3) &&
+      ((tokens[0].kind == Token::kTIGHTADD) ||
+       (tokens[0].kind == Token::kSUB)) &&
+      (tokens[1].kind == literal_kind) &&
+      (tokens[2].kind == Token::kEOS)) {
+    // Check there is no space between "+/-" and number.
+    if ((tokens[0].offset + 1) != tokens[1].offset) {
+      return false;
+    }
+    *is_positive = tokens[0].kind == Token::kTIGHTADD;
+    *value = tokens[1].literal;
+    return true;
+  }
+  return false;
+}
+
+
 void Scanner::ReadChar() {
   if (lookahead_pos_ < source_length_) {
     if (c0_ == '\n') {
@@ -438,7 +469,7 @@
 }
 
 
-bool Scanner::ScanHexDigits(int digits, uint32_t* value) {
+bool Scanner::ScanHexDigits(int digits, int32_t* value) {
   *value = 0;
   for (int i = 0; i < digits; ++i) {
     ReadChar();
@@ -453,7 +484,7 @@
 }
 
 
-bool Scanner::ScanHexDigits(int min_digits, int max_digits, uint32_t* value) {
+bool Scanner::ScanHexDigits(int min_digits, int max_digits, int32_t* value) {
   *value = 0;
   ReadChar();
   for (int i = 0; i < max_digits; ++i) {
@@ -472,7 +503,7 @@
 }
 
 
-void Scanner::ScanEscapedCodePoint(uint32_t* code_point) {
+void Scanner::ScanEscapedCodePoint(int32_t* code_point) {
   ASSERT(c0_ == 'u' || c0_ == 'x');
   bool is_valid;
   if (c0_ == 'x') {
@@ -498,7 +529,7 @@
 
 
 void Scanner::ScanLiteralStringChars(bool is_raw) {
-  GrowableArray<uint32_t> string_chars(64);
+  GrowableArray<int32_t> string_chars(64);
 
   ASSERT(IsScanningString());
   // We are at the first character of a string literal piece. A string literal
@@ -511,7 +542,7 @@
     }
     if (c0_ == '\\' && !is_raw) {
       // Parse escape sequence.
-      uint32_t escape_char = '\0';
+      int32_t escape_char = '\0';
       ReadChar();
       switch (c0_) {
         case 'n':
@@ -852,8 +883,11 @@
           ScanNumber(false);
         } else {
           char msg[128];
+          char utf8_char[5];
+          int len = Utf8::Encode(c0_, utf8_char);
+          utf8_char[len] = '\0';
           OS::SNPrint(msg, sizeof(msg),
-                      "unexpected character: %c  (%02x)\n", c0_, c0_);
+                      "unexpected character: '%s' (U+%04X)\n", utf8_char, c0_);
           ErrorMsg(msg);
           ReadChar();
         }
diff --git a/runtime/vm/scanner.h b/runtime/vm/scanner.h
index 5700475..5f1f75e 100644
--- a/runtime/vm/scanner.h
+++ b/runtime/vm/scanner.h
@@ -96,6 +96,13 @@
   // Return true if str is an identifier.
   static bool IsIdent(const String& str);
 
+  // Does the token stream contain a valid literal. This is used to implement
+  // the Dart methods int.parse and double.parse.
+  static bool IsValidLiteral(const Scanner::GrowableTokenStream& tokens,
+                             Token::Kind literal_kind,
+                             bool* is_positive,
+                             String** value);
+
  private:
   struct ScanContext {
     ScanContext* next;
@@ -171,13 +178,13 @@
   void ScanLiteralStringChars(bool is_raw);
 
   // Reads a fixed number of hexadecimal digits.
-  bool ScanHexDigits(int digits, uint32_t* value);
+  bool ScanHexDigits(int digits, int32_t* value);
 
   // Reads a variable number of hexadecimal digits.
-  bool ScanHexDigits(int min_digits, int max_digits, uint32_t* value);
+  bool ScanHexDigits(int min_digits, int max_digits, int32_t* value);
 
   // Reads an escaped code point from within a string literal.
-  void ScanEscapedCodePoint(uint32_t* escaped_char);
+  void ScanEscapedCodePoint(int32_t* escaped_char);
 
   // Reads identifier.
   RawString* ConsumeIdentChars(bool allow_dollar);
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index c11e321..044d34b 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -818,7 +818,7 @@
   if (class_id >= kNumPredefinedCids) {
     if (Class::IsSignatureClass(cls)) {
       // We do not allow closure objects in an isolate message.
-      set_exception_type(Exceptions::kArgumentError);
+      set_exception_type(Exceptions::kArgument);
       // TODO(6726): Allocate these constant strings once in the VM isolate.
       set_exception_msg("Illegal argument in isolate message"
                         " : (object is a closure)");
@@ -1073,7 +1073,7 @@
   if (class_id >= kNumPredefinedCids) {
     if (Class::IsSignatureClass(cls)) {
       // We do not allow closure objects in an isolate message.
-      set_exception_type(Exceptions::kArgumentError);
+      set_exception_type(Exceptions::kArgument);
       // TODO(6726): Allocate these constant strings once in the VM isolate.
       set_exception_msg("Illegal argument in isolate message"
                         " : (object is a closure)");
@@ -1081,7 +1081,7 @@
     }
     if (cls->ptr()->num_native_fields_ != 0) {
       // We do not allow objects with native fields in an isolate message.
-      set_exception_type(Exceptions::kArgumentError);
+      set_exception_type(Exceptions::kArgument);
       // TODO(6726): Allocate these constant strings once in the VM isolate.
       set_exception_msg("Illegal argument in isolate message"
                         " : (object extends NativeWrapper)");
diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
index 083b28f..07326ae 100644
--- a/runtime/vm/snapshot_test.cc
+++ b/runtime/vm/snapshot_test.cc
@@ -528,13 +528,13 @@
 TEST_CASE(SerializeString) {
   TestString("This string shall be serialized");
   TestString("æøå");  // This file is UTF-8 encoded.
-  char data[] = {0x01,
-                 0x7f,
-                 0xc2, 0x80,         // 0x80
-                 0xdf, 0xbf,         // 0x7ff
-                 0xe0, 0xa0, 0x80,   // 0x800
-                 0xef, 0xbf, 0xbf,   // 0xffff
-                 0x00};              // String termination.
+  const char* data = "\x01"
+                     "\x7F"
+                     "\xC2\x80"       // U+0080
+                     "\xDF\xBF"       // U+07FF
+                     "\xE0\xA0\x80"   // U+0800
+                     "\xEF\xBF\xBF";  // U+FFFF
+
   TestString(data);
   // TODO(sgjesse): Add tests with non-BMP characters.
 }
@@ -1030,7 +1030,7 @@
 
 UNIT_TEST_CASE(ScriptSnapshot) {
   const char* kLibScriptChars =
-      "#library('dart:import-lib');"
+      "library dart_import_lib;"
       "class LibFields  {"
       "  LibFields(int i, int j) : fld1 = i, fld2 = j {}"
       "  int fld1;"
@@ -1095,7 +1095,7 @@
     Dart_EnterScope();  // Start a Dart API scope for invoking API functions.
 
     // Load the library.
-    Dart_Handle import_lib = Dart_LoadLibrary(NewString("dart:import-lib"),
+    Dart_Handle import_lib = Dart_LoadLibrary(NewString("dart_import_lib"),
                                               NewString(kLibScriptChars));
     EXPECT_VALID(import_lib);
 
@@ -1701,7 +1701,7 @@
 UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
   const int kArrayLength = 10;
   static const char* kScriptChars =
-      "#import('dart:scalarlist');\n"
+      "import 'dart:scalarlist';\n"
       "final int kArrayLength = 10;\n"
       "getStringList() {\n"
       "  var s = 'Hello, world!';\n"
@@ -1872,7 +1872,7 @@
 UNIT_TEST_CASE(DartGeneratedArrayLiteralMessagesWithBackref) {
   const int kArrayLength = 10;
   static const char* kScriptChars =
-      "#import('dart:scalarlist');\n"
+      "import 'dart:scalarlist';\n"
       "final int kArrayLength = 10;\n"
       "getStringList() {\n"
       "  var s = 'Hello, world!';\n"
@@ -1911,7 +1911,7 @@
       "getMixedList() {\n"
       "  var list = [];\n"
       "  for (var i = 0; i < kArrayLength; i++) {\n"
-      "    list.add(((i % 2) == 0) ? 'A' : 2.72);\n"
+      "    list.add(((i % 2) == 0) ? '.' : 2.72);\n"
       "  }\n"
       "  return list;\n"
       "}\n"
@@ -2017,7 +2017,7 @@
         if ((i % 2) == 0) {
           EXPECT_EQ(root->value.as_array.values[0], element);
           EXPECT_EQ(Dart_CObject::kString, element->type);
-          EXPECT_STREQ("A", element->value.as_string);
+          EXPECT_STREQ(".", element->value.as_string);
         } else {
           EXPECT_EQ(root->value.as_array.values[1], element);
           EXPECT_EQ(Dart_CObject::kDouble, element->type);
@@ -2048,7 +2048,7 @@
   // Create a native port for posting from C to Dart
   TestIsolateScope __test_isolate__;
   const char* kScriptChars =
-      "#import('dart:isolate');\n"
+      "import 'dart:isolate';\n"
       "main() {\n"
       "  var messageCount = 0;\n"
       "  var exception = '';\n"
@@ -2107,7 +2107,7 @@
   EXPECT(Dart_PostCObject(send_port_id, &object));
 
   // Try to post an invalid UTF-8 sequence (lead surrogate).
-  char data[] = {0xed, 0xa0, 0x80, 0};  // 0xd800
+  const char* data = "\xED\xA0\x80";  // U+D800
   object.type = Dart_CObject::kString;
   object.value.as_string = const_cast<char*>(data);
   EXPECT(!Dart_PostCObject(send_port_id, &object));
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc
index 79badc1..f354cab 100644
--- a/runtime/vm/stub_code_ia32.cc
+++ b/runtime/vm/stub_code_ia32.cc
@@ -183,48 +183,19 @@
 
 
 // Input parameters:
-//   ECX: function object.
 //   EDX: arguments descriptor array (num_args is first Smi element).
 void StubCode::GenerateCallStaticFunctionStub(Assembler* assembler) {
   const Immediate raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
-
-  __ movl(EAX, FieldAddress(ECX, Function::code_offset()));
-  __ cmpl(EAX, raw_null);
-  Label function_compiled;
-  __ j(NOT_EQUAL, &function_compiled, Assembler::kNearJump);
-
-  // Create a stub frame as we are pushing some objects on the stack before
-  // calling into the runtime.
   AssemblerMacros::EnterStubFrame(assembler);
-
   __ pushl(EDX);  // Preserve arguments descriptor array.
-  __ pushl(ECX);
-  __ CallRuntime(kCompileFunctionRuntimeEntry);
-  __ popl(ECX);  // Restore read-only function object argument in ECX.
-  __ popl(EDX);  // Restore arguments descriptor array.
-  // Restore EAX.
-  __ movl(EAX, FieldAddress(ECX, Function::code_offset()));
-
-  // Remove the stub frame as we are about to jump to the dart function.
-  __ LeaveFrame();
-
-  __ Bind(&function_compiled);
-  // Patch caller.
-
-  // Create a stub frame as we are pushing some objects on the stack before
-  // calling into the runtime.
-  AssemblerMacros::EnterStubFrame(assembler);
-
-  __ pushl(EDX);  // Preserve arguments descriptor array.
-  __ pushl(ECX);  // Preserve function object.
+  __ pushl(raw_null);  // Setup space on stack for return value.
   __ CallRuntime(kPatchStaticCallRuntimeEntry);
-  __ popl(ECX);  // Restore function object argument in ECX.
+  __ popl(EAX);  // Get Code object result.
   __ popl(EDX);  // Restore arguments descriptor array.
   // Remove the stub frame as we are about to jump to the dart function.
   __ LeaveFrame();
 
-  __ movl(EAX, FieldAddress(ECX, Function::code_offset()));
   __ movl(ECX, FieldAddress(EAX, Code::instructions_offset()));
   __ addl(ECX, Immediate(Instructions::HeaderSize() - kHeapObjectTag));
   __ jmp(ECX);
@@ -233,20 +204,18 @@
 
 // Called from a static call only when an invalid code has been entered
 // (invalid because its function was optimized or deoptimized).
-// ECX: function object.
 // EDX: arguments descriptor array (num_args is first Smi element).
 void StubCode::GenerateFixCallersTargetStub(Assembler* assembler) {
+  const Immediate raw_null =
+      Immediate(reinterpret_cast<intptr_t>(Object::null()));
   // Create a stub frame as we are pushing some objects on the stack before
   // calling into the runtime.
   AssemblerMacros::EnterStubFrame(assembler);
   __ pushl(EDX);  // Preserve arguments descriptor array.
-  __ pushl(ECX);  // Preserve target function.
-  __ pushl(ECX);  // Target function.
+  __ pushl(raw_null);  // Setup space on stack for return value.
   __ CallRuntime(kFixCallersTargetRuntimeEntry);
-  __ popl(EAX);  // discard argument.
-  __ popl(EAX);  // Restore function.
+  __ popl(EAX);  // Get Code object.
   __ popl(EDX);  // Restore arguments descriptor array.
-  __ movl(EAX, FieldAddress(EAX, Function::code_offset()));
   __ movl(EAX, FieldAddress(EAX, Code::instructions_offset()));
   __ addl(EAX, Immediate(Instructions::HeaderSize() - kHeapObjectTag));
   __ LeaveFrame();
@@ -1816,23 +1785,23 @@
 }
 
 
-//  ECX: Function object.
 //  EDX: Arguments array.
 //  TOS(0): return address (Dart code).
 void StubCode::GenerateBreakpointStaticStub(Assembler* assembler) {
   // Create a stub frame as we are pushing some objects on the stack before
   // calling into the runtime.
   AssemblerMacros::EnterStubFrame(assembler);
-  __ pushl(EDX);
-  __ pushl(ECX);
+  __ pushl(EDX);  // Preserve arguments descriptor.
+  const Immediate raw_null =
+      Immediate(reinterpret_cast<intptr_t>(Object::null()));
+  __ pushl(raw_null);  // Room for result.
   __ CallRuntime(kBreakpointStaticHandlerRuntimeEntry);
-  __ popl(ECX);
-  __ popl(EDX);
+  __ popl(EAX);  // Code object.
+  __ popl(EDX);  // Restore arguments descriptor.
   __ LeaveFrame();
 
   // Now call the static function. The breakpoint handler function
   // ensures that the call target is compiled.
-  __ movl(EAX, FieldAddress(ECX, Function::code_offset()));
   __ movl(ECX, FieldAddress(EAX, Code::instructions_offset()));
   __ addl(ECX, Immediate(Instructions::HeaderSize() - kHeapObjectTag));
   __ jmp(ECX);
diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc
index 5048aa5..65ea307 100644
--- a/runtime/vm/stub_code_x64.cc
+++ b/runtime/vm/stub_code_x64.cc
@@ -182,44 +182,18 @@
 
 
 // Input parameters:
-//   RBX: function object.
 //   R10: arguments descriptor array (num_args is first Smi element).
 void StubCode::GenerateCallStaticFunctionStub(Assembler* assembler) {
   const Immediate raw_null =
       Immediate(reinterpret_cast<intptr_t>(Object::null()));
-
-  __ movq(RAX, FieldAddress(RBX, Function::code_offset()));
-  __ cmpq(RAX, raw_null);
-  Label function_compiled;
-  __ j(NOT_EQUAL, &function_compiled, Assembler::kNearJump);
-
-  // Create a stub frame as we are pushing some objects on the stack before
-  // calling into the runtime.
   AssemblerMacros::EnterStubFrame(assembler);
-
   __ pushq(R10);  // Preserve arguments descriptor array.
-  __ pushq(RBX);
-  __ CallRuntime(kCompileFunctionRuntimeEntry);
-  __ popq(RBX);  // Restore read-only function object argument in RBX.
-  __ popq(R10);  // Restore arguments descriptor array.
-  // Restore RAX.
-  __ movq(RAX, FieldAddress(RBX, Function::code_offset()));
-
-  // Remove the stub frame as we are about to jump to the dart function.
-  __ LeaveFrame();
-
-  __ Bind(&function_compiled);
-  // Patch caller.
-  AssemblerMacros::EnterStubFrame(assembler);
-
-  __ pushq(R10);  // Preserve arguments descriptor array.
-  __ pushq(RBX);  // Preserve function object.
+  __ pushq(raw_null);  // Setup space on stack for return value.
   __ CallRuntime(kPatchStaticCallRuntimeEntry);
-  __ popq(RBX);  // Restore function object argument in RBX.
+  __ popq(RAX);  // Get Code object result.
   __ popq(R10);  // Restore arguments descriptor array.
   // Remove the stub frame as we are about to jump to the dart function.
   __ LeaveFrame();
-  __ movq(RAX, FieldAddress(RBX, Function::code_offset()));
 
   __ movq(RBX, FieldAddress(RAX, Code::instructions_offset()));
   __ addq(RBX, Immediate(Instructions::HeaderSize() - kHeapObjectTag));
@@ -229,18 +203,16 @@
 
 // Called from a static call only when an invalid code has been entered
 // (invalid because its function was optimized or deoptimized).
-// RBX: function object.
 // R10: arguments descriptor array (num_args is first Smi element).
 void StubCode::GenerateFixCallersTargetStub(Assembler* assembler) {
+  const Immediate raw_null =
+      Immediate(reinterpret_cast<intptr_t>(Object::null()));
   AssemblerMacros::EnterStubFrame(assembler);
   __ pushq(R10);  // Preserve arguments descriptor array.
-  __ pushq(RBX);  // Preserve target function.
-  __ pushq(RBX);  // Target function.
+  __ pushq(raw_null);  // Setup space on stack for return value.
   __ CallRuntime(kFixCallersTargetRuntimeEntry);
-  __ popq(RAX);  // discard argument.
-  __ popq(RAX);  // Restore function.
+  __ popq(RAX);  // Get Code object.
   __ popq(R10);  // Restore arguments descriptor array.
-  __ movq(RAX, FieldAddress(RAX, Function::code_offset()));
   __ movq(RAX, FieldAddress(RAX, Code::instructions_offset()));
   __ addq(RAX, Immediate(Instructions::HeaderSize() - kHeapObjectTag));
   __ LeaveFrame();
@@ -1787,21 +1759,21 @@
   GenerateNArgsCheckInlineCacheStub(assembler, 1);
 }
 
-//  RBX: Function object.
 //  R10: Arguments array.
 //  TOS(0): return address (Dart code).
 void StubCode::GenerateBreakpointStaticStub(Assembler* assembler) {
+  const Immediate raw_null =
+      Immediate(reinterpret_cast<intptr_t>(Object::null()));
   AssemblerMacros::EnterStubFrame(assembler);
-  __ pushq(R10);
-  __ pushq(RBX);
+  __ pushq(R10);  // Preserve arguments descriptor.
+  __ pushq(raw_null);  // Room for result.
   __ CallRuntime(kBreakpointStaticHandlerRuntimeEntry);
-  __ popq(RBX);
-  __ popq(R10);
+  __ popq(RAX);  // Code object.
+  __ popq(R10);  // Restore arguments descriptor.
   __ LeaveFrame();
 
   // Now call the static function. The breakpoint handler function
   // ensures that the call target is compiled.
-  __ movq(RAX, FieldAddress(RBX, Function::code_offset()));
   __ movq(RBX, FieldAddress(RAX, Code::instructions_offset()));
   __ addq(RBX, Immediate(Instructions::HeaderSize() - kHeapObjectTag));
   __ jmp(RBX);
diff --git a/runtime/vm/symbols.cc b/runtime/vm/symbols.cc
index 33c0ac6..c7da37c 100644
--- a/runtime/vm/symbols.cc
+++ b/runtime/vm/symbols.cc
@@ -26,8 +26,8 @@
 };
 
 
-const char* Symbols::Name(intptr_t symbol) {
-  ASSERT((symbol > kIllegal) && (symbol < kMaxId));
+const char* Symbols::Name(SymbolId symbol) {
+  ASSERT((symbol > kIllegal) && (symbol < kMaxPredefinedId));
   return names[symbol];
 }
 
@@ -40,12 +40,12 @@
   SetupSymbolTable(isolate);
 
   // Create all predefined symbols.
-  ASSERT((sizeof(names) / sizeof(const char*)) == Symbols::kMaxId);
+  ASSERT((sizeof(names) / sizeof(const char*)) == Symbols::kMaxPredefinedId);
   ObjectStore* object_store = isolate->object_store();
   Array& symbol_table = Array::Handle();
   dart::String& str = String::Handle();
 
-  for (intptr_t i = 1; i < Symbols::kMaxId; i++) {
+  for (intptr_t i = 1; i < Symbols::kMaxPredefinedId; i++) {
     // The symbol_table needs to be reloaded as it might have grown in the
     // previous iteration.
     symbol_table = object_store->symbol_table();
@@ -54,6 +54,11 @@
     predefined_[i] = str.raw();
   }
   Object::RegisterSingletonClassNames();
+
+  for (int32_t c = 0; c <= kMaxOneCharCodeSymbol; c++) {
+    ASSERT(kMaxPredefinedId + c < kMaxId);
+    predefined_[kMaxPredefinedId + c] = New(&c, 1);
+  }
 }
 
 
@@ -107,7 +112,7 @@
     Utf8::DecodeToLatin1(utf8_array, str_len, characters, len);
     return New(characters, len);
   }
-  ASSERT((type == Utf8::kBMP) || (type == Utf8::kSMP));
+  ASSERT((type == Utf8::kBMP) || (type == Utf8::kSupplementary));
   uint16_t* characters = zone->Alloc<uint16_t>(len);
   Utf8::DecodeToUTF16(utf8_array, str_len, characters, len);
   return New(characters, len);
@@ -117,7 +122,6 @@
 template<typename T>
 RawString* Symbols::New(const T* characters, intptr_t len) {
   Isolate* isolate = Isolate::Current();
-  ASSERT(isolate != Dart::vm_isolate());
   String& symbol = String::Handle(isolate, String::null());
   Array& symbol_table = Array::Handle(isolate, Array::null());
 
@@ -148,7 +152,7 @@
 
 template RawString* Symbols::New(const uint8_t* characters, intptr_t len);
 template RawString* Symbols::New(const uint16_t* characters, intptr_t len);
-template RawString* Symbols::New(const uint32_t* characters, intptr_t len);
+template RawString* Symbols::New(const int32_t* characters, intptr_t len);
 
 
 RawString* Symbols::New(const String& str) {
@@ -200,6 +204,14 @@
 }
 
 
+RawString* Symbols::FromCharCode(int32_t char_code) {
+  if (char_code > kMaxOneCharCodeSymbol) {
+    return New(&char_code, 1);
+  }
+  return predefined_[kNullCharId + char_code];
+}
+
+
 void Symbols::GrowSymbolTable(const Array& symbol_table) {
   // TODO(iposva): Avoid exponential growth.
   intptr_t table_size = symbol_table.Length() - 1;
@@ -277,7 +289,7 @@
                                      intptr_t len,
                                      intptr_t hash);
 template intptr_t Symbols::FindIndex(const Array& symbol_table,
-                                     const uint32_t* characters,
+                                     const int32_t* characters,
                                      intptr_t len,
                                      intptr_t hash);
 
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 16c1fd4..0e6cc21 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -42,8 +42,8 @@
     "AbstractClassInstantiationErrorImplementation")                           \
   V(NoSuchMethodError, "NoSuchMethodErrorImplementation")                      \
   V(ThrowNew, "_throwNew")                                                     \
+  V(List, "List")                                                              \
   V(ListLiteralFactory, "List._fromLiteral")                                   \
-  V(ListImplementation, "_ListImpl")                                           \
   V(ListFactory, "List.")                                                      \
   V(MapImplementation, "_HashMapImpl")                                         \
   V(MapLiteralFactory, "Map._fromLiteral")                                     \
@@ -146,16 +146,19 @@
 // without having to maintain copies in each isolate.
 class Symbols : public AllStatic {
  public:
+  enum { kMaxOneCharCodeSymbol = 0xFF };
+
   // List of strings that are pre created in the vm isolate.
-  enum {
+  enum SymbolId {
     kIllegal = 0,
 
 #define DEFINE_SYMBOL_INDEX(symbol, literal)                                   \
     k##symbol,
 PREDEFINED_SYMBOLS_LIST(DEFINE_SYMBOL_INDEX)
 #undef DEFINE_SYMBOL_INDEX
-
-    kMaxId,
+    kMaxPredefinedId,
+    kNullCharId = kMaxPredefinedId,
+    kMaxId = kNullCharId + kMaxOneCharCodeSymbol + 1,
   };
 
   // Access methods for symbols stored in the vm isolate.
@@ -183,11 +186,17 @@
                         intptr_t length);
 
   // Returns char* of predefined symbol.
-  static const char* Name(intptr_t symbol);
+  static const char* Name(SymbolId symbol);
+
+  static RawString* FromCharCode(int32_t char_code);
+
+  static RawString** PredefinedAddress() {
+    return reinterpret_cast<RawString**>(&predefined_);
+  }
 
  private:
   enum {
-    kInitialVMIsolateSymtabSize = ((Symbols::kMaxId + 15) & -16),
+    kInitialVMIsolateSymtabSize = ((kMaxId + 15) & -16),
     kInitialSymtabSize = 256
   };
 
@@ -218,11 +227,11 @@
   static RawObject* GetVMSymbol(intptr_t object_id);
   static bool IsVMSymbolId(intptr_t object_id) {
     return (object_id >= kMaxPredefinedObjectIds &&
-            object_id < (kMaxPredefinedObjectIds + Symbols::kMaxId));
+            object_id < (kMaxPredefinedObjectIds + kMaxId));
   }
 
   // List of symbols that are stored in the vm isolate for easy access.
-  static RawString* predefined_[Symbols::kMaxId];
+  static RawString* predefined_[kMaxId];
 
   friend class SnapshotReader;
   friend class SnapshotWriter;
diff --git a/runtime/vm/unicode.cc b/runtime/vm/unicode.cc
index e2e741d8..3129a06 100644
--- a/runtime/vm/unicode.cc
+++ b/runtime/vm/unicode.cc
@@ -64,18 +64,12 @@
 }
 
 
-static bool IsSmpSequenceStart(uint8_t code_unit) {
+static bool IsSupplementarySequenceStart(uint8_t code_unit) {
   // Check is codepoint is >= U+10000.
   return (code_unit >= 0xF0);
 }
 
 
-// Returns true if the code point is a high- or low-surrogate.
-static bool IsSurrogate(uint32_t code_point) {
-  return (code_point & 0xfffff800) == 0xd800;
-}
-
-
 // Returns true if the code point value is above Plane 17.
 static bool IsOutOfRange(uint32_t code_point) {
   return (code_point > 0x10FFFF);
@@ -88,14 +82,6 @@
 }
 
 
-void Utf8::ConvertUTF32ToUTF16(int32_t codepoint, uint16_t* dst) {
-  ASSERT(codepoint > kMaxBmpCodepoint);
-  ASSERT(dst != NULL);
-  dst[0] = (Utf8::kLeadOffset + (codepoint >> 10));
-  dst[1] = (0xDC00 + (codepoint & 0x3FF));
-}
-
-
 // Returns a count of the number of UTF-8 trail bytes.
 intptr_t Utf8::CodePointCount(const uint8_t* utf8_array,
                               intptr_t array_len,
@@ -108,8 +94,8 @@
       ++len;
     }
     if (!IsLatin1SequenceStart(code_unit)) {  // > U+00FF
-      if (IsSmpSequenceStart(code_unit)) {  // >= U+10000
-        char_type = kSMP;
+      if (IsSupplementarySequenceStart(code_unit)) {  // >= U+10000
+        char_type = kSupplementary;
         ++len;
       } else if (char_type == kLatin1) {
         char_type = kBMP;
@@ -144,7 +130,7 @@
             (j == num_trail_bytes) &&
             !IsOutOfRange(ch) &&
             !IsNonShortestForm(ch, j) &&
-            !IsSurrogate(ch))) {
+            !Utf16::IsSurrogate(ch))) {
         return false;
       }
     }
@@ -169,8 +155,9 @@
 
 intptr_t Utf8::Length(const String& str) {
   intptr_t length = 0;
-  for (intptr_t i = 0; i < str.Length(); ++i) {
-    int32_t ch = str.CharAt(i);
+  String::CodePointIterator it(str);
+  while (it.Next()) {
+    int32_t ch = it.Current();
     length += Utf8::Length(ch);
   }
   return length;
@@ -205,8 +192,9 @@
 
 intptr_t Utf8::Encode(const String& src, char* dst, intptr_t len) {
   intptr_t pos = 0;
-  for (intptr_t i = 0; i < src.Length(); ++i) {
-    intptr_t ch = src.CharAt(i);
+  String::CodePointIterator it(src);
+  while (it.Next()) {
+    int32_t ch = it.Current();
     intptr_t num_bytes = Utf8::Length(ch);
     if (pos + num_bytes > len) {
       break;
@@ -224,7 +212,7 @@
   uint32_t ch = utf8_array[0] & 0xFF;
   intptr_t i = 1;
   if (ch >= 0x80) {
-    int32_t num_trail_bytes = kTrailBytes[ch];
+    intptr_t num_trail_bytes = kTrailBytes[ch];
     bool is_malformed = false;
     for (; i < num_trail_bytes; ++i) {
       if (i < array_len) {
@@ -241,7 +229,7 @@
           (i == num_trail_bytes) &&
           !IsOutOfRange(ch) &&
           !IsNonShortestForm(ch, i) &&
-          !IsSurrogate(ch))) {
+          !Utf16::IsSurrogate(ch))) {
       *dst = -1;
       return 0;
     }
@@ -284,13 +272,13 @@
   intptr_t num_bytes;
   for (; (i < array_len) && (j < len); i += num_bytes, ++j) {
     int32_t ch;
-    bool is_smp = IsSmpSequenceStart(utf8_array[i]);
+    bool is_supplementary = IsSupplementarySequenceStart(utf8_array[i]);
     num_bytes = Utf8::Decode(&utf8_array[i], (array_len - i), &ch);
     if (ch == -1) {
       return false;  // invalid input
     }
-    if (is_smp) {
-      ConvertUTF32ToUTF16(ch, &(dst[j]));
+    if (is_supplementary) {
+      Utf16::Encode(ch, &dst[j]);
       j = j + 1;
     } else {
       dst[j] = ch;
@@ -305,7 +293,7 @@
 
 bool Utf8::DecodeToUTF32(const uint8_t* utf8_array,
                          intptr_t array_len,
-                         uint32_t* dst,
+                         int32_t* dst,
                          intptr_t len) {
   intptr_t i = 0;
   intptr_t j = 0;
@@ -324,4 +312,12 @@
   return true;  // success
 }
 
+
+void Utf16::Encode(int32_t codepoint, uint16_t* dst) {
+  ASSERT(codepoint > kMaxBmpCodepoint);
+  ASSERT(dst != NULL);
+  dst[0] = (Utf16::kLeadSurrogateOffset + (codepoint >> 10));
+  dst[1] = (0xDC00 + (codepoint & 0x3FF));
+}
+
 }  // namespace dart
diff --git a/runtime/vm/unicode.h b/runtime/vm/unicode.h
index 28beaad..03a4b29 100644
--- a/runtime/vm/unicode.h
+++ b/runtime/vm/unicode.h
@@ -15,20 +15,16 @@
 class Utf8 : AllStatic {
  public:
   enum Type {
-    kLatin1 = 0,  // Latin-1 character set.
-    kBMP,  // Basic Multilingual Plane.
-    kSMP,  // Supplementary Multilingual Plane.
+    kLatin1 = 0,  // Latin-1 code point [U+0000, U+00FF].
+    kBMP,  // Basic Multilingual Plane code point [U+0000, U+FFFF].
+    kSupplementary,  // Supplementary code point [U+010000, U+10FFFF].
   };
 
   static const intptr_t kMaxOneByteChar   = 0x7F;
   static const intptr_t kMaxTwoByteChar   = 0x7FF;
   static const intptr_t kMaxThreeByteChar = 0xFFFF;
   static const intptr_t kMaxFourByteChar  = 0x10FFFF;
-  static const intptr_t kMaxBmpCodepoint  = 0xffff;
-  static const int32_t kLeadOffset = (0xD800 - (0x10000 >> 10));
-  static const int32_t kSurrogateOffset = (0x10000 - (0xD800 << 10) - 0xDC00);
 
-  static void ConvertUTF32ToUTF16(int32_t codepoint, uint16_t* dst);
   static intptr_t CodePointCount(const uint8_t* utf8_array,
                                  intptr_t array_len,
                                  Type* type);
@@ -56,10 +52,10 @@
                             intptr_t len);
   static bool DecodeToUTF32(const uint8_t* utf8_array,
                             intptr_t array_len,
-                            uint32_t* dst,
+                            int32_t* dst,
                             intptr_t len);
   static bool DecodeCStringToUTF32(const char* str,
-                                   uint32_t* dst,
+                                   int32_t* dst,
                                    intptr_t len) {
     ASSERT(str != NULL);
     intptr_t array_len = strlen(str);
@@ -69,6 +65,44 @@
 };
 
 
+class Utf16 : AllStatic {
+ public:
+  static const int32_t kMaxBmpCodepoint  = 0xFFFF;
+
+  static const int32_t kLeadSurrogateOffset = (0xD800 - (0x10000 >> 10));
+
+  static const int32_t kSurrogateOffset = (0x10000 - (0xD800 << 10) - 0xDC00);
+
+  // Returns the length of the code point in UTF-16 code units.
+  static intptr_t Length(int32_t ch) {
+    return (ch <= kMaxBmpCodepoint) ? 1 : 2;
+  }
+
+  // Returns true if ch is a lead or trail surrogate.
+  static bool IsSurrogate(int32_t ch) {
+    return (ch & 0xFFFFF800) == 0xD800;
+  }
+
+  // Returns true if ch is a lead surrogate.
+  static bool IsLeadSurrogate(int32_t ch) {
+    return (ch & 0xFFFFFC00) == 0xD800;
+  }
+
+  // Returns true if ch is a low surrogate.
+  static bool IsTrailSurrogate(int32_t ch) {
+    return (ch & 0xFFFFFC00) == 0xDC00;
+  }
+
+  // Decodes a surrogate pair into a supplementary code point.
+  static int32_t Decode(int32_t lead, int32_t trail) {
+    return 0x10000 + ((lead & 0x3FF) << 10) + (trail & 0x3FF);
+  }
+
+  // Encodes a single code point.
+  static void Encode(int32_t codepoint, uint16_t* dst);
+};
+
+
 class CaseMapping : AllStatic {
  public:
   // Maps a code point to uppercase.
diff --git a/runtime/vm/unicode_test.cc b/runtime/vm/unicode_test.cc
index 967e9ca..582a2a6 100644
--- a/runtime/vm/unicode_test.cc
+++ b/runtime/vm/unicode_test.cc
@@ -12,8 +12,8 @@
   // Examples from the Unicode specification, chapter 3
   {
     const char* src = "\x41\xC3\xB1\x42";
-    uint32_t expected[] = { 0x41, 0xF1, 0x42 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x41, 0xF1, 0x42 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -22,8 +22,8 @@
 
   {
     const char* src = "\x4D";
-    uint32_t expected[] = { 0x4D };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x4D };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -32,8 +32,8 @@
 
   {
     const char* src = "\xD0\xB0";
-    uint32_t expected[] = { 0x430 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x430 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -42,8 +42,8 @@
 
   {
     const char* src = "\xE4\xBA\x8C";
-    uint32_t expected[] = { 0x4E8C };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x4E8C };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -52,8 +52,8 @@
 
   {
     const char* src = "\xF0\x90\x8C\x82";
-    uint32_t expected[] = { 0x10302 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x10302 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -62,8 +62,8 @@
 
   {
     const char* src = "\x4D\xD0\xB0\xE4\xBA\x8C\xF0\x90\x8C\x82";
-    uint32_t expected[] = { 0x4D, 0x430, 0x4E8C, 0x10302 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x4D, 0x430, 0x4E8C, 0x10302 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -75,10 +75,10 @@
     const char* src = "\xD7\x92\xD7\x9C\xD7\xA2\xD7\x93"
                       "\x20"
                       "\xD7\x91\xD7\xA8\xD7\x9B\xD7\x94";
-    uint32_t expected[] = { 0x5D2, 0x5DC, 0x5E2, 0x5D3,
-                            0x20,
-                            0x5D1, 0x5E8, 0x5DB, 0x5D4 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x5D2, 0x5DC, 0x5E2, 0x5D3,
+                           0x20,
+                           0x5D1, 0x5E8, 0x5DB, 0x5D4 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -90,8 +90,8 @@
   // 1 - Some correct UTF-8 text
   {
     const char* src = "\xCE\xBA\xE1\xBD\xB9\xCF\x83\xCE\xBC\xCE\xB5";
-    uint32_t expected[] = { 0x3BA, 0x1F79, 0x3C3, 0x3BC, 0x3B5 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x3BA, 0x1F79, 0x3C3, 0x3BC, 0x3B5 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -105,8 +105,8 @@
   // 2.1.1 - 1 byte (U-00000000):        "\x00"
   {
     const char* src = "\x00";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0xFF, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -116,8 +116,8 @@
   // 2.1.2 - 2 bytes (U-00000080):        "\xC2\x80"
   {
     const char* src = "\xC2\x80";
-    uint32_t expected[] = { 0x80 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x80 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -127,8 +127,8 @@
   // 2.1.3 - 3 bytes (U-00000800):        "\xE0\xA0\x80"
   {
     const char* src = "\xE0\xA0\x80";
-    uint32_t expected[] = { 0x800 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x800 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -138,8 +138,8 @@
   // 2.1.4 - 4 bytes (U-00010000):        "\xF0\x90\x80\x80"
   {
     const char* src = "\xF0\x90\x80\x80";
-    uint32_t expected[] = { 0x10000 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x10000 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -149,8 +149,8 @@
   // 2.1.5 - 5 bytes (U-00200000):        "\xF8\x88\x80\x80\x80"
   {
     const char* src = "\xF8\x88\x80\x80\x80";
-    uint32_t expected[] = { 0x200000 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x200000 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -160,8 +160,8 @@
   // 2.1.6 - 6 bytes (U-04000000):        "\xFC\x84\x80\x80\x80\x80"
   {
     const char* src = "\xFC\x84\x80\x80\x80\x80";
-    uint32_t expected[] = { 0x400000 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x400000 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -173,8 +173,8 @@
   // 2.2.1 - 1 byte (U-0000007F):        "\x7F"
   {
     const char* src = "\x7F";
-    uint32_t expected[] = { 0x7F };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x7F };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -184,8 +184,8 @@
   // 2.2.2 - 2 bytes (U-000007FF):        "\xDF\xBF"
   {
     const char* src = "\xDF\xBF";
-    uint32_t expected[] = { 0x7FF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x7FF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -195,8 +195,8 @@
   // 2.2.3 - 3 bytes (U-0000FFFF):        "\xEF\xBF\xBF"
   {
     const char* src = "\xEF\xBF\xBF";
-    uint32_t expected[] = { 0xFFFF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xFFFF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -206,8 +206,8 @@
   // 2.2.4 - 4 bytes (U-001FFFFF):        "\xF7\xBF\xBF\xBF"
   {
     const char* src = "\xF7\xBF\xBF\xBF";
-    uint32_t expected[] = { 0x1FFFF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x1FFFF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -217,8 +217,8 @@
   // 2.2.5 - 5 bytes (U-03FFFFFF):        "\xFB\xBF\xBF\xBF\xBF"
   {
     const char* src = "\xFB\xBF\xBF\xBF\xBF";
-    uint32_t expected[] = { 0x3FFFFFF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x3FFFFFF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -228,8 +228,8 @@
   // 2.2.6 - 6 bytes (U-7FFFFFFF):        "\xFD\xBF\xBF\xBF\xBF\xBF"
   {
     const char* src = "\xFD\xBF\xBF\xBF\xBF\xBF";
-    uint32_t expected[] = { 0x7FFFFFF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x7FFFFFF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -241,8 +241,8 @@
   // 2.3.1 - U-0000D7FF = ed 9f bf = "\xED\x9F\xBF"
   {
     const char* src = "\xED\x9F\xBF";
-    uint32_t expected[] = { 0xD7FF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xD7FF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -252,8 +252,8 @@
   // 2.3.2 - U-0000E000 = ee 80 80 = "\xEE\x80\x80"
   {
     const char* src = "\xEE\x80\x80";
-    uint32_t expected[] = { 0xE000 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xE000 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -263,8 +263,8 @@
   // 2.3.3 - U-0000FFFD = ef bf bd = "\xEF\xBF\xBD"
   {
     const char* src = "\xEF\xBF\xBD";
-    uint32_t expected[] = { 0xFFFD };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xFFFD };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -274,8 +274,8 @@
   // 2.3.4 - U-0010FFFF = f4 8f bf bf = "\xF4\x8F\xBF\xBF"
   {
     const char* src = "\xF4\x8F\xBF\xBF";
-    uint32_t expected[] = { 0x10FFFF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x10FFFF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -285,8 +285,8 @@
   // 2.3.5 - U-00110000 = f4 90 80 80 = "\xF4\x90\x80\x80"
   {
     const char* src = "\xF4\x90\x80\x80";
-    uint32_t expected[] = { 0x110000 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x110000 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -300,8 +300,8 @@
   // 3.1.1 - First continuation byte 0x80: "\x80"
   {
     const char* src = "\x80";
-    uint32_t expected[] = { 0x80 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x80 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -311,8 +311,8 @@
   // 3.1.2 - Last continuation byte 0xbf: "\xBF"
   {
     const char* src = "\xBF";
-    uint32_t expected[] = { 0xBF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xBF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -322,8 +322,8 @@
   // 3.1.3 - 2 continuation bytes: "\x80\xBF"
   {
     const char* src = "\x80\xBF";
-    uint32_t expected[] = { 0x80, 0xBF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x80, 0xBF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -333,8 +333,8 @@
   // 3.1.4 - 3 continuation bytes: "\x80\xBF\x80"
   {
     const char* src = "\x80\xBF\x80";
-    uint32_t expected[] = { 0x80, 0xBF, 0x80 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x80, 0xBF, 0x80 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -344,8 +344,8 @@
   // 3.1.5 - 4 continuation bytes: "\x80\xBF\x80\xBF"
   {
     const char* src = "\x80\xBF\x80\xBF";
-    uint32_t expected[] = { 0x80, 0xBF, 0x80, 0xBF  };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x80, 0xBF, 0x80, 0xBF  };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -355,8 +355,8 @@
   // 3.1.6 - 5 continuation bytes: "\x80\xBF\x80\xBF\x80"
   {
     const char* src = "\x80\xBF\x80\xBF\x80";
-    uint32_t expected[] = { 0x80, 0xBF, 0x80, 0xBF, 0x80 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x80, 0xBF, 0x80, 0xBF, 0x80 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -366,8 +366,8 @@
   // 3.1.7 - 6 continuation bytes: "\x80\xBF\x80\xBF\x80\xBF"
   {
     const char* src = "\x80\xBF\x80\xBF\x80\xBF";
-    uint32_t expected[] = { 0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -377,8 +377,8 @@
   // 3.1.8 - 7 continuation bytes: "\x80\xBF\x80\xBF\x80\xBF\x80"
   {
     const char* src = "\x80\xBF\x80\xBF\x80\xBF\x80";
-    uint32_t expected[] = { 0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF, 0x80 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF, 0x80 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -395,8 +395,8 @@
                       "\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF"
                       "\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7"
                       "\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     for (size_t i = 0; i < strlen(src); ++i) {
       memset(dst, 0xFF, sizeof(dst));
       bool is_valid = Utf8::DecodeCStringToUTF32(&src[i], dst, ARRAY_SIZE(dst));
@@ -418,8 +418,8 @@
                       "\xD4\x20\xD5\x20\xD6\x20\xD7\x20"
                       "\xD8\x20\xD9\x20\xDA\x20\xDB\x20"
                       "\xDC\x20\xDD\x20\xDE\x20\xDF\x20";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     for (size_t i = 0; i < strlen(src); i += 2) {
       memset(dst, 0xFF, sizeof(dst));
       bool is_valid = Utf8::DecodeCStringToUTF32(&src[i], dst, ARRAY_SIZE(dst));
@@ -435,8 +435,8 @@
                       "\xE4\x20\xE5\x20\xE6\x20\xE7\x20"
                       "\xE8\x20\xE9\x20\xEA\x20\xEB\x20"
                       "\xEC\x20\xED\x20\xEE\x20\xEF\x20";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     for (size_t i = 0; i < strlen(src); i += 2) {
       memset(dst, 0xFF, sizeof(dst));
       bool is_valid = Utf8::DecodeCStringToUTF32(&src[i], dst, ARRAY_SIZE(dst));
@@ -450,8 +450,8 @@
   {
     const char* src = "\xF0\x20\xF1\x20\xF2\x20\xF3\x20"
                       "\xF4\x20\xF5\x20\xF6\x20\xF7\x20";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     for (size_t i = 0; i < strlen(src); i += 2) {
       memset(dst, 0xFF, sizeof(dst));
       bool is_valid = Utf8::DecodeCStringToUTF32(&src[i], dst, ARRAY_SIZE(dst));
@@ -464,8 +464,8 @@
   //         followed by a space character:
   {
     const char* src = "\xF8\x20\xF9\x20\xFA\x20\xFB\x20";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     for (size_t i = 0; i < strlen(src); i += 2) {
       memset(dst, 0xFF, sizeof(dst));
       bool is_valid = Utf8::DecodeCStringToUTF32(&src[i], dst, ARRAY_SIZE(dst));
@@ -478,8 +478,8 @@
   //         followed by a space character:
   {
     const char* src = "\xFC\x20\xFD\x20";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     for (size_t i = 0; i < strlen(src); i += 2) {
       memset(dst, 0xFF, sizeof(dst));
       bool is_valid = Utf8::DecodeCStringToUTF32(&src[i], dst, ARRAY_SIZE(dst));
@@ -493,8 +493,8 @@
   // 3.3.1 - 2-byte sequence with last byte missing (U+0000): "\xC0"
   {
     const char* src = "\xC0";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0xFF, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -504,8 +504,8 @@
   // 3.3.2 - 3-byte sequence with last byte missing (U+0000): "\xE0\x80"
   {
     const char* src = "\xE0\x80";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0xFF, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -515,8 +515,8 @@
   // 3.3.3 - 4-byte sequence with last byte missing (U+0000): "\xF0\x80\x80"
   {
     const char* src = "\xF0\x80\x80";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0xFF, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -526,8 +526,8 @@
   // 3.3.4 - 5-byte sequence with last byte missing (U+0000): "\xF8\x80\x80\x80"
   {
     const char* src = "\xF8\x80\x80\x80";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0xFF, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -538,8 +538,8 @@
   // "\xFC\x80\x80\x80\x80"
   {
     const char* src = "\xFC\x80\x80\x80\x80";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0xFF, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -549,8 +549,8 @@
   // 3.3.6 - 2-byte sequence with last byte missing (U-000007FF): "\xDF"
   {
     const char* src = "\xDF";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0xFF, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -560,8 +560,8 @@
   // 3.3.7 - 3-byte sequence with last byte missing (U-0000FFFF): "\xEF\xBF"
   {
     const char* src = "\xEF\xBF";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0xFF, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -571,8 +571,8 @@
   // 3.3.8 - 4-byte sequence with last byte missing (U-001FFFFF): "\xF7\xBF\xBF"
   {
     const char* src = "\xF7\xBF\xBF";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0xFF, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -583,8 +583,8 @@
   // "\xFB\xBF\xBF\xBF"
   {
     const char* src = "\xFB\xBF\xBF\xBF";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0xFF, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -595,8 +595,8 @@
   // "\xFD\xBF\xBF\xBF\xBF"
   {
     const char* src = "\xFD\xBF\xBF\xBF\xBF";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0xFF, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -610,8 +610,8 @@
                       "\x80\x80\x80\xDF\xEF\xBF"
                       "\xF7\xBF\xBF\xFB\xBF\xBF"
                       "\xBF\xFD\xBF\xBF\xBF\xBF";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     for (size_t i = 0; i < strlen(src); ++i) {
       for (size_t j = 1; j < (strlen(src) - i); ++j) {
         memset(dst, 0xFF, sizeof(dst));
@@ -628,8 +628,8 @@
   // 3.5.1 - fe = "\xFE"
   {
     const char* src = "\xFE";
-    uint32_t expected[] = { 0xFE };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xFE };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -639,8 +639,8 @@
   // 3.5.2 - ff = "\xFF"
   {
     const char* src = "\xFF";
-    uint32_t expected[] = { 0xFF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xFF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -650,8 +650,8 @@
   // 3.5.3 - fe fe ff ff = "\xFE\xFE\xFF\xFF"
   {
     const char* src = "\xFE\xFE\xFF\xFF";
-    uint32_t expected[] = { 0xFF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xFF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -665,8 +665,8 @@
   // 4.1.1 - U+002F = c0 af             = "\xC0\xAF"
   {
     const char* src = "\xC0\xAF";
-    uint32_t expected[] = { 0x2F };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x2F };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -676,8 +676,8 @@
   // 4.1.2 - U+002F = e0 80 af          = "\xE0\x80\xAF"
   {
     const char* src = "\xE0\x80\xAF";
-    uint32_t expected[] = { 0x2F };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x2F };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -687,8 +687,8 @@
   // 4.1.3 - U+002F = f0 80 80 af       = "\xF0\x80\x80\xAF"
   {
     const char* src = "\xF0\x80\x80\xAF";
-    uint32_t expected[] = { 0x2F };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x2F };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -698,8 +698,8 @@
   // 4.1.4 - U+002F = f8 80 80 80 af    = "\xF8\x80\x80\x80\xAF"
   {
     const char* src = "\xF8\x80\x80\x80\xAF";
-    uint32_t expected[] = { 0x2F };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x2F };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -709,8 +709,8 @@
   // 4.1.5 - U+002F = fc 80 80 80 80 af = "\xFC\x80\x80\x80\x80\xAF"
   {
     const char* src = "\xFC\x80\x80\x80\x80\xAF";
-    uint32_t expected[] = { 0x2F };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x2F };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -722,8 +722,8 @@
   // 4.2.1 - U-0000007F = c1 bf             = "\xC1\xBF"
   {
     const char* src = "\xC1\xBF";
-    uint32_t expected[] = { 0x7F };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x7F };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -733,8 +733,8 @@
   // 4.2.2 U+000007FF = e0 9f bf          = "\xE0\x9F\xBF"
   {
     const char* src = "\xE0\x9F\xBF";
-    uint32_t expected[] = { 0x7FF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x7FF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -744,8 +744,8 @@
   // 4.2.3 - U+0000FFFF = f0 8f bf bf       = "\xF0\x8F\xBF\xBF"
   {
     const char* src = "\xF0\x8F\xBF\xBF";
-    uint32_t expected[] = { 0xFFFF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xFFFF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -755,8 +755,8 @@
   // 4.2.4  U-001FFFFF = f8 87 bf bf bf    = "\xF8\x87\xBF\xBF\xBF"
   {
     const char* src = "\xF8\x87\xBF\xBF\xBF";
-    uint32_t expected[] = { 0x1FFFFF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x1FFFFF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -766,8 +766,8 @@
   // 4.2.5  U-03FFFFFF = fc 83 bf bf bf bf = "\xFC\x83\xBF\xBF\xBF\xBF"
   {
     const char* src = "\xFC\x83\xBF\xBF\xBF\xBF";
-    uint32_t expected[] = { 0x3FFFFFF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x3FFFFFF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -779,8 +779,8 @@
   // 4.3.1 - U+0000 = "\xC0\x80"
   {
     const char* src = "\xC0\x80";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0xFF, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -790,8 +790,8 @@
   // 4.3.2  U+0000 = e0 80 80 = "\xE0\x80\x80"
   {
     const char* src = "\xE0\x80\x80";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0xFF, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -801,8 +801,8 @@
   // 4.3.3  U+0000 = f0 80 80 80 = "\xF0\x80\x80\x80"
   {
     const char* src = "\xF0\x80\x80\x80";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0xFF, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -812,8 +812,8 @@
   // 4.3.4  U+0000 = f8 80 80 80 80 = "\xF8\x80\x80\x80\x80"
   {
     const char* src = "\xF8\x80\x80\x80\x80";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0xFF, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -823,8 +823,8 @@
   // 4.3.5  U+0000 = fc 80 80 80 80 80 = "\xFC\x80\x80\x80\x80\x80"
   {
     const char* src = "\xFC\x80\x80\x80\x80\x80";
-    uint32_t expected[] = { 0x0 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0x0 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0xFF, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -836,8 +836,8 @@
   // 5.1.1 - U+D800 = ed a0 80 = "\xED\xA0\x80"
   {
     const char* src = "\xED\xA0\x80";
-    uint32_t expected[] = { 0xD800 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xD800 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -847,8 +847,8 @@
   // 5.1.2 - U+DB7F = ed ad bf = "\xED\xAD\xBF"
   {
     const char* src = "\xED\xAD\xBF";
-    uint32_t expected[] = { 0xDB7F };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xDB7F };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -858,8 +858,8 @@
   // 5.1.3 - U+DB80 = ed ae 80 = "\xED\xAE\x80"
   {
     const char* src = "\xED\xAE\x80";
-    uint32_t expected[] = { 0xDB80 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xDB80 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -869,8 +869,8 @@
   // 5.1.4 - U+DBFF = ed af bf = "\xED\xAF\xBF"
   {
     const char* src = "\xED\xAF\xBF";
-    uint32_t expected[] = { 0xDBFF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xDBFF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -880,8 +880,8 @@
   // 5.1.5 - U+DC00 = ed b0 80 = "\xED\xB0\x80"
   {
     const char* src = "\xED\xB0\x80";
-    uint32_t expected[] = { 0xDC00 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xDC00 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -891,8 +891,8 @@
   // 5.1.6 - U+DF80 = ed be 80 = "\xED\xBE\x80"
   {
     const char* src = "\xED\xBE\x80";
-    uint32_t expected[] = { 0xDF80 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xDF80 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -902,8 +902,8 @@
   // 5.1.7 - U+DFFF = ed bf bf = "\xED\xBF\xBF"
   {
     const char* src = "\xED\xBF\xBF";
-    uint32_t expected[] = { 0xDFFF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xDFFF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -915,8 +915,8 @@
   // 5.2.1 - U+D800 U+DC00 = ed a0 80 ed b0 80 = "\xED\xA0\x80\xED\xB0\x80"
   {
     const char* src = "\xED\xA0\x80\xED\xB0\x80";
-    uint32_t expected[] = { 0xD800, 0xDC00 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xD800, 0xDC00 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -926,8 +926,8 @@
   // 5.2.2 - U+D800 U+DFFF = ed a0 80 ed bf bf = "\xED\xA0\x80\xED\xBF\xBF"
   {
     const char* src = "\xED\xA0\x80\xED\xBF\xBF";
-    uint32_t expected[] = { 0xD800, 0xDFFF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xD800, 0xDFFF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -937,8 +937,8 @@
   // 5.2.3 - U+DB7F U+DC00 = ed a0 80 ed bf bf = "\xED\xAD\xBF\xED\xB0\x80"
   {
     const char* src = "\xED\xAD\xBF\xED\xB0\x80";
-    uint32_t expected[] = { 0xDB7F, 0xDC00 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xDB7F, 0xDC00 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -948,8 +948,8 @@
   // 5.2.4 - U+DB7F U+DFFF = ed ad bf ed bf bf = "\xED\xAD\xBF\xED\xBF\xBF"
   {
     const char* src = "\xED\xAD\xBF\xED\xBF\xBF";
-    uint32_t expected[] = { 0xDB7F, 0xDFFF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xDB7F, 0xDFFF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -959,8 +959,8 @@
   // 5.2.5 - U+DB80 U+DC00 = ed ae 80 ed b0 80 = "\xED\xAE\x80\xED\xB0\x80"
   {
     const char* src = "\xED\xAE\x80\xED\xB0\x80";
-    uint32_t expected[] = { 0xDB80, 0xDC00 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xDB80, 0xDC00 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -970,8 +970,8 @@
   // 5.2.6 - U+DB80 U+DFFF = ed ae 80 ed bf bf = "\xED\xAE\x80\xED\xBF\xBF"
   {
     const char* src = "\xED\xAE\x80\xED\xBF\xBF";
-    uint32_t expected[] = { 0xDB80, 0xDFFF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xDB80, 0xDFFF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -981,8 +981,8 @@
   // 5.2.7 - U+DBFF U+DC00 = ed af bf ed b0 80 = "\xED\xAF\xBF\xED\xB0\x80"
   {
     const char* src = "\xED\xAF\xBF\xED\xB0\x80";
-    uint32_t expected[] = { 0xDBFF, 0xDC00 };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xDBFF, 0xDC00 };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -992,8 +992,8 @@
   // 5.2.8 - U+DBFF U+DFFF = ed af bf ed bf bf = "\xED\xAF\xBF\xED\xBF\xBF"
   {
     const char* src = "\xED\xAF\xBF\xED\xBF\xBF";
-    uint32_t expected[] = { 0xDBFF, 0xDFFF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xDBFF, 0xDFFF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(!is_valid);
@@ -1005,8 +1005,8 @@
   // 5.3.1 - U+FFFE = ef bf be = "\xEF\xBF\xBE"
   {
     const char* src = "\xEF\xBF\xBE";
-    uint32_t expected[] = { 0xFFFE };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xFFFE };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
@@ -1016,8 +1016,8 @@
   // 5.3.2 - U+FFFF = ef bf bf = "\xEF\xBF\xBF"
   {
     const char* src = "\xEF\xBF\xBF";
-    uint32_t expected[] = { 0xFFFF };
-    uint32_t dst[ARRAY_SIZE(expected)];
+    int32_t expected[] = { 0xFFFF };
+    int32_t dst[ARRAY_SIZE(expected)];
     memset(dst, 0, sizeof(dst));
     bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst));
     EXPECT(is_valid);
diff --git a/runtime/vm/vm.gypi b/runtime/vm/vm.gypi
index 0fb1bd9..7104aa5 100644
--- a/runtime/vm/vm.gypi
+++ b/runtime/vm/vm.gypi
@@ -78,6 +78,7 @@
       'includes': [
         '../lib/lib_sources.gypi',
         '../lib/isolate_sources.gypi',
+        '../lib/math_sources.gypi',
         '../lib/mirrors_sources.gypi',
         '../lib/scalarlist_sources.gypi',
       ],
@@ -106,6 +107,7 @@
       'includes': [
         '../lib/lib_sources.gypi',
         '../lib/isolate_sources.gypi',
+        '../lib/math_sources.gypi',
         '../lib/mirrors_sources.gypi',
         '../lib/scalarlist_sources.gypi',
       ],
diff --git a/runtime/vm/vm_sources.gypi b/runtime/vm/vm_sources.gypi
index d45c8fa..2b2f9d4 100644
--- a/runtime/vm/vm_sources.gypi
+++ b/runtime/vm/vm_sources.gypi
@@ -236,9 +236,6 @@
     'port.cc',
     'port.h',
     'port_test.cc',
-    'random.cc',
-    'random.h',
-    'random_test.cc',
     'raw_object.cc',
     'raw_object.h',
     'raw_object_snapshot.cc',
diff --git a/sdk/lib/_internal/compiler/compiler.dart b/sdk/lib/_internal/compiler/compiler.dart
index af37116..9ef6aa8 100644
--- a/sdk/lib/_internal/compiler/compiler.dart
+++ b/sdk/lib/_internal/compiler/compiler.dart
@@ -8,8 +8,7 @@
 import 'implementation/apiimpl.dart';
 
 // Unless explicitly allowed, passing [:null:] for any argument to the
-// methods of library will result in a NullPointerException being
-// thrown.
+// methods of library will result in an Error being thrown.
 
 /**
  * Returns a future that completes to the source corresponding to
diff --git a/sdk/lib/_internal/compiler/implementation/closure.dart b/sdk/lib/_internal/compiler/implementation/closure.dart
index 4d6be1c..3d5feef 100644
--- a/sdk/lib/_internal/compiler/implementation/closure.dart
+++ b/sdk/lib/_internal/compiler/implementation/closure.dart
@@ -371,7 +371,7 @@
         return true;
       } else if (type is InterfaceType) {
         InterfaceType ifcType = type;
-        for (DartType argument in ifcType.arguments) {
+        for (DartType argument in ifcType.typeArguments) {
           if (hasTypeVariable(argument)) {
             return true;
           }
@@ -385,7 +385,7 @@
         useLocal(type.element);
       } else if (type is InterfaceType) {
         InterfaceType ifcType = type;
-        for (DartType argument in ifcType.arguments) {
+        for (DartType argument in ifcType.typeArguments) {
           analyzeTypeVariables(argument);
         }
       }
diff --git a/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart b/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
index 1f16080..975d4e5 100644
--- a/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
+++ b/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
@@ -28,7 +28,6 @@
   /** Caches the statics where the initial value cannot be eagerly compiled. */
   final Set<VariableElement> lazyStatics;
 
-
   ConstantHandler(Compiler compiler, this.constantSystem)
       : initialVariableValues = new Map<VariableElement, dynamic>(),
         compiledConstants = new Set<Constant>(),
@@ -134,7 +133,7 @@
             && element.isField()) {
           DartType elementType = element.computeType(compiler);
           DartType constantType = value.computeType(compiler);
-          if (!compiler.types.isSubtype(constantType, elementType)) {
+          if (!constantSystem.isSubtype(compiler, constantType, elementType)) {
             if (isConst) {
               MessageKind kind = MessageKind.NOT_ASSIGNABLE;
               compiler.reportError(node, new CompileTimeConstantError(
@@ -248,6 +247,7 @@
   final ConstantSystem constantSystem;
   final TreeElements elements;
   final Compiler compiler;
+  bool enabledRuntimeTypeSupport = false;
 
   CompileTimeConstantEvaluator(this.constantSystem,
                                this.elements,
@@ -400,6 +400,25 @@
     return constantSystem.createString(accumulator, node);
   }
 
+  Constant makeTypeConstant(Element element) {
+    // If we use a type literal in a constant, the compile time constant
+    // emitter will generate a call to the runtime type cache helper, so we
+    // resolve it and put it into the codegen work list.
+    if (!enabledRuntimeTypeSupport) {
+      SourceString helperName = const SourceString('createRuntimeType');
+      Element helper = compiler.findHelper(helperName);
+      compiler.enqueuer.resolution.addToWorkList(helper);
+      compiler.enqueuer.codegen.addToWorkList(helper);
+      enabledRuntimeTypeSupport = true;
+    }
+
+    DartType elementType = element.computeType(compiler).asRaw();
+    DartType constantType = compiler.typeClass.computeType(compiler);
+    Constant constant = new TypeConstant(elementType, constantType);
+    compiler.constantHandler.registerCompileTimeConstant(constant);
+    return constant;
+  }
+
   // TODO(floitsch): provide better error-messages.
   Constant visitSend(Send send) {
     Element element = elements[send];
@@ -418,6 +437,8 @@
           result = compiler.compileVariable(element);
         }
         if (result != null) return result;
+      } else if (Elements.isClass(element) || Elements.isTypedef(element)) {
+        return makeTypeConstant(element);
       }
       return signalNotCompileTimeConstant(send);
     } else if (send.isCall) {
@@ -427,6 +448,8 @@
         Constant right = evaluate(send.argumentsNode.nodes.tail.head);
         Constant result = constantSystem.identity.fold(left, right);
         if (result != null) return result;
+      } else if (Elements.isClass(element) || Elements.isTypedef(element)) {
+        return makeTypeConstant(element);
       }
       return signalNotCompileTimeConstant(send);
     } else if (send.isPrefix) {
diff --git a/sdk/lib/_internal/compiler/implementation/compiler.dart b/sdk/lib/_internal/compiler/implementation/compiler.dart
index e416804..e770cff 100644
--- a/sdk/lib/_internal/compiler/implementation/compiler.dart
+++ b/sdk/lib/_internal/compiler/implementation/compiler.dart
@@ -96,8 +96,6 @@
 
   SourceString getCheckedModeHelper(DartType type) => null;
   void registerInstantiatedClass(ClassElement cls, Enqueuer enqueuer) {}
-
-  Element getInterceptor(Selector selector);
 }
 
 abstract class Compiler implements DiagnosticListener {
diff --git a/sdk/lib/_internal/compiler/implementation/constants.dart b/sdk/lib/_internal/compiler/implementation/constants.dart
index 6e20124..ad5dc74 100644
--- a/sdk/lib/_internal/compiler/implementation/constants.dart
+++ b/sdk/lib/_internal/compiler/implementation/constants.dart
@@ -16,6 +16,7 @@
   R visitList(ListConstant constant);
   R visitMap(MapConstant constant);
   R visitConstructed(ConstructedConstant constant);
+  R visitType(TypeConstant constant);
 }
 
 abstract class Constant {
@@ -37,6 +38,7 @@
   bool isPrimitive() => false;
   /** Returns true if the constant is a list, a map or a constructed object. */
   bool isObject() => false;
+  bool isType() => false;
   bool isSentinel() => false;
 
   bool isNaN() => false;
@@ -46,7 +48,7 @@
 
   List<Constant> getDependencies();
 
-  accept(ConstantVisitor);
+  accept(ConstantVisitor visitor);
 }
 
 class SentinelConstant extends Constant {
@@ -100,7 +102,7 @@
   bool operator ==(var other) {
     if (other is !PrimitiveConstant) return false;
     PrimitiveConstant otherPrimitive = other;
-    // We use == instead of === so that DartStrings compare correctly.
+    // We use == instead of 'identical' so that DartStrings compare correctly.
     return value == otherPrimitive.value;
   }
 
@@ -315,10 +317,25 @@
   bool isObject() => true;
 
   DartType computeType(Compiler compiler) => type;
+}
 
-  // TODO(1603): The class should be marked as abstract, but the VM doesn't
-  // currently allow this.
-  int get hashCode;
+class TypeConstant extends ObjectConstant {
+  /// The user type that this constant represents.
+  final DartType representedType;
+
+  TypeConstant(this.representedType, type) : super(type);
+
+  bool isType() => true;
+
+  bool operator ==(other) {
+    return other is TypeConstant && representedType == other.representedType;
+  }
+
+  int get hashCode => representedType.hashCode * 13;
+
+  List<Constant> getDependencies() => const <Constant>[];
+
+  accept(ConstantVisitor visitor) => visitor.visitType(this);
 }
 
 class ListConstant extends ObjectConstant {
diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
index 101918b..c012488 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
@@ -196,8 +196,6 @@
         stripAsserts = strips.indexOf('asserts') != -1,
         super(compiler);
 
-  Element getInterceptor(Selector selector) => null;
-
   void enqueueHelpers(Enqueuer world) {
     // Right now resolver doesn't always resolve interfaces needed
     // for literals, so force them. TODO(antonm): fix in the resolver.
diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
index b31e471..63e14f9 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
@@ -30,6 +30,7 @@
   final bool isRedirectingCall;
   ConstructorPlaceholder(this.node, this.type)
       : this.isRedirectingCall = false;
+  // Note: factory redirection is not redirecting call!
   ConstructorPlaceholder.redirectingCall(this.node)
       : this.type = null, this.isRedirectingCall = true;
 }
@@ -141,7 +142,7 @@
   final Set<String> fixedMemberNames; // member names which cannot be renamed.
   final Map<Element, ElementAst> elementAsts;
   final Set<Node> nullNodes;  // Nodes that should not be in output.
-  final Set<Identifier> unresolvedNodes;
+  final Set<Node> unresolvedNodes;
   final Map<Element, Set<Node>> elementNodes;
   final Map<FunctionElement, FunctionScope> functionScopes;
   final Map<LibraryElement, Set<Identifier>> privateNodes;
@@ -161,7 +162,7 @@
 
   PlaceholderCollector(this.compiler, this.fixedMemberNames, this.elementAsts) :
       nullNodes = new Set<Node>(),
-      unresolvedNodes = new Set<Identifier>(),
+      unresolvedNodes = new Set<Node>(),
       elementNodes = new Map<Element, Set<Node>>(),
       functionScopes = new Map<FunctionElement, FunctionScope>(),
       privateNodes = new Map<LibraryElement, Set<Identifier>>(),
@@ -175,6 +176,15 @@
     if (element.isGenerativeConstructor() || element.isFactoryConstructor()) {
       DartType type = element.getEnclosingClass().type.asRaw();
       makeConstructorPlaceholder(node.name, element, type);
+      Return bodyAsReturn = node.body.asReturn();
+      if (bodyAsReturn != null && bodyAsReturn.isRedirectingFactoryBody) {
+        // Factory redirection.
+        FunctionElement redirectTarget = element.defaultImplementation;
+        assert(redirectTarget != null && redirectTarget != element);
+        type = redirectTarget.getEnclosingClass().type.asRaw();
+        makeConstructorPlaceholder(
+            bodyAsReturn.expression, redirectTarget, type);
+      }
     } else if (Elements.isStaticOrTopLevel(element)) {
       // Note: this code should only rename private identifiers for class'
       // fields/getters/setters/methods.  Top-level identifiers are renamed
@@ -355,7 +365,8 @@
     Element constructor = treeElements[send];
     assert(constructor != null);
     assert(send.receiver == null);
-    if (constructor is !ErroneousElement) {
+    if (!Elements.isErroneousElement(constructor) &&
+        !Elements.isMalformedElement(constructor)) {
       makeConstructorPlaceholder(node.send.selector, constructor, type);
       // TODO(smok): Should this be in visitNamedArgument?
       // Field names can be exposed as names of optional arguments, e.g.
diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/renamer.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/renamer.dart
index d41d5b2..f132df6 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_backend/renamer.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/renamer.dart
@@ -88,9 +88,9 @@
     // js-helpers.
     StringBuffer result = new StringBuffer(renameElement(type.element));
     if (type is InterfaceType) {
-      if (!type.arguments.isEmpty) {
+      if (!type.typeArguments.isEmpty) {
         result.add('<');
-        Link<DartType> argumentsLink = type.arguments;
+        Link<DartType> argumentsLink = type.typeArguments;
         result.add(renameType(argumentsLink.head, renameElement));
         for (Link<DartType> link = argumentsLink.tail; !link.isEmpty;
              link = link.tail) {
diff --git a/sdk/lib/_internal/compiler/implementation/elements/elements.dart b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
index fbdc8ca..df07e95 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/elements.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
@@ -120,6 +120,8 @@
       const ElementKind('ambiguous', ElementCategory.NONE);
   static const ElementKind ERROR =
       const ElementKind('error', ElementCategory.NONE);
+  static const ElementKind MALFORMED_TYPE =
+    const ElementKind('malformed', ElementCategory.NONE);
 
   toString() => id;
 }
@@ -200,6 +202,8 @@
   /** See [AmbiguousElement] for documentation. */
   bool isAmbiguous() => false;
 
+  bool isMalformed() => false;
+
   /**
    * Is [:true:] if this element has a corresponding patch.
    *
@@ -1136,7 +1140,7 @@
    * changed by the resolver to point to the redirection target.  If
    * this is an interface constructor, [defaultImplementation] will be
    * changed by the resolver to point to the default implementation.
-   * Otherwise, [:defaultImplementation === this:].
+   * Otherwise, [:identical(defaultImplementation, this):].
    */
   // TODO(ahe): Rename this field to redirectionTarget and remove
   // mention of interface constructors above.
@@ -1178,7 +1182,7 @@
 
   FunctionElement get redirectionTarget {
     if (this == defaultImplementation) return this;
-    Element target = defaultImplementation;
+    var target = defaultImplementation;
     Set<Element> seen = new Set<Element>();
     seen.add(target);
     while (!target.isErroneous() && target != target.defaultImplementation) {
@@ -1319,6 +1323,23 @@
   bool impliesType() => true;
 }
 
+class MalformedTypeElement extends Element {
+  final TypeAnnotation typeNode;
+
+  MalformedTypeElement(this.typeNode, Element enclosing)
+      : super(const SourceString('malformed'),
+              ElementKind.MALFORMED_TYPE,
+              enclosing);
+
+  DartType computeType(compiler) => compiler.types.malformedType;
+
+  Node parseNode(_) => typeNode;
+
+  bool impliesType() => true;
+
+  bool isMalformed() => true;
+}
+
 /**
  * [TypeDeclarationElement] defines the common interface for class/interface
  * declarations and typedefs.
@@ -1414,7 +1435,7 @@
   bool isObject(Compiler compiler) =>
       identical(declaration, compiler.objectClass);
 
-  Link<DartType> get typeVariables => type.arguments;
+  Link<DartType> get typeVariables => type.typeArguments;
 
   ClassElement ensureResolved(Compiler compiler) {
     if (resolutionState == STATE_NOT_STARTED) {
@@ -1724,8 +1745,16 @@
 }
 
 class Elements {
-  static bool isUnresolved(Element e) => e == null || e.isErroneous();
+  static bool isUnresolved(Element e) {
+    return e == null || e.isErroneous() || e.isMalformed();
+  }
   static bool isErroneousElement(Element e) => e != null && e.isErroneous();
+  static bool isMalformedElement(Element e) => e != null && e.isMalformed();
+
+  static bool isClass(Element e) => e != null && e.kind == ElementKind.CLASS;
+  static bool isTypedef(Element e) {
+    return e != null && e.kind == ElementKind.TYPEDEF;
+  }
 
   static bool isLocal(Element element) {
     return !Elements.isUnresolved(element)
@@ -1863,27 +1892,27 @@
 
   static SourceString constructOperatorName(SourceString op, bool isUnary) {
     String value = op.stringValue;
-    if ((value === '==') ||
-        (value === '~') ||
-        (value === '[]') ||
-        (value === '[]=') ||
-        (value === '*') ||
-        (value === '/') ||
-        (value === '%') ||
-        (value === '~/') ||
-        (value === '+') ||
-        (value === '<<') ||
-        (value === '>>>') ||
-        (value === '>>') ||
-        (value === '>=') ||
-        (value === '>') ||
-        (value === '<=') ||
-        (value === '<') ||
-        (value === '&') ||
-        (value === '^') ||
-        (value === '|')) {
+    if ((identical(value, '==')) ||
+        (identical(value, '~')) ||
+        (identical(value, '[]')) ||
+        (identical(value, '[]=')) ||
+        (identical(value, '*')) ||
+        (identical(value, '/')) ||
+        (identical(value, '%')) ||
+        (identical(value, '~/')) ||
+        (identical(value, '+')) ||
+        (identical(value, '<<')) ||
+        (identical(value, '>>>')) ||
+        (identical(value, '>>')) ||
+        (identical(value, '>=')) ||
+        (identical(value, '>')) ||
+        (identical(value, '<=')) ||
+        (identical(value, '<')) ||
+        (identical(value, '&')) ||
+        (identical(value, '^')) ||
+        (identical(value, '|'))) {
       return op;
-    } else if (value === '-') {
+    } else if (identical(value, '-')) {
       return isUnary ? const SourceString('unary-') : op;
     } else {
       throw 'Unhandled operator: ${op.slowToString()}';
@@ -1933,10 +1962,17 @@
   final TargetElement target;
   bool isBreakTarget = false;
   bool isContinueTarget = false;
-  LabelElement(Label label, this.labelName, this.target,
+  LabelElement(Label label, String labelName, this.target,
                Element enclosingElement)
       : this.label = label,
-        super(label.identifier.source, ElementKind.LABEL, enclosingElement);
+        this.labelName = labelName,
+        // In case of a synthetic label, just use [labelName] for
+        // identifying the element.
+        super(label == null
+                  ? new SourceString(labelName)
+                  : label.identifier.source,
+              ElementKind.LABEL,
+              enclosingElement);
 
   void setBreakTarget() {
     isBreakTarget = true;
diff --git a/sdk/lib/_internal/compiler/implementation/enqueue.dart b/sdk/lib/_internal/compiler/implementation/enqueue.dart
index 8ed7bdb..f12d760 100644
--- a/sdk/lib/_internal/compiler/implementation/enqueue.dart
+++ b/sdk/lib/_internal/compiler/implementation/enqueue.dart
@@ -138,6 +138,7 @@
   }
 
   void registerInstantiatedClass(ClassElement cls) {
+    if (universe.instantiatedClasses.contains(cls)) return;
     universe.instantiatedClasses.add(cls);
     onRegisterInstantiatedClass(cls);
     compiler.backend.registerInstantiatedClass(cls, this);
@@ -403,11 +404,4 @@
         : 'Compiled ${universe.generatedCode.length} methods.');
     nativeEnqueuer.logSummary(log);
   }
-
-  registerUsedSelector(Selector selector) {
-    Element interceptor = compiler.backend.getInterceptor(selector);
-    if (interceptor != null) {
-      registerStaticUse(interceptor);
-    }
-  }
 }
diff --git a/sdk/lib/_internal/compiler/implementation/js/nodes.dart b/sdk/lib/_internal/compiler/implementation/js/nodes.dart
index 18139b2..cfc88a5 100644
--- a/sdk/lib/_internal/compiler/implementation/js/nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/js/nodes.dart
@@ -713,6 +713,8 @@
   PropertyAccess(this.receiver, this.selector);
   PropertyAccess.field(this.receiver, String fieldName)
       : selector = new LiteralString("'$fieldName'");
+  PropertyAccess.indexed(this.receiver, int index)
+      : selector = new LiteralNumber('$index');
 
   accept(NodeVisitor visitor) => visitor.visitAccess(this);
 
@@ -769,6 +771,9 @@
 
   ArrayInitializer(this.length, this.elements);
 
+  factory ArrayInitializer.from(List<Expression> expressions) =>
+      new ArrayInitializer(expressions.length, _convert(expressions));
+
   accept(NodeVisitor visitor) => visitor.visitArrayInitializer(this);
 
   void visitChildren(NodeVisitor visitor) {
@@ -776,6 +781,12 @@
   }
 
   int get precedenceLevel => PRIMARY;
+
+  static List<ArrayElement> _convert(List<Expression> expressions) {
+    int index = 0;
+    return expressions.map(
+        (expression) => new ArrayElement(index++, expression));
+  }
 }
 
 /**
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
index 5cc96d6..9aa445d 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
@@ -648,8 +648,17 @@
 
   ClassElement jsStringClass;
   ClassElement jsArrayClass;
+  ClassElement jsNumberClass;
+  ClassElement jsIntClass;
+  ClassElement jsDoubleClass;
+  ClassElement jsFunctionClass;
+  ClassElement jsNullClass;
+  ClassElement jsBoolClass;
   ClassElement objectInterceptorClass;
+  Element jsArrayLength;
+  Element jsStringLength;
   Element getInterceptorMethod;
+  bool _interceptorsAreInitialized = false;
 
   final Namer namer;
 
@@ -685,19 +694,22 @@
    * name to the list of members that have that name. This map is used
    * by the codegen to know whether a send must be intercepted or not.
    */
-  final Map<SourceString, List<Element>> interceptedElements;  
+  final Map<SourceString, Set<Element>> interceptedElements;  
 
   List<CompilerTask> get tasks {
     return <CompilerTask>[builder, optimizer, generator, emitter];
   }
 
+  final RuntimeTypeInformation rti;
+
   JavaScriptBackend(Compiler compiler, bool generateSourceMap, bool disableEval)
       : namer = determineNamer(compiler),
         returnInfo = new Map<Element, ReturnInfo>(),
         invalidateAfterCodegen = new List<Element>(),
         interceptors = new Interceptors(compiler),
         usedInterceptors = new Set<Selector>(),
-        interceptedElements = new Map<SourceString, List<Element>>(),
+        interceptedElements = new Map<SourceString, Set<Element>>(),
+        rti = new RuntimeTypeInformation(compiler),
         super(compiler, JAVA_SCRIPT_CONSTANT_SYSTEM) {
     emitter = disableEval
         ? new CodeEmitterNoEvalTask(compiler, namer, generateSourceMap)
@@ -717,20 +729,36 @@
 
   bool isInterceptorClass(Element element) {
     if (element == null) return false;
-    return element == jsStringClass || element == jsArrayClass;
+    return element == jsStringClass
+        || element == jsArrayClass
+        || element == jsIntClass
+        || element == jsDoubleClass
+        || element == jsNullClass
+        || element == jsFunctionClass
+        || element == jsBoolClass
+        || element == jsNumberClass;
   }
 
   void addInterceptedSelector(Selector selector) {
     usedInterceptors.add(selector);
   }
 
-  bool shouldInterceptSelector(Selector selector) {
-    List<Element> intercepted = interceptedElements[selector.name];
-    if (intercepted == null) return false;
+  /**
+   * Returns a set of interceptor classes that contain a member whose
+   * signature matches the given [selector]. Returns [:null:] if there
+   * is no class.
+   */
+  Set<ClassElement> getInterceptedClassesOn(Selector selector) {
+    Set<Element> intercepted = interceptedElements[selector.name];
+    if (intercepted == null) return null;
+    Set<ClassElement> result = new Set<ClassElement>();
     for (Element element in intercepted) {
-      if (selector.applies(element, compiler)) return true;
+      if (selector.applies(element, compiler)) {
+        result.add(element.getEnclosingClass());
+      }
     }
-    return false;
+    if (result.isEmpty) return null;
+    return result;
   }
 
   void initializeInterceptorElements() {
@@ -738,35 +766,75 @@
         compiler.findInterceptor(const SourceString('ObjectInterceptor'));
     getInterceptorMethod =
         compiler.findInterceptor(const SourceString('getInterceptor'));
+    jsStringClass =
+        compiler.findInterceptor(const SourceString('JSString'));
+    jsArrayClass =
+        compiler.findInterceptor(const SourceString('JSArray'));
+    jsNumberClass =
+        compiler.findInterceptor(const SourceString('JSNumber'));
+    jsIntClass =
+        compiler.findInterceptor(const SourceString('JSInt'));
+    jsDoubleClass =
+        compiler.findInterceptor(const SourceString('JSDouble'));
+    jsNullClass =
+        compiler.findInterceptor(const SourceString('JSNull'));
+    jsFunctionClass =
+        compiler.findInterceptor(const SourceString('JSFunction'));
+    jsBoolClass =
+        compiler.findInterceptor(const SourceString('JSBool'));
+    jsArrayClass.ensureResolved(compiler);
+    jsArrayLength =
+        jsArrayClass.lookupLocalMember(const SourceString('length'));
+    jsStringClass.ensureResolved(compiler);
+    jsStringLength =
+        jsStringClass.lookupLocalMember(const SourceString('length'));
   }
 
+  void addInterceptors(ClassElement cls) {
+    cls.ensureResolved(compiler);
+    cls.forEachMember((ClassElement classElement, Element member) {
+        Set<Element> set = interceptedElements.putIfAbsent(
+            member.name, () => new Set<Element>());
+        set.add(member);
+      },
+      includeSuperMembers: true);
+  }
 
   void registerInstantiatedClass(ClassElement cls, Enqueuer enqueuer) {
     ClassElement result = null;
-    if (cls == compiler.stringClass) {
-      if (jsStringClass == null) {
-        jsStringClass =
-            compiler.findInterceptor(const SourceString('JSString'));
-        initializeInterceptorElements();
+    if (!_interceptorsAreInitialized) {
+      initializeInterceptorElements();
+      _interceptorsAreInitialized = true;
+      // The null interceptor and the function interceptor are
+      // currently always instantiated if a new class is instantiated.
+      // TODO(ngeoffray): do this elsewhere for the function
+      // interceptor?
+      if (jsNullClass != null) {
+        addInterceptors(jsNullClass);
+        enqueuer.registerInstantiatedClass(jsNullClass);
       }
+      if (jsFunctionClass != null) {
+        addInterceptors(jsFunctionClass);
+        enqueuer.registerInstantiatedClass(jsFunctionClass);
+      }
+      enqueuer.addToWorkList(getInterceptorMethod);
+    }
+    if (cls == compiler.stringClass) {
       result = jsStringClass;
     } else if (cls == compiler.listClass) {
-      if (jsArrayClass == null) {
-        jsArrayClass =
-            compiler.findInterceptor(const SourceString('JSArray'));
-        initializeInterceptorElements();
-      }
       result = jsArrayClass;
+    } else if (cls == compiler.intClass) {
+      result = jsIntClass;
+    } else if (cls == compiler.doubleClass) {
+      result = jsDoubleClass;
+    } else if (cls == compiler.functionClass) {
+      result = jsFunctionClass;
+    } else if (cls == compiler.boolClass) {
+      result = jsBoolClass;
     }
 
     if (result == null) return;
-
-    result.forEachMember((_, Element member) {
-      List<Element> list = interceptedElements.putIfAbsent(
-          member.name, () => new List<Element>());
-      list.add(member);
-    });
-
+    if (enqueuer.isResolutionQueue) addInterceptors(result);
     enqueuer.registerInstantiatedClass(result);
   }
 
@@ -778,10 +846,6 @@
     return new JavaScriptItemCompilationContext();
   }
 
-  Element getInterceptor(Selector selector) {
-    return interceptors.getStaticInterceptor(selector);
-  }
-
   void enqueueHelpers(Enqueuer world) {
     enqueueAllTopLevelFunctions(compiler.jsHelperLibrary, world);
 
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/constant_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_backend/constant_emitter.dart
index a9e49c0..7635c6a 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/constant_emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/constant_emitter.dart
@@ -87,23 +87,12 @@
   /**
    * Write the contents of the quoted string to a [CodeBuffer] in
    * a form that is valid as JavaScript string literal content.
-   * The string is assumed quoted by single quote characters.
+   * The string is assumed quoted by double quote characters.
    */
-  void writeEscapedString(DartString string,
-                          CodeBuffer buffer,
-                          Node diagnosticNode) {
-    void onError(code) {
-      compiler.reportError(
-          diagnosticNode,
-          'Unhandled non-BMP character: U+${code.toRadixString(16)}');
-    }
-    writeJsonEscapedCharsOn(string.iterator(), buffer, onError);
-  }
-
   void visitString(StringConstant constant) {
-    buffer.add("'");
-    writeEscapedString(constant.value, buffer, constant.node);
-    buffer.add("'");
+    buffer.add('"');
+    writeJsonEscapedCharsOn(constant.value.slowToString(), buffer);
+    buffer.add('"');
   }
 
   void emitCanonicalVersion(Constant constant) {
@@ -196,6 +185,29 @@
     }
   }
 
+  void visitType(TypeConstant constant) {
+    if (shouldEmitCanonicalVersion) {
+      emitCanonicalVersion(constant);
+    } else {
+      SourceString helperSourceName =
+          const SourceString('createRuntimeType');
+      Element helper = compiler.findHelper(helperSourceName);
+      JavaScriptBackend backend = compiler.backend;
+      String helperName = backend.namer.getName(helper);
+      DartType type = constant.representedType;
+      Element element = type.element;
+      String typeName;
+      if (type.kind == TypeKind.INTERFACE) {
+        typeName =
+            backend.rti.getStringRepresentation(type, expandRawType: true);
+      } else {
+        assert(type.kind == TypeKind.TYPEDEF);
+        typeName = element.name.slowToString();
+      }
+      buffer.add("${namer.CURRENT_ISOLATE}.$helperName('$typeName')");
+    }
+  }
+
   void visitConstructed(ConstructedConstant constant) {
     if (shouldEmitCanonicalVersion) {
       emitCanonicalVersion(constant);
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart b/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
index e8ad203..12a8d4f 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
@@ -192,6 +192,7 @@
     constructor = new Function(str)();
   }
   constructor.prototype = prototype;
+  constructor.builtin\$cls = cls;
   return constructor;
 }""";
   }
@@ -236,7 +237,9 @@
   for (var cls in collectedClasses) {
     if (hasOwnProperty.call(collectedClasses, cls)) {
       var desc = collectedClasses[cls];
-      $isolatePropertiesName[cls] = $defineClassName(cls, desc[''], desc);
+'''/* If the class does not have any declared fields (in the ''
+      property of the description), then provide an empty list of fields. */'''
+      $isolatePropertiesName[cls] = $defineClassName(cls, desc[''] || [], desc);
       if (desc['super'] !== "") $pendingClassesName[cls] = desc['super'];
     }
   }
@@ -322,14 +325,21 @@
 
   String get lazyInitializerFunction {
     String isolate = namer.CURRENT_ISOLATE;
+    return """
+function(prototype, staticName, fieldName, getterName, lazyValue) {
+  var getter = new Function("{ return $isolate." + fieldName + ";}");
+$lazyInitializerLogic
+}""";
+  }
+
+  String get lazyInitializerLogic {
+    String isolate = namer.CURRENT_ISOLATE;
     JavaScriptBackend backend = compiler.backend;
     String cyclicThrow = namer.isolateAccess(backend.cyclicThrowHelper);
     return """
-function(prototype, staticName, fieldName, getterName, lazyValue) {
   var sentinelUndefined = {};
   var sentinelInProgress = {};
   prototype[fieldName] = sentinelUndefined;
-  var getter = new Function("{ return $isolate." + fieldName + ";}");
   prototype[getterName] = function() {
     var result = $isolate[fieldName];
     try {
@@ -350,8 +360,7 @@
     } finally {
       $isolate[getterName] = getter;
     }
-  };
-}""";
+  };""";
   }
 
   void addDefineClassAndFinishClassFunctionsIfNecessary(CodeBuffer buffer) {
@@ -671,12 +680,11 @@
    */
   void emitInstanceMembers(ClassElement classElement,
                            CodeBuffer buffer,
-                           bool needsLeadingComma) {
+                           bool emitLeadingComma) {
     assert(invariant(classElement, classElement.isDeclaration));
-    bool needsComma = needsLeadingComma;
     void defineInstanceMember(String name, StringBuffer memberBuffer) {
-      if (needsComma) buffer.add(',');
-      needsComma = true;
+      if (emitLeadingComma) buffer.add(',');
+      emitLeadingComma = true;
       buffer.add('\n');
       buffer.add(' $name: ');
       buffer.add(memberBuffer);
@@ -846,8 +854,9 @@
     /* Do nothing. */
   }
 
-  void emitClassFields(ClassElement classElement, CodeBuffer buffer) {
-    buffer.add('"": [');
+  void emitClassFields(ClassElement classElement,
+                       CodeBuffer buffer,
+                       bool emitEndingComma) {
     bool isFirstField = true;
     visitClassFields(classElement, (Element member,
                                     String name,
@@ -856,6 +865,7 @@
                                     bool needsSetter,
                                     bool needsCheckedSetter) {
       if (isFirstField) {
+        buffer.add('"": [');
         isFirstField = false;
       } else {
         buffer.add(", ");
@@ -876,12 +886,19 @@
       }
       buffer.add('"');
     });
-    buffer.add(']');
+    if (!isFirstField) {
+      // There was at least one field.
+      buffer.add(']');
+      if (emitEndingComma) {
+        buffer.add(',');
+      }
+    }
   }
 
   /** Each getter/setter must be prefixed with a ",\n ". */
-  void emitClassGettersSetters(ClassElement classElement, CodeBuffer buffer,
-                               {bool omitLeadingComma: false}) {
+  void emitClassGettersSetters(ClassElement classElement,
+                               CodeBuffer buffer,
+                               bool emitLeadingComma) {
     visitClassFields(classElement, (Element member,
                                     String name,
                                     String accessorName,
@@ -890,10 +907,10 @@
                                     bool needsCheckedSetter) {
       if (needsCheckedSetter) {
         assert(!needsSetter);
-        if (!omitLeadingComma) {
+        if (emitLeadingComma) {
           buffer.add(",\n ");
         } else {
-          omitLeadingComma = false;
+          emitLeadingComma = true;
         }
         generateCheckedSetter(member, name, accessorName, buffer);
       }
@@ -927,12 +944,12 @@
 
     buffer.add('$classesCollector.$className = {');
     emitClassConstructor(classElement, buffer);
-    emitClassFields(classElement, buffer);
+    emitClassFields(classElement, buffer, true);
     // TODO(floitsch): the emitInstanceMember should simply always emit a ',\n'.
     // That does currently not work because the native classes have a different
     // syntax.
-    buffer.add(',\n "super": "$superName"');
-    emitClassGettersSetters(classElement, buffer);
+    buffer.add('\n "super": "$superName"');
+    emitClassGettersSetters(classElement, buffer, true);
     emitInstanceMembers(classElement, buffer, true);
     buffer.add('\n};\n\n');
   }
@@ -951,7 +968,7 @@
       } else if (selector.isSetter()) {
         name = backend.namer.setterName(selector.library, selector.name);
       } else {
-        assert(selector.isCall());
+        assert(selector.isCall() || selector.isOperator());
         name = backend.namer.instanceMethodInvocationName(
             selector.library, selector.name, selector);
         if (selector.argumentCount > 0) {
@@ -1182,21 +1199,20 @@
 
     Map<int, String> cache;
     String extraArg;
-    String extraArgWithThis;
     String extraArgWithoutComma;
+    bool hasExtraArgument = false;
     // Methods on foreign classes take an extra parameter, which is
     // the actual receiver of the call.
     JavaScriptBackend backend = compiler.backend;
     if (backend.isInterceptorClass(member.getEnclosingClass())) {
+      hasExtraArgument = true;
       cache = interceptorClosureCache;
       extraArg = 'receiver, ';
-      extraArgWithThis = 'this.receiver, ';
       extraArgWithoutComma = 'receiver';
     } else {
       cache = boundClosureCache;
       extraArg = '';
       extraArgWithoutComma = '';
-      extraArgWithThis = '';
     }
 
     String closureClass =
@@ -1230,8 +1246,12 @@
       String joinedArgs = Strings.join(arguments, ", ");
       boundClosureBuffer.add(
           "$invocationName: function($joinedArgs) {");
-      boundClosureBuffer.add(
-          " return this.self[this.target]($extraArgWithThis$joinedArgs);");
+      String callArgs = hasExtraArgument
+          ? joinedArgs.isEmpty
+              ? 'this.$extraArgWithoutComma'
+              : 'this.$extraArg$joinedArgs'
+          : joinedArgs;
+      boundClosureBuffer.add(" return this.self[this.target]($callArgs);");
       boundClosureBuffer.add(" }");
       addParameterStubs(callElement, (String stubName, CodeBuffer memberValue) {
         boundClosureBuffer.add(',\n $stubName: $memberValue');
@@ -1333,11 +1353,16 @@
         buffer.add(namer.getLazyInitializerName(element));
         buffer.add("', ");
         buffer.add(code);
+        emitLazyInitializedGetter(element, buffer);
         buffer.add(");\n");
       }
     }
   }
 
+  void emitLazyInitializedGetter(VariableElement element, CodeBuffer buffer) {
+    // Nothing to do, the 'lazy' function will create the getter.
+  }
+
   void emitCompileTimeConstants(CodeBuffer buffer) {
     ConstantHandler handler = compiler.constantHandler;
     List<Constant> constants = handler.getConstantsForEmission();
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/emitter_no_eval.dart b/sdk/lib/_internal/compiler/implementation/js_backend/emitter_no_eval.dart
index 00563f0..0b3864e 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/emitter_no_eval.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/emitter_no_eval.dart
@@ -59,6 +59,18 @@
 }""";
   }
 
+  String get lazyInitializerFunction {
+    return """
+function(prototype, staticName, fieldName, getterName, lazyValue, getter) {
+$lazyInitializerLogic
+}""";
+  }
+
+  void emitLazyInitializedGetter(VariableElement element, CodeBuffer buffer) {
+    String isolate = namer.CURRENT_ISOLATE;
+    buffer.add(', function() { return $isolate.${namer.getName(element)}; }');
+  }
+
   void emitBoundClosureClassHeader(String mangledName,
                                    String superName,
                                    String extraArgument,
@@ -121,17 +133,20 @@
     buffer.add(' }');
   }
 
-  void emitClassFields(ClassElement classElement, CodeBuffer buffer) {
-    /* Do nothing. */
+  void emitClassFields(ClassElement classElement,
+                       CodeBuffer buffer,
+                       bool emitEndingComma) {
+    if (emitEndingComma) buffer.add(', ');
   }
 
-  void emitClassGettersSetters(ClassElement classElement, CodeBuffer buffer,
-                               {bool omitLeadingComma: false}) {
+  void emitClassGettersSetters(ClassElement classElement,
+                               CodeBuffer buffer,
+                               bool emitLeadingComma) {
     emitComma() {
-      if (!omitLeadingComma) {
+      if (emitLeadingComma) {
         buffer.add(",\n ");
       } else {
-        omitLeadingComma = false;
+        emitLeadingComma = true;
       }
     }
 
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart b/sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart
index 2a9d4da..f24e5ba 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart
@@ -8,6 +8,7 @@
 import '../../compiler.dart' as api;
 import '../elements/elements.dart';
 import '../dart2jslib.dart' hide Selector;
+import '../js/js.dart' as js;
 import '../native_handler.dart' as native;
 import '../source_file.dart';
 import '../source_map_builder.dart';
@@ -23,5 +24,6 @@
 part 'emitter.dart';
 part 'emitter_no_eval.dart';
 part 'namer.dart';
-part 'minify_namer.dart';
 part 'native_emitter.dart';
+part 'minify_namer.dart';
+part 'runtime_types.dart';
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/minify_namer.dart b/sdk/lib/_internal/compiler/implementation/js_backend/minify_namer.dart
index f252b54..8e292b4 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/minify_namer.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/minify_namer.dart
@@ -2,6 +2,8 @@
 // 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 js_backend;
+
 /**
  * Assigns JavaScript identifiers to Dart variables, class-names and members.
  */
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart b/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart
index 3d134c2..691d73b 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart
@@ -313,7 +313,6 @@
     } else {
       name = element.name.slowToString();
     }
-    // Prefix the name with '$' if it is reserved.
     return name;
   }
 
@@ -363,7 +362,6 @@
     } else {
       // Use declaration element to ensure invariant on [globals].
       element = element.declaration;
-
       // Dealing with a top-level or static element.
       String cached = globals[element];
       if (cached != null) return cached;
@@ -382,7 +380,8 @@
           kind == ElementKind.GETTER ||
           kind == ElementKind.SETTER ||
           kind == ElementKind.TYPEDEF ||
-          kind == ElementKind.LIBRARY) {
+          kind == ElementKind.LIBRARY ||
+          kind == ElementKind.MALFORMED_TYPE) {
         bool isNative = false;
         if (identical(kind, ElementKind.CLASS)) {
           ClassElement class_elt = element;
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart
index 7b92fcd..6e87ec4 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart
@@ -166,12 +166,10 @@
 
     CodeBuffer fieldBuffer = new CodeBuffer();
     CodeBuffer getterSetterBuffer = new CodeBuffer();
-
-    emitter.emitClassFields(classElement, fieldBuffer);
-    emitter.emitClassGettersSetters(classElement, getterSetterBuffer,
-                                    omitLeadingComma: true);
-
     CodeBuffer methodBuffer = new CodeBuffer();
+
+    emitter.emitClassFields(classElement, fieldBuffer, false);
+    emitter.emitClassGettersSetters(classElement, getterSetterBuffer, false);
     emitter.emitInstanceMembers(classElement, methodBuffer, false);
 
     if (methodBuffer.isEmpty
@@ -321,19 +319,20 @@
     // Temporary variables for common substrings.
     List<String> varNames = <String>[];
     // var -> expression
-    Map<String, String> varDefns = <String, String>{};
+    Map<dynamic, js.Expression> varDefns = new Map<dynamic, js.Expression>();
     // tag -> expression (a string or a variable)
-    Map<ClassElement, String> tagDefns = new Map<ClassElement, String>();
+    Map<ClassElement, js.Expression> tagDefns =
+        new Map<ClassElement, js.Expression>();
 
-    String makeExpression(ClassElement classElement) {
+    js.Expression makeExpression(ClassElement classElement) {
       // Expression fragments for this set of cls keys.
-      List<String> expressions = <String>[];
+      List<js.Expression> expressions = <js.Expression>[];
       // TODO: Remove if cls is abstract.
       List<String> subtags = [toNativeName(classElement)];
       void walk(ClassElement cls) {
         for (final ClassElement subclass in getDirectSubclasses(cls)) {
           ClassElement tag = subclass;
-          String existing = tagDefns[tag];
+          var existing = tagDefns[tag];
           if (existing == null) {
             subtags.add(toNativeName(tag));
             walk(subclass);
@@ -341,23 +340,28 @@
             if (varDefns.containsKey(existing)) {
               expressions.add(existing);
             } else {
-              String varName = 'v${varNames.length}/*${tag}*/';
+              String varName = 'v${varNames.length}_${tag.name.slowToString()}';
               varNames.add(varName);
               varDefns[varName] = existing;
-              tagDefns[tag] = varName;
-              expressions.add(varName);
+              tagDefns[tag] = new js.VariableUse(varName);
+              expressions.add(new js.VariableUse(varName));
             }
           }
         }
       }
       walk(classElement);
-      String constantPart = "'${Strings.join(subtags, '|')}'";
-      if (constantPart != "''") expressions.add(constantPart);
-      String expression;
+      if (!subtags.isEmpty) {
+        expressions.add(
+            new js.LiteralString("'${Strings.join(subtags, '|')}'"));
+      }
+      js.Expression expression;
       if (expressions.length == 1) {
         expression = expressions[0];
       } else {
-        expression = "[${Strings.join(expressions, ',')}].join('|')";
+        js.Expression array = new js.ArrayInitializer.from(expressions);
+        expression = new js.Call(
+            new js.PropertyAccess.field(array, 'join'),
+            [new js.LiteralString("'|'")]);
       }
       return expression;
     }
@@ -368,27 +372,46 @@
 
     // Write out a thunk that builds the metadata.
     if (!tagDefns.isEmpty) {
-      nativeBuffer.add('(function(){\n');
+      List<js.Statement> statements = <js.Statement>[];
 
+      List<js.VariableInitialization> initializations =
+          <js.VariableInitialization>[];
       for (final String varName in varNames) {
-        nativeBuffer.add('  var ${varName} = ${varDefns[varName]};\n');
+        initializations.add(
+            new js.VariableInitialization(
+                new js.VariableDeclaration(varName),
+                varDefns[varName]));
+      }
+      if (!initializations.isEmpty) {
+        statements.add(
+            new js.ExpressionStatement(
+                new js.VariableDeclarationList(initializations)));
       }
 
-      nativeBuffer.add('  var table = [\n');
+      // [table] is a list of lists, each inner list of the form:
+      //   [dynamic-dispatch-tag, tags-of-classes-implementing-dispatch-tag]
+      // E.g.
+      //   [['Node', 'Text|HTMLElement|HTMLDivElement|...'], ...]
+      js.Expression table =
+          new js.ArrayInitializer.from(
+              dispatchClasses.map((cls) =>
+                  new js.ArrayInitializer.from([
+                      new js.LiteralString("'${toNativeName(cls)}'"),
+                      tagDefns[cls]])));
+
+      //  $.dynamicSetMetadata(table);
+      statements.add(
+          new js.ExpressionStatement(
+              new js.Call(
+                  new js.VariableUse(dynamicSetMetadataName),
+                  [table])));
+
+      //  (function(){statements})();
       nativeBuffer.add(
-          '    // [dynamic-dispatch-tag, '
-          'tags of classes implementing dynamic-dispatch-tag]');
-      bool needsComma = false;
-      List<String> entries = <String>[];
-      for (final ClassElement cls in dispatchClasses) {
-        String clsName = toNativeName(cls);
-        entries.add("\n    ['$clsName', ${tagDefns[cls]}]");
-      }
-      nativeBuffer.add(Strings.join(entries, ','));
-      nativeBuffer.add('];\n');
-      nativeBuffer.add('$dynamicSetMetadataName(table);\n');
-
-      nativeBuffer.add('})();\n');
+          js.prettyPrint(
+              new js.ExpressionStatement(
+                  new js.Call(new js.Fun([], new js.Block(statements)), [])),
+              compiler));
     }
   }
 
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/runtime_types.dart b/sdk/lib/_internal/compiler/implementation/js_backend/runtime_types.dart
new file mode 100644
index 0000000..2064f09
--- /dev/null
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/runtime_types.dart
@@ -0,0 +1,65 @@
+// Copyright (c) 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.
+
+part of js_backend;
+
+class RuntimeTypeInformation {
+  final Compiler compiler;
+
+  RuntimeTypeInformation(this.compiler);
+
+  // TODO(karlklose): remove when using type representations.
+  String getStringRepresentation(DartType type, {bool expandRawType: false}) {
+    StringBuffer builder = new StringBuffer();
+    void build(DartType t) {
+      if (t is TypeVariableType) {
+        builder.add(t.name.slowToString());
+        return;
+      }
+      JavaScriptBackend backend = compiler.backend;
+      builder.add(backend.namer.getName(t.element));
+      if (t is InterfaceType) {
+        InterfaceType interface = t;
+        ClassElement element = t.element;
+        if (element.typeVariables.isEmpty) return;
+        bool isRaw = interface.typeArguments.isEmpty;
+        if (isRaw && !expandRawType) return;
+        builder.add('<');
+        Iterable items =
+            isRaw ? element.typeVariables : interface.typeArguments;
+        var stringify = isRaw ? (_) => 'dynamic' : (type) => type.toString();
+        bool first = true;
+        for (var item in items) {
+          if (first) {
+            first = false;
+          } else {
+            builder.add(', ');
+          }
+          builder.add(stringify(item));
+        }
+        builder.add('>');
+      }
+    }
+
+    build(type);
+    return builder.toString();
+  }
+
+  static bool hasTypeArguments(DartType type) {
+    if (type is InterfaceType) {
+      InterfaceType interfaceType = type;
+      return !interfaceType.typeArguments.isEmpty;
+    }
+    return false;
+  }
+
+  static int getTypeVariableIndex(TypeVariableType variable) {
+    ClassElement classElement = variable.element.getEnclosingClass();
+    Link<DartType> variables = classElement.typeVariables;
+    for (int index = 0; !variables.isEmpty;
+         index++, variables = variables.tail) {
+      if (variables.head == variable) return index;
+    }
+  }
+}
diff --git a/sdk/lib/_internal/compiler/implementation/lib/core_patch.dart b/sdk/lib/_internal/compiler/implementation/lib/core_patch.dart
index 253c1fa..21cf6e1 100644
--- a/sdk/lib/_internal/compiler/implementation/lib/core_patch.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/core_patch.dart
@@ -82,7 +82,7 @@
   patch static double parse(String source) => Primitives.parseDouble(source);
 }
 
-patch class NoSuchMethodError {
+patch class Error {
   patch static String _objectToString(Object object) {
     return Primitives.objectToString(object);
   }
@@ -154,22 +154,13 @@
 
 
 // Patch for List implementation.
-patch class _ListImpl<E> {
+patch class List<E> {
   patch factory List([int length]) => Primitives.newList(length);
-
-  patch factory List.from(Iterable<E> other) {
-    var result = new List();
-    for (var element in other) {
-      result.add(element);
-    }
-    return result;
-  }
 }
 
 
 patch class String {
   patch factory String.fromCharCodes(List<int> charCodes) {
-    checkNull(charCodes);
     if (!isJsArray(charCodes)) {
       if (charCodes is !List) throw new ArgumentError(charCodes);
       charCodes = new List.from(charCodes);
@@ -182,7 +173,6 @@
 patch class Strings {
   patch static String join(List<String> strings, String separator) {
     checkNull(strings);
-    checkNull(separator);
     if (separator is !String) throw new ArgumentError(separator);
     return stringJoinUnchecked(_toJsStringArray(strings), separator);
   }
@@ -199,14 +189,12 @@
       array = strings;
       for (int i = 0; i < length; i++) {
         final string = strings[i];
-        checkNull(string);
         if (string is !String) throw new ArgumentError(string);
       }
     } else {
       array = new List(length);
       for (int i = 0; i < length; i++) {
         final string = strings[i];
-        checkNull(string);
         if (string is !String) throw new ArgumentError(string);
         array[i] = string;
       }
diff --git a/sdk/lib/_internal/compiler/implementation/lib/interceptors.dart b/sdk/lib/_internal/compiler/implementation/lib/interceptors.dart
index ca685dc..c87e763 100644
--- a/sdk/lib/_internal/compiler/implementation/lib/interceptors.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/interceptors.dart
@@ -7,6 +7,7 @@
 import 'dart:collection';
 
 part 'js_array.dart';
+part 'js_number.dart';
 part 'js_string.dart';
 
 /**
@@ -25,465 +26,45 @@
 getInterceptor(object) {
   if (object is String) return const JSString();
   if (isJsArray(object)) return const JSArray();
+  if (object is int) return const JSInt();
+  if (object is double) return const JSDouble();
+  if (object is bool) return const JSBool();
+  if (object == null) return const JSNull();
+  if (JS('String', 'typeof #', object) == 'function') return const JSFunction();
   return const ObjectInterceptor();
 }
 
-get$length(var receiver) {
-  if (receiver is String || isJsArray(receiver)) {
-    return JS('num', r'#.length', receiver);  // TODO(sra): Use 'int'?
-  } else {
-    return UNINTERCEPTED(receiver.length);
-  }
-}
-
-set$length(receiver, newLength) {
-  if (isJsArray(receiver)) {
-    checkNull(newLength); // TODO(ahe): This is not specified but co19 tests it.
-    if (newLength is !int) throw new ArgumentError(newLength);
-    if (newLength < 0) throw new RangeError.value(newLength);
-    checkGrowable(receiver, 'set length');
-    JS('void', r'#.length = #', receiver, newLength);
-  } else {
-    UNINTERCEPTED(receiver.length = newLength);
-  }
-  return newLength;
-}
-
-toString(var value) {
-  if (JS('bool', r'typeof # == "object" && # != null', value, value)) {
-    if (isJsArray(value)) {
-      return Collections.collectionToString(value);
-    } else {
-      return UNINTERCEPTED(value.toString());
-    }
-  }
-  if (JS('bool', r'# === 0 && (1 / #) < 0', value, value)) {
-    return '-0.0';
-  }
-  if (value == null) return 'null';
-  if (JS('bool', r'typeof # == "function"', value)) {
-    return 'Closure';
-  }
-  return JS('String', r'String(#)', value);
-}
-
-get$isEmpty(receiver) {
-  if (receiver is String || isJsArray(receiver)) {
-    return JS('bool', r'#.length === 0', receiver);
-  }
-  return UNINTERCEPTED(receiver.isEmpty);
-}
-
-compareTo(a, b) {
-  if (checkNumbers(a, b)) {
-    if (a < b) {
-      return -1;
-    } else if (a > b) {
-      return 1;
-    } else if (a == b) {
-      if (a == 0) {
-        bool aIsNegative = a.isNegative;
-        bool bIsNegative = b.isNegative;
-        if (aIsNegative == bIsNegative) return 0;
-        if (aIsNegative) return -1;
-        return 1;
-      }
-      return 0;
-    } else if (a.isNaN) {
-      if (b.isNaN) {
-        return 0;
-      }
-      return 1;
-    } else {
-      return -1;
-    }
-  } else if (a is String) {
-    if (b is !String) throw new ArgumentError(b);
-    return JS('bool', r'# == #', a, b) ? 0
-      : JS('bool', r'# < #', a, b) ? -1 : 1;
-  } else {
-    return UNINTERCEPTED(a.compareTo(b));
-  }
-}
-
-iterator(receiver) {
-  if (isJsArray(receiver)) {
-    return new ListIterator(receiver);
-  }
-  return UNINTERCEPTED(receiver.iterator());
-}
-
-indexOf$1(receiver, element) {
-  if (isJsArray(receiver)) {
-    var length = JS('num', r'#.length', receiver);
-    return Arrays.indexOf(receiver, element, 0, length);
-  } else if (receiver is String) {
-    checkNull(element);
-    if (element is !String) throw new ArgumentError(element);
-    return JS('int', r'#.indexOf(#)', receiver, element);
-  }
-  return UNINTERCEPTED(receiver.indexOf(element));
-}
-
-indexOf$2(receiver, element, start) {
-  if (isJsArray(receiver)) {
-    if (start is !int) throw new ArgumentError(start);
-    var length = JS('num', r'#.length', receiver);
-    return Arrays.indexOf(receiver, element, start, length);
-  } else if (receiver is String) {
-    checkNull(element);
-    if (start is !int) throw new ArgumentError(start);
-    if (element is !String) throw new ArgumentError(element);
-    if (start < 0) return -1; // TODO(ahe): Is this correct?
-    return JS('int', r'#.indexOf(#, #)', receiver, element, start);
-  }
-  return UNINTERCEPTED(receiver.indexOf(element, start));
-}
-
-insertRange$2(receiver, start, length) {
-  if (isJsArray(receiver)) {
-    return insertRange$3(receiver, start, length, null);
-  }
-  return UNINTERCEPTED(receiver.insertRange(start, length));
-}
-
-insertRange$3(receiver, start, length, initialValue) {
-  if (!isJsArray(receiver)) {
-    return UNINTERCEPTED(receiver.insertRange(start, length, initialValue));
-  }
-  return listInsertRange(receiver, start, length, initialValue);
-}
-
-get$last(receiver) {
-  if (!isJsArray(receiver)) {
-    return UNINTERCEPTED(receiver.last);
-  }
-  return receiver[receiver.length - 1];
-}
-
-lastIndexOf$1(receiver, element) {
-  if (isJsArray(receiver)) {
-    var start = JS('num', r'#.length', receiver);
-    return Arrays.lastIndexOf(receiver, element, start);
-  } else if (receiver is String) {
-    checkNull(element);
-    if (element is !String) throw new ArgumentError(element);
-    return JS('int', r'#.lastIndexOf(#)', receiver, element);
-  }
-  return UNINTERCEPTED(receiver.lastIndexOf(element));
-}
-
-lastIndexOf$2(receiver, element, start) {
-  if (isJsArray(receiver)) {
-    return Arrays.lastIndexOf(receiver, element, start);
-  } else if (receiver is String) {
-    checkNull(element);
-    if (element is !String) throw new ArgumentError(element);
-    if (start != null) {
-      if (start is !num) throw new ArgumentError(start);
-      if (start < 0) return -1;
-      if (start >= receiver.length) {
-        if (element == "") return receiver.length;
-        start = receiver.length - 1;
-      }
-    }
-    return stringLastIndexOfUnchecked(receiver, element, start);
-  }
-  return UNINTERCEPTED(receiver.lastIndexOf(element, start));
-}
-
-removeRange(receiver, start, length) {
-  if (!isJsArray(receiver)) {
-    return UNINTERCEPTED(receiver.removeRange(start, length));
-  }
-  checkGrowable(receiver, 'removeRange');
-  if (length == 0) {
-    return;
-  }
-  checkNull(start); // TODO(ahe): This is not specified but co19 tests it.
-  checkNull(length); // TODO(ahe): This is not specified but co19 tests it.
-  if (start is !int) throw new ArgumentError(start);
-  if (length is !int) throw new ArgumentError(length);
-  if (length < 0) throw new ArgumentError(length);
-  var receiverLength = JS('num', r'#.length', receiver);
-  if (start < 0 || start >= receiverLength) {
-    throw new RangeError.value(start);
-  }
-  if (start + length > receiverLength) {
-    throw new RangeError.value(start + length);
-  }
-  Arrays.copy(receiver,
-              start + length,
-              receiver,
-              start,
-              receiverLength - length - start);
-  receiver.length = receiverLength - length;
-}
-
-setRange$3(receiver, start, length, from) {
-  if (isJsArray(receiver)) {
-    return setRange$4(receiver, start, length, from, 0);
-  }
-  return UNINTERCEPTED(receiver.setRange(start, length, from));
-}
-
-setRange$4(receiver, start, length, from, startFrom) {
-  if (!isJsArray(receiver)) {
-    return UNINTERCEPTED(receiver.setRange(start, length, from, startFrom));
-  }
-
-  checkMutable(receiver, 'indexed set');
-  if (length == 0) return;
-  checkNull(start); // TODO(ahe): This is not specified but co19 tests it.
-  checkNull(length); // TODO(ahe): This is not specified but co19 tests it.
-  checkNull(from); // TODO(ahe): This is not specified but co19 tests it.
-  checkNull(startFrom); // TODO(ahe): This is not specified but co19 tests it.
-  if (start is !int) throw new ArgumentError(start);
-  if (length is !int) throw new ArgumentError(length);
-  if (startFrom is !int) throw new ArgumentError(startFrom);
-  if (length < 0) throw new ArgumentError(length);
-  if (start < 0) throw new RangeError.value(start);
-  if (start + length > receiver.length) {
-    throw new RangeError.value(start + length);
-  }
-
-  Arrays.copy(from, startFrom, receiver, start, length);
-}
-
-some(receiver, f) {
-  if (!isJsArray(receiver)) {
-    return UNINTERCEPTED(receiver.some(f));
-  } else {
-    return Collections.some(receiver, f);
-  }
-}
-
-every(receiver, f) {
-  if (!isJsArray(receiver)) {
-    return UNINTERCEPTED(receiver.every(f));
-  } else {
-    return Collections.every(receiver, f);
-  }
-}
-
-// TODO(ngeoffray): Make it possible to have just one "sort" function ends
-// an optional parameter.
-
-sort$0(receiver) {
-  if (!isJsArray(receiver)) return UNINTERCEPTED(receiver.sort());
-  checkMutable(receiver, 'sort');
-  coreSort(receiver, Comparable.compare);
-}
-
-sort$1(receiver, compare) {
-  if (!isJsArray(receiver)) return UNINTERCEPTED(receiver.sort(compare));
-  checkMutable(receiver, 'sort');
-  coreSort(receiver, compare);
-}
-
-get$isNegative(receiver) {
-  if (receiver is num) {
-    return (receiver == 0) ? (1 / receiver) < 0 : receiver < 0;
-  } else {
-    return UNINTERCEPTED(receiver.isNegative);
-  }
-}
-
-get$isNaN(receiver) {
-  if (receiver is num) {
-    return JS('bool', r'isNaN(#)', receiver);
-  } else {
-    return UNINTERCEPTED(receiver.isNaN);
-  }
-}
-
-remainder(a, b) {
-  if (checkNumbers(a, b)) {
-    return JS('num', r'# % #', a, b);
-  } else {
-    return UNINTERCEPTED(a.remainder(b));
-  }
-}
-
-abs(receiver) {
-  if (receiver is !num) return UNINTERCEPTED(receiver.abs());
-
-  return JS('num', r'Math.abs(#)', receiver);
-}
-
-toInt(receiver) {
-  if (receiver is !num) return UNINTERCEPTED(receiver.toInt());
-
-  if (receiver.isNaN) throw new FormatException('NaN');
-
-  if (receiver.isInfinite) throw new FormatException('Infinity');
-
-  var truncated = receiver.truncate();
-  return JS('bool', r'# == -0.0', truncated) ? 0 : truncated;
-}
-
-ceil(receiver) {
-  if (receiver is !num) return UNINTERCEPTED(receiver.ceil());
-
-  return JS('num', r'Math.ceil(#)', receiver);
-}
-
-floor(receiver) {
-  if (receiver is !num) return UNINTERCEPTED(receiver.floor());
-
-  return JS('num', r'Math.floor(#)', receiver);
-}
-
-get$isInfinite(receiver) {
-  if (receiver is !num) return UNINTERCEPTED(receiver.isInfinite);
-
-  return JS('bool', r'# == Infinity', receiver)
-    || JS('bool', r'# == -Infinity', receiver);
-}
-
-round(receiver) {
-  if (receiver is !num) return UNINTERCEPTED(receiver.round());
-
-  if (JS('bool', r'# < 0', receiver)) {
-    return JS('num', r'-Math.round(-#)', receiver);
-  } else {
-    return JS('num', r'Math.round(#)', receiver);
-  }
-}
-
-toDouble(receiver) {
-  if (receiver is !num) return UNINTERCEPTED(receiver.toDouble());
-
-  return receiver;
-}
-
-truncate(receiver) {
-  if (receiver is !num) return UNINTERCEPTED(receiver.truncate());
-
-  return receiver < 0 ? receiver.ceil() : receiver.floor();
-}
-
-toStringAsFixed(receiver, fractionDigits) {
-  if (receiver is !num) {
-    return UNINTERCEPTED(receiver.toStringAsFixed(fractionDigits));
-  }
-  checkNum(fractionDigits);
-
-  String result = JS('String', r'#.toFixed(#)', receiver, fractionDigits);
-  if (receiver == 0 && receiver.isNegative) return "-$result";
-  return result;
-}
-
-toStringAsExponential(receiver, fractionDigits) {
-  if (receiver is !num) {
-    return UNINTERCEPTED(receiver.toStringAsExponential(fractionDigits));
-  }
-  String result;
-  if (fractionDigits != null) {
-    checkNum(fractionDigits);
-    result = JS('String', r'#.toExponential(#)', receiver, fractionDigits);
-  } else {
-    result = JS('String', r'#.toExponential()', receiver);
-  }
-  if (receiver == 0 && receiver.isNegative) return "-$result";
-  return result;
-}
-
-toStringAsPrecision(receiver, fractionDigits) {
-  if (receiver is !num) {
-    return UNINTERCEPTED(receiver.toStringAsPrecision(fractionDigits));
-  }
-  checkNum(fractionDigits);
-
-  String result = JS('String', r'#.toPrecision(#)',
-                     receiver, fractionDigits);
-  if (receiver == 0 && receiver.isNegative) return "-$result";
-  return result;
-}
-
-toRadixString(receiver, radix) {
-  if (receiver is !num) {
-    return UNINTERCEPTED(receiver.toRadixString(radix));
-  }
-  checkNum(radix);
-  if (radix < 2 || radix > 36) throw new ArgumentError(radix);
-  return JS('String', r'#.toString(#)', receiver, radix);
-}
-
-contains$1(receiver, other) {
-  if (receiver is String) {
-    return contains$2(receiver, other, 0);
-  } else if (isJsArray(receiver)) {
-    for (int i = 0; i < receiver.length; i++) {
-      if (other == receiver[i]) return true;
-    }
-    return false;
-  }
-  return UNINTERCEPTED(receiver.contains(other));
-}
-
-contains$2(receiver, other, startIndex) {
-  if (receiver is !String) {
-    return UNINTERCEPTED(receiver.contains(other, startIndex));
-  }
-  checkNull(other);
-  return stringContainsUnchecked(receiver, other, startIndex);
+/**
+ * The interceptor class for tear-off static methods. Unlike
+ * tear-off instance methods, tear-off static methods are just the JS
+ * function, and methods inherited from Object must therefore be
+ * intercepted.
+ */
+class JSFunction implements Function {
+  const JSFunction();
+  String toString() => 'Closure';
 }
 
 /**
- * This is the [Jenkins hash function][1] but using masking to keep
- * values in SMI range.
- *
- * [1]: http://en.wikipedia.org/wiki/Jenkins_hash_function
+ * The interceptor class for [bool].
  */
-get$hashCode(receiver) {
-  // TODO(ahe): This method shouldn't have to use JS. Update when our
-  // optimizations are smarter.
-  if (receiver == null) return 0;
-  if (receiver is num) return receiver & 0x1FFFFFFF;
-  if (receiver is bool) return receiver ? 0x40377024 : 0xc18c0076;
-  if (isJsArray(receiver)) return Primitives.objectHashCode(receiver);
-  if (receiver is !String) return UNINTERCEPTED(receiver.hashCode);
-  int hash = 0;
-  int length = receiver.length;
-  for (int i = 0; i < length; i++) {
-    hash = 0x1fffffff & (hash + JS('int', r'#.charCodeAt(#)', receiver, i));
-    hash = 0x1fffffff & (hash + (0x0007ffff & hash) << 10);
-    hash = JS('int', '# ^ (# >> 6)', hash, hash);
-  }
-  hash = 0x1fffffff & (hash + (0x03ffffff & hash) <<  3);
-  hash = JS('int', '# ^ (# >> 11)', hash, hash);
-  return 0x1fffffff & (hash + (0x00003fff & hash) << 15);
+class JSBool implements bool {
+  const JSBool();
+  String toString() => JS('String', r'String(#)', this);
+
+  // The values here are SMIs, co-prime and differ about half of the bit
+  // positions, including the low bit, so they are different mod 2^k.
+  int get hashCode => this ? (2 * 3 * 23 * 3761) : (269 * 811);
+
+  Type get runtimeType => bool;
 }
 
-get$isEven(receiver) {
-  if (receiver is !int) return UNINTERCEPTED(receiver.isEven);
-  return (receiver & 1) == 0;
+/**
+ * The interceptor class for [Null].
+ */
+class JSNull implements Null {
+  const JSNull();
+  String toString() => 'null';
+  int get hashCode => 0;
+  Type get runtimeType => createRuntimeType('Null');
 }
-
-get$isOdd(receiver) {
-  if (receiver is !int) return UNINTERCEPTED(receiver.isOdd);
-  return (receiver & 1) == 1;
-}
-
-get$runtimeType(receiver) {
-  if (receiver is int) {
-    return createRuntimeType('int');
-  } else if (receiver is String) {
-    return createRuntimeType('String');
-  } else if (receiver is double) {
-    return createRuntimeType('double');
-  } else if (receiver is bool) {
-    return createRuntimeType('bool');
-  } else if (receiver == null) {
-    return createRuntimeType('Null');
-  } else if (isJsArray(receiver)) {
-    return createRuntimeType('List');
-  } else {
-    return UNINTERCEPTED(receiver.runtimeType);
-  }
-}
-
-// TODO(lrn): These getters should be generated automatically for all
-// intercepted methods.
-get$toString(receiver) => () => toString(receiver);
diff --git a/sdk/lib/_internal/compiler/implementation/lib/io_patch.dart b/sdk/lib/_internal/compiler/implementation/lib/io_patch.dart
index e06bd18..a253935 100644
--- a/sdk/lib/_internal/compiler/implementation/lib/io_patch.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/io_patch.dart
@@ -167,15 +167,16 @@
   patch factory Socket(String host, int port) => new _Socket(host, port);
 }
 
-patch class TlsSocket {
-  patch static void setCertificateDatabase(String pkcertDirectory) {
-    throw new UnsupportedError("TlsSocket.setCertificateDatabase");
+patch class SecureSocket {
+  patch static void setCertificateDatabase(String certificateDatabase,
+                                           [String password]) {
+    throw new UnsupportedError("SecureSocket.setCertificateDatabase");
   }
 }
 
-patch class _TlsFilter {
-  patch factory _TlsFilter() {
-    throw new UnsupportedError("_TlsFilter._TlsFilter");
+patch class _SecureFilter {
+  patch factory _SecureFilter() {
+    throw new UnsupportedError("_SecureFilter._SecureFilter");
   }
 }
 
diff --git a/sdk/lib/_internal/compiler/implementation/lib/js_array.dart b/sdk/lib/_internal/compiler/implementation/lib/js_array.dart
index 9f5db9b..a4f069d 100644
--- a/sdk/lib/_internal/compiler/implementation/lib/js_array.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/js_array.dart
@@ -38,7 +38,7 @@
   }
 
   void addAll(Collection<E> collection) {
-    for (Element e in collection) {
+    for (E e in collection) {
       this.add(e);
     }
   }
@@ -78,6 +78,106 @@
       throw new RangeError.value(length);
     }
     if (length < 0) throw new ArgumentError(length);
-    return JS('List', r'#.slice(#, #)', this, start, end);
+    return JS('=List', r'#.slice(#, #)', this, start, end);
+  }
+
+  void insertRange(int start, int length, [E initialValue]) {
+    return listInsertRange(this, start, length, initialValue);
+  }
+
+  E get last => this[length - 1];
+
+  E get first => this[0];
+
+  void removeRange(int start, int length) {
+    checkGrowable(this, 'removeRange');
+    if (length == 0) {
+      return;
+    }
+    checkNull(start); // TODO(ahe): This is not specified but co19 tests it.
+    checkNull(length); // TODO(ahe): This is not specified but co19 tests it.
+    if (start is !int) throw new ArgumentError(start);
+    if (length is !int) throw new ArgumentError(length);
+    if (length < 0) throw new ArgumentError(length);
+    var receiverLength = this.length;
+    if (start < 0 || start >= receiverLength) {
+      throw new RangeError.value(start);
+    }
+    if (start + length > receiverLength) {
+      throw new RangeError.value(start + length);
+    }
+    Arrays.copy(this,
+                start + length,
+                this,
+                start,
+                receiverLength - length - start);
+    this.length = receiverLength - length;
+  }
+
+  void setRange(int start, int length, List<E> from, [int startFrom = 0]) {
+    checkMutable(this, 'indexed set');
+    if (length == 0) return;
+    checkNull(start); // TODO(ahe): This is not specified but co19 tests it.
+    checkNull(length); // TODO(ahe): This is not specified but co19 tests it.
+    checkNull(from); // TODO(ahe): This is not specified but co19 tests it.
+    checkNull(startFrom); // TODO(ahe): This is not specified but co19 tests it.
+    if (start is !int) throw new ArgumentError(start);
+    if (length is !int) throw new ArgumentError(length);
+    if (startFrom is !int) throw new ArgumentError(startFrom);
+    if (length < 0) throw new ArgumentError(length);
+    if (start < 0) throw new RangeError.value(start);
+    if (start + length > this.length) {
+      throw new RangeError.value(start + length);
+    }
+
+    Arrays.copy(from, startFrom, this, start, length);
+  }
+
+  bool some(bool f(E element)) => Collections.some(this, f);
+
+  bool every(bool f(E element)) => Collections.every(this, f);
+
+  void sort([Comparator<E> compare = Comparable.compare]) {
+    checkMutable(this, 'sort');
+    coreSort(this, compare);
+  }
+
+  int indexOf(E element, [int start = 0]) {
+    if (start is !int) throw new ArgumentError(start);
+    return Arrays.indexOf(this, element, start, length);
+  }
+
+  int lastIndexOf(E element, [int start]) {
+    if (start == null) start = this.length - 1;
+    return Arrays.lastIndexOf(this, element, start);
+  }
+
+  bool contains(E other) {
+    for (int i = 0; i < length; i++) {
+      if (other == this[i]) return true;
+    }
+    return false;
+  }
+
+  bool get isEmpty => length == 0;
+
+  String toString() => Collections.collectionToString(this);
+
+  ListIterator iterator() => new ListIterator(this);
+
+  int get hashCode => Primitives.objectHashCode(this);
+
+  Type get runtimeType {
+    // Call getRuntimeTypeString to get the name including type arguments.
+    return new TypeImpl(getRuntimeTypeString(this));
+  }
+
+  int get length => JS('int', r'#.length', this);
+  
+  void set length(int newLength) {
+    if (newLength is !int) throw new ArgumentError(newLength);
+    if (newLength < 0) throw new RangeError.value(newLength);
+    checkGrowable(this, 'set length');
+    JS('void', r'#.length = #', this, newLength);
   }
 }
diff --git a/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart b/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart
index 8e9dbb1..ea31fe2 100644
--- a/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart
@@ -62,7 +62,7 @@
     : identical(le$slow(a, b), true);
 
 index(var a, var index) {
-  // The type test may cause a NullPointerException to be thrown but
+  // The type test may cause a NoSuchMethodError to be thrown but
   // that matches the specification of what the indexing operator is
   // supposed to do.
   bool isJsArrayOrString = JS('bool',
@@ -78,7 +78,7 @@
 }
 
 indexSet(var a, var index, var value) {
-  // The type test may cause a NullPointerException to be thrown but
+  // The type test may cause a NoSuchMethodError to be thrown but
   // that matches the specification of what the indexing operator is
   // supposed to do.
   bool isMutableJsArray = JS('bool',
@@ -105,7 +105,6 @@
     if (b is num) {
       return true;
     } else {
-      checkNull(b);
       throw new ArgumentError(b);
     }
   }
@@ -536,9 +535,27 @@
 
   static num dateNow() => JS('num', r'Date.now()');
 
+  static stringFromCodePoints(codePoints) {
+    List<int> a = <int>[];
+    for (var i in codePoints) {
+      if (i is !int) throw new ArgumentError(i);
+      if (i <= 0xffff) {
+        a.add(i);
+      } else if (i <= 0x10ffff) {
+        a.add(0xd800 + ((((i - 0x10000) >> 10) & 0x3ff)));
+        a.add(0xdc00 + (i & 0x3ff));
+      } else {
+        throw new ArgumentError(i);
+      }
+    }
+    return JS('String', r'String.fromCharCode.apply(#, #)', null, a);
+  }
+
   static String stringFromCharCodes(charCodes) {
     for (var i in charCodes) {
       if (i is !int) throw new ArgumentError(i);
+      if (i < 0) throw new ArgumentError(i);
+      if (i > 0xffff) return stringFromCodePoints(charCodes);
     }
     return JS('String', r'String.fromCharCode.apply(#, #)', null, charCodes);
   }
@@ -659,7 +676,6 @@
   }
 
   static valueFromDateString(str) {
-    checkNull(str);
     if (str is !String) throw new ArgumentError(str);
     var value = JS('num', r'Date.parse(#)', str);
     if (value.isNaN) throw new ArgumentError(str);
@@ -667,16 +683,14 @@
   }
 
   static getProperty(object, key) {
-    checkNull(object);
-    if (object is bool || object is num || object is String) {
+    if (object == null || object is bool || object is num || object is String) {
       throw new ArgumentError(object);
     }
     return JS('var', '#[#]', object, key);
   }
 
   static void setProperty(object, key, value) {
-    checkNull(object);
-    if (object is bool || object is num || object is String) {
+    if (object == null || object is bool || object is num || object is String) {
       throw new ArgumentError(object);
     }
     JS('void', '#[#] = #', object, key, value);
@@ -750,8 +764,6 @@
   if (length == 0) {
     return;
   }
-  checkNull(start); // TODO(ahe): This is not specified but co19 tests it.
-  checkNull(length); // TODO(ahe): This is not specified but co19 tests it.
   if (length is !int) throw new ArgumentError(length);
   if (length < 0) throw new ArgumentError(length);
   if (start is !int) throw new ArgumentError(start);
@@ -779,13 +791,12 @@
 
 
 checkNull(object) {
-  if (object == null) throw new NullPointerException();
+  if (object == null) throw new ArgumentError(null);
   return object;
 }
 
 checkNum(value) {
   if (value is !num) {
-    checkNull(value);
     throw new ArgumentError(value);
   }
   return value;
@@ -793,7 +804,6 @@
 
 checkInt(value) {
   if (value is !int) {
-    checkNull(value);
     throw new ArgumentError(value);
   }
   return value;
@@ -801,7 +811,6 @@
 
 checkBool(value) {
   if (value is !bool) {
-    checkNull(value);
     throw new ArgumentError(value);
   }
   return value;
@@ -809,7 +818,6 @@
 
 checkString(value) {
   if (value is !String) {
-    checkNull(value);
     throw new ArgumentError(value);
   }
   return value;
@@ -894,7 +902,7 @@
  * object out of the wrapper again.
  */
 $throw(ex) {
-  if (ex == null) ex = const NullPointerException();
+  if (ex == null) ex = const NullThrownError();
   var jsError = JS('var', r'new Error()');
   JS('void', r'#.name = #', jsError, ex);
   JS('void', r'#.description = #', jsError, ex);
@@ -954,11 +962,12 @@
     // exception occurred.
     var type = JS('var', r'#.type', ex);
     var name = JS('var', r'#.arguments ? #.arguments[0] : ""', ex, ex);
-    if (type == 'property_not_function' ||
+    if (contains(message, 'JSNull') ||
+        type == 'property_not_function' ||
         type == 'called_non_callable' ||
         type == 'non_object_property_call' ||
         type == 'non_object_property_load') {
-      return new NullPointerException();
+      return new NoSuchMethodError(null, name, [], {});
     } else if (type == 'undefined_method') {
       return new NoSuchMethodError('', name, [], {});
     }
@@ -972,8 +981,8 @@
       if (message.endsWith('is null') ||
           message.endsWith('is undefined') ||
           message.endsWith('is null or undefined')) {
-        return new NullPointerException();
-      } else if (message.contains(' is not a function') ||
+        return new NoSuchMethodError(null, '<unknown>', [], {});
+      } else if (contains(message, ' is not a function') ||
                  (ieErrorCode == 438 && ieFacilityNumber == 10)) {
         // Examples:
         //  x.foo is not a function
@@ -992,7 +1001,7 @@
   }
 
   if (JS('bool', r'# instanceof RangeError', ex)) {
-    if (message is String && message.contains('call stack')) {
+    if (message is String && contains(message, 'call stack')) {
       return new StackOverflowError();
     }
 
@@ -1114,6 +1123,42 @@
 
 /**
  * A metadata annotation describing the types instantiated by a native element.
+ *
+ * The annotation is valid on a native method and a field of a native class.
+ *
+ * By default, a field of a native class is seen as an instantiation point for
+ * all native classes that are a subtype of the field's type, and a native
+ * method is seen as an instantiation point fo all native classes that are a
+ * subtype of the method's return type, or the argument types of the declared
+ * type of the method's callback parameter.
+ *
+ * An @[Creates] annotation overrides the default set of instantiated types.  If
+ * one or more @[Creates] annotations are present, the type of the native
+ * element is ignored, and the union of @[Creates] annotations is used instead.
+ * The names in the strings are resolved and the program will fail to compile
+ * with dart2js if they do not name types.
+ *
+ * The argument to [Creates] is a string.  The string is parsed as the names of
+ * one or more types, separated by vertical bars `|`.  There are some special
+ * names:
+ *
+ * * `=List`. This means 'exactly List', which is the JavaScript Array
+ *   implementation of [List] and no other implementation.
+ *
+ * * `=Object`. This means 'exactly Object', which is a plain JavaScript object
+ *   with properties and none of the subtypes of Object.
+ *
+ * Example: we may know that a method always returns a specific implementation:
+ *
+ *     @Creates('_NodeList')
+ *     List<Node> getElementsByTagName(String tag) native;
+ *
+ * Useful trick: A method can be marked as not instantiating any native classes
+ * with the annotation `@Creates('Null')`.  This is useful for fields on native
+ * classes that are used only in Dart code.
+ *
+ *     @Creates('Null')
+ *     var _cachedFoo;
  */
 class Creates {
   final String types;
@@ -1123,6 +1168,23 @@
 /**
  * A metadata annotation describing the types returned or yielded by a native
  * element.
+ *
+ * The annotation is valid on a native method and a field of a native class.
+ *
+ * By default, a native method or field is seen as returning or yielding all
+ * subtypes if the method return type or field type.  This annotation allows a
+ * more precise set of types to be specified.
+ *
+ * See [Creates] for the syntax of the argument.
+ *
+ * Example: IndexedDB keys are numbers, strings and JavaScript Arrays of keys.
+ *
+ *     @Returns('String|num|=List')
+ *     dynamic key;
+ *
+ *     // Equivalent:
+ *     @Returns('String') @Returns('num') @Returns('=List')
+ *     dynamic key;
  */
 class Returns {
   final String types;
@@ -1142,6 +1204,7 @@
 }
 
 setRuntimeTypeInfo(target, typeInfo) {
+  assert(typeInfo == null || isJsArray(typeInfo));
   // We have to check for null because factories may return null.
   if (target != null) JS('var', r'#.builtin$typeInfo = #', target, typeInfo);
 }
@@ -1486,15 +1549,33 @@
   final String typeName;
   TypeImpl(this.typeName);
   toString() => typeName;
+  int get hashCode => typeName.hashCode;
   bool operator ==(other) {
     if (other is !TypeImpl) return false;
     return typeName == other.typeName;
   }
 }
 
+String getClassName(var object) {
+  return JS('String', r'#.constructor.builtin$cls', object);
+}
+
 String getRuntimeTypeString(var object) {
+  String className = isJsArray(object) ? 'List' : getClassName(object);
   var typeInfo = JS('var', r'#.builtin$typeInfo', object);
-  return JS('String', r'#.runtimeType', typeInfo);
+  if (typeInfo == null) return className;
+  StringBuffer arguments = new StringBuffer();
+  for (var i = 0; i < typeInfo.length; i++) {
+    if (i > 0) {
+      arguments.add(', ');
+    }
+    var argument = typeInfo[i];
+    if (argument == null) {
+      argument = 'dynamic';
+    }
+    arguments.add(argument);
+  }
+  return '$className<$arguments>';
 }
 
 createRuntimeType(String name) => new TypeImpl(name);
diff --git a/sdk/lib/_internal/compiler/implementation/lib/js_number.dart b/sdk/lib/_internal/compiler/implementation/lib/js_number.dart
new file mode 100644
index 0000000..e8e5750
--- /dev/null
+++ b/sdk/lib/_internal/compiler/implementation/lib/js_number.dart
@@ -0,0 +1,137 @@
+// Copyright (c) 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.
+
+part of _interceptors;
+
+/**
+ * The super interceptor class for [JSInt] and [JSDouble]. The compiler
+ * recognizes this class as an interceptor, and changes references to
+ * [:this:] to actually use the receiver of the method, which is
+ * generated as an extra argument added to each member.
+ */
+class JSNumber {
+  const JSNumber();
+
+  int compareTo(num b) {
+    if (b is! num) throw new ArgumentError(b);
+    if (this < b) {
+      return -1;
+    } else if (this > b) {
+      return 1;
+    } else if (this == b) {
+      if (this == 0) {
+        bool bIsNegative = b.isNegative;
+        if (isNegative == bIsNegative) return 0;
+        if (isNegative) return -1;
+        return 1;
+      }
+      return 0;
+    } else if (isNaN) {
+      if (b.isNaN) {
+        return 0;
+      }
+      return 1;
+    } else {
+      return -1;
+    }
+  }
+
+  bool get isNegative => (this == 0) ? (1 / this) < 0 : this < 0;
+
+  bool get isNaN => JS('bool', r'isNaN(#)', this);
+
+  num remainder(num b) {
+    checkNull(b); // TODO(ngeoffray): This is not specified but co19 tests it.
+    if (b is! num) throw new ArgumentError(b);
+    return JS('num', r'# % #', this, b);
+  }
+
+  num abs() => JS('num', r'Math.abs(#)', this);
+
+  int toInt() {
+    if (isNaN) throw new FormatException('NaN');
+    if (isInfinite) throw new FormatException('Infinity');
+    num truncated = truncate();
+    return JS('bool', r'# == -0.0', truncated) ? 0 : truncated;
+  }
+
+  num ceil() => JS('num', r'Math.ceil(#)', this);
+
+  num floor() => JS('num', r'Math.floor(#)', this);
+
+  bool get isInfinite {
+    return JS('bool', r'# == Infinity', this)
+      || JS('bool', r'# == -Infinity', this);
+  }
+
+  num round() {
+    if (this < 0) {
+      return JS('num', r'-Math.round(-#)', this);
+    } else {
+      return JS('num', r'Math.round(#)', this);
+    }
+  }
+
+  double toDouble() => this;
+
+  num truncate() => this < 0 ? ceil() : floor();
+
+  String toStringAsFixed(int fractionDigits) {
+    checkNum(fractionDigits);
+    String result = JS('String', r'#.toFixed(#)', this, fractionDigits);
+    if (this == 0 && isNegative) return "-$result";
+    return result;
+  }
+
+  String toStringAsExponential(int fractionDigits) {
+    String result;
+    if (fractionDigits != null) {
+      checkNum(fractionDigits);
+      result = JS('String', r'#.toExponential(#)', this, fractionDigits);
+    } else {
+      result = JS('String', r'#.toExponential()', this);
+    }
+    if (this == 0 && isNegative) return "-$result";
+    return result;
+  }
+
+  String toStringAsPrecision(int fractionDigits) {
+    checkNum(fractionDigits);
+    String result = JS('String', r'#.toPrecision(#)',
+                       this, fractionDigits);
+    if (this == 0 && isNegative) return "-$result";
+    return result;
+  }
+
+  String toRadixString(int radix) {
+    checkNum(radix);
+    if (radix < 2 || radix > 36) throw new ArgumentError(radix);
+    return JS('String', r'#.toString(#)', this, radix);
+  }
+
+  String toString() {
+    if (this == 0 && JS('bool', '(1 / #) < 0', this)) {
+      return '-0.0';
+    } else {
+      return JS('String', r'String(#)', this);
+    }
+  }
+
+  int get hashCode => this & 0x1FFFFFFF;
+}
+
+class JSInt extends JSNumber {
+  const JSInt();
+
+  bool get isEven => (this & 1) == 0;
+
+  bool get isOdd => (this & 1) == 1;
+
+  Type get runtimeType => int;
+}
+
+class JSDouble extends JSNumber {
+  const JSDouble();
+  Type get runtimeType => double;
+}
diff --git a/sdk/lib/_internal/compiler/implementation/lib/js_string.dart b/sdk/lib/_internal/compiler/implementation/lib/js_string.dart
index d796ef2..c8bb16c 100644
--- a/sdk/lib/_internal/compiler/implementation/lib/js_string.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/js_string.dart
@@ -89,8 +89,71 @@
   List<int> get charCodes  {
     List<int> result = new List<int>(length);
     for (int i = 0; i < length; i++) {
-      result[i] = charCodeAt(i);
+      result[i] = JS('int', '#.charCodeAt(#)', this, i);
     }
     return result;
   }
+
+  int indexOf(String other, [int start = 0]) {
+    checkNull(other);
+    if (start is !int) throw new ArgumentError(start);
+    if (other is !String) throw new ArgumentError(other);
+    if (start < 0) return -1;
+    return JS('int', r'#.indexOf(#, #)', this, other, start);
+  }
+
+  int lastIndexOf(String other, [int start]) {
+    checkNull(other);
+    if (other is !String) throw new ArgumentError(other);
+    if (start != null) {
+      if (start is !num) throw new ArgumentError(start);
+      if (start < 0) return -1;
+      if (start >= length) {
+        if (other == "") return length;
+        start = length - 1;
+      }
+    } else {
+      start = length - 1;
+    }
+    return stringLastIndexOfUnchecked(this, other, start);
+  }
+
+  bool contains(String other, [int startIndex = 0]) {
+    checkNull(other);
+    return stringContainsUnchecked(this, other, startIndex);
+  }
+
+  bool get isEmpty => length == 0;
+
+  int compareTo(String other) {
+    if (other is !String) throw new ArgumentError(other);
+    return this == other ? 0
+      : JS('bool', r'# < #', this, other) ? -1 : 1;
+  }
+
+  String toString() => this;
+
+  /**
+   * This is the [Jenkins hash function][1] but using masking to keep
+   * values in SMI range.
+   *
+   * [1]: http://en.wikipedia.org/wiki/Jenkins_hash_function
+   */
+  int get hashCode {
+    // TODO(ahe): This method shouldn't have to use JS. Update when our
+    // optimizations are smarter.
+    int hash = 0;
+    for (int i = 0; i < length; i++) {
+      hash = 0x1fffffff & (hash + JS('int', r'#.charCodeAt(#)', this, i));
+      hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
+      hash = JS('int', '# ^ (# >> 6)', hash, hash);
+    }
+    hash = 0x1fffffff & (hash + ((0x03ffffff & hash) <<  3));
+    hash = JS('int', '# ^ (# >> 11)', hash, hash);
+    return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
+  }
+
+  Type get runtimeType => String;
+
+  int get length => JS('int', r'#.length', this);
 }
diff --git a/sdk/lib/_internal/compiler/implementation/lib/native_helper.dart b/sdk/lib/_internal/compiler/implementation/lib/native_helper.dart
index f6ee855..98eea02 100644
--- a/sdk/lib/_internal/compiler/implementation/lib/native_helper.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/native_helper.dart
@@ -42,12 +42,14 @@
 String typeNameInFirefox(obj) {
   String name = JS('String', '#', constructorNameFallback(obj));
   if (name == 'Window') return 'DOMWindow';
-  if (name == 'XMLDocument') return 'Document';
-  if (name == 'WorkerMessageEvent') return 'MessageEvent';
-  if (name == 'DragEvent') return 'MouseEvent';
+  if (name == 'CSS2Properties') return 'CSSStyleDeclaration';
   if (name == 'DataTransfer') return 'Clipboard';
+  if (name == 'DragEvent') return 'MouseEvent';
+  if (name == 'GeoGeolocation') return 'Geolocation';
   if (name == 'MouseScrollEvent') return 'WheelEvent';
   if (name == 'OfflineResourceList') return 'DOMApplicationCache';
+  if (name == 'WorkerMessageEvent') return 'MessageEvent';
+  if (name == 'XMLDocument') return 'Document';
   return name;
 }
 
@@ -71,6 +73,7 @@
   if (name == 'HTMLPhraseElement') return 'HTMLElement';
   if (name == 'MSStyleCSSProperties') return 'CSSStyleDeclaration';
   if (name == 'MouseWheelEvent') return 'WheelEvent';
+  if (name == 'Position') return 'Geoposition';
   return name;
 }
 
diff --git a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart
index 825498e..5d4f253 100644
--- a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart
@@ -195,6 +195,11 @@
     // TODO(johnniwinther): implement this.
     throw 'unimplemented';
   }
+
+  void onDeprecatedFeature(Spannable span, String feature) {
+    // TODO(johnniwinther): implement this?
+    throw 'unimplemented';
+  }
 }
 
 //------------------------------------------------------------------------------
@@ -380,7 +385,8 @@
       librariesUri.add(cwd.resolve(library.toString()));
       // TODO(johnniwinther): Detect file not found
     }
-    _compiler.runList(librariesUri);
+    LibraryCompiler libraryCompiler = _compiler;
+    libraryCompiler.runList(librariesUri);
   }
 
   MirrorSystem get mirrors => new Dart2JsMirrorSystem(_compiler);
@@ -1163,7 +1169,7 @@
   List<TypeMirror> get typeArguments {
     if (_typeArguments == null) {
       _typeArguments = <TypeMirror>[];
-      Link<DartType> type = _interfaceType.arguments;
+      Link<DartType> type = _interfaceType.typeArguments;
       while (type != null && type.head != null) {
         _typeArguments.add(_convertTypeToTypeMirror(mirrors, type.head,
             mirrors.compiler.types.dynamicType));
diff --git a/sdk/lib/_internal/compiler/implementation/native_handler.dart b/sdk/lib/_internal/compiler/implementation/native_handler.dart
index 038fbdd..0c1579b 100644
--- a/sdk/lib/_internal/compiler/implementation/native_handler.dart
+++ b/sdk/lib/_internal/compiler/implementation/native_handler.dart
@@ -63,7 +63,7 @@
 }
 
 
-class NativeEnqueuerBase implements NativeEnqueuer {
+abstract class NativeEnqueuerBase implements NativeEnqueuer {
 
   /**
    * The set of all native classes.  Each native class is in [nativeClasses] and
@@ -303,8 +303,8 @@
     super.processNativeClasses(libraries);
 
     // HACK HACK - add all the resolved classes.
-    for (final classElement
-         in compiler.enqueuer.resolution.nativeEnqueuer.registeredClasses) {
+    NativeEnqueuerBase enqueuer = compiler.enqueuer.resolution.nativeEnqueuer;
+    for (final classElement in enqueuer.registeredClasses) {
       if (unusedClasses.contains(classElement)) {
         enqueueClass(classElement, 'was resolved');
       }
@@ -382,10 +382,10 @@
 class NativeBehavior {
 
   /// [DartType]s or [SpecialType]s returned or yielded by the native element.
-  final Collection typesReturned = [];
+  final List typesReturned = [];
 
   /// [DartType]s or [SpecialType]s instantiated by the native element.
-  final Collection typesInstantiated = [];
+  final List typesInstantiated = [];
 
   static final NativeBehavior NONE = new NativeBehavior();
 
@@ -432,8 +432,8 @@
     compiler.cancel("Unexpected JS first argument", node: firstArg);
   }
 
-  static NativeBehavior ofMethod(Element method, Compiler compiler) {
-    DartType type = method.computeType(compiler);
+  static NativeBehavior ofMethod(FunctionElement method, Compiler compiler) {
+    FunctionType type = method.computeType(compiler);
     var behavior = new NativeBehavior();
     behavior.typesReturned.add(type.returnType);
     behavior._capture(type, compiler);
@@ -479,14 +479,11 @@
       return e.computeType(compiler);
     }
 
-    var creates =
-        _collect(element, compiler,
-            compiler.enqueuer.resolution.nativeEnqueuer.annotationCreatesClass,
-            lookup);
-    var returns =
-        _collect(element, compiler,
-            compiler.enqueuer.resolution.nativeEnqueuer.annotationReturnsClass,
-            lookup);
+    NativeEnqueuerBase enqueuer = compiler.enqueuer.resolution.nativeEnqueuer;
+    var creates = _collect(element, compiler, enqueuer.annotationCreatesClass,
+                           lookup);
+    var returns = _collect(element, compiler, enqueuer.annotationReturnsClass,
+                           lookup);
 
     if (creates != null) {
       typesInstantiated..clear()..addAll(creates);
@@ -516,8 +513,9 @@
       var fields = value.fields;
       // TODO(sra): Better validation of the constant.
       if (fields.length != 1 || fields[0] is! StringConstant) {
+        PartialMetadataAnnotation partial = annotation;
         compiler.cancel(
-            'Annotations needs one string: ${annotation.parseNode(compiler)}');
+            'Annotations needs one string: ${partial.parseNode(compiler)}');
       }
       String specString = fields[0].toDartString().slowToString();
       for (final typeString in specString.split('|')) {
diff --git a/sdk/lib/_internal/compiler/implementation/resolution/members.dart b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
index d2c8c11..713a03c 100644
--- a/sdk/lib/_internal/compiler/implementation/resolution/members.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
@@ -1038,6 +1038,18 @@
 
   TypeResolver(this.compiler);
 
+  bool anyMalformedTypesInThere(Link<DartType> list) {
+    for (Link<DartType> link = list;
+        !link.isEmpty;
+        link = link.tail) {
+      DartType dtype = link.head;
+      if (dtype is MalformedType) {
+        return true;
+      }
+    }
+    return false;
+  }
+
   Element resolveTypeName(Scope scope, TypeAnnotation node) {
     Identifier typeName = node.typeName.asIdentifier();
     Send send = node.typeName.asSend();
@@ -1081,6 +1093,7 @@
   DartType resolveTypeAnnotation(
       TypeAnnotation node,
       Scope scope,
+      bool inStaticContext,
       {onFailure(Node node, MessageKind kind, [List arguments]),
        whenResolved(Node node, DartType type)}) {
     if (onFailure == null) {
@@ -1092,11 +1105,12 @@
     if (scope == null) {
       compiler.internalError('resolveTypeAnnotation: no scope specified');
     }
-    return resolveTypeAnnotationInContext(scope, node, onFailure,
-                                          whenResolved);
+    return resolveTypeAnnotationInContext(scope, node, inStaticContext,
+        onFailure, whenResolved);
   }
 
   DartType resolveTypeAnnotationInContext(Scope scope, TypeAnnotation node,
+                                          bool inStaticContext,
                                           onFailure, whenResolved) {
     Element element = resolveTypeName(scope, node);
     DartType type;
@@ -1115,13 +1129,21 @@
         ClassElement cls = element;
         cls.ensureResolved(compiler);
         Link<DartType> arguments =
-            resolveTypeArguments(node, cls.typeVariables, scope,
+            resolveTypeArguments(node, cls.typeVariables,
+                                 inStaticContext, scope,
                                  onFailure, whenResolved);
         if (cls.typeVariables.isEmpty && arguments.isEmpty) {
           // Use the canonical type if it has no type parameters.
           type = cls.computeType(compiler);
         } else {
-          type = new InterfaceType(cls, arguments);
+          // In checked mode malformed-ness of the type argument bubbles up.
+          if (anyMalformedTypesInThere(arguments) &&
+              compiler.enableTypeAssertions) {
+            type = new MalformedType(
+                new MalformedTypeElement(node, element));
+          } else {
+            type = new InterfaceType(cls.declaration, arguments);
+          }
         }
       } else if (element.isTypedef()) {
         TypedefElement typdef = element;
@@ -1129,7 +1151,7 @@
         compiler.resolveTypedef(typdef);
         typdef.computeType(compiler);
         Link<DartType> arguments = resolveTypeArguments(
-            node, typdef.typeVariables,
+            node, typdef.typeVariables, inStaticContext,
             scope, onFailure, whenResolved);
         if (typdef.typeVariables.isEmpty && arguments.isEmpty) {
           // Return the canonical type if it has no type parameters.
@@ -1138,7 +1160,14 @@
           type = new TypedefType(typdef, arguments);
         }
       } else if (element.isTypeVariable()) {
-        type = element.computeType(compiler);
+        if (inStaticContext) {
+          compiler.reportWarning(node,
+              MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER.message(
+                  [element]));
+          type = new MalformedType(new MalformedTypeElement(node, element));
+        } else {
+          type = element.computeType(compiler);
+        }
       } else {
         compiler.cancel("unexpected element kind ${element.kind}",
                         node: node);
@@ -1150,6 +1179,7 @@
 
   Link<DartType> resolveTypeArguments(TypeAnnotation node,
                                       Link<DartType> typeVariables,
+                                      bool inStaticContext,
                                       Scope scope, onFailure, whenResolved) {
     if (node.typeArguments == null) {
       return const Link<DartType>();
@@ -1163,6 +1193,7 @@
       }
       DartType argType = resolveTypeAnnotationInContext(scope,
                                                     typeArguments.head,
+                                                    inStaticContext,
                                                     onFailure,
                                                     whenResolved);
       arguments.addLast(argType);
@@ -1507,6 +1538,8 @@
 
     scope = oldScope;
     enclosingElement = previousEnclosingElement;
+
+    world.registerInstantiatedClass(compiler.functionClass);
   }
 
   visitIf(If node) {
@@ -1882,18 +1915,14 @@
         world.registerStaticUse(target.declaration);
       }
     }
-    if (target == null) {
-      // If we haven't found an element for this send, it might be a
-      // dynamic send on a primitive value. Register the selector with
-      // the world to add an interceptor, if necessary.
-      world.registerUsedSelector(selector);
-    }
   }
 
   visitLiteralInt(LiteralInt node) {
+    world.registerInstantiatedClass(compiler.intClass);
   }
 
   visitLiteralDouble(LiteralDouble node) {
+    world.registerInstantiatedClass(compiler.doubleClass);
   }
 
   visitLiteralBool(LiteralBool node) {
@@ -1932,7 +1961,7 @@
   void handleRedirectingFactoryBody(Return node) {
     Element redirectionTarget = resolveRedirectingFactory(node);
     var type = mapping.getType(node.expression);
-    if (type is InterfaceType && !type.arguments.isEmpty) {
+    if (type is InterfaceType && !type.typeArguments.isEmpty) {
       unimplemented(node.expression, 'type arguments on redirecting factory');
     }
     useElement(node.expression, redirectionTarget);
@@ -2052,28 +2081,17 @@
           argument.element.enclosingElement);
     } else if (argument is InterfaceType) {
       InterfaceType type = argument;
-      type.arguments.forEach((DartType argument) {
+      type.typeArguments.forEach((DartType argument) {
         analyzeTypeArgument(type, argument);
       });
     }
   }
 
   DartType resolveTypeAnnotation(TypeAnnotation node) {
-    // TODO(johnniwinther): Remove this together with the named arguments
-    // on [TypeResolver.resolveTypeAnnotation].
-    void checkAndUseType(TypeAnnotation annotation, DartType type) {
-      useType(annotation, type);
-      if (type != null &&
-          identical(type.kind, TypeKind.TYPE_VARIABLE) &&
-          enclosingElement.isInStaticMember()) {
-        warning(annotation, MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER,
-                [type]);
-      }
-    }
-
     Function report = typeRequired ? error : warning;
     DartType type = typeResolver.resolveTypeAnnotation(
-        node, scope, onFailure: report, whenResolved: checkAndUseType);
+        node, scope, enclosingElement.isInStaticMember(),
+        onFailure: report, whenResolved: useType);
     if (type == null) return null;
     if (inCheckContext) {
       compiler.enqueuer.resolution.registerIsCheck(type);
@@ -2081,7 +2099,7 @@
     if (typeRequired || inCheckContext) {
       if (type is InterfaceType) {
         InterfaceType itf = type;
-        itf.arguments.forEach((DartType argument) {
+        itf.typeArguments.forEach((DartType argument) {
           analyzeTypeArgument(type, argument);
         });
       }
@@ -2440,7 +2458,8 @@
       TypeVariableElement variableElement = typeVariable.element;
       if (typeNode.bound != null) {
         DartType boundType = typeResolver.resolveTypeAnnotation(
-            typeNode.bound, scope, onFailure: warning);
+            typeNode.bound, scope, element.isInStaticMember(),
+            onFailure: warning);
         if (boundType != null && boundType.element == variableElement) {
           // TODO(johnniwinther): Check for more general cycles, like
           // [: <A extends B, B extends C, C extends B> :].
diff --git a/sdk/lib/_internal/compiler/implementation/resolved_visitor.dart b/sdk/lib/_internal/compiler/implementation/resolved_visitor.dart
index e53a3ff..1de6a79 100644
--- a/sdk/lib/_internal/compiler/implementation/resolved_visitor.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolved_visitor.dart
@@ -60,7 +60,7 @@
   R visitDynamicSend(Send node);
   R visitForeignSend(Send node);
   R visitStaticSend(Send node);
-  abstract R visitTypeReferenceSend(Send node);
+  R visitTypeReferenceSend(Send node);
 
   void internalError(String reason, {Node node});
 
diff --git a/sdk/lib/_internal/compiler/implementation/runtime_types.dart b/sdk/lib/_internal/compiler/implementation/runtime_types.dart
deleted file mode 100644
index 3f7967a..0000000
--- a/sdk/lib/_internal/compiler/implementation/runtime_types.dart
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright (c) 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.
-
-library runtime_types;
-
-import 'dart2jslib.dart';
-import 'elements/elements.dart';
-import 'tree/tree.dart';
-import 'universe/universe.dart';
-import 'util/util.dart';
-
-class RuntimeTypeInformation {
-  /**
-   * Names used for elements in runtime type information. This map is kept to
-   * detect elements with the same name and use a different name instead.
-   */
-  final Map<String, Element> usedNames = new Map<String, Element>();
-
-  /** Get a unique name for the element. */
-  String getName(Element element) {
-    String guess = element.name.slowToString();
-    String name = guess;
-    int id = 0;
-    while (usedNames.containsKey(name) && usedNames[name] != element) {
-      name = '$guess@$id';
-      id++;
-    }
-    usedNames[name] = element;
-    return name;
-  }
-
-  bool hasTypeArguments(DartType type) {
-    if (type is InterfaceType) {
-      InterfaceType interfaceType = type;
-      return !interfaceType.arguments.isEmpty;
-    }
-    return false;
-  }
-
-  /**
-   * Map type variables to strings calling [:stringify:] and joins the results
-   * to a single string separated by commas.
-   * The argument [:hasValue:] is used to treat variables that will not receive
-   * a value at the use site of the code that is generated with this function.
-   */
-  static String stringifyTypeVariables(Link collection,
-                                       int numberOfInputs,
-                                       stringify(TypeVariableType variable,
-                                                 bool hasValue)) {
-    int currentVariable = 0;
-    bool isFirst = true;
-    StringBuffer buffer = new StringBuffer();
-    collection.forEach((TypeVariableType variable) {
-      if (!isFirst) buffer.add(", ");
-      bool hasValue = currentVariable < numberOfInputs;
-      buffer.add(stringify(variable, hasValue));
-      isFirst = false;
-      currentVariable++;
-    });
-    return buffer.toString();
-  }
-
-  /**
-   * Generate a string representation template for this element, using '#' to
-   * denote the place for the type argument input. If there are more type
-   * variables than [numberOfInputs], 'dynamic' is used as the value for these
-   * arguments.
-   */
-  String generateRuntimeTypeString(ClassElement element, int numberOfInputs) {
-    String elementName = getName(element);
-    if (element.typeVariables.isEmpty) return "$elementName";
-    String stringify(_, bool hasValue) => hasValue ? "' + # + '" : "dynamic";
-    String arguments = stringifyTypeVariables(element.typeVariables,
-                                              numberOfInputs,
-                                              stringify);
-    return "$elementName<$arguments>";
-  }
-
-  /**
-   * Generate a string template for the runtime type fields that contain the
-   * type descriptions of the reified type arguments, using '#' to denote the
-   * place for the type argument value, or [:null:] if there are more than
-   * [numberOfInputs] type variables.
-   */
-  static String generateTypeVariableString(ClassElement element,
-                                           int numberOfInputs) {
-    String stringify(TypeVariableType variable, bool hasValue) {
-      return "'${variable.name.slowToString()}': #";
-    }
-    return stringifyTypeVariables(element.typeVariables, numberOfInputs,
-                                  stringify);
-  }
-}
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/listener.dart b/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
index 783be1c..e8a15aa 100644
--- a/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
@@ -641,7 +641,7 @@
     return result;
   }
 
-  LiteralString popLiteralString() {
+  StringNode popLiteralString() {
     StringNode node = popNode();
     // TODO(lrn): Handle interpolations in script tags.
     if (node.isInterpolation) {
@@ -671,7 +671,7 @@
     if (asKeyword != null) {
       prefix = popNode();
     }
-    LiteralString uri = popLiteralString();
+    StringNode uri = popLiteralString();
     addLibraryTag(new Import(importKeyword, uri, prefix, combinators));
   }
 
@@ -703,7 +703,7 @@
   }
 
   void endPart(Token partKeyword, Token semicolon) {
-    LiteralString uri = popLiteralString();
+    StringNode uri = popLiteralString();
     addLibraryTag(new Part(partKeyword, uri));
   }
 
diff --git a/sdk/lib/_internal/compiler/implementation/source_map_builder.dart b/sdk/lib/_internal/compiler/implementation/source_map_builder.dart
index 06a6ca0..498c9fb 100644
--- a/sdk/lib/_internal/compiler/implementation/source_map_builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/source_map_builder.dart
@@ -57,9 +57,9 @@
     buffer.add('[');
     for (String string in strings) {
       if (!first) buffer.add(',');
-      buffer.add("'");
-      writeJsonEscapedCharsOn(string.charCodes.iterator(), buffer, null);
-      buffer.add("'");
+      buffer.add('"');
+      writeJsonEscapedCharsOn(string, buffer);
+      buffer.add('"');
       first = false;
     }
     buffer.add(']');
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/bailout.dart b/sdk/lib/_internal/compiler/implementation/ssa/bailout.dart
index e6423cd..a001ad5 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/bailout.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/bailout.dart
@@ -16,12 +16,12 @@
  */
 class Environment {
   final Set<HInstruction> lives;
-  final Set<HBasicBlock> loopMarkers;
+  final List<HBasicBlock> loopMarkers;
   Environment() : lives = new Set<HInstruction>(),
-                  loopMarkers = new Set<HBasicBlock>();
+                  loopMarkers = new List<HBasicBlock>();
   Environment.from(Environment other)
     : lives = new Set<HInstruction>.from(other.lives),
-      loopMarkers = new Set<HBasicBlock>.from(other.loopMarkers);
+      loopMarkers = new List<HBasicBlock>.from(other.loopMarkers);
 
   void remove(HInstruction instruction) {
     lives.remove(instruction);
@@ -48,17 +48,8 @@
     }
   }
 
-  void addLoopMarker(HBasicBlock block) {
-    loopMarkers.add(block);
-  }
-
-  void removeLoopMarker(HBasicBlock block) {
-    loopMarkers.remove(block);
-  }
-
   void addAll(Environment other) {
     lives.addAll(other.lives);
-    loopMarkers.addAll(other.loopMarkers);
   }
 
   bool get isEmpty => lives.isEmpty && loopMarkers.isEmpty;
@@ -257,10 +248,15 @@
   final Map<HBailoutTarget, Environment> capturedEnvironments;
   final Map<HBasicBlock, Environment> liveInstructions;
   Environment environment;
+  /**
+   * The set of current loop headers that dominate the current block.
+   */
+  Set<HBasicBlock> loopMarkers;
 
   SsaEnvironmentBuilder(Compiler this.compiler)
     : capturedEnvironments = new Map<HBailoutTarget, Environment>(),
-      liveInstructions = new Map<HBasicBlock, Environment>();
+      liveInstructions = new Map<HBasicBlock, Environment>(),
+      loopMarkers = new Set<HBasicBlock>();
 
 
   void visitGraph(HGraph graph) {
@@ -290,9 +286,9 @@
     // in this case {x}.
     capturedEnvironments.forEach((ignoredInstruction, env) {
       env.loopMarkers.forEach((HBasicBlock header) {
-        env.removeLoopMarker(header);
         env.addAll(liveInstructions[header]);
       });
+      env.loopMarkers.clear();
     });
   }
 
@@ -310,7 +306,8 @@
         // If we haven't computed the liveInstructions of that successor, we
         // know it must be a loop header.
         assert(successor.isLoopHeader());
-        environment.addLoopMarker(successor);
+        assert(!block.isLoopHeader());
+        loopMarkers.add(successor);
       }
 
       int index = successor.predecessors.indexOf(block);
@@ -319,6 +316,15 @@
       }
     }
 
+    if (block.isLoopHeader()) {
+      loopMarkers.remove(block);
+    }
+
+    // If the block is a loop header, we're adding all [loopMarkers]
+    // after removing it from the list of [loopMarkers], because
+    // it will just recompute the loop phis.
+    environment.loopMarkers.addAll(loopMarkers);
+
     // Iterate over all instructions to remove an instruction from the
     // environment and add its inputs.
     HInstruction instruction = block.last;
@@ -333,12 +339,6 @@
       environment.remove(phi);
     }
 
-    // If the block is a loop header, we can remove the loop marker,
-    // because it will just recompute the loop phis.
-    if (block.isLoopHeader()) {
-      environment.removeLoopMarker(block);
-    }
-
     // Finally save the liveInstructions of that block.
     liveInstructions[block] = environment;
   }
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
index b6137f2..cefee59 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
@@ -4,6 +4,21 @@
 
 part of ssa;
 
+/**
+ * A special element for the extra parameter taken by intercepted
+ * methods. We need to override [Element.computeType] because our
+ * optimizers may look at its declared type.
+ */
+class InterceptedElement extends Element {
+  final HType ssaType;
+  InterceptedElement(this.ssaType, Element enclosing)
+      : super(const SourceString('receiver'),
+              ElementKind.PARAMETER,
+              enclosing);
+
+  DartType computeType(Compiler compiler) => ssaType.computeType(compiler);
+}
+
 class Interceptors {
   Compiler compiler;
   Interceptors(Compiler this.compiler);
@@ -45,38 +60,13 @@
     compiler.unimplemented('Unknown operator', node: op);
   }
 
-  Element getStaticInterceptor(Selector selector) {
-    // Check if we have an interceptor method implemented with
-    // interceptor classes.
+  /**
+   * Returns a set of interceptor classes that contain a member whose
+   * signature matches the given [selector].
+   */
+  Set<ClassElement> getInterceptedClassesOn(Selector selector) {
     JavaScriptBackend backend = compiler.backend;
-    if (backend.shouldInterceptSelector(selector)) {
-      return backend.getInterceptorMethod;
-    }
-
-    // Fall back to the old interceptor mechanism.
-    String name = selector.name.slowToString();
-    if (selector.isGetter()) {
-      // TODO(lrn): If there is no get-interceptor, but there is a
-      // method-interceptor, we should generate a get-interceptor automatically.
-      String mangledName = "get\$$name";
-      return compiler.findInterceptor(new SourceString(mangledName));
-    } else if (selector.isSetter()) {
-      String mangledName = "set\$$name";
-      return compiler.findInterceptor(new SourceString(mangledName));
-    } else {
-      Element element = compiler.findInterceptor(new SourceString(name));
-      if (element != null && element.isFunction()) {
-        // Only pick the function element with the short name if the
-        // number of parameters it expects matches the number we're
-        // passing modulo the receiver.
-        FunctionElement function = element;
-        if (function.parameterCount(compiler) == selector.argumentCount + 1) {
-          return element;
-        }
-      }
-      String longMangledName = "$name\$${selector.argumentCount}";
-      return compiler.findInterceptor(new SourceString(longMangledName));
-    }
+    return backend.getInterceptedClassesOn(selector);
   }
 
   Element getOperatorInterceptor(Operator op) {
@@ -339,13 +329,16 @@
       scopeData.capturedVariableMapping.forEach((Element from, Element to) {
         // The [from] can only be a parameter for function-scopes and not
         // loop scopes.
-        if (from.isParameter()) {
-          // Store the captured parameter in the box. Get the current value
-          // before we put the redirection in place.
-          HInstruction instruction = readLocal(from);
-          redirectElement(from, to);
+        if (from.isParameter() && !element.isGenerativeConstructorBody()) {
           // Now that the redirection is set up, the update to the local will
           // write the parameter value into the box.
+          // Store the captured parameter in the box. Get the current value
+          // before we put the redirection in place.
+          // We don't need to update the local for a generative
+          // constructor body, because it receives a box that already
+          // contains the updates as the last parameter.
+          HInstruction instruction = readLocal(from);
+          redirectElement(from, to);
           updateLocal(from, instruction);
         } else {
           redirectElement(from, to);
@@ -389,6 +382,16 @@
       FunctionElement functionElement = element;
       FunctionSignature params = functionElement.computeSignature(compiler);
       params.orderedForEachParameter((Element parameterElement) {
+        if (element.isGenerativeConstructorBody()) {
+          ClosureScope scopeData = closureData.capturingScopes[node];
+          if (scopeData != null
+              && scopeData.capturedVariableMapping.containsKey(
+                  parameterElement)) {
+            // The parameter will be a field in the box passed as the
+            // last parameter. So no need to have it.
+            return;
+          }
+        }
         HInstruction parameter = builder.addParameter(parameterElement);
         builder.parameters[parameterElement] = parameter;
         directLocals[parameterElement] = parameter;
@@ -424,13 +427,32 @@
       directLocals[closureData.thisElement] = builder.thisInstruction;
     }
 
-    if (builder.backend.isInterceptorClass(element.getEnclosingClass())) {
-      Element parameter = new Element(
-          const SourceString('receiver'), ElementKind.VARIABLE, element);
+    // If this method is an intercepted method, add the extra
+    // parameter to it, that is the actual receiver.
+    ClassElement cls = element.getEnclosingClass();
+    if (builder.backend.isInterceptorClass(cls)) {
+      HType type = HType.UNKNOWN;
+      if (cls == builder.backend.jsArrayClass) {
+        type = HType.READABLE_ARRAY;
+      } else if (cls == builder.backend.jsStringClass) {
+        type = HType.STRING;
+      } else if (cls == builder.backend.jsNumberClass) {
+        type = HType.NUMBER;
+      } else if (cls == builder.backend.jsIntClass) {
+        type = HType.INTEGER;
+      } else if (cls == builder.backend.jsDoubleClass) {
+        type = HType.DOUBLE;
+      } else if (cls == builder.backend.jsNullClass) {
+        type = HType.NULL;
+      } else if (cls == builder.backend.jsBoolClass) {
+        type = HType.BOOLEAN;
+      }
+      Element parameter = new InterceptedElement(type, element);
       HParameterValue value = new HParameterValue(parameter);
       builder.graph.entry.addAfter(
           directLocals[closureData.thisElement], value);
       directLocals[closureData.thisElement] = value;
+      value.guaranteedType = type;
     }
   }
 
@@ -943,7 +965,7 @@
       parameters = new Map<Element, HInstruction>(),
       sourceElementStack = <Element>[work.element],
       inliningStack = <InliningState>[],
-      rti = builder.compiler.codegenWorld.rti,
+      rti = builder.backend.rti,
       super(work.resolutionTree) {
     localsHandler = new LocalsHandler(this);
   }
@@ -1431,12 +1453,11 @@
       FunctionSignature functionSignature = body.computeSignature(compiler);
       int arity = functionSignature.parameterCount;
       functionSignature.orderedForEachParameter((parameter) {
-        // TODO(ngeoffray): No need to pass the parameters that are
-        // captured and stored in a box. Because this information is
-        // not trivial to get in codegen.dart, we just pass the
-        // parameters anyway. We need to update both codegen.dart and
-        // builder.dart on how parameters are being passed.
-        bodyCallInputs.add(localsHandler.readLocal(parameter));
+        if (!localsHandler.isBoxed(parameter)) {
+          // The parameter will be a field in the box passed as the
+          // last parameter. So no need to pass it.
+          bodyCallInputs.add(localsHandler.readLocal(parameter));
+        }
       });
 
       // If parameters are checked, we pass the already computed
@@ -1561,11 +1582,22 @@
       // because that is where the type guards will also be inserted.
       // This way we ensure that a type guard will dominate the type
       // check.
-      signature.orderedForEachParameter((Element element) {
+      signature.orderedForEachParameter((Element parameterElement) {
+        if (element.isGenerativeConstructorBody()) {
+          ClosureScope scopeData =
+              localsHandler.closureData.capturingScopes[node];
+          if (scopeData != null
+              && scopeData.capturedVariableMapping.containsKey(
+                  parameterElement)) {
+            // The parameter will be a field in the box passed as the
+            // last parameter. So no need to have it.
+            return;
+          }
+        }
         HInstruction newParameter = potentiallyCheckType(
-            localsHandler.directLocals[element],
-            element.computeType(compiler));
-        localsHandler.directLocals[element] = newParameter;
+            localsHandler.directLocals[parameterElement],
+            parameterElement.computeType(compiler));
+        localsHandler.directLocals[parameterElement] = newParameter;
       });
 
       returnType = signature.returnType;
@@ -1800,11 +1832,11 @@
   // For while loops, initializer and update are null.
   // The condition function must return a boolean result.
   // None of the functions must leave anything on the stack.
-  handleLoop(Node loop,
-             void initialize(),
-             HInstruction condition(),
-             void update(),
-             void body()) {
+  void handleLoop(Node loop,
+                  void initialize(),
+                  HInstruction condition(),
+                  void update(),
+                  void body()) {
     // Generate:
     //  <initializer>
     //  loop-entry:
@@ -1909,23 +1941,83 @@
       updateGraph = new SubExpression(updateBlock, updateEndBlock);
     }
 
-    conditionBlock.postProcessLoopHeader();
+    if (jumpHandler.hasAnyContinue() || bodyBlock != null) {
+      endLoop(conditionBlock, conditionExitBlock, jumpHandler, savedLocals);
+      conditionBlock.postProcessLoopHeader();
+      HLoopBlockInformation info =
+          new HLoopBlockInformation(
+              HLoopBlockInformation.loopType(loop),
+              wrapExpressionGraph(initializerGraph),
+              wrapExpressionGraph(conditionExpression),
+              wrapStatementGraph(bodyGraph),
+              wrapExpressionGraph(updateGraph),
+              conditionBlock.loopInformation.target,
+              conditionBlock.loopInformation.labels,
+              sourceFileLocationForBeginToken(loop),
+              sourceFileLocationForEndToken(loop));
 
-    endLoop(conditionBlock, conditionExitBlock, jumpHandler, savedLocals);
-    HLoopBlockInformation info =
-        new HLoopBlockInformation(
-            HLoopBlockInformation.loopType(loop),
-            wrapExpressionGraph(initializerGraph),
+      startBlock.setBlockFlow(info, current);
+      loopInfo.loopBlockInformation = info;
+    } else {
+      // There is no back edge for the loop, so we turn the code into:
+      // if (condition) {
+      //   body;
+      // } else {
+      //   // We always create an empty else block to avoid critical edges.
+      // }
+      //
+      // If there is any break in the body, we attach a synthetic
+      // label to the if.
+      HBasicBlock elseBlock = addNewBlock();
+      open(elseBlock);
+      close(new HGoto());
+      endLoop(conditionBlock, null, jumpHandler, savedLocals);
+
+      // [endLoop] will not create an exit block if there are no
+      // breaks.
+      if (current == null) open(addNewBlock());
+      elseBlock.addSuccessor(current);
+      SubGraph elseGraph = new SubGraph(elseBlock, elseBlock);
+      // Remove the loop information attached to the header.
+      conditionBlock.loopInformation = null;
+
+      // Remove the [HLoopBranch] instruction and replace it with
+      // [HIf].
+      HInstruction condition = conditionExitBlock.last.inputs[0];
+      conditionExitBlock.addAtExit(new HIf(condition));
+      conditionExitBlock.addSuccessor(elseBlock);
+      conditionExitBlock.remove(conditionExitBlock.last);
+      HIfBlockInformation info =
+          new HIfBlockInformation(
             wrapExpressionGraph(conditionExpression),
             wrapStatementGraph(bodyGraph),
-            wrapExpressionGraph(updateGraph),
-            conditionBlock.loopInformation.target,
-            conditionBlock.loopInformation.labels,
-            sourceFileLocationForBeginToken(loop),
-            sourceFileLocationForEndToken(loop));
+            wrapStatementGraph(elseGraph));
 
-    startBlock.setBlockFlow(info, current);
-    loopInfo.loopBlockInformation = info;
+      conditionBlock.setBlockFlow(info, current);
+      HIf ifBlock = conditionBlock.last;
+      ifBlock.blockInformation = conditionBlock.blockFlow;
+
+      // If the body has any break, attach a synthesized label to the
+      // if block.
+      if (jumpHandler.hasAnyBreak()) {
+        TargetElement target = elements[loop];
+        LabelElement label = target.addLabel(null, 'loop');
+        label.isBreakTarget = true;
+        SubGraph labelGraph = new SubGraph(conditionBlock, current);
+        HLabeledBlockInformation labelInfo = new HLabeledBlockInformation(
+                new HSubGraphBlockInformation(labelGraph),
+                <LabelElement>[label]);
+
+        conditionBlock.setBlockFlow(labelInfo, current);
+
+        jumpHandler.forEachBreak((HBreak breakInstruction, _) {
+          HBasicBlock block = breakInstruction.block;
+          block.addAtExit(new HBreak.toLabel(label));
+          block.remove(breakInstruction);
+        });
+      }
+    }
+    jumpHandler.close();
   }
 
   visitFor(For node) {
@@ -2049,31 +2141,56 @@
       conditionEndBlock = close(
           new HLoopBranch(conditionInstruction, HLoopBranch.DO_WHILE_LOOP));
 
-      conditionEndBlock.addSuccessor(loopEntryBlock);  // The back-edge.
+      HBasicBlock avoidCriticalEdge = addNewBlock();
+      conditionEndBlock.addSuccessor(avoidCriticalEdge);
+      open(avoidCriticalEdge);
+      close(new HGoto());
+      avoidCriticalEdge.addSuccessor(loopEntryBlock); // The back-edge.
+
       conditionExpression =
           new SubExpression(conditionBlock, conditionEndBlock);
     }
 
-    loopEntryBlock.postProcessLoopHeader();
-
     endLoop(loopEntryBlock, conditionEndBlock, jumpHandler, localsHandler);
+    if (!isAbortingBody || hasContinues) {
+      loopEntryBlock.postProcessLoopHeader();
+      SubGraph bodyGraph = new SubGraph(bodyEntryBlock, bodyExitBlock);
+      HLoopBlockInformation loopBlockInfo =
+          new HLoopBlockInformation(
+              HLoopBlockInformation.DO_WHILE_LOOP,
+              null,
+              wrapExpressionGraph(conditionExpression),
+              wrapStatementGraph(bodyGraph),
+              null,
+              loopEntryBlock.loopInformation.target,
+              loopEntryBlock.loopInformation.labels,
+              sourceFileLocationForBeginToken(node),
+              sourceFileLocationForEndToken(node));
+      loopEntryBlock.setBlockFlow(loopBlockInfo, current);
+      loopInfo.loopBlockInformation = loopBlockInfo;
+    } else {
+      // If the loop has no back edge, we remove the loop information
+      // on the header.
+      loopEntryBlock.loopInformation = null;
+
+      // If the body of the loop has any break, we attach a
+      // synthesized label to the body.
+      if (jumpHandler.hasAnyBreak()) {
+        SubGraph bodyGraph = new SubGraph(bodyEntryBlock, bodyExitBlock);
+        TargetElement target = elements[node];
+        LabelElement label = target.addLabel(null, 'loop');
+        label.isBreakTarget = true;
+        HLabeledBlockInformation info = new HLabeledBlockInformation(
+            new HSubGraphBlockInformation(bodyGraph), <LabelElement>[label]);
+        loopEntryBlock.setBlockFlow(info, current);
+        jumpHandler.forEachBreak((HBreak breakInstruction, _) {
+          HBasicBlock block = breakInstruction.block;
+          block.addAtExit(new HBreak.toLabel(label));
+          block.remove(breakInstruction);
+        });
+      }
+    }
     jumpHandler.close();
-
-    SubGraph bodyGraph = new SubGraph(bodyEntryBlock, bodyExitBlock);
-
-    HLoopBlockInformation loopBlockInfo =
-        new HLoopBlockInformation(
-            HLoopBlockInformation.DO_WHILE_LOOP,
-            null,
-            wrapExpressionGraph(conditionExpression),
-            wrapStatementGraph(bodyGraph),
-            null,
-            loopEntryBlock.loopInformation.target,
-            loopEntryBlock.loopInformation.labels,
-            sourceFileLocationForBeginToken(node),
-            sourceFileLocationForEndToken(node));
-    loopEntryBlock.setBlockFlow(loopBlockInfo, current);
-    loopInfo.loopBlockInformation = loopBlockInfo;
   }
 
   visitFunctionExpression(FunctionExpression node) {
@@ -2291,7 +2408,7 @@
     return result;
   }
 
-  Element getInterceptor(Send send, Selector selector) {
+  Set<ClassElement> getInterceptedClassesOn(Send send, Selector selector) {
     if (!methodInterceptionEnabled) return null;
     if (!backend.isInterceptorClass(currentElement.getEnclosingClass())
         && send.receiver == null) {
@@ -2299,7 +2416,7 @@
       // object.
       return null;
     }
-    return interceptors.getStaticInterceptor(selector);
+    return interceptors.getInterceptedClassesOn(selector);
   }
 
   void generateInstanceGetterWithCompiledReceiver(Send send,
@@ -2313,36 +2430,22 @@
         : elements.getSelector(send.selector);
     assert(selector.isGetter());
     SourceString getterName = selector.name;
-    Element interceptor = getInterceptor(send, selector);
+    Set<ClassElement> interceptedClasses =
+        getInterceptedClassesOn(send, selector);
 
     bool hasGetter = compiler.world.hasAnyUserDefinedGetter(selector);
-    if (interceptor == backend.getInterceptorMethod && interceptor != null) {
+    if (interceptedClasses != null) {
       // If we're using an interceptor class, emit a call to the
       // interceptor method and then the actual dynamic call on the
       // interceptor object.
-      HInstruction instruction;
-      if (backend.isInterceptorClass(currentElement.getEnclosingClass())
-          && send.receiver == null) {
-        instruction = thisInstruction;
-      } else {
-        HStatic target = new HStatic(interceptor);
-        add(target);
-        instruction = new HInvokeStatic(<HInstruction>[target, receiver]);
-        add(instruction);
-      }
+      HInstruction instruction =
+          invokeInterceptor(interceptedClasses, receiver, send);
       instruction = new HInvokeDynamicGetter(
           selector, null, instruction, !hasGetter);
       // Add the receiver as an argument to the getter call on the
       // interceptor.
       instruction.inputs.add(receiver);
       pushWithPosition(instruction, send);
-    } else if (elements[send] == null && interceptor != null) {
-      // Use the old, deprecated interceptor mechanism.
-      HStatic target = new HStatic(interceptor);
-      add(target);
-      List<HInstruction> inputs = <HInstruction>[target, receiver];
-      pushWithPosition(new HInvokeInterceptor(selector, inputs, !hasGetter),
-                       send);
     } else {
       pushWithPosition(
           new HInvokeDynamicGetter(selector, null, receiver, !hasGetter), send);
@@ -2395,16 +2498,21 @@
     Selector selector = elements.getSelector(send);
     assert(selector.isSetter());
     SourceString setterName = selector.name;
-    Element interceptor = getInterceptor(send, selector);
     bool hasSetter = compiler.world.hasAnyUserDefinedSetter(selector);
-    if (interceptor != null && interceptor == backend.getInterceptorMethod) {
-      compiler.internalError(
-          'Unimplemented intercepted setter call with interceptor classes');
-    } else if (interceptor != null && elements[send] == null) {
-      HStatic target = new HStatic(interceptor);
-      add(target);
-      List<HInstruction> inputs = <HInstruction>[target, receiver, value];
-      addWithPosition(new HInvokeInterceptor(selector, inputs), send);
+    Set<ClassElement> interceptedClasses =
+        getInterceptedClassesOn(send, selector);
+    if (interceptedClasses != null) {
+      // If we're using an interceptor class, emit a call to the
+      // getInterceptor method and then the actual dynamic call on the
+      // interceptor object.
+      HInstruction instruction =
+          invokeInterceptor(interceptedClasses, receiver, send);
+      instruction = new HInvokeDynamicSetter(
+          selector, null, instruction, receiver, !hasSetter);
+      // Add the value as an argument to the setter call on the
+      // interceptor.
+      instruction.inputs.add(value);
+      addWithPosition(instruction, send);
     } else {
       addWithPosition(
           new HInvokeDynamicSetter(selector, null, receiver, value, !hasSetter),
@@ -2448,6 +2556,19 @@
     }
   }
 
+  HInstruction invokeInterceptor(Set<ClassElement> intercepted,
+                                 HInstruction receiver,
+                                 Send send) {
+    if (send != null
+        && backend.isInterceptorClass(currentElement.getEnclosingClass())
+        && send.receiver == null) {
+      return thisInstruction;
+    }
+    HInterceptor interceptor = new HInterceptor(intercepted, receiver);
+    add(interceptor);
+    return interceptor;
+  }
+
   void pushInvokeHelper0(Element helper) {
     HInstruction reference = new HStatic(helper);
     add(reference);
@@ -2528,7 +2649,7 @@
 
       DartType type = elements.getType(typeAnnotation);
       HInstruction typeInfo = null;
-      if (compiler.codegenWorld.rti.hasTypeArguments(type)) {
+      if (RuntimeTypeInformation.hasTypeArguments(type)) {
         pushInvokeHelper1(interceptors.getGetRuntimeTypeInfo(), expression);
         typeInfo = pop();
       }
@@ -2649,7 +2770,6 @@
 
   visitDynamicSend(Send node) {
     Selector selector = elements.getSelector(node);
-    var inputs = <HInstruction>[];
 
     SourceString dartMethodName;
     bool isNotEquals = false;
@@ -2665,43 +2785,6 @@
       dartMethodName = node.selector.asIdentifier().source;
     }
 
-    Element interceptor = getInterceptor(node, selector);
-
-    if (interceptor != null) {
-      if (interceptor == backend.getInterceptorMethod) {
-        if (backend.isInterceptorClass(currentElement.getEnclosingClass())
-            && node.receiver == null) {
-          inputs.add(thisInstruction);
-          inputs.add(localsHandler.readThis());
-        } else {
-          HStatic target = new HStatic(interceptor);
-          add(target);
-          visit(node.receiver);
-          HInstruction receiver = pop();
-          HInstruction instruction =
-              new HInvokeStatic(<HInstruction>[target, receiver]);
-          add(instruction);
-          inputs.add(instruction);
-          inputs.add(receiver);
-        }
-        addDynamicSendArgumentsToList(node, inputs);
-        // The first entry in the inputs list is the interceptor. The
-        // second is the receiver, and the others are the arguments.
-        HInstruction instruction = new HInvokeDynamicMethod(selector, inputs);
-        pushWithPosition(instruction, node);
-        return;
-      } else if (elements[node] == null) {
-        HStatic target = new HStatic(interceptor);
-        add(target);
-        inputs.add(target);
-        visit(node.receiver);
-        inputs.add(pop());
-        addGenericSendArgumentsToList(node.arguments, inputs);
-        pushWithPosition(new HInvokeInterceptor(selector, inputs), node);
-        return;
-      }
-    }
-
     Element element = elements[node];
     if (element != null && compiler.world.hasNoOverridingMember(element)) {
       if (tryInlineMethod(element, selector, node.arguments)) {
@@ -2709,16 +2792,24 @@
       }
     }
 
+    HInstruction receiver;
     if (node.receiver == null) {
-      inputs.add(localsHandler.readThis());
+      receiver = localsHandler.readThis();
     } else {
       visit(node.receiver);
-      inputs.add(pop());
+      receiver = pop();
     }
 
+    List<HInstruction> inputs = <HInstruction>[];
+    Set<ClassElement> interceptedClasses =
+        interceptors.getInterceptedClassesOn(selector);
+    if (interceptedClasses != null) {
+      inputs.add(invokeInterceptor(interceptedClasses, receiver, node));
+    }
+    inputs.add(receiver);
+
     addDynamicSendArgumentsToList(node, inputs);
 
-    // The first entry in the inputs list is the receiver.
     pushWithPosition(new HInvokeDynamicMethod(selector, inputs), node);
 
     if (isNotEquals) {
@@ -2995,8 +3086,9 @@
                             localsHandler.readThis());
           typeInfo = pop();
         }
+        int index = RuntimeTypeInformation.getTypeVariableIndex(type);
         HInstruction foreign = new HForeign(
-            new LiteralDartString('#.${type.name.slowToString()}'),
+            new LiteralDartString('#[$index]'),
             new LiteralDartString('String'),
             <HInstruction>[typeInfo]);
         add(foreign);
@@ -3027,12 +3119,12 @@
       } else if (type is InterfaceType) {
         bool isFirstVariable = true;
         InterfaceType interfaceType = type;
-        bool hasTypeArguments = !interfaceType.arguments.isEmpty;
+        bool hasTypeArguments = !interfaceType.typeArguments.isEmpty;
         if (!isInQuotes) template.add("'");
-        template.add(rti.getName(type.element));
+        template.add(backend.namer.getName(type.element));
         if (hasTypeArguments) {
           template.add("<");
-          for (DartType argument in interfaceType.arguments) {
+          for (DartType argument in interfaceType.typeArguments) {
             if (!isFirstVariable) {
               template.add(", ");
             } else {
@@ -3046,7 +3138,7 @@
       } else {
         assert(type is TypedefType);
         if (!isInQuotes) template.add("'");
-        template.add(rti.getName(argument.element));
+        template.add(backend.namer.getName(argument.element));
         if (!isInQuotes) template.add("'");
       }
     }
@@ -3065,7 +3157,7 @@
                              HInstruction newObject) {
     if (!compiler.world.needsRti(type.element)) return;
     List<HInstruction> inputs = <HInstruction>[];
-    type.arguments.forEach((DartType argument) {
+    type.typeArguments.forEach((DartType argument) {
       inputs.add(analyzeTypeArgument(argument, currentNode));
     });
     callSetRuntimeTypeInfo(type.element, inputs, newObject);
@@ -3074,49 +3166,19 @@
   void callSetRuntimeTypeInfo(ClassElement element,
                               List<HInstruction> rtiInputs,
                               HInstruction newObject) {
-    bool needsRti = compiler.world.needsRti(element) && !rtiInputs.isEmpty;
-    bool runtimeTypeIsUsed = compiler.enabledRuntimeType;
-    if (!needsRti && !runtimeTypeIsUsed) return;
-
-    HInstruction createForeign(String template,
-                               List<HInstruction> arguments,
-                               [String type = 'String']) {
-      return new HForeign(new LiteralDartString(template),
-                          new LiteralDartString(type),
-                          arguments);
+    if (!compiler.world.needsRti(element) || element.typeVariables.isEmpty) {
+      return;
     }
 
-    // Construct the runtime type information.
-    StringBuffer runtimeCode = new StringBuffer();
-    List<HInstruction> runtimeCodeInputs = <HInstruction>[];
-    if (runtimeTypeIsUsed) {
-      String runtimeTypeString =
-          rti.generateRuntimeTypeString(element, rtiInputs.length);
-      HInstruction runtimeType = createForeign(runtimeTypeString, rtiInputs);
-      add(runtimeType);
-      runtimeCodeInputs.add(runtimeType);
-      runtimeCode.add("runtimeType: '#'");
-    }
-    if (needsRti) {
-      if (runtimeTypeIsUsed) runtimeCode.add(', ');
-      String typeVariablesString =
-          RuntimeTypeInformation.generateTypeVariableString(element,
-                                                            rtiInputs.length);
-      HInstruction typeInfo = createForeign(typeVariablesString, rtiInputs);
-      add(typeInfo);
-      runtimeCodeInputs.add(typeInfo);
-      runtimeCode.add('#');
-    }
-    HInstruction runtimeInfo =
-        createForeign("{$runtimeCode}", runtimeCodeInputs, 'Object');
-    add(runtimeInfo);
+    HInstruction typeInfo = new HLiteralList(rtiInputs);
+    add(typeInfo);
 
     // Set the runtime type information on the object.
     Element typeInfoSetterElement = interceptors.getSetRuntimeTypeInfo();
     HInstruction typeInfoSetter = new HStatic(typeInfoSetterElement);
     add(typeInfoSetter);
     add(new HInvokeStatic(
-        <HInstruction>[typeInfoSetter, newObject, runtimeInfo]));
+        <HInstruction>[typeInfoSetter, newObject, typeInfo]));
   }
 
   visitNewSend(Send node, InterfaceType type) {
@@ -3167,22 +3229,10 @@
       return;
     }
     if (compiler.world.needsRti(constructor.enclosingElement)) {
-      if (!type.arguments.isEmpty) {
-        type.arguments.forEach((DartType argument) {
+      if (!type.typeArguments.isEmpty) {
+        type.typeArguments.forEach((DartType argument) {
           inputs.add(analyzeTypeArgument(argument, node));
         });
-      } else if (compiler.enabledRuntimeType) {
-        Link<DartType> variables =
-            constructor.getEnclosingClass().typeVariables;
-        if (!variables.isEmpty) {
-          // If the class has type variables but no type arguments have been
-          // provided, add [:dynamic:] as argument for all type variables.
-          DartString stringDynamic = new DartString.literal('dynamic');
-          HInstruction input = graph.addConstantString(stringDynamic,
-                                                       node,
-                                                       constantSystem);
-          variables.forEach((_) => inputs.add(input));
-        }
       }
     }
 
@@ -3263,22 +3313,17 @@
 
   visitTypeReferenceSend(Send node) {
     Element element = elements[node];
-    HInstruction name;
-    Element helper =
-        compiler.findHelper(const SourceString('createRuntimeType'));
-    if (element.isClass()) {
-      String string = rti.generateRuntimeTypeString(element, 0);
-      name = addConstantString(node.selector, string);
-    } else if (element.isTypedef()) {
-      // TODO(karlklose): implement support for type variables in typedefs.
-      name = addConstantString(node.selector, rti.getName(element));
+    if (element.isClass() || element.isTypedef()) {
+      // TODO(karlklose): add type representation
+      ConstantHandler handler = compiler.constantHandler;
+      Constant constant = handler.compileNodeWithDefinitions(node, elements);
+      stack.add(graph.addConstant(constant));
     } else if (element.isTypeVariable()) {
       // TODO(6248): implement support for type variables.
       compiler.unimplemented('first class type for type variable', node: node);
     } else {
-      internalError('unexpected element $element', node: node);
+      internalError('unexpected element kind $element', node: node);
     }
-    pushInvokeHelper1(helper, name);
     if (node.isCall) {
       // This send is of the form 'e(...)', where e is resolved to a type
       // reference. We create a regular closure call on the result of the type
@@ -3378,8 +3423,10 @@
 
   visitNewExpression(NewExpression node) {
     Element element = elements[node.send];
-    if (!Elements.isErroneousElement(element)) {
-      element = element.redirectionTarget;
+    if (!Elements.isErroneousElement(element) &&
+        !Elements.isMalformedElement(element)) {
+      FunctionElement function = element;
+      element = function.redirectionTarget;
     }
     if (Elements.isErroneousElement(element)) {
       ErroneousElement error = element;
@@ -3399,6 +3446,10 @@
       ConstantHandler handler = compiler.constantHandler;
       Constant constant = handler.compileNodeWithDefinitions(node, elements);
       stack.add(graph.addConstant(constant));
+    } else if (Elements.isMalformedElement(element)) {
+      Message message =
+          MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER.message([element]);
+      generateRuntimeError(node.send, message.toString());
     } else {
       visitNewSend(node.send, elements.getType(node));
     }
@@ -3604,11 +3655,7 @@
     } else {
       visit(node.expression);
       value = pop();
-      if (value is HForeign) {
-        // TODO(6530, 6534): remove this check.
-      } else {
-        value = potentiallyCheckType(value, returnType);
-      }
+      value = potentiallyCheckType(value, returnType);
     }
 
     handleInTryStatement();
@@ -3759,19 +3806,23 @@
       SourceString iteratorName = const SourceString("iterator");
       Selector selector =
           new Selector.call(iteratorName, work.element.getLibrary(), 0);
-      Element interceptor = interceptors.getStaticInterceptor(selector);
-      assert(interceptor != null);
+      Set<ClassElement> interceptedClasses =
+          interceptors.getInterceptedClassesOn(selector);
       visit(node.expression);
-      pushInvokeHelper1(interceptor, pop());
-      iterator = pop();
+      HInstruction receiver = pop();
+      if (interceptedClasses == null) {
+        iterator = new HInvokeDynamicMethod(selector, <HInstruction>[receiver]);
+      } else {
+        HInterceptor interceptor =
+            invokeInterceptor(interceptedClasses, receiver, null);
+        iterator = new HInvokeDynamicMethod(
+            selector, <HInstruction>[interceptor, receiver]);
+      }
+      add(iterator);
     }
     HInstruction buildCondition() {
       SourceString name = const SourceString('hasNext');
       Selector selector = new Selector.getter(name, work.element.getLibrary());
-      if (interceptors.getStaticInterceptor(selector) != null) {
-        compiler.internalError("hasNext getter must not be intercepted",
-                               node: node);
-      }
       bool hasGetter = compiler.world.hasAnyUserDefinedGetter(selector);
       push(new HInvokeDynamicGetter(selector, null, iterator, !hasGetter));
       return popBoolified();
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
index 1cc242f..d51850f 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
@@ -65,16 +65,6 @@
 
   CodeBuffer generateMethod(WorkItem work, HGraph graph) {
     return measure(() {
-      JavaScriptItemCompilationContext context = work.compilationContext;
-      HTypeMap types = context.types;
-      graph.exit.predecessors.forEach((block) {
-        assert(block.last is HGoto || block.last is HReturn);
-        if (block.last is HReturn) {
-          backend.registerReturnType(work.element, types[block.last.inputs[0]]);
-        } else {
-          backend.registerReturnType(work.element, HType.NULL);
-        }
-      });
       compiler.tracer.traceGraph("codegen", graph);
       SsaOptimizedCodeGenerator codegen =
           new SsaOptimizedCodeGenerator(backend, work);
@@ -382,6 +372,20 @@
     allocator.visitGraph(graph);
     variableNames = allocator.names;
     shouldGroupVarDeclarations = allocator.names.numberOfVariables > 1;
+
+    // Don't register a return type for lazily initialized variables.
+    if (work.element is! FunctionElement) return;
+
+    // Register return types to the backend.
+    graph.exit.predecessors.forEach((HBasicBlock block) {
+      HInstruction last = block.last;
+      assert(last is HGoto || last is HReturn);
+      if (last is HReturn) {
+        backend.registerReturnType(work.element, types[last.inputs[0]]);
+      } else {
+        backend.registerReturnType(work.element, HType.NULL);
+      }
+    });
   }
 
   void handleDelayedVariableDeclarations() {
@@ -831,7 +835,7 @@
 
   bool visitLoopInfo(HLoopBlockInformation info) {
     HExpressionInformation condition = info.condition;
-    bool isConditionExpression = condition == null || isJSCondition(condition);
+    bool isConditionExpression = isJSCondition(condition);
 
     js.Loop loop;
 
@@ -943,18 +947,29 @@
         }
         break;
       case HLoopBlockInformation.DO_WHILE_LOOP:
-        // If there are phi copies after the condition, we cannot emit
-        // a pretty do/while loop, se we fallback to the generic
-        // emission of a loop.
-        CopyHandler handler = variableNames.getCopyHandler(info.end);
-        if (handler != null && !handler.isEmpty) return false;
         if (info.initializer != null) {
           generateStatements(info.initializer);
         }
         js.Block oldContainer = currentContainer;
-        js.Statement body = new js.Block.empty();
+        js.Block body = new js.Block.empty();
+        // If there are phi copies in the block that jumps to the
+        // loop entry, we must emit the condition like this:
+        // do {
+        //   body;
+        //   if (condition) {
+        //     phi updates;
+        //     continue;
+        //   } else {
+        //     break;
+        //   }
+        // } while (true);
+        HBasicBlock avoidEdge = info.end.successors[0];
+        js.Block updateBody = new js.Block.empty();
+        currentContainer = updateBody;
+        assignPhisOfSuccessors(avoidEdge);
+        bool hasPhiUpdates = !updateBody.statements.isEmpty;
         currentContainer = body;
-        if (!isConditionExpression || info.updates != null) {
+        if (hasPhiUpdates || !isConditionExpression || info.updates != null) {
           wrapLoopBodyForContinue(info);
         } else {
           visitBodyIgnoreLabels(info);
@@ -962,18 +977,21 @@
         if (info.updates != null) {
           generateStatements(info.updates);
         }
-        if (condition == null) {
-          push(newLiteralBool(false));
-        } else if (isConditionExpression) {
+        if (isConditionExpression) {
           push(generateExpression(condition));
         } else {
           generateStatements(condition);
           use(condition.conditionExpression);
         }
         js.Expression jsCondition = pop();
+        if (hasPhiUpdates) {
+          updateBody.statements.add(new js.Continue(null));
+          body.statements.add(
+              new js.If(jsCondition, updateBody, new js.Break(null)));
+          jsCondition = newLiteralBool(true);
+        }
+        loop = new js.Do(unwrapStatement(body), jsCondition);
         currentContainer = oldContainer;
-        body = unwrapStatement(body);
-        loop = new js.Do(body, jsCondition);
         break;
       default:
         compiler.internalError(
@@ -1244,16 +1262,7 @@
       }
       instruction = instruction.next;
     }
-    if (instruction is HLoopBranch) {
-      HLoopBranch branch = instruction;
-      // If the loop is a do/while loop, the phi updates must happen
-      // after the evaluation of the condition.
-      if (!branch.isDoWhile()) {
-        assignPhisOfSuccessors(node);
-      }
-    } else {
-      assignPhisOfSuccessors(node);
-    }
+    assignPhisOfSuccessors(node);
     visit(instruction);
   }
 
@@ -1520,14 +1529,15 @@
                        arguments);
   }
 
-  // TODO(ngeoffray): Once we remove the old interceptors, we can
-  // start using HInvokeInterceptor to represent interceptor calls on
-  // an Interceptor class. Currently we recognize if a call is a call
-  // on an interceptor by checking if the arguments in the inputs list
-  // is one more than the arguments in the selector. The extra
-  // argument in an interceptor call is the actual receiver.
-  bool isInterceptorCall(HInvokeDynamic node) {
-    return node.inputs.length - 1 != node.selector.argumentCount;
+  void visitInterceptor(HInterceptor node) {
+    Element element = backend.getInterceptorMethod;
+    assert(element != null);
+    world.registerStaticUse(element);
+    js.VariableUse interceptor =
+        new js.VariableUse(backend.namer.isolateAccess(element));
+    use(node.receiver);
+    List<js.Expression> arguments = <js.Expression>[pop()];
+    push(new js.Call(interceptor, arguments), node);
   }
 
   visitInvokeDynamicMethod(HInvokeDynamicMethod node) {
@@ -1556,7 +1566,7 @@
       // receiver (the first is the interceptor), the backend gets
       // confused. We should pass a list of types instead of a node to
       // [registerDynamicInvocation].
-      if (!isInterceptorCall(node)) {
+      if (!node.isInterceptorCall) {
         backend.registerDynamicInvocation(node, selector, types);
       } else {
         backend.addInterceptedSelector(selector);
@@ -1591,7 +1601,7 @@
     // TODO(4434): For private members we need to use the untyped selector.
     if (defaultSelector.name.isPrivate()) return defaultSelector;
     // TODO(ngeoffray): Type intercepted calls.
-    if (isInterceptorCall(node)) return defaultSelector;
+    if (node.isInterceptorCall) return defaultSelector;
     // If [JSInvocationMirror.invokeOn] has been called, we must not create a
     // typed selector based on the receiver type.
     if (node.element == null && // Invocation is not exact.
@@ -1614,7 +1624,14 @@
     push(jsPropertyCall(pop(), name, visitArguments(node.inputs)), node);
     Selector selector = getOptimizedSelectorFor(node, setter);
     world.registerDynamicSetter(setter.name, selector);
-    backend.addedDynamicSetter(selector, types[node.inputs[1]]);
+    HType valueType;
+    if (node.isInterceptorCall) {
+      valueType = types[node.inputs[2]];
+      backend.addInterceptedSelector(setter);
+    } else {
+      valueType = types[node.inputs[1]];
+    }
+    backend.addedDynamicSetter(selector, valueType);
   }
 
   visitInvokeDynamicGetter(HInvokeDynamicGetter node) {
@@ -1624,7 +1641,7 @@
     push(jsPropertyCall(pop(), name, visitArguments(node.inputs)), node);
     world.registerDynamicGetter(
         getter.name, getOptimizedSelectorFor(node, getter));
-    if (isInterceptorCall(node)) {
+    if (node.isInterceptorCall) {
       backend.addInterceptedSelector(getter);
     }
   }
@@ -1645,9 +1662,7 @@
   }
 
   visitInvokeStatic(HInvokeStatic node) {
-    if (true &&
-        (node.typeCode() == HInstruction.INVOKE_STATIC_TYPECODE ||
-         node.typeCode() == HInstruction.INVOKE_INTERCEPTOR_TYPECODE)) {
+    if (node.typeCode() == HInstruction.INVOKE_STATIC_TYPECODE) {
       // Register this invocation to collect the types used at all call sites.
       backend.registerStaticInvocation(node, types);
     }
@@ -1706,32 +1721,25 @@
   }
 
   visitFieldGet(HFieldGet node) {
-    String name = backend.namer.getName(node.element);
     use(node.receiver);
-    push(new js.PropertyAccess.field(pop(), name), node);
-    HType receiverHType = types[node.receiver];
-    DartType type = receiverHType.computeType(compiler);
-    if (type != null) {
-      world.registerFieldGetter(
-          node.element.name, node.element.getLibrary(), type);
+    if (node.element == backend.jsArrayLength
+        || node.element == backend.jsStringLength) {
+      // We're accessing a native JavaScript property called 'length'
+      // on a JS String or a JS array. Therefore, the name of that
+      // property should not be mangled.
+      push(new js.PropertyAccess.field(pop(), 'length'), node);
+    } else {
+      String name = backend.namer.getName(node.element);
+      push(new js.PropertyAccess.field(pop(), name), node);
+      HType receiverHType = types[node.receiver];
+      DartType type = receiverHType.computeType(compiler);
+      if (type != null) {
+        world.registerFieldGetter(
+            node.element.name, node.element.getLibrary(), type);
+      }
     }
   }
 
-  // Determine if an instruction is a simple number computation
-  // involving only things with guaranteed number types and a given
-  // field.
-  bool isSimpleFieldNumberComputation(HInstruction value, HFieldSet node) {
-    if (value.guaranteedType.union(HType.NUMBER, compiler) == HType.NUMBER) {
-      return true;
-    }
-    if (value is HBinaryArithmetic) {
-      return (isSimpleFieldNumberComputation(value.left, node) &&
-              isSimpleFieldNumberComputation(value.right, node));
-    }
-    if (value is HFieldGet) return value.element == node.element;
-    return false;
-  }
-
   visitFieldSet(HFieldSet node) {
     String name = backend.namer.getName(node.element);
     DartType type = types[node.receiver].computeType(compiler);
@@ -1870,11 +1878,7 @@
     HBasicBlock branchBlock = currentBlock;
     handleLoopCondition(node);
     List<HBasicBlock> dominated = currentBlock.dominatedBlocks;
-    if (node.isDoWhile()) {
-      // Now that the condition has been evaluated, we can update the
-      // phis of a do/while loop.
-      assignPhisOfSuccessors(node.block);
-    } else {
+    if (!node.isDoWhile()) {
       // For a do while loop, the body has already been visited.
       visitBasicBlock(dominated[0]);
     }
@@ -2193,64 +2197,6 @@
     }
   }
 
-  String builtinJsName(HInvokeInterceptor interceptor) {
-    // Don't count the target method or the receiver in the arity.
-    int arity = interceptor.inputs.length - 2;
-    HInstruction receiver = interceptor.inputs[1];
-    bool isCall = interceptor.selector.isCall();
-    SourceString name = interceptor.selector.name;
-
-    if (interceptor.isLengthGetterOnStringOrArray(types)) {
-      return 'length';
-    } else if (interceptor.isPopCall(types)) {
-      return 'pop';
-    } else if (receiver.isExtendableArray(types) && isCall) {
-      if (name == const SourceString('add') && arity == 1) {
-        return 'push';
-      }
-    } else if (receiver.isString(types) && isCall) {
-      if (name == const SourceString('concat') &&
-          arity == 1 &&
-          interceptor.inputs[2].isString(types)) {
-        return '+';
-      }
-      if (name == const SourceString('split') &&
-          arity == 1 &&
-          interceptor.inputs[2].isString(types)) {
-        return 'split';
-      }
-    }
-
-    return null;
-  }
-
-  void visitInvokeInterceptor(HInvokeInterceptor node) {
-    String builtin = builtinJsName(node);
-    if (builtin != null) {
-      if (builtin == '+') {
-        use(node.inputs[1]);
-        js.Expression left = pop();
-        use(node.inputs[2]);
-        push(new js.Binary("+", left, pop()), node);
-      } else {
-        use(node.inputs[1]);
-        js.PropertyAccess access = new js.PropertyAccess.field(pop(), builtin);
-        if (node.selector.isGetter()) {
-          push(access, node);
-          return;
-        }
-        List<js.Expression> arguments = <js.Expression>[];
-        for (int i = 2; i < node.inputs.length; i++) {
-          use(node.inputs[i]);
-          arguments.add(pop());
-        }
-        push(new js.Call(access, arguments), node);
-      }
-    } else {
-      return visitInvokeStatic(node);
-    }
-  }
-
   void checkInt(HInstruction input, String cmp) {
     use(input);
     js.Expression left = pop();
@@ -2471,22 +2417,22 @@
     if (node.hasTypeInfo()) {
       InterfaceType interfaceType = type;
       ClassElement cls = type.element;
-      Link<DartType> arguments = interfaceType.arguments;
+      Link<DartType> arguments = interfaceType.typeArguments;
       js.Expression result = pop();
       for (TypeVariableType typeVariable in cls.typeVariables) {
         use(node.typeInfoCall);
-        // TODO(johnniwinther): Retrieve the type name properly and not through
-        // [toString]. Note: Two cases below [typeVariable] and
-        // [arguments.head].
-        js.PropertyAccess field =
-            new js.PropertyAccess.field(pop(), typeVariable.toString());
-        js.Expression genericName = new js.LiteralString("'${arguments.head}'");
+        int index = RuntimeTypeInformation.getTypeVariableIndex(typeVariable);
+        js.PropertyAccess field = new js.PropertyAccess.indexed(pop(), index);
+        RuntimeTypeInformation rti = backend.rti;
+        String typeName = rti.getStringRepresentation(arguments.head);
+        js.Expression genericName = new js.LiteralString("'$typeName'");
         js.Binary eqTest = new js.Binary('===', field, genericName);
         // Also test for 'undefined' in case the object does not have
         // any type variable.
         js.Prefix undefinedTest = new js.Prefix('!', field);
         result = new js.Binary(
             '&&', result, new js.Binary('||', undefinedTest, eqTest));
+        arguments = arguments.tail;
       }
       push(result, node);
     }
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart b/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
index 346d80b..2878379 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
@@ -32,11 +32,11 @@
   R visitIndex(HIndex node);
   R visitIndexAssign(HIndexAssign node);
   R visitIntegerCheck(HIntegerCheck node);
+  R visitInterceptor(HInterceptor node);
   R visitInvokeClosure(HInvokeClosure node);
   R visitInvokeDynamicGetter(HInvokeDynamicGetter node);
   R visitInvokeDynamicMethod(HInvokeDynamicMethod node);
   R visitInvokeDynamicSetter(HInvokeDynamicSetter node);
-  R visitInvokeInterceptor(HInvokeInterceptor node);
   R visitInvokeStatic(HInvokeStatic node);
   R visitInvokeSuper(HInvokeSuper node);
   R visitIs(HIs node);
@@ -292,6 +292,7 @@
   visitIndex(HIndex node) => visitInvokeStatic(node);
   visitIndexAssign(HIndexAssign node) => visitInvokeStatic(node);
   visitIntegerCheck(HIntegerCheck node) => visitCheck(node);
+  visitInterceptor(HInterceptor node) => visitInstruction(node);
   visitInvokeClosure(HInvokeClosure node)
       => visitInvokeDynamic(node);
   visitInvokeDynamicMethod(HInvokeDynamicMethod node)
@@ -300,8 +301,6 @@
       => visitInvokeDynamicField(node);
   visitInvokeDynamicSetter(HInvokeDynamicSetter node)
       => visitInvokeDynamicField(node);
-  visitInvokeInterceptor(HInvokeInterceptor node)
-      => visitInvokeStatic(node);
   visitInvokeStatic(HInvokeStatic node) => visitInvoke(node);
   visitInvokeSuper(HInvokeSuper node) => visitInvoke(node);
   visitJump(HJump node) => visitControlFlow(node);
@@ -504,18 +503,6 @@
     status = STATUS_CLOSED;
   }
 
-  // TODO(kasperl): I really don't want to pass the compiler into this
-  // method. Maybe we need a better logging framework.
-  void printToCompiler(Compiler compiler) {
-    HInstruction instruction = first;
-    while (instruction != null) {
-      int instructionId = instruction.id;
-      String inputsAsString = instruction.inputsToString();
-      compiler.log('$instructionId: $instruction $inputsAsString');
-      instruction = instruction.next;
-    }
-  }
-
   void addAtEntry(HInstruction instruction) {
     assert(instruction is !HPhi);
     super.addBefore(first, instruction);
@@ -784,7 +771,7 @@
   static const int TYPE_GUARD_TYPECODE = 1;
   static const int BOUNDS_CHECK_TYPECODE = 2;
   static const int INTEGER_CHECK_TYPECODE = 3;
-  static const int INVOKE_INTERCEPTOR_TYPECODE = 4;
+  static const int INTERCEPTOR_TYPECODE = 4;
   static const int ADD_TYPECODE = 5;
   static const int DIVIDE_TYPECODE = 6;
   static const int MODULO_TYPECODE = 7;
@@ -1118,11 +1105,13 @@
   bool isJsStatement(HTypeMap types) => false;
 
   bool dominates(HInstruction other) {
+    // An instruction does not dominates itself.
+    if (this == other) return false;
     if (block != other.block) return block.dominates(other.block);
 
-    HInstruction current = this;
+    HInstruction current = this.next;
     while (current != null) {
-      if (identical(current, other)) return true;
+      if (current == other) return true;
       current = current.next;
     }
     return false;
@@ -1284,12 +1273,10 @@
   HInstruction get condition => inputs[0];
   HBasicBlock get trueBranch => block.successors[0];
   HBasicBlock get falseBranch => block.successors[1];
-  toString();
 }
 
 abstract class HControlFlow extends HInstruction {
   HControlFlow(inputs) : super(inputs);
-  toString();
   void prepareGvn(HTypeMap types) {
     // Control flow does not have side-effects.
   }
@@ -1305,9 +1292,6 @@
     */
   HInvoke(List<HInstruction> inputs) : super(inputs);
   static const int ARGUMENTS_OFFSET = 1;
-
-  // TODO(floitsch): make class abstract instead of adding an abstract method.
-  accept(HVisitor visitor);
 }
 
 abstract class HInvokeDynamic extends HInvoke {
@@ -1319,8 +1303,12 @@
   toString() => 'invoke dynamic: $selector';
   HInstruction get receiver => inputs[0];
 
-  // TODO(floitsch): make class abstract instead of adding an abstract method.
-  accept(HVisitor visitor);
+  bool get isInterceptorCall {
+    // We know it's a selector call if it follows the interceptor
+    // calling convention, which adds the actual receiver as a
+    // parameter to the call.
+    return inputs.length - 2 == selector.argumentCount;
+  }
 }
 
 class HInvokeClosure extends HInvokeDynamic {
@@ -1343,9 +1331,6 @@
       this.isSideEffectFree)
       : super(selector, element, inputs);
   toString() => 'invoke dynamic field: $selector';
-
-  // TODO(floitsch): make class abstract instead of adding an abstract method.
-  accept(HVisitor visitor);
 }
 
 class HInvokeDynamicGetter extends HInvokeDynamicField {
@@ -1426,83 +1411,6 @@
   }
 }
 
-class HInvokeInterceptor extends HInvokeStatic {
-  final Selector selector;
-  final bool isSideEffectFree;
-
-  HInvokeInterceptor(this.selector,
-                     List<HInstruction> inputs,
-                     [bool this.isSideEffectFree = false])
-      : super(inputs);
-
-  toString() => 'invoke interceptor: ${element.name}';
-  accept(HVisitor visitor) => visitor.visitInvokeInterceptor(this);
-
-  bool isLengthGetter() {
-    return selector.isGetter() &&
-        selector.name == const SourceString('length');
-  }
-
-  bool isPopCall(HTypeMap types) {
-    return selector.isCall()
-        && inputs[1].isExtendableArray(types)
-        && selector.name == const SourceString('removeLast')
-        && selector.argumentCount == 0;
-  }
-
-  bool isLengthGetterOnStringOrArray(HTypeMap types) {
-    return isLengthGetter() && inputs[1].isIndexablePrimitive(types);
-  }
-
-  HType computeLikelyType(HTypeMap types, Compiler compiler) {
-    // In general a length getter or method returns an int.
-    if (isLengthGetter()) return HType.INTEGER;
-    return HType.UNKNOWN;
-  }
-
-  HType computeTypeFromInputTypes(HTypeMap types, Compiler compiler) {
-    if (isLengthGetterOnStringOrArray(types)) return HType.INTEGER;
-    return HType.UNKNOWN;
-  }
-
-  HType computeDesiredTypeForNonTargetInput(HInstruction input,
-                                            HTypeMap types,
-                                            Compiler compiler) {
-    // If the first argument is a string or an array and we invoke methods
-    // on it that mutate it, then we want to restrict the incoming type to be
-    // a mutable array.
-    if (input == inputs[1] && input.isIndexablePrimitive(types)) {
-      // TODO(kasperl): Should we check that the selector is a call selector?
-      if (selector.name == const SourceString('add')
-          || selector.name == const SourceString('removeLast')) {
-        return HType.MUTABLE_ARRAY;
-      }
-    }
-    return HType.UNKNOWN;
-  }
-
-  void prepareGvn(HTypeMap types) {
-    clearAllSideEffects();
-    if (isLengthGetterOnStringOrArray(types)) {
-      setUseGvn();
-      // If the input is a string or a fixed length array, we know
-      // the length cannot change.
-      if (!inputs[1].isString(types) && !inputs[1].isFixedArray(types)) {
-        setDependsOnInstancePropertyStore();
-      }
-    } else if (isSideEffectFree) {
-      setUseGvn();
-      setDependsOnSomething();
-    } else {
-      setAllSideEffects();
-    }
-  }
-
-  int typeCode() => HInstruction.INVOKE_INTERCEPTOR_TYPECODE;
-  bool typeEquals(other) => other is HInvokeInterceptor;
-  bool dataEquals(HInvokeInterceptor other) => selector == other.selector;
-}
-
 abstract class HFieldAccess extends HInstruction {
   final Element element;
 
@@ -1827,9 +1735,6 @@
     if (left.isTypeUnknown(types)) return HType.INTEGER;
     return HType.UNKNOWN;
   }
-
-  // TODO(floitsch): make class abstract instead of adding an abstract method.
-  accept(HVisitor visitor);
 }
 
 class HShiftLeft extends HBinaryBitOp {
@@ -2301,8 +2206,6 @@
 
   bool isBuiltin(HTypeMap types)
       => left.isNumber(types) && right.isNumber(types);
-  // TODO(1603): the class should be marked as abstract.
-  BinaryOperation operation(ConstantSystem constantSystem);
 }
 
 class HEquals extends HRelational {
@@ -2311,7 +2214,7 @@
   accept(HVisitor visitor) => visitor.visitEquals(this);
 
   bool isBuiltin(HTypeMap types) {
-    // All primitive types have === semantics.
+    // All primitive types have 'identical' semantics.
     // Note that this includes all constants except the user-constructed
     // objects.
     return types[left].isPrimitiveOrNull() || right.isConstantNull();
@@ -2327,7 +2230,7 @@
                                             Compiler compiler) {
     HType propagatedType = types[this];
     if (input == left && types[right].isUseful()) {
-      // All our useful types have === semantics. But we don't want to
+      // All our useful types have 'identical' semantics. But we don't want to
       // speculatively test for all possible types. Therefore we try to match
       // the two types. That is, if we see x == 3, then we speculatively test
       // if x is a number and bailout if it isn't.
@@ -2466,6 +2369,21 @@
   bool isCodeMotionInvariant() => !element.isAssignable();
 }
 
+class HInterceptor extends HInstruction {
+  final Set<ClassElement> interceptedClasses;
+  HInterceptor(this.interceptedClasses, HInstruction receiver)
+      : super(<HInstruction>[receiver]);
+  String toString() => 'interceptor on $interceptedClasses';
+  accept(HVisitor visitor) => visitor.visitInterceptor(this);
+  HInstruction get receiver => inputs[0];
+
+  void prepareGvn(HTypeMap types) {
+    clearAllSideEffects();
+  }
+
+  int typeCode() => HInstruction.INTERCEPTOR_TYPECODE;
+}
+
 /** An [HLazyStatic] is a static that is initialized lazily at first read. */
 class HLazyStatic extends HStatic {
   HLazyStatic(Element element) : super(element);
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
index 6333b0e..e0b8c41 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
@@ -44,6 +44,7 @@
           new SsaRedundantPhiEliminator(),
           new SsaDeadPhiEliminator(),
           new SsaConstantFolder(constantSystem, backend, work, types),
+          new SsaTypePropagator(compiler, types),
           new SsaGlobalValueNumberer(compiler, types),
           new SsaCodeMotion(),
           new SsaValueRangeAnalyzer(constantSystem, types, work),
@@ -204,61 +205,18 @@
     return node;
   }
 
-  HInstruction visitInvokeInterceptor(HInvokeInterceptor node) {
-    // Try to recognize the length interceptor with input [:new List(int):].
-    if (node.isLengthGetter() && node.inputs[1] is HInvokeStatic) {
-      HInvokeStatic call = node.inputs[1];
-      if (isFixedSizeListConstructor(call)) {
-        return call.inputs[1];
-      }
-    }
+  HInstruction handleInterceptorCall(HInvokeDynamic node) {
     HInstruction input = node.inputs[1];
-    if (node.isLengthGetter()) {
-      if (input.isConstantString()) {
-        HConstant constantInput = input;
-        StringConstant constant = constantInput.constant;
-        return graph.addConstantInt(constant.length, constantSystem);
-      } else if (input.isConstantList()) {
-        HConstant constantInput = input;
-        ListConstant constant = constantInput.constant;
-        return graph.addConstantInt(constant.length, constantSystem);
-      } else if (input.isConstantMap()) {
-        HConstant constantInput = input;
-        MapConstant constant = constantInput.constant;
-        return graph.addConstantInt(constant.length, constantSystem);
-      }
-    }
-
     if (input.isString(types)
         && node.selector.name == const SourceString('toString')) {
       return node.inputs[1];
     }
-
-    if (!input.canBePrimitive(types) && node.selector.isCall()) {
-      bool transformToDynamicInvocation = true;
-      if (input.canBeNull(types)) {
-        // Check if the method exists on Null. If yes we must not transform
-        // the static interceptor call to a dynamic invocation.
-        // TODO(floitsch): get a list of methods that exist on 'null' and only
-        // bail out on them.
-        transformToDynamicInvocation = false;
-      }
-      if (transformToDynamicInvocation) {
-        return fromInterceptorToDynamicInvocation(node, node.selector);
-      }
-    }
-
     return node;
   }
 
   bool isFixedSizeListConstructor(HInvokeStatic node) {
     Element element = node.target.element;
-    DartType defaultClass = compiler.listClass.defaultClass;
-    // TODO(ngeoffray): make sure that the only reason the List class is
-    // not resolved is because it's not being used.
-    return element.isConstructor()
-        && defaultClass != null
-        && element.enclosingElement.declaration == defaultClass.element
+    return element.getEnclosingClass() == compiler.listClass
         && node.inputs.length == 2
         && node.inputs[1].isInteger(types);
   }
@@ -271,6 +229,7 @@
   }
 
   HInstruction visitInvokeDynamic(HInvokeDynamic node) {
+    if (node.isInterceptorCall) return handleInterceptorCall(node);
     HType receiverType = types[node.receiver];
     if (receiverType.isExact()) {
       HBoundedType type = receiverType;
@@ -555,7 +514,7 @@
     // TODO(karlklose): remove the hasTypeArguments check.
     } else if (expressionType.isUseful()
                && !expressionType.canBeNull()
-               && !compiler.codegenWorld.rti.hasTypeArguments(type)) {
+               && !RuntimeTypeInformation.hasTypeArguments(type)) {
       DartType receiverType = expressionType.computeType(compiler);
       if (receiverType != null) {
         if (compiler.types.isSubtype(receiverType, type)) {
@@ -592,7 +551,59 @@
     return compiler.world.locateSingleField(type, selector);
   }
 
+  HInstruction visitFieldGet(HFieldGet node) {
+    if (node.element == backend.jsArrayLength) {
+      if (node.receiver is HInvokeStatic) {
+        // Try to recognize the length getter with input [:new List(int):].
+        HInvokeStatic call = node.receiver;
+        if (isFixedSizeListConstructor(call)) {
+          return call.inputs[1];
+        }
+      }
+    }
+    return node;
+  }
+
+  HInstruction optimizeLengthInterceptedCall(HInvokeDynamicGetter node) {
+    HInstruction actualReceiver = node.inputs[1];
+    if (actualReceiver.isIndexablePrimitive(types)) {
+      if (actualReceiver.isConstantString()) {
+        HConstant constantInput = actualReceiver;
+        StringConstant constant = constantInput.constant;
+        return graph.addConstantInt(constant.length, constantSystem);
+      } else if (actualReceiver.isConstantList()) {
+        HConstant constantInput = actualReceiver;
+        ListConstant constant = constantInput.constant;
+        return graph.addConstantInt(constant.length, constantSystem);
+      }
+      Element element;
+      bool isAssignable;
+      if (actualReceiver.isString(types)) {
+        element = backend.jsStringLength;
+        isAssignable = false;
+      } else {
+        element = backend.jsArrayLength;
+        isAssignable = !actualReceiver.isFixedArray(types);
+      }
+      HFieldGet result = new HFieldGet(
+          element, actualReceiver, isAssignable: isAssignable);
+      result.guaranteedType = HType.INTEGER;
+      types[result] = HType.INTEGER;
+      return result;
+    } else if (actualReceiver.isConstantMap()) {
+      HConstant constantInput = actualReceiver;
+      MapConstant constant = constantInput.constant;
+      return graph.addConstantInt(constant.length, constantSystem);
+    }
+    return node;
+  }
+
   HInstruction visitInvokeDynamicGetter(HInvokeDynamicGetter node) {
+    if (node.selector.name == const SourceString('length')
+        && node.isInterceptorCall) {
+      return optimizeLengthInterceptedCall(node);
+    }
+
     Element field =
         findConcreteFieldForDynamicAccess(node.receiver, node.selector);
     if (field == null) return node;
@@ -655,18 +666,13 @@
   final String name = "SsaCheckInserter";
   HGraph graph;
   Element lengthInterceptor;
-  Selector lengthSelector;
 
   SsaCheckInserter(JavaScriptBackend backend,
                    this.work,
                    this.types,
                    this.boundsChecked)
       : constantSystem = backend.constantSystem {
-    SourceString lengthString = const SourceString('length');
-    lengthSelector =
-        new Selector.getter(lengthString, work.element.getLibrary());
-    lengthInterceptor =
-        backend.builder.interceptors.getStaticInterceptor(lengthSelector);
+    lengthInterceptor = backend.jsArrayLength;
   }
 
   void visitGraph(HGraph graph) {
@@ -686,10 +692,10 @@
   HBoundsCheck insertBoundsCheck(HInstruction node,
                                  HInstruction receiver,
                                  HInstruction index) {
-    HStatic interceptor = new HStatic(lengthInterceptor);
-    node.block.addBefore(node, interceptor);
-    HInvokeInterceptor length = new HInvokeInterceptor(
-        lengthSelector, <HInstruction>[interceptor, receiver], true);
+    bool isAssignable = !receiver.isFixedArray(types);
+    HFieldGet length =
+        new HFieldGet(lengthInterceptor, receiver, isAssignable: isAssignable);
+    length.guaranteedType = HType.INTEGER;
     types[length] = HType.INTEGER;
     node.block.addBefore(node, length);
 
@@ -732,13 +738,6 @@
     node.changeUse(node.index, index);
     assert(node.isBuiltin(types));
   }
-
-  void visitInvokeInterceptor(HInvokeInterceptor node) {
-    if (!node.isPopCall(types)) return;
-    if (boundsChecked.contains(node)) return;
-    HInstruction receiver = node.inputs[1];
-    insertBoundsCheck(node, receiver, graph.addConstantInt(0, constantSystem));
-  }
 }
 
 class SsaDeadCodeEliminator extends HGraphVisitor implements OptimizationPhase {
@@ -751,7 +750,7 @@
     return !instruction.hasSideEffects(types)
            && instruction.usedBy.isEmpty
            // A dynamic getter that has no side effect can still throw
-           // a NoSuchMethodError or a NullPointerException.
+           // a NoSuchMethodError.
            && instruction is !HInvokeDynamicGetter
            && instruction is !HCheck
            && instruction is !HTypeGuard
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/ssa.dart b/sdk/lib/_internal/compiler/implementation/ssa/ssa.dart
index 0e83a74..9675766 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/ssa.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/ssa.dart
@@ -12,7 +12,6 @@
 import '../elements/elements.dart';
 import '../js_backend/js_backend.dart';
 import '../native_handler.dart' as native;
-import '../runtime_types.dart';
 import '../tree/tree.dart';
 import '../types/types.dart';
 import '../universe/universe.dart';
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart b/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart
index e38fe7c..e724bbb 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart
@@ -314,6 +314,11 @@
     return "Integer check: $value";
   }
 
+  String visitInterceptor(HInterceptor node) {
+    String value = temporaryId(node.inputs[0]);
+    return "Intercept: $value";
+  }
+
   String visitInvokeClosure(HInvokeClosure node)
       => visitInvokeDynamic(node, "closure");
 
@@ -334,9 +339,6 @@
   String visitInvokeDynamicSetter(HInvokeDynamicSetter node)
       => visitInvokeDynamic(node, "set");
 
-  String visitInvokeInterceptor(HInvokeInterceptor invoke)
-      => visitInvokeStatic(invoke);
-
   String visitInvokeStatic(HInvokeStatic invoke) {
     String target = temporaryId(invoke.target);
     int offset = HInvoke.ARGUMENTS_OFFSET;
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/types_propagation.dart b/sdk/lib/_internal/compiler/implementation/ssa/types_propagation.dart
index b64d2f1..31d511a 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/types_propagation.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/types_propagation.dart
@@ -68,17 +68,14 @@
   visitBasicBlock(HBasicBlock block) {
     if (block.isLoopHeader()) {
       block.forEachPhi((HPhi phi) {
-        HType propagatedType = types[phi];
-        // Once the propagation has run once, the propagated type can already
-        // be set. In this case we use that one for the first iteration of the
-        // loop.
-        if (propagatedType.isUnknown()) {
-          // Set the initial type for the phi. In theory we would need to mark
-          // the type of all other incoming edges as "unitialized" and take this
-          // into account when doing the propagation inside the phis. Just
-          // setting the propagated type is however easier.
-          types[phi] = types[phi.inputs[0]];
-        }
+        // Set the initial type for the phi. We're not using the type
+        // the phi thinks it has because new optimizations may imply
+        // changing it.
+        // In theory we would need to mark
+        // the type of all other incoming edges as "unitialized" and take this
+        // into account when doing the propagation inside the phis. Just
+        // setting the propagated type is however easier.
+        types[phi] = types[phi.inputs[0]];
         addToWorkList(phi);
       });
     } else {
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/value_range_analyzer.dart b/sdk/lib/_internal/compiler/implementation/ssa/value_range_analyzer.dart
index 6439c96..b6d892b 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/value_range_analyzer.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/value_range_analyzer.dart
@@ -628,12 +628,12 @@
     return info.newRange(value, value);
   }
 
-  Range visitInvokeInterceptor(HInvokeInterceptor interceptor) {
-    if (!interceptor.isInteger(types)) return info.newUnboundRange();
-    if (!interceptor.isLengthGetterOnStringOrArray(types)) {
-      return visitInstruction(interceptor);
+  Range visitFieldGet(HFieldGet fieldGet) {
+    if (!fieldGet.isInteger(types)) return info.newUnboundRange();
+    if (!fieldGet.receiver.isIndexablePrimitive(types)) {
+      return visitInstruction(fieldGet);
     }
-    LengthValue value = info.newLengthValue(interceptor);
+    LengthValue value = info.newLengthValue(fieldGet);
     // We know this range is above zero. To simplify the analysis, we
     // put the zero value as the lower bound of this range. This
     // allows to easily remove the second bound check in the following
diff --git a/sdk/lib/_internal/compiler/implementation/string_validator.dart b/sdk/lib/_internal/compiler/implementation/string_validator.dart
index a5f15e2..b3bcb61 100644
--- a/sdk/lib/_internal/compiler/implementation/string_validator.dart
+++ b/sdk/lib/_internal/compiler/implementation/string_validator.dart
@@ -49,7 +49,7 @@
     bool raw = false;
     int quoteLength = 1;
     int quoteChar = source.next();
-    if (quoteChar === $r) {
+    if (identical(quoteChar, $r)) {
       raw = true;
       quoteChar = source.next();
     }
@@ -90,12 +90,15 @@
                             int startOffset,
                             SourceString string,
                             StringQuoting quoting) {
-    // We only need to check for invalid x and u escapes, for line
+    // We need to check for invalid x and u escapes, for line
     // terminators in non-multiline strings, and for invalid Unicode
-    // scalar values (either directly or as u-escape values).
+    // scalar values (either directly or as u-escape values).  We also check
+    // for unpaired UTF-16 surrogates.
     int length = 0;
     int index = startOffset;
     bool containsEscape = false;
+    bool previousWasLeadSurrogate = false;
+    bool invalidUtf16 = false;
     for(Iterator<int> iter = string.iterator(); iter.hasNext; length++) {
       index++;
       int code = iter.next();
@@ -168,15 +171,26 @@
           code = value;
         }
       }
+      if (code >= 0x10000) length++;
       // This handles both unescaped characters and the value of unicode
       // escapes.
-      if (!isUnicodeScalarValue(code)) {
-        stringParseError(
-            "Invalid Unicode scalar value U+${code.toRadixString(16)}",
-            token, index);
-        return null;
+      if (previousWasLeadSurrogate) {
+        if (!isUtf16TrailSurrogate(code)) {
+          invalidUtf16 = true;
+          break;
+        }
+        previousWasLeadSurrogate = false;
+      } else if (isUtf16LeadSurrogate(code)) {
+        previousWasLeadSurrogate = true;
+      } else if (!isUnicodeScalarValue(code)) {
+        invalidUtf16 = true;
+        break;
       }
     }
+    if (previousWasLeadSurrogate || invalidUtf16) {
+      stringParseError("Invalid Utf16 surrogate", token, index);
+      return null;
+    }
     // String literal successfully validated.
     if (quoting.raw || !containsEscape) {
       // A string without escapes could just as well have been raw.
diff --git a/sdk/lib/_internal/compiler/implementation/tree/nodes.dart b/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
index d8e5473..6515a32 100644
--- a/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
@@ -1684,7 +1684,7 @@
  * Combinators filter away some identifiers from the other library.
  */
 abstract class LibraryDependency extends LibraryTag {
-  final LiteralString uri;
+  final StringNode uri;
   final NodeList combinators;
 
   LibraryDependency(this.uri, this.combinators);
@@ -1701,7 +1701,7 @@
   final Identifier prefix;
   final Token importKeyword;
 
-  Import(this.importKeyword, LiteralString uri,
+  Import(this.importKeyword, StringNode uri,
          this.prefix, NodeList combinators)
       : super(uri, combinators);
 
@@ -1761,7 +1761,7 @@
 }
 
 class Part extends LibraryTag {
-  final LiteralString uri;
+  final StringNode uri;
 
   final Token partKeyword;
 
diff --git a/sdk/lib/_internal/compiler/implementation/typechecker.dart b/sdk/lib/_internal/compiler/implementation/typechecker.dart
index d4889b6..b192c23 100644
--- a/sdk/lib/_internal/compiler/implementation/typechecker.dart
+++ b/sdk/lib/_internal/compiler/implementation/typechecker.dart
@@ -36,6 +36,7 @@
   static const TypeKind STATEMENT = const TypeKind('statement');
   static const TypeKind TYPEDEF = const TypeKind('typedef');
   static const TypeKind TYPE_VARIABLE = const TypeKind('type variable');
+  static const TypeKind MALFORMED_TYPE = const TypeKind('malformed');
   static const TypeKind VOID = const TypeKind('void');
 
   String toString() => id;
@@ -60,6 +61,19 @@
   Element get element;
 
   /**
+   * Performs the substitution [: [arguments[i]/parameters[i]]this :].
+   *
+   * The notation is known from this lambda calculus rule:
+   *
+   *     (lambda x.e0)e1 -> [e1/x]e0.
+   *
+   * See [TypeVariableType] for a motivation for this method.
+   *
+   * Invariant: There must be the same number of [arguments] and [parameters].
+   */
+  DartType subst(Link<DartType> arguments, Link<DartType> parameters);
+
+  /**
    * Returns the unaliased type of this type.
    *
    * The unaliased type of a typedef'd type is the unaliased type to which its
@@ -76,6 +90,28 @@
   DartType asRaw() => this;
 }
 
+/**
+ * Represents a type variable, that is the type parameters of a class type.
+ *
+ * For example, in [: class Array<E> { ... } :], E is a type variable.
+ *
+ * Each class should have its own unique type variables, one for each type
+ * parameter. A class with type parameters is said to be parameterized or
+ * generic.
+ *
+ * Non-static members, constructors, and factories of generic
+ * class/interface can refer to type variables of the current class
+ * (not of supertypes).
+ *
+ * When using a generic type, also known as an application or
+ * instantiation of the type, the actual type arguments should be
+ * substituted for the type variables in the class declaration.
+ *
+ * For example, given a box, [: class Box<T> { T value; } :], the
+ * type of the expression [: new Box<String>().value :] is
+ * [: String :] because we must substitute [: String :] for the
+ * the type variable [: T :].
+ */
 class TypeVariableType extends DartType {
   final TypeVariableElement element;
 
@@ -85,6 +121,29 @@
 
   SourceString get name => element.name;
 
+  DartType subst(Link<DartType> arguments, Link<DartType> parameters) {
+    if (parameters.isEmpty) {
+      assert(arguments.isEmpty);
+      // Return fast on empty substitutions.
+      return this;
+    }
+    Link<DartType> parameterLink = parameters;
+    Link<DartType> argumentLink = arguments;
+    while (!argumentLink.isEmpty && !parameterLink.isEmpty) {
+      TypeVariableType parameter = parameterLink.head;
+      DartType argument = argumentLink.head;
+      if (parameter == this) {
+        assert(argumentLink.tail.isEmpty == parameterLink.tail.isEmpty);
+        return argument;
+      }
+      parameterLink = parameterLink.tail;
+      argumentLink = argumentLink.tail;
+    }
+    assert(argumentLink.isEmpty && parameterLink.isEmpty);
+    // The type variable was not substituted.
+    return this;
+  }
+
   DartType unalias(Compiler compiler) => this;
 
   int get hashCode => 17 * element.hashCode;
@@ -120,6 +179,11 @@
     return (identical(this, other)) ? this : MAYBE_RETURNING;
   }
 
+  DartType subst(Link<DartType> arguments, Link<DartType> parameters) {
+    // Statement types are not substitutable.
+    return this;
+  }
+
   DartType unalias(Compiler compiler) => this;
 
   int get hashCode => 17 * stringName.hashCode;
@@ -141,6 +205,11 @@
 
   final VoidElement element;
 
+  DartType subst(Link<DartType> arguments, Link<DartType> parameters) {
+    // Void cannot be substituted.
+    return this;
+  }
+
   DartType unalias(Compiler compiler) => this;
 
   int get hashCode => 1729;
@@ -150,25 +219,90 @@
   String toString() => name.slowToString();
 }
 
+/**
+ * Helper method for performing substitution of a linked list of types.
+ *
+ * If no types are changed by the substitution, the [types] is returned instead
+ * of a newly created linked list.
+ */
+Link<DartType> substTypes(Link<DartType> types,
+                          Link<DartType> arguments, Link<DartType> parameters) {
+  bool changed = false;
+  var builder = new LinkBuilder<DartType>();
+  Link<DartType> typeLink = types;
+  while (!typeLink.isEmpty) {
+    var argument = typeLink.head.subst(arguments, parameters);
+    if (!changed && !identical(argument, typeLink.head)) {
+      changed = true;
+    }
+    builder.addLast(argument);
+    typeLink = typeLink.tail;
+  }
+  if (changed) {
+    // Create a new link only if necessary.
+    return builder.toLink();
+  }
+  return types;
+}
+
+class MalformedType extends DartType {
+  const MalformedType(this.element);
+
+  TypeKind get kind => TypeKind.MALFORMED_TYPE;
+
+  SourceString get name => element.name;
+
+  final MalformedTypeElement element;
+
+  DartType unalias(Compiler compiler) => this;
+
+  int get hashCode => 1733;
+
+  bool operator ==(other) => other is MalformedType;
+
+  String toString() => name.slowToString();
+}
+
 class InterfaceType extends DartType {
   final Element element;
-  final Link<DartType> arguments;
+  final Link<DartType> typeArguments;
 
-  const InterfaceType(this.element,
-                      [this.arguments = const Link<DartType>()]);
+  InterfaceType(this.element,
+                [this.typeArguments = const Link<DartType>()]) {
+    assert(invariant(element, element.isDeclaration));
+  }
 
   TypeKind get kind => TypeKind.INTERFACE;
 
   SourceString get name => element.name;
 
+  DartType subst(Link<DartType> arguments, Link<DartType> parameters) {
+    if (typeArguments.isEmpty) {
+      // Return fast on non-generic types.
+      return this;
+    }
+    if (parameters.isEmpty) {
+      assert(arguments.isEmpty);
+      // Return fast on empty substitutions.
+      return this;
+    }
+    Link<DartType> newTypeArguments =
+        substTypes(typeArguments, arguments, parameters);
+    if (!identical(typeArguments, newTypeArguments)) {
+      // Create a new type only if necessary.
+      return new InterfaceType(element, newTypeArguments);
+    }
+    return this;
+  }
+
   DartType unalias(Compiler compiler) => this;
 
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb.add(name.slowToString());
-    if (!arguments.isEmpty) {
+    if (!typeArguments.isEmpty) {
       sb.add('<');
-      arguments.printOn(sb, ', ');
+      typeArguments.printOn(sb, ', ');
       sb.add('>');
     }
     return sb.toString();
@@ -176,7 +310,7 @@
 
   int get hashCode {
     int hash = element.hashCode;
-    for (Link<DartType> arguments = this.arguments;
+    for (Link<DartType> arguments = this.typeArguments;
          !arguments.isEmpty;
          arguments = arguments.tail) {
       int argumentHash = arguments.head != null ? arguments.head.hashCode : 0;
@@ -188,11 +322,11 @@
   bool operator ==(other) {
     if (other is !InterfaceType) return false;
     if (!identical(element, other.element)) return false;
-    return arguments == other.arguments;
+    return typeArguments == other.typeArguments;
   }
 
   InterfaceType asRaw() {
-    if (arguments.isEmpty) return this;
+    if (typeArguments.isEmpty) return this;
     return new InterfaceType(element);
   }
 }
@@ -209,6 +343,25 @@
 
   TypeKind get kind => TypeKind.FUNCTION;
 
+  DartType subst(Link<DartType> arguments, Link<DartType> parameters) {
+    if (parameters.isEmpty) {
+      assert(arguments.isEmpty);
+      // Return fast on empty substitutions.
+      return this;
+    }
+    var newReturnType = returnType.subst(arguments, parameters);
+    bool changed = !identical(newReturnType, returnType);
+    var newParameterTypes = substTypes(parameterTypes, arguments, parameters);
+    if (!changed && !identical(parameterTypes, newParameterTypes)) {
+      changed = true;
+    }
+    if (changed) {
+      // Create a new type only if necessary.
+      return new FunctionType(newReturnType, newParameterTypes, element);
+    }
+    return this;
+  }
+
   DartType unalias(Compiler compiler) => this;
 
   String toString() {
@@ -257,15 +410,35 @@
   final Link<DartType> typeArguments;
 
   const TypedefType(this.element,
-      [this.typeArguments = const Link<DartType>()]);
+                    [this.typeArguments = const Link<DartType>()]);
 
   TypeKind get kind => TypeKind.TYPEDEF;
 
   SourceString get name => element.name;
 
+  DartType subst(Link<DartType> arguments, Link<DartType> parameters) {
+    if (typeArguments.isEmpty) {
+      // Return fast on non-generic typedefs.
+      return this;
+    }
+    if (parameters.isEmpty) {
+      assert(arguments.isEmpty);
+      // Return fast on empty substitutions.
+      return this;
+    }
+    Link<DartType> newTypeArguments =
+        substTypes(typeArguments, arguments, parameters);
+    if (!identical(typeArguments, newTypeArguments)) {
+      // Create a new type only if necessary.
+      return new TypedefType(element, newTypeArguments);
+    }
+    return this;
+  }
+
   DartType unalias(Compiler compiler) {
     // TODO(ahe): This should be [ensureResolved].
     compiler.resolveTypedef(element);
+    // TODO(johnniwinther): Perform substitution on the unaliased type.
     return element.alias.unalias(compiler);
   }
 
@@ -289,21 +462,34 @@
   }
 }
 
+/**
+ * Special type to hold the [dynamic] type. Used for correctly returning
+ * 'dynamic' on [toString].
+ */
+class DynamicType extends InterfaceType {
+  DynamicType(ClassElement element) : super(element);
+
+  String toString() => 'dynamic';
+}
+
+
 class Types {
   final Compiler compiler;
   // TODO(karlklose): should we have a class Void?
   final VoidType voidType;
   final InterfaceType dynamicType;
 
-  Types(Compiler compiler, Element dynamicElement)
+  Types(Compiler compiler, ClassElement dynamicElement)
     : this.with(compiler, dynamicElement,
                 new LibraryElement(new Script(null, null)));
 
   Types.with(Compiler this.compiler,
-             Element dynamicElement,
+             ClassElement dynamicElement,
              LibraryElement library)
     : voidType = new VoidType(new VoidElement(library)),
-      dynamicType = new InterfaceType(dynamicElement);
+      dynamicType = new DynamicType(dynamicElement) {
+    dynamicElement.type = dynamicType;
+  }
 
   /** Returns true if t is a subtype of s */
   bool isSubtype(DartType t, DartType s) {
@@ -319,6 +505,8 @@
 
     if (t is VoidType) {
       return false;
+    } else if (t is MalformedType) {
+      return false;
     } else if (t is InterfaceType) {
       if (s is !InterfaceType) return false;
       ClassElement tc = t.element;
diff --git a/sdk/lib/_internal/compiler/implementation/universe/universe.dart b/sdk/lib/_internal/compiler/implementation/universe/universe.dart
index ced6600..57f445d 100644
--- a/sdk/lib/_internal/compiler/implementation/universe/universe.dart
+++ b/sdk/lib/_internal/compiler/implementation/universe/universe.dart
@@ -7,7 +7,6 @@
 import '../closure.dart';
 import '../elements/elements.dart';
 import '../dart2jslib.dart';
-import '../runtime_types.dart';
 import '../tree/tree.dart';
 import '../util/util.dart';
 
@@ -49,7 +48,6 @@
   final Map<SourceString, Set<Selector>> fieldGetters;
   final Map<SourceString, Set<Selector>> fieldSetters;
   final Set<DartType> isChecks;
-  final RuntimeTypeInformation rti;
 
   Universe() : generatedCode = new Map<Element, CodeBuffer>(),
                generatedBailoutCode = new Map<Element, CodeBuffer>(),
@@ -60,8 +58,7 @@
                invokedSetters = new Map<SourceString, Set<Selector>>(),
                fieldGetters = new Map<SourceString, Set<Selector>>(),
                fieldSetters = new Map<SourceString, Set<Selector>>(),
-               isChecks = new Set<DartType>(),
-               rti = new RuntimeTypeInformation();
+               isChecks = new Set<DartType>();
 
   void addGeneratedCode(WorkItem work, CodeBuffer codeBuffer) {
     assert(invariant(work.element, work.element.isDeclaration));
@@ -438,7 +435,8 @@
 
     // If [self] is a subclass of [other], it inherits the
     // implementation of [element].
-    if (self.isSubclassOf(other)) {
+    ClassElement cls = self;
+    if (cls.isSubclassOf(other)) {
       // Resolve an invocation of [element.name] on [self]. If it
       // is found, this selector is a candidate.
       return hasElementIn(self, element) && appliesUntyped(element, compiler);
diff --git a/sdk/lib/_internal/compiler/implementation/util/characters.dart b/sdk/lib/_internal/compiler/implementation/util/characters.dart
index 064efe7..5961d07 100644
--- a/sdk/lib/_internal/compiler/implementation/util/characters.dart
+++ b/sdk/lib/_internal/compiler/implementation/util/characters.dart
@@ -133,3 +133,11 @@
   return value < $FIRST_SURROGATE ||
       (value > $LAST_SURROGATE && value <= $LAST_CODE_POINT);
 }
+
+bool isUtf16LeadSurrogate(int value) {
+  return value >= 0xd800 && value <= 0xdbff;
+}
+
+bool isUtf16TrailSurrogate(int value) {
+  return value >= 0xdc00 && value <= 0xdfff;
+}
diff --git a/sdk/lib/_internal/compiler/implementation/util/link.dart b/sdk/lib/_internal/compiler/implementation/util/link.dart
index b4ad7da..fe8ac30 100644
--- a/sdk/lib/_internal/compiler/implementation/util/link.dart
+++ b/sdk/lib/_internal/compiler/implementation/util/link.dart
@@ -59,8 +59,8 @@
   String toString() => "[]";
 }
 
-interface LinkBuilder<T> default LinkBuilderImplementation<T> {
-  LinkBuilder();
+abstract class LinkBuilder<T> {
+  factory LinkBuilder() = LinkBuilderImplementation;
 
   Link<T> toLink();
   void addLast(T t);
diff --git a/sdk/lib/_internal/compiler/implementation/util/util.dart b/sdk/lib/_internal/compiler/implementation/util/util.dart
index 64194ea..70c1eaf 100644
--- a/sdk/lib/_internal/compiler/implementation/util/util.dart
+++ b/sdk/lib/_internal/compiler/implementation/util/util.dart
@@ -24,52 +24,75 @@
   String toString() => 'Compiler crashed: $message.';
 }
 
-/// Writes the characters of [iterator] on [buffer].  The characters
+/// Writes the characters of [string] on [buffer].  The characters
 /// are escaped as suitable for JavaScript and JSON.  [buffer] is
 /// anything which supports [:add:] and [:addCharCode:], for example,
-/// [StringBuffer].
-void writeJsonEscapedCharsOn(Iterator<int> iterator, buffer, onError(code)) {
-  while (iterator.hasNext) {
-    int code = iterator.next();
-    if (identical(code, $SQ)) {
-      buffer.add(r"\'");
-    } else if (identical(code, $LF)) {
-      buffer.add(r'\n');
-    } else if (identical(code, $CR)) {
-      buffer.add(r'\r');
-    } else if (identical(code, $LS)) {
-      // This Unicode line terminator and $PS are invalid in JS string
-      // literals.
-      buffer.add(r'\u2028');
-    } else if (identical(code, $PS)) {
-      buffer.add(r'\u2029');
-    } else if (identical(code, $BACKSLASH)) {
-      buffer.add(r'\\');
-    } else {
-      if (code > 0xffff) {
-        if (onError != null) onError(code);
-        throw 'Unhandled non-BMP character: ${code.toRadixString(16)}';
-      }
-      // TODO(lrn): Consider whether all codes above 0x7f really need to
-      // be escaped. We build a Dart string here, so it should be a literal
-      // stage that converts it to, e.g., UTF-8 for a JS interpreter.
-      if (code < 0x20) {
-        buffer.add(r'\x');
-        if (code < 0x10) buffer.add('0');
-        buffer.add(code.toRadixString(16));
-      } else if (code >= 0x80) {
-        if (code < 0x100) {
-          buffer.add(r'\x');
-        } else {
-          buffer.add(r'\u');
-          if (code < 0x1000) {
-            buffer.add('0');
-          }
+/// [StringBuffer].  Note that JS supports \xnn and \unnnn whereas JSON only
+/// supports the \unnnn notation.  Therefore we use the \unnnn notation.
+void writeJsonEscapedCharsOn(String string, buffer) {
+  void addCodeUnitEscaped(var buffer, int code) {
+    assert(code < 0x10000);
+    buffer.add(r'\u');
+    if (code < 0x1000) {
+      buffer.add('0');
+      if (code < 0x100) {
+        buffer.add('0');
+        if (code < 0x10) {
+          buffer.add('0');
         }
-        buffer.add(code.toRadixString(16));
+      }
+    }
+    buffer.add(code.toRadixString(16));
+  }
+
+  void writeEscapedOn(String string, var buffer) {
+    for (int i = 0; i < string.length; i++) {
+      int code = string.charCodeAt(i);
+      if (code == $DQ) {
+        buffer.add(r'\"');
+      } else if (code == $TAB) {
+        buffer.add(r'\t');
+      } else if (code == $LF) {
+        buffer.add(r'\n');
+      } else if (code == $CR) {
+        buffer.add(r'\r');
+      } else if (code == $DEL) {
+        addCodeUnitEscaped(buffer, $DEL);
+      } else if (code == $LS) {
+        // This Unicode line terminator and $PS are invalid in JS string
+        // literals.
+        addCodeUnitEscaped(buffer, $LS);  // 0x2028.
+      } else if (code == $PS) {
+        addCodeUnitEscaped(buffer, $PS);  // 0x2029.
+      } else if (code == $BACKSLASH) {
+        buffer.add(r'\\');
       } else {
-        buffer.addCharCode(code);
+        if (code < 0x20) {
+          addCodeUnitEscaped(buffer, code);
+          // We emit DEL (ASCII 0x7f) as an escape because it would be confusing
+          // to have it unescaped in a string literal.  We also escape
+          // everything above 0x7f because that means we don't have to worry
+          // about whether the web server serves it up as Latin1 or UTF-8.
+        } else if (code < 0x7f) {
+          buffer.addCharCode(code);
+        } else {
+          // This will output surrogate pairs in the form \udxxx\udyyy, rather
+          // than the more logical \u{zzzzzz}.  This should work in JavaScript
+          // (especially old UCS-2 based implementations) and is the only
+          // format that is allowed in JSON.
+          addCodeUnitEscaped(buffer, code);
+        }
       }
     }
   }
+
+  for (int i = 0; i < string.length; i++) {
+    int code = string.charCodeAt(i);
+    if (code < 0x20 || code == $DEL || code == $DQ || code == $LS ||
+        code == $PS || code == $BACKSLASH || code >= 0x80) {
+      writeEscapedOn(string, buffer);
+      return;
+    }
+  }
+  buffer.add(string);
 }
diff --git a/sdk/lib/_internal/compiler/implementation/world.dart b/sdk/lib/_internal/compiler/implementation/world.dart
index bea9547..9116478 100644
--- a/sdk/lib/_internal/compiler/implementation/world.dart
+++ b/sdk/lib/_internal/compiler/implementation/world.dart
@@ -76,7 +76,7 @@
     compiler.resolverWorld.isChecks.forEach((DartType type) {
       if (type is InterfaceType) {
         InterfaceType itf = type;
-        if (!itf.arguments.isEmpty) {
+        if (!itf.typeArguments.isEmpty) {
           potentiallyAddForRti(itf.element, null);
         }
       }
@@ -126,10 +126,9 @@
 
   // Returns whether a subclass of [superclass] implements [type].
   bool hasAnySubclassThatImplements(ClassElement superclass, DartType type) {
-    Set<ClassElement> typesImplementedBySubclasses =
-          typesImplementedBySubclasses[superclass];
-    if (typesImplementedBySubclasses == null) return false;
-    return typesImplementedBySubclasses.contains(type.element);
+    Set<ClassElement> subclasses= typesImplementedBySubclasses[superclass];
+    if (subclasses == null) return false;
+    return subclasses.contains(type.element);
   }
 
   bool hasNoOverridingMember(Element element) {
diff --git a/sdk/lib/_internal/dartdoc/lib/src/dartdoc/comment_map.dart b/sdk/lib/_internal/dartdoc/lib/src/dartdoc/comment_map.dart
index 77b7e07..14f17bd 100644
--- a/sdk/lib/_internal/dartdoc/lib/src/dartdoc/comment_map.dart
+++ b/sdk/lib/_internal/dartdoc/lib/src/dartdoc/comment_map.dart
@@ -78,7 +78,7 @@
           if (lastComment == null) {
             lastComment = line;
           } else {
-            lastComment = '$lastComment$line';
+            lastComment = '$lastComment\n$line';
           }
         }
       } else if (token.kind == dart2js.HASH_TOKEN) {
diff --git a/sdk/lib/_internal/dartdoc/test/comment_map_test.dart b/sdk/lib/_internal/dartdoc/test/comment_map_test.dart
new file mode 100644
index 0000000..3d6c4c9
--- /dev/null
+++ b/sdk/lib/_internal/dartdoc/test/comment_map_test.dart
@@ -0,0 +1,38 @@
+// Copyright (c) 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.
+
+/// Unit tests for comment map.
+library commentMapTests;
+
+import 'dart:uri';
+import 'dart:mirrors';
+
+import '../../compiler/implementation/scanner/scannerlib.dart' as dart2js;
+
+// TODO(rnystrom): Better path to unittest.
+import '../../../../../pkg/unittest/lib/unittest.dart';
+
+// TODO(rnystrom): Use "package:" URL (#4968).
+part '../lib/src/dartdoc/comment_map.dart';
+
+class FakeSourceLocation implements SourceLocation {
+  Uri get sourceUri => new Uri('file:///tmp/test.dart');
+  int get offset => 69;
+  String get sourceText => """
+    /// Testing
+    ///     var testing = 'this is source code';
+    get foo => 'bar';
+  """;
+}
+
+main() {
+  test('triple slashed comments retain newlines', () {
+    Commentmap cm = new CommentMap();
+    var comment = cm.find(new FakeSourceLocation());
+    expect(
+      comment,
+      equals("Testing\n    var testing = 'this is source code';")
+    );
+  });
+}
diff --git a/sdk/lib/core/comparable.dart b/sdk/lib/core/comparable.dart
index 3b38f25..92df742 100644
--- a/sdk/lib/core/comparable.dart
+++ b/sdk/lib/core/comparable.dart
@@ -31,7 +31,7 @@
    * May throw an [ArgumentError] if [other] is of a type that
    * is not comparable to [:this:].
    */
-  abstract int compareTo(Comparable other);
+  int compareTo(Comparable other);
 
   /**
    * Compare one comparable to another.
diff --git a/sdk/lib/core/double.dart b/sdk/lib/core/double.dart
index d2eb73e..2f8b529 100644
--- a/sdk/lib/core/double.dart
+++ b/sdk/lib/core/double.dart
@@ -22,22 +22,22 @@
   static const double MAX_FINITE = 1.7976931348623157e+308;
 
   /** Return the remainder from dividing this [double] by [other]. */
-  abstract double remainder(num other);
+  double remainder(num other);
 
   /** Addition operator. */
-  abstract double operator +(num other);
+  double operator +(num other);
 
   /** Subtraction operator. */
-  abstract double operator -(num other);
+  double operator -(num other);
 
   /** Multiplication operator. */
-  abstract double operator *(num other);
+  double operator *(num other);
 
   /** Euclidean modulo operator. */
-  abstract double operator %(num other);
+  double operator %(num other);
 
   /** Division operator. */
-  abstract double operator /(num other);
+  double operator /(num other);
 
   /**
    * Truncating division operator.
@@ -45,13 +45,13 @@
    * The result of the truncating division [:a ~/ b:] is equivalent to
    * [:(a / b).truncate():].
    */
-  abstract double operator ~/(num other);
+  double operator ~/(num other);
 
   /** Negate operator. */
-  abstract double operator -();
+  double operator -();
 
   /** Returns the absolute value of this [double]. */
-  abstract double abs();
+  double abs();
 
   /**
    * Returns the integer value closest to this [double].
@@ -59,19 +59,19 @@
    * Rounds away from zero when there is no closest integer:
    *  [:(3.5).round() == 4:] and [:(-3.5).round() == -4:].
    */
-  abstract double round();
+  double round();
 
   /** Returns the greatest integer value no greater than this [double]. */
-  abstract double floor();
+  double floor();
 
   /** Returns the least integer value that is no smaller than this [double]. */
-  abstract double ceil();
+  double ceil();
 
   /**
    * Returns the integer value obtained by discarding any fractional
    * digits from this [double].
    */
-  abstract double truncate();
+  double truncate();
 
   /**
    * Provide a representation of this [double] value.
@@ -86,7 +86,7 @@
    * It should always be the case that if [:d:] is a [double], then
    * [:d == double.parse(d.toString()):].
    */
-  abstract String toString();
+  String toString();
 
   /**
    * Parse [source] as an double literal and return its value.
diff --git a/sdk/lib/core/errors.dart b/sdk/lib/core/errors.dart
index 7ce8628..eeb0c04 100644
--- a/sdk/lib/core/errors.dart
+++ b/sdk/lib/core/errors.dart
@@ -4,6 +4,31 @@
 
 class Error {
   const Error();
+
+  /**
+   * Safely convert a value to a [String] description.
+   *
+   * The conversion is guaranteed to not throw, so it won't use the object's
+   * toString method.
+   */
+  static String safeToString(Object object) {
+    if (object is int || object is double || object is bool || null == object) {
+      return object.toString();
+    }
+    if (object is String) {
+      // TODO(ahe): Remove backslash when http://dartbug.com/4995 is fixed.
+      const backslash = '\\';
+      String escaped = object
+        .replaceAll('$backslash', '$backslash$backslash')
+        .replaceAll('\n', '${backslash}n')
+        .replaceAll('\r', '${backslash}r')
+        .replaceAll('"',  '$backslash"');
+      return '"$escaped"';
+    }
+    return _objectToString(object);
+  }
+
+  external static String _objectToString(Object object);
 }
 
 /**
@@ -25,13 +50,21 @@
 }
 
 /**
+ * Error thrown when attempting to throw [:null:].
+ */
+class NullThrownError implements Error {
+  const NullThrownError();
+  String toString() => "Throw of null.";
+}
+
+/**
  * Error thrown when a function is passed an unacceptable argument.
  */
 class ArgumentError implements Error {
   final message;
 
   /** The [message] describes the erroneous argument. */
-  const ArgumentError([this.message]);
+  ArgumentError([this.message]);
 
   String toString() {
     if (message != null) {
@@ -120,7 +153,7 @@
         if (i > 0) {
           sb.add(", ");
         }
-        sb.add(safeToString(_arguments[i]));
+        sb.add(Error.safeToString(_arguments[i]));
       }
     }
     if (_namedArguments != null) {
@@ -130,13 +163,13 @@
         }
         sb.add(key);
         sb.add(": ");
-        sb.add(safeToString(value));
+        sb.add(Error.safeToString(value));
         i++;
       });
     }
     if (_existingArgumentNames == null) {
       return "NoSuchMethodError : method not found: '$_memberName'\n"
-          "Receiver: ${safeToString(_receiver)}\n"
+          "Receiver: ${Error.safeToString(_receiver)}\n"
           "Arguments: [$sb]";
     } else {
       String actualParameters = sb.toString();
@@ -150,30 +183,11 @@
       String formalParameters = sb.toString();
       return "NoSuchMethodError: incorrect number of arguments passed to "
           "method named '$_memberName'\n"
-          "Receiver: ${safeToString(_receiver)}\n"
+          "Receiver: ${Error.safeToString(_receiver)}\n"
           "Tried calling: $_memberName($actualParameters)\n"
           "Found: $_memberName($formalParameters)";
     }
   }
-
-  static String safeToString(Object object) {
-    if (object is int || object is double || object is bool || null == object) {
-      return object.toString();
-    }
-    if (object is String) {
-      // TODO(ahe): Remove backslash when http://dartbug.com/4995 is fixed.
-      const backslash = '\\';
-      String escaped = object
-        .replaceAll('$backslash', '$backslash$backslash')
-        .replaceAll('\n', '${backslash}n')
-        .replaceAll('\r', '${backslash}r')
-        .replaceAll('"',  '$backslash"');
-      return '"$escaped"';
-    }
-    return _objectToString(object);
-  }
-
-  external static String _objectToString(Object object);
 }
 
 
diff --git a/sdk/lib/core/exceptions.dart b/sdk/lib/core/exceptions.dart
index 61f3f89..afe3285 100644
--- a/sdk/lib/core/exceptions.dart
+++ b/sdk/lib/core/exceptions.dart
@@ -5,19 +5,31 @@
 // Exceptions are thrown either by the VM or from Dart code.
 
 /**
- * Interface implemented by all core library exceptions.
- * Defaults to an implementation that only carries a simple message.
+ * A marker interface implemented by all core library exceptions.
+ *
+ * An [Exception] is intended to convey information to the user about a failure,
+ * so that the error can be addressed programmatically. It is intended to be
+ * caught, and it should contain useful data fields.
+ *
+ * Creating instances of [Exception] directly with [:new Exception("message"):]
+ * is discouraged, and only included as a temporary measure during development,
+ * until the actual exceptions used by a library are done.
  */
 abstract class Exception {
-  const factory Exception([var message]) = _ExceptionImplementation;
+  factory Exception([var message]) => new _ExceptionImplementation(message);
 }
 
 
 /** Default implementation of [Exception] which carries a message. */
 class _ExceptionImplementation implements Exception {
   final message;
-  const _ExceptionImplementation([this.message]);
-  String toString() => (message == null) ? "Exception" : "Exception: $message";
+
+  _ExceptionImplementation([this.message]);
+
+  String toString() {
+    if (message == null) return "Exception";
+    return "Exception: $message";
+  }
 }
 
 
@@ -40,25 +52,6 @@
 }
 
 
-class NullPointerException implements Exception {
-  const NullPointerException([this.functionName, this.arguments = const []]);
-  String toString() {
-    if (functionName == null) {
-      return exceptionName;
-    } else {
-      return "$exceptionName : method: '$functionName'\n"
-          "Receiver: null\n"
-          "Arguments: $arguments";
-    }
-  }
-
-  String get exceptionName => "NullPointerException";
-
-  final String functionName;
-  final List arguments;
-}
-
-
 class IllegalJSRegExpException implements Exception {
   const IllegalJSRegExpException(String this._pattern, String this._errmsg);
   String toString() => "IllegalJSRegExpException: '$_pattern' '$_errmsg'";
diff --git a/sdk/lib/core/future_impl.dart b/sdk/lib/core/future_impl.dart
index bbae82d..2c22e46 100644
--- a/sdk/lib/core/future_impl.dart
+++ b/sdk/lib/core/future_impl.dart
@@ -27,6 +27,11 @@
   bool _exceptionHandled = false;
 
   /**
+   * true if an exception in this future should be thrown to the top level.
+   */
+  bool _throwOnException = false;
+
+  /**
    * Listeners waiting to receive the value of this future.
    */
   final List<Function> _successListeners;
@@ -88,12 +93,21 @@
     if (hasValue) {
       onSuccess(value);
     } else if (!isComplete) {
+      _throwOnException = true;
       _successListeners.add(onSuccess);
     } else if (!_exceptionHandled) {
       throw new FutureUnhandledException(_exception, stackTrace);
     }
   }
 
+  void _handleSuccess(void onSuccess(T value)) {
+    if (hasValue) {
+      onSuccess(value);
+    } else if (!isComplete) {
+      _successListeners.add(onSuccess);
+    }
+  }
+
   void handleException(bool onException(Object exception)) {
     if (_exceptionHandled) return;
     if (_isComplete) {
@@ -135,7 +149,7 @@
           listener(value);
         }
       } else {
-        if (!_exceptionHandled && _successListeners.length > 0) {
+        if (!_exceptionHandled && _throwOnException) {
           throw new FutureUnhandledException(_exception, stackTrace);
         }
       }
@@ -174,7 +188,7 @@
 
     _forwardException(this, completer);
 
-    then((v) {
+    _handleSuccess((v) {
       var transformed = null;
       try {
         transformed = transformation(v);
@@ -192,7 +206,7 @@
     final completer = new Completer();
 
     _forwardException(this, completer);
-    then((v) {
+    _handleSuccess((v) {
       var future = null;
       try {
         future = transformation(v);
@@ -223,10 +237,10 @@
       } catch (innerException, stackTrace) {
         completer.completeException(innerException, stackTrace);
       }
-      return true;
+      return false;
     });
 
-    then(completer.complete);
+    _handleSuccess(completer.complete);
 
     return completer.future;
   }
@@ -236,7 +250,7 @@
    */
   _forward(Future future, Completer completer) {
     _forwardException(future, completer);
-    future.then(completer.complete);
+    future._handleSuccess(completer.complete);
   }
 
   /**
@@ -245,7 +259,7 @@
   _forwardException(Future future, Completer completer) {
     future.handleException((e) {
       completer.completeException(e, future.stackTrace);
-      return true;
+      return false;
     });
   }
 }
diff --git a/sdk/lib/core/hashable.dart b/sdk/lib/core/hashable.dart
index aaf345b..b0361d0 100644
--- a/sdk/lib/core/hashable.dart
+++ b/sdk/lib/core/hashable.dart
@@ -13,5 +13,5 @@
  */
 abstract class Hashable {
   // TODO(lrn): http://darbug.com/5522
-  abstract int get hashCode;
+  int get hashCode;
 }
diff --git a/sdk/lib/core/list.dart b/sdk/lib/core/list.dart
index b4948a3..43a9887 100644
--- a/sdk/lib/core/list.dart
+++ b/sdk/lib/core/list.dart
@@ -6,8 +6,7 @@
  * A [List] is an indexable collection with a length. It can be of
  * fixed size or extendable.
  */
-interface List<E> extends Collection<E>, Sequence<E>
-                  default _ListImpl<E> {
+abstract class List<E> implements Collection<E>, Sequence<E> {
   /**
    * Creates a list of the given [length].
    *
@@ -17,13 +16,19 @@
    * If a [length] argument is supplied, a fixed size list of that
    * length is created.
    */
-  List([int length]);
+  external factory List([int length]);
 
   /**
    * Creates a list with the elements of [other]. The order in
    * the list will be the order provided by the iterator of [other].
    */
-  List.from(Iterable<E> other);
+  factory List.from(Iterable<E> other) {
+    var list = new List<E>();
+    for (var e in other) {
+      list.add(e);
+    }
+    return list;
+  }
 
   /**
    * Returns the element at the given [index] in the list or throws
@@ -123,6 +128,12 @@
   E removeLast();
 
   /**
+   * Returns the first element of the list, or throws an out of bounds
+   * exception if the list is empty.
+   */
+  E get first;
+
+  /**
    * Returns the last element of the list, or throws an out of bounds
    * exception if the list is empty.
    */
@@ -174,20 +185,3 @@
    */
   void insertRange(int start, int length, [E initialValue]);
 }
-
-class _ListImpl<E> {
-  /**
-   * Factory implementation of List().
-   *
-   * Creates a list of the given [length].
-   */
-  external factory List([int length]);
-
-  /**
-   * Factory implementation of List.from().
-   *
-   * Creates a list with the elements of [other]. The order in
-   * the list will be the order provided by the iterator of [other].
-   */
-  external factory List.from(Iterable<E> other);
-}
diff --git a/sdk/lib/core/map.dart b/sdk/lib/core/map.dart
index 58c9bf2..e9b52b6 100644
--- a/sdk/lib/core/map.dart
+++ b/sdk/lib/core/map.dart
@@ -189,7 +189,7 @@
   }
 
   int _probeForAdding(K key) {
-    if (key == null) throw const NullPointerException();
+    if (key == null) throw new ArgumentError(null);
     int hash = _firstProbe(key.hashCode, _keys.length);
     int numberOfProbes = 1;
     int initialHash = hash;
@@ -224,7 +224,7 @@
   }
 
   int _probeForLookup(K key) {
-    if (key == null) throw const NullPointerException();
+    if (key == null) throw new ArgumentError(null);
     int hash = _firstProbe(key.hashCode, _keys.length);
     int numberOfProbes = 1;
     int initialHash = hash;
diff --git a/sdk/lib/core/sequences.dart b/sdk/lib/core/sequences.dart
index fcf8225a..d671cb5 100644
--- a/sdk/lib/core/sequences.dart
+++ b/sdk/lib/core/sequences.dart
@@ -117,6 +117,7 @@
     return -1;
   }
 
+  E get first => sequence[0];
   E get last => sequence[sequence.length - 1];
 
   List<E> getRange(int start, int length) {
diff --git a/sdk/lib/core/string.dart b/sdk/lib/core/string.dart
index f2d0e61..19b472e 100644
--- a/sdk/lib/core/string.dart
+++ b/sdk/lib/core/string.dart
@@ -76,10 +76,13 @@
   String substring(int startIndex, [int endIndex]);
 
   /**
-   * Removes leading and trailing whitespace from a string. If the
-   * string contains leading or trailing whitespace a new string with
-   * no leading and no trailing whitespace is returned. Otherwise, the
-   * string itself is returned.
+   * Removes leading and trailing whitespace from a string. If the string
+   * contains leading or trailing whitespace a new string with no leading and
+   * no trailing whitespace is returned. Otherwise, the string itself is
+   * returned.  Whitespace is defined as every Unicode character in the Zs, Zl
+   * and Zp categories (this includes no-break space), the spacing control
+   * characters from 9 to 13 (tab, lf, vtab, ff and cr), and 0xfeff the BOM
+   * character.
    */
   String trim();
 
diff --git a/sdk/lib/crypto/crypto.dart b/sdk/lib/crypto/crypto.dart
index 1064ca0..078b21d 100644
--- a/sdk/lib/crypto/crypto.dart
+++ b/sdk/lib/crypto/crypto.dart
@@ -44,7 +44,10 @@
   Hash newInstance();
 
   /**
-   * Block size of the hash in bytes.
+   * Internal block size of the hash in bytes.
+   *
+   * This is exposed for use by the HMAC class which needs to know the
+   * block size for the [Hash] it is using.
    */
   int get blockSize;
 }
@@ -95,6 +98,18 @@
    * as a list of bytes.
    */
   List<int> digest();
+
+  /**
+   * Verify that the HMAC computed for the data so far matches the
+   * given message digest.
+   *
+   * This method should be used instead of memcmp-style comparisons
+   * to avoid leaking information via timing.
+   *
+   * Throws an exception if the given digest does not have the same
+   * size as the digest computed by this HMAC instance.
+   */
+  bool verify(List<int> digest);
 }
 
 /**
diff --git a/sdk/lib/crypto/hmac.dart b/sdk/lib/crypto/hmac.dart
index c73bd8f..d7e3d98 100644
--- a/sdk/lib/crypto/hmac.dart
+++ b/sdk/lib/crypto/hmac.dart
@@ -49,6 +49,20 @@
     return _hash.update(padding).update(innerHash).digest();
   }
 
+  bool verify(List<int> digest) {
+    var computedDigest = this.digest();
+    if (digest.length != computedDigest.length) {
+      throw new ArgumentError(
+          'Invalid digest size: ${digest.length} in HMAC.verify. '
+          'Expected: ${_hash.blockSize}.');
+    }
+    int result = 0;
+    for (var i = 0; i < digest.length; i++) {
+      result |= digest[i] ^ computedDigest[i];
+    }
+    return result == 0;
+  }
+
   // HMAC internal state.
   Hash _hash;
   List<int> _key;
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 1fa9db2..f9891b3 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -48,22 +48,20 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AbstractWorker
+/// @domName AbstractWorker; @docsEditable true
 class AbstractWorker extends EventTarget native "*AbstractWorker" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   AbstractWorkerEvents get on =>
     new AbstractWorkerEvents(this);
 
-  /** @domName AbstractWorker.addEventListener */
+  /// @domName AbstractWorker.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName AbstractWorker.dispatchEvent */
+  /// @domName AbstractWorker.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName AbstractWorker.removeEventListener */
+  /// @domName AbstractWorker.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 }
 
@@ -77,31 +75,31 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AnalyserNode
+/// @domName AnalyserNode; @docsEditable true
 class AnalyserNode extends AudioNode native "*AnalyserNode" {
 
-  /** @domName AnalyserNode.fftSize */
+  /// @domName AnalyserNode.fftSize; @docsEditable true
   int fftSize;
 
-  /** @domName AnalyserNode.frequencyBinCount */
+  /// @domName AnalyserNode.frequencyBinCount; @docsEditable true
   final int frequencyBinCount;
 
-  /** @domName AnalyserNode.maxDecibels */
+  /// @domName AnalyserNode.maxDecibels; @docsEditable true
   num maxDecibels;
 
-  /** @domName AnalyserNode.minDecibels */
+  /// @domName AnalyserNode.minDecibels; @docsEditable true
   num minDecibels;
 
-  /** @domName AnalyserNode.smoothingTimeConstant */
+  /// @domName AnalyserNode.smoothingTimeConstant; @docsEditable true
   num smoothingTimeConstant;
 
-  /** @domName AnalyserNode.getByteFrequencyData */
+  /// @domName AnalyserNode.getByteFrequencyData; @docsEditable true
   void getByteFrequencyData(Uint8Array array) native;
 
-  /** @domName AnalyserNode.getByteTimeDomainData */
+  /// @domName AnalyserNode.getByteTimeDomainData; @docsEditable true
   void getByteTimeDomainData(Uint8Array array) native;
 
-  /** @domName AnalyserNode.getFloatFrequencyData */
+  /// @domName AnalyserNode.getFloatFrequencyData; @docsEditable true
   void getFloatFrequencyData(Float32Array array) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -109,77 +107,76 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLAnchorElement
+/// @domName HTMLAnchorElement; @docsEditable true
 class AnchorElement extends Element implements Element native "*HTMLAnchorElement" {
 
   factory AnchorElement({String href}) {
-    if (!?href) {
-      return _Elements.createAnchorElement();
-    }
-    return _Elements.createAnchorElement(href);
+    var e = document.$dom_createElement("a");
+    if (href != null) e.href = href;
+    return e;
   }
 
-  /** @domName HTMLAnchorElement.charset */
+  /// @domName HTMLAnchorElement.charset; @docsEditable true
   String charset;
 
-  /** @domName HTMLAnchorElement.coords */
+  /// @domName HTMLAnchorElement.coords; @docsEditable true
   String coords;
 
-  /** @domName HTMLAnchorElement.download */
+  /// @domName HTMLAnchorElement.download; @docsEditable true
   String download;
 
-  /** @domName HTMLAnchorElement.hash */
+  /// @domName HTMLAnchorElement.hash; @docsEditable true
   String hash;
 
-  /** @domName HTMLAnchorElement.host */
+  /// @domName HTMLAnchorElement.host; @docsEditable true
   String host;
 
-  /** @domName HTMLAnchorElement.hostname */
+  /// @domName HTMLAnchorElement.hostname; @docsEditable true
   String hostname;
 
-  /** @domName HTMLAnchorElement.href */
+  /// @domName HTMLAnchorElement.href; @docsEditable true
   String href;
 
-  /** @domName HTMLAnchorElement.hreflang */
+  /// @domName HTMLAnchorElement.hreflang; @docsEditable true
   String hreflang;
 
-  /** @domName HTMLAnchorElement.name */
+  /// @domName HTMLAnchorElement.name; @docsEditable true
   String name;
 
-  /** @domName HTMLAnchorElement.origin */
+  /// @domName HTMLAnchorElement.origin; @docsEditable true
   final String origin;
 
-  /** @domName HTMLAnchorElement.pathname */
+  /// @domName HTMLAnchorElement.pathname; @docsEditable true
   String pathname;
 
-  /** @domName HTMLAnchorElement.ping */
+  /// @domName HTMLAnchorElement.ping; @docsEditable true
   String ping;
 
-  /** @domName HTMLAnchorElement.port */
+  /// @domName HTMLAnchorElement.port; @docsEditable true
   String port;
 
-  /** @domName HTMLAnchorElement.protocol */
+  /// @domName HTMLAnchorElement.protocol; @docsEditable true
   String protocol;
 
-  /** @domName HTMLAnchorElement.rel */
+  /// @domName HTMLAnchorElement.rel; @docsEditable true
   String rel;
 
-  /** @domName HTMLAnchorElement.rev */
+  /// @domName HTMLAnchorElement.rev; @docsEditable true
   String rev;
 
-  /** @domName HTMLAnchorElement.search */
+  /// @domName HTMLAnchorElement.search; @docsEditable true
   String search;
 
-  /** @domName HTMLAnchorElement.shape */
+  /// @domName HTMLAnchorElement.shape; @docsEditable true
   String shape;
 
-  /** @domName HTMLAnchorElement.target */
+  /// @domName HTMLAnchorElement.target; @docsEditable true
   String target;
 
-  /** @domName HTMLAnchorElement.type */
+  /// @domName HTMLAnchorElement.type; @docsEditable true
   String type;
 
-  /** @domName HTMLAnchorElement.toString */
+  /// @domName HTMLAnchorElement.toString; @docsEditable true
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -187,7 +184,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitAnimation
+/// @domName WebKitAnimation; @docsEditable true
 class Animation native "*WebKitAnimation" {
 
   static const int DIRECTION_ALTERNATE = 1;
@@ -202,37 +199,37 @@
 
   static const int FILL_NONE = 0;
 
-  /** @domName WebKitAnimation.delay */
+  /// @domName WebKitAnimation.delay; @docsEditable true
   final num delay;
 
-  /** @domName WebKitAnimation.direction */
+  /// @domName WebKitAnimation.direction; @docsEditable true
   final int direction;
 
-  /** @domName WebKitAnimation.duration */
+  /// @domName WebKitAnimation.duration; @docsEditable true
   final num duration;
 
-  /** @domName WebKitAnimation.elapsedTime */
+  /// @domName WebKitAnimation.elapsedTime; @docsEditable true
   num elapsedTime;
 
-  /** @domName WebKitAnimation.ended */
+  /// @domName WebKitAnimation.ended; @docsEditable true
   final bool ended;
 
-  /** @domName WebKitAnimation.fillMode */
+  /// @domName WebKitAnimation.fillMode; @docsEditable true
   final int fillMode;
 
-  /** @domName WebKitAnimation.iterationCount */
+  /// @domName WebKitAnimation.iterationCount; @docsEditable true
   final int iterationCount;
 
-  /** @domName WebKitAnimation.name */
+  /// @domName WebKitAnimation.name; @docsEditable true
   final String name;
 
-  /** @domName WebKitAnimation.paused */
+  /// @domName WebKitAnimation.paused; @docsEditable true
   final bool paused;
 
-  /** @domName WebKitAnimation.pause */
+  /// @domName WebKitAnimation.pause; @docsEditable true
   void pause() native;
 
-  /** @domName WebKitAnimation.play */
+  /// @domName WebKitAnimation.play; @docsEditable true
   void play() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -240,13 +237,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitAnimationEvent
+/// @domName WebKitAnimationEvent; @docsEditable true
 class AnimationEvent extends Event native "*WebKitAnimationEvent" {
 
-  /** @domName WebKitAnimationEvent.animationName */
+  /// @domName WebKitAnimationEvent.animationName; @docsEditable true
   final String animationName;
 
-  /** @domName WebKitAnimationEvent.elapsedTime */
+  /// @domName WebKitAnimationEvent.elapsedTime; @docsEditable true
   final num elapsedTime;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -254,40 +251,40 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLAppletElement
+/// @domName HTMLAppletElement; @docsEditable true
 class AppletElement extends Element implements Element native "*HTMLAppletElement" {
 
-  /** @domName HTMLAppletElement.align */
+  /// @domName HTMLAppletElement.align; @docsEditable true
   String align;
 
-  /** @domName HTMLAppletElement.alt */
+  /// @domName HTMLAppletElement.alt; @docsEditable true
   String alt;
 
-  /** @domName HTMLAppletElement.archive */
+  /// @domName HTMLAppletElement.archive; @docsEditable true
   String archive;
 
-  /** @domName HTMLAppletElement.code */
+  /// @domName HTMLAppletElement.code; @docsEditable true
   String code;
 
-  /** @domName HTMLAppletElement.codeBase */
+  /// @domName HTMLAppletElement.codeBase; @docsEditable true
   String codeBase;
 
-  /** @domName HTMLAppletElement.height */
+  /// @domName HTMLAppletElement.height; @docsEditable true
   String height;
 
-  /** @domName HTMLAppletElement.hspace */
+  /// @domName HTMLAppletElement.hspace; @docsEditable true
   String hspace;
 
-  /** @domName HTMLAppletElement.name */
+  /// @domName HTMLAppletElement.name; @docsEditable true
   String name;
 
-  /** @domName HTMLAppletElement.object */
+  /// @domName HTMLAppletElement.object; @docsEditable true
   String object;
 
-  /** @domName HTMLAppletElement.vspace */
+  /// @domName HTMLAppletElement.vspace; @docsEditable true
   String vspace;
 
-  /** @domName HTMLAppletElement.width */
+  /// @domName HTMLAppletElement.width; @docsEditable true
   String width;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -295,51 +292,51 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLAreaElement
+/// @domName HTMLAreaElement; @docsEditable true
 class AreaElement extends Element implements Element native "*HTMLAreaElement" {
 
-  factory AreaElement() => _Elements.createAreaElement();
+  factory AreaElement() => document.$dom_createElement("area");
 
-  /** @domName HTMLAreaElement.alt */
+  /// @domName HTMLAreaElement.alt; @docsEditable true
   String alt;
 
-  /** @domName HTMLAreaElement.coords */
+  /// @domName HTMLAreaElement.coords; @docsEditable true
   String coords;
 
-  /** @domName HTMLAreaElement.hash */
+  /// @domName HTMLAreaElement.hash; @docsEditable true
   final String hash;
 
-  /** @domName HTMLAreaElement.host */
+  /// @domName HTMLAreaElement.host; @docsEditable true
   final String host;
 
-  /** @domName HTMLAreaElement.hostname */
+  /// @domName HTMLAreaElement.hostname; @docsEditable true
   final String hostname;
 
-  /** @domName HTMLAreaElement.href */
+  /// @domName HTMLAreaElement.href; @docsEditable true
   String href;
 
-  /** @domName HTMLAreaElement.noHref */
+  /// @domName HTMLAreaElement.noHref; @docsEditable true
   bool noHref;
 
-  /** @domName HTMLAreaElement.pathname */
+  /// @domName HTMLAreaElement.pathname; @docsEditable true
   final String pathname;
 
-  /** @domName HTMLAreaElement.ping */
+  /// @domName HTMLAreaElement.ping; @docsEditable true
   String ping;
 
-  /** @domName HTMLAreaElement.port */
+  /// @domName HTMLAreaElement.port; @docsEditable true
   final String port;
 
-  /** @domName HTMLAreaElement.protocol */
+  /// @domName HTMLAreaElement.protocol; @docsEditable true
   final String protocol;
 
-  /** @domName HTMLAreaElement.search */
+  /// @domName HTMLAreaElement.search; @docsEditable true
   final String search;
 
-  /** @domName HTMLAreaElement.shape */
+  /// @domName HTMLAreaElement.shape; @docsEditable true
   String shape;
 
-  /** @domName HTMLAreaElement.target */
+  /// @domName HTMLAreaElement.target; @docsEditable true
   String target;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -347,15 +344,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ArrayBuffer
+/// @domName ArrayBuffer; @docsEditable true
 class ArrayBuffer native "*ArrayBuffer" {
 
   factory ArrayBuffer(int length) => _ArrayBufferFactoryProvider.createArrayBuffer(length);
 
-  /** @domName ArrayBuffer.byteLength */
+  /// @domName ArrayBuffer.byteLength; @docsEditable true
   final int byteLength;
 
-  /** @domName ArrayBuffer.slice */
+  /// @domName ArrayBuffer.slice; @docsEditable true
   ArrayBuffer slice(int begin, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -363,16 +360,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ArrayBufferView
+/// @domName ArrayBufferView; @docsEditable true
 class ArrayBufferView native "*ArrayBufferView" {
 
-  /** @domName ArrayBufferView.buffer */
+  /// @domName ArrayBufferView.buffer; @docsEditable true
   final ArrayBuffer buffer;
 
-  /** @domName ArrayBufferView.byteLength */
+  /// @domName ArrayBufferView.byteLength; @docsEditable true
   final int byteLength;
 
-  /** @domName ArrayBufferView.byteOffset */
+  /// @domName ArrayBufferView.byteOffset; @docsEditable true
   final int byteOffset;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -380,22 +377,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Attr
+/// @domName Attr; @docsEditable true
 class Attr extends Node native "*Attr" {
 
-  /** @domName Attr.isId */
+  /// @domName Attr.isId; @docsEditable true
   final bool isId;
 
-  /** @domName Attr.name */
+  /// @domName Attr.name; @docsEditable true
   final String name;
 
-  /** @domName Attr.ownerElement */
+  /// @domName Attr.ownerElement; @docsEditable true
   final Element ownerElement;
 
-  /** @domName Attr.specified */
+  /// @domName Attr.specified; @docsEditable true
   final bool specified;
 
-  /** @domName Attr.value */
+  /// @domName Attr.value; @docsEditable true
   String value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -403,25 +400,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioBuffer
+/// @domName AudioBuffer; @docsEditable true
 class AudioBuffer native "*AudioBuffer" {
 
-  /** @domName AudioBuffer.duration */
+  /// @domName AudioBuffer.duration; @docsEditable true
   final num duration;
 
-  /** @domName AudioBuffer.gain */
+  /// @domName AudioBuffer.gain; @docsEditable true
   num gain;
 
-  /** @domName AudioBuffer.length */
+  /// @domName AudioBuffer.length; @docsEditable true
   final int length;
 
-  /** @domName AudioBuffer.numberOfChannels */
+  /// @domName AudioBuffer.numberOfChannels; @docsEditable true
   final int numberOfChannels;
 
-  /** @domName AudioBuffer.sampleRate */
+  /// @domName AudioBuffer.sampleRate; @docsEditable true
   final num sampleRate;
 
-  /** @domName AudioBuffer.getChannelData */
+  /// @domName AudioBuffer.getChannelData; @docsEditable true
   Float32Array getChannelData(int channelIndex) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -477,25 +474,25 @@
 
   static const int UNSCHEDULED_STATE = 0;
 
-  /** @domName AudioBufferSourceNode.buffer */
+  /// @domName AudioBufferSourceNode.buffer; @docsEditable true
   AudioBuffer buffer;
 
-  /** @domName AudioBufferSourceNode.gain */
+  /// @domName AudioBufferSourceNode.gain; @docsEditable true
   final AudioGain gain;
 
-  /** @domName AudioBufferSourceNode.loop */
+  /// @domName AudioBufferSourceNode.loop; @docsEditable true
   bool loop;
 
-  /** @domName AudioBufferSourceNode.loopEnd */
+  /// @domName AudioBufferSourceNode.loopEnd; @docsEditable true
   num loopEnd;
 
-  /** @domName AudioBufferSourceNode.loopStart */
+  /// @domName AudioBufferSourceNode.loopStart; @docsEditable true
   num loopStart;
 
-  /** @domName AudioBufferSourceNode.playbackRate */
+  /// @domName AudioBufferSourceNode.playbackRate; @docsEditable true
   final AudioParam playbackRate;
 
-  /** @domName AudioBufferSourceNode.playbackState */
+  /// @domName AudioBufferSourceNode.playbackState; @docsEditable true
   final int playbackState;
 
 }
@@ -507,76 +504,74 @@
 class AudioContext extends EventTarget native "*AudioContext" {
   factory AudioContext() => _AudioContextFactoryProvider.createAudioContext();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   AudioContextEvents get on =>
     new AudioContextEvents(this);
 
-  /** @domName AudioContext.activeSourceCount */
+  /// @domName AudioContext.activeSourceCount; @docsEditable true
   final int activeSourceCount;
 
-  /** @domName AudioContext.currentTime */
+  /// @domName AudioContext.currentTime; @docsEditable true
   final num currentTime;
 
-  /** @domName AudioContext.destination */
+  /// @domName AudioContext.destination; @docsEditable true
   final AudioDestinationNode destination;
 
-  /** @domName AudioContext.listener */
+  /// @domName AudioContext.listener; @docsEditable true
   final AudioListener listener;
 
-  /** @domName AudioContext.sampleRate */
+  /// @domName AudioContext.sampleRate; @docsEditable true
   final num sampleRate;
 
-  /** @domName AudioContext.createAnalyser */
+  /// @domName AudioContext.createAnalyser; @docsEditable true
   AnalyserNode createAnalyser() native;
 
-  /** @domName AudioContext.createBiquadFilter */
+  /// @domName AudioContext.createBiquadFilter; @docsEditable true
   BiquadFilterNode createBiquadFilter() native;
 
-  /** @domName AudioContext.createBuffer */
+  /// @domName AudioContext.createBuffer; @docsEditable true
   AudioBuffer createBuffer(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames, [num sampleRate]) native;
 
-  /** @domName AudioContext.createBufferSource */
+  /// @domName AudioContext.createBufferSource; @docsEditable true
   AudioBufferSourceNode createBufferSource() native;
 
-  /** @domName AudioContext.createChannelMerger */
+  /// @domName AudioContext.createChannelMerger; @docsEditable true
   ChannelMergerNode createChannelMerger([int numberOfInputs]) native;
 
-  /** @domName AudioContext.createChannelSplitter */
+  /// @domName AudioContext.createChannelSplitter; @docsEditable true
   ChannelSplitterNode createChannelSplitter([int numberOfOutputs]) native;
 
-  /** @domName AudioContext.createConvolver */
+  /// @domName AudioContext.createConvolver; @docsEditable true
   ConvolverNode createConvolver() native;
 
-  /** @domName AudioContext.createDelay */
+  /// @domName AudioContext.createDelay; @docsEditable true
   DelayNode createDelay([num maxDelayTime]) native;
 
-  /** @domName AudioContext.createDynamicsCompressor */
+  /// @domName AudioContext.createDynamicsCompressor; @docsEditable true
   DynamicsCompressorNode createDynamicsCompressor() native;
 
-  /** @domName AudioContext.createMediaElementSource */
+  /// @domName AudioContext.createMediaElementSource; @docsEditable true
   MediaElementAudioSourceNode createMediaElementSource(MediaElement mediaElement) native;
 
-  /** @domName AudioContext.createMediaStreamSource */
+  /// @domName AudioContext.createMediaStreamSource; @docsEditable true
   MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream) native;
 
-  /** @domName AudioContext.createOscillator */
+  /// @domName AudioContext.createOscillator; @docsEditable true
   OscillatorNode createOscillator() native;
 
-  /** @domName AudioContext.createPanner */
+  /// @domName AudioContext.createPanner; @docsEditable true
   PannerNode createPanner() native;
 
-  /** @domName AudioContext.createWaveShaper */
+  /// @domName AudioContext.createWaveShaper; @docsEditable true
   WaveShaperNode createWaveShaper() native;
 
-  /** @domName AudioContext.createWaveTable */
+  /// @domName AudioContext.createWaveTable; @docsEditable true
   WaveTable createWaveTable(Float32Array real, Float32Array imag) native;
 
-  /** @domName AudioContext.decodeAudioData */
+  /// @domName AudioContext.decodeAudioData; @docsEditable true
   void decodeAudioData(ArrayBuffer audioData, AudioBufferCallback successCallback, [AudioBufferCallback errorCallback]) native;
 
-  /** @domName AudioContext.startRendering */
+  /// @domName AudioContext.startRendering; @docsEditable true
   void startRendering() native;
 
   GainNode createGain() {
@@ -614,10 +609,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioDestinationNode
+/// @domName AudioDestinationNode; @docsEditable true
 class AudioDestinationNode extends AudioNode native "*AudioDestinationNode" {
 
-  /** @domName AudioDestinationNode.numberOfChannels */
+  /// @domName AudioDestinationNode.numberOfChannels; @docsEditable true
   final int numberOfChannels;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -625,7 +620,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLAudioElement
+/// @domName HTMLAudioElement; @docsEditable true
 class AudioElement extends MediaElement native "*HTMLAudioElement" {
 
   factory AudioElement([String src]) {
@@ -640,7 +635,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioGain
+/// @domName AudioGain; @docsEditable true
 class AudioGain extends AudioParam native "*AudioGain" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -648,22 +643,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioListener
+/// @domName AudioListener; @docsEditable true
 class AudioListener native "*AudioListener" {
 
-  /** @domName AudioListener.dopplerFactor */
+  /// @domName AudioListener.dopplerFactor; @docsEditable true
   num dopplerFactor;
 
-  /** @domName AudioListener.speedOfSound */
+  /// @domName AudioListener.speedOfSound; @docsEditable true
   num speedOfSound;
 
-  /** @domName AudioListener.setOrientation */
+  /// @domName AudioListener.setOrientation; @docsEditable true
   void setOrientation(num x, num y, num z, num xUp, num yUp, num zUp) native;
 
-  /** @domName AudioListener.setPosition */
+  /// @domName AudioListener.setPosition; @docsEditable true
   void setPosition(num x, num y, num z) native;
 
-  /** @domName AudioListener.setVelocity */
+  /// @domName AudioListener.setVelocity; @docsEditable true
   void setVelocity(num x, num y, num z) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -671,22 +666,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioNode
+/// @domName AudioNode; @docsEditable true
 class AudioNode native "*AudioNode" {
 
-  /** @domName AudioNode.context */
+  /// @domName AudioNode.context; @docsEditable true
   final AudioContext context;
 
-  /** @domName AudioNode.numberOfInputs */
+  /// @domName AudioNode.numberOfInputs; @docsEditable true
   final int numberOfInputs;
 
-  /** @domName AudioNode.numberOfOutputs */
+  /// @domName AudioNode.numberOfOutputs; @docsEditable true
   final int numberOfOutputs;
 
-  /** @domName AudioNode.connect */
+  /// @domName AudioNode.connect; @docsEditable true
   void connect(destination, int output, [int input]) native;
 
-  /** @domName AudioNode.disconnect */
+  /// @domName AudioNode.disconnect; @docsEditable true
   void disconnect(int output) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -694,43 +689,43 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioParam
+/// @domName AudioParam; @docsEditable true
 class AudioParam native "*AudioParam" {
 
-  /** @domName AudioParam.defaultValue */
+  /// @domName AudioParam.defaultValue; @docsEditable true
   final num defaultValue;
 
-  /** @domName AudioParam.maxValue */
+  /// @domName AudioParam.maxValue; @docsEditable true
   final num maxValue;
 
-  /** @domName AudioParam.minValue */
+  /// @domName AudioParam.minValue; @docsEditable true
   final num minValue;
 
-  /** @domName AudioParam.name */
+  /// @domName AudioParam.name; @docsEditable true
   final String name;
 
-  /** @domName AudioParam.units */
+  /// @domName AudioParam.units; @docsEditable true
   final int units;
 
-  /** @domName AudioParam.value */
+  /// @domName AudioParam.value; @docsEditable true
   num value;
 
-  /** @domName AudioParam.cancelScheduledValues */
+  /// @domName AudioParam.cancelScheduledValues; @docsEditable true
   void cancelScheduledValues(num startTime) native;
 
-  /** @domName AudioParam.exponentialRampToValueAtTime */
+  /// @domName AudioParam.exponentialRampToValueAtTime; @docsEditable true
   void exponentialRampToValueAtTime(num value, num time) native;
 
-  /** @domName AudioParam.linearRampToValueAtTime */
+  /// @domName AudioParam.linearRampToValueAtTime; @docsEditable true
   void linearRampToValueAtTime(num value, num time) native;
 
-  /** @domName AudioParam.setTargetAtTime */
+  /// @domName AudioParam.setTargetAtTime; @docsEditable true
   void setTargetAtTime(num target, num time, num timeConstant) native;
 
-  /** @domName AudioParam.setValueAtTime */
+  /// @domName AudioParam.setValueAtTime; @docsEditable true
   void setValueAtTime(num value, num time) native;
 
-  /** @domName AudioParam.setValueCurveAtTime */
+  /// @domName AudioParam.setValueCurveAtTime; @docsEditable true
   void setValueCurveAtTime(Float32Array values, num time, num duration) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -738,13 +733,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioProcessingEvent
+/// @domName AudioProcessingEvent; @docsEditable true
 class AudioProcessingEvent extends Event native "*AudioProcessingEvent" {
 
-  /** @domName AudioProcessingEvent.inputBuffer */
+  /// @domName AudioProcessingEvent.inputBuffer; @docsEditable true
   final AudioBuffer inputBuffer;
 
-  /** @domName AudioProcessingEvent.outputBuffer */
+  /// @domName AudioProcessingEvent.outputBuffer; @docsEditable true
   final AudioBuffer outputBuffer;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -752,7 +747,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName AudioSourceNode
+/// @domName AudioSourceNode; @docsEditable true
 class AudioSourceNode extends AudioNode native "*AudioSourceNode" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -760,12 +755,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLBRElement
+/// @domName HTMLBRElement; @docsEditable true
 class BRElement extends Element implements Element native "*HTMLBRElement" {
 
-  factory BRElement() => _Elements.createBRElement();
+  factory BRElement() => document.$dom_createElement("br");
 
-  /** @domName HTMLBRElement.clear */
+  /// @domName HTMLBRElement.clear; @docsEditable true
   String clear;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -773,10 +768,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName BarInfo
+/// @domName BarInfo; @docsEditable true
 class BarInfo native "*BarInfo" {
 
-  /** @domName BarInfo.visible */
+  /// @domName BarInfo.visible; @docsEditable true
   final bool visible;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -784,15 +779,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLBaseElement
+/// @domName HTMLBaseElement; @docsEditable true
 class BaseElement extends Element implements Element native "*HTMLBaseElement" {
 
-  factory BaseElement() => _Elements.createBaseElement();
+  factory BaseElement() => document.$dom_createElement("base");
 
-  /** @domName HTMLBaseElement.href */
+  /// @domName HTMLBaseElement.href; @docsEditable true
   String href;
 
-  /** @domName HTMLBaseElement.target */
+  /// @domName HTMLBaseElement.target; @docsEditable true
   String target;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -800,16 +795,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLBaseFontElement
+/// @domName HTMLBaseFontElement; @docsEditable true
 class BaseFontElement extends Element implements Element native "*HTMLBaseFontElement" {
 
-  /** @domName HTMLBaseFontElement.color */
+  /// @domName HTMLBaseFontElement.color; @docsEditable true
   String color;
 
-  /** @domName HTMLBaseFontElement.face */
+  /// @domName HTMLBaseFontElement.face; @docsEditable true
   String face;
 
-  /** @domName HTMLBaseFontElement.size */
+  /// @domName HTMLBaseFontElement.size; @docsEditable true
   int size;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -817,34 +812,32 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName BatteryManager
+/// @domName BatteryManager; @docsEditable true
 class BatteryManager extends EventTarget native "*BatteryManager" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   BatteryManagerEvents get on =>
     new BatteryManagerEvents(this);
 
-  /** @domName BatteryManager.charging */
+  /// @domName BatteryManager.charging; @docsEditable true
   final bool charging;
 
-  /** @domName BatteryManager.chargingTime */
+  /// @domName BatteryManager.chargingTime; @docsEditable true
   final num chargingTime;
 
-  /** @domName BatteryManager.dischargingTime */
+  /// @domName BatteryManager.dischargingTime; @docsEditable true
   final num dischargingTime;
 
-  /** @domName BatteryManager.level */
+  /// @domName BatteryManager.level; @docsEditable true
   final num level;
 
-  /** @domName BatteryManager.addEventListener */
+  /// @domName BatteryManager.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName BatteryManager.dispatchEvent */
+  /// @domName BatteryManager.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event event) native "dispatchEvent";
 
-  /** @domName BatteryManager.removeEventListener */
+  /// @domName BatteryManager.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 }
 
@@ -864,10 +857,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName BeforeLoadEvent
+/// @domName BeforeLoadEvent; @docsEditable true
 class BeforeLoadEvent extends Event native "*BeforeLoadEvent" {
 
-  /** @domName BeforeLoadEvent.url */
+  /// @domName BeforeLoadEvent.url; @docsEditable true
   final String url;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -875,7 +868,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName BiquadFilterNode
+/// @domName BiquadFilterNode; @docsEditable true
 class BiquadFilterNode extends AudioNode native "*BiquadFilterNode" {
 
   static const int ALLPASS = 7;
@@ -894,19 +887,19 @@
 
   static const int PEAKING = 5;
 
-  /** @domName BiquadFilterNode.Q */
+  /// @domName BiquadFilterNode.Q; @docsEditable true
   final AudioParam Q;
 
-  /** @domName BiquadFilterNode.frequency */
+  /// @domName BiquadFilterNode.frequency; @docsEditable true
   final AudioParam frequency;
 
-  /** @domName BiquadFilterNode.gain */
+  /// @domName BiquadFilterNode.gain; @docsEditable true
   final AudioParam gain;
 
-  /** @domName BiquadFilterNode.type */
+  /// @domName BiquadFilterNode.type; @docsEditable true
   int type;
 
-  /** @domName BiquadFilterNode.getFrequencyResponse */
+  /// @domName BiquadFilterNode.getFrequencyResponse; @docsEditable true
   void getFrequencyResponse(Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -914,7 +907,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Blob
+/// @domName Blob; @docsEditable true
 class Blob native "*Blob" {
 
   factory Blob(List blobParts, [String type, String endings]) {
@@ -927,13 +920,13 @@
     return _BlobFactoryProvider.createBlob(blobParts, type, endings);
   }
 
-  /** @domName Blob.size */
+  /// @domName Blob.size; @docsEditable true
   final int size;
 
-  /** @domName Blob.type */
+  /// @domName Blob.type; @docsEditable true
   final String type;
 
-  /** @domName Blob.slice */
+  /// @domName Blob.slice; @docsEditable true
   Blob slice([int start, int end, String contentType]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -941,30 +934,28 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLBodyElement
+/// @domName HTMLBodyElement; @docsEditable true
 class BodyElement extends Element implements Element native "*HTMLBodyElement" {
 
-  factory BodyElement() => _Elements.createBodyElement();
+  factory BodyElement() => document.$dom_createElement("body");
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   BodyElementEvents get on =>
     new BodyElementEvents(this);
 
-  /** @domName HTMLBodyElement.aLink */
+  /// @domName HTMLBodyElement.aLink; @docsEditable true
   String aLink;
 
-  /** @domName HTMLBodyElement.background */
+  /// @domName HTMLBodyElement.background; @docsEditable true
   String background;
 
-  /** @domName HTMLBodyElement.bgColor */
+  /// @domName HTMLBodyElement.bgColor; @docsEditable true
   String bgColor;
 
-  /** @domName HTMLBodyElement.link */
+  /// @domName HTMLBodyElement.link; @docsEditable true
   String link;
 
-  /** @domName HTMLBodyElement.vLink */
+  /// @domName HTMLBodyElement.vLink; @docsEditable true
   String vLink;
 }
 
@@ -1002,60 +993,61 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLButtonElement
+/// @domName HTMLButtonElement; @docsEditable true
 class ButtonElement extends Element implements Element native "*HTMLButtonElement" {
 
-  factory ButtonElement() => _Elements.createButtonElement();
+  factory ButtonElement() => document.$dom_createElement("button");
 
-  /** @domName HTMLButtonElement.autofocus */
+  /// @domName HTMLButtonElement.autofocus; @docsEditable true
   bool autofocus;
 
-  /** @domName HTMLButtonElement.disabled */
+  /// @domName HTMLButtonElement.disabled; @docsEditable true
   bool disabled;
 
-  /** @domName HTMLButtonElement.form */
+  /// @domName HTMLButtonElement.form; @docsEditable true
   final FormElement form;
 
-  /** @domName HTMLButtonElement.formAction */
+  /// @domName HTMLButtonElement.formAction; @docsEditable true
   String formAction;
 
-  /** @domName HTMLButtonElement.formEnctype */
+  /// @domName HTMLButtonElement.formEnctype; @docsEditable true
   String formEnctype;
 
-  /** @domName HTMLButtonElement.formMethod */
+  /// @domName HTMLButtonElement.formMethod; @docsEditable true
   String formMethod;
 
-  /** @domName HTMLButtonElement.formNoValidate */
+  /// @domName HTMLButtonElement.formNoValidate; @docsEditable true
   bool formNoValidate;
 
-  /** @domName HTMLButtonElement.formTarget */
+  /// @domName HTMLButtonElement.formTarget; @docsEditable true
   String formTarget;
 
-  /** @domName HTMLButtonElement.labels */
+  /// @domName HTMLButtonElement.labels; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   final List<Node> labels;
 
-  /** @domName HTMLButtonElement.name */
+  /// @domName HTMLButtonElement.name; @docsEditable true
   String name;
 
-  /** @domName HTMLButtonElement.type */
+  /// @domName HTMLButtonElement.type; @docsEditable true
   String type;
 
-  /** @domName HTMLButtonElement.validationMessage */
+  /// @domName HTMLButtonElement.validationMessage; @docsEditable true
   final String validationMessage;
 
-  /** @domName HTMLButtonElement.validity */
+  /// @domName HTMLButtonElement.validity; @docsEditable true
   final ValidityState validity;
 
-  /** @domName HTMLButtonElement.value */
+  /// @domName HTMLButtonElement.value; @docsEditable true
   String value;
 
-  /** @domName HTMLButtonElement.willValidate */
+  /// @domName HTMLButtonElement.willValidate; @docsEditable true
   final bool willValidate;
 
-  /** @domName HTMLButtonElement.checkValidity */
+  /// @domName HTMLButtonElement.checkValidity; @docsEditable true
   bool checkValidity() native;
 
-  /** @domName HTMLButtonElement.setCustomValidity */
+  /// @domName HTMLButtonElement.setCustomValidity; @docsEditable true
   void setCustomValidity(String error) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1063,7 +1055,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CDATASection
+/// @domName CDATASection; @docsEditable true
 class CDATASection extends Text native "*CDATASection" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1071,10 +1063,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSCharsetRule
+/// @domName CSSCharsetRule; @docsEditable true
 class CSSCharsetRule extends CSSRule native "*CSSCharsetRule" {
 
-  /** @domName CSSCharsetRule.encoding */
+  /// @domName CSSCharsetRule.encoding; @docsEditable true
   String encoding;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1082,10 +1074,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSFontFaceRule
+/// @domName CSSFontFaceRule; @docsEditable true
 class CSSFontFaceRule extends CSSRule native "*CSSFontFaceRule" {
 
-  /** @domName CSSFontFaceRule.style */
+  /// @domName CSSFontFaceRule.style; @docsEditable true
   final CSSStyleDeclaration style;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1093,16 +1085,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSImportRule
+/// @domName CSSImportRule; @docsEditable true
 class CSSImportRule extends CSSRule native "*CSSImportRule" {
 
-  /** @domName CSSImportRule.href */
+  /// @domName CSSImportRule.href; @docsEditable true
   final String href;
 
-  /** @domName CSSImportRule.media */
+  /// @domName CSSImportRule.media; @docsEditable true
   final MediaList media;
 
-  /** @domName CSSImportRule.styleSheet */
+  /// @domName CSSImportRule.styleSheet; @docsEditable true
   final CSSStyleSheet styleSheet;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1110,13 +1102,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitCSSKeyframeRule
+/// @domName WebKitCSSKeyframeRule; @docsEditable true
 class CSSKeyframeRule extends CSSRule native "*WebKitCSSKeyframeRule" {
 
-  /** @domName WebKitCSSKeyframeRule.keyText */
+  /// @domName WebKitCSSKeyframeRule.keyText; @docsEditable true
   String keyText;
 
-  /** @domName WebKitCSSKeyframeRule.style */
+  /// @domName WebKitCSSKeyframeRule.style; @docsEditable true
   final CSSStyleDeclaration style;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1124,22 +1116,23 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitCSSKeyframesRule
+/// @domName WebKitCSSKeyframesRule; @docsEditable true
 class CSSKeyframesRule extends CSSRule native "*WebKitCSSKeyframesRule" {
 
-  /** @domName WebKitCSSKeyframesRule.cssRules */
+  /// @domName WebKitCSSKeyframesRule.cssRules; @docsEditable true
+  @Returns('_CSSRuleList') @Creates('_CSSRuleList')
   final List<CSSRule> cssRules;
 
-  /** @domName WebKitCSSKeyframesRule.name */
+  /// @domName WebKitCSSKeyframesRule.name; @docsEditable true
   String name;
 
-  /** @domName WebKitCSSKeyframesRule.deleteRule */
+  /// @domName WebKitCSSKeyframesRule.deleteRule; @docsEditable true
   void deleteRule(String key) native;
 
-  /** @domName WebKitCSSKeyframesRule.findRule */
+  /// @domName WebKitCSSKeyframesRule.findRule; @docsEditable true
   CSSKeyframeRule findRule(String key) native;
 
-  /** @domName WebKitCSSKeyframesRule.insertRule */
+  /// @domName WebKitCSSKeyframesRule.insertRule; @docsEditable true
   void insertRule(String rule) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1147,7 +1140,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitCSSMatrix
+/// @domName WebKitCSSMatrix; @docsEditable true
 class CSSMatrix native "*WebKitCSSMatrix" {
 
   factory CSSMatrix([String cssValue]) {
@@ -1157,100 +1150,100 @@
     return _CSSMatrixFactoryProvider.createCSSMatrix(cssValue);
   }
 
-  /** @domName WebKitCSSMatrix.a */
+  /// @domName WebKitCSSMatrix.a; @docsEditable true
   num a;
 
-  /** @domName WebKitCSSMatrix.b */
+  /// @domName WebKitCSSMatrix.b; @docsEditable true
   num b;
 
-  /** @domName WebKitCSSMatrix.c */
+  /// @domName WebKitCSSMatrix.c; @docsEditable true
   num c;
 
-  /** @domName WebKitCSSMatrix.d */
+  /// @domName WebKitCSSMatrix.d; @docsEditable true
   num d;
 
-  /** @domName WebKitCSSMatrix.e */
+  /// @domName WebKitCSSMatrix.e; @docsEditable true
   num e;
 
-  /** @domName WebKitCSSMatrix.f */
+  /// @domName WebKitCSSMatrix.f; @docsEditable true
   num f;
 
-  /** @domName WebKitCSSMatrix.m11 */
+  /// @domName WebKitCSSMatrix.m11; @docsEditable true
   num m11;
 
-  /** @domName WebKitCSSMatrix.m12 */
+  /// @domName WebKitCSSMatrix.m12; @docsEditable true
   num m12;
 
-  /** @domName WebKitCSSMatrix.m13 */
+  /// @domName WebKitCSSMatrix.m13; @docsEditable true
   num m13;
 
-  /** @domName WebKitCSSMatrix.m14 */
+  /// @domName WebKitCSSMatrix.m14; @docsEditable true
   num m14;
 
-  /** @domName WebKitCSSMatrix.m21 */
+  /// @domName WebKitCSSMatrix.m21; @docsEditable true
   num m21;
 
-  /** @domName WebKitCSSMatrix.m22 */
+  /// @domName WebKitCSSMatrix.m22; @docsEditable true
   num m22;
 
-  /** @domName WebKitCSSMatrix.m23 */
+  /// @domName WebKitCSSMatrix.m23; @docsEditable true
   num m23;
 
-  /** @domName WebKitCSSMatrix.m24 */
+  /// @domName WebKitCSSMatrix.m24; @docsEditable true
   num m24;
 
-  /** @domName WebKitCSSMatrix.m31 */
+  /// @domName WebKitCSSMatrix.m31; @docsEditable true
   num m31;
 
-  /** @domName WebKitCSSMatrix.m32 */
+  /// @domName WebKitCSSMatrix.m32; @docsEditable true
   num m32;
 
-  /** @domName WebKitCSSMatrix.m33 */
+  /// @domName WebKitCSSMatrix.m33; @docsEditable true
   num m33;
 
-  /** @domName WebKitCSSMatrix.m34 */
+  /// @domName WebKitCSSMatrix.m34; @docsEditable true
   num m34;
 
-  /** @domName WebKitCSSMatrix.m41 */
+  /// @domName WebKitCSSMatrix.m41; @docsEditable true
   num m41;
 
-  /** @domName WebKitCSSMatrix.m42 */
+  /// @domName WebKitCSSMatrix.m42; @docsEditable true
   num m42;
 
-  /** @domName WebKitCSSMatrix.m43 */
+  /// @domName WebKitCSSMatrix.m43; @docsEditable true
   num m43;
 
-  /** @domName WebKitCSSMatrix.m44 */
+  /// @domName WebKitCSSMatrix.m44; @docsEditable true
   num m44;
 
-  /** @domName WebKitCSSMatrix.inverse */
+  /// @domName WebKitCSSMatrix.inverse; @docsEditable true
   CSSMatrix inverse() native;
 
-  /** @domName WebKitCSSMatrix.multiply */
+  /// @domName WebKitCSSMatrix.multiply; @docsEditable true
   CSSMatrix multiply(CSSMatrix secondMatrix) native;
 
-  /** @domName WebKitCSSMatrix.rotate */
+  /// @domName WebKitCSSMatrix.rotate; @docsEditable true
   CSSMatrix rotate(num rotX, num rotY, num rotZ) native;
 
-  /** @domName WebKitCSSMatrix.rotateAxisAngle */
+  /// @domName WebKitCSSMatrix.rotateAxisAngle; @docsEditable true
   CSSMatrix rotateAxisAngle(num x, num y, num z, num angle) native;
 
-  /** @domName WebKitCSSMatrix.scale */
+  /// @domName WebKitCSSMatrix.scale; @docsEditable true
   CSSMatrix scale(num scaleX, num scaleY, num scaleZ) native;
 
-  /** @domName WebKitCSSMatrix.setMatrixValue */
+  /// @domName WebKitCSSMatrix.setMatrixValue; @docsEditable true
   void setMatrixValue(String string) native;
 
-  /** @domName WebKitCSSMatrix.skewX */
+  /// @domName WebKitCSSMatrix.skewX; @docsEditable true
   CSSMatrix skewX(num angle) native;
 
-  /** @domName WebKitCSSMatrix.skewY */
+  /// @domName WebKitCSSMatrix.skewY; @docsEditable true
   CSSMatrix skewY(num angle) native;
 
-  /** @domName WebKitCSSMatrix.toString */
+  /// @domName WebKitCSSMatrix.toString; @docsEditable true
   String toString() native;
 
-  /** @domName WebKitCSSMatrix.translate */
+  /// @domName WebKitCSSMatrix.translate; @docsEditable true
   CSSMatrix translate(num x, num y, num z) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1258,19 +1251,20 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSMediaRule
+/// @domName CSSMediaRule; @docsEditable true
 class CSSMediaRule extends CSSRule native "*CSSMediaRule" {
 
-  /** @domName CSSMediaRule.cssRules */
+  /// @domName CSSMediaRule.cssRules; @docsEditable true
+  @Returns('_CSSRuleList') @Creates('_CSSRuleList')
   final List<CSSRule> cssRules;
 
-  /** @domName CSSMediaRule.media */
+  /// @domName CSSMediaRule.media; @docsEditable true
   final MediaList media;
 
-  /** @domName CSSMediaRule.deleteRule */
+  /// @domName CSSMediaRule.deleteRule; @docsEditable true
   void deleteRule(int index) native;
 
-  /** @domName CSSMediaRule.insertRule */
+  /// @domName CSSMediaRule.insertRule; @docsEditable true
   int insertRule(String rule, int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1278,13 +1272,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSPageRule
+/// @domName CSSPageRule; @docsEditable true
 class CSSPageRule extends CSSRule native "*CSSPageRule" {
 
-  /** @domName CSSPageRule.selectorText */
+  /// @domName CSSPageRule.selectorText; @docsEditable true
   String selectorText;
 
-  /** @domName CSSPageRule.style */
+  /// @domName CSSPageRule.style; @docsEditable true
   final CSSStyleDeclaration style;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1292,7 +1286,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSPrimitiveValue
+/// @domName CSSPrimitiveValue; @docsEditable true
 class CSSPrimitiveValue extends CSSValue native "*CSSPrimitiveValue" {
 
   static const int CSS_ATTR = 22;
@@ -1353,28 +1347,28 @@
 
   static const int CSS_VW = 26;
 
-  /** @domName CSSPrimitiveValue.primitiveType */
+  /// @domName CSSPrimitiveValue.primitiveType; @docsEditable true
   final int primitiveType;
 
-  /** @domName CSSPrimitiveValue.getCounterValue */
+  /// @domName CSSPrimitiveValue.getCounterValue; @docsEditable true
   Counter getCounterValue() native;
 
-  /** @domName CSSPrimitiveValue.getFloatValue */
+  /// @domName CSSPrimitiveValue.getFloatValue; @docsEditable true
   num getFloatValue(int unitType) native;
 
-  /** @domName CSSPrimitiveValue.getRGBColorValue */
+  /// @domName CSSPrimitiveValue.getRGBColorValue; @docsEditable true
   RGBColor getRGBColorValue() native;
 
-  /** @domName CSSPrimitiveValue.getRectValue */
+  /// @domName CSSPrimitiveValue.getRectValue; @docsEditable true
   Rect getRectValue() native;
 
-  /** @domName CSSPrimitiveValue.getStringValue */
+  /// @domName CSSPrimitiveValue.getStringValue; @docsEditable true
   String getStringValue() native;
 
-  /** @domName CSSPrimitiveValue.setFloatValue */
+  /// @domName CSSPrimitiveValue.setFloatValue; @docsEditable true
   void setFloatValue(int unitType, num floatValue) native;
 
-  /** @domName CSSPrimitiveValue.setStringValue */
+  /// @domName CSSPrimitiveValue.setStringValue; @docsEditable true
   void setStringValue(int stringType, String stringValue) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1382,7 +1376,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSRule
+/// @domName CSSRule; @docsEditable true
 class CSSRule native "*CSSRule" {
 
   static const int CHARSET_RULE = 2;
@@ -1403,16 +1397,16 @@
 
   static const int WEBKIT_KEYFRAME_RULE = 8;
 
-  /** @domName CSSRule.cssText */
+  /// @domName CSSRule.cssText; @docsEditable true
   String cssText;
 
-  /** @domName CSSRule.parentRule */
+  /// @domName CSSRule.parentRule; @docsEditable true
   final CSSRule parentRule;
 
-  /** @domName CSSRule.parentStyleSheet */
+  /// @domName CSSRule.parentStyleSheet; @docsEditable true
   final CSSStyleSheet parentStyleSheet;
 
-  /** @domName CSSRule.type */
+  /// @domName CSSRule.type; @docsEditable true
   final int type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1443,34 +1437,34 @@
       _CSSStyleDeclarationFactoryProvider.createCSSStyleDeclaration_css(css);
 
 
-  /** @domName CSSStyleDeclaration.cssText */
+  /// @domName CSSStyleDeclaration.cssText; @docsEditable true
   String cssText;
 
-  /** @domName CSSStyleDeclaration.length */
+  /// @domName CSSStyleDeclaration.length; @docsEditable true
   final int length;
 
-  /** @domName CSSStyleDeclaration.parentRule */
+  /// @domName CSSStyleDeclaration.parentRule; @docsEditable true
   final CSSRule parentRule;
 
-  /** @domName CSSStyleDeclaration.getPropertyCSSValue */
+  /// @domName CSSStyleDeclaration.getPropertyCSSValue; @docsEditable true
   CSSValue getPropertyCSSValue(String propertyName) native;
 
-  /** @domName CSSStyleDeclaration.getPropertyPriority */
+  /// @domName CSSStyleDeclaration.getPropertyPriority; @docsEditable true
   String getPropertyPriority(String propertyName) native;
 
-  /** @domName CSSStyleDeclaration.getPropertyShorthand */
+  /// @domName CSSStyleDeclaration.getPropertyShorthand; @docsEditable true
   String getPropertyShorthand(String propertyName) native;
 
-  /** @domName CSSStyleDeclaration._getPropertyValue */
+  /// @domName CSSStyleDeclaration._getPropertyValue; @docsEditable true
   String _getPropertyValue(String propertyName) native "getPropertyValue";
 
-  /** @domName CSSStyleDeclaration.isPropertyImplicit */
+  /// @domName CSSStyleDeclaration.isPropertyImplicit; @docsEditable true
   bool isPropertyImplicit(String propertyName) native;
 
-  /** @domName CSSStyleDeclaration.item */
+  /// @domName CSSStyleDeclaration.item; @docsEditable true
   String item(int index) native;
 
-  /** @domName CSSStyleDeclaration.removeProperty */
+  /// @domName CSSStyleDeclaration.removeProperty; @docsEditable true
   String removeProperty(String propertyName) native;
 
 
@@ -1488,12 +1482,39 @@
   }
 
   // TODO(jacobr): generate this list of properties using the existing script.
-    /** Gets the value of "animation" */
+  /** Gets the value of "align-content" */
+  String get alignContent =>
+    getPropertyValue('${_browserPrefix}align-content');
+
+  /** Sets the value of "align-content" */
+  void set alignContent(String value) {
+    setProperty('${_browserPrefix}align-content', value, '');
+  }
+
+  /** Gets the value of "align-items" */
+  String get alignItems =>
+    getPropertyValue('${_browserPrefix}align-items');
+
+  /** Sets the value of "align-items" */
+  void set alignItems(String value) {
+    setProperty('${_browserPrefix}align-items', value, '');
+  }
+
+  /** Gets the value of "align-self" */
+  String get alignSelf =>
+    getPropertyValue('${_browserPrefix}align-self');
+
+  /** Sets the value of "align-self" */
+  void set alignSelf(String value) {
+    setProperty('${_browserPrefix}align-self', value, '');
+  }
+
+  /** Gets the value of "animation" */
   String get animation =>
     getPropertyValue('${_browserPrefix}animation');
 
   /** Sets the value of "animation" */
-  void set animation(var value) {
+  void set animation(String value) {
     setProperty('${_browserPrefix}animation', value, '');
   }
 
@@ -1502,7 +1523,7 @@
     getPropertyValue('${_browserPrefix}animation-delay');
 
   /** Sets the value of "animation-delay" */
-  void set animationDelay(var value) {
+  void set animationDelay(String value) {
     setProperty('${_browserPrefix}animation-delay', value, '');
   }
 
@@ -1511,7 +1532,7 @@
     getPropertyValue('${_browserPrefix}animation-direction');
 
   /** Sets the value of "animation-direction" */
-  void set animationDirection(var value) {
+  void set animationDirection(String value) {
     setProperty('${_browserPrefix}animation-direction', value, '');
   }
 
@@ -1520,7 +1541,7 @@
     getPropertyValue('${_browserPrefix}animation-duration');
 
   /** Sets the value of "animation-duration" */
-  void set animationDuration(var value) {
+  void set animationDuration(String value) {
     setProperty('${_browserPrefix}animation-duration', value, '');
   }
 
@@ -1529,7 +1550,7 @@
     getPropertyValue('${_browserPrefix}animation-fill-mode');
 
   /** Sets the value of "animation-fill-mode" */
-  void set animationFillMode(var value) {
+  void set animationFillMode(String value) {
     setProperty('${_browserPrefix}animation-fill-mode', value, '');
   }
 
@@ -1538,7 +1559,7 @@
     getPropertyValue('${_browserPrefix}animation-iteration-count');
 
   /** Sets the value of "animation-iteration-count" */
-  void set animationIterationCount(var value) {
+  void set animationIterationCount(String value) {
     setProperty('${_browserPrefix}animation-iteration-count', value, '');
   }
 
@@ -1547,7 +1568,7 @@
     getPropertyValue('${_browserPrefix}animation-name');
 
   /** Sets the value of "animation-name" */
-  void set animationName(var value) {
+  void set animationName(String value) {
     setProperty('${_browserPrefix}animation-name', value, '');
   }
 
@@ -1556,7 +1577,7 @@
     getPropertyValue('${_browserPrefix}animation-play-state');
 
   /** Sets the value of "animation-play-state" */
-  void set animationPlayState(var value) {
+  void set animationPlayState(String value) {
     setProperty('${_browserPrefix}animation-play-state', value, '');
   }
 
@@ -1565,25 +1586,43 @@
     getPropertyValue('${_browserPrefix}animation-timing-function');
 
   /** Sets the value of "animation-timing-function" */
-  void set animationTimingFunction(var value) {
+  void set animationTimingFunction(String value) {
     setProperty('${_browserPrefix}animation-timing-function', value, '');
   }
 
+  /** Gets the value of "app-region" */
+  String get appRegion =>
+    getPropertyValue('${_browserPrefix}app-region');
+
+  /** Sets the value of "app-region" */
+  void set appRegion(String value) {
+    setProperty('${_browserPrefix}app-region', value, '');
+  }
+
   /** Gets the value of "appearance" */
   String get appearance =>
     getPropertyValue('${_browserPrefix}appearance');
 
   /** Sets the value of "appearance" */
-  void set appearance(var value) {
+  void set appearance(String value) {
     setProperty('${_browserPrefix}appearance', value, '');
   }
 
+  /** Gets the value of "aspect-ratio" */
+  String get aspectRatio =>
+    getPropertyValue('${_browserPrefix}aspect-ratio');
+
+  /** Sets the value of "aspect-ratio" */
+  void set aspectRatio(String value) {
+    setProperty('${_browserPrefix}aspect-ratio', value, '');
+  }
+
   /** Gets the value of "backface-visibility" */
   String get backfaceVisibility =>
     getPropertyValue('${_browserPrefix}backface-visibility');
 
   /** Sets the value of "backface-visibility" */
-  void set backfaceVisibility(var value) {
+  void set backfaceVisibility(String value) {
     setProperty('${_browserPrefix}backface-visibility', value, '');
   }
 
@@ -1592,7 +1631,7 @@
     getPropertyValue('background');
 
   /** Sets the value of "background" */
-  void set background(var value) {
+  void set background(String value) {
     setProperty('background', value, '');
   }
 
@@ -1601,7 +1640,7 @@
     getPropertyValue('background-attachment');
 
   /** Sets the value of "background-attachment" */
-  void set backgroundAttachment(var value) {
+  void set backgroundAttachment(String value) {
     setProperty('background-attachment', value, '');
   }
 
@@ -1610,7 +1649,7 @@
     getPropertyValue('background-clip');
 
   /** Sets the value of "background-clip" */
-  void set backgroundClip(var value) {
+  void set backgroundClip(String value) {
     setProperty('background-clip', value, '');
   }
 
@@ -1619,7 +1658,7 @@
     getPropertyValue('background-color');
 
   /** Sets the value of "background-color" */
-  void set backgroundColor(var value) {
+  void set backgroundColor(String value) {
     setProperty('background-color', value, '');
   }
 
@@ -1628,7 +1667,7 @@
     getPropertyValue('${_browserPrefix}background-composite');
 
   /** Sets the value of "background-composite" */
-  void set backgroundComposite(var value) {
+  void set backgroundComposite(String value) {
     setProperty('${_browserPrefix}background-composite', value, '');
   }
 
@@ -1637,7 +1676,7 @@
     getPropertyValue('background-image');
 
   /** Sets the value of "background-image" */
-  void set backgroundImage(var value) {
+  void set backgroundImage(String value) {
     setProperty('background-image', value, '');
   }
 
@@ -1646,7 +1685,7 @@
     getPropertyValue('background-origin');
 
   /** Sets the value of "background-origin" */
-  void set backgroundOrigin(var value) {
+  void set backgroundOrigin(String value) {
     setProperty('background-origin', value, '');
   }
 
@@ -1655,7 +1694,7 @@
     getPropertyValue('background-position');
 
   /** Sets the value of "background-position" */
-  void set backgroundPosition(var value) {
+  void set backgroundPosition(String value) {
     setProperty('background-position', value, '');
   }
 
@@ -1664,7 +1703,7 @@
     getPropertyValue('background-position-x');
 
   /** Sets the value of "background-position-x" */
-  void set backgroundPositionX(var value) {
+  void set backgroundPositionX(String value) {
     setProperty('background-position-x', value, '');
   }
 
@@ -1673,7 +1712,7 @@
     getPropertyValue('background-position-y');
 
   /** Sets the value of "background-position-y" */
-  void set backgroundPositionY(var value) {
+  void set backgroundPositionY(String value) {
     setProperty('background-position-y', value, '');
   }
 
@@ -1682,7 +1721,7 @@
     getPropertyValue('background-repeat');
 
   /** Sets the value of "background-repeat" */
-  void set backgroundRepeat(var value) {
+  void set backgroundRepeat(String value) {
     setProperty('background-repeat', value, '');
   }
 
@@ -1691,7 +1730,7 @@
     getPropertyValue('background-repeat-x');
 
   /** Sets the value of "background-repeat-x" */
-  void set backgroundRepeatX(var value) {
+  void set backgroundRepeatX(String value) {
     setProperty('background-repeat-x', value, '');
   }
 
@@ -1700,7 +1739,7 @@
     getPropertyValue('background-repeat-y');
 
   /** Sets the value of "background-repeat-y" */
-  void set backgroundRepeatY(var value) {
+  void set backgroundRepeatY(String value) {
     setProperty('background-repeat-y', value, '');
   }
 
@@ -1709,16 +1748,25 @@
     getPropertyValue('background-size');
 
   /** Sets the value of "background-size" */
-  void set backgroundSize(var value) {
+  void set backgroundSize(String value) {
     setProperty('background-size', value, '');
   }
 
+  /** Gets the value of "blend-mode" */
+  String get blendMode =>
+    getPropertyValue('${_browserPrefix}blend-mode');
+
+  /** Sets the value of "blend-mode" */
+  void set blendMode(String value) {
+    setProperty('${_browserPrefix}blend-mode', value, '');
+  }
+
   /** Gets the value of "border" */
   String get border =>
     getPropertyValue('border');
 
   /** Sets the value of "border" */
-  void set border(var value) {
+  void set border(String value) {
     setProperty('border', value, '');
   }
 
@@ -1727,7 +1775,7 @@
     getPropertyValue('${_browserPrefix}border-after');
 
   /** Sets the value of "border-after" */
-  void set borderAfter(var value) {
+  void set borderAfter(String value) {
     setProperty('${_browserPrefix}border-after', value, '');
   }
 
@@ -1736,7 +1784,7 @@
     getPropertyValue('${_browserPrefix}border-after-color');
 
   /** Sets the value of "border-after-color" */
-  void set borderAfterColor(var value) {
+  void set borderAfterColor(String value) {
     setProperty('${_browserPrefix}border-after-color', value, '');
   }
 
@@ -1745,7 +1793,7 @@
     getPropertyValue('${_browserPrefix}border-after-style');
 
   /** Sets the value of "border-after-style" */
-  void set borderAfterStyle(var value) {
+  void set borderAfterStyle(String value) {
     setProperty('${_browserPrefix}border-after-style', value, '');
   }
 
@@ -1754,7 +1802,7 @@
     getPropertyValue('${_browserPrefix}border-after-width');
 
   /** Sets the value of "border-after-width" */
-  void set borderAfterWidth(var value) {
+  void set borderAfterWidth(String value) {
     setProperty('${_browserPrefix}border-after-width', value, '');
   }
 
@@ -1763,7 +1811,7 @@
     getPropertyValue('${_browserPrefix}border-before');
 
   /** Sets the value of "border-before" */
-  void set borderBefore(var value) {
+  void set borderBefore(String value) {
     setProperty('${_browserPrefix}border-before', value, '');
   }
 
@@ -1772,7 +1820,7 @@
     getPropertyValue('${_browserPrefix}border-before-color');
 
   /** Sets the value of "border-before-color" */
-  void set borderBeforeColor(var value) {
+  void set borderBeforeColor(String value) {
     setProperty('${_browserPrefix}border-before-color', value, '');
   }
 
@@ -1781,7 +1829,7 @@
     getPropertyValue('${_browserPrefix}border-before-style');
 
   /** Sets the value of "border-before-style" */
-  void set borderBeforeStyle(var value) {
+  void set borderBeforeStyle(String value) {
     setProperty('${_browserPrefix}border-before-style', value, '');
   }
 
@@ -1790,7 +1838,7 @@
     getPropertyValue('${_browserPrefix}border-before-width');
 
   /** Sets the value of "border-before-width" */
-  void set borderBeforeWidth(var value) {
+  void set borderBeforeWidth(String value) {
     setProperty('${_browserPrefix}border-before-width', value, '');
   }
 
@@ -1799,7 +1847,7 @@
     getPropertyValue('border-bottom');
 
   /** Sets the value of "border-bottom" */
-  void set borderBottom(var value) {
+  void set borderBottom(String value) {
     setProperty('border-bottom', value, '');
   }
 
@@ -1808,7 +1856,7 @@
     getPropertyValue('border-bottom-color');
 
   /** Sets the value of "border-bottom-color" */
-  void set borderBottomColor(var value) {
+  void set borderBottomColor(String value) {
     setProperty('border-bottom-color', value, '');
   }
 
@@ -1817,7 +1865,7 @@
     getPropertyValue('border-bottom-left-radius');
 
   /** Sets the value of "border-bottom-left-radius" */
-  void set borderBottomLeftRadius(var value) {
+  void set borderBottomLeftRadius(String value) {
     setProperty('border-bottom-left-radius', value, '');
   }
 
@@ -1826,7 +1874,7 @@
     getPropertyValue('border-bottom-right-radius');
 
   /** Sets the value of "border-bottom-right-radius" */
-  void set borderBottomRightRadius(var value) {
+  void set borderBottomRightRadius(String value) {
     setProperty('border-bottom-right-radius', value, '');
   }
 
@@ -1835,7 +1883,7 @@
     getPropertyValue('border-bottom-style');
 
   /** Sets the value of "border-bottom-style" */
-  void set borderBottomStyle(var value) {
+  void set borderBottomStyle(String value) {
     setProperty('border-bottom-style', value, '');
   }
 
@@ -1844,7 +1892,7 @@
     getPropertyValue('border-bottom-width');
 
   /** Sets the value of "border-bottom-width" */
-  void set borderBottomWidth(var value) {
+  void set borderBottomWidth(String value) {
     setProperty('border-bottom-width', value, '');
   }
 
@@ -1853,7 +1901,7 @@
     getPropertyValue('border-collapse');
 
   /** Sets the value of "border-collapse" */
-  void set borderCollapse(var value) {
+  void set borderCollapse(String value) {
     setProperty('border-collapse', value, '');
   }
 
@@ -1862,7 +1910,7 @@
     getPropertyValue('border-color');
 
   /** Sets the value of "border-color" */
-  void set borderColor(var value) {
+  void set borderColor(String value) {
     setProperty('border-color', value, '');
   }
 
@@ -1871,7 +1919,7 @@
     getPropertyValue('${_browserPrefix}border-end');
 
   /** Sets the value of "border-end" */
-  void set borderEnd(var value) {
+  void set borderEnd(String value) {
     setProperty('${_browserPrefix}border-end', value, '');
   }
 
@@ -1880,7 +1928,7 @@
     getPropertyValue('${_browserPrefix}border-end-color');
 
   /** Sets the value of "border-end-color" */
-  void set borderEndColor(var value) {
+  void set borderEndColor(String value) {
     setProperty('${_browserPrefix}border-end-color', value, '');
   }
 
@@ -1889,7 +1937,7 @@
     getPropertyValue('${_browserPrefix}border-end-style');
 
   /** Sets the value of "border-end-style" */
-  void set borderEndStyle(var value) {
+  void set borderEndStyle(String value) {
     setProperty('${_browserPrefix}border-end-style', value, '');
   }
 
@@ -1898,7 +1946,7 @@
     getPropertyValue('${_browserPrefix}border-end-width');
 
   /** Sets the value of "border-end-width" */
-  void set borderEndWidth(var value) {
+  void set borderEndWidth(String value) {
     setProperty('${_browserPrefix}border-end-width', value, '');
   }
 
@@ -1907,7 +1955,7 @@
     getPropertyValue('${_browserPrefix}border-fit');
 
   /** Sets the value of "border-fit" */
-  void set borderFit(var value) {
+  void set borderFit(String value) {
     setProperty('${_browserPrefix}border-fit', value, '');
   }
 
@@ -1916,7 +1964,7 @@
     getPropertyValue('${_browserPrefix}border-horizontal-spacing');
 
   /** Sets the value of "border-horizontal-spacing" */
-  void set borderHorizontalSpacing(var value) {
+  void set borderHorizontalSpacing(String value) {
     setProperty('${_browserPrefix}border-horizontal-spacing', value, '');
   }
 
@@ -1925,7 +1973,7 @@
     getPropertyValue('border-image');
 
   /** Sets the value of "border-image" */
-  void set borderImage(var value) {
+  void set borderImage(String value) {
     setProperty('border-image', value, '');
   }
 
@@ -1934,7 +1982,7 @@
     getPropertyValue('border-image-outset');
 
   /** Sets the value of "border-image-outset" */
-  void set borderImageOutset(var value) {
+  void set borderImageOutset(String value) {
     setProperty('border-image-outset', value, '');
   }
 
@@ -1943,7 +1991,7 @@
     getPropertyValue('border-image-repeat');
 
   /** Sets the value of "border-image-repeat" */
-  void set borderImageRepeat(var value) {
+  void set borderImageRepeat(String value) {
     setProperty('border-image-repeat', value, '');
   }
 
@@ -1952,7 +2000,7 @@
     getPropertyValue('border-image-slice');
 
   /** Sets the value of "border-image-slice" */
-  void set borderImageSlice(var value) {
+  void set borderImageSlice(String value) {
     setProperty('border-image-slice', value, '');
   }
 
@@ -1961,7 +2009,7 @@
     getPropertyValue('border-image-source');
 
   /** Sets the value of "border-image-source" */
-  void set borderImageSource(var value) {
+  void set borderImageSource(String value) {
     setProperty('border-image-source', value, '');
   }
 
@@ -1970,7 +2018,7 @@
     getPropertyValue('border-image-width');
 
   /** Sets the value of "border-image-width" */
-  void set borderImageWidth(var value) {
+  void set borderImageWidth(String value) {
     setProperty('border-image-width', value, '');
   }
 
@@ -1979,7 +2027,7 @@
     getPropertyValue('border-left');
 
   /** Sets the value of "border-left" */
-  void set borderLeft(var value) {
+  void set borderLeft(String value) {
     setProperty('border-left', value, '');
   }
 
@@ -1988,7 +2036,7 @@
     getPropertyValue('border-left-color');
 
   /** Sets the value of "border-left-color" */
-  void set borderLeftColor(var value) {
+  void set borderLeftColor(String value) {
     setProperty('border-left-color', value, '');
   }
 
@@ -1997,7 +2045,7 @@
     getPropertyValue('border-left-style');
 
   /** Sets the value of "border-left-style" */
-  void set borderLeftStyle(var value) {
+  void set borderLeftStyle(String value) {
     setProperty('border-left-style', value, '');
   }
 
@@ -2006,7 +2054,7 @@
     getPropertyValue('border-left-width');
 
   /** Sets the value of "border-left-width" */
-  void set borderLeftWidth(var value) {
+  void set borderLeftWidth(String value) {
     setProperty('border-left-width', value, '');
   }
 
@@ -2015,7 +2063,7 @@
     getPropertyValue('border-radius');
 
   /** Sets the value of "border-radius" */
-  void set borderRadius(var value) {
+  void set borderRadius(String value) {
     setProperty('border-radius', value, '');
   }
 
@@ -2024,7 +2072,7 @@
     getPropertyValue('border-right');
 
   /** Sets the value of "border-right" */
-  void set borderRight(var value) {
+  void set borderRight(String value) {
     setProperty('border-right', value, '');
   }
 
@@ -2033,7 +2081,7 @@
     getPropertyValue('border-right-color');
 
   /** Sets the value of "border-right-color" */
-  void set borderRightColor(var value) {
+  void set borderRightColor(String value) {
     setProperty('border-right-color', value, '');
   }
 
@@ -2042,7 +2090,7 @@
     getPropertyValue('border-right-style');
 
   /** Sets the value of "border-right-style" */
-  void set borderRightStyle(var value) {
+  void set borderRightStyle(String value) {
     setProperty('border-right-style', value, '');
   }
 
@@ -2051,7 +2099,7 @@
     getPropertyValue('border-right-width');
 
   /** Sets the value of "border-right-width" */
-  void set borderRightWidth(var value) {
+  void set borderRightWidth(String value) {
     setProperty('border-right-width', value, '');
   }
 
@@ -2060,7 +2108,7 @@
     getPropertyValue('border-spacing');
 
   /** Sets the value of "border-spacing" */
-  void set borderSpacing(var value) {
+  void set borderSpacing(String value) {
     setProperty('border-spacing', value, '');
   }
 
@@ -2069,7 +2117,7 @@
     getPropertyValue('${_browserPrefix}border-start');
 
   /** Sets the value of "border-start" */
-  void set borderStart(var value) {
+  void set borderStart(String value) {
     setProperty('${_browserPrefix}border-start', value, '');
   }
 
@@ -2078,7 +2126,7 @@
     getPropertyValue('${_browserPrefix}border-start-color');
 
   /** Sets the value of "border-start-color" */
-  void set borderStartColor(var value) {
+  void set borderStartColor(String value) {
     setProperty('${_browserPrefix}border-start-color', value, '');
   }
 
@@ -2087,7 +2135,7 @@
     getPropertyValue('${_browserPrefix}border-start-style');
 
   /** Sets the value of "border-start-style" */
-  void set borderStartStyle(var value) {
+  void set borderStartStyle(String value) {
     setProperty('${_browserPrefix}border-start-style', value, '');
   }
 
@@ -2096,7 +2144,7 @@
     getPropertyValue('${_browserPrefix}border-start-width');
 
   /** Sets the value of "border-start-width" */
-  void set borderStartWidth(var value) {
+  void set borderStartWidth(String value) {
     setProperty('${_browserPrefix}border-start-width', value, '');
   }
 
@@ -2105,7 +2153,7 @@
     getPropertyValue('border-style');
 
   /** Sets the value of "border-style" */
-  void set borderStyle(var value) {
+  void set borderStyle(String value) {
     setProperty('border-style', value, '');
   }
 
@@ -2114,7 +2162,7 @@
     getPropertyValue('border-top');
 
   /** Sets the value of "border-top" */
-  void set borderTop(var value) {
+  void set borderTop(String value) {
     setProperty('border-top', value, '');
   }
 
@@ -2123,7 +2171,7 @@
     getPropertyValue('border-top-color');
 
   /** Sets the value of "border-top-color" */
-  void set borderTopColor(var value) {
+  void set borderTopColor(String value) {
     setProperty('border-top-color', value, '');
   }
 
@@ -2132,7 +2180,7 @@
     getPropertyValue('border-top-left-radius');
 
   /** Sets the value of "border-top-left-radius" */
-  void set borderTopLeftRadius(var value) {
+  void set borderTopLeftRadius(String value) {
     setProperty('border-top-left-radius', value, '');
   }
 
@@ -2141,7 +2189,7 @@
     getPropertyValue('border-top-right-radius');
 
   /** Sets the value of "border-top-right-radius" */
-  void set borderTopRightRadius(var value) {
+  void set borderTopRightRadius(String value) {
     setProperty('border-top-right-radius', value, '');
   }
 
@@ -2150,7 +2198,7 @@
     getPropertyValue('border-top-style');
 
   /** Sets the value of "border-top-style" */
-  void set borderTopStyle(var value) {
+  void set borderTopStyle(String value) {
     setProperty('border-top-style', value, '');
   }
 
@@ -2159,7 +2207,7 @@
     getPropertyValue('border-top-width');
 
   /** Sets the value of "border-top-width" */
-  void set borderTopWidth(var value) {
+  void set borderTopWidth(String value) {
     setProperty('border-top-width', value, '');
   }
 
@@ -2168,7 +2216,7 @@
     getPropertyValue('${_browserPrefix}border-vertical-spacing');
 
   /** Sets the value of "border-vertical-spacing" */
-  void set borderVerticalSpacing(var value) {
+  void set borderVerticalSpacing(String value) {
     setProperty('${_browserPrefix}border-vertical-spacing', value, '');
   }
 
@@ -2177,7 +2225,7 @@
     getPropertyValue('border-width');
 
   /** Sets the value of "border-width" */
-  void set borderWidth(var value) {
+  void set borderWidth(String value) {
     setProperty('border-width', value, '');
   }
 
@@ -2186,7 +2234,7 @@
     getPropertyValue('bottom');
 
   /** Sets the value of "bottom" */
-  void set bottom(var value) {
+  void set bottom(String value) {
     setProperty('bottom', value, '');
   }
 
@@ -2195,16 +2243,25 @@
     getPropertyValue('${_browserPrefix}box-align');
 
   /** Sets the value of "box-align" */
-  void set boxAlign(var value) {
+  void set boxAlign(String value) {
     setProperty('${_browserPrefix}box-align', value, '');
   }
 
+  /** Gets the value of "box-decoration-break" */
+  String get boxDecorationBreak =>
+    getPropertyValue('${_browserPrefix}box-decoration-break');
+
+  /** Sets the value of "box-decoration-break" */
+  void set boxDecorationBreak(String value) {
+    setProperty('${_browserPrefix}box-decoration-break', value, '');
+  }
+
   /** Gets the value of "box-direction" */
   String get boxDirection =>
     getPropertyValue('${_browserPrefix}box-direction');
 
   /** Sets the value of "box-direction" */
-  void set boxDirection(var value) {
+  void set boxDirection(String value) {
     setProperty('${_browserPrefix}box-direction', value, '');
   }
 
@@ -2213,7 +2270,7 @@
     getPropertyValue('${_browserPrefix}box-flex');
 
   /** Sets the value of "box-flex" */
-  void set boxFlex(var value) {
+  void set boxFlex(String value) {
     setProperty('${_browserPrefix}box-flex', value, '');
   }
 
@@ -2222,7 +2279,7 @@
     getPropertyValue('${_browserPrefix}box-flex-group');
 
   /** Sets the value of "box-flex-group" */
-  void set boxFlexGroup(var value) {
+  void set boxFlexGroup(String value) {
     setProperty('${_browserPrefix}box-flex-group', value, '');
   }
 
@@ -2231,7 +2288,7 @@
     getPropertyValue('${_browserPrefix}box-lines');
 
   /** Sets the value of "box-lines" */
-  void set boxLines(var value) {
+  void set boxLines(String value) {
     setProperty('${_browserPrefix}box-lines', value, '');
   }
 
@@ -2240,7 +2297,7 @@
     getPropertyValue('${_browserPrefix}box-ordinal-group');
 
   /** Sets the value of "box-ordinal-group" */
-  void set boxOrdinalGroup(var value) {
+  void set boxOrdinalGroup(String value) {
     setProperty('${_browserPrefix}box-ordinal-group', value, '');
   }
 
@@ -2249,7 +2306,7 @@
     getPropertyValue('${_browserPrefix}box-orient');
 
   /** Sets the value of "box-orient" */
-  void set boxOrient(var value) {
+  void set boxOrient(String value) {
     setProperty('${_browserPrefix}box-orient', value, '');
   }
 
@@ -2258,7 +2315,7 @@
     getPropertyValue('${_browserPrefix}box-pack');
 
   /** Sets the value of "box-pack" */
-  void set boxPack(var value) {
+  void set boxPack(String value) {
     setProperty('${_browserPrefix}box-pack', value, '');
   }
 
@@ -2267,7 +2324,7 @@
     getPropertyValue('${_browserPrefix}box-reflect');
 
   /** Sets the value of "box-reflect" */
-  void set boxReflect(var value) {
+  void set boxReflect(String value) {
     setProperty('${_browserPrefix}box-reflect', value, '');
   }
 
@@ -2276,7 +2333,7 @@
     getPropertyValue('box-shadow');
 
   /** Sets the value of "box-shadow" */
-  void set boxShadow(var value) {
+  void set boxShadow(String value) {
     setProperty('box-shadow', value, '');
   }
 
@@ -2285,7 +2342,7 @@
     getPropertyValue('box-sizing');
 
   /** Sets the value of "box-sizing" */
-  void set boxSizing(var value) {
+  void set boxSizing(String value) {
     setProperty('box-sizing', value, '');
   }
 
@@ -2294,7 +2351,7 @@
     getPropertyValue('caption-side');
 
   /** Sets the value of "caption-side" */
-  void set captionSide(var value) {
+  void set captionSide(String value) {
     setProperty('caption-side', value, '');
   }
 
@@ -2303,7 +2360,7 @@
     getPropertyValue('clear');
 
   /** Sets the value of "clear" */
-  void set clear(var value) {
+  void set clear(String value) {
     setProperty('clear', value, '');
   }
 
@@ -2312,16 +2369,25 @@
     getPropertyValue('clip');
 
   /** Sets the value of "clip" */
-  void set clip(var value) {
+  void set clip(String value) {
     setProperty('clip', value, '');
   }
 
+  /** Gets the value of "clip-path" */
+  String get clipPath =>
+    getPropertyValue('${_browserPrefix}clip-path');
+
+  /** Sets the value of "clip-path" */
+  void set clipPath(String value) {
+    setProperty('${_browserPrefix}clip-path', value, '');
+  }
+
   /** Gets the value of "color" */
   String get color =>
     getPropertyValue('color');
 
   /** Sets the value of "color" */
-  void set color(var value) {
+  void set color(String value) {
     setProperty('color', value, '');
   }
 
@@ -2330,16 +2396,25 @@
     getPropertyValue('${_browserPrefix}color-correction');
 
   /** Sets the value of "color-correction" */
-  void set colorCorrection(var value) {
+  void set colorCorrection(String value) {
     setProperty('${_browserPrefix}color-correction', value, '');
   }
 
+  /** Gets the value of "column-axis" */
+  String get columnAxis =>
+    getPropertyValue('${_browserPrefix}column-axis');
+
+  /** Sets the value of "column-axis" */
+  void set columnAxis(String value) {
+    setProperty('${_browserPrefix}column-axis', value, '');
+  }
+
   /** Gets the value of "column-break-after" */
   String get columnBreakAfter =>
     getPropertyValue('${_browserPrefix}column-break-after');
 
   /** Sets the value of "column-break-after" */
-  void set columnBreakAfter(var value) {
+  void set columnBreakAfter(String value) {
     setProperty('${_browserPrefix}column-break-after', value, '');
   }
 
@@ -2348,7 +2423,7 @@
     getPropertyValue('${_browserPrefix}column-break-before');
 
   /** Sets the value of "column-break-before" */
-  void set columnBreakBefore(var value) {
+  void set columnBreakBefore(String value) {
     setProperty('${_browserPrefix}column-break-before', value, '');
   }
 
@@ -2357,7 +2432,7 @@
     getPropertyValue('${_browserPrefix}column-break-inside');
 
   /** Sets the value of "column-break-inside" */
-  void set columnBreakInside(var value) {
+  void set columnBreakInside(String value) {
     setProperty('${_browserPrefix}column-break-inside', value, '');
   }
 
@@ -2366,7 +2441,7 @@
     getPropertyValue('${_browserPrefix}column-count');
 
   /** Sets the value of "column-count" */
-  void set columnCount(var value) {
+  void set columnCount(String value) {
     setProperty('${_browserPrefix}column-count', value, '');
   }
 
@@ -2375,16 +2450,25 @@
     getPropertyValue('${_browserPrefix}column-gap');
 
   /** Sets the value of "column-gap" */
-  void set columnGap(var value) {
+  void set columnGap(String value) {
     setProperty('${_browserPrefix}column-gap', value, '');
   }
 
+  /** Gets the value of "column-progression" */
+  String get columnProgression =>
+    getPropertyValue('${_browserPrefix}column-progression');
+
+  /** Sets the value of "column-progression" */
+  void set columnProgression(String value) {
+    setProperty('${_browserPrefix}column-progression', value, '');
+  }
+
   /** Gets the value of "column-rule" */
   String get columnRule =>
     getPropertyValue('${_browserPrefix}column-rule');
 
   /** Sets the value of "column-rule" */
-  void set columnRule(var value) {
+  void set columnRule(String value) {
     setProperty('${_browserPrefix}column-rule', value, '');
   }
 
@@ -2393,7 +2477,7 @@
     getPropertyValue('${_browserPrefix}column-rule-color');
 
   /** Sets the value of "column-rule-color" */
-  void set columnRuleColor(var value) {
+  void set columnRuleColor(String value) {
     setProperty('${_browserPrefix}column-rule-color', value, '');
   }
 
@@ -2402,7 +2486,7 @@
     getPropertyValue('${_browserPrefix}column-rule-style');
 
   /** Sets the value of "column-rule-style" */
-  void set columnRuleStyle(var value) {
+  void set columnRuleStyle(String value) {
     setProperty('${_browserPrefix}column-rule-style', value, '');
   }
 
@@ -2411,7 +2495,7 @@
     getPropertyValue('${_browserPrefix}column-rule-width');
 
   /** Sets the value of "column-rule-width" */
-  void set columnRuleWidth(var value) {
+  void set columnRuleWidth(String value) {
     setProperty('${_browserPrefix}column-rule-width', value, '');
   }
 
@@ -2420,7 +2504,7 @@
     getPropertyValue('${_browserPrefix}column-span');
 
   /** Sets the value of "column-span" */
-  void set columnSpan(var value) {
+  void set columnSpan(String value) {
     setProperty('${_browserPrefix}column-span', value, '');
   }
 
@@ -2429,7 +2513,7 @@
     getPropertyValue('${_browserPrefix}column-width');
 
   /** Sets the value of "column-width" */
-  void set columnWidth(var value) {
+  void set columnWidth(String value) {
     setProperty('${_browserPrefix}column-width', value, '');
   }
 
@@ -2438,7 +2522,7 @@
     getPropertyValue('${_browserPrefix}columns');
 
   /** Sets the value of "columns" */
-  void set columns(var value) {
+  void set columns(String value) {
     setProperty('${_browserPrefix}columns', value, '');
   }
 
@@ -2447,7 +2531,7 @@
     getPropertyValue('content');
 
   /** Sets the value of "content" */
-  void set content(var value) {
+  void set content(String value) {
     setProperty('content', value, '');
   }
 
@@ -2456,7 +2540,7 @@
     getPropertyValue('counter-increment');
 
   /** Sets the value of "counter-increment" */
-  void set counterIncrement(var value) {
+  void set counterIncrement(String value) {
     setProperty('counter-increment', value, '');
   }
 
@@ -2465,7 +2549,7 @@
     getPropertyValue('counter-reset');
 
   /** Sets the value of "counter-reset" */
-  void set counterReset(var value) {
+  void set counterReset(String value) {
     setProperty('counter-reset', value, '');
   }
 
@@ -2474,16 +2558,25 @@
     getPropertyValue('cursor');
 
   /** Sets the value of "cursor" */
-  void set cursor(var value) {
+  void set cursor(String value) {
     setProperty('cursor', value, '');
   }
 
+  /** Gets the value of "dashboard-region" */
+  String get dashboardRegion =>
+    getPropertyValue('${_browserPrefix}dashboard-region');
+
+  /** Sets the value of "dashboard-region" */
+  void set dashboardRegion(String value) {
+    setProperty('${_browserPrefix}dashboard-region', value, '');
+  }
+
   /** Gets the value of "direction" */
   String get direction =>
     getPropertyValue('direction');
 
   /** Sets the value of "direction" */
-  void set direction(var value) {
+  void set direction(String value) {
     setProperty('direction', value, '');
   }
 
@@ -2492,7 +2585,7 @@
     getPropertyValue('display');
 
   /** Sets the value of "display" */
-  void set display(var value) {
+  void set display(String value) {
     setProperty('display', value, '');
   }
 
@@ -2501,7 +2594,7 @@
     getPropertyValue('empty-cells');
 
   /** Sets the value of "empty-cells" */
-  void set emptyCells(var value) {
+  void set emptyCells(String value) {
     setProperty('empty-cells', value, '');
   }
 
@@ -2510,17 +2603,35 @@
     getPropertyValue('${_browserPrefix}filter');
 
   /** Sets the value of "filter" */
-  void set filter(var value) {
+  void set filter(String value) {
     setProperty('${_browserPrefix}filter', value, '');
   }
 
-  /** Gets the value of "flex-align" */
-  String get flexAlign =>
-    getPropertyValue('${_browserPrefix}flex-align');
+  /** Gets the value of "flex" */
+  String get flex =>
+    getPropertyValue('${_browserPrefix}flex');
 
-  /** Sets the value of "flex-align" */
-  void set flexAlign(var value) {
-    setProperty('${_browserPrefix}flex-align', value, '');
+  /** Sets the value of "flex" */
+  void set flex(String value) {
+    setProperty('${_browserPrefix}flex', value, '');
+  }
+
+  /** Gets the value of "flex-basis" */
+  String get flexBasis =>
+    getPropertyValue('${_browserPrefix}flex-basis');
+
+  /** Sets the value of "flex-basis" */
+  void set flexBasis(String value) {
+    setProperty('${_browserPrefix}flex-basis', value, '');
+  }
+
+  /** Gets the value of "flex-direction" */
+  String get flexDirection =>
+    getPropertyValue('${_browserPrefix}flex-direction');
+
+  /** Sets the value of "flex-direction" */
+  void set flexDirection(String value) {
+    setProperty('${_browserPrefix}flex-direction', value, '');
   }
 
   /** Gets the value of "flex-flow" */
@@ -2528,26 +2639,35 @@
     getPropertyValue('${_browserPrefix}flex-flow');
 
   /** Sets the value of "flex-flow" */
-  void set flexFlow(var value) {
+  void set flexFlow(String value) {
     setProperty('${_browserPrefix}flex-flow', value, '');
   }
 
-  /** Gets the value of "flex-order" */
-  String get flexOrder =>
-    getPropertyValue('${_browserPrefix}flex-order');
+  /** Gets the value of "flex-grow" */
+  String get flexGrow =>
+    getPropertyValue('${_browserPrefix}flex-grow');
 
-  /** Sets the value of "flex-order" */
-  void set flexOrder(var value) {
-    setProperty('${_browserPrefix}flex-order', value, '');
+  /** Sets the value of "flex-grow" */
+  void set flexGrow(String value) {
+    setProperty('${_browserPrefix}flex-grow', value, '');
   }
 
-  /** Gets the value of "flex-pack" */
-  String get flexPack =>
-    getPropertyValue('${_browserPrefix}flex-pack');
+  /** Gets the value of "flex-shrink" */
+  String get flexShrink =>
+    getPropertyValue('${_browserPrefix}flex-shrink');
 
-  /** Sets the value of "flex-pack" */
-  void set flexPack(var value) {
-    setProperty('${_browserPrefix}flex-pack', value, '');
+  /** Sets the value of "flex-shrink" */
+  void set flexShrink(String value) {
+    setProperty('${_browserPrefix}flex-shrink', value, '');
+  }
+
+  /** Gets the value of "flex-wrap" */
+  String get flexWrap =>
+    getPropertyValue('${_browserPrefix}flex-wrap');
+
+  /** Sets the value of "flex-wrap" */
+  void set flexWrap(String value) {
+    setProperty('${_browserPrefix}flex-wrap', value, '');
   }
 
   /** Gets the value of "float" */
@@ -2555,7 +2675,7 @@
     getPropertyValue('float');
 
   /** Sets the value of "float" */
-  void set float(var value) {
+  void set float(String value) {
     setProperty('float', value, '');
   }
 
@@ -2564,7 +2684,7 @@
     getPropertyValue('${_browserPrefix}flow-from');
 
   /** Sets the value of "flow-from" */
-  void set flowFrom(var value) {
+  void set flowFrom(String value) {
     setProperty('${_browserPrefix}flow-from', value, '');
   }
 
@@ -2573,7 +2693,7 @@
     getPropertyValue('${_browserPrefix}flow-into');
 
   /** Sets the value of "flow-into" */
-  void set flowInto(var value) {
+  void set flowInto(String value) {
     setProperty('${_browserPrefix}flow-into', value, '');
   }
 
@@ -2582,7 +2702,7 @@
     getPropertyValue('font');
 
   /** Sets the value of "font" */
-  void set font(var value) {
+  void set font(String value) {
     setProperty('font', value, '');
   }
 
@@ -2591,7 +2711,7 @@
     getPropertyValue('font-family');
 
   /** Sets the value of "font-family" */
-  void set fontFamily(var value) {
+  void set fontFamily(String value) {
     setProperty('font-family', value, '');
   }
 
@@ -2600,16 +2720,25 @@
     getPropertyValue('${_browserPrefix}font-feature-settings');
 
   /** Sets the value of "font-feature-settings" */
-  void set fontFeatureSettings(var value) {
+  void set fontFeatureSettings(String value) {
     setProperty('${_browserPrefix}font-feature-settings', value, '');
   }
 
+  /** Gets the value of "font-kerning" */
+  String get fontKerning =>
+    getPropertyValue('${_browserPrefix}font-kerning');
+
+  /** Sets the value of "font-kerning" */
+  void set fontKerning(String value) {
+    setProperty('${_browserPrefix}font-kerning', value, '');
+  }
+
   /** Gets the value of "font-size" */
   String get fontSize =>
     getPropertyValue('font-size');
 
   /** Sets the value of "font-size" */
-  void set fontSize(var value) {
+  void set fontSize(String value) {
     setProperty('font-size', value, '');
   }
 
@@ -2618,7 +2747,7 @@
     getPropertyValue('${_browserPrefix}font-size-delta');
 
   /** Sets the value of "font-size-delta" */
-  void set fontSizeDelta(var value) {
+  void set fontSizeDelta(String value) {
     setProperty('${_browserPrefix}font-size-delta', value, '');
   }
 
@@ -2627,7 +2756,7 @@
     getPropertyValue('${_browserPrefix}font-smoothing');
 
   /** Sets the value of "font-smoothing" */
-  void set fontSmoothing(var value) {
+  void set fontSmoothing(String value) {
     setProperty('${_browserPrefix}font-smoothing', value, '');
   }
 
@@ -2636,7 +2765,7 @@
     getPropertyValue('font-stretch');
 
   /** Sets the value of "font-stretch" */
-  void set fontStretch(var value) {
+  void set fontStretch(String value) {
     setProperty('font-stretch', value, '');
   }
 
@@ -2645,7 +2774,7 @@
     getPropertyValue('font-style');
 
   /** Sets the value of "font-style" */
-  void set fontStyle(var value) {
+  void set fontStyle(String value) {
     setProperty('font-style', value, '');
   }
 
@@ -2654,25 +2783,70 @@
     getPropertyValue('font-variant');
 
   /** Sets the value of "font-variant" */
-  void set fontVariant(var value) {
+  void set fontVariant(String value) {
     setProperty('font-variant', value, '');
   }
 
+  /** Gets the value of "font-variant-ligatures" */
+  String get fontVariantLigatures =>
+    getPropertyValue('${_browserPrefix}font-variant-ligatures');
+
+  /** Sets the value of "font-variant-ligatures" */
+  void set fontVariantLigatures(String value) {
+    setProperty('${_browserPrefix}font-variant-ligatures', value, '');
+  }
+
   /** Gets the value of "font-weight" */
   String get fontWeight =>
     getPropertyValue('font-weight');
 
   /** Sets the value of "font-weight" */
-  void set fontWeight(var value) {
+  void set fontWeight(String value) {
     setProperty('font-weight', value, '');
   }
 
+  /** Gets the value of "grid-column" */
+  String get gridColumn =>
+    getPropertyValue('${_browserPrefix}grid-column');
+
+  /** Sets the value of "grid-column" */
+  void set gridColumn(String value) {
+    setProperty('${_browserPrefix}grid-column', value, '');
+  }
+
+  /** Gets the value of "grid-columns" */
+  String get gridColumns =>
+    getPropertyValue('${_browserPrefix}grid-columns');
+
+  /** Sets the value of "grid-columns" */
+  void set gridColumns(String value) {
+    setProperty('${_browserPrefix}grid-columns', value, '');
+  }
+
+  /** Gets the value of "grid-row" */
+  String get gridRow =>
+    getPropertyValue('${_browserPrefix}grid-row');
+
+  /** Sets the value of "grid-row" */
+  void set gridRow(String value) {
+    setProperty('${_browserPrefix}grid-row', value, '');
+  }
+
+  /** Gets the value of "grid-rows" */
+  String get gridRows =>
+    getPropertyValue('${_browserPrefix}grid-rows');
+
+  /** Sets the value of "grid-rows" */
+  void set gridRows(String value) {
+    setProperty('${_browserPrefix}grid-rows', value, '');
+  }
+
   /** Gets the value of "height" */
   String get height =>
     getPropertyValue('height');
 
   /** Sets the value of "height" */
-  void set height(var value) {
+  void set height(String value) {
     setProperty('height', value, '');
   }
 
@@ -2681,7 +2855,7 @@
     getPropertyValue('${_browserPrefix}highlight');
 
   /** Sets the value of "highlight" */
-  void set highlight(var value) {
+  void set highlight(String value) {
     setProperty('${_browserPrefix}highlight', value, '');
   }
 
@@ -2690,7 +2864,7 @@
     getPropertyValue('${_browserPrefix}hyphenate-character');
 
   /** Sets the value of "hyphenate-character" */
-  void set hyphenateCharacter(var value) {
+  void set hyphenateCharacter(String value) {
     setProperty('${_browserPrefix}hyphenate-character', value, '');
   }
 
@@ -2699,7 +2873,7 @@
     getPropertyValue('${_browserPrefix}hyphenate-limit-after');
 
   /** Sets the value of "hyphenate-limit-after" */
-  void set hyphenateLimitAfter(var value) {
+  void set hyphenateLimitAfter(String value) {
     setProperty('${_browserPrefix}hyphenate-limit-after', value, '');
   }
 
@@ -2708,7 +2882,7 @@
     getPropertyValue('${_browserPrefix}hyphenate-limit-before');
 
   /** Sets the value of "hyphenate-limit-before" */
-  void set hyphenateLimitBefore(var value) {
+  void set hyphenateLimitBefore(String value) {
     setProperty('${_browserPrefix}hyphenate-limit-before', value, '');
   }
 
@@ -2717,7 +2891,7 @@
     getPropertyValue('${_browserPrefix}hyphenate-limit-lines');
 
   /** Sets the value of "hyphenate-limit-lines" */
-  void set hyphenateLimitLines(var value) {
+  void set hyphenateLimitLines(String value) {
     setProperty('${_browserPrefix}hyphenate-limit-lines', value, '');
   }
 
@@ -2726,25 +2900,52 @@
     getPropertyValue('${_browserPrefix}hyphens');
 
   /** Sets the value of "hyphens" */
-  void set hyphens(var value) {
+  void set hyphens(String value) {
     setProperty('${_browserPrefix}hyphens', value, '');
   }
 
+  /** Gets the value of "image-orientation" */
+  String get imageOrientation =>
+    getPropertyValue('image-orientation');
+
+  /** Sets the value of "image-orientation" */
+  void set imageOrientation(String value) {
+    setProperty('image-orientation', value, '');
+  }
+
   /** Gets the value of "image-rendering" */
   String get imageRendering =>
     getPropertyValue('image-rendering');
 
   /** Sets the value of "image-rendering" */
-  void set imageRendering(var value) {
+  void set imageRendering(String value) {
     setProperty('image-rendering', value, '');
   }
 
+  /** Gets the value of "image-resolution" */
+  String get imageResolution =>
+    getPropertyValue('image-resolution');
+
+  /** Sets the value of "image-resolution" */
+  void set imageResolution(String value) {
+    setProperty('image-resolution', value, '');
+  }
+
+  /** Gets the value of "justify-content" */
+  String get justifyContent =>
+    getPropertyValue('${_browserPrefix}justify-content');
+
+  /** Sets the value of "justify-content" */
+  void set justifyContent(String value) {
+    setProperty('${_browserPrefix}justify-content', value, '');
+  }
+
   /** Gets the value of "left" */
   String get left =>
     getPropertyValue('left');
 
   /** Sets the value of "left" */
-  void set left(var value) {
+  void set left(String value) {
     setProperty('left', value, '');
   }
 
@@ -2753,16 +2954,25 @@
     getPropertyValue('letter-spacing');
 
   /** Sets the value of "letter-spacing" */
-  void set letterSpacing(var value) {
+  void set letterSpacing(String value) {
     setProperty('letter-spacing', value, '');
   }
 
+  /** Gets the value of "line-align" */
+  String get lineAlign =>
+    getPropertyValue('${_browserPrefix}line-align');
+
+  /** Sets the value of "line-align" */
+  void set lineAlign(String value) {
+    setProperty('${_browserPrefix}line-align', value, '');
+  }
+
   /** Gets the value of "line-box-contain" */
   String get lineBoxContain =>
     getPropertyValue('${_browserPrefix}line-box-contain');
 
   /** Sets the value of "line-box-contain" */
-  void set lineBoxContain(var value) {
+  void set lineBoxContain(String value) {
     setProperty('${_browserPrefix}line-box-contain', value, '');
   }
 
@@ -2771,7 +2981,7 @@
     getPropertyValue('${_browserPrefix}line-break');
 
   /** Sets the value of "line-break" */
-  void set lineBreak(var value) {
+  void set lineBreak(String value) {
     setProperty('${_browserPrefix}line-break', value, '');
   }
 
@@ -2780,25 +2990,43 @@
     getPropertyValue('${_browserPrefix}line-clamp');
 
   /** Sets the value of "line-clamp" */
-  void set lineClamp(var value) {
+  void set lineClamp(String value) {
     setProperty('${_browserPrefix}line-clamp', value, '');
   }
 
+  /** Gets the value of "line-grid" */
+  String get lineGrid =>
+    getPropertyValue('${_browserPrefix}line-grid');
+
+  /** Sets the value of "line-grid" */
+  void set lineGrid(String value) {
+    setProperty('${_browserPrefix}line-grid', value, '');
+  }
+
   /** Gets the value of "line-height" */
   String get lineHeight =>
     getPropertyValue('line-height');
 
   /** Sets the value of "line-height" */
-  void set lineHeight(var value) {
+  void set lineHeight(String value) {
     setProperty('line-height', value, '');
   }
 
+  /** Gets the value of "line-snap" */
+  String get lineSnap =>
+    getPropertyValue('${_browserPrefix}line-snap');
+
+  /** Sets the value of "line-snap" */
+  void set lineSnap(String value) {
+    setProperty('${_browserPrefix}line-snap', value, '');
+  }
+
   /** Gets the value of "list-style" */
   String get listStyle =>
     getPropertyValue('list-style');
 
   /** Sets the value of "list-style" */
-  void set listStyle(var value) {
+  void set listStyle(String value) {
     setProperty('list-style', value, '');
   }
 
@@ -2807,7 +3035,7 @@
     getPropertyValue('list-style-image');
 
   /** Sets the value of "list-style-image" */
-  void set listStyleImage(var value) {
+  void set listStyleImage(String value) {
     setProperty('list-style-image', value, '');
   }
 
@@ -2816,7 +3044,7 @@
     getPropertyValue('list-style-position');
 
   /** Sets the value of "list-style-position" */
-  void set listStylePosition(var value) {
+  void set listStylePosition(String value) {
     setProperty('list-style-position', value, '');
   }
 
@@ -2825,7 +3053,7 @@
     getPropertyValue('list-style-type');
 
   /** Sets the value of "list-style-type" */
-  void set listStyleType(var value) {
+  void set listStyleType(String value) {
     setProperty('list-style-type', value, '');
   }
 
@@ -2834,7 +3062,7 @@
     getPropertyValue('${_browserPrefix}locale');
 
   /** Sets the value of "locale" */
-  void set locale(var value) {
+  void set locale(String value) {
     setProperty('${_browserPrefix}locale', value, '');
   }
 
@@ -2843,7 +3071,7 @@
     getPropertyValue('${_browserPrefix}logical-height');
 
   /** Sets the value of "logical-height" */
-  void set logicalHeight(var value) {
+  void set logicalHeight(String value) {
     setProperty('${_browserPrefix}logical-height', value, '');
   }
 
@@ -2852,7 +3080,7 @@
     getPropertyValue('${_browserPrefix}logical-width');
 
   /** Sets the value of "logical-width" */
-  void set logicalWidth(var value) {
+  void set logicalWidth(String value) {
     setProperty('${_browserPrefix}logical-width', value, '');
   }
 
@@ -2861,7 +3089,7 @@
     getPropertyValue('margin');
 
   /** Sets the value of "margin" */
-  void set margin(var value) {
+  void set margin(String value) {
     setProperty('margin', value, '');
   }
 
@@ -2870,7 +3098,7 @@
     getPropertyValue('${_browserPrefix}margin-after');
 
   /** Sets the value of "margin-after" */
-  void set marginAfter(var value) {
+  void set marginAfter(String value) {
     setProperty('${_browserPrefix}margin-after', value, '');
   }
 
@@ -2879,7 +3107,7 @@
     getPropertyValue('${_browserPrefix}margin-after-collapse');
 
   /** Sets the value of "margin-after-collapse" */
-  void set marginAfterCollapse(var value) {
+  void set marginAfterCollapse(String value) {
     setProperty('${_browserPrefix}margin-after-collapse', value, '');
   }
 
@@ -2888,7 +3116,7 @@
     getPropertyValue('${_browserPrefix}margin-before');
 
   /** Sets the value of "margin-before" */
-  void set marginBefore(var value) {
+  void set marginBefore(String value) {
     setProperty('${_browserPrefix}margin-before', value, '');
   }
 
@@ -2897,7 +3125,7 @@
     getPropertyValue('${_browserPrefix}margin-before-collapse');
 
   /** Sets the value of "margin-before-collapse" */
-  void set marginBeforeCollapse(var value) {
+  void set marginBeforeCollapse(String value) {
     setProperty('${_browserPrefix}margin-before-collapse', value, '');
   }
 
@@ -2906,7 +3134,7 @@
     getPropertyValue('margin-bottom');
 
   /** Sets the value of "margin-bottom" */
-  void set marginBottom(var value) {
+  void set marginBottom(String value) {
     setProperty('margin-bottom', value, '');
   }
 
@@ -2915,7 +3143,7 @@
     getPropertyValue('${_browserPrefix}margin-bottom-collapse');
 
   /** Sets the value of "margin-bottom-collapse" */
-  void set marginBottomCollapse(var value) {
+  void set marginBottomCollapse(String value) {
     setProperty('${_browserPrefix}margin-bottom-collapse', value, '');
   }
 
@@ -2924,7 +3152,7 @@
     getPropertyValue('${_browserPrefix}margin-collapse');
 
   /** Sets the value of "margin-collapse" */
-  void set marginCollapse(var value) {
+  void set marginCollapse(String value) {
     setProperty('${_browserPrefix}margin-collapse', value, '');
   }
 
@@ -2933,7 +3161,7 @@
     getPropertyValue('${_browserPrefix}margin-end');
 
   /** Sets the value of "margin-end" */
-  void set marginEnd(var value) {
+  void set marginEnd(String value) {
     setProperty('${_browserPrefix}margin-end', value, '');
   }
 
@@ -2942,7 +3170,7 @@
     getPropertyValue('margin-left');
 
   /** Sets the value of "margin-left" */
-  void set marginLeft(var value) {
+  void set marginLeft(String value) {
     setProperty('margin-left', value, '');
   }
 
@@ -2951,7 +3179,7 @@
     getPropertyValue('margin-right');
 
   /** Sets the value of "margin-right" */
-  void set marginRight(var value) {
+  void set marginRight(String value) {
     setProperty('margin-right', value, '');
   }
 
@@ -2960,7 +3188,7 @@
     getPropertyValue('${_browserPrefix}margin-start');
 
   /** Sets the value of "margin-start" */
-  void set marginStart(var value) {
+  void set marginStart(String value) {
     setProperty('${_browserPrefix}margin-start', value, '');
   }
 
@@ -2969,7 +3197,7 @@
     getPropertyValue('margin-top');
 
   /** Sets the value of "margin-top" */
-  void set marginTop(var value) {
+  void set marginTop(String value) {
     setProperty('margin-top', value, '');
   }
 
@@ -2978,7 +3206,7 @@
     getPropertyValue('${_browserPrefix}margin-top-collapse');
 
   /** Sets the value of "margin-top-collapse" */
-  void set marginTopCollapse(var value) {
+  void set marginTopCollapse(String value) {
     setProperty('${_browserPrefix}margin-top-collapse', value, '');
   }
 
@@ -2987,7 +3215,7 @@
     getPropertyValue('${_browserPrefix}marquee');
 
   /** Sets the value of "marquee" */
-  void set marquee(var value) {
+  void set marquee(String value) {
     setProperty('${_browserPrefix}marquee', value, '');
   }
 
@@ -2996,7 +3224,7 @@
     getPropertyValue('${_browserPrefix}marquee-direction');
 
   /** Sets the value of "marquee-direction" */
-  void set marqueeDirection(var value) {
+  void set marqueeDirection(String value) {
     setProperty('${_browserPrefix}marquee-direction', value, '');
   }
 
@@ -3005,7 +3233,7 @@
     getPropertyValue('${_browserPrefix}marquee-increment');
 
   /** Sets the value of "marquee-increment" */
-  void set marqueeIncrement(var value) {
+  void set marqueeIncrement(String value) {
     setProperty('${_browserPrefix}marquee-increment', value, '');
   }
 
@@ -3014,7 +3242,7 @@
     getPropertyValue('${_browserPrefix}marquee-repetition');
 
   /** Sets the value of "marquee-repetition" */
-  void set marqueeRepetition(var value) {
+  void set marqueeRepetition(String value) {
     setProperty('${_browserPrefix}marquee-repetition', value, '');
   }
 
@@ -3023,7 +3251,7 @@
     getPropertyValue('${_browserPrefix}marquee-speed');
 
   /** Sets the value of "marquee-speed" */
-  void set marqueeSpeed(var value) {
+  void set marqueeSpeed(String value) {
     setProperty('${_browserPrefix}marquee-speed', value, '');
   }
 
@@ -3032,7 +3260,7 @@
     getPropertyValue('${_browserPrefix}marquee-style');
 
   /** Sets the value of "marquee-style" */
-  void set marqueeStyle(var value) {
+  void set marqueeStyle(String value) {
     setProperty('${_browserPrefix}marquee-style', value, '');
   }
 
@@ -3041,7 +3269,7 @@
     getPropertyValue('${_browserPrefix}mask');
 
   /** Sets the value of "mask" */
-  void set mask(var value) {
+  void set mask(String value) {
     setProperty('${_browserPrefix}mask', value, '');
   }
 
@@ -3050,7 +3278,7 @@
     getPropertyValue('${_browserPrefix}mask-attachment');
 
   /** Sets the value of "mask-attachment" */
-  void set maskAttachment(var value) {
+  void set maskAttachment(String value) {
     setProperty('${_browserPrefix}mask-attachment', value, '');
   }
 
@@ -3059,7 +3287,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image');
 
   /** Sets the value of "mask-box-image" */
-  void set maskBoxImage(var value) {
+  void set maskBoxImage(String value) {
     setProperty('${_browserPrefix}mask-box-image', value, '');
   }
 
@@ -3068,7 +3296,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image-outset');
 
   /** Sets the value of "mask-box-image-outset" */
-  void set maskBoxImageOutset(var value) {
+  void set maskBoxImageOutset(String value) {
     setProperty('${_browserPrefix}mask-box-image-outset', value, '');
   }
 
@@ -3077,7 +3305,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image-repeat');
 
   /** Sets the value of "mask-box-image-repeat" */
-  void set maskBoxImageRepeat(var value) {
+  void set maskBoxImageRepeat(String value) {
     setProperty('${_browserPrefix}mask-box-image-repeat', value, '');
   }
 
@@ -3086,7 +3314,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image-slice');
 
   /** Sets the value of "mask-box-image-slice" */
-  void set maskBoxImageSlice(var value) {
+  void set maskBoxImageSlice(String value) {
     setProperty('${_browserPrefix}mask-box-image-slice', value, '');
   }
 
@@ -3095,7 +3323,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image-source');
 
   /** Sets the value of "mask-box-image-source" */
-  void set maskBoxImageSource(var value) {
+  void set maskBoxImageSource(String value) {
     setProperty('${_browserPrefix}mask-box-image-source', value, '');
   }
 
@@ -3104,7 +3332,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image-width');
 
   /** Sets the value of "mask-box-image-width" */
-  void set maskBoxImageWidth(var value) {
+  void set maskBoxImageWidth(String value) {
     setProperty('${_browserPrefix}mask-box-image-width', value, '');
   }
 
@@ -3113,7 +3341,7 @@
     getPropertyValue('${_browserPrefix}mask-clip');
 
   /** Sets the value of "mask-clip" */
-  void set maskClip(var value) {
+  void set maskClip(String value) {
     setProperty('${_browserPrefix}mask-clip', value, '');
   }
 
@@ -3122,7 +3350,7 @@
     getPropertyValue('${_browserPrefix}mask-composite');
 
   /** Sets the value of "mask-composite" */
-  void set maskComposite(var value) {
+  void set maskComposite(String value) {
     setProperty('${_browserPrefix}mask-composite', value, '');
   }
 
@@ -3131,7 +3359,7 @@
     getPropertyValue('${_browserPrefix}mask-image');
 
   /** Sets the value of "mask-image" */
-  void set maskImage(var value) {
+  void set maskImage(String value) {
     setProperty('${_browserPrefix}mask-image', value, '');
   }
 
@@ -3140,7 +3368,7 @@
     getPropertyValue('${_browserPrefix}mask-origin');
 
   /** Sets the value of "mask-origin" */
-  void set maskOrigin(var value) {
+  void set maskOrigin(String value) {
     setProperty('${_browserPrefix}mask-origin', value, '');
   }
 
@@ -3149,7 +3377,7 @@
     getPropertyValue('${_browserPrefix}mask-position');
 
   /** Sets the value of "mask-position" */
-  void set maskPosition(var value) {
+  void set maskPosition(String value) {
     setProperty('${_browserPrefix}mask-position', value, '');
   }
 
@@ -3158,7 +3386,7 @@
     getPropertyValue('${_browserPrefix}mask-position-x');
 
   /** Sets the value of "mask-position-x" */
-  void set maskPositionX(var value) {
+  void set maskPositionX(String value) {
     setProperty('${_browserPrefix}mask-position-x', value, '');
   }
 
@@ -3167,7 +3395,7 @@
     getPropertyValue('${_browserPrefix}mask-position-y');
 
   /** Sets the value of "mask-position-y" */
-  void set maskPositionY(var value) {
+  void set maskPositionY(String value) {
     setProperty('${_browserPrefix}mask-position-y', value, '');
   }
 
@@ -3176,7 +3404,7 @@
     getPropertyValue('${_browserPrefix}mask-repeat');
 
   /** Sets the value of "mask-repeat" */
-  void set maskRepeat(var value) {
+  void set maskRepeat(String value) {
     setProperty('${_browserPrefix}mask-repeat', value, '');
   }
 
@@ -3185,7 +3413,7 @@
     getPropertyValue('${_browserPrefix}mask-repeat-x');
 
   /** Sets the value of "mask-repeat-x" */
-  void set maskRepeatX(var value) {
+  void set maskRepeatX(String value) {
     setProperty('${_browserPrefix}mask-repeat-x', value, '');
   }
 
@@ -3194,7 +3422,7 @@
     getPropertyValue('${_browserPrefix}mask-repeat-y');
 
   /** Sets the value of "mask-repeat-y" */
-  void set maskRepeatY(var value) {
+  void set maskRepeatY(String value) {
     setProperty('${_browserPrefix}mask-repeat-y', value, '');
   }
 
@@ -3203,25 +3431,16 @@
     getPropertyValue('${_browserPrefix}mask-size');
 
   /** Sets the value of "mask-size" */
-  void set maskSize(var value) {
+  void set maskSize(String value) {
     setProperty('${_browserPrefix}mask-size', value, '');
   }
 
-  /** Gets the value of "match-nearest-mail-blockquote-color" */
-  String get matchNearestMailBlockquoteColor =>
-    getPropertyValue('${_browserPrefix}match-nearest-mail-blockquote-color');
-
-  /** Sets the value of "match-nearest-mail-blockquote-color" */
-  void set matchNearestMailBlockquoteColor(var value) {
-    setProperty('${_browserPrefix}match-nearest-mail-blockquote-color', value, '');
-  }
-
   /** Gets the value of "max-height" */
   String get maxHeight =>
     getPropertyValue('max-height');
 
   /** Sets the value of "max-height" */
-  void set maxHeight(var value) {
+  void set maxHeight(String value) {
     setProperty('max-height', value, '');
   }
 
@@ -3230,7 +3449,7 @@
     getPropertyValue('${_browserPrefix}max-logical-height');
 
   /** Sets the value of "max-logical-height" */
-  void set maxLogicalHeight(var value) {
+  void set maxLogicalHeight(String value) {
     setProperty('${_browserPrefix}max-logical-height', value, '');
   }
 
@@ -3239,7 +3458,7 @@
     getPropertyValue('${_browserPrefix}max-logical-width');
 
   /** Sets the value of "max-logical-width" */
-  void set maxLogicalWidth(var value) {
+  void set maxLogicalWidth(String value) {
     setProperty('${_browserPrefix}max-logical-width', value, '');
   }
 
@@ -3248,16 +3467,25 @@
     getPropertyValue('max-width');
 
   /** Sets the value of "max-width" */
-  void set maxWidth(var value) {
+  void set maxWidth(String value) {
     setProperty('max-width', value, '');
   }
 
+  /** Gets the value of "max-zoom" */
+  String get maxZoom =>
+    getPropertyValue('max-zoom');
+
+  /** Sets the value of "max-zoom" */
+  void set maxZoom(String value) {
+    setProperty('max-zoom', value, '');
+  }
+
   /** Gets the value of "min-height" */
   String get minHeight =>
     getPropertyValue('min-height');
 
   /** Sets the value of "min-height" */
-  void set minHeight(var value) {
+  void set minHeight(String value) {
     setProperty('min-height', value, '');
   }
 
@@ -3266,7 +3494,7 @@
     getPropertyValue('${_browserPrefix}min-logical-height');
 
   /** Sets the value of "min-logical-height" */
-  void set minLogicalHeight(var value) {
+  void set minLogicalHeight(String value) {
     setProperty('${_browserPrefix}min-logical-height', value, '');
   }
 
@@ -3275,7 +3503,7 @@
     getPropertyValue('${_browserPrefix}min-logical-width');
 
   /** Sets the value of "min-logical-width" */
-  void set minLogicalWidth(var value) {
+  void set minLogicalWidth(String value) {
     setProperty('${_browserPrefix}min-logical-width', value, '');
   }
 
@@ -3284,16 +3512,25 @@
     getPropertyValue('min-width');
 
   /** Sets the value of "min-width" */
-  void set minWidth(var value) {
+  void set minWidth(String value) {
     setProperty('min-width', value, '');
   }
 
+  /** Gets the value of "min-zoom" */
+  String get minZoom =>
+    getPropertyValue('min-zoom');
+
+  /** Sets the value of "min-zoom" */
+  void set minZoom(String value) {
+    setProperty('min-zoom', value, '');
+  }
+
   /** Gets the value of "nbsp-mode" */
   String get nbspMode =>
     getPropertyValue('${_browserPrefix}nbsp-mode');
 
   /** Sets the value of "nbsp-mode" */
-  void set nbspMode(var value) {
+  void set nbspMode(String value) {
     setProperty('${_browserPrefix}nbsp-mode', value, '');
   }
 
@@ -3302,16 +3539,34 @@
     getPropertyValue('opacity');
 
   /** Sets the value of "opacity" */
-  void set opacity(var value) {
+  void set opacity(String value) {
     setProperty('opacity', value, '');
   }
 
+  /** Gets the value of "order" */
+  String get order =>
+    getPropertyValue('${_browserPrefix}order');
+
+  /** Sets the value of "order" */
+  void set order(String value) {
+    setProperty('${_browserPrefix}order', value, '');
+  }
+
+  /** Gets the value of "orientation" */
+  String get orientation =>
+    getPropertyValue('orientation');
+
+  /** Sets the value of "orientation" */
+  void set orientation(String value) {
+    setProperty('orientation', value, '');
+  }
+
   /** Gets the value of "orphans" */
   String get orphans =>
     getPropertyValue('orphans');
 
   /** Sets the value of "orphans" */
-  void set orphans(var value) {
+  void set orphans(String value) {
     setProperty('orphans', value, '');
   }
 
@@ -3320,7 +3575,7 @@
     getPropertyValue('outline');
 
   /** Sets the value of "outline" */
-  void set outline(var value) {
+  void set outline(String value) {
     setProperty('outline', value, '');
   }
 
@@ -3329,7 +3584,7 @@
     getPropertyValue('outline-color');
 
   /** Sets the value of "outline-color" */
-  void set outlineColor(var value) {
+  void set outlineColor(String value) {
     setProperty('outline-color', value, '');
   }
 
@@ -3338,7 +3593,7 @@
     getPropertyValue('outline-offset');
 
   /** Sets the value of "outline-offset" */
-  void set outlineOffset(var value) {
+  void set outlineOffset(String value) {
     setProperty('outline-offset', value, '');
   }
 
@@ -3347,7 +3602,7 @@
     getPropertyValue('outline-style');
 
   /** Sets the value of "outline-style" */
-  void set outlineStyle(var value) {
+  void set outlineStyle(String value) {
     setProperty('outline-style', value, '');
   }
 
@@ -3356,7 +3611,7 @@
     getPropertyValue('outline-width');
 
   /** Sets the value of "outline-width" */
-  void set outlineWidth(var value) {
+  void set outlineWidth(String value) {
     setProperty('outline-width', value, '');
   }
 
@@ -3365,16 +3620,34 @@
     getPropertyValue('overflow');
 
   /** Sets the value of "overflow" */
-  void set overflow(var value) {
+  void set overflow(String value) {
     setProperty('overflow', value, '');
   }
 
+  /** Gets the value of "overflow-scrolling" */
+  String get overflowScrolling =>
+    getPropertyValue('${_browserPrefix}overflow-scrolling');
+
+  /** Sets the value of "overflow-scrolling" */
+  void set overflowScrolling(String value) {
+    setProperty('${_browserPrefix}overflow-scrolling', value, '');
+  }
+
+  /** Gets the value of "overflow-wrap" */
+  String get overflowWrap =>
+    getPropertyValue('overflow-wrap');
+
+  /** Sets the value of "overflow-wrap" */
+  void set overflowWrap(String value) {
+    setProperty('overflow-wrap', value, '');
+  }
+
   /** Gets the value of "overflow-x" */
   String get overflowX =>
     getPropertyValue('overflow-x');
 
   /** Sets the value of "overflow-x" */
-  void set overflowX(var value) {
+  void set overflowX(String value) {
     setProperty('overflow-x', value, '');
   }
 
@@ -3383,7 +3656,7 @@
     getPropertyValue('overflow-y');
 
   /** Sets the value of "overflow-y" */
-  void set overflowY(var value) {
+  void set overflowY(String value) {
     setProperty('overflow-y', value, '');
   }
 
@@ -3392,7 +3665,7 @@
     getPropertyValue('padding');
 
   /** Sets the value of "padding" */
-  void set padding(var value) {
+  void set padding(String value) {
     setProperty('padding', value, '');
   }
 
@@ -3401,7 +3674,7 @@
     getPropertyValue('${_browserPrefix}padding-after');
 
   /** Sets the value of "padding-after" */
-  void set paddingAfter(var value) {
+  void set paddingAfter(String value) {
     setProperty('${_browserPrefix}padding-after', value, '');
   }
 
@@ -3410,7 +3683,7 @@
     getPropertyValue('${_browserPrefix}padding-before');
 
   /** Sets the value of "padding-before" */
-  void set paddingBefore(var value) {
+  void set paddingBefore(String value) {
     setProperty('${_browserPrefix}padding-before', value, '');
   }
 
@@ -3419,7 +3692,7 @@
     getPropertyValue('padding-bottom');
 
   /** Sets the value of "padding-bottom" */
-  void set paddingBottom(var value) {
+  void set paddingBottom(String value) {
     setProperty('padding-bottom', value, '');
   }
 
@@ -3428,7 +3701,7 @@
     getPropertyValue('${_browserPrefix}padding-end');
 
   /** Sets the value of "padding-end" */
-  void set paddingEnd(var value) {
+  void set paddingEnd(String value) {
     setProperty('${_browserPrefix}padding-end', value, '');
   }
 
@@ -3437,7 +3710,7 @@
     getPropertyValue('padding-left');
 
   /** Sets the value of "padding-left" */
-  void set paddingLeft(var value) {
+  void set paddingLeft(String value) {
     setProperty('padding-left', value, '');
   }
 
@@ -3446,7 +3719,7 @@
     getPropertyValue('padding-right');
 
   /** Sets the value of "padding-right" */
-  void set paddingRight(var value) {
+  void set paddingRight(String value) {
     setProperty('padding-right', value, '');
   }
 
@@ -3455,7 +3728,7 @@
     getPropertyValue('${_browserPrefix}padding-start');
 
   /** Sets the value of "padding-start" */
-  void set paddingStart(var value) {
+  void set paddingStart(String value) {
     setProperty('${_browserPrefix}padding-start', value, '');
   }
 
@@ -3464,7 +3737,7 @@
     getPropertyValue('padding-top');
 
   /** Sets the value of "padding-top" */
-  void set paddingTop(var value) {
+  void set paddingTop(String value) {
     setProperty('padding-top', value, '');
   }
 
@@ -3473,7 +3746,7 @@
     getPropertyValue('page');
 
   /** Sets the value of "page" */
-  void set page(var value) {
+  void set page(String value) {
     setProperty('page', value, '');
   }
 
@@ -3482,7 +3755,7 @@
     getPropertyValue('page-break-after');
 
   /** Sets the value of "page-break-after" */
-  void set pageBreakAfter(var value) {
+  void set pageBreakAfter(String value) {
     setProperty('page-break-after', value, '');
   }
 
@@ -3491,7 +3764,7 @@
     getPropertyValue('page-break-before');
 
   /** Sets the value of "page-break-before" */
-  void set pageBreakBefore(var value) {
+  void set pageBreakBefore(String value) {
     setProperty('page-break-before', value, '');
   }
 
@@ -3500,7 +3773,7 @@
     getPropertyValue('page-break-inside');
 
   /** Sets the value of "page-break-inside" */
-  void set pageBreakInside(var value) {
+  void set pageBreakInside(String value) {
     setProperty('page-break-inside', value, '');
   }
 
@@ -3509,7 +3782,7 @@
     getPropertyValue('${_browserPrefix}perspective');
 
   /** Sets the value of "perspective" */
-  void set perspective(var value) {
+  void set perspective(String value) {
     setProperty('${_browserPrefix}perspective', value, '');
   }
 
@@ -3518,7 +3791,7 @@
     getPropertyValue('${_browserPrefix}perspective-origin');
 
   /** Sets the value of "perspective-origin" */
-  void set perspectiveOrigin(var value) {
+  void set perspectiveOrigin(String value) {
     setProperty('${_browserPrefix}perspective-origin', value, '');
   }
 
@@ -3527,7 +3800,7 @@
     getPropertyValue('${_browserPrefix}perspective-origin-x');
 
   /** Sets the value of "perspective-origin-x" */
-  void set perspectiveOriginX(var value) {
+  void set perspectiveOriginX(String value) {
     setProperty('${_browserPrefix}perspective-origin-x', value, '');
   }
 
@@ -3536,7 +3809,7 @@
     getPropertyValue('${_browserPrefix}perspective-origin-y');
 
   /** Sets the value of "perspective-origin-y" */
-  void set perspectiveOriginY(var value) {
+  void set perspectiveOriginY(String value) {
     setProperty('${_browserPrefix}perspective-origin-y', value, '');
   }
 
@@ -3545,7 +3818,7 @@
     getPropertyValue('pointer-events');
 
   /** Sets the value of "pointer-events" */
-  void set pointerEvents(var value) {
+  void set pointerEvents(String value) {
     setProperty('pointer-events', value, '');
   }
 
@@ -3554,16 +3827,25 @@
     getPropertyValue('position');
 
   /** Sets the value of "position" */
-  void set position(var value) {
+  void set position(String value) {
     setProperty('position', value, '');
   }
 
+  /** Gets the value of "print-color-adjust" */
+  String get printColorAdjust =>
+    getPropertyValue('${_browserPrefix}print-color-adjust');
+
+  /** Sets the value of "print-color-adjust" */
+  void set printColorAdjust(String value) {
+    setProperty('${_browserPrefix}print-color-adjust', value, '');
+  }
+
   /** Gets the value of "quotes" */
   String get quotes =>
     getPropertyValue('quotes');
 
   /** Sets the value of "quotes" */
-  void set quotes(var value) {
+  void set quotes(String value) {
     setProperty('quotes', value, '');
   }
 
@@ -3572,7 +3854,7 @@
     getPropertyValue('${_browserPrefix}region-break-after');
 
   /** Sets the value of "region-break-after" */
-  void set regionBreakAfter(var value) {
+  void set regionBreakAfter(String value) {
     setProperty('${_browserPrefix}region-break-after', value, '');
   }
 
@@ -3581,7 +3863,7 @@
     getPropertyValue('${_browserPrefix}region-break-before');
 
   /** Sets the value of "region-break-before" */
-  void set regionBreakBefore(var value) {
+  void set regionBreakBefore(String value) {
     setProperty('${_browserPrefix}region-break-before', value, '');
   }
 
@@ -3590,7 +3872,7 @@
     getPropertyValue('${_browserPrefix}region-break-inside');
 
   /** Sets the value of "region-break-inside" */
-  void set regionBreakInside(var value) {
+  void set regionBreakInside(String value) {
     setProperty('${_browserPrefix}region-break-inside', value, '');
   }
 
@@ -3599,7 +3881,7 @@
     getPropertyValue('${_browserPrefix}region-overflow');
 
   /** Sets the value of "region-overflow" */
-  void set regionOverflow(var value) {
+  void set regionOverflow(String value) {
     setProperty('${_browserPrefix}region-overflow', value, '');
   }
 
@@ -3608,7 +3890,7 @@
     getPropertyValue('resize');
 
   /** Sets the value of "resize" */
-  void set resize(var value) {
+  void set resize(String value) {
     setProperty('resize', value, '');
   }
 
@@ -3617,7 +3899,7 @@
     getPropertyValue('right');
 
   /** Sets the value of "right" */
-  void set right(var value) {
+  void set right(String value) {
     setProperty('right', value, '');
   }
 
@@ -3626,16 +3908,52 @@
     getPropertyValue('${_browserPrefix}rtl-ordering');
 
   /** Sets the value of "rtl-ordering" */
-  void set rtlOrdering(var value) {
+  void set rtlOrdering(String value) {
     setProperty('${_browserPrefix}rtl-ordering', value, '');
   }
 
+  /** Gets the value of "shape-inside" */
+  String get shapeInside =>
+    getPropertyValue('${_browserPrefix}shape-inside');
+
+  /** Sets the value of "shape-inside" */
+  void set shapeInside(String value) {
+    setProperty('${_browserPrefix}shape-inside', value, '');
+  }
+
+  /** Gets the value of "shape-margin" */
+  String get shapeMargin =>
+    getPropertyValue('${_browserPrefix}shape-margin');
+
+  /** Sets the value of "shape-margin" */
+  void set shapeMargin(String value) {
+    setProperty('${_browserPrefix}shape-margin', value, '');
+  }
+
+  /** Gets the value of "shape-outside" */
+  String get shapeOutside =>
+    getPropertyValue('${_browserPrefix}shape-outside');
+
+  /** Sets the value of "shape-outside" */
+  void set shapeOutside(String value) {
+    setProperty('${_browserPrefix}shape-outside', value, '');
+  }
+
+  /** Gets the value of "shape-padding" */
+  String get shapePadding =>
+    getPropertyValue('${_browserPrefix}shape-padding');
+
+  /** Sets the value of "shape-padding" */
+  void set shapePadding(String value) {
+    setProperty('${_browserPrefix}shape-padding', value, '');
+  }
+
   /** Gets the value of "size" */
   String get size =>
     getPropertyValue('size');
 
   /** Sets the value of "size" */
-  void set size(var value) {
+  void set size(String value) {
     setProperty('size', value, '');
   }
 
@@ -3644,7 +3962,7 @@
     getPropertyValue('speak');
 
   /** Sets the value of "speak" */
-  void set speak(var value) {
+  void set speak(String value) {
     setProperty('speak', value, '');
   }
 
@@ -3653,16 +3971,25 @@
     getPropertyValue('src');
 
   /** Sets the value of "src" */
-  void set src(var value) {
+  void set src(String value) {
     setProperty('src', value, '');
   }
 
+  /** Gets the value of "tab-size" */
+  String get tabSize =>
+    getPropertyValue('tab-size');
+
+  /** Sets the value of "tab-size" */
+  void set tabSize(String value) {
+    setProperty('tab-size', value, '');
+  }
+
   /** Gets the value of "table-layout" */
   String get tableLayout =>
     getPropertyValue('table-layout');
 
   /** Sets the value of "table-layout" */
-  void set tableLayout(var value) {
+  void set tableLayout(String value) {
     setProperty('table-layout', value, '');
   }
 
@@ -3671,7 +3998,7 @@
     getPropertyValue('${_browserPrefix}tap-highlight-color');
 
   /** Sets the value of "tap-highlight-color" */
-  void set tapHighlightColor(var value) {
+  void set tapHighlightColor(String value) {
     setProperty('${_browserPrefix}tap-highlight-color', value, '');
   }
 
@@ -3680,16 +4007,25 @@
     getPropertyValue('text-align');
 
   /** Sets the value of "text-align" */
-  void set textAlign(var value) {
+  void set textAlign(String value) {
     setProperty('text-align', value, '');
   }
 
+  /** Gets the value of "text-align-last" */
+  String get textAlignLast =>
+    getPropertyValue('${_browserPrefix}text-align-last');
+
+  /** Sets the value of "text-align-last" */
+  void set textAlignLast(String value) {
+    setProperty('${_browserPrefix}text-align-last', value, '');
+  }
+
   /** Gets the value of "text-combine" */
   String get textCombine =>
     getPropertyValue('${_browserPrefix}text-combine');
 
   /** Sets the value of "text-combine" */
-  void set textCombine(var value) {
+  void set textCombine(String value) {
     setProperty('${_browserPrefix}text-combine', value, '');
   }
 
@@ -3698,16 +4034,34 @@
     getPropertyValue('text-decoration');
 
   /** Sets the value of "text-decoration" */
-  void set textDecoration(var value) {
+  void set textDecoration(String value) {
     setProperty('text-decoration', value, '');
   }
 
+  /** Gets the value of "text-decoration-line" */
+  String get textDecorationLine =>
+    getPropertyValue('${_browserPrefix}text-decoration-line');
+
+  /** Sets the value of "text-decoration-line" */
+  void set textDecorationLine(String value) {
+    setProperty('${_browserPrefix}text-decoration-line', value, '');
+  }
+
+  /** Gets the value of "text-decoration-style" */
+  String get textDecorationStyle =>
+    getPropertyValue('${_browserPrefix}text-decoration-style');
+
+  /** Sets the value of "text-decoration-style" */
+  void set textDecorationStyle(String value) {
+    setProperty('${_browserPrefix}text-decoration-style', value, '');
+  }
+
   /** Gets the value of "text-decorations-in-effect" */
   String get textDecorationsInEffect =>
     getPropertyValue('${_browserPrefix}text-decorations-in-effect');
 
   /** Sets the value of "text-decorations-in-effect" */
-  void set textDecorationsInEffect(var value) {
+  void set textDecorationsInEffect(String value) {
     setProperty('${_browserPrefix}text-decorations-in-effect', value, '');
   }
 
@@ -3716,7 +4070,7 @@
     getPropertyValue('${_browserPrefix}text-emphasis');
 
   /** Sets the value of "text-emphasis" */
-  void set textEmphasis(var value) {
+  void set textEmphasis(String value) {
     setProperty('${_browserPrefix}text-emphasis', value, '');
   }
 
@@ -3725,7 +4079,7 @@
     getPropertyValue('${_browserPrefix}text-emphasis-color');
 
   /** Sets the value of "text-emphasis-color" */
-  void set textEmphasisColor(var value) {
+  void set textEmphasisColor(String value) {
     setProperty('${_browserPrefix}text-emphasis-color', value, '');
   }
 
@@ -3734,7 +4088,7 @@
     getPropertyValue('${_browserPrefix}text-emphasis-position');
 
   /** Sets the value of "text-emphasis-position" */
-  void set textEmphasisPosition(var value) {
+  void set textEmphasisPosition(String value) {
     setProperty('${_browserPrefix}text-emphasis-position', value, '');
   }
 
@@ -3743,7 +4097,7 @@
     getPropertyValue('${_browserPrefix}text-emphasis-style');
 
   /** Sets the value of "text-emphasis-style" */
-  void set textEmphasisStyle(var value) {
+  void set textEmphasisStyle(String value) {
     setProperty('${_browserPrefix}text-emphasis-style', value, '');
   }
 
@@ -3752,7 +4106,7 @@
     getPropertyValue('${_browserPrefix}text-fill-color');
 
   /** Sets the value of "text-fill-color" */
-  void set textFillColor(var value) {
+  void set textFillColor(String value) {
     setProperty('${_browserPrefix}text-fill-color', value, '');
   }
 
@@ -3761,7 +4115,7 @@
     getPropertyValue('text-indent');
 
   /** Sets the value of "text-indent" */
-  void set textIndent(var value) {
+  void set textIndent(String value) {
     setProperty('text-indent', value, '');
   }
 
@@ -3770,7 +4124,7 @@
     getPropertyValue('text-line-through');
 
   /** Sets the value of "text-line-through" */
-  void set textLineThrough(var value) {
+  void set textLineThrough(String value) {
     setProperty('text-line-through', value, '');
   }
 
@@ -3779,7 +4133,7 @@
     getPropertyValue('text-line-through-color');
 
   /** Sets the value of "text-line-through-color" */
-  void set textLineThroughColor(var value) {
+  void set textLineThroughColor(String value) {
     setProperty('text-line-through-color', value, '');
   }
 
@@ -3788,7 +4142,7 @@
     getPropertyValue('text-line-through-mode');
 
   /** Sets the value of "text-line-through-mode" */
-  void set textLineThroughMode(var value) {
+  void set textLineThroughMode(String value) {
     setProperty('text-line-through-mode', value, '');
   }
 
@@ -3797,7 +4151,7 @@
     getPropertyValue('text-line-through-style');
 
   /** Sets the value of "text-line-through-style" */
-  void set textLineThroughStyle(var value) {
+  void set textLineThroughStyle(String value) {
     setProperty('text-line-through-style', value, '');
   }
 
@@ -3806,7 +4160,7 @@
     getPropertyValue('text-line-through-width');
 
   /** Sets the value of "text-line-through-width" */
-  void set textLineThroughWidth(var value) {
+  void set textLineThroughWidth(String value) {
     setProperty('text-line-through-width', value, '');
   }
 
@@ -3815,7 +4169,7 @@
     getPropertyValue('${_browserPrefix}text-orientation');
 
   /** Sets the value of "text-orientation" */
-  void set textOrientation(var value) {
+  void set textOrientation(String value) {
     setProperty('${_browserPrefix}text-orientation', value, '');
   }
 
@@ -3824,7 +4178,7 @@
     getPropertyValue('text-overflow');
 
   /** Sets the value of "text-overflow" */
-  void set textOverflow(var value) {
+  void set textOverflow(String value) {
     setProperty('text-overflow', value, '');
   }
 
@@ -3833,7 +4187,7 @@
     getPropertyValue('text-overline');
 
   /** Sets the value of "text-overline" */
-  void set textOverline(var value) {
+  void set textOverline(String value) {
     setProperty('text-overline', value, '');
   }
 
@@ -3842,7 +4196,7 @@
     getPropertyValue('text-overline-color');
 
   /** Sets the value of "text-overline-color" */
-  void set textOverlineColor(var value) {
+  void set textOverlineColor(String value) {
     setProperty('text-overline-color', value, '');
   }
 
@@ -3851,7 +4205,7 @@
     getPropertyValue('text-overline-mode');
 
   /** Sets the value of "text-overline-mode" */
-  void set textOverlineMode(var value) {
+  void set textOverlineMode(String value) {
     setProperty('text-overline-mode', value, '');
   }
 
@@ -3860,7 +4214,7 @@
     getPropertyValue('text-overline-style');
 
   /** Sets the value of "text-overline-style" */
-  void set textOverlineStyle(var value) {
+  void set textOverlineStyle(String value) {
     setProperty('text-overline-style', value, '');
   }
 
@@ -3869,7 +4223,7 @@
     getPropertyValue('text-overline-width');
 
   /** Sets the value of "text-overline-width" */
-  void set textOverlineWidth(var value) {
+  void set textOverlineWidth(String value) {
     setProperty('text-overline-width', value, '');
   }
 
@@ -3878,7 +4232,7 @@
     getPropertyValue('text-rendering');
 
   /** Sets the value of "text-rendering" */
-  void set textRendering(var value) {
+  void set textRendering(String value) {
     setProperty('text-rendering', value, '');
   }
 
@@ -3887,7 +4241,7 @@
     getPropertyValue('${_browserPrefix}text-security');
 
   /** Sets the value of "text-security" */
-  void set textSecurity(var value) {
+  void set textSecurity(String value) {
     setProperty('${_browserPrefix}text-security', value, '');
   }
 
@@ -3896,7 +4250,7 @@
     getPropertyValue('text-shadow');
 
   /** Sets the value of "text-shadow" */
-  void set textShadow(var value) {
+  void set textShadow(String value) {
     setProperty('text-shadow', value, '');
   }
 
@@ -3905,7 +4259,7 @@
     getPropertyValue('${_browserPrefix}text-size-adjust');
 
   /** Sets the value of "text-size-adjust" */
-  void set textSizeAdjust(var value) {
+  void set textSizeAdjust(String value) {
     setProperty('${_browserPrefix}text-size-adjust', value, '');
   }
 
@@ -3914,7 +4268,7 @@
     getPropertyValue('${_browserPrefix}text-stroke');
 
   /** Sets the value of "text-stroke" */
-  void set textStroke(var value) {
+  void set textStroke(String value) {
     setProperty('${_browserPrefix}text-stroke', value, '');
   }
 
@@ -3923,7 +4277,7 @@
     getPropertyValue('${_browserPrefix}text-stroke-color');
 
   /** Sets the value of "text-stroke-color" */
-  void set textStrokeColor(var value) {
+  void set textStrokeColor(String value) {
     setProperty('${_browserPrefix}text-stroke-color', value, '');
   }
 
@@ -3932,7 +4286,7 @@
     getPropertyValue('${_browserPrefix}text-stroke-width');
 
   /** Sets the value of "text-stroke-width" */
-  void set textStrokeWidth(var value) {
+  void set textStrokeWidth(String value) {
     setProperty('${_browserPrefix}text-stroke-width', value, '');
   }
 
@@ -3941,7 +4295,7 @@
     getPropertyValue('text-transform');
 
   /** Sets the value of "text-transform" */
-  void set textTransform(var value) {
+  void set textTransform(String value) {
     setProperty('text-transform', value, '');
   }
 
@@ -3950,7 +4304,7 @@
     getPropertyValue('text-underline');
 
   /** Sets the value of "text-underline" */
-  void set textUnderline(var value) {
+  void set textUnderline(String value) {
     setProperty('text-underline', value, '');
   }
 
@@ -3959,7 +4313,7 @@
     getPropertyValue('text-underline-color');
 
   /** Sets the value of "text-underline-color" */
-  void set textUnderlineColor(var value) {
+  void set textUnderlineColor(String value) {
     setProperty('text-underline-color', value, '');
   }
 
@@ -3968,7 +4322,7 @@
     getPropertyValue('text-underline-mode');
 
   /** Sets the value of "text-underline-mode" */
-  void set textUnderlineMode(var value) {
+  void set textUnderlineMode(String value) {
     setProperty('text-underline-mode', value, '');
   }
 
@@ -3977,7 +4331,7 @@
     getPropertyValue('text-underline-style');
 
   /** Sets the value of "text-underline-style" */
-  void set textUnderlineStyle(var value) {
+  void set textUnderlineStyle(String value) {
     setProperty('text-underline-style', value, '');
   }
 
@@ -3986,7 +4340,7 @@
     getPropertyValue('text-underline-width');
 
   /** Sets the value of "text-underline-width" */
-  void set textUnderlineWidth(var value) {
+  void set textUnderlineWidth(String value) {
     setProperty('text-underline-width', value, '');
   }
 
@@ -3995,7 +4349,7 @@
     getPropertyValue('top');
 
   /** Sets the value of "top" */
-  void set top(var value) {
+  void set top(String value) {
     setProperty('top', value, '');
   }
 
@@ -4004,7 +4358,7 @@
     getPropertyValue('${_browserPrefix}transform');
 
   /** Sets the value of "transform" */
-  void set transform(var value) {
+  void set transform(String value) {
     setProperty('${_browserPrefix}transform', value, '');
   }
 
@@ -4013,7 +4367,7 @@
     getPropertyValue('${_browserPrefix}transform-origin');
 
   /** Sets the value of "transform-origin" */
-  void set transformOrigin(var value) {
+  void set transformOrigin(String value) {
     setProperty('${_browserPrefix}transform-origin', value, '');
   }
 
@@ -4022,7 +4376,7 @@
     getPropertyValue('${_browserPrefix}transform-origin-x');
 
   /** Sets the value of "transform-origin-x" */
-  void set transformOriginX(var value) {
+  void set transformOriginX(String value) {
     setProperty('${_browserPrefix}transform-origin-x', value, '');
   }
 
@@ -4031,7 +4385,7 @@
     getPropertyValue('${_browserPrefix}transform-origin-y');
 
   /** Sets the value of "transform-origin-y" */
-  void set transformOriginY(var value) {
+  void set transformOriginY(String value) {
     setProperty('${_browserPrefix}transform-origin-y', value, '');
   }
 
@@ -4040,7 +4394,7 @@
     getPropertyValue('${_browserPrefix}transform-origin-z');
 
   /** Sets the value of "transform-origin-z" */
-  void set transformOriginZ(var value) {
+  void set transformOriginZ(String value) {
     setProperty('${_browserPrefix}transform-origin-z', value, '');
   }
 
@@ -4049,7 +4403,7 @@
     getPropertyValue('${_browserPrefix}transform-style');
 
   /** Sets the value of "transform-style" */
-  void set transformStyle(var value) {
+  void set transformStyle(String value) {
     setProperty('${_browserPrefix}transform-style', value, '');
   }
 
@@ -4058,7 +4412,7 @@
     getPropertyValue('${_browserPrefix}transition');
 
   /** Sets the value of "transition" */
-  void set transition(var value) {
+  void set transition(String value) {
     setProperty('${_browserPrefix}transition', value, '');
   }
 
@@ -4067,7 +4421,7 @@
     getPropertyValue('${_browserPrefix}transition-delay');
 
   /** Sets the value of "transition-delay" */
-  void set transitionDelay(var value) {
+  void set transitionDelay(String value) {
     setProperty('${_browserPrefix}transition-delay', value, '');
   }
 
@@ -4076,7 +4430,7 @@
     getPropertyValue('${_browserPrefix}transition-duration');
 
   /** Sets the value of "transition-duration" */
-  void set transitionDuration(var value) {
+  void set transitionDuration(String value) {
     setProperty('${_browserPrefix}transition-duration', value, '');
   }
 
@@ -4085,7 +4439,7 @@
     getPropertyValue('${_browserPrefix}transition-property');
 
   /** Sets the value of "transition-property" */
-  void set transitionProperty(var value) {
+  void set transitionProperty(String value) {
     setProperty('${_browserPrefix}transition-property', value, '');
   }
 
@@ -4094,7 +4448,7 @@
     getPropertyValue('${_browserPrefix}transition-timing-function');
 
   /** Sets the value of "transition-timing-function" */
-  void set transitionTimingFunction(var value) {
+  void set transitionTimingFunction(String value) {
     setProperty('${_browserPrefix}transition-timing-function', value, '');
   }
 
@@ -4103,7 +4457,7 @@
     getPropertyValue('unicode-bidi');
 
   /** Sets the value of "unicode-bidi" */
-  void set unicodeBidi(var value) {
+  void set unicodeBidi(String value) {
     setProperty('unicode-bidi', value, '');
   }
 
@@ -4112,7 +4466,7 @@
     getPropertyValue('unicode-range');
 
   /** Sets the value of "unicode-range" */
-  void set unicodeRange(var value) {
+  void set unicodeRange(String value) {
     setProperty('unicode-range', value, '');
   }
 
@@ -4121,7 +4475,7 @@
     getPropertyValue('${_browserPrefix}user-drag');
 
   /** Sets the value of "user-drag" */
-  void set userDrag(var value) {
+  void set userDrag(String value) {
     setProperty('${_browserPrefix}user-drag', value, '');
   }
 
@@ -4130,7 +4484,7 @@
     getPropertyValue('${_browserPrefix}user-modify');
 
   /** Sets the value of "user-modify" */
-  void set userModify(var value) {
+  void set userModify(String value) {
     setProperty('${_browserPrefix}user-modify', value, '');
   }
 
@@ -4139,16 +4493,25 @@
     getPropertyValue('${_browserPrefix}user-select');
 
   /** Sets the value of "user-select" */
-  void set userSelect(var value) {
+  void set userSelect(String value) {
     setProperty('${_browserPrefix}user-select', value, '');
   }
 
+  /** Gets the value of "user-zoom" */
+  String get userZoom =>
+    getPropertyValue('user-zoom');
+
+  /** Sets the value of "user-zoom" */
+  void set userZoom(String value) {
+    setProperty('user-zoom', value, '');
+  }
+
   /** Gets the value of "vertical-align" */
   String get verticalAlign =>
     getPropertyValue('vertical-align');
 
   /** Sets the value of "vertical-align" */
-  void set verticalAlign(var value) {
+  void set verticalAlign(String value) {
     setProperty('vertical-align', value, '');
   }
 
@@ -4157,7 +4520,7 @@
     getPropertyValue('visibility');
 
   /** Sets the value of "visibility" */
-  void set visibility(var value) {
+  void set visibility(String value) {
     setProperty('visibility', value, '');
   }
 
@@ -4166,7 +4529,7 @@
     getPropertyValue('white-space');
 
   /** Sets the value of "white-space" */
-  void set whiteSpace(var value) {
+  void set whiteSpace(String value) {
     setProperty('white-space', value, '');
   }
 
@@ -4175,7 +4538,7 @@
     getPropertyValue('widows');
 
   /** Sets the value of "widows" */
-  void set widows(var value) {
+  void set widows(String value) {
     setProperty('widows', value, '');
   }
 
@@ -4184,7 +4547,7 @@
     getPropertyValue('width');
 
   /** Sets the value of "width" */
-  void set width(var value) {
+  void set width(String value) {
     setProperty('width', value, '');
   }
 
@@ -4193,7 +4556,7 @@
     getPropertyValue('word-break');
 
   /** Sets the value of "word-break" */
-  void set wordBreak(var value) {
+  void set wordBreak(String value) {
     setProperty('word-break', value, '');
   }
 
@@ -4202,7 +4565,7 @@
     getPropertyValue('word-spacing');
 
   /** Sets the value of "word-spacing" */
-  void set wordSpacing(var value) {
+  void set wordSpacing(String value) {
     setProperty('word-spacing', value, '');
   }
 
@@ -4211,17 +4574,35 @@
     getPropertyValue('word-wrap');
 
   /** Sets the value of "word-wrap" */
-  void set wordWrap(var value) {
+  void set wordWrap(String value) {
     setProperty('word-wrap', value, '');
   }
 
-  /** Gets the value of "wrap-shape" */
-  String get wrapShape =>
-    getPropertyValue('${_browserPrefix}wrap-shape');
+  /** Gets the value of "wrap" */
+  String get wrap =>
+    getPropertyValue('${_browserPrefix}wrap');
 
-  /** Sets the value of "wrap-shape" */
-  void set wrapShape(var value) {
-    setProperty('${_browserPrefix}wrap-shape', value, '');
+  /** Sets the value of "wrap" */
+  void set wrap(String value) {
+    setProperty('${_browserPrefix}wrap', value, '');
+  }
+
+  /** Gets the value of "wrap-flow" */
+  String get wrapFlow =>
+    getPropertyValue('${_browserPrefix}wrap-flow');
+
+  /** Sets the value of "wrap-flow" */
+  void set wrapFlow(String value) {
+    setProperty('${_browserPrefix}wrap-flow', value, '');
+  }
+
+  /** Gets the value of "wrap-through" */
+  String get wrapThrough =>
+    getPropertyValue('${_browserPrefix}wrap-through');
+
+  /** Sets the value of "wrap-through" */
+  void set wrapThrough(String value) {
+    setProperty('${_browserPrefix}wrap-through', value, '');
   }
 
   /** Gets the value of "writing-mode" */
@@ -4229,7 +4610,7 @@
     getPropertyValue('${_browserPrefix}writing-mode');
 
   /** Sets the value of "writing-mode" */
-  void set writingMode(var value) {
+  void set writingMode(String value) {
     setProperty('${_browserPrefix}writing-mode', value, '');
   }
 
@@ -4238,7 +4619,7 @@
     getPropertyValue('z-index');
 
   /** Sets the value of "z-index" */
-  void set zIndex(var value) {
+  void set zIndex(String value) {
     setProperty('z-index', value, '');
   }
 
@@ -4247,7 +4628,7 @@
     getPropertyValue('zoom');
 
   /** Sets the value of "zoom" */
-  void set zoom(var value) {
+  void set zoom(String value) {
     setProperty('zoom', value, '');
   }
 }
@@ -4256,13 +4637,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSStyleRule
+/// @domName CSSStyleRule; @docsEditable true
 class CSSStyleRule extends CSSRule native "*CSSStyleRule" {
 
-  /** @domName CSSStyleRule.selectorText */
+  /// @domName CSSStyleRule.selectorText; @docsEditable true
   String selectorText;
 
-  /** @domName CSSStyleRule.style */
+  /// @domName CSSStyleRule.style; @docsEditable true
   final CSSStyleDeclaration style;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4270,28 +4651,30 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSStyleSheet
+/// @domName CSSStyleSheet; @docsEditable true
 class CSSStyleSheet extends StyleSheet native "*CSSStyleSheet" {
 
-  /** @domName CSSStyleSheet.cssRules */
+  /// @domName CSSStyleSheet.cssRules; @docsEditable true
+  @Returns('_CSSRuleList') @Creates('_CSSRuleList')
   final List<CSSRule> cssRules;
 
-  /** @domName CSSStyleSheet.ownerRule */
+  /// @domName CSSStyleSheet.ownerRule; @docsEditable true
   final CSSRule ownerRule;
 
-  /** @domName CSSStyleSheet.rules */
+  /// @domName CSSStyleSheet.rules; @docsEditable true
+  @Returns('_CSSRuleList') @Creates('_CSSRuleList')
   final List<CSSRule> rules;
 
-  /** @domName CSSStyleSheet.addRule */
+  /// @domName CSSStyleSheet.addRule; @docsEditable true
   int addRule(String selector, String style, [int index]) native;
 
-  /** @domName CSSStyleSheet.deleteRule */
+  /// @domName CSSStyleSheet.deleteRule; @docsEditable true
   void deleteRule(int index) native;
 
-  /** @domName CSSStyleSheet.insertRule */
+  /// @domName CSSStyleSheet.insertRule; @docsEditable true
   int insertRule(String rule, int index) native;
 
-  /** @domName CSSStyleSheet.removeRule */
+  /// @domName CSSStyleSheet.removeRule; @docsEditable true
   void removeRule(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4299,7 +4682,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitCSSTransformValue
+/// @domName WebKitCSSTransformValue; @docsEditable true
 class CSSTransformValue extends _CSSValueList native "*WebKitCSSTransformValue" {
 
   static const int CSS_MATRIX = 11;
@@ -4344,7 +4727,7 @@
 
   static const int CSS_TRANSLATEZ = 12;
 
-  /** @domName WebKitCSSTransformValue.operationType */
+  /// @domName WebKitCSSTransformValue.operationType; @docsEditable true
   final int operationType;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4352,7 +4735,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSUnknownRule
+/// @domName CSSUnknownRule; @docsEditable true
 class CSSUnknownRule extends CSSRule native "*CSSUnknownRule" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4360,7 +4743,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSValue
+/// @domName CSSValue; @docsEditable true
 class CSSValue native "*CSSValue" {
 
   static const int CSS_CUSTOM = 3;
@@ -4371,10 +4754,10 @@
 
   static const int CSS_VALUE_LIST = 2;
 
-  /** @domName CSSValue.cssText */
+  /// @domName CSSValue.cssText; @docsEditable true
   String cssText;
 
-  /** @domName CSSValue.cssValueType */
+  /// @domName CSSValue.cssValueType; @docsEditable true
   final int cssValueType;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4385,22 +4768,19 @@
 class CanvasElement extends Element implements Element native "*HTMLCanvasElement" {
 
   factory CanvasElement({int width, int height}) {
-    if (!?width) {
-      return _Elements.createCanvasElement();
-    }
-    if (!?height) {
-      return _Elements.createCanvasElement(width);
-    }
-    return _Elements.createCanvasElement(width, height);
+    var e = document.$dom_createElement("canvas");
+    if (width != null) e.width = width;
+    if (height != null) e.height = height;
+    return e;
   }
 
-  /** @domName HTMLCanvasElement.height */
+  /// @domName HTMLCanvasElement.height; @docsEditable true
   int height;
 
-  /** @domName HTMLCanvasElement.width */
+  /// @domName HTMLCanvasElement.width; @docsEditable true
   int width;
 
-  /** @domName HTMLCanvasElement.toDataURL */
+  /// @domName HTMLCanvasElement.toDataURL; @docsEditable true
   String toDataURL(String type, [num quality]) native;
 
 
@@ -4412,10 +4792,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CanvasGradient
+/// @domName CanvasGradient; @docsEditable true
 class CanvasGradient native "*CanvasGradient" {
 
-  /** @domName CanvasGradient.addColorStop */
+  /// @domName CanvasGradient.addColorStop; @docsEditable true
   void addColorStop(num offset, String color) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4423,7 +4803,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CanvasPattern
+/// @domName CanvasPattern; @docsEditable true
 class CanvasPattern native "*CanvasPattern" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4431,10 +4811,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CanvasRenderingContext
+/// @domName CanvasRenderingContext; @docsEditable true
 class CanvasRenderingContext native "*CanvasRenderingContext" {
 
-  /** @domName CanvasRenderingContext.canvas */
+  /// @domName CanvasRenderingContext.canvas; @docsEditable true
   final CanvasElement canvas;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4444,91 +4824,91 @@
 
 class CanvasRenderingContext2D extends CanvasRenderingContext native "*CanvasRenderingContext2D" {
 
-  /** @domName CanvasRenderingContext2D.fillStyle */
+  /// @domName CanvasRenderingContext2D.fillStyle; @docsEditable true
   dynamic fillStyle;
 
-  /** @domName CanvasRenderingContext2D.font */
+  /// @domName CanvasRenderingContext2D.font; @docsEditable true
   String font;
 
-  /** @domName CanvasRenderingContext2D.globalAlpha */
+  /// @domName CanvasRenderingContext2D.globalAlpha; @docsEditable true
   num globalAlpha;
 
-  /** @domName CanvasRenderingContext2D.globalCompositeOperation */
+  /// @domName CanvasRenderingContext2D.globalCompositeOperation; @docsEditable true
   String globalCompositeOperation;
 
-  /** @domName CanvasRenderingContext2D.lineCap */
+  /// @domName CanvasRenderingContext2D.lineCap; @docsEditable true
   String lineCap;
 
-  /** @domName CanvasRenderingContext2D.lineDashOffset */
+  /// @domName CanvasRenderingContext2D.lineDashOffset; @docsEditable true
   num lineDashOffset;
 
-  /** @domName CanvasRenderingContext2D.lineJoin */
+  /// @domName CanvasRenderingContext2D.lineJoin; @docsEditable true
   String lineJoin;
 
-  /** @domName CanvasRenderingContext2D.lineWidth */
+  /// @domName CanvasRenderingContext2D.lineWidth; @docsEditable true
   num lineWidth;
 
-  /** @domName CanvasRenderingContext2D.miterLimit */
+  /// @domName CanvasRenderingContext2D.miterLimit; @docsEditable true
   num miterLimit;
 
-  /** @domName CanvasRenderingContext2D.shadowBlur */
+  /// @domName CanvasRenderingContext2D.shadowBlur; @docsEditable true
   num shadowBlur;
 
-  /** @domName CanvasRenderingContext2D.shadowColor */
+  /// @domName CanvasRenderingContext2D.shadowColor; @docsEditable true
   String shadowColor;
 
-  /** @domName CanvasRenderingContext2D.shadowOffsetX */
+  /// @domName CanvasRenderingContext2D.shadowOffsetX; @docsEditable true
   num shadowOffsetX;
 
-  /** @domName CanvasRenderingContext2D.shadowOffsetY */
+  /// @domName CanvasRenderingContext2D.shadowOffsetY; @docsEditable true
   num shadowOffsetY;
 
-  /** @domName CanvasRenderingContext2D.strokeStyle */
+  /// @domName CanvasRenderingContext2D.strokeStyle; @docsEditable true
   dynamic strokeStyle;
 
-  /** @domName CanvasRenderingContext2D.textAlign */
+  /// @domName CanvasRenderingContext2D.textAlign; @docsEditable true
   String textAlign;
 
-  /** @domName CanvasRenderingContext2D.textBaseline */
+  /// @domName CanvasRenderingContext2D.textBaseline; @docsEditable true
   String textBaseline;
 
-  /** @domName CanvasRenderingContext2D.webkitBackingStorePixelRatio */
+  /// @domName CanvasRenderingContext2D.webkitBackingStorePixelRatio; @docsEditable true
   final num webkitBackingStorePixelRatio;
 
-  /** @domName CanvasRenderingContext2D.webkitImageSmoothingEnabled */
+  /// @domName CanvasRenderingContext2D.webkitImageSmoothingEnabled; @docsEditable true
   bool webkitImageSmoothingEnabled;
 
-  /** @domName CanvasRenderingContext2D.webkitLineDash */
+  /// @domName CanvasRenderingContext2D.webkitLineDash; @docsEditable true
   List webkitLineDash;
 
-  /** @domName CanvasRenderingContext2D.webkitLineDashOffset */
+  /// @domName CanvasRenderingContext2D.webkitLineDashOffset; @docsEditable true
   num webkitLineDashOffset;
 
-  /** @domName CanvasRenderingContext2D.arc */
+  /// @domName CanvasRenderingContext2D.arc; @docsEditable true
   void arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) native;
 
-  /** @domName CanvasRenderingContext2D.arcTo */
+  /// @domName CanvasRenderingContext2D.arcTo; @docsEditable true
   void arcTo(num x1, num y1, num x2, num y2, num radius) native;
 
-  /** @domName CanvasRenderingContext2D.beginPath */
+  /// @domName CanvasRenderingContext2D.beginPath; @docsEditable true
   void beginPath() native;
 
-  /** @domName CanvasRenderingContext2D.bezierCurveTo */
+  /// @domName CanvasRenderingContext2D.bezierCurveTo; @docsEditable true
   void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) native;
 
-  /** @domName CanvasRenderingContext2D.clearRect */
+  /// @domName CanvasRenderingContext2D.clearRect; @docsEditable true
   void clearRect(num x, num y, num width, num height) native;
 
-  /** @domName CanvasRenderingContext2D.clearShadow */
+  /// @domName CanvasRenderingContext2D.clearShadow; @docsEditable true
   void clearShadow() native;
 
-  /** @domName CanvasRenderingContext2D.clip */
+  /// @domName CanvasRenderingContext2D.clip; @docsEditable true
   void clip() native;
 
-  /** @domName CanvasRenderingContext2D.closePath */
+  /// @domName CanvasRenderingContext2D.closePath; @docsEditable true
   void closePath() native;
 
-  /** @domName CanvasRenderingContext2D.createImageData */
+  /// @domName CanvasRenderingContext2D.createImageData; @docsEditable true
   ImageData createImageData(imagedata_OR_sw, [num sh]) {
     if ((?imagedata_OR_sw && (imagedata_OR_sw is ImageData || imagedata_OR_sw == null)) &&
         !?sh) {
@@ -4538,57 +4918,60 @@
     if ((?imagedata_OR_sw && (imagedata_OR_sw is num || imagedata_OR_sw == null))) {
       return _convertNativeToDart_ImageData(_createImageData_2(imagedata_OR_sw, sh));
     }
-    throw const Exception("Incorrect number or type of arguments");
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
+  @Creates('ImageData|=Object')
   _createImageData_1(imagedata) native "createImageData";
+  @Creates('ImageData|=Object')
   _createImageData_2(num sw, sh) native "createImageData";
 
-  /** @domName CanvasRenderingContext2D.createLinearGradient */
+  /// @domName CanvasRenderingContext2D.createLinearGradient; @docsEditable true
   CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) native;
 
-  /** @domName CanvasRenderingContext2D.createPattern */
+  /// @domName CanvasRenderingContext2D.createPattern; @docsEditable true
   CanvasPattern createPattern(canvas_OR_image, String repetitionType) native;
 
-  /** @domName CanvasRenderingContext2D.createRadialGradient */
+  /// @domName CanvasRenderingContext2D.createRadialGradient; @docsEditable true
   CanvasGradient createRadialGradient(num x0, num y0, num r0, num x1, num y1, num r1) native;
 
-  /** @domName CanvasRenderingContext2D.drawImage */
+  /// @domName CanvasRenderingContext2D.drawImage; @docsEditable true
   void drawImage(canvas_OR_image_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]) native;
 
-  /** @domName CanvasRenderingContext2D.drawImageFromRect */
+  /// @domName CanvasRenderingContext2D.drawImageFromRect; @docsEditable true
   void drawImageFromRect(ImageElement image, [num sx, num sy, num sw, num sh, num dx, num dy, num dw, num dh, String compositeOperation]) native;
 
-  /** @domName CanvasRenderingContext2D.fill */
+  /// @domName CanvasRenderingContext2D.fill; @docsEditable true
   void fill() native;
 
-  /** @domName CanvasRenderingContext2D.fillRect */
+  /// @domName CanvasRenderingContext2D.fillRect; @docsEditable true
   void fillRect(num x, num y, num width, num height) native;
 
-  /** @domName CanvasRenderingContext2D.fillText */
+  /// @domName CanvasRenderingContext2D.fillText; @docsEditable true
   void fillText(String text, num x, num y, [num maxWidth]) native;
 
-  /** @domName CanvasRenderingContext2D.getImageData */
+  /// @domName CanvasRenderingContext2D.getImageData; @docsEditable true
   ImageData getImageData(num sx, num sy, num sw, num sh) {
     return _convertNativeToDart_ImageData(_getImageData_1(sx, sy, sw, sh));
   }
+  @Creates('ImageData|=Object')
   _getImageData_1(sx, sy, sw, sh) native "getImageData";
 
-  /** @domName CanvasRenderingContext2D.getLineDash */
+  /// @domName CanvasRenderingContext2D.getLineDash; @docsEditable true
   List<num> getLineDash() native;
 
-  /** @domName CanvasRenderingContext2D.isPointInPath */
+  /// @domName CanvasRenderingContext2D.isPointInPath; @docsEditable true
   bool isPointInPath(num x, num y) native;
 
-  /** @domName CanvasRenderingContext2D.lineTo */
+  /// @domName CanvasRenderingContext2D.lineTo; @docsEditable true
   void lineTo(num x, num y) native;
 
-  /** @domName CanvasRenderingContext2D.measureText */
+  /// @domName CanvasRenderingContext2D.measureText; @docsEditable true
   TextMetrics measureText(String text) native;
 
-  /** @domName CanvasRenderingContext2D.moveTo */
+  /// @domName CanvasRenderingContext2D.moveTo; @docsEditable true
   void moveTo(num x, num y) native;
 
-  /** @domName CanvasRenderingContext2D.putImageData */
+  /// @domName CanvasRenderingContext2D.putImageData; @docsEditable true
   void putImageData(ImageData imagedata, num dx, num dy, [num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight]) {
     if (!?dirtyX &&
         !?dirtyY &&
@@ -4601,78 +4984,79 @@
     var imagedata_2 = _convertDartToNative_ImageData(imagedata);
     _putImageData_2(imagedata_2, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
     return;
-    throw const Exception("Incorrect number or type of arguments");
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
   void _putImageData_1(imagedata, dx, dy) native "putImageData";
   void _putImageData_2(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) native "putImageData";
 
-  /** @domName CanvasRenderingContext2D.quadraticCurveTo */
+  /// @domName CanvasRenderingContext2D.quadraticCurveTo; @docsEditable true
   void quadraticCurveTo(num cpx, num cpy, num x, num y) native;
 
-  /** @domName CanvasRenderingContext2D.rect */
+  /// @domName CanvasRenderingContext2D.rect; @docsEditable true
   void rect(num x, num y, num width, num height) native;
 
-  /** @domName CanvasRenderingContext2D.restore */
+  /// @domName CanvasRenderingContext2D.restore; @docsEditable true
   void restore() native;
 
-  /** @domName CanvasRenderingContext2D.rotate */
+  /// @domName CanvasRenderingContext2D.rotate; @docsEditable true
   void rotate(num angle) native;
 
-  /** @domName CanvasRenderingContext2D.save */
+  /// @domName CanvasRenderingContext2D.save; @docsEditable true
   void save() native;
 
-  /** @domName CanvasRenderingContext2D.scale */
+  /// @domName CanvasRenderingContext2D.scale; @docsEditable true
   void scale(num sx, num sy) native;
 
-  /** @domName CanvasRenderingContext2D.setAlpha */
+  /// @domName CanvasRenderingContext2D.setAlpha; @docsEditable true
   void setAlpha(num alpha) native;
 
-  /** @domName CanvasRenderingContext2D.setCompositeOperation */
+  /// @domName CanvasRenderingContext2D.setCompositeOperation; @docsEditable true
   void setCompositeOperation(String compositeOperation) native;
 
-  /** @domName CanvasRenderingContext2D.setLineCap */
+  /// @domName CanvasRenderingContext2D.setLineCap; @docsEditable true
   void setLineCap(String cap) native;
 
-  /** @domName CanvasRenderingContext2D.setLineDash */
+  /// @domName CanvasRenderingContext2D.setLineDash; @docsEditable true
   void setLineDash(List<num> dash) native;
 
-  /** @domName CanvasRenderingContext2D.setLineJoin */
+  /// @domName CanvasRenderingContext2D.setLineJoin; @docsEditable true
   void setLineJoin(String join) native;
 
-  /** @domName CanvasRenderingContext2D.setLineWidth */
+  /// @domName CanvasRenderingContext2D.setLineWidth; @docsEditable true
   void setLineWidth(num width) native;
 
-  /** @domName CanvasRenderingContext2D.setMiterLimit */
+  /// @domName CanvasRenderingContext2D.setMiterLimit; @docsEditable true
   void setMiterLimit(num limit) native;
 
-  /** @domName CanvasRenderingContext2D.setShadow */
+  /// @domName CanvasRenderingContext2D.setShadow; @docsEditable true
   void setShadow(num width, num height, num blur, [c_OR_color_OR_grayLevel_OR_r, num alpha_OR_g_OR_m, num b_OR_y, num a_OR_k, num a]) native;
 
-  /** @domName CanvasRenderingContext2D.setTransform */
+  /// @domName CanvasRenderingContext2D.setTransform; @docsEditable true
   void setTransform(num m11, num m12, num m21, num m22, num dx, num dy) native;
 
-  /** @domName CanvasRenderingContext2D.stroke */
+  /// @domName CanvasRenderingContext2D.stroke; @docsEditable true
   void stroke() native;
 
-  /** @domName CanvasRenderingContext2D.strokeRect */
+  /// @domName CanvasRenderingContext2D.strokeRect; @docsEditable true
   void strokeRect(num x, num y, num width, num height, [num lineWidth]) native;
 
-  /** @domName CanvasRenderingContext2D.strokeText */
+  /// @domName CanvasRenderingContext2D.strokeText; @docsEditable true
   void strokeText(String text, num x, num y, [num maxWidth]) native;
 
-  /** @domName CanvasRenderingContext2D.transform */
+  /// @domName CanvasRenderingContext2D.transform; @docsEditable true
   void transform(num m11, num m12, num m21, num m22, num dx, num dy) native;
 
-  /** @domName CanvasRenderingContext2D.translate */
+  /// @domName CanvasRenderingContext2D.translate; @docsEditable true
   void translate(num tx, num ty) native;
 
-  /** @domName CanvasRenderingContext2D.webkitGetImageDataHD */
+  /// @domName CanvasRenderingContext2D.webkitGetImageDataHD; @docsEditable true
   ImageData webkitGetImageDataHD(num sx, num sy, num sw, num sh) {
     return _convertNativeToDart_ImageData(_webkitGetImageDataHD_1(sx, sy, sw, sh));
   }
+  @Creates('ImageData|=Object')
   _webkitGetImageDataHD_1(sx, sy, sw, sh) native "webkitGetImageDataHD";
 
-  /** @domName CanvasRenderingContext2D.webkitPutImageDataHD */
+  /// @domName CanvasRenderingContext2D.webkitPutImageDataHD; @docsEditable true
   void webkitPutImageDataHD(ImageData imagedata, num dx, num dy, [num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight]) {
     if (!?dirtyX &&
         !?dirtyY &&
@@ -4685,7 +5069,7 @@
     var imagedata_2 = _convertDartToNative_ImageData(imagedata);
     _webkitPutImageDataHD_2(imagedata_2, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
     return;
-    throw const Exception("Incorrect number or type of arguments");
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
   void _webkitPutImageDataHD_1(imagedata, dx, dy) native "webkitPutImageDataHD";
   void _webkitPutImageDataHD_2(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) native "webkitPutImageDataHD";
@@ -4732,7 +5116,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ChannelMergerNode
+/// @domName ChannelMergerNode; @docsEditable true
 class ChannelMergerNode extends AudioNode native "*ChannelMergerNode" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4740,7 +5124,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ChannelSplitterNode
+/// @domName ChannelSplitterNode; @docsEditable true
 class ChannelSplitterNode extends AudioNode native "*ChannelSplitterNode" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4748,31 +5132,31 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CharacterData
+/// @domName CharacterData; @docsEditable true
 class CharacterData extends Node native "*CharacterData" {
 
-  /** @domName CharacterData.data */
+  /// @domName CharacterData.data; @docsEditable true
   String data;
 
-  /** @domName CharacterData.length */
+  /// @domName CharacterData.length; @docsEditable true
   final int length;
 
-  /** @domName CharacterData.appendData */
+  /// @domName CharacterData.appendData; @docsEditable true
   void appendData(String data) native;
 
-  /** @domName CharacterData.deleteData */
+  /// @domName CharacterData.deleteData; @docsEditable true
   void deleteData(int offset, int length) native;
 
-  /** @domName CharacterData.insertData */
+  /// @domName CharacterData.insertData; @docsEditable true
   void insertData(int offset, String data) native;
 
-  /** @domName CharacterData.remove */
+  /// @domName CharacterData.remove; @docsEditable true
   void remove() native;
 
-  /** @domName CharacterData.replaceData */
+  /// @domName CharacterData.replaceData; @docsEditable true
   void replaceData(int offset, int length, String data) native;
 
-  /** @domName CharacterData.substringData */
+  /// @domName CharacterData.substringData; @docsEditable true
   String substringData(int offset, int length) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4780,25 +5164,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ClientRect
+/// @domName ClientRect; @docsEditable true
 class ClientRect native "*ClientRect" {
 
-  /** @domName ClientRect.bottom */
+  /// @domName ClientRect.bottom; @docsEditable true
   final num bottom;
 
-  /** @domName ClientRect.height */
+  /// @domName ClientRect.height; @docsEditable true
   final num height;
 
-  /** @domName ClientRect.left */
+  /// @domName ClientRect.left; @docsEditable true
   final num left;
 
-  /** @domName ClientRect.right */
+  /// @domName ClientRect.right; @docsEditable true
   final num right;
 
-  /** @domName ClientRect.top */
+  /// @domName ClientRect.top; @docsEditable true
   final num top;
 
-  /** @domName ClientRect.width */
+  /// @domName ClientRect.width; @docsEditable true
   final num width;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4806,34 +5190,35 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Clipboard
+/// @domName Clipboard; @docsEditable true
 class Clipboard native "*Clipboard" {
 
-  /** @domName Clipboard.dropEffect */
+  /// @domName Clipboard.dropEffect; @docsEditable true
   String dropEffect;
 
-  /** @domName Clipboard.effectAllowed */
+  /// @domName Clipboard.effectAllowed; @docsEditable true
   String effectAllowed;
 
-  /** @domName Clipboard.files */
+  /// @domName Clipboard.files; @docsEditable true
+  @Returns('_FileList') @Creates('_FileList')
   final List<File> files;
 
-  /** @domName Clipboard.items */
+  /// @domName Clipboard.items; @docsEditable true
   final DataTransferItemList items;
 
-  /** @domName Clipboard.types */
+  /// @domName Clipboard.types; @docsEditable true
   final List types;
 
-  /** @domName Clipboard.clearData */
+  /// @domName Clipboard.clearData; @docsEditable true
   void clearData([String type]) native;
 
-  /** @domName Clipboard.getData */
+  /// @domName Clipboard.getData; @docsEditable true
   String getData(String type) native;
 
-  /** @domName Clipboard.setData */
+  /// @domName Clipboard.setData; @docsEditable true
   bool setData(String type, String data) native;
 
-  /** @domName Clipboard.setDragImage */
+  /// @domName Clipboard.setDragImage; @docsEditable true
   void setDragImage(ImageElement image, int x, int y) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4841,16 +5226,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CloseEvent
+/// @domName CloseEvent; @docsEditable true
 class CloseEvent extends Event native "*CloseEvent" {
 
-  /** @domName CloseEvent.code */
+  /// @domName CloseEvent.code; @docsEditable true
   final int code;
 
-  /** @domName CloseEvent.reason */
+  /// @domName CloseEvent.reason; @docsEditable true
   final String reason;
 
-  /** @domName CloseEvent.wasClean */
+  /// @domName CloseEvent.wasClean; @docsEditable true
   final bool wasClean;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4858,7 +5243,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Comment
+/// @domName Comment; @docsEditable true
 class Comment extends CharacterData native "*Comment" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4866,13 +5251,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CompositionEvent
+/// @domName CompositionEvent; @docsEditable true
 class CompositionEvent extends UIEvent native "*CompositionEvent" {
 
-  /** @domName CompositionEvent.data */
+  /// @domName CompositionEvent.data; @docsEditable true
   final String data;
 
-  /** @domName CompositionEvent.initCompositionEvent */
+  /// @domName CompositionEvent.initCompositionEvent; @docsEditable true
   void initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4884,67 +5269,67 @@
     // Console is sometimes a singleton bag-of-properties without a prototype.
     native "=(typeof console == 'undefined' ? {} : console)" {
 
-  /** @domName Console.memory */
+  /// @domName Console.memory; @docsEditable true
   final MemoryInfo memory;
 
-  /** @domName Console.profiles */
+  /// @domName Console.profiles; @docsEditable true
   final List<ScriptProfile> profiles;
 
-  /** @domName Console.assertCondition */
+  /// @domName Console.assertCondition; @docsEditable true
   void assertCondition(bool condition, Object arg) native;
 
-  /** @domName Console.count */
+  /// @domName Console.count; @docsEditable true
   void count(Object arg) native;
 
-  /** @domName Console.debug */
+  /// @domName Console.debug; @docsEditable true
   void debug(Object arg) native;
 
-  /** @domName Console.dir */
+  /// @domName Console.dir; @docsEditable true
   void dir(Object arg) native;
 
-  /** @domName Console.dirxml */
+  /// @domName Console.dirxml; @docsEditable true
   void dirxml(Object arg) native;
 
-  /** @domName Console.error */
+  /// @domName Console.error; @docsEditable true
   void error(Object arg) native;
 
-  /** @domName Console.group */
+  /// @domName Console.group; @docsEditable true
   void group(Object arg) native;
 
-  /** @domName Console.groupCollapsed */
+  /// @domName Console.groupCollapsed; @docsEditable true
   void groupCollapsed(Object arg) native;
 
-  /** @domName Console.groupEnd */
+  /// @domName Console.groupEnd; @docsEditable true
   void groupEnd() native;
 
-  /** @domName Console.info */
+  /// @domName Console.info; @docsEditable true
   void info(Object arg) native;
 
-  /** @domName Console.log */
+  /// @domName Console.log; @docsEditable true
   void log(Object arg) native;
 
-  /** @domName Console.markTimeline */
+  /// @domName Console.markTimeline; @docsEditable true
   void markTimeline(Object arg) native;
 
-  /** @domName Console.profile */
+  /// @domName Console.profile; @docsEditable true
   void profile(String title) native;
 
-  /** @domName Console.profileEnd */
+  /// @domName Console.profileEnd; @docsEditable true
   void profileEnd(String title) native;
 
-  /** @domName Console.time */
+  /// @domName Console.time; @docsEditable true
   void time(String title) native;
 
-  /** @domName Console.timeEnd */
+  /// @domName Console.timeEnd; @docsEditable true
   void timeEnd(String title, Object arg) native;
 
-  /** @domName Console.timeStamp */
+  /// @domName Console.timeStamp; @docsEditable true
   void timeStamp(Object arg) native;
 
-  /** @domName Console.trace */
+  /// @domName Console.trace; @docsEditable true
   void trace(Object arg) native;
 
-  /** @domName Console.warn */
+  /// @domName Console.warn; @docsEditable true
   void warn(Object arg) native;
 
 }
@@ -4953,18 +5338,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLContentElement
+/// @domName HTMLContentElement; @docsEditable true
 class ContentElement extends Element implements Element native "*HTMLContentElement" {
 
-  factory ContentElement() => _Elements.createContentElement();
+  factory ContentElement() => document.$dom_createElement("content");
 
-  /** @domName HTMLContentElement.resetStyleInheritance */
+  /// @domName HTMLContentElement.resetStyleInheritance; @docsEditable true
   bool resetStyleInheritance;
 
-  /** @domName HTMLContentElement.select */
+  /// @domName HTMLContentElement.select; @docsEditable true
   String select;
 
-  /** @domName HTMLContentElement.getDistributedNodes */
+  /// @domName HTMLContentElement.getDistributedNodes; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   List<Node> getDistributedNodes() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4972,13 +5358,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ConvolverNode
+/// @domName ConvolverNode; @docsEditable true
 class ConvolverNode extends AudioNode native "*ConvolverNode" {
 
-  /** @domName ConvolverNode.buffer */
+  /// @domName ConvolverNode.buffer; @docsEditable true
   AudioBuffer buffer;
 
-  /** @domName ConvolverNode.normalize */
+  /// @domName ConvolverNode.normalize; @docsEditable true
   bool normalize;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4986,28 +5372,28 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Coordinates
+/// @domName Coordinates; @docsEditable true
 class Coordinates native "*Coordinates" {
 
-  /** @domName Coordinates.accuracy */
+  /// @domName Coordinates.accuracy; @docsEditable true
   final num accuracy;
 
-  /** @domName Coordinates.altitude */
+  /// @domName Coordinates.altitude; @docsEditable true
   final num altitude;
 
-  /** @domName Coordinates.altitudeAccuracy */
+  /// @domName Coordinates.altitudeAccuracy; @docsEditable true
   final num altitudeAccuracy;
 
-  /** @domName Coordinates.heading */
+  /// @domName Coordinates.heading; @docsEditable true
   final num heading;
 
-  /** @domName Coordinates.latitude */
+  /// @domName Coordinates.latitude; @docsEditable true
   final num latitude;
 
-  /** @domName Coordinates.longitude */
+  /// @domName Coordinates.longitude; @docsEditable true
   final num longitude;
 
-  /** @domName Coordinates.speed */
+  /// @domName Coordinates.speed; @docsEditable true
   final num speed;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5015,16 +5401,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Counter
+/// @domName Counter; @docsEditable true
 class Counter native "*Counter" {
 
-  /** @domName Counter.identifier */
+  /// @domName Counter.identifier; @docsEditable true
   final String identifier;
 
-  /** @domName Counter.listStyle */
+  /// @domName Counter.listStyle; @docsEditable true
   final String listStyle;
 
-  /** @domName Counter.separator */
+  /// @domName Counter.separator; @docsEditable true
   final String separator;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5032,10 +5418,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Crypto
+/// @domName Crypto; @docsEditable true
 class Crypto native "*Crypto" {
 
-  /** @domName Crypto.getRandomValues */
+  /// @domName Crypto.getRandomValues; @docsEditable true
   void getRandomValues(ArrayBufferView array) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5050,10 +5436,10 @@
       Object detail]) => _CustomEventFactoryProvider.createCustomEvent(
       type, canBubble, cancelable, detail);
 
-  /** @domName CustomEvent.detail */
+  /// @domName CustomEvent.detail; @docsEditable true
   final Object detail;
 
-  /** @domName CustomEvent.initCustomEvent */
+  /// @domName CustomEvent.initCustomEvent; @docsEditable true
   void $dom_initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg) native "initCustomEvent";
 
 }
@@ -5062,12 +5448,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLDListElement
+/// @domName HTMLDListElement; @docsEditable true
 class DListElement extends Element implements Element native "*HTMLDListElement" {
 
-  factory DListElement() => _Elements.createDListElement();
+  factory DListElement() => document.$dom_createElement("dl");
 
-  /** @domName HTMLDListElement.compact */
+  /// @domName HTMLDListElement.compact; @docsEditable true
   bool compact;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5075,12 +5461,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMApplicationCache
+/// @domName DOMApplicationCache; @docsEditable true
 class DOMApplicationCache extends EventTarget native "*DOMApplicationCache" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   DOMApplicationCacheEvents get on =>
     new DOMApplicationCacheEvents(this);
 
@@ -5096,25 +5480,25 @@
 
   static const int UPDATEREADY = 4;
 
-  /** @domName DOMApplicationCache.status */
+  /// @domName DOMApplicationCache.status; @docsEditable true
   final int status;
 
-  /** @domName DOMApplicationCache.abort */
+  /// @domName DOMApplicationCache.abort; @docsEditable true
   void abort() native;
 
-  /** @domName DOMApplicationCache.addEventListener */
+  /// @domName DOMApplicationCache.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName DOMApplicationCache.dispatchEvent */
+  /// @domName DOMApplicationCache.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName DOMApplicationCache.removeEventListener */
+  /// @domName DOMApplicationCache.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 
-  /** @domName DOMApplicationCache.swapCache */
+  /// @domName DOMApplicationCache.swapCache; @docsEditable true
   void swapCache() native;
 
-  /** @domName DOMApplicationCache.update */
+  /// @domName DOMApplicationCache.update; @docsEditable true
   void update() native;
 }
 
@@ -5142,10 +5526,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMError
+/// @domName DOMError; @docsEditable true
 class DOMError native "*DOMError" {
 
-  /** @domName DOMError.name */
+  /// @domName DOMError.name; @docsEditable true
   final String name;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5153,7 +5537,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMException
+/// @domName DOMException; @docsEditable true
 class DOMException native "*DOMException" {
 
   static const int ABORT_ERR = 20;
@@ -5206,16 +5590,16 @@
 
   static const int WRONG_DOCUMENT_ERR = 4;
 
-  /** @domName DOMException.code */
+  /// @domName DOMException.code; @docsEditable true
   final int code;
 
-  /** @domName DOMException.message */
+  /// @domName DOMException.message; @docsEditable true
   final String message;
 
-  /** @domName DOMException.name */
+  /// @domName DOMException.name; @docsEditable true
   final String name;
 
-  /** @domName DOMException.toString */
+  /// @domName DOMException.toString; @docsEditable true
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5223,13 +5607,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMFileSystem
+/// @domName DOMFileSystem; @docsEditable true
 class DOMFileSystem native "*DOMFileSystem" {
 
-  /** @domName DOMFileSystem.name */
+  /// @domName DOMFileSystem.name; @docsEditable true
   final String name;
 
-  /** @domName DOMFileSystem.root */
+  /// @domName DOMFileSystem.root; @docsEditable true
   final DirectoryEntry root;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5237,13 +5621,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMFileSystemSync
+/// @domName DOMFileSystemSync; @docsEditable true
 class DOMFileSystemSync native "*DOMFileSystemSync" {
 
-  /** @domName DOMFileSystemSync.name */
+  /// @domName DOMFileSystemSync.name; @docsEditable true
   final String name;
 
-  /** @domName DOMFileSystemSync.root */
+  /// @domName DOMFileSystemSync.root; @docsEditable true
   final DirectoryEntrySync root;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5251,22 +5635,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMImplementation
+/// @domName DOMImplementation; @docsEditable true
 class DOMImplementation native "*DOMImplementation" {
 
-  /** @domName DOMImplementation.createCSSStyleSheet */
+  /// @domName DOMImplementation.createCSSStyleSheet; @docsEditable true
   CSSStyleSheet createCSSStyleSheet(String title, String media) native;
 
-  /** @domName DOMImplementation.createDocument */
+  /// @domName DOMImplementation.createDocument; @docsEditable true
   Document createDocument(String namespaceURI, String qualifiedName, DocumentType doctype) native;
 
-  /** @domName DOMImplementation.createDocumentType */
+  /// @domName DOMImplementation.createDocumentType; @docsEditable true
   DocumentType createDocumentType(String qualifiedName, String publicId, String systemId) native;
 
-  /** @domName DOMImplementation.createHTMLDocument */
+  /// @domName DOMImplementation.createHTMLDocument; @docsEditable true
   HtmlDocument createHTMLDocument(String title) native;
 
-  /** @domName DOMImplementation.hasFeature */
+  /// @domName DOMImplementation.hasFeature; @docsEditable true
   bool hasFeature(String feature, String version) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5274,19 +5658,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MimeType
+/// @domName MimeType; @docsEditable true
 class DOMMimeType native "*MimeType" {
 
-  /** @domName MimeType.description */
+  /// @domName MimeType.description; @docsEditable true
   final String description;
 
-  /** @domName MimeType.enabledPlugin */
+  /// @domName MimeType.enabledPlugin; @docsEditable true
   final DOMPlugin enabledPlugin;
 
-  /** @domName MimeType.suffixes */
+  /// @domName MimeType.suffixes; @docsEditable true
   final String suffixes;
 
-  /** @domName MimeType.type */
+  /// @domName MimeType.type; @docsEditable true
   final String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5294,10 +5678,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MimeTypeArray
+/// @domName MimeTypeArray; @docsEditable true
 class DOMMimeTypeArray implements JavaScriptIndexingBehavior, List<DOMMimeType> native "*MimeTypeArray" {
 
-  /** @domName MimeTypeArray.length */
+  /// @domName MimeTypeArray.length; @docsEditable true
   final int length;
 
   DOMMimeType operator[](int index) => JS("DOMMimeType", "#[#]", this, index);
@@ -5360,6 +5744,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  DOMMimeType get first => this[0];
+
   DOMMimeType get last => this[length - 1];
 
   DOMMimeType removeLast() {
@@ -5383,10 +5769,10 @@
 
   // -- end List<DOMMimeType> mixins.
 
-  /** @domName MimeTypeArray.item */
+  /// @domName MimeTypeArray.item; @docsEditable true
   DOMMimeType item(int index) native;
 
-  /** @domName MimeTypeArray.namedItem */
+  /// @domName MimeTypeArray.namedItem; @docsEditable true
   DOMMimeType namedItem(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5394,12 +5780,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMParser
+/// @domName DOMParser; @docsEditable true
 class DOMParser native "*DOMParser" {
 
   factory DOMParser() => _DOMParserFactoryProvider.createDOMParser();
 
-  /** @domName DOMParser.parseFromString */
+  /// @domName DOMParser.parseFromString; @docsEditable true
   Document parseFromString(String str, String contentType) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5407,25 +5793,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Plugin
+/// @domName Plugin; @docsEditable true
 class DOMPlugin native "*Plugin" {
 
-  /** @domName Plugin.description */
+  /// @domName Plugin.description; @docsEditable true
   final String description;
 
-  /** @domName Plugin.filename */
+  /// @domName Plugin.filename; @docsEditable true
   final String filename;
 
-  /** @domName Plugin.length */
+  /// @domName Plugin.length; @docsEditable true
   final int length;
 
-  /** @domName Plugin.name */
+  /// @domName Plugin.name; @docsEditable true
   final String name;
 
-  /** @domName Plugin.item */
+  /// @domName Plugin.item; @docsEditable true
   DOMMimeType item(int index) native;
 
-  /** @domName Plugin.namedItem */
+  /// @domName Plugin.namedItem; @docsEditable true
   DOMMimeType namedItem(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5433,10 +5819,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName PluginArray
+/// @domName PluginArray; @docsEditable true
 class DOMPluginArray implements JavaScriptIndexingBehavior, List<DOMPlugin> native "*PluginArray" {
 
-  /** @domName PluginArray.length */
+  /// @domName PluginArray.length; @docsEditable true
   final int length;
 
   DOMPlugin operator[](int index) => JS("DOMPlugin", "#[#]", this, index);
@@ -5499,6 +5885,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  DOMPlugin get first => this[0];
+
   DOMPlugin get last => this[length - 1];
 
   DOMPlugin removeLast() {
@@ -5522,13 +5910,13 @@
 
   // -- end List<DOMPlugin> mixins.
 
-  /** @domName PluginArray.item */
+  /// @domName PluginArray.item; @docsEditable true
   DOMPlugin item(int index) native;
 
-  /** @domName PluginArray.namedItem */
+  /// @domName PluginArray.namedItem; @docsEditable true
   DOMPlugin namedItem(String name) native;
 
-  /** @domName PluginArray.refresh */
+  /// @domName PluginArray.refresh; @docsEditable true
   void refresh(bool reload) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5536,85 +5924,85 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Selection
+/// @domName Selection; @docsEditable true
 class DOMSelection native "*Selection" {
 
-  /** @domName Selection.anchorNode */
+  /// @domName Selection.anchorNode; @docsEditable true
   final Node anchorNode;
 
-  /** @domName Selection.anchorOffset */
+  /// @domName Selection.anchorOffset; @docsEditable true
   final int anchorOffset;
 
-  /** @domName Selection.baseNode */
+  /// @domName Selection.baseNode; @docsEditable true
   final Node baseNode;
 
-  /** @domName Selection.baseOffset */
+  /// @domName Selection.baseOffset; @docsEditable true
   final int baseOffset;
 
-  /** @domName Selection.extentNode */
+  /// @domName Selection.extentNode; @docsEditable true
   final Node extentNode;
 
-  /** @domName Selection.extentOffset */
+  /// @domName Selection.extentOffset; @docsEditable true
   final int extentOffset;
 
-  /** @domName Selection.focusNode */
+  /// @domName Selection.focusNode; @docsEditable true
   final Node focusNode;
 
-  /** @domName Selection.focusOffset */
+  /// @domName Selection.focusOffset; @docsEditable true
   final int focusOffset;
 
-  /** @domName Selection.isCollapsed */
+  /// @domName Selection.isCollapsed; @docsEditable true
   final bool isCollapsed;
 
-  /** @domName Selection.rangeCount */
+  /// @domName Selection.rangeCount; @docsEditable true
   final int rangeCount;
 
-  /** @domName Selection.type */
+  /// @domName Selection.type; @docsEditable true
   final String type;
 
-  /** @domName Selection.addRange */
+  /// @domName Selection.addRange; @docsEditable true
   void addRange(Range range) native;
 
-  /** @domName Selection.collapse */
+  /// @domName Selection.collapse; @docsEditable true
   void collapse(Node node, int index) native;
 
-  /** @domName Selection.collapseToEnd */
+  /// @domName Selection.collapseToEnd; @docsEditable true
   void collapseToEnd() native;
 
-  /** @domName Selection.collapseToStart */
+  /// @domName Selection.collapseToStart; @docsEditable true
   void collapseToStart() native;
 
-  /** @domName Selection.containsNode */
+  /// @domName Selection.containsNode; @docsEditable true
   bool containsNode(Node node, bool allowPartial) native;
 
-  /** @domName Selection.deleteFromDocument */
+  /// @domName Selection.deleteFromDocument; @docsEditable true
   void deleteFromDocument() native;
 
-  /** @domName Selection.empty */
+  /// @domName Selection.empty; @docsEditable true
   void empty() native;
 
-  /** @domName Selection.extend */
+  /// @domName Selection.extend; @docsEditable true
   void extend(Node node, int offset) native;
 
-  /** @domName Selection.getRangeAt */
+  /// @domName Selection.getRangeAt; @docsEditable true
   Range getRangeAt(int index) native;
 
-  /** @domName Selection.modify */
+  /// @domName Selection.modify; @docsEditable true
   void modify(String alter, String direction, String granularity) native;
 
-  /** @domName Selection.removeAllRanges */
+  /// @domName Selection.removeAllRanges; @docsEditable true
   void removeAllRanges() native;
 
-  /** @domName Selection.selectAllChildren */
+  /// @domName Selection.selectAllChildren; @docsEditable true
   void selectAllChildren(Node node) native;
 
-  /** @domName Selection.setBaseAndExtent */
+  /// @domName Selection.setBaseAndExtent; @docsEditable true
   void setBaseAndExtent(Node baseNode, int baseOffset, Node extentNode, int extentOffset) native;
 
-  /** @domName Selection.setPosition */
+  /// @domName Selection.setPosition; @docsEditable true
   void setPosition(Node node, int offset) native;
 
-  /** @domName Selection.toString */
+  /// @domName Selection.toString; @docsEditable true
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5622,10 +6010,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMSettableTokenList
+/// @domName DOMSettableTokenList; @docsEditable true
 class DOMSettableTokenList extends DOMTokenList native "*DOMSettableTokenList" {
 
-  /** @domName DOMSettableTokenList.value */
+  /// @domName DOMSettableTokenList.value; @docsEditable true
   String value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5641,22 +6029,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMTokenList
+/// @domName DOMTokenList; @docsEditable true
 class DOMTokenList native "*DOMTokenList" {
 
-  /** @domName DOMTokenList.length */
+  /// @domName DOMTokenList.length; @docsEditable true
   final int length;
 
-  /** @domName DOMTokenList.contains */
+  /// @domName DOMTokenList.contains; @docsEditable true
   bool contains(String token) native;
 
-  /** @domName DOMTokenList.item */
+  /// @domName DOMTokenList.item; @docsEditable true
   String item(int index) native;
 
-  /** @domName DOMTokenList.toString */
+  /// @domName DOMTokenList.toString; @docsEditable true
   String toString() native;
 
-  /** @domName DOMTokenList.toggle */
+  /// @domName DOMTokenList.toggle; @docsEditable true
   bool toggle(String token, [bool force]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5664,12 +6052,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLDataListElement
+/// @domName HTMLDataListElement; @docsEditable true
 class DataListElement extends Element implements Element native "*HTMLDataListElement" {
 
-  factory DataListElement() => _Elements.createDataListElement();
+  factory DataListElement() => document.$dom_createElement("datalist");
 
-  /** @domName HTMLDataListElement.options */
+  /// @domName HTMLDataListElement.options; @docsEditable true
   final HTMLCollection options;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5677,22 +6065,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DataTransferItem
+/// @domName DataTransferItem; @docsEditable true
 class DataTransferItem native "*DataTransferItem" {
 
-  /** @domName DataTransferItem.kind */
+  /// @domName DataTransferItem.kind; @docsEditable true
   final String kind;
 
-  /** @domName DataTransferItem.type */
+  /// @domName DataTransferItem.type; @docsEditable true
   final String type;
 
-  /** @domName DataTransferItem.getAsFile */
+  /// @domName DataTransferItem.getAsFile; @docsEditable true
   Blob getAsFile() native;
 
-  /** @domName DataTransferItem.getAsString */
+  /// @domName DataTransferItem.getAsString; @docsEditable true
   void getAsString([StringCallback callback]) native;
 
-  /** @domName DataTransferItem.webkitGetAsEntry */
+  /// @domName DataTransferItem.webkitGetAsEntry; @docsEditable true
   Entry webkitGetAsEntry() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5700,19 +6088,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DataTransferItemList
+/// @domName DataTransferItemList; @docsEditable true
 class DataTransferItemList native "*DataTransferItemList" {
 
-  /** @domName DataTransferItemList.length */
+  /// @domName DataTransferItemList.length; @docsEditable true
   final int length;
 
-  /** @domName DataTransferItemList.add */
+  /// @domName DataTransferItemList.add; @docsEditable true
   void add(data_OR_file, [String type]) native;
 
-  /** @domName DataTransferItemList.clear */
+  /// @domName DataTransferItemList.clear; @docsEditable true
   void clear() native;
 
-  /** @domName DataTransferItemList.item */
+  /// @domName DataTransferItemList.item; @docsEditable true
   DataTransferItem item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5720,7 +6108,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DataView
+/// @domName DataView; @docsEditable true
 class DataView extends ArrayBufferView native "*DataView" {
 
   factory DataView(ArrayBuffer buffer, [int byteOffset, int byteLength]) {
@@ -5733,52 +6121,52 @@
     return _DataViewFactoryProvider.createDataView(buffer, byteOffset, byteLength);
   }
 
-  /** @domName DataView.getFloat32 */
+  /// @domName DataView.getFloat32; @docsEditable true
   num getFloat32(int byteOffset, {bool littleEndian}) native;
 
-  /** @domName DataView.getFloat64 */
+  /// @domName DataView.getFloat64; @docsEditable true
   num getFloat64(int byteOffset, {bool littleEndian}) native;
 
-  /** @domName DataView.getInt16 */
+  /// @domName DataView.getInt16; @docsEditable true
   int getInt16(int byteOffset, {bool littleEndian}) native;
 
-  /** @domName DataView.getInt32 */
+  /// @domName DataView.getInt32; @docsEditable true
   int getInt32(int byteOffset, {bool littleEndian}) native;
 
-  /** @domName DataView.getInt8 */
+  /// @domName DataView.getInt8; @docsEditable true
   int getInt8(int byteOffset) native;
 
-  /** @domName DataView.getUint16 */
+  /// @domName DataView.getUint16; @docsEditable true
   int getUint16(int byteOffset, {bool littleEndian}) native;
 
-  /** @domName DataView.getUint32 */
+  /// @domName DataView.getUint32; @docsEditable true
   int getUint32(int byteOffset, {bool littleEndian}) native;
 
-  /** @domName DataView.getUint8 */
+  /// @domName DataView.getUint8; @docsEditable true
   int getUint8(int byteOffset) native;
 
-  /** @domName DataView.setFloat32 */
+  /// @domName DataView.setFloat32; @docsEditable true
   void setFloat32(int byteOffset, num value, {bool littleEndian}) native;
 
-  /** @domName DataView.setFloat64 */
+  /// @domName DataView.setFloat64; @docsEditable true
   void setFloat64(int byteOffset, num value, {bool littleEndian}) native;
 
-  /** @domName DataView.setInt16 */
+  /// @domName DataView.setInt16; @docsEditable true
   void setInt16(int byteOffset, int value, {bool littleEndian}) native;
 
-  /** @domName DataView.setInt32 */
+  /// @domName DataView.setInt32; @docsEditable true
   void setInt32(int byteOffset, int value, {bool littleEndian}) native;
 
-  /** @domName DataView.setInt8 */
+  /// @domName DataView.setInt8; @docsEditable true
   void setInt8(int byteOffset, int value) native;
 
-  /** @domName DataView.setUint16 */
+  /// @domName DataView.setUint16; @docsEditable true
   void setUint16(int byteOffset, int value, {bool littleEndian}) native;
 
-  /** @domName DataView.setUint32 */
+  /// @domName DataView.setUint32; @docsEditable true
   void setUint32(int byteOffset, int value, {bool littleEndian}) native;
 
-  /** @domName DataView.setUint8 */
+  /// @domName DataView.setUint8; @docsEditable true
   void setUint8(int byteOffset, int value) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5786,19 +6174,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Database
+/// @domName Database; @docsEditable true
 class Database native "*Database" {
 
-  /** @domName Database.version */
+  /// @domName Database.version; @docsEditable true
   final String version;
 
-  /** @domName Database.changeVersion */
+  /// @domName Database.changeVersion; @docsEditable true
   void changeVersion(String oldVersion, String newVersion, [SQLTransactionCallback callback, SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]) native;
 
-  /** @domName Database.readTransaction */
+  /// @domName Database.readTransaction; @docsEditable true
   void readTransaction(SQLTransactionCallback callback, [SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]) native;
 
-  /** @domName Database.transaction */
+  /// @domName Database.transaction; @docsEditable true
   void transaction(SQLTransactionCallback callback, [SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5814,22 +6202,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DatabaseSync
+/// @domName DatabaseSync; @docsEditable true
 class DatabaseSync native "*DatabaseSync" {
 
-  /** @domName DatabaseSync.lastErrorMessage */
+  /// @domName DatabaseSync.lastErrorMessage; @docsEditable true
   final String lastErrorMessage;
 
-  /** @domName DatabaseSync.version */
+  /// @domName DatabaseSync.version; @docsEditable true
   final String version;
 
-  /** @domName DatabaseSync.changeVersion */
+  /// @domName DatabaseSync.changeVersion; @docsEditable true
   void changeVersion(String oldVersion, String newVersion, [SQLTransactionSyncCallback callback]) native;
 
-  /** @domName DatabaseSync.readTransaction */
+  /// @domName DatabaseSync.readTransaction; @docsEditable true
   void readTransaction(SQLTransactionSyncCallback callback) native;
 
-  /** @domName DatabaseSync.transaction */
+  /// @domName DatabaseSync.transaction; @docsEditable true
   void transaction(SQLTransactionSyncCallback callback) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5837,16 +6225,14 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DedicatedWorkerContext
+/// @domName DedicatedWorkerContext; @docsEditable true
 class DedicatedWorkerContext extends WorkerContext native "*DedicatedWorkerContext" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   DedicatedWorkerContextEvents get on =>
     new DedicatedWorkerContextEvents(this);
 
-  /** @domName DedicatedWorkerContext.postMessage */
+  /// @domName DedicatedWorkerContext.postMessage; @docsEditable true
   void postMessage(/*any*/ message, [List messagePorts]) {
     if (?messagePorts) {
       var message_1 = _convertDartToNative_SerializedScriptValue(message);
@@ -5871,10 +6257,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DelayNode
+/// @domName DelayNode; @docsEditable true
 class DelayNode extends AudioNode native "*DelayNode" {
 
-  /** @domName DelayNode.delayTime */
+  /// @domName DelayNode.delayTime; @docsEditable true
   final AudioParam delayTime;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5882,12 +6268,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLDetailsElement
+/// @domName HTMLDetailsElement; @docsEditable true
 class DetailsElement extends Element implements Element native "*HTMLDetailsElement" {
 
-  factory DetailsElement() => _Elements.createDetailsElement();
+  factory DetailsElement() => document.$dom_createElement("details");
 
-  /** @domName HTMLDetailsElement.open */
+  /// @domName HTMLDetailsElement.open; @docsEditable true
   bool open;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5895,10 +6281,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DeviceMotionEvent
+/// @domName DeviceMotionEvent; @docsEditable true
 class DeviceMotionEvent extends Event native "*DeviceMotionEvent" {
 
-  /** @domName DeviceMotionEvent.interval */
+  /// @domName DeviceMotionEvent.interval; @docsEditable true
   final num interval;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5906,22 +6292,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DeviceOrientationEvent
+/// @domName DeviceOrientationEvent; @docsEditable true
 class DeviceOrientationEvent extends Event native "*DeviceOrientationEvent" {
 
-  /** @domName DeviceOrientationEvent.absolute */
+  /// @domName DeviceOrientationEvent.absolute; @docsEditable true
   final bool absolute;
 
-  /** @domName DeviceOrientationEvent.alpha */
+  /// @domName DeviceOrientationEvent.alpha; @docsEditable true
   final num alpha;
 
-  /** @domName DeviceOrientationEvent.beta */
+  /// @domName DeviceOrientationEvent.beta; @docsEditable true
   final num beta;
 
-  /** @domName DeviceOrientationEvent.gamma */
+  /// @domName DeviceOrientationEvent.gamma; @docsEditable true
   final num gamma;
 
-  /** @domName DeviceOrientationEvent.initDeviceOrientationEvent */
+  /// @domName DeviceOrientationEvent.initDeviceOrientationEvent; @docsEditable true
   void initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5929,10 +6315,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLDirectoryElement
+/// @domName HTMLDirectoryElement; @docsEditable true
 class DirectoryElement extends Element implements Element native "*HTMLDirectoryElement" {
 
-  /** @domName HTMLDirectoryElement.compact */
+  /// @domName HTMLDirectoryElement.compact; @docsEditable true
   bool compact;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5940,13 +6326,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DirectoryEntry
+/// @domName DirectoryEntry; @docsEditable true
 class DirectoryEntry extends Entry native "*DirectoryEntry" {
 
-  /** @domName DirectoryEntry.createReader */
+  /// @domName DirectoryEntry.createReader; @docsEditable true
   DirectoryReader createReader() native;
 
-  /** @domName DirectoryEntry.getDirectory */
+  /// @domName DirectoryEntry.getDirectory; @docsEditable true
   void getDirectory(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback}) {
     if (?errorCallback) {
       var options_1 = _convertDartToNative_Dictionary(options);
@@ -5971,7 +6357,7 @@
   void _getDirectory_3(path, options) native "getDirectory";
   void _getDirectory_4(path) native "getDirectory";
 
-  /** @domName DirectoryEntry.getFile */
+  /// @domName DirectoryEntry.getFile; @docsEditable true
   void getFile(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback}) {
     if (?errorCallback) {
       var options_1 = _convertDartToNative_Dictionary(options);
@@ -5996,7 +6382,7 @@
   void _getFile_3(path, options) native "getFile";
   void _getFile_4(path) native "getFile";
 
-  /** @domName DirectoryEntry.removeRecursively */
+  /// @domName DirectoryEntry.removeRecursively; @docsEditable true
   void removeRecursively(VoidCallback successCallback, [ErrorCallback errorCallback]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6004,27 +6390,27 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DirectoryEntrySync
+/// @domName DirectoryEntrySync; @docsEditable true
 class DirectoryEntrySync extends EntrySync native "*DirectoryEntrySync" {
 
-  /** @domName DirectoryEntrySync.createReader */
+  /// @domName DirectoryEntrySync.createReader; @docsEditable true
   DirectoryReaderSync createReader() native;
 
-  /** @domName DirectoryEntrySync.getDirectory */
+  /// @domName DirectoryEntrySync.getDirectory; @docsEditable true
   DirectoryEntrySync getDirectory(String path, Map flags) {
     var flags_1 = _convertDartToNative_Dictionary(flags);
     return _getDirectory_1(path, flags_1);
   }
   DirectoryEntrySync _getDirectory_1(path, flags) native "getDirectory";
 
-  /** @domName DirectoryEntrySync.getFile */
+  /// @domName DirectoryEntrySync.getFile; @docsEditable true
   FileEntrySync getFile(String path, Map flags) {
     var flags_1 = _convertDartToNative_Dictionary(flags);
     return _getFile_1(path, flags_1);
   }
   FileEntrySync _getFile_1(path, flags) native "getFile";
 
-  /** @domName DirectoryEntrySync.removeRecursively */
+  /// @domName DirectoryEntrySync.removeRecursively; @docsEditable true
   void removeRecursively() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6032,10 +6418,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DirectoryReader
+/// @domName DirectoryReader; @docsEditable true
 class DirectoryReader native "*DirectoryReader" {
 
-  /** @domName DirectoryReader.readEntries */
+  /// @domName DirectoryReader.readEntries; @docsEditable true
   void readEntries(EntriesCallback successCallback, [ErrorCallback errorCallback]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6043,10 +6429,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DirectoryReaderSync
+/// @domName DirectoryReaderSync; @docsEditable true
 class DirectoryReaderSync native "*DirectoryReaderSync" {
 
-  /** @domName DirectoryReaderSync.readEntries */
+  /// @domName DirectoryReaderSync.readEntries; @docsEditable true
+  @Returns('_EntryArraySync') @Creates('_EntryArraySync')
   List<EntrySync> readEntries() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6054,10 +6441,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLDivElement
+/// @domName HTMLDivElement; @docsEditable true
 class DivElement extends Element implements Element native "*HTMLDivElement" {
 
-  factory DivElement() => _Elements.createDivElement();
+  factory DivElement() => document.$dom_createElement("div");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -6068,169 +6455,171 @@
 {
 
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   DocumentEvents get on =>
     new DocumentEvents(this);
 
-  /** @domName Document.body */
+  /// @domName Document.body; @docsEditable true
   Element get $dom_body => JS("Element", "#.body", this);
 
-  /** @domName Document.body */
+  /// @domName Document.body; @docsEditable true
   void set $dom_body(Element value) {
     JS("void", "#.body = #", this, value);
   }
 
-  /** @domName Document.charset */
+  /// @domName Document.charset; @docsEditable true
   String charset;
 
-  /** @domName Document.cookie */
+  /// @domName Document.cookie; @docsEditable true
   String cookie;
 
-  /** @domName Document.defaultView */
+  /// @domName Document.defaultView; @docsEditable true
   Window get window => _convertNativeToDart_Window(this._window);
   dynamic get _window => JS("dynamic", "#.defaultView", this);
 
-  /** @domName Document.documentElement */
+  /// @domName Document.documentElement; @docsEditable true
   final Element documentElement;
 
-  /** @domName Document.domain */
+  /// @domName Document.domain; @docsEditable true
   final String domain;
 
-  /** @domName Document.head */
+  /// @domName Document.head; @docsEditable true
   HeadElement get $dom_head => JS("HeadElement", "#.head", this);
 
-  /** @domName Document.implementation */
+  /// @domName Document.implementation; @docsEditable true
   final DOMImplementation implementation;
 
-  /** @domName Document.lastModified */
+  /// @domName Document.lastModified; @docsEditable true
   String get $dom_lastModified => JS("String", "#.lastModified", this);
 
-  /** @domName Document.preferredStylesheetSet */
+  /// @domName Document.preferredStylesheetSet; @docsEditable true
   final String preferredStylesheetSet;
 
-  /** @domName Document.readyState */
+  /// @domName Document.readyState; @docsEditable true
   final String readyState;
 
-  /** @domName Document.referrer */
+  /// @domName Document.referrer; @docsEditable true
   String get $dom_referrer => JS("String", "#.referrer", this);
 
-  /** @domName Document.selectedStylesheetSet */
+  /// @domName Document.selectedStylesheetSet; @docsEditable true
   String selectedStylesheetSet;
 
-  /** @domName Document.styleSheets */
-  List<StyleSheet> get $dom_styleSheets => JS("List<StyleSheet>", "#.styleSheets", this);
+  /// @domName Document.styleSheets; @docsEditable true
+  List<StyleSheet> get $dom_styleSheets => JS("_StyleSheetList", "#.styleSheets", this);
 
-  /** @domName Document.title */
+  /// @domName Document.title; @docsEditable true
   String get $dom_title => JS("String", "#.title", this);
 
-  /** @domName Document.title */
+  /// @domName Document.title; @docsEditable true
   void set $dom_title(String value) {
     JS("void", "#.title = #", this, value);
   }
 
-  /** @domName Document.webkitFullscreenElement */
+  /// @domName Document.webkitFullscreenElement; @docsEditable true
   Element get $dom_webkitFullscreenElement => JS("Element", "#.webkitFullscreenElement", this);
 
-  /** @domName Document.webkitFullscreenEnabled */
+  /// @domName Document.webkitFullscreenEnabled; @docsEditable true
   bool get $dom_webkitFullscreenEnabled => JS("bool", "#.webkitFullscreenEnabled", this);
 
-  /** @domName Document.webkitHidden */
+  /// @domName Document.webkitHidden; @docsEditable true
   bool get $dom_webkitHidden => JS("bool", "#.webkitHidden", this);
 
-  /** @domName Document.webkitIsFullScreen */
+  /// @domName Document.webkitIsFullScreen; @docsEditable true
   bool get $dom_webkitIsFullScreen => JS("bool", "#.webkitIsFullScreen", this);
 
-  /** @domName Document.webkitPointerLockElement */
+  /// @domName Document.webkitPointerLockElement; @docsEditable true
   Element get $dom_webkitPointerLockElement => JS("Element", "#.webkitPointerLockElement", this);
 
-  /** @domName Document.webkitVisibilityState */
+  /// @domName Document.webkitVisibilityState; @docsEditable true
   String get $dom_webkitVisibilityState => JS("String", "#.webkitVisibilityState", this);
 
-  /** @domName Document.caretRangeFromPoint */
+  /// @domName Document.caretRangeFromPoint; @docsEditable true
   Range $dom_caretRangeFromPoint(int x, int y) native "caretRangeFromPoint";
 
-  /** @domName Document.createCDATASection */
+  /// @domName Document.createCDATASection; @docsEditable true
   CDATASection createCDATASection(String data) native;
 
-  /** @domName Document.createDocumentFragment */
+  /// @domName Document.createDocumentFragment; @docsEditable true
   DocumentFragment createDocumentFragment() native;
 
-  /** @domName Document.createElement */
+  /// @domName Document.createElement; @docsEditable true
   Element $dom_createElement(String tagName) native "createElement";
 
-  /** @domName Document.createElementNS */
+  /// @domName Document.createElementNS; @docsEditable true
   Element $dom_createElementNS(String namespaceURI, String qualifiedName) native "createElementNS";
 
-  /** @domName Document.createEvent */
+  /// @domName Document.createEvent; @docsEditable true
   Event $dom_createEvent(String eventType) native "createEvent";
 
-  /** @domName Document.createRange */
+  /// @domName Document.createRange; @docsEditable true
   Range createRange() native;
 
-  /** @domName Document.createTextNode */
+  /// @domName Document.createTextNode; @docsEditable true
   Text $dom_createTextNode(String data) native "createTextNode";
 
-  /** @domName Document.createTouch */
+  /// @domName Document.createTouch; @docsEditable true
   Touch createTouch(LocalWindow window, EventTarget target, int identifier, int pageX, int pageY, int screenX, int screenY, int webkitRadiusX, int webkitRadiusY, num webkitRotationAngle, num webkitForce) {
     var target_1 = _convertDartToNative_EventTarget(target);
     return _createTouch_1(window, target_1, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce);
   }
   Touch _createTouch_1(LocalWindow window, target, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce) native "createTouch";
 
-  /** @domName Document.createTouchList */
+  /// @domName Document.createTouchList; @docsEditable true
   TouchList $dom_createTouchList() native "createTouchList";
 
-  /** @domName Document.elementFromPoint */
+  /// @domName Document.elementFromPoint; @docsEditable true
   Element $dom_elementFromPoint(int x, int y) native "elementFromPoint";
 
-  /** @domName Document.execCommand */
+  /// @domName Document.execCommand; @docsEditable true
   bool execCommand(String command, bool userInterface, String value) native;
 
-  /** @domName Document.getCSSCanvasContext */
+  /// @domName Document.getCSSCanvasContext; @docsEditable true
   CanvasRenderingContext getCSSCanvasContext(String contextId, String name, int width, int height) native;
 
-  /** @domName Document.getElementById */
+  /// @domName Document.getElementById; @docsEditable true
   Element $dom_getElementById(String elementId) native "getElementById";
 
-  /** @domName Document.getElementsByClassName */
+  /// @domName Document.getElementsByClassName; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   List<Node> $dom_getElementsByClassName(String tagname) native "getElementsByClassName";
 
-  /** @domName Document.getElementsByName */
+  /// @domName Document.getElementsByName; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   List<Node> $dom_getElementsByName(String elementName) native "getElementsByName";
 
-  /** @domName Document.getElementsByTagName */
+  /// @domName Document.getElementsByTagName; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   List<Node> $dom_getElementsByTagName(String tagname) native "getElementsByTagName";
 
-  /** @domName Document.queryCommandEnabled */
+  /// @domName Document.queryCommandEnabled; @docsEditable true
   bool queryCommandEnabled(String command) native;
 
-  /** @domName Document.queryCommandIndeterm */
+  /// @domName Document.queryCommandIndeterm; @docsEditable true
   bool queryCommandIndeterm(String command) native;
 
-  /** @domName Document.queryCommandState */
+  /// @domName Document.queryCommandState; @docsEditable true
   bool queryCommandState(String command) native;
 
-  /** @domName Document.queryCommandSupported */
+  /// @domName Document.queryCommandSupported; @docsEditable true
   bool queryCommandSupported(String command) native;
 
-  /** @domName Document.queryCommandValue */
+  /// @domName Document.queryCommandValue; @docsEditable true
   String queryCommandValue(String command) native;
 
-  /** @domName Document.querySelector */
+  /// @domName Document.querySelector; @docsEditable true
   Element $dom_querySelector(String selectors) native "querySelector";
 
-  /** @domName Document.querySelectorAll */
+  /// @domName Document.querySelectorAll; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   List<Node> $dom_querySelectorAll(String selectors) native "querySelectorAll";
 
-  /** @domName Document.webkitCancelFullScreen */
+  /// @domName Document.webkitCancelFullScreen; @docsEditable true
   void $dom_webkitCancelFullScreen() native "webkitCancelFullScreen";
 
-  /** @domName Document.webkitExitFullscreen */
+  /// @domName Document.webkitExitFullscreen; @docsEditable true
   void $dom_webkitExitFullscreen() native "webkitExitFullscreen";
 
-  /** @domName Document.webkitExitPointerLock */
+  /// @domName Document.webkitExitPointerLock; @docsEditable true
   void $dom_webkitExitPointerLock() native "webkitExitPointerLock";
 
   // TODO(jacobr): implement all Element methods not on Document.
@@ -6396,24 +6785,33 @@
       _DocumentFragmentFactoryProvider.createDocumentFragment_html(html);
 
   factory DocumentFragment.svg(String svgContent) =>
-      new _DocumentFragmentFactoryProvider.createDocumentFragment_svg(svgContent);
+      _DocumentFragmentFactoryProvider.createDocumentFragment_svg(svgContent);
 
-  List<Element> _elements;
-
-  List<Element> get elements {
-    if (_elements == null) {
-      _elements = new FilteredElementList(this);
-    }
-    return _elements;
-  }
+  List<Element> get elements => this.children;
 
   // TODO: The type of value should be Collection<Element>. See http://b/5392897
   void set elements(value) {
+    this.children = value;
+  }
+
+  // Native field is used only by Dart code so does not lead to instantiation
+  // of native classes
+  @Creates('Null')
+  List<Element> _children;
+
+  List<Element> get children {
+    if (_children == null) {
+      _children = new FilteredElementList(this);
+    }
+    return _children;
+  }
+
+  void set children(Collection<Element> value) {
     // Copy list first since we don't want liveness during iteration.
     List copy = new List.from(value);
-    final elements = this.elements;
-    elements.clear();
-    elements.addAll(copy);
+    var children = this.children;
+    children.clear();
+    children.addAll(copy);
   }
 
   Element query(String selectors) => $dom_querySelector(selectors);
@@ -6622,16 +7020,15 @@
   }
 
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   ElementEvents get on =>
     new ElementEvents(this);
 
-  /** @domName DocumentFragment.querySelector */
+  /// @domName DocumentFragment.querySelector; @docsEditable true
   Element $dom_querySelector(String selectors) native "querySelector";
 
-  /** @domName DocumentFragment.querySelectorAll */
+  /// @domName DocumentFragment.querySelectorAll; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   List<Node> $dom_querySelectorAll(String selectors) native "querySelectorAll";
 
 }
@@ -6640,28 +7037,28 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DocumentType
+/// @domName DocumentType; @docsEditable true
 class DocumentType extends Node native "*DocumentType" {
 
-  /** @domName DocumentType.entities */
+  /// @domName DocumentType.entities; @docsEditable true
   final NamedNodeMap entities;
 
-  /** @domName DocumentType.internalSubset */
+  /// @domName DocumentType.internalSubset; @docsEditable true
   final String internalSubset;
 
-  /** @domName DocumentType.name */
+  /// @domName DocumentType.name; @docsEditable true
   final String name;
 
-  /** @domName DocumentType.notations */
+  /// @domName DocumentType.notations; @docsEditable true
   final NamedNodeMap notations;
 
-  /** @domName DocumentType.publicId */
+  /// @domName DocumentType.publicId; @docsEditable true
   final String publicId;
 
-  /** @domName DocumentType.systemId */
+  /// @domName DocumentType.systemId; @docsEditable true
   final String systemId;
 
-  /** @domName DocumentType.remove */
+  /// @domName DocumentType.remove; @docsEditable true
   void remove() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6669,25 +7066,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DynamicsCompressorNode
+/// @domName DynamicsCompressorNode; @docsEditable true
 class DynamicsCompressorNode extends AudioNode native "*DynamicsCompressorNode" {
 
-  /** @domName DynamicsCompressorNode.attack */
+  /// @domName DynamicsCompressorNode.attack; @docsEditable true
   final AudioParam attack;
 
-  /** @domName DynamicsCompressorNode.knee */
+  /// @domName DynamicsCompressorNode.knee; @docsEditable true
   final AudioParam knee;
 
-  /** @domName DynamicsCompressorNode.ratio */
+  /// @domName DynamicsCompressorNode.ratio; @docsEditable true
   final AudioParam ratio;
 
-  /** @domName DynamicsCompressorNode.reduction */
+  /// @domName DynamicsCompressorNode.reduction; @docsEditable true
   final AudioParam reduction;
 
-  /** @domName DynamicsCompressorNode.release */
+  /// @domName DynamicsCompressorNode.release; @docsEditable true
   final AudioParam release;
 
-  /** @domName DynamicsCompressorNode.threshold */
+  /// @domName DynamicsCompressorNode.threshold; @docsEditable true
   final AudioParam threshold;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6695,7 +7092,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName EXTTextureFilterAnisotropic
+/// @domName EXTTextureFilterAnisotropic; @docsEditable true
 class EXTTextureFilterAnisotropic native "*EXTTextureFilterAnisotropic" {
 
   static const int MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF;
@@ -6848,6 +7245,11 @@
     return result;
   }
 
+  Element get first {
+    return _element.$dom_firstElementChild;
+  }
+
+
   Element get last {
     return _element.$dom_lastElementChild;
   }
@@ -6862,10 +7264,6 @@
 
   _FrozenElementList._wrap(this._nodeList);
 
-  Element get first {
-    return _nodeList[0];
-  }
-
   bool contains(Element element) {
     for (Element el in this) {
       if (el == element) return true;
@@ -6974,6 +7372,8 @@
     throw new UnsupportedError('');
   }
 
+  Element get first => _nodeList.first;
+
   Element get last => _nodeList.last;
 }
 
@@ -7001,16 +7401,7 @@
   bool get hasNext => _index < _list.length;
 }
 
-/**
- * All your attribute manipulation needs in one place.
- * Extends the regular Map interface by automatically coercing non-string
- * values to strings.
- */
-abstract class AttributeMap implements Map<String, String> {
-  void operator []=(String key, value);
-}
-
-class _ElementAttributeMap extends AttributeMap {
+class _ElementAttributeMap implements Map<String, String> {
 
   final Element _element;
 
@@ -7105,7 +7496,7 @@
  * Provides a Map abstraction on top of data-* attributes, similar to the
  * dataSet in the old DOM.
  */
-class _DataAttributeMap extends AttributeMap {
+class _DataAttributeMap implements Map<String, String> {
 
   final Map<String, String> $dom_attributes;
 
@@ -7218,7 +7609,7 @@
   String toString() => "($left, $top, $width, $height)";
 }
 
-class Element extends Node implements ElementTraversal native "*Element" {
+abstract class Element extends Node implements ElementTraversal native "*Element" {
 
   factory Element.html(String html) =>
       _ElementFactoryProvider.createElement_html(html);
@@ -7229,7 +7620,7 @@
    * @domName Element.hasAttribute, Element.getAttribute, Element.setAttribute,
    *   Element.removeAttribute
    */
-  _ElementAttributeMap get attributes => new _ElementAttributeMap(this);
+  Map<String, String> get attributes => new _ElementAttributeMap(this);
 
   void set attributes(Map<String, String> value) {
     Map<String, String> attributes = this.attributes;
@@ -7240,16 +7631,27 @@
   }
 
   void set elements(Collection<Element> value) {
-    final elements = this.elements;
-    elements.clear();
-    elements.addAll(value);
+    this.children = value;
   }
 
   /**
+   * Deprecated, use [children] instead.
+   */
+  List<Element> get elements => this.children;
+
+  /**
    * @domName childElementCount, firstElementChild, lastElementChild,
    *   children, Node.nodes.add
    */
-  List<Element> get elements => new _ChildrenElementList._wrap(this);
+  List<Element> get children => new _ChildrenElementList._wrap(this);
+
+  void set children(Collection<Element> value) {
+    // Copy list first since we don't want liveness during iteration.
+    List copy = new List.from(value);
+    var children = this.children;
+    children.clear();
+    children.addAll(copy);
+  }
 
   Element query(String selectors) => $dom_querySelector(selectors);
 
@@ -7315,6 +7717,7 @@
    * [wc]: http://dvcs.w3.org/hg/webcomponents/raw-file/tip/explainer/index.html
    * [x-tags]: http://x-tags.org/
    */
+  @Creates('Null')  // Set from Dart code; does not instantiate a native type.
   var xtag;
 
   // TODO(vsm): Implement noSuchMethod or similar for dart2js.
@@ -7377,188 +7780,190 @@
   }
 
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   ElementEvents get on =>
     new ElementEvents(this);
 
-  /** @domName HTMLElement.children */
+  /// @domName HTMLElement.children; @docsEditable true
   HTMLCollection get $dom_children => JS("HTMLCollection", "#.children", this);
 
-  /** @domName HTMLElement.contentEditable */
+  /// @domName HTMLElement.contentEditable; @docsEditable true
   String contentEditable;
 
-  /** @domName HTMLElement.dir */
+  /// @domName HTMLElement.dir; @docsEditable true
   String dir;
 
-  /** @domName HTMLElement.draggable */
+  /// @domName HTMLElement.draggable; @docsEditable true
   bool draggable;
 
-  /** @domName HTMLElement.hidden */
+  /// @domName HTMLElement.hidden; @docsEditable true
   bool hidden;
 
-  /** @domName HTMLElement.id */
+  /// @domName HTMLElement.id; @docsEditable true
   String id;
 
-  /** @domName HTMLElement.innerHTML */
+  /// @domName HTMLElement.innerHTML; @docsEditable true
   String innerHTML;
 
-  /** @domName HTMLElement.isContentEditable */
+  /// @domName HTMLElement.isContentEditable; @docsEditable true
   final bool isContentEditable;
 
-  /** @domName HTMLElement.lang */
+  /// @domName HTMLElement.lang; @docsEditable true
   String lang;
 
-  /** @domName HTMLElement.outerHTML */
+  /// @domName HTMLElement.outerHTML; @docsEditable true
   final String outerHTML;
 
-  /** @domName HTMLElement.spellcheck */
+  /// @domName HTMLElement.spellcheck; @docsEditable true
   bool spellcheck;
 
-  /** @domName HTMLElement.tabIndex */
+  /// @domName HTMLElement.tabIndex; @docsEditable true
   int tabIndex;
 
-  /** @domName HTMLElement.title */
+  /// @domName HTMLElement.title; @docsEditable true
   String title;
 
-  /** @domName HTMLElement.translate */
+  /// @domName HTMLElement.translate; @docsEditable true
   bool translate;
 
-  /** @domName HTMLElement.webkitdropzone */
+  /// @domName HTMLElement.webkitdropzone; @docsEditable true
   String webkitdropzone;
 
-  /** @domName HTMLElement.click */
+  /// @domName HTMLElement.click; @docsEditable true
   void click() native;
 
   static const int ALLOW_KEYBOARD_INPUT = 1;
 
-  /** @domName Element.childElementCount */
+  /// @domName Element.childElementCount; @docsEditable true
   int get $dom_childElementCount => JS("int", "#.childElementCount", this);
 
-  /** @domName Element.className */
+  /// @domName Element.className; @docsEditable true
   String get $dom_className => JS("String", "#.className", this);
 
-  /** @domName Element.className */
+  /// @domName Element.className; @docsEditable true
   void set $dom_className(String value) {
     JS("void", "#.className = #", this, value);
   }
 
-  /** @domName Element.clientHeight */
+  /// @domName Element.clientHeight; @docsEditable true
   final int clientHeight;
 
-  /** @domName Element.clientLeft */
+  /// @domName Element.clientLeft; @docsEditable true
   final int clientLeft;
 
-  /** @domName Element.clientTop */
+  /// @domName Element.clientTop; @docsEditable true
   final int clientTop;
 
-  /** @domName Element.clientWidth */
+  /// @domName Element.clientWidth; @docsEditable true
   final int clientWidth;
 
-  /** @domName Element.dataset */
+  /// @domName Element.dataset; @docsEditable true
   final Map<String, String> dataset;
 
-  /** @domName Element.firstElementChild */
+  /// @domName Element.firstElementChild; @docsEditable true
   Element get $dom_firstElementChild => JS("Element", "#.firstElementChild", this);
 
-  /** @domName Element.lastElementChild */
+  /// @domName Element.lastElementChild; @docsEditable true
   Element get $dom_lastElementChild => JS("Element", "#.lastElementChild", this);
 
-  /** @domName Element.nextElementSibling */
+  /// @domName Element.nextElementSibling; @docsEditable true
   final Element nextElementSibling;
 
-  /** @domName Element.offsetHeight */
+  /// @domName Element.offsetHeight; @docsEditable true
   final int offsetHeight;
 
-  /** @domName Element.offsetLeft */
+  /// @domName Element.offsetLeft; @docsEditable true
   final int offsetLeft;
 
-  /** @domName Element.offsetParent */
+  /// @domName Element.offsetParent; @docsEditable true
   final Element offsetParent;
 
-  /** @domName Element.offsetTop */
+  /// @domName Element.offsetTop; @docsEditable true
   final int offsetTop;
 
-  /** @domName Element.offsetWidth */
+  /// @domName Element.offsetWidth; @docsEditable true
   final int offsetWidth;
 
-  /** @domName Element.previousElementSibling */
+  /// @domName Element.previousElementSibling; @docsEditable true
   final Element previousElementSibling;
 
-  /** @domName Element.scrollHeight */
+  /// @domName Element.scrollHeight; @docsEditable true
   final int scrollHeight;
 
-  /** @domName Element.scrollLeft */
+  /// @domName Element.scrollLeft; @docsEditable true
   int scrollLeft;
 
-  /** @domName Element.scrollTop */
+  /// @domName Element.scrollTop; @docsEditable true
   int scrollTop;
 
-  /** @domName Element.scrollWidth */
+  /// @domName Element.scrollWidth; @docsEditable true
   final int scrollWidth;
 
-  /** @domName Element.style */
+  /// @domName Element.style; @docsEditable true
   final CSSStyleDeclaration style;
 
-  /** @domName Element.tagName */
+  /// @domName Element.tagName; @docsEditable true
   final String tagName;
 
-  /** @domName Element.blur */
+  /// @domName Element.blur; @docsEditable true
   void blur() native;
 
-  /** @domName Element.focus */
+  /// @domName Element.focus; @docsEditable true
   void focus() native;
 
-  /** @domName Element.getAttribute */
+  /// @domName Element.getAttribute; @docsEditable true
   String $dom_getAttribute(String name) native "getAttribute";
 
-  /** @domName Element.getBoundingClientRect */
+  /// @domName Element.getBoundingClientRect; @docsEditable true
   ClientRect getBoundingClientRect() native;
 
-  /** @domName Element.getClientRects */
+  /// @domName Element.getClientRects; @docsEditable true
+  @Returns('_ClientRectList') @Creates('_ClientRectList')
   List<ClientRect> getClientRects() native;
 
-  /** @domName Element.getElementsByClassName */
+  /// @domName Element.getElementsByClassName; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   List<Node> $dom_getElementsByClassName(String name) native "getElementsByClassName";
 
-  /** @domName Element.getElementsByTagName */
+  /// @domName Element.getElementsByTagName; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   List<Node> $dom_getElementsByTagName(String name) native "getElementsByTagName";
 
-  /** @domName Element.hasAttribute */
+  /// @domName Element.hasAttribute; @docsEditable true
   bool $dom_hasAttribute(String name) native "hasAttribute";
 
-  /** @domName Element.querySelector */
+  /// @domName Element.querySelector; @docsEditable true
   Element $dom_querySelector(String selectors) native "querySelector";
 
-  /** @domName Element.querySelectorAll */
+  /// @domName Element.querySelectorAll; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   List<Node> $dom_querySelectorAll(String selectors) native "querySelectorAll";
 
-  /** @domName Element.removeAttribute */
+  /// @domName Element.removeAttribute; @docsEditable true
   void $dom_removeAttribute(String name) native "removeAttribute";
 
-  /** @domName Element.scrollByLines */
+  /// @domName Element.scrollByLines; @docsEditable true
   void scrollByLines(int lines) native;
 
-  /** @domName Element.scrollByPages */
+  /// @domName Element.scrollByPages; @docsEditable true
   void scrollByPages(int pages) native;
 
-  /** @domName Element.scrollIntoViewIfNeeded */
+  /// @domName Element.scrollIntoViewIfNeeded; @docsEditable true
   void scrollIntoView([bool centerIfNeeded]) native "scrollIntoViewIfNeeded";
 
-  /** @domName Element.setAttribute */
+  /// @domName Element.setAttribute; @docsEditable true
   void $dom_setAttribute(String name, String value) native "setAttribute";
 
-  /** @domName Element.webkitMatchesSelector */
+  /// @domName Element.webkitMatchesSelector; @docsEditable true
   bool matchesSelector(String selectors) native "webkitMatchesSelector";
 
-  /** @domName Element.webkitRequestFullScreen */
+  /// @domName Element.webkitRequestFullScreen; @docsEditable true
   void webkitRequestFullScreen(int flags) native;
 
-  /** @domName Element.webkitRequestFullscreen */
+  /// @domName Element.webkitRequestFullscreen; @docsEditable true
   void webkitRequestFullscreen() native;
 
-  /** @domName Element.webkitRequestPointerLock */
+  /// @domName Element.webkitRequestPointerLock; @docsEditable true
   void webkitRequestPointerLock() native;
 
 }
@@ -7603,15 +8008,15 @@
     temp.innerHTML = html;
 
     Element element;
-    if (temp.elements.length == 1) {
-      element = temp.elements[0];
-    } else if (parentTag == 'html' && temp.elements.length == 2) {
+    if (temp.children.length == 1) {
+      element = temp.children[0];
+    } else if (parentTag == 'html' && temp.children.length == 2) {
       // Work around for edge case in WebKit and possibly other browsers where
       // both body and head elements are created even though the inner html
       // only contains a head or body element.
-      element = temp.elements[tag == 'head' ? 0 : 1];
+      element = temp.children[tag == 'head' ? 0 : 1];
     } else {
-      throw new ArgumentError('HTML had ${temp.elements.length} '
+      throw new ArgumentError('HTML had ${temp.children.length} '
           'top level elements but 1 expected');
     }
     element.remove();
@@ -7747,16 +8152,16 @@
 /// @domName ElementTimeControl
 abstract class ElementTimeControl {
 
-  /** @domName ElementTimeControl.beginElement */
+  /// @domName ElementTimeControl.beginElement; @docsEditable true
   void beginElement();
 
-  /** @domName ElementTimeControl.beginElementAt */
+  /// @domName ElementTimeControl.beginElementAt; @docsEditable true
   void beginElementAt(num offset);
 
-  /** @domName ElementTimeControl.endElement */
+  /// @domName ElementTimeControl.endElement; @docsEditable true
   void endElement();
 
-  /** @domName ElementTimeControl.endElementAt */
+  /// @domName ElementTimeControl.endElementAt; @docsEditable true
   void endElementAt(num offset);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7782,27 +8187,27 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLEmbedElement
+/// @domName HTMLEmbedElement; @docsEditable true
 class EmbedElement extends Element implements Element native "*HTMLEmbedElement" {
 
-  factory EmbedElement() => _Elements.createEmbedElement();
+  factory EmbedElement() => document.$dom_createElement("embed");
 
-  /** @domName HTMLEmbedElement.align */
+  /// @domName HTMLEmbedElement.align; @docsEditable true
   String align;
 
-  /** @domName HTMLEmbedElement.height */
+  /// @domName HTMLEmbedElement.height; @docsEditable true
   String height;
 
-  /** @domName HTMLEmbedElement.name */
+  /// @domName HTMLEmbedElement.name; @docsEditable true
   String name;
 
-  /** @domName HTMLEmbedElement.src */
+  /// @domName HTMLEmbedElement.src; @docsEditable true
   String src;
 
-  /** @domName HTMLEmbedElement.type */
+  /// @domName HTMLEmbedElement.type; @docsEditable true
   String type;
 
-  /** @domName HTMLEmbedElement.width */
+  /// @domName HTMLEmbedElement.width; @docsEditable true
   String width;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7810,7 +8215,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName EntityReference
+/// @domName EntityReference; @docsEditable true
 class EntityReference extends Node native "*EntityReference" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7826,40 +8231,40 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Entry
+/// @domName Entry; @docsEditable true
 class Entry native "*Entry" {
 
-  /** @domName Entry.filesystem */
+  /// @domName Entry.filesystem; @docsEditable true
   final DOMFileSystem filesystem;
 
-  /** @domName Entry.fullPath */
+  /// @domName Entry.fullPath; @docsEditable true
   final String fullPath;
 
-  /** @domName Entry.isDirectory */
+  /// @domName Entry.isDirectory; @docsEditable true
   final bool isDirectory;
 
-  /** @domName Entry.isFile */
+  /// @domName Entry.isFile; @docsEditable true
   final bool isFile;
 
-  /** @domName Entry.name */
+  /// @domName Entry.name; @docsEditable true
   final String name;
 
-  /** @domName Entry.copyTo */
+  /// @domName Entry.copyTo; @docsEditable true
   void copyTo(DirectoryEntry parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]) native;
 
-  /** @domName Entry.getMetadata */
+  /// @domName Entry.getMetadata; @docsEditable true
   void getMetadata(MetadataCallback successCallback, [ErrorCallback errorCallback]) native;
 
-  /** @domName Entry.getParent */
+  /// @domName Entry.getParent; @docsEditable true
   void getParent([EntryCallback successCallback, ErrorCallback errorCallback]) native;
 
-  /** @domName Entry.moveTo */
+  /// @domName Entry.moveTo; @docsEditable true
   void moveTo(DirectoryEntry parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]) native;
 
-  /** @domName Entry.remove */
+  /// @domName Entry.remove; @docsEditable true
   void remove(VoidCallback successCallback, [ErrorCallback errorCallback]) native;
 
-  /** @domName Entry.toURL */
+  /// @domName Entry.toURL; @docsEditable true
   String toURL() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7875,40 +8280,40 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName EntrySync
+/// @domName EntrySync; @docsEditable true
 class EntrySync native "*EntrySync" {
 
-  /** @domName EntrySync.filesystem */
+  /// @domName EntrySync.filesystem; @docsEditable true
   final DOMFileSystemSync filesystem;
 
-  /** @domName EntrySync.fullPath */
+  /// @domName EntrySync.fullPath; @docsEditable true
   final String fullPath;
 
-  /** @domName EntrySync.isDirectory */
+  /// @domName EntrySync.isDirectory; @docsEditable true
   final bool isDirectory;
 
-  /** @domName EntrySync.isFile */
+  /// @domName EntrySync.isFile; @docsEditable true
   final bool isFile;
 
-  /** @domName EntrySync.name */
+  /// @domName EntrySync.name; @docsEditable true
   final String name;
 
-  /** @domName EntrySync.copyTo */
+  /// @domName EntrySync.copyTo; @docsEditable true
   EntrySync copyTo(DirectoryEntrySync parent, String name) native;
 
-  /** @domName EntrySync.getMetadata */
+  /// @domName EntrySync.getMetadata; @docsEditable true
   Metadata getMetadata() native;
 
-  /** @domName EntrySync.getParent */
+  /// @domName EntrySync.getParent; @docsEditable true
   EntrySync getParent() native;
 
-  /** @domName EntrySync.moveTo */
+  /// @domName EntrySync.moveTo; @docsEditable true
   EntrySync moveTo(DirectoryEntrySync parent, String name) native;
 
-  /** @domName EntrySync.remove */
+  /// @domName EntrySync.remove; @docsEditable true
   void remove() native;
 
-  /** @domName EntrySync.toURL */
+  /// @domName EntrySync.toURL; @docsEditable true
   String toURL() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7924,16 +8329,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ErrorEvent
+/// @domName ErrorEvent; @docsEditable true
 class ErrorEvent extends Event native "*ErrorEvent" {
 
-  /** @domName ErrorEvent.filename */
+  /// @domName ErrorEvent.filename; @docsEditable true
   final String filename;
 
-  /** @domName ErrorEvent.lineno */
+  /// @domName ErrorEvent.lineno; @docsEditable true
   final int lineno;
 
-  /** @domName ErrorEvent.message */
+  /// @domName ErrorEvent.message; @docsEditable true
   final String message;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7993,51 +8398,51 @@
 
   static const int SELECT = 16384;
 
-  /** @domName Event.bubbles */
+  /// @domName Event.bubbles; @docsEditable true
   final bool bubbles;
 
-  /** @domName Event.cancelBubble */
+  /// @domName Event.cancelBubble; @docsEditable true
   bool cancelBubble;
 
-  /** @domName Event.cancelable */
+  /// @domName Event.cancelable; @docsEditable true
   final bool cancelable;
 
-  /** @domName Event.clipboardData */
+  /// @domName Event.clipboardData; @docsEditable true
   final Clipboard clipboardData;
 
-  /** @domName Event.currentTarget */
+  /// @domName Event.currentTarget; @docsEditable true
   EventTarget get currentTarget => _convertNativeToDart_EventTarget(this._currentTarget);
   dynamic get _currentTarget => JS("dynamic", "#.currentTarget", this);
 
-  /** @domName Event.defaultPrevented */
+  /// @domName Event.defaultPrevented; @docsEditable true
   final bool defaultPrevented;
 
-  /** @domName Event.eventPhase */
+  /// @domName Event.eventPhase; @docsEditable true
   final int eventPhase;
 
-  /** @domName Event.returnValue */
+  /// @domName Event.returnValue; @docsEditable true
   bool returnValue;
 
-  /** @domName Event.target */
+  /// @domName Event.target; @docsEditable true
   EventTarget get target => _convertNativeToDart_EventTarget(this._target);
   dynamic get _target => JS("dynamic", "#.target", this);
 
-  /** @domName Event.timeStamp */
+  /// @domName Event.timeStamp; @docsEditable true
   final int timeStamp;
 
-  /** @domName Event.type */
+  /// @domName Event.type; @docsEditable true
   final String type;
 
-  /** @domName Event.initEvent */
+  /// @domName Event.initEvent; @docsEditable true
   void $dom_initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg) native "initEvent";
 
-  /** @domName Event.preventDefault */
+  /// @domName Event.preventDefault; @docsEditable true
   void preventDefault() native;
 
-  /** @domName Event.stopImmediatePropagation */
+  /// @domName Event.stopImmediatePropagation; @docsEditable true
   void stopImmediatePropagation() native;
 
-  /** @domName Event.stopPropagation */
+  /// @domName Event.stopPropagation; @docsEditable true
   void stopPropagation() native;
 
 }
@@ -8046,23 +8451,23 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName EventException
+/// @domName EventException; @docsEditable true
 class EventException native "*EventException" {
 
   static const int DISPATCH_REQUEST_ERR = 1;
 
   static const int UNSPECIFIED_EVENT_TYPE_ERR = 0;
 
-  /** @domName EventException.code */
+  /// @domName EventException.code; @docsEditable true
   final int code;
 
-  /** @domName EventException.message */
+  /// @domName EventException.message; @docsEditable true
   final String message;
 
-  /** @domName EventException.name */
+  /// @domName EventException.name; @docsEditable true
   final String name;
 
-  /** @domName EventException.toString */
+  /// @domName EventException.toString; @docsEditable true
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8070,14 +8475,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName EventSource
+/// @domName EventSource; @docsEditable true
 class EventSource extends EventTarget native "*EventSource" {
 
   factory EventSource(String scriptUrl) => _EventSourceFactoryProvider.createEventSource(scriptUrl);
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   EventSourceEvents get on =>
     new EventSourceEvents(this);
 
@@ -8087,25 +8490,25 @@
 
   static const int OPEN = 1;
 
-  /** @domName EventSource.URL */
+  /// @domName EventSource.URL; @docsEditable true
   final String URL;
 
-  /** @domName EventSource.readyState */
+  /// @domName EventSource.readyState; @docsEditable true
   final int readyState;
 
-  /** @domName EventSource.url */
+  /// @domName EventSource.url; @docsEditable true
   final String url;
 
-  /** @domName EventSource.addEventListener */
+  /// @domName EventSource.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName EventSource.close */
+  /// @domName EventSource.close; @docsEditable true
   void close() native;
 
-  /** @domName EventSource.dispatchEvent */
+  /// @domName EventSource.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName EventSource.removeEventListener */
+  /// @domName EventSource.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 }
 
@@ -8174,13 +8577,13 @@
   /** @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent */
   Events get on => new Events(this);
 
-  /** @domName EventTarget.addEventListener */
+  /// @domName EventTarget.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName EventTarget.dispatchEvent */
+  /// @domName EventTarget.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event event) native "dispatchEvent";
 
-  /** @domName EventTarget.removeEventListener */
+  /// @domName EventTarget.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 
 }
@@ -8189,39 +8592,39 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLFieldSetElement
+/// @domName HTMLFieldSetElement; @docsEditable true
 class FieldSetElement extends Element implements Element native "*HTMLFieldSetElement" {
 
-  factory FieldSetElement() => _Elements.createFieldSetElement();
+  factory FieldSetElement() => document.$dom_createElement("fieldset");
 
-  /** @domName HTMLFieldSetElement.disabled */
+  /// @domName HTMLFieldSetElement.disabled; @docsEditable true
   bool disabled;
 
-  /** @domName HTMLFieldSetElement.elements */
+  /// @domName HTMLFieldSetElement.elements; @docsEditable true
   final HTMLCollection elements;
 
-  /** @domName HTMLFieldSetElement.form */
+  /// @domName HTMLFieldSetElement.form; @docsEditable true
   final FormElement form;
 
-  /** @domName HTMLFieldSetElement.name */
+  /// @domName HTMLFieldSetElement.name; @docsEditable true
   String name;
 
-  /** @domName HTMLFieldSetElement.type */
+  /// @domName HTMLFieldSetElement.type; @docsEditable true
   final String type;
 
-  /** @domName HTMLFieldSetElement.validationMessage */
+  /// @domName HTMLFieldSetElement.validationMessage; @docsEditable true
   final String validationMessage;
 
-  /** @domName HTMLFieldSetElement.validity */
+  /// @domName HTMLFieldSetElement.validity; @docsEditable true
   final ValidityState validity;
 
-  /** @domName HTMLFieldSetElement.willValidate */
+  /// @domName HTMLFieldSetElement.willValidate; @docsEditable true
   final bool willValidate;
 
-  /** @domName HTMLFieldSetElement.checkValidity */
+  /// @domName HTMLFieldSetElement.checkValidity; @docsEditable true
   bool checkValidity() native;
 
-  /** @domName HTMLFieldSetElement.setCustomValidity */
+  /// @domName HTMLFieldSetElement.setCustomValidity; @docsEditable true
   void setCustomValidity(String error) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8229,16 +8632,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName File
+/// @domName File; @docsEditable true
 class File extends Blob native "*File" {
 
-  /** @domName File.lastModifiedDate */
+  /// @domName File.lastModifiedDate; @docsEditable true
   final Date lastModifiedDate;
 
-  /** @domName File.name */
+  /// @domName File.name; @docsEditable true
   final String name;
 
-  /** @domName File.webkitRelativePath */
+  /// @domName File.webkitRelativePath; @docsEditable true
   final String webkitRelativePath;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8254,13 +8657,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileEntry
+/// @domName FileEntry; @docsEditable true
 class FileEntry extends Entry native "*FileEntry" {
 
-  /** @domName FileEntry.createWriter */
+  /// @domName FileEntry.createWriter; @docsEditable true
   void createWriter(FileWriterCallback successCallback, [ErrorCallback errorCallback]) native;
 
-  /** @domName FileEntry.file */
+  /// @domName FileEntry.file; @docsEditable true
   void file(FileCallback successCallback, [ErrorCallback errorCallback]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8268,13 +8671,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileEntrySync
+/// @domName FileEntrySync; @docsEditable true
 class FileEntrySync extends EntrySync native "*FileEntrySync" {
 
-  /** @domName FileEntrySync.createWriter */
+  /// @domName FileEntrySync.createWriter; @docsEditable true
   FileWriterSync createWriter() native;
 
-  /** @domName FileEntrySync.file */
+  /// @domName FileEntrySync.file; @docsEditable true
   File file() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8282,7 +8685,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileError
+/// @domName FileError; @docsEditable true
 class FileError native "*FileError" {
 
   static const int ABORT_ERR = 3;
@@ -8309,7 +8712,7 @@
 
   static const int TYPE_MISMATCH_ERR = 11;
 
-  /** @domName FileError.code */
+  /// @domName FileError.code; @docsEditable true
   final int code;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8317,7 +8720,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileException
+/// @domName FileException; @docsEditable true
 class FileException native "*FileException" {
 
   static const int ABORT_ERR = 3;
@@ -8344,16 +8747,16 @@
 
   static const int TYPE_MISMATCH_ERR = 11;
 
-  /** @domName FileException.code */
+  /// @domName FileException.code; @docsEditable true
   final int code;
 
-  /** @domName FileException.message */
+  /// @domName FileException.message; @docsEditable true
   final String message;
 
-  /** @domName FileException.name */
+  /// @domName FileException.name; @docsEditable true
   final String name;
 
-  /** @domName FileException.toString */
+  /// @domName FileException.toString; @docsEditable true
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8361,14 +8764,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileReader
+/// @domName FileReader; @docsEditable true
 class FileReader extends EventTarget native "*FileReader" {
 
   factory FileReader() => _FileReaderFactoryProvider.createFileReader();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   FileReaderEvents get on =>
     new FileReaderEvents(this);
 
@@ -8378,37 +8779,38 @@
 
   static const int LOADING = 1;
 
-  /** @domName FileReader.error */
+  /// @domName FileReader.error; @docsEditable true
   final FileError error;
 
-  /** @domName FileReader.readyState */
+  /// @domName FileReader.readyState; @docsEditable true
   final int readyState;
 
-  /** @domName FileReader.result */
+  /// @domName FileReader.result; @docsEditable true
+  @Creates('String|ArrayBuffer|Null')
   final Object result;
 
-  /** @domName FileReader.abort */
+  /// @domName FileReader.abort; @docsEditable true
   void abort() native;
 
-  /** @domName FileReader.addEventListener */
+  /// @domName FileReader.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName FileReader.dispatchEvent */
+  /// @domName FileReader.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName FileReader.readAsArrayBuffer */
+  /// @domName FileReader.readAsArrayBuffer; @docsEditable true
   void readAsArrayBuffer(Blob blob) native;
 
-  /** @domName FileReader.readAsBinaryString */
+  /// @domName FileReader.readAsBinaryString; @docsEditable true
   void readAsBinaryString(Blob blob) native;
 
-  /** @domName FileReader.readAsDataURL */
+  /// @domName FileReader.readAsDataURL; @docsEditable true
   void readAsDataURL(Blob blob) native;
 
-  /** @domName FileReader.readAsText */
+  /// @domName FileReader.readAsText; @docsEditable true
   void readAsText(Blob blob, [String encoding]) native;
 
-  /** @domName FileReader.removeEventListener */
+  /// @domName FileReader.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 }
 
@@ -8432,21 +8834,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileReaderSync
+/// @domName FileReaderSync; @docsEditable true
 class FileReaderSync native "*FileReaderSync" {
 
   factory FileReaderSync() => _FileReaderSyncFactoryProvider.createFileReaderSync();
 
-  /** @domName FileReaderSync.readAsArrayBuffer */
+  /// @domName FileReaderSync.readAsArrayBuffer; @docsEditable true
   ArrayBuffer readAsArrayBuffer(Blob blob) native;
 
-  /** @domName FileReaderSync.readAsBinaryString */
+  /// @domName FileReaderSync.readAsBinaryString; @docsEditable true
   String readAsBinaryString(Blob blob) native;
 
-  /** @domName FileReaderSync.readAsDataURL */
+  /// @domName FileReaderSync.readAsDataURL; @docsEditable true
   String readAsDataURL(Blob blob) native;
 
-  /** @domName FileReaderSync.readAsText */
+  /// @domName FileReaderSync.readAsText; @docsEditable true
   String readAsText(Blob blob, [String encoding]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8462,12 +8864,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileWriter
+/// @domName FileWriter; @docsEditable true
 class FileWriter extends EventTarget native "*FileWriter" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   FileWriterEvents get on =>
     new FileWriterEvents(this);
 
@@ -8477,37 +8877,37 @@
 
   static const int WRITING = 1;
 
-  /** @domName FileWriter.error */
+  /// @domName FileWriter.error; @docsEditable true
   final FileError error;
 
-  /** @domName FileWriter.length */
+  /// @domName FileWriter.length; @docsEditable true
   final int length;
 
-  /** @domName FileWriter.position */
+  /// @domName FileWriter.position; @docsEditable true
   final int position;
 
-  /** @domName FileWriter.readyState */
+  /// @domName FileWriter.readyState; @docsEditable true
   final int readyState;
 
-  /** @domName FileWriter.abort */
+  /// @domName FileWriter.abort; @docsEditable true
   void abort() native;
 
-  /** @domName FileWriter.addEventListener */
+  /// @domName FileWriter.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName FileWriter.dispatchEvent */
+  /// @domName FileWriter.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName FileWriter.removeEventListener */
+  /// @domName FileWriter.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 
-  /** @domName FileWriter.seek */
+  /// @domName FileWriter.seek; @docsEditable true
   void seek(int position) native;
 
-  /** @domName FileWriter.truncate */
+  /// @domName FileWriter.truncate; @docsEditable true
   void truncate(int size) native;
 
-  /** @domName FileWriter.write */
+  /// @domName FileWriter.write; @docsEditable true
   void write(Blob data) native;
 }
 
@@ -8539,22 +8939,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileWriterSync
+/// @domName FileWriterSync; @docsEditable true
 class FileWriterSync native "*FileWriterSync" {
 
-  /** @domName FileWriterSync.length */
+  /// @domName FileWriterSync.length; @docsEditable true
   final int length;
 
-  /** @domName FileWriterSync.position */
+  /// @domName FileWriterSync.position; @docsEditable true
   final int position;
 
-  /** @domName FileWriterSync.seek */
+  /// @domName FileWriterSync.seek; @docsEditable true
   void seek(int position) native;
 
-  /** @domName FileWriterSync.truncate */
+  /// @domName FileWriterSync.truncate; @docsEditable true
   void truncate(int size) native;
 
-  /** @domName FileWriterSync.write */
+  /// @domName FileWriterSync.write; @docsEditable true
   void write(Blob data) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8562,7 +8962,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Float32Array
+/// @domName Float32Array; @docsEditable true
 class Float32Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<num> native "*Float32Array" {
 
   factory Float32Array(int length) =>
@@ -8576,13 +8976,12 @@
 
   static const int BYTES_PER_ELEMENT = 4;
 
-  /** @domName Float32Array.length */
+  /// @domName Float32Array.length; @docsEditable true
   final int length;
 
   num operator[](int index) => JS("num", "#[#]", this, index);
 
-  void operator[]=(int index, num value) => JS("void", "#[#] = #", this, index, value);
-  // -- start List<num> mixins.
+  void operator[]=(int index, num value) { JS("void", "#[#] = #", this, index, value); }  // -- start List<num> mixins.
   // num is the element type.
 
   // From Iterable<num>:
@@ -8637,6 +9036,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  num get first => this[0];
+
   num get last => this[length - 1];
 
   num removeLast() {
@@ -8660,10 +9061,10 @@
 
   // -- end List<num> mixins.
 
-  /** @domName Float32Array.setElements */
+  /// @domName Float32Array.setElements; @docsEditable true
   void setElements(Object array, [int offset]) native "set";
 
-  /** @domName Float32Array.subarray */
+  /// @domName Float32Array.subarray; @docsEditable true
   Float32Array subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8671,7 +9072,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Float64Array
+/// @domName Float64Array; @docsEditable true
 class Float64Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<num> native "*Float64Array" {
 
   factory Float64Array(int length) =>
@@ -8685,13 +9086,12 @@
 
   static const int BYTES_PER_ELEMENT = 8;
 
-  /** @domName Float64Array.length */
+  /// @domName Float64Array.length; @docsEditable true
   final int length;
 
   num operator[](int index) => JS("num", "#[#]", this, index);
 
-  void operator[]=(int index, num value) => JS("void", "#[#] = #", this, index, value);
-  // -- start List<num> mixins.
+  void operator[]=(int index, num value) { JS("void", "#[#] = #", this, index, value); }  // -- start List<num> mixins.
   // num is the element type.
 
   // From Iterable<num>:
@@ -8746,6 +9146,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  num get first => this[0];
+
   num get last => this[length - 1];
 
   num removeLast() {
@@ -8769,10 +9171,10 @@
 
   // -- end List<num> mixins.
 
-  /** @domName Float64Array.setElements */
+  /// @domName Float64Array.setElements; @docsEditable true
   void setElements(Object array, [int offset]) native "set";
 
-  /** @domName Float64Array.subarray */
+  /// @domName Float64Array.subarray; @docsEditable true
   Float64Array subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8780,16 +9182,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLFontElement
+/// @domName HTMLFontElement; @docsEditable true
 class FontElement extends Element implements Element native "*HTMLFontElement" {
 
-  /** @domName HTMLFontElement.color */
+  /// @domName HTMLFontElement.color; @docsEditable true
   String color;
 
-  /** @domName HTMLFontElement.face */
+  /// @domName HTMLFontElement.face; @docsEditable true
   String face;
 
-  /** @domName HTMLFontElement.size */
+  /// @domName HTMLFontElement.size; @docsEditable true
   String size;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8797,7 +9199,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FormData
+/// @domName FormData; @docsEditable true
 class FormData native "*FormData" {
 
   factory FormData([FormElement form]) {
@@ -8807,7 +9209,7 @@
     return _FormDataFactoryProvider.createFormData(form);
   }
 
-  /** @domName FormData.append */
+  /// @domName FormData.append; @docsEditable true
   void append(String name, String value, String filename) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8815,48 +9217,48 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLFormElement
+/// @domName HTMLFormElement; @docsEditable true
 class FormElement extends Element implements Element native "*HTMLFormElement" {
 
-  factory FormElement() => _Elements.createFormElement();
+  factory FormElement() => document.$dom_createElement("form");
 
-  /** @domName HTMLFormElement.acceptCharset */
+  /// @domName HTMLFormElement.acceptCharset; @docsEditable true
   String acceptCharset;
 
-  /** @domName HTMLFormElement.action */
+  /// @domName HTMLFormElement.action; @docsEditable true
   String action;
 
-  /** @domName HTMLFormElement.autocomplete */
+  /// @domName HTMLFormElement.autocomplete; @docsEditable true
   String autocomplete;
 
-  /** @domName HTMLFormElement.encoding */
+  /// @domName HTMLFormElement.encoding; @docsEditable true
   String encoding;
 
-  /** @domName HTMLFormElement.enctype */
+  /// @domName HTMLFormElement.enctype; @docsEditable true
   String enctype;
 
-  /** @domName HTMLFormElement.length */
+  /// @domName HTMLFormElement.length; @docsEditable true
   final int length;
 
-  /** @domName HTMLFormElement.method */
+  /// @domName HTMLFormElement.method; @docsEditable true
   String method;
 
-  /** @domName HTMLFormElement.name */
+  /// @domName HTMLFormElement.name; @docsEditable true
   String name;
 
-  /** @domName HTMLFormElement.noValidate */
+  /// @domName HTMLFormElement.noValidate; @docsEditable true
   bool noValidate;
 
-  /** @domName HTMLFormElement.target */
+  /// @domName HTMLFormElement.target; @docsEditable true
   String target;
 
-  /** @domName HTMLFormElement.checkValidity */
+  /// @domName HTMLFormElement.checkValidity; @docsEditable true
   bool checkValidity() native;
 
-  /** @domName HTMLFormElement.reset */
+  /// @domName HTMLFormElement.reset; @docsEditable true
   void reset() native;
 
-  /** @domName HTMLFormElement.submit */
+  /// @domName HTMLFormElement.submit; @docsEditable true
   void submit() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8864,44 +9266,44 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLFrameElement
+/// @domName HTMLFrameElement; @docsEditable true
 class FrameElement extends Element implements Element native "*HTMLFrameElement" {
 
-  /** @domName HTMLFrameElement.contentWindow */
+  /// @domName HTMLFrameElement.contentWindow; @docsEditable true
   Window get contentWindow => _convertNativeToDart_Window(this._contentWindow);
   dynamic get _contentWindow => JS("dynamic", "#.contentWindow", this);
 
-  /** @domName HTMLFrameElement.frameBorder */
+  /// @domName HTMLFrameElement.frameBorder; @docsEditable true
   String frameBorder;
 
-  /** @domName HTMLFrameElement.height */
+  /// @domName HTMLFrameElement.height; @docsEditable true
   final int height;
 
-  /** @domName HTMLFrameElement.location */
+  /// @domName HTMLFrameElement.location; @docsEditable true
   String location;
 
-  /** @domName HTMLFrameElement.longDesc */
+  /// @domName HTMLFrameElement.longDesc; @docsEditable true
   String longDesc;
 
-  /** @domName HTMLFrameElement.marginHeight */
+  /// @domName HTMLFrameElement.marginHeight; @docsEditable true
   String marginHeight;
 
-  /** @domName HTMLFrameElement.marginWidth */
+  /// @domName HTMLFrameElement.marginWidth; @docsEditable true
   String marginWidth;
 
-  /** @domName HTMLFrameElement.name */
+  /// @domName HTMLFrameElement.name; @docsEditable true
   String name;
 
-  /** @domName HTMLFrameElement.noResize */
+  /// @domName HTMLFrameElement.noResize; @docsEditable true
   bool noResize;
 
-  /** @domName HTMLFrameElement.scrolling */
+  /// @domName HTMLFrameElement.scrolling; @docsEditable true
   String scrolling;
 
-  /** @domName HTMLFrameElement.src */
+  /// @domName HTMLFrameElement.src; @docsEditable true
   String src;
 
-  /** @domName HTMLFrameElement.width */
+  /// @domName HTMLFrameElement.width; @docsEditable true
   final int width;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8909,19 +9311,17 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLFrameSetElement
+/// @domName HTMLFrameSetElement; @docsEditable true
 class FrameSetElement extends Element implements Element native "*HTMLFrameSetElement" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   FrameSetElementEvents get on =>
     new FrameSetElementEvents(this);
 
-  /** @domName HTMLFrameSetElement.cols */
+  /// @domName HTMLFrameSetElement.cols; @docsEditable true
   String cols;
 
-  /** @domName HTMLFrameSetElement.rows */
+  /// @domName HTMLFrameSetElement.rows; @docsEditable true
   String rows;
 }
 
@@ -8959,10 +9359,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName GainNode
+/// @domName GainNode; @docsEditable true
 class GainNode extends AudioNode native "*GainNode" {
 
-  /** @domName GainNode.gain */
+  /// @domName GainNode.gain; @docsEditable true
   final AudioGain gain;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8970,22 +9370,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Gamepad
+/// @domName Gamepad; @docsEditable true
 class Gamepad native "*Gamepad" {
 
-  /** @domName Gamepad.axes */
+  /// @domName Gamepad.axes; @docsEditable true
   final List<num> axes;
 
-  /** @domName Gamepad.buttons */
+  /// @domName Gamepad.buttons; @docsEditable true
   final List<num> buttons;
 
-  /** @domName Gamepad.id */
+  /// @domName Gamepad.id; @docsEditable true
   final String id;
 
-  /** @domName Gamepad.index */
+  /// @domName Gamepad.index; @docsEditable true
   final int index;
 
-  /** @domName Gamepad.timestamp */
+  /// @domName Gamepad.timestamp; @docsEditable true
   final int timestamp;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8993,16 +9393,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Geolocation
+/// @domName Geolocation; @docsEditable true
 class Geolocation native "*Geolocation" {
 
-  /** @domName Geolocation.clearWatch */
+  /// @domName Geolocation.clearWatch; @docsEditable true
   void clearWatch(int watchId) native;
 
-  /** @domName Geolocation.getCurrentPosition */
+  /// @domName Geolocation.getCurrentPosition; @docsEditable true
   void getCurrentPosition(PositionCallback successCallback, [PositionErrorCallback errorCallback, Object options]) native;
 
-  /** @domName Geolocation.watchPosition */
+  /// @domName Geolocation.watchPosition; @docsEditable true
   int watchPosition(PositionCallback successCallback, [PositionErrorCallback errorCallback, Object options]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9010,13 +9410,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Geoposition
+/// @domName Geoposition; @docsEditable true
 class Geoposition native "*Geoposition" {
 
-  /** @domName Geoposition.coords */
+  /// @domName Geoposition.coords; @docsEditable true
   final Coordinates coords;
 
-  /** @domName Geoposition.timestamp */
+  /// @domName Geoposition.timestamp; @docsEditable true
   final int timestamp;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9024,21 +9424,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLHRElement
+/// @domName HTMLHRElement; @docsEditable true
 class HRElement extends Element implements Element native "*HTMLHRElement" {
 
-  factory HRElement() => _Elements.createHRElement();
+  factory HRElement() => document.$dom_createElement("hr");
 
-  /** @domName HTMLHRElement.align */
+  /// @domName HTMLHRElement.align; @docsEditable true
   String align;
 
-  /** @domName HTMLHRElement.noShade */
+  /// @domName HTMLHRElement.noShade; @docsEditable true
   bool noShade;
 
-  /** @domName HTMLHRElement.size */
+  /// @domName HTMLHRElement.size; @docsEditable true
   String size;
 
-  /** @domName HTMLHRElement.width */
+  /// @domName HTMLHRElement.width; @docsEditable true
   String width;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9046,10 +9446,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLAllCollection
+/// @domName HTMLAllCollection; @docsEditable true
 class HTMLAllCollection implements JavaScriptIndexingBehavior, List<Node> native "*HTMLAllCollection" {
 
-  /** @domName HTMLAllCollection.length */
+  /// @domName HTMLAllCollection.length; @docsEditable true
   final int length;
 
   Node operator[](int index) => JS("Node", "#[#]", this, index);
@@ -9112,6 +9512,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  Node get first => this[0];
+
   Node get last => this[length - 1];
 
   Node removeLast() {
@@ -9135,13 +9537,14 @@
 
   // -- end List<Node> mixins.
 
-  /** @domName HTMLAllCollection.item */
+  /// @domName HTMLAllCollection.item; @docsEditable true
   Node item(int index) native;
 
-  /** @domName HTMLAllCollection.namedItem */
+  /// @domName HTMLAllCollection.namedItem; @docsEditable true
   Node namedItem(String name) native;
 
-  /** @domName HTMLAllCollection.tags */
+  /// @domName HTMLAllCollection.tags; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   List<Node> tags(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9149,10 +9552,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLCollection
+/// @domName HTMLCollection; @docsEditable true
 class HTMLCollection implements JavaScriptIndexingBehavior, List<Node> native "*HTMLCollection" {
 
-  /** @domName HTMLCollection.length */
+  /// @domName HTMLCollection.length; @docsEditable true
   final int length;
 
   Node operator[](int index) => JS("Node", "#[#]", this, index);
@@ -9215,6 +9618,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  Node get first => this[0];
+
   Node get last => this[length - 1];
 
   Node removeLast() {
@@ -9238,10 +9643,10 @@
 
   // -- end List<Node> mixins.
 
-  /** @domName HTMLCollection.item */
+  /// @domName HTMLCollection.item; @docsEditable true
   Node item(int index) native;
 
-  /** @domName HTMLCollection.namedItem */
+  /// @domName HTMLCollection.namedItem; @docsEditable true
   Node namedItem(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9249,22 +9654,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLOptionsCollection
+/// @domName HTMLOptionsCollection; @docsEditable true
 class HTMLOptionsCollection extends HTMLCollection native "*HTMLOptionsCollection" {
 
   // Shadowing definition.
-  /** @domName HTMLOptionsCollection.length */
+  /// @domName HTMLOptionsCollection.length; @docsEditable true
   int get length => JS("int", "#.length", this);
 
-  /** @domName HTMLOptionsCollection.length */
+  /// @domName HTMLOptionsCollection.length; @docsEditable true
   void set length(int value) {
     JS("void", "#.length = #", this, value);
   }
 
-  /** @domName HTMLOptionsCollection.selectedIndex */
+  /// @domName HTMLOptionsCollection.selectedIndex; @docsEditable true
   int selectedIndex;
 
-  /** @domName HTMLOptionsCollection.remove */
+  /// @domName HTMLOptionsCollection.remove; @docsEditable true
   void remove(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9272,16 +9677,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HashChangeEvent
+/// @domName HashChangeEvent; @docsEditable true
 class HashChangeEvent extends Event native "*HashChangeEvent" {
 
-  /** @domName HashChangeEvent.newURL */
+  /// @domName HashChangeEvent.newURL; @docsEditable true
   final String newURL;
 
-  /** @domName HashChangeEvent.oldURL */
+  /// @domName HashChangeEvent.oldURL; @docsEditable true
   final String oldURL;
 
-  /** @domName HashChangeEvent.initHashChangeEvent */
+  /// @domName HashChangeEvent.initHashChangeEvent; @docsEditable true
   void initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9289,12 +9694,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLHeadElement
+/// @domName HTMLHeadElement; @docsEditable true
 class HeadElement extends Element implements Element native "*HTMLHeadElement" {
 
-  factory HeadElement() => _Elements.createHeadElement();
+  factory HeadElement() => document.$dom_createElement("head");
 
-  /** @domName HTMLHeadElement.profile */
+  /// @domName HTMLHeadElement.profile; @docsEditable true
   String profile;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9302,22 +9707,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLHeadingElement
+/// @domName HTMLHeadingElement; @docsEditable true
 class HeadingElement extends Element implements Element native "*HTMLHeadingElement" {
 
-  factory HeadingElement.h1() => _Elements.createHeadingElement_h1();
+  factory HeadingElement.h1() => document.$dom_createElement("h1");
 
-  factory HeadingElement.h2() => _Elements.createHeadingElement_h2();
+  factory HeadingElement.h2() => document.$dom_createElement("h2");
 
-  factory HeadingElement.h3() => _Elements.createHeadingElement_h3();
+  factory HeadingElement.h3() => document.$dom_createElement("h3");
 
-  factory HeadingElement.h4() => _Elements.createHeadingElement_h4();
+  factory HeadingElement.h4() => document.$dom_createElement("h4");
 
-  factory HeadingElement.h5() => _Elements.createHeadingElement_h5();
+  factory HeadingElement.h5() => document.$dom_createElement("h5");
 
-  factory HeadingElement.h6() => _Elements.createHeadingElement_h6();
+  factory HeadingElement.h6() => document.$dom_createElement("h6");
 
-  /** @domName HTMLHeadingElement.align */
+  /// @domName HTMLHeadingElement.align; @docsEditable true
   String align;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9329,7 +9734,7 @@
 
 class HtmlDocument extends Document native "*HTMLDocument" {
 
-  /** @domName HTMLDocument.activeElement */
+  /// @domName HTMLDocument.activeElement; @docsEditable true
   final Element activeElement;
 
   /** @domName Document.body */
@@ -9409,10 +9814,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLHtmlElement
+/// @domName HTMLHtmlElement; @docsEditable true
 class HtmlElement extends Element implements Element native "*HTMLHtmlElement" {
 
-  factory HtmlElement() => _Elements.createHtmlElement();
+  factory HtmlElement() => document.$dom_createElement("html");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -9420,18 +9825,18 @@
 
 
 class HttpRequest extends EventTarget native "*XMLHttpRequest" {
-  factory HttpRequest.get(String url, onSuccess(HttpRequest request)) =>
-      _HttpRequestFactoryProvider.createHttpRequest_get(url, onSuccess);
+  factory HttpRequest.get(String url, onComplete(HttpRequest request)) =>
+      _HttpRequestFactoryProvider.createHttpRequest_get(url, onComplete);
 
-  factory HttpRequest.getWithCredentials(String url, onSuccess(HttpRequest request)) =>
-      _HttpRequestFactoryProvider.createHttpRequestgetWithCredentials(url, onSuccess);
+  factory HttpRequest.getWithCredentials(String url,
+      onComplete(HttpRequest request)) =>
+      _HttpRequestFactoryProvider.createHttpRequest_getWithCredentials(url,
+      onComplete);
 
 
   factory HttpRequest() => _HttpRequestFactoryProvider.createHttpRequest();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   HttpRequestEvents get on =>
     new HttpRequestEvents(this);
 
@@ -9445,61 +9850,62 @@
 
   static const int UNSENT = 0;
 
-  /** @domName XMLHttpRequest.readyState */
+  /// @domName XMLHttpRequest.readyState; @docsEditable true
   final int readyState;
 
-  /** @domName XMLHttpRequest.response */
+  /// @domName XMLHttpRequest.response; @docsEditable true
+  @Creates('ArrayBuffer|Blob|Document|=Object|=List|String|num')
   final Object response;
 
-  /** @domName XMLHttpRequest.responseText */
+  /// @domName XMLHttpRequest.responseText; @docsEditable true
   final String responseText;
 
-  /** @domName XMLHttpRequest.responseType */
+  /// @domName XMLHttpRequest.responseType; @docsEditable true
   String responseType;
 
-  /** @domName XMLHttpRequest.responseXML */
+  /// @domName XMLHttpRequest.responseXML; @docsEditable true
   final Document responseXML;
 
-  /** @domName XMLHttpRequest.status */
+  /// @domName XMLHttpRequest.status; @docsEditable true
   final int status;
 
-  /** @domName XMLHttpRequest.statusText */
+  /// @domName XMLHttpRequest.statusText; @docsEditable true
   final String statusText;
 
-  /** @domName XMLHttpRequest.upload */
+  /// @domName XMLHttpRequest.upload; @docsEditable true
   final HttpRequestUpload upload;
 
-  /** @domName XMLHttpRequest.withCredentials */
+  /// @domName XMLHttpRequest.withCredentials; @docsEditable true
   bool withCredentials;
 
-  /** @domName XMLHttpRequest.abort */
+  /// @domName XMLHttpRequest.abort; @docsEditable true
   void abort() native;
 
-  /** @domName XMLHttpRequest.addEventListener */
+  /// @domName XMLHttpRequest.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName XMLHttpRequest.dispatchEvent */
+  /// @domName XMLHttpRequest.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName XMLHttpRequest.getAllResponseHeaders */
+  /// @domName XMLHttpRequest.getAllResponseHeaders; @docsEditable true
   String getAllResponseHeaders() native;
 
-  /** @domName XMLHttpRequest.getResponseHeader */
+  /// @domName XMLHttpRequest.getResponseHeader; @docsEditable true
   String getResponseHeader(String header) native;
 
-  /** @domName XMLHttpRequest.open */
+  /// @domName XMLHttpRequest.open; @docsEditable true
   void open(String method, String url, [bool async, String user, String password]) native;
 
-  /** @domName XMLHttpRequest.overrideMimeType */
+  /// @domName XMLHttpRequest.overrideMimeType; @docsEditable true
   void overrideMimeType(String override) native;
 
-  /** @domName XMLHttpRequest.removeEventListener */
+  /// @domName XMLHttpRequest.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 
-  /** @domName XMLHttpRequest.send */
+  /// @domName XMLHttpRequest.send; @docsEditable true
   void send([data]) native;
 
-  /** @domName XMLHttpRequest.setRequestHeader */
+  /// @domName XMLHttpRequest.setRequestHeader; @docsEditable true
   void setRequestHeader(String header, String value) native;
 
 }
@@ -9526,23 +9932,23 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XMLHttpRequestException
+/// @domName XMLHttpRequestException; @docsEditable true
 class HttpRequestException native "*XMLHttpRequestException" {
 
   static const int ABORT_ERR = 102;
 
   static const int NETWORK_ERR = 101;
 
-  /** @domName XMLHttpRequestException.code */
+  /// @domName XMLHttpRequestException.code; @docsEditable true
   final int code;
 
-  /** @domName XMLHttpRequestException.message */
+  /// @domName XMLHttpRequestException.message; @docsEditable true
   final String message;
 
-  /** @domName XMLHttpRequestException.name */
+  /// @domName XMLHttpRequestException.name; @docsEditable true
   final String name;
 
-  /** @domName XMLHttpRequestException.toString */
+  /// @domName XMLHttpRequestException.toString; @docsEditable true
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9550,13 +9956,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XMLHttpRequestProgressEvent
+/// @domName XMLHttpRequestProgressEvent; @docsEditable true
 class HttpRequestProgressEvent extends ProgressEvent native "*XMLHttpRequestProgressEvent" {
 
-  /** @domName XMLHttpRequestProgressEvent.position */
+  /// @domName XMLHttpRequestProgressEvent.position; @docsEditable true
   final int position;
 
-  /** @domName XMLHttpRequestProgressEvent.totalSize */
+  /// @domName XMLHttpRequestProgressEvent.totalSize; @docsEditable true
   final int totalSize;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9564,22 +9970,20 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XMLHttpRequestUpload
+/// @domName XMLHttpRequestUpload; @docsEditable true
 class HttpRequestUpload extends EventTarget native "*XMLHttpRequestUpload" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   HttpRequestUploadEvents get on =>
     new HttpRequestUploadEvents(this);
 
-  /** @domName XMLHttpRequestUpload.addEventListener */
+  /// @domName XMLHttpRequestUpload.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName XMLHttpRequestUpload.dispatchEvent */
+  /// @domName XMLHttpRequestUpload.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName XMLHttpRequestUpload.removeEventListener */
+  /// @domName XMLHttpRequestUpload.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 }
 
@@ -9603,7 +10007,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBAny
+/// @domName IDBAny; @docsEditable true
 class IDBAny native "*IDBAny" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9611,7 +10015,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBCursor
+/// @domName IDBCursor; @docsEditable true
 class IDBCursor native "*IDBCursor" {
 
   static const int NEXT = 0;
@@ -9622,22 +10026,23 @@
 
   static const int PREV_NO_DUPLICATE = 3;
 
-  /** @domName IDBCursor.direction */
+  /// @domName IDBCursor.direction; @docsEditable true
   final String direction;
 
-  /** @domName IDBCursor.key */
+  /// @domName IDBCursor.key; @docsEditable true
+  @_annotation_Creates_IDBKey @_annotation_Returns_IDBKey
   final Object key;
 
-  /** @domName IDBCursor.primaryKey */
+  /// @domName IDBCursor.primaryKey; @docsEditable true
   final Object primaryKey;
 
-  /** @domName IDBCursor.source */
+  /// @domName IDBCursor.source; @docsEditable true
   final dynamic source;
 
-  /** @domName IDBCursor.advance */
+  /// @domName IDBCursor.advance; @docsEditable true
   void advance(int count) native;
 
-  /** @domName IDBCursor.continueFunction */
+  /// @domName IDBCursor.continueFunction; @docsEditable true
   void continueFunction([/*IDBKey*/ key]) {
     if (?key) {
       var key_1 = _convertDartToNative_IDBKey(key);
@@ -9650,10 +10055,10 @@
   void _continueFunction_1(key) native "continue";
   void _continueFunction_2() native "continue";
 
-  /** @domName IDBCursor.delete */
+  /// @domName IDBCursor.delete; @docsEditable true
   IDBRequest delete() native;
 
-  /** @domName IDBCursor.update */
+  /// @domName IDBCursor.update; @docsEditable true
   IDBRequest update(/*any*/ value) {
     var value_1 = _convertDartToNative_SerializedScriptValue(value);
     return _update_1(value_1);
@@ -9665,10 +10070,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBCursorWithValue
+/// @domName IDBCursorWithValue; @docsEditable true
 class IDBCursorWithValue extends IDBCursor native "*IDBCursorWithValue" {
 
-  /** @domName IDBCursorWithValue.value */
+  /// @domName IDBCursorWithValue.value; @docsEditable true
+  @_annotation_Creates_SerializedScriptValue @_annotation_Returns_SerializedScriptValue
   final Object value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9720,28 +10126,27 @@
       JS('bool', 'typeof(#.mode) === "number"', txn);
 
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   IDBDatabaseEvents get on =>
     new IDBDatabaseEvents(this);
 
-  /** @domName IDBDatabase.name */
+  /// @domName IDBDatabase.name; @docsEditable true
   final String name;
 
-  /** @domName IDBDatabase.objectStoreNames */
+  /// @domName IDBDatabase.objectStoreNames; @docsEditable true
+  @Returns('_DOMStringList') @Creates('_DOMStringList')
   final List<String> objectStoreNames;
 
-  /** @domName IDBDatabase.version */
+  /// @domName IDBDatabase.version; @docsEditable true
   final dynamic version;
 
-  /** @domName IDBDatabase.addEventListener */
+  /// @domName IDBDatabase.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName IDBDatabase.close */
+  /// @domName IDBDatabase.close; @docsEditable true
   void close() native;
 
-  /** @domName IDBDatabase.createObjectStore */
+  /// @domName IDBDatabase.createObjectStore; @docsEditable true
   IDBObjectStore createObjectStore(String name, [Map options]) {
     if (?options) {
       var options_1 = _convertDartToNative_Dictionary(options);
@@ -9752,16 +10157,16 @@
   IDBObjectStore _createObjectStore_1(name, options) native "createObjectStore";
   IDBObjectStore _createObjectStore_2(name) native "createObjectStore";
 
-  /** @domName IDBDatabase.deleteObjectStore */
+  /// @domName IDBDatabase.deleteObjectStore; @docsEditable true
   void deleteObjectStore(String name) native;
 
-  /** @domName IDBDatabase.dispatchEvent */
+  /// @domName IDBDatabase.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName IDBDatabase.removeEventListener */
+  /// @domName IDBDatabase.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 
-  /** @domName IDBDatabase.setVersion */
+  /// @domName IDBDatabase.setVersion; @docsEditable true
   IDBVersionChangeRequest setVersion(String version) native;
 }
 
@@ -9783,7 +10188,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBDatabaseException
+/// @domName IDBDatabaseException; @docsEditable true
 class IDBDatabaseException native "*IDBDatabaseException" {
 
   static const int ABORT_ERR = 20;
@@ -9812,16 +10217,16 @@
 
   static const int VER_ERR = 12;
 
-  /** @domName IDBDatabaseException.code */
+  /// @domName IDBDatabaseException.code; @docsEditable true
   final int code;
 
-  /** @domName IDBDatabaseException.message */
+  /// @domName IDBDatabaseException.message; @docsEditable true
   final String message;
 
-  /** @domName IDBDatabaseException.name */
+  /// @domName IDBDatabaseException.name; @docsEditable true
   final String name;
 
-  /** @domName IDBDatabaseException.toString */
+  /// @domName IDBDatabaseException.toString; @docsEditable true
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9829,10 +10234,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBFactory
+/// @domName IDBFactory; @docsEditable true
 class IDBFactory native "*IDBFactory" {
 
-  /** @domName IDBFactory.cmp */
+  /// @domName IDBFactory.cmp; @docsEditable true
   int cmp(/*IDBKey*/ first, /*IDBKey*/ second) {
     var first_1 = _convertDartToNative_IDBKey(first);
     var second_2 = _convertDartToNative_IDBKey(second);
@@ -9840,13 +10245,14 @@
   }
   int _cmp_1(first, second) native "cmp";
 
-  /** @domName IDBFactory.deleteDatabase */
+  /// @domName IDBFactory.deleteDatabase; @docsEditable true
   IDBVersionChangeRequest deleteDatabase(String name) native;
 
-  /** @domName IDBFactory.open */
+  /// @domName IDBFactory.open; @docsEditable true
+  @Returns('IDBRequest') @Creates('IDBRequest') @Creates('IDBDatabase')
   IDBOpenDBRequest open(String name, [int version]) native;
 
-  /** @domName IDBFactory.webkitGetDatabaseNames */
+  /// @domName IDBFactory.webkitGetDatabaseNames; @docsEditable true
   IDBRequest webkitGetDatabaseNames() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9854,25 +10260,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBIndex
+/// @domName IDBIndex; @docsEditable true
 class IDBIndex native "*IDBIndex" {
 
-  /** @domName IDBIndex.keyPath */
+  /// @domName IDBIndex.keyPath; @docsEditable true
   final dynamic keyPath;
 
-  /** @domName IDBIndex.multiEntry */
+  /// @domName IDBIndex.multiEntry; @docsEditable true
   final bool multiEntry;
 
-  /** @domName IDBIndex.name */
+  /// @domName IDBIndex.name; @docsEditable true
   final String name;
 
-  /** @domName IDBIndex.objectStore */
+  /// @domName IDBIndex.objectStore; @docsEditable true
   final IDBObjectStore objectStore;
 
-  /** @domName IDBIndex.unique */
+  /// @domName IDBIndex.unique; @docsEditable true
   final bool unique;
 
-  /** @domName IDBIndex.count */
+  /// @domName IDBIndex.count; @docsEditable true
   IDBRequest count([key_OR_range]) {
     if (!?key_OR_range) {
       return _count_1();
@@ -9884,13 +10290,13 @@
       var key_1 = _convertDartToNative_IDBKey(key_OR_range);
       return _count_3(key_1);
     }
-    throw const Exception("Incorrect number or type of arguments");
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
   IDBRequest _count_1() native "count";
   IDBRequest _count_2(IDBKeyRange range) native "count";
   IDBRequest _count_3(key) native "count";
 
-  /** @domName IDBIndex.get */
+  /// @domName IDBIndex.get; @docsEditable true
   IDBRequest get(key) {
     if ((?key && (key is IDBKeyRange || key == null))) {
       return _get_1(key);
@@ -9899,12 +10305,14 @@
       var key_1 = _convertDartToNative_IDBKey(key);
       return _get_2(key_1);
     }
-    throw const Exception("Incorrect number or type of arguments");
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
+  @Returns('IDBRequest') @Creates('IDBRequest') @_annotation_Creates_SerializedScriptValue
   IDBRequest _get_1(IDBKeyRange key) native "get";
+  @Returns('IDBRequest') @Creates('IDBRequest') @_annotation_Creates_SerializedScriptValue
   IDBRequest _get_2(key) native "get";
 
-  /** @domName IDBIndex.getKey */
+  /// @domName IDBIndex.getKey; @docsEditable true
   IDBRequest getKey(key) {
     if ((?key && (key is IDBKeyRange || key == null))) {
       return _getKey_1(key);
@@ -9913,12 +10321,14 @@
       var key_1 = _convertDartToNative_IDBKey(key);
       return _getKey_2(key_1);
     }
-    throw const Exception("Incorrect number or type of arguments");
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
+  @Returns('IDBRequest') @Creates('IDBRequest') @_annotation_Creates_SerializedScriptValue @Creates('IDBObjectStore')
   IDBRequest _getKey_1(IDBKeyRange key) native "getKey";
+  @Returns('IDBRequest') @Creates('IDBRequest') @_annotation_Creates_SerializedScriptValue @Creates('IDBObjectStore')
   IDBRequest _getKey_2(key) native "getKey";
 
-  /** @domName IDBIndex.openCursor */
+  /// @domName IDBIndex.openCursor; @docsEditable true
   IDBRequest openCursor([key_OR_range, String direction]) {
     if (!?key_OR_range &&
         !?direction) {
@@ -9940,15 +10350,20 @@
       var key_2 = _convertDartToNative_IDBKey(key_OR_range);
       return _openCursor_5(key_2, direction);
     }
-    throw const Exception("Incorrect number or type of arguments");
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
+  @Returns('IDBRequest') @Creates('IDBRequest') @Creates('IDBCursor')
   IDBRequest _openCursor_1() native "openCursor";
+  @Returns('IDBRequest') @Creates('IDBRequest') @Creates('IDBCursor')
   IDBRequest _openCursor_2(IDBKeyRange range) native "openCursor";
+  @Returns('IDBRequest') @Creates('IDBRequest') @Creates('IDBCursor')
   IDBRequest _openCursor_3(IDBKeyRange range, direction) native "openCursor";
+  @Returns('IDBRequest') @Creates('IDBRequest') @Creates('IDBCursor')
   IDBRequest _openCursor_4(key) native "openCursor";
+  @Returns('IDBRequest') @Creates('IDBRequest') @Creates('IDBCursor')
   IDBRequest _openCursor_5(key, direction) native "openCursor";
 
-  /** @domName IDBIndex.openKeyCursor */
+  /// @domName IDBIndex.openKeyCursor; @docsEditable true
   IDBRequest openKeyCursor([key_OR_range, String direction]) {
     if (!?key_OR_range &&
         !?direction) {
@@ -9970,12 +10385,17 @@
       var key_2 = _convertDartToNative_IDBKey(key_OR_range);
       return _openKeyCursor_5(key_2, direction);
     }
-    throw const Exception("Incorrect number or type of arguments");
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
+  @Returns('IDBRequest') @Creates('IDBRequest') @Creates('IDBCursor')
   IDBRequest _openKeyCursor_1() native "openKeyCursor";
+  @Returns('IDBRequest') @Creates('IDBRequest') @Creates('IDBCursor')
   IDBRequest _openKeyCursor_2(IDBKeyRange range) native "openKeyCursor";
+  @Returns('IDBRequest') @Creates('IDBRequest') @Creates('IDBCursor')
   IDBRequest _openKeyCursor_3(IDBKeyRange range, direction) native "openKeyCursor";
+  @Returns('IDBRequest') @Creates('IDBRequest') @Creates('IDBCursor')
   IDBRequest _openKeyCursor_4(key) native "openKeyCursor";
+  @Returns('IDBRequest') @Creates('IDBRequest') @Creates('IDBCursor')
   IDBRequest _openKeyCursor_5(key, direction) native "openKeyCursor";
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -9983,7 +10403,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBKey
+/// @domName IDBKey; @docsEditable true
 class IDBKey native "*IDBKey" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10019,21 +10439,21 @@
           lower, upper, lowerOpen, upperOpen);
 
 
-  /** @domName IDBKeyRange.lower */
+  /// @domName IDBKeyRange.lower; @docsEditable true
   dynamic get lower => _convertNativeToDart_IDBKey(this._lower);
   dynamic get _lower => JS("dynamic", "#.lower", this);
 
-  /** @domName IDBKeyRange.lowerOpen */
+  /// @domName IDBKeyRange.lowerOpen; @docsEditable true
   final bool lowerOpen;
 
-  /** @domName IDBKeyRange.upper */
+  /// @domName IDBKeyRange.upper; @docsEditable true
   dynamic get upper => _convertNativeToDart_IDBKey(this._upper);
   dynamic get _upper => JS("dynamic", "#.upper", this);
 
-  /** @domName IDBKeyRange.upperOpen */
+  /// @domName IDBKeyRange.upperOpen; @docsEditable true
   final bool upperOpen;
 
-  /** @domName IDBKeyRange.bound_ */
+  /// @domName IDBKeyRange.bound_; @docsEditable true
   static IDBKeyRange bound_(/*IDBKey*/ lower, /*IDBKey*/ upper, [bool lowerOpen, bool upperOpen]) {
     if (?upperOpen) {
       var lower_1 = _convertDartToNative_IDBKey(lower);
@@ -10049,11 +10469,11 @@
     var upper_6 = _convertDartToNative_IDBKey(upper);
     return _bound__3(lower_5, upper_6);
   }
-  IDBKeyRange _bound__1(lower, upper, lowerOpen, upperOpen) native "bound";
-  IDBKeyRange _bound__2(lower, upper, lowerOpen) native "bound";
-  IDBKeyRange _bound__3(lower, upper) native "bound";
+  static IDBKeyRange _bound__1(lower, upper, lowerOpen, upperOpen) native "bound";
+  static IDBKeyRange _bound__2(lower, upper, lowerOpen) native "bound";
+  static IDBKeyRange _bound__3(lower, upper) native "bound";
 
-  /** @domName IDBKeyRange.lowerBound_ */
+  /// @domName IDBKeyRange.lowerBound_; @docsEditable true
   static IDBKeyRange lowerBound_(/*IDBKey*/ bound, [bool open]) {
     if (?open) {
       var bound_1 = _convertDartToNative_IDBKey(bound);
@@ -10062,17 +10482,17 @@
     var bound_2 = _convertDartToNative_IDBKey(bound);
     return _lowerBound__2(bound_2);
   }
-  IDBKeyRange _lowerBound__1(bound, open) native "lowerBound";
-  IDBKeyRange _lowerBound__2(bound) native "lowerBound";
+  static IDBKeyRange _lowerBound__1(bound, open) native "lowerBound";
+  static IDBKeyRange _lowerBound__2(bound) native "lowerBound";
 
-  /** @domName IDBKeyRange.only_ */
+  /// @domName IDBKeyRange.only_; @docsEditable true
   static IDBKeyRange only_(/*IDBKey*/ value) {
     var value_1 = _convertDartToNative_IDBKey(value);
     return _only__1(value_1);
   }
-  IDBKeyRange _only__1(value) native "only";
+  static IDBKeyRange _only__1(value) native "only";
 
-  /** @domName IDBKeyRange.upperBound_ */
+  /// @domName IDBKeyRange.upperBound_; @docsEditable true
   static IDBKeyRange upperBound_(/*IDBKey*/ bound, [bool open]) {
     if (?open) {
       var bound_1 = _convertDartToNative_IDBKey(bound);
@@ -10081,8 +10501,8 @@
     var bound_2 = _convertDartToNative_IDBKey(bound);
     return _upperBound__2(bound_2);
   }
-  IDBKeyRange _upperBound__1(bound, open) native "upperBound";
-  IDBKeyRange _upperBound__2(bound) native "upperBound";
+  static IDBKeyRange _upperBound__1(bound, open) native "upperBound";
+  static IDBKeyRange _upperBound__2(bound) native "upperBound";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10090,25 +10510,26 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBObjectStore
+/// @domName IDBObjectStore; @docsEditable true
 class IDBObjectStore native "*IDBObjectStore" {
 
-  /** @domName IDBObjectStore.autoIncrement */
+  /// @domName IDBObjectStore.autoIncrement; @docsEditable true
   final bool autoIncrement;
 
-  /** @domName IDBObjectStore.indexNames */
+  /// @domName IDBObjectStore.indexNames; @docsEditable true
+  @Returns('_DOMStringList') @Creates('_DOMStringList')
   final List<String> indexNames;
 
-  /** @domName IDBObjectStore.keyPath */
+  /// @domName IDBObjectStore.keyPath; @docsEditable true
   final dynamic keyPath;
 
-  /** @domName IDBObjectStore.name */
+  /// @domName IDBObjectStore.name; @docsEditable true
   final String name;
 
-  /** @domName IDBObjectStore.transaction */
+  /// @domName IDBObjectStore.transaction; @docsEditable true
   final IDBTransaction transaction;
 
-  /** @domName IDBObjectStore.add */
+  /// @domName IDBObjectStore.add; @docsEditable true
   IDBRequest add(/*any*/ value, [/*IDBKey*/ key]) {
     if (?key) {
       var value_1 = _convertDartToNative_SerializedScriptValue(value);
@@ -10118,13 +10539,15 @@
     var value_3 = _convertDartToNative_SerializedScriptValue(value);
     return _add_2(value_3);
   }
+  @Returns('IDBRequest') @Creates('IDBRequest') @_annotation_Creates_IDBKey
   IDBRequest _add_1(value, key) native "add";
+  @Returns('IDBRequest') @Creates('IDBRequest') @_annotation_Creates_IDBKey
   IDBRequest _add_2(value) native "add";
 
-  /** @domName IDBObjectStore.clear */
+  /// @domName IDBObjectStore.clear; @docsEditable true
   IDBRequest clear() native;
 
-  /** @domName IDBObjectStore.count */
+  /// @domName IDBObjectStore.count; @docsEditable true
   IDBRequest count([key_OR_range]) {
     if (!?key_OR_range) {
       return _count_1();
@@ -10136,13 +10559,13 @@
       var key_1 = _convertDartToNative_IDBKey(key_OR_range);
       return _count_3(key_1);
     }
-    throw const Exception("Incorrect number or type of arguments");
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
   IDBRequest _count_1() native "count";
   IDBRequest _count_2(IDBKeyRange range) native "count";
   IDBRequest _count_3(key) native "count";
 
-  /** @domName IDBObjectStore.createIndex */
+  /// @domName IDBObjectStore.createIndex; @docsEditable true
   IDBIndex createIndex(String name, keyPath, [Map options]) {
     if ((?keyPath && (keyPath is List<String> || keyPath == null)) &&
         !?options) {
@@ -10162,14 +10585,14 @@
       var options_4 = _convertDartToNative_Dictionary(options);
       return _createIndex_4(name, keyPath, options_4);
     }
-    throw const Exception("Incorrect number or type of arguments");
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
   IDBIndex _createIndex_1(name, List keyPath) native "createIndex";
   IDBIndex _createIndex_2(name, List keyPath, options) native "createIndex";
   IDBIndex _createIndex_3(name, String keyPath) native "createIndex";
   IDBIndex _createIndex_4(name, String keyPath, options) native "createIndex";
 
-  /** @domName IDBObjectStore.delete */
+  /// @domName IDBObjectStore.delete; @docsEditable true
   IDBRequest delete(key_OR_keyRange) {
     if ((?key_OR_keyRange && (key_OR_keyRange is IDBKeyRange || key_OR_keyRange == null))) {
       return _delete_1(key_OR_keyRange);
@@ -10178,15 +10601,15 @@
       var key_1 = _convertDartToNative_IDBKey(key_OR_keyRange);
       return _delete_2(key_1);
     }
-    throw const Exception("Incorrect number or type of arguments");
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
   IDBRequest _delete_1(IDBKeyRange keyRange) native "delete";
   IDBRequest _delete_2(key) native "delete";
 
-  /** @domName IDBObjectStore.deleteIndex */
+  /// @domName IDBObjectStore.deleteIndex; @docsEditable true
   void deleteIndex(String name) native;
 
-  /** @domName IDBObjectStore.getObject */
+  /// @domName IDBObjectStore.getObject; @docsEditable true
   IDBRequest getObject(key) {
     if ((?key && (key is IDBKeyRange || key == null))) {
       return _getObject_1(key);
@@ -10195,15 +10618,17 @@
       var key_1 = _convertDartToNative_IDBKey(key);
       return _getObject_2(key_1);
     }
-    throw const Exception("Incorrect number or type of arguments");
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
+  @Returns('IDBRequest') @Creates('IDBRequest') @_annotation_Creates_SerializedScriptValue
   IDBRequest _getObject_1(IDBKeyRange key) native "get";
+  @Returns('IDBRequest') @Creates('IDBRequest') @_annotation_Creates_SerializedScriptValue
   IDBRequest _getObject_2(key) native "get";
 
-  /** @domName IDBObjectStore.index */
+  /// @domName IDBObjectStore.index; @docsEditable true
   IDBIndex index(String name) native;
 
-  /** @domName IDBObjectStore.openCursor */
+  /// @domName IDBObjectStore.openCursor; @docsEditable true
   IDBRequest openCursor([key_OR_range, String direction]) {
     if (!?key_OR_range &&
         !?direction) {
@@ -10225,15 +10650,20 @@
       var key_2 = _convertDartToNative_IDBKey(key_OR_range);
       return _openCursor_5(key_2, direction);
     }
-    throw const Exception("Incorrect number or type of arguments");
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
+  @Returns('IDBRequest') @Creates('IDBRequest') @Creates('IDBCursor')
   IDBRequest _openCursor_1() native "openCursor";
+  @Returns('IDBRequest') @Creates('IDBRequest') @Creates('IDBCursor')
   IDBRequest _openCursor_2(IDBKeyRange range) native "openCursor";
+  @Returns('IDBRequest') @Creates('IDBRequest') @Creates('IDBCursor')
   IDBRequest _openCursor_3(IDBKeyRange range, direction) native "openCursor";
+  @Returns('IDBRequest') @Creates('IDBRequest') @Creates('IDBCursor')
   IDBRequest _openCursor_4(key) native "openCursor";
+  @Returns('IDBRequest') @Creates('IDBRequest') @Creates('IDBCursor')
   IDBRequest _openCursor_5(key, direction) native "openCursor";
 
-  /** @domName IDBObjectStore.put */
+  /// @domName IDBObjectStore.put; @docsEditable true
   IDBRequest put(/*any*/ value, [/*IDBKey*/ key]) {
     if (?key) {
       var value_1 = _convertDartToNative_SerializedScriptValue(value);
@@ -10243,7 +10673,9 @@
     var value_3 = _convertDartToNative_SerializedScriptValue(value);
     return _put_2(value_3);
   }
+  @Returns('IDBRequest') @Creates('IDBRequest') @_annotation_Creates_IDBKey
   IDBRequest _put_1(value, key) native "put";
+  @Returns('IDBRequest') @Creates('IDBRequest') @_annotation_Creates_IDBKey
   IDBRequest _put_2(value) native "put";
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10251,12 +10683,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBOpenDBRequest
+/// @domName IDBOpenDBRequest; @docsEditable true
 class IDBOpenDBRequest extends IDBRequest implements EventTarget native "*IDBOpenDBRequest" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   IDBOpenDBRequestEvents get on =>
     new IDBOpenDBRequestEvents(this);
 }
@@ -10273,44 +10703,43 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBRequest
+/// @domName IDBRequest; @docsEditable true
 class IDBRequest extends EventTarget native "*IDBRequest" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   IDBRequestEvents get on =>
     new IDBRequestEvents(this);
 
-  /** @domName IDBRequest.error */
+  /// @domName IDBRequest.error; @docsEditable true
   final DOMError error;
 
-  /** @domName IDBRequest.errorCode */
+  /// @domName IDBRequest.errorCode; @docsEditable true
   final int errorCode;
 
-  /** @domName IDBRequest.readyState */
+  /// @domName IDBRequest.readyState; @docsEditable true
   final String readyState;
 
-  /** @domName IDBRequest.result */
+  /// @domName IDBRequest.result; @docsEditable true
   dynamic get result => _convertNativeToDart_IDBAny(this._result);
   dynamic get _result => JS("dynamic", "#.result", this);
 
-  /** @domName IDBRequest.source */
+  /// @domName IDBRequest.source; @docsEditable true
+  @Creates('Null')
   final dynamic source;
 
-  /** @domName IDBRequest.transaction */
+  /// @domName IDBRequest.transaction; @docsEditable true
   final IDBTransaction transaction;
 
-  /** @domName IDBRequest.webkitErrorMessage */
+  /// @domName IDBRequest.webkitErrorMessage; @docsEditable true
   final String webkitErrorMessage;
 
-  /** @domName IDBRequest.addEventListener */
+  /// @domName IDBRequest.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName IDBRequest.dispatchEvent */
+  /// @domName IDBRequest.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName IDBRequest.removeEventListener */
+  /// @domName IDBRequest.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 }
 
@@ -10326,12 +10755,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBTransaction
+/// @domName IDBTransaction; @docsEditable true
 class IDBTransaction extends EventTarget native "*IDBTransaction" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   IDBTransactionEvents get on =>
     new IDBTransactionEvents(this);
 
@@ -10341,28 +10768,28 @@
 
   static const int VERSION_CHANGE = 2;
 
-  /** @domName IDBTransaction.db */
+  /// @domName IDBTransaction.db; @docsEditable true
   final IDBDatabase db;
 
-  /** @domName IDBTransaction.error */
+  /// @domName IDBTransaction.error; @docsEditable true
   final DOMError error;
 
-  /** @domName IDBTransaction.mode */
+  /// @domName IDBTransaction.mode; @docsEditable true
   final String mode;
 
-  /** @domName IDBTransaction.abort */
+  /// @domName IDBTransaction.abort; @docsEditable true
   void abort() native;
 
-  /** @domName IDBTransaction.addEventListener */
+  /// @domName IDBTransaction.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName IDBTransaction.dispatchEvent */
+  /// @domName IDBTransaction.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName IDBTransaction.objectStore */
+  /// @domName IDBTransaction.objectStore; @docsEditable true
   IDBObjectStore objectStore(String name) native;
 
-  /** @domName IDBTransaction.removeEventListener */
+  /// @domName IDBTransaction.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 }
 
@@ -10380,13 +10807,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBVersionChangeEvent
+/// @domName IDBVersionChangeEvent; @docsEditable true
 class IDBUpgradeNeededEvent extends Event native "*IDBVersionChangeEvent" {
 
-  /** @domName IDBVersionChangeEvent.newVersion */
+  /// @domName IDBVersionChangeEvent.newVersion; @docsEditable true
   final int newVersion;
 
-  /** @domName IDBVersionChangeEvent.oldVersion */
+  /// @domName IDBVersionChangeEvent.oldVersion; @docsEditable true
   final int oldVersion;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10394,10 +10821,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBVersionChangeEvent
+/// @domName IDBVersionChangeEvent; @docsEditable true
 class IDBVersionChangeEvent extends Event native "*IDBVersionChangeEvent" {
 
-  /** @domName IDBVersionChangeEvent.version */
+  /// @domName IDBVersionChangeEvent.version; @docsEditable true
   final String version;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10405,12 +10832,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IDBVersionChangeRequest
+/// @domName IDBVersionChangeRequest; @docsEditable true
 class IDBVersionChangeRequest extends IDBRequest implements EventTarget native "*IDBVersionChangeRequest" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   IDBVersionChangeRequestEvents get on =>
     new IDBVersionChangeRequestEvents(this);
 }
@@ -10425,49 +10850,49 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLIFrameElement
+/// @domName HTMLIFrameElement; @docsEditable true
 class IFrameElement extends Element implements Element native "*HTMLIFrameElement" {
 
-  factory IFrameElement() => _Elements.createIFrameElement();
+  factory IFrameElement() => document.$dom_createElement("iframe");
 
-  /** @domName HTMLIFrameElement.align */
+  /// @domName HTMLIFrameElement.align; @docsEditable true
   String align;
 
-  /** @domName HTMLIFrameElement.contentWindow */
+  /// @domName HTMLIFrameElement.contentWindow; @docsEditable true
   Window get contentWindow => _convertNativeToDart_Window(this._contentWindow);
   dynamic get _contentWindow => JS("dynamic", "#.contentWindow", this);
 
-  /** @domName HTMLIFrameElement.frameBorder */
+  /// @domName HTMLIFrameElement.frameBorder; @docsEditable true
   String frameBorder;
 
-  /** @domName HTMLIFrameElement.height */
+  /// @domName HTMLIFrameElement.height; @docsEditable true
   String height;
 
-  /** @domName HTMLIFrameElement.longDesc */
+  /// @domName HTMLIFrameElement.longDesc; @docsEditable true
   String longDesc;
 
-  /** @domName HTMLIFrameElement.marginHeight */
+  /// @domName HTMLIFrameElement.marginHeight; @docsEditable true
   String marginHeight;
 
-  /** @domName HTMLIFrameElement.marginWidth */
+  /// @domName HTMLIFrameElement.marginWidth; @docsEditable true
   String marginWidth;
 
-  /** @domName HTMLIFrameElement.name */
+  /// @domName HTMLIFrameElement.name; @docsEditable true
   String name;
 
-  /** @domName HTMLIFrameElement.sandbox */
+  /// @domName HTMLIFrameElement.sandbox; @docsEditable true
   String sandbox;
 
-  /** @domName HTMLIFrameElement.scrolling */
+  /// @domName HTMLIFrameElement.scrolling; @docsEditable true
   String scrolling;
 
-  /** @domName HTMLIFrameElement.src */
+  /// @domName HTMLIFrameElement.src; @docsEditable true
   String src;
 
-  /** @domName HTMLIFrameElement.srcdoc */
+  /// @domName HTMLIFrameElement.srcdoc; @docsEditable true
   String srcdoc;
 
-  /** @domName HTMLIFrameElement.width */
+  /// @domName HTMLIFrameElement.width; @docsEditable true
   String width;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10483,15 +10908,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName IceCandidate
+/// @domName IceCandidate; @docsEditable true
 class IceCandidate native "*IceCandidate" {
 
   factory IceCandidate(String label, String candidateLine) => _IceCandidateFactoryProvider.createIceCandidate(label, candidateLine);
 
-  /** @domName IceCandidate.label */
+  /// @domName IceCandidate.label; @docsEditable true
   final String label;
 
-  /** @domName IceCandidate.toSdp */
+  /// @domName IceCandidate.toSdp; @docsEditable true
   String toSdp() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10499,16 +10924,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ImageData
+/// @domName ImageData; @docsEditable true
 class ImageData native "*ImageData" {
 
-  /** @domName ImageData.data */
+  /// @domName ImageData.data; @docsEditable true
   final Uint8ClampedArray data;
 
-  /** @domName ImageData.height */
+  /// @domName ImageData.height; @docsEditable true
   final int height;
 
-  /** @domName ImageData.width */
+  /// @domName ImageData.width; @docsEditable true
   final int width;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10516,77 +10941,72 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLImageElement
+/// @domName HTMLImageElement; @docsEditable true
 class ImageElement extends Element implements Element native "*HTMLImageElement" {
 
   factory ImageElement({String src, int width, int height}) {
-    if (!?src) {
-      return _Elements.createImageElement();
-    }
-    if (!?width) {
-      return _Elements.createImageElement(src);
-    }
-    if (!?height) {
-      return _Elements.createImageElement(src, width);
-    }
-    return _Elements.createImageElement(src, width, height);
+    var e = document.$dom_createElement("img");
+    if (src != null) e.src = src;
+    if (width != null) e.width = width;
+    if (height != null) e.height = height;
+    return e;
   }
 
-  /** @domName HTMLImageElement.align */
+  /// @domName HTMLImageElement.align; @docsEditable true
   String align;
 
-  /** @domName HTMLImageElement.alt */
+  /// @domName HTMLImageElement.alt; @docsEditable true
   String alt;
 
-  /** @domName HTMLImageElement.border */
+  /// @domName HTMLImageElement.border; @docsEditable true
   String border;
 
-  /** @domName HTMLImageElement.complete */
+  /// @domName HTMLImageElement.complete; @docsEditable true
   final bool complete;
 
-  /** @domName HTMLImageElement.crossOrigin */
+  /// @domName HTMLImageElement.crossOrigin; @docsEditable true
   String crossOrigin;
 
-  /** @domName HTMLImageElement.height */
+  /// @domName HTMLImageElement.height; @docsEditable true
   int height;
 
-  /** @domName HTMLImageElement.hspace */
+  /// @domName HTMLImageElement.hspace; @docsEditable true
   int hspace;
 
-  /** @domName HTMLImageElement.isMap */
+  /// @domName HTMLImageElement.isMap; @docsEditable true
   bool isMap;
 
-  /** @domName HTMLImageElement.longDesc */
+  /// @domName HTMLImageElement.longDesc; @docsEditable true
   String longDesc;
 
-  /** @domName HTMLImageElement.lowsrc */
+  /// @domName HTMLImageElement.lowsrc; @docsEditable true
   String lowsrc;
 
-  /** @domName HTMLImageElement.name */
+  /// @domName HTMLImageElement.name; @docsEditable true
   String name;
 
-  /** @domName HTMLImageElement.naturalHeight */
+  /// @domName HTMLImageElement.naturalHeight; @docsEditable true
   final int naturalHeight;
 
-  /** @domName HTMLImageElement.naturalWidth */
+  /// @domName HTMLImageElement.naturalWidth; @docsEditable true
   final int naturalWidth;
 
-  /** @domName HTMLImageElement.src */
+  /// @domName HTMLImageElement.src; @docsEditable true
   String src;
 
-  /** @domName HTMLImageElement.useMap */
+  /// @domName HTMLImageElement.useMap; @docsEditable true
   String useMap;
 
-  /** @domName HTMLImageElement.vspace */
+  /// @domName HTMLImageElement.vspace; @docsEditable true
   int vspace;
 
-  /** @domName HTMLImageElement.width */
+  /// @domName HTMLImageElement.width; @docsEditable true
   int width;
 
-  /** @domName HTMLImageElement.x */
+  /// @domName HTMLImageElement.x; @docsEditable true
   final int x;
 
-  /** @domName HTMLImageElement.y */
+  /// @domName HTMLImageElement.y; @docsEditable true
   final int y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10594,191 +11014,191 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLInputElement
+/// @domName HTMLInputElement; @docsEditable true
 class InputElement extends Element implements Element native "*HTMLInputElement" {
 
   factory InputElement({String type}) {
-    if (!?type) {
-      return _Elements.createInputElement();
-    }
-    return _Elements.createInputElement(type);
+    var e = document.$dom_createElement("input");
+    if (type != null) e.type = type;
+    return e;
   }
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   InputElementEvents get on =>
     new InputElementEvents(this);
 
-  /** @domName HTMLInputElement.accept */
+  /// @domName HTMLInputElement.accept; @docsEditable true
   String accept;
 
-  /** @domName HTMLInputElement.align */
+  /// @domName HTMLInputElement.align; @docsEditable true
   String align;
 
-  /** @domName HTMLInputElement.alt */
+  /// @domName HTMLInputElement.alt; @docsEditable true
   String alt;
 
-  /** @domName HTMLInputElement.autocomplete */
+  /// @domName HTMLInputElement.autocomplete; @docsEditable true
   String autocomplete;
 
-  /** @domName HTMLInputElement.autofocus */
+  /// @domName HTMLInputElement.autofocus; @docsEditable true
   bool autofocus;
 
-  /** @domName HTMLInputElement.checked */
+  /// @domName HTMLInputElement.checked; @docsEditable true
   bool checked;
 
-  /** @domName HTMLInputElement.defaultChecked */
+  /// @domName HTMLInputElement.defaultChecked; @docsEditable true
   bool defaultChecked;
 
-  /** @domName HTMLInputElement.defaultValue */
+  /// @domName HTMLInputElement.defaultValue; @docsEditable true
   String defaultValue;
 
-  /** @domName HTMLInputElement.dirName */
+  /// @domName HTMLInputElement.dirName; @docsEditable true
   String dirName;
 
-  /** @domName HTMLInputElement.disabled */
+  /// @domName HTMLInputElement.disabled; @docsEditable true
   bool disabled;
 
-  /** @domName HTMLInputElement.files */
+  /// @domName HTMLInputElement.files; @docsEditable true
+  @Returns('_FileList') @Creates('_FileList')
   List<File> files;
 
-  /** @domName HTMLInputElement.form */
+  /// @domName HTMLInputElement.form; @docsEditable true
   final FormElement form;
 
-  /** @domName HTMLInputElement.formAction */
+  /// @domName HTMLInputElement.formAction; @docsEditable true
   String formAction;
 
-  /** @domName HTMLInputElement.formEnctype */
+  /// @domName HTMLInputElement.formEnctype; @docsEditable true
   String formEnctype;
 
-  /** @domName HTMLInputElement.formMethod */
+  /// @domName HTMLInputElement.formMethod; @docsEditable true
   String formMethod;
 
-  /** @domName HTMLInputElement.formNoValidate */
+  /// @domName HTMLInputElement.formNoValidate; @docsEditable true
   bool formNoValidate;
 
-  /** @domName HTMLInputElement.formTarget */
+  /// @domName HTMLInputElement.formTarget; @docsEditable true
   String formTarget;
 
-  /** @domName HTMLInputElement.height */
+  /// @domName HTMLInputElement.height; @docsEditable true
   int height;
 
-  /** @domName HTMLInputElement.incremental */
+  /// @domName HTMLInputElement.incremental; @docsEditable true
   bool incremental;
 
-  /** @domName HTMLInputElement.indeterminate */
+  /// @domName HTMLInputElement.indeterminate; @docsEditable true
   bool indeterminate;
 
-  /** @domName HTMLInputElement.labels */
+  /// @domName HTMLInputElement.labels; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   final List<Node> labels;
 
-  /** @domName HTMLInputElement.list */
+  /// @domName HTMLInputElement.list; @docsEditable true
   final Element list;
 
-  /** @domName HTMLInputElement.max */
+  /// @domName HTMLInputElement.max; @docsEditable true
   String max;
 
-  /** @domName HTMLInputElement.maxLength */
+  /// @domName HTMLInputElement.maxLength; @docsEditable true
   int maxLength;
 
-  /** @domName HTMLInputElement.min */
+  /// @domName HTMLInputElement.min; @docsEditable true
   String min;
 
-  /** @domName HTMLInputElement.multiple */
+  /// @domName HTMLInputElement.multiple; @docsEditable true
   bool multiple;
 
-  /** @domName HTMLInputElement.name */
+  /// @domName HTMLInputElement.name; @docsEditable true
   String name;
 
-  /** @domName HTMLInputElement.pattern */
+  /// @domName HTMLInputElement.pattern; @docsEditable true
   String pattern;
 
-  /** @domName HTMLInputElement.placeholder */
+  /// @domName HTMLInputElement.placeholder; @docsEditable true
   String placeholder;
 
-  /** @domName HTMLInputElement.readOnly */
+  /// @domName HTMLInputElement.readOnly; @docsEditable true
   bool readOnly;
 
-  /** @domName HTMLInputElement.required */
+  /// @domName HTMLInputElement.required; @docsEditable true
   bool required;
 
-  /** @domName HTMLInputElement.selectionDirection */
+  /// @domName HTMLInputElement.selectionDirection; @docsEditable true
   String selectionDirection;
 
-  /** @domName HTMLInputElement.selectionEnd */
+  /// @domName HTMLInputElement.selectionEnd; @docsEditable true
   int selectionEnd;
 
-  /** @domName HTMLInputElement.selectionStart */
+  /// @domName HTMLInputElement.selectionStart; @docsEditable true
   int selectionStart;
 
-  /** @domName HTMLInputElement.size */
+  /// @domName HTMLInputElement.size; @docsEditable true
   int size;
 
-  /** @domName HTMLInputElement.src */
+  /// @domName HTMLInputElement.src; @docsEditable true
   String src;
 
-  /** @domName HTMLInputElement.step */
+  /// @domName HTMLInputElement.step; @docsEditable true
   String step;
 
-  /** @domName HTMLInputElement.type */
+  /// @domName HTMLInputElement.type; @docsEditable true
   String type;
 
-  /** @domName HTMLInputElement.useMap */
+  /// @domName HTMLInputElement.useMap; @docsEditable true
   String useMap;
 
-  /** @domName HTMLInputElement.validationMessage */
+  /// @domName HTMLInputElement.validationMessage; @docsEditable true
   final String validationMessage;
 
-  /** @domName HTMLInputElement.validity */
+  /// @domName HTMLInputElement.validity; @docsEditable true
   final ValidityState validity;
 
-  /** @domName HTMLInputElement.value */
+  /// @domName HTMLInputElement.value; @docsEditable true
   String value;
 
-  /** @domName HTMLInputElement.valueAsDate */
+  /// @domName HTMLInputElement.valueAsDate; @docsEditable true
   Date valueAsDate;
 
-  /** @domName HTMLInputElement.valueAsNumber */
+  /// @domName HTMLInputElement.valueAsNumber; @docsEditable true
   num valueAsNumber;
 
-  /** @domName HTMLInputElement.webkitEntries */
+  /// @domName HTMLInputElement.webkitEntries; @docsEditable true
+  @Returns('_EntryArray') @Creates('_EntryArray')
   final List<Entry> webkitEntries;
 
-  /** @domName HTMLInputElement.webkitGrammar */
+  /// @domName HTMLInputElement.webkitGrammar; @docsEditable true
   bool webkitGrammar;
 
-  /** @domName HTMLInputElement.webkitSpeech */
+  /// @domName HTMLInputElement.webkitSpeech; @docsEditable true
   bool webkitSpeech;
 
-  /** @domName HTMLInputElement.webkitdirectory */
+  /// @domName HTMLInputElement.webkitdirectory; @docsEditable true
   bool webkitdirectory;
 
-  /** @domName HTMLInputElement.width */
+  /// @domName HTMLInputElement.width; @docsEditable true
   int width;
 
-  /** @domName HTMLInputElement.willValidate */
+  /// @domName HTMLInputElement.willValidate; @docsEditable true
   final bool willValidate;
 
-  /** @domName HTMLInputElement.checkValidity */
+  /// @domName HTMLInputElement.checkValidity; @docsEditable true
   bool checkValidity() native;
 
-  /** @domName HTMLInputElement.select */
+  /// @domName HTMLInputElement.select; @docsEditable true
   void select() native;
 
-  /** @domName HTMLInputElement.setCustomValidity */
+  /// @domName HTMLInputElement.setCustomValidity; @docsEditable true
   void setCustomValidity(String error) native;
 
-  /** @domName HTMLInputElement.setRangeText */
+  /// @domName HTMLInputElement.setRangeText; @docsEditable true
   void setRangeText(String replacement, [int start, int end, String selectionMode]) native;
 
-  /** @domName HTMLInputElement.setSelectionRange */
+  /// @domName HTMLInputElement.setSelectionRange; @docsEditable true
   void setSelectionRange(int start, int end, [String direction]) native;
 
-  /** @domName HTMLInputElement.stepDown */
+  /// @domName HTMLInputElement.stepDown; @docsEditable true
   void stepDown([int n]) native;
 
-  /** @domName HTMLInputElement.stepUp */
+  /// @domName HTMLInputElement.stepUp; @docsEditable true
   void stepUp([int n]) native;
 }
 
@@ -10792,7 +11212,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Int16Array
+/// @domName Int16Array; @docsEditable true
 class Int16Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Int16Array" {
 
   factory Int16Array(int length) =>
@@ -10806,13 +11226,12 @@
 
   static const int BYTES_PER_ELEMENT = 2;
 
-  /** @domName Int16Array.length */
+  /// @domName Int16Array.length; @docsEditable true
   final int length;
 
   int operator[](int index) => JS("int", "#[#]", this, index);
 
-  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
-  // -- start List<int> mixins.
+  void operator[]=(int index, int value) { JS("void", "#[#] = #", this, index, value); }  // -- start List<int> mixins.
   // int is the element type.
 
   // From Iterable<int>:
@@ -10867,6 +11286,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  int get first => this[0];
+
   int get last => this[length - 1];
 
   int removeLast() {
@@ -10890,10 +11311,10 @@
 
   // -- end List<int> mixins.
 
-  /** @domName Int16Array.setElements */
+  /// @domName Int16Array.setElements; @docsEditable true
   void setElements(Object array, [int offset]) native "set";
 
-  /** @domName Int16Array.subarray */
+  /// @domName Int16Array.subarray; @docsEditable true
   Int16Array subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -10901,7 +11322,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Int32Array
+/// @domName Int32Array; @docsEditable true
 class Int32Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Int32Array" {
 
   factory Int32Array(int length) =>
@@ -10915,13 +11336,12 @@
 
   static const int BYTES_PER_ELEMENT = 4;
 
-  /** @domName Int32Array.length */
+  /// @domName Int32Array.length; @docsEditable true
   final int length;
 
   int operator[](int index) => JS("int", "#[#]", this, index);
 
-  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
-  // -- start List<int> mixins.
+  void operator[]=(int index, int value) { JS("void", "#[#] = #", this, index, value); }  // -- start List<int> mixins.
   // int is the element type.
 
   // From Iterable<int>:
@@ -10976,6 +11396,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  int get first => this[0];
+
   int get last => this[length - 1];
 
   int removeLast() {
@@ -10999,10 +11421,10 @@
 
   // -- end List<int> mixins.
 
-  /** @domName Int32Array.setElements */
+  /// @domName Int32Array.setElements; @docsEditable true
   void setElements(Object array, [int offset]) native "set";
 
-  /** @domName Int32Array.subarray */
+  /// @domName Int32Array.subarray; @docsEditable true
   Int32Array subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11010,7 +11432,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Int8Array
+/// @domName Int8Array; @docsEditable true
 class Int8Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Int8Array" {
 
   factory Int8Array(int length) =>
@@ -11024,13 +11446,12 @@
 
   static const int BYTES_PER_ELEMENT = 1;
 
-  /** @domName Int8Array.length */
+  /// @domName Int8Array.length; @docsEditable true
   final int length;
 
   int operator[](int index) => JS("int", "#[#]", this, index);
 
-  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
-  // -- start List<int> mixins.
+  void operator[]=(int index, int value) { JS("void", "#[#] = #", this, index, value); }  // -- start List<int> mixins.
   // int is the element type.
 
   // From Iterable<int>:
@@ -11085,6 +11506,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  int get first => this[0];
+
   int get last => this[length - 1];
 
   int removeLast() {
@@ -11108,10 +11531,10 @@
 
   // -- end List<int> mixins.
 
-  /** @domName Int8Array.setElements */
+  /// @domName Int8Array.setElements; @docsEditable true
   void setElements(Object array, [int offset]) native "set";
 
-  /** @domName Int8Array.subarray */
+  /// @domName Int8Array.subarray; @docsEditable true
   Int8Array subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11119,7 +11542,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName JavaScriptCallFrame
+/// @domName JavaScriptCallFrame; @docsEditable true
 class JavaScriptCallFrame native "*JavaScriptCallFrame" {
 
   static const int CATCH_SCOPE = 4;
@@ -11132,37 +11555,37 @@
 
   static const int WITH_SCOPE = 2;
 
-  /** @domName JavaScriptCallFrame.caller */
+  /// @domName JavaScriptCallFrame.caller; @docsEditable true
   final JavaScriptCallFrame caller;
 
-  /** @domName JavaScriptCallFrame.column */
+  /// @domName JavaScriptCallFrame.column; @docsEditable true
   final int column;
 
-  /** @domName JavaScriptCallFrame.functionName */
+  /// @domName JavaScriptCallFrame.functionName; @docsEditable true
   final String functionName;
 
-  /** @domName JavaScriptCallFrame.line */
+  /// @domName JavaScriptCallFrame.line; @docsEditable true
   final int line;
 
-  /** @domName JavaScriptCallFrame.scopeChain */
+  /// @domName JavaScriptCallFrame.scopeChain; @docsEditable true
   final List scopeChain;
 
-  /** @domName JavaScriptCallFrame.sourceID */
+  /// @domName JavaScriptCallFrame.sourceID; @docsEditable true
   final int sourceID;
 
-  /** @domName JavaScriptCallFrame.thisObject */
+  /// @domName JavaScriptCallFrame.thisObject; @docsEditable true
   final Object thisObject;
 
-  /** @domName JavaScriptCallFrame.type */
+  /// @domName JavaScriptCallFrame.type; @docsEditable true
   final String type;
 
-  /** @domName JavaScriptCallFrame.evaluate */
+  /// @domName JavaScriptCallFrame.evaluate; @docsEditable true
   void evaluate(String script) native;
 
-  /** @domName JavaScriptCallFrame.restart */
+  /// @domName JavaScriptCallFrame.restart; @docsEditable true
   Object restart() native;
 
-  /** @domName JavaScriptCallFrame.scopeType */
+  /// @domName JavaScriptCallFrame.scopeType; @docsEditable true
   int scopeType(int scopeIndex) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11170,31 +11593,31 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName KeyboardEvent
+/// @domName KeyboardEvent; @docsEditable true
 class KeyboardEvent extends UIEvent native "*KeyboardEvent" {
 
-  /** @domName KeyboardEvent.altGraphKey */
+  /// @domName KeyboardEvent.altGraphKey; @docsEditable true
   final bool altGraphKey;
 
-  /** @domName KeyboardEvent.altKey */
+  /// @domName KeyboardEvent.altKey; @docsEditable true
   final bool altKey;
 
-  /** @domName KeyboardEvent.ctrlKey */
+  /// @domName KeyboardEvent.ctrlKey; @docsEditable true
   final bool ctrlKey;
 
-  /** @domName KeyboardEvent.keyIdentifier */
+  /// @domName KeyboardEvent.keyIdentifier; @docsEditable true
   final String keyIdentifier;
 
-  /** @domName KeyboardEvent.keyLocation */
+  /// @domName KeyboardEvent.keyLocation; @docsEditable true
   final int keyLocation;
 
-  /** @domName KeyboardEvent.metaKey */
+  /// @domName KeyboardEvent.metaKey; @docsEditable true
   final bool metaKey;
 
-  /** @domName KeyboardEvent.shiftKey */
+  /// @domName KeyboardEvent.shiftKey; @docsEditable true
   final bool shiftKey;
 
-  /** @domName KeyboardEvent.initKeyboardEvent */
+  /// @domName KeyboardEvent.initKeyboardEvent; @docsEditable true
   void initKeyboardEvent(String type, bool canBubble, bool cancelable, LocalWindow view, String keyIdentifier, int keyLocation, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11202,48 +11625,49 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLKeygenElement
+/// @domName HTMLKeygenElement; @docsEditable true
 class KeygenElement extends Element implements Element native "*HTMLKeygenElement" {
 
-  factory KeygenElement() => _Elements.createKeygenElement();
+  factory KeygenElement() => document.$dom_createElement("keygen");
 
-  /** @domName HTMLKeygenElement.autofocus */
+  /// @domName HTMLKeygenElement.autofocus; @docsEditable true
   bool autofocus;
 
-  /** @domName HTMLKeygenElement.challenge */
+  /// @domName HTMLKeygenElement.challenge; @docsEditable true
   String challenge;
 
-  /** @domName HTMLKeygenElement.disabled */
+  /// @domName HTMLKeygenElement.disabled; @docsEditable true
   bool disabled;
 
-  /** @domName HTMLKeygenElement.form */
+  /// @domName HTMLKeygenElement.form; @docsEditable true
   final FormElement form;
 
-  /** @domName HTMLKeygenElement.keytype */
+  /// @domName HTMLKeygenElement.keytype; @docsEditable true
   String keytype;
 
-  /** @domName HTMLKeygenElement.labels */
+  /// @domName HTMLKeygenElement.labels; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   final List<Node> labels;
 
-  /** @domName HTMLKeygenElement.name */
+  /// @domName HTMLKeygenElement.name; @docsEditable true
   String name;
 
-  /** @domName HTMLKeygenElement.type */
+  /// @domName HTMLKeygenElement.type; @docsEditable true
   final String type;
 
-  /** @domName HTMLKeygenElement.validationMessage */
+  /// @domName HTMLKeygenElement.validationMessage; @docsEditable true
   final String validationMessage;
 
-  /** @domName HTMLKeygenElement.validity */
+  /// @domName HTMLKeygenElement.validity; @docsEditable true
   final ValidityState validity;
 
-  /** @domName HTMLKeygenElement.willValidate */
+  /// @domName HTMLKeygenElement.willValidate; @docsEditable true
   final bool willValidate;
 
-  /** @domName HTMLKeygenElement.checkValidity */
+  /// @domName HTMLKeygenElement.checkValidity; @docsEditable true
   bool checkValidity() native;
 
-  /** @domName HTMLKeygenElement.setCustomValidity */
+  /// @domName HTMLKeygenElement.setCustomValidity; @docsEditable true
   void setCustomValidity(String error) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11251,15 +11675,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLLIElement
+/// @domName HTMLLIElement; @docsEditable true
 class LIElement extends Element implements Element native "*HTMLLIElement" {
 
-  factory LIElement() => _Elements.createLIElement();
+  factory LIElement() => document.$dom_createElement("li");
 
-  /** @domName HTMLLIElement.type */
+  /// @domName HTMLLIElement.type; @docsEditable true
   String type;
 
-  /** @domName HTMLLIElement.value */
+  /// @domName HTMLLIElement.value; @docsEditable true
   int value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11267,18 +11691,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLLabelElement
+/// @domName HTMLLabelElement; @docsEditable true
 class LabelElement extends Element implements Element native "*HTMLLabelElement" {
 
-  factory LabelElement() => _Elements.createLabelElement();
+  factory LabelElement() => document.$dom_createElement("label");
 
-  /** @domName HTMLLabelElement.control */
+  /// @domName HTMLLabelElement.control; @docsEditable true
   final Element control;
 
-  /** @domName HTMLLabelElement.form */
+  /// @domName HTMLLabelElement.form; @docsEditable true
   final FormElement form;
 
-  /** @domName HTMLLabelElement.htmlFor */
+  /// @domName HTMLLabelElement.htmlFor; @docsEditable true
   String htmlFor;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11286,15 +11710,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLLegendElement
+/// @domName HTMLLegendElement; @docsEditable true
 class LegendElement extends Element implements Element native "*HTMLLegendElement" {
 
-  factory LegendElement() => _Elements.createLegendElement();
+  factory LegendElement() => document.$dom_createElement("legend");
 
-  /** @domName HTMLLegendElement.align */
+  /// @domName HTMLLegendElement.align; @docsEditable true
   String align;
 
-  /** @domName HTMLLegendElement.form */
+  /// @domName HTMLLegendElement.form; @docsEditable true
   final FormElement form;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11302,42 +11726,42 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLLinkElement
+/// @domName HTMLLinkElement; @docsEditable true
 class LinkElement extends Element implements Element native "*HTMLLinkElement" {
 
-  factory LinkElement() => _Elements.createLinkElement();
+  factory LinkElement() => document.$dom_createElement("link");
 
-  /** @domName HTMLLinkElement.charset */
+  /// @domName HTMLLinkElement.charset; @docsEditable true
   String charset;
 
-  /** @domName HTMLLinkElement.disabled */
+  /// @domName HTMLLinkElement.disabled; @docsEditable true
   bool disabled;
 
-  /** @domName HTMLLinkElement.href */
+  /// @domName HTMLLinkElement.href; @docsEditable true
   String href;
 
-  /** @domName HTMLLinkElement.hreflang */
+  /// @domName HTMLLinkElement.hreflang; @docsEditable true
   String hreflang;
 
-  /** @domName HTMLLinkElement.media */
+  /// @domName HTMLLinkElement.media; @docsEditable true
   String media;
 
-  /** @domName HTMLLinkElement.rel */
+  /// @domName HTMLLinkElement.rel; @docsEditable true
   String rel;
 
-  /** @domName HTMLLinkElement.rev */
+  /// @domName HTMLLinkElement.rev; @docsEditable true
   String rev;
 
-  /** @domName HTMLLinkElement.sheet */
+  /// @domName HTMLLinkElement.sheet; @docsEditable true
   final StyleSheet sheet;
 
-  /** @domName HTMLLinkElement.sizes */
+  /// @domName HTMLLinkElement.sizes; @docsEditable true
   DOMSettableTokenList sizes;
 
-  /** @domName HTMLLinkElement.target */
+  /// @domName HTMLLinkElement.target; @docsEditable true
   String target;
 
-  /** @domName HTMLLinkElement.type */
+  /// @domName HTMLLinkElement.type; @docsEditable true
   String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11345,28 +11769,28 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName History
+/// @domName History; @docsEditable true
 class LocalHistory implements History native "*History" {
 
-  /** @domName History.length */
+  /// @domName History.length; @docsEditable true
   final int length;
 
-  /** @domName History.state */
+  /// @domName History.state; @docsEditable true
   final dynamic state;
 
-  /** @domName History.back */
+  /// @domName History.back; @docsEditable true
   void back() native;
 
-  /** @domName History.forward */
+  /// @domName History.forward; @docsEditable true
   void forward() native;
 
-  /** @domName History.go */
+  /// @domName History.go; @docsEditable true
   void go(int distance) native;
 
-  /** @domName History.pushState */
+  /// @domName History.pushState; @docsEditable true
   void pushState(Object data, String title, [String url]) native;
 
-  /** @domName History.replaceState */
+  /// @domName History.replaceState; @docsEditable true
   void replaceState(Object data, String title, [String url]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11374,49 +11798,50 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Location
+/// @domName Location; @docsEditable true
 class LocalLocation implements Location native "*Location" {
 
-  /** @domName Location.ancestorOrigins */
+  /// @domName Location.ancestorOrigins; @docsEditable true
+  @Returns('_DOMStringList') @Creates('_DOMStringList')
   final List<String> ancestorOrigins;
 
-  /** @domName Location.hash */
+  /// @domName Location.hash; @docsEditable true
   String hash;
 
-  /** @domName Location.host */
+  /// @domName Location.host; @docsEditable true
   String host;
 
-  /** @domName Location.hostname */
+  /// @domName Location.hostname; @docsEditable true
   String hostname;
 
-  /** @domName Location.href */
+  /// @domName Location.href; @docsEditable true
   String href;
 
-  /** @domName Location.origin */
+  /// @domName Location.origin; @docsEditable true
   final String origin;
 
-  /** @domName Location.pathname */
+  /// @domName Location.pathname; @docsEditable true
   String pathname;
 
-  /** @domName Location.port */
+  /// @domName Location.port; @docsEditable true
   String port;
 
-  /** @domName Location.protocol */
+  /// @domName Location.protocol; @docsEditable true
   String protocol;
 
-  /** @domName Location.search */
+  /// @domName Location.search; @docsEditable true
   String search;
 
-  /** @domName Location.assign */
+  /// @domName Location.assign; @docsEditable true
   void assign(String url) native;
 
-  /** @domName Location.reload */
+  /// @domName Location.reload; @docsEditable true
   void reload() native;
 
-  /** @domName Location.replace */
+  /// @domName Location.replace; @docsEditable true
   void replace(String url) native;
 
-  /** @domName Location.toString */
+  /// @domName Location.toString; @docsEditable true
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11424,10 +11849,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName LocalMediaStream
+/// @domName LocalMediaStream; @docsEditable true
 class LocalMediaStream extends MediaStream implements EventTarget native "*LocalMediaStream" {
 
-  /** @domName LocalMediaStream.stop */
+  /// @domName LocalMediaStream.stop; @docsEditable true
   void stop() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11562,7 +11987,7 @@
    * registered under [name].
    */
   SendPortSync lookupPort(String name) {
-    var port = JSON.parse(localStorage['dart-port:$name']);
+    var port = JSON.parse(document.documentElement.attributes['dart-port:$name']);
     return _deserialize(port);
   }
 
@@ -11573,13 +11998,11 @@
    */
   void registerPort(String name, var port) {
     var serialized = _serialize(port);
-    localStorage['dart-port:$name'] = JSON.stringify(serialized);
+    document.documentElement.attributes['dart-port:$name'] = JSON.stringify(serialized);
   }
 
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   LocalWindowEvents get on =>
     new LocalWindowEvents(this);
 
@@ -11587,207 +12010,203 @@
 
   static const int TEMPORARY = 0;
 
-  /** @domName Window.applicationCache */
+  /// @domName Window.applicationCache; @docsEditable true
   final DOMApplicationCache applicationCache;
 
-  /** @domName Window.closed */
+  /// @domName Window.closed; @docsEditable true
   final bool closed;
 
-  /** @domName Window.console */
+  /// @domName Window.console; @docsEditable true
   final Console console;
 
-  /** @domName Window.crypto */
+  /// @domName Window.crypto; @docsEditable true
   final Crypto crypto;
 
-  /** @domName Window.defaultStatus */
+  /// @domName Window.defaultStatus; @docsEditable true
   String defaultStatus;
 
-  /** @domName Window.defaultstatus */
+  /// @domName Window.defaultstatus; @docsEditable true
   String defaultstatus;
 
-  /** @domName Window.devicePixelRatio */
+  /// @domName Window.devicePixelRatio; @docsEditable true
   final num devicePixelRatio;
 
-  /** @domName Window.event */
+  /// @domName Window.event; @docsEditable true
   final Event event;
 
-  /** @domName Window.history */
+  /// @domName Window.history; @docsEditable true
   final LocalHistory history;
 
-  /** @domName Window.innerHeight */
+  /// @domName Window.innerHeight; @docsEditable true
   final int innerHeight;
 
-  /** @domName Window.innerWidth */
+  /// @domName Window.innerWidth; @docsEditable true
   final int innerWidth;
 
-  /** @domName Window.localStorage */
+  /// @domName Window.localStorage; @docsEditable true
   final Storage localStorage;
 
-  /** @domName Window.locationbar */
+  /// @domName Window.locationbar; @docsEditable true
   final BarInfo locationbar;
 
-  /** @domName Window.menubar */
+  /// @domName Window.menubar; @docsEditable true
   final BarInfo menubar;
 
-  /** @domName Window.name */
+  /// @domName Window.name; @docsEditable true
   String name;
 
-  /** @domName Window.navigator */
+  /// @domName Window.navigator; @docsEditable true
   final Navigator navigator;
 
-  /** @domName Window.offscreenBuffering */
+  /// @domName Window.offscreenBuffering; @docsEditable true
   final bool offscreenBuffering;
 
-  /** @domName Window.opener */
+  /// @domName Window.opener; @docsEditable true
   Window get opener => _convertNativeToDart_Window(this._opener);
   dynamic get _opener => JS("dynamic", "#.opener", this);
 
-  /** @domName Window.outerHeight */
+  /// @domName Window.outerHeight; @docsEditable true
   final int outerHeight;
 
-  /** @domName Window.outerWidth */
+  /// @domName Window.outerWidth; @docsEditable true
   final int outerWidth;
 
-  /** @domName DOMWindow.pagePopupController */
+  /// @domName DOMWindow.pagePopupController; @docsEditable true
   final PagePopupController pagePopupController;
 
-  /** @domName Window.pageXOffset */
+  /// @domName Window.pageXOffset; @docsEditable true
   final int pageXOffset;
 
-  /** @domName Window.pageYOffset */
+  /// @domName Window.pageYOffset; @docsEditable true
   final int pageYOffset;
 
-  /** @domName Window.parent */
+  /// @domName Window.parent; @docsEditable true
   Window get parent => _convertNativeToDart_Window(this._parent);
   dynamic get _parent => JS("dynamic", "#.parent", this);
 
-  /** @domName Window.performance */
+  /// @domName Window.performance; @docsEditable true
   final Performance performance;
 
-  /** @domName Window.personalbar */
+  /// @domName Window.personalbar; @docsEditable true
   final BarInfo personalbar;
 
-  /** @domName Window.screen */
+  /// @domName Window.screen; @docsEditable true
   final Screen screen;
 
-  /** @domName Window.screenLeft */
+  /// @domName Window.screenLeft; @docsEditable true
   final int screenLeft;
 
-  /** @domName Window.screenTop */
+  /// @domName Window.screenTop; @docsEditable true
   final int screenTop;
 
-  /** @domName Window.screenX */
+  /// @domName Window.screenX; @docsEditable true
   final int screenX;
 
-  /** @domName Window.screenY */
+  /// @domName Window.screenY; @docsEditable true
   final int screenY;
 
-  /** @domName Window.scrollX */
+  /// @domName Window.scrollX; @docsEditable true
   final int scrollX;
 
-  /** @domName Window.scrollY */
+  /// @domName Window.scrollY; @docsEditable true
   final int scrollY;
 
-  /** @domName Window.scrollbars */
+  /// @domName Window.scrollbars; @docsEditable true
   final BarInfo scrollbars;
 
-  /** @domName Window.self */
+  /// @domName Window.self; @docsEditable true
   Window get self => _convertNativeToDart_Window(this._self);
   dynamic get _self => JS("dynamic", "#.self", this);
 
-  /** @domName Window.sessionStorage */
+  /// @domName Window.sessionStorage; @docsEditable true
   final Storage sessionStorage;
 
-  /** @domName Window.status */
+  /// @domName Window.status; @docsEditable true
   String status;
 
-  /** @domName Window.statusbar */
+  /// @domName Window.statusbar; @docsEditable true
   final BarInfo statusbar;
 
-  /** @domName Window.styleMedia */
+  /// @domName Window.styleMedia; @docsEditable true
   final StyleMedia styleMedia;
 
-  /** @domName Window.toolbar */
+  /// @domName Window.toolbar; @docsEditable true
   final BarInfo toolbar;
 
-  /** @domName Window.top */
+  /// @domName Window.top; @docsEditable true
   Window get top => _convertNativeToDart_Window(this._top);
   dynamic get _top => JS("dynamic", "#.top", this);
 
-  /** @domName DOMWindow.webkitIndexedDB */
+  /// @domName DOMWindow.webkitIndexedDB; @docsEditable true
   final IDBFactory webkitIndexedDB;
 
-  /** @domName DOMWindow.webkitNotifications */
+  /// @domName DOMWindow.webkitNotifications; @docsEditable true
   final NotificationCenter webkitNotifications;
 
-  /** @domName DOMWindow.webkitStorageInfo */
+  /// @domName DOMWindow.webkitStorageInfo; @docsEditable true
   final StorageInfo webkitStorageInfo;
 
-  /** @domName Window.window */
+  /// @domName Window.window; @docsEditable true
   Window get window => _convertNativeToDart_Window(this._window);
   dynamic get _window => JS("dynamic", "#.window", this);
 
-  /** @domName Window.addEventListener */
+  /// @domName Window.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName Window.alert */
+  /// @domName Window.alert; @docsEditable true
   void alert(String message) native;
 
-  /** @domName Window.atob */
+  /// @domName Window.atob; @docsEditable true
   String atob(String string) native;
 
-  /** @domName Window.blur */
-  void blur() native;
-
-  /** @domName Window.btoa */
+  /// @domName Window.btoa; @docsEditable true
   String btoa(String string) native;
 
-  /** @domName Window.captureEvents */
+  /// @domName Window.captureEvents; @docsEditable true
   void captureEvents() native;
 
-  /** @domName Window.clearInterval */
+  /// @domName Window.clearInterval; @docsEditable true
   void clearInterval(int handle) native;
 
-  /** @domName Window.clearTimeout */
+  /// @domName Window.clearTimeout; @docsEditable true
   void clearTimeout(int handle) native;
 
-  /** @domName Window.close */
+  /// @domName Window.close; @docsEditable true
   void close() native;
 
-  /** @domName Window.confirm */
+  /// @domName Window.confirm; @docsEditable true
   bool confirm(String message) native;
 
-  /** @domName Window.dispatchEvent */
+  /// @domName Window.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName Window.find */
+  /// @domName Window.find; @docsEditable true
   bool find(String string, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) native;
 
-  /** @domName Window.focus */
-  void focus() native;
-
-  /** @domName Window.getComputedStyle */
+  /// @domName Window.getComputedStyle; @docsEditable true
   CSSStyleDeclaration $dom_getComputedStyle(Element element, String pseudoElement) native "getComputedStyle";
 
-  /** @domName Window.getMatchedCSSRules */
+  /// @domName Window.getMatchedCSSRules; @docsEditable true
+  @Returns('_CSSRuleList') @Creates('_CSSRuleList')
   List<CSSRule> getMatchedCSSRules(Element element, String pseudoElement) native;
 
-  /** @domName Window.getSelection */
+  /// @domName Window.getSelection; @docsEditable true
   DOMSelection getSelection() native;
 
-  /** @domName Window.matchMedia */
+  /// @domName Window.matchMedia; @docsEditable true
   MediaQueryList matchMedia(String query) native;
 
-  /** @domName Window.moveBy */
+  /// @domName Window.moveBy; @docsEditable true
   void moveBy(num x, num y) native;
 
-  /** @domName Window.moveTo */
+  /// @domName Window.moveTo; @docsEditable true
   void moveTo(num x, num y) native;
 
-  /** @domName DOMWindow.openDatabase */
+  /// @domName DOMWindow.openDatabase; @docsEditable true
+  @Creates('Database') @Creates('DatabaseSync')
   Database openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native;
 
-  /** @domName Window.postMessage */
+  /// @domName Window.postMessage; @docsEditable true
   void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List messagePorts]) {
     if (?message &&
         !?messagePorts) {
@@ -11800,57 +12219,57 @@
       _postMessage_2(message_2, targetOrigin, messagePorts);
       return;
     }
-    throw const Exception("Incorrect number or type of arguments");
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
   void _postMessage_1(message, targetOrigin) native "postMessage";
   void _postMessage_2(message, targetOrigin, List messagePorts) native "postMessage";
 
-  /** @domName Window.print */
+  /// @domName Window.print; @docsEditable true
   void print() native;
 
-  /** @domName Window.releaseEvents */
+  /// @domName Window.releaseEvents; @docsEditable true
   void releaseEvents() native;
 
-  /** @domName Window.removeEventListener */
+  /// @domName Window.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 
-  /** @domName Window.resizeBy */
+  /// @domName Window.resizeBy; @docsEditable true
   void resizeBy(num x, num y) native;
 
-  /** @domName Window.resizeTo */
+  /// @domName Window.resizeTo; @docsEditable true
   void resizeTo(num width, num height) native;
 
-  /** @domName Window.scroll */
+  /// @domName Window.scroll; @docsEditable true
   void scroll(int x, int y) native;
 
-  /** @domName Window.scrollBy */
+  /// @domName Window.scrollBy; @docsEditable true
   void scrollBy(int x, int y) native;
 
-  /** @domName Window.scrollTo */
+  /// @domName Window.scrollTo; @docsEditable true
   void scrollTo(int x, int y) native;
 
-  /** @domName Window.setInterval */
+  /// @domName Window.setInterval; @docsEditable true
   int setInterval(TimeoutHandler handler, int timeout) native;
 
-  /** @domName Window.setTimeout */
+  /// @domName Window.setTimeout; @docsEditable true
   int setTimeout(TimeoutHandler handler, int timeout) native;
 
-  /** @domName Window.showModalDialog */
+  /// @domName Window.showModalDialog; @docsEditable true
   Object showModalDialog(String url, [Object dialogArgs, String featureArgs]) native;
 
-  /** @domName Window.stop */
+  /// @domName Window.stop; @docsEditable true
   void stop() native;
 
-  /** @domName Window.webkitConvertPointFromNodeToPage */
+  /// @domName Window.webkitConvertPointFromNodeToPage; @docsEditable true
   Point webkitConvertPointFromNodeToPage(Node node, Point p) native;
 
-  /** @domName Window.webkitConvertPointFromPageToNode */
+  /// @domName Window.webkitConvertPointFromPageToNode; @docsEditable true
   Point webkitConvertPointFromPageToNode(Node node, Point p) native;
 
-  /** @domName DOMWindow.webkitRequestFileSystem */
+  /// @domName DOMWindow.webkitRequestFileSystem; @docsEditable true
   void webkitRequestFileSystem(int type, int size, FileSystemCallback successCallback, [ErrorCallback errorCallback]) native;
 
-  /** @domName DOMWindow.webkitResolveLocalFileSystemURL */
+  /// @domName DOMWindow.webkitResolveLocalFileSystemURL; @docsEditable true
   void webkitResolveLocalFileSystemURL(String url, EntryCallback successCallback, [ErrorCallback errorCallback]) native;
 
 }
@@ -12009,15 +12428,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLMapElement
+/// @domName HTMLMapElement; @docsEditable true
 class MapElement extends Element implements Element native "*HTMLMapElement" {
 
-  factory MapElement() => _Elements.createMapElement();
+  factory MapElement() => document.$dom_createElement("map");
 
-  /** @domName HTMLMapElement.areas */
+  /// @domName HTMLMapElement.areas; @docsEditable true
   final HTMLCollection areas;
 
-  /** @domName HTMLMapElement.name */
+  /// @domName HTMLMapElement.name; @docsEditable true
   String name;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12025,46 +12444,46 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLMarqueeElement
+/// @domName HTMLMarqueeElement; @docsEditable true
 class MarqueeElement extends Element implements Element native "*HTMLMarqueeElement" {
 
-  /** @domName HTMLMarqueeElement.behavior */
+  /// @domName HTMLMarqueeElement.behavior; @docsEditable true
   String behavior;
 
-  /** @domName HTMLMarqueeElement.bgColor */
+  /// @domName HTMLMarqueeElement.bgColor; @docsEditable true
   String bgColor;
 
-  /** @domName HTMLMarqueeElement.direction */
+  /// @domName HTMLMarqueeElement.direction; @docsEditable true
   String direction;
 
-  /** @domName HTMLMarqueeElement.height */
+  /// @domName HTMLMarqueeElement.height; @docsEditable true
   String height;
 
-  /** @domName HTMLMarqueeElement.hspace */
+  /// @domName HTMLMarqueeElement.hspace; @docsEditable true
   int hspace;
 
-  /** @domName HTMLMarqueeElement.loop */
+  /// @domName HTMLMarqueeElement.loop; @docsEditable true
   int loop;
 
-  /** @domName HTMLMarqueeElement.scrollAmount */
+  /// @domName HTMLMarqueeElement.scrollAmount; @docsEditable true
   int scrollAmount;
 
-  /** @domName HTMLMarqueeElement.scrollDelay */
+  /// @domName HTMLMarqueeElement.scrollDelay; @docsEditable true
   int scrollDelay;
 
-  /** @domName HTMLMarqueeElement.trueSpeed */
+  /// @domName HTMLMarqueeElement.trueSpeed; @docsEditable true
   bool trueSpeed;
 
-  /** @domName HTMLMarqueeElement.vspace */
+  /// @domName HTMLMarqueeElement.vspace; @docsEditable true
   int vspace;
 
-  /** @domName HTMLMarqueeElement.width */
+  /// @domName HTMLMarqueeElement.width; @docsEditable true
   String width;
 
-  /** @domName HTMLMarqueeElement.start */
+  /// @domName HTMLMarqueeElement.start; @docsEditable true
   void start() native;
 
-  /** @domName HTMLMarqueeElement.stop */
+  /// @domName HTMLMarqueeElement.stop; @docsEditable true
   void stop() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12072,54 +12491,54 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaController
+/// @domName MediaController; @docsEditable true
 class MediaController extends EventTarget native "*MediaController" {
 
   factory MediaController() => _MediaControllerFactoryProvider.createMediaController();
 
-  /** @domName MediaController.buffered */
+  /// @domName MediaController.buffered; @docsEditable true
   final TimeRanges buffered;
 
-  /** @domName MediaController.currentTime */
+  /// @domName MediaController.currentTime; @docsEditable true
   num currentTime;
 
-  /** @domName MediaController.defaultPlaybackRate */
+  /// @domName MediaController.defaultPlaybackRate; @docsEditable true
   num defaultPlaybackRate;
 
-  /** @domName MediaController.duration */
+  /// @domName MediaController.duration; @docsEditable true
   final num duration;
 
-  /** @domName MediaController.muted */
+  /// @domName MediaController.muted; @docsEditable true
   bool muted;
 
-  /** @domName MediaController.paused */
+  /// @domName MediaController.paused; @docsEditable true
   final bool paused;
 
-  /** @domName MediaController.playbackRate */
+  /// @domName MediaController.playbackRate; @docsEditable true
   num playbackRate;
 
-  /** @domName MediaController.played */
+  /// @domName MediaController.played; @docsEditable true
   final TimeRanges played;
 
-  /** @domName MediaController.seekable */
+  /// @domName MediaController.seekable; @docsEditable true
   final TimeRanges seekable;
 
-  /** @domName MediaController.volume */
+  /// @domName MediaController.volume; @docsEditable true
   num volume;
 
-  /** @domName MediaController.addEventListener */
+  /// @domName MediaController.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName MediaController.dispatchEvent */
+  /// @domName MediaController.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName MediaController.pause */
+  /// @domName MediaController.pause; @docsEditable true
   void pause() native;
 
-  /** @domName MediaController.play */
+  /// @domName MediaController.play; @docsEditable true
   void play() native;
 
-  /** @domName MediaController.removeEventListener */
+  /// @domName MediaController.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12127,12 +12546,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLMediaElement
+/// @domName HTMLMediaElement; @docsEditable true
 class MediaElement extends Element implements Element native "*HTMLMediaElement" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   MediaElementEvents get on =>
     new MediaElementEvents(this);
 
@@ -12154,124 +12571,124 @@
 
   static const int NETWORK_NO_SOURCE = 3;
 
-  /** @domName HTMLMediaElement.autoplay */
+  /// @domName HTMLMediaElement.autoplay; @docsEditable true
   bool autoplay;
 
-  /** @domName HTMLMediaElement.buffered */
+  /// @domName HTMLMediaElement.buffered; @docsEditable true
   final TimeRanges buffered;
 
-  /** @domName HTMLMediaElement.controller */
+  /// @domName HTMLMediaElement.controller; @docsEditable true
   MediaController controller;
 
-  /** @domName HTMLMediaElement.controls */
+  /// @domName HTMLMediaElement.controls; @docsEditable true
   bool controls;
 
-  /** @domName HTMLMediaElement.currentSrc */
+  /// @domName HTMLMediaElement.currentSrc; @docsEditable true
   final String currentSrc;
 
-  /** @domName HTMLMediaElement.currentTime */
+  /// @domName HTMLMediaElement.currentTime; @docsEditable true
   num currentTime;
 
-  /** @domName HTMLMediaElement.defaultMuted */
+  /// @domName HTMLMediaElement.defaultMuted; @docsEditable true
   bool defaultMuted;
 
-  /** @domName HTMLMediaElement.defaultPlaybackRate */
+  /// @domName HTMLMediaElement.defaultPlaybackRate; @docsEditable true
   num defaultPlaybackRate;
 
-  /** @domName HTMLMediaElement.duration */
+  /// @domName HTMLMediaElement.duration; @docsEditable true
   final num duration;
 
-  /** @domName HTMLMediaElement.ended */
+  /// @domName HTMLMediaElement.ended; @docsEditable true
   final bool ended;
 
-  /** @domName HTMLMediaElement.error */
+  /// @domName HTMLMediaElement.error; @docsEditable true
   final MediaError error;
 
-  /** @domName HTMLMediaElement.initialTime */
+  /// @domName HTMLMediaElement.initialTime; @docsEditable true
   final num initialTime;
 
-  /** @domName HTMLMediaElement.loop */
+  /// @domName HTMLMediaElement.loop; @docsEditable true
   bool loop;
 
-  /** @domName HTMLMediaElement.mediaGroup */
+  /// @domName HTMLMediaElement.mediaGroup; @docsEditable true
   String mediaGroup;
 
-  /** @domName HTMLMediaElement.muted */
+  /// @domName HTMLMediaElement.muted; @docsEditable true
   bool muted;
 
-  /** @domName HTMLMediaElement.networkState */
+  /// @domName HTMLMediaElement.networkState; @docsEditable true
   final int networkState;
 
-  /** @domName HTMLMediaElement.paused */
+  /// @domName HTMLMediaElement.paused; @docsEditable true
   final bool paused;
 
-  /** @domName HTMLMediaElement.playbackRate */
+  /// @domName HTMLMediaElement.playbackRate; @docsEditable true
   num playbackRate;
 
-  /** @domName HTMLMediaElement.played */
+  /// @domName HTMLMediaElement.played; @docsEditable true
   final TimeRanges played;
 
-  /** @domName HTMLMediaElement.preload */
+  /// @domName HTMLMediaElement.preload; @docsEditable true
   String preload;
 
-  /** @domName HTMLMediaElement.readyState */
+  /// @domName HTMLMediaElement.readyState; @docsEditable true
   final int readyState;
 
-  /** @domName HTMLMediaElement.seekable */
+  /// @domName HTMLMediaElement.seekable; @docsEditable true
   final TimeRanges seekable;
 
-  /** @domName HTMLMediaElement.seeking */
+  /// @domName HTMLMediaElement.seeking; @docsEditable true
   final bool seeking;
 
-  /** @domName HTMLMediaElement.src */
+  /// @domName HTMLMediaElement.src; @docsEditable true
   String src;
 
-  /** @domName HTMLMediaElement.startTime */
+  /// @domName HTMLMediaElement.startTime; @docsEditable true
   final num startTime;
 
-  /** @domName HTMLMediaElement.textTracks */
+  /// @domName HTMLMediaElement.textTracks; @docsEditable true
   final TextTrackList textTracks;
 
-  /** @domName HTMLMediaElement.volume */
+  /// @domName HTMLMediaElement.volume; @docsEditable true
   num volume;
 
-  /** @domName HTMLMediaElement.webkitAudioDecodedByteCount */
+  /// @domName HTMLMediaElement.webkitAudioDecodedByteCount; @docsEditable true
   final int webkitAudioDecodedByteCount;
 
-  /** @domName HTMLMediaElement.webkitClosedCaptionsVisible */
+  /// @domName HTMLMediaElement.webkitClosedCaptionsVisible; @docsEditable true
   bool webkitClosedCaptionsVisible;
 
-  /** @domName HTMLMediaElement.webkitHasClosedCaptions */
+  /// @domName HTMLMediaElement.webkitHasClosedCaptions; @docsEditable true
   final bool webkitHasClosedCaptions;
 
-  /** @domName HTMLMediaElement.webkitPreservesPitch */
+  /// @domName HTMLMediaElement.webkitPreservesPitch; @docsEditable true
   bool webkitPreservesPitch;
 
-  /** @domName HTMLMediaElement.webkitVideoDecodedByteCount */
+  /// @domName HTMLMediaElement.webkitVideoDecodedByteCount; @docsEditable true
   final int webkitVideoDecodedByteCount;
 
-  /** @domName HTMLMediaElement.addTextTrack */
+  /// @domName HTMLMediaElement.addTextTrack; @docsEditable true
   TextTrack addTextTrack(String kind, [String label, String language]) native;
 
-  /** @domName HTMLMediaElement.canPlayType */
+  /// @domName HTMLMediaElement.canPlayType; @docsEditable true
   String canPlayType(String type, String keySystem) native;
 
-  /** @domName HTMLMediaElement.load */
+  /// @domName HTMLMediaElement.load; @docsEditable true
   void load() native;
 
-  /** @domName HTMLMediaElement.pause */
+  /// @domName HTMLMediaElement.pause; @docsEditable true
   void pause() native;
 
-  /** @domName HTMLMediaElement.play */
+  /// @domName HTMLMediaElement.play; @docsEditable true
   void play() native;
 
-  /** @domName HTMLMediaElement.webkitAddKey */
+  /// @domName HTMLMediaElement.webkitAddKey; @docsEditable true
   void webkitAddKey(String keySystem, Uint8Array key, [Uint8Array initData, String sessionId]) native;
 
-  /** @domName HTMLMediaElement.webkitCancelKeyRequest */
+  /// @domName HTMLMediaElement.webkitCancelKeyRequest; @docsEditable true
   void webkitCancelKeyRequest(String keySystem, String sessionId) native;
 
-  /** @domName HTMLMediaElement.webkitGenerateKeyRequest */
+  /// @domName HTMLMediaElement.webkitGenerateKeyRequest; @docsEditable true
   void webkitGenerateKeyRequest(String keySystem, [Uint8Array initData]) native;
 }
 
@@ -12333,10 +12750,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaElementAudioSourceNode
+/// @domName MediaElementAudioSourceNode; @docsEditable true
 class MediaElementAudioSourceNode extends AudioSourceNode native "*MediaElementAudioSourceNode" {
 
-  /** @domName MediaElementAudioSourceNode.mediaElement */
+  /// @domName MediaElementAudioSourceNode.mediaElement; @docsEditable true
   final MediaElement mediaElement;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12344,7 +12761,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaError
+/// @domName MediaError; @docsEditable true
 class MediaError native "*MediaError" {
 
   static const int MEDIA_ERR_ABORTED = 1;
@@ -12357,7 +12774,7 @@
 
   static const int MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
 
-  /** @domName MediaError.code */
+  /// @domName MediaError.code; @docsEditable true
   final int code;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12365,7 +12782,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaKeyError
+/// @domName MediaKeyError; @docsEditable true
 class MediaKeyError native "*MediaKeyError" {
 
   static const int MEDIA_KEYERR_CLIENT = 2;
@@ -12380,7 +12797,7 @@
 
   static const int MEDIA_KEYERR_UNKNOWN = 1;
 
-  /** @domName MediaKeyError.code */
+  /// @domName MediaKeyError.code; @docsEditable true
   final int code;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12388,28 +12805,28 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaKeyEvent
+/// @domName MediaKeyEvent; @docsEditable true
 class MediaKeyEvent extends Event native "*MediaKeyEvent" {
 
-  /** @domName MediaKeyEvent.defaultURL */
+  /// @domName MediaKeyEvent.defaultURL; @docsEditable true
   final String defaultURL;
 
-  /** @domName MediaKeyEvent.errorCode */
+  /// @domName MediaKeyEvent.errorCode; @docsEditable true
   final MediaKeyError errorCode;
 
-  /** @domName MediaKeyEvent.initData */
+  /// @domName MediaKeyEvent.initData; @docsEditable true
   final Uint8Array initData;
 
-  /** @domName MediaKeyEvent.keySystem */
+  /// @domName MediaKeyEvent.keySystem; @docsEditable true
   final String keySystem;
 
-  /** @domName MediaKeyEvent.message */
+  /// @domName MediaKeyEvent.message; @docsEditable true
   final Uint8Array message;
 
-  /** @domName MediaKeyEvent.sessionId */
+  /// @domName MediaKeyEvent.sessionId; @docsEditable true
   final String sessionId;
 
-  /** @domName MediaKeyEvent.systemCode */
+  /// @domName MediaKeyEvent.systemCode; @docsEditable true
   final int systemCode;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12417,22 +12834,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaList
+/// @domName MediaList; @docsEditable true
 class MediaList native "*MediaList" {
 
-  /** @domName MediaList.length */
+  /// @domName MediaList.length; @docsEditable true
   final int length;
 
-  /** @domName MediaList.mediaText */
+  /// @domName MediaList.mediaText; @docsEditable true
   String mediaText;
 
-  /** @domName MediaList.appendMedium */
+  /// @domName MediaList.appendMedium; @docsEditable true
   void appendMedium(String newMedium) native;
 
-  /** @domName MediaList.deleteMedium */
+  /// @domName MediaList.deleteMedium; @docsEditable true
   void deleteMedium(String oldMedium) native;
 
-  /** @domName MediaList.item */
+  /// @domName MediaList.item; @docsEditable true
   String item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12440,19 +12857,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaQueryList
+/// @domName MediaQueryList; @docsEditable true
 class MediaQueryList native "*MediaQueryList" {
 
-  /** @domName MediaQueryList.matches */
+  /// @domName MediaQueryList.matches; @docsEditable true
   final bool matches;
 
-  /** @domName MediaQueryList.media */
+  /// @domName MediaQueryList.media; @docsEditable true
   final String media;
 
-  /** @domName MediaQueryList.addListener */
+  /// @domName MediaQueryList.addListener; @docsEditable true
   void addListener(MediaQueryListListener listener) native;
 
-  /** @domName MediaQueryList.removeListener */
+  /// @domName MediaQueryList.removeListener; @docsEditable true
   void removeListener(MediaQueryListListener listener) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12463,7 +12880,7 @@
 /// @domName MediaQueryListListener
 abstract class MediaQueryListListener {
 
-  /** @domName MediaQueryListListener.queryChanged */
+  /// @domName MediaQueryListListener.queryChanged; @docsEditable true
   void queryChanged(MediaQueryList list);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12471,39 +12888,39 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaSource
+/// @domName MediaSource; @docsEditable true
 class MediaSource extends EventTarget native "*MediaSource" {
 
   factory MediaSource() => _MediaSourceFactoryProvider.createMediaSource();
 
-  /** @domName MediaSource.activeSourceBuffers */
+  /// @domName MediaSource.activeSourceBuffers; @docsEditable true
   final SourceBufferList activeSourceBuffers;
 
-  /** @domName MediaSource.duration */
+  /// @domName MediaSource.duration; @docsEditable true
   num duration;
 
-  /** @domName MediaSource.readyState */
+  /// @domName MediaSource.readyState; @docsEditable true
   final String readyState;
 
-  /** @domName MediaSource.sourceBuffers */
+  /// @domName MediaSource.sourceBuffers; @docsEditable true
   final SourceBufferList sourceBuffers;
 
-  /** @domName MediaSource.addEventListener */
+  /// @domName MediaSource.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName MediaSource.addSourceBuffer */
+  /// @domName MediaSource.addSourceBuffer; @docsEditable true
   SourceBuffer addSourceBuffer(String type) native;
 
-  /** @domName MediaSource.dispatchEvent */
+  /// @domName MediaSource.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event event) native "dispatchEvent";
 
-  /** @domName MediaSource.endOfStream */
+  /// @domName MediaSource.endOfStream; @docsEditable true
   void endOfStream(String error) native;
 
-  /** @domName MediaSource.removeEventListener */
+  /// @domName MediaSource.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 
-  /** @domName MediaSource.removeSourceBuffer */
+  /// @domName MediaSource.removeSourceBuffer; @docsEditable true
   void removeSourceBuffer(SourceBuffer buffer) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12511,14 +12928,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaStream
+/// @domName MediaStream; @docsEditable true
 class MediaStream extends EventTarget native "*MediaStream" {
 
   factory MediaStream(MediaStreamTrackList audioTracks, MediaStreamTrackList videoTracks) => _MediaStreamFactoryProvider.createMediaStream(audioTracks, videoTracks);
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   MediaStreamEvents get on =>
     new MediaStreamEvents(this);
 
@@ -12526,25 +12941,25 @@
 
   static const int LIVE = 1;
 
-  /** @domName MediaStream.audioTracks */
+  /// @domName MediaStream.audioTracks; @docsEditable true
   final MediaStreamTrackList audioTracks;
 
-  /** @domName MediaStream.label */
+  /// @domName MediaStream.label; @docsEditable true
   final String label;
 
-  /** @domName MediaStream.readyState */
+  /// @domName MediaStream.readyState; @docsEditable true
   final int readyState;
 
-  /** @domName MediaStream.videoTracks */
+  /// @domName MediaStream.videoTracks; @docsEditable true
   final MediaStreamTrackList videoTracks;
 
-  /** @domName MediaStream.addEventListener */
+  /// @domName MediaStream.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName MediaStream.dispatchEvent */
+  /// @domName MediaStream.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event event) native "dispatchEvent";
 
-  /** @domName MediaStream.removeEventListener */
+  /// @domName MediaStream.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 }
 
@@ -12558,10 +12973,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaStreamAudioSourceNode
+/// @domName MediaStreamAudioSourceNode; @docsEditable true
 class MediaStreamAudioSourceNode extends AudioSourceNode native "*MediaStreamAudioSourceNode" {
 
-  /** @domName MediaStreamAudioSourceNode.mediaStream */
+  /// @domName MediaStreamAudioSourceNode.mediaStream; @docsEditable true
   final MediaStream mediaStream;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12569,10 +12984,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaStreamEvent
+/// @domName MediaStreamEvent; @docsEditable true
 class MediaStreamEvent extends Event native "*MediaStreamEvent" {
 
-  /** @domName MediaStreamEvent.stream */
+  /// @domName MediaStreamEvent.stream; @docsEditable true
   final MediaStream stream;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12580,12 +12995,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaStreamTrack
+/// @domName MediaStreamTrack; @docsEditable true
 class MediaStreamTrack extends EventTarget native "*MediaStreamTrack" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   MediaStreamTrackEvents get on =>
     new MediaStreamTrackEvents(this);
 
@@ -12595,25 +13008,25 @@
 
   static const int MUTED = 1;
 
-  /** @domName MediaStreamTrack.enabled */
+  /// @domName MediaStreamTrack.enabled; @docsEditable true
   bool enabled;
 
-  /** @domName MediaStreamTrack.kind */
+  /// @domName MediaStreamTrack.kind; @docsEditable true
   final String kind;
 
-  /** @domName MediaStreamTrack.label */
+  /// @domName MediaStreamTrack.label; @docsEditable true
   final String label;
 
-  /** @domName MediaStreamTrack.readyState */
+  /// @domName MediaStreamTrack.readyState; @docsEditable true
   final int readyState;
 
-  /** @domName MediaStreamTrack.addEventListener */
+  /// @domName MediaStreamTrack.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName MediaStreamTrack.dispatchEvent */
+  /// @domName MediaStreamTrack.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event event) native "dispatchEvent";
 
-  /** @domName MediaStreamTrack.removeEventListener */
+  /// @domName MediaStreamTrack.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 }
 
@@ -12631,10 +13044,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaStreamTrackEvent
+/// @domName MediaStreamTrackEvent; @docsEditable true
 class MediaStreamTrackEvent extends Event native "*MediaStreamTrackEvent" {
 
-  /** @domName MediaStreamTrackEvent.track */
+  /// @domName MediaStreamTrackEvent.track; @docsEditable true
   final MediaStreamTrack track;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12642,34 +13055,32 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaStreamTrackList
+/// @domName MediaStreamTrackList; @docsEditable true
 class MediaStreamTrackList extends EventTarget native "*MediaStreamTrackList" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   MediaStreamTrackListEvents get on =>
     new MediaStreamTrackListEvents(this);
 
-  /** @domName MediaStreamTrackList.length */
+  /// @domName MediaStreamTrackList.length; @docsEditable true
   final int length;
 
-  /** @domName MediaStreamTrackList.add */
+  /// @domName MediaStreamTrackList.add; @docsEditable true
   void add(MediaStreamTrack track) native;
 
-  /** @domName MediaStreamTrackList.addEventListener */
+  /// @domName MediaStreamTrackList.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName MediaStreamTrackList.dispatchEvent */
+  /// @domName MediaStreamTrackList.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event event) native "dispatchEvent";
 
-  /** @domName MediaStreamTrackList.item */
+  /// @domName MediaStreamTrackList.item; @docsEditable true
   MediaStreamTrack item(int index) native;
 
-  /** @domName MediaStreamTrackList.remove */
+  /// @domName MediaStreamTrackList.remove; @docsEditable true
   void remove(MediaStreamTrack track) native;
 
-  /** @domName MediaStreamTrackList.removeEventListener */
+  /// @domName MediaStreamTrackList.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 }
 
@@ -12685,16 +13096,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MemoryInfo
+/// @domName MemoryInfo; @docsEditable true
 class MemoryInfo native "*MemoryInfo" {
 
-  /** @domName MemoryInfo.jsHeapSizeLimit */
+  /// @domName MemoryInfo.jsHeapSizeLimit; @docsEditable true
   final int jsHeapSizeLimit;
 
-  /** @domName MemoryInfo.totalJSHeapSize */
+  /// @domName MemoryInfo.totalJSHeapSize; @docsEditable true
   final int totalJSHeapSize;
 
-  /** @domName MemoryInfo.usedJSHeapSize */
+  /// @domName MemoryInfo.usedJSHeapSize; @docsEditable true
   final int usedJSHeapSize;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12702,12 +13113,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLMenuElement
+/// @domName HTMLMenuElement; @docsEditable true
 class MenuElement extends Element implements Element native "*HTMLMenuElement" {
 
-  factory MenuElement() => _Elements.createMenuElement();
+  factory MenuElement() => document.$dom_createElement("menu");
 
-  /** @domName HTMLMenuElement.compact */
+  /// @domName HTMLMenuElement.compact; @docsEditable true
   bool compact;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12715,15 +13126,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MessageChannel
+/// @domName MessageChannel; @docsEditable true
 class MessageChannel native "*MessageChannel" {
 
   factory MessageChannel() => _MessageChannelFactoryProvider.createMessageChannel();
 
-  /** @domName MessageChannel.port1 */
+  /// @domName MessageChannel.port1; @docsEditable true
   final MessagePort port1;
 
-  /** @domName MessageChannel.port2 */
+  /// @domName MessageChannel.port2; @docsEditable true
   final MessagePort port2;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12731,30 +13142,31 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MessageEvent
+/// @domName MessageEvent; @docsEditable true
 class MessageEvent extends Event native "*MessageEvent" {
 
-  /** @domName MessageEvent.data */
+  /// @domName MessageEvent.data; @docsEditable true
   dynamic get data => _convertNativeToDart_SerializedScriptValue(this._data);
   dynamic get _data => JS("dynamic", "#.data", this);
 
-  /** @domName MessageEvent.lastEventId */
+  /// @domName MessageEvent.lastEventId; @docsEditable true
   final String lastEventId;
 
-  /** @domName MessageEvent.origin */
+  /// @domName MessageEvent.origin; @docsEditable true
   final String origin;
 
-  /** @domName MessageEvent.ports */
+  /// @domName MessageEvent.ports; @docsEditable true
+  @Creates('=List')
   final List ports;
 
-  /** @domName MessageEvent.source */
+  /// @domName MessageEvent.source; @docsEditable true
   Window get source => _convertNativeToDart_Window(this._source);
   dynamic get _source => JS("dynamic", "#.source", this);
 
-  /** @domName MessageEvent.initMessageEvent */
+  /// @domName MessageEvent.initMessageEvent; @docsEditable true
   void initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, LocalWindow sourceArg, List messagePorts) native;
 
-  /** @domName MessageEvent.webkitInitMessageEvent */
+  /// @domName MessageEvent.webkitInitMessageEvent; @docsEditable true
   void webkitInitMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, LocalWindow sourceArg, List transferables) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12762,25 +13174,23 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MessagePort
+/// @domName MessagePort; @docsEditable true
 class MessagePort extends EventTarget native "*MessagePort" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   MessagePortEvents get on =>
     new MessagePortEvents(this);
 
-  /** @domName MessagePort.addEventListener */
+  /// @domName MessagePort.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName MessagePort.close */
+  /// @domName MessagePort.close; @docsEditable true
   void close() native;
 
-  /** @domName MessagePort.dispatchEvent */
+  /// @domName MessagePort.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName MessagePort.postMessage */
+  /// @domName MessagePort.postMessage; @docsEditable true
   void postMessage(/*any*/ message, [List messagePorts]) {
     if (?messagePorts) {
       var message_1 = _convertDartToNative_SerializedScriptValue(message);
@@ -12794,10 +13204,10 @@
   void _postMessage_1(message, List messagePorts) native "postMessage";
   void _postMessage_2(message) native "postMessage";
 
-  /** @domName MessagePort.removeEventListener */
+  /// @domName MessagePort.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 
-  /** @domName MessagePort.start */
+  /// @domName MessagePort.start; @docsEditable true
   void start() native;
 }
 
@@ -12811,19 +13221,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLMetaElement
+/// @domName HTMLMetaElement; @docsEditable true
 class MetaElement extends Element implements Element native "*HTMLMetaElement" {
 
-  /** @domName HTMLMetaElement.content */
+  /// @domName HTMLMetaElement.content; @docsEditable true
   String content;
 
-  /** @domName HTMLMetaElement.httpEquiv */
+  /// @domName HTMLMetaElement.httpEquiv; @docsEditable true
   String httpEquiv;
 
-  /** @domName HTMLMetaElement.name */
+  /// @domName HTMLMetaElement.name; @docsEditable true
   String name;
 
-  /** @domName HTMLMetaElement.scheme */
+  /// @domName HTMLMetaElement.scheme; @docsEditable true
   String scheme;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12831,13 +13241,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Metadata
+/// @domName Metadata; @docsEditable true
 class Metadata native "*Metadata" {
 
-  /** @domName Metadata.modificationTime */
+  /// @domName Metadata.modificationTime; @docsEditable true
   final Date modificationTime;
 
-  /** @domName Metadata.size */
+  /// @domName Metadata.size; @docsEditable true
   final int size;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12853,30 +13263,31 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLMeterElement
+/// @domName HTMLMeterElement; @docsEditable true
 class MeterElement extends Element implements Element native "*HTMLMeterElement" {
 
-  factory MeterElement() => _Elements.createMeterElement();
+  factory MeterElement() => document.$dom_createElement("meter");
 
-  /** @domName HTMLMeterElement.high */
+  /// @domName HTMLMeterElement.high; @docsEditable true
   num high;
 
-  /** @domName HTMLMeterElement.labels */
+  /// @domName HTMLMeterElement.labels; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   final List<Node> labels;
 
-  /** @domName HTMLMeterElement.low */
+  /// @domName HTMLMeterElement.low; @docsEditable true
   num low;
 
-  /** @domName HTMLMeterElement.max */
+  /// @domName HTMLMeterElement.max; @docsEditable true
   num max;
 
-  /** @domName HTMLMeterElement.min */
+  /// @domName HTMLMeterElement.min; @docsEditable true
   num min;
 
-  /** @domName HTMLMeterElement.optimum */
+  /// @domName HTMLMeterElement.optimum; @docsEditable true
   num optimum;
 
-  /** @domName HTMLMeterElement.value */
+  /// @domName HTMLMeterElement.value; @docsEditable true
   num value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12884,13 +13295,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLModElement
+/// @domName HTMLModElement; @docsEditable true
 class ModElement extends Element implements Element native "*HTMLModElement" {
 
-  /** @domName HTMLModElement.cite */
+  /// @domName HTMLModElement.cite; @docsEditable true
   String cite;
 
-  /** @domName HTMLModElement.dateTime */
+  /// @domName HTMLModElement.dateTime; @docsEditable true
   String dateTime;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -12910,59 +13321,59 @@
           ctrlKey, altKey, shiftKey, metaKey,
           relatedTarget);
 
-  /** @domName MouseEvent.altKey */
+  /// @domName MouseEvent.altKey; @docsEditable true
   final bool altKey;
 
-  /** @domName MouseEvent.button */
+  /// @domName MouseEvent.button; @docsEditable true
   final int button;
 
-  /** @domName MouseEvent.clientX */
+  /// @domName MouseEvent.clientX; @docsEditable true
   final int clientX;
 
-  /** @domName MouseEvent.clientY */
+  /// @domName MouseEvent.clientY; @docsEditable true
   final int clientY;
 
-  /** @domName MouseEvent.ctrlKey */
+  /// @domName MouseEvent.ctrlKey; @docsEditable true
   final bool ctrlKey;
 
-  /** @domName MouseEvent.dataTransfer */
+  /// @domName MouseEvent.dataTransfer; @docsEditable true
   final Clipboard dataTransfer;
 
-  /** @domName MouseEvent.fromElement */
+  /// @domName MouseEvent.fromElement; @docsEditable true
   final Node fromElement;
 
-  /** @domName MouseEvent.metaKey */
+  /// @domName MouseEvent.metaKey; @docsEditable true
   final bool metaKey;
 
-  /** @domName MouseEvent.relatedTarget */
+  /// @domName MouseEvent.relatedTarget; @docsEditable true
   EventTarget get relatedTarget => _convertNativeToDart_EventTarget(this._relatedTarget);
   dynamic get _relatedTarget => JS("dynamic", "#.relatedTarget", this);
 
-  /** @domName MouseEvent.screenX */
+  /// @domName MouseEvent.screenX; @docsEditable true
   final int screenX;
 
-  /** @domName MouseEvent.screenY */
+  /// @domName MouseEvent.screenY; @docsEditable true
   final int screenY;
 
-  /** @domName MouseEvent.shiftKey */
+  /// @domName MouseEvent.shiftKey; @docsEditable true
   final bool shiftKey;
 
-  /** @domName MouseEvent.toElement */
+  /// @domName MouseEvent.toElement; @docsEditable true
   final Node toElement;
 
-  /** @domName MouseEvent.webkitMovementX */
+  /// @domName MouseEvent.webkitMovementX; @docsEditable true
   final int webkitMovementX;
 
-  /** @domName MouseEvent.webkitMovementY */
+  /// @domName MouseEvent.webkitMovementY; @docsEditable true
   final int webkitMovementY;
 
-  /** @domName MouseEvent.x */
+  /// @domName MouseEvent.x; @docsEditable true
   final int x;
 
-  /** @domName MouseEvent.y */
+  /// @domName MouseEvent.y; @docsEditable true
   final int y;
 
-  /** @domName MouseEvent.initMouseEvent */
+  /// @domName MouseEvent.initMouseEvent; @docsEditable true
   void $dom_initMouseEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget) {
     var relatedTarget_1 = _convertDartToNative_EventTarget(relatedTarget);
     _$dom_initMouseEvent_1(type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget_1);
@@ -13012,7 +13423,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MutationEvent
+/// @domName MutationEvent; @docsEditable true
 class MutationEvent extends Event native "*MutationEvent" {
 
   static const int ADDITION = 2;
@@ -13021,22 +13432,22 @@
 
   static const int REMOVAL = 3;
 
-  /** @domName MutationEvent.attrChange */
+  /// @domName MutationEvent.attrChange; @docsEditable true
   final int attrChange;
 
-  /** @domName MutationEvent.attrName */
+  /// @domName MutationEvent.attrName; @docsEditable true
   final String attrName;
 
-  /** @domName MutationEvent.newValue */
+  /// @domName MutationEvent.newValue; @docsEditable true
   final String newValue;
 
-  /** @domName MutationEvent.prevValue */
+  /// @domName MutationEvent.prevValue; @docsEditable true
   final String prevValue;
 
-  /** @domName MutationEvent.relatedNode */
+  /// @domName MutationEvent.relatedNode; @docsEditable true
   final Node relatedNode;
 
-  /** @domName MutationEvent.initMutationEvent */
+  /// @domName MutationEvent.initMutationEvent; @docsEditable true
   void initMutationEvent(String type, bool canBubble, bool cancelable, Node relatedNode, String prevValue, String newValue, String attrName, int attrChange) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13048,10 +13459,10 @@
 
   factory MutationObserver(MutationCallback callback) => _MutationObserverFactoryProvider.createMutationObserver(callback);
 
-  /** @domName MutationObserver.disconnect */
+  /// @domName MutationObserver.disconnect; @docsEditable true
   void disconnect() native;
 
-  /** @domName MutationObserver._observe */
+  /// @domName MutationObserver._observe; @docsEditable true
   void _observe(Node target, Map options) {
     var options_1 = _convertDartToNative_Dictionary(options);
     __observe_1(target, options_1);
@@ -13059,7 +13470,7 @@
   }
   void __observe_1(Node target, options) native "observe";
 
-  /** @domName MutationObserver.takeRecords */
+  /// @domName MutationObserver.takeRecords; @docsEditable true
   List<MutationRecord> takeRecords() native;
 
   void observe(Node target,
@@ -13128,34 +13539,36 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MutationRecord
+/// @domName MutationRecord; @docsEditable true
 class MutationRecord native "*MutationRecord" {
 
-  /** @domName MutationRecord.addedNodes */
+  /// @domName MutationRecord.addedNodes; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   final List<Node> addedNodes;
 
-  /** @domName MutationRecord.attributeName */
+  /// @domName MutationRecord.attributeName; @docsEditable true
   final String attributeName;
 
-  /** @domName MutationRecord.attributeNamespace */
+  /// @domName MutationRecord.attributeNamespace; @docsEditable true
   final String attributeNamespace;
 
-  /** @domName MutationRecord.nextSibling */
+  /// @domName MutationRecord.nextSibling; @docsEditable true
   final Node nextSibling;
 
-  /** @domName MutationRecord.oldValue */
+  /// @domName MutationRecord.oldValue; @docsEditable true
   final String oldValue;
 
-  /** @domName MutationRecord.previousSibling */
+  /// @domName MutationRecord.previousSibling; @docsEditable true
   final Node previousSibling;
 
-  /** @domName MutationRecord.removedNodes */
+  /// @domName MutationRecord.removedNodes; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   final List<Node> removedNodes;
 
-  /** @domName MutationRecord.target */
+  /// @domName MutationRecord.target; @docsEditable true
   final Node target;
 
-  /** @domName MutationRecord.type */
+  /// @domName MutationRecord.type; @docsEditable true
   final String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13163,10 +13576,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName NamedNodeMap
+/// @domName NamedNodeMap; @docsEditable true
 class NamedNodeMap implements JavaScriptIndexingBehavior, List<Node> native "*NamedNodeMap" {
 
-  /** @domName NamedNodeMap.length */
+  /// @domName NamedNodeMap.length; @docsEditable true
   final int length;
 
   Node operator[](int index) => JS("Node", "#[#]", this, index);
@@ -13229,6 +13642,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  Node get first => this[0];
+
   Node get last => this[length - 1];
 
   Node removeLast() {
@@ -13252,25 +13667,25 @@
 
   // -- end List<Node> mixins.
 
-  /** @domName NamedNodeMap.getNamedItem */
+  /// @domName NamedNodeMap.getNamedItem; @docsEditable true
   Node getNamedItem(String name) native;
 
-  /** @domName NamedNodeMap.getNamedItemNS */
+  /// @domName NamedNodeMap.getNamedItemNS; @docsEditable true
   Node getNamedItemNS(String namespaceURI, String localName) native;
 
-  /** @domName NamedNodeMap.item */
+  /// @domName NamedNodeMap.item; @docsEditable true
   Node item(int index) native;
 
-  /** @domName NamedNodeMap.removeNamedItem */
+  /// @domName NamedNodeMap.removeNamedItem; @docsEditable true
   Node removeNamedItem(String name) native;
 
-  /** @domName NamedNodeMap.removeNamedItemNS */
+  /// @domName NamedNodeMap.removeNamedItemNS; @docsEditable true
   Node removeNamedItemNS(String namespaceURI, String localName) native;
 
-  /** @domName NamedNodeMap.setNamedItem */
+  /// @domName NamedNodeMap.setNamedItem; @docsEditable true
   Node setNamedItem(Node node) native;
 
-  /** @domName NamedNodeMap.setNamedItemNS */
+  /// @domName NamedNodeMap.setNamedItemNS; @docsEditable true
   Node setNamedItemNS(Node node) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13278,67 +13693,68 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Navigator
+/// @domName Navigator; @docsEditable true
 class Navigator native "*Navigator" {
 
-  /** @domName Navigator.appCodeName */
+  /// @domName Navigator.appCodeName; @docsEditable true
   final String appCodeName;
 
-  /** @domName Navigator.appName */
+  /// @domName Navigator.appName; @docsEditable true
   final String appName;
 
-  /** @domName Navigator.appVersion */
+  /// @domName Navigator.appVersion; @docsEditable true
   final String appVersion;
 
-  /** @domName Navigator.cookieEnabled */
+  /// @domName Navigator.cookieEnabled; @docsEditable true
   final bool cookieEnabled;
 
-  /** @domName Navigator.geolocation */
+  /// @domName Navigator.geolocation; @docsEditable true
   final Geolocation geolocation;
 
-  /** @domName Navigator.language */
+  /// @domName Navigator.language; @docsEditable true
   final String language;
 
-  /** @domName Navigator.mimeTypes */
+  /// @domName Navigator.mimeTypes; @docsEditable true
   final DOMMimeTypeArray mimeTypes;
 
-  /** @domName Navigator.onLine */
+  /// @domName Navigator.onLine; @docsEditable true
   final bool onLine;
 
-  /** @domName Navigator.platform */
+  /// @domName Navigator.platform; @docsEditable true
   final String platform;
 
-  /** @domName Navigator.plugins */
+  /// @domName Navigator.plugins; @docsEditable true
   final DOMPluginArray plugins;
 
-  /** @domName Navigator.product */
+  /// @domName Navigator.product; @docsEditable true
   final String product;
 
-  /** @domName Navigator.productSub */
+  /// @domName Navigator.productSub; @docsEditable true
   final String productSub;
 
-  /** @domName Navigator.userAgent */
+  /// @domName Navigator.userAgent; @docsEditable true
   final String userAgent;
 
-  /** @domName Navigator.vendor */
+  /// @domName Navigator.vendor; @docsEditable true
   final String vendor;
 
-  /** @domName Navigator.vendorSub */
+  /// @domName Navigator.vendorSub; @docsEditable true
   final String vendorSub;
 
-  /** @domName Navigator.webkitBattery */
+  /// @domName Navigator.webkitBattery; @docsEditable true
   final BatteryManager webkitBattery;
 
-  /** @domName Navigator.getStorageUpdates */
+  /// @domName Navigator.getStorageUpdates; @docsEditable true
   void getStorageUpdates() native;
 
-  /** @domName Navigator.javaEnabled */
+  /// @domName Navigator.javaEnabled; @docsEditable true
   bool javaEnabled() native;
 
-  /** @domName Navigator.webkitGetGamepads */
+  /// @domName Navigator.webkitGetGamepads; @docsEditable true
+  @Returns('_GamepadList') @Creates('_GamepadList')
   List<Gamepad> webkitGetGamepads() native;
 
-  /** @domName Navigator.webkitGetUserMedia */
+  /// @domName Navigator.webkitGetUserMedia; @docsEditable true
   void webkitGetUserMedia(Map options, NavigatorUserMediaSuccessCallback successCallback, [NavigatorUserMediaErrorCallback errorCallback]) {
     if (?errorCallback) {
       var options_1 = _convertDartToNative_Dictionary(options);
@@ -13357,12 +13773,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName NavigatorUserMediaError
+/// @domName NavigatorUserMediaError; @docsEditable true
 class NavigatorUserMediaError native "*NavigatorUserMediaError" {
 
   static const int PERMISSION_DENIED = 1;
 
-  /** @domName NavigatorUserMediaError.code */
+  /// @domName NavigatorUserMediaError.code; @docsEditable true
   final int code;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13442,7 +13858,7 @@
   Collection map(f(Node element)) => _Collections.map(this, [], f);
 
   Collection<Node> filter(bool f(Node element)) =>
-     new _NodeListWrapper(_Collections.filter(this, <Node>[], f));
+     _Collections.filter(this, <Node>[], f);
 
   bool every(bool f(Node element)) => _Collections.every(this, f);
 
@@ -13478,7 +13894,7 @@
         "Cannot insertRange on immutable List.");
   }
   List<Node> getRange(int start, int rangeLength) =>
-    new _NodeListWrapper(_Lists.getRange(this, start, rangeLength, <Node>[]));
+      _Lists.getRange(this, start, rangeLength, <Node>[]);
 
   // -- end List<Node> mixins.
 
@@ -13568,69 +13984,69 @@
 
   static const int TEXT_NODE = 3;
 
-  /** @domName Node.attributes */
+  /// @domName Node.attributes; @docsEditable true
   NamedNodeMap get $dom_attributes => JS("NamedNodeMap", "#.attributes", this);
 
-  /** @domName Node.childNodes */
-  List<Node> get $dom_childNodes => JS("List<Node>", "#.childNodes", this);
+  /// @domName Node.childNodes; @docsEditable true
+  List<Node> get $dom_childNodes => JS("_NodeList", "#.childNodes", this);
 
-  /** @domName Node.firstChild */
+  /// @domName Node.firstChild; @docsEditable true
   Node get $dom_firstChild => JS("Node", "#.firstChild", this);
 
-  /** @domName Node.lastChild */
+  /// @domName Node.lastChild; @docsEditable true
   Node get $dom_lastChild => JS("Node", "#.lastChild", this);
 
-  /** @domName Node.nextSibling */
+  /// @domName Node.nextSibling; @docsEditable true
   Node get nextNode => JS("Node", "#.nextSibling", this);
 
-  /** @domName Node.nodeType */
+  /// @domName Node.nodeType; @docsEditable true
   final int nodeType;
 
-  /** @domName Node.ownerDocument */
+  /// @domName Node.ownerDocument; @docsEditable true
   Document get document => JS("Document", "#.ownerDocument", this);
 
-  /** @domName Node.parentNode */
+  /// @domName Node.parentNode; @docsEditable true
   Node get parent => JS("Node", "#.parentNode", this);
 
-  /** @domName Node.previousSibling */
+  /// @domName Node.previousSibling; @docsEditable true
   Node get previousNode => JS("Node", "#.previousSibling", this);
 
-  /** @domName Node.textContent */
+  /// @domName Node.textContent; @docsEditable true
   String get text => JS("String", "#.textContent", this);
 
-  /** @domName Node.textContent */
+  /// @domName Node.textContent; @docsEditable true
   void set text(String value) {
     JS("void", "#.textContent = #", this, value);
   }
 
-  /** @domName Node.addEventListener */
+  /// @domName Node.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName Node.appendChild */
+  /// @domName Node.appendChild; @docsEditable true
   Node $dom_appendChild(Node newChild) native "appendChild";
 
-  /** @domName Node.cloneNode */
+  /// @domName Node.cloneNode; @docsEditable true
   Node clone(bool deep) native "cloneNode";
 
-  /** @domName Node.contains */
+  /// @domName Node.contains; @docsEditable true
   bool contains(Node other) native;
 
-  /** @domName Node.dispatchEvent */
+  /// @domName Node.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event event) native "dispatchEvent";
 
-  /** @domName Node.hasChildNodes */
+  /// @domName Node.hasChildNodes; @docsEditable true
   bool hasChildNodes() native;
 
-  /** @domName Node.insertBefore */
+  /// @domName Node.insertBefore; @docsEditable true
   Node insertBefore(Node newChild, Node refChild) native;
 
-  /** @domName Node.removeChild */
+  /// @domName Node.removeChild; @docsEditable true
   Node $dom_removeChild(Node oldChild) native "removeChild";
 
-  /** @domName Node.removeEventListener */
+  /// @domName Node.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 
-  /** @domName Node.replaceChild */
+  /// @domName Node.replaceChild; @docsEditable true
   Node $dom_replaceChild(Node newChild, Node oldChild) native "replaceChild";
 
 }
@@ -13639,7 +14055,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName NodeFilter
+/// @domName NodeFilter; @docsEditable true
 class NodeFilter native "*NodeFilter" {
 
   static const int FILTER_ACCEPT = 1;
@@ -13674,7 +14090,7 @@
 
   static const int SHOW_TEXT = 0x00000004;
 
-  /** @domName NodeFilter.acceptNode */
+  /// @domName NodeFilter.acceptNode; @docsEditable true
   int acceptNode(Node n) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13682,34 +14098,34 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName NodeIterator
+/// @domName NodeIterator; @docsEditable true
 class NodeIterator native "*NodeIterator" {
 
-  /** @domName NodeIterator.expandEntityReferences */
+  /// @domName NodeIterator.expandEntityReferences; @docsEditable true
   final bool expandEntityReferences;
 
-  /** @domName NodeIterator.filter */
+  /// @domName NodeIterator.filter; @docsEditable true
   final NodeFilter filter;
 
-  /** @domName NodeIterator.pointerBeforeReferenceNode */
+  /// @domName NodeIterator.pointerBeforeReferenceNode; @docsEditable true
   final bool pointerBeforeReferenceNode;
 
-  /** @domName NodeIterator.referenceNode */
+  /// @domName NodeIterator.referenceNode; @docsEditable true
   final Node referenceNode;
 
-  /** @domName NodeIterator.root */
+  /// @domName NodeIterator.root; @docsEditable true
   final Node root;
 
-  /** @domName NodeIterator.whatToShow */
+  /// @domName NodeIterator.whatToShow; @docsEditable true
   final int whatToShow;
 
-  /** @domName NodeIterator.detach */
+  /// @domName NodeIterator.detach; @docsEditable true
   void detach() native;
 
-  /** @domName NodeIterator.nextNode */
+  /// @domName NodeIterator.nextNode; @docsEditable true
   Node nextNode() native;
 
-  /** @domName NodeIterator.previousNode */
+  /// @domName NodeIterator.previousNode; @docsEditable true
   Node previousNode() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13717,199 +14133,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-// TODO(nweiz): when all implementations we target have the same name for the
-// implementation of List<E>, extend that rather than wrapping.
-class _ListWrapper<E> implements List<E> {
-  List _list;
-
-  _ListWrapper(List this._list);
-
-  Iterator<E> iterator() => _list.iterator();
-
-  bool contains(E element) => _list.contains(element);
-
-  void forEach(void f(E element)) => _list.forEach(f);
-
-  Collection map(f(E element)) => _list.map(f);
-
-  List<E> filter(bool f(E element)) => _list.filter(f);
-
-  bool every(bool f(E element)) => _list.every(f);
-
-  bool some(bool f(E element)) => _list.some(f);
-
-  bool get isEmpty => _list.isEmpty;
-
-  int get length => _list.length;
-
-  E operator [](int index) => _list[index];
-
-  void operator []=(int index, E value) { _list[index] = value; }
-
-  void set length(int newLength) { _list.length = newLength; }
-
-  void add(E value) => _list.add(value);
-
-  void addLast(E value) => _list.addLast(value);
-
-  void addAll(Collection<E> collection) => _list.addAll(collection);
-
-  void sort([Comparator<E> compare = Comparable.compare]) => _list.sort(compare);
-
-  int indexOf(E element, [int start = 0]) => _list.indexOf(element, start);
-
-  int lastIndexOf(E element, [int start = 0]) =>
-    _list.lastIndexOf(element, start);
-
-  void clear() => _list.clear();
-
-  E removeLast() => _list.removeLast();
-
-  E get last => _list.last;
-
-  List<E> getRange(int start, int rangeLength) =>
-    _list.getRange(start, rangeLength);
-
-  void setRange(int start, int rangeLength, List<E> from, [int startFrom = 0])
-      => _list.setRange(start, rangeLength, from, startFrom);
-
-  void removeRange(int start, int rangeLength) =>
-    _list.removeRange(start, rangeLength);
-
-  void insertRange(int start, int rangeLength, [E initialValue = null]) =>
-    _list.insertRange(start, rangeLength, initialValue);
-
-  E get first => _list[0];
-}
-
-/**
- * This class is used to insure the results of list operations are NodeLists
- * instead of lists.
- */
-class _NodeListWrapper extends _ListWrapper<Node> implements List {
-  _NodeListWrapper(List list) : super(list);
-
-  List<Node> filter(bool f(Node element)) =>
-    new _NodeListWrapper(_list.filter(f));
-
-  List<Node> getRange(int start, int rangeLength) =>
-    new _NodeListWrapper(_list.getRange(start, rangeLength));
-}
-
-class NodeList implements JavaScriptIndexingBehavior, List<Node> native "*NodeList" {
-  Node _parent;
-
-  // -- start List<Node> mixins.
-  // Node is the element type.
-
-  // From Iterable<Node>:
-
-  Iterator<Node> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new FixedSizeListIterator<Node>(this);
-  }
-
-  // From Collection<Node>:
-
-  void add(Node value) {
-    _parent.$dom_appendChild(value);
-  }
-
-  void addLast(Node value) {
-    _parent.$dom_appendChild(value);
-  }
-
-  void addAll(Collection<Node> collection) {
-    for (Node node in collection) {
-      _parent.$dom_appendChild(node);
-    }
-  }
-
-  Node removeLast() {
-    final result = this.last;
-    if (result != null) {
-      _parent.$dom_removeChild(result);
-    }
-    return result;
-  }
-
-  void clear() {
-    _parent.text = '';
-  }
-
-  void operator []=(int index, Node value) {
-    _parent.$dom_replaceChild(value, this[index]);
-  }
-
-  bool contains(Node element) => _Collections.contains(this, element);
-
-  void forEach(void f(Node element)) => _Collections.forEach(this, f);
-
-  Collection map(f(Node element)) => _Collections.map(this, [], f);
-
-  Collection<Node> filter(bool f(Node element)) =>
-     new _NodeListWrapper(_Collections.filter(this, <Node>[], f));
-
-  bool every(bool f(Node element)) => _Collections.every(this, f);
-
-  bool some(bool f(Node element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<Node>:
-
-  void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(Node element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(Node element, [int start = 0]) =>
-      _Lists.lastIndexOf(this, element, start);
-
-  Node get last => this[length - 1];
-  Node get first => this[0];
-
-  // FIXME: implement thesee.
-  void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-  void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-  List<Node> getRange(int start, int rangeLength) =>
-    new _NodeListWrapper(_Lists.getRange(this, start, rangeLength, <Node>[]));
-
-  // -- end List<Node> mixins.
-
-
-  /** @domName NodeList.length */
-  final int length;
-
-  Node operator[](int index) => JS("Node", "#[#]", this, index);
-
-  /** @domName NodeList.item */
-  Node _item(int index) native "item";
-
-}
-// Copyright (c) 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.
-
-
-/// @domName Notation
+/// @domName Notation; @docsEditable true
 class Notation extends Node native "*Notation" {
 
-  /** @domName Notation.publicId */
+  /// @domName Notation.publicId; @docsEditable true
   final String publicId;
 
-  /** @domName Notation.systemId */
+  /// @domName Notation.systemId; @docsEditable true
   final String systemId;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13917,7 +14147,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Notification
+/// @domName Notification; @docsEditable true
 class Notification extends EventTarget native "*Notification" {
 
   factory Notification(String title, [Map options]) {
@@ -13927,43 +14157,41 @@
     return _NotificationFactoryProvider.createNotification(title, options);
   }
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   NotificationEvents get on =>
     new NotificationEvents(this);
 
-  /** @domName Notification.dir */
+  /// @domName Notification.dir; @docsEditable true
   String dir;
 
-  /** @domName Notification.permission */
+  /// @domName Notification.permission; @docsEditable true
   final String permission;
 
-  /** @domName Notification.replaceId */
+  /// @domName Notification.replaceId; @docsEditable true
   String replaceId;
 
-  /** @domName Notification.tag */
+  /// @domName Notification.tag; @docsEditable true
   String tag;
 
-  /** @domName Notification.addEventListener */
+  /// @domName Notification.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName Notification.cancel */
+  /// @domName Notification.cancel; @docsEditable true
   void cancel() native;
 
-  /** @domName Notification.close */
+  /// @domName Notification.close; @docsEditable true
   void close() native;
 
-  /** @domName Notification.dispatchEvent */
+  /// @domName Notification.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName Notification.removeEventListener */
+  /// @domName Notification.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 
-  /** @domName Notification.requestPermission */
+  /// @domName Notification.requestPermission; @docsEditable true
   static void requestPermission(NotificationPermissionCallback callback) native;
 
-  /** @domName Notification.show */
+  /// @domName Notification.show; @docsEditable true
   void show() native;
 }
 
@@ -13985,19 +14213,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName NotificationCenter
+/// @domName NotificationCenter; @docsEditable true
 class NotificationCenter native "*NotificationCenter" {
 
-  /** @domName NotificationCenter.checkPermission */
+  /// @domName NotificationCenter.checkPermission; @docsEditable true
   int checkPermission() native;
 
-  /** @domName NotificationCenter.createHTMLNotification */
+  /// @domName NotificationCenter.createHTMLNotification; @docsEditable true
   Notification createHTMLNotification(String url) native;
 
-  /** @domName NotificationCenter.createNotification */
+  /// @domName NotificationCenter.createNotification; @docsEditable true
   Notification createNotification(String iconUrl, String title, String body) native;
 
-  /** @domName NotificationCenter.requestPermission */
+  /// @domName NotificationCenter.requestPermission; @docsEditable true
   void requestPermission(VoidCallback callback) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14013,7 +14241,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName OESElementIndexUint
+/// @domName OESElementIndexUint; @docsEditable true
 class OESElementIndexUint native "*OESElementIndexUint" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14021,7 +14249,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName OESStandardDerivatives
+/// @domName OESStandardDerivatives; @docsEditable true
 class OESStandardDerivatives native "*OESStandardDerivatives" {
 
   static const int FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 0x8B8B;
@@ -14031,7 +14259,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName OESTextureFloat
+/// @domName OESTextureFloat; @docsEditable true
 class OESTextureFloat native "*OESTextureFloat" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14039,21 +14267,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName OESVertexArrayObject
+/// @domName OESVertexArrayObject; @docsEditable true
 class OESVertexArrayObject native "*OESVertexArrayObject" {
 
   static const int VERTEX_ARRAY_BINDING_OES = 0x85B5;
 
-  /** @domName OESVertexArrayObject.bindVertexArrayOES */
+  /// @domName OESVertexArrayObject.bindVertexArrayOES; @docsEditable true
   void bindVertexArrayOES(WebGLVertexArrayObjectOES arrayObject) native;
 
-  /** @domName OESVertexArrayObject.createVertexArrayOES */
+  /// @domName OESVertexArrayObject.createVertexArrayOES; @docsEditable true
   WebGLVertexArrayObjectOES createVertexArrayOES() native;
 
-  /** @domName OESVertexArrayObject.deleteVertexArrayOES */
+  /// @domName OESVertexArrayObject.deleteVertexArrayOES; @docsEditable true
   void deleteVertexArrayOES(WebGLVertexArrayObjectOES arrayObject) native;
 
-  /** @domName OESVertexArrayObject.isVertexArrayOES */
+  /// @domName OESVertexArrayObject.isVertexArrayOES; @docsEditable true
   bool isVertexArrayOES(WebGLVertexArrayObjectOES arrayObject) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14061,21 +14289,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLOListElement
+/// @domName HTMLOListElement; @docsEditable true
 class OListElement extends Element implements Element native "*HTMLOListElement" {
 
-  factory OListElement() => _Elements.createOListElement();
+  factory OListElement() => document.$dom_createElement("ol");
 
-  /** @domName HTMLOListElement.compact */
+  /// @domName HTMLOListElement.compact; @docsEditable true
   bool compact;
 
-  /** @domName HTMLOListElement.reversed */
+  /// @domName HTMLOListElement.reversed; @docsEditable true
   bool reversed;
 
-  /** @domName HTMLOListElement.start */
+  /// @domName HTMLOListElement.start; @docsEditable true
   int start;
 
-  /** @domName HTMLOListElement.type */
+  /// @domName HTMLOListElement.type; @docsEditable true
   String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14083,75 +14311,75 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLObjectElement
+/// @domName HTMLObjectElement; @docsEditable true
 class ObjectElement extends Element implements Element native "*HTMLObjectElement" {
 
-  factory ObjectElement() => _Elements.createObjectElement();
+  factory ObjectElement() => document.$dom_createElement("object");
 
-  /** @domName HTMLObjectElement.align */
+  /// @domName HTMLObjectElement.align; @docsEditable true
   String align;
 
-  /** @domName HTMLObjectElement.archive */
+  /// @domName HTMLObjectElement.archive; @docsEditable true
   String archive;
 
-  /** @domName HTMLObjectElement.border */
+  /// @domName HTMLObjectElement.border; @docsEditable true
   String border;
 
-  /** @domName HTMLObjectElement.code */
+  /// @domName HTMLObjectElement.code; @docsEditable true
   String code;
 
-  /** @domName HTMLObjectElement.codeBase */
+  /// @domName HTMLObjectElement.codeBase; @docsEditable true
   String codeBase;
 
-  /** @domName HTMLObjectElement.codeType */
+  /// @domName HTMLObjectElement.codeType; @docsEditable true
   String codeType;
 
-  /** @domName HTMLObjectElement.data */
+  /// @domName HTMLObjectElement.data; @docsEditable true
   String data;
 
-  /** @domName HTMLObjectElement.declare */
+  /// @domName HTMLObjectElement.declare; @docsEditable true
   bool declare;
 
-  /** @domName HTMLObjectElement.form */
+  /// @domName HTMLObjectElement.form; @docsEditable true
   final FormElement form;
 
-  /** @domName HTMLObjectElement.height */
+  /// @domName HTMLObjectElement.height; @docsEditable true
   String height;
 
-  /** @domName HTMLObjectElement.hspace */
+  /// @domName HTMLObjectElement.hspace; @docsEditable true
   int hspace;
 
-  /** @domName HTMLObjectElement.name */
+  /// @domName HTMLObjectElement.name; @docsEditable true
   String name;
 
-  /** @domName HTMLObjectElement.standby */
+  /// @domName HTMLObjectElement.standby; @docsEditable true
   String standby;
 
-  /** @domName HTMLObjectElement.type */
+  /// @domName HTMLObjectElement.type; @docsEditable true
   String type;
 
-  /** @domName HTMLObjectElement.useMap */
+  /// @domName HTMLObjectElement.useMap; @docsEditable true
   String useMap;
 
-  /** @domName HTMLObjectElement.validationMessage */
+  /// @domName HTMLObjectElement.validationMessage; @docsEditable true
   final String validationMessage;
 
-  /** @domName HTMLObjectElement.validity */
+  /// @domName HTMLObjectElement.validity; @docsEditable true
   final ValidityState validity;
 
-  /** @domName HTMLObjectElement.vspace */
+  /// @domName HTMLObjectElement.vspace; @docsEditable true
   int vspace;
 
-  /** @domName HTMLObjectElement.width */
+  /// @domName HTMLObjectElement.width; @docsEditable true
   String width;
 
-  /** @domName HTMLObjectElement.willValidate */
+  /// @domName HTMLObjectElement.willValidate; @docsEditable true
   final bool willValidate;
 
-  /** @domName HTMLObjectElement.checkValidity */
+  /// @domName HTMLObjectElement.checkValidity; @docsEditable true
   bool checkValidity() native;
 
-  /** @domName HTMLObjectElement.setCustomValidity */
+  /// @domName HTMLObjectElement.setCustomValidity; @docsEditable true
   void setCustomValidity(String error) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14159,10 +14387,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName OfflineAudioCompletionEvent
+/// @domName OfflineAudioCompletionEvent; @docsEditable true
 class OfflineAudioCompletionEvent extends Event native "*OfflineAudioCompletionEvent" {
 
-  /** @domName OfflineAudioCompletionEvent.renderedBuffer */
+  /// @domName OfflineAudioCompletionEvent.renderedBuffer; @docsEditable true
   final AudioBuffer renderedBuffer;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14170,15 +14398,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLOptGroupElement
+/// @domName HTMLOptGroupElement; @docsEditable true
 class OptGroupElement extends Element implements Element native "*HTMLOptGroupElement" {
 
-  factory OptGroupElement() => _Elements.createOptGroupElement();
+  factory OptGroupElement() => document.$dom_createElement("optgroup");
 
-  /** @domName HTMLOptGroupElement.disabled */
+  /// @domName HTMLOptGroupElement.disabled; @docsEditable true
   bool disabled;
 
-  /** @domName HTMLOptGroupElement.label */
+  /// @domName HTMLOptGroupElement.label; @docsEditable true
   String label;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14186,7 +14414,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLOptionElement
+/// @domName HTMLOptionElement; @docsEditable true
 class OptionElement extends Element implements Element native "*HTMLOptionElement" {
 
   factory OptionElement([String data, String value, bool defaultSelected, bool selected]) {
@@ -14205,25 +14433,25 @@
     return _OptionElementFactoryProvider.createOptionElement(data, value, defaultSelected, selected);
   }
 
-  /** @domName HTMLOptionElement.defaultSelected */
+  /// @domName HTMLOptionElement.defaultSelected; @docsEditable true
   bool defaultSelected;
 
-  /** @domName HTMLOptionElement.disabled */
+  /// @domName HTMLOptionElement.disabled; @docsEditable true
   bool disabled;
 
-  /** @domName HTMLOptionElement.form */
+  /// @domName HTMLOptionElement.form; @docsEditable true
   final FormElement form;
 
-  /** @domName HTMLOptionElement.index */
+  /// @domName HTMLOptionElement.index; @docsEditable true
   final int index;
 
-  /** @domName HTMLOptionElement.label */
+  /// @domName HTMLOptionElement.label; @docsEditable true
   String label;
 
-  /** @domName HTMLOptionElement.selected */
+  /// @domName HTMLOptionElement.selected; @docsEditable true
   bool selected;
 
-  /** @domName HTMLOptionElement.value */
+  /// @domName HTMLOptionElement.value; @docsEditable true
   String value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14231,7 +14459,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName OscillatorNode
+/// @domName OscillatorNode; @docsEditable true
 class OscillatorNode extends AudioSourceNode native "*OscillatorNode" {
 
   static const int CUSTOM = 4;
@@ -14252,25 +14480,25 @@
 
   static const int UNSCHEDULED_STATE = 0;
 
-  /** @domName OscillatorNode.detune */
+  /// @domName OscillatorNode.detune; @docsEditable true
   final AudioParam detune;
 
-  /** @domName OscillatorNode.frequency */
+  /// @domName OscillatorNode.frequency; @docsEditable true
   final AudioParam frequency;
 
-  /** @domName OscillatorNode.playbackState */
+  /// @domName OscillatorNode.playbackState; @docsEditable true
   final int playbackState;
 
-  /** @domName OscillatorNode.type */
+  /// @domName OscillatorNode.type; @docsEditable true
   int type;
 
-  /** @domName OscillatorNode.setWaveTable */
+  /// @domName OscillatorNode.setWaveTable; @docsEditable true
   void setWaveTable(WaveTable waveTable) native;
 
-  /** @domName OscillatorNode.start */
+  /// @domName OscillatorNode.start; @docsEditable true
   void start(num when) native;
 
-  /** @domName OscillatorNode.stop */
+  /// @domName OscillatorNode.stop; @docsEditable true
   void stop(num when) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14278,45 +14506,46 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLOutputElement
+/// @domName HTMLOutputElement; @docsEditable true
 class OutputElement extends Element implements Element native "*HTMLOutputElement" {
 
-  factory OutputElement() => _Elements.createOutputElement();
+  factory OutputElement() => document.$dom_createElement("output");
 
-  /** @domName HTMLOutputElement.defaultValue */
+  /// @domName HTMLOutputElement.defaultValue; @docsEditable true
   String defaultValue;
 
-  /** @domName HTMLOutputElement.form */
+  /// @domName HTMLOutputElement.form; @docsEditable true
   final FormElement form;
 
-  /** @domName HTMLOutputElement.htmlFor */
+  /// @domName HTMLOutputElement.htmlFor; @docsEditable true
   DOMSettableTokenList htmlFor;
 
-  /** @domName HTMLOutputElement.labels */
+  /// @domName HTMLOutputElement.labels; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   final List<Node> labels;
 
-  /** @domName HTMLOutputElement.name */
+  /// @domName HTMLOutputElement.name; @docsEditable true
   String name;
 
-  /** @domName HTMLOutputElement.type */
+  /// @domName HTMLOutputElement.type; @docsEditable true
   final String type;
 
-  /** @domName HTMLOutputElement.validationMessage */
+  /// @domName HTMLOutputElement.validationMessage; @docsEditable true
   final String validationMessage;
 
-  /** @domName HTMLOutputElement.validity */
+  /// @domName HTMLOutputElement.validity; @docsEditable true
   final ValidityState validity;
 
-  /** @domName HTMLOutputElement.value */
+  /// @domName HTMLOutputElement.value; @docsEditable true
   String value;
 
-  /** @domName HTMLOutputElement.willValidate */
+  /// @domName HTMLOutputElement.willValidate; @docsEditable true
   final bool willValidate;
 
-  /** @domName HTMLOutputElement.checkValidity */
+  /// @domName HTMLOutputElement.checkValidity; @docsEditable true
   bool checkValidity() native;
 
-  /** @domName HTMLOutputElement.setCustomValidity */
+  /// @domName HTMLOutputElement.setCustomValidity; @docsEditable true
   void setCustomValidity(String error) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14324,7 +14553,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName OverflowEvent
+/// @domName OverflowEvent; @docsEditable true
 class OverflowEvent extends Event native "*OverflowEvent" {
 
   static const int BOTH = 2;
@@ -14333,13 +14562,13 @@
 
   static const int VERTICAL = 1;
 
-  /** @domName OverflowEvent.horizontalOverflow */
+  /// @domName OverflowEvent.horizontalOverflow; @docsEditable true
   final bool horizontalOverflow;
 
-  /** @domName OverflowEvent.orient */
+  /// @domName OverflowEvent.orient; @docsEditable true
   final int orient;
 
-  /** @domName OverflowEvent.verticalOverflow */
+  /// @domName OverflowEvent.verticalOverflow; @docsEditable true
   final bool verticalOverflow;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14347,13 +14576,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName PagePopupController
+/// @domName PagePopupController; @docsEditable true
 class PagePopupController native "*PagePopupController" {
 
-  /** @domName PagePopupController.localizeNumberString */
+  /// @domName PagePopupController.localizeNumberString; @docsEditable true
   String localizeNumberString(String numberString) native;
 
-  /** @domName PagePopupController.setValueAndClosePopup */
+  /// @domName PagePopupController.setValueAndClosePopup; @docsEditable true
   void setValueAndClosePopup(int numberValue, String stringValue) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14361,10 +14590,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName PageTransitionEvent
+/// @domName PageTransitionEvent; @docsEditable true
 class PageTransitionEvent extends Event native "*PageTransitionEvent" {
 
-  /** @domName PageTransitionEvent.persisted */
+  /// @domName PageTransitionEvent.persisted; @docsEditable true
   final bool persisted;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14372,7 +14601,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName PannerNode
+/// @domName PannerNode; @docsEditable true
 class PannerNode extends AudioNode native "*PannerNode" {
 
   static const int EQUALPOWER = 0;
@@ -14387,43 +14616,43 @@
 
   static const int SOUNDFIELD = 2;
 
-  /** @domName PannerNode.coneGain */
+  /// @domName PannerNode.coneGain; @docsEditable true
   final AudioGain coneGain;
 
-  /** @domName PannerNode.coneInnerAngle */
+  /// @domName PannerNode.coneInnerAngle; @docsEditable true
   num coneInnerAngle;
 
-  /** @domName PannerNode.coneOuterAngle */
+  /// @domName PannerNode.coneOuterAngle; @docsEditable true
   num coneOuterAngle;
 
-  /** @domName PannerNode.coneOuterGain */
+  /// @domName PannerNode.coneOuterGain; @docsEditable true
   num coneOuterGain;
 
-  /** @domName PannerNode.distanceGain */
+  /// @domName PannerNode.distanceGain; @docsEditable true
   final AudioGain distanceGain;
 
-  /** @domName PannerNode.distanceModel */
+  /// @domName PannerNode.distanceModel; @docsEditable true
   int distanceModel;
 
-  /** @domName PannerNode.maxDistance */
+  /// @domName PannerNode.maxDistance; @docsEditable true
   num maxDistance;
 
-  /** @domName PannerNode.panningModel */
+  /// @domName PannerNode.panningModel; @docsEditable true
   int panningModel;
 
-  /** @domName PannerNode.refDistance */
+  /// @domName PannerNode.refDistance; @docsEditable true
   num refDistance;
 
-  /** @domName PannerNode.rolloffFactor */
+  /// @domName PannerNode.rolloffFactor; @docsEditable true
   num rolloffFactor;
 
-  /** @domName PannerNode.setOrientation */
+  /// @domName PannerNode.setOrientation; @docsEditable true
   void setOrientation(num x, num y, num z) native;
 
-  /** @domName PannerNode.setPosition */
+  /// @domName PannerNode.setPosition; @docsEditable true
   void setPosition(num x, num y, num z) native;
 
-  /** @domName PannerNode.setVelocity */
+  /// @domName PannerNode.setVelocity; @docsEditable true
   void setVelocity(num x, num y, num z) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14431,12 +14660,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLParagraphElement
+/// @domName HTMLParagraphElement; @docsEditable true
 class ParagraphElement extends Element implements Element native "*HTMLParagraphElement" {
 
-  factory ParagraphElement() => _Elements.createParagraphElement();
+  factory ParagraphElement() => document.$dom_createElement("p");
 
-  /** @domName HTMLParagraphElement.align */
+  /// @domName HTMLParagraphElement.align; @docsEditable true
   String align;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14444,21 +14673,21 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLParamElement
+/// @domName HTMLParamElement; @docsEditable true
 class ParamElement extends Element implements Element native "*HTMLParamElement" {
 
-  factory ParamElement() => _Elements.createParamElement();
+  factory ParamElement() => document.$dom_createElement("param");
 
-  /** @domName HTMLParamElement.name */
+  /// @domName HTMLParamElement.name; @docsEditable true
   String name;
 
-  /** @domName HTMLParamElement.type */
+  /// @domName HTMLParamElement.type; @docsEditable true
   String type;
 
-  /** @domName HTMLParamElement.value */
+  /// @domName HTMLParamElement.value; @docsEditable true
   String value;
 
-  /** @domName HTMLParamElement.valueType */
+  /// @domName HTMLParamElement.valueType; @docsEditable true
   String valueType;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14466,14 +14695,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName PeerConnection00
+/// @domName PeerConnection00; @docsEditable true
 class PeerConnection00 extends EventTarget native "*PeerConnection00" {
 
   factory PeerConnection00(String serverConfiguration, IceCallback iceCallback) => _PeerConnection00FactoryProvider.createPeerConnection00(serverConfiguration, iceCallback);
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   PeerConnection00Events get on =>
     new PeerConnection00Events(this);
 
@@ -14505,28 +14732,30 @@
 
   static const int SDP_PRANSWER = 0x200;
 
-  /** @domName PeerConnection00.iceState */
+  /// @domName PeerConnection00.iceState; @docsEditable true
   final int iceState;
 
-  /** @domName PeerConnection00.localDescription */
+  /// @domName PeerConnection00.localDescription; @docsEditable true
   final SessionDescription localDescription;
 
-  /** @domName PeerConnection00.localStreams */
+  /// @domName PeerConnection00.localStreams; @docsEditable true
+  @Returns('_MediaStreamList') @Creates('_MediaStreamList')
   final List<MediaStream> localStreams;
 
-  /** @domName PeerConnection00.readyState */
+  /// @domName PeerConnection00.readyState; @docsEditable true
   final int readyState;
 
-  /** @domName PeerConnection00.remoteDescription */
+  /// @domName PeerConnection00.remoteDescription; @docsEditable true
   final SessionDescription remoteDescription;
 
-  /** @domName PeerConnection00.remoteStreams */
+  /// @domName PeerConnection00.remoteStreams; @docsEditable true
+  @Returns('_MediaStreamList') @Creates('_MediaStreamList')
   final List<MediaStream> remoteStreams;
 
-  /** @domName PeerConnection00.addEventListener */
+  /// @domName PeerConnection00.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName PeerConnection00.addStream */
+  /// @domName PeerConnection00.addStream; @docsEditable true
   void addStream(MediaStream stream, [Map mediaStreamHints]) {
     if (?mediaStreamHints) {
       var mediaStreamHints_1 = _convertDartToNative_Dictionary(mediaStreamHints);
@@ -14539,10 +14768,10 @@
   void _addStream_1(MediaStream stream, mediaStreamHints) native "addStream";
   void _addStream_2(MediaStream stream) native "addStream";
 
-  /** @domName PeerConnection00.close */
+  /// @domName PeerConnection00.close; @docsEditable true
   void close() native;
 
-  /** @domName PeerConnection00.createAnswer */
+  /// @domName PeerConnection00.createAnswer; @docsEditable true
   SessionDescription createAnswer(String offer, [Map mediaHints]) {
     if (?mediaHints) {
       var mediaHints_1 = _convertDartToNative_Dictionary(mediaHints);
@@ -14553,7 +14782,7 @@
   SessionDescription _createAnswer_1(offer, mediaHints) native "createAnswer";
   SessionDescription _createAnswer_2(offer) native "createAnswer";
 
-  /** @domName PeerConnection00.createOffer */
+  /// @domName PeerConnection00.createOffer; @docsEditable true
   SessionDescription createOffer([Map mediaHints]) {
     if (?mediaHints) {
       var mediaHints_1 = _convertDartToNative_Dictionary(mediaHints);
@@ -14564,25 +14793,25 @@
   SessionDescription _createOffer_1(mediaHints) native "createOffer";
   SessionDescription _createOffer_2() native "createOffer";
 
-  /** @domName PeerConnection00.dispatchEvent */
+  /// @domName PeerConnection00.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event event) native "dispatchEvent";
 
-  /** @domName PeerConnection00.processIceMessage */
+  /// @domName PeerConnection00.processIceMessage; @docsEditable true
   void processIceMessage(IceCandidate candidate) native;
 
-  /** @domName PeerConnection00.removeEventListener */
+  /// @domName PeerConnection00.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 
-  /** @domName PeerConnection00.removeStream */
+  /// @domName PeerConnection00.removeStream; @docsEditable true
   void removeStream(MediaStream stream) native;
 
-  /** @domName PeerConnection00.setLocalDescription */
+  /// @domName PeerConnection00.setLocalDescription; @docsEditable true
   void setLocalDescription(int action, SessionDescription desc) native;
 
-  /** @domName PeerConnection00.setRemoteDescription */
+  /// @domName PeerConnection00.setRemoteDescription; @docsEditable true
   void setRemoteDescription(int action, SessionDescription desc) native;
 
-  /** @domName PeerConnection00.startIce */
+  /// @domName PeerConnection00.startIce; @docsEditable true
   void startIce([Map iceOptions]) {
     if (?iceOptions) {
       var iceOptions_1 = _convertDartToNative_Dictionary(iceOptions);
@@ -14614,19 +14843,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Performance
+/// @domName Performance; @docsEditable true
 class Performance extends EventTarget native "*Performance" {
 
-  /** @domName Performance.memory */
+  /// @domName Performance.memory; @docsEditable true
   final MemoryInfo memory;
 
-  /** @domName Performance.navigation */
+  /// @domName Performance.navigation; @docsEditable true
   final PerformanceNavigation navigation;
 
-  /** @domName Performance.timing */
+  /// @domName Performance.timing; @docsEditable true
   final PerformanceTiming timing;
 
-  /** @domName Performance.now */
+  /// @domName Performance.now; @docsEditable true
   num now() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14634,7 +14863,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName PerformanceNavigation
+/// @domName PerformanceNavigation; @docsEditable true
 class PerformanceNavigation native "*PerformanceNavigation" {
 
   static const int TYPE_BACK_FORWARD = 2;
@@ -14645,10 +14874,10 @@
 
   static const int TYPE_RESERVED = 255;
 
-  /** @domName PerformanceNavigation.redirectCount */
+  /// @domName PerformanceNavigation.redirectCount; @docsEditable true
   final int redirectCount;
 
-  /** @domName PerformanceNavigation.type */
+  /// @domName PerformanceNavigation.type; @docsEditable true
   final int type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14656,70 +14885,70 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName PerformanceTiming
+/// @domName PerformanceTiming; @docsEditable true
 class PerformanceTiming native "*PerformanceTiming" {
 
-  /** @domName PerformanceTiming.connectEnd */
+  /// @domName PerformanceTiming.connectEnd; @docsEditable true
   final int connectEnd;
 
-  /** @domName PerformanceTiming.connectStart */
+  /// @domName PerformanceTiming.connectStart; @docsEditable true
   final int connectStart;
 
-  /** @domName PerformanceTiming.domComplete */
+  /// @domName PerformanceTiming.domComplete; @docsEditable true
   final int domComplete;
 
-  /** @domName PerformanceTiming.domContentLoadedEventEnd */
+  /// @domName PerformanceTiming.domContentLoadedEventEnd; @docsEditable true
   final int domContentLoadedEventEnd;
 
-  /** @domName PerformanceTiming.domContentLoadedEventStart */
+  /// @domName PerformanceTiming.domContentLoadedEventStart; @docsEditable true
   final int domContentLoadedEventStart;
 
-  /** @domName PerformanceTiming.domInteractive */
+  /// @domName PerformanceTiming.domInteractive; @docsEditable true
   final int domInteractive;
 
-  /** @domName PerformanceTiming.domLoading */
+  /// @domName PerformanceTiming.domLoading; @docsEditable true
   final int domLoading;
 
-  /** @domName PerformanceTiming.domainLookupEnd */
+  /// @domName PerformanceTiming.domainLookupEnd; @docsEditable true
   final int domainLookupEnd;
 
-  /** @domName PerformanceTiming.domainLookupStart */
+  /// @domName PerformanceTiming.domainLookupStart; @docsEditable true
   final int domainLookupStart;
 
-  /** @domName PerformanceTiming.fetchStart */
+  /// @domName PerformanceTiming.fetchStart; @docsEditable true
   final int fetchStart;
 
-  /** @domName PerformanceTiming.loadEventEnd */
+  /// @domName PerformanceTiming.loadEventEnd; @docsEditable true
   final int loadEventEnd;
 
-  /** @domName PerformanceTiming.loadEventStart */
+  /// @domName PerformanceTiming.loadEventStart; @docsEditable true
   final int loadEventStart;
 
-  /** @domName PerformanceTiming.navigationStart */
+  /// @domName PerformanceTiming.navigationStart; @docsEditable true
   final int navigationStart;
 
-  /** @domName PerformanceTiming.redirectEnd */
+  /// @domName PerformanceTiming.redirectEnd; @docsEditable true
   final int redirectEnd;
 
-  /** @domName PerformanceTiming.redirectStart */
+  /// @domName PerformanceTiming.redirectStart; @docsEditable true
   final int redirectStart;
 
-  /** @domName PerformanceTiming.requestStart */
+  /// @domName PerformanceTiming.requestStart; @docsEditable true
   final int requestStart;
 
-  /** @domName PerformanceTiming.responseEnd */
+  /// @domName PerformanceTiming.responseEnd; @docsEditable true
   final int responseEnd;
 
-  /** @domName PerformanceTiming.responseStart */
+  /// @domName PerformanceTiming.responseStart; @docsEditable true
   final int responseStart;
 
-  /** @domName PerformanceTiming.secureConnectionStart */
+  /// @domName PerformanceTiming.secureConnectionStart; @docsEditable true
   final int secureConnectionStart;
 
-  /** @domName PerformanceTiming.unloadEventEnd */
+  /// @domName PerformanceTiming.unloadEventEnd; @docsEditable true
   final int unloadEventEnd;
 
-  /** @domName PerformanceTiming.unloadEventStart */
+  /// @domName PerformanceTiming.unloadEventStart; @docsEditable true
   final int unloadEventStart;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14732,10 +14961,10 @@
 class Point native "*WebKitPoint" {
   factory Point(num x, num y) => _PointFactoryProvider.createPoint(x, y);
 
-  /** @domName WebKitPoint.x */
+  /// @domName WebKitPoint.x; @docsEditable true
   num x;
 
-  /** @domName WebKitPoint.y */
+  /// @domName WebKitPoint.y; @docsEditable true
   num y;
 
 }
@@ -14744,10 +14973,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName PopStateEvent
+/// @domName PopStateEvent; @docsEditable true
 class PopStateEvent extends Event native "*PopStateEvent" {
 
-  /** @domName PopStateEvent.state */
+  /// @domName PopStateEvent.state; @docsEditable true
   dynamic get state => _convertNativeToDart_SerializedScriptValue(this._state);
   dynamic get _state => JS("dynamic", "#.state", this);
 }
@@ -14764,7 +14993,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName PositionError
+/// @domName PositionError; @docsEditable true
 class PositionError native "*PositionError" {
 
   static const int PERMISSION_DENIED = 1;
@@ -14773,10 +15002,10 @@
 
   static const int TIMEOUT = 3;
 
-  /** @domName PositionError.code */
+  /// @domName PositionError.code; @docsEditable true
   final int code;
 
-  /** @domName PositionError.message */
+  /// @domName PositionError.message; @docsEditable true
   final String message;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14792,15 +15021,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLPreElement
+/// @domName HTMLPreElement; @docsEditable true
 class PreElement extends Element implements Element native "*HTMLPreElement" {
 
-  factory PreElement() => _Elements.createPreElement();
+  factory PreElement() => document.$dom_createElement("pre");
 
-  /** @domName HTMLPreElement.width */
+  /// @domName HTMLPreElement.width; @docsEditable true
   int width;
 
-  /** @domName HTMLPreElement.wrap */
+  /// @domName HTMLPreElement.wrap; @docsEditable true
   bool wrap;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14808,16 +15037,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ProcessingInstruction
+/// @domName ProcessingInstruction; @docsEditable true
 class ProcessingInstruction extends Node native "*ProcessingInstruction" {
 
-  /** @domName ProcessingInstruction.data */
+  /// @domName ProcessingInstruction.data; @docsEditable true
   String data;
 
-  /** @domName ProcessingInstruction.sheet */
+  /// @domName ProcessingInstruction.sheet; @docsEditable true
   final StyleSheet sheet;
 
-  /** @domName ProcessingInstruction.target */
+  /// @domName ProcessingInstruction.target; @docsEditable true
   final String target;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14825,21 +15054,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLProgressElement
+/// @domName HTMLProgressElement; @docsEditable true
 class ProgressElement extends Element implements Element native "*HTMLProgressElement" {
 
-  factory ProgressElement() => _Elements.createProgressElement();
+  factory ProgressElement() => document.$dom_createElement("progress");
 
-  /** @domName HTMLProgressElement.labels */
+  /// @domName HTMLProgressElement.labels; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   final List<Node> labels;
 
-  /** @domName HTMLProgressElement.max */
+  /// @domName HTMLProgressElement.max; @docsEditable true
   num max;
 
-  /** @domName HTMLProgressElement.position */
+  /// @domName HTMLProgressElement.position; @docsEditable true
   final num position;
 
-  /** @domName HTMLProgressElement.value */
+  /// @domName HTMLProgressElement.value; @docsEditable true
   num value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14847,16 +15077,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ProgressEvent
+/// @domName ProgressEvent; @docsEditable true
 class ProgressEvent extends Event native "*ProgressEvent" {
 
-  /** @domName ProgressEvent.lengthComputable */
+  /// @domName ProgressEvent.lengthComputable; @docsEditable true
   final bool lengthComputable;
 
-  /** @domName ProgressEvent.loaded */
+  /// @domName ProgressEvent.loaded; @docsEditable true
   final int loaded;
 
-  /** @domName ProgressEvent.total */
+  /// @domName ProgressEvent.total; @docsEditable true
   final int total;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14864,10 +15094,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLQuoteElement
+/// @domName HTMLQuoteElement; @docsEditable true
 class QuoteElement extends Element implements Element native "*HTMLQuoteElement" {
 
-  /** @domName HTMLQuoteElement.cite */
+  /// @domName HTMLQuoteElement.cite; @docsEditable true
   String cite;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14875,16 +15105,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RGBColor
+/// @domName RGBColor; @docsEditable true
 class RGBColor native "*RGBColor" {
 
-  /** @domName RGBColor.blue */
+  /// @domName RGBColor.blue; @docsEditable true
   final CSSPrimitiveValue blue;
 
-  /** @domName RGBColor.green */
+  /// @domName RGBColor.green; @docsEditable true
   final CSSPrimitiveValue green;
 
-  /** @domName RGBColor.red */
+  /// @domName RGBColor.red; @docsEditable true
   final CSSPrimitiveValue red;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14892,43 +15122,41 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCDataChannel
+/// @domName RTCDataChannel; @docsEditable true
 class RTCDataChannel extends EventTarget native "*RTCDataChannel" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   RTCDataChannelEvents get on =>
     new RTCDataChannelEvents(this);
 
-  /** @domName RTCDataChannel.binaryType */
+  /// @domName RTCDataChannel.binaryType; @docsEditable true
   String binaryType;
 
-  /** @domName RTCDataChannel.bufferedAmount */
+  /// @domName RTCDataChannel.bufferedAmount; @docsEditable true
   final int bufferedAmount;
 
-  /** @domName RTCDataChannel.label */
+  /// @domName RTCDataChannel.label; @docsEditable true
   final String label;
 
-  /** @domName RTCDataChannel.readyState */
+  /// @domName RTCDataChannel.readyState; @docsEditable true
   final String readyState;
 
-  /** @domName RTCDataChannel.reliable */
+  /// @domName RTCDataChannel.reliable; @docsEditable true
   final bool reliable;
 
-  /** @domName RTCDataChannel.addEventListener */
+  /// @domName RTCDataChannel.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName RTCDataChannel.close */
+  /// @domName RTCDataChannel.close; @docsEditable true
   void close() native;
 
-  /** @domName RTCDataChannel.dispatchEvent */
+  /// @domName RTCDataChannel.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event event) native "dispatchEvent";
 
-  /** @domName RTCDataChannel.removeEventListener */
+  /// @domName RTCDataChannel.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 
-  /** @domName RTCDataChannel.send */
+  /// @domName RTCDataChannel.send; @docsEditable true
   void send(data) native;
 }
 
@@ -14948,10 +15176,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCDataChannelEvent
+/// @domName RTCDataChannelEvent; @docsEditable true
 class RTCDataChannelEvent extends Event native "*RTCDataChannelEvent" {
 
-  /** @domName RTCDataChannelEvent.channel */
+  /// @domName RTCDataChannelEvent.channel; @docsEditable true
   final RTCDataChannel channel;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14967,18 +15195,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCIceCandidate
+/// @domName RTCIceCandidate; @docsEditable true
 class RTCIceCandidate native "*RTCIceCandidate" {
 
   factory RTCIceCandidate(Map dictionary) => _RTCIceCandidateFactoryProvider.createRTCIceCandidate(dictionary);
 
-  /** @domName RTCIceCandidate.candidate */
+  /// @domName RTCIceCandidate.candidate; @docsEditable true
   final String candidate;
 
-  /** @domName RTCIceCandidate.sdpMLineIndex */
+  /// @domName RTCIceCandidate.sdpMLineIndex; @docsEditable true
   final int sdpMLineIndex;
 
-  /** @domName RTCIceCandidate.sdpMid */
+  /// @domName RTCIceCandidate.sdpMid; @docsEditable true
   final String sdpMid;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14986,10 +15214,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCIceCandidateEvent
+/// @domName RTCIceCandidateEvent; @docsEditable true
 class RTCIceCandidateEvent extends Event native "*RTCIceCandidateEvent" {
 
-  /** @domName RTCIceCandidateEvent.candidate */
+  /// @domName RTCIceCandidateEvent.candidate; @docsEditable true
   final RTCIceCandidate candidate;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14997,7 +15225,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCPeerConnection
+/// @domName RTCPeerConnection; @docsEditable true
 class RTCPeerConnection extends EventTarget native "*RTCPeerConnection" {
 
   factory RTCPeerConnection(Map rtcIceServers, [Map mediaConstraints]) {
@@ -15007,37 +15235,37 @@
     return _RTCPeerConnectionFactoryProvider.createRTCPeerConnection(rtcIceServers, mediaConstraints);
   }
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   RTCPeerConnectionEvents get on =>
     new RTCPeerConnectionEvents(this);
 
-  /** @domName RTCPeerConnection.iceState */
+  /// @domName RTCPeerConnection.iceState; @docsEditable true
   final String iceState;
 
-  /** @domName RTCPeerConnection.localDescription */
+  /// @domName RTCPeerConnection.localDescription; @docsEditable true
   final RTCSessionDescription localDescription;
 
-  /** @domName RTCPeerConnection.localStreams */
+  /// @domName RTCPeerConnection.localStreams; @docsEditable true
+  @Returns('_MediaStreamList') @Creates('_MediaStreamList')
   final List<MediaStream> localStreams;
 
-  /** @domName RTCPeerConnection.readyState */
+  /// @domName RTCPeerConnection.readyState; @docsEditable true
   final String readyState;
 
-  /** @domName RTCPeerConnection.remoteDescription */
+  /// @domName RTCPeerConnection.remoteDescription; @docsEditable true
   final RTCSessionDescription remoteDescription;
 
-  /** @domName RTCPeerConnection.remoteStreams */
+  /// @domName RTCPeerConnection.remoteStreams; @docsEditable true
+  @Returns('_MediaStreamList') @Creates('_MediaStreamList')
   final List<MediaStream> remoteStreams;
 
-  /** @domName RTCPeerConnection.addEventListener */
+  /// @domName RTCPeerConnection.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName RTCPeerConnection.addIceCandidate */
+  /// @domName RTCPeerConnection.addIceCandidate; @docsEditable true
   void addIceCandidate(RTCIceCandidate candidate) native;
 
-  /** @domName RTCPeerConnection.addStream */
+  /// @domName RTCPeerConnection.addStream; @docsEditable true
   void addStream(MediaStream stream, [Map mediaConstraints]) {
     if (?mediaConstraints) {
       var mediaConstraints_1 = _convertDartToNative_Dictionary(mediaConstraints);
@@ -15050,10 +15278,10 @@
   void _addStream_1(MediaStream stream, mediaConstraints) native "addStream";
   void _addStream_2(MediaStream stream) native "addStream";
 
-  /** @domName RTCPeerConnection.close */
+  /// @domName RTCPeerConnection.close; @docsEditable true
   void close() native;
 
-  /** @domName RTCPeerConnection.createAnswer */
+  /// @domName RTCPeerConnection.createAnswer; @docsEditable true
   void createAnswer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]) {
     if (?mediaConstraints) {
       var mediaConstraints_1 = _convertDartToNative_Dictionary(mediaConstraints);
@@ -15066,7 +15294,7 @@
   void _createAnswer_1(RTCSessionDescriptionCallback successCallback, RTCErrorCallback failureCallback, mediaConstraints) native "createAnswer";
   void _createAnswer_2(RTCSessionDescriptionCallback successCallback, RTCErrorCallback failureCallback) native "createAnswer";
 
-  /** @domName RTCPeerConnection.createDataChannel */
+  /// @domName RTCPeerConnection.createDataChannel; @docsEditable true
   RTCDataChannel createDataChannel(String label, [Map options]) {
     if (?options) {
       var options_1 = _convertDartToNative_Dictionary(options);
@@ -15077,7 +15305,7 @@
   RTCDataChannel _createDataChannel_1(label, options) native "createDataChannel";
   RTCDataChannel _createDataChannel_2(label) native "createDataChannel";
 
-  /** @domName RTCPeerConnection.createOffer */
+  /// @domName RTCPeerConnection.createOffer; @docsEditable true
   void createOffer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]) {
     if (?mediaConstraints) {
       var mediaConstraints_1 = _convertDartToNative_Dictionary(mediaConstraints);
@@ -15090,25 +15318,25 @@
   void _createOffer_1(RTCSessionDescriptionCallback successCallback, RTCErrorCallback failureCallback, mediaConstraints) native "createOffer";
   void _createOffer_2(RTCSessionDescriptionCallback successCallback, RTCErrorCallback failureCallback) native "createOffer";
 
-  /** @domName RTCPeerConnection.dispatchEvent */
+  /// @domName RTCPeerConnection.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event event) native "dispatchEvent";
 
-  /** @domName RTCPeerConnection.getStats */
+  /// @domName RTCPeerConnection.getStats; @docsEditable true
   void getStats(RTCStatsCallback successCallback, MediaStreamTrack selector) native;
 
-  /** @domName RTCPeerConnection.removeEventListener */
+  /// @domName RTCPeerConnection.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 
-  /** @domName RTCPeerConnection.removeStream */
+  /// @domName RTCPeerConnection.removeStream; @docsEditable true
   void removeStream(MediaStream stream) native;
 
-  /** @domName RTCPeerConnection.setLocalDescription */
+  /// @domName RTCPeerConnection.setLocalDescription; @docsEditable true
   void setLocalDescription(RTCSessionDescription description, [VoidCallback successCallback, RTCErrorCallback failureCallback]) native;
 
-  /** @domName RTCPeerConnection.setRemoteDescription */
+  /// @domName RTCPeerConnection.setRemoteDescription; @docsEditable true
   void setRemoteDescription(RTCSessionDescription description, [VoidCallback successCallback, RTCErrorCallback failureCallback]) native;
 
-  /** @domName RTCPeerConnection.updateIce */
+  /// @domName RTCPeerConnection.updateIce; @docsEditable true
   void updateIce([Map configuration, Map mediaConstraints]) {
     if (?mediaConstraints) {
       var configuration_1 = _convertDartToNative_Dictionary(configuration);
@@ -15151,15 +15379,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCSessionDescription
+/// @domName RTCSessionDescription; @docsEditable true
 class RTCSessionDescription native "*RTCSessionDescription" {
 
   factory RTCSessionDescription(Map dictionary) => _RTCSessionDescriptionFactoryProvider.createRTCSessionDescription(dictionary);
 
-  /** @domName RTCSessionDescription.sdp */
+  /// @domName RTCSessionDescription.sdp; @docsEditable true
   String sdp;
 
-  /** @domName RTCSessionDescription.type */
+  /// @domName RTCSessionDescription.type; @docsEditable true
   String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15183,13 +15411,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCStatsElement
+/// @domName RTCStatsElement; @docsEditable true
 class RTCStatsElement native "*RTCStatsElement" {
 
-  /** @domName RTCStatsElement.timestamp */
+  /// @domName RTCStatsElement.timestamp; @docsEditable true
   final Date timestamp;
 
-  /** @domName RTCStatsElement.stat */
+  /// @domName RTCStatsElement.stat; @docsEditable true
   String stat(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15197,13 +15425,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCStatsReport
+/// @domName RTCStatsReport; @docsEditable true
 class RTCStatsReport native "*RTCStatsReport" {
 
-  /** @domName RTCStatsReport.local */
+  /// @domName RTCStatsReport.local; @docsEditable true
   final RTCStatsElement local;
 
-  /** @domName RTCStatsReport.remote */
+  /// @domName RTCStatsReport.remote; @docsEditable true
   final RTCStatsElement remote;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15211,10 +15439,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RTCStatsResponse
+/// @domName RTCStatsResponse; @docsEditable true
 class RTCStatsResponse native "*RTCStatsResponse" {
 
-  /** @domName RTCStatsResponse.result */
+  /// @domName RTCStatsResponse.result; @docsEditable true
   List<RTCStatsReport> result() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15222,10 +15450,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RadioNodeList
-class RadioNodeList extends NodeList native "*RadioNodeList" {
+/// @domName RadioNodeList; @docsEditable true
+class RadioNodeList extends _NodeList native "*RadioNodeList" {
 
-  /** @domName RadioNodeList.value */
+  /// @domName RadioNodeList.value; @docsEditable true
   String value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15233,7 +15461,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Range
+/// @domName Range; @docsEditable true
 class Range native "*Range" {
 
   static const int END_TO_END = 2;
@@ -15252,97 +15480,98 @@
 
   static const int START_TO_START = 0;
 
-  /** @domName Range.collapsed */
+  /// @domName Range.collapsed; @docsEditable true
   final bool collapsed;
 
-  /** @domName Range.commonAncestorContainer */
+  /// @domName Range.commonAncestorContainer; @docsEditable true
   final Node commonAncestorContainer;
 
-  /** @domName Range.endContainer */
+  /// @domName Range.endContainer; @docsEditable true
   final Node endContainer;
 
-  /** @domName Range.endOffset */
+  /// @domName Range.endOffset; @docsEditable true
   final int endOffset;
 
-  /** @domName Range.startContainer */
+  /// @domName Range.startContainer; @docsEditable true
   final Node startContainer;
 
-  /** @domName Range.startOffset */
+  /// @domName Range.startOffset; @docsEditable true
   final int startOffset;
 
-  /** @domName Range.cloneContents */
+  /// @domName Range.cloneContents; @docsEditable true
   DocumentFragment cloneContents() native;
 
-  /** @domName Range.cloneRange */
+  /// @domName Range.cloneRange; @docsEditable true
   Range cloneRange() native;
 
-  /** @domName Range.collapse */
+  /// @domName Range.collapse; @docsEditable true
   void collapse(bool toStart) native;
 
-  /** @domName Range.compareNode */
+  /// @domName Range.compareNode; @docsEditable true
   int compareNode(Node refNode) native;
 
-  /** @domName Range.comparePoint */
+  /// @domName Range.comparePoint; @docsEditable true
   int comparePoint(Node refNode, int offset) native;
 
-  /** @domName Range.createContextualFragment */
+  /// @domName Range.createContextualFragment; @docsEditable true
   DocumentFragment createContextualFragment(String html) native;
 
-  /** @domName Range.deleteContents */
+  /// @domName Range.deleteContents; @docsEditable true
   void deleteContents() native;
 
-  /** @domName Range.detach */
+  /// @domName Range.detach; @docsEditable true
   void detach() native;
 
-  /** @domName Range.expand */
+  /// @domName Range.expand; @docsEditable true
   void expand(String unit) native;
 
-  /** @domName Range.extractContents */
+  /// @domName Range.extractContents; @docsEditable true
   DocumentFragment extractContents() native;
 
-  /** @domName Range.getBoundingClientRect */
+  /// @domName Range.getBoundingClientRect; @docsEditable true
   ClientRect getBoundingClientRect() native;
 
-  /** @domName Range.getClientRects */
+  /// @domName Range.getClientRects; @docsEditable true
+  @Returns('_ClientRectList') @Creates('_ClientRectList')
   List<ClientRect> getClientRects() native;
 
-  /** @domName Range.insertNode */
+  /// @domName Range.insertNode; @docsEditable true
   void insertNode(Node newNode) native;
 
-  /** @domName Range.intersectsNode */
+  /// @domName Range.intersectsNode; @docsEditable true
   bool intersectsNode(Node refNode) native;
 
-  /** @domName Range.isPointInRange */
+  /// @domName Range.isPointInRange; @docsEditable true
   bool isPointInRange(Node refNode, int offset) native;
 
-  /** @domName Range.selectNode */
+  /// @domName Range.selectNode; @docsEditable true
   void selectNode(Node refNode) native;
 
-  /** @domName Range.selectNodeContents */
+  /// @domName Range.selectNodeContents; @docsEditable true
   void selectNodeContents(Node refNode) native;
 
-  /** @domName Range.setEnd */
+  /// @domName Range.setEnd; @docsEditable true
   void setEnd(Node refNode, int offset) native;
 
-  /** @domName Range.setEndAfter */
+  /// @domName Range.setEndAfter; @docsEditable true
   void setEndAfter(Node refNode) native;
 
-  /** @domName Range.setEndBefore */
+  /// @domName Range.setEndBefore; @docsEditable true
   void setEndBefore(Node refNode) native;
 
-  /** @domName Range.setStart */
+  /// @domName Range.setStart; @docsEditable true
   void setStart(Node refNode, int offset) native;
 
-  /** @domName Range.setStartAfter */
+  /// @domName Range.setStartAfter; @docsEditable true
   void setStartAfter(Node refNode) native;
 
-  /** @domName Range.setStartBefore */
+  /// @domName Range.setStartBefore; @docsEditable true
   void setStartBefore(Node refNode) native;
 
-  /** @domName Range.surroundContents */
+  /// @domName Range.surroundContents; @docsEditable true
   void surroundContents(Node newParent) native;
 
-  /** @domName Range.toString */
+  /// @domName Range.toString; @docsEditable true
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15350,23 +15579,23 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName RangeException
+/// @domName RangeException; @docsEditable true
 class RangeException native "*RangeException" {
 
   static const int BAD_BOUNDARYPOINTS_ERR = 1;
 
   static const int INVALID_NODE_TYPE_ERR = 2;
 
-  /** @domName RangeException.code */
+  /// @domName RangeException.code; @docsEditable true
   final int code;
 
-  /** @domName RangeException.message */
+  /// @domName RangeException.message; @docsEditable true
   final String message;
 
-  /** @domName RangeException.name */
+  /// @domName RangeException.name; @docsEditable true
   final String name;
 
-  /** @domName RangeException.toString */
+  /// @domName RangeException.toString; @docsEditable true
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15374,19 +15603,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Rect
+/// @domName Rect; @docsEditable true
 class Rect native "*Rect" {
 
-  /** @domName Rect.bottom */
+  /// @domName Rect.bottom; @docsEditable true
   final CSSPrimitiveValue bottom;
 
-  /** @domName Rect.left */
+  /// @domName Rect.left; @docsEditable true
   final CSSPrimitiveValue left;
 
-  /** @domName Rect.right */
+  /// @domName Rect.right; @docsEditable true
   final CSSPrimitiveValue right;
 
-  /** @domName Rect.top */
+  /// @domName Rect.top; @docsEditable true
   final CSSPrimitiveValue top;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15402,7 +15631,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SQLError
+/// @domName SQLError; @docsEditable true
 class SQLError native "*SQLError" {
 
   static const int CONSTRAINT_ERR = 6;
@@ -15421,10 +15650,10 @@
 
   static const int VERSION_ERR = 2;
 
-  /** @domName SQLError.code */
+  /// @domName SQLError.code; @docsEditable true
   final int code;
 
-  /** @domName SQLError.message */
+  /// @domName SQLError.message; @docsEditable true
   final String message;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15432,7 +15661,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SQLException
+/// @domName SQLException; @docsEditable true
 class SQLException native "*SQLException" {
 
   static const int CONSTRAINT_ERR = 6;
@@ -15451,10 +15680,10 @@
 
   static const int VERSION_ERR = 2;
 
-  /** @domName SQLException.code */
+  /// @domName SQLException.code; @docsEditable true
   final int code;
 
-  /** @domName SQLException.message */
+  /// @domName SQLException.message; @docsEditable true
   final String message;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15462,16 +15691,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SQLResultSet
+/// @domName SQLResultSet; @docsEditable true
 class SQLResultSet native "*SQLResultSet" {
 
-  /** @domName SQLResultSet.insertId */
+  /// @domName SQLResultSet.insertId; @docsEditable true
   final int insertId;
 
-  /** @domName SQLResultSet.rows */
+  /// @domName SQLResultSet.rows; @docsEditable true
   final SQLResultSetRowList rows;
 
-  /** @domName SQLResultSet.rowsAffected */
+  /// @domName SQLResultSet.rowsAffected; @docsEditable true
   final int rowsAffected;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15479,10 +15708,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SQLResultSetRowList
+/// @domName SQLResultSetRowList; @docsEditable true
 class SQLResultSetRowList implements JavaScriptIndexingBehavior, List<Map> native "*SQLResultSetRowList" {
 
-  /** @domName SQLResultSetRowList.length */
+  /// @domName SQLResultSetRowList.length; @docsEditable true
   final int length;
 
   Map operator[](int index) => JS("Map", "#[#]", this, index);
@@ -15545,6 +15774,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  Map get first => this[0];
+
   Map get last => this[length - 1];
 
   Map removeLast() {
@@ -15568,10 +15799,11 @@
 
   // -- end List<Map> mixins.
 
-  /** @domName SQLResultSetRowList.item */
+  /// @domName SQLResultSetRowList.item; @docsEditable true
   Map item(int index) {
     return _convertNativeToDart_Dictionary(_item_1(index));
   }
+  @Creates('=Object')
   _item_1(index) native "item";
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15595,10 +15827,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SQLTransaction
+/// @domName SQLTransaction; @docsEditable true
 class SQLTransaction native "*SQLTransaction" {
 
-  /** @domName SQLTransaction.executeSql */
+  /// @domName SQLTransaction.executeSql; @docsEditable true
   void executeSql(String sqlStatement, List arguments, [SQLStatementCallback callback, SQLStatementErrorCallback errorCallback]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15622,10 +15854,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SQLTransactionSync
+/// @domName SQLTransactionSync; @docsEditable true
 class SQLTransactionSync native "*SQLTransactionSync" {
 
-  /** @domName SQLTransactionSync.executeSql */
+  /// @domName SQLTransactionSync.executeSql; @docsEditable true
   SQLResultSet executeSql(String sqlStatement, List arguments) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15641,31 +15873,31 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Screen
+/// @domName Screen; @docsEditable true
 class Screen native "*Screen" {
 
-  /** @domName Screen.availHeight */
+  /// @domName Screen.availHeight; @docsEditable true
   final int availHeight;
 
-  /** @domName Screen.availLeft */
+  /// @domName Screen.availLeft; @docsEditable true
   final int availLeft;
 
-  /** @domName Screen.availTop */
+  /// @domName Screen.availTop; @docsEditable true
   final int availTop;
 
-  /** @domName Screen.availWidth */
+  /// @domName Screen.availWidth; @docsEditable true
   final int availWidth;
 
-  /** @domName Screen.colorDepth */
+  /// @domName Screen.colorDepth; @docsEditable true
   final int colorDepth;
 
-  /** @domName Screen.height */
+  /// @domName Screen.height; @docsEditable true
   final int height;
 
-  /** @domName Screen.pixelDepth */
+  /// @domName Screen.pixelDepth; @docsEditable true
   final int pixelDepth;
 
-  /** @domName Screen.width */
+  /// @domName Screen.width; @docsEditable true
   final int width;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15673,33 +15905,33 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLScriptElement
+/// @domName HTMLScriptElement; @docsEditable true
 class ScriptElement extends Element implements Element native "*HTMLScriptElement" {
 
-  factory ScriptElement() => _Elements.createScriptElement();
+  factory ScriptElement() => document.$dom_createElement("script");
 
-  /** @domName HTMLScriptElement.async */
+  /// @domName HTMLScriptElement.async; @docsEditable true
   bool async;
 
-  /** @domName HTMLScriptElement.charset */
+  /// @domName HTMLScriptElement.charset; @docsEditable true
   String charset;
 
-  /** @domName HTMLScriptElement.crossOrigin */
+  /// @domName HTMLScriptElement.crossOrigin; @docsEditable true
   String crossOrigin;
 
-  /** @domName HTMLScriptElement.defer */
+  /// @domName HTMLScriptElement.defer; @docsEditable true
   bool defer;
 
-  /** @domName HTMLScriptElement.event */
+  /// @domName HTMLScriptElement.event; @docsEditable true
   String event;
 
-  /** @domName HTMLScriptElement.htmlFor */
+  /// @domName HTMLScriptElement.htmlFor; @docsEditable true
   String htmlFor;
 
-  /** @domName HTMLScriptElement.src */
+  /// @domName HTMLScriptElement.src; @docsEditable true
   String src;
 
-  /** @domName HTMLScriptElement.type */
+  /// @domName HTMLScriptElement.type; @docsEditable true
   String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15707,16 +15939,14 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ScriptProcessorNode
+/// @domName ScriptProcessorNode; @docsEditable true
 class ScriptProcessorNode extends AudioNode implements EventTarget native "*ScriptProcessorNode" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   ScriptProcessorNodeEvents get on =>
     new ScriptProcessorNodeEvents(this);
 
-  /** @domName ScriptProcessorNode.bufferSize */
+  /// @domName ScriptProcessorNode.bufferSize; @docsEditable true
   final int bufferSize;
 }
 
@@ -15730,16 +15960,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ScriptProfile
+/// @domName ScriptProfile; @docsEditable true
 class ScriptProfile native "*ScriptProfile" {
 
-  /** @domName ScriptProfile.head */
+  /// @domName ScriptProfile.head; @docsEditable true
   final ScriptProfileNode head;
 
-  /** @domName ScriptProfile.title */
+  /// @domName ScriptProfile.title; @docsEditable true
   final String title;
 
-  /** @domName ScriptProfile.uid */
+  /// @domName ScriptProfile.uid; @docsEditable true
   final int uid;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15747,34 +15977,34 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ScriptProfileNode
+/// @domName ScriptProfileNode; @docsEditable true
 class ScriptProfileNode native "*ScriptProfileNode" {
 
-  /** @domName ScriptProfileNode.callUID */
+  /// @domName ScriptProfileNode.callUID; @docsEditable true
   final int callUID;
 
-  /** @domName ScriptProfileNode.functionName */
+  /// @domName ScriptProfileNode.functionName; @docsEditable true
   final String functionName;
 
-  /** @domName ScriptProfileNode.lineNumber */
+  /// @domName ScriptProfileNode.lineNumber; @docsEditable true
   final int lineNumber;
 
-  /** @domName ScriptProfileNode.numberOfCalls */
+  /// @domName ScriptProfileNode.numberOfCalls; @docsEditable true
   final int numberOfCalls;
 
-  /** @domName ScriptProfileNode.selfTime */
+  /// @domName ScriptProfileNode.selfTime; @docsEditable true
   final num selfTime;
 
-  /** @domName ScriptProfileNode.totalTime */
+  /// @domName ScriptProfileNode.totalTime; @docsEditable true
   final num totalTime;
 
-  /** @domName ScriptProfileNode.url */
+  /// @domName ScriptProfileNode.url; @docsEditable true
   final String url;
 
-  /** @domName ScriptProfileNode.visible */
+  /// @domName ScriptProfileNode.visible; @docsEditable true
   final bool visible;
 
-  /** @domName ScriptProfileNode.children */
+  /// @domName ScriptProfileNode.children; @docsEditable true
   List<ScriptProfileNode> children() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15784,63 +16014,64 @@
 
 class SelectElement extends Element implements Element native "*HTMLSelectElement" {
 
-  factory SelectElement() => _Elements.createSelectElement();
+  factory SelectElement() => document.$dom_createElement("select");
 
-  /** @domName HTMLSelectElement.autofocus */
+  /// @domName HTMLSelectElement.autofocus; @docsEditable true
   bool autofocus;
 
-  /** @domName HTMLSelectElement.disabled */
+  /// @domName HTMLSelectElement.disabled; @docsEditable true
   bool disabled;
 
-  /** @domName HTMLSelectElement.form */
+  /// @domName HTMLSelectElement.form; @docsEditable true
   final FormElement form;
 
-  /** @domName HTMLSelectElement.labels */
+  /// @domName HTMLSelectElement.labels; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   final List<Node> labels;
 
-  /** @domName HTMLSelectElement.length */
+  /// @domName HTMLSelectElement.length; @docsEditable true
   int length;
 
-  /** @domName HTMLSelectElement.multiple */
+  /// @domName HTMLSelectElement.multiple; @docsEditable true
   bool multiple;
 
-  /** @domName HTMLSelectElement.name */
+  /// @domName HTMLSelectElement.name; @docsEditable true
   String name;
 
-  /** @domName HTMLSelectElement.required */
+  /// @domName HTMLSelectElement.required; @docsEditable true
   bool required;
 
-  /** @domName HTMLSelectElement.selectedIndex */
+  /// @domName HTMLSelectElement.selectedIndex; @docsEditable true
   int selectedIndex;
 
-  /** @domName HTMLSelectElement.size */
+  /// @domName HTMLSelectElement.size; @docsEditable true
   int size;
 
-  /** @domName HTMLSelectElement.type */
+  /// @domName HTMLSelectElement.type; @docsEditable true
   final String type;
 
-  /** @domName HTMLSelectElement.validationMessage */
+  /// @domName HTMLSelectElement.validationMessage; @docsEditable true
   final String validationMessage;
 
-  /** @domName HTMLSelectElement.validity */
+  /// @domName HTMLSelectElement.validity; @docsEditable true
   final ValidityState validity;
 
-  /** @domName HTMLSelectElement.value */
+  /// @domName HTMLSelectElement.value; @docsEditable true
   String value;
 
-  /** @domName HTMLSelectElement.willValidate */
+  /// @domName HTMLSelectElement.willValidate; @docsEditable true
   final bool willValidate;
 
-  /** @domName HTMLSelectElement.checkValidity */
+  /// @domName HTMLSelectElement.checkValidity; @docsEditable true
   bool checkValidity() native;
 
-  /** @domName HTMLSelectElement.item */
+  /// @domName HTMLSelectElement.item; @docsEditable true
   Node item(int index) native;
 
-  /** @domName HTMLSelectElement.namedItem */
+  /// @domName HTMLSelectElement.namedItem; @docsEditable true
   Node namedItem(String name) native;
 
-  /** @domName HTMLSelectElement.setCustomValidity */
+  /// @domName HTMLSelectElement.setCustomValidity; @docsEditable true
   void setCustomValidity(String error) native;
 
 
@@ -15864,15 +16095,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SessionDescription
+/// @domName SessionDescription; @docsEditable true
 class SessionDescription native "*SessionDescription" {
 
   factory SessionDescription(String sdp) => _SessionDescriptionFactoryProvider.createSessionDescription(sdp);
 
-  /** @domName SessionDescription.addCandidate */
+  /// @domName SessionDescription.addCandidate; @docsEditable true
   void addCandidate(IceCandidate candidate) native;
 
-  /** @domName SessionDescription.toSdp */
+  /// @domName SessionDescription.toSdp; @docsEditable true
   String toSdp() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15880,10 +16111,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLShadowElement
+/// @domName HTMLShadowElement; @docsEditable true
 class ShadowElement extends Element implements Element native "*HTMLShadowElement" {
 
-  /** @domName HTMLShadowElement.resetStyleInheritance */
+  /// @domName HTMLShadowElement.resetStyleInheritance; @docsEditable true
   bool resetStyleInheritance;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15897,31 +16128,33 @@
 
   factory ShadowRoot(Element host) => _ShadowRootFactoryProvider.createShadowRoot(host);
 
-  /** @domName ShadowRoot.activeElement */
+  /// @domName ShadowRoot.activeElement; @docsEditable true
   final Element activeElement;
 
-  /** @domName ShadowRoot.applyAuthorStyles */
+  /// @domName ShadowRoot.applyAuthorStyles; @docsEditable true
   bool applyAuthorStyles;
 
-  /** @domName ShadowRoot.innerHTML */
+  /// @domName ShadowRoot.innerHTML; @docsEditable true
   String innerHTML;
 
-  /** @domName ShadowRoot.resetStyleInheritance */
+  /// @domName ShadowRoot.resetStyleInheritance; @docsEditable true
   bool resetStyleInheritance;
 
-  /** @domName ShadowRoot.cloneNode */
+  /// @domName ShadowRoot.cloneNode; @docsEditable true
   Node clone(bool deep) native "cloneNode";
 
-  /** @domName ShadowRoot.getElementById */
+  /// @domName ShadowRoot.getElementById; @docsEditable true
   Element $dom_getElementById(String elementId) native "getElementById";
 
-  /** @domName ShadowRoot.getElementsByClassName */
+  /// @domName ShadowRoot.getElementsByClassName; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   List<Node> $dom_getElementsByClassName(String className) native "getElementsByClassName";
 
-  /** @domName ShadowRoot.getElementsByTagName */
+  /// @domName ShadowRoot.getElementsByTagName; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   List<Node> $dom_getElementsByTagName(String tagName) native "getElementsByTagName";
 
-  /** @domName ShadowRoot.getSelection */
+  /// @domName ShadowRoot.getSelection; @docsEditable true
   DOMSelection getSelection() native;
 
   static bool get supported =>
@@ -15932,7 +16165,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SharedWorker
+/// @domName SharedWorker; @docsEditable true
 class SharedWorker extends AbstractWorker native "*SharedWorker" {
 
   factory SharedWorker(String scriptURL, [String name]) {
@@ -15942,7 +16175,7 @@
     return _SharedWorkerFactoryProvider.createSharedWorker(scriptURL, name);
   }
 
-  /** @domName SharedWorker.port */
+  /// @domName SharedWorker.port; @docsEditable true
   final MessagePort port;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15950,16 +16183,14 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SharedWorkerContext
+/// @domName SharedWorkerContext; @docsEditable true
 class SharedWorkerContext extends WorkerContext native "*SharedWorkerContext" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   SharedWorkerContextEvents get on =>
     new SharedWorkerContextEvents(this);
 
-  /** @domName SharedWorkerContext.name */
+  /// @domName SharedWorkerContext.name; @docsEditable true
   final String name;
 }
 
@@ -15973,19 +16204,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SourceBuffer
+/// @domName SourceBuffer; @docsEditable true
 class SourceBuffer native "*SourceBuffer" {
 
-  /** @domName SourceBuffer.buffered */
+  /// @domName SourceBuffer.buffered; @docsEditable true
   final TimeRanges buffered;
 
-  /** @domName SourceBuffer.timestampOffset */
+  /// @domName SourceBuffer.timestampOffset; @docsEditable true
   num timestampOffset;
 
-  /** @domName SourceBuffer.abort */
+  /// @domName SourceBuffer.abort; @docsEditable true
   void abort() native;
 
-  /** @domName SourceBuffer.append */
+  /// @domName SourceBuffer.append; @docsEditable true
   void append(Uint8Array data) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -15993,10 +16224,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SourceBufferList
+/// @domName SourceBufferList; @docsEditable true
 class SourceBufferList extends EventTarget implements JavaScriptIndexingBehavior, List<SourceBuffer> native "*SourceBufferList" {
 
-  /** @domName SourceBufferList.length */
+  /// @domName SourceBufferList.length; @docsEditable true
   final int length;
 
   SourceBuffer operator[](int index) => JS("SourceBuffer", "#[#]", this, index);
@@ -16059,6 +16290,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  SourceBuffer get first => this[0];
+
   SourceBuffer get last => this[length - 1];
 
   SourceBuffer removeLast() {
@@ -16082,16 +16315,16 @@
 
   // -- end List<SourceBuffer> mixins.
 
-  /** @domName SourceBufferList.addEventListener */
+  /// @domName SourceBufferList.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName SourceBufferList.dispatchEvent */
+  /// @domName SourceBufferList.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event event) native "dispatchEvent";
 
-  /** @domName SourceBufferList.item */
+  /// @domName SourceBufferList.item; @docsEditable true
   SourceBuffer item(int index) native;
 
-  /** @domName SourceBufferList.removeEventListener */
+  /// @domName SourceBufferList.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16099,18 +16332,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLSourceElement
+/// @domName HTMLSourceElement; @docsEditable true
 class SourceElement extends Element implements Element native "*HTMLSourceElement" {
 
-  factory SourceElement() => _Elements.createSourceElement();
+  factory SourceElement() => document.$dom_createElement("source");
 
-  /** @domName HTMLSourceElement.media */
+  /// @domName HTMLSourceElement.media; @docsEditable true
   String media;
 
-  /** @domName HTMLSourceElement.src */
+  /// @domName HTMLSourceElement.src; @docsEditable true
   String src;
 
-  /** @domName HTMLSourceElement.type */
+  /// @domName HTMLSourceElement.type; @docsEditable true
   String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16118,25 +16351,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLSpanElement
+/// @domName HTMLSpanElement; @docsEditable true
 class SpanElement extends Element implements Element native "*HTMLSpanElement" {
 
-  factory SpanElement() => _Elements.createSpanElement();
+  factory SpanElement() => document.$dom_createElement("span");
 }
 // Copyright (c) 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.
 
 
-/// @domName SpeechGrammar
+/// @domName SpeechGrammar; @docsEditable true
 class SpeechGrammar native "*SpeechGrammar" {
 
   factory SpeechGrammar() => _SpeechGrammarFactoryProvider.createSpeechGrammar();
 
-  /** @domName SpeechGrammar.src */
+  /// @domName SpeechGrammar.src; @docsEditable true
   String src;
 
-  /** @domName SpeechGrammar.weight */
+  /// @domName SpeechGrammar.weight; @docsEditable true
   num weight;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16144,12 +16377,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechGrammarList
+/// @domName SpeechGrammarList; @docsEditable true
 class SpeechGrammarList implements JavaScriptIndexingBehavior, List<SpeechGrammar> native "*SpeechGrammarList" {
 
   factory SpeechGrammarList() => _SpeechGrammarListFactoryProvider.createSpeechGrammarList();
 
-  /** @domName SpeechGrammarList.length */
+  /// @domName SpeechGrammarList.length; @docsEditable true
   final int length;
 
   SpeechGrammar operator[](int index) => JS("SpeechGrammar", "#[#]", this, index);
@@ -16212,6 +16445,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  SpeechGrammar get first => this[0];
+
   SpeechGrammar get last => this[length - 1];
 
   SpeechGrammar removeLast() {
@@ -16235,13 +16470,13 @@
 
   // -- end List<SpeechGrammar> mixins.
 
-  /** @domName SpeechGrammarList.addFromString */
+  /// @domName SpeechGrammarList.addFromString; @docsEditable true
   void addFromString(String string, [num weight]) native;
 
-  /** @domName SpeechGrammarList.addFromUri */
+  /// @domName SpeechGrammarList.addFromUri; @docsEditable true
   void addFromUri(String src, [num weight]) native;
 
-  /** @domName SpeechGrammarList.item */
+  /// @domName SpeechGrammarList.item; @docsEditable true
   SpeechGrammar item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16249,10 +16484,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechInputEvent
+/// @domName SpeechInputEvent; @docsEditable true
 class SpeechInputEvent extends Event native "*SpeechInputEvent" {
 
-  /** @domName SpeechInputEvent.results */
+  /// @domName SpeechInputEvent.results; @docsEditable true
+  @Returns('_SpeechInputResultList') @Creates('_SpeechInputResultList')
   final List<SpeechInputResult> results;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16260,13 +16496,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechInputResult
+/// @domName SpeechInputResult; @docsEditable true
 class SpeechInputResult native "*SpeechInputResult" {
 
-  /** @domName SpeechInputResult.confidence */
+  /// @domName SpeechInputResult.confidence; @docsEditable true
   final num confidence;
 
-  /** @domName SpeechInputResult.utterance */
+  /// @domName SpeechInputResult.utterance; @docsEditable true
   final String utterance;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16274,48 +16510,46 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechRecognition
+/// @domName SpeechRecognition; @docsEditable true
 class SpeechRecognition extends EventTarget native "*SpeechRecognition" {
 
   factory SpeechRecognition() => _SpeechRecognitionFactoryProvider.createSpeechRecognition();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   SpeechRecognitionEvents get on =>
     new SpeechRecognitionEvents(this);
 
-  /** @domName SpeechRecognition.continuous */
+  /// @domName SpeechRecognition.continuous; @docsEditable true
   bool continuous;
 
-  /** @domName SpeechRecognition.grammars */
+  /// @domName SpeechRecognition.grammars; @docsEditable true
   SpeechGrammarList grammars;
 
-  /** @domName SpeechRecognition.interimResults */
+  /// @domName SpeechRecognition.interimResults; @docsEditable true
   bool interimResults;
 
-  /** @domName SpeechRecognition.lang */
+  /// @domName SpeechRecognition.lang; @docsEditable true
   String lang;
 
-  /** @domName SpeechRecognition.maxAlternatives */
+  /// @domName SpeechRecognition.maxAlternatives; @docsEditable true
   int maxAlternatives;
 
-  /** @domName SpeechRecognition.abort */
+  /// @domName SpeechRecognition.abort; @docsEditable true
   void abort() native;
 
-  /** @domName SpeechRecognition.addEventListener */
+  /// @domName SpeechRecognition.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName SpeechRecognition.dispatchEvent */
+  /// @domName SpeechRecognition.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName SpeechRecognition.removeEventListener */
+  /// @domName SpeechRecognition.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 
-  /** @domName SpeechRecognition.start */
+  /// @domName SpeechRecognition.start; @docsEditable true
   void start() native;
 
-  /** @domName SpeechRecognition.stop */
+  /// @domName SpeechRecognition.stop; @docsEditable true
   void stop() native;
 }
 
@@ -16349,13 +16583,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechRecognitionAlternative
+/// @domName SpeechRecognitionAlternative; @docsEditable true
 class SpeechRecognitionAlternative native "*SpeechRecognitionAlternative" {
 
-  /** @domName SpeechRecognitionAlternative.confidence */
+  /// @domName SpeechRecognitionAlternative.confidence; @docsEditable true
   final num confidence;
 
-  /** @domName SpeechRecognitionAlternative.transcript */
+  /// @domName SpeechRecognitionAlternative.transcript; @docsEditable true
   final String transcript;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16363,7 +16597,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechRecognitionError
+/// @domName SpeechRecognitionError; @docsEditable true
 class SpeechRecognitionError extends Event native "*SpeechRecognitionError" {
 
   static const int ABORTED = 2;
@@ -16384,10 +16618,10 @@
 
   static const int SERVICE_NOT_ALLOWED = 6;
 
-  /** @domName SpeechRecognitionError.code */
+  /// @domName SpeechRecognitionError.code; @docsEditable true
   final int code;
 
-  /** @domName SpeechRecognitionError.message */
+  /// @domName SpeechRecognitionError.message; @docsEditable true
   final String message;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16395,16 +16629,17 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechRecognitionEvent
+/// @domName SpeechRecognitionEvent; @docsEditable true
 class SpeechRecognitionEvent extends Event native "*SpeechRecognitionEvent" {
 
-  /** @domName SpeechRecognitionEvent.result */
+  /// @domName SpeechRecognitionEvent.result; @docsEditable true
   final SpeechRecognitionResult result;
 
-  /** @domName SpeechRecognitionEvent.resultHistory */
+  /// @domName SpeechRecognitionEvent.resultHistory; @docsEditable true
+  @Returns('_SpeechRecognitionResultList') @Creates('_SpeechRecognitionResultList')
   final List<SpeechRecognitionResult> resultHistory;
 
-  /** @domName SpeechRecognitionEvent.resultIndex */
+  /// @domName SpeechRecognitionEvent.resultIndex; @docsEditable true
   final int resultIndex;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16412,19 +16647,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechRecognitionResult
+/// @domName SpeechRecognitionResult; @docsEditable true
 class SpeechRecognitionResult native "*SpeechRecognitionResult" {
 
-  /** @domName SpeechRecognitionResult.emma */
+  /// @domName SpeechRecognitionResult.emma; @docsEditable true
   final Document emma;
 
-  /** @domName SpeechRecognitionResult.finalValue */
+  /// @domName SpeechRecognitionResult.finalValue; @docsEditable true
   bool get finalValue => JS("bool", "#.final", this);
 
-  /** @domName SpeechRecognitionResult.length */
+  /// @domName SpeechRecognitionResult.length; @docsEditable true
   final int length;
 
-  /** @domName SpeechRecognitionResult.item */
+  /// @domName SpeechRecognitionResult.item; @docsEditable true
   SpeechRecognitionAlternative item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16441,7 +16676,7 @@
 
   String operator [](String key) => $dom_getItem(key);
 
-  void operator []=(String key, String value) => $dom_setItem(key, value);
+  void operator []=(String key, String value) { $dom_setItem(key, value); }
 
   String putIfAbsent(String key, String ifAbsent()) {
     if (!containsKey(key)) this[key] = ifAbsent();
@@ -16481,22 +16716,22 @@
 
   bool get isEmpty => $dom_key(0) == null;
 
-  /** @domName Storage.length */
+  /// @domName Storage.length; @docsEditable true
   int get $dom_length => JS("int", "#.length", this);
 
-  /** @domName Storage.clear */
+  /// @domName Storage.clear; @docsEditable true
   void $dom_clear() native "clear";
 
-  /** @domName Storage.getItem */
+  /// @domName Storage.getItem; @docsEditable true
   String $dom_getItem(String key) native "getItem";
 
-  /** @domName Storage.key */
+  /// @domName Storage.key; @docsEditable true
   String $dom_key(int index) native "key";
 
-  /** @domName Storage.removeItem */
+  /// @domName Storage.removeItem; @docsEditable true
   void $dom_removeItem(String key) native "removeItem";
 
-  /** @domName Storage.setItem */
+  /// @domName Storage.setItem; @docsEditable true
   void $dom_setItem(String key, String data) native "setItem";
 
 }
@@ -16505,25 +16740,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName StorageEvent
+/// @domName StorageEvent; @docsEditable true
 class StorageEvent extends Event native "*StorageEvent" {
 
-  /** @domName StorageEvent.key */
+  /// @domName StorageEvent.key; @docsEditable true
   final String key;
 
-  /** @domName StorageEvent.newValue */
+  /// @domName StorageEvent.newValue; @docsEditable true
   final String newValue;
 
-  /** @domName StorageEvent.oldValue */
+  /// @domName StorageEvent.oldValue; @docsEditable true
   final String oldValue;
 
-  /** @domName StorageEvent.storageArea */
+  /// @domName StorageEvent.storageArea; @docsEditable true
   final Storage storageArea;
 
-  /** @domName StorageEvent.url */
+  /// @domName StorageEvent.url; @docsEditable true
   final String url;
 
-  /** @domName StorageEvent.initStorageEvent */
+  /// @domName StorageEvent.initStorageEvent; @docsEditable true
   void initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16531,17 +16766,17 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName StorageInfo
+/// @domName StorageInfo; @docsEditable true
 class StorageInfo native "*StorageInfo" {
 
   static const int PERSISTENT = 1;
 
   static const int TEMPORARY = 0;
 
-  /** @domName StorageInfo.queryUsageAndQuota */
+  /// @domName StorageInfo.queryUsageAndQuota; @docsEditable true
   void queryUsageAndQuota(int storageType, [StorageInfoUsageCallback usageCallback, StorageInfoErrorCallback errorCallback]) native;
 
-  /** @domName StorageInfo.requestQuota */
+  /// @domName StorageInfo.requestQuota; @docsEditable true
   void requestQuota(int storageType, int newQuotaInBytes, [StorageInfoQuotaCallback quotaCallback, StorageInfoErrorCallback errorCallback]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16581,24 +16816,24 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLStyleElement
+/// @domName HTMLStyleElement; @docsEditable true
 class StyleElement extends Element implements Element native "*HTMLStyleElement" {
 
-  factory StyleElement() => _Elements.createStyleElement();
+  factory StyleElement() => document.$dom_createElement("style");
 
-  /** @domName HTMLStyleElement.disabled */
+  /// @domName HTMLStyleElement.disabled; @docsEditable true
   bool disabled;
 
-  /** @domName HTMLStyleElement.media */
+  /// @domName HTMLStyleElement.media; @docsEditable true
   String media;
 
-  /** @domName HTMLStyleElement.scoped */
+  /// @domName HTMLStyleElement.scoped; @docsEditable true
   bool scoped;
 
-  /** @domName HTMLStyleElement.sheet */
+  /// @domName HTMLStyleElement.sheet; @docsEditable true
   final StyleSheet sheet;
 
-  /** @domName HTMLStyleElement.type */
+  /// @domName HTMLStyleElement.type; @docsEditable true
   String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16606,13 +16841,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName StyleMedia
+/// @domName StyleMedia; @docsEditable true
 class StyleMedia native "*StyleMedia" {
 
-  /** @domName StyleMedia.type */
+  /// @domName StyleMedia.type; @docsEditable true
   final String type;
 
-  /** @domName StyleMedia.matchMedium */
+  /// @domName StyleMedia.matchMedium; @docsEditable true
   bool matchMedium(String mediaquery) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16620,28 +16855,28 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName StyleSheet
+/// @domName StyleSheet; @docsEditable true
 class StyleSheet native "*StyleSheet" {
 
-  /** @domName StyleSheet.disabled */
+  /// @domName StyleSheet.disabled; @docsEditable true
   bool disabled;
 
-  /** @domName StyleSheet.href */
+  /// @domName StyleSheet.href; @docsEditable true
   final String href;
 
-  /** @domName StyleSheet.media */
+  /// @domName StyleSheet.media; @docsEditable true
   final MediaList media;
 
-  /** @domName StyleSheet.ownerNode */
+  /// @domName StyleSheet.ownerNode; @docsEditable true
   final Node ownerNode;
 
-  /** @domName StyleSheet.parentStyleSheet */
+  /// @domName StyleSheet.parentStyleSheet; @docsEditable true
   final StyleSheet parentStyleSheet;
 
-  /** @domName StyleSheet.title */
+  /// @domName StyleSheet.title; @docsEditable true
   final String title;
 
-  /** @domName StyleSheet.type */
+  /// @domName StyleSheet.type; @docsEditable true
   final String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16649,12 +16884,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLTableCaptionElement
+/// @domName HTMLTableCaptionElement; @docsEditable true
 class TableCaptionElement extends Element implements Element native "*HTMLTableCaptionElement" {
 
-  factory TableCaptionElement() => _Elements.createTableCaptionElement();
+  factory TableCaptionElement() => document.$dom_createElement("caption");
 
-  /** @domName HTMLTableCaptionElement.align */
+  /// @domName HTMLTableCaptionElement.align; @docsEditable true
   String align;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16662,54 +16897,54 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLTableCellElement
+/// @domName HTMLTableCellElement; @docsEditable true
 class TableCellElement extends Element implements Element native "*HTMLTableCellElement" {
 
-  factory TableCellElement() => _Elements.createTableCellElement();
+  factory TableCellElement() => document.$dom_createElement("td");
 
-  /** @domName HTMLTableCellElement.abbr */
+  /// @domName HTMLTableCellElement.abbr; @docsEditable true
   String abbr;
 
-  /** @domName HTMLTableCellElement.align */
+  /// @domName HTMLTableCellElement.align; @docsEditable true
   String align;
 
-  /** @domName HTMLTableCellElement.axis */
+  /// @domName HTMLTableCellElement.axis; @docsEditable true
   String axis;
 
-  /** @domName HTMLTableCellElement.bgColor */
+  /// @domName HTMLTableCellElement.bgColor; @docsEditable true
   String bgColor;
 
-  /** @domName HTMLTableCellElement.cellIndex */
+  /// @domName HTMLTableCellElement.cellIndex; @docsEditable true
   final int cellIndex;
 
-  /** @domName HTMLTableCellElement.ch */
+  /// @domName HTMLTableCellElement.ch; @docsEditable true
   String ch;
 
-  /** @domName HTMLTableCellElement.chOff */
+  /// @domName HTMLTableCellElement.chOff; @docsEditable true
   String chOff;
 
-  /** @domName HTMLTableCellElement.colSpan */
+  /// @domName HTMLTableCellElement.colSpan; @docsEditable true
   int colSpan;
 
-  /** @domName HTMLTableCellElement.headers */
+  /// @domName HTMLTableCellElement.headers; @docsEditable true
   String headers;
 
-  /** @domName HTMLTableCellElement.height */
+  /// @domName HTMLTableCellElement.height; @docsEditable true
   String height;
 
-  /** @domName HTMLTableCellElement.noWrap */
+  /// @domName HTMLTableCellElement.noWrap; @docsEditable true
   bool noWrap;
 
-  /** @domName HTMLTableCellElement.rowSpan */
+  /// @domName HTMLTableCellElement.rowSpan; @docsEditable true
   int rowSpan;
 
-  /** @domName HTMLTableCellElement.scope */
+  /// @domName HTMLTableCellElement.scope; @docsEditable true
   String scope;
 
-  /** @domName HTMLTableCellElement.vAlign */
+  /// @domName HTMLTableCellElement.vAlign; @docsEditable true
   String vAlign;
 
-  /** @domName HTMLTableCellElement.width */
+  /// @domName HTMLTableCellElement.width; @docsEditable true
   String width;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16717,27 +16952,27 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLTableColElement
+/// @domName HTMLTableColElement; @docsEditable true
 class TableColElement extends Element implements Element native "*HTMLTableColElement" {
 
-  factory TableColElement() => _Elements.createTableColElement();
+  factory TableColElement() => document.$dom_createElement("col");
 
-  /** @domName HTMLTableColElement.align */
+  /// @domName HTMLTableColElement.align; @docsEditable true
   String align;
 
-  /** @domName HTMLTableColElement.ch */
+  /// @domName HTMLTableColElement.ch; @docsEditable true
   String ch;
 
-  /** @domName HTMLTableColElement.chOff */
+  /// @domName HTMLTableColElement.chOff; @docsEditable true
   String chOff;
 
-  /** @domName HTMLTableColElement.span */
+  /// @domName HTMLTableColElement.span; @docsEditable true
   int span;
 
-  /** @domName HTMLTableColElement.vAlign */
+  /// @domName HTMLTableColElement.vAlign; @docsEditable true
   String vAlign;
 
-  /** @domName HTMLTableColElement.width */
+  /// @domName HTMLTableColElement.width; @docsEditable true
   String width;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16747,72 +16982,72 @@
 
 class TableElement extends Element implements Element native "*HTMLTableElement" {
 
-  factory TableElement() => _Elements.createTableElement();
+  factory TableElement() => document.$dom_createElement("table");
 
-  /** @domName HTMLTableElement.align */
+  /// @domName HTMLTableElement.align; @docsEditable true
   String align;
 
-  /** @domName HTMLTableElement.bgColor */
+  /// @domName HTMLTableElement.bgColor; @docsEditable true
   String bgColor;
 
-  /** @domName HTMLTableElement.border */
+  /// @domName HTMLTableElement.border; @docsEditable true
   String border;
 
-  /** @domName HTMLTableElement.caption */
+  /// @domName HTMLTableElement.caption; @docsEditable true
   TableCaptionElement caption;
 
-  /** @domName HTMLTableElement.cellPadding */
+  /// @domName HTMLTableElement.cellPadding; @docsEditable true
   String cellPadding;
 
-  /** @domName HTMLTableElement.cellSpacing */
+  /// @domName HTMLTableElement.cellSpacing; @docsEditable true
   String cellSpacing;
 
-  /** @domName HTMLTableElement.frame */
+  /// @domName HTMLTableElement.frame; @docsEditable true
   String frame;
 
-  /** @domName HTMLTableElement.rows */
+  /// @domName HTMLTableElement.rows; @docsEditable true
   final HTMLCollection rows;
 
-  /** @domName HTMLTableElement.rules */
+  /// @domName HTMLTableElement.rules; @docsEditable true
   String rules;
 
-  /** @domName HTMLTableElement.summary */
+  /// @domName HTMLTableElement.summary; @docsEditable true
   String summary;
 
-  /** @domName HTMLTableElement.tBodies */
+  /// @domName HTMLTableElement.tBodies; @docsEditable true
   final HTMLCollection tBodies;
 
-  /** @domName HTMLTableElement.tFoot */
+  /// @domName HTMLTableElement.tFoot; @docsEditable true
   TableSectionElement tFoot;
 
-  /** @domName HTMLTableElement.tHead */
+  /// @domName HTMLTableElement.tHead; @docsEditable true
   TableSectionElement tHead;
 
-  /** @domName HTMLTableElement.width */
+  /// @domName HTMLTableElement.width; @docsEditable true
   String width;
 
-  /** @domName HTMLTableElement.createCaption */
+  /// @domName HTMLTableElement.createCaption; @docsEditable true
   Element createCaption() native;
 
-  /** @domName HTMLTableElement.createTFoot */
+  /// @domName HTMLTableElement.createTFoot; @docsEditable true
   Element createTFoot() native;
 
-  /** @domName HTMLTableElement.createTHead */
+  /// @domName HTMLTableElement.createTHead; @docsEditable true
   Element createTHead() native;
 
-  /** @domName HTMLTableElement.deleteCaption */
+  /// @domName HTMLTableElement.deleteCaption; @docsEditable true
   void deleteCaption() native;
 
-  /** @domName HTMLTableElement.deleteRow */
+  /// @domName HTMLTableElement.deleteRow; @docsEditable true
   void deleteRow(int index) native;
 
-  /** @domName HTMLTableElement.deleteTFoot */
+  /// @domName HTMLTableElement.deleteTFoot; @docsEditable true
   void deleteTFoot() native;
 
-  /** @domName HTMLTableElement.deleteTHead */
+  /// @domName HTMLTableElement.deleteTHead; @docsEditable true
   void deleteTHead() native;
 
-  /** @domName HTMLTableElement.insertRow */
+  /// @domName HTMLTableElement.insertRow; @docsEditable true
   Element insertRow(int index) native;
 
 
@@ -16832,39 +17067,39 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLTableRowElement
+/// @domName HTMLTableRowElement; @docsEditable true
 class TableRowElement extends Element implements Element native "*HTMLTableRowElement" {
 
-  factory TableRowElement() => _Elements.createTableRowElement();
+  factory TableRowElement() => document.$dom_createElement("tr");
 
-  /** @domName HTMLTableRowElement.align */
+  /// @domName HTMLTableRowElement.align; @docsEditable true
   String align;
 
-  /** @domName HTMLTableRowElement.bgColor */
+  /// @domName HTMLTableRowElement.bgColor; @docsEditable true
   String bgColor;
 
-  /** @domName HTMLTableRowElement.cells */
+  /// @domName HTMLTableRowElement.cells; @docsEditable true
   final HTMLCollection cells;
 
-  /** @domName HTMLTableRowElement.ch */
+  /// @domName HTMLTableRowElement.ch; @docsEditable true
   String ch;
 
-  /** @domName HTMLTableRowElement.chOff */
+  /// @domName HTMLTableRowElement.chOff; @docsEditable true
   String chOff;
 
-  /** @domName HTMLTableRowElement.rowIndex */
+  /// @domName HTMLTableRowElement.rowIndex; @docsEditable true
   final int rowIndex;
 
-  /** @domName HTMLTableRowElement.sectionRowIndex */
+  /// @domName HTMLTableRowElement.sectionRowIndex; @docsEditable true
   final int sectionRowIndex;
 
-  /** @domName HTMLTableRowElement.vAlign */
+  /// @domName HTMLTableRowElement.vAlign; @docsEditable true
   String vAlign;
 
-  /** @domName HTMLTableRowElement.deleteCell */
+  /// @domName HTMLTableRowElement.deleteCell; @docsEditable true
   void deleteCell(int index) native;
 
-  /** @domName HTMLTableRowElement.insertCell */
+  /// @domName HTMLTableRowElement.insertCell; @docsEditable true
   Element insertCell(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16872,28 +17107,28 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLTableSectionElement
+/// @domName HTMLTableSectionElement; @docsEditable true
 class TableSectionElement extends Element implements Element native "*HTMLTableSectionElement" {
 
-  /** @domName HTMLTableSectionElement.align */
+  /// @domName HTMLTableSectionElement.align; @docsEditable true
   String align;
 
-  /** @domName HTMLTableSectionElement.ch */
+  /// @domName HTMLTableSectionElement.ch; @docsEditable true
   String ch;
 
-  /** @domName HTMLTableSectionElement.chOff */
+  /// @domName HTMLTableSectionElement.chOff; @docsEditable true
   String chOff;
 
-  /** @domName HTMLTableSectionElement.rows */
+  /// @domName HTMLTableSectionElement.rows; @docsEditable true
   final HTMLCollection rows;
 
-  /** @domName HTMLTableSectionElement.vAlign */
+  /// @domName HTMLTableSectionElement.vAlign; @docsEditable true
   String vAlign;
 
-  /** @domName HTMLTableSectionElement.deleteRow */
+  /// @domName HTMLTableSectionElement.deleteRow; @docsEditable true
   void deleteRow(int index) native;
 
-  /** @domName HTMLTableSectionElement.insertRow */
+  /// @domName HTMLTableSectionElement.insertRow; @docsEditable true
   Element insertRow(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -16906,13 +17141,13 @@
 class Text extends CharacterData native "*Text" {
   factory Text(String data) => _TextFactoryProvider.createText(data);
 
-  /** @domName Text.wholeText */
+  /// @domName Text.wholeText; @docsEditable true
   final String wholeText;
 
-  /** @domName Text.replaceWholeText */
+  /// @domName Text.replaceWholeText; @docsEditable true
   Text replaceWholeText(String content) native;
 
-  /** @domName Text.splitText */
+  /// @domName Text.splitText; @docsEditable true
   Text splitText(int offset) native;
 
 }
@@ -16921,93 +17156,94 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLTextAreaElement
+/// @domName HTMLTextAreaElement; @docsEditable true
 class TextAreaElement extends Element implements Element native "*HTMLTextAreaElement" {
 
-  factory TextAreaElement() => _Elements.createTextAreaElement();
+  factory TextAreaElement() => document.$dom_createElement("textarea");
 
-  /** @domName HTMLTextAreaElement.autofocus */
+  /// @domName HTMLTextAreaElement.autofocus; @docsEditable true
   bool autofocus;
 
-  /** @domName HTMLTextAreaElement.cols */
+  /// @domName HTMLTextAreaElement.cols; @docsEditable true
   int cols;
 
-  /** @domName HTMLTextAreaElement.defaultValue */
+  /// @domName HTMLTextAreaElement.defaultValue; @docsEditable true
   String defaultValue;
 
-  /** @domName HTMLTextAreaElement.dirName */
+  /// @domName HTMLTextAreaElement.dirName; @docsEditable true
   String dirName;
 
-  /** @domName HTMLTextAreaElement.disabled */
+  /// @domName HTMLTextAreaElement.disabled; @docsEditable true
   bool disabled;
 
-  /** @domName HTMLTextAreaElement.form */
+  /// @domName HTMLTextAreaElement.form; @docsEditable true
   final FormElement form;
 
-  /** @domName HTMLTextAreaElement.labels */
+  /// @domName HTMLTextAreaElement.labels; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   final List<Node> labels;
 
-  /** @domName HTMLTextAreaElement.maxLength */
+  /// @domName HTMLTextAreaElement.maxLength; @docsEditable true
   int maxLength;
 
-  /** @domName HTMLTextAreaElement.name */
+  /// @domName HTMLTextAreaElement.name; @docsEditable true
   String name;
 
-  /** @domName HTMLTextAreaElement.placeholder */
+  /// @domName HTMLTextAreaElement.placeholder; @docsEditable true
   String placeholder;
 
-  /** @domName HTMLTextAreaElement.readOnly */
+  /// @domName HTMLTextAreaElement.readOnly; @docsEditable true
   bool readOnly;
 
-  /** @domName HTMLTextAreaElement.required */
+  /// @domName HTMLTextAreaElement.required; @docsEditable true
   bool required;
 
-  /** @domName HTMLTextAreaElement.rows */
+  /// @domName HTMLTextAreaElement.rows; @docsEditable true
   int rows;
 
-  /** @domName HTMLTextAreaElement.selectionDirection */
+  /// @domName HTMLTextAreaElement.selectionDirection; @docsEditable true
   String selectionDirection;
 
-  /** @domName HTMLTextAreaElement.selectionEnd */
+  /// @domName HTMLTextAreaElement.selectionEnd; @docsEditable true
   int selectionEnd;
 
-  /** @domName HTMLTextAreaElement.selectionStart */
+  /// @domName HTMLTextAreaElement.selectionStart; @docsEditable true
   int selectionStart;
 
-  /** @domName HTMLTextAreaElement.textLength */
+  /// @domName HTMLTextAreaElement.textLength; @docsEditable true
   final int textLength;
 
-  /** @domName HTMLTextAreaElement.type */
+  /// @domName HTMLTextAreaElement.type; @docsEditable true
   final String type;
 
-  /** @domName HTMLTextAreaElement.validationMessage */
+  /// @domName HTMLTextAreaElement.validationMessage; @docsEditable true
   final String validationMessage;
 
-  /** @domName HTMLTextAreaElement.validity */
+  /// @domName HTMLTextAreaElement.validity; @docsEditable true
   final ValidityState validity;
 
-  /** @domName HTMLTextAreaElement.value */
+  /// @domName HTMLTextAreaElement.value; @docsEditable true
   String value;
 
-  /** @domName HTMLTextAreaElement.willValidate */
+  /// @domName HTMLTextAreaElement.willValidate; @docsEditable true
   final bool willValidate;
 
-  /** @domName HTMLTextAreaElement.wrap */
+  /// @domName HTMLTextAreaElement.wrap; @docsEditable true
   String wrap;
 
-  /** @domName HTMLTextAreaElement.checkValidity */
+  /// @domName HTMLTextAreaElement.checkValidity; @docsEditable true
   bool checkValidity() native;
 
-  /** @domName HTMLTextAreaElement.select */
+  /// @domName HTMLTextAreaElement.select; @docsEditable true
   void select() native;
 
-  /** @domName HTMLTextAreaElement.setCustomValidity */
+  /// @domName HTMLTextAreaElement.setCustomValidity; @docsEditable true
   void setCustomValidity(String error) native;
 
-  /** @domName HTMLTextAreaElement.setRangeText */
+  /// @domName HTMLTextAreaElement.setRangeText; @docsEditable true
   void setRangeText(String replacement, [int start, int end, String selectionMode]) native;
 
-  /** @domName HTMLTextAreaElement.setSelectionRange */
+  /// @domName HTMLTextAreaElement.setSelectionRange; @docsEditable true
   void setSelectionRange(int start, int end, [String direction]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17015,13 +17251,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TextEvent
+/// @domName TextEvent; @docsEditable true
 class TextEvent extends UIEvent native "*TextEvent" {
 
-  /** @domName TextEvent.data */
+  /// @domName TextEvent.data; @docsEditable true
   final String data;
 
-  /** @domName TextEvent.initTextEvent */
+  /// @domName TextEvent.initTextEvent; @docsEditable true
   void initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17029,10 +17265,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TextMetrics
+/// @domName TextMetrics; @docsEditable true
 class TextMetrics native "*TextMetrics" {
 
-  /** @domName TextMetrics.width */
+  /// @domName TextMetrics.width; @docsEditable true
   final num width;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17040,46 +17276,44 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TextTrack
+/// @domName TextTrack; @docsEditable true
 class TextTrack extends EventTarget native "*TextTrack" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   TextTrackEvents get on =>
     new TextTrackEvents(this);
 
-  /** @domName TextTrack.activeCues */
+  /// @domName TextTrack.activeCues; @docsEditable true
   final TextTrackCueList activeCues;
 
-  /** @domName TextTrack.cues */
+  /// @domName TextTrack.cues; @docsEditable true
   final TextTrackCueList cues;
 
-  /** @domName TextTrack.kind */
+  /// @domName TextTrack.kind; @docsEditable true
   final String kind;
 
-  /** @domName TextTrack.label */
+  /// @domName TextTrack.label; @docsEditable true
   final String label;
 
-  /** @domName TextTrack.language */
+  /// @domName TextTrack.language; @docsEditable true
   final String language;
 
-  /** @domName TextTrack.mode */
+  /// @domName TextTrack.mode; @docsEditable true
   String mode;
 
-  /** @domName TextTrack.addCue */
+  /// @domName TextTrack.addCue; @docsEditable true
   void addCue(TextTrackCue cue) native;
 
-  /** @domName TextTrack.addEventListener */
+  /// @domName TextTrack.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName TextTrack.dispatchEvent */
+  /// @domName TextTrack.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName TextTrack.removeCue */
+  /// @domName TextTrack.removeCue; @docsEditable true
   void removeCue(TextTrackCue cue) native;
 
-  /** @domName TextTrack.removeEventListener */
+  /// @domName TextTrack.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 }
 
@@ -17093,63 +17327,61 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TextTrackCue
+/// @domName TextTrackCue; @docsEditable true
 class TextTrackCue extends EventTarget native "*TextTrackCue" {
 
   factory TextTrackCue(num startTime, num endTime, String text) => _TextTrackCueFactoryProvider.createTextTrackCue(startTime, endTime, text);
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   TextTrackCueEvents get on =>
     new TextTrackCueEvents(this);
 
-  /** @domName TextTrackCue.align */
+  /// @domName TextTrackCue.align; @docsEditable true
   String align;
 
-  /** @domName TextTrackCue.endTime */
+  /// @domName TextTrackCue.endTime; @docsEditable true
   num endTime;
 
-  /** @domName TextTrackCue.id */
+  /// @domName TextTrackCue.id; @docsEditable true
   String id;
 
-  /** @domName TextTrackCue.line */
+  /// @domName TextTrackCue.line; @docsEditable true
   int line;
 
-  /** @domName TextTrackCue.pauseOnExit */
+  /// @domName TextTrackCue.pauseOnExit; @docsEditable true
   bool pauseOnExit;
 
-  /** @domName TextTrackCue.position */
+  /// @domName TextTrackCue.position; @docsEditable true
   int position;
 
-  /** @domName TextTrackCue.size */
+  /// @domName TextTrackCue.size; @docsEditable true
   int size;
 
-  /** @domName TextTrackCue.snapToLines */
+  /// @domName TextTrackCue.snapToLines; @docsEditable true
   bool snapToLines;
 
-  /** @domName TextTrackCue.startTime */
+  /// @domName TextTrackCue.startTime; @docsEditable true
   num startTime;
 
-  /** @domName TextTrackCue.text */
+  /// @domName TextTrackCue.text; @docsEditable true
   String text;
 
-  /** @domName TextTrackCue.track */
+  /// @domName TextTrackCue.track; @docsEditable true
   final TextTrack track;
 
-  /** @domName TextTrackCue.vertical */
+  /// @domName TextTrackCue.vertical; @docsEditable true
   String vertical;
 
-  /** @domName TextTrackCue.addEventListener */
+  /// @domName TextTrackCue.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName TextTrackCue.dispatchEvent */
+  /// @domName TextTrackCue.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName TextTrackCue.getCueAsHTML */
+  /// @domName TextTrackCue.getCueAsHTML; @docsEditable true
   DocumentFragment getCueAsHTML() native;
 
-  /** @domName TextTrackCue.removeEventListener */
+  /// @domName TextTrackCue.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 }
 
@@ -17165,10 +17397,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TextTrackCueList
+/// @domName TextTrackCueList; @docsEditable true
 class TextTrackCueList implements List<TextTrackCue>, JavaScriptIndexingBehavior native "*TextTrackCueList" {
 
-  /** @domName TextTrackCueList.length */
+  /// @domName TextTrackCueList.length; @docsEditable true
   final int length;
 
   TextTrackCue operator[](int index) => JS("TextTrackCue", "#[#]", this, index);
@@ -17231,6 +17463,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  TextTrackCue get first => this[0];
+
   TextTrackCue get last => this[length - 1];
 
   TextTrackCue removeLast() {
@@ -17254,10 +17488,10 @@
 
   // -- end List<TextTrackCue> mixins.
 
-  /** @domName TextTrackCueList.getCueById */
+  /// @domName TextTrackCueList.getCueById; @docsEditable true
   TextTrackCue getCueById(String id) native;
 
-  /** @domName TextTrackCueList.item */
+  /// @domName TextTrackCueList.item; @docsEditable true
   TextTrackCue item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17265,16 +17499,14 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TextTrackList
+/// @domName TextTrackList; @docsEditable true
 class TextTrackList extends EventTarget implements JavaScriptIndexingBehavior, List<TextTrack> native "*TextTrackList" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   TextTrackListEvents get on =>
     new TextTrackListEvents(this);
 
-  /** @domName TextTrackList.length */
+  /// @domName TextTrackList.length; @docsEditable true
   final int length;
 
   TextTrack operator[](int index) => JS("TextTrack", "#[#]", this, index);
@@ -17337,6 +17569,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  TextTrack get first => this[0];
+
   TextTrack get last => this[length - 1];
 
   TextTrack removeLast() {
@@ -17360,16 +17594,16 @@
 
   // -- end List<TextTrack> mixins.
 
-  /** @domName TextTrackList.addEventListener */
+  /// @domName TextTrackList.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName TextTrackList.dispatchEvent */
+  /// @domName TextTrackList.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName TextTrackList.item */
+  /// @domName TextTrackList.item; @docsEditable true
   TextTrack item(int index) native;
 
-  /** @domName TextTrackList.removeEventListener */
+  /// @domName TextTrackList.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 }
 
@@ -17383,16 +17617,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TimeRanges
+/// @domName TimeRanges; @docsEditable true
 class TimeRanges native "*TimeRanges" {
 
-  /** @domName TimeRanges.length */
+  /// @domName TimeRanges.length; @docsEditable true
   final int length;
 
-  /** @domName TimeRanges.end */
+  /// @domName TimeRanges.end; @docsEditable true
   num end(int index) native;
 
-  /** @domName TimeRanges.start */
+  /// @domName TimeRanges.start; @docsEditable true
   num start(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17408,54 +17642,54 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLTitleElement
+/// @domName HTMLTitleElement; @docsEditable true
 class TitleElement extends Element implements Element native "*HTMLTitleElement" {
 
-  factory TitleElement() => _Elements.createTitleElement();
+  factory TitleElement() => document.$dom_createElement("title");
 }
 // Copyright (c) 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.
 
 
-/// @domName Touch
+/// @domName Touch; @docsEditable true
 class Touch native "*Touch" {
 
-  /** @domName Touch.clientX */
+  /// @domName Touch.clientX; @docsEditable true
   final int clientX;
 
-  /** @domName Touch.clientY */
+  /// @domName Touch.clientY; @docsEditable true
   final int clientY;
 
-  /** @domName Touch.identifier */
+  /// @domName Touch.identifier; @docsEditable true
   final int identifier;
 
-  /** @domName Touch.pageX */
+  /// @domName Touch.pageX; @docsEditable true
   final int pageX;
 
-  /** @domName Touch.pageY */
+  /// @domName Touch.pageY; @docsEditable true
   final int pageY;
 
-  /** @domName Touch.screenX */
+  /// @domName Touch.screenX; @docsEditable true
   final int screenX;
 
-  /** @domName Touch.screenY */
+  /// @domName Touch.screenY; @docsEditable true
   final int screenY;
 
-  /** @domName Touch.target */
+  /// @domName Touch.target; @docsEditable true
   EventTarget get target => _convertNativeToDart_EventTarget(this._target);
   dynamic get _target => JS("dynamic", "#.target", this);
 
-  /** @domName Touch.webkitForce */
+  /// @domName Touch.webkitForce; @docsEditable true
   final num webkitForce;
 
-  /** @domName Touch.webkitRadiusX */
+  /// @domName Touch.webkitRadiusX; @docsEditable true
   final int webkitRadiusX;
 
-  /** @domName Touch.webkitRadiusY */
+  /// @domName Touch.webkitRadiusY; @docsEditable true
   final int webkitRadiusY;
 
-  /** @domName Touch.webkitRotationAngle */
+  /// @domName Touch.webkitRotationAngle; @docsEditable true
   final num webkitRotationAngle;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17463,31 +17697,31 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TouchEvent
+/// @domName TouchEvent; @docsEditable true
 class TouchEvent extends UIEvent native "*TouchEvent" {
 
-  /** @domName TouchEvent.altKey */
+  /// @domName TouchEvent.altKey; @docsEditable true
   final bool altKey;
 
-  /** @domName TouchEvent.changedTouches */
+  /// @domName TouchEvent.changedTouches; @docsEditable true
   final TouchList changedTouches;
 
-  /** @domName TouchEvent.ctrlKey */
+  /// @domName TouchEvent.ctrlKey; @docsEditable true
   final bool ctrlKey;
 
-  /** @domName TouchEvent.metaKey */
+  /// @domName TouchEvent.metaKey; @docsEditable true
   final bool metaKey;
 
-  /** @domName TouchEvent.shiftKey */
+  /// @domName TouchEvent.shiftKey; @docsEditable true
   final bool shiftKey;
 
-  /** @domName TouchEvent.targetTouches */
+  /// @domName TouchEvent.targetTouches; @docsEditable true
   final TouchList targetTouches;
 
-  /** @domName TouchEvent.touches */
+  /// @domName TouchEvent.touches; @docsEditable true
   final TouchList touches;
 
-  /** @domName TouchEvent.initTouchEvent */
+  /// @domName TouchEvent.initTouchEvent; @docsEditable true
   void initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17495,10 +17729,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TouchList
+/// @domName TouchList; @docsEditable true
 class TouchList implements JavaScriptIndexingBehavior, List<Touch> native "*TouchList" {
 
-  /** @domName TouchList.length */
+  /// @domName TouchList.length; @docsEditable true
   final int length;
 
   Touch operator[](int index) => JS("Touch", "#[#]", this, index);
@@ -17561,6 +17795,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  Touch get first => this[0];
+
   Touch get last => this[length - 1];
 
   Touch removeLast() {
@@ -17584,7 +17820,7 @@
 
   // -- end List<Touch> mixins.
 
-  /** @domName TouchList.item */
+  /// @domName TouchList.item; @docsEditable true
   Touch item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17592,10 +17828,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLTrackElement
+/// @domName HTMLTrackElement; @docsEditable true
 class TrackElement extends Element implements Element native "*HTMLTrackElement" {
 
-  factory TrackElement() => _Elements.createTrackElement();
+  factory TrackElement() => document.$dom_createElement("track");
 
   static const int ERROR = 3;
 
@@ -17605,30 +17841,30 @@
 
   static const int NONE = 0;
 
-  /** @domName HTMLTrackElement.defaultValue */
+  /// @domName HTMLTrackElement.defaultValue; @docsEditable true
   bool get defaultValue => JS("bool", "#.default", this);
 
-  /** @domName HTMLTrackElement.defaultValue */
+  /// @domName HTMLTrackElement.defaultValue; @docsEditable true
   void set defaultValue(bool value) {
     JS("void", "#.default = #", this, value);
   }
 
-  /** @domName HTMLTrackElement.kind */
+  /// @domName HTMLTrackElement.kind; @docsEditable true
   String kind;
 
-  /** @domName HTMLTrackElement.label */
+  /// @domName HTMLTrackElement.label; @docsEditable true
   String label;
 
-  /** @domName HTMLTrackElement.readyState */
+  /// @domName HTMLTrackElement.readyState; @docsEditable true
   final int readyState;
 
-  /** @domName HTMLTrackElement.src */
+  /// @domName HTMLTrackElement.src; @docsEditable true
   String src;
 
-  /** @domName HTMLTrackElement.srclang */
+  /// @domName HTMLTrackElement.srclang; @docsEditable true
   String srclang;
 
-  /** @domName HTMLTrackElement.track */
+  /// @domName HTMLTrackElement.track; @docsEditable true
   final TextTrack track;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17636,10 +17872,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TrackEvent
+/// @domName TrackEvent; @docsEditable true
 class TrackEvent extends Event native "*TrackEvent" {
 
-  /** @domName TrackEvent.track */
+  /// @domName TrackEvent.track; @docsEditable true
   final Object track;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17647,13 +17883,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitTransitionEvent
+/// @domName WebKitTransitionEvent; @docsEditable true
 class TransitionEvent extends Event native "*WebKitTransitionEvent" {
 
-  /** @domName WebKitTransitionEvent.elapsedTime */
+  /// @domName WebKitTransitionEvent.elapsedTime; @docsEditable true
   final num elapsedTime;
 
-  /** @domName WebKitTransitionEvent.propertyName */
+  /// @domName WebKitTransitionEvent.propertyName; @docsEditable true
   final String propertyName;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17661,43 +17897,43 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName TreeWalker
+/// @domName TreeWalker; @docsEditable true
 class TreeWalker native "*TreeWalker" {
 
-  /** @domName TreeWalker.currentNode */
+  /// @domName TreeWalker.currentNode; @docsEditable true
   Node currentNode;
 
-  /** @domName TreeWalker.expandEntityReferences */
+  /// @domName TreeWalker.expandEntityReferences; @docsEditable true
   final bool expandEntityReferences;
 
-  /** @domName TreeWalker.filter */
+  /// @domName TreeWalker.filter; @docsEditable true
   final NodeFilter filter;
 
-  /** @domName TreeWalker.root */
+  /// @domName TreeWalker.root; @docsEditable true
   final Node root;
 
-  /** @domName TreeWalker.whatToShow */
+  /// @domName TreeWalker.whatToShow; @docsEditable true
   final int whatToShow;
 
-  /** @domName TreeWalker.firstChild */
+  /// @domName TreeWalker.firstChild; @docsEditable true
   Node firstChild() native;
 
-  /** @domName TreeWalker.lastChild */
+  /// @domName TreeWalker.lastChild; @docsEditable true
   Node lastChild() native;
 
-  /** @domName TreeWalker.nextNode */
+  /// @domName TreeWalker.nextNode; @docsEditable true
   Node nextNode() native;
 
-  /** @domName TreeWalker.nextSibling */
+  /// @domName TreeWalker.nextSibling; @docsEditable true
   Node nextSibling() native;
 
-  /** @domName TreeWalker.parentNode */
+  /// @domName TreeWalker.parentNode; @docsEditable true
   Node parentNode() native;
 
-  /** @domName TreeWalker.previousNode */
+  /// @domName TreeWalker.previousNode; @docsEditable true
   Node previousNode() native;
 
-  /** @domName TreeWalker.previousSibling */
+  /// @domName TreeWalker.previousSibling; @docsEditable true
   Node previousSibling() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17705,38 +17941,38 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName UIEvent
+/// @domName UIEvent; @docsEditable true
 class UIEvent extends Event native "*UIEvent" {
 
-  /** @domName UIEvent.charCode */
+  /// @domName UIEvent.charCode; @docsEditable true
   final int charCode;
 
-  /** @domName UIEvent.detail */
+  /// @domName UIEvent.detail; @docsEditable true
   final int detail;
 
-  /** @domName UIEvent.keyCode */
+  /// @domName UIEvent.keyCode; @docsEditable true
   final int keyCode;
 
-  /** @domName UIEvent.layerX */
+  /// @domName UIEvent.layerX; @docsEditable true
   final int layerX;
 
-  /** @domName UIEvent.layerY */
+  /// @domName UIEvent.layerY; @docsEditable true
   final int layerY;
 
-  /** @domName UIEvent.pageX */
+  /// @domName UIEvent.pageX; @docsEditable true
   final int pageX;
 
-  /** @domName UIEvent.pageY */
+  /// @domName UIEvent.pageY; @docsEditable true
   final int pageY;
 
-  /** @domName UIEvent.view */
+  /// @domName UIEvent.view; @docsEditable true
   Window get view => _convertNativeToDart_Window(this._view);
   dynamic get _view => JS("dynamic", "#.view", this);
 
-  /** @domName UIEvent.which */
+  /// @domName UIEvent.which; @docsEditable true
   final int which;
 
-  /** @domName UIEvent.initUIEvent */
+  /// @domName UIEvent.initUIEvent; @docsEditable true
   void initUIEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17744,15 +17980,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLUListElement
+/// @domName HTMLUListElement; @docsEditable true
 class UListElement extends Element implements Element native "*HTMLUListElement" {
 
-  factory UListElement() => _Elements.createUListElement();
+  factory UListElement() => document.$dom_createElement("ul");
 
-  /** @domName HTMLUListElement.compact */
+  /// @domName HTMLUListElement.compact; @docsEditable true
   bool compact;
 
-  /** @domName HTMLUListElement.type */
+  /// @domName HTMLUListElement.type; @docsEditable true
   String type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17760,7 +17996,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Uint16Array
+/// @domName Uint16Array; @docsEditable true
 class Uint16Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Uint16Array" {
 
   factory Uint16Array(int length) =>
@@ -17774,13 +18010,12 @@
 
   static const int BYTES_PER_ELEMENT = 2;
 
-  /** @domName Uint16Array.length */
+  /// @domName Uint16Array.length; @docsEditable true
   final int length;
 
   int operator[](int index) => JS("int", "#[#]", this, index);
 
-  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
-  // -- start List<int> mixins.
+  void operator[]=(int index, int value) { JS("void", "#[#] = #", this, index, value); }  // -- start List<int> mixins.
   // int is the element type.
 
   // From Iterable<int>:
@@ -17835,6 +18070,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  int get first => this[0];
+
   int get last => this[length - 1];
 
   int removeLast() {
@@ -17858,10 +18095,10 @@
 
   // -- end List<int> mixins.
 
-  /** @domName Uint16Array.setElements */
+  /// @domName Uint16Array.setElements; @docsEditable true
   void setElements(Object array, [int offset]) native "set";
 
-  /** @domName Uint16Array.subarray */
+  /// @domName Uint16Array.subarray; @docsEditable true
   Uint16Array subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17869,7 +18106,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Uint32Array
+/// @domName Uint32Array; @docsEditable true
 class Uint32Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Uint32Array" {
 
   factory Uint32Array(int length) =>
@@ -17883,13 +18120,12 @@
 
   static const int BYTES_PER_ELEMENT = 4;
 
-  /** @domName Uint32Array.length */
+  /// @domName Uint32Array.length; @docsEditable true
   final int length;
 
   int operator[](int index) => JS("int", "#[#]", this, index);
 
-  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
-  // -- start List<int> mixins.
+  void operator[]=(int index, int value) { JS("void", "#[#] = #", this, index, value); }  // -- start List<int> mixins.
   // int is the element type.
 
   // From Iterable<int>:
@@ -17944,6 +18180,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  int get first => this[0];
+
   int get last => this[length - 1];
 
   int removeLast() {
@@ -17967,10 +18205,10 @@
 
   // -- end List<int> mixins.
 
-  /** @domName Uint32Array.setElements */
+  /// @domName Uint32Array.setElements; @docsEditable true
   void setElements(Object array, [int offset]) native "set";
 
-  /** @domName Uint32Array.subarray */
+  /// @domName Uint32Array.subarray; @docsEditable true
   Uint32Array subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17978,7 +18216,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Uint8Array
+/// @domName Uint8Array; @docsEditable true
 class Uint8Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Uint8Array" {
 
   factory Uint8Array(int length) =>
@@ -17992,13 +18230,12 @@
 
   static const int BYTES_PER_ELEMENT = 1;
 
-  /** @domName Uint8Array.length */
+  /// @domName Uint8Array.length; @docsEditable true
   final int length;
 
   int operator[](int index) => JS("int", "#[#]", this, index);
 
-  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
-  // -- start List<int> mixins.
+  void operator[]=(int index, int value) { JS("void", "#[#] = #", this, index, value); }  // -- start List<int> mixins.
   // int is the element type.
 
   // From Iterable<int>:
@@ -18053,6 +18290,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  int get first => this[0];
+
   int get last => this[length - 1];
 
   int removeLast() {
@@ -18076,10 +18315,10 @@
 
   // -- end List<int> mixins.
 
-  /** @domName Uint8Array.setElements */
+  /// @domName Uint8Array.setElements; @docsEditable true
   void setElements(Object array, [int offset]) native "set";
 
-  /** @domName Uint8Array.subarray */
+  /// @domName Uint8Array.subarray; @docsEditable true
   Uint8Array subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18087,7 +18326,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Uint8ClampedArray
+/// @domName Uint8ClampedArray; @docsEditable true
 class Uint8ClampedArray extends Uint8Array native "*Uint8ClampedArray" {
 
   factory Uint8ClampedArray(int length) =>
@@ -18102,10 +18341,10 @@
   // Use implementation from Uint8Array.
   // final int length;
 
-  /** @domName Uint8ClampedArray.setElements */
+  /// @domName Uint8ClampedArray.setElements; @docsEditable true
   void setElements(Object array, [int offset]) native "set";
 
-  /** @domName Uint8ClampedArray.subarray */
+  /// @domName Uint8ClampedArray.subarray; @docsEditable true
   Uint8ClampedArray subarray(int start, [int end]) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18113,7 +18352,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLUnknownElement
+/// @domName HTMLUnknownElement; @docsEditable true
 class UnknownElement extends Element implements Element native "*HTMLUnknownElement" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18138,34 +18377,34 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ValidityState
+/// @domName ValidityState; @docsEditable true
 class ValidityState native "*ValidityState" {
 
-  /** @domName ValidityState.customError */
+  /// @domName ValidityState.customError; @docsEditable true
   final bool customError;
 
-  /** @domName ValidityState.patternMismatch */
+  /// @domName ValidityState.patternMismatch; @docsEditable true
   final bool patternMismatch;
 
-  /** @domName ValidityState.rangeOverflow */
+  /// @domName ValidityState.rangeOverflow; @docsEditable true
   final bool rangeOverflow;
 
-  /** @domName ValidityState.rangeUnderflow */
+  /// @domName ValidityState.rangeUnderflow; @docsEditable true
   final bool rangeUnderflow;
 
-  /** @domName ValidityState.stepMismatch */
+  /// @domName ValidityState.stepMismatch; @docsEditable true
   final bool stepMismatch;
 
-  /** @domName ValidityState.tooLong */
+  /// @domName ValidityState.tooLong; @docsEditable true
   final bool tooLong;
 
-  /** @domName ValidityState.typeMismatch */
+  /// @domName ValidityState.typeMismatch; @docsEditable true
   final bool typeMismatch;
 
-  /** @domName ValidityState.valid */
+  /// @domName ValidityState.valid; @docsEditable true
   final bool valid;
 
-  /** @domName ValidityState.valueMissing */
+  /// @domName ValidityState.valueMissing; @docsEditable true
   final bool valueMissing;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18173,48 +18412,48 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName HTMLVideoElement
+/// @domName HTMLVideoElement; @docsEditable true
 class VideoElement extends MediaElement native "*HTMLVideoElement" {
 
-  factory VideoElement() => _Elements.createVideoElement();
+  factory VideoElement() => document.$dom_createElement("video");
 
-  /** @domName HTMLVideoElement.height */
+  /// @domName HTMLVideoElement.height; @docsEditable true
   int height;
 
-  /** @domName HTMLVideoElement.poster */
+  /// @domName HTMLVideoElement.poster; @docsEditable true
   String poster;
 
-  /** @domName HTMLVideoElement.videoHeight */
+  /// @domName HTMLVideoElement.videoHeight; @docsEditable true
   final int videoHeight;
 
-  /** @domName HTMLVideoElement.videoWidth */
+  /// @domName HTMLVideoElement.videoWidth; @docsEditable true
   final int videoWidth;
 
-  /** @domName HTMLVideoElement.webkitDecodedFrameCount */
+  /// @domName HTMLVideoElement.webkitDecodedFrameCount; @docsEditable true
   final int webkitDecodedFrameCount;
 
-  /** @domName HTMLVideoElement.webkitDisplayingFullscreen */
+  /// @domName HTMLVideoElement.webkitDisplayingFullscreen; @docsEditable true
   final bool webkitDisplayingFullscreen;
 
-  /** @domName HTMLVideoElement.webkitDroppedFrameCount */
+  /// @domName HTMLVideoElement.webkitDroppedFrameCount; @docsEditable true
   final int webkitDroppedFrameCount;
 
-  /** @domName HTMLVideoElement.webkitSupportsFullscreen */
+  /// @domName HTMLVideoElement.webkitSupportsFullscreen; @docsEditable true
   final bool webkitSupportsFullscreen;
 
-  /** @domName HTMLVideoElement.width */
+  /// @domName HTMLVideoElement.width; @docsEditable true
   int width;
 
-  /** @domName HTMLVideoElement.webkitEnterFullScreen */
+  /// @domName HTMLVideoElement.webkitEnterFullScreen; @docsEditable true
   void webkitEnterFullScreen() native;
 
-  /** @domName HTMLVideoElement.webkitEnterFullscreen */
+  /// @domName HTMLVideoElement.webkitEnterFullscreen; @docsEditable true
   void webkitEnterFullscreen() native;
 
-  /** @domName HTMLVideoElement.webkitExitFullScreen */
+  /// @domName HTMLVideoElement.webkitExitFullScreen; @docsEditable true
   void webkitExitFullScreen() native;
 
-  /** @domName HTMLVideoElement.webkitExitFullscreen */
+  /// @domName HTMLVideoElement.webkitExitFullscreen; @docsEditable true
   void webkitExitFullscreen() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18230,10 +18469,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WaveShaperNode
+/// @domName WaveShaperNode; @docsEditable true
 class WaveShaperNode extends AudioNode native "*WaveShaperNode" {
 
-  /** @domName WaveShaperNode.curve */
+  /// @domName WaveShaperNode.curve; @docsEditable true
   Float32Array curve;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18241,7 +18480,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WaveTable
+/// @domName WaveTable; @docsEditable true
 class WaveTable native "*WaveTable" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18249,16 +18488,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLActiveInfo
+/// @domName WebGLActiveInfo; @docsEditable true
 class WebGLActiveInfo native "*WebGLActiveInfo" {
 
-  /** @domName WebGLActiveInfo.name */
+  /// @domName WebGLActiveInfo.name; @docsEditable true
   final String name;
 
-  /** @domName WebGLActiveInfo.size */
+  /// @domName WebGLActiveInfo.size; @docsEditable true
   final int size;
 
-  /** @domName WebGLActiveInfo.type */
+  /// @domName WebGLActiveInfo.type; @docsEditable true
   final int type;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18266,7 +18505,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLBuffer
+/// @domName WebGLBuffer; @docsEditable true
 class WebGLBuffer native "*WebGLBuffer" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18274,7 +18513,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLCompressedTextureS3TC
+/// @domName WebGLCompressedTextureS3TC; @docsEditable true
 class WebGLCompressedTextureS3TC native "*WebGLCompressedTextureS3TC" {
 
   static const int COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1;
@@ -18290,25 +18529,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLContextAttributes
+/// @domName WebGLContextAttributes; @docsEditable true
 class WebGLContextAttributes native "*WebGLContextAttributes" {
 
-  /** @domName WebGLContextAttributes.alpha */
+  /// @domName WebGLContextAttributes.alpha; @docsEditable true
   bool alpha;
 
-  /** @domName WebGLContextAttributes.antialias */
+  /// @domName WebGLContextAttributes.antialias; @docsEditable true
   bool antialias;
 
-  /** @domName WebGLContextAttributes.depth */
+  /// @domName WebGLContextAttributes.depth; @docsEditable true
   bool depth;
 
-  /** @domName WebGLContextAttributes.premultipliedAlpha */
+  /// @domName WebGLContextAttributes.premultipliedAlpha; @docsEditable true
   bool premultipliedAlpha;
 
-  /** @domName WebGLContextAttributes.preserveDrawingBuffer */
+  /// @domName WebGLContextAttributes.preserveDrawingBuffer; @docsEditable true
   bool preserveDrawingBuffer;
 
-  /** @domName WebGLContextAttributes.stencil */
+  /// @domName WebGLContextAttributes.stencil; @docsEditable true
   bool stencil;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18316,10 +18555,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLContextEvent
+/// @domName WebGLContextEvent; @docsEditable true
 class WebGLContextEvent extends Event native "*WebGLContextEvent" {
 
-  /** @domName WebGLContextEvent.statusMessage */
+  /// @domName WebGLContextEvent.statusMessage; @docsEditable true
   final String statusMessage;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18327,7 +18566,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLDebugRendererInfo
+/// @domName WebGLDebugRendererInfo; @docsEditable true
 class WebGLDebugRendererInfo native "*WebGLDebugRendererInfo" {
 
   static const int UNMASKED_RENDERER_WEBGL = 0x9246;
@@ -18339,10 +18578,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLDebugShaders
+/// @domName WebGLDebugShaders; @docsEditable true
 class WebGLDebugShaders native "*WebGLDebugShaders" {
 
-  /** @domName WebGLDebugShaders.getTranslatedShaderSource */
+  /// @domName WebGLDebugShaders.getTranslatedShaderSource; @docsEditable true
   String getTranslatedShaderSource(WebGLShader shader) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18350,7 +18589,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLDepthTexture
+/// @domName WebGLDepthTexture; @docsEditable true
 class WebGLDepthTexture native "*WebGLDepthTexture" {
 
   static const int UNSIGNED_INT_24_8_WEBGL = 0x84FA;
@@ -18360,7 +18599,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLFramebuffer
+/// @domName WebGLFramebuffer; @docsEditable true
 class WebGLFramebuffer native "*WebGLFramebuffer" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18368,13 +18607,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLLoseContext
+/// @domName WebGLLoseContext; @docsEditable true
 class WebGLLoseContext native "*WebGLLoseContext" {
 
-  /** @domName WebGLLoseContext.loseContext */
+  /// @domName WebGLLoseContext.loseContext; @docsEditable true
   void loseContext() native;
 
-  /** @domName WebGLLoseContext.restoreContext */
+  /// @domName WebGLLoseContext.restoreContext; @docsEditable true
   void restoreContext() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18382,7 +18621,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLProgram
+/// @domName WebGLProgram; @docsEditable true
 class WebGLProgram native "*WebGLProgram" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18390,7 +18629,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLRenderbuffer
+/// @domName WebGLRenderbuffer; @docsEditable true
 class WebGLRenderbuffer native "*WebGLRenderbuffer" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18398,7 +18637,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLRenderingContext
+/// @domName WebGLRenderingContext; @docsEditable true
 class WebGLRenderingContext extends CanvasRenderingContext native "*WebGLRenderingContext" {
 
   static const int ACTIVE_ATTRIBUTES = 0x8B89;
@@ -18991,319 +19230,319 @@
 
   static const int ZERO = 0;
 
-  /** @domName WebGLRenderingContext.drawingBufferHeight */
+  /// @domName WebGLRenderingContext.drawingBufferHeight; @docsEditable true
   final int drawingBufferHeight;
 
-  /** @domName WebGLRenderingContext.drawingBufferWidth */
+  /// @domName WebGLRenderingContext.drawingBufferWidth; @docsEditable true
   final int drawingBufferWidth;
 
-  /** @domName WebGLRenderingContext.activeTexture */
+  /// @domName WebGLRenderingContext.activeTexture; @docsEditable true
   void activeTexture(int texture) native;
 
-  /** @domName WebGLRenderingContext.attachShader */
+  /// @domName WebGLRenderingContext.attachShader; @docsEditable true
   void attachShader(WebGLProgram program, WebGLShader shader) native;
 
-  /** @domName WebGLRenderingContext.bindAttribLocation */
+  /// @domName WebGLRenderingContext.bindAttribLocation; @docsEditable true
   void bindAttribLocation(WebGLProgram program, int index, String name) native;
 
-  /** @domName WebGLRenderingContext.bindBuffer */
+  /// @domName WebGLRenderingContext.bindBuffer; @docsEditable true
   void bindBuffer(int target, WebGLBuffer buffer) native;
 
-  /** @domName WebGLRenderingContext.bindFramebuffer */
+  /// @domName WebGLRenderingContext.bindFramebuffer; @docsEditable true
   void bindFramebuffer(int target, WebGLFramebuffer framebuffer) native;
 
-  /** @domName WebGLRenderingContext.bindRenderbuffer */
+  /// @domName WebGLRenderingContext.bindRenderbuffer; @docsEditable true
   void bindRenderbuffer(int target, WebGLRenderbuffer renderbuffer) native;
 
-  /** @domName WebGLRenderingContext.bindTexture */
+  /// @domName WebGLRenderingContext.bindTexture; @docsEditable true
   void bindTexture(int target, WebGLTexture texture) native;
 
-  /** @domName WebGLRenderingContext.blendColor */
+  /// @domName WebGLRenderingContext.blendColor; @docsEditable true
   void blendColor(num red, num green, num blue, num alpha) native;
 
-  /** @domName WebGLRenderingContext.blendEquation */
+  /// @domName WebGLRenderingContext.blendEquation; @docsEditable true
   void blendEquation(int mode) native;
 
-  /** @domName WebGLRenderingContext.blendEquationSeparate */
+  /// @domName WebGLRenderingContext.blendEquationSeparate; @docsEditable true
   void blendEquationSeparate(int modeRGB, int modeAlpha) native;
 
-  /** @domName WebGLRenderingContext.blendFunc */
+  /// @domName WebGLRenderingContext.blendFunc; @docsEditable true
   void blendFunc(int sfactor, int dfactor) native;
 
-  /** @domName WebGLRenderingContext.blendFuncSeparate */
+  /// @domName WebGLRenderingContext.blendFuncSeparate; @docsEditable true
   void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) native;
 
-  /** @domName WebGLRenderingContext.bufferData */
+  /// @domName WebGLRenderingContext.bufferData; @docsEditable true
   void bufferData(int target, data_OR_size, int usage) native;
 
-  /** @domName WebGLRenderingContext.bufferSubData */
+  /// @domName WebGLRenderingContext.bufferSubData; @docsEditable true
   void bufferSubData(int target, int offset, data) native;
 
-  /** @domName WebGLRenderingContext.checkFramebufferStatus */
+  /// @domName WebGLRenderingContext.checkFramebufferStatus; @docsEditable true
   int checkFramebufferStatus(int target) native;
 
-  /** @domName WebGLRenderingContext.clear */
+  /// @domName WebGLRenderingContext.clear; @docsEditable true
   void clear(int mask) native;
 
-  /** @domName WebGLRenderingContext.clearColor */
+  /// @domName WebGLRenderingContext.clearColor; @docsEditable true
   void clearColor(num red, num green, num blue, num alpha) native;
 
-  /** @domName WebGLRenderingContext.clearDepth */
+  /// @domName WebGLRenderingContext.clearDepth; @docsEditable true
   void clearDepth(num depth) native;
 
-  /** @domName WebGLRenderingContext.clearStencil */
+  /// @domName WebGLRenderingContext.clearStencil; @docsEditable true
   void clearStencil(int s) native;
 
-  /** @domName WebGLRenderingContext.colorMask */
+  /// @domName WebGLRenderingContext.colorMask; @docsEditable true
   void colorMask(bool red, bool green, bool blue, bool alpha) native;
 
-  /** @domName WebGLRenderingContext.compileShader */
+  /// @domName WebGLRenderingContext.compileShader; @docsEditable true
   void compileShader(WebGLShader shader) native;
 
-  /** @domName WebGLRenderingContext.compressedTexImage2D */
+  /// @domName WebGLRenderingContext.compressedTexImage2D; @docsEditable true
   void compressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, ArrayBufferView data) native;
 
-  /** @domName WebGLRenderingContext.compressedTexSubImage2D */
+  /// @domName WebGLRenderingContext.compressedTexSubImage2D; @docsEditable true
   void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, ArrayBufferView data) native;
 
-  /** @domName WebGLRenderingContext.copyTexImage2D */
+  /// @domName WebGLRenderingContext.copyTexImage2D; @docsEditable true
   void copyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border) native;
 
-  /** @domName WebGLRenderingContext.copyTexSubImage2D */
+  /// @domName WebGLRenderingContext.copyTexSubImage2D; @docsEditable true
   void copyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height) native;
 
-  /** @domName WebGLRenderingContext.createBuffer */
+  /// @domName WebGLRenderingContext.createBuffer; @docsEditable true
   WebGLBuffer createBuffer() native;
 
-  /** @domName WebGLRenderingContext.createFramebuffer */
+  /// @domName WebGLRenderingContext.createFramebuffer; @docsEditable true
   WebGLFramebuffer createFramebuffer() native;
 
-  /** @domName WebGLRenderingContext.createProgram */
+  /// @domName WebGLRenderingContext.createProgram; @docsEditable true
   WebGLProgram createProgram() native;
 
-  /** @domName WebGLRenderingContext.createRenderbuffer */
+  /// @domName WebGLRenderingContext.createRenderbuffer; @docsEditable true
   WebGLRenderbuffer createRenderbuffer() native;
 
-  /** @domName WebGLRenderingContext.createShader */
+  /// @domName WebGLRenderingContext.createShader; @docsEditable true
   WebGLShader createShader(int type) native;
 
-  /** @domName WebGLRenderingContext.createTexture */
+  /// @domName WebGLRenderingContext.createTexture; @docsEditable true
   WebGLTexture createTexture() native;
 
-  /** @domName WebGLRenderingContext.cullFace */
+  /// @domName WebGLRenderingContext.cullFace; @docsEditable true
   void cullFace(int mode) native;
 
-  /** @domName WebGLRenderingContext.deleteBuffer */
+  /// @domName WebGLRenderingContext.deleteBuffer; @docsEditable true
   void deleteBuffer(WebGLBuffer buffer) native;
 
-  /** @domName WebGLRenderingContext.deleteFramebuffer */
+  /// @domName WebGLRenderingContext.deleteFramebuffer; @docsEditable true
   void deleteFramebuffer(WebGLFramebuffer framebuffer) native;
 
-  /** @domName WebGLRenderingContext.deleteProgram */
+  /// @domName WebGLRenderingContext.deleteProgram; @docsEditable true
   void deleteProgram(WebGLProgram program) native;
 
-  /** @domName WebGLRenderingContext.deleteRenderbuffer */
+  /// @domName WebGLRenderingContext.deleteRenderbuffer; @docsEditable true
   void deleteRenderbuffer(WebGLRenderbuffer renderbuffer) native;
 
-  /** @domName WebGLRenderingContext.deleteShader */
+  /// @domName WebGLRenderingContext.deleteShader; @docsEditable true
   void deleteShader(WebGLShader shader) native;
 
-  /** @domName WebGLRenderingContext.deleteTexture */
+  /// @domName WebGLRenderingContext.deleteTexture; @docsEditable true
   void deleteTexture(WebGLTexture texture) native;
 
-  /** @domName WebGLRenderingContext.depthFunc */
+  /// @domName WebGLRenderingContext.depthFunc; @docsEditable true
   void depthFunc(int func) native;
 
-  /** @domName WebGLRenderingContext.depthMask */
+  /// @domName WebGLRenderingContext.depthMask; @docsEditable true
   void depthMask(bool flag) native;
 
-  /** @domName WebGLRenderingContext.depthRange */
+  /// @domName WebGLRenderingContext.depthRange; @docsEditable true
   void depthRange(num zNear, num zFar) native;
 
-  /** @domName WebGLRenderingContext.detachShader */
+  /// @domName WebGLRenderingContext.detachShader; @docsEditable true
   void detachShader(WebGLProgram program, WebGLShader shader) native;
 
-  /** @domName WebGLRenderingContext.disable */
+  /// @domName WebGLRenderingContext.disable; @docsEditable true
   void disable(int cap) native;
 
-  /** @domName WebGLRenderingContext.disableVertexAttribArray */
+  /// @domName WebGLRenderingContext.disableVertexAttribArray; @docsEditable true
   void disableVertexAttribArray(int index) native;
 
-  /** @domName WebGLRenderingContext.drawArrays */
+  /// @domName WebGLRenderingContext.drawArrays; @docsEditable true
   void drawArrays(int mode, int first, int count) native;
 
-  /** @domName WebGLRenderingContext.drawElements */
+  /// @domName WebGLRenderingContext.drawElements; @docsEditable true
   void drawElements(int mode, int count, int type, int offset) native;
 
-  /** @domName WebGLRenderingContext.enable */
+  /// @domName WebGLRenderingContext.enable; @docsEditable true
   void enable(int cap) native;
 
-  /** @domName WebGLRenderingContext.enableVertexAttribArray */
+  /// @domName WebGLRenderingContext.enableVertexAttribArray; @docsEditable true
   void enableVertexAttribArray(int index) native;
 
-  /** @domName WebGLRenderingContext.finish */
+  /// @domName WebGLRenderingContext.finish; @docsEditable true
   void finish() native;
 
-  /** @domName WebGLRenderingContext.flush */
+  /// @domName WebGLRenderingContext.flush; @docsEditable true
   void flush() native;
 
-  /** @domName WebGLRenderingContext.framebufferRenderbuffer */
+  /// @domName WebGLRenderingContext.framebufferRenderbuffer; @docsEditable true
   void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, WebGLRenderbuffer renderbuffer) native;
 
-  /** @domName WebGLRenderingContext.framebufferTexture2D */
+  /// @domName WebGLRenderingContext.framebufferTexture2D; @docsEditable true
   void framebufferTexture2D(int target, int attachment, int textarget, WebGLTexture texture, int level) native;
 
-  /** @domName WebGLRenderingContext.frontFace */
+  /// @domName WebGLRenderingContext.frontFace; @docsEditable true
   void frontFace(int mode) native;
 
-  /** @domName WebGLRenderingContext.generateMipmap */
+  /// @domName WebGLRenderingContext.generateMipmap; @docsEditable true
   void generateMipmap(int target) native;
 
-  /** @domName WebGLRenderingContext.getActiveAttrib */
+  /// @domName WebGLRenderingContext.getActiveAttrib; @docsEditable true
   WebGLActiveInfo getActiveAttrib(WebGLProgram program, int index) native;
 
-  /** @domName WebGLRenderingContext.getActiveUniform */
+  /// @domName WebGLRenderingContext.getActiveUniform; @docsEditable true
   WebGLActiveInfo getActiveUniform(WebGLProgram program, int index) native;
 
-  /** @domName WebGLRenderingContext.getAttachedShaders */
+  /// @domName WebGLRenderingContext.getAttachedShaders; @docsEditable true
   void getAttachedShaders(WebGLProgram program) native;
 
-  /** @domName WebGLRenderingContext.getAttribLocation */
+  /// @domName WebGLRenderingContext.getAttribLocation; @docsEditable true
   int getAttribLocation(WebGLProgram program, String name) native;
 
-  /** @domName WebGLRenderingContext.getBufferParameter */
+  /// @domName WebGLRenderingContext.getBufferParameter; @docsEditable true
   Object getBufferParameter(int target, int pname) native;
 
-  /** @domName WebGLRenderingContext.getContextAttributes */
+  /// @domName WebGLRenderingContext.getContextAttributes; @docsEditable true
   WebGLContextAttributes getContextAttributes() native;
 
-  /** @domName WebGLRenderingContext.getError */
+  /// @domName WebGLRenderingContext.getError; @docsEditable true
   int getError() native;
 
-  /** @domName WebGLRenderingContext.getExtension */
+  /// @domName WebGLRenderingContext.getExtension; @docsEditable true
   Object getExtension(String name) native;
 
-  /** @domName WebGLRenderingContext.getFramebufferAttachmentParameter */
+  /// @domName WebGLRenderingContext.getFramebufferAttachmentParameter; @docsEditable true
   Object getFramebufferAttachmentParameter(int target, int attachment, int pname) native;
 
-  /** @domName WebGLRenderingContext.getParameter */
+  /// @domName WebGLRenderingContext.getParameter; @docsEditable true
   Object getParameter(int pname) native;
 
-  /** @domName WebGLRenderingContext.getProgramInfoLog */
+  /// @domName WebGLRenderingContext.getProgramInfoLog; @docsEditable true
   String getProgramInfoLog(WebGLProgram program) native;
 
-  /** @domName WebGLRenderingContext.getProgramParameter */
+  /// @domName WebGLRenderingContext.getProgramParameter; @docsEditable true
   Object getProgramParameter(WebGLProgram program, int pname) native;
 
-  /** @domName WebGLRenderingContext.getRenderbufferParameter */
+  /// @domName WebGLRenderingContext.getRenderbufferParameter; @docsEditable true
   Object getRenderbufferParameter(int target, int pname) native;
 
-  /** @domName WebGLRenderingContext.getShaderInfoLog */
+  /// @domName WebGLRenderingContext.getShaderInfoLog; @docsEditable true
   String getShaderInfoLog(WebGLShader shader) native;
 
-  /** @domName WebGLRenderingContext.getShaderParameter */
+  /// @domName WebGLRenderingContext.getShaderParameter; @docsEditable true
   Object getShaderParameter(WebGLShader shader, int pname) native;
 
-  /** @domName WebGLRenderingContext.getShaderPrecisionFormat */
+  /// @domName WebGLRenderingContext.getShaderPrecisionFormat; @docsEditable true
   WebGLShaderPrecisionFormat getShaderPrecisionFormat(int shadertype, int precisiontype) native;
 
-  /** @domName WebGLRenderingContext.getShaderSource */
+  /// @domName WebGLRenderingContext.getShaderSource; @docsEditable true
   String getShaderSource(WebGLShader shader) native;
 
-  /** @domName WebGLRenderingContext.getSupportedExtensions */
+  /// @domName WebGLRenderingContext.getSupportedExtensions; @docsEditable true
   List<String> getSupportedExtensions() native;
 
-  /** @domName WebGLRenderingContext.getTexParameter */
+  /// @domName WebGLRenderingContext.getTexParameter; @docsEditable true
   Object getTexParameter(int target, int pname) native;
 
-  /** @domName WebGLRenderingContext.getUniform */
+  /// @domName WebGLRenderingContext.getUniform; @docsEditable true
   Object getUniform(WebGLProgram program, WebGLUniformLocation location) native;
 
-  /** @domName WebGLRenderingContext.getUniformLocation */
+  /// @domName WebGLRenderingContext.getUniformLocation; @docsEditable true
   WebGLUniformLocation getUniformLocation(WebGLProgram program, String name) native;
 
-  /** @domName WebGLRenderingContext.getVertexAttrib */
+  /// @domName WebGLRenderingContext.getVertexAttrib; @docsEditable true
   Object getVertexAttrib(int index, int pname) native;
 
-  /** @domName WebGLRenderingContext.getVertexAttribOffset */
+  /// @domName WebGLRenderingContext.getVertexAttribOffset; @docsEditable true
   int getVertexAttribOffset(int index, int pname) native;
 
-  /** @domName WebGLRenderingContext.hint */
+  /// @domName WebGLRenderingContext.hint; @docsEditable true
   void hint(int target, int mode) native;
 
-  /** @domName WebGLRenderingContext.isBuffer */
+  /// @domName WebGLRenderingContext.isBuffer; @docsEditable true
   bool isBuffer(WebGLBuffer buffer) native;
 
-  /** @domName WebGLRenderingContext.isContextLost */
+  /// @domName WebGLRenderingContext.isContextLost; @docsEditable true
   bool isContextLost() native;
 
-  /** @domName WebGLRenderingContext.isEnabled */
+  /// @domName WebGLRenderingContext.isEnabled; @docsEditable true
   bool isEnabled(int cap) native;
 
-  /** @domName WebGLRenderingContext.isFramebuffer */
+  /// @domName WebGLRenderingContext.isFramebuffer; @docsEditable true
   bool isFramebuffer(WebGLFramebuffer framebuffer) native;
 
-  /** @domName WebGLRenderingContext.isProgram */
+  /// @domName WebGLRenderingContext.isProgram; @docsEditable true
   bool isProgram(WebGLProgram program) native;
 
-  /** @domName WebGLRenderingContext.isRenderbuffer */
+  /// @domName WebGLRenderingContext.isRenderbuffer; @docsEditable true
   bool isRenderbuffer(WebGLRenderbuffer renderbuffer) native;
 
-  /** @domName WebGLRenderingContext.isShader */
+  /// @domName WebGLRenderingContext.isShader; @docsEditable true
   bool isShader(WebGLShader shader) native;
 
-  /** @domName WebGLRenderingContext.isTexture */
+  /// @domName WebGLRenderingContext.isTexture; @docsEditable true
   bool isTexture(WebGLTexture texture) native;
 
-  /** @domName WebGLRenderingContext.lineWidth */
+  /// @domName WebGLRenderingContext.lineWidth; @docsEditable true
   void lineWidth(num width) native;
 
-  /** @domName WebGLRenderingContext.linkProgram */
+  /// @domName WebGLRenderingContext.linkProgram; @docsEditable true
   void linkProgram(WebGLProgram program) native;
 
-  /** @domName WebGLRenderingContext.pixelStorei */
+  /// @domName WebGLRenderingContext.pixelStorei; @docsEditable true
   void pixelStorei(int pname, int param) native;
 
-  /** @domName WebGLRenderingContext.polygonOffset */
+  /// @domName WebGLRenderingContext.polygonOffset; @docsEditable true
   void polygonOffset(num factor, num units) native;
 
-  /** @domName WebGLRenderingContext.readPixels */
+  /// @domName WebGLRenderingContext.readPixels; @docsEditable true
   void readPixels(int x, int y, int width, int height, int format, int type, ArrayBufferView pixels) native;
 
-  /** @domName WebGLRenderingContext.releaseShaderCompiler */
+  /// @domName WebGLRenderingContext.releaseShaderCompiler; @docsEditable true
   void releaseShaderCompiler() native;
 
-  /** @domName WebGLRenderingContext.renderbufferStorage */
+  /// @domName WebGLRenderingContext.renderbufferStorage; @docsEditable true
   void renderbufferStorage(int target, int internalformat, int width, int height) native;
 
-  /** @domName WebGLRenderingContext.sampleCoverage */
+  /// @domName WebGLRenderingContext.sampleCoverage; @docsEditable true
   void sampleCoverage(num value, bool invert) native;
 
-  /** @domName WebGLRenderingContext.scissor */
+  /// @domName WebGLRenderingContext.scissor; @docsEditable true
   void scissor(int x, int y, int width, int height) native;
 
-  /** @domName WebGLRenderingContext.shaderSource */
+  /// @domName WebGLRenderingContext.shaderSource; @docsEditable true
   void shaderSource(WebGLShader shader, String string) native;
 
-  /** @domName WebGLRenderingContext.stencilFunc */
+  /// @domName WebGLRenderingContext.stencilFunc; @docsEditable true
   void stencilFunc(int func, int ref, int mask) native;
 
-  /** @domName WebGLRenderingContext.stencilFuncSeparate */
+  /// @domName WebGLRenderingContext.stencilFuncSeparate; @docsEditable true
   void stencilFuncSeparate(int face, int func, int ref, int mask) native;
 
-  /** @domName WebGLRenderingContext.stencilMask */
+  /// @domName WebGLRenderingContext.stencilMask; @docsEditable true
   void stencilMask(int mask) native;
 
-  /** @domName WebGLRenderingContext.stencilMaskSeparate */
+  /// @domName WebGLRenderingContext.stencilMaskSeparate; @docsEditable true
   void stencilMaskSeparate(int face, int mask) native;
 
-  /** @domName WebGLRenderingContext.stencilOp */
+  /// @domName WebGLRenderingContext.stencilOp; @docsEditable true
   void stencilOp(int fail, int zfail, int zpass) native;
 
-  /** @domName WebGLRenderingContext.stencilOpSeparate */
+  /// @domName WebGLRenderingContext.stencilOpSeparate; @docsEditable true
   void stencilOpSeparate(int face, int fail, int zfail, int zpass) native;
 
-  /** @domName WebGLRenderingContext.texImage2D */
+  /// @domName WebGLRenderingContext.texImage2D; @docsEditable true
   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, ArrayBufferView pixels]) {
     if ((?border_OR_canvas_OR_image_OR_pixels_OR_video && (border_OR_canvas_OR_image_OR_pixels_OR_video is int || border_OR_canvas_OR_image_OR_pixels_OR_video == null))) {
       _texImage2D_1(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels);
@@ -19338,7 +19577,7 @@
       _texImage2D_5(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
       return;
     }
-    throw const Exception("Incorrect number or type of arguments");
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
   void _texImage2D_1(target, level, internalformat, width, height, int border, format, type, ArrayBufferView pixels) native "texImage2D";
   void _texImage2D_2(target, level, internalformat, format, type, pixels) native "texImage2D";
@@ -19346,13 +19585,13 @@
   void _texImage2D_4(target, level, internalformat, format, type, CanvasElement canvas) native "texImage2D";
   void _texImage2D_5(target, level, internalformat, format, type, VideoElement video) native "texImage2D";
 
-  /** @domName WebGLRenderingContext.texParameterf */
+  /// @domName WebGLRenderingContext.texParameterf; @docsEditable true
   void texParameterf(int target, int pname, num param) native;
 
-  /** @domName WebGLRenderingContext.texParameteri */
+  /// @domName WebGLRenderingContext.texParameteri; @docsEditable true
   void texParameteri(int target, int pname, int param) native;
 
-  /** @domName WebGLRenderingContext.texSubImage2D */
+  /// @domName WebGLRenderingContext.texSubImage2D; @docsEditable true
   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, ArrayBufferView pixels]) {
     if ((?canvas_OR_format_OR_image_OR_pixels_OR_video && (canvas_OR_format_OR_image_OR_pixels_OR_video is int || canvas_OR_format_OR_image_OR_pixels_OR_video == null))) {
       _texSubImage2D_1(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels);
@@ -19383,7 +19622,7 @@
       _texSubImage2D_5(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
       return;
     }
-    throw const Exception("Incorrect number or type of arguments");
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
   void _texSubImage2D_1(target, level, xoffset, yoffset, width, height, int format, type, ArrayBufferView pixels) native "texSubImage2D";
   void _texSubImage2D_2(target, level, xoffset, yoffset, format, type, pixels) native "texSubImage2D";
@@ -19391,97 +19630,97 @@
   void _texSubImage2D_4(target, level, xoffset, yoffset, format, type, CanvasElement canvas) native "texSubImage2D";
   void _texSubImage2D_5(target, level, xoffset, yoffset, format, type, VideoElement video) native "texSubImage2D";
 
-  /** @domName WebGLRenderingContext.uniform1f */
+  /// @domName WebGLRenderingContext.uniform1f; @docsEditable true
   void uniform1f(WebGLUniformLocation location, num x) native;
 
-  /** @domName WebGLRenderingContext.uniform1fv */
+  /// @domName WebGLRenderingContext.uniform1fv; @docsEditable true
   void uniform1fv(WebGLUniformLocation location, Float32Array v) native;
 
-  /** @domName WebGLRenderingContext.uniform1i */
+  /// @domName WebGLRenderingContext.uniform1i; @docsEditable true
   void uniform1i(WebGLUniformLocation location, int x) native;
 
-  /** @domName WebGLRenderingContext.uniform1iv */
+  /// @domName WebGLRenderingContext.uniform1iv; @docsEditable true
   void uniform1iv(WebGLUniformLocation location, Int32Array v) native;
 
-  /** @domName WebGLRenderingContext.uniform2f */
+  /// @domName WebGLRenderingContext.uniform2f; @docsEditable true
   void uniform2f(WebGLUniformLocation location, num x, num y) native;
 
-  /** @domName WebGLRenderingContext.uniform2fv */
+  /// @domName WebGLRenderingContext.uniform2fv; @docsEditable true
   void uniform2fv(WebGLUniformLocation location, Float32Array v) native;
 
-  /** @domName WebGLRenderingContext.uniform2i */
+  /// @domName WebGLRenderingContext.uniform2i; @docsEditable true
   void uniform2i(WebGLUniformLocation location, int x, int y) native;
 
-  /** @domName WebGLRenderingContext.uniform2iv */
+  /// @domName WebGLRenderingContext.uniform2iv; @docsEditable true
   void uniform2iv(WebGLUniformLocation location, Int32Array v) native;
 
-  /** @domName WebGLRenderingContext.uniform3f */
+  /// @domName WebGLRenderingContext.uniform3f; @docsEditable true
   void uniform3f(WebGLUniformLocation location, num x, num y, num z) native;
 
-  /** @domName WebGLRenderingContext.uniform3fv */
+  /// @domName WebGLRenderingContext.uniform3fv; @docsEditable true
   void uniform3fv(WebGLUniformLocation location, Float32Array v) native;
 
-  /** @domName WebGLRenderingContext.uniform3i */
+  /// @domName WebGLRenderingContext.uniform3i; @docsEditable true
   void uniform3i(WebGLUniformLocation location, int x, int y, int z) native;
 
-  /** @domName WebGLRenderingContext.uniform3iv */
+  /// @domName WebGLRenderingContext.uniform3iv; @docsEditable true
   void uniform3iv(WebGLUniformLocation location, Int32Array v) native;
 
-  /** @domName WebGLRenderingContext.uniform4f */
+  /// @domName WebGLRenderingContext.uniform4f; @docsEditable true
   void uniform4f(WebGLUniformLocation location, num x, num y, num z, num w) native;
 
-  /** @domName WebGLRenderingContext.uniform4fv */
+  /// @domName WebGLRenderingContext.uniform4fv; @docsEditable true
   void uniform4fv(WebGLUniformLocation location, Float32Array v) native;
 
-  /** @domName WebGLRenderingContext.uniform4i */
+  /// @domName WebGLRenderingContext.uniform4i; @docsEditable true
   void uniform4i(WebGLUniformLocation location, int x, int y, int z, int w) native;
 
-  /** @domName WebGLRenderingContext.uniform4iv */
+  /// @domName WebGLRenderingContext.uniform4iv; @docsEditable true
   void uniform4iv(WebGLUniformLocation location, Int32Array v) native;
 
-  /** @domName WebGLRenderingContext.uniformMatrix2fv */
+  /// @domName WebGLRenderingContext.uniformMatrix2fv; @docsEditable true
   void uniformMatrix2fv(WebGLUniformLocation location, bool transpose, Float32Array array) native;
 
-  /** @domName WebGLRenderingContext.uniformMatrix3fv */
+  /// @domName WebGLRenderingContext.uniformMatrix3fv; @docsEditable true
   void uniformMatrix3fv(WebGLUniformLocation location, bool transpose, Float32Array array) native;
 
-  /** @domName WebGLRenderingContext.uniformMatrix4fv */
+  /// @domName WebGLRenderingContext.uniformMatrix4fv; @docsEditable true
   void uniformMatrix4fv(WebGLUniformLocation location, bool transpose, Float32Array array) native;
 
-  /** @domName WebGLRenderingContext.useProgram */
+  /// @domName WebGLRenderingContext.useProgram; @docsEditable true
   void useProgram(WebGLProgram program) native;
 
-  /** @domName WebGLRenderingContext.validateProgram */
+  /// @domName WebGLRenderingContext.validateProgram; @docsEditable true
   void validateProgram(WebGLProgram program) native;
 
-  /** @domName WebGLRenderingContext.vertexAttrib1f */
+  /// @domName WebGLRenderingContext.vertexAttrib1f; @docsEditable true
   void vertexAttrib1f(int indx, num x) native;
 
-  /** @domName WebGLRenderingContext.vertexAttrib1fv */
+  /// @domName WebGLRenderingContext.vertexAttrib1fv; @docsEditable true
   void vertexAttrib1fv(int indx, Float32Array values) native;
 
-  /** @domName WebGLRenderingContext.vertexAttrib2f */
+  /// @domName WebGLRenderingContext.vertexAttrib2f; @docsEditable true
   void vertexAttrib2f(int indx, num x, num y) native;
 
-  /** @domName WebGLRenderingContext.vertexAttrib2fv */
+  /// @domName WebGLRenderingContext.vertexAttrib2fv; @docsEditable true
   void vertexAttrib2fv(int indx, Float32Array values) native;
 
-  /** @domName WebGLRenderingContext.vertexAttrib3f */
+  /// @domName WebGLRenderingContext.vertexAttrib3f; @docsEditable true
   void vertexAttrib3f(int indx, num x, num y, num z) native;
 
-  /** @domName WebGLRenderingContext.vertexAttrib3fv */
+  /// @domName WebGLRenderingContext.vertexAttrib3fv; @docsEditable true
   void vertexAttrib3fv(int indx, Float32Array values) native;
 
-  /** @domName WebGLRenderingContext.vertexAttrib4f */
+  /// @domName WebGLRenderingContext.vertexAttrib4f; @docsEditable true
   void vertexAttrib4f(int indx, num x, num y, num z, num w) native;
 
-  /** @domName WebGLRenderingContext.vertexAttrib4fv */
+  /// @domName WebGLRenderingContext.vertexAttrib4fv; @docsEditable true
   void vertexAttrib4fv(int indx, Float32Array values) native;
 
-  /** @domName WebGLRenderingContext.vertexAttribPointer */
+  /// @domName WebGLRenderingContext.vertexAttribPointer; @docsEditable true
   void vertexAttribPointer(int indx, int size, int type, bool normalized, int stride, int offset) native;
 
-  /** @domName WebGLRenderingContext.viewport */
+  /// @domName WebGLRenderingContext.viewport; @docsEditable true
   void viewport(int x, int y, int width, int height) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19489,7 +19728,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLShader
+/// @domName WebGLShader; @docsEditable true
 class WebGLShader native "*WebGLShader" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19497,16 +19736,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLShaderPrecisionFormat
+/// @domName WebGLShaderPrecisionFormat; @docsEditable true
 class WebGLShaderPrecisionFormat native "*WebGLShaderPrecisionFormat" {
 
-  /** @domName WebGLShaderPrecisionFormat.precision */
+  /// @domName WebGLShaderPrecisionFormat.precision; @docsEditable true
   final int precision;
 
-  /** @domName WebGLShaderPrecisionFormat.rangeMax */
+  /// @domName WebGLShaderPrecisionFormat.rangeMax; @docsEditable true
   final int rangeMax;
 
-  /** @domName WebGLShaderPrecisionFormat.rangeMin */
+  /// @domName WebGLShaderPrecisionFormat.rangeMin; @docsEditable true
   final int rangeMin;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19514,7 +19753,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLTexture
+/// @domName WebGLTexture; @docsEditable true
 class WebGLTexture native "*WebGLTexture" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19522,7 +19761,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLUniformLocation
+/// @domName WebGLUniformLocation; @docsEditable true
 class WebGLUniformLocation native "*WebGLUniformLocation" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19530,7 +19769,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebGLVertexArrayObjectOES
+/// @domName WebGLVertexArrayObjectOES; @docsEditable true
 class WebGLVertexArrayObjectOES native "*WebGLVertexArrayObjectOES" {
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19538,7 +19777,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitCSSFilterValue
+/// @domName WebKitCSSFilterValue; @docsEditable true
 class WebKitCSSFilterValue extends _CSSValueList native "*WebKitCSSFilterValue" {
 
   static const int CSS_FILTER_BLUR = 10;
@@ -19565,7 +19804,7 @@
 
   static const int CSS_FILTER_SEPIA = 3;
 
-  /** @domName WebKitCSSFilterValue.operationType */
+  /// @domName WebKitCSSFilterValue.operationType; @docsEditable true
   final int operationType;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19573,34 +19812,37 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitNamedFlow
+/// @domName WebKitNamedFlow; @docsEditable true
 class WebKitNamedFlow extends EventTarget native "*WebKitNamedFlow" {
 
-  /** @domName WebKitNamedFlow.firstEmptyRegionIndex */
+  /// @domName WebKitNamedFlow.firstEmptyRegionIndex; @docsEditable true
   final int firstEmptyRegionIndex;
 
-  /** @domName WebKitNamedFlow.name */
+  /// @domName WebKitNamedFlow.name; @docsEditable true
   final String name;
 
-  /** @domName WebKitNamedFlow.overset */
+  /// @domName WebKitNamedFlow.overset; @docsEditable true
   final bool overset;
 
-  /** @domName WebKitNamedFlow.addEventListener */
+  /// @domName WebKitNamedFlow.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName WebKitNamedFlow.dispatchEvent */
+  /// @domName WebKitNamedFlow.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event event) native "dispatchEvent";
 
-  /** @domName WebKitNamedFlow.getContent */
+  /// @domName WebKitNamedFlow.getContent; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   List<Node> getContent() native;
 
-  /** @domName WebKitNamedFlow.getRegions */
+  /// @domName WebKitNamedFlow.getRegions; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   List<Node> getRegions() native;
 
-  /** @domName WebKitNamedFlow.getRegionsByContent */
+  /// @domName WebKitNamedFlow.getRegionsByContent; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
   List<Node> getRegionsByContent(Node contentNode) native;
 
-  /** @domName WebKitNamedFlow.removeEventListener */
+  /// @domName WebKitNamedFlow.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19613,9 +19855,7 @@
 class WebSocket extends EventTarget native "*WebSocket" {
   factory WebSocket(String url) => _WebSocketFactoryProvider.createWebSocket(url);
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   WebSocketEvents get on =>
     new WebSocketEvents(this);
 
@@ -19627,40 +19867,40 @@
 
   static const int OPEN = 1;
 
-  /** @domName WebSocket.URL */
+  /// @domName WebSocket.URL; @docsEditable true
   final String URL;
 
-  /** @domName WebSocket.binaryType */
+  /// @domName WebSocket.binaryType; @docsEditable true
   String binaryType;
 
-  /** @domName WebSocket.bufferedAmount */
+  /// @domName WebSocket.bufferedAmount; @docsEditable true
   final int bufferedAmount;
 
-  /** @domName WebSocket.extensions */
+  /// @domName WebSocket.extensions; @docsEditable true
   final String extensions;
 
-  /** @domName WebSocket.protocol */
+  /// @domName WebSocket.protocol; @docsEditable true
   final String protocol;
 
-  /** @domName WebSocket.readyState */
+  /// @domName WebSocket.readyState; @docsEditable true
   final int readyState;
 
-  /** @domName WebSocket.url */
+  /// @domName WebSocket.url; @docsEditable true
   final String url;
 
-  /** @domName WebSocket.addEventListener */
+  /// @domName WebSocket.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName WebSocket.close */
+  /// @domName WebSocket.close; @docsEditable true
   void close([int code, String reason]) native;
 
-  /** @domName WebSocket.dispatchEvent */
+  /// @domName WebSocket.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName WebSocket.removeEventListener */
+  /// @domName WebSocket.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 
-  /** @domName WebSocket.send */
+  /// @domName WebSocket.send; @docsEditable true
   void send(data) native;
 
 }
@@ -19683,10 +19923,10 @@
 
 class WheelEvent extends MouseEvent native "*WheelEvent" {
 
-  /** @domName WheelEvent.webkitDirectionInvertedFromDevice */
+  /// @domName WheelEvent.webkitDirectionInvertedFromDevice; @docsEditable true
   final bool webkitDirectionInvertedFromDevice;
 
-  /** @domName WheelEvent.initWebKitWheelEvent */
+  /// @domName WheelEvent.initWebKitWheelEvent; @docsEditable true
   void initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) native;
 
 
@@ -19768,18 +20008,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName Worker
+/// @domName Worker; @docsEditable true
 class Worker extends AbstractWorker native "*Worker" {
 
   factory Worker(String scriptUrl) => _WorkerFactoryProvider.createWorker(scriptUrl);
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   WorkerEvents get on =>
     new WorkerEvents(this);
 
-  /** @domName Worker.postMessage */
+  /// @domName Worker.postMessage; @docsEditable true
   void postMessage(/*SerializedScriptValue*/ message, [List messagePorts]) {
     if (?messagePorts) {
       var message_1 = _convertDartToNative_SerializedScriptValue(message);
@@ -19793,7 +20031,7 @@
   void _postMessage_1(message, List messagePorts) native "postMessage";
   void _postMessage_2(message) native "postMessage";
 
-  /** @domName Worker.terminate */
+  /// @domName Worker.terminate; @docsEditable true
   void terminate() native;
 }
 
@@ -19807,12 +20045,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WorkerContext
+/// @domName WorkerContext; @docsEditable true
 class WorkerContext extends EventTarget native "*WorkerContext" {
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   WorkerContextEvents get on =>
     new WorkerContextEvents(this);
 
@@ -19820,67 +20056,67 @@
 
   static const int TEMPORARY = 0;
 
-  /** @domName WorkerContext.indexedDB */
+  /// @domName WorkerContext.indexedDB; @docsEditable true
   final IDBFactory indexedDB;
 
-  /** @domName WorkerContext.location */
+  /// @domName WorkerContext.location; @docsEditable true
   final WorkerLocation location;
 
-  /** @domName WorkerContext.navigator */
+  /// @domName WorkerContext.navigator; @docsEditable true
   final WorkerNavigator navigator;
 
-  /** @domName WorkerContext.self */
+  /// @domName WorkerContext.self; @docsEditable true
   final WorkerContext self;
 
-  /** @domName WorkerContext.webkitIndexedDB */
+  /// @domName WorkerContext.webkitIndexedDB; @docsEditable true
   final IDBFactory webkitIndexedDB;
 
-  /** @domName WorkerContext.webkitNotifications */
+  /// @domName WorkerContext.webkitNotifications; @docsEditable true
   final NotificationCenter webkitNotifications;
 
-  /** @domName WorkerContext.addEventListener */
+  /// @domName WorkerContext.addEventListener; @docsEditable true
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
 
-  /** @domName WorkerContext.clearInterval */
+  /// @domName WorkerContext.clearInterval; @docsEditable true
   void clearInterval(int handle) native;
 
-  /** @domName WorkerContext.clearTimeout */
+  /// @domName WorkerContext.clearTimeout; @docsEditable true
   void clearTimeout(int handle) native;
 
-  /** @domName WorkerContext.close */
+  /// @domName WorkerContext.close; @docsEditable true
   void close() native;
 
-  /** @domName WorkerContext.dispatchEvent */
+  /// @domName WorkerContext.dispatchEvent; @docsEditable true
   bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
 
-  /** @domName WorkerContext.importScripts */
+  /// @domName WorkerContext.importScripts; @docsEditable true
   void importScripts() native;
 
-  /** @domName WorkerContext.openDatabase */
+  /// @domName WorkerContext.openDatabase; @docsEditable true
   Database openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native;
 
-  /** @domName WorkerContext.openDatabaseSync */
+  /// @domName WorkerContext.openDatabaseSync; @docsEditable true
   DatabaseSync openDatabaseSync(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native;
 
-  /** @domName WorkerContext.removeEventListener */
+  /// @domName WorkerContext.removeEventListener; @docsEditable true
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
 
-  /** @domName WorkerContext.setInterval */
+  /// @domName WorkerContext.setInterval; @docsEditable true
   int setInterval(TimeoutHandler handler, int timeout) native;
 
-  /** @domName WorkerContext.setTimeout */
+  /// @domName WorkerContext.setTimeout; @docsEditable true
   int setTimeout(TimeoutHandler handler, int timeout) native;
 
-  /** @domName WorkerContext.webkitRequestFileSystem */
+  /// @domName WorkerContext.webkitRequestFileSystem; @docsEditable true
   void webkitRequestFileSystem(int type, int size, [FileSystemCallback successCallback, ErrorCallback errorCallback]) native;
 
-  /** @domName WorkerContext.webkitRequestFileSystemSync */
+  /// @domName WorkerContext.webkitRequestFileSystemSync; @docsEditable true
   DOMFileSystemSync webkitRequestFileSystemSync(int type, int size) native;
 
-  /** @domName WorkerContext.webkitResolveLocalFileSystemSyncURL */
+  /// @domName WorkerContext.webkitResolveLocalFileSystemSyncURL; @docsEditable true
   EntrySync webkitResolveLocalFileSystemSyncURL(String url) native;
 
-  /** @domName WorkerContext.webkitResolveLocalFileSystemURL */
+  /// @domName WorkerContext.webkitResolveLocalFileSystemURL; @docsEditable true
   void webkitResolveLocalFileSystemURL(String url, EntryCallback successCallback, [ErrorCallback errorCallback]) native;
 }
 
@@ -19894,34 +20130,34 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WorkerLocation
+/// @domName WorkerLocation; @docsEditable true
 class WorkerLocation native "*WorkerLocation" {
 
-  /** @domName WorkerLocation.hash */
+  /// @domName WorkerLocation.hash; @docsEditable true
   final String hash;
 
-  /** @domName WorkerLocation.host */
+  /// @domName WorkerLocation.host; @docsEditable true
   final String host;
 
-  /** @domName WorkerLocation.hostname */
+  /// @domName WorkerLocation.hostname; @docsEditable true
   final String hostname;
 
-  /** @domName WorkerLocation.href */
+  /// @domName WorkerLocation.href; @docsEditable true
   final String href;
 
-  /** @domName WorkerLocation.pathname */
+  /// @domName WorkerLocation.pathname; @docsEditable true
   final String pathname;
 
-  /** @domName WorkerLocation.port */
+  /// @domName WorkerLocation.port; @docsEditable true
   final String port;
 
-  /** @domName WorkerLocation.protocol */
+  /// @domName WorkerLocation.protocol; @docsEditable true
   final String protocol;
 
-  /** @domName WorkerLocation.search */
+  /// @domName WorkerLocation.search; @docsEditable true
   final String search;
 
-  /** @domName WorkerLocation.toString */
+  /// @domName WorkerLocation.toString; @docsEditable true
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19929,22 +20165,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WorkerNavigator
+/// @domName WorkerNavigator; @docsEditable true
 class WorkerNavigator native "*WorkerNavigator" {
 
-  /** @domName WorkerNavigator.appName */
+  /// @domName WorkerNavigator.appName; @docsEditable true
   final String appName;
 
-  /** @domName WorkerNavigator.appVersion */
+  /// @domName WorkerNavigator.appVersion; @docsEditable true
   final String appVersion;
 
-  /** @domName WorkerNavigator.onLine */
+  /// @domName WorkerNavigator.onLine; @docsEditable true
   final bool onLine;
 
-  /** @domName WorkerNavigator.platform */
+  /// @domName WorkerNavigator.platform; @docsEditable true
   final String platform;
 
-  /** @domName WorkerNavigator.userAgent */
+  /// @domName WorkerNavigator.userAgent; @docsEditable true
   final String userAgent;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19952,12 +20188,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XMLSerializer
+/// @domName XMLSerializer; @docsEditable true
 class XMLSerializer native "*XMLSerializer" {
 
   factory XMLSerializer() => _XMLSerializerFactoryProvider.createXMLSerializer();
 
-  /** @domName XMLSerializer.serializeToString */
+  /// @domName XMLSerializer.serializeToString; @docsEditable true
   String serializeToString(Node node) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19965,18 +20201,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XPathEvaluator
+/// @domName XPathEvaluator; @docsEditable true
 class XPathEvaluator native "*XPathEvaluator" {
 
   factory XPathEvaluator() => _XPathEvaluatorFactoryProvider.createXPathEvaluator();
 
-  /** @domName XPathEvaluator.createExpression */
+  /// @domName XPathEvaluator.createExpression; @docsEditable true
   XPathExpression createExpression(String expression, XPathNSResolver resolver) native;
 
-  /** @domName XPathEvaluator.createNSResolver */
+  /// @domName XPathEvaluator.createNSResolver; @docsEditable true
   XPathNSResolver createNSResolver(Node nodeResolver) native;
 
-  /** @domName XPathEvaluator.evaluate */
+  /// @domName XPathEvaluator.evaluate; @docsEditable true
   XPathResult evaluate(String expression, Node contextNode, XPathNSResolver resolver, int type, XPathResult inResult) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -19984,23 +20220,23 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XPathException
+/// @domName XPathException; @docsEditable true
 class XPathException native "*XPathException" {
 
   static const int INVALID_EXPRESSION_ERR = 51;
 
   static const int TYPE_ERR = 52;
 
-  /** @domName XPathException.code */
+  /// @domName XPathException.code; @docsEditable true
   final int code;
 
-  /** @domName XPathException.message */
+  /// @domName XPathException.message; @docsEditable true
   final String message;
 
-  /** @domName XPathException.name */
+  /// @domName XPathException.name; @docsEditable true
   final String name;
 
-  /** @domName XPathException.toString */
+  /// @domName XPathException.toString; @docsEditable true
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20008,10 +20244,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XPathExpression
+/// @domName XPathExpression; @docsEditable true
 class XPathExpression native "*XPathExpression" {
 
-  /** @domName XPathExpression.evaluate */
+  /// @domName XPathExpression.evaluate; @docsEditable true
   XPathResult evaluate(Node contextNode, int type, XPathResult inResult) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20019,10 +20255,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XPathNSResolver
+/// @domName XPathNSResolver; @docsEditable true
 class XPathNSResolver native "*XPathNSResolver" {
 
-  /** @domName XPathNSResolver.lookupNamespaceURI */
+  /// @domName XPathNSResolver.lookupNamespaceURI; @docsEditable true
   String lookupNamespaceURI(String prefix) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20030,7 +20266,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XPathResult
+/// @domName XPathResult; @docsEditable true
 class XPathResult native "*XPathResult" {
 
   static const int ANY_TYPE = 0;
@@ -20053,31 +20289,31 @@
 
   static const int UNORDERED_NODE_SNAPSHOT_TYPE = 6;
 
-  /** @domName XPathResult.booleanValue */
+  /// @domName XPathResult.booleanValue; @docsEditable true
   final bool booleanValue;
 
-  /** @domName XPathResult.invalidIteratorState */
+  /// @domName XPathResult.invalidIteratorState; @docsEditable true
   final bool invalidIteratorState;
 
-  /** @domName XPathResult.numberValue */
+  /// @domName XPathResult.numberValue; @docsEditable true
   final num numberValue;
 
-  /** @domName XPathResult.resultType */
+  /// @domName XPathResult.resultType; @docsEditable true
   final int resultType;
 
-  /** @domName XPathResult.singleNodeValue */
+  /// @domName XPathResult.singleNodeValue; @docsEditable true
   final Node singleNodeValue;
 
-  /** @domName XPathResult.snapshotLength */
+  /// @domName XPathResult.snapshotLength; @docsEditable true
   final int snapshotLength;
 
-  /** @domName XPathResult.stringValue */
+  /// @domName XPathResult.stringValue; @docsEditable true
   final String stringValue;
 
-  /** @domName XPathResult.iterateNext */
+  /// @domName XPathResult.iterateNext; @docsEditable true
   Node iterateNext() native;
 
-  /** @domName XPathResult.snapshotItem */
+  /// @domName XPathResult.snapshotItem; @docsEditable true
   Node snapshotItem(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20085,33 +20321,33 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName XSLTProcessor
+/// @domName XSLTProcessor; @docsEditable true
 class XSLTProcessor native "*XSLTProcessor" {
 
   factory XSLTProcessor() => _XSLTProcessorFactoryProvider.createXSLTProcessor();
 
-  /** @domName XSLTProcessor.clearParameters */
+  /// @domName XSLTProcessor.clearParameters; @docsEditable true
   void clearParameters() native;
 
-  /** @domName XSLTProcessor.getParameter */
+  /// @domName XSLTProcessor.getParameter; @docsEditable true
   String getParameter(String namespaceURI, String localName) native;
 
-  /** @domName XSLTProcessor.importStylesheet */
+  /// @domName XSLTProcessor.importStylesheet; @docsEditable true
   void importStylesheet(Node stylesheet) native;
 
-  /** @domName XSLTProcessor.removeParameter */
+  /// @domName XSLTProcessor.removeParameter; @docsEditable true
   void removeParameter(String namespaceURI, String localName) native;
 
-  /** @domName XSLTProcessor.reset */
+  /// @domName XSLTProcessor.reset; @docsEditable true
   void reset() native;
 
-  /** @domName XSLTProcessor.setParameter */
+  /// @domName XSLTProcessor.setParameter; @docsEditable true
   void setParameter(String namespaceURI, String localName, String value) native;
 
-  /** @domName XSLTProcessor.transformToDocument */
+  /// @domName XSLTProcessor.transformToDocument; @docsEditable true
   Document transformToDocument(Node source) native;
 
-  /** @domName XSLTProcessor.transformToFragment */
+  /// @domName XSLTProcessor.transformToFragment; @docsEditable true
   DocumentFragment transformToFragment(Node source, Document docVal) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20173,10 +20409,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSRuleList
+/// @domName CSSRuleList; @docsEditable true
 class _CSSRuleList implements JavaScriptIndexingBehavior, List<CSSRule> native "*CSSRuleList" {
 
-  /** @domName CSSRuleList.length */
+  /// @domName CSSRuleList.length; @docsEditable true
   final int length;
 
   CSSRule operator[](int index) => JS("CSSRule", "#[#]", this, index);
@@ -20239,6 +20475,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  CSSRule get first => this[0];
+
   CSSRule get last => this[length - 1];
 
   CSSRule removeLast() {
@@ -20262,7 +20500,7 @@
 
   // -- end List<CSSRule> mixins.
 
-  /** @domName CSSRuleList.item */
+  /// @domName CSSRuleList.item; @docsEditable true
   CSSRule item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20270,10 +20508,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName CSSValueList
+/// @domName CSSValueList; @docsEditable true
 class _CSSValueList extends CSSValue implements List<CSSValue>, JavaScriptIndexingBehavior native "*CSSValueList" {
 
-  /** @domName CSSValueList.length */
+  /// @domName CSSValueList.length; @docsEditable true
   final int length;
 
   CSSValue operator[](int index) => JS("CSSValue", "#[#]", this, index);
@@ -20336,6 +20574,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  CSSValue get first => this[0];
+
   CSSValue get last => this[length - 1];
 
   CSSValue removeLast() {
@@ -20359,7 +20599,7 @@
 
   // -- end List<CSSValue> mixins.
 
-  /** @domName CSSValueList.item */
+  /// @domName CSSValueList.item; @docsEditable true
   CSSValue item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20367,10 +20607,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName ClientRectList
+/// @domName ClientRectList; @docsEditable true
 class _ClientRectList implements JavaScriptIndexingBehavior, List<ClientRect> native "*ClientRectList" {
 
-  /** @domName ClientRectList.length */
+  /// @domName ClientRectList.length; @docsEditable true
   final int length;
 
   ClientRect operator[](int index) => JS("ClientRect", "#[#]", this, index);
@@ -20433,6 +20673,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  ClientRect get first => this[0];
+
   ClientRect get last => this[length - 1];
 
   ClientRect removeLast() {
@@ -20456,7 +20698,7 @@
 
   // -- end List<ClientRect> mixins.
 
-  /** @domName ClientRectList.item */
+  /// @domName ClientRectList.item; @docsEditable true
   ClientRect item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20473,10 +20715,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName DOMStringList
+/// @domName DOMStringList; @docsEditable true
 class _DOMStringList implements JavaScriptIndexingBehavior, List<String> native "*DOMStringList" {
 
-  /** @domName DOMStringList.length */
+  /// @domName DOMStringList.length; @docsEditable true
   final int length;
 
   String operator[](int index) => JS("String", "#[#]", this, index);
@@ -20539,6 +20781,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  String get first => this[0];
+
   String get last => this[length - 1];
 
   String removeLast() {
@@ -20562,10 +20806,10 @@
 
   // -- end List<String> mixins.
 
-  /** @domName DOMStringList.contains */
+  /// @domName DOMStringList.contains; @docsEditable true
   bool contains(String string) native;
 
-  /** @domName DOMStringList.item */
+  /// @domName DOMStringList.item; @docsEditable true
   String item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20590,315 +20834,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-class _Elements {
-
-
-  static AnchorElement createAnchorElement([String href]) {
-    AnchorElement _e = document.$dom_createElement("a");
-    if (href != null) _e.href = href;
-    return _e;
-  }
-
-  static AreaElement createAreaElement() {
-    AreaElement _e = document.$dom_createElement("area");
-    return _e;
-  }
-
-  static BRElement createBRElement() {
-    BRElement _e = document.$dom_createElement("br");
-    return _e;
-  }
-
-  static BaseElement createBaseElement() {
-    BaseElement _e = document.$dom_createElement("base");
-    return _e;
-  }
-
-  static BodyElement createBodyElement() {
-    BodyElement _e = document.$dom_createElement("body");
-    return _e;
-  }
-
-  static ButtonElement createButtonElement() {
-    ButtonElement _e = document.$dom_createElement("button");
-    return _e;
-  }
-
-  static CanvasElement createCanvasElement([int width, int height]) {
-    CanvasElement _e = document.$dom_createElement("canvas");
-    if (width != null) _e.width = width;
-    if (height != null) _e.height = height;
-    return _e;
-  }
-
-  static ContentElement createContentElement() {
-    ContentElement _e = document.$dom_createElement("content");
-    return _e;
-  }
-
-  static DListElement createDListElement() {
-    DListElement _e = document.$dom_createElement("dl");
-    return _e;
-  }
-
-  static DataListElement createDataListElement() {
-    DataListElement _e = document.$dom_createElement("datalist");
-    return _e;
-  }
-
-  static DetailsElement createDetailsElement() {
-    DetailsElement _e = document.$dom_createElement("details");
-    return _e;
-  }
-
-  static DivElement createDivElement() {
-    DivElement _e = document.$dom_createElement("div");
-    return _e;
-  }
-
-  static EmbedElement createEmbedElement() {
-    EmbedElement _e = document.$dom_createElement("embed");
-    return _e;
-  }
-
-  static FieldSetElement createFieldSetElement() {
-    FieldSetElement _e = document.$dom_createElement("fieldset");
-    return _e;
-  }
-
-  static FormElement createFormElement() {
-    FormElement _e = document.$dom_createElement("form");
-    return _e;
-  }
-
-  static HRElement createHRElement() {
-    HRElement _e = document.$dom_createElement("hr");
-    return _e;
-  }
-
-  static HeadElement createHeadElement() {
-    HeadElement _e = document.$dom_createElement("head");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h1() {
-    HeadingElement _e = document.$dom_createElement("h1");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h2() {
-    HeadingElement _e = document.$dom_createElement("h2");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h3() {
-    HeadingElement _e = document.$dom_createElement("h3");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h4() {
-    HeadingElement _e = document.$dom_createElement("h4");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h5() {
-    HeadingElement _e = document.$dom_createElement("h5");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h6() {
-    HeadingElement _e = document.$dom_createElement("h6");
-    return _e;
-  }
-
-  static HtmlElement createHtmlElement() {
-    HtmlElement _e = document.$dom_createElement("html");
-    return _e;
-  }
-
-  static IFrameElement createIFrameElement() {
-    IFrameElement _e = document.$dom_createElement("iframe");
-    return _e;
-  }
-
-  static ImageElement createImageElement([String src, int width, int height]) {
-    ImageElement _e = document.$dom_createElement("img");
-    if (src != null) _e.src = src;
-    if (width != null) _e.width = width;
-    if (height != null) _e.height = height;
-    return _e;
-  }
-
-  static InputElement createInputElement([String type]) {
-    InputElement _e = document.$dom_createElement("input");
-    if (type != null) _e.type = type;
-    return _e;
-  }
-
-  static KeygenElement createKeygenElement() {
-    KeygenElement _e = document.$dom_createElement("keygen");
-    return _e;
-  }
-
-  static LIElement createLIElement() {
-    LIElement _e = document.$dom_createElement("li");
-    return _e;
-  }
-
-  static LabelElement createLabelElement() {
-    LabelElement _e = document.$dom_createElement("label");
-    return _e;
-  }
-
-  static LegendElement createLegendElement() {
-    LegendElement _e = document.$dom_createElement("legend");
-    return _e;
-  }
-
-  static LinkElement createLinkElement() {
-    LinkElement _e = document.$dom_createElement("link");
-    return _e;
-  }
-
-  static MapElement createMapElement() {
-    MapElement _e = document.$dom_createElement("map");
-    return _e;
-  }
-
-  static MenuElement createMenuElement() {
-    MenuElement _e = document.$dom_createElement("menu");
-    return _e;
-  }
-
-  static MeterElement createMeterElement() {
-    MeterElement _e = document.$dom_createElement("meter");
-    return _e;
-  }
-
-  static OListElement createOListElement() {
-    OListElement _e = document.$dom_createElement("ol");
-    return _e;
-  }
-
-  static ObjectElement createObjectElement() {
-    ObjectElement _e = document.$dom_createElement("object");
-    return _e;
-  }
-
-  static OptGroupElement createOptGroupElement() {
-    OptGroupElement _e = document.$dom_createElement("optgroup");
-    return _e;
-  }
-
-  static OutputElement createOutputElement() {
-    OutputElement _e = document.$dom_createElement("output");
-    return _e;
-  }
-
-  static ParagraphElement createParagraphElement() {
-    ParagraphElement _e = document.$dom_createElement("p");
-    return _e;
-  }
-
-  static ParamElement createParamElement() {
-    ParamElement _e = document.$dom_createElement("param");
-    return _e;
-  }
-
-  static PreElement createPreElement() {
-    PreElement _e = document.$dom_createElement("pre");
-    return _e;
-  }
-
-  static ProgressElement createProgressElement() {
-    ProgressElement _e = document.$dom_createElement("progress");
-    return _e;
-  }
-
-  static ScriptElement createScriptElement() {
-    ScriptElement _e = document.$dom_createElement("script");
-    return _e;
-  }
-
-  static SelectElement createSelectElement() {
-    SelectElement _e = document.$dom_createElement("select");
-    return _e;
-  }
-
-  static SourceElement createSourceElement() {
-    SourceElement _e = document.$dom_createElement("source");
-    return _e;
-  }
-
-  static SpanElement createSpanElement() {
-    SpanElement _e = document.$dom_createElement("span");
-    return _e;
-  }
-
-  static StyleElement createStyleElement() {
-    StyleElement _e = document.$dom_createElement("style");
-    return _e;
-  }
-
-  static TableCaptionElement createTableCaptionElement() {
-    TableCaptionElement _e = document.$dom_createElement("caption");
-    return _e;
-  }
-
-  static TableCellElement createTableCellElement() {
-    TableCellElement _e = document.$dom_createElement("td");
-    return _e;
-  }
-
-  static TableColElement createTableColElement() {
-    TableColElement _e = document.$dom_createElement("col");
-    return _e;
-  }
-
-  static TableElement createTableElement() {
-    TableElement _e = document.$dom_createElement("table");
-    return _e;
-  }
-
-  static TableRowElement createTableRowElement() {
-    TableRowElement _e = document.$dom_createElement("tr");
-    return _e;
-  }
-
-  static TextAreaElement createTextAreaElement() {
-    TextAreaElement _e = document.$dom_createElement("textarea");
-    return _e;
-  }
-
-  static TitleElement createTitleElement() {
-    TitleElement _e = document.$dom_createElement("title");
-    return _e;
-  }
-
-  static TrackElement createTrackElement() {
-    TrackElement _e = document.$dom_createElement("track");
-    return _e;
-  }
-
-  static UListElement createUListElement() {
-    UListElement _e = document.$dom_createElement("ul");
-    return _e;
-  }
-
-  static VideoElement createVideoElement() {
-    VideoElement _e = document.$dom_createElement("video");
-    return _e;
-  }
-}
-// Copyright (c) 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.
-
-
-/// @domName EntryArray
+/// @domName EntryArray; @docsEditable true
 class _EntryArray implements JavaScriptIndexingBehavior, List<Entry> native "*EntryArray" {
 
-  /** @domName EntryArray.length */
+  /// @domName EntryArray.length; @docsEditable true
   final int length;
 
   Entry operator[](int index) => JS("Entry", "#[#]", this, index);
@@ -20961,6 +20900,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  Entry get first => this[0];
+
   Entry get last => this[length - 1];
 
   Entry removeLast() {
@@ -20984,7 +20925,7 @@
 
   // -- end List<Entry> mixins.
 
-  /** @domName EntryArray.item */
+  /// @domName EntryArray.item; @docsEditable true
   Entry item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -20992,10 +20933,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName EntryArraySync
+/// @domName EntryArraySync; @docsEditable true
 class _EntryArraySync implements JavaScriptIndexingBehavior, List<EntrySync> native "*EntryArraySync" {
 
-  /** @domName EntryArraySync.length */
+  /// @domName EntryArraySync.length; @docsEditable true
   final int length;
 
   EntrySync operator[](int index) => JS("EntrySync", "#[#]", this, index);
@@ -21058,6 +20999,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  EntrySync get first => this[0];
+
   EntrySync get last => this[length - 1];
 
   EntrySync removeLast() {
@@ -21081,7 +21024,7 @@
 
   // -- end List<EntrySync> mixins.
 
-  /** @domName EntryArraySync.item */
+  /// @domName EntryArraySync.item; @docsEditable true
   EntrySync item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21098,10 +21041,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName FileList
+/// @domName FileList; @docsEditable true
 class _FileList implements JavaScriptIndexingBehavior, List<File> native "*FileList" {
 
-  /** @domName FileList.length */
+  /// @domName FileList.length; @docsEditable true
   final int length;
 
   File operator[](int index) => JS("File", "#[#]", this, index);
@@ -21164,6 +21107,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  File get first => this[0];
+
   File get last => this[length - 1];
 
   File removeLast() {
@@ -21187,7 +21132,7 @@
 
   // -- end List<File> mixins.
 
-  /** @domName FileList.item */
+  /// @domName FileList.item; @docsEditable true
   File item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21224,10 +21169,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName GamepadList
+/// @domName GamepadList; @docsEditable true
 class _GamepadList implements JavaScriptIndexingBehavior, List<Gamepad> native "*GamepadList" {
 
-  /** @domName GamepadList.length */
+  /// @domName GamepadList.length; @docsEditable true
   final int length;
 
   Gamepad operator[](int index) => JS("Gamepad", "#[#]", this, index);
@@ -21290,6 +21235,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  Gamepad get first => this[0];
+
   Gamepad get last => this[length - 1];
 
   Gamepad removeLast() {
@@ -21313,7 +21260,7 @@
 
   // -- end List<Gamepad> mixins.
 
-  /** @domName GamepadList.item */
+  /// @domName GamepadList.item; @docsEditable true
   Gamepad item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21326,12 +21273,12 @@
       JS('HttpRequest', 'new XMLHttpRequest()');
 
   static HttpRequest createHttpRequest_get(String url,
-      onSuccess(HttpRequest request)) =>
-      _HttpRequestUtils.get(url, onSuccess, false);
+      onComplete(HttpRequest request)) =>
+      _HttpRequestUtils.get(url, onComplete, false);
 
   static HttpRequest createHttpRequest_getWithCredentials(String url,
-      onSuccess(HttpRequest request)) =>
-      _HttpRequestUtils.get(url, onSuccess, true);
+      onComplete(HttpRequest request)) =>
+      _HttpRequestUtils.get(url, onComplete, true);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -21374,10 +21321,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName MediaStreamList
+/// @domName MediaStreamList; @docsEditable true
 class _MediaStreamList implements JavaScriptIndexingBehavior, List<MediaStream> native "*MediaStreamList" {
 
-  /** @domName MediaStreamList.length */
+  /// @domName MediaStreamList.length; @docsEditable true
   final int length;
 
   MediaStream operator[](int index) => JS("MediaStream", "#[#]", this, index);
@@ -21440,6 +21387,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  MediaStream get first => this[0];
+
   MediaStream get last => this[length - 1];
 
   MediaStream removeLast() {
@@ -21463,7 +21412,7 @@
 
   // -- end List<MediaStream> mixins.
 
-  /** @domName MediaStreamList.item */
+  /// @domName MediaStreamList.item; @docsEditable true
   MediaStream item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21481,20 +21430,10 @@
 
 
 class _MutationObserverFactoryProvider {
-  static MutationObserver createMutationObserver(MutationCallback callback) {
 
-    // This is a hack to cause MutationRecord to appear to be instantiated.
-    //
-    // MutationCallback has a parameter type List<MutationRecord>.  From this we
-    // infer a list is created in the browser, but not the element type, because
-    // other native fields and methods return plain List which is too general
-    // and would imply creating anything.  This statement is a work-around.
-    JS('MutationRecord','0');
-
-    return _createMutationObserver(callback);
-  }
-
-  static MutationObserver _createMutationObserver(MutationCallback callback) native '''
+  @Creates('MutationObserver')
+  @Creates('MutationRecord')
+  static MutationObserver createMutationObserver(MutationCallback callback) native '''
     var constructor =
         window.MutationObserver || window.WebKitMutationObserver ||
         window.MozMutationObserver;
@@ -21516,6 +21455,105 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
+/// @domName NodeList; @docsEditable true
+class _NodeList implements JavaScriptIndexingBehavior, List<Node> native "*NodeList" {
+
+  /// @domName NodeList.length; @docsEditable true
+  final int length;
+
+  Node operator[](int index) => JS("Node", "#[#]", this, index);
+
+  void operator[]=(int index, Node value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<Node> mixins.
+  // Node is the element type.
+
+  // From Iterable<Node>:
+
+  Iterator<Node> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new FixedSizeListIterator<Node>(this);
+  }
+
+  // From Collection<Node>:
+
+  void add(Node value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(Node value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<Node> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(Node element) => _Collections.contains(this, element);
+
+  void forEach(void f(Node element)) => _Collections.forEach(this, f);
+
+  Collection map(f(Node element)) => _Collections.map(this, [], f);
+
+  Collection<Node> filter(bool f(Node element)) =>
+     _Collections.filter(this, <Node>[], f);
+
+  bool every(bool f(Node element)) => _Collections.every(this, f);
+
+  bool some(bool f(Node element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<Node>:
+
+  void sort([Comparator<Node> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(Node element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(Node element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  Node get first => this[0];
+
+  Node get last => this[length - 1];
+
+  Node removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [Node initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<Node> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Node>[]);
+
+  // -- end List<Node> mixins.
+
+  /// @domName NodeList.item; @docsEditable true
+  Node _item(int index) native "item";
+}
+// Copyright (c) 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.
+
+
 class _NotificationFactoryProvider {
   static Notification createNotification(String title, [Map options]) =>
       JS('Notification', 'new Notification(#,#)', title, options);
@@ -21634,10 +21672,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechInputResultList
+/// @domName SpeechInputResultList; @docsEditable true
 class _SpeechInputResultList implements JavaScriptIndexingBehavior, List<SpeechInputResult> native "*SpeechInputResultList" {
 
-  /** @domName SpeechInputResultList.length */
+  /// @domName SpeechInputResultList.length; @docsEditable true
   final int length;
 
   SpeechInputResult operator[](int index) => JS("SpeechInputResult", "#[#]", this, index);
@@ -21700,6 +21738,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  SpeechInputResult get first => this[0];
+
   SpeechInputResult get last => this[length - 1];
 
   SpeechInputResult removeLast() {
@@ -21723,7 +21763,7 @@
 
   // -- end List<SpeechInputResult> mixins.
 
-  /** @domName SpeechInputResultList.item */
+  /// @domName SpeechInputResultList.item; @docsEditable true
   SpeechInputResult item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21740,10 +21780,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SpeechRecognitionResultList
+/// @domName SpeechRecognitionResultList; @docsEditable true
 class _SpeechRecognitionResultList implements JavaScriptIndexingBehavior, List<SpeechRecognitionResult> native "*SpeechRecognitionResultList" {
 
-  /** @domName SpeechRecognitionResultList.length */
+  /// @domName SpeechRecognitionResultList.length; @docsEditable true
   final int length;
 
   SpeechRecognitionResult operator[](int index) => JS("SpeechRecognitionResult", "#[#]", this, index);
@@ -21806,6 +21846,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  SpeechRecognitionResult get first => this[0];
+
   SpeechRecognitionResult get last => this[length - 1];
 
   SpeechRecognitionResult removeLast() {
@@ -21829,7 +21871,7 @@
 
   // -- end List<SpeechRecognitionResult> mixins.
 
-  /** @domName SpeechRecognitionResultList.item */
+  /// @domName SpeechRecognitionResultList.item; @docsEditable true
   SpeechRecognitionResult item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21837,10 +21879,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName StyleSheetList
+/// @domName StyleSheetList; @docsEditable true
 class _StyleSheetList implements JavaScriptIndexingBehavior, List<StyleSheet> native "*StyleSheetList" {
 
-  /** @domName StyleSheetList.length */
+  /// @domName StyleSheetList.length; @docsEditable true
   final int length;
 
   StyleSheet operator[](int index) => JS("StyleSheet", "#[#]", this, index);
@@ -21903,6 +21945,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  StyleSheet get first => this[0];
+
   StyleSheet get last => this[length - 1];
 
   StyleSheet removeLast() {
@@ -21926,7 +21970,7 @@
 
   // -- end List<StyleSheet> mixins.
 
-  /** @domName StyleSheetList.item */
+  /// @domName StyleSheetList.item; @docsEditable true
   StyleSheet item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21936,21 +21980,21 @@
 
 class _TextTrackCueFactoryProvider {
   static TextTrackCue createTextTrackCue(
-      String id, num startTime, num endTime, String text,
+      num startTime, num endTime, String text,
       [String settings, bool pauseOnExit]) {
         if (settings == null) {
           return JS('TextTrackCue',
-                    'new TextTrackCue(#,#,#,#)',
-                    id, startTime, endTime, text);
+                    'new TextTrackCue(#,#,#)',
+                    startTime, endTime, text);
         }
         if (pauseOnExit == null) {
           return JS('TextTrackCue',
-                    'new TextTrackCue(#,#,#,#,#)',
-                    id, startTime, endTime, text, settings);
+                    'new TextTrackCue(#,#,#,#)',
+                    startTime, endTime, text, settings);
         }
         return JS('TextTrackCue',
-                  'new TextTrackCue(#,#,#,#,#,#)',
-                  id, startTime, endTime, text, settings, pauseOnExit);
+                  'new TextTrackCue(#,#,#,#,#)',
+                  startTime, endTime, text, settings, pauseOnExit);
   }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21958,10 +22002,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName WebKitAnimationList
+/// @domName WebKitAnimationList; @docsEditable true
 class _WebKitAnimationList implements JavaScriptIndexingBehavior, List<Animation> native "*WebKitAnimationList" {
 
-  /** @domName WebKitAnimationList.length */
+  /// @domName WebKitAnimationList.length; @docsEditable true
   final int length;
 
   Animation operator[](int index) => JS("Animation", "#[#]", this, index);
@@ -22024,6 +22068,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  Animation get first => this[0];
+
   Animation get last => this[length - 1];
 
   Animation removeLast() {
@@ -22047,7 +22093,7 @@
 
   // -- end List<Animation> mixins.
 
-  /** @domName WebKitAnimationList.item */
+  /// @domName WebKitAnimationList.item; @docsEditable true
   Animation item(int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -22091,19 +22137,88 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
+/**
+ * An object representing the top-level context object for web scripting.
+ *
+ * In a web browser, a [Window] object represents the actual browser window.
+ * In a multi-tabbed browser, each tab has its own [Window] object. A [Window]
+ * is the container that displays a [Document]'s content. All web scripting
+ * happens within the context of a [Window] object.
+ *
+ * **Note:** This class represents any window, whereas [LocalWindow] is
+ * used to access the properties and content of the current window.
+ *
+ * See also:
+ *
+ * * [DOM Window](https://developer.mozilla.org/en-US/docs/DOM/window) from MDN.
+ * * [Window](http://www.w3.org/TR/Window/) from the W3C.
+ */
 abstract class Window {
   // Fields.
+
+  /**
+   * The current location of this window.
+   *
+   *     Location currentLocation = window.location;
+   *     print(currentLocation.href); // 'http://www.example.com:80/'
+   */
   Location get location;
   History get history;
 
+  /**
+   * Indicates whether this window is closed.
+   *
+   *     print(window.closed); // 'false'
+   *     window.close();
+   *     print(window.closed); // 'true'
+   */
   bool get closed;
+
+  /**
+   * A reference to the window that opened this one.
+   *
+   *     Window thisWindow = window;
+   *     Window otherWindow = thisWindow.open('http://www.example.com/', 'foo');
+   *     print(otherWindow.opener == thisWindow); // 'true'
+   */
   Window get opener;
+
+  /**
+   * A reference to the parent of this window.
+   *
+   * If this [Window] has no parent, [parent] will return a reference to
+   * the [Window] itself.
+   *
+   *     IFrameElement myIFrame = new IFrameElement();
+   *     window.document.body.elements.add(myIFrame);
+   *     print(myIframe.contentWindow.parent == window) // 'true'
+   *
+   *     print(window.parent == window) // 'true'
+   */
   Window get parent;
+
+  /**
+   * A reference to the topmost window in the window hierarchy.
+   *
+   * If this [Window] is the topmost [Window], [top] will return a reference to
+   * the [Window] itself.
+   *
+   *     // Add an IFrame to the current window.
+   *     IFrameElement myIFrame = new IFrameElement();
+   *     window.document.body.elements.add(myIFrame);
+   *
+   *     // Add an IFrame inside of the other IFrame.
+   *     IFrameElement innerIFrame = new IFrameElement();
+   *     myIFrame.elements.add(innerIFrame);
+   *
+   *     print(myIframe.contentWindow.top == window) // 'true'
+   *     print(innerIFrame.contentWindow.top == window) // 'true'
+   *
+   *     print(window.top == window) // 'true'
+   */
   Window get top;
 
   // Methods.
-  void focus();
-  void blur();
   void close();
   void postMessage(var message, String targetOrigin, [List messagePorts = null]);
 }
@@ -22384,6 +22499,8 @@
     return _filtered.lastIndexOf(element, start);
   }
 
+  Element get first => _filtered.first;
+
   Element get last => _filtered.last;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24064,7 +24181,7 @@
 Map _convertNativeToDart_Dictionary(object) {
   if (object == null) return null;
   var dict = {};
-  for (final key in JS('List', 'Object.getOwnPropertyNames(#)', object)) {
+  for (final key in JS('=List', 'Object.getOwnPropertyNames(#)', object)) {
     dict[key] = JS('var', '#[#]', object, key);
   }
   return dict;
@@ -24241,7 +24358,7 @@
       var copy = readSlot(slot);
       if (copy != null) {
         if (true == copy) {  // Cycle, so commit to making a copy.
-          copy = JS('List', 'new Array(#)', length);
+          copy = JS('=List', 'new Array(#)', length);
           writeSlot(slot, copy);
         }
         return copy;
@@ -24261,7 +24378,7 @@
           if (!identical(elementCopy, element)) {
             copy = readSlot(slot);   // Cyclic reference may have created it.
             if (true == copy) {
-              copy = JS('List', 'new Array(#)', length);
+              copy = JS('=List', 'new Array(#)', length);
               writeSlot(slot, copy);
             }
             for (int j = 0; j < i; j++) {
@@ -24278,7 +24395,7 @@
         }
       } else {
         // Not a JavaScript Array.  We are forced to make a copy.
-        copy = JS('List', 'new Array(#)', length);
+        copy = JS('=List', 'new Array(#)', length);
         writeSlot(slot, copy);
       }
 
@@ -24358,7 +24475,7 @@
       copy = {};
 
       writeSlot(slot, copy);
-      for (final key in JS('List', 'Object.keys(#)', e)) {
+      for (final key in JS('=List', 'Object.keys(#)', e)) {
         copy[key] = walk(JS('var', '#[#]', e, key));
       }
       return copy;
@@ -24372,7 +24489,7 @@
       int length = e.length;
       // Since a JavaScript Array is an instance of Dart List, we can modify it
       // in-place unless we must copy.
-      copy = mustCopy ? JS('List', 'new Array(#)', length) : e;
+      copy = mustCopy ? JS('=List', 'new Array(#)', length) : e;
       writeSlot(slot, copy);
 
       for (int i = 0; i < length; i++) {
@@ -24398,6 +24515,23 @@
     JS('bool', 'Object.getPrototypeOf(#) === Object.prototype', value);
 bool _isImmutableJavaScriptArray(value) =>
     JS('bool', r'!!(#.immutable$list)', value);
+
+
+
+const String _serializedScriptValue =
+    'num|String|bool|'
+    '=List|=Object|'
+    'Blob|File|ArrayBuffer|ArrayBufferView'
+    // TODO(sra): Add Date, RegExp.
+    ;
+const _annotation_Creates_SerializedScriptValue =
+    const Creates(_serializedScriptValue);
+const _annotation_Returns_SerializedScriptValue =
+    const Returns(_serializedScriptValue);
+
+const String _idbKey = '=List|=Object|num|String';  // TODO(sra): Add Date.
+const _annotation_Creates_IDBKey = const Creates(_idbKey);
+const _annotation_Returns_IDBKey = const Returns(_idbKey);
 // Copyright (c) 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.
@@ -24427,10 +24561,6 @@
   Window get top => _createSafe(JS('Window', '#.top', _window));
 
   // Methods.
-  void focus() => JS('void', '#.focus()', _window);
-
-  void blur() => JS('void', '#.blur()', _window);
-
   void close() => JS('void', '#.close()', _window);
 
   void postMessage(var message, String targetOrigin, [List messagePorts = null]) {
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index c025901..e430f59 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -70,9 +70,7 @@
 class AbstractWorker extends EventTarget {
   AbstractWorker.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   AbstractWorkerEvents get on =>
     new AbstractWorkerEvents(this);
 
@@ -166,10 +164,9 @@
 class AnchorElement extends _Element_Merged {
 
   factory AnchorElement({String href}) {
-    if (!?href) {
-      return _Elements.createAnchorElement();
-    }
-    return _Elements.createAnchorElement(href);
+    var e = document.$dom_createElement("a");
+    if (href != null) e.href = href;
+    return e;
   }
   AnchorElement.internal(): super.internal();
 
@@ -536,7 +533,7 @@
 /// @domName HTMLAreaElement
 class AreaElement extends _Element_Merged {
 
-  factory AreaElement() => _Elements.createAreaElement();
+  factory AreaElement() => document.$dom_createElement("area");
   AreaElement.internal(): super.internal();
 
 
@@ -862,9 +859,7 @@
   factory AudioContext() => _AudioContextFactoryProvider.createAudioContext();
   AudioContext.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   AudioContextEvents get on =>
     new AudioContextEvents(this);
 
@@ -1277,7 +1272,7 @@
 /// @domName HTMLBRElement
 class BRElement extends _Element_Merged {
 
-  factory BRElement() => _Elements.createBRElement();
+  factory BRElement() => document.$dom_createElement("br");
   BRElement.internal(): super.internal();
 
 
@@ -1315,7 +1310,7 @@
 /// @domName HTMLBaseElement
 class BaseElement extends _Element_Merged {
 
-  factory BaseElement() => _Elements.createBaseElement();
+  factory BaseElement() => document.$dom_createElement("base");
   BaseElement.internal(): super.internal();
 
 
@@ -1382,9 +1377,7 @@
 class BatteryManager extends EventTarget {
   BatteryManager.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   BatteryManagerEvents get on =>
     new BatteryManagerEvents(this);
 
@@ -1566,12 +1559,10 @@
 /// @domName HTMLBodyElement
 class BodyElement extends _Element_Merged {
 
-  factory BodyElement() => _Elements.createBodyElement();
+  factory BodyElement() => document.$dom_createElement("body");
   BodyElement.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   BodyElementEvents get on =>
     new BodyElementEvents(this);
 
@@ -1656,7 +1647,7 @@
 /// @domName HTMLButtonElement
 class ButtonElement extends _Element_Merged {
 
-  factory ButtonElement() => _Elements.createButtonElement();
+  factory ButtonElement() => document.$dom_createElement("button");
   ButtonElement.internal(): super.internal();
 
 
@@ -2424,12 +2415,39 @@
 
 
   // TODO(jacobr): generate this list of properties using the existing script.
-    /** Gets the value of "animation" */
+  /** Gets the value of "align-content" */
+  String get alignContent =>
+    getPropertyValue('${_browserPrefix}align-content');
+
+  /** Sets the value of "align-content" */
+  void set alignContent(String value) {
+    setProperty('${_browserPrefix}align-content', value, '');
+  }
+
+  /** Gets the value of "align-items" */
+  String get alignItems =>
+    getPropertyValue('${_browserPrefix}align-items');
+
+  /** Sets the value of "align-items" */
+  void set alignItems(String value) {
+    setProperty('${_browserPrefix}align-items', value, '');
+  }
+
+  /** Gets the value of "align-self" */
+  String get alignSelf =>
+    getPropertyValue('${_browserPrefix}align-self');
+
+  /** Sets the value of "align-self" */
+  void set alignSelf(String value) {
+    setProperty('${_browserPrefix}align-self', value, '');
+  }
+
+  /** Gets the value of "animation" */
   String get animation =>
     getPropertyValue('${_browserPrefix}animation');
 
   /** Sets the value of "animation" */
-  void set animation(var value) {
+  void set animation(String value) {
     setProperty('${_browserPrefix}animation', value, '');
   }
 
@@ -2438,7 +2456,7 @@
     getPropertyValue('${_browserPrefix}animation-delay');
 
   /** Sets the value of "animation-delay" */
-  void set animationDelay(var value) {
+  void set animationDelay(String value) {
     setProperty('${_browserPrefix}animation-delay', value, '');
   }
 
@@ -2447,7 +2465,7 @@
     getPropertyValue('${_browserPrefix}animation-direction');
 
   /** Sets the value of "animation-direction" */
-  void set animationDirection(var value) {
+  void set animationDirection(String value) {
     setProperty('${_browserPrefix}animation-direction', value, '');
   }
 
@@ -2456,7 +2474,7 @@
     getPropertyValue('${_browserPrefix}animation-duration');
 
   /** Sets the value of "animation-duration" */
-  void set animationDuration(var value) {
+  void set animationDuration(String value) {
     setProperty('${_browserPrefix}animation-duration', value, '');
   }
 
@@ -2465,7 +2483,7 @@
     getPropertyValue('${_browserPrefix}animation-fill-mode');
 
   /** Sets the value of "animation-fill-mode" */
-  void set animationFillMode(var value) {
+  void set animationFillMode(String value) {
     setProperty('${_browserPrefix}animation-fill-mode', value, '');
   }
 
@@ -2474,7 +2492,7 @@
     getPropertyValue('${_browserPrefix}animation-iteration-count');
 
   /** Sets the value of "animation-iteration-count" */
-  void set animationIterationCount(var value) {
+  void set animationIterationCount(String value) {
     setProperty('${_browserPrefix}animation-iteration-count', value, '');
   }
 
@@ -2483,7 +2501,7 @@
     getPropertyValue('${_browserPrefix}animation-name');
 
   /** Sets the value of "animation-name" */
-  void set animationName(var value) {
+  void set animationName(String value) {
     setProperty('${_browserPrefix}animation-name', value, '');
   }
 
@@ -2492,7 +2510,7 @@
     getPropertyValue('${_browserPrefix}animation-play-state');
 
   /** Sets the value of "animation-play-state" */
-  void set animationPlayState(var value) {
+  void set animationPlayState(String value) {
     setProperty('${_browserPrefix}animation-play-state', value, '');
   }
 
@@ -2501,25 +2519,43 @@
     getPropertyValue('${_browserPrefix}animation-timing-function');
 
   /** Sets the value of "animation-timing-function" */
-  void set animationTimingFunction(var value) {
+  void set animationTimingFunction(String value) {
     setProperty('${_browserPrefix}animation-timing-function', value, '');
   }
 
+  /** Gets the value of "app-region" */
+  String get appRegion =>
+    getPropertyValue('${_browserPrefix}app-region');
+
+  /** Sets the value of "app-region" */
+  void set appRegion(String value) {
+    setProperty('${_browserPrefix}app-region', value, '');
+  }
+
   /** Gets the value of "appearance" */
   String get appearance =>
     getPropertyValue('${_browserPrefix}appearance');
 
   /** Sets the value of "appearance" */
-  void set appearance(var value) {
+  void set appearance(String value) {
     setProperty('${_browserPrefix}appearance', value, '');
   }
 
+  /** Gets the value of "aspect-ratio" */
+  String get aspectRatio =>
+    getPropertyValue('${_browserPrefix}aspect-ratio');
+
+  /** Sets the value of "aspect-ratio" */
+  void set aspectRatio(String value) {
+    setProperty('${_browserPrefix}aspect-ratio', value, '');
+  }
+
   /** Gets the value of "backface-visibility" */
   String get backfaceVisibility =>
     getPropertyValue('${_browserPrefix}backface-visibility');
 
   /** Sets the value of "backface-visibility" */
-  void set backfaceVisibility(var value) {
+  void set backfaceVisibility(String value) {
     setProperty('${_browserPrefix}backface-visibility', value, '');
   }
 
@@ -2528,7 +2564,7 @@
     getPropertyValue('background');
 
   /** Sets the value of "background" */
-  void set background(var value) {
+  void set background(String value) {
     setProperty('background', value, '');
   }
 
@@ -2537,7 +2573,7 @@
     getPropertyValue('background-attachment');
 
   /** Sets the value of "background-attachment" */
-  void set backgroundAttachment(var value) {
+  void set backgroundAttachment(String value) {
     setProperty('background-attachment', value, '');
   }
 
@@ -2546,7 +2582,7 @@
     getPropertyValue('background-clip');
 
   /** Sets the value of "background-clip" */
-  void set backgroundClip(var value) {
+  void set backgroundClip(String value) {
     setProperty('background-clip', value, '');
   }
 
@@ -2555,7 +2591,7 @@
     getPropertyValue('background-color');
 
   /** Sets the value of "background-color" */
-  void set backgroundColor(var value) {
+  void set backgroundColor(String value) {
     setProperty('background-color', value, '');
   }
 
@@ -2564,7 +2600,7 @@
     getPropertyValue('${_browserPrefix}background-composite');
 
   /** Sets the value of "background-composite" */
-  void set backgroundComposite(var value) {
+  void set backgroundComposite(String value) {
     setProperty('${_browserPrefix}background-composite', value, '');
   }
 
@@ -2573,7 +2609,7 @@
     getPropertyValue('background-image');
 
   /** Sets the value of "background-image" */
-  void set backgroundImage(var value) {
+  void set backgroundImage(String value) {
     setProperty('background-image', value, '');
   }
 
@@ -2582,7 +2618,7 @@
     getPropertyValue('background-origin');
 
   /** Sets the value of "background-origin" */
-  void set backgroundOrigin(var value) {
+  void set backgroundOrigin(String value) {
     setProperty('background-origin', value, '');
   }
 
@@ -2591,7 +2627,7 @@
     getPropertyValue('background-position');
 
   /** Sets the value of "background-position" */
-  void set backgroundPosition(var value) {
+  void set backgroundPosition(String value) {
     setProperty('background-position', value, '');
   }
 
@@ -2600,7 +2636,7 @@
     getPropertyValue('background-position-x');
 
   /** Sets the value of "background-position-x" */
-  void set backgroundPositionX(var value) {
+  void set backgroundPositionX(String value) {
     setProperty('background-position-x', value, '');
   }
 
@@ -2609,7 +2645,7 @@
     getPropertyValue('background-position-y');
 
   /** Sets the value of "background-position-y" */
-  void set backgroundPositionY(var value) {
+  void set backgroundPositionY(String value) {
     setProperty('background-position-y', value, '');
   }
 
@@ -2618,7 +2654,7 @@
     getPropertyValue('background-repeat');
 
   /** Sets the value of "background-repeat" */
-  void set backgroundRepeat(var value) {
+  void set backgroundRepeat(String value) {
     setProperty('background-repeat', value, '');
   }
 
@@ -2627,7 +2663,7 @@
     getPropertyValue('background-repeat-x');
 
   /** Sets the value of "background-repeat-x" */
-  void set backgroundRepeatX(var value) {
+  void set backgroundRepeatX(String value) {
     setProperty('background-repeat-x', value, '');
   }
 
@@ -2636,7 +2672,7 @@
     getPropertyValue('background-repeat-y');
 
   /** Sets the value of "background-repeat-y" */
-  void set backgroundRepeatY(var value) {
+  void set backgroundRepeatY(String value) {
     setProperty('background-repeat-y', value, '');
   }
 
@@ -2645,16 +2681,25 @@
     getPropertyValue('background-size');
 
   /** Sets the value of "background-size" */
-  void set backgroundSize(var value) {
+  void set backgroundSize(String value) {
     setProperty('background-size', value, '');
   }
 
+  /** Gets the value of "blend-mode" */
+  String get blendMode =>
+    getPropertyValue('${_browserPrefix}blend-mode');
+
+  /** Sets the value of "blend-mode" */
+  void set blendMode(String value) {
+    setProperty('${_browserPrefix}blend-mode', value, '');
+  }
+
   /** Gets the value of "border" */
   String get border =>
     getPropertyValue('border');
 
   /** Sets the value of "border" */
-  void set border(var value) {
+  void set border(String value) {
     setProperty('border', value, '');
   }
 
@@ -2663,7 +2708,7 @@
     getPropertyValue('${_browserPrefix}border-after');
 
   /** Sets the value of "border-after" */
-  void set borderAfter(var value) {
+  void set borderAfter(String value) {
     setProperty('${_browserPrefix}border-after', value, '');
   }
 
@@ -2672,7 +2717,7 @@
     getPropertyValue('${_browserPrefix}border-after-color');
 
   /** Sets the value of "border-after-color" */
-  void set borderAfterColor(var value) {
+  void set borderAfterColor(String value) {
     setProperty('${_browserPrefix}border-after-color', value, '');
   }
 
@@ -2681,7 +2726,7 @@
     getPropertyValue('${_browserPrefix}border-after-style');
 
   /** Sets the value of "border-after-style" */
-  void set borderAfterStyle(var value) {
+  void set borderAfterStyle(String value) {
     setProperty('${_browserPrefix}border-after-style', value, '');
   }
 
@@ -2690,7 +2735,7 @@
     getPropertyValue('${_browserPrefix}border-after-width');
 
   /** Sets the value of "border-after-width" */
-  void set borderAfterWidth(var value) {
+  void set borderAfterWidth(String value) {
     setProperty('${_browserPrefix}border-after-width', value, '');
   }
 
@@ -2699,7 +2744,7 @@
     getPropertyValue('${_browserPrefix}border-before');
 
   /** Sets the value of "border-before" */
-  void set borderBefore(var value) {
+  void set borderBefore(String value) {
     setProperty('${_browserPrefix}border-before', value, '');
   }
 
@@ -2708,7 +2753,7 @@
     getPropertyValue('${_browserPrefix}border-before-color');
 
   /** Sets the value of "border-before-color" */
-  void set borderBeforeColor(var value) {
+  void set borderBeforeColor(String value) {
     setProperty('${_browserPrefix}border-before-color', value, '');
   }
 
@@ -2717,7 +2762,7 @@
     getPropertyValue('${_browserPrefix}border-before-style');
 
   /** Sets the value of "border-before-style" */
-  void set borderBeforeStyle(var value) {
+  void set borderBeforeStyle(String value) {
     setProperty('${_browserPrefix}border-before-style', value, '');
   }
 
@@ -2726,7 +2771,7 @@
     getPropertyValue('${_browserPrefix}border-before-width');
 
   /** Sets the value of "border-before-width" */
-  void set borderBeforeWidth(var value) {
+  void set borderBeforeWidth(String value) {
     setProperty('${_browserPrefix}border-before-width', value, '');
   }
 
@@ -2735,7 +2780,7 @@
     getPropertyValue('border-bottom');
 
   /** Sets the value of "border-bottom" */
-  void set borderBottom(var value) {
+  void set borderBottom(String value) {
     setProperty('border-bottom', value, '');
   }
 
@@ -2744,7 +2789,7 @@
     getPropertyValue('border-bottom-color');
 
   /** Sets the value of "border-bottom-color" */
-  void set borderBottomColor(var value) {
+  void set borderBottomColor(String value) {
     setProperty('border-bottom-color', value, '');
   }
 
@@ -2753,7 +2798,7 @@
     getPropertyValue('border-bottom-left-radius');
 
   /** Sets the value of "border-bottom-left-radius" */
-  void set borderBottomLeftRadius(var value) {
+  void set borderBottomLeftRadius(String value) {
     setProperty('border-bottom-left-radius', value, '');
   }
 
@@ -2762,7 +2807,7 @@
     getPropertyValue('border-bottom-right-radius');
 
   /** Sets the value of "border-bottom-right-radius" */
-  void set borderBottomRightRadius(var value) {
+  void set borderBottomRightRadius(String value) {
     setProperty('border-bottom-right-radius', value, '');
   }
 
@@ -2771,7 +2816,7 @@
     getPropertyValue('border-bottom-style');
 
   /** Sets the value of "border-bottom-style" */
-  void set borderBottomStyle(var value) {
+  void set borderBottomStyle(String value) {
     setProperty('border-bottom-style', value, '');
   }
 
@@ -2780,7 +2825,7 @@
     getPropertyValue('border-bottom-width');
 
   /** Sets the value of "border-bottom-width" */
-  void set borderBottomWidth(var value) {
+  void set borderBottomWidth(String value) {
     setProperty('border-bottom-width', value, '');
   }
 
@@ -2789,7 +2834,7 @@
     getPropertyValue('border-collapse');
 
   /** Sets the value of "border-collapse" */
-  void set borderCollapse(var value) {
+  void set borderCollapse(String value) {
     setProperty('border-collapse', value, '');
   }
 
@@ -2798,7 +2843,7 @@
     getPropertyValue('border-color');
 
   /** Sets the value of "border-color" */
-  void set borderColor(var value) {
+  void set borderColor(String value) {
     setProperty('border-color', value, '');
   }
 
@@ -2807,7 +2852,7 @@
     getPropertyValue('${_browserPrefix}border-end');
 
   /** Sets the value of "border-end" */
-  void set borderEnd(var value) {
+  void set borderEnd(String value) {
     setProperty('${_browserPrefix}border-end', value, '');
   }
 
@@ -2816,7 +2861,7 @@
     getPropertyValue('${_browserPrefix}border-end-color');
 
   /** Sets the value of "border-end-color" */
-  void set borderEndColor(var value) {
+  void set borderEndColor(String value) {
     setProperty('${_browserPrefix}border-end-color', value, '');
   }
 
@@ -2825,7 +2870,7 @@
     getPropertyValue('${_browserPrefix}border-end-style');
 
   /** Sets the value of "border-end-style" */
-  void set borderEndStyle(var value) {
+  void set borderEndStyle(String value) {
     setProperty('${_browserPrefix}border-end-style', value, '');
   }
 
@@ -2834,7 +2879,7 @@
     getPropertyValue('${_browserPrefix}border-end-width');
 
   /** Sets the value of "border-end-width" */
-  void set borderEndWidth(var value) {
+  void set borderEndWidth(String value) {
     setProperty('${_browserPrefix}border-end-width', value, '');
   }
 
@@ -2843,7 +2888,7 @@
     getPropertyValue('${_browserPrefix}border-fit');
 
   /** Sets the value of "border-fit" */
-  void set borderFit(var value) {
+  void set borderFit(String value) {
     setProperty('${_browserPrefix}border-fit', value, '');
   }
 
@@ -2852,7 +2897,7 @@
     getPropertyValue('${_browserPrefix}border-horizontal-spacing');
 
   /** Sets the value of "border-horizontal-spacing" */
-  void set borderHorizontalSpacing(var value) {
+  void set borderHorizontalSpacing(String value) {
     setProperty('${_browserPrefix}border-horizontal-spacing', value, '');
   }
 
@@ -2861,7 +2906,7 @@
     getPropertyValue('border-image');
 
   /** Sets the value of "border-image" */
-  void set borderImage(var value) {
+  void set borderImage(String value) {
     setProperty('border-image', value, '');
   }
 
@@ -2870,7 +2915,7 @@
     getPropertyValue('border-image-outset');
 
   /** Sets the value of "border-image-outset" */
-  void set borderImageOutset(var value) {
+  void set borderImageOutset(String value) {
     setProperty('border-image-outset', value, '');
   }
 
@@ -2879,7 +2924,7 @@
     getPropertyValue('border-image-repeat');
 
   /** Sets the value of "border-image-repeat" */
-  void set borderImageRepeat(var value) {
+  void set borderImageRepeat(String value) {
     setProperty('border-image-repeat', value, '');
   }
 
@@ -2888,7 +2933,7 @@
     getPropertyValue('border-image-slice');
 
   /** Sets the value of "border-image-slice" */
-  void set borderImageSlice(var value) {
+  void set borderImageSlice(String value) {
     setProperty('border-image-slice', value, '');
   }
 
@@ -2897,7 +2942,7 @@
     getPropertyValue('border-image-source');
 
   /** Sets the value of "border-image-source" */
-  void set borderImageSource(var value) {
+  void set borderImageSource(String value) {
     setProperty('border-image-source', value, '');
   }
 
@@ -2906,7 +2951,7 @@
     getPropertyValue('border-image-width');
 
   /** Sets the value of "border-image-width" */
-  void set borderImageWidth(var value) {
+  void set borderImageWidth(String value) {
     setProperty('border-image-width', value, '');
   }
 
@@ -2915,7 +2960,7 @@
     getPropertyValue('border-left');
 
   /** Sets the value of "border-left" */
-  void set borderLeft(var value) {
+  void set borderLeft(String value) {
     setProperty('border-left', value, '');
   }
 
@@ -2924,7 +2969,7 @@
     getPropertyValue('border-left-color');
 
   /** Sets the value of "border-left-color" */
-  void set borderLeftColor(var value) {
+  void set borderLeftColor(String value) {
     setProperty('border-left-color', value, '');
   }
 
@@ -2933,7 +2978,7 @@
     getPropertyValue('border-left-style');
 
   /** Sets the value of "border-left-style" */
-  void set borderLeftStyle(var value) {
+  void set borderLeftStyle(String value) {
     setProperty('border-left-style', value, '');
   }
 
@@ -2942,7 +2987,7 @@
     getPropertyValue('border-left-width');
 
   /** Sets the value of "border-left-width" */
-  void set borderLeftWidth(var value) {
+  void set borderLeftWidth(String value) {
     setProperty('border-left-width', value, '');
   }
 
@@ -2951,7 +2996,7 @@
     getPropertyValue('border-radius');
 
   /** Sets the value of "border-radius" */
-  void set borderRadius(var value) {
+  void set borderRadius(String value) {
     setProperty('border-radius', value, '');
   }
 
@@ -2960,7 +3005,7 @@
     getPropertyValue('border-right');
 
   /** Sets the value of "border-right" */
-  void set borderRight(var value) {
+  void set borderRight(String value) {
     setProperty('border-right', value, '');
   }
 
@@ -2969,7 +3014,7 @@
     getPropertyValue('border-right-color');
 
   /** Sets the value of "border-right-color" */
-  void set borderRightColor(var value) {
+  void set borderRightColor(String value) {
     setProperty('border-right-color', value, '');
   }
 
@@ -2978,7 +3023,7 @@
     getPropertyValue('border-right-style');
 
   /** Sets the value of "border-right-style" */
-  void set borderRightStyle(var value) {
+  void set borderRightStyle(String value) {
     setProperty('border-right-style', value, '');
   }
 
@@ -2987,7 +3032,7 @@
     getPropertyValue('border-right-width');
 
   /** Sets the value of "border-right-width" */
-  void set borderRightWidth(var value) {
+  void set borderRightWidth(String value) {
     setProperty('border-right-width', value, '');
   }
 
@@ -2996,7 +3041,7 @@
     getPropertyValue('border-spacing');
 
   /** Sets the value of "border-spacing" */
-  void set borderSpacing(var value) {
+  void set borderSpacing(String value) {
     setProperty('border-spacing', value, '');
   }
 
@@ -3005,7 +3050,7 @@
     getPropertyValue('${_browserPrefix}border-start');
 
   /** Sets the value of "border-start" */
-  void set borderStart(var value) {
+  void set borderStart(String value) {
     setProperty('${_browserPrefix}border-start', value, '');
   }
 
@@ -3014,7 +3059,7 @@
     getPropertyValue('${_browserPrefix}border-start-color');
 
   /** Sets the value of "border-start-color" */
-  void set borderStartColor(var value) {
+  void set borderStartColor(String value) {
     setProperty('${_browserPrefix}border-start-color', value, '');
   }
 
@@ -3023,7 +3068,7 @@
     getPropertyValue('${_browserPrefix}border-start-style');
 
   /** Sets the value of "border-start-style" */
-  void set borderStartStyle(var value) {
+  void set borderStartStyle(String value) {
     setProperty('${_browserPrefix}border-start-style', value, '');
   }
 
@@ -3032,7 +3077,7 @@
     getPropertyValue('${_browserPrefix}border-start-width');
 
   /** Sets the value of "border-start-width" */
-  void set borderStartWidth(var value) {
+  void set borderStartWidth(String value) {
     setProperty('${_browserPrefix}border-start-width', value, '');
   }
 
@@ -3041,7 +3086,7 @@
     getPropertyValue('border-style');
 
   /** Sets the value of "border-style" */
-  void set borderStyle(var value) {
+  void set borderStyle(String value) {
     setProperty('border-style', value, '');
   }
 
@@ -3050,7 +3095,7 @@
     getPropertyValue('border-top');
 
   /** Sets the value of "border-top" */
-  void set borderTop(var value) {
+  void set borderTop(String value) {
     setProperty('border-top', value, '');
   }
 
@@ -3059,7 +3104,7 @@
     getPropertyValue('border-top-color');
 
   /** Sets the value of "border-top-color" */
-  void set borderTopColor(var value) {
+  void set borderTopColor(String value) {
     setProperty('border-top-color', value, '');
   }
 
@@ -3068,7 +3113,7 @@
     getPropertyValue('border-top-left-radius');
 
   /** Sets the value of "border-top-left-radius" */
-  void set borderTopLeftRadius(var value) {
+  void set borderTopLeftRadius(String value) {
     setProperty('border-top-left-radius', value, '');
   }
 
@@ -3077,7 +3122,7 @@
     getPropertyValue('border-top-right-radius');
 
   /** Sets the value of "border-top-right-radius" */
-  void set borderTopRightRadius(var value) {
+  void set borderTopRightRadius(String value) {
     setProperty('border-top-right-radius', value, '');
   }
 
@@ -3086,7 +3131,7 @@
     getPropertyValue('border-top-style');
 
   /** Sets the value of "border-top-style" */
-  void set borderTopStyle(var value) {
+  void set borderTopStyle(String value) {
     setProperty('border-top-style', value, '');
   }
 
@@ -3095,7 +3140,7 @@
     getPropertyValue('border-top-width');
 
   /** Sets the value of "border-top-width" */
-  void set borderTopWidth(var value) {
+  void set borderTopWidth(String value) {
     setProperty('border-top-width', value, '');
   }
 
@@ -3104,7 +3149,7 @@
     getPropertyValue('${_browserPrefix}border-vertical-spacing');
 
   /** Sets the value of "border-vertical-spacing" */
-  void set borderVerticalSpacing(var value) {
+  void set borderVerticalSpacing(String value) {
     setProperty('${_browserPrefix}border-vertical-spacing', value, '');
   }
 
@@ -3113,7 +3158,7 @@
     getPropertyValue('border-width');
 
   /** Sets the value of "border-width" */
-  void set borderWidth(var value) {
+  void set borderWidth(String value) {
     setProperty('border-width', value, '');
   }
 
@@ -3122,7 +3167,7 @@
     getPropertyValue('bottom');
 
   /** Sets the value of "bottom" */
-  void set bottom(var value) {
+  void set bottom(String value) {
     setProperty('bottom', value, '');
   }
 
@@ -3131,16 +3176,25 @@
     getPropertyValue('${_browserPrefix}box-align');
 
   /** Sets the value of "box-align" */
-  void set boxAlign(var value) {
+  void set boxAlign(String value) {
     setProperty('${_browserPrefix}box-align', value, '');
   }
 
+  /** Gets the value of "box-decoration-break" */
+  String get boxDecorationBreak =>
+    getPropertyValue('${_browserPrefix}box-decoration-break');
+
+  /** Sets the value of "box-decoration-break" */
+  void set boxDecorationBreak(String value) {
+    setProperty('${_browserPrefix}box-decoration-break', value, '');
+  }
+
   /** Gets the value of "box-direction" */
   String get boxDirection =>
     getPropertyValue('${_browserPrefix}box-direction');
 
   /** Sets the value of "box-direction" */
-  void set boxDirection(var value) {
+  void set boxDirection(String value) {
     setProperty('${_browserPrefix}box-direction', value, '');
   }
 
@@ -3149,7 +3203,7 @@
     getPropertyValue('${_browserPrefix}box-flex');
 
   /** Sets the value of "box-flex" */
-  void set boxFlex(var value) {
+  void set boxFlex(String value) {
     setProperty('${_browserPrefix}box-flex', value, '');
   }
 
@@ -3158,7 +3212,7 @@
     getPropertyValue('${_browserPrefix}box-flex-group');
 
   /** Sets the value of "box-flex-group" */
-  void set boxFlexGroup(var value) {
+  void set boxFlexGroup(String value) {
     setProperty('${_browserPrefix}box-flex-group', value, '');
   }
 
@@ -3167,7 +3221,7 @@
     getPropertyValue('${_browserPrefix}box-lines');
 
   /** Sets the value of "box-lines" */
-  void set boxLines(var value) {
+  void set boxLines(String value) {
     setProperty('${_browserPrefix}box-lines', value, '');
   }
 
@@ -3176,7 +3230,7 @@
     getPropertyValue('${_browserPrefix}box-ordinal-group');
 
   /** Sets the value of "box-ordinal-group" */
-  void set boxOrdinalGroup(var value) {
+  void set boxOrdinalGroup(String value) {
     setProperty('${_browserPrefix}box-ordinal-group', value, '');
   }
 
@@ -3185,7 +3239,7 @@
     getPropertyValue('${_browserPrefix}box-orient');
 
   /** Sets the value of "box-orient" */
-  void set boxOrient(var value) {
+  void set boxOrient(String value) {
     setProperty('${_browserPrefix}box-orient', value, '');
   }
 
@@ -3194,7 +3248,7 @@
     getPropertyValue('${_browserPrefix}box-pack');
 
   /** Sets the value of "box-pack" */
-  void set boxPack(var value) {
+  void set boxPack(String value) {
     setProperty('${_browserPrefix}box-pack', value, '');
   }
 
@@ -3203,7 +3257,7 @@
     getPropertyValue('${_browserPrefix}box-reflect');
 
   /** Sets the value of "box-reflect" */
-  void set boxReflect(var value) {
+  void set boxReflect(String value) {
     setProperty('${_browserPrefix}box-reflect', value, '');
   }
 
@@ -3212,7 +3266,7 @@
     getPropertyValue('box-shadow');
 
   /** Sets the value of "box-shadow" */
-  void set boxShadow(var value) {
+  void set boxShadow(String value) {
     setProperty('box-shadow', value, '');
   }
 
@@ -3221,7 +3275,7 @@
     getPropertyValue('box-sizing');
 
   /** Sets the value of "box-sizing" */
-  void set boxSizing(var value) {
+  void set boxSizing(String value) {
     setProperty('box-sizing', value, '');
   }
 
@@ -3230,7 +3284,7 @@
     getPropertyValue('caption-side');
 
   /** Sets the value of "caption-side" */
-  void set captionSide(var value) {
+  void set captionSide(String value) {
     setProperty('caption-side', value, '');
   }
 
@@ -3239,7 +3293,7 @@
     getPropertyValue('clear');
 
   /** Sets the value of "clear" */
-  void set clear(var value) {
+  void set clear(String value) {
     setProperty('clear', value, '');
   }
 
@@ -3248,16 +3302,25 @@
     getPropertyValue('clip');
 
   /** Sets the value of "clip" */
-  void set clip(var value) {
+  void set clip(String value) {
     setProperty('clip', value, '');
   }
 
+  /** Gets the value of "clip-path" */
+  String get clipPath =>
+    getPropertyValue('${_browserPrefix}clip-path');
+
+  /** Sets the value of "clip-path" */
+  void set clipPath(String value) {
+    setProperty('${_browserPrefix}clip-path', value, '');
+  }
+
   /** Gets the value of "color" */
   String get color =>
     getPropertyValue('color');
 
   /** Sets the value of "color" */
-  void set color(var value) {
+  void set color(String value) {
     setProperty('color', value, '');
   }
 
@@ -3266,16 +3329,25 @@
     getPropertyValue('${_browserPrefix}color-correction');
 
   /** Sets the value of "color-correction" */
-  void set colorCorrection(var value) {
+  void set colorCorrection(String value) {
     setProperty('${_browserPrefix}color-correction', value, '');
   }
 
+  /** Gets the value of "column-axis" */
+  String get columnAxis =>
+    getPropertyValue('${_browserPrefix}column-axis');
+
+  /** Sets the value of "column-axis" */
+  void set columnAxis(String value) {
+    setProperty('${_browserPrefix}column-axis', value, '');
+  }
+
   /** Gets the value of "column-break-after" */
   String get columnBreakAfter =>
     getPropertyValue('${_browserPrefix}column-break-after');
 
   /** Sets the value of "column-break-after" */
-  void set columnBreakAfter(var value) {
+  void set columnBreakAfter(String value) {
     setProperty('${_browserPrefix}column-break-after', value, '');
   }
 
@@ -3284,7 +3356,7 @@
     getPropertyValue('${_browserPrefix}column-break-before');
 
   /** Sets the value of "column-break-before" */
-  void set columnBreakBefore(var value) {
+  void set columnBreakBefore(String value) {
     setProperty('${_browserPrefix}column-break-before', value, '');
   }
 
@@ -3293,7 +3365,7 @@
     getPropertyValue('${_browserPrefix}column-break-inside');
 
   /** Sets the value of "column-break-inside" */
-  void set columnBreakInside(var value) {
+  void set columnBreakInside(String value) {
     setProperty('${_browserPrefix}column-break-inside', value, '');
   }
 
@@ -3302,7 +3374,7 @@
     getPropertyValue('${_browserPrefix}column-count');
 
   /** Sets the value of "column-count" */
-  void set columnCount(var value) {
+  void set columnCount(String value) {
     setProperty('${_browserPrefix}column-count', value, '');
   }
 
@@ -3311,16 +3383,25 @@
     getPropertyValue('${_browserPrefix}column-gap');
 
   /** Sets the value of "column-gap" */
-  void set columnGap(var value) {
+  void set columnGap(String value) {
     setProperty('${_browserPrefix}column-gap', value, '');
   }
 
+  /** Gets the value of "column-progression" */
+  String get columnProgression =>
+    getPropertyValue('${_browserPrefix}column-progression');
+
+  /** Sets the value of "column-progression" */
+  void set columnProgression(String value) {
+    setProperty('${_browserPrefix}column-progression', value, '');
+  }
+
   /** Gets the value of "column-rule" */
   String get columnRule =>
     getPropertyValue('${_browserPrefix}column-rule');
 
   /** Sets the value of "column-rule" */
-  void set columnRule(var value) {
+  void set columnRule(String value) {
     setProperty('${_browserPrefix}column-rule', value, '');
   }
 
@@ -3329,7 +3410,7 @@
     getPropertyValue('${_browserPrefix}column-rule-color');
 
   /** Sets the value of "column-rule-color" */
-  void set columnRuleColor(var value) {
+  void set columnRuleColor(String value) {
     setProperty('${_browserPrefix}column-rule-color', value, '');
   }
 
@@ -3338,7 +3419,7 @@
     getPropertyValue('${_browserPrefix}column-rule-style');
 
   /** Sets the value of "column-rule-style" */
-  void set columnRuleStyle(var value) {
+  void set columnRuleStyle(String value) {
     setProperty('${_browserPrefix}column-rule-style', value, '');
   }
 
@@ -3347,7 +3428,7 @@
     getPropertyValue('${_browserPrefix}column-rule-width');
 
   /** Sets the value of "column-rule-width" */
-  void set columnRuleWidth(var value) {
+  void set columnRuleWidth(String value) {
     setProperty('${_browserPrefix}column-rule-width', value, '');
   }
 
@@ -3356,7 +3437,7 @@
     getPropertyValue('${_browserPrefix}column-span');
 
   /** Sets the value of "column-span" */
-  void set columnSpan(var value) {
+  void set columnSpan(String value) {
     setProperty('${_browserPrefix}column-span', value, '');
   }
 
@@ -3365,7 +3446,7 @@
     getPropertyValue('${_browserPrefix}column-width');
 
   /** Sets the value of "column-width" */
-  void set columnWidth(var value) {
+  void set columnWidth(String value) {
     setProperty('${_browserPrefix}column-width', value, '');
   }
 
@@ -3374,7 +3455,7 @@
     getPropertyValue('${_browserPrefix}columns');
 
   /** Sets the value of "columns" */
-  void set columns(var value) {
+  void set columns(String value) {
     setProperty('${_browserPrefix}columns', value, '');
   }
 
@@ -3383,7 +3464,7 @@
     getPropertyValue('content');
 
   /** Sets the value of "content" */
-  void set content(var value) {
+  void set content(String value) {
     setProperty('content', value, '');
   }
 
@@ -3392,7 +3473,7 @@
     getPropertyValue('counter-increment');
 
   /** Sets the value of "counter-increment" */
-  void set counterIncrement(var value) {
+  void set counterIncrement(String value) {
     setProperty('counter-increment', value, '');
   }
 
@@ -3401,7 +3482,7 @@
     getPropertyValue('counter-reset');
 
   /** Sets the value of "counter-reset" */
-  void set counterReset(var value) {
+  void set counterReset(String value) {
     setProperty('counter-reset', value, '');
   }
 
@@ -3410,16 +3491,25 @@
     getPropertyValue('cursor');
 
   /** Sets the value of "cursor" */
-  void set cursor(var value) {
+  void set cursor(String value) {
     setProperty('cursor', value, '');
   }
 
+  /** Gets the value of "dashboard-region" */
+  String get dashboardRegion =>
+    getPropertyValue('${_browserPrefix}dashboard-region');
+
+  /** Sets the value of "dashboard-region" */
+  void set dashboardRegion(String value) {
+    setProperty('${_browserPrefix}dashboard-region', value, '');
+  }
+
   /** Gets the value of "direction" */
   String get direction =>
     getPropertyValue('direction');
 
   /** Sets the value of "direction" */
-  void set direction(var value) {
+  void set direction(String value) {
     setProperty('direction', value, '');
   }
 
@@ -3428,7 +3518,7 @@
     getPropertyValue('display');
 
   /** Sets the value of "display" */
-  void set display(var value) {
+  void set display(String value) {
     setProperty('display', value, '');
   }
 
@@ -3437,7 +3527,7 @@
     getPropertyValue('empty-cells');
 
   /** Sets the value of "empty-cells" */
-  void set emptyCells(var value) {
+  void set emptyCells(String value) {
     setProperty('empty-cells', value, '');
   }
 
@@ -3446,17 +3536,35 @@
     getPropertyValue('${_browserPrefix}filter');
 
   /** Sets the value of "filter" */
-  void set filter(var value) {
+  void set filter(String value) {
     setProperty('${_browserPrefix}filter', value, '');
   }
 
-  /** Gets the value of "flex-align" */
-  String get flexAlign =>
-    getPropertyValue('${_browserPrefix}flex-align');
+  /** Gets the value of "flex" */
+  String get flex =>
+    getPropertyValue('${_browserPrefix}flex');
 
-  /** Sets the value of "flex-align" */
-  void set flexAlign(var value) {
-    setProperty('${_browserPrefix}flex-align', value, '');
+  /** Sets the value of "flex" */
+  void set flex(String value) {
+    setProperty('${_browserPrefix}flex', value, '');
+  }
+
+  /** Gets the value of "flex-basis" */
+  String get flexBasis =>
+    getPropertyValue('${_browserPrefix}flex-basis');
+
+  /** Sets the value of "flex-basis" */
+  void set flexBasis(String value) {
+    setProperty('${_browserPrefix}flex-basis', value, '');
+  }
+
+  /** Gets the value of "flex-direction" */
+  String get flexDirection =>
+    getPropertyValue('${_browserPrefix}flex-direction');
+
+  /** Sets the value of "flex-direction" */
+  void set flexDirection(String value) {
+    setProperty('${_browserPrefix}flex-direction', value, '');
   }
 
   /** Gets the value of "flex-flow" */
@@ -3464,26 +3572,35 @@
     getPropertyValue('${_browserPrefix}flex-flow');
 
   /** Sets the value of "flex-flow" */
-  void set flexFlow(var value) {
+  void set flexFlow(String value) {
     setProperty('${_browserPrefix}flex-flow', value, '');
   }
 
-  /** Gets the value of "flex-order" */
-  String get flexOrder =>
-    getPropertyValue('${_browserPrefix}flex-order');
+  /** Gets the value of "flex-grow" */
+  String get flexGrow =>
+    getPropertyValue('${_browserPrefix}flex-grow');
 
-  /** Sets the value of "flex-order" */
-  void set flexOrder(var value) {
-    setProperty('${_browserPrefix}flex-order', value, '');
+  /** Sets the value of "flex-grow" */
+  void set flexGrow(String value) {
+    setProperty('${_browserPrefix}flex-grow', value, '');
   }
 
-  /** Gets the value of "flex-pack" */
-  String get flexPack =>
-    getPropertyValue('${_browserPrefix}flex-pack');
+  /** Gets the value of "flex-shrink" */
+  String get flexShrink =>
+    getPropertyValue('${_browserPrefix}flex-shrink');
 
-  /** Sets the value of "flex-pack" */
-  void set flexPack(var value) {
-    setProperty('${_browserPrefix}flex-pack', value, '');
+  /** Sets the value of "flex-shrink" */
+  void set flexShrink(String value) {
+    setProperty('${_browserPrefix}flex-shrink', value, '');
+  }
+
+  /** Gets the value of "flex-wrap" */
+  String get flexWrap =>
+    getPropertyValue('${_browserPrefix}flex-wrap');
+
+  /** Sets the value of "flex-wrap" */
+  void set flexWrap(String value) {
+    setProperty('${_browserPrefix}flex-wrap', value, '');
   }
 
   /** Gets the value of "float" */
@@ -3491,7 +3608,7 @@
     getPropertyValue('float');
 
   /** Sets the value of "float" */
-  void set float(var value) {
+  void set float(String value) {
     setProperty('float', value, '');
   }
 
@@ -3500,7 +3617,7 @@
     getPropertyValue('${_browserPrefix}flow-from');
 
   /** Sets the value of "flow-from" */
-  void set flowFrom(var value) {
+  void set flowFrom(String value) {
     setProperty('${_browserPrefix}flow-from', value, '');
   }
 
@@ -3509,7 +3626,7 @@
     getPropertyValue('${_browserPrefix}flow-into');
 
   /** Sets the value of "flow-into" */
-  void set flowInto(var value) {
+  void set flowInto(String value) {
     setProperty('${_browserPrefix}flow-into', value, '');
   }
 
@@ -3518,7 +3635,7 @@
     getPropertyValue('font');
 
   /** Sets the value of "font" */
-  void set font(var value) {
+  void set font(String value) {
     setProperty('font', value, '');
   }
 
@@ -3527,7 +3644,7 @@
     getPropertyValue('font-family');
 
   /** Sets the value of "font-family" */
-  void set fontFamily(var value) {
+  void set fontFamily(String value) {
     setProperty('font-family', value, '');
   }
 
@@ -3536,16 +3653,25 @@
     getPropertyValue('${_browserPrefix}font-feature-settings');
 
   /** Sets the value of "font-feature-settings" */
-  void set fontFeatureSettings(var value) {
+  void set fontFeatureSettings(String value) {
     setProperty('${_browserPrefix}font-feature-settings', value, '');
   }
 
+  /** Gets the value of "font-kerning" */
+  String get fontKerning =>
+    getPropertyValue('${_browserPrefix}font-kerning');
+
+  /** Sets the value of "font-kerning" */
+  void set fontKerning(String value) {
+    setProperty('${_browserPrefix}font-kerning', value, '');
+  }
+
   /** Gets the value of "font-size" */
   String get fontSize =>
     getPropertyValue('font-size');
 
   /** Sets the value of "font-size" */
-  void set fontSize(var value) {
+  void set fontSize(String value) {
     setProperty('font-size', value, '');
   }
 
@@ -3554,7 +3680,7 @@
     getPropertyValue('${_browserPrefix}font-size-delta');
 
   /** Sets the value of "font-size-delta" */
-  void set fontSizeDelta(var value) {
+  void set fontSizeDelta(String value) {
     setProperty('${_browserPrefix}font-size-delta', value, '');
   }
 
@@ -3563,7 +3689,7 @@
     getPropertyValue('${_browserPrefix}font-smoothing');
 
   /** Sets the value of "font-smoothing" */
-  void set fontSmoothing(var value) {
+  void set fontSmoothing(String value) {
     setProperty('${_browserPrefix}font-smoothing', value, '');
   }
 
@@ -3572,7 +3698,7 @@
     getPropertyValue('font-stretch');
 
   /** Sets the value of "font-stretch" */
-  void set fontStretch(var value) {
+  void set fontStretch(String value) {
     setProperty('font-stretch', value, '');
   }
 
@@ -3581,7 +3707,7 @@
     getPropertyValue('font-style');
 
   /** Sets the value of "font-style" */
-  void set fontStyle(var value) {
+  void set fontStyle(String value) {
     setProperty('font-style', value, '');
   }
 
@@ -3590,25 +3716,70 @@
     getPropertyValue('font-variant');
 
   /** Sets the value of "font-variant" */
-  void set fontVariant(var value) {
+  void set fontVariant(String value) {
     setProperty('font-variant', value, '');
   }
 
+  /** Gets the value of "font-variant-ligatures" */
+  String get fontVariantLigatures =>
+    getPropertyValue('${_browserPrefix}font-variant-ligatures');
+
+  /** Sets the value of "font-variant-ligatures" */
+  void set fontVariantLigatures(String value) {
+    setProperty('${_browserPrefix}font-variant-ligatures', value, '');
+  }
+
   /** Gets the value of "font-weight" */
   String get fontWeight =>
     getPropertyValue('font-weight');
 
   /** Sets the value of "font-weight" */
-  void set fontWeight(var value) {
+  void set fontWeight(String value) {
     setProperty('font-weight', value, '');
   }
 
+  /** Gets the value of "grid-column" */
+  String get gridColumn =>
+    getPropertyValue('${_browserPrefix}grid-column');
+
+  /** Sets the value of "grid-column" */
+  void set gridColumn(String value) {
+    setProperty('${_browserPrefix}grid-column', value, '');
+  }
+
+  /** Gets the value of "grid-columns" */
+  String get gridColumns =>
+    getPropertyValue('${_browserPrefix}grid-columns');
+
+  /** Sets the value of "grid-columns" */
+  void set gridColumns(String value) {
+    setProperty('${_browserPrefix}grid-columns', value, '');
+  }
+
+  /** Gets the value of "grid-row" */
+  String get gridRow =>
+    getPropertyValue('${_browserPrefix}grid-row');
+
+  /** Sets the value of "grid-row" */
+  void set gridRow(String value) {
+    setProperty('${_browserPrefix}grid-row', value, '');
+  }
+
+  /** Gets the value of "grid-rows" */
+  String get gridRows =>
+    getPropertyValue('${_browserPrefix}grid-rows');
+
+  /** Sets the value of "grid-rows" */
+  void set gridRows(String value) {
+    setProperty('${_browserPrefix}grid-rows', value, '');
+  }
+
   /** Gets the value of "height" */
   String get height =>
     getPropertyValue('height');
 
   /** Sets the value of "height" */
-  void set height(var value) {
+  void set height(String value) {
     setProperty('height', value, '');
   }
 
@@ -3617,7 +3788,7 @@
     getPropertyValue('${_browserPrefix}highlight');
 
   /** Sets the value of "highlight" */
-  void set highlight(var value) {
+  void set highlight(String value) {
     setProperty('${_browserPrefix}highlight', value, '');
   }
 
@@ -3626,7 +3797,7 @@
     getPropertyValue('${_browserPrefix}hyphenate-character');
 
   /** Sets the value of "hyphenate-character" */
-  void set hyphenateCharacter(var value) {
+  void set hyphenateCharacter(String value) {
     setProperty('${_browserPrefix}hyphenate-character', value, '');
   }
 
@@ -3635,7 +3806,7 @@
     getPropertyValue('${_browserPrefix}hyphenate-limit-after');
 
   /** Sets the value of "hyphenate-limit-after" */
-  void set hyphenateLimitAfter(var value) {
+  void set hyphenateLimitAfter(String value) {
     setProperty('${_browserPrefix}hyphenate-limit-after', value, '');
   }
 
@@ -3644,7 +3815,7 @@
     getPropertyValue('${_browserPrefix}hyphenate-limit-before');
 
   /** Sets the value of "hyphenate-limit-before" */
-  void set hyphenateLimitBefore(var value) {
+  void set hyphenateLimitBefore(String value) {
     setProperty('${_browserPrefix}hyphenate-limit-before', value, '');
   }
 
@@ -3653,7 +3824,7 @@
     getPropertyValue('${_browserPrefix}hyphenate-limit-lines');
 
   /** Sets the value of "hyphenate-limit-lines" */
-  void set hyphenateLimitLines(var value) {
+  void set hyphenateLimitLines(String value) {
     setProperty('${_browserPrefix}hyphenate-limit-lines', value, '');
   }
 
@@ -3662,25 +3833,52 @@
     getPropertyValue('${_browserPrefix}hyphens');
 
   /** Sets the value of "hyphens" */
-  void set hyphens(var value) {
+  void set hyphens(String value) {
     setProperty('${_browserPrefix}hyphens', value, '');
   }
 
+  /** Gets the value of "image-orientation" */
+  String get imageOrientation =>
+    getPropertyValue('image-orientation');
+
+  /** Sets the value of "image-orientation" */
+  void set imageOrientation(String value) {
+    setProperty('image-orientation', value, '');
+  }
+
   /** Gets the value of "image-rendering" */
   String get imageRendering =>
     getPropertyValue('image-rendering');
 
   /** Sets the value of "image-rendering" */
-  void set imageRendering(var value) {
+  void set imageRendering(String value) {
     setProperty('image-rendering', value, '');
   }
 
+  /** Gets the value of "image-resolution" */
+  String get imageResolution =>
+    getPropertyValue('image-resolution');
+
+  /** Sets the value of "image-resolution" */
+  void set imageResolution(String value) {
+    setProperty('image-resolution', value, '');
+  }
+
+  /** Gets the value of "justify-content" */
+  String get justifyContent =>
+    getPropertyValue('${_browserPrefix}justify-content');
+
+  /** Sets the value of "justify-content" */
+  void set justifyContent(String value) {
+    setProperty('${_browserPrefix}justify-content', value, '');
+  }
+
   /** Gets the value of "left" */
   String get left =>
     getPropertyValue('left');
 
   /** Sets the value of "left" */
-  void set left(var value) {
+  void set left(String value) {
     setProperty('left', value, '');
   }
 
@@ -3689,16 +3887,25 @@
     getPropertyValue('letter-spacing');
 
   /** Sets the value of "letter-spacing" */
-  void set letterSpacing(var value) {
+  void set letterSpacing(String value) {
     setProperty('letter-spacing', value, '');
   }
 
+  /** Gets the value of "line-align" */
+  String get lineAlign =>
+    getPropertyValue('${_browserPrefix}line-align');
+
+  /** Sets the value of "line-align" */
+  void set lineAlign(String value) {
+    setProperty('${_browserPrefix}line-align', value, '');
+  }
+
   /** Gets the value of "line-box-contain" */
   String get lineBoxContain =>
     getPropertyValue('${_browserPrefix}line-box-contain');
 
   /** Sets the value of "line-box-contain" */
-  void set lineBoxContain(var value) {
+  void set lineBoxContain(String value) {
     setProperty('${_browserPrefix}line-box-contain', value, '');
   }
 
@@ -3707,7 +3914,7 @@
     getPropertyValue('${_browserPrefix}line-break');
 
   /** Sets the value of "line-break" */
-  void set lineBreak(var value) {
+  void set lineBreak(String value) {
     setProperty('${_browserPrefix}line-break', value, '');
   }
 
@@ -3716,25 +3923,43 @@
     getPropertyValue('${_browserPrefix}line-clamp');
 
   /** Sets the value of "line-clamp" */
-  void set lineClamp(var value) {
+  void set lineClamp(String value) {
     setProperty('${_browserPrefix}line-clamp', value, '');
   }
 
+  /** Gets the value of "line-grid" */
+  String get lineGrid =>
+    getPropertyValue('${_browserPrefix}line-grid');
+
+  /** Sets the value of "line-grid" */
+  void set lineGrid(String value) {
+    setProperty('${_browserPrefix}line-grid', value, '');
+  }
+
   /** Gets the value of "line-height" */
   String get lineHeight =>
     getPropertyValue('line-height');
 
   /** Sets the value of "line-height" */
-  void set lineHeight(var value) {
+  void set lineHeight(String value) {
     setProperty('line-height', value, '');
   }
 
+  /** Gets the value of "line-snap" */
+  String get lineSnap =>
+    getPropertyValue('${_browserPrefix}line-snap');
+
+  /** Sets the value of "line-snap" */
+  void set lineSnap(String value) {
+    setProperty('${_browserPrefix}line-snap', value, '');
+  }
+
   /** Gets the value of "list-style" */
   String get listStyle =>
     getPropertyValue('list-style');
 
   /** Sets the value of "list-style" */
-  void set listStyle(var value) {
+  void set listStyle(String value) {
     setProperty('list-style', value, '');
   }
 
@@ -3743,7 +3968,7 @@
     getPropertyValue('list-style-image');
 
   /** Sets the value of "list-style-image" */
-  void set listStyleImage(var value) {
+  void set listStyleImage(String value) {
     setProperty('list-style-image', value, '');
   }
 
@@ -3752,7 +3977,7 @@
     getPropertyValue('list-style-position');
 
   /** Sets the value of "list-style-position" */
-  void set listStylePosition(var value) {
+  void set listStylePosition(String value) {
     setProperty('list-style-position', value, '');
   }
 
@@ -3761,7 +3986,7 @@
     getPropertyValue('list-style-type');
 
   /** Sets the value of "list-style-type" */
-  void set listStyleType(var value) {
+  void set listStyleType(String value) {
     setProperty('list-style-type', value, '');
   }
 
@@ -3770,7 +3995,7 @@
     getPropertyValue('${_browserPrefix}locale');
 
   /** Sets the value of "locale" */
-  void set locale(var value) {
+  void set locale(String value) {
     setProperty('${_browserPrefix}locale', value, '');
   }
 
@@ -3779,7 +4004,7 @@
     getPropertyValue('${_browserPrefix}logical-height');
 
   /** Sets the value of "logical-height" */
-  void set logicalHeight(var value) {
+  void set logicalHeight(String value) {
     setProperty('${_browserPrefix}logical-height', value, '');
   }
 
@@ -3788,7 +4013,7 @@
     getPropertyValue('${_browserPrefix}logical-width');
 
   /** Sets the value of "logical-width" */
-  void set logicalWidth(var value) {
+  void set logicalWidth(String value) {
     setProperty('${_browserPrefix}logical-width', value, '');
   }
 
@@ -3797,7 +4022,7 @@
     getPropertyValue('margin');
 
   /** Sets the value of "margin" */
-  void set margin(var value) {
+  void set margin(String value) {
     setProperty('margin', value, '');
   }
 
@@ -3806,7 +4031,7 @@
     getPropertyValue('${_browserPrefix}margin-after');
 
   /** Sets the value of "margin-after" */
-  void set marginAfter(var value) {
+  void set marginAfter(String value) {
     setProperty('${_browserPrefix}margin-after', value, '');
   }
 
@@ -3815,7 +4040,7 @@
     getPropertyValue('${_browserPrefix}margin-after-collapse');
 
   /** Sets the value of "margin-after-collapse" */
-  void set marginAfterCollapse(var value) {
+  void set marginAfterCollapse(String value) {
     setProperty('${_browserPrefix}margin-after-collapse', value, '');
   }
 
@@ -3824,7 +4049,7 @@
     getPropertyValue('${_browserPrefix}margin-before');
 
   /** Sets the value of "margin-before" */
-  void set marginBefore(var value) {
+  void set marginBefore(String value) {
     setProperty('${_browserPrefix}margin-before', value, '');
   }
 
@@ -3833,7 +4058,7 @@
     getPropertyValue('${_browserPrefix}margin-before-collapse');
 
   /** Sets the value of "margin-before-collapse" */
-  void set marginBeforeCollapse(var value) {
+  void set marginBeforeCollapse(String value) {
     setProperty('${_browserPrefix}margin-before-collapse', value, '');
   }
 
@@ -3842,7 +4067,7 @@
     getPropertyValue('margin-bottom');
 
   /** Sets the value of "margin-bottom" */
-  void set marginBottom(var value) {
+  void set marginBottom(String value) {
     setProperty('margin-bottom', value, '');
   }
 
@@ -3851,7 +4076,7 @@
     getPropertyValue('${_browserPrefix}margin-bottom-collapse');
 
   /** Sets the value of "margin-bottom-collapse" */
-  void set marginBottomCollapse(var value) {
+  void set marginBottomCollapse(String value) {
     setProperty('${_browserPrefix}margin-bottom-collapse', value, '');
   }
 
@@ -3860,7 +4085,7 @@
     getPropertyValue('${_browserPrefix}margin-collapse');
 
   /** Sets the value of "margin-collapse" */
-  void set marginCollapse(var value) {
+  void set marginCollapse(String value) {
     setProperty('${_browserPrefix}margin-collapse', value, '');
   }
 
@@ -3869,7 +4094,7 @@
     getPropertyValue('${_browserPrefix}margin-end');
 
   /** Sets the value of "margin-end" */
-  void set marginEnd(var value) {
+  void set marginEnd(String value) {
     setProperty('${_browserPrefix}margin-end', value, '');
   }
 
@@ -3878,7 +4103,7 @@
     getPropertyValue('margin-left');
 
   /** Sets the value of "margin-left" */
-  void set marginLeft(var value) {
+  void set marginLeft(String value) {
     setProperty('margin-left', value, '');
   }
 
@@ -3887,7 +4112,7 @@
     getPropertyValue('margin-right');
 
   /** Sets the value of "margin-right" */
-  void set marginRight(var value) {
+  void set marginRight(String value) {
     setProperty('margin-right', value, '');
   }
 
@@ -3896,7 +4121,7 @@
     getPropertyValue('${_browserPrefix}margin-start');
 
   /** Sets the value of "margin-start" */
-  void set marginStart(var value) {
+  void set marginStart(String value) {
     setProperty('${_browserPrefix}margin-start', value, '');
   }
 
@@ -3905,7 +4130,7 @@
     getPropertyValue('margin-top');
 
   /** Sets the value of "margin-top" */
-  void set marginTop(var value) {
+  void set marginTop(String value) {
     setProperty('margin-top', value, '');
   }
 
@@ -3914,7 +4139,7 @@
     getPropertyValue('${_browserPrefix}margin-top-collapse');
 
   /** Sets the value of "margin-top-collapse" */
-  void set marginTopCollapse(var value) {
+  void set marginTopCollapse(String value) {
     setProperty('${_browserPrefix}margin-top-collapse', value, '');
   }
 
@@ -3923,7 +4148,7 @@
     getPropertyValue('${_browserPrefix}marquee');
 
   /** Sets the value of "marquee" */
-  void set marquee(var value) {
+  void set marquee(String value) {
     setProperty('${_browserPrefix}marquee', value, '');
   }
 
@@ -3932,7 +4157,7 @@
     getPropertyValue('${_browserPrefix}marquee-direction');
 
   /** Sets the value of "marquee-direction" */
-  void set marqueeDirection(var value) {
+  void set marqueeDirection(String value) {
     setProperty('${_browserPrefix}marquee-direction', value, '');
   }
 
@@ -3941,7 +4166,7 @@
     getPropertyValue('${_browserPrefix}marquee-increment');
 
   /** Sets the value of "marquee-increment" */
-  void set marqueeIncrement(var value) {
+  void set marqueeIncrement(String value) {
     setProperty('${_browserPrefix}marquee-increment', value, '');
   }
 
@@ -3950,7 +4175,7 @@
     getPropertyValue('${_browserPrefix}marquee-repetition');
 
   /** Sets the value of "marquee-repetition" */
-  void set marqueeRepetition(var value) {
+  void set marqueeRepetition(String value) {
     setProperty('${_browserPrefix}marquee-repetition', value, '');
   }
 
@@ -3959,7 +4184,7 @@
     getPropertyValue('${_browserPrefix}marquee-speed');
 
   /** Sets the value of "marquee-speed" */
-  void set marqueeSpeed(var value) {
+  void set marqueeSpeed(String value) {
     setProperty('${_browserPrefix}marquee-speed', value, '');
   }
 
@@ -3968,7 +4193,7 @@
     getPropertyValue('${_browserPrefix}marquee-style');
 
   /** Sets the value of "marquee-style" */
-  void set marqueeStyle(var value) {
+  void set marqueeStyle(String value) {
     setProperty('${_browserPrefix}marquee-style', value, '');
   }
 
@@ -3977,7 +4202,7 @@
     getPropertyValue('${_browserPrefix}mask');
 
   /** Sets the value of "mask" */
-  void set mask(var value) {
+  void set mask(String value) {
     setProperty('${_browserPrefix}mask', value, '');
   }
 
@@ -3986,7 +4211,7 @@
     getPropertyValue('${_browserPrefix}mask-attachment');
 
   /** Sets the value of "mask-attachment" */
-  void set maskAttachment(var value) {
+  void set maskAttachment(String value) {
     setProperty('${_browserPrefix}mask-attachment', value, '');
   }
 
@@ -3995,7 +4220,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image');
 
   /** Sets the value of "mask-box-image" */
-  void set maskBoxImage(var value) {
+  void set maskBoxImage(String value) {
     setProperty('${_browserPrefix}mask-box-image', value, '');
   }
 
@@ -4004,7 +4229,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image-outset');
 
   /** Sets the value of "mask-box-image-outset" */
-  void set maskBoxImageOutset(var value) {
+  void set maskBoxImageOutset(String value) {
     setProperty('${_browserPrefix}mask-box-image-outset', value, '');
   }
 
@@ -4013,7 +4238,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image-repeat');
 
   /** Sets the value of "mask-box-image-repeat" */
-  void set maskBoxImageRepeat(var value) {
+  void set maskBoxImageRepeat(String value) {
     setProperty('${_browserPrefix}mask-box-image-repeat', value, '');
   }
 
@@ -4022,7 +4247,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image-slice');
 
   /** Sets the value of "mask-box-image-slice" */
-  void set maskBoxImageSlice(var value) {
+  void set maskBoxImageSlice(String value) {
     setProperty('${_browserPrefix}mask-box-image-slice', value, '');
   }
 
@@ -4031,7 +4256,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image-source');
 
   /** Sets the value of "mask-box-image-source" */
-  void set maskBoxImageSource(var value) {
+  void set maskBoxImageSource(String value) {
     setProperty('${_browserPrefix}mask-box-image-source', value, '');
   }
 
@@ -4040,7 +4265,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image-width');
 
   /** Sets the value of "mask-box-image-width" */
-  void set maskBoxImageWidth(var value) {
+  void set maskBoxImageWidth(String value) {
     setProperty('${_browserPrefix}mask-box-image-width', value, '');
   }
 
@@ -4049,7 +4274,7 @@
     getPropertyValue('${_browserPrefix}mask-clip');
 
   /** Sets the value of "mask-clip" */
-  void set maskClip(var value) {
+  void set maskClip(String value) {
     setProperty('${_browserPrefix}mask-clip', value, '');
   }
 
@@ -4058,7 +4283,7 @@
     getPropertyValue('${_browserPrefix}mask-composite');
 
   /** Sets the value of "mask-composite" */
-  void set maskComposite(var value) {
+  void set maskComposite(String value) {
     setProperty('${_browserPrefix}mask-composite', value, '');
   }
 
@@ -4067,7 +4292,7 @@
     getPropertyValue('${_browserPrefix}mask-image');
 
   /** Sets the value of "mask-image" */
-  void set maskImage(var value) {
+  void set maskImage(String value) {
     setProperty('${_browserPrefix}mask-image', value, '');
   }
 
@@ -4076,7 +4301,7 @@
     getPropertyValue('${_browserPrefix}mask-origin');
 
   /** Sets the value of "mask-origin" */
-  void set maskOrigin(var value) {
+  void set maskOrigin(String value) {
     setProperty('${_browserPrefix}mask-origin', value, '');
   }
 
@@ -4085,7 +4310,7 @@
     getPropertyValue('${_browserPrefix}mask-position');
 
   /** Sets the value of "mask-position" */
-  void set maskPosition(var value) {
+  void set maskPosition(String value) {
     setProperty('${_browserPrefix}mask-position', value, '');
   }
 
@@ -4094,7 +4319,7 @@
     getPropertyValue('${_browserPrefix}mask-position-x');
 
   /** Sets the value of "mask-position-x" */
-  void set maskPositionX(var value) {
+  void set maskPositionX(String value) {
     setProperty('${_browserPrefix}mask-position-x', value, '');
   }
 
@@ -4103,7 +4328,7 @@
     getPropertyValue('${_browserPrefix}mask-position-y');
 
   /** Sets the value of "mask-position-y" */
-  void set maskPositionY(var value) {
+  void set maskPositionY(String value) {
     setProperty('${_browserPrefix}mask-position-y', value, '');
   }
 
@@ -4112,7 +4337,7 @@
     getPropertyValue('${_browserPrefix}mask-repeat');
 
   /** Sets the value of "mask-repeat" */
-  void set maskRepeat(var value) {
+  void set maskRepeat(String value) {
     setProperty('${_browserPrefix}mask-repeat', value, '');
   }
 
@@ -4121,7 +4346,7 @@
     getPropertyValue('${_browserPrefix}mask-repeat-x');
 
   /** Sets the value of "mask-repeat-x" */
-  void set maskRepeatX(var value) {
+  void set maskRepeatX(String value) {
     setProperty('${_browserPrefix}mask-repeat-x', value, '');
   }
 
@@ -4130,7 +4355,7 @@
     getPropertyValue('${_browserPrefix}mask-repeat-y');
 
   /** Sets the value of "mask-repeat-y" */
-  void set maskRepeatY(var value) {
+  void set maskRepeatY(String value) {
     setProperty('${_browserPrefix}mask-repeat-y', value, '');
   }
 
@@ -4139,25 +4364,16 @@
     getPropertyValue('${_browserPrefix}mask-size');
 
   /** Sets the value of "mask-size" */
-  void set maskSize(var value) {
+  void set maskSize(String value) {
     setProperty('${_browserPrefix}mask-size', value, '');
   }
 
-  /** Gets the value of "match-nearest-mail-blockquote-color" */
-  String get matchNearestMailBlockquoteColor =>
-    getPropertyValue('${_browserPrefix}match-nearest-mail-blockquote-color');
-
-  /** Sets the value of "match-nearest-mail-blockquote-color" */
-  void set matchNearestMailBlockquoteColor(var value) {
-    setProperty('${_browserPrefix}match-nearest-mail-blockquote-color', value, '');
-  }
-
   /** Gets the value of "max-height" */
   String get maxHeight =>
     getPropertyValue('max-height');
 
   /** Sets the value of "max-height" */
-  void set maxHeight(var value) {
+  void set maxHeight(String value) {
     setProperty('max-height', value, '');
   }
 
@@ -4166,7 +4382,7 @@
     getPropertyValue('${_browserPrefix}max-logical-height');
 
   /** Sets the value of "max-logical-height" */
-  void set maxLogicalHeight(var value) {
+  void set maxLogicalHeight(String value) {
     setProperty('${_browserPrefix}max-logical-height', value, '');
   }
 
@@ -4175,7 +4391,7 @@
     getPropertyValue('${_browserPrefix}max-logical-width');
 
   /** Sets the value of "max-logical-width" */
-  void set maxLogicalWidth(var value) {
+  void set maxLogicalWidth(String value) {
     setProperty('${_browserPrefix}max-logical-width', value, '');
   }
 
@@ -4184,16 +4400,25 @@
     getPropertyValue('max-width');
 
   /** Sets the value of "max-width" */
-  void set maxWidth(var value) {
+  void set maxWidth(String value) {
     setProperty('max-width', value, '');
   }
 
+  /** Gets the value of "max-zoom" */
+  String get maxZoom =>
+    getPropertyValue('max-zoom');
+
+  /** Sets the value of "max-zoom" */
+  void set maxZoom(String value) {
+    setProperty('max-zoom', value, '');
+  }
+
   /** Gets the value of "min-height" */
   String get minHeight =>
     getPropertyValue('min-height');
 
   /** Sets the value of "min-height" */
-  void set minHeight(var value) {
+  void set minHeight(String value) {
     setProperty('min-height', value, '');
   }
 
@@ -4202,7 +4427,7 @@
     getPropertyValue('${_browserPrefix}min-logical-height');
 
   /** Sets the value of "min-logical-height" */
-  void set minLogicalHeight(var value) {
+  void set minLogicalHeight(String value) {
     setProperty('${_browserPrefix}min-logical-height', value, '');
   }
 
@@ -4211,7 +4436,7 @@
     getPropertyValue('${_browserPrefix}min-logical-width');
 
   /** Sets the value of "min-logical-width" */
-  void set minLogicalWidth(var value) {
+  void set minLogicalWidth(String value) {
     setProperty('${_browserPrefix}min-logical-width', value, '');
   }
 
@@ -4220,16 +4445,25 @@
     getPropertyValue('min-width');
 
   /** Sets the value of "min-width" */
-  void set minWidth(var value) {
+  void set minWidth(String value) {
     setProperty('min-width', value, '');
   }
 
+  /** Gets the value of "min-zoom" */
+  String get minZoom =>
+    getPropertyValue('min-zoom');
+
+  /** Sets the value of "min-zoom" */
+  void set minZoom(String value) {
+    setProperty('min-zoom', value, '');
+  }
+
   /** Gets the value of "nbsp-mode" */
   String get nbspMode =>
     getPropertyValue('${_browserPrefix}nbsp-mode');
 
   /** Sets the value of "nbsp-mode" */
-  void set nbspMode(var value) {
+  void set nbspMode(String value) {
     setProperty('${_browserPrefix}nbsp-mode', value, '');
   }
 
@@ -4238,16 +4472,34 @@
     getPropertyValue('opacity');
 
   /** Sets the value of "opacity" */
-  void set opacity(var value) {
+  void set opacity(String value) {
     setProperty('opacity', value, '');
   }
 
+  /** Gets the value of "order" */
+  String get order =>
+    getPropertyValue('${_browserPrefix}order');
+
+  /** Sets the value of "order" */
+  void set order(String value) {
+    setProperty('${_browserPrefix}order', value, '');
+  }
+
+  /** Gets the value of "orientation" */
+  String get orientation =>
+    getPropertyValue('orientation');
+
+  /** Sets the value of "orientation" */
+  void set orientation(String value) {
+    setProperty('orientation', value, '');
+  }
+
   /** Gets the value of "orphans" */
   String get orphans =>
     getPropertyValue('orphans');
 
   /** Sets the value of "orphans" */
-  void set orphans(var value) {
+  void set orphans(String value) {
     setProperty('orphans', value, '');
   }
 
@@ -4256,7 +4508,7 @@
     getPropertyValue('outline');
 
   /** Sets the value of "outline" */
-  void set outline(var value) {
+  void set outline(String value) {
     setProperty('outline', value, '');
   }
 
@@ -4265,7 +4517,7 @@
     getPropertyValue('outline-color');
 
   /** Sets the value of "outline-color" */
-  void set outlineColor(var value) {
+  void set outlineColor(String value) {
     setProperty('outline-color', value, '');
   }
 
@@ -4274,7 +4526,7 @@
     getPropertyValue('outline-offset');
 
   /** Sets the value of "outline-offset" */
-  void set outlineOffset(var value) {
+  void set outlineOffset(String value) {
     setProperty('outline-offset', value, '');
   }
 
@@ -4283,7 +4535,7 @@
     getPropertyValue('outline-style');
 
   /** Sets the value of "outline-style" */
-  void set outlineStyle(var value) {
+  void set outlineStyle(String value) {
     setProperty('outline-style', value, '');
   }
 
@@ -4292,7 +4544,7 @@
     getPropertyValue('outline-width');
 
   /** Sets the value of "outline-width" */
-  void set outlineWidth(var value) {
+  void set outlineWidth(String value) {
     setProperty('outline-width', value, '');
   }
 
@@ -4301,16 +4553,34 @@
     getPropertyValue('overflow');
 
   /** Sets the value of "overflow" */
-  void set overflow(var value) {
+  void set overflow(String value) {
     setProperty('overflow', value, '');
   }
 
+  /** Gets the value of "overflow-scrolling" */
+  String get overflowScrolling =>
+    getPropertyValue('${_browserPrefix}overflow-scrolling');
+
+  /** Sets the value of "overflow-scrolling" */
+  void set overflowScrolling(String value) {
+    setProperty('${_browserPrefix}overflow-scrolling', value, '');
+  }
+
+  /** Gets the value of "overflow-wrap" */
+  String get overflowWrap =>
+    getPropertyValue('overflow-wrap');
+
+  /** Sets the value of "overflow-wrap" */
+  void set overflowWrap(String value) {
+    setProperty('overflow-wrap', value, '');
+  }
+
   /** Gets the value of "overflow-x" */
   String get overflowX =>
     getPropertyValue('overflow-x');
 
   /** Sets the value of "overflow-x" */
-  void set overflowX(var value) {
+  void set overflowX(String value) {
     setProperty('overflow-x', value, '');
   }
 
@@ -4319,7 +4589,7 @@
     getPropertyValue('overflow-y');
 
   /** Sets the value of "overflow-y" */
-  void set overflowY(var value) {
+  void set overflowY(String value) {
     setProperty('overflow-y', value, '');
   }
 
@@ -4328,7 +4598,7 @@
     getPropertyValue('padding');
 
   /** Sets the value of "padding" */
-  void set padding(var value) {
+  void set padding(String value) {
     setProperty('padding', value, '');
   }
 
@@ -4337,7 +4607,7 @@
     getPropertyValue('${_browserPrefix}padding-after');
 
   /** Sets the value of "padding-after" */
-  void set paddingAfter(var value) {
+  void set paddingAfter(String value) {
     setProperty('${_browserPrefix}padding-after', value, '');
   }
 
@@ -4346,7 +4616,7 @@
     getPropertyValue('${_browserPrefix}padding-before');
 
   /** Sets the value of "padding-before" */
-  void set paddingBefore(var value) {
+  void set paddingBefore(String value) {
     setProperty('${_browserPrefix}padding-before', value, '');
   }
 
@@ -4355,7 +4625,7 @@
     getPropertyValue('padding-bottom');
 
   /** Sets the value of "padding-bottom" */
-  void set paddingBottom(var value) {
+  void set paddingBottom(String value) {
     setProperty('padding-bottom', value, '');
   }
 
@@ -4364,7 +4634,7 @@
     getPropertyValue('${_browserPrefix}padding-end');
 
   /** Sets the value of "padding-end" */
-  void set paddingEnd(var value) {
+  void set paddingEnd(String value) {
     setProperty('${_browserPrefix}padding-end', value, '');
   }
 
@@ -4373,7 +4643,7 @@
     getPropertyValue('padding-left');
 
   /** Sets the value of "padding-left" */
-  void set paddingLeft(var value) {
+  void set paddingLeft(String value) {
     setProperty('padding-left', value, '');
   }
 
@@ -4382,7 +4652,7 @@
     getPropertyValue('padding-right');
 
   /** Sets the value of "padding-right" */
-  void set paddingRight(var value) {
+  void set paddingRight(String value) {
     setProperty('padding-right', value, '');
   }
 
@@ -4391,7 +4661,7 @@
     getPropertyValue('${_browserPrefix}padding-start');
 
   /** Sets the value of "padding-start" */
-  void set paddingStart(var value) {
+  void set paddingStart(String value) {
     setProperty('${_browserPrefix}padding-start', value, '');
   }
 
@@ -4400,7 +4670,7 @@
     getPropertyValue('padding-top');
 
   /** Sets the value of "padding-top" */
-  void set paddingTop(var value) {
+  void set paddingTop(String value) {
     setProperty('padding-top', value, '');
   }
 
@@ -4409,7 +4679,7 @@
     getPropertyValue('page');
 
   /** Sets the value of "page" */
-  void set page(var value) {
+  void set page(String value) {
     setProperty('page', value, '');
   }
 
@@ -4418,7 +4688,7 @@
     getPropertyValue('page-break-after');
 
   /** Sets the value of "page-break-after" */
-  void set pageBreakAfter(var value) {
+  void set pageBreakAfter(String value) {
     setProperty('page-break-after', value, '');
   }
 
@@ -4427,7 +4697,7 @@
     getPropertyValue('page-break-before');
 
   /** Sets the value of "page-break-before" */
-  void set pageBreakBefore(var value) {
+  void set pageBreakBefore(String value) {
     setProperty('page-break-before', value, '');
   }
 
@@ -4436,7 +4706,7 @@
     getPropertyValue('page-break-inside');
 
   /** Sets the value of "page-break-inside" */
-  void set pageBreakInside(var value) {
+  void set pageBreakInside(String value) {
     setProperty('page-break-inside', value, '');
   }
 
@@ -4445,7 +4715,7 @@
     getPropertyValue('${_browserPrefix}perspective');
 
   /** Sets the value of "perspective" */
-  void set perspective(var value) {
+  void set perspective(String value) {
     setProperty('${_browserPrefix}perspective', value, '');
   }
 
@@ -4454,7 +4724,7 @@
     getPropertyValue('${_browserPrefix}perspective-origin');
 
   /** Sets the value of "perspective-origin" */
-  void set perspectiveOrigin(var value) {
+  void set perspectiveOrigin(String value) {
     setProperty('${_browserPrefix}perspective-origin', value, '');
   }
 
@@ -4463,7 +4733,7 @@
     getPropertyValue('${_browserPrefix}perspective-origin-x');
 
   /** Sets the value of "perspective-origin-x" */
-  void set perspectiveOriginX(var value) {
+  void set perspectiveOriginX(String value) {
     setProperty('${_browserPrefix}perspective-origin-x', value, '');
   }
 
@@ -4472,7 +4742,7 @@
     getPropertyValue('${_browserPrefix}perspective-origin-y');
 
   /** Sets the value of "perspective-origin-y" */
-  void set perspectiveOriginY(var value) {
+  void set perspectiveOriginY(String value) {
     setProperty('${_browserPrefix}perspective-origin-y', value, '');
   }
 
@@ -4481,7 +4751,7 @@
     getPropertyValue('pointer-events');
 
   /** Sets the value of "pointer-events" */
-  void set pointerEvents(var value) {
+  void set pointerEvents(String value) {
     setProperty('pointer-events', value, '');
   }
 
@@ -4490,16 +4760,25 @@
     getPropertyValue('position');
 
   /** Sets the value of "position" */
-  void set position(var value) {
+  void set position(String value) {
     setProperty('position', value, '');
   }
 
+  /** Gets the value of "print-color-adjust" */
+  String get printColorAdjust =>
+    getPropertyValue('${_browserPrefix}print-color-adjust');
+
+  /** Sets the value of "print-color-adjust" */
+  void set printColorAdjust(String value) {
+    setProperty('${_browserPrefix}print-color-adjust', value, '');
+  }
+
   /** Gets the value of "quotes" */
   String get quotes =>
     getPropertyValue('quotes');
 
   /** Sets the value of "quotes" */
-  void set quotes(var value) {
+  void set quotes(String value) {
     setProperty('quotes', value, '');
   }
 
@@ -4508,7 +4787,7 @@
     getPropertyValue('${_browserPrefix}region-break-after');
 
   /** Sets the value of "region-break-after" */
-  void set regionBreakAfter(var value) {
+  void set regionBreakAfter(String value) {
     setProperty('${_browserPrefix}region-break-after', value, '');
   }
 
@@ -4517,7 +4796,7 @@
     getPropertyValue('${_browserPrefix}region-break-before');
 
   /** Sets the value of "region-break-before" */
-  void set regionBreakBefore(var value) {
+  void set regionBreakBefore(String value) {
     setProperty('${_browserPrefix}region-break-before', value, '');
   }
 
@@ -4526,7 +4805,7 @@
     getPropertyValue('${_browserPrefix}region-break-inside');
 
   /** Sets the value of "region-break-inside" */
-  void set regionBreakInside(var value) {
+  void set regionBreakInside(String value) {
     setProperty('${_browserPrefix}region-break-inside', value, '');
   }
 
@@ -4535,7 +4814,7 @@
     getPropertyValue('${_browserPrefix}region-overflow');
 
   /** Sets the value of "region-overflow" */
-  void set regionOverflow(var value) {
+  void set regionOverflow(String value) {
     setProperty('${_browserPrefix}region-overflow', value, '');
   }
 
@@ -4544,7 +4823,7 @@
     getPropertyValue('resize');
 
   /** Sets the value of "resize" */
-  void set resize(var value) {
+  void set resize(String value) {
     setProperty('resize', value, '');
   }
 
@@ -4553,7 +4832,7 @@
     getPropertyValue('right');
 
   /** Sets the value of "right" */
-  void set right(var value) {
+  void set right(String value) {
     setProperty('right', value, '');
   }
 
@@ -4562,16 +4841,52 @@
     getPropertyValue('${_browserPrefix}rtl-ordering');
 
   /** Sets the value of "rtl-ordering" */
-  void set rtlOrdering(var value) {
+  void set rtlOrdering(String value) {
     setProperty('${_browserPrefix}rtl-ordering', value, '');
   }
 
+  /** Gets the value of "shape-inside" */
+  String get shapeInside =>
+    getPropertyValue('${_browserPrefix}shape-inside');
+
+  /** Sets the value of "shape-inside" */
+  void set shapeInside(String value) {
+    setProperty('${_browserPrefix}shape-inside', value, '');
+  }
+
+  /** Gets the value of "shape-margin" */
+  String get shapeMargin =>
+    getPropertyValue('${_browserPrefix}shape-margin');
+
+  /** Sets the value of "shape-margin" */
+  void set shapeMargin(String value) {
+    setProperty('${_browserPrefix}shape-margin', value, '');
+  }
+
+  /** Gets the value of "shape-outside" */
+  String get shapeOutside =>
+    getPropertyValue('${_browserPrefix}shape-outside');
+
+  /** Sets the value of "shape-outside" */
+  void set shapeOutside(String value) {
+    setProperty('${_browserPrefix}shape-outside', value, '');
+  }
+
+  /** Gets the value of "shape-padding" */
+  String get shapePadding =>
+    getPropertyValue('${_browserPrefix}shape-padding');
+
+  /** Sets the value of "shape-padding" */
+  void set shapePadding(String value) {
+    setProperty('${_browserPrefix}shape-padding', value, '');
+  }
+
   /** Gets the value of "size" */
   String get size =>
     getPropertyValue('size');
 
   /** Sets the value of "size" */
-  void set size(var value) {
+  void set size(String value) {
     setProperty('size', value, '');
   }
 
@@ -4580,7 +4895,7 @@
     getPropertyValue('speak');
 
   /** Sets the value of "speak" */
-  void set speak(var value) {
+  void set speak(String value) {
     setProperty('speak', value, '');
   }
 
@@ -4589,16 +4904,25 @@
     getPropertyValue('src');
 
   /** Sets the value of "src" */
-  void set src(var value) {
+  void set src(String value) {
     setProperty('src', value, '');
   }
 
+  /** Gets the value of "tab-size" */
+  String get tabSize =>
+    getPropertyValue('tab-size');
+
+  /** Sets the value of "tab-size" */
+  void set tabSize(String value) {
+    setProperty('tab-size', value, '');
+  }
+
   /** Gets the value of "table-layout" */
   String get tableLayout =>
     getPropertyValue('table-layout');
 
   /** Sets the value of "table-layout" */
-  void set tableLayout(var value) {
+  void set tableLayout(String value) {
     setProperty('table-layout', value, '');
   }
 
@@ -4607,7 +4931,7 @@
     getPropertyValue('${_browserPrefix}tap-highlight-color');
 
   /** Sets the value of "tap-highlight-color" */
-  void set tapHighlightColor(var value) {
+  void set tapHighlightColor(String value) {
     setProperty('${_browserPrefix}tap-highlight-color', value, '');
   }
 
@@ -4616,16 +4940,25 @@
     getPropertyValue('text-align');
 
   /** Sets the value of "text-align" */
-  void set textAlign(var value) {
+  void set textAlign(String value) {
     setProperty('text-align', value, '');
   }
 
+  /** Gets the value of "text-align-last" */
+  String get textAlignLast =>
+    getPropertyValue('${_browserPrefix}text-align-last');
+
+  /** Sets the value of "text-align-last" */
+  void set textAlignLast(String value) {
+    setProperty('${_browserPrefix}text-align-last', value, '');
+  }
+
   /** Gets the value of "text-combine" */
   String get textCombine =>
     getPropertyValue('${_browserPrefix}text-combine');
 
   /** Sets the value of "text-combine" */
-  void set textCombine(var value) {
+  void set textCombine(String value) {
     setProperty('${_browserPrefix}text-combine', value, '');
   }
 
@@ -4634,16 +4967,34 @@
     getPropertyValue('text-decoration');
 
   /** Sets the value of "text-decoration" */
-  void set textDecoration(var value) {
+  void set textDecoration(String value) {
     setProperty('text-decoration', value, '');
   }
 
+  /** Gets the value of "text-decoration-line" */
+  String get textDecorationLine =>
+    getPropertyValue('${_browserPrefix}text-decoration-line');
+
+  /** Sets the value of "text-decoration-line" */
+  void set textDecorationLine(String value) {
+    setProperty('${_browserPrefix}text-decoration-line', value, '');
+  }
+
+  /** Gets the value of "text-decoration-style" */
+  String get textDecorationStyle =>
+    getPropertyValue('${_browserPrefix}text-decoration-style');
+
+  /** Sets the value of "text-decoration-style" */
+  void set textDecorationStyle(String value) {
+    setProperty('${_browserPrefix}text-decoration-style', value, '');
+  }
+
   /** Gets the value of "text-decorations-in-effect" */
   String get textDecorationsInEffect =>
     getPropertyValue('${_browserPrefix}text-decorations-in-effect');
 
   /** Sets the value of "text-decorations-in-effect" */
-  void set textDecorationsInEffect(var value) {
+  void set textDecorationsInEffect(String value) {
     setProperty('${_browserPrefix}text-decorations-in-effect', value, '');
   }
 
@@ -4652,7 +5003,7 @@
     getPropertyValue('${_browserPrefix}text-emphasis');
 
   /** Sets the value of "text-emphasis" */
-  void set textEmphasis(var value) {
+  void set textEmphasis(String value) {
     setProperty('${_browserPrefix}text-emphasis', value, '');
   }
 
@@ -4661,7 +5012,7 @@
     getPropertyValue('${_browserPrefix}text-emphasis-color');
 
   /** Sets the value of "text-emphasis-color" */
-  void set textEmphasisColor(var value) {
+  void set textEmphasisColor(String value) {
     setProperty('${_browserPrefix}text-emphasis-color', value, '');
   }
 
@@ -4670,7 +5021,7 @@
     getPropertyValue('${_browserPrefix}text-emphasis-position');
 
   /** Sets the value of "text-emphasis-position" */
-  void set textEmphasisPosition(var value) {
+  void set textEmphasisPosition(String value) {
     setProperty('${_browserPrefix}text-emphasis-position', value, '');
   }
 
@@ -4679,7 +5030,7 @@
     getPropertyValue('${_browserPrefix}text-emphasis-style');
 
   /** Sets the value of "text-emphasis-style" */
-  void set textEmphasisStyle(var value) {
+  void set textEmphasisStyle(String value) {
     setProperty('${_browserPrefix}text-emphasis-style', value, '');
   }
 
@@ -4688,7 +5039,7 @@
     getPropertyValue('${_browserPrefix}text-fill-color');
 
   /** Sets the value of "text-fill-color" */
-  void set textFillColor(var value) {
+  void set textFillColor(String value) {
     setProperty('${_browserPrefix}text-fill-color', value, '');
   }
 
@@ -4697,7 +5048,7 @@
     getPropertyValue('text-indent');
 
   /** Sets the value of "text-indent" */
-  void set textIndent(var value) {
+  void set textIndent(String value) {
     setProperty('text-indent', value, '');
   }
 
@@ -4706,7 +5057,7 @@
     getPropertyValue('text-line-through');
 
   /** Sets the value of "text-line-through" */
-  void set textLineThrough(var value) {
+  void set textLineThrough(String value) {
     setProperty('text-line-through', value, '');
   }
 
@@ -4715,7 +5066,7 @@
     getPropertyValue('text-line-through-color');
 
   /** Sets the value of "text-line-through-color" */
-  void set textLineThroughColor(var value) {
+  void set textLineThroughColor(String value) {
     setProperty('text-line-through-color', value, '');
   }
 
@@ -4724,7 +5075,7 @@
     getPropertyValue('text-line-through-mode');
 
   /** Sets the value of "text-line-through-mode" */
-  void set textLineThroughMode(var value) {
+  void set textLineThroughMode(String value) {
     setProperty('text-line-through-mode', value, '');
   }
 
@@ -4733,7 +5084,7 @@
     getPropertyValue('text-line-through-style');
 
   /** Sets the value of "text-line-through-style" */
-  void set textLineThroughStyle(var value) {
+  void set textLineThroughStyle(String value) {
     setProperty('text-line-through-style', value, '');
   }
 
@@ -4742,7 +5093,7 @@
     getPropertyValue('text-line-through-width');
 
   /** Sets the value of "text-line-through-width" */
-  void set textLineThroughWidth(var value) {
+  void set textLineThroughWidth(String value) {
     setProperty('text-line-through-width', value, '');
   }
 
@@ -4751,7 +5102,7 @@
     getPropertyValue('${_browserPrefix}text-orientation');
 
   /** Sets the value of "text-orientation" */
-  void set textOrientation(var value) {
+  void set textOrientation(String value) {
     setProperty('${_browserPrefix}text-orientation', value, '');
   }
 
@@ -4760,7 +5111,7 @@
     getPropertyValue('text-overflow');
 
   /** Sets the value of "text-overflow" */
-  void set textOverflow(var value) {
+  void set textOverflow(String value) {
     setProperty('text-overflow', value, '');
   }
 
@@ -4769,7 +5120,7 @@
     getPropertyValue('text-overline');
 
   /** Sets the value of "text-overline" */
-  void set textOverline(var value) {
+  void set textOverline(String value) {
     setProperty('text-overline', value, '');
   }
 
@@ -4778,7 +5129,7 @@
     getPropertyValue('text-overline-color');
 
   /** Sets the value of "text-overline-color" */
-  void set textOverlineColor(var value) {
+  void set textOverlineColor(String value) {
     setProperty('text-overline-color', value, '');
   }
 
@@ -4787,7 +5138,7 @@
     getPropertyValue('text-overline-mode');
 
   /** Sets the value of "text-overline-mode" */
-  void set textOverlineMode(var value) {
+  void set textOverlineMode(String value) {
     setProperty('text-overline-mode', value, '');
   }
 
@@ -4796,7 +5147,7 @@
     getPropertyValue('text-overline-style');
 
   /** Sets the value of "text-overline-style" */
-  void set textOverlineStyle(var value) {
+  void set textOverlineStyle(String value) {
     setProperty('text-overline-style', value, '');
   }
 
@@ -4805,7 +5156,7 @@
     getPropertyValue('text-overline-width');
 
   /** Sets the value of "text-overline-width" */
-  void set textOverlineWidth(var value) {
+  void set textOverlineWidth(String value) {
     setProperty('text-overline-width', value, '');
   }
 
@@ -4814,7 +5165,7 @@
     getPropertyValue('text-rendering');
 
   /** Sets the value of "text-rendering" */
-  void set textRendering(var value) {
+  void set textRendering(String value) {
     setProperty('text-rendering', value, '');
   }
 
@@ -4823,7 +5174,7 @@
     getPropertyValue('${_browserPrefix}text-security');
 
   /** Sets the value of "text-security" */
-  void set textSecurity(var value) {
+  void set textSecurity(String value) {
     setProperty('${_browserPrefix}text-security', value, '');
   }
 
@@ -4832,7 +5183,7 @@
     getPropertyValue('text-shadow');
 
   /** Sets the value of "text-shadow" */
-  void set textShadow(var value) {
+  void set textShadow(String value) {
     setProperty('text-shadow', value, '');
   }
 
@@ -4841,7 +5192,7 @@
     getPropertyValue('${_browserPrefix}text-size-adjust');
 
   /** Sets the value of "text-size-adjust" */
-  void set textSizeAdjust(var value) {
+  void set textSizeAdjust(String value) {
     setProperty('${_browserPrefix}text-size-adjust', value, '');
   }
 
@@ -4850,7 +5201,7 @@
     getPropertyValue('${_browserPrefix}text-stroke');
 
   /** Sets the value of "text-stroke" */
-  void set textStroke(var value) {
+  void set textStroke(String value) {
     setProperty('${_browserPrefix}text-stroke', value, '');
   }
 
@@ -4859,7 +5210,7 @@
     getPropertyValue('${_browserPrefix}text-stroke-color');
 
   /** Sets the value of "text-stroke-color" */
-  void set textStrokeColor(var value) {
+  void set textStrokeColor(String value) {
     setProperty('${_browserPrefix}text-stroke-color', value, '');
   }
 
@@ -4868,7 +5219,7 @@
     getPropertyValue('${_browserPrefix}text-stroke-width');
 
   /** Sets the value of "text-stroke-width" */
-  void set textStrokeWidth(var value) {
+  void set textStrokeWidth(String value) {
     setProperty('${_browserPrefix}text-stroke-width', value, '');
   }
 
@@ -4877,7 +5228,7 @@
     getPropertyValue('text-transform');
 
   /** Sets the value of "text-transform" */
-  void set textTransform(var value) {
+  void set textTransform(String value) {
     setProperty('text-transform', value, '');
   }
 
@@ -4886,7 +5237,7 @@
     getPropertyValue('text-underline');
 
   /** Sets the value of "text-underline" */
-  void set textUnderline(var value) {
+  void set textUnderline(String value) {
     setProperty('text-underline', value, '');
   }
 
@@ -4895,7 +5246,7 @@
     getPropertyValue('text-underline-color');
 
   /** Sets the value of "text-underline-color" */
-  void set textUnderlineColor(var value) {
+  void set textUnderlineColor(String value) {
     setProperty('text-underline-color', value, '');
   }
 
@@ -4904,7 +5255,7 @@
     getPropertyValue('text-underline-mode');
 
   /** Sets the value of "text-underline-mode" */
-  void set textUnderlineMode(var value) {
+  void set textUnderlineMode(String value) {
     setProperty('text-underline-mode', value, '');
   }
 
@@ -4913,7 +5264,7 @@
     getPropertyValue('text-underline-style');
 
   /** Sets the value of "text-underline-style" */
-  void set textUnderlineStyle(var value) {
+  void set textUnderlineStyle(String value) {
     setProperty('text-underline-style', value, '');
   }
 
@@ -4922,7 +5273,7 @@
     getPropertyValue('text-underline-width');
 
   /** Sets the value of "text-underline-width" */
-  void set textUnderlineWidth(var value) {
+  void set textUnderlineWidth(String value) {
     setProperty('text-underline-width', value, '');
   }
 
@@ -4931,7 +5282,7 @@
     getPropertyValue('top');
 
   /** Sets the value of "top" */
-  void set top(var value) {
+  void set top(String value) {
     setProperty('top', value, '');
   }
 
@@ -4940,7 +5291,7 @@
     getPropertyValue('${_browserPrefix}transform');
 
   /** Sets the value of "transform" */
-  void set transform(var value) {
+  void set transform(String value) {
     setProperty('${_browserPrefix}transform', value, '');
   }
 
@@ -4949,7 +5300,7 @@
     getPropertyValue('${_browserPrefix}transform-origin');
 
   /** Sets the value of "transform-origin" */
-  void set transformOrigin(var value) {
+  void set transformOrigin(String value) {
     setProperty('${_browserPrefix}transform-origin', value, '');
   }
 
@@ -4958,7 +5309,7 @@
     getPropertyValue('${_browserPrefix}transform-origin-x');
 
   /** Sets the value of "transform-origin-x" */
-  void set transformOriginX(var value) {
+  void set transformOriginX(String value) {
     setProperty('${_browserPrefix}transform-origin-x', value, '');
   }
 
@@ -4967,7 +5318,7 @@
     getPropertyValue('${_browserPrefix}transform-origin-y');
 
   /** Sets the value of "transform-origin-y" */
-  void set transformOriginY(var value) {
+  void set transformOriginY(String value) {
     setProperty('${_browserPrefix}transform-origin-y', value, '');
   }
 
@@ -4976,7 +5327,7 @@
     getPropertyValue('${_browserPrefix}transform-origin-z');
 
   /** Sets the value of "transform-origin-z" */
-  void set transformOriginZ(var value) {
+  void set transformOriginZ(String value) {
     setProperty('${_browserPrefix}transform-origin-z', value, '');
   }
 
@@ -4985,7 +5336,7 @@
     getPropertyValue('${_browserPrefix}transform-style');
 
   /** Sets the value of "transform-style" */
-  void set transformStyle(var value) {
+  void set transformStyle(String value) {
     setProperty('${_browserPrefix}transform-style', value, '');
   }
 
@@ -4994,7 +5345,7 @@
     getPropertyValue('${_browserPrefix}transition');
 
   /** Sets the value of "transition" */
-  void set transition(var value) {
+  void set transition(String value) {
     setProperty('${_browserPrefix}transition', value, '');
   }
 
@@ -5003,7 +5354,7 @@
     getPropertyValue('${_browserPrefix}transition-delay');
 
   /** Sets the value of "transition-delay" */
-  void set transitionDelay(var value) {
+  void set transitionDelay(String value) {
     setProperty('${_browserPrefix}transition-delay', value, '');
   }
 
@@ -5012,7 +5363,7 @@
     getPropertyValue('${_browserPrefix}transition-duration');
 
   /** Sets the value of "transition-duration" */
-  void set transitionDuration(var value) {
+  void set transitionDuration(String value) {
     setProperty('${_browserPrefix}transition-duration', value, '');
   }
 
@@ -5021,7 +5372,7 @@
     getPropertyValue('${_browserPrefix}transition-property');
 
   /** Sets the value of "transition-property" */
-  void set transitionProperty(var value) {
+  void set transitionProperty(String value) {
     setProperty('${_browserPrefix}transition-property', value, '');
   }
 
@@ -5030,7 +5381,7 @@
     getPropertyValue('${_browserPrefix}transition-timing-function');
 
   /** Sets the value of "transition-timing-function" */
-  void set transitionTimingFunction(var value) {
+  void set transitionTimingFunction(String value) {
     setProperty('${_browserPrefix}transition-timing-function', value, '');
   }
 
@@ -5039,7 +5390,7 @@
     getPropertyValue('unicode-bidi');
 
   /** Sets the value of "unicode-bidi" */
-  void set unicodeBidi(var value) {
+  void set unicodeBidi(String value) {
     setProperty('unicode-bidi', value, '');
   }
 
@@ -5048,7 +5399,7 @@
     getPropertyValue('unicode-range');
 
   /** Sets the value of "unicode-range" */
-  void set unicodeRange(var value) {
+  void set unicodeRange(String value) {
     setProperty('unicode-range', value, '');
   }
 
@@ -5057,7 +5408,7 @@
     getPropertyValue('${_browserPrefix}user-drag');
 
   /** Sets the value of "user-drag" */
-  void set userDrag(var value) {
+  void set userDrag(String value) {
     setProperty('${_browserPrefix}user-drag', value, '');
   }
 
@@ -5066,7 +5417,7 @@
     getPropertyValue('${_browserPrefix}user-modify');
 
   /** Sets the value of "user-modify" */
-  void set userModify(var value) {
+  void set userModify(String value) {
     setProperty('${_browserPrefix}user-modify', value, '');
   }
 
@@ -5075,16 +5426,25 @@
     getPropertyValue('${_browserPrefix}user-select');
 
   /** Sets the value of "user-select" */
-  void set userSelect(var value) {
+  void set userSelect(String value) {
     setProperty('${_browserPrefix}user-select', value, '');
   }
 
+  /** Gets the value of "user-zoom" */
+  String get userZoom =>
+    getPropertyValue('user-zoom');
+
+  /** Sets the value of "user-zoom" */
+  void set userZoom(String value) {
+    setProperty('user-zoom', value, '');
+  }
+
   /** Gets the value of "vertical-align" */
   String get verticalAlign =>
     getPropertyValue('vertical-align');
 
   /** Sets the value of "vertical-align" */
-  void set verticalAlign(var value) {
+  void set verticalAlign(String value) {
     setProperty('vertical-align', value, '');
   }
 
@@ -5093,7 +5453,7 @@
     getPropertyValue('visibility');
 
   /** Sets the value of "visibility" */
-  void set visibility(var value) {
+  void set visibility(String value) {
     setProperty('visibility', value, '');
   }
 
@@ -5102,7 +5462,7 @@
     getPropertyValue('white-space');
 
   /** Sets the value of "white-space" */
-  void set whiteSpace(var value) {
+  void set whiteSpace(String value) {
     setProperty('white-space', value, '');
   }
 
@@ -5111,7 +5471,7 @@
     getPropertyValue('widows');
 
   /** Sets the value of "widows" */
-  void set widows(var value) {
+  void set widows(String value) {
     setProperty('widows', value, '');
   }
 
@@ -5120,7 +5480,7 @@
     getPropertyValue('width');
 
   /** Sets the value of "width" */
-  void set width(var value) {
+  void set width(String value) {
     setProperty('width', value, '');
   }
 
@@ -5129,7 +5489,7 @@
     getPropertyValue('word-break');
 
   /** Sets the value of "word-break" */
-  void set wordBreak(var value) {
+  void set wordBreak(String value) {
     setProperty('word-break', value, '');
   }
 
@@ -5138,7 +5498,7 @@
     getPropertyValue('word-spacing');
 
   /** Sets the value of "word-spacing" */
-  void set wordSpacing(var value) {
+  void set wordSpacing(String value) {
     setProperty('word-spacing', value, '');
   }
 
@@ -5147,17 +5507,35 @@
     getPropertyValue('word-wrap');
 
   /** Sets the value of "word-wrap" */
-  void set wordWrap(var value) {
+  void set wordWrap(String value) {
     setProperty('word-wrap', value, '');
   }
 
-  /** Gets the value of "wrap-shape" */
-  String get wrapShape =>
-    getPropertyValue('${_browserPrefix}wrap-shape');
+  /** Gets the value of "wrap" */
+  String get wrap =>
+    getPropertyValue('${_browserPrefix}wrap');
 
-  /** Sets the value of "wrap-shape" */
-  void set wrapShape(var value) {
-    setProperty('${_browserPrefix}wrap-shape', value, '');
+  /** Sets the value of "wrap" */
+  void set wrap(String value) {
+    setProperty('${_browserPrefix}wrap', value, '');
+  }
+
+  /** Gets the value of "wrap-flow" */
+  String get wrapFlow =>
+    getPropertyValue('${_browserPrefix}wrap-flow');
+
+  /** Sets the value of "wrap-flow" */
+  void set wrapFlow(String value) {
+    setProperty('${_browserPrefix}wrap-flow', value, '');
+  }
+
+  /** Gets the value of "wrap-through" */
+  String get wrapThrough =>
+    getPropertyValue('${_browserPrefix}wrap-through');
+
+  /** Sets the value of "wrap-through" */
+  void set wrapThrough(String value) {
+    setProperty('${_browserPrefix}wrap-through', value, '');
   }
 
   /** Gets the value of "writing-mode" */
@@ -5165,7 +5543,7 @@
     getPropertyValue('${_browserPrefix}writing-mode');
 
   /** Sets the value of "writing-mode" */
-  void set writingMode(var value) {
+  void set writingMode(String value) {
     setProperty('${_browserPrefix}writing-mode', value, '');
   }
 
@@ -5174,7 +5552,7 @@
     getPropertyValue('z-index');
 
   /** Sets the value of "z-index" */
-  void set zIndex(var value) {
+  void set zIndex(String value) {
     setProperty('z-index', value, '');
   }
 
@@ -5183,7 +5561,7 @@
     getPropertyValue('zoom');
 
   /** Sets the value of "zoom" */
-  void set zoom(var value) {
+  void set zoom(String value) {
     setProperty('zoom', value, '');
   }
 }
@@ -5372,13 +5750,10 @@
 class CanvasElement extends _Element_Merged {
 
   factory CanvasElement({int width, int height}) {
-    if (!?width) {
-      return _Elements.createCanvasElement();
-    }
-    if (!?height) {
-      return _Elements.createCanvasElement(width);
-    }
-    return _Elements.createCanvasElement(width, height);
+    var e = document.$dom_createElement("canvas");
+    if (width != null) e.width = width;
+    if (height != null) e.height = height;
+    return e;
   }
   CanvasElement.internal(): super.internal();
 
@@ -6464,7 +6839,7 @@
 /// @domName HTMLContentElement
 class ContentElement extends _Element_Merged {
 
-  factory ContentElement() => _Elements.createContentElement();
+  factory ContentElement() => document.$dom_createElement("content");
   ContentElement.internal(): super.internal();
 
 
@@ -6628,7 +7003,7 @@
 /// @domName HTMLDListElement
 class DListElement extends _Element_Merged {
 
-  factory DListElement() => _Elements.createDListElement();
+  factory DListElement() => document.$dom_createElement("dl");
   DListElement.internal(): super.internal();
 
 
@@ -6651,9 +7026,7 @@
 class DOMApplicationCache extends EventTarget {
   DOMApplicationCache.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   DOMApplicationCacheEvents get on =>
     new DOMApplicationCacheEvents(this);
 
@@ -6987,6 +7360,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  DOMMimeType get first => this[0];
+
   DOMMimeType get last => this[length - 1];
 
   DOMMimeType removeLast() {
@@ -7148,6 +7523,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  DOMPlugin get first => this[0];
+
   DOMPlugin get last => this[length - 1];
 
   DOMPlugin removeLast() {
@@ -7385,7 +7762,7 @@
 /// @domName HTMLDataListElement
 class DataListElement extends _Element_Merged {
 
-  factory DataListElement() => _Elements.createDataListElement();
+  factory DataListElement() => document.$dom_createElement("datalist");
   DataListElement.internal(): super.internal();
 
 
@@ -7772,9 +8149,7 @@
 class DedicatedWorkerContext extends WorkerContext {
   DedicatedWorkerContext.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   DedicatedWorkerContextEvents get on =>
     new DedicatedWorkerContextEvents(this);
 
@@ -7815,7 +8190,7 @@
 /// @domName HTMLDetailsElement
 class DetailsElement extends _Element_Merged {
 
-  factory DetailsElement() => _Elements.createDetailsElement();
+  factory DetailsElement() => document.$dom_createElement("details");
   DetailsElement.internal(): super.internal();
 
 
@@ -7993,7 +8368,7 @@
 /// @domName HTMLDivElement
 class DivElement extends _Element_Merged {
 
-  factory DivElement() => _Elements.createDivElement();
+  factory DivElement() => document.$dom_createElement("div");
   DivElement.internal(): super.internal();
 
 }
@@ -8007,9 +8382,7 @@
 
   Document.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   DocumentEvents get on =>
     new DocumentEvents(this);
 
@@ -8388,24 +8761,30 @@
       _DocumentFragmentFactoryProvider.createDocumentFragment_html(html);
 
   factory DocumentFragment.svg(String svgContent) =>
-      new _DocumentFragmentFactoryProvider.createDocumentFragment_svg(svgContent);
+      _DocumentFragmentFactoryProvider.createDocumentFragment_svg(svgContent);
 
-  List<Element> _elements;
-
-  List<Element> get elements {
-    if (_elements == null) {
-      _elements = new FilteredElementList(this);
-    }
-    return _elements;
-  }
+  List<Element> get elements => this.children;
 
   // TODO: The type of value should be Collection<Element>. See http://b/5392897
   void set elements(value) {
+    this.children = value;
+  }
+
+  List<Element> _children;
+
+  List<Element> get children {
+    if (_children == null) {
+      _children = new FilteredElementList(this);
+    }
+    return _children;
+  }
+
+  void set children(Collection<Element> value) {
     // Copy list first since we don't want liveness during iteration.
     List copy = new List.from(value);
-    final elements = this.elements;
-    elements.clear();
-    elements.addAll(copy);
+    var children = this.children;
+    children.clear();
+    children.addAll(copy);
   }
 
   Element query(String selectors) => $dom_querySelector(selectors);
@@ -8615,9 +8994,7 @@
 
   DocumentFragment.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   ElementEvents get on =>
     new ElementEvents(this);
 
@@ -8868,6 +9245,11 @@
     return result;
   }
 
+  Element get first {
+    return _element.$dom_firstElementChild;
+  }
+
+
   Element get last {
     return _element.$dom_lastElementChild;
   }
@@ -8882,10 +9264,6 @@
 
   _FrozenElementList._wrap(this._nodeList);
 
-  Element get first {
-    return _nodeList[0];
-  }
-
   bool contains(Element element) {
     for (Element el in this) {
       if (el == element) return true;
@@ -8994,6 +9372,8 @@
     throw new UnsupportedError('');
   }
 
+  Element get first => _nodeList.first;
+
   Element get last => _nodeList.last;
 }
 
@@ -9021,16 +9401,7 @@
   bool get hasNext => _index < _list.length;
 }
 
-/**
- * All your attribute manipulation needs in one place.
- * Extends the regular Map interface by automatically coercing non-string
- * values to strings.
- */
-abstract class AttributeMap implements Map<String, String> {
-  void operator []=(String key, value);
-}
-
-class _ElementAttributeMap extends AttributeMap {
+class _ElementAttributeMap implements Map<String, String> {
 
   final Element _element;
 
@@ -9125,7 +9496,7 @@
  * Provides a Map abstraction on top of data-* attributes, similar to the
  * dataSet in the old DOM.
  */
-class _DataAttributeMap extends AttributeMap {
+class _DataAttributeMap implements Map<String, String> {
 
   final Map<String, String> $dom_attributes;
 
@@ -9238,7 +9609,7 @@
   String toString() => "($left, $top, $width, $height)";
 }
 
-class Element extends Node implements ElementTraversal {
+abstract class Element extends Node implements ElementTraversal {
 
   factory Element.html(String html) =>
       _ElementFactoryProvider.createElement_html(html);
@@ -9249,7 +9620,7 @@
    * @domName Element.hasAttribute, Element.getAttribute, Element.setAttribute,
    *   Element.removeAttribute
    */
-  _ElementAttributeMap get attributes => new _ElementAttributeMap(this);
+  Map<String, String> get attributes => new _ElementAttributeMap(this);
 
   void set attributes(Map<String, String> value) {
     Map<String, String> attributes = this.attributes;
@@ -9260,16 +9631,27 @@
   }
 
   void set elements(Collection<Element> value) {
-    final elements = this.elements;
-    elements.clear();
-    elements.addAll(value);
+    this.children = value;
   }
 
   /**
+   * Deprecated, use [children] instead.
+   */
+  List<Element> get elements => this.children;
+
+  /**
    * @domName childElementCount, firstElementChild, lastElementChild,
    *   children, Node.nodes.add
    */
-  List<Element> get elements => new _ChildrenElementList._wrap(this);
+  List<Element> get children => new _ChildrenElementList._wrap(this);
+
+  void set children(Collection<Element> value) {
+    // Copy list first since we don't want liveness during iteration.
+    List copy = new List.from(value);
+    var children = this.children;
+    children.clear();
+    children.addAll(copy);
+  }
 
   Element query(String selectors) => $dom_querySelector(selectors);
 
@@ -9355,67 +9737,65 @@
 
   Element.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   ElementEvents get on =>
     new ElementEvents(this);
 
-  /** @domName HTMLElement.children */
+  /// @domName HTMLElement.children; @docsEditable true
   HTMLCollection get $dom_children;
 
-  /** @domName HTMLElement.contentEditable */
+  /// @domName HTMLElement.contentEditable; @docsEditable true
   String contentEditable;
 
-  /** @domName HTMLElement.dir */
+  /// @domName HTMLElement.dir; @docsEditable true
   String dir;
 
-  /** @domName HTMLElement.draggable */
+  /// @domName HTMLElement.draggable; @docsEditable true
   bool draggable;
 
-  /** @domName HTMLElement.hidden */
+  /// @domName HTMLElement.hidden; @docsEditable true
   bool hidden;
 
-  /** @domName HTMLElement.id */
+  /// @domName HTMLElement.id; @docsEditable true
   String id;
 
-  /** @domName HTMLElement.innerHTML */
+  /// @domName HTMLElement.innerHTML; @docsEditable true
   String innerHTML;
 
-  /** @domName HTMLElement.isContentEditable */
+  /// @domName HTMLElement.isContentEditable; @docsEditable true
   bool get isContentEditable;
 
-  /** @domName HTMLElement.lang */
+  /// @domName HTMLElement.lang; @docsEditable true
   String lang;
 
-  /** @domName HTMLElement.outerHTML */
+  /// @domName HTMLElement.outerHTML; @docsEditable true
   String get outerHTML;
 
-  /** @domName HTMLElement.spellcheck */
+  /// @domName HTMLElement.spellcheck; @docsEditable true
   bool spellcheck;
 
-  /** @domName HTMLElement.tabIndex */
+  /// @domName HTMLElement.tabIndex; @docsEditable true
   int tabIndex;
 
-  /** @domName HTMLElement.title */
+  /// @domName HTMLElement.title; @docsEditable true
   String title;
 
-  /** @domName HTMLElement.translate */
+  /// @domName HTMLElement.translate; @docsEditable true
   bool translate;
 
-  /** @domName HTMLElement.webkitdropzone */
+  /// @domName HTMLElement.webkitdropzone; @docsEditable true
   String webkitdropzone;
 
-  /** @domName HTMLElement.click */
+  /// @domName HTMLElement.click; @docsEditable true
   void click();
 
-  /** @domName HTMLElement.insertAdjacentElement */
+  /// @domName HTMLElement.insertAdjacentElement; @docsEditable true
   Element insertAdjacentElement(String where, Element element);
 
-  /** @domName HTMLElement.insertAdjacentHTML */
+  /// @domName HTMLElement.insertAdjacentHTML; @docsEditable true
   void insertAdjacentHTML(String where, String html);
 
-  /** @domName HTMLElement.insertAdjacentText */
+  /// @domName HTMLElement.insertAdjacentText; @docsEditable true
   void insertAdjacentText(String where, String text);
 
   static const int ALLOW_KEYBOARD_INPUT = 1;
@@ -9654,15 +10034,15 @@
     temp.innerHTML = html;
 
     Element element;
-    if (temp.elements.length == 1) {
-      element = temp.elements[0];
-    } else if (parentTag == 'html' && temp.elements.length == 2) {
+    if (temp.children.length == 1) {
+      element = temp.children[0];
+    } else if (parentTag == 'html' && temp.children.length == 2) {
       // Work around for edge case in WebKit and possibly other browsers where
       // both body and head elements are created even though the inner html
       // only contains a head or body element.
-      element = temp.elements[tag == 'head' ? 0 : 1];
+      element = temp.children[tag == 'head' ? 0 : 1];
     } else {
-      throw new ArgumentError('HTML had ${temp.elements.length} '
+      throw new ArgumentError('HTML had ${temp.children.length} '
           'top level elements but 1 expected');
     }
     element.remove();
@@ -9843,7 +10223,7 @@
 /// @domName HTMLEmbedElement
 class EmbedElement extends _Element_Merged {
 
-  factory EmbedElement() => _Elements.createEmbedElement();
+  factory EmbedElement() => document.$dom_createElement("embed");
   EmbedElement.internal(): super.internal();
 
 
@@ -10263,9 +10643,7 @@
   factory EventSource(String scriptUrl) => _EventSourceFactoryProvider.createEventSource(scriptUrl);
   EventSource.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   EventSourceEvents get on =>
     new EventSourceEvents(this);
 
@@ -10394,7 +10772,7 @@
 /// @domName HTMLFieldSetElement
 class FieldSetElement extends _Element_Merged {
 
-  factory FieldSetElement() => _Elements.createFieldSetElement();
+  factory FieldSetElement() => document.$dom_createElement("fieldset");
   FieldSetElement.internal(): super.internal();
 
 
@@ -10623,9 +11001,7 @@
   factory FileReader() => _FileReaderFactoryProvider.createFileReader();
   FileReader.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   FileReaderEvents get on =>
     new FileReaderEvents(this);
 
@@ -10768,9 +11144,7 @@
 class FileWriter extends EventTarget {
   FileWriter.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   FileWriterEvents get on =>
     new FileWriterEvents(this);
 
@@ -10969,6 +11343,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  num get first => this[0];
+
   num get last => this[length - 1];
 
   num removeLast() {
@@ -11100,6 +11476,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  num get first => this[0];
+
   num get last => this[length - 1];
 
   num removeLast() {
@@ -11212,7 +11590,7 @@
 /// @domName HTMLFormElement
 class FormElement extends _Element_Merged {
 
-  factory FormElement() => _Elements.createFormElement();
+  factory FormElement() => document.$dom_createElement("form");
   FormElement.internal(): super.internal();
 
 
@@ -11411,9 +11789,7 @@
 class FrameSetElement extends _Element_Merged {
   FrameSetElement.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   FrameSetElementEvents get on =>
     new FrameSetElementEvents(this);
 
@@ -11566,7 +11942,7 @@
 /// @domName HTMLHRElement
 class HRElement extends _Element_Merged {
 
-  factory HRElement() => _Elements.createHRElement();
+  factory HRElement() => document.$dom_createElement("hr");
   HRElement.internal(): super.internal();
 
 
@@ -11677,6 +12053,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  Node get first => this[0];
+
   Node get last => this[length - 1];
 
   Node removeLast() {
@@ -11788,6 +12166,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  Node get first => this[0];
+
   Node get last => this[length - 1];
 
   Node removeLast() {
@@ -11890,7 +12270,7 @@
 /// @domName HTMLHeadElement
 class HeadElement extends _Element_Merged {
 
-  factory HeadElement() => _Elements.createHeadElement();
+  factory HeadElement() => document.$dom_createElement("head");
   HeadElement.internal(): super.internal();
 
 
@@ -11912,17 +12292,17 @@
 /// @domName HTMLHeadingElement
 class HeadingElement extends _Element_Merged {
 
-  factory HeadingElement.h1() => _Elements.createHeadingElement_h1();
+  factory HeadingElement.h1() => document.$dom_createElement("h1");
 
-  factory HeadingElement.h2() => _Elements.createHeadingElement_h2();
+  factory HeadingElement.h2() => document.$dom_createElement("h2");
 
-  factory HeadingElement.h3() => _Elements.createHeadingElement_h3();
+  factory HeadingElement.h3() => document.$dom_createElement("h3");
 
-  factory HeadingElement.h4() => _Elements.createHeadingElement_h4();
+  factory HeadingElement.h4() => document.$dom_createElement("h4");
 
-  factory HeadingElement.h5() => _Elements.createHeadingElement_h5();
+  factory HeadingElement.h5() => document.$dom_createElement("h5");
 
-  factory HeadingElement.h6() => _Elements.createHeadingElement_h6();
+  factory HeadingElement.h6() => document.$dom_createElement("h6");
   HeadingElement.internal(): super.internal();
 
 
@@ -12030,7 +12410,7 @@
 /// @domName HTMLHtmlElement
 class HtmlElement extends _Element_Merged {
 
-  factory HtmlElement() => _Elements.createHtmlElement();
+  factory HtmlElement() => document.$dom_createElement("html");
   HtmlElement.internal(): super.internal();
 
 }
@@ -12040,19 +12420,19 @@
 
 
 class HttpRequest extends EventTarget {
-  factory HttpRequest.get(String url, onSuccess(HttpRequest request)) =>
-      _HttpRequestFactoryProvider.createHttpRequest_get(url, onSuccess);
+  factory HttpRequest.get(String url, onComplete(HttpRequest request)) =>
+      _HttpRequestFactoryProvider.createHttpRequest_get(url, onComplete);
 
-  factory HttpRequest.getWithCredentials(String url, onSuccess(HttpRequest request)) =>
-      _HttpRequestFactoryProvider.createHttpRequestgetWithCredentials(url, onSuccess);
+  factory HttpRequest.getWithCredentials(String url,
+      onComplete(HttpRequest request)) =>
+      _HttpRequestFactoryProvider.createHttpRequest_getWithCredentials(url,
+      onComplete);
 
 
   factory HttpRequest() => _HttpRequestFactoryProvider.createHttpRequest();
   HttpRequest.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   HttpRequestEvents get on =>
     new HttpRequestEvents(this);
 
@@ -12232,9 +12612,7 @@
 class HttpRequestUpload extends EventTarget {
   HttpRequestUpload.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   HttpRequestUploadEvents get on =>
     new HttpRequestUploadEvents(this);
 
@@ -12370,9 +12748,7 @@
 class IDBDatabase extends EventTarget {
   IDBDatabase.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   IDBDatabaseEvents get on =>
     new IDBDatabaseEvents(this);
 
@@ -13026,9 +13402,7 @@
 class IDBOpenDBRequest extends IDBRequest implements EventTarget {
   IDBOpenDBRequest.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   IDBOpenDBRequestEvents get on =>
     new IDBOpenDBRequestEvents(this);
 
@@ -13052,9 +13426,7 @@
 class IDBRequest extends EventTarget {
   IDBRequest.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   IDBRequestEvents get on =>
     new IDBRequestEvents(this);
 
@@ -13118,9 +13490,7 @@
 class IDBTransaction extends EventTarget {
   IDBTransaction.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   IDBTransactionEvents get on =>
     new IDBTransactionEvents(this);
 
@@ -13220,9 +13590,7 @@
 class IDBVersionChangeRequest extends IDBRequest implements EventTarget {
   IDBVersionChangeRequest.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   IDBVersionChangeRequestEvents get on =>
     new IDBVersionChangeRequestEvents(this);
 
@@ -13243,7 +13611,7 @@
 /// @domName HTMLIFrameElement
 class IFrameElement extends _Element_Merged {
 
-  factory IFrameElement() => _Elements.createIFrameElement();
+  factory IFrameElement() => document.$dom_createElement("iframe");
   IFrameElement.internal(): super.internal();
 
 
@@ -13412,16 +13780,11 @@
 class ImageElement extends _Element_Merged {
 
   factory ImageElement({String src, int width, int height}) {
-    if (!?src) {
-      return _Elements.createImageElement();
-    }
-    if (!?width) {
-      return _Elements.createImageElement(src);
-    }
-    if (!?height) {
-      return _Elements.createImageElement(src, width);
-    }
-    return _Elements.createImageElement(src, width, height);
+    var e = document.$dom_createElement("img");
+    if (src != null) e.src = src;
+    if (width != null) e.width = width;
+    if (height != null) e.height = height;
+    return e;
   }
   ImageElement.internal(): super.internal();
 
@@ -13569,16 +13932,13 @@
 class InputElement extends _Element_Merged {
 
   factory InputElement({String type}) {
-    if (!?type) {
-      return _Elements.createInputElement();
-    }
-    return _Elements.createInputElement(type);
+    var e = document.$dom_createElement("input");
+    if (type != null) e.type = type;
+    return e;
   }
   InputElement.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   InputElementEvents get on =>
     new InputElementEvents(this);
 
@@ -14117,6 +14477,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  int get first => this[0];
+
   int get last => this[length - 1];
 
   int removeLast() {
@@ -14248,6 +14610,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  int get first => this[0];
+
   int get last => this[length - 1];
 
   int removeLast() {
@@ -14379,6 +14743,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  int get first => this[0];
+
   int get last => this[length - 1];
 
   int removeLast() {
@@ -14542,7 +14908,7 @@
 /// @domName HTMLKeygenElement
 class KeygenElement extends _Element_Merged {
 
-  factory KeygenElement() => _Elements.createKeygenElement();
+  factory KeygenElement() => document.$dom_createElement("keygen");
   KeygenElement.internal(): super.internal();
 
 
@@ -14628,7 +14994,7 @@
 /// @domName HTMLLIElement
 class LIElement extends _Element_Merged {
 
-  factory LIElement() => _Elements.createLIElement();
+  factory LIElement() => document.$dom_createElement("li");
   LIElement.internal(): super.internal();
 
 
@@ -14658,7 +15024,7 @@
 /// @domName HTMLLabelElement
 class LabelElement extends _Element_Merged {
 
-  factory LabelElement() => _Elements.createLabelElement();
+  factory LabelElement() => document.$dom_createElement("label");
   LabelElement.internal(): super.internal();
 
 
@@ -14688,7 +15054,7 @@
 /// @domName HTMLLegendElement
 class LegendElement extends _Element_Merged {
 
-  factory LegendElement() => _Elements.createLegendElement();
+  factory LegendElement() => document.$dom_createElement("legend");
   LegendElement.internal(): super.internal();
 
 
@@ -14714,7 +15080,7 @@
 /// @domName HTMLLinkElement
 class LinkElement extends _Element_Merged {
 
-  factory LinkElement() => _Elements.createLinkElement();
+  factory LinkElement() => document.$dom_createElement("link");
   LinkElement.internal(): super.internal();
 
 
@@ -14979,7 +15345,7 @@
    * registered under [name].
    */
   lookupPort(String name) {
-    var port = JSON.parse(localStorage['dart-port:$name']);
+    var port = JSON.parse(document.documentElement.attributes['dart-port:$name']);
     return _deserialize(port);
   }
 
@@ -14990,14 +15356,12 @@
    */
   registerPort(String name, var port) {
     var serialized = _serialize(port);
-    localStorage['dart-port:$name'] = JSON.stringify(serialized);
+    document.documentElement.attributes['dart-port:$name'] = JSON.stringify(serialized);
   }
 
   LocalWindow.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   LocalWindowEvents get on =>
     new LocalWindowEvents(this);
 
@@ -15230,10 +15594,6 @@
   String atob(String string) native "DOMWindow_atob_Callback";
 
 
-  /** @domName DOMWindow.blur */
-  void blur() native "DOMWindow_blur_Callback";
-
-
   /** @domName DOMWindow.btoa */
   String btoa(String string) native "DOMWindow_btoa_Callback";
 
@@ -15270,10 +15630,6 @@
   bool find(String string, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) native "DOMWindow_find_Callback";
 
 
-  /** @domName DOMWindow.focus */
-  void focus() native "DOMWindow_focus_Callback";
-
-
   /** @domName DOMWindow.getComputedStyle */
   CSSStyleDeclaration $dom_getComputedStyle(Element element, String pseudoElement) native "DOMWindow_getComputedStyle_Callback";
 
@@ -15546,7 +15902,7 @@
 /// @domName HTMLMapElement
 class MapElement extends _Element_Merged {
 
-  factory MapElement() => _Elements.createMapElement();
+  factory MapElement() => document.$dom_createElement("map");
   MapElement.internal(): super.internal();
 
 
@@ -15775,9 +16131,7 @@
 class MediaElement extends _Element_Merged {
   MediaElement.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   MediaElementEvents get on =>
     new MediaElementEvents(this);
 
@@ -16377,9 +16731,7 @@
   factory MediaStream(MediaStreamTrackList audioTracks, MediaStreamTrackList videoTracks) => _MediaStreamFactoryProvider.createMediaStream(audioTracks, videoTracks);
   MediaStream.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   MediaStreamEvents get on =>
     new MediaStreamEvents(this);
 
@@ -16465,9 +16817,7 @@
 class MediaStreamTrack extends EventTarget {
   MediaStreamTrack.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   MediaStreamTrackEvents get on =>
     new MediaStreamTrackEvents(this);
 
@@ -16547,9 +16897,7 @@
 class MediaStreamTrackList extends EventTarget {
   MediaStreamTrackList.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   MediaStreamTrackListEvents get on =>
     new MediaStreamTrackListEvents(this);
 
@@ -16624,7 +16972,7 @@
 /// @domName HTMLMenuElement
 class MenuElement extends _Element_Merged {
 
-  factory MenuElement() => _Elements.createMenuElement();
+  factory MenuElement() => document.$dom_createElement("menu");
   MenuElement.internal(): super.internal();
 
 
@@ -16709,9 +17057,7 @@
 class MessagePort extends EventTarget {
   MessagePort.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   MessagePortEvents get on =>
     new MessagePortEvents(this);
 
@@ -16828,7 +17174,7 @@
 /// @domName HTMLMeterElement
 class MeterElement extends _Element_Merged {
 
-  factory MeterElement() => _Elements.createMeterElement();
+  factory MeterElement() => document.$dom_createElement("meter");
   MeterElement.internal(): super.internal();
 
 
@@ -17270,6 +17616,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  Node get first => this[0];
+
   Node get last => this[length - 1];
 
   Node removeLast() {
@@ -17509,7 +17857,7 @@
   Collection map(f(Node element)) => _Collections.map(this, [], f);
 
   Collection<Node> filter(bool f(Node element)) =>
-     new _NodeListWrapper(_Collections.filter(this, <Node>[], f));
+     _Collections.filter(this, <Node>[], f);
 
   bool every(bool f(Node element)) => _Collections.every(this, f);
 
@@ -17545,7 +17893,7 @@
         "Cannot insertRange on immutable List.");
   }
   List<Node> getRange(int start, int rangeLength) =>
-    new _NodeListWrapper(_Lists.getRange(this, start, rangeLength, <Node>[]));
+      _Lists.getRange(this, start, rangeLength, <Node>[]);
 
   // -- end List<Node> mixins.
 
@@ -17821,195 +18169,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.
 
-
-// TODO(nweiz): when all implementations we target have the same name for the
-// implementation of List<E>, extend that rather than wrapping.
-class _ListWrapper<E> implements List<E> {
-  List _list;
-
-  _ListWrapper(List this._list);
-
-  Iterator<E> iterator() => _list.iterator();
-
-  bool contains(E element) => _list.contains(element);
-
-  void forEach(void f(E element)) => _list.forEach(f);
-
-  Collection map(f(E element)) => _list.map(f);
-
-  List<E> filter(bool f(E element)) => _list.filter(f);
-
-  bool every(bool f(E element)) => _list.every(f);
-
-  bool some(bool f(E element)) => _list.some(f);
-
-  bool get isEmpty => _list.isEmpty;
-
-  int get length => _list.length;
-
-  E operator [](int index) => _list[index];
-
-  void operator []=(int index, E value) { _list[index] = value; }
-
-  void set length(int newLength) { _list.length = newLength; }
-
-  void add(E value) => _list.add(value);
-
-  void addLast(E value) => _list.addLast(value);
-
-  void addAll(Collection<E> collection) => _list.addAll(collection);
-
-  void sort([Comparator<E> compare = Comparable.compare]) => _list.sort(compare);
-
-  int indexOf(E element, [int start = 0]) => _list.indexOf(element, start);
-
-  int lastIndexOf(E element, [int start = 0]) =>
-    _list.lastIndexOf(element, start);
-
-  void clear() => _list.clear();
-
-  E removeLast() => _list.removeLast();
-
-  E get last => _list.last;
-
-  List<E> getRange(int start, int rangeLength) =>
-    _list.getRange(start, rangeLength);
-
-  void setRange(int start, int rangeLength, List<E> from, [int startFrom = 0])
-      => _list.setRange(start, rangeLength, from, startFrom);
-
-  void removeRange(int start, int rangeLength) =>
-    _list.removeRange(start, rangeLength);
-
-  void insertRange(int start, int rangeLength, [E initialValue = null]) =>
-    _list.insertRange(start, rangeLength, initialValue);
-
-  E get first => _list[0];
-}
-
-/**
- * This class is used to insure the results of list operations are NodeLists
- * instead of lists.
- */
-class _NodeListWrapper extends _ListWrapper<Node> implements List {
-  _NodeListWrapper(List list) : super(list);
-
-  List<Node> filter(bool f(Node element)) =>
-    new _NodeListWrapper(_list.filter(f));
-
-  List<Node> getRange(int start, int rangeLength) =>
-    new _NodeListWrapper(_list.getRange(start, rangeLength));
-}
-
-class NodeList extends NativeFieldWrapperClass1 implements List<Node> {
-  Node _parent;
-
-  // -- start List<Node> mixins.
-  // Node is the element type.
-
-  // From Iterable<Node>:
-
-  Iterator<Node> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new FixedSizeListIterator<Node>(this);
-  }
-
-  // From Collection<Node>:
-
-  void add(Node value) {
-    _parent.$dom_appendChild(value);
-  }
-
-  void addLast(Node value) {
-    _parent.$dom_appendChild(value);
-  }
-
-  void addAll(Collection<Node> collection) {
-    for (Node node in collection) {
-      _parent.$dom_appendChild(node);
-    }
-  }
-
-  Node removeLast() {
-    final result = this.last;
-    if (result != null) {
-      _parent.$dom_removeChild(result);
-    }
-    return result;
-  }
-
-  void clear() {
-    _parent.text = '';
-  }
-
-  void operator []=(int index, Node value) {
-    _parent.$dom_replaceChild(value, this[index]);
-  }
-
-  bool contains(Node element) => _Collections.contains(this, element);
-
-  void forEach(void f(Node element)) => _Collections.forEach(this, f);
-
-  Collection map(f(Node element)) => _Collections.map(this, [], f);
-
-  Collection<Node> filter(bool f(Node element)) =>
-     new _NodeListWrapper(_Collections.filter(this, <Node>[], f));
-
-  bool every(bool f(Node element)) => _Collections.every(this, f);
-
-  bool some(bool f(Node element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<Node>:
-
-  void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(Node element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(Node element, [int start = 0]) =>
-      _Lists.lastIndexOf(this, element, start);
-
-  Node get last => this[length - 1];
-  Node get first => this[0];
-
-  // FIXME: implement thesee.
-  void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-  void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-  List<Node> getRange(int start, int rangeLength) =>
-    new _NodeListWrapper(_Lists.getRange(this, start, rangeLength, <Node>[]));
-
-  // -- end List<Node> mixins.
-
-  NodeList.internal();
-
-
-  /** @domName NodeList.length */
-  int get length native "NodeList_length_Getter";
-
-  Node operator[](int index) native "NodeList_item_Callback";
-
-
-  /** @domName NodeList.item */
-  Node _item(int index) native "NodeList_item_Callback";
-
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
 // WARNING: Do not edit - generated code.
 
 
@@ -18044,9 +18203,7 @@
   }
   Notification.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   NotificationEvents get on =>
     new NotificationEvents(this);
 
@@ -18235,7 +18392,7 @@
 /// @domName HTMLOListElement
 class OListElement extends _Element_Merged {
 
-  factory OListElement() => _Elements.createOListElement();
+  factory OListElement() => document.$dom_createElement("ol");
   OListElement.internal(): super.internal();
 
 
@@ -18281,7 +18438,7 @@
 /// @domName HTMLObjectElement
 class ObjectElement extends _Element_Merged {
 
-  factory ObjectElement() => _Elements.createObjectElement();
+  factory ObjectElement() => document.$dom_createElement("object");
   ObjectElement.internal(): super.internal();
 
 
@@ -18463,7 +18620,7 @@
 /// @domName HTMLOptGroupElement
 class OptGroupElement extends _Element_Merged {
 
-  factory OptGroupElement() => _Elements.createOptGroupElement();
+  factory OptGroupElement() => document.$dom_createElement("optgroup");
   OptGroupElement.internal(): super.internal();
 
 
@@ -18631,7 +18788,7 @@
 /// @domName HTMLOutputElement
 class OutputElement extends _Element_Merged {
 
-  factory OutputElement() => _Elements.createOutputElement();
+  factory OutputElement() => document.$dom_createElement("output");
   OutputElement.internal(): super.internal();
 
 
@@ -18883,7 +19040,7 @@
 /// @domName HTMLParagraphElement
 class ParagraphElement extends _Element_Merged {
 
-  factory ParagraphElement() => _Elements.createParagraphElement();
+  factory ParagraphElement() => document.$dom_createElement("p");
   ParagraphElement.internal(): super.internal();
 
 
@@ -18905,7 +19062,7 @@
 /// @domName HTMLParamElement
 class ParamElement extends _Element_Merged {
 
-  factory ParamElement() => _Elements.createParamElement();
+  factory ParamElement() => document.$dom_createElement("param");
   ParamElement.internal(): super.internal();
 
 
@@ -18954,9 +19111,7 @@
   factory PeerConnection00(String serverConfiguration, IceCallback iceCallback) => _PeerConnection00FactoryProvider.createPeerConnection00(serverConfiguration, iceCallback);
   PeerConnection00.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   PeerConnection00Events get on =>
     new PeerConnection00Events(this);
 
@@ -19323,7 +19478,7 @@
 /// @domName HTMLPreElement
 class PreElement extends _Element_Merged {
 
-  factory PreElement() => _Elements.createPreElement();
+  factory PreElement() => document.$dom_createElement("pre");
   PreElement.internal(): super.internal();
 
 
@@ -19381,7 +19536,7 @@
 /// @domName HTMLProgressElement
 class ProgressElement extends _Element_Merged {
 
-  factory ProgressElement() => _Elements.createProgressElement();
+  factory ProgressElement() => document.$dom_createElement("progress");
   ProgressElement.internal(): super.internal();
 
 
@@ -19488,9 +19643,7 @@
 class RTCDataChannel extends EventTarget {
   RTCDataChannel.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   RTCDataChannelEvents get on =>
     new RTCDataChannelEvents(this);
 
@@ -19667,9 +19820,7 @@
   }
   RTCPeerConnection.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   RTCPeerConnectionEvents get on =>
     new RTCPeerConnectionEvents(this);
 
@@ -19882,7 +20033,7 @@
 
 
 /// @domName RadioNodeList
-class RadioNodeList extends NodeList {
+class RadioNodeList extends _NodeList {
   RadioNodeList.internal(): super.internal();
 
 
@@ -20285,6 +20436,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  Map get first => this[0];
+
   Map get last => this[length - 1];
 
   Map removeLast() {
@@ -20439,7 +20592,7 @@
 /// @domName HTMLScriptElement
 class ScriptElement extends _Element_Merged {
 
-  factory ScriptElement() => _Elements.createScriptElement();
+  factory ScriptElement() => document.$dom_createElement("script");
   ScriptElement.internal(): super.internal();
 
 
@@ -20518,9 +20671,7 @@
 class ScriptProcessorNode extends AudioNode implements EventTarget {
   ScriptProcessorNode.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   ScriptProcessorNodeEvents get on =>
     new ScriptProcessorNodeEvents(this);
 
@@ -20617,7 +20768,7 @@
 /// @domName HTMLSelectElement
 class SelectElement extends _Element_Merged {
 
-  factory SelectElement() => _Elements.createSelectElement();
+  factory SelectElement() => document.$dom_createElement("select");
   SelectElement.internal(): super.internal();
 
 
@@ -20879,9 +21030,7 @@
 class SharedWorkerContext extends WorkerContext {
   SharedWorkerContext.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   SharedWorkerContextEvents get on =>
     new SharedWorkerContextEvents(this);
 
@@ -21003,6 +21152,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  SourceBuffer get first => this[0];
+
   SourceBuffer get last => this[length - 1];
 
   SourceBuffer removeLast() {
@@ -21053,7 +21204,7 @@
 /// @domName HTMLSourceElement
 class SourceElement extends _Element_Merged {
 
-  factory SourceElement() => _Elements.createSourceElement();
+  factory SourceElement() => document.$dom_createElement("source");
   SourceElement.internal(): super.internal();
 
 
@@ -21091,7 +21242,7 @@
 /// @domName HTMLSpanElement
 class SpanElement extends _Element_Merged {
 
-  factory SpanElement() => _Elements.createSpanElement();
+  factory SpanElement() => document.$dom_createElement("span");
   SpanElement.internal(): super.internal();
 
 }
@@ -21202,6 +21353,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  SpeechGrammar get first => this[0];
+
   SpeechGrammar get last => this[length - 1];
 
   SpeechGrammar removeLast() {
@@ -21311,9 +21464,7 @@
   factory SpeechRecognition() => _SpeechRecognitionFactoryProvider.createSpeechRecognition();
   SpeechRecognition.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   SpeechRecognitionEvents get on =>
     new SpeechRecognitionEvents(this);
 
@@ -21532,7 +21683,7 @@
 
   String operator [](String key) => $dom_getItem(key);
 
-  void operator []=(String key, String value) => $dom_setItem(key, value);
+  void operator []=(String key, String value) { $dom_setItem(key, value); }
 
   String putIfAbsent(String key, String ifAbsent()) {
     if (!containsKey(key)) this[key] = ifAbsent();
@@ -21700,7 +21851,7 @@
 /// @domName HTMLStyleElement
 class StyleElement extends _Element_Merged {
 
-  factory StyleElement() => _Elements.createStyleElement();
+  factory StyleElement() => document.$dom_createElement("style");
   StyleElement.internal(): super.internal();
 
 
@@ -21814,7 +21965,7 @@
 /// @domName HTMLTableCaptionElement
 class TableCaptionElement extends _Element_Merged {
 
-  factory TableCaptionElement() => _Elements.createTableCaptionElement();
+  factory TableCaptionElement() => document.$dom_createElement("caption");
   TableCaptionElement.internal(): super.internal();
 
 
@@ -21836,7 +21987,7 @@
 /// @domName HTMLTableCellElement
 class TableCellElement extends _Element_Merged {
 
-  factory TableCellElement() => _Elements.createTableCellElement();
+  factory TableCellElement() => document.$dom_createElement("td");
   TableCellElement.internal(): super.internal();
 
 
@@ -21966,7 +22117,7 @@
 /// @domName HTMLTableColElement
 class TableColElement extends _Element_Merged {
 
-  factory TableColElement() => _Elements.createTableColElement();
+  factory TableColElement() => document.$dom_createElement("col");
   TableColElement.internal(): super.internal();
 
 
@@ -22028,7 +22179,7 @@
 /// @domName HTMLTableElement
 class TableElement extends _Element_Merged {
 
-  factory TableElement() => _Elements.createTableElement();
+  factory TableElement() => document.$dom_createElement("table");
   TableElement.internal(): super.internal();
 
 
@@ -22182,7 +22333,7 @@
 /// @domName HTMLTableRowElement
 class TableRowElement extends _Element_Merged {
 
-  factory TableRowElement() => _Elements.createTableRowElement();
+  factory TableRowElement() => document.$dom_createElement("tr");
   TableRowElement.internal(): super.internal();
 
 
@@ -22336,7 +22487,7 @@
 /// @domName HTMLTextAreaElement
 class TextAreaElement extends _Element_Merged {
 
-  factory TextAreaElement() => _Elements.createTextAreaElement();
+  factory TextAreaElement() => document.$dom_createElement("textarea");
   TextAreaElement.internal(): super.internal();
 
 
@@ -22591,9 +22742,7 @@
 class TextTrack extends EventTarget {
   TextTrack.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   TextTrackEvents get on =>
     new TextTrackEvents(this);
 
@@ -22665,9 +22814,7 @@
   factory TextTrackCue(num startTime, num endTime, String text) => _TextTrackCueFactoryProvider.createTextTrackCue(startTime, endTime, text);
   TextTrackCue.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   TextTrackCueEvents get on =>
     new TextTrackCueEvents(this);
 
@@ -22863,6 +23010,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  TextTrackCue get first => this[0];
+
   TextTrackCue get last => this[length - 1];
 
   TextTrackCue removeLast() {
@@ -22906,9 +23055,7 @@
 class TextTrackList extends EventTarget implements List<TextTrack> {
   TextTrackList.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   TextTrackListEvents get on =>
     new TextTrackListEvents(this);
 
@@ -22976,6 +23123,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  TextTrack get first => this[0];
+
   TextTrack get last => this[length - 1];
 
   TextTrack removeLast() {
@@ -23064,7 +23213,7 @@
 /// @domName HTMLTitleElement
 class TitleElement extends _Element_Merged {
 
-  factory TitleElement() => _Elements.createTitleElement();
+  factory TitleElement() => document.$dom_createElement("title");
   TitleElement.internal(): super.internal();
 
 }
@@ -23247,6 +23396,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  Touch get first => this[0];
+
   Touch get last => this[length - 1];
 
   Touch removeLast() {
@@ -23285,7 +23436,7 @@
 /// @domName HTMLTrackElement
 class TrackElement extends _Element_Merged {
 
-  factory TrackElement() => _Elements.createTrackElement();
+  factory TrackElement() => document.$dom_createElement("track");
   TrackElement.internal(): super.internal();
 
   static const int ERROR = 3;
@@ -23507,7 +23658,7 @@
 /// @domName HTMLUListElement
 class UListElement extends _Element_Merged {
 
-  factory UListElement() => _Elements.createUListElement();
+  factory UListElement() => document.$dom_createElement("ul");
   UListElement.internal(): super.internal();
 
 
@@ -23615,6 +23766,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  int get first => this[0];
+
   int get last => this[length - 1];
 
   int removeLast() {
@@ -23746,6 +23899,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  int get first => this[0];
+
   int get last => this[length - 1];
 
   int removeLast() {
@@ -23877,6 +24032,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  int get first => this[0];
+
   int get last => this[length - 1];
 
   int removeLast() {
@@ -24083,7 +24240,7 @@
 /// @domName HTMLVideoElement
 class VideoElement extends MediaElement {
 
-  factory VideoElement() => _Elements.createVideoElement();
+  factory VideoElement() => document.$dom_createElement("video");
   VideoElement.internal(): super.internal();
 
 
@@ -25874,9 +26031,7 @@
   factory WebSocket(String url) => _WebSocketFactoryProvider.createWebSocket(url);
   WebSocket.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   WebSocketEvents get on =>
     new WebSocketEvents(this);
 
@@ -26019,9 +26174,7 @@
   factory Worker(String scriptUrl) => _WorkerFactoryProvider.createWorker(scriptUrl);
   Worker.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   WorkerEvents get on =>
     new WorkerEvents(this);
 
@@ -26051,9 +26204,7 @@
 class WorkerContext extends EventTarget {
   WorkerContext.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
   WorkerContextEvents get on =>
     new WorkerContextEvents(this);
 
@@ -26561,6 +26712,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  CSSRule get first => this[0];
+
   CSSRule get last => this[length - 1];
 
   CSSRule removeLast() {
@@ -26664,6 +26817,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  CSSValue get first => this[0];
+
   CSSValue get last => this[length - 1];
 
   CSSValue removeLast() {
@@ -26767,6 +26922,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  ClientRect get first => this[0];
+
   ClientRect get last => this[length - 1];
 
   ClientRect removeLast() {
@@ -26878,6 +27035,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  String get first => this[0];
+
   String get last => this[length - 1];
 
   String removeLast() {
@@ -27058,311 +27217,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.
 
-
-class _Elements {
-
-
-  static AnchorElement createAnchorElement([String href]) {
-    AnchorElement _e = document.$dom_createElement("a");
-    if (href != null) _e.href = href;
-    return _e;
-  }
-
-  static AreaElement createAreaElement() {
-    AreaElement _e = document.$dom_createElement("area");
-    return _e;
-  }
-
-  static BRElement createBRElement() {
-    BRElement _e = document.$dom_createElement("br");
-    return _e;
-  }
-
-  static BaseElement createBaseElement() {
-    BaseElement _e = document.$dom_createElement("base");
-    return _e;
-  }
-
-  static BodyElement createBodyElement() {
-    BodyElement _e = document.$dom_createElement("body");
-    return _e;
-  }
-
-  static ButtonElement createButtonElement() {
-    ButtonElement _e = document.$dom_createElement("button");
-    return _e;
-  }
-
-  static CanvasElement createCanvasElement([int width, int height]) {
-    CanvasElement _e = document.$dom_createElement("canvas");
-    if (width != null) _e.width = width;
-    if (height != null) _e.height = height;
-    return _e;
-  }
-
-  static ContentElement createContentElement() {
-    ContentElement _e = document.$dom_createElement("content");
-    return _e;
-  }
-
-  static DListElement createDListElement() {
-    DListElement _e = document.$dom_createElement("dl");
-    return _e;
-  }
-
-  static DataListElement createDataListElement() {
-    DataListElement _e = document.$dom_createElement("datalist");
-    return _e;
-  }
-
-  static DetailsElement createDetailsElement() {
-    DetailsElement _e = document.$dom_createElement("details");
-    return _e;
-  }
-
-  static DivElement createDivElement() {
-    DivElement _e = document.$dom_createElement("div");
-    return _e;
-  }
-
-  static EmbedElement createEmbedElement() {
-    EmbedElement _e = document.$dom_createElement("embed");
-    return _e;
-  }
-
-  static FieldSetElement createFieldSetElement() {
-    FieldSetElement _e = document.$dom_createElement("fieldset");
-    return _e;
-  }
-
-  static FormElement createFormElement() {
-    FormElement _e = document.$dom_createElement("form");
-    return _e;
-  }
-
-  static HRElement createHRElement() {
-    HRElement _e = document.$dom_createElement("hr");
-    return _e;
-  }
-
-  static HeadElement createHeadElement() {
-    HeadElement _e = document.$dom_createElement("head");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h1() {
-    HeadingElement _e = document.$dom_createElement("h1");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h2() {
-    HeadingElement _e = document.$dom_createElement("h2");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h3() {
-    HeadingElement _e = document.$dom_createElement("h3");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h4() {
-    HeadingElement _e = document.$dom_createElement("h4");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h5() {
-    HeadingElement _e = document.$dom_createElement("h5");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h6() {
-    HeadingElement _e = document.$dom_createElement("h6");
-    return _e;
-  }
-
-  static HtmlElement createHtmlElement() {
-    HtmlElement _e = document.$dom_createElement("html");
-    return _e;
-  }
-
-  static IFrameElement createIFrameElement() {
-    IFrameElement _e = document.$dom_createElement("iframe");
-    return _e;
-  }
-
-  static ImageElement createImageElement([String src, int width, int height]) {
-    ImageElement _e = document.$dom_createElement("img");
-    if (src != null) _e.src = src;
-    if (width != null) _e.width = width;
-    if (height != null) _e.height = height;
-    return _e;
-  }
-
-  static InputElement createInputElement([String type]) {
-    InputElement _e = document.$dom_createElement("input");
-    if (type != null) _e.type = type;
-    return _e;
-  }
-
-  static KeygenElement createKeygenElement() {
-    KeygenElement _e = document.$dom_createElement("keygen");
-    return _e;
-  }
-
-  static LIElement createLIElement() {
-    LIElement _e = document.$dom_createElement("li");
-    return _e;
-  }
-
-  static LabelElement createLabelElement() {
-    LabelElement _e = document.$dom_createElement("label");
-    return _e;
-  }
-
-  static LegendElement createLegendElement() {
-    LegendElement _e = document.$dom_createElement("legend");
-    return _e;
-  }
-
-  static LinkElement createLinkElement() {
-    LinkElement _e = document.$dom_createElement("link");
-    return _e;
-  }
-
-  static MapElement createMapElement() {
-    MapElement _e = document.$dom_createElement("map");
-    return _e;
-  }
-
-  static MenuElement createMenuElement() {
-    MenuElement _e = document.$dom_createElement("menu");
-    return _e;
-  }
-
-  static MeterElement createMeterElement() {
-    MeterElement _e = document.$dom_createElement("meter");
-    return _e;
-  }
-
-  static OListElement createOListElement() {
-    OListElement _e = document.$dom_createElement("ol");
-    return _e;
-  }
-
-  static ObjectElement createObjectElement() {
-    ObjectElement _e = document.$dom_createElement("object");
-    return _e;
-  }
-
-  static OptGroupElement createOptGroupElement() {
-    OptGroupElement _e = document.$dom_createElement("optgroup");
-    return _e;
-  }
-
-  static OutputElement createOutputElement() {
-    OutputElement _e = document.$dom_createElement("output");
-    return _e;
-  }
-
-  static ParagraphElement createParagraphElement() {
-    ParagraphElement _e = document.$dom_createElement("p");
-    return _e;
-  }
-
-  static ParamElement createParamElement() {
-    ParamElement _e = document.$dom_createElement("param");
-    return _e;
-  }
-
-  static PreElement createPreElement() {
-    PreElement _e = document.$dom_createElement("pre");
-    return _e;
-  }
-
-  static ProgressElement createProgressElement() {
-    ProgressElement _e = document.$dom_createElement("progress");
-    return _e;
-  }
-
-  static ScriptElement createScriptElement() {
-    ScriptElement _e = document.$dom_createElement("script");
-    return _e;
-  }
-
-  static SelectElement createSelectElement() {
-    SelectElement _e = document.$dom_createElement("select");
-    return _e;
-  }
-
-  static SourceElement createSourceElement() {
-    SourceElement _e = document.$dom_createElement("source");
-    return _e;
-  }
-
-  static SpanElement createSpanElement() {
-    SpanElement _e = document.$dom_createElement("span");
-    return _e;
-  }
-
-  static StyleElement createStyleElement() {
-    StyleElement _e = document.$dom_createElement("style");
-    return _e;
-  }
-
-  static TableCaptionElement createTableCaptionElement() {
-    TableCaptionElement _e = document.$dom_createElement("caption");
-    return _e;
-  }
-
-  static TableCellElement createTableCellElement() {
-    TableCellElement _e = document.$dom_createElement("td");
-    return _e;
-  }
-
-  static TableColElement createTableColElement() {
-    TableColElement _e = document.$dom_createElement("col");
-    return _e;
-  }
-
-  static TableElement createTableElement() {
-    TableElement _e = document.$dom_createElement("table");
-    return _e;
-  }
-
-  static TableRowElement createTableRowElement() {
-    TableRowElement _e = document.$dom_createElement("tr");
-    return _e;
-  }
-
-  static TextAreaElement createTextAreaElement() {
-    TextAreaElement _e = document.$dom_createElement("textarea");
-    return _e;
-  }
-
-  static TitleElement createTitleElement() {
-    TitleElement _e = document.$dom_createElement("title");
-    return _e;
-  }
-
-  static TrackElement createTrackElement() {
-    TrackElement _e = document.$dom_createElement("track");
-    return _e;
-  }
-
-  static UListElement createUListElement() {
-    UListElement _e = document.$dom_createElement("ul");
-    return _e;
-  }
-
-  static VideoElement createVideoElement() {
-    VideoElement _e = document.$dom_createElement("video");
-    return _e;
-  }
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
 // WARNING: Do not edit - generated code.
 
 
@@ -27434,6 +27288,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  Entry get first => this[0];
+
   Entry get last => this[length - 1];
 
   Entry removeLast() {
@@ -27537,6 +27393,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  EntrySync get first => this[0];
+
   EntrySync get last => this[length - 1];
 
   EntrySync removeLast() {
@@ -27648,6 +27506,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  File get first => this[0];
+
   File get last => this[length - 1];
 
   File removeLast() {
@@ -27775,6 +27635,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  Gamepad get first => this[0];
+
   Gamepad get last => this[length - 1];
 
   Gamepad removeLast() {
@@ -27927,6 +27789,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  MediaStream get first => this[0];
+
   MediaStream get last => this[length - 1];
 
   MediaStream removeLast() {
@@ -27975,6 +27839,111 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// WARNING: Do not edit - generated code.
+
+
+/// @domName NodeList
+class _NodeList extends NativeFieldWrapperClass1 implements List<Node> {
+  _NodeList.internal();
+
+
+  /** @domName NodeList.length */
+  int get length native "NodeList_length_Getter";
+
+  Node operator[](int index) native "NodeList_item_Callback";
+
+  void operator[]=(int index, Node value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<Node> mixins.
+  // Node is the element type.
+
+  // From Iterable<Node>:
+
+  Iterator<Node> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new FixedSizeListIterator<Node>(this);
+  }
+
+  // From Collection<Node>:
+
+  void add(Node value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(Node value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<Node> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(Node element) => _Collections.contains(this, element);
+
+  void forEach(void f(Node element)) => _Collections.forEach(this, f);
+
+  Collection map(f(Node element)) => _Collections.map(this, [], f);
+
+  Collection<Node> filter(bool f(Node element)) =>
+     _Collections.filter(this, <Node>[], f);
+
+  bool every(bool f(Node element)) => _Collections.every(this, f);
+
+  bool some(bool f(Node element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<Node>:
+
+  void sort([Comparator<Node> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(Node element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(Node element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  Node get first => this[0];
+
+  Node get last => this[length - 1];
+
+  Node removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [Node initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<Node> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Node>[]);
+
+  // -- end List<Node> mixins.
+
+
+  /** @domName NodeList.item */
+  Node _item(int index) native "NodeList_item_Callback";
+
+}
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
 
 class _NotificationFactoryProvider {
   static Notification createNotification(String title, [Map options]) native "Notification_constructor_Callback";
@@ -28134,6 +28103,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  SpeechInputResult get first => this[0];
+
   SpeechInputResult get last => this[length - 1];
 
   SpeechInputResult removeLast() {
@@ -28245,6 +28216,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  SpeechRecognitionResult get first => this[0];
+
   SpeechRecognitionResult get last => this[length - 1];
 
   SpeechRecognitionResult removeLast() {
@@ -28348,6 +28321,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  StyleSheet get first => this[0];
+
   StyleSheet get last => this[length - 1];
 
   StyleSheet removeLast() {
@@ -28459,6 +28434,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  Animation get first => this[0];
+
   Animation get last => this[length - 1];
 
   Animation removeLast() {
@@ -28524,19 +28501,88 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
+/**
+ * An object representing the top-level context object for web scripting.
+ *
+ * In a web browser, a [Window] object represents the actual browser window.
+ * In a multi-tabbed browser, each tab has its own [Window] object. A [Window]
+ * is the container that displays a [Document]'s content. All web scripting
+ * happens within the context of a [Window] object.
+ *
+ * **Note:** This class represents any window, whereas [LocalWindow] is
+ * used to access the properties and content of the current window.
+ *
+ * See also:
+ *
+ * * [DOM Window](https://developer.mozilla.org/en-US/docs/DOM/window) from MDN.
+ * * [Window](http://www.w3.org/TR/Window/) from the W3C.
+ */
 abstract class Window {
   // Fields.
+
+  /**
+   * The current location of this window.
+   *
+   *     Location currentLocation = window.location;
+   *     print(currentLocation.href); // 'http://www.example.com:80/'
+   */
   Location get location;
   History get history;
 
+  /**
+   * Indicates whether this window is closed.
+   *
+   *     print(window.closed); // 'false'
+   *     window.close();
+   *     print(window.closed); // 'true'
+   */
   bool get closed;
+
+  /**
+   * A reference to the window that opened this one.
+   *
+   *     Window thisWindow = window;
+   *     Window otherWindow = thisWindow.open('http://www.example.com/', 'foo');
+   *     print(otherWindow.opener == thisWindow); // 'true'
+   */
   Window get opener;
+
+  /**
+   * A reference to the parent of this window.
+   *
+   * If this [Window] has no parent, [parent] will return a reference to
+   * the [Window] itself.
+   *
+   *     IFrameElement myIFrame = new IFrameElement();
+   *     window.document.body.elements.add(myIFrame);
+   *     print(myIframe.contentWindow.parent == window) // 'true'
+   *
+   *     print(window.parent == window) // 'true'
+   */
   Window get parent;
+
+  /**
+   * A reference to the topmost window in the window hierarchy.
+   *
+   * If this [Window] is the topmost [Window], [top] will return a reference to
+   * the [Window] itself.
+   *
+   *     // Add an IFrame to the current window.
+   *     IFrameElement myIFrame = new IFrameElement();
+   *     window.document.body.elements.add(myIFrame);
+   *
+   *     // Add an IFrame inside of the other IFrame.
+   *     IFrameElement innerIFrame = new IFrameElement();
+   *     myIFrame.elements.add(innerIFrame);
+   *
+   *     print(myIframe.contentWindow.top == window) // 'true'
+   *     print(innerIFrame.contentWindow.top == window) // 'true'
+   *
+   *     print(window.top == window) // 'true'
+   */
   Window get top;
 
   // Methods.
-  void focus();
-  void blur();
   void close();
   void postMessage(var message, String targetOrigin, [List messagePorts = null]);
 }
@@ -28781,6 +28827,8 @@
     return _filtered.lastIndexOf(element, start);
   }
 
+  Element get first => _filtered.first;
+
   Element get last => _filtered.last;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -30735,8 +30783,6 @@
   Window get top() native "DOMWindow_top_Getter";
 
   // Methods.
-  void focus() native "DOMWindow_focus_Callback";
-  void blur() native "DOMWindow_blur_Callback";
   void close() native "DOMWindow_close_Callback";
   void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List messagePorts]) native "DOMWindow_postMessage_Callback";
 
diff --git a/sdk/lib/html/scripts/generator.py b/sdk/lib/html/scripts/generator.py
index 89913d2..76b5ecf 100644
--- a/sdk/lib/html/scripts/generator.py
+++ b/sdk/lib/html/scripts/generator.py
@@ -305,7 +305,12 @@
        is named, e.g. 'fromList' in  Int8Array.fromList(list).
     type_name: A string, the name of the return type of the operation.
     param_infos: A list of ParamInfo.
+    factory_parameters: A list of parameters used for custom designed Factory
+        calls.
   """
+  
+  def __init__(self):
+    self.factory_parameters = None
 
   def ParametersDeclaration(self, rename_type, force_optional=False):
     def FormatParam(param):
@@ -356,11 +361,18 @@
   def ConstructorFactoryName(self, rename_type):
     return 'create' + self._ConstructorFullName(rename_type).replace('.', '_')
 
-  def GenerateFactoryInvocation(self, rename_type, emitter, factory_provider):
+  def GenerateFactoryInvocation(self, rename_type, emitter, factory_name,
+      factory_constructor_name=None, factory_parameters=None):
     has_optional = any(param_info.is_optional
         for param_info in self.param_infos)
 
-    factory_name = self.ConstructorFactoryName(rename_type)
+    if not factory_constructor_name:
+      factory_constructor_name = self.ConstructorFactoryName(rename_type)
+      factory_parameters = self.ParametersAsArgumentList()
+      has_factory_provider = True
+    else:
+      factory_parameters = ', '.join(factory_parameters)
+      has_factory_provider = False
     if not has_optional:
       emitter.Emit(
           '\n'
@@ -368,11 +380,19 @@
           '$FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n',
           CTOR=self._ConstructorFullName(rename_type),
           PARAMS=self.ParametersDeclaration(rename_type),
-          FACTORY=factory_provider,
-          CTOR_FACTORY_NAME=factory_name,
-          FACTORY_PARAMS=self.ParametersAsArgumentList())
+          FACTORY=factory_name,
+          CTOR_FACTORY_NAME=factory_constructor_name,
+          FACTORY_PARAMS=factory_parameters)
       return
+    if has_factory_provider:
+      self._GenerateFactoryOptParams(rename_type, emitter, factory_name)
+    else:
+      self._GenerateFactoryOptParamsWithoutFactoryProvider(rename_type, emitter,
+          factory_name, factory_constructor_name, factory_parameters)
 
+  def _GenerateFactoryOptParams(self, rename_type, emitter, factory_provider):
+    """Helper method for creating generic factory constructors with optional
+    parameters that use factory providers."""
     dispatcher_emitter = emitter.Emit(
         '\n'
         '  factory $CTOR($PARAMS) {\n'
@@ -382,7 +402,7 @@
         CTOR=self._ConstructorFullName(rename_type),
         PARAMS=self.ParametersDeclaration(rename_type),
         FACTORY=factory_provider,
-        CTOR_FACTORY_NAME=factory_name,
+        CTOR_FACTORY_NAME=self.ConstructorFactoryName(rename_type),
         FACTORY_PARAMS=self.ParametersAsArgumentList())
 
     # If we have optional parameters, check to see if they are set
@@ -394,12 +414,34 @@
         '    }\n',
         OPT_PARAM_NAME=self.param_infos[index].name,
         FACTORY=factory_provider,
-        CTOR_FACTORY_NAME=factory_name,
+        CTOR_FACTORY_NAME=self.ConstructorFactoryName(rename_type),
         FACTORY_PARAMS=self.ParametersAsArgumentList(index))
 
     for index, param_info in enumerate(self.param_infos):
       if param_info.is_optional:
         EmitOptionalParameterInvocation(index)
+  
+  def _GenerateFactoryOptParamsWithoutFactoryProvider(self, rename_type,
+      emitter, factory_name, factory_constructor_name, factory_parameters): 
+    """Helper method for creating a factory constructor with optional
+    parameters that does not call a factory provider, it simply creates the
+    object itself. This is currently used for SVGElements and HTMLElements."""
+    inits = emitter.Emit(
+        '\n'
+        '  factory $CONSTRUCTOR($PARAMS) {\n'	
+        '    var e = $FACTORY.$CTOR_FACTORY_NAME($FACTORY_PARAMS);\n'
+        '$!INITS'
+        '    return e;\n'
+        '  }\n',
+        CONSTRUCTOR=self._ConstructorFullName(rename_type),
+        FACTORY=factory_name,
+        CTOR_FACTORY_NAME=factory_constructor_name,
+        PARAMS=self.ParametersDeclaration(rename_type),
+        FACTORY_PARAMS=factory_parameters)
+    for index, param_info in enumerate(self.param_infos):
+      if param_info.is_optional:
+        inits.Emit('    if ($E != null) e.$E = $E;\n',
+            E=self.param_infos[index].name)
 
 def ConstantOutputOrder(a, b):
   """Canonical output ordering for constants."""
@@ -541,6 +583,90 @@
 
 # ------------------------------------------------------------------------------
 
+# Annotations to be placed on members.  The table is indexed by the IDL
+# interface and member name, and by IDL return or field type name.  Both are
+# used to assemble the annotations:
+#
+#   INTERFACE.MEMBER: annotations for member.
+#   +TYPE:            add annotations only if there are member annotations.
+#   TYPE:             add regardless of member annotations.
+
+dart2js_annotations = {
+
+    'CanvasRenderingContext2D.createImageData':
+      "@Creates('ImageData|=Object')",
+
+    'CanvasRenderingContext2D.getImageData':
+      "@Creates('ImageData|=Object')",
+
+    'CanvasRenderingContext2D.webkitGetImageDataHD':
+      "@Creates('ImageData|=Object')",
+
+    'DOMWindow.openDatabase': "@Creates('Database') @Creates('DatabaseSync')",
+
+    'FileReader.result': "@Creates('String|ArrayBuffer|Null')",
+
+    # Rather than have the result of an IDBRequest as a union over all possible
+    # results, we mark the result as instantiating any classes, and mark
+    # each operation with the classes that it could cause to be asynchronously
+    # instantiated.
+    'IDBRequest.result':  "@Creates('Null')",
+
+    # The source is usually a participant in the operation that generated the
+    # IDBRequest.
+    'IDBRequest.source':  "@Creates('Null')",
+
+    'IDBFactory.open': "@Creates('IDBDatabase')",
+
+    'IDBObjectStore.put': "@_annotation_Creates_IDBKey",
+    'IDBObjectStore.add': "@_annotation_Creates_IDBKey",
+    'IDBObjectStore.get': "@_annotation_Creates_SerializedScriptValue",
+    'IDBObjectStore.openCursor': "@Creates('IDBCursor')",
+
+    'IDBIndex.get': "@_annotation_Creates_SerializedScriptValue",
+    'IDBIndex.getKey':
+      "@_annotation_Creates_SerializedScriptValue "
+      # The source is the object store behind the index.
+      "@Creates('IDBObjectStore')",
+    'IDBIndex.openCursor': "@Creates('IDBCursor')",
+    'IDBIndex.openKeyCursor': "@Creates('IDBCursor')",
+
+    'IDBCursorWithValue.value':
+      '@_annotation_Creates_SerializedScriptValue '
+      '@_annotation_Returns_SerializedScriptValue',
+
+    'IDBCursor.key': "@_annotation_Creates_IDBKey @_annotation_Returns_IDBKey",
+
+    '+IDBRequest': "@Returns('IDBRequest') @Creates('IDBRequest')",
+
+    '+IDBOpenDBRequest': "@Returns('IDBRequest') @Creates('IDBRequest')",
+    '+IDBVersionChangeRequest': "@Returns('IDBRequest') @Creates('IDBRequest')",
+
+
+    'MessageEvent.ports': "@Creates('=List')",
+
+    'SQLResultSetRowList.item': "@Creates('=Object')",
+
+    'XMLHttpRequest.response':
+      "@Creates('ArrayBuffer|Blob|Document|=Object|=List|String|num')",
+}
+
+def FindAnnotations(idl_type, interface_name, member_name):
+  ann1 = dart2js_annotations.get("%s.%s" % (interface_name, member_name))
+  if ann1:
+    ann2 = dart2js_annotations.get('+' + idl_type)
+    if ann2:
+      return ann2 + ' ' + ann1
+    ann2 = dart2js_annotations.get(idl_type)
+    if ann2:
+      return ann2 + ' ' + ann1
+    return ann1
+
+  ann2 = dart2js_annotations.get(idl_type)
+  return ann2
+
+# ------------------------------------------------------------------------------
+
 class IDLTypeInfo(object):
   def __init__(self, idl_type, data):
     self._idl_type = idl_type
@@ -663,19 +789,13 @@
     self._type_registry = type_registry
 
   def dart_type(self):
-    # TODO(podivilov): why NodeList is special?
-    if self.idl_type() == 'NodeList':
-      return 'List<Node>'
     if self.list_item_type() and not self.has_generated_interface():
       return 'List<%s>' % self._type_registry.TypeInfo(self._data.item_type).dart_type()
     return self._data.dart_type or self._dart_interface_name
 
   def narrow_dart_type(self):
-    # TODO(podivilov): why NodeList is special?
-    if self.idl_type() == 'NodeList':
-      return 'List<Node>'
     if self.list_item_type():
-      return self.idl_type()
+      return self.implementation_name()
     # TODO(podivilov): only primitive and collection types should override
     # dart_type.
     if self._data.dart_type != None:
@@ -685,15 +805,10 @@
     return self.interface_name()
 
   def interface_name(self):
-    if self.list_item_type() and not self.has_generated_interface():
-      return self.dart_type()
     return self._dart_interface_name
 
   def implementation_name(self):
-    if self.list_item_type():
-      implementation_name = self.idl_type()
-    else:
-      implementation_name = self.interface_name()
+    implementation_name = self._dart_interface_name
     if self.merged_into():
       implementation_name = '_%s_Merged' % implementation_name
 
@@ -822,9 +937,9 @@
 
 
 class SVGTearOffIDLTypeInfo(InterfaceIDLTypeInfo):
-  def __init__(self, idl_type, data, type_registry):
+  def __init__(self, idl_type, data, interface_name, type_registry):
     super(SVGTearOffIDLTypeInfo, self).__init__(
-        idl_type, data, idl_type, type_registry)
+        idl_type, data, interface_name, type_registry)
 
   def native_type(self):
     if self._data.native_type:
@@ -980,7 +1095,8 @@
     'MediaStreamList': TypeData(clazz='Interface',
         item_type='MediaStream', suppress_interface=True),
     'NamedNodeMap': TypeData(clazz='Interface', item_type='Node'),
-    'NodeList': TypeData(clazz='Interface', item_type='Node'),
+    'NodeList': TypeData(clazz='Interface', item_type='Node',
+                         suppress_interface=True),
     'SVGAnimatedLengthList': TypeData(clazz='Interface',
         item_type='SVGAnimatedLength'),
     'SVGAnimatedNumberList': TypeData(clazz='Interface',
@@ -1080,12 +1196,15 @@
         dart_interface_name = self._renamer.RenameInterface(
             self._database.GetInterface(type_name))
       else:
-        dart_interface_name = type_name
+        dart_interface_name = self._renamer.DartifyTypeName(type_name)
       return InterfaceIDLTypeInfo(type_name, type_data, dart_interface_name,
                                   self)
 
     if type_data.clazz == 'SVGTearOff':
-      return SVGTearOffIDLTypeInfo(type_name, type_data, self)
+      dart_interface_name = self._renamer.RenameInterface(
+          self._database.GetInterface(type_name))
+      return SVGTearOffIDLTypeInfo(
+          type_name, type_data, dart_interface_name, self)
 
     class_name = '%sIDLTypeInfo' % type_data.clazz
     return globals()[class_name](type_name, type_data)
diff --git a/sdk/lib/html/scripts/htmldartgenerator.py b/sdk/lib/html/scripts/htmldartgenerator.py
index 0dd7ab7..8f445a1 100644
--- a/sdk/lib/html/scripts/htmldartgenerator.py
+++ b/sdk/lib/html/scripts/htmldartgenerator.py
@@ -32,23 +32,24 @@
     """ Emits the MDN dartdoc comment for an attribute.
     """
     dom_name = DartDomNameOfAttribute(attribute)
-    self._members_emitter.Emit('\n  /** @domName $DOMINTERFACE.$DOMNAME */',
+    self._members_emitter.Emit('\n  /// @domName $DOMINTERFACE.$DOMNAME;'
+                               ' @docsEditable true',
         DOMINTERFACE=attribute.doc_js_interface_name,
         DOMNAME=dom_name)
 
   def EmitOperationDocumentation(self, operation):
     """ Emits the MDN dartdoc comment for an operation.
     """
-    self._members_emitter.Emit('\n  /** @domName $DOMINTERFACE.$DOMNAME */',
+    self._members_emitter.Emit('\n  /// @domName $DOMINTERFACE.$DOMNAME;'
+                               ' @docsEditable true',
         DOMINTERFACE=operation.overloads[0].doc_js_interface_name,
         DOMNAME=operation.name)
 
   def EmitEventGetter(self, events_class_name):
     self._members_emitter.Emit(
-        '\n  /**'
-        '\n   * @domName EventTarget.addEventListener, '
-        'EventTarget.removeEventListener, EventTarget.dispatchEvent'
-        '\n   */'
+        '\n  /// @domName EventTarget.addEventListener, '
+        'EventTarget.removeEventListener, EventTarget.dispatchEvent;'
+        ' @docsEditable true'
         '\n  $TYPE get on =>\n    new $TYPE(this);\n',
         TYPE=events_class_name)
 
@@ -182,17 +183,21 @@
       implements.append('List<%s>' % item_type_info.dart_type())
     return implements
 
-  def AddConstructors(self, constructors, factory_provider, class_name,
-      base_class):
+  def AddConstructors(self, constructors, factory_name, class_name,
+      base_class, factory_constructor_name=None):
     """ Adds all of the constructors.
     Arguments:
       constructors - List of the constructors to be added.
-      factory_provider - Name of the factory provider for this class.
+      factory_name - Name of the factory for this class.
       class_name - The name of this class.
       base_class - The name of the base class which this extends.
+      factory_constructor_name - The name of the constructor on the
+          factory_name to call (calls an autogenerated FactoryProvider 
+          if unspecified)
     """
     for constructor_info in constructors:
-      self._AddConstructor(constructor_info, factory_provider)
+      self._AddConstructor(constructor_info, factory_name,
+          factory_constructor_name, constructor_info.factory_parameters)
 
     typed_array_type = None
     for interface in self._database.Hierarchy(self._interface):
@@ -214,11 +219,14 @@
           '    $FACTORY.create$(CTOR)_fromBuffer(buffer, byteOffset, length);\n',
         CTOR=self._interface.id,
         TYPE=self._DartType(typed_array_type),
-        FACTORY=factory_provider)
+        FACTORY=factory_name)
 
-  def _AddConstructor(self, constructor_info, factory_provider):
-      constructor_info.GenerateFactoryInvocation(
-          self._DartType, self._members_emitter, factory_provider)
+  def _AddConstructor(self, constructor_info, factory_name,
+      factory_constructor_name, factory_constructor_params):
+    constructor_info.GenerateFactoryInvocation(
+        self._DartType, self._members_emitter, factory_name,
+        factory_constructor_name=factory_constructor_name,
+        factory_parameters=factory_constructor_params)
 
   def DeclareAttribute(self, attribute, type_name, attr_name, read_only):
     """ Declares an attribute but does not include the code to invoke it.
diff --git a/sdk/lib/html/scripts/htmlrenamer.py b/sdk/lib/html/scripts/htmlrenamer.py
index c513e49..2f26d06 100644
--- a/sdk/lib/html/scripts/htmlrenamer.py
+++ b/sdk/lib/html/scripts/htmlrenamer.py
@@ -2,6 +2,7 @@
 # Copyright (c) 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.
+import re
 
 html_interface_renames = {
     'DOMCoreException': 'DOMException',
@@ -11,6 +12,9 @@
     'History': 'LocalHistory',
     'HTMLDocument' : 'HtmlDocument',
     'Location': 'LocalLocation',
+    'SVGDocument': 'SvgDocument', # Manual to avoid name conflicts.
+    'SVGElement': 'SvgElement', # Manual to avoid name conflicts.
+    'SVGSVGElement': 'SvgSvgElement', # Manual to avoid name conflicts.
     'WebKitAnimation': 'Animation',
     'WebKitAnimationEvent': 'AnimationEvent',
     'WebKitBlobBuilder': 'BlobBuilder',
@@ -117,9 +121,9 @@
     'Node.parentNode': 'parent',
     'Node.previousSibling': 'previousNode',
     'Node.textContent': 'text',
-    'SVGElement.className': '$dom_svgClassName',
-    'SVGAnimatedString.className': '$dom_svgClassName',
-    'SVGStylable.className': '$dom_svgClassName',
+    'SvgElement.className': '$dom_svgClassName',
+    'AnimatedString.className': '$dom_svgClassName',
+    'Stylable.className': '$dom_svgClassName',
     'Url.createObjectURL': 'createObjectUrl',
     'Url.revokeObjectURL': 'revokeObjectUrl',
 }
@@ -286,9 +290,11 @@
     "Node.lookupPrefix",
     "Node.get:PROCESSING_INSTRUCTION_NODE",
     'ShadowRoot.getElementsByTagNameNS',
+    "LocalWindow.blur",
     "LocalWindow.clientInformation",
     "LocalWindow.get:frames",
     "LocalWindow.get:length",
+    "LocalWindow.focus",
     "LocalWindow.prompt",
     "LocalWindow.webkitCancelRequestAnimationFrame",
     "WheelEvent.wheelDelta",
@@ -305,7 +311,7 @@
       if any(interface.id in ['Element', 'Document']
              for interface in self._database.Hierarchy(interface)):
         return interface.id[len('HTML'):]
-    return interface.id
+    return self.DartifyTypeName(interface.id)
 
   def RenameMember(self, interface_name, member_node, member, member_prefix=''):
     """
@@ -339,6 +345,37 @@
         return member_name
 
   def GetLibraryName(self, interface):
-    if interface.id.startswith('SVG'):
+    return self._GetLibraryName(interface.id)
+
+  def _GetLibraryName(self, idl_type_name):
+    """
+    Gets the name of the library this type should live in.
+    This is private because this should use interfaces to resolve the library.
+    """
+
+    if idl_type_name.startswith('SVG'):
       return 'svg'
     return 'html'
+
+  def DartifyTypeName(self, type_name):
+    """Converts a DOM name to a Dart-friendly class name. """
+    library_name = self._GetLibraryName(type_name)
+    # Only renaming SVG for now.
+    if library_name != 'svg':
+      return type_name
+
+    # Strip off the SVG prefix.
+    name = re.sub(r'^SVG', '', type_name)
+
+    def toLower(match):
+      return match.group(1) + match.group(2).lower() + match.group(3)
+
+    # We're looking for a sequence of letters which start with capital letter
+    # then a series of caps and finishes with either the end of the string or
+    # a capital letter.
+    # The [0-9] check is for names such as 2D or 3D
+    # The following test cases should match as:
+    #   WebKitCSSFilterValue: WebKit(C)(SS)(F)ilterValue
+    #   XPathNSResolver: (X)()(P)ath(N)(S)(R)esolver (no change)
+    #   IFrameElement: (I)()(F)rameElement (no change)
+    return re.sub(r'([A-Z])([A-Z]{2,})([A-Z]|$)', toLower, name)
diff --git a/sdk/lib/html/scripts/systemhtml.py b/sdk/lib/html/scripts/systemhtml.py
index dbdb4cc..38ad58c 100644
--- a/sdk/lib/html/scripts/systemhtml.py
+++ b/sdk/lib/html/scripts/systemhtml.py
@@ -58,9 +58,9 @@
 class ElementConstructorInfo(object):
   def __init__(self, name=None, tag=None,
                params=[], opt_params=[],
-               factory_provider_name='_Elements'):
+               factory_provider_name='document'):
     self.name = name          # The constructor name 'h1' in 'HeadingElement.h1'
-    self.tag = tag or name    # The HTML tag
+    self.tag = tag or name    # The HTML or SVG tag
     self.params = params
     self.opt_params = opt_params
     self.factory_provider_name = factory_provider_name
@@ -76,6 +76,7 @@
     info.param_infos = map(lambda tXn: ParamInfo(tXn[1], tXn[0], True),
                            self.opt_params)
     info.requires_named_arguments = True
+    info.factory_parameters = ['"%s"' % self.tag]
     return info
 
 _html_element_constructors = {
@@ -148,40 +149,88 @@
   'VideoElement': 'video'
 }
 
-def HtmlElementConstructorInfos(typename):
+_svg_element_constructors = {
+  'AElement': 'a',
+  'AnimateColorElement': 'animateColor',
+  'AnimateElement': 'animate',
+  'AnimateMotionElement': 'animateMotion',
+  'AnimateTransformElement': 'animateTransform',
+  'AnimationElement': 'animation',
+  'CircleElement': 'circle',
+  'ClipPathElement': 'clipPath',
+  'CursorElement': 'cursor',
+  'DefsElement': 'defs',
+  'DescElement': 'desc',
+  'EllipseElement': 'ellipse',
+  'FilterElement': 'filter',
+  'FontElement': 'font',
+  'FontFaceElement': 'font-face',
+  'FontFaceFormatElement': 'font-face-format',
+  'FontFaceNameElement': 'font-face-name',
+  'FontFaceSrcElement': 'font-face-src',
+  'FontFaceUriElement': 'font-face-uri',
+  'ForeignObjectElement': 'foreignObject',
+  'GlyphElement': 'glyph',
+  'GElement': 'g',
+  'HKernElement': 'hkern',
+  'ImageElement': 'image',
+  'LinearGradientElement': 'linearGradient',
+  'LineElement': 'line',
+  'MarkerElement': 'marker',
+  'MaskElement': 'mask',
+  'MPathElement': 'mpath',
+  'PathElement': 'path',
+  'PatternElement': 'pattern',
+  'PolygonElement': 'polygon',
+  'PolylineElement': 'polyline',
+  'RadialGradientElement': 'radialGradient',
+  'RectElement': 'rect',
+  'ScriptElement': 'script',
+  'SetElement': 'set',
+  'StopElement': 'stop',
+  'StyleElement': 'style',
+  'SwitchElement': 'switch',
+  'SymbolElement': 'symbol',
+  'TextElement': 'text',
+  'TitleElement': 'title',
+  'TRefElement': 'tref',
+  'TSpanElement': 'tspan',
+  'UseElement': 'use',
+  'ViewElement': 'view',
+  'VKernElement': 'vkern',
+}
+
+_element_constructors = {
+  'html': _html_element_constructors,
+  'svg': _svg_element_constructors
+}
+
+_factory_ctr_strings = {
+  'html': {
+      'provider_name': 'document',
+      'constructor_name': '$dom_createElement'
+  },
+  'svg': {
+    'provider_name': '_SvgElementFactoryProvider',
+    'constructor_name': 'createSvgElement_tag',
+  },
+}
+
+def ElementConstructorInfos(typename, element_constructors,
+                            factory_provider_name='_Elements'):
   """Returns list of ElementConstructorInfos about the convenience constructors
-  for an Element."""
+  for an Element or SvgElement."""
   # TODO(sra): Handle multiple and named constructors.
-  if typename not in _html_element_constructors:
+  if typename not in element_constructors:
     return []
-  infos = _html_element_constructors[typename]
+  infos = element_constructors[typename]
   if isinstance(infos, str):
-    infos = ElementConstructorInfo(tag=infos)
+    infos = ElementConstructorInfo(tag=infos,
+        factory_provider_name=factory_provider_name)
   if not isinstance(infos, list):
     infos = [infos]
   return infos
 
-def EmitHtmlElementFactoryConstructors(emitter, infos, typename, class_name,
-                                       rename_type):
-  for info in infos:
-    constructor_info = info.ConstructorInfo(typename)
-
-    inits = emitter.Emit(
-        '\n'
-        '  static $RETURN_TYPE $CONSTRUCTOR($PARAMS) {\n'
-        '    $CLASS _e = document.$dom_createElement("$TAG");\n'
-        '$!INITS'
-        '    return _e;\n'
-        '  }\n',
-        RETURN_TYPE=rename_type(constructor_info.type_name),
-        CONSTRUCTOR=constructor_info.ConstructorFactoryName(rename_type),
-        CLASS=class_name,
-        TAG=info.tag,
-        PARAMS=constructor_info.ParametersDeclaration(
-            rename_type, force_optional=True))
-    for param in constructor_info.param_infos:
-      inits.Emit('    if ($E != null) _e.$E = $E;\n', E=param.name)
-
 # ------------------------------------------------------------------------------
 
 class HtmlDartInterfaceGenerator(object):
@@ -226,6 +275,7 @@
     factory_provider = None
     if interface_name in interface_factories:
       factory_provider = interface_factories[interface_name]
+    factory_constructor_name = None
 
     constructors = []
     if interface_name in _static_classes:
@@ -240,17 +290,14 @@
       self._backend.EmitFactoryProvider(
           constructor_info, factory_provider, factory_provider_emitter)
 
-    infos = HtmlElementConstructorInfos(interface_name)
+    # HTML Elements and SVG Elements have convenience constructors.
+    infos = ElementConstructorInfos(interface_name,
+        _element_constructors[self._library_name], factory_provider_name=
+        _factory_ctr_strings[self._library_name]['provider_name'])
+
     if infos:
-      template = self._template_loader.Load(
-          'factoryprovider_Elements.darttemplate')
-      EmitHtmlElementFactoryConstructors(
-          self._library_emitter.FileEmitter('_Elements', self._library_name,
-              template),
-          infos,
-          self._interface.id,
-          self._interface_type_info.implementation_name(),
-          self._DartType)
+      factory_constructor_name = _factory_ctr_strings[
+          self._library_name]['constructor_name']
 
     for info in infos:
       constructors.append(info.ConstructorInfo(self._interface.id))
@@ -302,7 +349,7 @@
 
     self._backend.AddConstructors(constructors, factory_provider,
         self._interface_type_info.implementation_name(),
-        base_class)
+        base_class, factory_constructor_name=factory_constructor_name)
 
     events_class_name = self._event_generator.ProcessInterface(
         self._interface, interface_name,
@@ -435,30 +482,25 @@
     if 'CustomIndexedSetter' in self._interface.ext_attrs:
       self._members_emitter.Emit(
           '\n'
-          '  void operator[]=(int index, $TYPE value) =>'
-          ' JS("void", "#[#] = #", this, index, value);\n',
+          '  void operator[]=(int index, $TYPE value) {'
+          ' JS("void", "#[#] = #", this, index, value); }',
           TYPE=self._NarrowInputType(element_type))
     else:
-      # The HTML library implementation of NodeList has a custom indexed setter
-      # implementation that uses the parent node the NodeList is associated
-      # with if one is available.
-      if self._interface.id != 'NodeList':
-        self._members_emitter.Emit(
-            '\n'
-            '  void operator[]=(int index, $TYPE value) {\n'
-            '    throw new UnsupportedError("Cannot assign element of immutable List.");\n'
-            '  }\n',
-            TYPE=self._NarrowInputType(element_type))
+      self._members_emitter.Emit(
+          '\n'
+          '  void operator[]=(int index, $TYPE value) {\n'
+          '    throw new UnsupportedError("Cannot assign element of immutable List.");\n'
+          '  }\n',
+          TYPE=self._NarrowInputType(element_type))
 
     # TODO(sra): Use separate mixins for mutable implementations of List<T>.
     # TODO(sra): Use separate mixins for typed array implementations of List<T>.
-    if self._interface.id != 'NodeList':
-      template_file = 'immutable_list_mixin.darttemplate'
-      has_contains = any(op.id == 'contains' for op in self._interface.operations)
-      template = self._template_loader.Load(
-          template_file,
-          {'DEFINE_CONTAINS': not has_contains})
-      self._members_emitter.Emit(template, E=self._DartType(element_type))
+    template_file = 'immutable_list_mixin.darttemplate'
+    has_contains = any(op.id == 'contains' for op in self._interface.operations)
+    template = self._template_loader.Load(
+        template_file,
+        {'DEFINE_CONTAINS': not has_contains})
+    self._members_emitter.Emit(template, E=self._DartType(element_type))
 
   def EmitAttribute(self, attribute, html_name, read_only):
     if self._HasCustomImplementation(attribute.id):
@@ -506,17 +548,20 @@
 
     output_type = self.SecureOutputType(attribute.type.id)
     input_type = self._NarrowInputType(attribute.type.id)
+    annotations = self._Annotations(attribute.type.id, attribute.id)
     self.EmitAttributeDocumentation(attribute)
     if not read_only:
       self._members_emitter.Emit(
-          '\n  $TYPE $NAME;'
+          '\n  $ANNOTATIONS$TYPE $NAME;'
           '\n',
+          ANNOTATIONS=annotations,
           NAME=DartDomNameOfAttribute(attribute),
           TYPE=output_type)
     else:
       self._members_emitter.Emit(
-          '\n  final $TYPE $NAME;'
+          '\n  $(ANNOTATIONS)final $TYPE $NAME;'
           '\n',
+          ANNOTATIONS=annotations,
           NAME=DartDomNameOfAttribute(attribute),
           TYPE=output_type)
 
@@ -539,13 +584,15 @@
     if conversion:
       return self._AddConvertingGetter(attr, html_name, conversion)
     return_type = self.SecureOutputType(attr.type.id)
+    native_type = self._NarrowToImplementationType(attr.type.id)
     self._members_emitter.Emit(
         # TODO(sra): Use metadata to provide native name.
-        '\n  $TYPE get $HTML_NAME => JS("$TYPE", "#.$NAME", this);'
+        '\n  $TYPE get $HTML_NAME => JS("$NATIVE_TYPE", "#.$NAME", this);'
         '\n',
         HTML_NAME=html_name,
         NAME=attr.id,
-        TYPE=return_type)
+        TYPE=return_type,
+        NATIVE_TYPE=native_type)
 
   def _AddRenamingSetter(self, attr, html_name):
     self.EmitAttributeDocumentation(attr)
@@ -618,8 +665,10 @@
     if html_name != info.declared_name:
       return_type = self.SecureOutputType(info.type_name)
 
-      operation_emitter = self._members_emitter.Emit('$!SCOPE',
+      operation_emitter = self._members_emitter.Emit(
+          '$!SCOPE',
           MODIFIERS='static ' if info.IsStatic() else '',
+          ANNOTATIONS=self._Annotations(info.type_name, info.declared_name),
           TYPE=return_type,
           HTML_NAME=html_name,
           NAME=info.declared_name,
@@ -627,13 +676,14 @@
 
       operation_emitter.Emit(
           '\n'
-          #'  // @native("$NAME")\n;'
-          '  $MODIFIERS$TYPE $(HTML_NAME)($PARAMS) native "$NAME";\n')
+          '  $ANNOTATIONS'
+          '$MODIFIERS$TYPE $(HTML_NAME)($PARAMS) native "$NAME";\n')
     else:
       self._members_emitter.Emit(
           '\n'
-          '  $MODIFIERS$TYPE $NAME($PARAMS) native;\n',
+          '  $ANNOTATIONS$MODIFIERS$TYPE $NAME($PARAMS) native;\n',
           MODIFIERS='static ' if info.IsStatic() else '',
+          ANNOTATIONS=self._Annotations(info.type_name, info.declared_name),
           TYPE=self.SecureOutputType(info.type_name),
           NAME=info.name,
           PARAMS=info.ParametersDeclaration(self._NarrowInputType))
@@ -735,7 +785,9 @@
         call_emitter.Emit('$(INDENT)return $CALL;\n', CALL=call)
 
       self._members_emitter.Emit(
-          '  $TYPE$TARGET($PARAMS) native "$NATIVE";\n',
+          '  $MODIFIERS$ANNOTATIONS$TYPE$TARGET($PARAMS) native "$NATIVE";\n',
+          MODIFIERS='static ' if info.IsStatic() else '',
+          ANNOTATIONS=self._Annotations(info.type_name, info.declared_name),
           TYPE=TypeOrNothing(native_return_type),
           TARGET=target,
           PARAMS=', '.join(target_parameters),
@@ -766,7 +818,7 @@
             GenerateChecksAndCall(operation, position)
         GenerateChecksAndCall(operation, len(operation.arguments))
       body.Emit(
-          '    throw const Exception("Incorrect number or type of arguments");'
+          '    throw new ArgumentError("Incorrect number or type of arguments");'
           '\n');
     else:
       operation = operations[0]
@@ -819,6 +871,17 @@
                              member_name)
     return member_name in _js_custom_members
 
+  def _Annotations(self, idl_type, member_name):
+    annotations = FindAnnotations(idl_type, self._interface.id, member_name)
+    if annotations:
+      return '%s\n  ' % annotations
+    return_type = self.SecureOutputType(idl_type)
+    native_type = self._NarrowToImplementationType(idl_type)
+    if native_type != return_type:
+      return "@Returns('%s') @Creates('%s')\n  " % (native_type, native_type)
+    else:
+      return ''
+
   def CustomJSMembers(self):
     return _js_custom_members
 
@@ -877,7 +940,8 @@
     self._dart_libraries = dart_libraries
 
   def FileEmitter(self, basename, library_name, template=None):
-    path = os.path.join(self._dart_sources_dir, '%s.dart' % basename)
+    aux_dir = os.path.join(self._dart_sources_dir, library_name)
+    path = os.path.join(aux_dir, '%s.dart' % basename)
     if not path in self._path_to_emitter:
       emitter = self._multiemitter.FileEmitter(path)
       if not template is None:
diff --git a/sdk/lib/html/scripts/systemnative.py b/sdk/lib/html/scripts/systemnative.py
index 09e0208..7961d94 100644
--- a/sdk/lib/html/scripts/systemnative.py
+++ b/sdk/lib/html/scripts/systemnative.py
@@ -80,7 +80,10 @@
           ARGUMENTS_DECLARATION=arguments_declaration,
           ARGUMENT_COUNT=len(arguments))
 
-    cpp_header_emitter = self._cpp_library_emitter.CreateHeaderEmitter(self._interface.id, True)
+    cpp_header_emitter = self._cpp_library_emitter.CreateHeaderEmitter(
+        self._interface.id,
+        self._renamer.GetLibraryName(self._interface),
+        True)
     cpp_header_emitter.Emit(
         self._template_loader.Load('cpp_callback_header.template'),
         INTERFACE=self._interface.id,
@@ -112,7 +115,9 @@
   def StartInterface(self, memebers_emitter):
     # Create emitters for c++ implementation.
     if not IsPureInterface(self._interface.id):
-      self._cpp_header_emitter = self._cpp_library_emitter.CreateHeaderEmitter(self._interface.id)
+      self._cpp_header_emitter = self._cpp_library_emitter.CreateHeaderEmitter(
+          self._interface.id,
+          self._renamer.GetLibraryName(self._interface))
       self._cpp_impl_emitter = self._cpp_library_emitter.CreateSourceEmitter(self._interface.id)
     else:
       self._cpp_header_emitter = emitter.Emitter()
@@ -208,10 +213,10 @@
         ARGUMENTS=constructor_info.ParametersAsArgumentList(),
         NATIVE_NAME=native_binding)
 
-  def AddConstructors(self, constructors, factory_provider, class_name,
-      base_class):
-    super(DartiumBackend, self).AddConstructors(constructors, factory_provider,
-        class_name, base_class)
+  def AddConstructors(self, constructors, factory_name, class_name,
+      base_class, factory_constructor_name=None):
+    super(DartiumBackend, self).AddConstructors(constructors, factory_name,
+        class_name, base_class, factory_constructor_name)
 
     super_constructor = ''
     if base_class and base_class != 'NativeFieldWrapperClass1':
@@ -392,20 +397,12 @@
     if self._HasNativeIndexSetter():
       self._EmitNativeIndexSetter(dart_element_type)
     else:
-      # The HTML library implementation of NodeList has a custom indexed setter
-      # implementation that uses the parent node the NodeList is associated
-      # with if one is available.
-      if self._interface.id != 'NodeList':
-        self._members_emitter.Emit(
-            '\n'
-            '  void operator[]=(int index, $TYPE value) {\n'
-            '    throw new UnsupportedError("Cannot assign element of immutable List.");\n'
-            '  }\n',
-            TYPE=dart_element_type)
-
-    # The list interface for this class is manually generated.
-    if self._interface.id == 'NodeList':
-      return
+      self._members_emitter.Emit(
+          '\n'
+          '  void operator[]=(int index, $TYPE value) {\n'
+          '    throw new UnsupportedError("Cannot assign element of immutable List.");\n'
+          '  }\n',
+          TYPE=dart_element_type)
 
     # TODO(sra): Use separate mixins for mutable implementations of List<T>.
     # TODO(sra): Use separate mixins for typed array implementations of List<T>.
@@ -862,13 +859,15 @@
   def __init__(self, emitters, cpp_sources_dir):
     self._emitters = emitters
     self._cpp_sources_dir = cpp_sources_dir
-    self._headers_list = []
+    self._library_headers = {}
     self._sources_list = []
 
-  def CreateHeaderEmitter(self, interface_name, is_callback=False):
+  def CreateHeaderEmitter(self, interface_name, library_name, is_callback=False):
     path = os.path.join(self._cpp_sources_dir, 'Dart%s.h' % interface_name)
     if not is_callback:
-      self._headers_list.append(path)
+      if not library_name in self._library_headers:
+        self._library_headers[library_name] = []
+      self._library_headers[library_name].append(path)
     return self._emitters.FileEmitter(path)
 
   def CreateSourceEmitter(self, interface_name):
@@ -887,12 +886,17 @@
         includes_emitter.Emit('#include "$PATH"\n', PATH=path)
 
   def EmitResolver(self, template, output_dir):
-    file_path = os.path.join(output_dir, 'DartResolver.cpp')
-    includes_emitter, body_emitter = self._emitters.FileEmitter(file_path).Emit(template)
-    for header_file in self._headers_list:
-      path = os.path.relpath(header_file, output_dir)
-      includes_emitter.Emit('#include "$PATH"\n', PATH=path)
-      body_emitter.Emit(
-          '    if (Dart_NativeFunction func = $CLASS_NAME::resolver(name, argumentCount))\n'
-          '        return func;\n',
-          CLASS_NAME=os.path.splitext(os.path.basename(path))[0])
+    for library_name in self._library_headers.keys():
+      file_path = os.path.join(output_dir, '%s_DartResolver.cpp' % library_name)
+      includes_emitter, body_emitter = self._emitters.FileEmitter(file_path).Emit(
+        template,
+        LIBRARY_NAME=library_name)
+
+      headers = self._library_headers[library_name]
+      for header_file in headers:
+        path = os.path.relpath(header_file, output_dir)
+        includes_emitter.Emit('#include "$PATH"\n', PATH=path)
+        body_emitter.Emit(
+            '    if (Dart_NativeFunction func = $CLASS_NAME::resolver(name, argumentCount))\n'
+            '        return func;\n',
+            CLASS_NAME=os.path.splitext(os.path.basename(path))[0])
diff --git a/sdk/lib/html/src/CrossFrameTypes.dart b/sdk/lib/html/src/CrossFrameTypes.dart
index 68597f0..b77284c 100644
--- a/sdk/lib/html/src/CrossFrameTypes.dart
+++ b/sdk/lib/html/src/CrossFrameTypes.dart
@@ -4,19 +4,88 @@
 
 part of html;
 
+/**
+ * An object representing the top-level context object for web scripting.
+ *
+ * In a web browser, a [Window] object represents the actual browser window.
+ * In a multi-tabbed browser, each tab has its own [Window] object. A [Window]
+ * is the container that displays a [Document]'s content. All web scripting
+ * happens within the context of a [Window] object.
+ *
+ * **Note:** This class represents any window, whereas [LocalWindow] is
+ * used to access the properties and content of the current window.
+ *
+ * See also:
+ *
+ * * [DOM Window](https://developer.mozilla.org/en-US/docs/DOM/window) from MDN.
+ * * [Window](http://www.w3.org/TR/Window/) from the W3C.
+ */
 abstract class Window {
   // Fields.
+
+  /**
+   * The current location of this window.
+   *
+   *     Location currentLocation = window.location;
+   *     print(currentLocation.href); // 'http://www.example.com:80/'
+   */
   Location get location;
   History get history;
 
+  /**
+   * Indicates whether this window is closed.
+   *
+   *     print(window.closed); // 'false'
+   *     window.close();
+   *     print(window.closed); // 'true'
+   */
   bool get closed;
+
+  /**
+   * A reference to the window that opened this one.
+   *
+   *     Window thisWindow = window;
+   *     Window otherWindow = thisWindow.open('http://www.example.com/', 'foo');
+   *     print(otherWindow.opener == thisWindow); // 'true'
+   */
   Window get opener;
+
+  /**
+   * A reference to the parent of this window.
+   *
+   * If this [Window] has no parent, [parent] will return a reference to
+   * the [Window] itself.
+   *
+   *     IFrameElement myIFrame = new IFrameElement();
+   *     window.document.body.elements.add(myIFrame);
+   *     print(myIframe.contentWindow.parent == window) // 'true'
+   *
+   *     print(window.parent == window) // 'true'
+   */
   Window get parent;
+
+  /**
+   * A reference to the topmost window in the window hierarchy.
+   *
+   * If this [Window] is the topmost [Window], [top] will return a reference to
+   * the [Window] itself.
+   *
+   *     // Add an IFrame to the current window.
+   *     IFrameElement myIFrame = new IFrameElement();
+   *     window.document.body.elements.add(myIFrame);
+   *
+   *     // Add an IFrame inside of the other IFrame.
+   *     IFrameElement innerIFrame = new IFrameElement();
+   *     myIFrame.elements.add(innerIFrame);
+   *
+   *     print(myIframe.contentWindow.top == window) // 'true'
+   *     print(innerIFrame.contentWindow.top == window) // 'true'
+   *
+   *     print(window.top == window) // 'true'
+   */
   Window get top;
 
   // Methods.
-  void focus();
-  void blur();
   void close();
   void postMessage(var message, String targetOrigin, [List messagePorts = null]);
 }
diff --git a/sdk/lib/html/src/FilteredElementList.dart b/sdk/lib/html/src/FilteredElementList.dart
index 86a5787..33d1ab3 100644
--- a/sdk/lib/html/src/FilteredElementList.dart
+++ b/sdk/lib/html/src/FilteredElementList.dart
@@ -100,5 +100,7 @@
     return _filtered.lastIndexOf(element, start);
   }
 
+  Element get first => _filtered.first;
+
   Element get last => _filtered.last;
 }
diff --git a/sdk/lib/html/src/dart2js_Conversions.dart b/sdk/lib/html/src/dart2js_Conversions.dart
index ab0b851..cc44699 100644
--- a/sdk/lib/html/src/dart2js_Conversions.dart
+++ b/sdk/lib/html/src/dart2js_Conversions.dart
@@ -99,7 +99,7 @@
 Map _convertNativeToDart_Dictionary(object) {
   if (object == null) return null;
   var dict = {};
-  for (final key in JS('List', 'Object.getOwnPropertyNames(#)', object)) {
+  for (final key in JS('=List', 'Object.getOwnPropertyNames(#)', object)) {
     dict[key] = JS('var', '#[#]', object, key);
   }
   return dict;
@@ -276,7 +276,7 @@
       var copy = readSlot(slot);
       if (copy != null) {
         if (true == copy) {  // Cycle, so commit to making a copy.
-          copy = JS('List', 'new Array(#)', length);
+          copy = JS('=List', 'new Array(#)', length);
           writeSlot(slot, copy);
         }
         return copy;
@@ -296,7 +296,7 @@
           if (!identical(elementCopy, element)) {
             copy = readSlot(slot);   // Cyclic reference may have created it.
             if (true == copy) {
-              copy = JS('List', 'new Array(#)', length);
+              copy = JS('=List', 'new Array(#)', length);
               writeSlot(slot, copy);
             }
             for (int j = 0; j < i; j++) {
@@ -313,7 +313,7 @@
         }
       } else {
         // Not a JavaScript Array.  We are forced to make a copy.
-        copy = JS('List', 'new Array(#)', length);
+        copy = JS('=List', 'new Array(#)', length);
         writeSlot(slot, copy);
       }
 
@@ -393,7 +393,7 @@
       copy = {};
 
       writeSlot(slot, copy);
-      for (final key in JS('List', 'Object.keys(#)', e)) {
+      for (final key in JS('=List', 'Object.keys(#)', e)) {
         copy[key] = walk(JS('var', '#[#]', e, key));
       }
       return copy;
@@ -407,7 +407,7 @@
       int length = e.length;
       // Since a JavaScript Array is an instance of Dart List, we can modify it
       // in-place unless we must copy.
-      copy = mustCopy ? JS('List', 'new Array(#)', length) : e;
+      copy = mustCopy ? JS('=List', 'new Array(#)', length) : e;
       writeSlot(slot, copy);
 
       for (int i = 0; i < length; i++) {
@@ -433,3 +433,20 @@
     JS('bool', 'Object.getPrototypeOf(#) === Object.prototype', value);
 bool _isImmutableJavaScriptArray(value) =>
     JS('bool', r'!!(#.immutable$list)', value);
+
+
+
+const String _serializedScriptValue =
+    'num|String|bool|'
+    '=List|=Object|'
+    'Blob|File|ArrayBuffer|ArrayBufferView'
+    // TODO(sra): Add Date, RegExp.
+    ;
+const _annotation_Creates_SerializedScriptValue =
+    const Creates(_serializedScriptValue);
+const _annotation_Returns_SerializedScriptValue =
+    const Returns(_serializedScriptValue);
+
+const String _idbKey = '=List|=Object|num|String';  // TODO(sra): Add Date.
+const _annotation_Creates_IDBKey = const Creates(_idbKey);
+const _annotation_Returns_IDBKey = const Returns(_idbKey);
diff --git a/sdk/lib/html/src/dart2js_DOMImplementation.dart b/sdk/lib/html/src/dart2js_DOMImplementation.dart
index 43be003..9056a14 100644
--- a/sdk/lib/html/src/dart2js_DOMImplementation.dart
+++ b/sdk/lib/html/src/dart2js_DOMImplementation.dart
@@ -28,10 +28,6 @@
   Window get top => _createSafe(JS('Window', '#.top', _window));
 
   // Methods.
-  void focus() => JS('void', '#.focus()', _window);
-
-  void blur() => JS('void', '#.blur()', _window);
-
   void close() => JS('void', '#.close()', _window);
 
   void postMessage(var message, String targetOrigin, [List messagePorts = null]) {
diff --git a/sdk/lib/html/src/native_DOMImplementation.dart b/sdk/lib/html/src/native_DOMImplementation.dart
index 3d3689c..1d1eceb 100644
--- a/sdk/lib/html/src/native_DOMImplementation.dart
+++ b/sdk/lib/html/src/native_DOMImplementation.dart
@@ -60,8 +60,6 @@
   Window get top() native "DOMWindow_top_Getter";
 
   // Methods.
-  void focus() native "DOMWindow_focus_Callback";
-  void blur() native "DOMWindow_blur_Callback";
   void close() native "DOMWindow_close_Callback";
   void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List messagePorts]) native "DOMWindow_postMessage_Callback";
 
diff --git a/sdk/lib/html/src/shared_SVGFactoryProviders.dart b/sdk/lib/html/src/shared_SVGFactoryProviders.dart
index 833f7e8..7a5759a 100644
--- a/sdk/lib/html/src/shared_SVGFactoryProviders.dart
+++ b/sdk/lib/html/src/shared_SVGFactoryProviders.dart
@@ -6,20 +6,20 @@
 
 final _START_TAG_REGEXP = new RegExp('<(\\w+)');
 
-class _SVGElementFactoryProvider {
-  static SVGElement createSVGElement_tag(String tag) {
+class _SvgElementFactoryProvider {
+  static SvgElement createSvgElement_tag(String tag) {
     final Element temp =
       document.$dom_createElementNS("http://www.w3.org/2000/svg", tag);
     return temp;
   }
 
-  static SVGElement createSVGElement_svg(String svg) {
+  static SvgElement createSvgElement_svg(String svg) {
     Element parentTag;
     final match = _START_TAG_REGEXP.firstMatch(svg);
     if (match != null && match.group(1).toLowerCase() == 'svg') {
       parentTag = new Element.tag('div');
     } else {
-      parentTag = new SVGSVGElement();
+      parentTag = new SvgSvgElement();
     }
 
     parentTag.innerHTML = svg;
@@ -31,9 +31,9 @@
   }
 }
 
-class _SVGSVGElementFactoryProvider {
-  static SVGSVGElement createSVGSVGElement() {
-    final el = new SVGElement.tag("svg");
+class _SvgSvgElementFactoryProvider {
+  static SvgSvgElement createSvgSvgElement() {
+    final el = new SvgElement.tag("svg");
     // The SVG spec requires the version attribute to match the spec version
     el.attributes['version'] = "1.1";
     return el;
diff --git a/sdk/lib/html/templates/dart2js_impl.darttemplate b/sdk/lib/html/templates/dart2js_impl.darttemplate
index aa72fd2..5c62c0e 100644
--- a/sdk/lib/html/templates/dart2js_impl.darttemplate
+++ b/sdk/lib/html/templates/dart2js_impl.darttemplate
@@ -4,6 +4,6 @@
 
 part of $LIBRARYNAME;
 
-/// @domName $DOMNAME
+/// @domName $DOMNAME; @docsEditable true
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS}
diff --git a/sdk/lib/html/templates/html/dart2js/factoryprovider_HttpRequest.darttemplate b/sdk/lib/html/templates/html/dart2js/factoryprovider_HttpRequest.darttemplate
index c1acc88..a739f36 100644
--- a/sdk/lib/html/templates/html/dart2js/factoryprovider_HttpRequest.darttemplate
+++ b/sdk/lib/html/templates/html/dart2js/factoryprovider_HttpRequest.darttemplate
@@ -9,10 +9,10 @@
       JS('HttpRequest', 'new XMLHttpRequest()');
 
   static HttpRequest createHttpRequest_get(String url,
-      onSuccess(HttpRequest request)) =>
-      _HttpRequestUtils.get(url, onSuccess, false);
+      onComplete(HttpRequest request)) =>
+      _HttpRequestUtils.get(url, onComplete, false);
 
   static HttpRequest createHttpRequest_getWithCredentials(String url,
-      onSuccess(HttpRequest request)) =>
-      _HttpRequestUtils.get(url, onSuccess, true);
+      onComplete(HttpRequest request)) =>
+      _HttpRequestUtils.get(url, onComplete, true);
 }
diff --git a/sdk/lib/html/templates/html/dart2js/factoryprovider_MutationObserver.darttemplate b/sdk/lib/html/templates/html/dart2js/factoryprovider_MutationObserver.darttemplate
index d92979b..affcb7c 100644
--- a/sdk/lib/html/templates/html/dart2js/factoryprovider_MutationObserver.darttemplate
+++ b/sdk/lib/html/templates/html/dart2js/factoryprovider_MutationObserver.darttemplate
@@ -5,20 +5,10 @@
 part of html;
 
 class $FACTORYPROVIDER {
-  static $CONSTRUCTOR create$(CONSTRUCTOR)(MutationCallback callback) {
 
-    // This is a hack to cause MutationRecord to appear to be instantiated.
-    //
-    // MutationCallback has a parameter type List<MutationRecord>.  From this we
-    // infer a list is created in the browser, but not the element type, because
-    // other native fields and methods return plain List which is too general
-    // and would imply creating anything.  This statement is a work-around.
-    JS('MutationRecord','0');
-
-    return _create$(CONSTRUCTOR)(callback);
-  }
-
-  static $CONSTRUCTOR _create$(CONSTRUCTOR)(MutationCallback callback) native '''
+  @Creates('MutationObserver')
+  @Creates('MutationRecord')
+  static $CONSTRUCTOR create$(CONSTRUCTOR)(MutationCallback callback) native '''
     var constructor =
         window.MutationObserver || window.WebKitMutationObserver ||
         window.MozMutationObserver;
diff --git a/sdk/lib/html/templates/html/dart2js/factoryprovider_TextTrackCue.darttemplate b/sdk/lib/html/templates/html/dart2js/factoryprovider_TextTrackCue.darttemplate
index f1e5a8d..63cad24 100644
--- a/sdk/lib/html/templates/html/dart2js/factoryprovider_TextTrackCue.darttemplate
+++ b/sdk/lib/html/templates/html/dart2js/factoryprovider_TextTrackCue.darttemplate
@@ -6,20 +6,20 @@
 
 class $FACTORYPROVIDER {
   static TextTrackCue createTextTrackCue(
-      String id, num startTime, num endTime, String text,
+      num startTime, num endTime, String text,
       [String settings, bool pauseOnExit]) {
         if (settings == null) {
           return JS('TextTrackCue',
-                    'new TextTrackCue(#,#,#,#)',
-                    id, startTime, endTime, text);
+                    'new TextTrackCue(#,#,#)',
+                    startTime, endTime, text);
         }
         if (pauseOnExit == null) {
           return JS('TextTrackCue',
-                    'new TextTrackCue(#,#,#,#,#)',
-                    id, startTime, endTime, text, settings);
+                    'new TextTrackCue(#,#,#,#)',
+                    startTime, endTime, text, settings);
         }
         return JS('TextTrackCue',
-                  'new TextTrackCue(#,#,#,#,#,#)',
-                  id, startTime, endTime, text, settings, pauseOnExit);
+                  'new TextTrackCue(#,#,#,#,#)',
+                  startTime, endTime, text, settings, pauseOnExit);
   }
 }
diff --git a/sdk/lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate b/sdk/lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate
index 8f095cb..5542bf8 100644
--- a/sdk/lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate
+++ b/sdk/lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate
@@ -131,7 +131,7 @@
    * registered under [name].
    */
   SendPortSync lookupPort(String name) {
-    var port = JSON.parse(localStorage['dart-port:$name']);
+    var port = JSON.parse(document.documentElement.attributes['dart-port:$name']);
     return _deserialize(port);
   }
 
@@ -142,7 +142,7 @@
    */
   void registerPort(String name, var port) {
     var serialized = _serialize(port);
-    localStorage['dart-port:$name'] = JSON.stringify(serialized);
+    document.documentElement.attributes['dart-port:$name'] = JSON.stringify(serialized);
   }
 
 $!MEMBERS
diff --git a/sdk/lib/html/templates/html/dartium/cpp_resolver.template b/sdk/lib/html/templates/html/dartium/cpp_resolver.template
index 3c8ac57..e104ebe 100644
--- a/sdk/lib/html/templates/html/dartium/cpp_resolver.template
+++ b/sdk/lib/html/templates/html/dartium/cpp_resolver.template
@@ -9,7 +9,7 @@
 
 namespace WebCore {
 
-Dart_NativeFunction snapshotResolver(Dart_Handle name, int argumentCount)
+Dart_NativeFunction $(LIBRARY_NAME)SnapshotResolver(Dart_Handle name, int argumentCount)
 {
 $!RESOLVER_BODY
     return 0;
diff --git a/sdk/lib/html/templates/html/dartium/impl_LocalWindow.darttemplate b/sdk/lib/html/templates/html/dartium/impl_LocalWindow.darttemplate
index 6cedf2d..476d8dd 100644
--- a/sdk/lib/html/templates/html/dartium/impl_LocalWindow.darttemplate
+++ b/sdk/lib/html/templates/html/dartium/impl_LocalWindow.darttemplate
@@ -20,7 +20,7 @@
    * registered under [name].
    */
   lookupPort(String name) {
-    var port = JSON.parse(localStorage['dart-port:$name']);
+    var port = JSON.parse(document.documentElement.attributes['dart-port:$name']);
     return _deserialize(port);
   }
 
@@ -31,7 +31,7 @@
    */
   registerPort(String name, var port) {
     var serialized = _serialize(port);
-    localStorage['dart-port:$name'] = JSON.stringify(serialized);
+    document.documentElement.attributes['dart-port:$name'] = JSON.stringify(serialized);
   }
 
 $!MEMBERS
diff --git a/sdk/lib/html/templates/html/impl/factoryprovider_Elements.darttemplate b/sdk/lib/html/templates/html/impl/factoryprovider_Elements.darttemplate
index 561ece0d..e69de29 100644
--- a/sdk/lib/html/templates/html/impl/factoryprovider_Elements.darttemplate
+++ b/sdk/lib/html/templates/html/impl/factoryprovider_Elements.darttemplate
@@ -1,9 +0,0 @@
-// Copyright (c) 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.
-
-part of html;
-
-class _Elements {
-
-$!FACTORY_METHODS}
diff --git a/sdk/lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate b/sdk/lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
index de9e208..347acfc 100644
--- a/sdk/lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
@@ -44,12 +44,39 @@
 $endif
 
   // TODO(jacobr): generate this list of properties using the existing script.
-    /** Gets the value of "animation" */
+  /** Gets the value of "align-content" */
+  String get alignContent =>
+    getPropertyValue('${_browserPrefix}align-content');
+
+  /** Sets the value of "align-content" */
+  void set alignContent(String value) {
+    setProperty('${_browserPrefix}align-content', value, '');
+  }
+
+  /** Gets the value of "align-items" */
+  String get alignItems =>
+    getPropertyValue('${_browserPrefix}align-items');
+
+  /** Sets the value of "align-items" */
+  void set alignItems(String value) {
+    setProperty('${_browserPrefix}align-items', value, '');
+  }
+
+  /** Gets the value of "align-self" */
+  String get alignSelf =>
+    getPropertyValue('${_browserPrefix}align-self');
+
+  /** Sets the value of "align-self" */
+  void set alignSelf(String value) {
+    setProperty('${_browserPrefix}align-self', value, '');
+  }
+
+  /** Gets the value of "animation" */
   String get animation =>
     getPropertyValue('${_browserPrefix}animation');
 
   /** Sets the value of "animation" */
-  void set animation(var value) {
+  void set animation(String value) {
     setProperty('${_browserPrefix}animation', value, '');
   }
 
@@ -58,7 +85,7 @@
     getPropertyValue('${_browserPrefix}animation-delay');
 
   /** Sets the value of "animation-delay" */
-  void set animationDelay(var value) {
+  void set animationDelay(String value) {
     setProperty('${_browserPrefix}animation-delay', value, '');
   }
 
@@ -67,7 +94,7 @@
     getPropertyValue('${_browserPrefix}animation-direction');
 
   /** Sets the value of "animation-direction" */
-  void set animationDirection(var value) {
+  void set animationDirection(String value) {
     setProperty('${_browserPrefix}animation-direction', value, '');
   }
 
@@ -76,7 +103,7 @@
     getPropertyValue('${_browserPrefix}animation-duration');
 
   /** Sets the value of "animation-duration" */
-  void set animationDuration(var value) {
+  void set animationDuration(String value) {
     setProperty('${_browserPrefix}animation-duration', value, '');
   }
 
@@ -85,7 +112,7 @@
     getPropertyValue('${_browserPrefix}animation-fill-mode');
 
   /** Sets the value of "animation-fill-mode" */
-  void set animationFillMode(var value) {
+  void set animationFillMode(String value) {
     setProperty('${_browserPrefix}animation-fill-mode', value, '');
   }
 
@@ -94,7 +121,7 @@
     getPropertyValue('${_browserPrefix}animation-iteration-count');
 
   /** Sets the value of "animation-iteration-count" */
-  void set animationIterationCount(var value) {
+  void set animationIterationCount(String value) {
     setProperty('${_browserPrefix}animation-iteration-count', value, '');
   }
 
@@ -103,7 +130,7 @@
     getPropertyValue('${_browserPrefix}animation-name');
 
   /** Sets the value of "animation-name" */
-  void set animationName(var value) {
+  void set animationName(String value) {
     setProperty('${_browserPrefix}animation-name', value, '');
   }
 
@@ -112,7 +139,7 @@
     getPropertyValue('${_browserPrefix}animation-play-state');
 
   /** Sets the value of "animation-play-state" */
-  void set animationPlayState(var value) {
+  void set animationPlayState(String value) {
     setProperty('${_browserPrefix}animation-play-state', value, '');
   }
 
@@ -121,25 +148,43 @@
     getPropertyValue('${_browserPrefix}animation-timing-function');
 
   /** Sets the value of "animation-timing-function" */
-  void set animationTimingFunction(var value) {
+  void set animationTimingFunction(String value) {
     setProperty('${_browserPrefix}animation-timing-function', value, '');
   }
 
+  /** Gets the value of "app-region" */
+  String get appRegion =>
+    getPropertyValue('${_browserPrefix}app-region');
+
+  /** Sets the value of "app-region" */
+  void set appRegion(String value) {
+    setProperty('${_browserPrefix}app-region', value, '');
+  }
+
   /** Gets the value of "appearance" */
   String get appearance =>
     getPropertyValue('${_browserPrefix}appearance');
 
   /** Sets the value of "appearance" */
-  void set appearance(var value) {
+  void set appearance(String value) {
     setProperty('${_browserPrefix}appearance', value, '');
   }
 
+  /** Gets the value of "aspect-ratio" */
+  String get aspectRatio =>
+    getPropertyValue('${_browserPrefix}aspect-ratio');
+
+  /** Sets the value of "aspect-ratio" */
+  void set aspectRatio(String value) {
+    setProperty('${_browserPrefix}aspect-ratio', value, '');
+  }
+
   /** Gets the value of "backface-visibility" */
   String get backfaceVisibility =>
     getPropertyValue('${_browserPrefix}backface-visibility');
 
   /** Sets the value of "backface-visibility" */
-  void set backfaceVisibility(var value) {
+  void set backfaceVisibility(String value) {
     setProperty('${_browserPrefix}backface-visibility', value, '');
   }
 
@@ -148,7 +193,7 @@
     getPropertyValue('background');
 
   /** Sets the value of "background" */
-  void set background(var value) {
+  void set background(String value) {
     setProperty('background', value, '');
   }
 
@@ -157,7 +202,7 @@
     getPropertyValue('background-attachment');
 
   /** Sets the value of "background-attachment" */
-  void set backgroundAttachment(var value) {
+  void set backgroundAttachment(String value) {
     setProperty('background-attachment', value, '');
   }
 
@@ -166,7 +211,7 @@
     getPropertyValue('background-clip');
 
   /** Sets the value of "background-clip" */
-  void set backgroundClip(var value) {
+  void set backgroundClip(String value) {
     setProperty('background-clip', value, '');
   }
 
@@ -175,7 +220,7 @@
     getPropertyValue('background-color');
 
   /** Sets the value of "background-color" */
-  void set backgroundColor(var value) {
+  void set backgroundColor(String value) {
     setProperty('background-color', value, '');
   }
 
@@ -184,7 +229,7 @@
     getPropertyValue('${_browserPrefix}background-composite');
 
   /** Sets the value of "background-composite" */
-  void set backgroundComposite(var value) {
+  void set backgroundComposite(String value) {
     setProperty('${_browserPrefix}background-composite', value, '');
   }
 
@@ -193,7 +238,7 @@
     getPropertyValue('background-image');
 
   /** Sets the value of "background-image" */
-  void set backgroundImage(var value) {
+  void set backgroundImage(String value) {
     setProperty('background-image', value, '');
   }
 
@@ -202,7 +247,7 @@
     getPropertyValue('background-origin');
 
   /** Sets the value of "background-origin" */
-  void set backgroundOrigin(var value) {
+  void set backgroundOrigin(String value) {
     setProperty('background-origin', value, '');
   }
 
@@ -211,7 +256,7 @@
     getPropertyValue('background-position');
 
   /** Sets the value of "background-position" */
-  void set backgroundPosition(var value) {
+  void set backgroundPosition(String value) {
     setProperty('background-position', value, '');
   }
 
@@ -220,7 +265,7 @@
     getPropertyValue('background-position-x');
 
   /** Sets the value of "background-position-x" */
-  void set backgroundPositionX(var value) {
+  void set backgroundPositionX(String value) {
     setProperty('background-position-x', value, '');
   }
 
@@ -229,7 +274,7 @@
     getPropertyValue('background-position-y');
 
   /** Sets the value of "background-position-y" */
-  void set backgroundPositionY(var value) {
+  void set backgroundPositionY(String value) {
     setProperty('background-position-y', value, '');
   }
 
@@ -238,7 +283,7 @@
     getPropertyValue('background-repeat');
 
   /** Sets the value of "background-repeat" */
-  void set backgroundRepeat(var value) {
+  void set backgroundRepeat(String value) {
     setProperty('background-repeat', value, '');
   }
 
@@ -247,7 +292,7 @@
     getPropertyValue('background-repeat-x');
 
   /** Sets the value of "background-repeat-x" */
-  void set backgroundRepeatX(var value) {
+  void set backgroundRepeatX(String value) {
     setProperty('background-repeat-x', value, '');
   }
 
@@ -256,7 +301,7 @@
     getPropertyValue('background-repeat-y');
 
   /** Sets the value of "background-repeat-y" */
-  void set backgroundRepeatY(var value) {
+  void set backgroundRepeatY(String value) {
     setProperty('background-repeat-y', value, '');
   }
 
@@ -265,16 +310,25 @@
     getPropertyValue('background-size');
 
   /** Sets the value of "background-size" */
-  void set backgroundSize(var value) {
+  void set backgroundSize(String value) {
     setProperty('background-size', value, '');
   }
 
+  /** Gets the value of "blend-mode" */
+  String get blendMode =>
+    getPropertyValue('${_browserPrefix}blend-mode');
+
+  /** Sets the value of "blend-mode" */
+  void set blendMode(String value) {
+    setProperty('${_browserPrefix}blend-mode', value, '');
+  }
+
   /** Gets the value of "border" */
   String get border =>
     getPropertyValue('border');
 
   /** Sets the value of "border" */
-  void set border(var value) {
+  void set border(String value) {
     setProperty('border', value, '');
   }
 
@@ -283,7 +337,7 @@
     getPropertyValue('${_browserPrefix}border-after');
 
   /** Sets the value of "border-after" */
-  void set borderAfter(var value) {
+  void set borderAfter(String value) {
     setProperty('${_browserPrefix}border-after', value, '');
   }
 
@@ -292,7 +346,7 @@
     getPropertyValue('${_browserPrefix}border-after-color');
 
   /** Sets the value of "border-after-color" */
-  void set borderAfterColor(var value) {
+  void set borderAfterColor(String value) {
     setProperty('${_browserPrefix}border-after-color', value, '');
   }
 
@@ -301,7 +355,7 @@
     getPropertyValue('${_browserPrefix}border-after-style');
 
   /** Sets the value of "border-after-style" */
-  void set borderAfterStyle(var value) {
+  void set borderAfterStyle(String value) {
     setProperty('${_browserPrefix}border-after-style', value, '');
   }
 
@@ -310,7 +364,7 @@
     getPropertyValue('${_browserPrefix}border-after-width');
 
   /** Sets the value of "border-after-width" */
-  void set borderAfterWidth(var value) {
+  void set borderAfterWidth(String value) {
     setProperty('${_browserPrefix}border-after-width', value, '');
   }
 
@@ -319,7 +373,7 @@
     getPropertyValue('${_browserPrefix}border-before');
 
   /** Sets the value of "border-before" */
-  void set borderBefore(var value) {
+  void set borderBefore(String value) {
     setProperty('${_browserPrefix}border-before', value, '');
   }
 
@@ -328,7 +382,7 @@
     getPropertyValue('${_browserPrefix}border-before-color');
 
   /** Sets the value of "border-before-color" */
-  void set borderBeforeColor(var value) {
+  void set borderBeforeColor(String value) {
     setProperty('${_browserPrefix}border-before-color', value, '');
   }
 
@@ -337,7 +391,7 @@
     getPropertyValue('${_browserPrefix}border-before-style');
 
   /** Sets the value of "border-before-style" */
-  void set borderBeforeStyle(var value) {
+  void set borderBeforeStyle(String value) {
     setProperty('${_browserPrefix}border-before-style', value, '');
   }
 
@@ -346,7 +400,7 @@
     getPropertyValue('${_browserPrefix}border-before-width');
 
   /** Sets the value of "border-before-width" */
-  void set borderBeforeWidth(var value) {
+  void set borderBeforeWidth(String value) {
     setProperty('${_browserPrefix}border-before-width', value, '');
   }
 
@@ -355,7 +409,7 @@
     getPropertyValue('border-bottom');
 
   /** Sets the value of "border-bottom" */
-  void set borderBottom(var value) {
+  void set borderBottom(String value) {
     setProperty('border-bottom', value, '');
   }
 
@@ -364,7 +418,7 @@
     getPropertyValue('border-bottom-color');
 
   /** Sets the value of "border-bottom-color" */
-  void set borderBottomColor(var value) {
+  void set borderBottomColor(String value) {
     setProperty('border-bottom-color', value, '');
   }
 
@@ -373,7 +427,7 @@
     getPropertyValue('border-bottom-left-radius');
 
   /** Sets the value of "border-bottom-left-radius" */
-  void set borderBottomLeftRadius(var value) {
+  void set borderBottomLeftRadius(String value) {
     setProperty('border-bottom-left-radius', value, '');
   }
 
@@ -382,7 +436,7 @@
     getPropertyValue('border-bottom-right-radius');
 
   /** Sets the value of "border-bottom-right-radius" */
-  void set borderBottomRightRadius(var value) {
+  void set borderBottomRightRadius(String value) {
     setProperty('border-bottom-right-radius', value, '');
   }
 
@@ -391,7 +445,7 @@
     getPropertyValue('border-bottom-style');
 
   /** Sets the value of "border-bottom-style" */
-  void set borderBottomStyle(var value) {
+  void set borderBottomStyle(String value) {
     setProperty('border-bottom-style', value, '');
   }
 
@@ -400,7 +454,7 @@
     getPropertyValue('border-bottom-width');
 
   /** Sets the value of "border-bottom-width" */
-  void set borderBottomWidth(var value) {
+  void set borderBottomWidth(String value) {
     setProperty('border-bottom-width', value, '');
   }
 
@@ -409,7 +463,7 @@
     getPropertyValue('border-collapse');
 
   /** Sets the value of "border-collapse" */
-  void set borderCollapse(var value) {
+  void set borderCollapse(String value) {
     setProperty('border-collapse', value, '');
   }
 
@@ -418,7 +472,7 @@
     getPropertyValue('border-color');
 
   /** Sets the value of "border-color" */
-  void set borderColor(var value) {
+  void set borderColor(String value) {
     setProperty('border-color', value, '');
   }
 
@@ -427,7 +481,7 @@
     getPropertyValue('${_browserPrefix}border-end');
 
   /** Sets the value of "border-end" */
-  void set borderEnd(var value) {
+  void set borderEnd(String value) {
     setProperty('${_browserPrefix}border-end', value, '');
   }
 
@@ -436,7 +490,7 @@
     getPropertyValue('${_browserPrefix}border-end-color');
 
   /** Sets the value of "border-end-color" */
-  void set borderEndColor(var value) {
+  void set borderEndColor(String value) {
     setProperty('${_browserPrefix}border-end-color', value, '');
   }
 
@@ -445,7 +499,7 @@
     getPropertyValue('${_browserPrefix}border-end-style');
 
   /** Sets the value of "border-end-style" */
-  void set borderEndStyle(var value) {
+  void set borderEndStyle(String value) {
     setProperty('${_browserPrefix}border-end-style', value, '');
   }
 
@@ -454,7 +508,7 @@
     getPropertyValue('${_browserPrefix}border-end-width');
 
   /** Sets the value of "border-end-width" */
-  void set borderEndWidth(var value) {
+  void set borderEndWidth(String value) {
     setProperty('${_browserPrefix}border-end-width', value, '');
   }
 
@@ -463,7 +517,7 @@
     getPropertyValue('${_browserPrefix}border-fit');
 
   /** Sets the value of "border-fit" */
-  void set borderFit(var value) {
+  void set borderFit(String value) {
     setProperty('${_browserPrefix}border-fit', value, '');
   }
 
@@ -472,7 +526,7 @@
     getPropertyValue('${_browserPrefix}border-horizontal-spacing');
 
   /** Sets the value of "border-horizontal-spacing" */
-  void set borderHorizontalSpacing(var value) {
+  void set borderHorizontalSpacing(String value) {
     setProperty('${_browserPrefix}border-horizontal-spacing', value, '');
   }
 
@@ -481,7 +535,7 @@
     getPropertyValue('border-image');
 
   /** Sets the value of "border-image" */
-  void set borderImage(var value) {
+  void set borderImage(String value) {
     setProperty('border-image', value, '');
   }
 
@@ -490,7 +544,7 @@
     getPropertyValue('border-image-outset');
 
   /** Sets the value of "border-image-outset" */
-  void set borderImageOutset(var value) {
+  void set borderImageOutset(String value) {
     setProperty('border-image-outset', value, '');
   }
 
@@ -499,7 +553,7 @@
     getPropertyValue('border-image-repeat');
 
   /** Sets the value of "border-image-repeat" */
-  void set borderImageRepeat(var value) {
+  void set borderImageRepeat(String value) {
     setProperty('border-image-repeat', value, '');
   }
 
@@ -508,7 +562,7 @@
     getPropertyValue('border-image-slice');
 
   /** Sets the value of "border-image-slice" */
-  void set borderImageSlice(var value) {
+  void set borderImageSlice(String value) {
     setProperty('border-image-slice', value, '');
   }
 
@@ -517,7 +571,7 @@
     getPropertyValue('border-image-source');
 
   /** Sets the value of "border-image-source" */
-  void set borderImageSource(var value) {
+  void set borderImageSource(String value) {
     setProperty('border-image-source', value, '');
   }
 
@@ -526,7 +580,7 @@
     getPropertyValue('border-image-width');
 
   /** Sets the value of "border-image-width" */
-  void set borderImageWidth(var value) {
+  void set borderImageWidth(String value) {
     setProperty('border-image-width', value, '');
   }
 
@@ -535,7 +589,7 @@
     getPropertyValue('border-left');
 
   /** Sets the value of "border-left" */
-  void set borderLeft(var value) {
+  void set borderLeft(String value) {
     setProperty('border-left', value, '');
   }
 
@@ -544,7 +598,7 @@
     getPropertyValue('border-left-color');
 
   /** Sets the value of "border-left-color" */
-  void set borderLeftColor(var value) {
+  void set borderLeftColor(String value) {
     setProperty('border-left-color', value, '');
   }
 
@@ -553,7 +607,7 @@
     getPropertyValue('border-left-style');
 
   /** Sets the value of "border-left-style" */
-  void set borderLeftStyle(var value) {
+  void set borderLeftStyle(String value) {
     setProperty('border-left-style', value, '');
   }
 
@@ -562,7 +616,7 @@
     getPropertyValue('border-left-width');
 
   /** Sets the value of "border-left-width" */
-  void set borderLeftWidth(var value) {
+  void set borderLeftWidth(String value) {
     setProperty('border-left-width', value, '');
   }
 
@@ -571,7 +625,7 @@
     getPropertyValue('border-radius');
 
   /** Sets the value of "border-radius" */
-  void set borderRadius(var value) {
+  void set borderRadius(String value) {
     setProperty('border-radius', value, '');
   }
 
@@ -580,7 +634,7 @@
     getPropertyValue('border-right');
 
   /** Sets the value of "border-right" */
-  void set borderRight(var value) {
+  void set borderRight(String value) {
     setProperty('border-right', value, '');
   }
 
@@ -589,7 +643,7 @@
     getPropertyValue('border-right-color');
 
   /** Sets the value of "border-right-color" */
-  void set borderRightColor(var value) {
+  void set borderRightColor(String value) {
     setProperty('border-right-color', value, '');
   }
 
@@ -598,7 +652,7 @@
     getPropertyValue('border-right-style');
 
   /** Sets the value of "border-right-style" */
-  void set borderRightStyle(var value) {
+  void set borderRightStyle(String value) {
     setProperty('border-right-style', value, '');
   }
 
@@ -607,7 +661,7 @@
     getPropertyValue('border-right-width');
 
   /** Sets the value of "border-right-width" */
-  void set borderRightWidth(var value) {
+  void set borderRightWidth(String value) {
     setProperty('border-right-width', value, '');
   }
 
@@ -616,7 +670,7 @@
     getPropertyValue('border-spacing');
 
   /** Sets the value of "border-spacing" */
-  void set borderSpacing(var value) {
+  void set borderSpacing(String value) {
     setProperty('border-spacing', value, '');
   }
 
@@ -625,7 +679,7 @@
     getPropertyValue('${_browserPrefix}border-start');
 
   /** Sets the value of "border-start" */
-  void set borderStart(var value) {
+  void set borderStart(String value) {
     setProperty('${_browserPrefix}border-start', value, '');
   }
 
@@ -634,7 +688,7 @@
     getPropertyValue('${_browserPrefix}border-start-color');
 
   /** Sets the value of "border-start-color" */
-  void set borderStartColor(var value) {
+  void set borderStartColor(String value) {
     setProperty('${_browserPrefix}border-start-color', value, '');
   }
 
@@ -643,7 +697,7 @@
     getPropertyValue('${_browserPrefix}border-start-style');
 
   /** Sets the value of "border-start-style" */
-  void set borderStartStyle(var value) {
+  void set borderStartStyle(String value) {
     setProperty('${_browserPrefix}border-start-style', value, '');
   }
 
@@ -652,7 +706,7 @@
     getPropertyValue('${_browserPrefix}border-start-width');
 
   /** Sets the value of "border-start-width" */
-  void set borderStartWidth(var value) {
+  void set borderStartWidth(String value) {
     setProperty('${_browserPrefix}border-start-width', value, '');
   }
 
@@ -661,7 +715,7 @@
     getPropertyValue('border-style');
 
   /** Sets the value of "border-style" */
-  void set borderStyle(var value) {
+  void set borderStyle(String value) {
     setProperty('border-style', value, '');
   }
 
@@ -670,7 +724,7 @@
     getPropertyValue('border-top');
 
   /** Sets the value of "border-top" */
-  void set borderTop(var value) {
+  void set borderTop(String value) {
     setProperty('border-top', value, '');
   }
 
@@ -679,7 +733,7 @@
     getPropertyValue('border-top-color');
 
   /** Sets the value of "border-top-color" */
-  void set borderTopColor(var value) {
+  void set borderTopColor(String value) {
     setProperty('border-top-color', value, '');
   }
 
@@ -688,7 +742,7 @@
     getPropertyValue('border-top-left-radius');
 
   /** Sets the value of "border-top-left-radius" */
-  void set borderTopLeftRadius(var value) {
+  void set borderTopLeftRadius(String value) {
     setProperty('border-top-left-radius', value, '');
   }
 
@@ -697,7 +751,7 @@
     getPropertyValue('border-top-right-radius');
 
   /** Sets the value of "border-top-right-radius" */
-  void set borderTopRightRadius(var value) {
+  void set borderTopRightRadius(String value) {
     setProperty('border-top-right-radius', value, '');
   }
 
@@ -706,7 +760,7 @@
     getPropertyValue('border-top-style');
 
   /** Sets the value of "border-top-style" */
-  void set borderTopStyle(var value) {
+  void set borderTopStyle(String value) {
     setProperty('border-top-style', value, '');
   }
 
@@ -715,7 +769,7 @@
     getPropertyValue('border-top-width');
 
   /** Sets the value of "border-top-width" */
-  void set borderTopWidth(var value) {
+  void set borderTopWidth(String value) {
     setProperty('border-top-width', value, '');
   }
 
@@ -724,7 +778,7 @@
     getPropertyValue('${_browserPrefix}border-vertical-spacing');
 
   /** Sets the value of "border-vertical-spacing" */
-  void set borderVerticalSpacing(var value) {
+  void set borderVerticalSpacing(String value) {
     setProperty('${_browserPrefix}border-vertical-spacing', value, '');
   }
 
@@ -733,7 +787,7 @@
     getPropertyValue('border-width');
 
   /** Sets the value of "border-width" */
-  void set borderWidth(var value) {
+  void set borderWidth(String value) {
     setProperty('border-width', value, '');
   }
 
@@ -742,7 +796,7 @@
     getPropertyValue('bottom');
 
   /** Sets the value of "bottom" */
-  void set bottom(var value) {
+  void set bottom(String value) {
     setProperty('bottom', value, '');
   }
 
@@ -751,16 +805,25 @@
     getPropertyValue('${_browserPrefix}box-align');
 
   /** Sets the value of "box-align" */
-  void set boxAlign(var value) {
+  void set boxAlign(String value) {
     setProperty('${_browserPrefix}box-align', value, '');
   }
 
+  /** Gets the value of "box-decoration-break" */
+  String get boxDecorationBreak =>
+    getPropertyValue('${_browserPrefix}box-decoration-break');
+
+  /** Sets the value of "box-decoration-break" */
+  void set boxDecorationBreak(String value) {
+    setProperty('${_browserPrefix}box-decoration-break', value, '');
+  }
+
   /** Gets the value of "box-direction" */
   String get boxDirection =>
     getPropertyValue('${_browserPrefix}box-direction');
 
   /** Sets the value of "box-direction" */
-  void set boxDirection(var value) {
+  void set boxDirection(String value) {
     setProperty('${_browserPrefix}box-direction', value, '');
   }
 
@@ -769,7 +832,7 @@
     getPropertyValue('${_browserPrefix}box-flex');
 
   /** Sets the value of "box-flex" */
-  void set boxFlex(var value) {
+  void set boxFlex(String value) {
     setProperty('${_browserPrefix}box-flex', value, '');
   }
 
@@ -778,7 +841,7 @@
     getPropertyValue('${_browserPrefix}box-flex-group');
 
   /** Sets the value of "box-flex-group" */
-  void set boxFlexGroup(var value) {
+  void set boxFlexGroup(String value) {
     setProperty('${_browserPrefix}box-flex-group', value, '');
   }
 
@@ -787,7 +850,7 @@
     getPropertyValue('${_browserPrefix}box-lines');
 
   /** Sets the value of "box-lines" */
-  void set boxLines(var value) {
+  void set boxLines(String value) {
     setProperty('${_browserPrefix}box-lines', value, '');
   }
 
@@ -796,7 +859,7 @@
     getPropertyValue('${_browserPrefix}box-ordinal-group');
 
   /** Sets the value of "box-ordinal-group" */
-  void set boxOrdinalGroup(var value) {
+  void set boxOrdinalGroup(String value) {
     setProperty('${_browserPrefix}box-ordinal-group', value, '');
   }
 
@@ -805,7 +868,7 @@
     getPropertyValue('${_browserPrefix}box-orient');
 
   /** Sets the value of "box-orient" */
-  void set boxOrient(var value) {
+  void set boxOrient(String value) {
     setProperty('${_browserPrefix}box-orient', value, '');
   }
 
@@ -814,7 +877,7 @@
     getPropertyValue('${_browserPrefix}box-pack');
 
   /** Sets the value of "box-pack" */
-  void set boxPack(var value) {
+  void set boxPack(String value) {
     setProperty('${_browserPrefix}box-pack', value, '');
   }
 
@@ -823,7 +886,7 @@
     getPropertyValue('${_browserPrefix}box-reflect');
 
   /** Sets the value of "box-reflect" */
-  void set boxReflect(var value) {
+  void set boxReflect(String value) {
     setProperty('${_browserPrefix}box-reflect', value, '');
   }
 
@@ -832,7 +895,7 @@
     getPropertyValue('box-shadow');
 
   /** Sets the value of "box-shadow" */
-  void set boxShadow(var value) {
+  void set boxShadow(String value) {
     setProperty('box-shadow', value, '');
   }
 
@@ -841,7 +904,7 @@
     getPropertyValue('box-sizing');
 
   /** Sets the value of "box-sizing" */
-  void set boxSizing(var value) {
+  void set boxSizing(String value) {
     setProperty('box-sizing', value, '');
   }
 
@@ -850,7 +913,7 @@
     getPropertyValue('caption-side');
 
   /** Sets the value of "caption-side" */
-  void set captionSide(var value) {
+  void set captionSide(String value) {
     setProperty('caption-side', value, '');
   }
 
@@ -859,7 +922,7 @@
     getPropertyValue('clear');
 
   /** Sets the value of "clear" */
-  void set clear(var value) {
+  void set clear(String value) {
     setProperty('clear', value, '');
   }
 
@@ -868,16 +931,25 @@
     getPropertyValue('clip');
 
   /** Sets the value of "clip" */
-  void set clip(var value) {
+  void set clip(String value) {
     setProperty('clip', value, '');
   }
 
+  /** Gets the value of "clip-path" */
+  String get clipPath =>
+    getPropertyValue('${_browserPrefix}clip-path');
+
+  /** Sets the value of "clip-path" */
+  void set clipPath(String value) {
+    setProperty('${_browserPrefix}clip-path', value, '');
+  }
+
   /** Gets the value of "color" */
   String get color =>
     getPropertyValue('color');
 
   /** Sets the value of "color" */
-  void set color(var value) {
+  void set color(String value) {
     setProperty('color', value, '');
   }
 
@@ -886,16 +958,25 @@
     getPropertyValue('${_browserPrefix}color-correction');
 
   /** Sets the value of "color-correction" */
-  void set colorCorrection(var value) {
+  void set colorCorrection(String value) {
     setProperty('${_browserPrefix}color-correction', value, '');
   }
 
+  /** Gets the value of "column-axis" */
+  String get columnAxis =>
+    getPropertyValue('${_browserPrefix}column-axis');
+
+  /** Sets the value of "column-axis" */
+  void set columnAxis(String value) {
+    setProperty('${_browserPrefix}column-axis', value, '');
+  }
+
   /** Gets the value of "column-break-after" */
   String get columnBreakAfter =>
     getPropertyValue('${_browserPrefix}column-break-after');
 
   /** Sets the value of "column-break-after" */
-  void set columnBreakAfter(var value) {
+  void set columnBreakAfter(String value) {
     setProperty('${_browserPrefix}column-break-after', value, '');
   }
 
@@ -904,7 +985,7 @@
     getPropertyValue('${_browserPrefix}column-break-before');
 
   /** Sets the value of "column-break-before" */
-  void set columnBreakBefore(var value) {
+  void set columnBreakBefore(String value) {
     setProperty('${_browserPrefix}column-break-before', value, '');
   }
 
@@ -913,7 +994,7 @@
     getPropertyValue('${_browserPrefix}column-break-inside');
 
   /** Sets the value of "column-break-inside" */
-  void set columnBreakInside(var value) {
+  void set columnBreakInside(String value) {
     setProperty('${_browserPrefix}column-break-inside', value, '');
   }
 
@@ -922,7 +1003,7 @@
     getPropertyValue('${_browserPrefix}column-count');
 
   /** Sets the value of "column-count" */
-  void set columnCount(var value) {
+  void set columnCount(String value) {
     setProperty('${_browserPrefix}column-count', value, '');
   }
 
@@ -931,16 +1012,25 @@
     getPropertyValue('${_browserPrefix}column-gap');
 
   /** Sets the value of "column-gap" */
-  void set columnGap(var value) {
+  void set columnGap(String value) {
     setProperty('${_browserPrefix}column-gap', value, '');
   }
 
+  /** Gets the value of "column-progression" */
+  String get columnProgression =>
+    getPropertyValue('${_browserPrefix}column-progression');
+
+  /** Sets the value of "column-progression" */
+  void set columnProgression(String value) {
+    setProperty('${_browserPrefix}column-progression', value, '');
+  }
+
   /** Gets the value of "column-rule" */
   String get columnRule =>
     getPropertyValue('${_browserPrefix}column-rule');
 
   /** Sets the value of "column-rule" */
-  void set columnRule(var value) {
+  void set columnRule(String value) {
     setProperty('${_browserPrefix}column-rule', value, '');
   }
 
@@ -949,7 +1039,7 @@
     getPropertyValue('${_browserPrefix}column-rule-color');
 
   /** Sets the value of "column-rule-color" */
-  void set columnRuleColor(var value) {
+  void set columnRuleColor(String value) {
     setProperty('${_browserPrefix}column-rule-color', value, '');
   }
 
@@ -958,7 +1048,7 @@
     getPropertyValue('${_browserPrefix}column-rule-style');
 
   /** Sets the value of "column-rule-style" */
-  void set columnRuleStyle(var value) {
+  void set columnRuleStyle(String value) {
     setProperty('${_browserPrefix}column-rule-style', value, '');
   }
 
@@ -967,7 +1057,7 @@
     getPropertyValue('${_browserPrefix}column-rule-width');
 
   /** Sets the value of "column-rule-width" */
-  void set columnRuleWidth(var value) {
+  void set columnRuleWidth(String value) {
     setProperty('${_browserPrefix}column-rule-width', value, '');
   }
 
@@ -976,7 +1066,7 @@
     getPropertyValue('${_browserPrefix}column-span');
 
   /** Sets the value of "column-span" */
-  void set columnSpan(var value) {
+  void set columnSpan(String value) {
     setProperty('${_browserPrefix}column-span', value, '');
   }
 
@@ -985,7 +1075,7 @@
     getPropertyValue('${_browserPrefix}column-width');
 
   /** Sets the value of "column-width" */
-  void set columnWidth(var value) {
+  void set columnWidth(String value) {
     setProperty('${_browserPrefix}column-width', value, '');
   }
 
@@ -994,7 +1084,7 @@
     getPropertyValue('${_browserPrefix}columns');
 
   /** Sets the value of "columns" */
-  void set columns(var value) {
+  void set columns(String value) {
     setProperty('${_browserPrefix}columns', value, '');
   }
 
@@ -1003,7 +1093,7 @@
     getPropertyValue('content');
 
   /** Sets the value of "content" */
-  void set content(var value) {
+  void set content(String value) {
     setProperty('content', value, '');
   }
 
@@ -1012,7 +1102,7 @@
     getPropertyValue('counter-increment');
 
   /** Sets the value of "counter-increment" */
-  void set counterIncrement(var value) {
+  void set counterIncrement(String value) {
     setProperty('counter-increment', value, '');
   }
 
@@ -1021,7 +1111,7 @@
     getPropertyValue('counter-reset');
 
   /** Sets the value of "counter-reset" */
-  void set counterReset(var value) {
+  void set counterReset(String value) {
     setProperty('counter-reset', value, '');
   }
 
@@ -1030,16 +1120,25 @@
     getPropertyValue('cursor');
 
   /** Sets the value of "cursor" */
-  void set cursor(var value) {
+  void set cursor(String value) {
     setProperty('cursor', value, '');
   }
 
+  /** Gets the value of "dashboard-region" */
+  String get dashboardRegion =>
+    getPropertyValue('${_browserPrefix}dashboard-region');
+
+  /** Sets the value of "dashboard-region" */
+  void set dashboardRegion(String value) {
+    setProperty('${_browserPrefix}dashboard-region', value, '');
+  }
+
   /** Gets the value of "direction" */
   String get direction =>
     getPropertyValue('direction');
 
   /** Sets the value of "direction" */
-  void set direction(var value) {
+  void set direction(String value) {
     setProperty('direction', value, '');
   }
 
@@ -1048,7 +1147,7 @@
     getPropertyValue('display');
 
   /** Sets the value of "display" */
-  void set display(var value) {
+  void set display(String value) {
     setProperty('display', value, '');
   }
 
@@ -1057,7 +1156,7 @@
     getPropertyValue('empty-cells');
 
   /** Sets the value of "empty-cells" */
-  void set emptyCells(var value) {
+  void set emptyCells(String value) {
     setProperty('empty-cells', value, '');
   }
 
@@ -1066,17 +1165,35 @@
     getPropertyValue('${_browserPrefix}filter');
 
   /** Sets the value of "filter" */
-  void set filter(var value) {
+  void set filter(String value) {
     setProperty('${_browserPrefix}filter', value, '');
   }
 
-  /** Gets the value of "flex-align" */
-  String get flexAlign =>
-    getPropertyValue('${_browserPrefix}flex-align');
+  /** Gets the value of "flex" */
+  String get flex =>
+    getPropertyValue('${_browserPrefix}flex');
 
-  /** Sets the value of "flex-align" */
-  void set flexAlign(var value) {
-    setProperty('${_browserPrefix}flex-align', value, '');
+  /** Sets the value of "flex" */
+  void set flex(String value) {
+    setProperty('${_browserPrefix}flex', value, '');
+  }
+
+  /** Gets the value of "flex-basis" */
+  String get flexBasis =>
+    getPropertyValue('${_browserPrefix}flex-basis');
+
+  /** Sets the value of "flex-basis" */
+  void set flexBasis(String value) {
+    setProperty('${_browserPrefix}flex-basis', value, '');
+  }
+
+  /** Gets the value of "flex-direction" */
+  String get flexDirection =>
+    getPropertyValue('${_browserPrefix}flex-direction');
+
+  /** Sets the value of "flex-direction" */
+  void set flexDirection(String value) {
+    setProperty('${_browserPrefix}flex-direction', value, '');
   }
 
   /** Gets the value of "flex-flow" */
@@ -1084,26 +1201,35 @@
     getPropertyValue('${_browserPrefix}flex-flow');
 
   /** Sets the value of "flex-flow" */
-  void set flexFlow(var value) {
+  void set flexFlow(String value) {
     setProperty('${_browserPrefix}flex-flow', value, '');
   }
 
-  /** Gets the value of "flex-order" */
-  String get flexOrder =>
-    getPropertyValue('${_browserPrefix}flex-order');
+  /** Gets the value of "flex-grow" */
+  String get flexGrow =>
+    getPropertyValue('${_browserPrefix}flex-grow');
 
-  /** Sets the value of "flex-order" */
-  void set flexOrder(var value) {
-    setProperty('${_browserPrefix}flex-order', value, '');
+  /** Sets the value of "flex-grow" */
+  void set flexGrow(String value) {
+    setProperty('${_browserPrefix}flex-grow', value, '');
   }
 
-  /** Gets the value of "flex-pack" */
-  String get flexPack =>
-    getPropertyValue('${_browserPrefix}flex-pack');
+  /** Gets the value of "flex-shrink" */
+  String get flexShrink =>
+    getPropertyValue('${_browserPrefix}flex-shrink');
 
-  /** Sets the value of "flex-pack" */
-  void set flexPack(var value) {
-    setProperty('${_browserPrefix}flex-pack', value, '');
+  /** Sets the value of "flex-shrink" */
+  void set flexShrink(String value) {
+    setProperty('${_browserPrefix}flex-shrink', value, '');
+  }
+
+  /** Gets the value of "flex-wrap" */
+  String get flexWrap =>
+    getPropertyValue('${_browserPrefix}flex-wrap');
+
+  /** Sets the value of "flex-wrap" */
+  void set flexWrap(String value) {
+    setProperty('${_browserPrefix}flex-wrap', value, '');
   }
 
   /** Gets the value of "float" */
@@ -1111,7 +1237,7 @@
     getPropertyValue('float');
 
   /** Sets the value of "float" */
-  void set float(var value) {
+  void set float(String value) {
     setProperty('float', value, '');
   }
 
@@ -1120,7 +1246,7 @@
     getPropertyValue('${_browserPrefix}flow-from');
 
   /** Sets the value of "flow-from" */
-  void set flowFrom(var value) {
+  void set flowFrom(String value) {
     setProperty('${_browserPrefix}flow-from', value, '');
   }
 
@@ -1129,7 +1255,7 @@
     getPropertyValue('${_browserPrefix}flow-into');
 
   /** Sets the value of "flow-into" */
-  void set flowInto(var value) {
+  void set flowInto(String value) {
     setProperty('${_browserPrefix}flow-into', value, '');
   }
 
@@ -1138,7 +1264,7 @@
     getPropertyValue('font');
 
   /** Sets the value of "font" */
-  void set font(var value) {
+  void set font(String value) {
     setProperty('font', value, '');
   }
 
@@ -1147,7 +1273,7 @@
     getPropertyValue('font-family');
 
   /** Sets the value of "font-family" */
-  void set fontFamily(var value) {
+  void set fontFamily(String value) {
     setProperty('font-family', value, '');
   }
 
@@ -1156,16 +1282,25 @@
     getPropertyValue('${_browserPrefix}font-feature-settings');
 
   /** Sets the value of "font-feature-settings" */
-  void set fontFeatureSettings(var value) {
+  void set fontFeatureSettings(String value) {
     setProperty('${_browserPrefix}font-feature-settings', value, '');
   }
 
+  /** Gets the value of "font-kerning" */
+  String get fontKerning =>
+    getPropertyValue('${_browserPrefix}font-kerning');
+
+  /** Sets the value of "font-kerning" */
+  void set fontKerning(String value) {
+    setProperty('${_browserPrefix}font-kerning', value, '');
+  }
+
   /** Gets the value of "font-size" */
   String get fontSize =>
     getPropertyValue('font-size');
 
   /** Sets the value of "font-size" */
-  void set fontSize(var value) {
+  void set fontSize(String value) {
     setProperty('font-size', value, '');
   }
 
@@ -1174,7 +1309,7 @@
     getPropertyValue('${_browserPrefix}font-size-delta');
 
   /** Sets the value of "font-size-delta" */
-  void set fontSizeDelta(var value) {
+  void set fontSizeDelta(String value) {
     setProperty('${_browserPrefix}font-size-delta', value, '');
   }
 
@@ -1183,7 +1318,7 @@
     getPropertyValue('${_browserPrefix}font-smoothing');
 
   /** Sets the value of "font-smoothing" */
-  void set fontSmoothing(var value) {
+  void set fontSmoothing(String value) {
     setProperty('${_browserPrefix}font-smoothing', value, '');
   }
 
@@ -1192,7 +1327,7 @@
     getPropertyValue('font-stretch');
 
   /** Sets the value of "font-stretch" */
-  void set fontStretch(var value) {
+  void set fontStretch(String value) {
     setProperty('font-stretch', value, '');
   }
 
@@ -1201,7 +1336,7 @@
     getPropertyValue('font-style');
 
   /** Sets the value of "font-style" */
-  void set fontStyle(var value) {
+  void set fontStyle(String value) {
     setProperty('font-style', value, '');
   }
 
@@ -1210,25 +1345,70 @@
     getPropertyValue('font-variant');
 
   /** Sets the value of "font-variant" */
-  void set fontVariant(var value) {
+  void set fontVariant(String value) {
     setProperty('font-variant', value, '');
   }
 
+  /** Gets the value of "font-variant-ligatures" */
+  String get fontVariantLigatures =>
+    getPropertyValue('${_browserPrefix}font-variant-ligatures');
+
+  /** Sets the value of "font-variant-ligatures" */
+  void set fontVariantLigatures(String value) {
+    setProperty('${_browserPrefix}font-variant-ligatures', value, '');
+  }
+
   /** Gets the value of "font-weight" */
   String get fontWeight =>
     getPropertyValue('font-weight');
 
   /** Sets the value of "font-weight" */
-  void set fontWeight(var value) {
+  void set fontWeight(String value) {
     setProperty('font-weight', value, '');
   }
 
+  /** Gets the value of "grid-column" */
+  String get gridColumn =>
+    getPropertyValue('${_browserPrefix}grid-column');
+
+  /** Sets the value of "grid-column" */
+  void set gridColumn(String value) {
+    setProperty('${_browserPrefix}grid-column', value, '');
+  }
+
+  /** Gets the value of "grid-columns" */
+  String get gridColumns =>
+    getPropertyValue('${_browserPrefix}grid-columns');
+
+  /** Sets the value of "grid-columns" */
+  void set gridColumns(String value) {
+    setProperty('${_browserPrefix}grid-columns', value, '');
+  }
+
+  /** Gets the value of "grid-row" */
+  String get gridRow =>
+    getPropertyValue('${_browserPrefix}grid-row');
+
+  /** Sets the value of "grid-row" */
+  void set gridRow(String value) {
+    setProperty('${_browserPrefix}grid-row', value, '');
+  }
+
+  /** Gets the value of "grid-rows" */
+  String get gridRows =>
+    getPropertyValue('${_browserPrefix}grid-rows');
+
+  /** Sets the value of "grid-rows" */
+  void set gridRows(String value) {
+    setProperty('${_browserPrefix}grid-rows', value, '');
+  }
+
   /** Gets the value of "height" */
   String get height =>
     getPropertyValue('height');
 
   /** Sets the value of "height" */
-  void set height(var value) {
+  void set height(String value) {
     setProperty('height', value, '');
   }
 
@@ -1237,7 +1417,7 @@
     getPropertyValue('${_browserPrefix}highlight');
 
   /** Sets the value of "highlight" */
-  void set highlight(var value) {
+  void set highlight(String value) {
     setProperty('${_browserPrefix}highlight', value, '');
   }
 
@@ -1246,7 +1426,7 @@
     getPropertyValue('${_browserPrefix}hyphenate-character');
 
   /** Sets the value of "hyphenate-character" */
-  void set hyphenateCharacter(var value) {
+  void set hyphenateCharacter(String value) {
     setProperty('${_browserPrefix}hyphenate-character', value, '');
   }
 
@@ -1255,7 +1435,7 @@
     getPropertyValue('${_browserPrefix}hyphenate-limit-after');
 
   /** Sets the value of "hyphenate-limit-after" */
-  void set hyphenateLimitAfter(var value) {
+  void set hyphenateLimitAfter(String value) {
     setProperty('${_browserPrefix}hyphenate-limit-after', value, '');
   }
 
@@ -1264,7 +1444,7 @@
     getPropertyValue('${_browserPrefix}hyphenate-limit-before');
 
   /** Sets the value of "hyphenate-limit-before" */
-  void set hyphenateLimitBefore(var value) {
+  void set hyphenateLimitBefore(String value) {
     setProperty('${_browserPrefix}hyphenate-limit-before', value, '');
   }
 
@@ -1273,7 +1453,7 @@
     getPropertyValue('${_browserPrefix}hyphenate-limit-lines');
 
   /** Sets the value of "hyphenate-limit-lines" */
-  void set hyphenateLimitLines(var value) {
+  void set hyphenateLimitLines(String value) {
     setProperty('${_browserPrefix}hyphenate-limit-lines', value, '');
   }
 
@@ -1282,25 +1462,52 @@
     getPropertyValue('${_browserPrefix}hyphens');
 
   /** Sets the value of "hyphens" */
-  void set hyphens(var value) {
+  void set hyphens(String value) {
     setProperty('${_browserPrefix}hyphens', value, '');
   }
 
+  /** Gets the value of "image-orientation" */
+  String get imageOrientation =>
+    getPropertyValue('image-orientation');
+
+  /** Sets the value of "image-orientation" */
+  void set imageOrientation(String value) {
+    setProperty('image-orientation', value, '');
+  }
+
   /** Gets the value of "image-rendering" */
   String get imageRendering =>
     getPropertyValue('image-rendering');
 
   /** Sets the value of "image-rendering" */
-  void set imageRendering(var value) {
+  void set imageRendering(String value) {
     setProperty('image-rendering', value, '');
   }
 
+  /** Gets the value of "image-resolution" */
+  String get imageResolution =>
+    getPropertyValue('image-resolution');
+
+  /** Sets the value of "image-resolution" */
+  void set imageResolution(String value) {
+    setProperty('image-resolution', value, '');
+  }
+
+  /** Gets the value of "justify-content" */
+  String get justifyContent =>
+    getPropertyValue('${_browserPrefix}justify-content');
+
+  /** Sets the value of "justify-content" */
+  void set justifyContent(String value) {
+    setProperty('${_browserPrefix}justify-content', value, '');
+  }
+
   /** Gets the value of "left" */
   String get left =>
     getPropertyValue('left');
 
   /** Sets the value of "left" */
-  void set left(var value) {
+  void set left(String value) {
     setProperty('left', value, '');
   }
 
@@ -1309,16 +1516,25 @@
     getPropertyValue('letter-spacing');
 
   /** Sets the value of "letter-spacing" */
-  void set letterSpacing(var value) {
+  void set letterSpacing(String value) {
     setProperty('letter-spacing', value, '');
   }
 
+  /** Gets the value of "line-align" */
+  String get lineAlign =>
+    getPropertyValue('${_browserPrefix}line-align');
+
+  /** Sets the value of "line-align" */
+  void set lineAlign(String value) {
+    setProperty('${_browserPrefix}line-align', value, '');
+  }
+
   /** Gets the value of "line-box-contain" */
   String get lineBoxContain =>
     getPropertyValue('${_browserPrefix}line-box-contain');
 
   /** Sets the value of "line-box-contain" */
-  void set lineBoxContain(var value) {
+  void set lineBoxContain(String value) {
     setProperty('${_browserPrefix}line-box-contain', value, '');
   }
 
@@ -1327,7 +1543,7 @@
     getPropertyValue('${_browserPrefix}line-break');
 
   /** Sets the value of "line-break" */
-  void set lineBreak(var value) {
+  void set lineBreak(String value) {
     setProperty('${_browserPrefix}line-break', value, '');
   }
 
@@ -1336,25 +1552,43 @@
     getPropertyValue('${_browserPrefix}line-clamp');
 
   /** Sets the value of "line-clamp" */
-  void set lineClamp(var value) {
+  void set lineClamp(String value) {
     setProperty('${_browserPrefix}line-clamp', value, '');
   }
 
+  /** Gets the value of "line-grid" */
+  String get lineGrid =>
+    getPropertyValue('${_browserPrefix}line-grid');
+
+  /** Sets the value of "line-grid" */
+  void set lineGrid(String value) {
+    setProperty('${_browserPrefix}line-grid', value, '');
+  }
+
   /** Gets the value of "line-height" */
   String get lineHeight =>
     getPropertyValue('line-height');
 
   /** Sets the value of "line-height" */
-  void set lineHeight(var value) {
+  void set lineHeight(String value) {
     setProperty('line-height', value, '');
   }
 
+  /** Gets the value of "line-snap" */
+  String get lineSnap =>
+    getPropertyValue('${_browserPrefix}line-snap');
+
+  /** Sets the value of "line-snap" */
+  void set lineSnap(String value) {
+    setProperty('${_browserPrefix}line-snap', value, '');
+  }
+
   /** Gets the value of "list-style" */
   String get listStyle =>
     getPropertyValue('list-style');
 
   /** Sets the value of "list-style" */
-  void set listStyle(var value) {
+  void set listStyle(String value) {
     setProperty('list-style', value, '');
   }
 
@@ -1363,7 +1597,7 @@
     getPropertyValue('list-style-image');
 
   /** Sets the value of "list-style-image" */
-  void set listStyleImage(var value) {
+  void set listStyleImage(String value) {
     setProperty('list-style-image', value, '');
   }
 
@@ -1372,7 +1606,7 @@
     getPropertyValue('list-style-position');
 
   /** Sets the value of "list-style-position" */
-  void set listStylePosition(var value) {
+  void set listStylePosition(String value) {
     setProperty('list-style-position', value, '');
   }
 
@@ -1381,7 +1615,7 @@
     getPropertyValue('list-style-type');
 
   /** Sets the value of "list-style-type" */
-  void set listStyleType(var value) {
+  void set listStyleType(String value) {
     setProperty('list-style-type', value, '');
   }
 
@@ -1390,7 +1624,7 @@
     getPropertyValue('${_browserPrefix}locale');
 
   /** Sets the value of "locale" */
-  void set locale(var value) {
+  void set locale(String value) {
     setProperty('${_browserPrefix}locale', value, '');
   }
 
@@ -1399,7 +1633,7 @@
     getPropertyValue('${_browserPrefix}logical-height');
 
   /** Sets the value of "logical-height" */
-  void set logicalHeight(var value) {
+  void set logicalHeight(String value) {
     setProperty('${_browserPrefix}logical-height', value, '');
   }
 
@@ -1408,7 +1642,7 @@
     getPropertyValue('${_browserPrefix}logical-width');
 
   /** Sets the value of "logical-width" */
-  void set logicalWidth(var value) {
+  void set logicalWidth(String value) {
     setProperty('${_browserPrefix}logical-width', value, '');
   }
 
@@ -1417,7 +1651,7 @@
     getPropertyValue('margin');
 
   /** Sets the value of "margin" */
-  void set margin(var value) {
+  void set margin(String value) {
     setProperty('margin', value, '');
   }
 
@@ -1426,7 +1660,7 @@
     getPropertyValue('${_browserPrefix}margin-after');
 
   /** Sets the value of "margin-after" */
-  void set marginAfter(var value) {
+  void set marginAfter(String value) {
     setProperty('${_browserPrefix}margin-after', value, '');
   }
 
@@ -1435,7 +1669,7 @@
     getPropertyValue('${_browserPrefix}margin-after-collapse');
 
   /** Sets the value of "margin-after-collapse" */
-  void set marginAfterCollapse(var value) {
+  void set marginAfterCollapse(String value) {
     setProperty('${_browserPrefix}margin-after-collapse', value, '');
   }
 
@@ -1444,7 +1678,7 @@
     getPropertyValue('${_browserPrefix}margin-before');
 
   /** Sets the value of "margin-before" */
-  void set marginBefore(var value) {
+  void set marginBefore(String value) {
     setProperty('${_browserPrefix}margin-before', value, '');
   }
 
@@ -1453,7 +1687,7 @@
     getPropertyValue('${_browserPrefix}margin-before-collapse');
 
   /** Sets the value of "margin-before-collapse" */
-  void set marginBeforeCollapse(var value) {
+  void set marginBeforeCollapse(String value) {
     setProperty('${_browserPrefix}margin-before-collapse', value, '');
   }
 
@@ -1462,7 +1696,7 @@
     getPropertyValue('margin-bottom');
 
   /** Sets the value of "margin-bottom" */
-  void set marginBottom(var value) {
+  void set marginBottom(String value) {
     setProperty('margin-bottom', value, '');
   }
 
@@ -1471,7 +1705,7 @@
     getPropertyValue('${_browserPrefix}margin-bottom-collapse');
 
   /** Sets the value of "margin-bottom-collapse" */
-  void set marginBottomCollapse(var value) {
+  void set marginBottomCollapse(String value) {
     setProperty('${_browserPrefix}margin-bottom-collapse', value, '');
   }
 
@@ -1480,7 +1714,7 @@
     getPropertyValue('${_browserPrefix}margin-collapse');
 
   /** Sets the value of "margin-collapse" */
-  void set marginCollapse(var value) {
+  void set marginCollapse(String value) {
     setProperty('${_browserPrefix}margin-collapse', value, '');
   }
 
@@ -1489,7 +1723,7 @@
     getPropertyValue('${_browserPrefix}margin-end');
 
   /** Sets the value of "margin-end" */
-  void set marginEnd(var value) {
+  void set marginEnd(String value) {
     setProperty('${_browserPrefix}margin-end', value, '');
   }
 
@@ -1498,7 +1732,7 @@
     getPropertyValue('margin-left');
 
   /** Sets the value of "margin-left" */
-  void set marginLeft(var value) {
+  void set marginLeft(String value) {
     setProperty('margin-left', value, '');
   }
 
@@ -1507,7 +1741,7 @@
     getPropertyValue('margin-right');
 
   /** Sets the value of "margin-right" */
-  void set marginRight(var value) {
+  void set marginRight(String value) {
     setProperty('margin-right', value, '');
   }
 
@@ -1516,7 +1750,7 @@
     getPropertyValue('${_browserPrefix}margin-start');
 
   /** Sets the value of "margin-start" */
-  void set marginStart(var value) {
+  void set marginStart(String value) {
     setProperty('${_browserPrefix}margin-start', value, '');
   }
 
@@ -1525,7 +1759,7 @@
     getPropertyValue('margin-top');
 
   /** Sets the value of "margin-top" */
-  void set marginTop(var value) {
+  void set marginTop(String value) {
     setProperty('margin-top', value, '');
   }
 
@@ -1534,7 +1768,7 @@
     getPropertyValue('${_browserPrefix}margin-top-collapse');
 
   /** Sets the value of "margin-top-collapse" */
-  void set marginTopCollapse(var value) {
+  void set marginTopCollapse(String value) {
     setProperty('${_browserPrefix}margin-top-collapse', value, '');
   }
 
@@ -1543,7 +1777,7 @@
     getPropertyValue('${_browserPrefix}marquee');
 
   /** Sets the value of "marquee" */
-  void set marquee(var value) {
+  void set marquee(String value) {
     setProperty('${_browserPrefix}marquee', value, '');
   }
 
@@ -1552,7 +1786,7 @@
     getPropertyValue('${_browserPrefix}marquee-direction');
 
   /** Sets the value of "marquee-direction" */
-  void set marqueeDirection(var value) {
+  void set marqueeDirection(String value) {
     setProperty('${_browserPrefix}marquee-direction', value, '');
   }
 
@@ -1561,7 +1795,7 @@
     getPropertyValue('${_browserPrefix}marquee-increment');
 
   /** Sets the value of "marquee-increment" */
-  void set marqueeIncrement(var value) {
+  void set marqueeIncrement(String value) {
     setProperty('${_browserPrefix}marquee-increment', value, '');
   }
 
@@ -1570,7 +1804,7 @@
     getPropertyValue('${_browserPrefix}marquee-repetition');
 
   /** Sets the value of "marquee-repetition" */
-  void set marqueeRepetition(var value) {
+  void set marqueeRepetition(String value) {
     setProperty('${_browserPrefix}marquee-repetition', value, '');
   }
 
@@ -1579,7 +1813,7 @@
     getPropertyValue('${_browserPrefix}marquee-speed');
 
   /** Sets the value of "marquee-speed" */
-  void set marqueeSpeed(var value) {
+  void set marqueeSpeed(String value) {
     setProperty('${_browserPrefix}marquee-speed', value, '');
   }
 
@@ -1588,7 +1822,7 @@
     getPropertyValue('${_browserPrefix}marquee-style');
 
   /** Sets the value of "marquee-style" */
-  void set marqueeStyle(var value) {
+  void set marqueeStyle(String value) {
     setProperty('${_browserPrefix}marquee-style', value, '');
   }
 
@@ -1597,7 +1831,7 @@
     getPropertyValue('${_browserPrefix}mask');
 
   /** Sets the value of "mask" */
-  void set mask(var value) {
+  void set mask(String value) {
     setProperty('${_browserPrefix}mask', value, '');
   }
 
@@ -1606,7 +1840,7 @@
     getPropertyValue('${_browserPrefix}mask-attachment');
 
   /** Sets the value of "mask-attachment" */
-  void set maskAttachment(var value) {
+  void set maskAttachment(String value) {
     setProperty('${_browserPrefix}mask-attachment', value, '');
   }
 
@@ -1615,7 +1849,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image');
 
   /** Sets the value of "mask-box-image" */
-  void set maskBoxImage(var value) {
+  void set maskBoxImage(String value) {
     setProperty('${_browserPrefix}mask-box-image', value, '');
   }
 
@@ -1624,7 +1858,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image-outset');
 
   /** Sets the value of "mask-box-image-outset" */
-  void set maskBoxImageOutset(var value) {
+  void set maskBoxImageOutset(String value) {
     setProperty('${_browserPrefix}mask-box-image-outset', value, '');
   }
 
@@ -1633,7 +1867,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image-repeat');
 
   /** Sets the value of "mask-box-image-repeat" */
-  void set maskBoxImageRepeat(var value) {
+  void set maskBoxImageRepeat(String value) {
     setProperty('${_browserPrefix}mask-box-image-repeat', value, '');
   }
 
@@ -1642,7 +1876,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image-slice');
 
   /** Sets the value of "mask-box-image-slice" */
-  void set maskBoxImageSlice(var value) {
+  void set maskBoxImageSlice(String value) {
     setProperty('${_browserPrefix}mask-box-image-slice', value, '');
   }
 
@@ -1651,7 +1885,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image-source');
 
   /** Sets the value of "mask-box-image-source" */
-  void set maskBoxImageSource(var value) {
+  void set maskBoxImageSource(String value) {
     setProperty('${_browserPrefix}mask-box-image-source', value, '');
   }
 
@@ -1660,7 +1894,7 @@
     getPropertyValue('${_browserPrefix}mask-box-image-width');
 
   /** Sets the value of "mask-box-image-width" */
-  void set maskBoxImageWidth(var value) {
+  void set maskBoxImageWidth(String value) {
     setProperty('${_browserPrefix}mask-box-image-width', value, '');
   }
 
@@ -1669,7 +1903,7 @@
     getPropertyValue('${_browserPrefix}mask-clip');
 
   /** Sets the value of "mask-clip" */
-  void set maskClip(var value) {
+  void set maskClip(String value) {
     setProperty('${_browserPrefix}mask-clip', value, '');
   }
 
@@ -1678,7 +1912,7 @@
     getPropertyValue('${_browserPrefix}mask-composite');
 
   /** Sets the value of "mask-composite" */
-  void set maskComposite(var value) {
+  void set maskComposite(String value) {
     setProperty('${_browserPrefix}mask-composite', value, '');
   }
 
@@ -1687,7 +1921,7 @@
     getPropertyValue('${_browserPrefix}mask-image');
 
   /** Sets the value of "mask-image" */
-  void set maskImage(var value) {
+  void set maskImage(String value) {
     setProperty('${_browserPrefix}mask-image', value, '');
   }
 
@@ -1696,7 +1930,7 @@
     getPropertyValue('${_browserPrefix}mask-origin');
 
   /** Sets the value of "mask-origin" */
-  void set maskOrigin(var value) {
+  void set maskOrigin(String value) {
     setProperty('${_browserPrefix}mask-origin', value, '');
   }
 
@@ -1705,7 +1939,7 @@
     getPropertyValue('${_browserPrefix}mask-position');
 
   /** Sets the value of "mask-position" */
-  void set maskPosition(var value) {
+  void set maskPosition(String value) {
     setProperty('${_browserPrefix}mask-position', value, '');
   }
 
@@ -1714,7 +1948,7 @@
     getPropertyValue('${_browserPrefix}mask-position-x');
 
   /** Sets the value of "mask-position-x" */
-  void set maskPositionX(var value) {
+  void set maskPositionX(String value) {
     setProperty('${_browserPrefix}mask-position-x', value, '');
   }
 
@@ -1723,7 +1957,7 @@
     getPropertyValue('${_browserPrefix}mask-position-y');
 
   /** Sets the value of "mask-position-y" */
-  void set maskPositionY(var value) {
+  void set maskPositionY(String value) {
     setProperty('${_browserPrefix}mask-position-y', value, '');
   }
 
@@ -1732,7 +1966,7 @@
     getPropertyValue('${_browserPrefix}mask-repeat');
 
   /** Sets the value of "mask-repeat" */
-  void set maskRepeat(var value) {
+  void set maskRepeat(String value) {
     setProperty('${_browserPrefix}mask-repeat', value, '');
   }
 
@@ -1741,7 +1975,7 @@
     getPropertyValue('${_browserPrefix}mask-repeat-x');
 
   /** Sets the value of "mask-repeat-x" */
-  void set maskRepeatX(var value) {
+  void set maskRepeatX(String value) {
     setProperty('${_browserPrefix}mask-repeat-x', value, '');
   }
 
@@ -1750,7 +1984,7 @@
     getPropertyValue('${_browserPrefix}mask-repeat-y');
 
   /** Sets the value of "mask-repeat-y" */
-  void set maskRepeatY(var value) {
+  void set maskRepeatY(String value) {
     setProperty('${_browserPrefix}mask-repeat-y', value, '');
   }
 
@@ -1759,25 +1993,16 @@
     getPropertyValue('${_browserPrefix}mask-size');
 
   /** Sets the value of "mask-size" */
-  void set maskSize(var value) {
+  void set maskSize(String value) {
     setProperty('${_browserPrefix}mask-size', value, '');
   }
 
-  /** Gets the value of "match-nearest-mail-blockquote-color" */
-  String get matchNearestMailBlockquoteColor =>
-    getPropertyValue('${_browserPrefix}match-nearest-mail-blockquote-color');
-
-  /** Sets the value of "match-nearest-mail-blockquote-color" */
-  void set matchNearestMailBlockquoteColor(var value) {
-    setProperty('${_browserPrefix}match-nearest-mail-blockquote-color', value, '');
-  }
-
   /** Gets the value of "max-height" */
   String get maxHeight =>
     getPropertyValue('max-height');
 
   /** Sets the value of "max-height" */
-  void set maxHeight(var value) {
+  void set maxHeight(String value) {
     setProperty('max-height', value, '');
   }
 
@@ -1786,7 +2011,7 @@
     getPropertyValue('${_browserPrefix}max-logical-height');
 
   /** Sets the value of "max-logical-height" */
-  void set maxLogicalHeight(var value) {
+  void set maxLogicalHeight(String value) {
     setProperty('${_browserPrefix}max-logical-height', value, '');
   }
 
@@ -1795,7 +2020,7 @@
     getPropertyValue('${_browserPrefix}max-logical-width');
 
   /** Sets the value of "max-logical-width" */
-  void set maxLogicalWidth(var value) {
+  void set maxLogicalWidth(String value) {
     setProperty('${_browserPrefix}max-logical-width', value, '');
   }
 
@@ -1804,16 +2029,25 @@
     getPropertyValue('max-width');
 
   /** Sets the value of "max-width" */
-  void set maxWidth(var value) {
+  void set maxWidth(String value) {
     setProperty('max-width', value, '');
   }
 
+  /** Gets the value of "max-zoom" */
+  String get maxZoom =>
+    getPropertyValue('max-zoom');
+
+  /** Sets the value of "max-zoom" */
+  void set maxZoom(String value) {
+    setProperty('max-zoom', value, '');
+  }
+
   /** Gets the value of "min-height" */
   String get minHeight =>
     getPropertyValue('min-height');
 
   /** Sets the value of "min-height" */
-  void set minHeight(var value) {
+  void set minHeight(String value) {
     setProperty('min-height', value, '');
   }
 
@@ -1822,7 +2056,7 @@
     getPropertyValue('${_browserPrefix}min-logical-height');
 
   /** Sets the value of "min-logical-height" */
-  void set minLogicalHeight(var value) {
+  void set minLogicalHeight(String value) {
     setProperty('${_browserPrefix}min-logical-height', value, '');
   }
 
@@ -1831,7 +2065,7 @@
     getPropertyValue('${_browserPrefix}min-logical-width');
 
   /** Sets the value of "min-logical-width" */
-  void set minLogicalWidth(var value) {
+  void set minLogicalWidth(String value) {
     setProperty('${_browserPrefix}min-logical-width', value, '');
   }
 
@@ -1840,16 +2074,25 @@
     getPropertyValue('min-width');
 
   /** Sets the value of "min-width" */
-  void set minWidth(var value) {
+  void set minWidth(String value) {
     setProperty('min-width', value, '');
   }
 
+  /** Gets the value of "min-zoom" */
+  String get minZoom =>
+    getPropertyValue('min-zoom');
+
+  /** Sets the value of "min-zoom" */
+  void set minZoom(String value) {
+    setProperty('min-zoom', value, '');
+  }
+
   /** Gets the value of "nbsp-mode" */
   String get nbspMode =>
     getPropertyValue('${_browserPrefix}nbsp-mode');
 
   /** Sets the value of "nbsp-mode" */
-  void set nbspMode(var value) {
+  void set nbspMode(String value) {
     setProperty('${_browserPrefix}nbsp-mode', value, '');
   }
 
@@ -1858,16 +2101,34 @@
     getPropertyValue('opacity');
 
   /** Sets the value of "opacity" */
-  void set opacity(var value) {
+  void set opacity(String value) {
     setProperty('opacity', value, '');
   }
 
+  /** Gets the value of "order" */
+  String get order =>
+    getPropertyValue('${_browserPrefix}order');
+
+  /** Sets the value of "order" */
+  void set order(String value) {
+    setProperty('${_browserPrefix}order', value, '');
+  }
+
+  /** Gets the value of "orientation" */
+  String get orientation =>
+    getPropertyValue('orientation');
+
+  /** Sets the value of "orientation" */
+  void set orientation(String value) {
+    setProperty('orientation', value, '');
+  }
+
   /** Gets the value of "orphans" */
   String get orphans =>
     getPropertyValue('orphans');
 
   /** Sets the value of "orphans" */
-  void set orphans(var value) {
+  void set orphans(String value) {
     setProperty('orphans', value, '');
   }
 
@@ -1876,7 +2137,7 @@
     getPropertyValue('outline');
 
   /** Sets the value of "outline" */
-  void set outline(var value) {
+  void set outline(String value) {
     setProperty('outline', value, '');
   }
 
@@ -1885,7 +2146,7 @@
     getPropertyValue('outline-color');
 
   /** Sets the value of "outline-color" */
-  void set outlineColor(var value) {
+  void set outlineColor(String value) {
     setProperty('outline-color', value, '');
   }
 
@@ -1894,7 +2155,7 @@
     getPropertyValue('outline-offset');
 
   /** Sets the value of "outline-offset" */
-  void set outlineOffset(var value) {
+  void set outlineOffset(String value) {
     setProperty('outline-offset', value, '');
   }
 
@@ -1903,7 +2164,7 @@
     getPropertyValue('outline-style');
 
   /** Sets the value of "outline-style" */
-  void set outlineStyle(var value) {
+  void set outlineStyle(String value) {
     setProperty('outline-style', value, '');
   }
 
@@ -1912,7 +2173,7 @@
     getPropertyValue('outline-width');
 
   /** Sets the value of "outline-width" */
-  void set outlineWidth(var value) {
+  void set outlineWidth(String value) {
     setProperty('outline-width', value, '');
   }
 
@@ -1921,16 +2182,34 @@
     getPropertyValue('overflow');
 
   /** Sets the value of "overflow" */
-  void set overflow(var value) {
+  void set overflow(String value) {
     setProperty('overflow', value, '');
   }
 
+  /** Gets the value of "overflow-scrolling" */
+  String get overflowScrolling =>
+    getPropertyValue('${_browserPrefix}overflow-scrolling');
+
+  /** Sets the value of "overflow-scrolling" */
+  void set overflowScrolling(String value) {
+    setProperty('${_browserPrefix}overflow-scrolling', value, '');
+  }
+
+  /** Gets the value of "overflow-wrap" */
+  String get overflowWrap =>
+    getPropertyValue('overflow-wrap');
+
+  /** Sets the value of "overflow-wrap" */
+  void set overflowWrap(String value) {
+    setProperty('overflow-wrap', value, '');
+  }
+
   /** Gets the value of "overflow-x" */
   String get overflowX =>
     getPropertyValue('overflow-x');
 
   /** Sets the value of "overflow-x" */
-  void set overflowX(var value) {
+  void set overflowX(String value) {
     setProperty('overflow-x', value, '');
   }
 
@@ -1939,7 +2218,7 @@
     getPropertyValue('overflow-y');
 
   /** Sets the value of "overflow-y" */
-  void set overflowY(var value) {
+  void set overflowY(String value) {
     setProperty('overflow-y', value, '');
   }
 
@@ -1948,7 +2227,7 @@
     getPropertyValue('padding');
 
   /** Sets the value of "padding" */
-  void set padding(var value) {
+  void set padding(String value) {
     setProperty('padding', value, '');
   }
 
@@ -1957,7 +2236,7 @@
     getPropertyValue('${_browserPrefix}padding-after');
 
   /** Sets the value of "padding-after" */
-  void set paddingAfter(var value) {
+  void set paddingAfter(String value) {
     setProperty('${_browserPrefix}padding-after', value, '');
   }
 
@@ -1966,7 +2245,7 @@
     getPropertyValue('${_browserPrefix}padding-before');
 
   /** Sets the value of "padding-before" */
-  void set paddingBefore(var value) {
+  void set paddingBefore(String value) {
     setProperty('${_browserPrefix}padding-before', value, '');
   }
 
@@ -1975,7 +2254,7 @@
     getPropertyValue('padding-bottom');
 
   /** Sets the value of "padding-bottom" */
-  void set paddingBottom(var value) {
+  void set paddingBottom(String value) {
     setProperty('padding-bottom', value, '');
   }
 
@@ -1984,7 +2263,7 @@
     getPropertyValue('${_browserPrefix}padding-end');
 
   /** Sets the value of "padding-end" */
-  void set paddingEnd(var value) {
+  void set paddingEnd(String value) {
     setProperty('${_browserPrefix}padding-end', value, '');
   }
 
@@ -1993,7 +2272,7 @@
     getPropertyValue('padding-left');
 
   /** Sets the value of "padding-left" */
-  void set paddingLeft(var value) {
+  void set paddingLeft(String value) {
     setProperty('padding-left', value, '');
   }
 
@@ -2002,7 +2281,7 @@
     getPropertyValue('padding-right');
 
   /** Sets the value of "padding-right" */
-  void set paddingRight(var value) {
+  void set paddingRight(String value) {
     setProperty('padding-right', value, '');
   }
 
@@ -2011,7 +2290,7 @@
     getPropertyValue('${_browserPrefix}padding-start');
 
   /** Sets the value of "padding-start" */
-  void set paddingStart(var value) {
+  void set paddingStart(String value) {
     setProperty('${_browserPrefix}padding-start', value, '');
   }
 
@@ -2020,7 +2299,7 @@
     getPropertyValue('padding-top');
 
   /** Sets the value of "padding-top" */
-  void set paddingTop(var value) {
+  void set paddingTop(String value) {
     setProperty('padding-top', value, '');
   }
 
@@ -2029,7 +2308,7 @@
     getPropertyValue('page');
 
   /** Sets the value of "page" */
-  void set page(var value) {
+  void set page(String value) {
     setProperty('page', value, '');
   }
 
@@ -2038,7 +2317,7 @@
     getPropertyValue('page-break-after');
 
   /** Sets the value of "page-break-after" */
-  void set pageBreakAfter(var value) {
+  void set pageBreakAfter(String value) {
     setProperty('page-break-after', value, '');
   }
 
@@ -2047,7 +2326,7 @@
     getPropertyValue('page-break-before');
 
   /** Sets the value of "page-break-before" */
-  void set pageBreakBefore(var value) {
+  void set pageBreakBefore(String value) {
     setProperty('page-break-before', value, '');
   }
 
@@ -2056,7 +2335,7 @@
     getPropertyValue('page-break-inside');
 
   /** Sets the value of "page-break-inside" */
-  void set pageBreakInside(var value) {
+  void set pageBreakInside(String value) {
     setProperty('page-break-inside', value, '');
   }
 
@@ -2065,7 +2344,7 @@
     getPropertyValue('${_browserPrefix}perspective');
 
   /** Sets the value of "perspective" */
-  void set perspective(var value) {
+  void set perspective(String value) {
     setProperty('${_browserPrefix}perspective', value, '');
   }
 
@@ -2074,7 +2353,7 @@
     getPropertyValue('${_browserPrefix}perspective-origin');
 
   /** Sets the value of "perspective-origin" */
-  void set perspectiveOrigin(var value) {
+  void set perspectiveOrigin(String value) {
     setProperty('${_browserPrefix}perspective-origin', value, '');
   }
 
@@ -2083,7 +2362,7 @@
     getPropertyValue('${_browserPrefix}perspective-origin-x');
 
   /** Sets the value of "perspective-origin-x" */
-  void set perspectiveOriginX(var value) {
+  void set perspectiveOriginX(String value) {
     setProperty('${_browserPrefix}perspective-origin-x', value, '');
   }
 
@@ -2092,7 +2371,7 @@
     getPropertyValue('${_browserPrefix}perspective-origin-y');
 
   /** Sets the value of "perspective-origin-y" */
-  void set perspectiveOriginY(var value) {
+  void set perspectiveOriginY(String value) {
     setProperty('${_browserPrefix}perspective-origin-y', value, '');
   }
 
@@ -2101,7 +2380,7 @@
     getPropertyValue('pointer-events');
 
   /** Sets the value of "pointer-events" */
-  void set pointerEvents(var value) {
+  void set pointerEvents(String value) {
     setProperty('pointer-events', value, '');
   }
 
@@ -2110,16 +2389,25 @@
     getPropertyValue('position');
 
   /** Sets the value of "position" */
-  void set position(var value) {
+  void set position(String value) {
     setProperty('position', value, '');
   }
 
+  /** Gets the value of "print-color-adjust" */
+  String get printColorAdjust =>
+    getPropertyValue('${_browserPrefix}print-color-adjust');
+
+  /** Sets the value of "print-color-adjust" */
+  void set printColorAdjust(String value) {
+    setProperty('${_browserPrefix}print-color-adjust', value, '');
+  }
+
   /** Gets the value of "quotes" */
   String get quotes =>
     getPropertyValue('quotes');
 
   /** Sets the value of "quotes" */
-  void set quotes(var value) {
+  void set quotes(String value) {
     setProperty('quotes', value, '');
   }
 
@@ -2128,7 +2416,7 @@
     getPropertyValue('${_browserPrefix}region-break-after');
 
   /** Sets the value of "region-break-after" */
-  void set regionBreakAfter(var value) {
+  void set regionBreakAfter(String value) {
     setProperty('${_browserPrefix}region-break-after', value, '');
   }
 
@@ -2137,7 +2425,7 @@
     getPropertyValue('${_browserPrefix}region-break-before');
 
   /** Sets the value of "region-break-before" */
-  void set regionBreakBefore(var value) {
+  void set regionBreakBefore(String value) {
     setProperty('${_browserPrefix}region-break-before', value, '');
   }
 
@@ -2146,7 +2434,7 @@
     getPropertyValue('${_browserPrefix}region-break-inside');
 
   /** Sets the value of "region-break-inside" */
-  void set regionBreakInside(var value) {
+  void set regionBreakInside(String value) {
     setProperty('${_browserPrefix}region-break-inside', value, '');
   }
 
@@ -2155,7 +2443,7 @@
     getPropertyValue('${_browserPrefix}region-overflow');
 
   /** Sets the value of "region-overflow" */
-  void set regionOverflow(var value) {
+  void set regionOverflow(String value) {
     setProperty('${_browserPrefix}region-overflow', value, '');
   }
 
@@ -2164,7 +2452,7 @@
     getPropertyValue('resize');
 
   /** Sets the value of "resize" */
-  void set resize(var value) {
+  void set resize(String value) {
     setProperty('resize', value, '');
   }
 
@@ -2173,7 +2461,7 @@
     getPropertyValue('right');
 
   /** Sets the value of "right" */
-  void set right(var value) {
+  void set right(String value) {
     setProperty('right', value, '');
   }
 
@@ -2182,16 +2470,52 @@
     getPropertyValue('${_browserPrefix}rtl-ordering');
 
   /** Sets the value of "rtl-ordering" */
-  void set rtlOrdering(var value) {
+  void set rtlOrdering(String value) {
     setProperty('${_browserPrefix}rtl-ordering', value, '');
   }
 
+  /** Gets the value of "shape-inside" */
+  String get shapeInside =>
+    getPropertyValue('${_browserPrefix}shape-inside');
+
+  /** Sets the value of "shape-inside" */
+  void set shapeInside(String value) {
+    setProperty('${_browserPrefix}shape-inside', value, '');
+  }
+
+  /** Gets the value of "shape-margin" */
+  String get shapeMargin =>
+    getPropertyValue('${_browserPrefix}shape-margin');
+
+  /** Sets the value of "shape-margin" */
+  void set shapeMargin(String value) {
+    setProperty('${_browserPrefix}shape-margin', value, '');
+  }
+
+  /** Gets the value of "shape-outside" */
+  String get shapeOutside =>
+    getPropertyValue('${_browserPrefix}shape-outside');
+
+  /** Sets the value of "shape-outside" */
+  void set shapeOutside(String value) {
+    setProperty('${_browserPrefix}shape-outside', value, '');
+  }
+
+  /** Gets the value of "shape-padding" */
+  String get shapePadding =>
+    getPropertyValue('${_browserPrefix}shape-padding');
+
+  /** Sets the value of "shape-padding" */
+  void set shapePadding(String value) {
+    setProperty('${_browserPrefix}shape-padding', value, '');
+  }
+
   /** Gets the value of "size" */
   String get size =>
     getPropertyValue('size');
 
   /** Sets the value of "size" */
-  void set size(var value) {
+  void set size(String value) {
     setProperty('size', value, '');
   }
 
@@ -2200,7 +2524,7 @@
     getPropertyValue('speak');
 
   /** Sets the value of "speak" */
-  void set speak(var value) {
+  void set speak(String value) {
     setProperty('speak', value, '');
   }
 
@@ -2209,16 +2533,25 @@
     getPropertyValue('src');
 
   /** Sets the value of "src" */
-  void set src(var value) {
+  void set src(String value) {
     setProperty('src', value, '');
   }
 
+  /** Gets the value of "tab-size" */
+  String get tabSize =>
+    getPropertyValue('tab-size');
+
+  /** Sets the value of "tab-size" */
+  void set tabSize(String value) {
+    setProperty('tab-size', value, '');
+  }
+
   /** Gets the value of "table-layout" */
   String get tableLayout =>
     getPropertyValue('table-layout');
 
   /** Sets the value of "table-layout" */
-  void set tableLayout(var value) {
+  void set tableLayout(String value) {
     setProperty('table-layout', value, '');
   }
 
@@ -2227,7 +2560,7 @@
     getPropertyValue('${_browserPrefix}tap-highlight-color');
 
   /** Sets the value of "tap-highlight-color" */
-  void set tapHighlightColor(var value) {
+  void set tapHighlightColor(String value) {
     setProperty('${_browserPrefix}tap-highlight-color', value, '');
   }
 
@@ -2236,16 +2569,25 @@
     getPropertyValue('text-align');
 
   /** Sets the value of "text-align" */
-  void set textAlign(var value) {
+  void set textAlign(String value) {
     setProperty('text-align', value, '');
   }
 
+  /** Gets the value of "text-align-last" */
+  String get textAlignLast =>
+    getPropertyValue('${_browserPrefix}text-align-last');
+
+  /** Sets the value of "text-align-last" */
+  void set textAlignLast(String value) {
+    setProperty('${_browserPrefix}text-align-last', value, '');
+  }
+
   /** Gets the value of "text-combine" */
   String get textCombine =>
     getPropertyValue('${_browserPrefix}text-combine');
 
   /** Sets the value of "text-combine" */
-  void set textCombine(var value) {
+  void set textCombine(String value) {
     setProperty('${_browserPrefix}text-combine', value, '');
   }
 
@@ -2254,16 +2596,34 @@
     getPropertyValue('text-decoration');
 
   /** Sets the value of "text-decoration" */
-  void set textDecoration(var value) {
+  void set textDecoration(String value) {
     setProperty('text-decoration', value, '');
   }
 
+  /** Gets the value of "text-decoration-line" */
+  String get textDecorationLine =>
+    getPropertyValue('${_browserPrefix}text-decoration-line');
+
+  /** Sets the value of "text-decoration-line" */
+  void set textDecorationLine(String value) {
+    setProperty('${_browserPrefix}text-decoration-line', value, '');
+  }
+
+  /** Gets the value of "text-decoration-style" */
+  String get textDecorationStyle =>
+    getPropertyValue('${_browserPrefix}text-decoration-style');
+
+  /** Sets the value of "text-decoration-style" */
+  void set textDecorationStyle(String value) {
+    setProperty('${_browserPrefix}text-decoration-style', value, '');
+  }
+
   /** Gets the value of "text-decorations-in-effect" */
   String get textDecorationsInEffect =>
     getPropertyValue('${_browserPrefix}text-decorations-in-effect');
 
   /** Sets the value of "text-decorations-in-effect" */
-  void set textDecorationsInEffect(var value) {
+  void set textDecorationsInEffect(String value) {
     setProperty('${_browserPrefix}text-decorations-in-effect', value, '');
   }
 
@@ -2272,7 +2632,7 @@
     getPropertyValue('${_browserPrefix}text-emphasis');
 
   /** Sets the value of "text-emphasis" */
-  void set textEmphasis(var value) {
+  void set textEmphasis(String value) {
     setProperty('${_browserPrefix}text-emphasis', value, '');
   }
 
@@ -2281,7 +2641,7 @@
     getPropertyValue('${_browserPrefix}text-emphasis-color');
 
   /** Sets the value of "text-emphasis-color" */
-  void set textEmphasisColor(var value) {
+  void set textEmphasisColor(String value) {
     setProperty('${_browserPrefix}text-emphasis-color', value, '');
   }
 
@@ -2290,7 +2650,7 @@
     getPropertyValue('${_browserPrefix}text-emphasis-position');
 
   /** Sets the value of "text-emphasis-position" */
-  void set textEmphasisPosition(var value) {
+  void set textEmphasisPosition(String value) {
     setProperty('${_browserPrefix}text-emphasis-position', value, '');
   }
 
@@ -2299,7 +2659,7 @@
     getPropertyValue('${_browserPrefix}text-emphasis-style');
 
   /** Sets the value of "text-emphasis-style" */
-  void set textEmphasisStyle(var value) {
+  void set textEmphasisStyle(String value) {
     setProperty('${_browserPrefix}text-emphasis-style', value, '');
   }
 
@@ -2308,7 +2668,7 @@
     getPropertyValue('${_browserPrefix}text-fill-color');
 
   /** Sets the value of "text-fill-color" */
-  void set textFillColor(var value) {
+  void set textFillColor(String value) {
     setProperty('${_browserPrefix}text-fill-color', value, '');
   }
 
@@ -2317,7 +2677,7 @@
     getPropertyValue('text-indent');
 
   /** Sets the value of "text-indent" */
-  void set textIndent(var value) {
+  void set textIndent(String value) {
     setProperty('text-indent', value, '');
   }
 
@@ -2326,7 +2686,7 @@
     getPropertyValue('text-line-through');
 
   /** Sets the value of "text-line-through" */
-  void set textLineThrough(var value) {
+  void set textLineThrough(String value) {
     setProperty('text-line-through', value, '');
   }
 
@@ -2335,7 +2695,7 @@
     getPropertyValue('text-line-through-color');
 
   /** Sets the value of "text-line-through-color" */
-  void set textLineThroughColor(var value) {
+  void set textLineThroughColor(String value) {
     setProperty('text-line-through-color', value, '');
   }
 
@@ -2344,7 +2704,7 @@
     getPropertyValue('text-line-through-mode');
 
   /** Sets the value of "text-line-through-mode" */
-  void set textLineThroughMode(var value) {
+  void set textLineThroughMode(String value) {
     setProperty('text-line-through-mode', value, '');
   }
 
@@ -2353,7 +2713,7 @@
     getPropertyValue('text-line-through-style');
 
   /** Sets the value of "text-line-through-style" */
-  void set textLineThroughStyle(var value) {
+  void set textLineThroughStyle(String value) {
     setProperty('text-line-through-style', value, '');
   }
 
@@ -2362,7 +2722,7 @@
     getPropertyValue('text-line-through-width');
 
   /** Sets the value of "text-line-through-width" */
-  void set textLineThroughWidth(var value) {
+  void set textLineThroughWidth(String value) {
     setProperty('text-line-through-width', value, '');
   }
 
@@ -2371,7 +2731,7 @@
     getPropertyValue('${_browserPrefix}text-orientation');
 
   /** Sets the value of "text-orientation" */
-  void set textOrientation(var value) {
+  void set textOrientation(String value) {
     setProperty('${_browserPrefix}text-orientation', value, '');
   }
 
@@ -2380,7 +2740,7 @@
     getPropertyValue('text-overflow');
 
   /** Sets the value of "text-overflow" */
-  void set textOverflow(var value) {
+  void set textOverflow(String value) {
     setProperty('text-overflow', value, '');
   }
 
@@ -2389,7 +2749,7 @@
     getPropertyValue('text-overline');
 
   /** Sets the value of "text-overline" */
-  void set textOverline(var value) {
+  void set textOverline(String value) {
     setProperty('text-overline', value, '');
   }
 
@@ -2398,7 +2758,7 @@
     getPropertyValue('text-overline-color');
 
   /** Sets the value of "text-overline-color" */
-  void set textOverlineColor(var value) {
+  void set textOverlineColor(String value) {
     setProperty('text-overline-color', value, '');
   }
 
@@ -2407,7 +2767,7 @@
     getPropertyValue('text-overline-mode');
 
   /** Sets the value of "text-overline-mode" */
-  void set textOverlineMode(var value) {
+  void set textOverlineMode(String value) {
     setProperty('text-overline-mode', value, '');
   }
 
@@ -2416,7 +2776,7 @@
     getPropertyValue('text-overline-style');
 
   /** Sets the value of "text-overline-style" */
-  void set textOverlineStyle(var value) {
+  void set textOverlineStyle(String value) {
     setProperty('text-overline-style', value, '');
   }
 
@@ -2425,7 +2785,7 @@
     getPropertyValue('text-overline-width');
 
   /** Sets the value of "text-overline-width" */
-  void set textOverlineWidth(var value) {
+  void set textOverlineWidth(String value) {
     setProperty('text-overline-width', value, '');
   }
 
@@ -2434,7 +2794,7 @@
     getPropertyValue('text-rendering');
 
   /** Sets the value of "text-rendering" */
-  void set textRendering(var value) {
+  void set textRendering(String value) {
     setProperty('text-rendering', value, '');
   }
 
@@ -2443,7 +2803,7 @@
     getPropertyValue('${_browserPrefix}text-security');
 
   /** Sets the value of "text-security" */
-  void set textSecurity(var value) {
+  void set textSecurity(String value) {
     setProperty('${_browserPrefix}text-security', value, '');
   }
 
@@ -2452,7 +2812,7 @@
     getPropertyValue('text-shadow');
 
   /** Sets the value of "text-shadow" */
-  void set textShadow(var value) {
+  void set textShadow(String value) {
     setProperty('text-shadow', value, '');
   }
 
@@ -2461,7 +2821,7 @@
     getPropertyValue('${_browserPrefix}text-size-adjust');
 
   /** Sets the value of "text-size-adjust" */
-  void set textSizeAdjust(var value) {
+  void set textSizeAdjust(String value) {
     setProperty('${_browserPrefix}text-size-adjust', value, '');
   }
 
@@ -2470,7 +2830,7 @@
     getPropertyValue('${_browserPrefix}text-stroke');
 
   /** Sets the value of "text-stroke" */
-  void set textStroke(var value) {
+  void set textStroke(String value) {
     setProperty('${_browserPrefix}text-stroke', value, '');
   }
 
@@ -2479,7 +2839,7 @@
     getPropertyValue('${_browserPrefix}text-stroke-color');
 
   /** Sets the value of "text-stroke-color" */
-  void set textStrokeColor(var value) {
+  void set textStrokeColor(String value) {
     setProperty('${_browserPrefix}text-stroke-color', value, '');
   }
 
@@ -2488,7 +2848,7 @@
     getPropertyValue('${_browserPrefix}text-stroke-width');
 
   /** Sets the value of "text-stroke-width" */
-  void set textStrokeWidth(var value) {
+  void set textStrokeWidth(String value) {
     setProperty('${_browserPrefix}text-stroke-width', value, '');
   }
 
@@ -2497,7 +2857,7 @@
     getPropertyValue('text-transform');
 
   /** Sets the value of "text-transform" */
-  void set textTransform(var value) {
+  void set textTransform(String value) {
     setProperty('text-transform', value, '');
   }
 
@@ -2506,7 +2866,7 @@
     getPropertyValue('text-underline');
 
   /** Sets the value of "text-underline" */
-  void set textUnderline(var value) {
+  void set textUnderline(String value) {
     setProperty('text-underline', value, '');
   }
 
@@ -2515,7 +2875,7 @@
     getPropertyValue('text-underline-color');
 
   /** Sets the value of "text-underline-color" */
-  void set textUnderlineColor(var value) {
+  void set textUnderlineColor(String value) {
     setProperty('text-underline-color', value, '');
   }
 
@@ -2524,7 +2884,7 @@
     getPropertyValue('text-underline-mode');
 
   /** Sets the value of "text-underline-mode" */
-  void set textUnderlineMode(var value) {
+  void set textUnderlineMode(String value) {
     setProperty('text-underline-mode', value, '');
   }
 
@@ -2533,7 +2893,7 @@
     getPropertyValue('text-underline-style');
 
   /** Sets the value of "text-underline-style" */
-  void set textUnderlineStyle(var value) {
+  void set textUnderlineStyle(String value) {
     setProperty('text-underline-style', value, '');
   }
 
@@ -2542,7 +2902,7 @@
     getPropertyValue('text-underline-width');
 
   /** Sets the value of "text-underline-width" */
-  void set textUnderlineWidth(var value) {
+  void set textUnderlineWidth(String value) {
     setProperty('text-underline-width', value, '');
   }
 
@@ -2551,7 +2911,7 @@
     getPropertyValue('top');
 
   /** Sets the value of "top" */
-  void set top(var value) {
+  void set top(String value) {
     setProperty('top', value, '');
   }
 
@@ -2560,7 +2920,7 @@
     getPropertyValue('${_browserPrefix}transform');
 
   /** Sets the value of "transform" */
-  void set transform(var value) {
+  void set transform(String value) {
     setProperty('${_browserPrefix}transform', value, '');
   }
 
@@ -2569,7 +2929,7 @@
     getPropertyValue('${_browserPrefix}transform-origin');
 
   /** Sets the value of "transform-origin" */
-  void set transformOrigin(var value) {
+  void set transformOrigin(String value) {
     setProperty('${_browserPrefix}transform-origin', value, '');
   }
 
@@ -2578,7 +2938,7 @@
     getPropertyValue('${_browserPrefix}transform-origin-x');
 
   /** Sets the value of "transform-origin-x" */
-  void set transformOriginX(var value) {
+  void set transformOriginX(String value) {
     setProperty('${_browserPrefix}transform-origin-x', value, '');
   }
 
@@ -2587,7 +2947,7 @@
     getPropertyValue('${_browserPrefix}transform-origin-y');
 
   /** Sets the value of "transform-origin-y" */
-  void set transformOriginY(var value) {
+  void set transformOriginY(String value) {
     setProperty('${_browserPrefix}transform-origin-y', value, '');
   }
 
@@ -2596,7 +2956,7 @@
     getPropertyValue('${_browserPrefix}transform-origin-z');
 
   /** Sets the value of "transform-origin-z" */
-  void set transformOriginZ(var value) {
+  void set transformOriginZ(String value) {
     setProperty('${_browserPrefix}transform-origin-z', value, '');
   }
 
@@ -2605,7 +2965,7 @@
     getPropertyValue('${_browserPrefix}transform-style');
 
   /** Sets the value of "transform-style" */
-  void set transformStyle(var value) {
+  void set transformStyle(String value) {
     setProperty('${_browserPrefix}transform-style', value, '');
   }
 
@@ -2614,7 +2974,7 @@
     getPropertyValue('${_browserPrefix}transition');
 
   /** Sets the value of "transition" */
-  void set transition(var value) {
+  void set transition(String value) {
     setProperty('${_browserPrefix}transition', value, '');
   }
 
@@ -2623,7 +2983,7 @@
     getPropertyValue('${_browserPrefix}transition-delay');
 
   /** Sets the value of "transition-delay" */
-  void set transitionDelay(var value) {
+  void set transitionDelay(String value) {
     setProperty('${_browserPrefix}transition-delay', value, '');
   }
 
@@ -2632,7 +2992,7 @@
     getPropertyValue('${_browserPrefix}transition-duration');
 
   /** Sets the value of "transition-duration" */
-  void set transitionDuration(var value) {
+  void set transitionDuration(String value) {
     setProperty('${_browserPrefix}transition-duration', value, '');
   }
 
@@ -2641,7 +3001,7 @@
     getPropertyValue('${_browserPrefix}transition-property');
 
   /** Sets the value of "transition-property" */
-  void set transitionProperty(var value) {
+  void set transitionProperty(String value) {
     setProperty('${_browserPrefix}transition-property', value, '');
   }
 
@@ -2650,7 +3010,7 @@
     getPropertyValue('${_browserPrefix}transition-timing-function');
 
   /** Sets the value of "transition-timing-function" */
-  void set transitionTimingFunction(var value) {
+  void set transitionTimingFunction(String value) {
     setProperty('${_browserPrefix}transition-timing-function', value, '');
   }
 
@@ -2659,7 +3019,7 @@
     getPropertyValue('unicode-bidi');
 
   /** Sets the value of "unicode-bidi" */
-  void set unicodeBidi(var value) {
+  void set unicodeBidi(String value) {
     setProperty('unicode-bidi', value, '');
   }
 
@@ -2668,7 +3028,7 @@
     getPropertyValue('unicode-range');
 
   /** Sets the value of "unicode-range" */
-  void set unicodeRange(var value) {
+  void set unicodeRange(String value) {
     setProperty('unicode-range', value, '');
   }
 
@@ -2677,7 +3037,7 @@
     getPropertyValue('${_browserPrefix}user-drag');
 
   /** Sets the value of "user-drag" */
-  void set userDrag(var value) {
+  void set userDrag(String value) {
     setProperty('${_browserPrefix}user-drag', value, '');
   }
 
@@ -2686,7 +3046,7 @@
     getPropertyValue('${_browserPrefix}user-modify');
 
   /** Sets the value of "user-modify" */
-  void set userModify(var value) {
+  void set userModify(String value) {
     setProperty('${_browserPrefix}user-modify', value, '');
   }
 
@@ -2695,16 +3055,25 @@
     getPropertyValue('${_browserPrefix}user-select');
 
   /** Sets the value of "user-select" */
-  void set userSelect(var value) {
+  void set userSelect(String value) {
     setProperty('${_browserPrefix}user-select', value, '');
   }
 
+  /** Gets the value of "user-zoom" */
+  String get userZoom =>
+    getPropertyValue('user-zoom');
+
+  /** Sets the value of "user-zoom" */
+  void set userZoom(String value) {
+    setProperty('user-zoom', value, '');
+  }
+
   /** Gets the value of "vertical-align" */
   String get verticalAlign =>
     getPropertyValue('vertical-align');
 
   /** Sets the value of "vertical-align" */
-  void set verticalAlign(var value) {
+  void set verticalAlign(String value) {
     setProperty('vertical-align', value, '');
   }
 
@@ -2713,7 +3082,7 @@
     getPropertyValue('visibility');
 
   /** Sets the value of "visibility" */
-  void set visibility(var value) {
+  void set visibility(String value) {
     setProperty('visibility', value, '');
   }
 
@@ -2722,7 +3091,7 @@
     getPropertyValue('white-space');
 
   /** Sets the value of "white-space" */
-  void set whiteSpace(var value) {
+  void set whiteSpace(String value) {
     setProperty('white-space', value, '');
   }
 
@@ -2731,7 +3100,7 @@
     getPropertyValue('widows');
 
   /** Sets the value of "widows" */
-  void set widows(var value) {
+  void set widows(String value) {
     setProperty('widows', value, '');
   }
 
@@ -2740,7 +3109,7 @@
     getPropertyValue('width');
 
   /** Sets the value of "width" */
-  void set width(var value) {
+  void set width(String value) {
     setProperty('width', value, '');
   }
 
@@ -2749,7 +3118,7 @@
     getPropertyValue('word-break');
 
   /** Sets the value of "word-break" */
-  void set wordBreak(var value) {
+  void set wordBreak(String value) {
     setProperty('word-break', value, '');
   }
 
@@ -2758,7 +3127,7 @@
     getPropertyValue('word-spacing');
 
   /** Sets the value of "word-spacing" */
-  void set wordSpacing(var value) {
+  void set wordSpacing(String value) {
     setProperty('word-spacing', value, '');
   }
 
@@ -2767,17 +3136,35 @@
     getPropertyValue('word-wrap');
 
   /** Sets the value of "word-wrap" */
-  void set wordWrap(var value) {
+  void set wordWrap(String value) {
     setProperty('word-wrap', value, '');
   }
 
-  /** Gets the value of "wrap-shape" */
-  String get wrapShape =>
-    getPropertyValue('${_browserPrefix}wrap-shape');
+  /** Gets the value of "wrap" */
+  String get wrap =>
+    getPropertyValue('${_browserPrefix}wrap');
 
-  /** Sets the value of "wrap-shape" */
-  void set wrapShape(var value) {
-    setProperty('${_browserPrefix}wrap-shape', value, '');
+  /** Sets the value of "wrap" */
+  void set wrap(String value) {
+    setProperty('${_browserPrefix}wrap', value, '');
+  }
+
+  /** Gets the value of "wrap-flow" */
+  String get wrapFlow =>
+    getPropertyValue('${_browserPrefix}wrap-flow');
+
+  /** Sets the value of "wrap-flow" */
+  void set wrapFlow(String value) {
+    setProperty('${_browserPrefix}wrap-flow', value, '');
+  }
+
+  /** Gets the value of "wrap-through" */
+  String get wrapThrough =>
+    getPropertyValue('${_browserPrefix}wrap-through');
+
+  /** Sets the value of "wrap-through" */
+  void set wrapThrough(String value) {
+    setProperty('${_browserPrefix}wrap-through', value, '');
   }
 
   /** Gets the value of "writing-mode" */
@@ -2785,7 +3172,7 @@
     getPropertyValue('${_browserPrefix}writing-mode');
 
   /** Sets the value of "writing-mode" */
-  void set writingMode(var value) {
+  void set writingMode(String value) {
     setProperty('${_browserPrefix}writing-mode', value, '');
   }
 
@@ -2794,7 +3181,7 @@
     getPropertyValue('z-index');
 
   /** Sets the value of "z-index" */
-  void set zIndex(var value) {
+  void set zIndex(String value) {
     setProperty('z-index', value, '');
   }
 
@@ -2803,7 +3190,7 @@
     getPropertyValue('zoom');
 
   /** Sets the value of "zoom" */
-  void set zoom(var value) {
+  void set zoom(String value) {
     setProperty('zoom', value, '');
   }
 }
diff --git a/sdk/lib/html/templates/html/impl/impl_DocumentFragment.darttemplate b/sdk/lib/html/templates/html/impl/impl_DocumentFragment.darttemplate
index c32a8fb..2106a73 100644
--- a/sdk/lib/html/templates/html/impl/impl_DocumentFragment.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_DocumentFragment.darttemplate
@@ -26,24 +26,35 @@
       _$(CLASSNAME)FactoryProvider.createDocumentFragment_html(html);
 
   factory $CLASSNAME.svg(String svgContent) =>
-      new _$(CLASSNAME)FactoryProvider.createDocumentFragment_svg(svgContent);
+      _$(CLASSNAME)FactoryProvider.createDocumentFragment_svg(svgContent);
 
-  List<Element> _elements;
-
-  List<Element> get elements {
-    if (_elements == null) {
-      _elements = new FilteredElementList(this);
-    }
-    return _elements;
-  }
+  List<Element> get elements => this.children;
 
   // TODO: The type of value should be Collection<Element>. See http://b/5392897
   void set elements(value) {
+    this.children = value;
+  }
+
+$if DART2JS
+  // Native field is used only by Dart code so does not lead to instantiation
+  // of native classes
+  @Creates('Null')
+$endif
+  List<Element> _children;
+
+  List<Element> get children {
+    if (_children == null) {
+      _children = new FilteredElementList(this);
+    }
+    return _children;
+  }
+
+  void set children(Collection<Element> value) {
     // Copy list first since we don't want liveness during iteration.
     List copy = new List.from(value);
-    final elements = this.elements;
-    elements.clear();
-    elements.addAll(copy);
+    var children = this.children;
+    children.clear();
+    children.addAll(copy);
   }
 
   Element query(String selectors) => $dom_querySelector(selectors);
diff --git a/sdk/lib/html/templates/html/impl/impl_Element.darttemplate b/sdk/lib/html/templates/html/impl/impl_Element.darttemplate
index 34d2d95..bf6e19a 100644
--- a/sdk/lib/html/templates/html/impl/impl_Element.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_Element.darttemplate
@@ -145,6 +145,11 @@
     return result;
   }
 
+  Element get first {
+    return _element.$dom_firstElementChild;
+  }
+
+
   Element get last {
     return _element.$dom_lastElementChild;
   }
@@ -159,10 +164,6 @@
 
   _FrozenElementList._wrap(this._nodeList);
 
-  Element get first {
-    return _nodeList[0];
-  }
-
   bool contains(Element element) {
     for (Element el in this) {
       if (el == element) return true;
@@ -271,6 +272,8 @@
     throw new UnsupportedError('');
   }
 
+  Element get first => _nodeList.first;
+
   Element get last => _nodeList.last;
 }
 
@@ -298,16 +301,7 @@
   bool get hasNext => _index < _list.length;
 }
 
-/**
- * All your attribute manipulation needs in one place.
- * Extends the regular Map interface by automatically coercing non-string
- * values to strings.
- */
-abstract class AttributeMap implements Map<String, String> {
-  void operator []=(String key, value);
-}
-
-class _ElementAttributeMap extends AttributeMap {
+class _ElementAttributeMap implements Map<String, String> {
 
   final Element _element;
 
@@ -402,7 +396,7 @@
  * Provides a Map abstraction on top of data-* attributes, similar to the
  * dataSet in the old DOM.
  */
-class _DataAttributeMap extends AttributeMap {
+class _DataAttributeMap implements Map<String, String> {
 
   final Map<String, String> $dom_attributes;
 
@@ -515,7 +509,7 @@
   String toString() => "($left, $top, $width, $height)";
 }
 
-class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+abstract class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
   factory $CLASSNAME.html(String html) =>
       _$(CLASSNAME)FactoryProvider.createElement_html(html);
@@ -526,7 +520,7 @@
    * @domName Element.hasAttribute, Element.getAttribute, Element.setAttribute,
    *   Element.removeAttribute
    */
-  _ElementAttributeMap get attributes => new _ElementAttributeMap(this);
+  Map<String, String> get attributes => new _ElementAttributeMap(this);
 
   void set attributes(Map<String, String> value) {
     Map<String, String> attributes = this.attributes;
@@ -537,16 +531,27 @@
   }
 
   void set elements(Collection<Element> value) {
-    final elements = this.elements;
-    elements.clear();
-    elements.addAll(value);
+    this.children = value;
   }
 
   /**
+   * Deprecated, use [children] instead.
+   */
+  List<Element> get elements => this.children;
+
+  /**
    * @domName childElementCount, firstElementChild, lastElementChild,
    *   children, Node.nodes.add
    */
-  List<Element> get elements => new _ChildrenElementList._wrap(this);
+  List<Element> get children => new _ChildrenElementList._wrap(this);
+
+  void set children(Collection<Element> value) {
+    // Copy list first since we don't want liveness during iteration.
+    List copy = new List.from(value);
+    var children = this.children;
+    children.clear();
+    children.addAll(copy);
+  }
 
   Element query(String selectors) => $dom_querySelector(selectors);
 
@@ -612,6 +617,9 @@
    * [wc]: http://dvcs.w3.org/hg/webcomponents/raw-file/tip/explainer/index.html
    * [x-tags]: http://x-tags.org/
    */
+$if DART2JS
+  @Creates('Null')  // Set from Dart code; does not instantiate a native type.
+$endif
   var xtag;
 
 $if DARTIUM
@@ -736,15 +744,15 @@
     temp.innerHTML = html;
 
     Element element;
-    if (temp.elements.length == 1) {
-      element = temp.elements[0];
-    } else if (parentTag == 'html' && temp.elements.length == 2) {
+    if (temp.children.length == 1) {
+      element = temp.children[0];
+    } else if (parentTag == 'html' && temp.children.length == 2) {
       // Work around for edge case in WebKit and possibly other browsers where
       // both body and head elements are created even though the inner html
       // only contains a head or body element.
-      element = temp.elements[tag == 'head' ? 0 : 1];
+      element = temp.children[tag == 'head' ? 0 : 1];
     } else {
-      throw new ArgumentError('HTML had ${temp.elements.length} '
+      throw new ArgumentError('HTML had ${temp.children.length} '
           'top level elements but 1 expected');
     }
     element.remove();
diff --git a/sdk/lib/html/templates/html/impl/impl_HttpRequest.darttemplate b/sdk/lib/html/templates/html/impl/impl_HttpRequest.darttemplate
index 6ec0f16..213f434 100644
--- a/sdk/lib/html/templates/html/impl/impl_HttpRequest.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_HttpRequest.darttemplate
@@ -5,11 +5,13 @@
 part of html;
 
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
-  factory $CLASSNAME.get(String url, onSuccess($CLASSNAME request)) =>
-      _$(CLASSNAME)FactoryProvider.create$(CLASSNAME)_get(url, onSuccess);
+  factory $CLASSNAME.get(String url, onComplete($CLASSNAME request)) =>
+      _$(CLASSNAME)FactoryProvider.create$(CLASSNAME)_get(url, onComplete);
 
-  factory $CLASSNAME.getWithCredentials(String url, onSuccess($CLASSNAME request)) =>
-      _$(CLASSNAME)FactoryProvider.create$(CLASSNAME)getWithCredentials(url, onSuccess);
+  factory $CLASSNAME.getWithCredentials(String url,
+      onComplete($CLASSNAME request)) =>
+      _$(CLASSNAME)FactoryProvider.create$(CLASSNAME)_getWithCredentials(url,
+      onComplete);
 
 $!MEMBERS
 }
diff --git a/sdk/lib/html/templates/html/impl/impl_Node.darttemplate b/sdk/lib/html/templates/html/impl/impl_Node.darttemplate
index e15cb46..cf46de2 100644
--- a/sdk/lib/html/templates/html/impl/impl_Node.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_Node.darttemplate
@@ -65,7 +65,7 @@
   Collection map(f(Node element)) => _Collections.map(this, [], f);
 
   Collection<Node> filter(bool f(Node element)) =>
-     new _NodeListWrapper(_Collections.filter(this, <Node>[], f));
+     _Collections.filter(this, <Node>[], f);
 
   bool every(bool f(Node element)) => _Collections.every(this, f);
 
@@ -101,7 +101,7 @@
         "Cannot insertRange on immutable List.");
   }
   List<Node> getRange(int start, int rangeLength) =>
-    new _NodeListWrapper(_Lists.getRange(this, start, rangeLength, <Node>[]));
+      _Lists.getRange(this, start, rangeLength, <Node>[]);
 
   // -- end List<Node> mixins.
 
diff --git a/sdk/lib/html/templates/html/impl/impl_NodeList.darttemplate b/sdk/lib/html/templates/html/impl/impl_NodeList.darttemplate
deleted file mode 100644
index 95bbddc..0000000
--- a/sdk/lib/html/templates/html/impl/impl_NodeList.darttemplate
+++ /dev/null
@@ -1,179 +0,0 @@
-// Copyright (c) 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.
-
-part of html;
-
-// TODO(nweiz): when all implementations we target have the same name for the
-// implementation of List<E>, extend that rather than wrapping.
-class _ListWrapper<E> implements List<E> {
-  List _list;
-
-  _ListWrapper(List this._list);
-
-  Iterator<E> iterator() => _list.iterator();
-
-  bool contains(E element) => _list.contains(element);
-
-  void forEach(void f(E element)) => _list.forEach(f);
-
-  Collection map(f(E element)) => _list.map(f);
-
-  List<E> filter(bool f(E element)) => _list.filter(f);
-
-  bool every(bool f(E element)) => _list.every(f);
-
-  bool some(bool f(E element)) => _list.some(f);
-
-  bool get isEmpty => _list.isEmpty;
-
-  int get length => _list.length;
-
-  E operator [](int index) => _list[index];
-
-  void operator []=(int index, E value) { _list[index] = value; }
-
-  void set length(int newLength) { _list.length = newLength; }
-
-  void add(E value) => _list.add(value);
-
-  void addLast(E value) => _list.addLast(value);
-
-  void addAll(Collection<E> collection) => _list.addAll(collection);
-
-  void sort([Comparator<E> compare = Comparable.compare]) => _list.sort(compare);
-
-  int indexOf(E element, [int start = 0]) => _list.indexOf(element, start);
-
-  int lastIndexOf(E element, [int start = 0]) =>
-    _list.lastIndexOf(element, start);
-
-  void clear() => _list.clear();
-
-  E removeLast() => _list.removeLast();
-
-  E get last => _list.last;
-
-  List<E> getRange(int start, int rangeLength) =>
-    _list.getRange(start, rangeLength);
-
-  void setRange(int start, int rangeLength, List<E> from, [int startFrom = 0])
-      => _list.setRange(start, rangeLength, from, startFrom);
-
-  void removeRange(int start, int rangeLength) =>
-    _list.removeRange(start, rangeLength);
-
-  void insertRange(int start, int rangeLength, [E initialValue = null]) =>
-    _list.insertRange(start, rangeLength, initialValue);
-
-  E get first => _list[0];
-}
-
-/**
- * This class is used to insure the results of list operations are NodeLists
- * instead of lists.
- */
-class _NodeListWrapper extends _ListWrapper<Node> implements List {
-  _NodeListWrapper(List list) : super(list);
-
-  List<Node> filter(bool f(Node element)) =>
-    new _NodeListWrapper(_list.filter(f));
-
-  List<Node> getRange(int start, int rangeLength) =>
-    new _NodeListWrapper(_list.getRange(start, rangeLength));
-}
-
-class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
-  Node _parent;
-
-  // -- start List<Node> mixins.
-  // Node is the element type.
-
-  // From Iterable<Node>:
-
-  Iterator<Node> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new FixedSizeListIterator<Node>(this);
-  }
-
-  // From Collection<Node>:
-
-  void add(Node value) {
-    _parent.$dom_appendChild(value);
-  }
-
-  void addLast(Node value) {
-    _parent.$dom_appendChild(value);
-  }
-
-  void addAll(Collection<Node> collection) {
-    for (Node node in collection) {
-      _parent.$dom_appendChild(node);
-    }
-  }
-
-  Node removeLast() {
-    final result = this.last;
-    if (result != null) {
-      _parent.$dom_removeChild(result);
-    }
-    return result;
-  }
-
-  void clear() {
-    _parent.text = '';
-  }
-
-  void operator []=(int index, Node value) {
-    _parent.$dom_replaceChild(value, this[index]);
-  }
-
-  bool contains(Node element) => _Collections.contains(this, element);
-
-  void forEach(void f(Node element)) => _Collections.forEach(this, f);
-
-  Collection map(f(Node element)) => _Collections.map(this, [], f);
-
-  Collection<Node> filter(bool f(Node element)) =>
-     new _NodeListWrapper(_Collections.filter(this, <Node>[], f));
-
-  bool every(bool f(Node element)) => _Collections.every(this, f);
-
-  bool some(bool f(Node element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<Node>:
-
-  void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(Node element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(Node element, [int start = 0]) =>
-      _Lists.lastIndexOf(this, element, start);
-
-  Node get last => this[length - 1];
-  Node get first => this[0];
-
-  // FIXME: implement thesee.
-  void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-  void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-  List<Node> getRange(int start, int rangeLength) =>
-    new _NodeListWrapper(_Lists.getRange(this, start, rangeLength, <Node>[]));
-
-  // -- end List<Node> mixins.
-
-$!MEMBERS
-}
diff --git a/sdk/lib/html/templates/html/impl/impl_Storage.darttemplate b/sdk/lib/html/templates/html/impl/impl_Storage.darttemplate
index 73dea1e..47d10d6 100644
--- a/sdk/lib/html/templates/html/impl/impl_Storage.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_Storage.darttemplate
@@ -13,7 +13,7 @@
 
   String operator [](String key) => $dom_getItem(key);
 
-  void operator []=(String key, String value) => $dom_setItem(key, value);
+  void operator []=(String key, String value) { $dom_setItem(key, value); }
 
   String putIfAbsent(String key, String ifAbsent()) {
     if (!containsKey(key)) this[key] = ifAbsent();
diff --git a/sdk/lib/html/templates/html/impl/impl_SVGElement.darttemplate b/sdk/lib/html/templates/html/impl/impl_SvgElement.darttemplate
similarity index 78%
rename from sdk/lib/html/templates/html/impl/impl_SVGElement.darttemplate
rename to sdk/lib/html/templates/html/impl/impl_SvgElement.darttemplate
index 077a8077..1c15a0f 100644
--- a/sdk/lib/html/templates/html/impl/impl_SVGElement.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_SvgElement.darttemplate
@@ -53,26 +53,34 @@
     elements.addAll(value);
   }
 
+  List<Element> get children => new FilteredElementList(this);
+
+  void set children(Collection<Element> value) {
+    final children = this.children;
+    children.clear();
+    children.addAll(value);
+  }
+
   String get outerHTML {
     final container = new Element.tag("div");
-    final SVGElement cloned = this.clone(true);
-    container.elements.add(cloned);
+    final SvgElement cloned = this.clone(true);
+    container.children.add(cloned);
     return container.innerHTML;
   }
 
   String get innerHTML {
     final container = new Element.tag("div");
-    final SVGElement cloned = this.clone(true);
-    container.elements.addAll(cloned.elements);
+    final SvgElement cloned = this.clone(true);
+    container.children.addAll(cloned.children);
     return container.innerHTML;
   }
 
   void set innerHTML(String svg) {
     final container = new Element.tag("div");
-    // Wrap the SVG string in <svg> so that SVGElements are created, rather than
+    // Wrap the SVG string in <svg> so that SvgElements are created, rather than
     // HTMLElements.
     container.innerHTML = '<svg version="1.1">$svg</svg>';
-    this.elements = container.elements[0].elements;
+    this.children = container.children[0].children;
   }
 
 $!MEMBERS
diff --git a/sdk/lib/html/templates/html/impl/impl_SVGSVGElement.darttemplate b/sdk/lib/html/templates/html/impl/impl_SvgSvgElement.darttemplate
similarity index 79%
rename from sdk/lib/html/templates/html/impl/impl_SVGSVGElement.darttemplate
rename to sdk/lib/html/templates/html/impl/impl_SvgSvgElement.darttemplate
index c1a8204..2e00aea 100644
--- a/sdk/lib/html/templates/html/impl/impl_SVGSVGElement.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_SvgSvgElement.darttemplate
@@ -5,7 +5,7 @@
 part of svg;
 
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
-  factory $CLASSNAME() => _$(CLASSNAME)FactoryProvider.createSVGSVGElement();
+  factory $CLASSNAME() => _$(CLASSNAME)FactoryProvider.createSvgSvgElement();
 
 $!MEMBERS
 }
diff --git a/sdk/lib/html/templates/immutable_list_mixin.darttemplate b/sdk/lib/html/templates/immutable_list_mixin.darttemplate
index b6a4b8b..43479e4 100644
--- a/sdk/lib/html/templates/immutable_list_mixin.darttemplate
+++ b/sdk/lib/html/templates/immutable_list_mixin.darttemplate
@@ -57,6 +57,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  $E get first => this[0];
+
   $E get last => this[length - 1];
 
   $E removeLast() {
diff --git a/sdk/lib/io/file.dart b/sdk/lib/io/file.dart
index 97fc18c..7937aa0 100644
--- a/sdk/lib/io/file.dart
+++ b/sdk/lib/io/file.dart
@@ -214,6 +214,60 @@
   List<String> readAsLinesSync([Encoding encoding = Encoding.UTF_8]);
 
   /**
+   * Write a list of bytes to a file.
+   *
+   * Opens the file, writes the list of bytes to it, and closes the file.
+   * Returns a [:Future<File>:] that completes with this [File] object once
+   * the entire operation has completed.
+   *
+   * By default [writeAsBytes] creates the file for writing and truncates the
+   * file if it already exists. In order to append the bytes to an existing
+   * file pass [:FileMode.APPEND:] as the optional mode parameter.
+   */
+  Future<File> writeAsBytes(List<int> bytes, [FileMode mode = FileMode.WRITE]);
+
+  /**
+   * Synchronously write a list of bytes to a file.
+   *
+   * Opens the file, writes the list of bytes to it and closses the file.
+   *
+   * By default [writeAsBytesSync] creates the file for writing and truncates
+   * the file if it already exists. In order to append the bytes to an existing
+   * file pass [:FileMode.APPEND:] as the optional mode parameter.
+   */
+  void writeAsBytesSync(List<int> bytes, [FileMode mode = FileMode.WRITE]);
+
+  /**
+   * Write a string to a file.
+   *
+   * Opens the file, writes the string in the given encoding, and closes the
+   * file. Returns a [:Future<File>:] that completes with this [File] object
+   * once the entire operation has completed.
+   *
+   * By default [writeAsString] creates the file for writing and truncates the
+   * file if it already exists. In order to append the bytes to an existing
+   * file pass [:FileMode.APPEND:] as the optional mode parameter.
+   */
+  Future<File> writeAsString(String contents,
+                             [Encoding encoding = Encoding.UTF_8,
+                              FileMode mode = FileMode.WRITE]);
+
+  /**
+   * Synchronously write a string to a file.
+   *
+   * Opens the file, writes the string in the given encoding, and closes the
+   * file.
+   *
+   * By default [writeAsStringSync] creates the file for writing and
+   * truncates the file if it already exists. In order to append the bytes
+   * to an existing file pass [:FileMode.APPEND:] as the optional mode
+   * parameter.
+   */
+  void writeAsStringSync(String contents,
+                         [Encoding encoding = Encoding.UTF_8,
+                          FileMode mode = FileMode.WRITE]);
+
+  /**
    * Get the name of the file.
    */
   String get name;
diff --git a/sdk/lib/io/file_impl.dart b/sdk/lib/io/file_impl.dart
index 27bace9..17dc2ab 100644
--- a/sdk/lib/io/file_impl.dart
+++ b/sdk/lib/io/file_impl.dart
@@ -357,7 +357,7 @@
   // Constructor for file.
   _File(String this._name) {
     if (_name is! String) {
-      throw new ArgumentError('${NoSuchMethodError.safeToString(_name)} '
+      throw new ArgumentError('${Error.safeToString(_name)} '
                               'is not a String');
     }
   }
@@ -660,6 +660,52 @@
     return _getDecodedLines(decoder);
   }
 
+  Future<File> writeAsBytes(List<int> bytes,
+                            [FileMode mode = FileMode.WRITE]) {
+    Completer<File> completer = new Completer<File>();
+    try {
+      var stream = openOutputStream(mode);
+      stream.write(bytes);
+      stream.close();
+      stream.onClosed = () {
+        completer.complete(this);
+      };
+      stream.onError = (e) {
+        completer.completeException(e);
+      };
+    } catch (e) {
+      new Timer(0, (t) => completer.completeException(e));
+      return completer.future;
+    }
+    return completer.future;
+  }
+
+  void writeAsBytesSync(List<int> bytes, [FileMode mode = FileMode.WRITE]) {
+    RandomAccessFile opened = openSync(mode);
+    opened.writeListSync(bytes, 0, bytes.length);
+    opened.closeSync();
+  }
+
+  Future<File> writeAsString(String contents,
+                             [FileMode mode = FileMode.WRITE,
+                              Encoding encoding = Encoding.UTF_8]) {
+    try {
+      var data = _StringEncoders.encoder(encoding).encodeString(contents);
+      return writeAsBytes(data, mode);
+    } catch (e) {
+      var completer = new Completer();
+      new Timer(0, (t) => completer.completeException(e));
+      return completer.future;
+    }
+  }
+
+  void writeAsStringSync(String contents,
+                         [FileMode mode = FileMode.WRITE,
+                          Encoding encoding = Encoding.UTF_8]) {
+    var data = _StringEncoders.encoder(encoding).encodeString(contents);
+    writeAsBytesSync(data, mode);
+  }
+
   String get name => _name;
 
   void _ensureFileService() {
diff --git a/sdk/lib/io/http.dart b/sdk/lib/io/http.dart
index 79d16af..2274673 100644
--- a/sdk/lib/io/http.dart
+++ b/sdk/lib/io/http.dart
@@ -117,6 +117,41 @@
    * is 20 minutes.
    */
   set sessionTimeout(int timeout);
+
+  /**
+   * Returns a [:HttpConnectionsInfo:] object with an overview of the
+   * current connection handled by the server.
+   */
+  HttpConnectionsInfo connectionsInfo();
+}
+
+
+/**
+ * Overview information of the [:HttpServer:] socket connections.
+ */
+class HttpConnectionsInfo {
+  /**
+   * Total number of socket connections.
+   */
+  int total = 0;
+
+  /**
+   * Number of active connections where actual request/response
+   * processing is active.
+   */
+  int active = 0;
+
+  /**
+   * Number of idle connections held by clients as persistent connections.
+   */
+  int idle = 0;
+
+  /**
+   * Number of connections which are preparing to close. Note: These
+   * connections are also part of the [:active:] count as they might
+   * still be sending data to the client before finally closing.
+   */
+  int closing = 0;
 }
 
 
@@ -795,9 +830,16 @@
   set findProxy(String f(Uri url));
 
   /**
-   * Shutdown the HTTP client releasing all resources.
+   * Shutdown the HTTP client. If [force] is [:false:] (the default)
+   * the [:HttpClient:] will be kept alive until all active
+   * connections are done. If [force] is [:true:] any active
+   * connections will be closed to immediately release all
+   * resources. These closed connections will receive an [:onError:]
+   * callback to indicate that the client was shutdown. In both cases
+   * trying to establish a new connection after calling [shutdown]
+   * will throw an exception.
    */
-  void shutdown();
+  void shutdown({bool force: false});
 }
 
 
diff --git a/sdk/lib/io/http_impl.dart b/sdk/lib/io/http_impl.dart
index fc69108..c783481 100644
--- a/sdk/lib/io/http_impl.dart
+++ b/sdk/lib/io/http_impl.dart
@@ -11,22 +11,25 @@
 
   void add(_HttpConnectionBase connection) {
     void closeIfDone() {
-      // We only check for write closed here. This means that we are
-      // not waiting for the client to half-close the socket before
-      // fully closing the socket.
-      if (!connection._isWriteClosed) return;
-      _q.remove(connection);
-      connection._socket.close();
-      if (connection.onClosed != null) connection.onClosed();
+      // When either the client has closed or all data has been
+      // written to the client we close the underlying socket
+      // completely.
+      if (connection._isWriteClosed || connection._isReadClosed) {
+        _q.remove(connection);
+        connection._socket.close();
+        if (connection.onClosed != null) connection.onClosed();
+      }
     }
 
-    // If the connection is already fully closed don't insert it into the queue.
+    // If the connection is already fully closed don't insert it into
+    // the queue.
     if (connection._isFullyClosed) {
       connection._socket.close();
       if (connection.onClosed != null) connection.onClosed();
       return;
     }
 
+    connection._state |= _HttpConnectionBase.CLOSING;
     _q.add(connection);
 
     // If output stream is not closed for writing close it now and
@@ -45,10 +48,7 @@
     if (!connection._isReadClosed) {
       connection._socket.onClosed = () {
         connection._state |= _HttpConnectionBase.READ_CLOSED;
-        // This is a nop, as we are not using the read closed
-        // information for anything. For both server and client
-        // connections the inbound message have been read to
-        // completion when the socket enters the close queue.
+        closeIfDone();
       };
     } else {
       connection._socket.onClosed = () { assert(false); };
@@ -59,6 +59,7 @@
 
     // If an error occurs immediately close the socket.
     connection._socket.onError = (e) {
+      connection._state |= _HttpConnectionBase.READ_CLOSED;
       connection._state |= _HttpConnectionBase.WRITE_CLOSED;
       closeIfDone();
     };
@@ -718,17 +719,21 @@
 abstract class _HttpConnectionBase {
   static const int IDLE = 0;
   static const int ACTIVE = 1;
-  static const int REQUEST_DONE = 2;
-  static const int RESPONSE_DONE = 4;
+  static const int CLOSING = 2;
+  static const int REQUEST_DONE = 4;
+  static const int RESPONSE_DONE = 8;
   static const int ALL_DONE = REQUEST_DONE | RESPONSE_DONE;
-  static const int READ_CLOSED = 8;
-  static const int WRITE_CLOSED = 16;
+  static const int READ_CLOSED = 16;
+  static const int WRITE_CLOSED = 32;
   static const int FULLY_CLOSED = READ_CLOSED | WRITE_CLOSED;
 
   _HttpConnectionBase() : hashCode = _nextHashCode {
     _nextHashCode = (_nextHashCode + 1) & 0xFFFFFFF;
   }
 
+  bool get _isIdle => (_state & ACTIVE) == 0;
+  bool get _isActive => (_state & ACTIVE) == ACTIVE;
+  bool get _isClosing => (_state & CLOSING) == CLOSING;
   bool get _isRequestDone => (_state & REQUEST_DONE) == REQUEST_DONE;
   bool get _isResponseDone => (_state & RESPONSE_DONE) == RESPONSE_DONE;
   bool get _isAllDone => (_state & ALL_DONE) == ALL_DONE;
@@ -832,6 +837,7 @@
 
   void _onClosed() {
     _state |= _HttpConnectionBase.READ_CLOSED;
+    _checkDone();
   }
 
   void _onError(e) {
@@ -869,17 +875,20 @@
   }
 
   void _checkDone() {
-    if (_isAllDone) {
-      // If we are done writing the response, and either the client
-      // has closed or the connection is not persistent, we must
-      // close. Also if using HTTP 1.0 and the content length was not
-      // known we must close to indicate end of body.
+    if (_isReadClosed) {
+      // If the client closes the conversation is ended.
+      _server._closeQueue.add(this);
+    } else if (_isAllDone) {
+      // If we are done writing the response, and the connection is
+      // not persistent, we must close. Also if using HTTP 1.0 and the
+      // content length was not known we must close to indicate end of
+      // body.
       bool close =
           !_response.persistentConnection ||
           (_response._protocolVersion == "1.0" && _response._contentLength < 0);
       _request = null;
       _response = null;
-      if (_isReadClosed || close) {
+      if (close) {
         _server._closeQueue.add(this);
       } else {
         _state = _HttpConnectionBase.IDLE;
@@ -1024,6 +1033,21 @@
     return _sessionManagerInstance;
   }
 
+  HttpConnectionsInfo connectionsInfo() {
+    HttpConnectionsInfo result = new HttpConnectionsInfo();
+    result.total = _connections.length;
+    _connections.forEach((_HttpConnection conn) {
+      if (conn._isActive) {
+        result.active++;
+      } else if (conn._isIdle) {
+        result.idle++;
+      } else {
+        assert(result._isClosing);
+        result.closing++;
+      }
+    });
+    return result;
+  }
 
   ServerSocket _server;  // The server listen socket.
   bool _closeServer = false;
@@ -1435,10 +1459,13 @@
 
   void _onClosed() {
     _state |= _HttpConnectionBase.READ_CLOSED;
+    _checkSocketDone();
   }
 
   void _onError(e) {
-    // Socket is closed either due to an error or due to normal socket close.
+    if (_socketConn != null) {
+      _client._closeSocketConnection(_socketConn);
+    }
     if (_onErrorCallback != null) {
       _onErrorCallback(e);
     } else {
@@ -1448,9 +1475,6 @@
     if (_response != null && _response._streamErrorHandler != null) {
        _response._streamErrorHandler(e);
     }
-    if (_socketConn != null) {
-      _client._closeSocketConnection(_socketConn);
-    }
   }
 
   void _onResponseReceived(int statusCode,
@@ -1465,11 +1489,17 @@
   }
 
   void _onDataEnd(bool close) {
-    _response._onDataEnd();
     _state |= _HttpConnectionBase.RESPONSE_DONE;
+    _response._onDataEnd();
     _checkSocketDone();
   }
 
+  void _onClientShutdown() {
+    if (!_isResponseDone) {
+      _onError(new HttpException("Client shutdown"));
+    }
+  }
+
   void set onRequest(void handler(HttpClientRequest request)) {
     _onRequest = handler;
   }
@@ -1523,13 +1553,8 @@
     var redirect = new _RedirectInfo(_response.statusCode, method, url);
     // The actual redirect is postponed until both response and
     // request are done.
-    if (_isAllDone) {
-      _doRedirect(redirect);
-    } else {
-      // Prepare for redirect.
-      assert(_pendingRetry == null);
-      _pendingRedirect = redirect;
-    }
+    assert(_pendingRetry == null);
+    _pendingRedirect = redirect;
   }
 
   List<RedirectInfo> get redirects => _redirects;
@@ -1569,12 +1594,14 @@
     _socket.onClosed = null;
     _socket.onError = null;
     _returnTime = new Date.now();
+    _httpClientConnection = null;
   }
 
   void _close() {
     _socket.onData = null;
     _socket.onClosed = null;
     _socket.onError = null;
+    _httpClientConnection = null;
     _socket.close();
   }
 
@@ -1586,6 +1613,7 @@
   int _port;
   Socket _socket;
   Date _returnTime;
+  HttpClientConnection _httpClientConnection;
 }
 
 class _ProxyConfiguration {
@@ -1705,19 +1733,22 @@
 
   set findProxy(String f(Uri uri)) => _findProxy = f;
 
-  void shutdown() {
-    _closeQueue.shutdown();
+  void shutdown({bool force: false}) {
+    if (force) _closeQueue.shutdown();
     _openSockets.forEach((String key, Queue<_SocketConnection> connections) {
       while (!connections.isEmpty) {
         _SocketConnection socketConn = connections.removeFirst();
         socketConn._socket.close();
       }
     });
-    _activeSockets.forEach((_SocketConnection socketConn) {
-      socketConn._socket.close();
-    });
+    if (force) {
+      _activeSockets.forEach((_SocketConnection socketConn) {
+        socketConn._socket.close();
+        socketConn._httpClientConnection._onClientShutdown();
+      });
+    }
     if (_evictionTimer != null) _cancelEvictionTimer();
-     _shutdown = true;
+    _shutdown = true;
   }
 
   void _cancelEvictionTimer() {
@@ -1743,6 +1774,7 @@
       void _connectionOpened(_SocketConnection socketConn,
                              _HttpClientConnection connection,
                              bool usingProxy) {
+        socketConn._httpClientConnection = connection;
         connection._usingProxy = usingProxy;
         connection._connectionEstablished(socketConn);
         HttpClientRequest request = connection.open(method, url);
@@ -1857,15 +1889,15 @@
   }
 
   void _returnSocketConnection(_SocketConnection socketConn) {
-    // Mark socket as returned to unregister from the old connection.
-    socketConn._markReturned();
-
-    // If the HTTP client is beeing shutdown don't return the connection.
+    // If the HTTP client is being shutdown don't return the connection.
     if (_shutdown) {
-      socketConn._socket.close();
+      socketConn._close();
       return;
     };
 
+    // Mark socket as returned to unregister from the old connection.
+    socketConn._markReturned();
+
     String key = _connectionKey(socketConn._host, socketConn._port);
 
     // Get or create the connection list for this key.
diff --git a/sdk/lib/io/http_parser.dart b/sdk/lib/io/http_parser.dart
index c4e966e..1acd7eb 100644
--- a/sdk/lib/io/http_parser.dart
+++ b/sdk/lib/io/http_parser.dart
@@ -582,6 +582,8 @@
   }
 
   void streamDone() {
+    String type() => _requestParser ? "request" : "response";
+
     // If the connection is idle the HTTP stream is closed.
     if (_state == _State.START) {
       if (_requestParser) {
@@ -589,7 +591,7 @@
       } else {
         error(
             new HttpParserException(
-                "Connection closed before full header was received"));
+                "Connection closed before full ${type()} header was received"));
       }
       return;
     }
@@ -600,7 +602,7 @@
       // throw the error.
       error(
           new HttpParserException(
-              "Connection closed before full header was received"));
+                "Connection closed before full ${type()} header was received"));
       return;
     }
 
@@ -614,7 +616,7 @@
       // throw the error.
       error(
           new HttpParserException(
-              "Connection closed before full body was received"));
+                "Connection closed before full ${type()} body was received"));
     }
   }
 
diff --git a/sdk/lib/io/io.dart b/sdk/lib/io/io.dart
index 82e84b4..7b0fbae 100644
--- a/sdk/lib/io/io.dart
+++ b/sdk/lib/io/io.dart
@@ -49,6 +49,7 @@
 #source('stream_util.dart');
 #source('string_stream.dart');
 #source('timer_impl.dart');
-#source('tls_socket.dart');
+#source('secure_socket.dart');
+#source('secure_server_socket.dart');
 #source('websocket.dart');
 #source('websocket_impl.dart');
diff --git a/sdk/lib/io/iolib_sources.gypi b/sdk/lib/io/iolib_sources.gypi
index 2f5fa01..b4ac1bb 100644
--- a/sdk/lib/io/iolib_sources.gypi
+++ b/sdk/lib/io/iolib_sources.gypi
@@ -35,7 +35,8 @@
     'stream_util.dart',
     'string_stream.dart',
     'timer_impl.dart',
-    'tls_socket.dart',
+    'secure_socket.dart',
+    'secure_server_socket.dart',
     'websocket.dart',
     'websocket_impl.dart',
   ],
diff --git a/sdk/lib/io/secure_server_socket.dart b/sdk/lib/io/secure_server_socket.dart
new file mode 100644
index 0000000..2ab290a
--- /dev/null
+++ b/sdk/lib/io/secure_server_socket.dart
@@ -0,0 +1,77 @@
+// Copyright (c) 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.
+
+
+abstract class SecureServerSocket implements ServerSocket {
+  /**
+   * Constructs a new secure server socket, binds it to a given address
+   * and port, and listens on it.  Incoming client connections are
+   * promoted to secure connections, using the server certificate given by
+   * certificate_name.  The bindAddress must be given as a numeric address,
+   * not a host name.  The certificate name is the distinguished name (DN) of
+   * the certificate, such as "CN=localhost" or "CN=myserver.mydomain.com".
+   * The certificate is looked up in the NSS certificate database set by
+   * SecureSocket.setCertificateDatabase.
+   */
+  factory SecureServerSocket(String bindAddress,
+                          int port,
+                          int backlog,
+                          String certificate_name) =>
+      new _SecureServerSocket(bindAddress, port, backlog, certificate_name);
+}
+
+
+class _SecureServerSocket implements SecureServerSocket {
+
+  _SecureServerSocket(String bindAddress,
+                   int port,
+                   int backlog,
+                   String certificate_name) {
+    _socket = new ServerSocket(bindAddress, port, backlog);
+    _socket.onConnection = this._onConnectionHandler;
+    _certificate_name = certificate_name;
+  }
+
+  void set onConnection(void callback(Socket connection)) {
+    _onConnectionCallback = callback;
+  }
+
+  void set onError(void callback(e)) {
+    _socket.onError = callback;
+  }
+
+  /**
+   * Returns the port used by this socket.
+   */
+  int get port => _socket.port;
+
+  /**
+   * Closes the socket.
+   */
+  void close() {
+    _socket.close();
+  }
+
+  void _onConnectionHandler(Socket connection) {
+    if (_onConnectionCallback == null) {
+      connection.close();
+      throw new SocketIOException(
+          "SecureServerSocket with no onConnection callback connected to");
+    }
+    if (_certificate_name == null) {
+      connection.close();
+      throw new SocketIOException(
+          "SecureServerSocket with server certificate not set connected to");
+    }
+    var secure_connection = new _SecureSocket.server(connection.remoteHost,
+                                                  connection.remotePort,
+                                                  connection,
+                                                  _certificate_name);
+    _onConnectionCallback(secure_connection);
+  }
+
+  ServerSocket _socket;
+  var _onConnectionCallback;
+  String _certificate_name;
+}
diff --git a/sdk/lib/io/secure_socket.dart b/sdk/lib/io/secure_socket.dart
new file mode 100644
index 0000000..9efbacb
--- /dev/null
+++ b/sdk/lib/io/secure_socket.dart
@@ -0,0 +1,539 @@
+// Copyright (c) 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.
+
+/**
+ * SecureSocket provides a secure (SSL or TLS) client connection to a server.
+ * The certificate provided by the server is checked
+ * using the certificate database provided in setCertificateDatabase.
+ */
+abstract class SecureSocket implements Socket {
+  /**
+   * Constructs a new secure client socket and connect it to the given
+   * host on the given port. The returned socket is not yet connected
+   * but ready for registration of callbacks.
+   */
+  factory SecureSocket(String host, int port) => new _SecureSocket(host, port);
+
+   /**
+   * Initializes the NSS library with the path to a certificate database
+   * containing root certificates for verifying certificate paths on
+   * client connections, and server certificates to provide on server
+   * connections.  The password argument should be used when creating
+   * secure server sockets, to allow the private key of the server
+   * certificate to be fetched.
+   *
+   * The database should be an NSS certificate database directory
+   * containing a cert9.db file, not a cert8.db file.  This version of
+   * the database can be created using the NSS certutil tool with "sql:" in
+   * front of the absolute path of the database directory, or setting the
+   * environment variable NSS_DEFAULT_DB_TYPE to "sql".
+   */
+  external static void setCertificateDatabase(String certificateDatabase,
+                                              [String password]);
+}
+
+
+class _SecureSocket implements SecureSocket {
+  // Status states
+  static final int NOT_CONNECTED = 200;
+  static final int HANDSHAKE = 201;
+  static final int CONNECTED = 202;
+  static final int CLOSED = 203;
+
+  // Buffer identifiers.
+  // These must agree with those in the native C++ implementation.
+  static final int READ_PLAINTEXT = 0;
+  static final int WRITE_PLAINTEXT = 1;
+  static final int READ_ENCRYPTED = 2;
+  static final int WRITE_ENCRYPTED = 3;
+  static final int NUM_BUFFERS = 4;
+
+  int _count = 0;
+  // Constructs a new secure client socket.
+  factory _SecureSocket(String host, int port) =>
+      new _SecureSocket.internal(host, port, false);
+
+  // Constructs a new secure server socket, with the named server certificate.
+  factory _SecureSocket.server(String host,
+                            int port,
+                            Socket socket,
+                            String certificateName) =>
+      new _SecureSocket.internal(host, port, true, socket, certificateName);
+
+  _SecureSocket.internal(String host,
+                      int port,
+                      bool is_server,
+                      [Socket socket,
+                       String certificateName])
+      : _host = host,
+        _port = port,
+        _socket = socket,
+        _certificateName = certificateName,
+        _is_server = is_server,
+        _secureFilter = new _SecureFilter() {
+    if (_socket == null) {
+      _socket = new Socket(host, port);
+    }
+    _socket.onConnect = _secureConnectHandler;
+    _socket.onData = _secureDataHandler;
+    _socket.onClosed = _secureCloseHandler;
+    _secureFilter.init();
+    _secureFilter.registerHandshakeCompleteCallback(_secureHandshakeCompleteHandler);
+  }
+
+  int get port => _socket.port;
+
+  String get remoteHost => _socket.remoteHost;
+
+  int get remotePort => _socket.remotePort;
+
+  void set onClosed(void callback()) {
+    if (_inputStream != null) {
+      throw new StreamException(
+           "Cannot set close handler when input stream is used");
+    }
+    _onClosed = callback;
+  }
+
+  void set _onClosed(void callback()) {
+    _socketCloseHandler = callback;
+  }
+
+  void set onConnect(void callback()) {
+    if (_outputStream != null) {
+      throw new StreamException(
+          "Cannot set connect handler when output stream is used");
+    }
+    if (_status == CONNECTED || _status == CLOSED) {
+      throw new StreamException(
+          "Cannot set connect handler when already connected");
+    }
+    _onConnect = callback;
+  }
+
+  void set _onConnect(void callback()) {
+    _socketConnectHandler = callback;
+  }
+
+  void set onData(void callback()) {
+    if (_outputStream != null) {
+      throw new StreamException(
+          "Cannot set data handler when input stream is used");
+    }
+    _onData = callback;
+  }
+
+  void set _onData(void callback()) {
+    _socketDataHandler = callback;
+  }
+
+  void set onWrite(void callback()) {
+    if (_outputStream != null) {
+      throw new StreamException(
+          "Cannot set write handler when output stream is used");
+    }
+    _onWrite = callback;
+  }
+
+  void set _onWrite(void callback()) {
+    _socketWriteHandler = callback;
+    // Reset the one-shot onWrite handler.
+    _socket.onWrite = _secureWriteHandler;
+  }
+
+  InputStream get inputStream {
+    if (_inputStream == null) {
+      if (_socketDataHandler != null || _socketCloseHandler != null) {
+        throw new StreamException(
+            "Cannot get input stream when socket handlers are used");
+      }
+      _inputStream = new _SocketInputStream(this);
+    }
+    return _inputStream;
+  }
+
+  OutputStream get outputStream {
+    if (_outputStream == null) {
+      if (_socketConnectHandler != null || _socketWriteHandler != null) {
+        throw new StreamException(
+            "Cannot get output stream when socket handlers are used");
+      }
+      _outputStream = new _SocketOutputStream(this);
+    }
+    return _outputStream;
+  }
+
+  int available() {
+    throw new UnimplementedError("SecureSocket.available not implemented yet");
+  }
+
+  void close([bool halfClose]) {
+    if (halfClose) {
+      _closedWrite = true;
+      _writeEncryptedData();
+      if (_filterWriteEmpty) {
+        _socket.close(true);
+        _socketClosedWrite = true;
+      }
+    } else {
+      _closedWrite = true;
+      _closedRead = true;
+      _socket.close(false);
+      _socketClosedWrite = true;
+      _socketClosedRead = true;
+      _secureFilter.destroy();
+      _secureFilter = null;
+      if (scheduledDataEvent != null) {
+        scheduledDataEvent.cancel();
+      }
+      _status = CLOSED;
+    }
+  }
+
+  void _closeWrite() => close(true);
+
+  List<int> read([int len]) {
+    if (_closedRead) {
+      throw new SocketException("Reading from a closed socket");
+    }
+    if (_status != CONNECTED) {
+      return new List<int>(0);
+    }
+    var buffer = _secureFilter.buffers[READ_PLAINTEXT];
+    _readEncryptedData();
+    int toRead = buffer.length;
+    if (len != null) {
+      if (len is! int || len < 0) {
+        throw new ArgumentError(
+            "Invalid len parameter in SecureSocket.read (len: $len)");
+      }
+      if (len < toRead) {
+        toRead = len;
+      }
+    }
+    List<int> result = buffer.data.getRange(buffer.start, toRead);
+    buffer.advanceStart(toRead);
+    _setHandlersAfterRead();
+    return result;
+  }
+
+  int readList(List<int> data, int offset, int bytes) {
+    if (_closedRead) {
+      throw new SocketException("Reading from a closed socket");
+    }
+    if (offset < 0 || bytes < 0 || offset + bytes > data.length) {
+      throw new ArgumentError(
+          "Invalid offset or bytes in SecureSocket.readList");
+    }
+    if (_status != CONNECTED && _status != CLOSED) {
+      return 0;
+    }
+
+    int bytesRead = 0;
+    var buffer = _secureFilter.buffers[READ_PLAINTEXT];
+    // TODO(whesse): Currently this fails if the if is turned into a while loop.
+    // Fix it so that it can loop and read more than one buffer's worth of data.
+    if (bytes > bytesRead) {
+      _readEncryptedData();
+      if (buffer.length > 0) {
+        int toRead = min(bytes - bytesRead, buffer.length);
+        data.setRange(offset, toRead, buffer.data, buffer.start);
+        buffer.advanceStart(toRead);
+        bytesRead += toRead;
+        offset += toRead;
+      }
+    }
+
+    _setHandlersAfterRead();
+    return bytesRead;
+  }
+
+  // Write the data to the socket, and flush it as much as possible
+  // until it would block.  If the write would block, _writeEncryptedData sets
+  // up handlers to flush the pipeline when possible.
+  int writeList(List<int> data, int offset, int bytes) {
+    if (_closedWrite) {
+      throw new SocketException("Writing to a closed socket");
+    }
+    if (_status != CONNECTED) return 0;
+    var buffer = _secureFilter.buffers[WRITE_PLAINTEXT];
+    if (bytes > buffer.free) {
+      bytes = buffer.free;
+    }
+    if (bytes > 0) {
+      buffer.data.setRange(buffer.start + buffer.length, bytes, data, offset);
+      buffer.length += bytes;
+    }
+    _writeEncryptedData();  // Tries to flush all pipeline stages.
+    return bytes;
+  }
+
+  void _secureConnectHandler() {
+    _connectPending = true;
+    _secureFilter.connect(_host, _port, _is_server, _certificateName);
+    _status = HANDSHAKE;
+    _secureHandshake();
+  }
+
+  void _secureWriteHandler() {
+    _writeEncryptedData();
+    if (_filterWriteEmpty && _closedWrite && !_socketClosedWrite) {
+      _socket.close(true);
+      _sockedClosedWrite = true;
+    }
+    if (_status == HANDSHAKE) {
+      _secureHandshake();
+    } else if (_status == CONNECTED &&
+               _socketWriteHandler != null &&
+               _secureFilter.buffers[WRITE_PLAINTEXT].free > 0) {
+      // We must be able to set onWrite from the onWrite callback.
+      var handler = _socketWriteHandler;
+      // Reset the one-shot handler.
+      _socketWriteHandler = null;
+      handler();
+    }
+  }
+
+  void _secureDataHandler() {
+    if (_status == HANDSHAKE) {
+      _secureHandshake();
+    } else {
+      _writeEncryptedData();  // TODO(whesse): Removing this causes a failure.
+      _readEncryptedData();
+      if (!_filterReadEmpty) {
+        // Call the onData event.
+        if (scheduledDataEvent != null) {
+          scheduledDataEvent.cancel();
+          scheduledDataEvent = null;
+        }
+        if (_socketDataHandler != null) {
+          _socketDataHandler();
+        }
+      }
+    }
+  }
+
+  void _secureCloseHandler() {
+    _socketClosedRead = true;
+    if (_filterReadEmpty) {
+      _closedRead = true;
+      _fireCloseEvent();
+      if (_socketClosedWrite) {
+        _secureFilter.destroy();
+        _secureFilter = null;
+        _status = CLOSED;
+      }
+    }
+  }
+
+  void _secureHandshake() {
+    _readEncryptedData();
+    _secureFilter.handshake();
+    _writeEncryptedData();
+    if (_secureFilter.buffers[WRITE_ENCRYPTED].length > 0) {
+      _socket.onWrite = _secureWriteHandler;
+    }
+  }
+
+  void _secureHandshakeCompleteHandler() {
+    _status = CONNECTED;
+    if (_connectPending && _socketConnectHandler != null) {
+      _connectPending = false;
+      _socketConnectHandler();
+    }
+    if (_socketWriteHandler != null) {
+      _socket.onWrite = _secureWriteHandler;
+    }
+  }
+
+  // True if the underlying socket is closed, the filter has been emptied of
+  // all data, and the close event has been fired.
+  get _closed => _socketClosed && !_fireCloseEventPending;
+
+  void _fireCloseEvent() {
+    if (scheduledDataEvent != null) {
+      scheduledDataEvent.cancel();
+    }
+    if (_socketCloseHandler != null) {
+      _socketCloseHandler();
+    }
+  }
+
+  void _readEncryptedData() {
+    // Read from the socket, and push it through the filter as far as
+    // possible.
+    var encrypted = _secureFilter.buffers[READ_ENCRYPTED];
+    var plaintext = _secureFilter.buffers[READ_PLAINTEXT];
+    bool progress = true;
+    while (progress) {
+      progress = false;
+      // Do not try to read plaintext from the filter while handshaking.
+      if ((_status == CONNECTED) && plaintext.free > 0) {
+        int bytes = _secureFilter.processBuffer(READ_PLAINTEXT);
+        if (bytes > 0) {
+          plaintext.length += bytes;
+          progress = true;
+        }
+      }
+      if (encrypted.length > 0) {
+        int bytes = _secureFilter.processBuffer(READ_ENCRYPTED);
+        if (bytes > 0) {
+          encrypted.advanceStart(bytes);
+          progress = true;
+        }
+      }
+      if (!_socketClosedRead) {
+        int bytes = _socket.readList(encrypted.data,
+                                     encrypted.start + encrypted.length,
+                                     encrypted.free);
+        if (bytes > 0) {
+          encrypted.length += bytes;
+          progress = true;
+        }
+      }
+    }
+    // If there is any data in any stages of the filter, there should
+    // be data in the plaintext buffer after this process.
+    // TODO(whesse): Verify that this is true, and there can be no
+    // partial encrypted block stuck in the secureFilter.
+    _filterReadEmpty = (plaintext.length == 0);
+  }
+
+  void _writeEncryptedData() {
+    if (_socketClosedWrite) return;
+    var encrypted = _secureFilter.buffers[WRITE_ENCRYPTED];
+    var plaintext = _secureFilter.buffers[WRITE_PLAINTEXT];
+    while (true) {
+      if (encrypted.length > 0) {
+        // Write from the filter to the socket.
+        int bytes = _socket.writeList(encrypted.data,
+                                      encrypted.start,
+                                      encrypted.length);
+        if (bytes == 0) {
+          // The socket has blocked while we have data to write.
+          // We must be notified when it becomes unblocked.
+          _socket.onWrite = _secureWriteHandler;
+          _filterWriteEmpty = false;
+          break;
+        }
+        encrypted.advanceStart(bytes);
+      } else {
+        var plaintext = _secureFilter.buffers[WRITE_PLAINTEXT];
+        if (plaintext.length > 0) {
+           int plaintext_bytes = _secureFilter.processBuffer(WRITE_PLAINTEXT);
+           plaintext.advanceStart(plaintext_bytes);
+        }
+        int bytes = _secureFilter.processBuffer(WRITE_ENCRYPTED);
+        if (bytes <= 0) {
+          // We know the WRITE_ENCRYPTED buffer is empty, and the
+          // filter wrote zero bytes to it, so the filter must be empty.
+          // Also, the WRITE_PLAINTEXT buffer must have been empty, or
+          // it would have written to the filter.
+          // TODO(whesse): Verify that the filter works this way.
+          _filterWriteEmpty = true;
+          break;
+        }
+        encrypted.length += bytes;
+      }
+    }
+  }
+
+  /* After a read, the onData handler is enabled to fire again.
+   * We may also have a close event waiting for the SecureFilter to empty.
+   */
+  void _setHandlersAfterRead() {
+    // If the filter is empty, then we are guaranteed an event when it
+    // becomes unblocked.  Cancel any _secureDataHandler call.
+    // Otherwise, schedule a _secureDataHandler call since there may data
+    // available, and this read call enables the data event.
+    if (_filterReadEmpty) {
+      if (scheduledDataEvent != null) {
+        scheduledDataEvent.cancel();
+        scheduledDataEvent = null;
+      }
+    } else if (scheduledDataEvent == null) {
+      scheduledDataEvent = new Timer(0, (_) => _secureDataHandler());
+    }
+
+    if (_socketClosedRead) {  // An onClose event is pending.
+      // _closedRead is false, since we are in a read or readList call.
+      if (!_filterReadEmpty) {
+        // _filterReadEmpty may be out of date since read and readList empty
+        // the plaintext buffer after calling _readEncryptedData.
+        // TODO(whesse): Fix this as part of fixing read and readList.
+        _readEncryptedData();
+      }
+      if (_filterReadEmpty) {
+        // This can't be an else clause: the value of _filterReadEmpty changes.
+        // This must be asynchronous, because we are in a read or readList call.
+        new Timer(0, (_) => _fireCloseEvent());
+      }
+    }
+  }
+
+  bool get _socketClosed => _closedRead;
+
+  // _SecureSocket cannot extend _Socket and use _Socket's factory constructor.
+  Socket _socket;
+  String _host;
+  int _port;
+  bool _is_server;
+  String _certificateName;
+
+  var _status = NOT_CONNECTED;
+  bool _socketClosedRead = false;  // The network socket is closed for reading.
+  bool _socketClosedWrite = false;  // The network socket is closed for writing.
+  bool _closedRead = false;  // The secure socket has fired an onClosed event.
+  bool _closedWrite = false;  // The secure socket has been closed for writing.
+  bool _filterReadEmpty = true;  // There is no buffered data to read.
+  bool _filterWriteEmpty = true;  // There is no buffered data to be written.
+  _SocketInputStream _inputStream;
+  _SocketOutputStream _outputStream;
+  bool _connectPending = false;
+  Function _socketConnectHandler;
+  Function _socketWriteHandler;
+  Function _socketDataHandler;
+  Function _socketCloseHandler;
+  Timer scheduledDataEvent;
+
+  _SecureFilter _secureFilter;
+}
+
+
+class _ExternalBuffer {
+  static final int SIZE = 8 * 1024;
+  _ExternalBuffer() : start = 0, length = 0;
+
+  // TODO(whesse): Consider making this a circular buffer.  Only if it helps.
+  void advanceStart(int numBytes) {
+    start += numBytes;
+    length -= numBytes;
+    if (length == 0) {
+      start = 0;
+    }
+  }
+
+  int get free => SIZE - (start + length);
+
+  List data;  // This will be a ExternalByteArray, backed by C allocated data.
+  int start;
+  int length;
+}
+
+
+abstract class _SecureFilter {
+  external factory _SecureFilter();
+
+  void connect(String hostName,
+               int port,
+               bool is_server,
+               String certificateName);
+  void destroy();
+  void handshake();
+  void init();
+  int processBuffer(int bufferIndex);
+  void registerHandshakeCompleteCallback(Function handshakeCompleteHandler);
+
+  List<_ExternalBuffer> get buffers;
+}
diff --git a/sdk/lib/io/string_stream.dart b/sdk/lib/io/string_stream.dart
index c168153..49302c1 100644
--- a/sdk/lib/io/string_stream.dart
+++ b/sdk/lib/io/string_stream.dart
@@ -268,38 +268,13 @@
   static int _encodingSize(String string) => _encodeString(string, null);
 
   static int _encodeString(String string, List<int> buffer) {
-    int pos = 0;
-    int length = string.length;
-    for (int i = 0; i < length; i++) {
-      int additionalBytes;
-      int charCode = string.charCodeAt(i);
-      if (charCode <= 0x007F) {
-        additionalBytes = 0;
-        if (buffer != null) buffer[pos] = charCode;
-      } else if (charCode <= 0x07FF) {
-        // 110xxxxx (xxxxx is top 5 bits).
-        if (buffer != null) buffer[pos] = ((charCode >> 6) & 0x1F) | 0xC0;
-        additionalBytes = 1;
-      } else if (charCode <= 0xFFFF) {
-        // 1110xxxx (xxxx is top 4 bits)
-        if (buffer != null) buffer[pos] = ((charCode >> 12) & 0x0F)| 0xE0;
-        additionalBytes = 2;
-      } else {
-        // 11110xxx (xxx is top 3 bits)
-        if (buffer != null) buffer[pos] = ((charCode >> 18) & 0x07) | 0xF0;
-        additionalBytes = 3;
-      }
-      pos++;
-      if (buffer != null) {
-        for (int i = additionalBytes; i > 0; i--) {
-          // 10xxxxxx (xxxxxx is next 6 bits from the top).
-          buffer[pos++] = ((charCode >> (6 * (i - 1))) & 0x3F) | 0x80;
-        }
-      } else {
-        pos += additionalBytes;
+    List<int> utf8CodeUnits = encodeUtf8(string);
+    if (buffer != null) {
+      for (int i = 0; i < utf8CodeUnits.length; i++) {
+        buffer[i] = utf8CodeUnits[i];
       }
     }
-    return pos;
+    return utf8CodeUnits.length;
   }
 }
 
diff --git a/sdk/lib/io/tls_socket.dart b/sdk/lib/io/tls_socket.dart
deleted file mode 100644
index 44551b5..0000000
--- a/sdk/lib/io/tls_socket.dart
+++ /dev/null
@@ -1,373 +0,0 @@
-// Copyright (c) 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.
-
-/**
- * TlsSocket provides a secure (SSL or TLS) client connection to a server.
- * The certificate provided by the server is checked
- * using the certificate database provided in setCertificateDatabase.
- */
-abstract class TlsSocket implements Socket {
-  /**
-   * Constructs a new secure socket and connect it to the given
-   * host on the given port. The returned socket is not yet connected
-   * but ready for registration of callbacks.
-   */
-  factory TlsSocket(String host, int port) => new _TlsSocket(host, port);
-
-  /**
-   * Initializes the TLS library with the path to a certificate database
-   * containing root certificates for verifying certificate paths on
-   * client connections, and server certificates to provide on server
-   * connections.
-   */
-  external static void setCertificateDatabase(String pkcertDirectory);
-}
-
-
-class _TlsSocket implements TlsSocket {
-  // Status states
-  static final int NOT_CONNECTED = 200;
-  static final int HANDSHAKE = 201;
-  static final int CONNECTED = 202;
-  static final int CLOSED = 203;
-
-  // Buffer identifiers.
-  // These must agree with those in the native C++ implementation.
-  static final int READ_PLAINTEXT = 0;
-  static final int WRITE_PLAINTEXT = 1;
-  static final int READ_ENCRYPTED = 2;
-  static final int WRITE_ENCRYPTED = 3;
-  static final int NUM_BUFFERS = 4;
-
-  int _count = 0;
-  // Constructs a new secure client socket.
-  _TlsSocket(String host, int port)
-      : _host = host,
-        _port = port,
-        _socket = new Socket(host, port),
-        _tlsFilter = new _TlsFilter() {
-    _socket.onConnect = _tlsConnectHandler;
-    _socket.onData = _tlsDataHandler;
-    _socket.onClosed = _tlsCloseHandler;
-    _tlsFilter.init();
-    _tlsFilter.registerHandshakeCompleteCallback(_tlsHandshakeCompleteHandler);
-  }
-
-  InputStream get inputStream {
-    // TODO(6701): Implement stream interfaces on TlsSocket.
-    throw new UnimplementedError("TlsSocket.inputStream not implemented yet");
-  }
-
-  int get port => _socket.port;
-
-  String get remoteHost => _socket.remoteHost;
-
-  int get remotePort => _socket.remotePort;
-
-  void set onClosed(void callback()) {
-    _socketCloseHandler = callback;
-  }
-
-  void set onConnect(void callback()) {
-    _socketConnectHandler = callback;
-  }
-
-  void set onData(void callback()) {
-    _socketDataHandler = callback;
-  }
-
-  void set onWrite(void callback()) {
-    _socketWriteHandler = callback;
-    // Reset the one-shot onWrite handler.
-    _socket.onWrite = _tlsWriteHandler;
-  }
-
-  OutputStream get outputStream {
-    // TODO(6701): Implement stream interfaces on TlsSocket.
-    throw new UnimplementedError("TlsSocket.inputStream not implemented yet");
-  }
-
-  int available() {
-    throw new UnimplementedError("TlsSocket.available not implemented yet");
-  }
-
-  void close([bool halfClose]) {
-    _socket.close(halfClose);
-  }
-
-  List<int> read([int len]) {
-    var buffer = _tlsFilter.buffers[READ_PLAINTEXT];
-    _readEncryptedData();
-    int toRead = buffer.length;
-    if (len != null) {
-      if (len is! int || len < 0) {
-        throw new ArgumentError(
-            "Invalid len parameter in TlsSocket.read (len: $len)");
-      }
-      if (len < toRead) {
-        toRead = len;
-      }
-    }
-    List<int> result = buffer.data.getRange(buffer.start, toRead);
-    buffer.advanceStart(toRead);
-    _setHandlersAfterRead();
-    return result;
-  }
-
-  int readList(List<int> data, int offset, int bytes) {
-    if (offset < 0 || bytes < 0 || offset + bytes > data.length) {
-      throw new ArgumentError(
-          "Invalid offset or bytes in TlsSocket.readList");
-    }
-
-    int bytesRead = 0;
-    var buffer = _tlsFilter.buffers[READ_PLAINTEXT];
-    // TODO(whesse): Currently this fails if the if is turned into a while loop.
-    // Fix it so that it can loop and read more than one buffer's worth of data.
-    if (bytes > bytesRead) {
-      _readEncryptedData();
-      if (buffer.length > 0) {
-        int toRead = min(bytes - bytesRead, buffer.length);
-        data.setRange(offset, toRead, buffer.data, buffer.start);
-        buffer.advanceStart(toRead);
-        bytesRead += toRead;
-        offset += toRead;
-      }
-    }
-
-    _setHandlersAfterRead();
-    return bytesRead;
-  }
-
-  // Write the data to the socket, and flush it as much as possible
-  // until it would block.  If the write would block, _writeEncryptedData sets
-  // up handlers to flush the pipeline when possible.
-  int writeList(List<int> data, int offset, int bytes) {
-    var buffer = _tlsFilter.buffers[WRITE_PLAINTEXT];
-    if (bytes > buffer.free) {
-      bytes = buffer.free;
-    }
-    if (bytes > 0) {
-      buffer.data.setRange(buffer.start + buffer.length, bytes, data, offset);
-      buffer.length += bytes;
-    }
-    _writeEncryptedData();  // Tries to flush all pipeline stages.
-    return bytes;
-  }
-
-  void _tlsConnectHandler() {
-    _connectPending = true;
-    _tlsFilter.connect(_host, _port);
-    _status = HANDSHAKE;
-    _tlsHandshake();
-  }
-
-  void _tlsWriteHandler() {
-    if (_status == HANDSHAKE) {
-      _tlsHandshake();
-    } else if (_status == CONNECTED) {
-      if (_socketWriteHandler != null) {
-        _socketWriteHandler();
-      }
-    }
-  }
-
-  void _tlsDataHandler() {
-    if (_status == HANDSHAKE) {
-      _tlsHandshake();
-    } else {
-      _writeEncryptedData();  // TODO(whesse): Removing this causes a failure.
-      _readEncryptedData();
-      var buffer = _tlsFilter.buffers[READ_PLAINTEXT];
-      if (_filterEmpty) {
-        if (_fireCloseEventPending) {
-          _fireCloseEvent();
-        }
-      } else {  // Filter is not empty.
-        if (scheduledDataEvent != null) {
-          scheduledDataEvent.cancel();
-          scheduledDataEvent = null;
-        }
-        if (_socketDataHandler != null) {
-          _socketDataHandler();
-        }
-      }
-    }
-  }
-
-  void _tlsCloseHandler() {
-    _socketClosed = true;
-    _status = CLOSED;
-    _socket.close();
-    if (_filterEmpty) {
-      _fireCloseEvent();
-    } else {
-      _fireCloseEventPending = true;
-    }
-  }
-
-  void _tlsHandshake() {
-      _readEncryptedData();
-      _tlsFilter.handshake();
-      _writeEncryptedData();
-      if (_tlsFilter.buffers[WRITE_ENCRYPTED].length > 0) {
-        _socket.onWrite = _tlsWriteHandler;
-      }
-  }
-
-  void _tlsHandshakeCompleteHandler() {
-    _status = CONNECTED;
-    if (_connectPending && _socketConnectHandler != null) {
-      _connectPending = false;
-      _socketConnectHandler();
-    }
-  }
-
-  void _fireCloseEvent() {
-    _fireCloseEventPending = false;
-    _tlsFilter.destroy();
-    _tlsFilter = null;
-    if (scheduledDataEvent != null) {
-      scheduledDataEvent.cancel();
-    }
-    if (_socketCloseHandler != null) {
-      _socketCloseHandler();
-    }
-  }
-
-  void _readEncryptedData() {
-    // Read from the socket, and push it through the filter as far as
-    // possible.
-    var encrypted = _tlsFilter.buffers[READ_ENCRYPTED];
-    var plaintext = _tlsFilter.buffers[READ_PLAINTEXT];
-    bool progress = true;
-    while (progress) {
-      progress = false;
-      // Do not try to read plaintext from the filter while handshaking.
-      if ((_status == CONNECTED || _status == CLOSED) && plaintext.free > 0) {
-        int bytes = _tlsFilter.processBuffer(READ_PLAINTEXT);
-        if (bytes > 0) {
-          plaintext.length += bytes;
-          progress = true;
-        }
-      }
-      if (encrypted.length > 0) {
-        int bytes = _tlsFilter.processBuffer(READ_ENCRYPTED);
-        if (bytes > 0) {
-          encrypted.advanceStart(bytes);
-          progress = true;
-        }
-      }
-      if (!_socketClosed) {
-        int bytes = _socket.readList(encrypted.data,
-                                     encrypted.start + encrypted.length,
-                                     encrypted.free);
-        if (bytes > 0) {
-          encrypted.length += bytes;
-          progress = true;
-        }
-      }
-    }
-    // TODO(whesse): This can be incorrect if there is a partial
-    // encrypted block stuck in the tlsFilter, and no other data.
-    // Fix this - we do need to know when the filter is empty.
-    _filterEmpty = (plaintext.length == 0);
-  }
-
-  void _writeEncryptedData() {
-    // Write from the filter to the socket.
-    var buffer = _tlsFilter.buffers[WRITE_ENCRYPTED];
-    while (true) {
-      if (buffer.length > 0) {
-        int bytes = _socket.writeList(buffer.data, buffer.start, buffer.length);
-        if (bytes == 0) {
-          // The socket has blocked while we have data to write.
-          // We must be notified when it becomes unblocked.
-          _socket.onWrite = _tlsWriteHandler;
-          break;
-        }
-        buffer.advanceStart(bytes);
-      } else {
-        var plaintext = _tlsFilter.buffers[WRITE_PLAINTEXT];
-        if (plaintext.length > 0) {
-           int plaintext_bytes = _tlsFilter.processBuffer(WRITE_PLAINTEXT);
-           plaintext.advanceStart(plaintext_bytes);
-        }
-        int bytes = _tlsFilter.processBuffer(WRITE_ENCRYPTED);
-        if (bytes <= 0) break;
-        buffer.length += bytes;
-      }
-    }
-  }
-
-  /* After a read, the onData handler is enabled to fire again.
-   * We may also have a close event waiting for the TlsFilter to empty.
-   */
-  void _setHandlersAfterRead() {
-    // If the filter is empty, then we are guaranteed an event when it
-    // becomes unblocked.
-    // Otherwise, schedule a _tlsDataHandler call since there may data
-    // available, and this read call enables the data event.
-    if (!_filterEmpty && scheduledDataEvent == null) {
-      scheduledDataEvent = new Timer(0, (_) => _tlsDataHandler());
-    } else if (_filterEmpty && scheduledDataEvent != null) {
-        scheduledDataEvent.cancel();
-        scheduledDataEvent = null;
-    }
-    if (_filterEmpty && _fireCloseEventPending) {
-        _fireCloseEvent();
-    }
-  }
-
-  // _TlsSocket cannot extend _Socket and use _Socket's factory constructor.
-  Socket _socket;
-  String _host;
-  int _port;
-
-  var _status = NOT_CONNECTED;
-  bool _socketClosed = false;
-  bool _filterEmpty = false;
-  bool _connectPending = false;
-  bool _fireCloseEventPending = false;
-  Function _socketConnectHandler;
-  Function _socketWriteHandler;
-  Function _socketDataHandler;
-  Function _socketCloseHandler;
-  Timer scheduledDataEvent;
-
-  _TlsFilter _tlsFilter;
-}
-
-
-class _TlsExternalBuffer {
-  static final int SIZE = 8 * 1024;
-  _TlsExternalBuffer() : start = 0, length = 0;
-
-  // TODO(whesse): Consider making this a circular buffer.  Only if it helps.
-  void advanceStart(int numBytes) {
-    start += numBytes;
-    length -= numBytes;
-    if (length == 0) {
-      start = 0;
-    }
-  }
-
-  int get free => SIZE - (start + length);
-
-  List data;  // This will be a ExternalByteArray, backed by C allocated data.
-  int start;
-  int length;
-}
-
-
-abstract class _TlsFilter {
-  external factory _TlsFilter();
-
-  void connect(String hostName, int port);
-  void destroy();
-  void handshake();
-  void init();
-  int processBuffer(int bufferIndex);
-  void registerHandshakeCompleteCallback(Function handshakeCompleteHandler);
-}
diff --git a/sdk/lib/math/random.dart b/sdk/lib/math/random.dart
index efc5678..bba1867 100644
--- a/sdk/lib/math/random.dart
+++ b/sdk/lib/math/random.dart
@@ -25,16 +25,16 @@
    * Implementation note: The default implementation supports [max] values
    * between 1 and ((1<<32) - 1) inclusive.
    */
-  abstract int nextInt(int max);
+  int nextInt(int max);
 
   /**
    * Generates a positive random floating point value uniformly distributed on
    * the range from 0.0, inclusive, to 1.0, exclusive.
    */
-  abstract double nextDouble();
+  double nextDouble();
 
   /**
    * Generates a random boolean value.
    */
-  abstract bool nextBool();
+  bool nextBool();
 }
diff --git a/sdk/lib/svg/dart2js/svg_dart2js.dart b/sdk/lib/svg/dart2js/svg_dart2js.dart
index ef6935a..d018a6d 100644
--- a/sdk/lib/svg/dart2js/svg_dart2js.dart
+++ b/sdk/lib/svg/dart2js/svg_dart2js.dart
@@ -15,20 +15,20 @@
 
 final _START_TAG_REGEXP = new RegExp('<(\\w+)');
 
-class _SVGElementFactoryProvider {
-  static SVGElement createSVGElement_tag(String tag) {
+class _SvgElementFactoryProvider {
+  static SvgElement createSvgElement_tag(String tag) {
     final Element temp =
       document.$dom_createElementNS("http://www.w3.org/2000/svg", tag);
     return temp;
   }
 
-  static SVGElement createSVGElement_svg(String svg) {
+  static SvgElement createSvgElement_svg(String svg) {
     Element parentTag;
     final match = _START_TAG_REGEXP.firstMatch(svg);
     if (match != null && match.group(1).toLowerCase() == 'svg') {
       parentTag = new Element.tag('div');
     } else {
-      parentTag = new SVGSVGElement();
+      parentTag = new SvgSvgElement();
     }
 
     parentTag.innerHTML = svg;
@@ -40,9 +40,9 @@
   }
 }
 
-class _SVGSVGElementFactoryProvider {
-  static SVGSVGElement createSVGSVGElement() {
-    final el = new SVGElement.tag("svg");
+class _SvgSvgElementFactoryProvider {
+  static SvgSvgElement createSvgSvgElement() {
+    final el = new SvgElement.tag("svg");
     // The SVG spec requires the version attribute to match the spec version
     el.attributes['version'] = "1.1";
     return el;
@@ -53,122 +53,124 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAElement
-class SVGAElement extends SVGElement implements SVGLangSpace, SVGTests, SVGStylable, SVGURIReference, SVGExternalResourcesRequired, SVGTransformable native "*SVGAElement" {
+/// @domName SVGAElement; @docsEditable true
+class AElement extends SvgElement implements Transformable, Tests, UriReference, Stylable, ExternalResourcesRequired, LangSpace native "*SVGAElement" {
 
-  /** @domName SVGAElement.target */
-  final SVGAnimatedString target;
+  factory AElement() => _SvgElementFactoryProvider.createSvgElement_tag("a");
+
+  /// @domName SVGAElement.target; @docsEditable true
+  final AnimatedString target;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGLocatable
 
-  /** @domName SVGLocatable.farthestViewportElement */
-  final SVGElement farthestViewportElement;
+  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  final SvgElement farthestViewportElement;
 
-  /** @domName SVGLocatable.nearestViewportElement */
-  final SVGElement nearestViewportElement;
+  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  final SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native;
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox() native;
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native;
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM() native;
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native;
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM() native;
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native;
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /** @domName SVGTransformable.transform */
-  final SVGAnimatedTransformList transform;
+  /// @domName SVGTransformable.transform; @docsEditable true
+  final AnimatedTransformList transform;
 
   // From SVGURIReference
 
-  /** @domName SVGURIReference.href */
-  final SVGAnimatedString href;
+  /// @domName SVGURIReference.href; @docsEditable true
+  final AnimatedString href;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGAltGlyphDefElement
-class SVGAltGlyphDefElement extends SVGElement native "*SVGAltGlyphDefElement" {
+/// @domName SVGAltGlyphDefElement; @docsEditable true
+class AltGlyphDefElement extends SvgElement native "*SVGAltGlyphDefElement" {
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGAltGlyphElement
-class SVGAltGlyphElement extends SVGTextPositioningElement implements SVGURIReference native "*SVGAltGlyphElement" {
+/// @domName SVGAltGlyphElement; @docsEditable true
+class AltGlyphElement extends TextPositioningElement implements UriReference native "*SVGAltGlyphElement" {
 
-  /** @domName SVGAltGlyphElement.format */
+  /// @domName SVGAltGlyphElement.format; @docsEditable true
   String format;
 
-  /** @domName SVGAltGlyphElement.glyphRef */
+  /// @domName SVGAltGlyphElement.glyphRef; @docsEditable true
   String glyphRef;
 
   // From SVGURIReference
 
-  /** @domName SVGURIReference.href */
-  final SVGAnimatedString href;
+  /// @domName SVGURIReference.href; @docsEditable true
+  final AnimatedString href;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGAltGlyphItemElement
-class SVGAltGlyphItemElement extends SVGElement native "*SVGAltGlyphItemElement" {
+/// @domName SVGAltGlyphItemElement; @docsEditable true
+class AltGlyphItemElement extends SvgElement native "*SVGAltGlyphItemElement" {
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGAngle
-class SVGAngle native "*SVGAngle" {
+/// @domName SVGAngle; @docsEditable true
+class Angle native "*SVGAngle" {
 
   static const int SVG_ANGLETYPE_DEG = 2;
 
@@ -180,22 +182,22 @@
 
   static const int SVG_ANGLETYPE_UNSPECIFIED = 1;
 
-  /** @domName SVGAngle.unitType */
+  /// @domName SVGAngle.unitType; @docsEditable true
   final int unitType;
 
-  /** @domName SVGAngle.value */
+  /// @domName SVGAngle.value; @docsEditable true
   num value;
 
-  /** @domName SVGAngle.valueAsString */
+  /// @domName SVGAngle.valueAsString; @docsEditable true
   String valueAsString;
 
-  /** @domName SVGAngle.valueInSpecifiedUnits */
+  /// @domName SVGAngle.valueInSpecifiedUnits; @docsEditable true
   num valueInSpecifiedUnits;
 
-  /** @domName SVGAngle.convertToSpecifiedUnits */
+  /// @domName SVGAngle.convertToSpecifiedUnits; @docsEditable true
   void convertToSpecifiedUnits(int unitType) native;
 
-  /** @domName SVGAngle.newValueSpecifiedUnits */
+  /// @domName SVGAngle.newValueSpecifiedUnits; @docsEditable true
   void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -203,59 +205,67 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimateColorElement
-class SVGAnimateColorElement extends SVGAnimationElement native "*SVGAnimateColorElement" {
+/// @domName SVGAnimateColorElement; @docsEditable true
+class AnimateColorElement extends AnimationElement native "*SVGAnimateColorElement" {
+
+  factory AnimateColorElement() => _SvgElementFactoryProvider.createSvgElement_tag("animateColor");
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGAnimateElement
-class SVGAnimateElement extends SVGAnimationElement native "*SVGAnimateElement" {
+/// @domName SVGAnimateElement; @docsEditable true
+class AnimateElement extends AnimationElement native "*SVGAnimateElement" {
+
+  factory AnimateElement() => _SvgElementFactoryProvider.createSvgElement_tag("animate");
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGAnimateMotionElement
-class SVGAnimateMotionElement extends SVGAnimationElement native "*SVGAnimateMotionElement" {
+/// @domName SVGAnimateMotionElement; @docsEditable true
+class AnimateMotionElement extends AnimationElement native "*SVGAnimateMotionElement" {
+
+  factory AnimateMotionElement() => _SvgElementFactoryProvider.createSvgElement_tag("animateMotion");
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGAnimateTransformElement
-class SVGAnimateTransformElement extends SVGAnimationElement native "*SVGAnimateTransformElement" {
+/// @domName SVGAnimateTransformElement; @docsEditable true
+class AnimateTransformElement extends AnimationElement native "*SVGAnimateTransformElement" {
+
+  factory AnimateTransformElement() => _SvgElementFactoryProvider.createSvgElement_tag("animateTransform");
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGAnimatedAngle
-class SVGAnimatedAngle native "*SVGAnimatedAngle" {
+/// @domName SVGAnimatedAngle; @docsEditable true
+class AnimatedAngle native "*SVGAnimatedAngle" {
 
-  /** @domName SVGAnimatedAngle.animVal */
-  final SVGAngle animVal;
+  /// @domName SVGAnimatedAngle.animVal; @docsEditable true
+  final Angle animVal;
 
-  /** @domName SVGAnimatedAngle.baseVal */
-  final SVGAngle baseVal;
+  /// @domName SVGAnimatedAngle.baseVal; @docsEditable true
+  final Angle baseVal;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGAnimatedBoolean
-class SVGAnimatedBoolean native "*SVGAnimatedBoolean" {
+/// @domName SVGAnimatedBoolean; @docsEditable true
+class AnimatedBoolean native "*SVGAnimatedBoolean" {
 
-  /** @domName SVGAnimatedBoolean.animVal */
+  /// @domName SVGAnimatedBoolean.animVal; @docsEditable true
   final bool animVal;
 
-  /** @domName SVGAnimatedBoolean.baseVal */
+  /// @domName SVGAnimatedBoolean.baseVal; @docsEditable true
   bool baseVal;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -263,13 +273,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimatedEnumeration
-class SVGAnimatedEnumeration native "*SVGAnimatedEnumeration" {
+/// @domName SVGAnimatedEnumeration; @docsEditable true
+class AnimatedEnumeration native "*SVGAnimatedEnumeration" {
 
-  /** @domName SVGAnimatedEnumeration.animVal */
+  /// @domName SVGAnimatedEnumeration.animVal; @docsEditable true
   final int animVal;
 
-  /** @domName SVGAnimatedEnumeration.baseVal */
+  /// @domName SVGAnimatedEnumeration.baseVal; @docsEditable true
   int baseVal;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -277,13 +287,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimatedInteger
-class SVGAnimatedInteger native "*SVGAnimatedInteger" {
+/// @domName SVGAnimatedInteger; @docsEditable true
+class AnimatedInteger native "*SVGAnimatedInteger" {
 
-  /** @domName SVGAnimatedInteger.animVal */
+  /// @domName SVGAnimatedInteger.animVal; @docsEditable true
   final int animVal;
 
-  /** @domName SVGAnimatedInteger.baseVal */
+  /// @domName SVGAnimatedInteger.baseVal; @docsEditable true
   int baseVal;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -291,96 +301,98 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimatedLength
-class SVGAnimatedLength native "*SVGAnimatedLength" {
+/// @domName SVGAnimatedLength; @docsEditable true
+class AnimatedLength native "*SVGAnimatedLength" {
 
-  /** @domName SVGAnimatedLength.animVal */
-  final SVGLength animVal;
+  /// @domName SVGAnimatedLength.animVal; @docsEditable true
+  final Length animVal;
 
-  /** @domName SVGAnimatedLength.baseVal */
-  final SVGLength baseVal;
+  /// @domName SVGAnimatedLength.baseVal; @docsEditable true
+  final Length baseVal;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGAnimatedLengthList
-class SVGAnimatedLengthList implements JavaScriptIndexingBehavior, List<SVGAnimatedLength> native "*SVGAnimatedLengthList" {
+/// @domName SVGAnimatedLengthList; @docsEditable true
+class AnimatedLengthList implements JavaScriptIndexingBehavior, List<AnimatedLength> native "*SVGAnimatedLengthList" {
 
-  /** @domName SVGAnimatedLengthList.animVal */
-  final SVGLengthList animVal;
+  /// @domName SVGAnimatedLengthList.animVal; @docsEditable true
+  final LengthList animVal;
 
-  /** @domName SVGAnimatedLengthList.baseVal */
-  final SVGLengthList baseVal;
+  /// @domName SVGAnimatedLengthList.baseVal; @docsEditable true
+  final LengthList baseVal;
 
-  SVGAnimatedLength operator[](int index) => JS("SVGAnimatedLength", "#[#]", this, index);
+  AnimatedLength operator[](int index) => JS("AnimatedLength", "#[#]", this, index);
 
-  void operator[]=(int index, SVGAnimatedLength value) {
+  void operator[]=(int index, AnimatedLength value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
-  // -- start List<SVGAnimatedLength> mixins.
-  // SVGAnimatedLength is the element type.
+  // -- start List<AnimatedLength> mixins.
+  // AnimatedLength is the element type.
 
-  // From Iterable<SVGAnimatedLength>:
+  // From Iterable<AnimatedLength>:
 
-  Iterator<SVGAnimatedLength> iterator() {
+  Iterator<AnimatedLength> iterator() {
     // Note: NodeLists are not fixed size. And most probably length shouldn't
     // be cached in both iterator _and_ forEach method. For now caching it
     // for consistency.
-    return new FixedSizeListIterator<SVGAnimatedLength>(this);
+    return new FixedSizeListIterator<AnimatedLength>(this);
   }
 
-  // From Collection<SVGAnimatedLength>:
+  // From Collection<AnimatedLength>:
 
-  void add(SVGAnimatedLength value) {
+  void add(AnimatedLength value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addLast(SVGAnimatedLength value) {
+  void addLast(AnimatedLength value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addAll(Collection<SVGAnimatedLength> collection) {
+  void addAll(Collection<AnimatedLength> collection) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  bool contains(SVGAnimatedLength element) => _Collections.contains(this, element);
+  bool contains(AnimatedLength element) => _Collections.contains(this, element);
 
-  void forEach(void f(SVGAnimatedLength element)) => _Collections.forEach(this, f);
+  void forEach(void f(AnimatedLength element)) => _Collections.forEach(this, f);
 
-  Collection map(f(SVGAnimatedLength element)) => _Collections.map(this, [], f);
+  Collection map(f(AnimatedLength element)) => _Collections.map(this, [], f);
 
-  Collection<SVGAnimatedLength> filter(bool f(SVGAnimatedLength element)) =>
-     _Collections.filter(this, <SVGAnimatedLength>[], f);
+  Collection<AnimatedLength> filter(bool f(AnimatedLength element)) =>
+     _Collections.filter(this, <AnimatedLength>[], f);
 
-  bool every(bool f(SVGAnimatedLength element)) => _Collections.every(this, f);
+  bool every(bool f(AnimatedLength element)) => _Collections.every(this, f);
 
-  bool some(bool f(SVGAnimatedLength element)) => _Collections.some(this, f);
+  bool some(bool f(AnimatedLength element)) => _Collections.some(this, f);
 
   bool get isEmpty => this.length == 0;
 
-  // From List<SVGAnimatedLength>:
+  // From List<AnimatedLength>:
 
-  void sort([Comparator<SVGAnimatedLength> compare = Comparable.compare]) {
+  void sort([Comparator<AnimatedLength> compare = Comparable.compare]) {
     throw new UnsupportedError("Cannot sort immutable List.");
   }
 
-  int indexOf(SVGAnimatedLength element, [int start = 0]) =>
+  int indexOf(AnimatedLength element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
-  int lastIndexOf(SVGAnimatedLength element, [int start]) {
+  int lastIndexOf(AnimatedLength element, [int start]) {
     if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGAnimatedLength get last => this[length - 1];
+  AnimatedLength get first => this[0];
 
-  SVGAnimatedLength removeLast() {
+  AnimatedLength get last => this[length - 1];
+
+  AnimatedLength removeLast() {
     throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
-  void setRange(int start, int rangeLength, List<SVGAnimatedLength> from, [int startFrom]) {
+  void setRange(int start, int rangeLength, List<AnimatedLength> from, [int startFrom]) {
     throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
@@ -388,27 +400,27 @@
     throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
-  void insertRange(int start, int rangeLength, [SVGAnimatedLength initialValue]) {
+  void insertRange(int start, int rangeLength, [AnimatedLength initialValue]) {
     throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
-  List<SVGAnimatedLength> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGAnimatedLength>[]);
+  List<AnimatedLength> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <AnimatedLength>[]);
 
-  // -- end List<SVGAnimatedLength> mixins.
+  // -- end List<AnimatedLength> mixins.
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGAnimatedNumber
-class SVGAnimatedNumber native "*SVGAnimatedNumber" {
+/// @domName SVGAnimatedNumber; @docsEditable true
+class AnimatedNumber native "*SVGAnimatedNumber" {
 
-  /** @domName SVGAnimatedNumber.animVal */
+  /// @domName SVGAnimatedNumber.animVal; @docsEditable true
   final num animVal;
 
-  /** @domName SVGAnimatedNumber.baseVal */
+  /// @domName SVGAnimatedNumber.baseVal; @docsEditable true
   num baseVal;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -416,82 +428,84 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimatedNumberList
-class SVGAnimatedNumberList implements JavaScriptIndexingBehavior, List<SVGAnimatedNumber> native "*SVGAnimatedNumberList" {
+/// @domName SVGAnimatedNumberList; @docsEditable true
+class AnimatedNumberList implements JavaScriptIndexingBehavior, List<AnimatedNumber> native "*SVGAnimatedNumberList" {
 
-  /** @domName SVGAnimatedNumberList.animVal */
-  final SVGNumberList animVal;
+  /// @domName SVGAnimatedNumberList.animVal; @docsEditable true
+  final NumberList animVal;
 
-  /** @domName SVGAnimatedNumberList.baseVal */
-  final SVGNumberList baseVal;
+  /// @domName SVGAnimatedNumberList.baseVal; @docsEditable true
+  final NumberList baseVal;
 
-  SVGAnimatedNumber operator[](int index) => JS("SVGAnimatedNumber", "#[#]", this, index);
+  AnimatedNumber operator[](int index) => JS("AnimatedNumber", "#[#]", this, index);
 
-  void operator[]=(int index, SVGAnimatedNumber value) {
+  void operator[]=(int index, AnimatedNumber value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
-  // -- start List<SVGAnimatedNumber> mixins.
-  // SVGAnimatedNumber is the element type.
+  // -- start List<AnimatedNumber> mixins.
+  // AnimatedNumber is the element type.
 
-  // From Iterable<SVGAnimatedNumber>:
+  // From Iterable<AnimatedNumber>:
 
-  Iterator<SVGAnimatedNumber> iterator() {
+  Iterator<AnimatedNumber> iterator() {
     // Note: NodeLists are not fixed size. And most probably length shouldn't
     // be cached in both iterator _and_ forEach method. For now caching it
     // for consistency.
-    return new FixedSizeListIterator<SVGAnimatedNumber>(this);
+    return new FixedSizeListIterator<AnimatedNumber>(this);
   }
 
-  // From Collection<SVGAnimatedNumber>:
+  // From Collection<AnimatedNumber>:
 
-  void add(SVGAnimatedNumber value) {
+  void add(AnimatedNumber value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addLast(SVGAnimatedNumber value) {
+  void addLast(AnimatedNumber value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addAll(Collection<SVGAnimatedNumber> collection) {
+  void addAll(Collection<AnimatedNumber> collection) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  bool contains(SVGAnimatedNumber element) => _Collections.contains(this, element);
+  bool contains(AnimatedNumber element) => _Collections.contains(this, element);
 
-  void forEach(void f(SVGAnimatedNumber element)) => _Collections.forEach(this, f);
+  void forEach(void f(AnimatedNumber element)) => _Collections.forEach(this, f);
 
-  Collection map(f(SVGAnimatedNumber element)) => _Collections.map(this, [], f);
+  Collection map(f(AnimatedNumber element)) => _Collections.map(this, [], f);
 
-  Collection<SVGAnimatedNumber> filter(bool f(SVGAnimatedNumber element)) =>
-     _Collections.filter(this, <SVGAnimatedNumber>[], f);
+  Collection<AnimatedNumber> filter(bool f(AnimatedNumber element)) =>
+     _Collections.filter(this, <AnimatedNumber>[], f);
 
-  bool every(bool f(SVGAnimatedNumber element)) => _Collections.every(this, f);
+  bool every(bool f(AnimatedNumber element)) => _Collections.every(this, f);
 
-  bool some(bool f(SVGAnimatedNumber element)) => _Collections.some(this, f);
+  bool some(bool f(AnimatedNumber element)) => _Collections.some(this, f);
 
   bool get isEmpty => this.length == 0;
 
-  // From List<SVGAnimatedNumber>:
+  // From List<AnimatedNumber>:
 
-  void sort([Comparator<SVGAnimatedNumber> compare = Comparable.compare]) {
+  void sort([Comparator<AnimatedNumber> compare = Comparable.compare]) {
     throw new UnsupportedError("Cannot sort immutable List.");
   }
 
-  int indexOf(SVGAnimatedNumber element, [int start = 0]) =>
+  int indexOf(AnimatedNumber element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
-  int lastIndexOf(SVGAnimatedNumber element, [int start]) {
+  int lastIndexOf(AnimatedNumber element, [int start]) {
     if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGAnimatedNumber get last => this[length - 1];
+  AnimatedNumber get first => this[0];
 
-  SVGAnimatedNumber removeLast() {
+  AnimatedNumber get last => this[length - 1];
+
+  AnimatedNumber removeLast() {
     throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
-  void setRange(int start, int rangeLength, List<SVGAnimatedNumber> from, [int startFrom]) {
+  void setRange(int start, int rangeLength, List<AnimatedNumber> from, [int startFrom]) {
     throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
@@ -499,55 +513,55 @@
     throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
-  void insertRange(int start, int rangeLength, [SVGAnimatedNumber initialValue]) {
+  void insertRange(int start, int rangeLength, [AnimatedNumber initialValue]) {
     throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
-  List<SVGAnimatedNumber> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGAnimatedNumber>[]);
+  List<AnimatedNumber> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <AnimatedNumber>[]);
 
-  // -- end List<SVGAnimatedNumber> mixins.
+  // -- end List<AnimatedNumber> mixins.
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGAnimatedPreserveAspectRatio
-class SVGAnimatedPreserveAspectRatio native "*SVGAnimatedPreserveAspectRatio" {
+/// @domName SVGAnimatedPreserveAspectRatio; @docsEditable true
+class AnimatedPreserveAspectRatio native "*SVGAnimatedPreserveAspectRatio" {
 
-  /** @domName SVGAnimatedPreserveAspectRatio.animVal */
-  final SVGPreserveAspectRatio animVal;
+  /// @domName SVGAnimatedPreserveAspectRatio.animVal; @docsEditable true
+  final PreserveAspectRatio animVal;
 
-  /** @domName SVGAnimatedPreserveAspectRatio.baseVal */
-  final SVGPreserveAspectRatio baseVal;
+  /// @domName SVGAnimatedPreserveAspectRatio.baseVal; @docsEditable true
+  final PreserveAspectRatio baseVal;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGAnimatedRect
-class SVGAnimatedRect native "*SVGAnimatedRect" {
+/// @domName SVGAnimatedRect; @docsEditable true
+class AnimatedRect native "*SVGAnimatedRect" {
 
-  /** @domName SVGAnimatedRect.animVal */
-  final SVGRect animVal;
+  /// @domName SVGAnimatedRect.animVal; @docsEditable true
+  final Rect animVal;
 
-  /** @domName SVGAnimatedRect.baseVal */
-  final SVGRect baseVal;
+  /// @domName SVGAnimatedRect.baseVal; @docsEditable true
+  final Rect baseVal;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGAnimatedString
-class SVGAnimatedString native "*SVGAnimatedString" {
+/// @domName SVGAnimatedString; @docsEditable true
+class AnimatedString native "*SVGAnimatedString" {
 
-  /** @domName SVGAnimatedString.animVal */
+  /// @domName SVGAnimatedString.animVal; @docsEditable true
   final String animVal;
 
-  /** @domName SVGAnimatedString.baseVal */
+  /// @domName SVGAnimatedString.baseVal; @docsEditable true
   String baseVal;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -555,82 +569,84 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGAnimatedTransformList
-class SVGAnimatedTransformList implements JavaScriptIndexingBehavior, List<SVGAnimateTransformElement> native "*SVGAnimatedTransformList" {
+/// @domName SVGAnimatedTransformList; @docsEditable true
+class AnimatedTransformList implements JavaScriptIndexingBehavior, List<AnimateTransformElement> native "*SVGAnimatedTransformList" {
 
-  /** @domName SVGAnimatedTransformList.animVal */
-  final SVGTransformList animVal;
+  /// @domName SVGAnimatedTransformList.animVal; @docsEditable true
+  final TransformList animVal;
 
-  /** @domName SVGAnimatedTransformList.baseVal */
-  final SVGTransformList baseVal;
+  /// @domName SVGAnimatedTransformList.baseVal; @docsEditable true
+  final TransformList baseVal;
 
-  SVGAnimateTransformElement operator[](int index) => JS("SVGAnimateTransformElement", "#[#]", this, index);
+  AnimateTransformElement operator[](int index) => JS("AnimateTransformElement", "#[#]", this, index);
 
-  void operator[]=(int index, SVGAnimateTransformElement value) {
+  void operator[]=(int index, AnimateTransformElement value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
-  // -- start List<SVGAnimateTransformElement> mixins.
-  // SVGAnimateTransformElement is the element type.
+  // -- start List<AnimateTransformElement> mixins.
+  // AnimateTransformElement is the element type.
 
-  // From Iterable<SVGAnimateTransformElement>:
+  // From Iterable<AnimateTransformElement>:
 
-  Iterator<SVGAnimateTransformElement> iterator() {
+  Iterator<AnimateTransformElement> iterator() {
     // Note: NodeLists are not fixed size. And most probably length shouldn't
     // be cached in both iterator _and_ forEach method. For now caching it
     // for consistency.
-    return new FixedSizeListIterator<SVGAnimateTransformElement>(this);
+    return new FixedSizeListIterator<AnimateTransformElement>(this);
   }
 
-  // From Collection<SVGAnimateTransformElement>:
+  // From Collection<AnimateTransformElement>:
 
-  void add(SVGAnimateTransformElement value) {
+  void add(AnimateTransformElement value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addLast(SVGAnimateTransformElement value) {
+  void addLast(AnimateTransformElement value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addAll(Collection<SVGAnimateTransformElement> collection) {
+  void addAll(Collection<AnimateTransformElement> collection) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  bool contains(SVGAnimateTransformElement element) => _Collections.contains(this, element);
+  bool contains(AnimateTransformElement element) => _Collections.contains(this, element);
 
-  void forEach(void f(SVGAnimateTransformElement element)) => _Collections.forEach(this, f);
+  void forEach(void f(AnimateTransformElement element)) => _Collections.forEach(this, f);
 
-  Collection map(f(SVGAnimateTransformElement element)) => _Collections.map(this, [], f);
+  Collection map(f(AnimateTransformElement element)) => _Collections.map(this, [], f);
 
-  Collection<SVGAnimateTransformElement> filter(bool f(SVGAnimateTransformElement element)) =>
-     _Collections.filter(this, <SVGAnimateTransformElement>[], f);
+  Collection<AnimateTransformElement> filter(bool f(AnimateTransformElement element)) =>
+     _Collections.filter(this, <AnimateTransformElement>[], f);
 
-  bool every(bool f(SVGAnimateTransformElement element)) => _Collections.every(this, f);
+  bool every(bool f(AnimateTransformElement element)) => _Collections.every(this, f);
 
-  bool some(bool f(SVGAnimateTransformElement element)) => _Collections.some(this, f);
+  bool some(bool f(AnimateTransformElement element)) => _Collections.some(this, f);
 
   bool get isEmpty => this.length == 0;
 
-  // From List<SVGAnimateTransformElement>:
+  // From List<AnimateTransformElement>:
 
-  void sort([Comparator<SVGAnimateTransformElement> compare = Comparable.compare]) {
+  void sort([Comparator<AnimateTransformElement> compare = Comparable.compare]) {
     throw new UnsupportedError("Cannot sort immutable List.");
   }
 
-  int indexOf(SVGAnimateTransformElement element, [int start = 0]) =>
+  int indexOf(AnimateTransformElement element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
-  int lastIndexOf(SVGAnimateTransformElement element, [int start]) {
+  int lastIndexOf(AnimateTransformElement element, [int start]) {
     if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGAnimateTransformElement get last => this[length - 1];
+  AnimateTransformElement get first => this[0];
 
-  SVGAnimateTransformElement removeLast() {
+  AnimateTransformElement get last => this[length - 1];
+
+  AnimateTransformElement removeLast() {
     throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
-  void setRange(int start, int rangeLength, List<SVGAnimateTransformElement> from, [int startFrom]) {
+  void setRange(int start, int rangeLength, List<AnimateTransformElement> from, [int startFrom]) {
     throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
@@ -638,66 +654,68 @@
     throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
-  void insertRange(int start, int rangeLength, [SVGAnimateTransformElement initialValue]) {
+  void insertRange(int start, int rangeLength, [AnimateTransformElement initialValue]) {
     throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
-  List<SVGAnimateTransformElement> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGAnimateTransformElement>[]);
+  List<AnimateTransformElement> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <AnimateTransformElement>[]);
 
-  // -- end List<SVGAnimateTransformElement> mixins.
+  // -- end List<AnimateTransformElement> mixins.
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGAnimationElement
-class SVGAnimationElement extends SVGElement implements ElementTimeControl, SVGTests, SVGExternalResourcesRequired native "*SVGAnimationElement" {
+/// @domName SVGAnimationElement; @docsEditable true
+class AnimationElement extends SvgElement implements Tests, ElementTimeControl, ExternalResourcesRequired native "*SVGAnimationElement" {
 
-  /** @domName SVGAnimationElement.targetElement */
-  final SVGElement targetElement;
+  factory AnimationElement() => _SvgElementFactoryProvider.createSvgElement_tag("animation");
 
-  /** @domName SVGAnimationElement.getCurrentTime */
+  /// @domName SVGAnimationElement.targetElement; @docsEditable true
+  final SvgElement targetElement;
+
+  /// @domName SVGAnimationElement.getCurrentTime; @docsEditable true
   num getCurrentTime() native;
 
-  /** @domName SVGAnimationElement.getSimpleDuration */
+  /// @domName SVGAnimationElement.getSimpleDuration; @docsEditable true
   num getSimpleDuration() native;
 
-  /** @domName SVGAnimationElement.getStartTime */
+  /// @domName SVGAnimationElement.getStartTime; @docsEditable true
   num getStartTime() native;
 
   // From ElementTimeControl
 
-  /** @domName ElementTimeControl.beginElement */
+  /// @domName ElementTimeControl.beginElement; @docsEditable true
   void beginElement() native;
 
-  /** @domName ElementTimeControl.beginElementAt */
+  /// @domName ElementTimeControl.beginElementAt; @docsEditable true
   void beginElementAt(num offset) native;
 
-  /** @domName ElementTimeControl.endElement */
+  /// @domName ElementTimeControl.endElement; @docsEditable true
   void endElement() native;
 
-  /** @domName ElementTimeControl.endElementAt */
+  /// @domName ElementTimeControl.endElementAt; @docsEditable true
   void endElementAt(num offset) native;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -705,162 +723,166 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGCircleElement
-class SVGCircleElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGCircleElement" {
+/// @domName SVGCircleElement; @docsEditable true
+class CircleElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGCircleElement" {
 
-  /** @domName SVGCircleElement.cx */
-  final SVGAnimatedLength cx;
+  factory CircleElement() => _SvgElementFactoryProvider.createSvgElement_tag("circle");
 
-  /** @domName SVGCircleElement.cy */
-  final SVGAnimatedLength cy;
+  /// @domName SVGCircleElement.cx; @docsEditable true
+  final AnimatedLength cx;
 
-  /** @domName SVGCircleElement.r */
-  final SVGAnimatedLength r;
+  /// @domName SVGCircleElement.cy; @docsEditable true
+  final AnimatedLength cy;
+
+  /// @domName SVGCircleElement.r; @docsEditable true
+  final AnimatedLength r;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGLocatable
 
-  /** @domName SVGLocatable.farthestViewportElement */
-  final SVGElement farthestViewportElement;
+  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  final SvgElement farthestViewportElement;
 
-  /** @domName SVGLocatable.nearestViewportElement */
-  final SVGElement nearestViewportElement;
+  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  final SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native;
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox() native;
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native;
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM() native;
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native;
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM() native;
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native;
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /** @domName SVGTransformable.transform */
-  final SVGAnimatedTransformList transform;
+  /// @domName SVGTransformable.transform; @docsEditable true
+  final AnimatedTransformList 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
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGClipPathElement
-class SVGClipPathElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGClipPathElement" {
+/// @domName SVGClipPathElement; @docsEditable true
+class ClipPathElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGClipPathElement" {
 
-  /** @domName SVGClipPathElement.clipPathUnits */
-  final SVGAnimatedEnumeration clipPathUnits;
+  factory ClipPathElement() => _SvgElementFactoryProvider.createSvgElement_tag("clipPath");
+
+  /// @domName SVGClipPathElement.clipPathUnits; @docsEditable true
+  final AnimatedEnumeration clipPathUnits;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGLocatable
 
-  /** @domName SVGLocatable.farthestViewportElement */
-  final SVGElement farthestViewportElement;
+  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  final SvgElement farthestViewportElement;
 
-  /** @domName SVGLocatable.nearestViewportElement */
-  final SVGElement nearestViewportElement;
+  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  final SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native;
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox() native;
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native;
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM() native;
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native;
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM() native;
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native;
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /** @domName SVGTransformable.transform */
-  final SVGAnimatedTransformList transform;
+  /// @domName SVGTransformable.transform; @docsEditable true
+  final AnimatedTransformList 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
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGColor
-class SVGColor extends CSSValue native "*SVGColor" {
+/// @domName SVGColor; @docsEditable true
+class Color extends CSSValue native "*SVGColor" {
 
   static const int SVG_COLORTYPE_CURRENTCOLOR = 3;
 
@@ -870,19 +892,19 @@
 
   static const int SVG_COLORTYPE_UNKNOWN = 0;
 
-  /** @domName SVGColor.colorType */
+  /// @domName SVGColor.colorType; @docsEditable true
   final int colorType;
 
-  /** @domName SVGColor.rgbColor */
+  /// @domName SVGColor.rgbColor; @docsEditable true
   final RGBColor rgbColor;
 
-  /** @domName SVGColor.setColor */
+  /// @domName SVGColor.setColor; @docsEditable true
   void setColor(int colorType, String rgbColor, String iccColor) native;
 
-  /** @domName SVGColor.setRGBColor */
+  /// @domName SVGColor.setRGBColor; @docsEditable true
   void setRGBColor(String rgbColor) native;
 
-  /** @domName SVGColor.setRGBColorICCColor */
+  /// @domName SVGColor.setRGBColorICCColor; @docsEditable true
   void setRGBColorICCColor(String rgbColor, String iccColor) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -890,8 +912,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGComponentTransferFunctionElement
-class SVGComponentTransferFunctionElement extends SVGElement native "*SVGComponentTransferFunctionElement" {
+/// @domName SVGComponentTransferFunctionElement; @docsEditable true
+class ComponentTransferFunctionElement extends SvgElement native "*SVGComponentTransferFunctionElement" {
 
   static const int SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3;
 
@@ -905,161 +927,167 @@
 
   static const int SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0;
 
-  /** @domName SVGComponentTransferFunctionElement.amplitude */
-  final SVGAnimatedNumber amplitude;
+  /// @domName SVGComponentTransferFunctionElement.amplitude; @docsEditable true
+  final AnimatedNumber amplitude;
 
-  /** @domName SVGComponentTransferFunctionElement.exponent */
-  final SVGAnimatedNumber exponent;
+  /// @domName SVGComponentTransferFunctionElement.exponent; @docsEditable true
+  final AnimatedNumber exponent;
 
-  /** @domName SVGComponentTransferFunctionElement.intercept */
-  final SVGAnimatedNumber intercept;
+  /// @domName SVGComponentTransferFunctionElement.intercept; @docsEditable true
+  final AnimatedNumber intercept;
 
-  /** @domName SVGComponentTransferFunctionElement.offset */
-  final SVGAnimatedNumber offset;
+  /// @domName SVGComponentTransferFunctionElement.offset; @docsEditable true
+  final AnimatedNumber offset;
 
-  /** @domName SVGComponentTransferFunctionElement.slope */
-  final SVGAnimatedNumber slope;
+  /// @domName SVGComponentTransferFunctionElement.slope; @docsEditable true
+  final AnimatedNumber slope;
 
-  /** @domName SVGComponentTransferFunctionElement.tableValues */
-  final SVGAnimatedNumberList tableValues;
+  /// @domName SVGComponentTransferFunctionElement.tableValues; @docsEditable true
+  final AnimatedNumberList tableValues;
 
-  /** @domName SVGComponentTransferFunctionElement.type */
-  final SVGAnimatedEnumeration type;
+  /// @domName SVGComponentTransferFunctionElement.type; @docsEditable true
+  final AnimatedEnumeration type;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGCursorElement
-class SVGCursorElement extends SVGElement implements SVGURIReference, SVGTests, SVGExternalResourcesRequired native "*SVGCursorElement" {
+/// @domName SVGCursorElement; @docsEditable true
+class CursorElement extends SvgElement implements UriReference, Tests, ExternalResourcesRequired native "*SVGCursorElement" {
 
-  /** @domName SVGCursorElement.x */
-  final SVGAnimatedLength x;
+  factory CursorElement() => _SvgElementFactoryProvider.createSvgElement_tag("cursor");
 
-  /** @domName SVGCursorElement.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGCursorElement.x; @docsEditable true
+  final AnimatedLength x;
+
+  /// @domName SVGCursorElement.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 
   // From SVGURIReference
 
-  /** @domName SVGURIReference.href */
-  final SVGAnimatedString href;
+  /// @domName SVGURIReference.href; @docsEditable true
+  final AnimatedString href;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGDefsElement
-class SVGDefsElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGDefsElement" {
+/// @domName SVGDefsElement; @docsEditable true
+class DefsElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGDefsElement" {
+
+  factory DefsElement() => _SvgElementFactoryProvider.createSvgElement_tag("defs");
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGLocatable
 
-  /** @domName SVGLocatable.farthestViewportElement */
-  final SVGElement farthestViewportElement;
+  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  final SvgElement farthestViewportElement;
 
-  /** @domName SVGLocatable.nearestViewportElement */
-  final SVGElement nearestViewportElement;
+  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  final SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native;
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox() native;
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native;
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM() native;
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native;
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM() native;
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native;
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /** @domName SVGTransformable.transform */
-  final SVGAnimatedTransformList transform;
+  /// @domName SVGTransformable.transform; @docsEditable true
+  final AnimatedTransformList 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
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGDescElement
-class SVGDescElement extends SVGElement implements SVGLangSpace, SVGStylable native "*SVGDescElement" {
+/// @domName SVGDescElement; @docsEditable true
+class DescElement extends SvgElement implements Stylable, LangSpace native "*SVGDescElement" {
+
+  factory DescElement() => _SvgElementFactoryProvider.createSvgElement_tag("desc");
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1067,152 +1095,41 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGDocument
-class SVGDocument extends Document native "*SVGDocument" {
+/// @domName SVGElementInstance; @docsEditable true
+class ElementInstance extends EventTarget native "*SVGElementInstance" {
 
-  /** @domName SVGDocument.rootElement */
-  final SVGSVGElement rootElement;
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  ElementInstanceEvents get on =>
+    new ElementInstanceEvents(this);
 
-  /** @domName SVGDocument.createEvent */
-  Event $dom_createEvent(String eventType) native "createEvent";
-}
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
+  /// @domName SVGElementInstance.childNodes; @docsEditable true
+  @Returns('_ElementInstanceList') @Creates('_ElementInstanceList')
+  final List<ElementInstance> childNodes;
 
+  /// @domName SVGElementInstance.correspondingElement; @docsEditable true
+  final SvgElement correspondingElement;
 
-class _AttributeClassSet extends CssClassSet {
-  final Element _element;
+  /// @domName SVGElementInstance.correspondingUseElement; @docsEditable true
+  final UseElement correspondingUseElement;
 
-  _AttributeClassSet(this._element);
+  /// @domName SVGElementInstance.firstChild; @docsEditable true
+  final ElementInstance firstChild;
 
-  Set<String> readClasses() {
-    var classname = _element.attributes['class'];
+  /// @domName SVGElementInstance.lastChild; @docsEditable true
+  final ElementInstance lastChild;
 
-    Set<String> s = new Set<String>();
-    if (classname == null) {
-      return s;
-    }
-    for (String name in classname.split(' ')) {
-      String trimmed = name.trim();
-      if (!trimmed.isEmpty) {
-        s.add(trimmed);
-      }
-    }
-    return s;
-  }
+  /// @domName SVGElementInstance.nextSibling; @docsEditable true
+  final ElementInstance nextSibling;
 
-  void writeClasses(Set s) {
-    List list = new List.from(s);
-    _element.attributes['class'] = Strings.join(list, ' ');
-  }
+  /// @domName SVGElementInstance.parentNode; @docsEditable true
+  final ElementInstance parentNode;
+
+  /// @domName SVGElementInstance.previousSibling; @docsEditable true
+  final ElementInstance previousSibling;
 }
 
-class SVGElement extends Element native "*SVGElement" {
-  factory SVGElement.tag(String tag) =>
-      _SVGElementFactoryProvider.createSVGElement_tag(tag);
-  factory SVGElement.svg(String svg) =>
-      _SVGElementFactoryProvider.createSVGElement_svg(svg);
-
-  _AttributeClassSet _cssClassSet;
-  CssClassSet get classes {
-    if (_cssClassSet == null) {
-      _cssClassSet = new _AttributeClassSet(this);
-    }
-    return _cssClassSet;
-  }
-
-  List<Element> get elements => new FilteredElementList(this);
-
-  void set elements(Collection<Element> value) {
-    final elements = this.elements;
-    elements.clear();
-    elements.addAll(value);
-  }
-
-  String get outerHTML {
-    final container = new Element.tag("div");
-    final SVGElement cloned = this.clone(true);
-    container.elements.add(cloned);
-    return container.innerHTML;
-  }
-
-  String get innerHTML {
-    final container = new Element.tag("div");
-    final SVGElement cloned = this.clone(true);
-    container.elements.addAll(cloned.elements);
-    return container.innerHTML;
-  }
-
-  void set innerHTML(String svg) {
-    final container = new Element.tag("div");
-    // Wrap the SVG string in <svg> so that SVGElements are created, rather than
-    // HTMLElements.
-    container.innerHTML = '<svg version="1.1">$svg</svg>';
-    this.elements = container.elements[0].elements;
-  }
-
-
-  // Shadowing definition.
-  /** @domName SVGElement.id */
-  String get id => JS("String", "#.id", this);
-
-  /** @domName SVGElement.id */
-  void set id(String value) {
-    JS("void", "#.id = #", this, value);
-  }
-
-  /** @domName SVGElement.ownerSVGElement */
-  final SVGSVGElement ownerSVGElement;
-
-  /** @domName SVGElement.viewportElement */
-  final SVGElement viewportElement;
-
-  /** @domName SVGElement.xmlbase */
-  String xmlbase;
-
-}
-// Copyright (c) 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.
-
-
-/// @domName SVGElementInstance
-class SVGElementInstance extends EventTarget native "*SVGElementInstance" {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  SVGElementInstanceEvents get on =>
-    new SVGElementInstanceEvents(this);
-
-  /** @domName SVGElementInstance.childNodes */
-  final List<SVGElementInstance> childNodes;
-
-  /** @domName SVGElementInstance.correspondingElement */
-  final SVGElement correspondingElement;
-
-  /** @domName SVGElementInstance.correspondingUseElement */
-  final SVGUseElement correspondingUseElement;
-
-  /** @domName SVGElementInstance.firstChild */
-  final SVGElementInstance firstChild;
-
-  /** @domName SVGElementInstance.lastChild */
-  final SVGElementInstance lastChild;
-
-  /** @domName SVGElementInstance.nextSibling */
-  final SVGElementInstance nextSibling;
-
-  /** @domName SVGElementInstance.parentNode */
-  final SVGElementInstance parentNode;
-
-  /** @domName SVGElementInstance.previousSibling */
-  final SVGElementInstance previousSibling;
-}
-
-class SVGElementInstanceEvents extends Events {
-  SVGElementInstanceEvents(EventTarget _ptr) : super(_ptr);
+class ElementInstanceEvents extends Events {
+  ElementInstanceEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get abort => this['abort'];
 
@@ -1299,91 +1216,93 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGEllipseElement
-class SVGEllipseElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGEllipseElement" {
+/// @domName SVGEllipseElement; @docsEditable true
+class EllipseElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGEllipseElement" {
 
-  /** @domName SVGEllipseElement.cx */
-  final SVGAnimatedLength cx;
+  factory EllipseElement() => _SvgElementFactoryProvider.createSvgElement_tag("ellipse");
 
-  /** @domName SVGEllipseElement.cy */
-  final SVGAnimatedLength cy;
+  /// @domName SVGEllipseElement.cx; @docsEditable true
+  final AnimatedLength cx;
 
-  /** @domName SVGEllipseElement.rx */
-  final SVGAnimatedLength rx;
+  /// @domName SVGEllipseElement.cy; @docsEditable true
+  final AnimatedLength cy;
 
-  /** @domName SVGEllipseElement.ry */
-  final SVGAnimatedLength ry;
+  /// @domName SVGEllipseElement.rx; @docsEditable true
+  final AnimatedLength rx;
+
+  /// @domName SVGEllipseElement.ry; @docsEditable true
+  final AnimatedLength ry;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGLocatable
 
-  /** @domName SVGLocatable.farthestViewportElement */
-  final SVGElement farthestViewportElement;
+  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  final SvgElement farthestViewportElement;
 
-  /** @domName SVGLocatable.nearestViewportElement */
-  final SVGElement nearestViewportElement;
+  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  final SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native;
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox() native;
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native;
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM() native;
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native;
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM() native;
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native;
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /** @domName SVGTransformable.transform */
-  final SVGAnimatedTransformList transform;
+  /// @domName SVGTransformable.transform; @docsEditable true
+  final AnimatedTransformList 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
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGException
-class SVGException native "*SVGException" {
+/// @domName SVGException; @docsEditable true
+class Exception native "*SVGException" {
 
   static const int SVG_INVALID_VALUE_ERR = 1;
 
@@ -1391,16 +1310,16 @@
 
   static const int SVG_WRONG_TYPE_ERR = 0;
 
-  /** @domName SVGException.code */
+  /// @domName SVGException.code; @docsEditable true
   final int code;
 
-  /** @domName SVGException.message */
+  /// @domName SVGException.message; @docsEditable true
   final String message;
 
-  /** @domName SVGException.name */
+  /// @domName SVGException.name; @docsEditable true
   final String name;
 
-  /** @domName SVGException.toString */
+  /// @domName SVGException.toString; @docsEditable true
   String toString() native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1409,17 +1328,17 @@
 
 
 /// @domName SVGExternalResourcesRequired
-abstract class SVGExternalResourcesRequired {
+abstract class ExternalResourcesRequired {
 
-  SVGAnimatedBoolean externalResourcesRequired;
+  AnimatedBoolean externalResourcesRequired;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGFEBlendElement
-class SVGFEBlendElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEBlendElement" {
+/// @domName SVGFEBlendElement; @docsEditable true
+class FEBlendElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEBlendElement" {
 
   static const int SVG_FEBLEND_MODE_DARKEN = 4;
 
@@ -1433,41 +1352,41 @@
 
   static const int SVG_FEBLEND_MODE_UNKNOWN = 0;
 
-  /** @domName SVGFEBlendElement.in1 */
-  final SVGAnimatedString in1;
+  /// @domName SVGFEBlendElement.in1; @docsEditable true
+  final AnimatedString in1;
 
-  /** @domName SVGFEBlendElement.in2 */
-  final SVGAnimatedString in2;
+  /// @domName SVGFEBlendElement.in2; @docsEditable true
+  final AnimatedString in2;
 
-  /** @domName SVGFEBlendElement.mode */
-  final SVGAnimatedEnumeration mode;
+  /// @domName SVGFEBlendElement.mode; @docsEditable true
+  final AnimatedEnumeration mode;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  final SVGAnimatedString result;
+  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  final AnimatedString result;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1475,8 +1394,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEColorMatrixElement
-class SVGFEColorMatrixElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEColorMatrixElement" {
+/// @domName SVGFEColorMatrixElement; @docsEditable true
+class FEColorMatrixElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEColorMatrixElement" {
 
   static const int SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3;
 
@@ -1488,41 +1407,41 @@
 
   static const int SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
 
-  /** @domName SVGFEColorMatrixElement.in1 */
-  final SVGAnimatedString in1;
+  /// @domName SVGFEColorMatrixElement.in1; @docsEditable true
+  final AnimatedString in1;
 
-  /** @domName SVGFEColorMatrixElement.type */
-  final SVGAnimatedEnumeration type;
+  /// @domName SVGFEColorMatrixElement.type; @docsEditable true
+  final AnimatedEnumeration type;
 
-  /** @domName SVGFEColorMatrixElement.values */
-  final SVGAnimatedNumberList values;
+  /// @domName SVGFEColorMatrixElement.values; @docsEditable true
+  final AnimatedNumberList values;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  final SVGAnimatedString result;
+  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  final AnimatedString result;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1530,38 +1449,38 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEComponentTransferElement
-class SVGFEComponentTransferElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEComponentTransferElement" {
+/// @domName SVGFEComponentTransferElement; @docsEditable true
+class FEComponentTransferElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEComponentTransferElement" {
 
-  /** @domName SVGFEComponentTransferElement.in1 */
-  final SVGAnimatedString in1;
+  /// @domName SVGFEComponentTransferElement.in1; @docsEditable true
+  final AnimatedString in1;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  final SVGAnimatedString result;
+  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  final AnimatedString result;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1569,8 +1488,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFECompositeElement
-class SVGFECompositeElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFECompositeElement" {
+/// @domName SVGFECompositeElement; @docsEditable true
+class FECompositeElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFECompositeElement" {
 
   static const int SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6;
 
@@ -1586,53 +1505,53 @@
 
   static const int SVG_FECOMPOSITE_OPERATOR_XOR = 5;
 
-  /** @domName SVGFECompositeElement.in1 */
-  final SVGAnimatedString in1;
+  /// @domName SVGFECompositeElement.in1; @docsEditable true
+  final AnimatedString in1;
 
-  /** @domName SVGFECompositeElement.in2 */
-  final SVGAnimatedString in2;
+  /// @domName SVGFECompositeElement.in2; @docsEditable true
+  final AnimatedString in2;
 
-  /** @domName SVGFECompositeElement.k1 */
-  final SVGAnimatedNumber k1;
+  /// @domName SVGFECompositeElement.k1; @docsEditable true
+  final AnimatedNumber k1;
 
-  /** @domName SVGFECompositeElement.k2 */
-  final SVGAnimatedNumber k2;
+  /// @domName SVGFECompositeElement.k2; @docsEditable true
+  final AnimatedNumber k2;
 
-  /** @domName SVGFECompositeElement.k3 */
-  final SVGAnimatedNumber k3;
+  /// @domName SVGFECompositeElement.k3; @docsEditable true
+  final AnimatedNumber k3;
 
-  /** @domName SVGFECompositeElement.k4 */
-  final SVGAnimatedNumber k4;
+  /// @domName SVGFECompositeElement.k4; @docsEditable true
+  final AnimatedNumber k4;
 
-  /** @domName SVGFECompositeElement.operator */
-  final SVGAnimatedEnumeration operator;
+  /// @domName SVGFECompositeElement.operator; @docsEditable true
+  final AnimatedEnumeration operator;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  final SVGAnimatedString result;
+  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  final AnimatedString result;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1640,8 +1559,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEConvolveMatrixElement
-class SVGFEConvolveMatrixElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEConvolveMatrixElement" {
+/// @domName SVGFEConvolveMatrixElement; @docsEditable true
+class FEConvolveMatrixElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEConvolveMatrixElement" {
 
   static const int SVG_EDGEMODE_DUPLICATE = 1;
 
@@ -1651,68 +1570,68 @@
 
   static const int SVG_EDGEMODE_WRAP = 2;
 
-  /** @domName SVGFEConvolveMatrixElement.bias */
-  final SVGAnimatedNumber bias;
+  /// @domName SVGFEConvolveMatrixElement.bias; @docsEditable true
+  final AnimatedNumber bias;
 
-  /** @domName SVGFEConvolveMatrixElement.divisor */
-  final SVGAnimatedNumber divisor;
+  /// @domName SVGFEConvolveMatrixElement.divisor; @docsEditable true
+  final AnimatedNumber divisor;
 
-  /** @domName SVGFEConvolveMatrixElement.edgeMode */
-  final SVGAnimatedEnumeration edgeMode;
+  /// @domName SVGFEConvolveMatrixElement.edgeMode; @docsEditable true
+  final AnimatedEnumeration edgeMode;
 
-  /** @domName SVGFEConvolveMatrixElement.in1 */
-  final SVGAnimatedString in1;
+  /// @domName SVGFEConvolveMatrixElement.in1; @docsEditable true
+  final AnimatedString in1;
 
-  /** @domName SVGFEConvolveMatrixElement.kernelMatrix */
-  final SVGAnimatedNumberList kernelMatrix;
+  /// @domName SVGFEConvolveMatrixElement.kernelMatrix; @docsEditable true
+  final AnimatedNumberList kernelMatrix;
 
-  /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthX */
-  final SVGAnimatedNumber kernelUnitLengthX;
+  /// @domName SVGFEConvolveMatrixElement.kernelUnitLengthX; @docsEditable true
+  final AnimatedNumber kernelUnitLengthX;
 
-  /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthY */
-  final SVGAnimatedNumber kernelUnitLengthY;
+  /// @domName SVGFEConvolveMatrixElement.kernelUnitLengthY; @docsEditable true
+  final AnimatedNumber kernelUnitLengthY;
 
-  /** @domName SVGFEConvolveMatrixElement.orderX */
-  final SVGAnimatedInteger orderX;
+  /// @domName SVGFEConvolveMatrixElement.orderX; @docsEditable true
+  final AnimatedInteger orderX;
 
-  /** @domName SVGFEConvolveMatrixElement.orderY */
-  final SVGAnimatedInteger orderY;
+  /// @domName SVGFEConvolveMatrixElement.orderY; @docsEditable true
+  final AnimatedInteger orderY;
 
-  /** @domName SVGFEConvolveMatrixElement.preserveAlpha */
-  final SVGAnimatedBoolean preserveAlpha;
+  /// @domName SVGFEConvolveMatrixElement.preserveAlpha; @docsEditable true
+  final AnimatedBoolean preserveAlpha;
 
-  /** @domName SVGFEConvolveMatrixElement.targetX */
-  final SVGAnimatedInteger targetX;
+  /// @domName SVGFEConvolveMatrixElement.targetX; @docsEditable true
+  final AnimatedInteger targetX;
 
-  /** @domName SVGFEConvolveMatrixElement.targetY */
-  final SVGAnimatedInteger targetY;
+  /// @domName SVGFEConvolveMatrixElement.targetY; @docsEditable true
+  final AnimatedInteger targetY;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  final SVGAnimatedString result;
+  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  final AnimatedString result;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1720,50 +1639,50 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEDiffuseLightingElement
-class SVGFEDiffuseLightingElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEDiffuseLightingElement" {
+/// @domName SVGFEDiffuseLightingElement; @docsEditable true
+class FEDiffuseLightingElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEDiffuseLightingElement" {
 
-  /** @domName SVGFEDiffuseLightingElement.diffuseConstant */
-  final SVGAnimatedNumber diffuseConstant;
+  /// @domName SVGFEDiffuseLightingElement.diffuseConstant; @docsEditable true
+  final AnimatedNumber diffuseConstant;
 
-  /** @domName SVGFEDiffuseLightingElement.in1 */
-  final SVGAnimatedString in1;
+  /// @domName SVGFEDiffuseLightingElement.in1; @docsEditable true
+  final AnimatedString in1;
 
-  /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthX */
-  final SVGAnimatedNumber kernelUnitLengthX;
+  /// @domName SVGFEDiffuseLightingElement.kernelUnitLengthX; @docsEditable true
+  final AnimatedNumber kernelUnitLengthX;
 
-  /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthY */
-  final SVGAnimatedNumber kernelUnitLengthY;
+  /// @domName SVGFEDiffuseLightingElement.kernelUnitLengthY; @docsEditable true
+  final AnimatedNumber kernelUnitLengthY;
 
-  /** @domName SVGFEDiffuseLightingElement.surfaceScale */
-  final SVGAnimatedNumber surfaceScale;
+  /// @domName SVGFEDiffuseLightingElement.surfaceScale; @docsEditable true
+  final AnimatedNumber surfaceScale;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  final SVGAnimatedString result;
+  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  final AnimatedString result;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1771,8 +1690,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEDisplacementMapElement
-class SVGFEDisplacementMapElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEDisplacementMapElement" {
+/// @domName SVGFEDisplacementMapElement; @docsEditable true
+class FEDisplacementMapElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEDisplacementMapElement" {
 
   static const int SVG_CHANNEL_A = 4;
 
@@ -1784,47 +1703,47 @@
 
   static const int SVG_CHANNEL_UNKNOWN = 0;
 
-  /** @domName SVGFEDisplacementMapElement.in1 */
-  final SVGAnimatedString in1;
+  /// @domName SVGFEDisplacementMapElement.in1; @docsEditable true
+  final AnimatedString in1;
 
-  /** @domName SVGFEDisplacementMapElement.in2 */
-  final SVGAnimatedString in2;
+  /// @domName SVGFEDisplacementMapElement.in2; @docsEditable true
+  final AnimatedString in2;
 
-  /** @domName SVGFEDisplacementMapElement.scale */
-  final SVGAnimatedNumber scale;
+  /// @domName SVGFEDisplacementMapElement.scale; @docsEditable true
+  final AnimatedNumber scale;
 
-  /** @domName SVGFEDisplacementMapElement.xChannelSelector */
-  final SVGAnimatedEnumeration xChannelSelector;
+  /// @domName SVGFEDisplacementMapElement.xChannelSelector; @docsEditable true
+  final AnimatedEnumeration xChannelSelector;
 
-  /** @domName SVGFEDisplacementMapElement.yChannelSelector */
-  final SVGAnimatedEnumeration yChannelSelector;
+  /// @domName SVGFEDisplacementMapElement.yChannelSelector; @docsEditable true
+  final AnimatedEnumeration yChannelSelector;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  final SVGAnimatedString result;
+  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  final AnimatedString result;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1832,67 +1751,67 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEDistantLightElement
-class SVGFEDistantLightElement extends SVGElement native "*SVGFEDistantLightElement" {
+/// @domName SVGFEDistantLightElement; @docsEditable true
+class FEDistantLightElement extends SvgElement native "*SVGFEDistantLightElement" {
 
-  /** @domName SVGFEDistantLightElement.azimuth */
-  final SVGAnimatedNumber azimuth;
+  /// @domName SVGFEDistantLightElement.azimuth; @docsEditable true
+  final AnimatedNumber azimuth;
 
-  /** @domName SVGFEDistantLightElement.elevation */
-  final SVGAnimatedNumber elevation;
+  /// @domName SVGFEDistantLightElement.elevation; @docsEditable true
+  final AnimatedNumber elevation;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGFEDropShadowElement
-class SVGFEDropShadowElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEDropShadowElement" {
+/// @domName SVGFEDropShadowElement; @docsEditable true
+class FEDropShadowElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEDropShadowElement" {
 
-  /** @domName SVGFEDropShadowElement.dx */
-  final SVGAnimatedNumber dx;
+  /// @domName SVGFEDropShadowElement.dx; @docsEditable true
+  final AnimatedNumber dx;
 
-  /** @domName SVGFEDropShadowElement.dy */
-  final SVGAnimatedNumber dy;
+  /// @domName SVGFEDropShadowElement.dy; @docsEditable true
+  final AnimatedNumber dy;
 
-  /** @domName SVGFEDropShadowElement.in1 */
-  final SVGAnimatedString in1;
+  /// @domName SVGFEDropShadowElement.in1; @docsEditable true
+  final AnimatedString in1;
 
-  /** @domName SVGFEDropShadowElement.stdDeviationX */
-  final SVGAnimatedNumber stdDeviationX;
+  /// @domName SVGFEDropShadowElement.stdDeviationX; @docsEditable true
+  final AnimatedNumber stdDeviationX;
 
-  /** @domName SVGFEDropShadowElement.stdDeviationY */
-  final SVGAnimatedNumber stdDeviationY;
+  /// @domName SVGFEDropShadowElement.stdDeviationY; @docsEditable true
+  final AnimatedNumber stdDeviationY;
 
-  /** @domName SVGFEDropShadowElement.setStdDeviation */
+  /// @domName SVGFEDropShadowElement.setStdDeviation; @docsEditable true
   void setStdDeviation(num stdDeviationX, num stdDeviationY) native;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  final SVGAnimatedString result;
+  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  final AnimatedString result;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1900,35 +1819,35 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEFloodElement
-class SVGFEFloodElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEFloodElement" {
+/// @domName SVGFEFloodElement; @docsEditable true
+class FEFloodElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEFloodElement" {
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  final SVGAnimatedString result;
+  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  final AnimatedString result;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1936,79 +1855,79 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEFuncAElement
-class SVGFEFuncAElement extends SVGComponentTransferFunctionElement native "*SVGFEFuncAElement" {
+/// @domName SVGFEFuncAElement; @docsEditable true
+class FEFuncAElement extends ComponentTransferFunctionElement native "*SVGFEFuncAElement" {
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGFEFuncBElement
-class SVGFEFuncBElement extends SVGComponentTransferFunctionElement native "*SVGFEFuncBElement" {
+/// @domName SVGFEFuncBElement; @docsEditable true
+class FEFuncBElement extends ComponentTransferFunctionElement native "*SVGFEFuncBElement" {
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGFEFuncGElement
-class SVGFEFuncGElement extends SVGComponentTransferFunctionElement native "*SVGFEFuncGElement" {
+/// @domName SVGFEFuncGElement; @docsEditable true
+class FEFuncGElement extends ComponentTransferFunctionElement native "*SVGFEFuncGElement" {
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGFEFuncRElement
-class SVGFEFuncRElement extends SVGComponentTransferFunctionElement native "*SVGFEFuncRElement" {
+/// @domName SVGFEFuncRElement; @docsEditable true
+class FEFuncRElement extends ComponentTransferFunctionElement native "*SVGFEFuncRElement" {
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGFEGaussianBlurElement
-class SVGFEGaussianBlurElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEGaussianBlurElement" {
+/// @domName SVGFEGaussianBlurElement; @docsEditable true
+class FEGaussianBlurElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEGaussianBlurElement" {
 
-  /** @domName SVGFEGaussianBlurElement.in1 */
-  final SVGAnimatedString in1;
+  /// @domName SVGFEGaussianBlurElement.in1; @docsEditable true
+  final AnimatedString in1;
 
-  /** @domName SVGFEGaussianBlurElement.stdDeviationX */
-  final SVGAnimatedNumber stdDeviationX;
+  /// @domName SVGFEGaussianBlurElement.stdDeviationX; @docsEditable true
+  final AnimatedNumber stdDeviationX;
 
-  /** @domName SVGFEGaussianBlurElement.stdDeviationY */
-  final SVGAnimatedNumber stdDeviationY;
+  /// @domName SVGFEGaussianBlurElement.stdDeviationY; @docsEditable true
+  final AnimatedNumber stdDeviationY;
 
-  /** @domName SVGFEGaussianBlurElement.setStdDeviation */
+  /// @domName SVGFEGaussianBlurElement.setStdDeviation; @docsEditable true
   void setStdDeviation(num stdDeviationX, num stdDeviationY) native;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  final SVGAnimatedString result;
+  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  final AnimatedString result;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2016,92 +1935,92 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEImageElement
-class SVGFEImageElement extends SVGElement implements SVGURIReference, SVGLangSpace, SVGFilterPrimitiveStandardAttributes, SVGExternalResourcesRequired native "*SVGFEImageElement" {
+/// @domName SVGFEImageElement; @docsEditable true
+class FEImageElement extends SvgElement implements FilterPrimitiveStandardAttributes, UriReference, ExternalResourcesRequired, LangSpace native "*SVGFEImageElement" {
 
-  /** @domName SVGFEImageElement.preserveAspectRatio */
-  final SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+  /// @domName SVGFEImageElement.preserveAspectRatio; @docsEditable true
+  final AnimatedPreserveAspectRatio preserveAspectRatio;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  final SVGAnimatedString result;
+  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  final AnimatedString result;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGURIReference
 
-  /** @domName SVGURIReference.href */
-  final SVGAnimatedString href;
+  /// @domName SVGURIReference.href; @docsEditable true
+  final AnimatedString href;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGFEMergeElement
-class SVGFEMergeElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEMergeElement" {
+/// @domName SVGFEMergeElement; @docsEditable true
+class FEMergeElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEMergeElement" {
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  final SVGAnimatedString result;
+  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  final AnimatedString result;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2109,19 +2028,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEMergeNodeElement
-class SVGFEMergeNodeElement extends SVGElement native "*SVGFEMergeNodeElement" {
+/// @domName SVGFEMergeNodeElement; @docsEditable true
+class FEMergeNodeElement extends SvgElement native "*SVGFEMergeNodeElement" {
 
-  /** @domName SVGFEMergeNodeElement.in1 */
-  final SVGAnimatedString in1;
+  /// @domName SVGFEMergeNodeElement.in1; @docsEditable true
+  final AnimatedString in1;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGFEMorphologyElement
-class SVGFEMorphologyElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEMorphologyElement" {
+/// @domName SVGFEMorphologyElement; @docsEditable true
+class FEMorphologyElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEMorphologyElement" {
 
   static const int SVG_MORPHOLOGY_OPERATOR_DILATE = 2;
 
@@ -2129,47 +2048,47 @@
 
   static const int SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
 
-  /** @domName SVGFEMorphologyElement.in1 */
-  final SVGAnimatedString in1;
+  /// @domName SVGFEMorphologyElement.in1; @docsEditable true
+  final AnimatedString in1;
 
-  /** @domName SVGFEMorphologyElement.operator */
-  final SVGAnimatedEnumeration operator;
+  /// @domName SVGFEMorphologyElement.operator; @docsEditable true
+  final AnimatedEnumeration operator;
 
-  /** @domName SVGFEMorphologyElement.radiusX */
-  final SVGAnimatedNumber radiusX;
+  /// @domName SVGFEMorphologyElement.radiusX; @docsEditable true
+  final AnimatedNumber radiusX;
 
-  /** @domName SVGFEMorphologyElement.radiusY */
-  final SVGAnimatedNumber radiusY;
+  /// @domName SVGFEMorphologyElement.radiusY; @docsEditable true
+  final AnimatedNumber radiusY;
 
-  /** @domName SVGFEMorphologyElement.setRadius */
+  /// @domName SVGFEMorphologyElement.setRadius; @docsEditable true
   void setRadius(num radiusX, num radiusY) native;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  final SVGAnimatedString result;
+  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  final AnimatedString result;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2177,44 +2096,44 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEOffsetElement
-class SVGFEOffsetElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEOffsetElement" {
+/// @domName SVGFEOffsetElement; @docsEditable true
+class FEOffsetElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFEOffsetElement" {
 
-  /** @domName SVGFEOffsetElement.dx */
-  final SVGAnimatedNumber dx;
+  /// @domName SVGFEOffsetElement.dx; @docsEditable true
+  final AnimatedNumber dx;
 
-  /** @domName SVGFEOffsetElement.dy */
-  final SVGAnimatedNumber dy;
+  /// @domName SVGFEOffsetElement.dy; @docsEditable true
+  final AnimatedNumber dy;
 
-  /** @domName SVGFEOffsetElement.in1 */
-  final SVGAnimatedString in1;
+  /// @domName SVGFEOffsetElement.in1; @docsEditable true
+  final AnimatedString in1;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  final SVGAnimatedString result;
+  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  final AnimatedString result;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2222,64 +2141,64 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFEPointLightElement
-class SVGFEPointLightElement extends SVGElement native "*SVGFEPointLightElement" {
+/// @domName SVGFEPointLightElement; @docsEditable true
+class FEPointLightElement extends SvgElement native "*SVGFEPointLightElement" {
 
-  /** @domName SVGFEPointLightElement.x */
-  final SVGAnimatedNumber x;
+  /// @domName SVGFEPointLightElement.x; @docsEditable true
+  final AnimatedNumber x;
 
-  /** @domName SVGFEPointLightElement.y */
-  final SVGAnimatedNumber y;
+  /// @domName SVGFEPointLightElement.y; @docsEditable true
+  final AnimatedNumber y;
 
-  /** @domName SVGFEPointLightElement.z */
-  final SVGAnimatedNumber z;
+  /// @domName SVGFEPointLightElement.z; @docsEditable true
+  final AnimatedNumber 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
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFESpecularLightingElement
-class SVGFESpecularLightingElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFESpecularLightingElement" {
+/// @domName SVGFESpecularLightingElement; @docsEditable true
+class FESpecularLightingElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFESpecularLightingElement" {
 
-  /** @domName SVGFESpecularLightingElement.in1 */
-  final SVGAnimatedString in1;
+  /// @domName SVGFESpecularLightingElement.in1; @docsEditable true
+  final AnimatedString in1;
 
-  /** @domName SVGFESpecularLightingElement.specularConstant */
-  final SVGAnimatedNumber specularConstant;
+  /// @domName SVGFESpecularLightingElement.specularConstant; @docsEditable true
+  final AnimatedNumber specularConstant;
 
-  /** @domName SVGFESpecularLightingElement.specularExponent */
-  final SVGAnimatedNumber specularExponent;
+  /// @domName SVGFESpecularLightingElement.specularExponent; @docsEditable true
+  final AnimatedNumber specularExponent;
 
-  /** @domName SVGFESpecularLightingElement.surfaceScale */
-  final SVGAnimatedNumber surfaceScale;
+  /// @domName SVGFESpecularLightingElement.surfaceScale; @docsEditable true
+  final AnimatedNumber surfaceScale;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  final SVGAnimatedString result;
+  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  final AnimatedString result;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2287,70 +2206,70 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFESpotLightElement
-class SVGFESpotLightElement extends SVGElement native "*SVGFESpotLightElement" {
+/// @domName SVGFESpotLightElement; @docsEditable true
+class FESpotLightElement extends SvgElement native "*SVGFESpotLightElement" {
 
-  /** @domName SVGFESpotLightElement.limitingConeAngle */
-  final SVGAnimatedNumber limitingConeAngle;
+  /// @domName SVGFESpotLightElement.limitingConeAngle; @docsEditable true
+  final AnimatedNumber limitingConeAngle;
 
-  /** @domName SVGFESpotLightElement.pointsAtX */
-  final SVGAnimatedNumber pointsAtX;
+  /// @domName SVGFESpotLightElement.pointsAtX; @docsEditable true
+  final AnimatedNumber pointsAtX;
 
-  /** @domName SVGFESpotLightElement.pointsAtY */
-  final SVGAnimatedNumber pointsAtY;
+  /// @domName SVGFESpotLightElement.pointsAtY; @docsEditable true
+  final AnimatedNumber pointsAtY;
 
-  /** @domName SVGFESpotLightElement.pointsAtZ */
-  final SVGAnimatedNumber pointsAtZ;
+  /// @domName SVGFESpotLightElement.pointsAtZ; @docsEditable true
+  final AnimatedNumber pointsAtZ;
 
-  /** @domName SVGFESpotLightElement.specularExponent */
-  final SVGAnimatedNumber specularExponent;
+  /// @domName SVGFESpotLightElement.specularExponent; @docsEditable true
+  final AnimatedNumber specularExponent;
 
-  /** @domName SVGFESpotLightElement.x */
-  final SVGAnimatedNumber x;
+  /// @domName SVGFESpotLightElement.x; @docsEditable true
+  final AnimatedNumber x;
 
-  /** @domName SVGFESpotLightElement.y */
-  final SVGAnimatedNumber y;
+  /// @domName SVGFESpotLightElement.y; @docsEditable true
+  final AnimatedNumber y;
 
-  /** @domName SVGFESpotLightElement.z */
-  final SVGAnimatedNumber z;
+  /// @domName SVGFESpotLightElement.z; @docsEditable true
+  final AnimatedNumber 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
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFETileElement
-class SVGFETileElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFETileElement" {
+/// @domName SVGFETileElement; @docsEditable true
+class FETileElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFETileElement" {
 
-  /** @domName SVGFETileElement.in1 */
-  final SVGAnimatedString in1;
+  /// @domName SVGFETileElement.in1; @docsEditable true
+  final AnimatedString in1;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  final SVGAnimatedString result;
+  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  final AnimatedString result;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2358,8 +2277,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFETurbulenceElement
-class SVGFETurbulenceElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFETurbulenceElement" {
+/// @domName SVGFETurbulenceElement; @docsEditable true
+class FETurbulenceElement extends SvgElement implements FilterPrimitiveStandardAttributes native "*SVGFETurbulenceElement" {
 
   static const int SVG_STITCHTYPE_NOSTITCH = 2;
 
@@ -2373,50 +2292,50 @@
 
   static const int SVG_TURBULENCE_TYPE_UNKNOWN = 0;
 
-  /** @domName SVGFETurbulenceElement.baseFrequencyX */
-  final SVGAnimatedNumber baseFrequencyX;
+  /// @domName SVGFETurbulenceElement.baseFrequencyX; @docsEditable true
+  final AnimatedNumber baseFrequencyX;
 
-  /** @domName SVGFETurbulenceElement.baseFrequencyY */
-  final SVGAnimatedNumber baseFrequencyY;
+  /// @domName SVGFETurbulenceElement.baseFrequencyY; @docsEditable true
+  final AnimatedNumber baseFrequencyY;
 
-  /** @domName SVGFETurbulenceElement.numOctaves */
-  final SVGAnimatedInteger numOctaves;
+  /// @domName SVGFETurbulenceElement.numOctaves; @docsEditable true
+  final AnimatedInteger numOctaves;
 
-  /** @domName SVGFETurbulenceElement.seed */
-  final SVGAnimatedNumber seed;
+  /// @domName SVGFETurbulenceElement.seed; @docsEditable true
+  final AnimatedNumber seed;
 
-  /** @domName SVGFETurbulenceElement.stitchTiles */
-  final SVGAnimatedEnumeration stitchTiles;
+  /// @domName SVGFETurbulenceElement.stitchTiles; @docsEditable true
+  final AnimatedEnumeration stitchTiles;
 
-  /** @domName SVGFETurbulenceElement.type */
-  final SVGAnimatedEnumeration type;
+  /// @domName SVGFETurbulenceElement.type; @docsEditable true
+  final AnimatedEnumeration type;
 
   // From SVGFilterPrimitiveStandardAttributes
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterPrimitiveStandardAttributes.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  final SVGAnimatedString result;
+  /// @domName SVGFilterPrimitiveStandardAttributes.result; @docsEditable true
+  final AnimatedString result;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterPrimitiveStandardAttributes.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterPrimitiveStandardAttributes.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterPrimitiveStandardAttributes.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2424,64 +2343,66 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFilterElement
-class SVGFilterElement extends SVGElement implements SVGURIReference, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable native "*SVGFilterElement" {
+/// @domName SVGFilterElement; @docsEditable true
+class FilterElement extends SvgElement implements UriReference, ExternalResourcesRequired, Stylable, LangSpace native "*SVGFilterElement" {
 
-  /** @domName SVGFilterElement.filterResX */
-  final SVGAnimatedInteger filterResX;
+  factory FilterElement() => _SvgElementFactoryProvider.createSvgElement_tag("filter");
 
-  /** @domName SVGFilterElement.filterResY */
-  final SVGAnimatedInteger filterResY;
+  /// @domName SVGFilterElement.filterResX; @docsEditable true
+  final AnimatedInteger filterResX;
 
-  /** @domName SVGFilterElement.filterUnits */
-  final SVGAnimatedEnumeration filterUnits;
+  /// @domName SVGFilterElement.filterResY; @docsEditable true
+  final AnimatedInteger filterResY;
 
-  /** @domName SVGFilterElement.height */
-  final SVGAnimatedLength height;
+  /// @domName SVGFilterElement.filterUnits; @docsEditable true
+  final AnimatedEnumeration filterUnits;
 
-  /** @domName SVGFilterElement.primitiveUnits */
-  final SVGAnimatedEnumeration primitiveUnits;
+  /// @domName SVGFilterElement.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGFilterElement.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGFilterElement.primitiveUnits; @docsEditable true
+  final AnimatedEnumeration primitiveUnits;
 
-  /** @domName SVGFilterElement.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGFilterElement.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGFilterElement.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGFilterElement.x; @docsEditable true
+  final AnimatedLength x;
 
-  /** @domName SVGFilterElement.setFilterRes */
+  /// @domName SVGFilterElement.y; @docsEditable true
+  final AnimatedLength y;
+
+  /// @domName SVGFilterElement.setFilterRes; @docsEditable true
   void setFilterRes(int filterResX, int filterResY) native;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGURIReference
 
-  /** @domName SVGURIReference.href */
-  final SVGAnimatedString href;
+  /// @domName SVGURIReference.href; @docsEditable true
+  final AnimatedString href;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2489,25 +2410,25 @@
 
 
 /// @domName SVGFilterPrimitiveStandardAttributes
-abstract class SVGFilterPrimitiveStandardAttributes implements SVGStylable {
+abstract class FilterPrimitiveStandardAttributes implements Stylable {
 
-  SVGAnimatedLength height;
+  AnimatedLength height;
 
-  SVGAnimatedString result;
+  AnimatedString result;
 
-  SVGAnimatedLength width;
+  AnimatedLength width;
 
-  SVGAnimatedLength x;
+  AnimatedLength x;
 
-  SVGAnimatedLength y;
+  AnimatedLength y;
 
   // From SVGStylable
 
-  SVGAnimatedString className;
+  AnimatedString className;
 
   CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2516,271 +2437,289 @@
 
 
 /// @domName SVGFitToViewBox
-abstract class SVGFitToViewBox {
+abstract class FitToViewBox {
 
-  SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+  AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  SVGAnimatedRect viewBox;
+  AnimatedRect viewBox;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGFontElement
-class SVGFontElement extends SVGElement native "*SVGFontElement" {
+/// @domName SVGFontElement; @docsEditable true
+class FontElement extends SvgElement native "*SVGFontElement" {
+
+  factory FontElement() => _SvgElementFactoryProvider.createSvgElement_tag("font");
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGFontFaceElement
-class SVGFontFaceElement extends SVGElement native "*SVGFontFaceElement" {
+/// @domName SVGFontFaceElement; @docsEditable true
+class FontFaceElement extends SvgElement native "*SVGFontFaceElement" {
+
+  factory FontFaceElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face");
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGFontFaceFormatElement
-class SVGFontFaceFormatElement extends SVGElement native "*SVGFontFaceFormatElement" {
+/// @domName SVGFontFaceFormatElement; @docsEditable true
+class FontFaceFormatElement extends SvgElement native "*SVGFontFaceFormatElement" {
+
+  factory FontFaceFormatElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face-format");
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGFontFaceNameElement
-class SVGFontFaceNameElement extends SVGElement native "*SVGFontFaceNameElement" {
+/// @domName SVGFontFaceNameElement; @docsEditable true
+class FontFaceNameElement extends SvgElement native "*SVGFontFaceNameElement" {
+
+  factory FontFaceNameElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face-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
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGFontFaceSrcElement
-class SVGFontFaceSrcElement extends SVGElement native "*SVGFontFaceSrcElement" {
+/// @domName SVGFontFaceSrcElement; @docsEditable true
+class FontFaceSrcElement extends SvgElement native "*SVGFontFaceSrcElement" {
+
+  factory FontFaceSrcElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face-src");
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGFontFaceUriElement
-class SVGFontFaceUriElement extends SVGElement native "*SVGFontFaceUriElement" {
+/// @domName SVGFontFaceUriElement; @docsEditable true
+class FontFaceUriElement extends SvgElement native "*SVGFontFaceUriElement" {
+
+  factory FontFaceUriElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face-uri");
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGForeignObjectElement
-class SVGForeignObjectElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGForeignObjectElement" {
+/// @domName SVGForeignObjectElement; @docsEditable true
+class ForeignObjectElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGForeignObjectElement" {
 
-  /** @domName SVGForeignObjectElement.height */
-  final SVGAnimatedLength height;
+  factory ForeignObjectElement() => _SvgElementFactoryProvider.createSvgElement_tag("foreignObject");
 
-  /** @domName SVGForeignObjectElement.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGForeignObjectElement.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGForeignObjectElement.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGForeignObjectElement.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGForeignObjectElement.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGForeignObjectElement.x; @docsEditable true
+  final AnimatedLength x;
+
+  /// @domName SVGForeignObjectElement.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGLocatable
 
-  /** @domName SVGLocatable.farthestViewportElement */
-  final SVGElement farthestViewportElement;
+  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  final SvgElement farthestViewportElement;
 
-  /** @domName SVGLocatable.nearestViewportElement */
-  final SVGElement nearestViewportElement;
+  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  final SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native;
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox() native;
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native;
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM() native;
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native;
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM() native;
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native;
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /** @domName SVGTransformable.transform */
-  final SVGAnimatedTransformList transform;
+  /// @domName SVGTransformable.transform; @docsEditable true
+  final AnimatedTransformList 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
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGGElement
-class SVGGElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGGElement" {
+/// @domName SVGGElement; @docsEditable true
+class GElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGGElement" {
+
+  factory GElement() => _SvgElementFactoryProvider.createSvgElement_tag("g");
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGLocatable
 
-  /** @domName SVGLocatable.farthestViewportElement */
-  final SVGElement farthestViewportElement;
+  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  final SvgElement farthestViewportElement;
 
-  /** @domName SVGLocatable.nearestViewportElement */
-  final SVGElement nearestViewportElement;
+  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  final SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native;
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox() native;
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native;
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM() native;
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native;
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM() native;
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native;
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /** @domName SVGTransformable.transform */
-  final SVGAnimatedTransformList transform;
+  /// @domName SVGTransformable.transform; @docsEditable true
+  final AnimatedTransformList 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
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGGlyphElement
-class SVGGlyphElement extends SVGElement native "*SVGGlyphElement" {
+/// @domName SVGGlyphElement; @docsEditable true
+class GlyphElement extends SvgElement native "*SVGGlyphElement" {
+
+  factory GlyphElement() => _SvgElementFactoryProvider.createSvgElement_tag("glyph");
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGGlyphRefElement
-class SVGGlyphRefElement extends SVGElement implements SVGURIReference, SVGStylable native "*SVGGlyphRefElement" {
+/// @domName SVGGlyphRefElement; @docsEditable true
+class GlyphRefElement extends SvgElement implements UriReference, Stylable native "*SVGGlyphRefElement" {
 
-  /** @domName SVGGlyphRefElement.dx */
+  /// @domName SVGGlyphRefElement.dx; @docsEditable true
   num dx;
 
-  /** @domName SVGGlyphRefElement.dy */
+  /// @domName SVGGlyphRefElement.dy; @docsEditable true
   num dy;
 
-  /** @domName SVGGlyphRefElement.format */
+  /// @domName SVGGlyphRefElement.format; @docsEditable true
   String format;
 
-  /** @domName SVGGlyphRefElement.glyphRef */
+  /// @domName SVGGlyphRefElement.glyphRef; @docsEditable true
   String glyphRef;
 
-  /** @domName SVGGlyphRefElement.x */
+  /// @domName SVGGlyphRefElement.x; @docsEditable true
   num x;
 
-  /** @domName SVGGlyphRefElement.y */
+  /// @domName SVGGlyphRefElement.y; @docsEditable true
   num y;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGURIReference
 
-  /** @domName SVGURIReference.href */
-  final SVGAnimatedString href;
+  /// @domName SVGURIReference.href; @docsEditable true
+  final AnimatedString href;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGGradientElement
-class SVGGradientElement extends SVGElement implements SVGURIReference, SVGExternalResourcesRequired, SVGStylable native "*SVGGradientElement" {
+/// @domName SVGGradientElement; @docsEditable true
+class GradientElement extends SvgElement implements UriReference, ExternalResourcesRequired, Stylable native "*SVGGradientElement" {
 
   static const int SVG_SPREADMETHOD_PAD = 1;
 
@@ -2790,134 +2729,138 @@
 
   static const int SVG_SPREADMETHOD_UNKNOWN = 0;
 
-  /** @domName SVGGradientElement.gradientTransform */
-  final SVGAnimatedTransformList gradientTransform;
+  /// @domName SVGGradientElement.gradientTransform; @docsEditable true
+  final AnimatedTransformList gradientTransform;
 
-  /** @domName SVGGradientElement.gradientUnits */
-  final SVGAnimatedEnumeration gradientUnits;
+  /// @domName SVGGradientElement.gradientUnits; @docsEditable true
+  final AnimatedEnumeration gradientUnits;
 
-  /** @domName SVGGradientElement.spreadMethod */
-  final SVGAnimatedEnumeration spreadMethod;
+  /// @domName SVGGradientElement.spreadMethod; @docsEditable true
+  final AnimatedEnumeration spreadMethod;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGURIReference
 
-  /** @domName SVGURIReference.href */
-  final SVGAnimatedString href;
+  /// @domName SVGURIReference.href; @docsEditable true
+  final AnimatedString href;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGHKernElement
-class SVGHKernElement extends SVGElement native "*SVGHKernElement" {
+/// @domName SVGHKernElement; @docsEditable true
+class HKernElement extends SvgElement native "*SVGHKernElement" {
+
+  factory HKernElement() => _SvgElementFactoryProvider.createSvgElement_tag("hkern");
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGImageElement
-class SVGImageElement extends SVGElement implements SVGLangSpace, SVGTests, SVGStylable, SVGURIReference, SVGExternalResourcesRequired, SVGTransformable native "*SVGImageElement" {
+/// @domName SVGImageElement; @docsEditable true
+class ImageElement extends SvgElement implements Transformable, Tests, UriReference, Stylable, ExternalResourcesRequired, LangSpace native "*SVGImageElement" {
 
-  /** @domName SVGImageElement.height */
-  final SVGAnimatedLength height;
+  factory ImageElement() => _SvgElementFactoryProvider.createSvgElement_tag("image");
 
-  /** @domName SVGImageElement.preserveAspectRatio */
-  final SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+  /// @domName SVGImageElement.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGImageElement.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGImageElement.preserveAspectRatio; @docsEditable true
+  final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  /** @domName SVGImageElement.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGImageElement.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGImageElement.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGImageElement.x; @docsEditable true
+  final AnimatedLength x;
+
+  /// @domName SVGImageElement.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGLocatable
 
-  /** @domName SVGLocatable.farthestViewportElement */
-  final SVGElement farthestViewportElement;
+  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  final SvgElement farthestViewportElement;
 
-  /** @domName SVGLocatable.nearestViewportElement */
-  final SVGElement nearestViewportElement;
+  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  final SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native;
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox() native;
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native;
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM() native;
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native;
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM() native;
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native;
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /** @domName SVGTransformable.transform */
-  final SVGAnimatedTransformList transform;
+  /// @domName SVGTransformable.transform; @docsEditable true
+  final AnimatedTransformList transform;
 
   // From SVGURIReference
 
-  /** @domName SVGURIReference.href */
-  final SVGAnimatedString href;
+  /// @domName SVGURIReference.href; @docsEditable true
+  final AnimatedString href;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2925,7 +2868,7 @@
 
 
 /// @domName SVGLangSpace
-abstract class SVGLangSpace {
+abstract class LangSpace {
 
   String xmllang;
 
@@ -2936,8 +2879,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGLength
-class SVGLength native "*SVGLength" {
+/// @domName SVGLength; @docsEditable true
+class Length native "*SVGLength" {
 
   static const int SVG_LENGTHTYPE_CM = 6;
 
@@ -2961,22 +2904,22 @@
 
   static const int SVG_LENGTHTYPE_UNKNOWN = 0;
 
-  /** @domName SVGLength.unitType */
+  /// @domName SVGLength.unitType; @docsEditable true
   final int unitType;
 
-  /** @domName SVGLength.value */
+  /// @domName SVGLength.value; @docsEditable true
   num value;
 
-  /** @domName SVGLength.valueAsString */
+  /// @domName SVGLength.valueAsString; @docsEditable true
   String valueAsString;
 
-  /** @domName SVGLength.valueInSpecifiedUnits */
+  /// @domName SVGLength.valueInSpecifiedUnits; @docsEditable true
   num valueInSpecifiedUnits;
 
-  /** @domName SVGLength.convertToSpecifiedUnits */
+  /// @domName SVGLength.convertToSpecifiedUnits; @docsEditable true
   void convertToSpecifiedUnits(int unitType) native;
 
-  /** @domName SVGLength.newValueSpecifiedUnits */
+  /// @domName SVGLength.newValueSpecifiedUnits; @docsEditable true
   void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2984,79 +2927,81 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGLengthList
-class SVGLengthList implements JavaScriptIndexingBehavior, List<SVGLength> native "*SVGLengthList" {
+/// @domName SVGLengthList; @docsEditable true
+class LengthList implements JavaScriptIndexingBehavior, List<Length> native "*SVGLengthList" {
 
-  /** @domName SVGLengthList.numberOfItems */
+  /// @domName SVGLengthList.numberOfItems; @docsEditable true
   final int numberOfItems;
 
-  SVGLength operator[](int index) => JS("SVGLength", "#[#]", this, index);
+  Length operator[](int index) => JS("Length", "#[#]", this, index);
 
-  void operator[]=(int index, SVGLength value) {
+  void operator[]=(int index, Length value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
-  // -- start List<SVGLength> mixins.
-  // SVGLength is the element type.
+  // -- start List<Length> mixins.
+  // Length is the element type.
 
-  // From Iterable<SVGLength>:
+  // From Iterable<Length>:
 
-  Iterator<SVGLength> iterator() {
+  Iterator<Length> iterator() {
     // Note: NodeLists are not fixed size. And most probably length shouldn't
     // be cached in both iterator _and_ forEach method. For now caching it
     // for consistency.
-    return new FixedSizeListIterator<SVGLength>(this);
+    return new FixedSizeListIterator<Length>(this);
   }
 
-  // From Collection<SVGLength>:
+  // From Collection<Length>:
 
-  void add(SVGLength value) {
+  void add(Length value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addLast(SVGLength value) {
+  void addLast(Length value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addAll(Collection<SVGLength> collection) {
+  void addAll(Collection<Length> collection) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  bool contains(SVGLength element) => _Collections.contains(this, element);
+  bool contains(Length element) => _Collections.contains(this, element);
 
-  void forEach(void f(SVGLength element)) => _Collections.forEach(this, f);
+  void forEach(void f(Length element)) => _Collections.forEach(this, f);
 
-  Collection map(f(SVGLength element)) => _Collections.map(this, [], f);
+  Collection map(f(Length element)) => _Collections.map(this, [], f);
 
-  Collection<SVGLength> filter(bool f(SVGLength element)) =>
-     _Collections.filter(this, <SVGLength>[], f);
+  Collection<Length> filter(bool f(Length element)) =>
+     _Collections.filter(this, <Length>[], f);
 
-  bool every(bool f(SVGLength element)) => _Collections.every(this, f);
+  bool every(bool f(Length element)) => _Collections.every(this, f);
 
-  bool some(bool f(SVGLength element)) => _Collections.some(this, f);
+  bool some(bool f(Length element)) => _Collections.some(this, f);
 
   bool get isEmpty => this.length == 0;
 
-  // From List<SVGLength>:
+  // From List<Length>:
 
-  void sort([Comparator<SVGLength> compare = Comparable.compare]) {
+  void sort([Comparator<Length> compare = Comparable.compare]) {
     throw new UnsupportedError("Cannot sort immutable List.");
   }
 
-  int indexOf(SVGLength element, [int start = 0]) =>
+  int indexOf(Length element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
-  int lastIndexOf(SVGLength element, [int start]) {
+  int lastIndexOf(Length element, [int start]) {
     if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGLength get last => this[length - 1];
+  Length get first => this[0];
 
-  SVGLength removeLast() {
+  Length get last => this[length - 1];
+
+  Length removeLast() {
     throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
-  void setRange(int start, int rangeLength, List<SVGLength> from, [int startFrom]) {
+  void setRange(int start, int rangeLength, List<Length> from, [int startFrom]) {
     throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
@@ -3064,138 +3009,142 @@
     throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
-  void insertRange(int start, int rangeLength, [SVGLength initialValue]) {
+  void insertRange(int start, int rangeLength, [Length initialValue]) {
     throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
-  List<SVGLength> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGLength>[]);
+  List<Length> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Length>[]);
 
-  // -- end List<SVGLength> mixins.
+  // -- end List<Length> mixins.
 
-  /** @domName SVGLengthList.appendItem */
-  SVGLength appendItem(SVGLength item) native;
+  /// @domName SVGLengthList.appendItem; @docsEditable true
+  Length appendItem(Length item) native;
 
-  /** @domName SVGLengthList.clear */
+  /// @domName SVGLengthList.clear; @docsEditable true
   void clear() native;
 
-  /** @domName SVGLengthList.getItem */
-  SVGLength getItem(int index) native;
+  /// @domName SVGLengthList.getItem; @docsEditable true
+  Length getItem(int index) native;
 
-  /** @domName SVGLengthList.initialize */
-  SVGLength initialize(SVGLength item) native;
+  /// @domName SVGLengthList.initialize; @docsEditable true
+  Length initialize(Length item) native;
 
-  /** @domName SVGLengthList.insertItemBefore */
-  SVGLength insertItemBefore(SVGLength item, int index) native;
+  /// @domName SVGLengthList.insertItemBefore; @docsEditable true
+  Length insertItemBefore(Length item, int index) native;
 
-  /** @domName SVGLengthList.removeItem */
-  SVGLength removeItem(int index) native;
+  /// @domName SVGLengthList.removeItem; @docsEditable true
+  Length removeItem(int index) native;
 
-  /** @domName SVGLengthList.replaceItem */
-  SVGLength replaceItem(SVGLength item, int index) native;
+  /// @domName SVGLengthList.replaceItem; @docsEditable true
+  Length replaceItem(Length item, int index) native;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGLineElement
-class SVGLineElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGLineElement" {
+/// @domName SVGLineElement; @docsEditable true
+class LineElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGLineElement" {
 
-  /** @domName SVGLineElement.x1 */
-  final SVGAnimatedLength x1;
+  factory LineElement() => _SvgElementFactoryProvider.createSvgElement_tag("line");
 
-  /** @domName SVGLineElement.x2 */
-  final SVGAnimatedLength x2;
+  /// @domName SVGLineElement.x1; @docsEditable true
+  final AnimatedLength x1;
 
-  /** @domName SVGLineElement.y1 */
-  final SVGAnimatedLength y1;
+  /// @domName SVGLineElement.x2; @docsEditable true
+  final AnimatedLength x2;
 
-  /** @domName SVGLineElement.y2 */
-  final SVGAnimatedLength y2;
+  /// @domName SVGLineElement.y1; @docsEditable true
+  final AnimatedLength y1;
+
+  /// @domName SVGLineElement.y2; @docsEditable true
+  final AnimatedLength y2;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGLocatable
 
-  /** @domName SVGLocatable.farthestViewportElement */
-  final SVGElement farthestViewportElement;
+  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  final SvgElement farthestViewportElement;
 
-  /** @domName SVGLocatable.nearestViewportElement */
-  final SVGElement nearestViewportElement;
+  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  final SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native;
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox() native;
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native;
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM() native;
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native;
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM() native;
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native;
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /** @domName SVGTransformable.transform */
-  final SVGAnimatedTransformList transform;
+  /// @domName SVGTransformable.transform; @docsEditable true
+  final AnimatedTransformList 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
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGLinearGradientElement
-class SVGLinearGradientElement extends SVGGradientElement native "*SVGLinearGradientElement" {
+/// @domName SVGLinearGradientElement; @docsEditable true
+class LinearGradientElement extends GradientElement native "*SVGLinearGradientElement" {
 
-  /** @domName SVGLinearGradientElement.x1 */
-  final SVGAnimatedLength x1;
+  factory LinearGradientElement() => _SvgElementFactoryProvider.createSvgElement_tag("linearGradient");
 
-  /** @domName SVGLinearGradientElement.x2 */
-  final SVGAnimatedLength x2;
+  /// @domName SVGLinearGradientElement.x1; @docsEditable true
+  final AnimatedLength x1;
 
-  /** @domName SVGLinearGradientElement.y1 */
-  final SVGAnimatedLength y1;
+  /// @domName SVGLinearGradientElement.x2; @docsEditable true
+  final AnimatedLength x2;
 
-  /** @domName SVGLinearGradientElement.y2 */
-  final SVGAnimatedLength y2;
+  /// @domName SVGLinearGradientElement.y1; @docsEditable true
+  final AnimatedLength y1;
+
+  /// @domName SVGLinearGradientElement.y2; @docsEditable true
+  final AnimatedLength y2;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -3203,49 +3152,53 @@
 
 
 /// @domName SVGLocatable
-abstract class SVGLocatable {
+abstract class Locatable {
 
-  SVGElement farthestViewportElement;
+  SvgElement farthestViewportElement;
 
-  SVGElement nearestViewportElement;
+  SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox();
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox();
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM();
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM();
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM();
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM();
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element);
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element);
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGMPathElement
-class SVGMPathElement extends SVGElement implements SVGURIReference, SVGExternalResourcesRequired native "*SVGMPathElement" {
+/// @domName SVGMPathElement; @docsEditable true
+class MPathElement extends SvgElement implements UriReference, ExternalResourcesRequired native "*SVGMPathElement" {
+
+  factory MPathElement() => _SvgElementFactoryProvider.createSvgElement_tag("mpath");
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGURIReference
 
-  /** @domName SVGURIReference.href */
-  final SVGAnimatedString href;
+  /// @domName SVGURIReference.href; @docsEditable true
+  final AnimatedString href;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGMarkerElement
-class SVGMarkerElement extends SVGElement implements SVGLangSpace, SVGFitToViewBox, SVGExternalResourcesRequired, SVGStylable native "*SVGMarkerElement" {
+/// @domName SVGMarkerElement; @docsEditable true
+class MarkerElement extends SvgElement implements FitToViewBox, ExternalResourcesRequired, Stylable, LangSpace native "*SVGMarkerElement" {
+
+  factory MarkerElement() => _SvgElementFactoryProvider.createSvgElement_tag("marker");
 
   static const int SVG_MARKERUNITS_STROKEWIDTH = 2;
 
@@ -3259,63 +3212,63 @@
 
   static const int SVG_MARKER_ORIENT_UNKNOWN = 0;
 
-  /** @domName SVGMarkerElement.markerHeight */
-  final SVGAnimatedLength markerHeight;
+  /// @domName SVGMarkerElement.markerHeight; @docsEditable true
+  final AnimatedLength markerHeight;
 
-  /** @domName SVGMarkerElement.markerUnits */
-  final SVGAnimatedEnumeration markerUnits;
+  /// @domName SVGMarkerElement.markerUnits; @docsEditable true
+  final AnimatedEnumeration markerUnits;
 
-  /** @domName SVGMarkerElement.markerWidth */
-  final SVGAnimatedLength markerWidth;
+  /// @domName SVGMarkerElement.markerWidth; @docsEditable true
+  final AnimatedLength markerWidth;
 
-  /** @domName SVGMarkerElement.orientAngle */
-  final SVGAnimatedAngle orientAngle;
+  /// @domName SVGMarkerElement.orientAngle; @docsEditable true
+  final AnimatedAngle orientAngle;
 
-  /** @domName SVGMarkerElement.orientType */
-  final SVGAnimatedEnumeration orientType;
+  /// @domName SVGMarkerElement.orientType; @docsEditable true
+  final AnimatedEnumeration orientType;
 
-  /** @domName SVGMarkerElement.refX */
-  final SVGAnimatedLength refX;
+  /// @domName SVGMarkerElement.refX; @docsEditable true
+  final AnimatedLength refX;
 
-  /** @domName SVGMarkerElement.refY */
-  final SVGAnimatedLength refY;
+  /// @domName SVGMarkerElement.refY; @docsEditable true
+  final AnimatedLength refY;
 
-  /** @domName SVGMarkerElement.setOrientToAngle */
-  void setOrientToAngle(SVGAngle angle) native;
+  /// @domName SVGMarkerElement.setOrientToAngle; @docsEditable true
+  void setOrientToAngle(Angle angle) native;
 
-  /** @domName SVGMarkerElement.setOrientToAuto */
+  /// @domName SVGMarkerElement.setOrientToAuto; @docsEditable true
   void setOrientToAuto() native;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGFitToViewBox
 
-  /** @domName SVGFitToViewBox.preserveAspectRatio */
-  final SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+  /// @domName SVGFitToViewBox.preserveAspectRatio; @docsEditable true
+  final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  /** @domName SVGFitToViewBox.viewBox */
-  final SVGAnimatedRect viewBox;
+  /// @domName SVGFitToViewBox.viewBox; @docsEditable true
+  final AnimatedRect viewBox;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3323,63 +3276,65 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGMaskElement
-class SVGMaskElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGExternalResourcesRequired native "*SVGMaskElement" {
+/// @domName SVGMaskElement; @docsEditable true
+class MaskElement extends SvgElement implements Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGMaskElement" {
 
-  /** @domName SVGMaskElement.height */
-  final SVGAnimatedLength height;
+  factory MaskElement() => _SvgElementFactoryProvider.createSvgElement_tag("mask");
 
-  /** @domName SVGMaskElement.maskContentUnits */
-  final SVGAnimatedEnumeration maskContentUnits;
+  /// @domName SVGMaskElement.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGMaskElement.maskUnits */
-  final SVGAnimatedEnumeration maskUnits;
+  /// @domName SVGMaskElement.maskContentUnits; @docsEditable true
+  final AnimatedEnumeration maskContentUnits;
 
-  /** @domName SVGMaskElement.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGMaskElement.maskUnits; @docsEditable true
+  final AnimatedEnumeration maskUnits;
 
-  /** @domName SVGMaskElement.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGMaskElement.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGMaskElement.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGMaskElement.x; @docsEditable true
+  final AnimatedLength x;
+
+  /// @domName SVGMaskElement.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3387,85 +3342,85 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGMatrix
-class SVGMatrix native "*SVGMatrix" {
+/// @domName SVGMatrix; @docsEditable true
+class Matrix native "*SVGMatrix" {
 
-  /** @domName SVGMatrix.a */
+  /// @domName SVGMatrix.a; @docsEditable true
   num a;
 
-  /** @domName SVGMatrix.b */
+  /// @domName SVGMatrix.b; @docsEditable true
   num b;
 
-  /** @domName SVGMatrix.c */
+  /// @domName SVGMatrix.c; @docsEditable true
   num c;
 
-  /** @domName SVGMatrix.d */
+  /// @domName SVGMatrix.d; @docsEditable true
   num d;
 
-  /** @domName SVGMatrix.e */
+  /// @domName SVGMatrix.e; @docsEditable true
   num e;
 
-  /** @domName SVGMatrix.f */
+  /// @domName SVGMatrix.f; @docsEditable true
   num f;
 
-  /** @domName SVGMatrix.flipX */
-  SVGMatrix flipX() native;
+  /// @domName SVGMatrix.flipX; @docsEditable true
+  Matrix flipX() native;
 
-  /** @domName SVGMatrix.flipY */
-  SVGMatrix flipY() native;
+  /// @domName SVGMatrix.flipY; @docsEditable true
+  Matrix flipY() native;
 
-  /** @domName SVGMatrix.inverse */
-  SVGMatrix inverse() native;
+  /// @domName SVGMatrix.inverse; @docsEditable true
+  Matrix inverse() native;
 
-  /** @domName SVGMatrix.multiply */
-  SVGMatrix multiply(SVGMatrix secondMatrix) native;
+  /// @domName SVGMatrix.multiply; @docsEditable true
+  Matrix multiply(Matrix secondMatrix) native;
 
-  /** @domName SVGMatrix.rotate */
-  SVGMatrix rotate(num angle) native;
+  /// @domName SVGMatrix.rotate; @docsEditable true
+  Matrix rotate(num angle) native;
 
-  /** @domName SVGMatrix.rotateFromVector */
-  SVGMatrix rotateFromVector(num x, num y) native;
+  /// @domName SVGMatrix.rotateFromVector; @docsEditable true
+  Matrix rotateFromVector(num x, num y) native;
 
-  /** @domName SVGMatrix.scale */
-  SVGMatrix scale(num scaleFactor) native;
+  /// @domName SVGMatrix.scale; @docsEditable true
+  Matrix scale(num scaleFactor) native;
 
-  /** @domName SVGMatrix.scaleNonUniform */
-  SVGMatrix scaleNonUniform(num scaleFactorX, num scaleFactorY) native;
+  /// @domName SVGMatrix.scaleNonUniform; @docsEditable true
+  Matrix scaleNonUniform(num scaleFactorX, num scaleFactorY) native;
 
-  /** @domName SVGMatrix.skewX */
-  SVGMatrix skewX(num angle) native;
+  /// @domName SVGMatrix.skewX; @docsEditable true
+  Matrix skewX(num angle) native;
 
-  /** @domName SVGMatrix.skewY */
-  SVGMatrix skewY(num angle) native;
+  /// @domName SVGMatrix.skewY; @docsEditable true
+  Matrix skewY(num angle) native;
 
-  /** @domName SVGMatrix.translate */
-  SVGMatrix translate(num x, num y) native;
+  /// @domName SVGMatrix.translate; @docsEditable true
+  Matrix translate(num x, num y) native;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGMetadataElement
-class SVGMetadataElement extends SVGElement native "*SVGMetadataElement" {
+/// @domName SVGMetadataElement; @docsEditable true
+class MetadataElement extends SvgElement native "*SVGMetadataElement" {
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGMissingGlyphElement
-class SVGMissingGlyphElement extends SVGElement native "*SVGMissingGlyphElement" {
+/// @domName SVGMissingGlyphElement; @docsEditable true
+class MissingGlyphElement extends SvgElement native "*SVGMissingGlyphElement" {
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGNumber
-class SVGNumber native "*SVGNumber" {
+/// @domName SVGNumber; @docsEditable true
+class Number native "*SVGNumber" {
 
-  /** @domName SVGNumber.value */
+  /// @domName SVGNumber.value; @docsEditable true
   num value;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3473,79 +3428,81 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGNumberList
-class SVGNumberList implements JavaScriptIndexingBehavior, List<SVGNumber> native "*SVGNumberList" {
+/// @domName SVGNumberList; @docsEditable true
+class NumberList implements JavaScriptIndexingBehavior, List<Number> native "*SVGNumberList" {
 
-  /** @domName SVGNumberList.numberOfItems */
+  /// @domName SVGNumberList.numberOfItems; @docsEditable true
   final int numberOfItems;
 
-  SVGNumber operator[](int index) => JS("SVGNumber", "#[#]", this, index);
+  Number operator[](int index) => JS("Number", "#[#]", this, index);
 
-  void operator[]=(int index, SVGNumber value) {
+  void operator[]=(int index, Number value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
-  // -- start List<SVGNumber> mixins.
-  // SVGNumber is the element type.
+  // -- start List<Number> mixins.
+  // Number is the element type.
 
-  // From Iterable<SVGNumber>:
+  // From Iterable<Number>:
 
-  Iterator<SVGNumber> iterator() {
+  Iterator<Number> iterator() {
     // Note: NodeLists are not fixed size. And most probably length shouldn't
     // be cached in both iterator _and_ forEach method. For now caching it
     // for consistency.
-    return new FixedSizeListIterator<SVGNumber>(this);
+    return new FixedSizeListIterator<Number>(this);
   }
 
-  // From Collection<SVGNumber>:
+  // From Collection<Number>:
 
-  void add(SVGNumber value) {
+  void add(Number value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addLast(SVGNumber value) {
+  void addLast(Number value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addAll(Collection<SVGNumber> collection) {
+  void addAll(Collection<Number> collection) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  bool contains(SVGNumber element) => _Collections.contains(this, element);
+  bool contains(Number element) => _Collections.contains(this, element);
 
-  void forEach(void f(SVGNumber element)) => _Collections.forEach(this, f);
+  void forEach(void f(Number element)) => _Collections.forEach(this, f);
 
-  Collection map(f(SVGNumber element)) => _Collections.map(this, [], f);
+  Collection map(f(Number element)) => _Collections.map(this, [], f);
 
-  Collection<SVGNumber> filter(bool f(SVGNumber element)) =>
-     _Collections.filter(this, <SVGNumber>[], f);
+  Collection<Number> filter(bool f(Number element)) =>
+     _Collections.filter(this, <Number>[], f);
 
-  bool every(bool f(SVGNumber element)) => _Collections.every(this, f);
+  bool every(bool f(Number element)) => _Collections.every(this, f);
 
-  bool some(bool f(SVGNumber element)) => _Collections.some(this, f);
+  bool some(bool f(Number element)) => _Collections.some(this, f);
 
   bool get isEmpty => this.length == 0;
 
-  // From List<SVGNumber>:
+  // From List<Number>:
 
-  void sort([Comparator<SVGNumber> compare = Comparable.compare]) {
+  void sort([Comparator<Number> compare = Comparable.compare]) {
     throw new UnsupportedError("Cannot sort immutable List.");
   }
 
-  int indexOf(SVGNumber element, [int start = 0]) =>
+  int indexOf(Number element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
-  int lastIndexOf(SVGNumber element, [int start]) {
+  int lastIndexOf(Number element, [int start]) {
     if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGNumber get last => this[length - 1];
+  Number get first => this[0];
 
-  SVGNumber removeLast() {
+  Number get last => this[length - 1];
+
+  Number removeLast() {
     throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
-  void setRange(int start, int rangeLength, List<SVGNumber> from, [int startFrom]) {
+  void setRange(int start, int rangeLength, List<Number> from, [int startFrom]) {
     throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
@@ -3553,43 +3510,43 @@
     throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
-  void insertRange(int start, int rangeLength, [SVGNumber initialValue]) {
+  void insertRange(int start, int rangeLength, [Number initialValue]) {
     throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
-  List<SVGNumber> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGNumber>[]);
+  List<Number> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Number>[]);
 
-  // -- end List<SVGNumber> mixins.
+  // -- end List<Number> mixins.
 
-  /** @domName SVGNumberList.appendItem */
-  SVGNumber appendItem(SVGNumber item) native;
+  /// @domName SVGNumberList.appendItem; @docsEditable true
+  Number appendItem(Number item) native;
 
-  /** @domName SVGNumberList.clear */
+  /// @domName SVGNumberList.clear; @docsEditable true
   void clear() native;
 
-  /** @domName SVGNumberList.getItem */
-  SVGNumber getItem(int index) native;
+  /// @domName SVGNumberList.getItem; @docsEditable true
+  Number getItem(int index) native;
 
-  /** @domName SVGNumberList.initialize */
-  SVGNumber initialize(SVGNumber item) native;
+  /// @domName SVGNumberList.initialize; @docsEditable true
+  Number initialize(Number item) native;
 
-  /** @domName SVGNumberList.insertItemBefore */
-  SVGNumber insertItemBefore(SVGNumber item, int index) native;
+  /// @domName SVGNumberList.insertItemBefore; @docsEditable true
+  Number insertItemBefore(Number item, int index) native;
 
-  /** @domName SVGNumberList.removeItem */
-  SVGNumber removeItem(int index) native;
+  /// @domName SVGNumberList.removeItem; @docsEditable true
+  Number removeItem(int index) native;
 
-  /** @domName SVGNumberList.replaceItem */
-  SVGNumber replaceItem(SVGNumber item, int index) native;
+  /// @domName SVGNumberList.replaceItem; @docsEditable true
+  Number replaceItem(Number item, int index) native;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGPaint
-class SVGPaint extends SVGColor native "*SVGPaint" {
+/// @domName SVGPaint; @docsEditable true
+class Paint extends Color native "*SVGPaint" {
 
   static const int SVG_PAINTTYPE_CURRENTCOLOR = 102;
 
@@ -3611,16 +3568,16 @@
 
   static const int SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106;
 
-  /** @domName SVGPaint.paintType */
+  /// @domName SVGPaint.paintType; @docsEditable true
   final int paintType;
 
-  /** @domName SVGPaint.uri */
+  /// @domName SVGPaint.uri; @docsEditable true
   final String uri;
 
-  /** @domName SVGPaint.setPaint */
+  /// @domName SVGPaint.setPaint; @docsEditable true
   void setPaint(int paintType, String uri, String rgbColor, String iccColor) native;
 
-  /** @domName SVGPaint.setUri */
+  /// @domName SVGPaint.setUri; @docsEditable true
   void setUri(String uri) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3628,160 +3585,162 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathElement
-class SVGPathElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGPathElement" {
+/// @domName SVGPathElement; @docsEditable true
+class PathElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGPathElement" {
 
-  /** @domName SVGPathElement.animatedNormalizedPathSegList */
-  final SVGPathSegList animatedNormalizedPathSegList;
+  factory PathElement() => _SvgElementFactoryProvider.createSvgElement_tag("path");
 
-  /** @domName SVGPathElement.animatedPathSegList */
-  final SVGPathSegList animatedPathSegList;
+  /// @domName SVGPathElement.animatedNormalizedPathSegList; @docsEditable true
+  final PathSegList animatedNormalizedPathSegList;
 
-  /** @domName SVGPathElement.normalizedPathSegList */
-  final SVGPathSegList normalizedPathSegList;
+  /// @domName SVGPathElement.animatedPathSegList; @docsEditable true
+  final PathSegList animatedPathSegList;
 
-  /** @domName SVGPathElement.pathLength */
-  final SVGAnimatedNumber pathLength;
+  /// @domName SVGPathElement.normalizedPathSegList; @docsEditable true
+  final PathSegList normalizedPathSegList;
 
-  /** @domName SVGPathElement.pathSegList */
-  final SVGPathSegList pathSegList;
+  /// @domName SVGPathElement.pathLength; @docsEditable true
+  final AnimatedNumber pathLength;
 
-  /** @domName SVGPathElement.createSVGPathSegArcAbs */
-  SVGPathSegArcAbs createSVGPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native;
+  /// @domName SVGPathElement.pathSegList; @docsEditable true
+  final PathSegList pathSegList;
 
-  /** @domName SVGPathElement.createSVGPathSegArcRel */
-  SVGPathSegArcRel createSVGPathSegArcRel(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native;
+  /// @domName SVGPathElement.createSVGPathSegArcAbs; @docsEditable true
+  PathSegArcAbs createSVGPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native;
 
-  /** @domName SVGPathElement.createSVGPathSegClosePath */
-  SVGPathSegClosePath createSVGPathSegClosePath() native;
+  /// @domName SVGPathElement.createSVGPathSegArcRel; @docsEditable true
+  PathSegArcRel createSVGPathSegArcRel(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native;
 
-  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicAbs */
-  SVGPathSegCurvetoCubicAbs createSVGPathSegCurvetoCubicAbs(num x, num y, num x1, num y1, num x2, num y2) native;
+  /// @domName SVGPathElement.createSVGPathSegClosePath; @docsEditable true
+  PathSegClosePath createSVGPathSegClosePath() native;
 
-  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicRel */
-  SVGPathSegCurvetoCubicRel createSVGPathSegCurvetoCubicRel(num x, num y, num x1, num y1, num x2, num y2) native;
+  /// @domName SVGPathElement.createSVGPathSegCurvetoCubicAbs; @docsEditable true
+  PathSegCurvetoCubicAbs createSVGPathSegCurvetoCubicAbs(num x, num y, num x1, num y1, num x2, num y2) native;
 
-  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs */
-  SVGPathSegCurvetoCubicSmoothAbs createSVGPathSegCurvetoCubicSmoothAbs(num x, num y, num x2, num y2) native;
+  /// @domName SVGPathElement.createSVGPathSegCurvetoCubicRel; @docsEditable true
+  PathSegCurvetoCubicRel createSVGPathSegCurvetoCubicRel(num x, num y, num x1, num y1, num x2, num y2) native;
 
-  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothRel */
-  SVGPathSegCurvetoCubicSmoothRel createSVGPathSegCurvetoCubicSmoothRel(num x, num y, num x2, num y2) native;
+  /// @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs; @docsEditable true
+  PathSegCurvetoCubicSmoothAbs createSVGPathSegCurvetoCubicSmoothAbs(num x, num y, num x2, num y2) native;
 
-  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticAbs */
-  SVGPathSegCurvetoQuadraticAbs createSVGPathSegCurvetoQuadraticAbs(num x, num y, num x1, num y1) native;
+  /// @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothRel; @docsEditable true
+  PathSegCurvetoCubicSmoothRel createSVGPathSegCurvetoCubicSmoothRel(num x, num y, num x2, num y2) native;
 
-  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticRel */
-  SVGPathSegCurvetoQuadraticRel createSVGPathSegCurvetoQuadraticRel(num x, num y, num x1, num y1) native;
+  /// @domName SVGPathElement.createSVGPathSegCurvetoQuadraticAbs; @docsEditable true
+  PathSegCurvetoQuadraticAbs createSVGPathSegCurvetoQuadraticAbs(num x, num y, num x1, num y1) native;
 
-  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs */
-  SVGPathSegCurvetoQuadraticSmoothAbs createSVGPathSegCurvetoQuadraticSmoothAbs(num x, num y) native;
+  /// @domName SVGPathElement.createSVGPathSegCurvetoQuadraticRel; @docsEditable true
+  PathSegCurvetoQuadraticRel createSVGPathSegCurvetoQuadraticRel(num x, num y, num x1, num y1) native;
 
-  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel */
-  SVGPathSegCurvetoQuadraticSmoothRel createSVGPathSegCurvetoQuadraticSmoothRel(num x, num y) native;
+  /// @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs; @docsEditable true
+  PathSegCurvetoQuadraticSmoothAbs createSVGPathSegCurvetoQuadraticSmoothAbs(num x, num y) native;
 
-  /** @domName SVGPathElement.createSVGPathSegLinetoAbs */
-  SVGPathSegLinetoAbs createSVGPathSegLinetoAbs(num x, num y) native;
+  /// @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel; @docsEditable true
+  PathSegCurvetoQuadraticSmoothRel createSVGPathSegCurvetoQuadraticSmoothRel(num x, num y) native;
 
-  /** @domName SVGPathElement.createSVGPathSegLinetoHorizontalAbs */
-  SVGPathSegLinetoHorizontalAbs createSVGPathSegLinetoHorizontalAbs(num x) native;
+  /// @domName SVGPathElement.createSVGPathSegLinetoAbs; @docsEditable true
+  PathSegLinetoAbs createSVGPathSegLinetoAbs(num x, num y) native;
 
-  /** @domName SVGPathElement.createSVGPathSegLinetoHorizontalRel */
-  SVGPathSegLinetoHorizontalRel createSVGPathSegLinetoHorizontalRel(num x) native;
+  /// @domName SVGPathElement.createSVGPathSegLinetoHorizontalAbs; @docsEditable true
+  PathSegLinetoHorizontalAbs createSVGPathSegLinetoHorizontalAbs(num x) native;
 
-  /** @domName SVGPathElement.createSVGPathSegLinetoRel */
-  SVGPathSegLinetoRel createSVGPathSegLinetoRel(num x, num y) native;
+  /// @domName SVGPathElement.createSVGPathSegLinetoHorizontalRel; @docsEditable true
+  PathSegLinetoHorizontalRel createSVGPathSegLinetoHorizontalRel(num x) native;
 
-  /** @domName SVGPathElement.createSVGPathSegLinetoVerticalAbs */
-  SVGPathSegLinetoVerticalAbs createSVGPathSegLinetoVerticalAbs(num y) native;
+  /// @domName SVGPathElement.createSVGPathSegLinetoRel; @docsEditable true
+  PathSegLinetoRel createSVGPathSegLinetoRel(num x, num y) native;
 
-  /** @domName SVGPathElement.createSVGPathSegLinetoVerticalRel */
-  SVGPathSegLinetoVerticalRel createSVGPathSegLinetoVerticalRel(num y) native;
+  /// @domName SVGPathElement.createSVGPathSegLinetoVerticalAbs; @docsEditable true
+  PathSegLinetoVerticalAbs createSVGPathSegLinetoVerticalAbs(num y) native;
 
-  /** @domName SVGPathElement.createSVGPathSegMovetoAbs */
-  SVGPathSegMovetoAbs createSVGPathSegMovetoAbs(num x, num y) native;
+  /// @domName SVGPathElement.createSVGPathSegLinetoVerticalRel; @docsEditable true
+  PathSegLinetoVerticalRel createSVGPathSegLinetoVerticalRel(num y) native;
 
-  /** @domName SVGPathElement.createSVGPathSegMovetoRel */
-  SVGPathSegMovetoRel createSVGPathSegMovetoRel(num x, num y) native;
+  /// @domName SVGPathElement.createSVGPathSegMovetoAbs; @docsEditable true
+  PathSegMovetoAbs createSVGPathSegMovetoAbs(num x, num y) native;
 
-  /** @domName SVGPathElement.getPathSegAtLength */
+  /// @domName SVGPathElement.createSVGPathSegMovetoRel; @docsEditable true
+  PathSegMovetoRel createSVGPathSegMovetoRel(num x, num y) native;
+
+  /// @domName SVGPathElement.getPathSegAtLength; @docsEditable true
   int getPathSegAtLength(num distance) native;
 
-  /** @domName SVGPathElement.getPointAtLength */
-  SVGPoint getPointAtLength(num distance) native;
+  /// @domName SVGPathElement.getPointAtLength; @docsEditable true
+  Point getPointAtLength(num distance) native;
 
-  /** @domName SVGPathElement.getTotalLength */
+  /// @domName SVGPathElement.getTotalLength; @docsEditable true
   num getTotalLength() native;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGLocatable
 
-  /** @domName SVGLocatable.farthestViewportElement */
-  final SVGElement farthestViewportElement;
+  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  final SvgElement farthestViewportElement;
 
-  /** @domName SVGLocatable.nearestViewportElement */
-  final SVGElement nearestViewportElement;
+  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  final SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native;
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox() native;
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native;
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM() native;
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native;
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM() native;
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native;
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /** @domName SVGTransformable.transform */
-  final SVGAnimatedTransformList transform;
+  /// @domName SVGTransformable.transform; @docsEditable true
+  final AnimatedTransformList 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
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSeg
-class SVGPathSeg native "*SVGPathSeg" {
+/// @domName SVGPathSeg; @docsEditable true
+class PathSeg native "*SVGPathSeg" {
 
   static const int PATHSEG_ARC_ABS = 10;
 
@@ -3823,10 +3782,10 @@
 
   static const int PATHSEG_UNKNOWN = 0;
 
-  /** @domName SVGPathSeg.pathSegType */
+  /// @domName SVGPathSeg.pathSegType; @docsEditable true
   final int pathSegType;
 
-  /** @domName SVGPathSeg.pathSegTypeAsLetter */
+  /// @domName SVGPathSeg.pathSegTypeAsLetter; @docsEditable true
   final String pathSegTypeAsLetter;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3834,28 +3793,28 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegArcAbs
-class SVGPathSegArcAbs extends SVGPathSeg native "*SVGPathSegArcAbs" {
+/// @domName SVGPathSegArcAbs; @docsEditable true
+class PathSegArcAbs extends PathSeg native "*SVGPathSegArcAbs" {
 
-  /** @domName SVGPathSegArcAbs.angle */
+  /// @domName SVGPathSegArcAbs.angle; @docsEditable true
   num angle;
 
-  /** @domName SVGPathSegArcAbs.largeArcFlag */
+  /// @domName SVGPathSegArcAbs.largeArcFlag; @docsEditable true
   bool largeArcFlag;
 
-  /** @domName SVGPathSegArcAbs.r1 */
+  /// @domName SVGPathSegArcAbs.r1; @docsEditable true
   num r1;
 
-  /** @domName SVGPathSegArcAbs.r2 */
+  /// @domName SVGPathSegArcAbs.r2; @docsEditable true
   num r2;
 
-  /** @domName SVGPathSegArcAbs.sweepFlag */
+  /// @domName SVGPathSegArcAbs.sweepFlag; @docsEditable true
   bool sweepFlag;
 
-  /** @domName SVGPathSegArcAbs.x */
+  /// @domName SVGPathSegArcAbs.x; @docsEditable true
   num x;
 
-  /** @domName SVGPathSegArcAbs.y */
+  /// @domName SVGPathSegArcAbs.y; @docsEditable true
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3863,28 +3822,28 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegArcRel
-class SVGPathSegArcRel extends SVGPathSeg native "*SVGPathSegArcRel" {
+/// @domName SVGPathSegArcRel; @docsEditable true
+class PathSegArcRel extends PathSeg native "*SVGPathSegArcRel" {
 
-  /** @domName SVGPathSegArcRel.angle */
+  /// @domName SVGPathSegArcRel.angle; @docsEditable true
   num angle;
 
-  /** @domName SVGPathSegArcRel.largeArcFlag */
+  /// @domName SVGPathSegArcRel.largeArcFlag; @docsEditable true
   bool largeArcFlag;
 
-  /** @domName SVGPathSegArcRel.r1 */
+  /// @domName SVGPathSegArcRel.r1; @docsEditable true
   num r1;
 
-  /** @domName SVGPathSegArcRel.r2 */
+  /// @domName SVGPathSegArcRel.r2; @docsEditable true
   num r2;
 
-  /** @domName SVGPathSegArcRel.sweepFlag */
+  /// @domName SVGPathSegArcRel.sweepFlag; @docsEditable true
   bool sweepFlag;
 
-  /** @domName SVGPathSegArcRel.x */
+  /// @domName SVGPathSegArcRel.x; @docsEditable true
   num x;
 
-  /** @domName SVGPathSegArcRel.y */
+  /// @domName SVGPathSegArcRel.y; @docsEditable true
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3892,33 +3851,33 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegClosePath
-class SVGPathSegClosePath extends SVGPathSeg native "*SVGPathSegClosePath" {
+/// @domName SVGPathSegClosePath; @docsEditable true
+class PathSegClosePath extends PathSeg native "*SVGPathSegClosePath" {
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGPathSegCurvetoCubicAbs
-class SVGPathSegCurvetoCubicAbs extends SVGPathSeg native "*SVGPathSegCurvetoCubicAbs" {
+/// @domName SVGPathSegCurvetoCubicAbs; @docsEditable true
+class PathSegCurvetoCubicAbs extends PathSeg native "*SVGPathSegCurvetoCubicAbs" {
 
-  /** @domName SVGPathSegCurvetoCubicAbs.x */
+  /// @domName SVGPathSegCurvetoCubicAbs.x; @docsEditable true
   num x;
 
-  /** @domName SVGPathSegCurvetoCubicAbs.x1 */
+  /// @domName SVGPathSegCurvetoCubicAbs.x1; @docsEditable true
   num x1;
 
-  /** @domName SVGPathSegCurvetoCubicAbs.x2 */
+  /// @domName SVGPathSegCurvetoCubicAbs.x2; @docsEditable true
   num x2;
 
-  /** @domName SVGPathSegCurvetoCubicAbs.y */
+  /// @domName SVGPathSegCurvetoCubicAbs.y; @docsEditable true
   num y;
 
-  /** @domName SVGPathSegCurvetoCubicAbs.y1 */
+  /// @domName SVGPathSegCurvetoCubicAbs.y1; @docsEditable true
   num y1;
 
-  /** @domName SVGPathSegCurvetoCubicAbs.y2 */
+  /// @domName SVGPathSegCurvetoCubicAbs.y2; @docsEditable true
   num y2;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3926,25 +3885,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegCurvetoCubicRel
-class SVGPathSegCurvetoCubicRel extends SVGPathSeg native "*SVGPathSegCurvetoCubicRel" {
+/// @domName SVGPathSegCurvetoCubicRel; @docsEditable true
+class PathSegCurvetoCubicRel extends PathSeg native "*SVGPathSegCurvetoCubicRel" {
 
-  /** @domName SVGPathSegCurvetoCubicRel.x */
+  /// @domName SVGPathSegCurvetoCubicRel.x; @docsEditable true
   num x;
 
-  /** @domName SVGPathSegCurvetoCubicRel.x1 */
+  /// @domName SVGPathSegCurvetoCubicRel.x1; @docsEditable true
   num x1;
 
-  /** @domName SVGPathSegCurvetoCubicRel.x2 */
+  /// @domName SVGPathSegCurvetoCubicRel.x2; @docsEditable true
   num x2;
 
-  /** @domName SVGPathSegCurvetoCubicRel.y */
+  /// @domName SVGPathSegCurvetoCubicRel.y; @docsEditable true
   num y;
 
-  /** @domName SVGPathSegCurvetoCubicRel.y1 */
+  /// @domName SVGPathSegCurvetoCubicRel.y1; @docsEditable true
   num y1;
 
-  /** @domName SVGPathSegCurvetoCubicRel.y2 */
+  /// @domName SVGPathSegCurvetoCubicRel.y2; @docsEditable true
   num y2;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3952,19 +3911,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegCurvetoCubicSmoothAbs
-class SVGPathSegCurvetoCubicSmoothAbs extends SVGPathSeg native "*SVGPathSegCurvetoCubicSmoothAbs" {
+/// @domName SVGPathSegCurvetoCubicSmoothAbs; @docsEditable true
+class PathSegCurvetoCubicSmoothAbs extends PathSeg native "*SVGPathSegCurvetoCubicSmoothAbs" {
 
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.x */
+  /// @domName SVGPathSegCurvetoCubicSmoothAbs.x; @docsEditable true
   num x;
 
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.x2 */
+  /// @domName SVGPathSegCurvetoCubicSmoothAbs.x2; @docsEditable true
   num x2;
 
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.y */
+  /// @domName SVGPathSegCurvetoCubicSmoothAbs.y; @docsEditable true
   num y;
 
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.y2 */
+  /// @domName SVGPathSegCurvetoCubicSmoothAbs.y2; @docsEditable true
   num y2;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3972,19 +3931,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegCurvetoCubicSmoothRel
-class SVGPathSegCurvetoCubicSmoothRel extends SVGPathSeg native "*SVGPathSegCurvetoCubicSmoothRel" {
+/// @domName SVGPathSegCurvetoCubicSmoothRel; @docsEditable true
+class PathSegCurvetoCubicSmoothRel extends PathSeg native "*SVGPathSegCurvetoCubicSmoothRel" {
 
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.x */
+  /// @domName SVGPathSegCurvetoCubicSmoothRel.x; @docsEditable true
   num x;
 
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.x2 */
+  /// @domName SVGPathSegCurvetoCubicSmoothRel.x2; @docsEditable true
   num x2;
 
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.y */
+  /// @domName SVGPathSegCurvetoCubicSmoothRel.y; @docsEditable true
   num y;
 
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.y2 */
+  /// @domName SVGPathSegCurvetoCubicSmoothRel.y2; @docsEditable true
   num y2;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3992,19 +3951,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegCurvetoQuadraticAbs
-class SVGPathSegCurvetoQuadraticAbs extends SVGPathSeg native "*SVGPathSegCurvetoQuadraticAbs" {
+/// @domName SVGPathSegCurvetoQuadraticAbs; @docsEditable true
+class PathSegCurvetoQuadraticAbs extends PathSeg native "*SVGPathSegCurvetoQuadraticAbs" {
 
-  /** @domName SVGPathSegCurvetoQuadraticAbs.x */
+  /// @domName SVGPathSegCurvetoQuadraticAbs.x; @docsEditable true
   num x;
 
-  /** @domName SVGPathSegCurvetoQuadraticAbs.x1 */
+  /// @domName SVGPathSegCurvetoQuadraticAbs.x1; @docsEditable true
   num x1;
 
-  /** @domName SVGPathSegCurvetoQuadraticAbs.y */
+  /// @domName SVGPathSegCurvetoQuadraticAbs.y; @docsEditable true
   num y;
 
-  /** @domName SVGPathSegCurvetoQuadraticAbs.y1 */
+  /// @domName SVGPathSegCurvetoQuadraticAbs.y1; @docsEditable true
   num y1;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4012,19 +3971,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegCurvetoQuadraticRel
-class SVGPathSegCurvetoQuadraticRel extends SVGPathSeg native "*SVGPathSegCurvetoQuadraticRel" {
+/// @domName SVGPathSegCurvetoQuadraticRel; @docsEditable true
+class PathSegCurvetoQuadraticRel extends PathSeg native "*SVGPathSegCurvetoQuadraticRel" {
 
-  /** @domName SVGPathSegCurvetoQuadraticRel.x */
+  /// @domName SVGPathSegCurvetoQuadraticRel.x; @docsEditable true
   num x;
 
-  /** @domName SVGPathSegCurvetoQuadraticRel.x1 */
+  /// @domName SVGPathSegCurvetoQuadraticRel.x1; @docsEditable true
   num x1;
 
-  /** @domName SVGPathSegCurvetoQuadraticRel.y */
+  /// @domName SVGPathSegCurvetoQuadraticRel.y; @docsEditable true
   num y;
 
-  /** @domName SVGPathSegCurvetoQuadraticRel.y1 */
+  /// @domName SVGPathSegCurvetoQuadraticRel.y1; @docsEditable true
   num y1;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4032,13 +3991,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegCurvetoQuadraticSmoothAbs
-class SVGPathSegCurvetoQuadraticSmoothAbs extends SVGPathSeg native "*SVGPathSegCurvetoQuadraticSmoothAbs" {
+/// @domName SVGPathSegCurvetoQuadraticSmoothAbs; @docsEditable true
+class PathSegCurvetoQuadraticSmoothAbs extends PathSeg native "*SVGPathSegCurvetoQuadraticSmoothAbs" {
 
-  /** @domName SVGPathSegCurvetoQuadraticSmoothAbs.x */
+  /// @domName SVGPathSegCurvetoQuadraticSmoothAbs.x; @docsEditable true
   num x;
 
-  /** @domName SVGPathSegCurvetoQuadraticSmoothAbs.y */
+  /// @domName SVGPathSegCurvetoQuadraticSmoothAbs.y; @docsEditable true
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4046,13 +4005,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegCurvetoQuadraticSmoothRel
-class SVGPathSegCurvetoQuadraticSmoothRel extends SVGPathSeg native "*SVGPathSegCurvetoQuadraticSmoothRel" {
+/// @domName SVGPathSegCurvetoQuadraticSmoothRel; @docsEditable true
+class PathSegCurvetoQuadraticSmoothRel extends PathSeg native "*SVGPathSegCurvetoQuadraticSmoothRel" {
 
-  /** @domName SVGPathSegCurvetoQuadraticSmoothRel.x */
+  /// @domName SVGPathSegCurvetoQuadraticSmoothRel.x; @docsEditable true
   num x;
 
-  /** @domName SVGPathSegCurvetoQuadraticSmoothRel.y */
+  /// @domName SVGPathSegCurvetoQuadraticSmoothRel.y; @docsEditable true
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4060,13 +4019,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegLinetoAbs
-class SVGPathSegLinetoAbs extends SVGPathSeg native "*SVGPathSegLinetoAbs" {
+/// @domName SVGPathSegLinetoAbs; @docsEditable true
+class PathSegLinetoAbs extends PathSeg native "*SVGPathSegLinetoAbs" {
 
-  /** @domName SVGPathSegLinetoAbs.x */
+  /// @domName SVGPathSegLinetoAbs.x; @docsEditable true
   num x;
 
-  /** @domName SVGPathSegLinetoAbs.y */
+  /// @domName SVGPathSegLinetoAbs.y; @docsEditable true
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4074,10 +4033,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegLinetoHorizontalAbs
-class SVGPathSegLinetoHorizontalAbs extends SVGPathSeg native "*SVGPathSegLinetoHorizontalAbs" {
+/// @domName SVGPathSegLinetoHorizontalAbs; @docsEditable true
+class PathSegLinetoHorizontalAbs extends PathSeg native "*SVGPathSegLinetoHorizontalAbs" {
 
-  /** @domName SVGPathSegLinetoHorizontalAbs.x */
+  /// @domName SVGPathSegLinetoHorizontalAbs.x; @docsEditable true
   num x;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4085,10 +4044,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegLinetoHorizontalRel
-class SVGPathSegLinetoHorizontalRel extends SVGPathSeg native "*SVGPathSegLinetoHorizontalRel" {
+/// @domName SVGPathSegLinetoHorizontalRel; @docsEditable true
+class PathSegLinetoHorizontalRel extends PathSeg native "*SVGPathSegLinetoHorizontalRel" {
 
-  /** @domName SVGPathSegLinetoHorizontalRel.x */
+  /// @domName SVGPathSegLinetoHorizontalRel.x; @docsEditable true
   num x;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4096,13 +4055,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegLinetoRel
-class SVGPathSegLinetoRel extends SVGPathSeg native "*SVGPathSegLinetoRel" {
+/// @domName SVGPathSegLinetoRel; @docsEditable true
+class PathSegLinetoRel extends PathSeg native "*SVGPathSegLinetoRel" {
 
-  /** @domName SVGPathSegLinetoRel.x */
+  /// @domName SVGPathSegLinetoRel.x; @docsEditable true
   num x;
 
-  /** @domName SVGPathSegLinetoRel.y */
+  /// @domName SVGPathSegLinetoRel.y; @docsEditable true
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4110,10 +4069,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegLinetoVerticalAbs
-class SVGPathSegLinetoVerticalAbs extends SVGPathSeg native "*SVGPathSegLinetoVerticalAbs" {
+/// @domName SVGPathSegLinetoVerticalAbs; @docsEditable true
+class PathSegLinetoVerticalAbs extends PathSeg native "*SVGPathSegLinetoVerticalAbs" {
 
-  /** @domName SVGPathSegLinetoVerticalAbs.y */
+  /// @domName SVGPathSegLinetoVerticalAbs.y; @docsEditable true
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4121,10 +4080,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegLinetoVerticalRel
-class SVGPathSegLinetoVerticalRel extends SVGPathSeg native "*SVGPathSegLinetoVerticalRel" {
+/// @domName SVGPathSegLinetoVerticalRel; @docsEditable true
+class PathSegLinetoVerticalRel extends PathSeg native "*SVGPathSegLinetoVerticalRel" {
 
-  /** @domName SVGPathSegLinetoVerticalRel.y */
+  /// @domName SVGPathSegLinetoVerticalRel.y; @docsEditable true
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4132,79 +4091,81 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegList
-class SVGPathSegList implements JavaScriptIndexingBehavior, List<SVGPathSeg> native "*SVGPathSegList" {
+/// @domName SVGPathSegList; @docsEditable true
+class PathSegList implements JavaScriptIndexingBehavior, List<PathSeg> native "*SVGPathSegList" {
 
-  /** @domName SVGPathSegList.numberOfItems */
+  /// @domName SVGPathSegList.numberOfItems; @docsEditable true
   final int numberOfItems;
 
-  SVGPathSeg operator[](int index) => JS("SVGPathSeg", "#[#]", this, index);
+  PathSeg operator[](int index) => JS("PathSeg", "#[#]", this, index);
 
-  void operator[]=(int index, SVGPathSeg value) {
+  void operator[]=(int index, PathSeg value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
-  // -- start List<SVGPathSeg> mixins.
-  // SVGPathSeg is the element type.
+  // -- start List<PathSeg> mixins.
+  // PathSeg is the element type.
 
-  // From Iterable<SVGPathSeg>:
+  // From Iterable<PathSeg>:
 
-  Iterator<SVGPathSeg> iterator() {
+  Iterator<PathSeg> iterator() {
     // Note: NodeLists are not fixed size. And most probably length shouldn't
     // be cached in both iterator _and_ forEach method. For now caching it
     // for consistency.
-    return new FixedSizeListIterator<SVGPathSeg>(this);
+    return new FixedSizeListIterator<PathSeg>(this);
   }
 
-  // From Collection<SVGPathSeg>:
+  // From Collection<PathSeg>:
 
-  void add(SVGPathSeg value) {
+  void add(PathSeg value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addLast(SVGPathSeg value) {
+  void addLast(PathSeg value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addAll(Collection<SVGPathSeg> collection) {
+  void addAll(Collection<PathSeg> collection) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  bool contains(SVGPathSeg element) => _Collections.contains(this, element);
+  bool contains(PathSeg element) => _Collections.contains(this, element);
 
-  void forEach(void f(SVGPathSeg element)) => _Collections.forEach(this, f);
+  void forEach(void f(PathSeg element)) => _Collections.forEach(this, f);
 
-  Collection map(f(SVGPathSeg element)) => _Collections.map(this, [], f);
+  Collection map(f(PathSeg element)) => _Collections.map(this, [], f);
 
-  Collection<SVGPathSeg> filter(bool f(SVGPathSeg element)) =>
-     _Collections.filter(this, <SVGPathSeg>[], f);
+  Collection<PathSeg> filter(bool f(PathSeg element)) =>
+     _Collections.filter(this, <PathSeg>[], f);
 
-  bool every(bool f(SVGPathSeg element)) => _Collections.every(this, f);
+  bool every(bool f(PathSeg element)) => _Collections.every(this, f);
 
-  bool some(bool f(SVGPathSeg element)) => _Collections.some(this, f);
+  bool some(bool f(PathSeg element)) => _Collections.some(this, f);
 
   bool get isEmpty => this.length == 0;
 
-  // From List<SVGPathSeg>:
+  // From List<PathSeg>:
 
-  void sort([Comparator<SVGPathSeg> compare = Comparable.compare]) {
+  void sort([Comparator<PathSeg> compare = Comparable.compare]) {
     throw new UnsupportedError("Cannot sort immutable List.");
   }
 
-  int indexOf(SVGPathSeg element, [int start = 0]) =>
+  int indexOf(PathSeg element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
-  int lastIndexOf(SVGPathSeg element, [int start]) {
+  int lastIndexOf(PathSeg element, [int start]) {
     if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGPathSeg get last => this[length - 1];
+  PathSeg get first => this[0];
 
-  SVGPathSeg removeLast() {
+  PathSeg get last => this[length - 1];
+
+  PathSeg removeLast() {
     throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
-  void setRange(int start, int rangeLength, List<SVGPathSeg> from, [int startFrom]) {
+  void setRange(int start, int rangeLength, List<PathSeg> from, [int startFrom]) {
     throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
@@ -4212,48 +4173,48 @@
     throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
-  void insertRange(int start, int rangeLength, [SVGPathSeg initialValue]) {
+  void insertRange(int start, int rangeLength, [PathSeg initialValue]) {
     throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
-  List<SVGPathSeg> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGPathSeg>[]);
+  List<PathSeg> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <PathSeg>[]);
 
-  // -- end List<SVGPathSeg> mixins.
+  // -- end List<PathSeg> mixins.
 
-  /** @domName SVGPathSegList.appendItem */
-  SVGPathSeg appendItem(SVGPathSeg newItem) native;
+  /// @domName SVGPathSegList.appendItem; @docsEditable true
+  PathSeg appendItem(PathSeg newItem) native;
 
-  /** @domName SVGPathSegList.clear */
+  /// @domName SVGPathSegList.clear; @docsEditable true
   void clear() native;
 
-  /** @domName SVGPathSegList.getItem */
-  SVGPathSeg getItem(int index) native;
+  /// @domName SVGPathSegList.getItem; @docsEditable true
+  PathSeg getItem(int index) native;
 
-  /** @domName SVGPathSegList.initialize */
-  SVGPathSeg initialize(SVGPathSeg newItem) native;
+  /// @domName SVGPathSegList.initialize; @docsEditable true
+  PathSeg initialize(PathSeg newItem) native;
 
-  /** @domName SVGPathSegList.insertItemBefore */
-  SVGPathSeg insertItemBefore(SVGPathSeg newItem, int index) native;
+  /// @domName SVGPathSegList.insertItemBefore; @docsEditable true
+  PathSeg insertItemBefore(PathSeg newItem, int index) native;
 
-  /** @domName SVGPathSegList.removeItem */
-  SVGPathSeg removeItem(int index) native;
+  /// @domName SVGPathSegList.removeItem; @docsEditable true
+  PathSeg removeItem(int index) native;
 
-  /** @domName SVGPathSegList.replaceItem */
-  SVGPathSeg replaceItem(SVGPathSeg newItem, int index) native;
+  /// @domName SVGPathSegList.replaceItem; @docsEditable true
+  PathSeg replaceItem(PathSeg newItem, int index) native;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGPathSegMovetoAbs
-class SVGPathSegMovetoAbs extends SVGPathSeg native "*SVGPathSegMovetoAbs" {
+/// @domName SVGPathSegMovetoAbs; @docsEditable true
+class PathSegMovetoAbs extends PathSeg native "*SVGPathSegMovetoAbs" {
 
-  /** @domName SVGPathSegMovetoAbs.x */
+  /// @domName SVGPathSegMovetoAbs.x; @docsEditable true
   num x;
 
-  /** @domName SVGPathSegMovetoAbs.y */
+  /// @domName SVGPathSegMovetoAbs.y; @docsEditable true
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4261,13 +4222,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPathSegMovetoRel
-class SVGPathSegMovetoRel extends SVGPathSeg native "*SVGPathSegMovetoRel" {
+/// @domName SVGPathSegMovetoRel; @docsEditable true
+class PathSegMovetoRel extends PathSeg native "*SVGPathSegMovetoRel" {
 
-  /** @domName SVGPathSegMovetoRel.x */
+  /// @domName SVGPathSegMovetoRel.x; @docsEditable true
   num x;
 
-  /** @domName SVGPathSegMovetoRel.y */
+  /// @domName SVGPathSegMovetoRel.y; @docsEditable true
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4275,291 +4236,300 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPatternElement
-class SVGPatternElement extends SVGElement implements SVGLangSpace, SVGTests, SVGStylable, SVGURIReference, SVGFitToViewBox, SVGExternalResourcesRequired native "*SVGPatternElement" {
+/// @domName SVGPatternElement; @docsEditable true
+class PatternElement extends SvgElement implements FitToViewBox, Tests, UriReference, Stylable, ExternalResourcesRequired, LangSpace native "*SVGPatternElement" {
 
-  /** @domName SVGPatternElement.height */
-  final SVGAnimatedLength height;
+  factory PatternElement() => _SvgElementFactoryProvider.createSvgElement_tag("pattern");
 
-  /** @domName SVGPatternElement.patternContentUnits */
-  final SVGAnimatedEnumeration patternContentUnits;
+  /// @domName SVGPatternElement.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGPatternElement.patternTransform */
-  final SVGAnimatedTransformList patternTransform;
+  /// @domName SVGPatternElement.patternContentUnits; @docsEditable true
+  final AnimatedEnumeration patternContentUnits;
 
-  /** @domName SVGPatternElement.patternUnits */
-  final SVGAnimatedEnumeration patternUnits;
+  /// @domName SVGPatternElement.patternTransform; @docsEditable true
+  final AnimatedTransformList patternTransform;
 
-  /** @domName SVGPatternElement.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGPatternElement.patternUnits; @docsEditable true
+  final AnimatedEnumeration patternUnits;
 
-  /** @domName SVGPatternElement.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGPatternElement.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGPatternElement.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGPatternElement.x; @docsEditable true
+  final AnimatedLength x;
+
+  /// @domName SVGPatternElement.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGFitToViewBox
 
-  /** @domName SVGFitToViewBox.preserveAspectRatio */
-  final SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+  /// @domName SVGFitToViewBox.preserveAspectRatio; @docsEditable true
+  final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  /** @domName SVGFitToViewBox.viewBox */
-  final SVGAnimatedRect viewBox;
+  /// @domName SVGFitToViewBox.viewBox; @docsEditable true
+  final AnimatedRect viewBox;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 
   // From SVGURIReference
 
-  /** @domName SVGURIReference.href */
-  final SVGAnimatedString href;
+  /// @domName SVGURIReference.href; @docsEditable true
+  final AnimatedString href;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// WARNING: Do not edit - generated code.
 
-/// @domName SVGPoint
-class SVGPoint native "*SVGPoint" {
 
-  /** @domName SVGPoint.x */
+class Point native "*SVGPoint" {
+  factory Point(num x, num y) => _PointFactoryProvider.createPoint(x, y);
+
+  /// @domName SVGPoint.x; @docsEditable true
   num x;
 
-  /** @domName SVGPoint.y */
+  /// @domName SVGPoint.y; @docsEditable true
   num y;
 
-  /** @domName SVGPoint.matrixTransform */
-  SVGPoint matrixTransform(SVGMatrix matrix) native;
+  /// @domName SVGPoint.matrixTransform; @docsEditable true
+  Point matrixTransform(Matrix matrix) native;
+
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGPointList
-class SVGPointList native "*SVGPointList" {
+/// @domName SVGPointList; @docsEditable true
+class PointList native "*SVGPointList" {
 
-  /** @domName SVGPointList.numberOfItems */
+  /// @domName SVGPointList.numberOfItems; @docsEditable true
   final int numberOfItems;
 
-  /** @domName SVGPointList.appendItem */
-  SVGPoint appendItem(SVGPoint item) native;
+  /// @domName SVGPointList.appendItem; @docsEditable true
+  Point appendItem(Point item) native;
 
-  /** @domName SVGPointList.clear */
+  /// @domName SVGPointList.clear; @docsEditable true
   void clear() native;
 
-  /** @domName SVGPointList.getItem */
-  SVGPoint getItem(int index) native;
+  /// @domName SVGPointList.getItem; @docsEditable true
+  Point getItem(int index) native;
 
-  /** @domName SVGPointList.initialize */
-  SVGPoint initialize(SVGPoint item) native;
+  /// @domName SVGPointList.initialize; @docsEditable true
+  Point initialize(Point item) native;
 
-  /** @domName SVGPointList.insertItemBefore */
-  SVGPoint insertItemBefore(SVGPoint item, int index) native;
+  /// @domName SVGPointList.insertItemBefore; @docsEditable true
+  Point insertItemBefore(Point item, int index) native;
 
-  /** @domName SVGPointList.removeItem */
-  SVGPoint removeItem(int index) native;
+  /// @domName SVGPointList.removeItem; @docsEditable true
+  Point removeItem(int index) native;
 
-  /** @domName SVGPointList.replaceItem */
-  SVGPoint replaceItem(SVGPoint item, int index) native;
+  /// @domName SVGPointList.replaceItem; @docsEditable true
+  Point replaceItem(Point item, int index) native;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGPolygonElement
-class SVGPolygonElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGPolygonElement" {
+/// @domName SVGPolygonElement; @docsEditable true
+class PolygonElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGPolygonElement" {
 
-  /** @domName SVGPolygonElement.animatedPoints */
-  final SVGPointList animatedPoints;
+  factory PolygonElement() => _SvgElementFactoryProvider.createSvgElement_tag("polygon");
 
-  /** @domName SVGPolygonElement.points */
-  final SVGPointList points;
+  /// @domName SVGPolygonElement.animatedPoints; @docsEditable true
+  final PointList animatedPoints;
+
+  /// @domName SVGPolygonElement.points; @docsEditable true
+  final PointList points;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGLocatable
 
-  /** @domName SVGLocatable.farthestViewportElement */
-  final SVGElement farthestViewportElement;
+  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  final SvgElement farthestViewportElement;
 
-  /** @domName SVGLocatable.nearestViewportElement */
-  final SVGElement nearestViewportElement;
+  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  final SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native;
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox() native;
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native;
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM() native;
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native;
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM() native;
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native;
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /** @domName SVGTransformable.transform */
-  final SVGAnimatedTransformList transform;
+  /// @domName SVGTransformable.transform; @docsEditable true
+  final AnimatedTransformList 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
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPolylineElement
-class SVGPolylineElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGPolylineElement" {
+/// @domName SVGPolylineElement; @docsEditable true
+class PolylineElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGPolylineElement" {
 
-  /** @domName SVGPolylineElement.animatedPoints */
-  final SVGPointList animatedPoints;
+  factory PolylineElement() => _SvgElementFactoryProvider.createSvgElement_tag("polyline");
 
-  /** @domName SVGPolylineElement.points */
-  final SVGPointList points;
+  /// @domName SVGPolylineElement.animatedPoints; @docsEditable true
+  final PointList animatedPoints;
+
+  /// @domName SVGPolylineElement.points; @docsEditable true
+  final PointList points;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGLocatable
 
-  /** @domName SVGLocatable.farthestViewportElement */
-  final SVGElement farthestViewportElement;
+  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  final SvgElement farthestViewportElement;
 
-  /** @domName SVGLocatable.nearestViewportElement */
-  final SVGElement nearestViewportElement;
+  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  final SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native;
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox() native;
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native;
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM() native;
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native;
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM() native;
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native;
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /** @domName SVGTransformable.transform */
-  final SVGAnimatedTransformList transform;
+  /// @domName SVGTransformable.transform; @docsEditable true
+  final AnimatedTransformList 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
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGPreserveAspectRatio
-class SVGPreserveAspectRatio native "*SVGPreserveAspectRatio" {
+/// @domName SVGPreserveAspectRatio; @docsEditable true
+class PreserveAspectRatio native "*SVGPreserveAspectRatio" {
 
   static const int SVG_MEETORSLICE_MEET = 1;
 
@@ -4589,10 +4559,10 @@
 
   static const int SVG_PRESERVEASPECTRATIO_XMINYMIN = 2;
 
-  /** @domName SVGPreserveAspectRatio.align */
+  /// @domName SVGPreserveAspectRatio.align; @docsEditable true
   int align;
 
-  /** @domName SVGPreserveAspectRatio.meetOrSlice */
+  /// @domName SVGPreserveAspectRatio.meetOrSlice; @docsEditable true
   int meetOrSlice;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4600,45 +4570,47 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGRadialGradientElement
-class SVGRadialGradientElement extends SVGGradientElement native "*SVGRadialGradientElement" {
+/// @domName SVGRadialGradientElement; @docsEditable true
+class RadialGradientElement extends GradientElement native "*SVGRadialGradientElement" {
 
-  /** @domName SVGRadialGradientElement.cx */
-  final SVGAnimatedLength cx;
+  factory RadialGradientElement() => _SvgElementFactoryProvider.createSvgElement_tag("radialGradient");
 
-  /** @domName SVGRadialGradientElement.cy */
-  final SVGAnimatedLength cy;
+  /// @domName SVGRadialGradientElement.cx; @docsEditable true
+  final AnimatedLength cx;
 
-  /** @domName SVGRadialGradientElement.fr */
-  final SVGAnimatedLength fr;
+  /// @domName SVGRadialGradientElement.cy; @docsEditable true
+  final AnimatedLength cy;
 
-  /** @domName SVGRadialGradientElement.fx */
-  final SVGAnimatedLength fx;
+  /// @domName SVGRadialGradientElement.fr; @docsEditable true
+  final AnimatedLength fr;
 
-  /** @domName SVGRadialGradientElement.fy */
-  final SVGAnimatedLength fy;
+  /// @domName SVGRadialGradientElement.fx; @docsEditable true
+  final AnimatedLength fx;
 
-  /** @domName SVGRadialGradientElement.r */
-  final SVGAnimatedLength r;
+  /// @domName SVGRadialGradientElement.fy; @docsEditable true
+  final AnimatedLength fy;
+
+  /// @domName SVGRadialGradientElement.r; @docsEditable true
+  final AnimatedLength r;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGRect
-class SVGRect native "*SVGRect" {
+/// @domName SVGRect; @docsEditable true
+class Rect native "*SVGRect" {
 
-  /** @domName SVGRect.height */
+  /// @domName SVGRect.height; @docsEditable true
   num height;
 
-  /** @domName SVGRect.width */
+  /// @domName SVGRect.width; @docsEditable true
   num width;
 
-  /** @domName SVGRect.x */
+  /// @domName SVGRect.x; @docsEditable true
   num x;
 
-  /** @domName SVGRect.y */
+  /// @domName SVGRect.y; @docsEditable true
   num y;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4646,97 +4618,99 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGRectElement
-class SVGRectElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGRectElement" {
+/// @domName SVGRectElement; @docsEditable true
+class RectElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGRectElement" {
 
-  /** @domName SVGRectElement.height */
-  final SVGAnimatedLength height;
+  factory RectElement() => _SvgElementFactoryProvider.createSvgElement_tag("rect");
 
-  /** @domName SVGRectElement.rx */
-  final SVGAnimatedLength rx;
+  /// @domName SVGRectElement.height; @docsEditable true
+  final AnimatedLength height;
 
-  /** @domName SVGRectElement.ry */
-  final SVGAnimatedLength ry;
+  /// @domName SVGRectElement.rx; @docsEditable true
+  final AnimatedLength rx;
 
-  /** @domName SVGRectElement.width */
-  final SVGAnimatedLength width;
+  /// @domName SVGRectElement.ry; @docsEditable true
+  final AnimatedLength ry;
 
-  /** @domName SVGRectElement.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGRectElement.width; @docsEditable true
+  final AnimatedLength width;
 
-  /** @domName SVGRectElement.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGRectElement.x; @docsEditable true
+  final AnimatedLength x;
+
+  /// @domName SVGRectElement.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGLocatable
 
-  /** @domName SVGLocatable.farthestViewportElement */
-  final SVGElement farthestViewportElement;
+  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  final SvgElement farthestViewportElement;
 
-  /** @domName SVGLocatable.nearestViewportElement */
-  final SVGElement nearestViewportElement;
+  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  final SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native;
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox() native;
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native;
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM() native;
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native;
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM() native;
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native;
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /** @domName SVGTransformable.transform */
-  final SVGAnimatedTransformList transform;
+  /// @domName SVGTransformable.transform; @docsEditable true
+  final AnimatedTransformList 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
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGRenderingIntent
-class SVGRenderingIntent native "*SVGRenderingIntent" {
+/// @domName SVGRenderingIntent; @docsEditable true
+class RenderingIntent native "*SVGRenderingIntent" {
 
   static const int RENDERING_INTENT_ABSOLUTE_COLORIMETRIC = 5;
 
@@ -4755,245 +4729,56 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-class SVGSVGElement extends SVGElement implements SVGZoomAndPan, SVGLocatable, SVGLangSpace, SVGTests, SVGStylable, SVGFitToViewBox, SVGExternalResourcesRequired native "*SVGSVGElement" {
-  factory SVGSVGElement() => _SVGSVGElementFactoryProvider.createSVGSVGElement();
+/// @domName SVGScriptElement; @docsEditable true
+class ScriptElement extends SvgElement implements UriReference, ExternalResourcesRequired native "*SVGScriptElement" {
 
+  factory ScriptElement() => _SvgElementFactoryProvider.createSvgElement_tag("script");
 
-  /** @domName SVGSVGElement.contentScriptType */
-  String contentScriptType;
-
-  /** @domName SVGSVGElement.contentStyleType */
-  String contentStyleType;
-
-  /** @domName SVGSVGElement.currentScale */
-  num currentScale;
-
-  /** @domName SVGSVGElement.currentTranslate */
-  final SVGPoint currentTranslate;
-
-  /** @domName SVGSVGElement.currentView */
-  final SVGViewSpec currentView;
-
-  /** @domName SVGSVGElement.height */
-  final SVGAnimatedLength height;
-
-  /** @domName SVGSVGElement.pixelUnitToMillimeterX */
-  final num pixelUnitToMillimeterX;
-
-  /** @domName SVGSVGElement.pixelUnitToMillimeterY */
-  final num pixelUnitToMillimeterY;
-
-  /** @domName SVGSVGElement.screenPixelToMillimeterX */
-  final num screenPixelToMillimeterX;
-
-  /** @domName SVGSVGElement.screenPixelToMillimeterY */
-  final num screenPixelToMillimeterY;
-
-  /** @domName SVGSVGElement.useCurrentView */
-  final bool useCurrentView;
-
-  /** @domName SVGSVGElement.viewport */
-  final SVGRect viewport;
-
-  /** @domName SVGSVGElement.width */
-  final SVGAnimatedLength width;
-
-  /** @domName SVGSVGElement.x */
-  final SVGAnimatedLength x;
-
-  /** @domName SVGSVGElement.y */
-  final SVGAnimatedLength y;
-
-  /** @domName SVGSVGElement.animationsPaused */
-  bool animationsPaused() native;
-
-  /** @domName SVGSVGElement.checkEnclosure */
-  bool checkEnclosure(SVGElement element, SVGRect rect) native;
-
-  /** @domName SVGSVGElement.checkIntersection */
-  bool checkIntersection(SVGElement element, SVGRect rect) native;
-
-  /** @domName SVGSVGElement.createSVGAngle */
-  SVGAngle createSVGAngle() native;
-
-  /** @domName SVGSVGElement.createSVGLength */
-  SVGLength createSVGLength() native;
-
-  /** @domName SVGSVGElement.createSVGMatrix */
-  SVGMatrix createSVGMatrix() native;
-
-  /** @domName SVGSVGElement.createSVGNumber */
-  SVGNumber createSVGNumber() native;
-
-  /** @domName SVGSVGElement.createSVGPoint */
-  SVGPoint createSVGPoint() native;
-
-  /** @domName SVGSVGElement.createSVGRect */
-  SVGRect createSVGRect() native;
-
-  /** @domName SVGSVGElement.createSVGTransform */
-  SVGTransform createSVGTransform() native;
-
-  /** @domName SVGSVGElement.createSVGTransformFromMatrix */
-  SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix) native;
-
-  /** @domName SVGSVGElement.deselectAll */
-  void deselectAll() native;
-
-  /** @domName SVGSVGElement.forceRedraw */
-  void forceRedraw() native;
-
-  /** @domName SVGSVGElement.getCurrentTime */
-  num getCurrentTime() native;
-
-  /** @domName SVGSVGElement.getElementById */
-  Element getElementById(String elementId) native;
-
-  /** @domName SVGSVGElement.getEnclosureList */
-  List<Node> getEnclosureList(SVGRect rect, SVGElement referenceElement) native;
-
-  /** @domName SVGSVGElement.getIntersectionList */
-  List<Node> getIntersectionList(SVGRect rect, SVGElement referenceElement) native;
-
-  /** @domName SVGSVGElement.pauseAnimations */
-  void pauseAnimations() native;
-
-  /** @domName SVGSVGElement.setCurrentTime */
-  void setCurrentTime(num seconds) native;
-
-  /** @domName SVGSVGElement.suspendRedraw */
-  int suspendRedraw(int maxWaitMilliseconds) native;
-
-  /** @domName SVGSVGElement.unpauseAnimations */
-  void unpauseAnimations() native;
-
-  /** @domName SVGSVGElement.unsuspendRedraw */
-  void unsuspendRedraw(int suspendHandleId) native;
-
-  /** @domName SVGSVGElement.unsuspendRedrawAll */
-  void unsuspendRedrawAll() native;
-
-  // From SVGExternalResourcesRequired
-
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
-
-  // From SVGFitToViewBox
-
-  /** @domName SVGFitToViewBox.preserveAspectRatio */
-  final SVGAnimatedPreserveAspectRatio preserveAspectRatio;
-
-  /** @domName SVGFitToViewBox.viewBox */
-  final SVGAnimatedRect viewBox;
-
-  // From SVGLangSpace
-
-  /** @domName SVGLangSpace.xmllang */
-  String xmllang;
-
-  /** @domName SVGLangSpace.xmlspace */
-  String xmlspace;
-
-  // From SVGLocatable
-
-  /** @domName SVGLocatable.farthestViewportElement */
-  final SVGElement farthestViewportElement;
-
-  /** @domName SVGLocatable.nearestViewportElement */
-  final SVGElement nearestViewportElement;
-
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native;
-
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native;
-
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native;
-
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native;
-
-  // From SVGStylable
-
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
-
-  // Use implementation from Element.
-  // final CSSStyleDeclaration style;
-
-  /** @domName SVGStylable.getPresentationAttribute */
-  CSSValue getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
-
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
-
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
-
-  /** @domName SVGTests.hasExtension */
-  bool hasExtension(String extension) native;
-
-  // From SVGZoomAndPan
-
-  /** @domName SVGZoomAndPan.zoomAndPan */
-  int zoomAndPan;
-
-}
-// Copyright (c) 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.
-
-
-/// @domName SVGScriptElement
-class SVGScriptElement extends SVGElement implements SVGURIReference, SVGExternalResourcesRequired native "*SVGScriptElement" {
-
-  /** @domName SVGScriptElement.type */
+  /// @domName SVGScriptElement.type; @docsEditable true
   String type;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGURIReference
 
-  /** @domName SVGURIReference.href */
-  final SVGAnimatedString href;
+  /// @domName SVGURIReference.href; @docsEditable true
+  final AnimatedString href;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGSetElement
-class SVGSetElement extends SVGAnimationElement native "*SVGSetElement" {
+/// @domName SVGSetElement; @docsEditable true
+class SetElement extends AnimationElement native "*SVGSetElement" {
+
+  factory SetElement() => _SvgElementFactoryProvider.createSvgElement_tag("set");
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGStopElement
-class SVGStopElement extends SVGElement implements SVGStylable native "*SVGStopElement" {
+/// @domName SVGStopElement; @docsEditable true
+class StopElement extends SvgElement implements Stylable native "*SVGStopElement" {
 
-  /** @domName SVGStopElement.offset */
-  final SVGAnimatedNumber offset;
+  factory StopElement() => _SvgElementFactoryProvider.createSvgElement_tag("stop");
+
+  /// @domName SVGStopElement.offset; @docsEditable true
+  final AnimatedNumber offset;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5001,10 +4786,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGStringList
-class SVGStringList implements JavaScriptIndexingBehavior, List<String> native "*SVGStringList" {
+/// @domName SVGStringList; @docsEditable true
+class StringList implements JavaScriptIndexingBehavior, List<String> native "*SVGStringList" {
 
-  /** @domName SVGStringList.numberOfItems */
+  /// @domName SVGStringList.numberOfItems; @docsEditable true
   final int numberOfItems;
 
   String operator[](int index) => JS("String", "#[#]", this, index);
@@ -5067,6 +4852,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  String get first => this[0];
+
   String get last => this[length - 1];
 
   String removeLast() {
@@ -5090,25 +4877,25 @@
 
   // -- end List<String> mixins.
 
-  /** @domName SVGStringList.appendItem */
+  /// @domName SVGStringList.appendItem; @docsEditable true
   String appendItem(String item) native;
 
-  /** @domName SVGStringList.clear */
+  /// @domName SVGStringList.clear; @docsEditable true
   void clear() native;
 
-  /** @domName SVGStringList.getItem */
+  /// @domName SVGStringList.getItem; @docsEditable true
   String getItem(int index) native;
 
-  /** @domName SVGStringList.initialize */
+  /// @domName SVGStringList.initialize; @docsEditable true
   String initialize(String item) native;
 
-  /** @domName SVGStringList.insertItemBefore */
+  /// @domName SVGStringList.insertItemBefore; @docsEditable true
   String insertItemBefore(String item, int index) native;
 
-  /** @domName SVGStringList.removeItem */
+  /// @domName SVGStringList.removeItem; @docsEditable true
   String removeItem(int index) native;
 
-  /** @domName SVGStringList.replaceItem */
+  /// @domName SVGStringList.replaceItem; @docsEditable true
   String replaceItem(String item, int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5117,13 +4904,13 @@
 
 
 /// @domName SVGStylable
-abstract class SVGStylable {
+abstract class Stylable {
 
-  SVGAnimatedString className;
+  AnimatedString className;
 
   CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5131,33 +4918,35 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGStyleElement
-class SVGStyleElement extends SVGElement implements SVGLangSpace native "*SVGStyleElement" {
+/// @domName SVGStyleElement; @docsEditable true
+class StyleElement extends SvgElement implements LangSpace native "*SVGStyleElement" {
 
-  /** @domName SVGStyleElement.disabled */
+  factory StyleElement() => _SvgElementFactoryProvider.createSvgElement_tag("style");
+
+  /// @domName SVGStyleElement.disabled; @docsEditable true
   bool disabled;
 
-  /** @domName SVGStyleElement.media */
+  /// @domName SVGStyleElement.media; @docsEditable true
   String media;
 
   // Shadowing definition.
-  /** @domName SVGStyleElement.title */
+  /// @domName SVGStyleElement.title; @docsEditable true
   String get title => JS("String", "#.title", this);
 
-  /** @domName SVGStyleElement.title */
+  /// @domName SVGStyleElement.title; @docsEditable true
   void set title(String value) {
     JS("void", "#.title = #", this, value);
   }
 
-  /** @domName SVGStyleElement.type */
+  /// @domName SVGStyleElement.type; @docsEditable true
   String type;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5165,110 +4954,429 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGSwitchElement
-class SVGSwitchElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGSwitchElement" {
+/// @domName SVGDocument; @docsEditable true
+class SvgDocument extends Document native "*SVGDocument" {
+
+  /// @domName SVGDocument.rootElement; @docsEditable true
+  final SvgSvgElement rootElement;
+
+  /// @domName SVGDocument.createEvent; @docsEditable true
+  Event $dom_createEvent(String eventType) native "createEvent";
+}
+// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+
+class _AttributeClassSet extends CssClassSet {
+  final Element _element;
+
+  _AttributeClassSet(this._element);
+
+  Set<String> readClasses() {
+    var classname = _element.attributes['class'];
+
+    Set<String> s = new Set<String>();
+    if (classname == null) {
+      return s;
+    }
+    for (String name in classname.split(' ')) {
+      String trimmed = name.trim();
+      if (!trimmed.isEmpty) {
+        s.add(trimmed);
+      }
+    }
+    return s;
+  }
+
+  void writeClasses(Set s) {
+    List list = new List.from(s);
+    _element.attributes['class'] = Strings.join(list, ' ');
+  }
+}
+
+class SvgElement extends Element native "*SVGElement" {
+  factory SvgElement.tag(String tag) =>
+      _SvgElementFactoryProvider.createSvgElement_tag(tag);
+  factory SvgElement.svg(String svg) =>
+      _SvgElementFactoryProvider.createSvgElement_svg(svg);
+
+  _AttributeClassSet _cssClassSet;
+  CssClassSet get classes {
+    if (_cssClassSet == null) {
+      _cssClassSet = new _AttributeClassSet(this);
+    }
+    return _cssClassSet;
+  }
+
+  List<Element> get elements => new FilteredElementList(this);
+
+  void set elements(Collection<Element> value) {
+    final elements = this.elements;
+    elements.clear();
+    elements.addAll(value);
+  }
+
+  List<Element> get children => new FilteredElementList(this);
+
+  void set children(Collection<Element> value) {
+    final children = this.children;
+    children.clear();
+    children.addAll(value);
+  }
+
+  String get outerHTML {
+    final container = new Element.tag("div");
+    final SvgElement cloned = this.clone(true);
+    container.children.add(cloned);
+    return container.innerHTML;
+  }
+
+  String get innerHTML {
+    final container = new Element.tag("div");
+    final SvgElement cloned = this.clone(true);
+    container.children.addAll(cloned.children);
+    return container.innerHTML;
+  }
+
+  void set innerHTML(String svg) {
+    final container = new Element.tag("div");
+    // Wrap the SVG string in <svg> so that SvgElements are created, rather than
+    // HTMLElements.
+    container.innerHTML = '<svg version="1.1">$svg</svg>';
+    this.children = container.children[0].children;
+  }
+
+
+  // Shadowing definition.
+  /// @domName SVGElement.id; @docsEditable true
+  String get id => JS("String", "#.id", this);
+
+  /// @domName SVGElement.id; @docsEditable true
+  void set id(String value) {
+    JS("void", "#.id = #", this, value);
+  }
+
+  /// @domName SVGElement.ownerSVGElement; @docsEditable true
+  final SvgSvgElement ownerSVGElement;
+
+  /// @domName SVGElement.viewportElement; @docsEditable true
+  final SvgElement viewportElement;
+
+  /// @domName SVGElement.xmlbase; @docsEditable true
+  String xmlbase;
+
+}
+// Copyright (c) 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.
+
+
+class SvgSvgElement extends SvgElement implements FitToViewBox, Tests, Stylable, Locatable, ExternalResourcesRequired, ZoomAndPan, LangSpace native "*SVGSVGElement" {
+  factory SvgSvgElement() => _SvgSvgElementFactoryProvider.createSvgSvgElement();
+
+
+  /// @domName SVGSVGElement.contentScriptType; @docsEditable true
+  String contentScriptType;
+
+  /// @domName SVGSVGElement.contentStyleType; @docsEditable true
+  String contentStyleType;
+
+  /// @domName SVGSVGElement.currentScale; @docsEditable true
+  num currentScale;
+
+  /// @domName SVGSVGElement.currentTranslate; @docsEditable true
+  final Point currentTranslate;
+
+  /// @domName SVGSVGElement.currentView; @docsEditable true
+  final ViewSpec currentView;
+
+  /// @domName SVGSVGElement.height; @docsEditable true
+  final AnimatedLength height;
+
+  /// @domName SVGSVGElement.pixelUnitToMillimeterX; @docsEditable true
+  final num pixelUnitToMillimeterX;
+
+  /// @domName SVGSVGElement.pixelUnitToMillimeterY; @docsEditable true
+  final num pixelUnitToMillimeterY;
+
+  /// @domName SVGSVGElement.screenPixelToMillimeterX; @docsEditable true
+  final num screenPixelToMillimeterX;
+
+  /// @domName SVGSVGElement.screenPixelToMillimeterY; @docsEditable true
+  final num screenPixelToMillimeterY;
+
+  /// @domName SVGSVGElement.useCurrentView; @docsEditable true
+  final bool useCurrentView;
+
+  /// @domName SVGSVGElement.viewport; @docsEditable true
+  final Rect viewport;
+
+  /// @domName SVGSVGElement.width; @docsEditable true
+  final AnimatedLength width;
+
+  /// @domName SVGSVGElement.x; @docsEditable true
+  final AnimatedLength x;
+
+  /// @domName SVGSVGElement.y; @docsEditable true
+  final AnimatedLength y;
+
+  /// @domName SVGSVGElement.animationsPaused; @docsEditable true
+  bool animationsPaused() native;
+
+  /// @domName SVGSVGElement.checkEnclosure; @docsEditable true
+  bool checkEnclosure(SvgElement element, Rect rect) native;
+
+  /// @domName SVGSVGElement.checkIntersection; @docsEditable true
+  bool checkIntersection(SvgElement element, Rect rect) native;
+
+  /// @domName SVGSVGElement.createSVGAngle; @docsEditable true
+  Angle createSVGAngle() native;
+
+  /// @domName SVGSVGElement.createSVGLength; @docsEditable true
+  Length createSVGLength() native;
+
+  /// @domName SVGSVGElement.createSVGMatrix; @docsEditable true
+  Matrix createSVGMatrix() native;
+
+  /// @domName SVGSVGElement.createSVGNumber; @docsEditable true
+  Number createSVGNumber() native;
+
+  /// @domName SVGSVGElement.createSVGPoint; @docsEditable true
+  Point createSVGPoint() native;
+
+  /// @domName SVGSVGElement.createSVGRect; @docsEditable true
+  Rect createSVGRect() native;
+
+  /// @domName SVGSVGElement.createSVGTransform; @docsEditable true
+  Transform createSVGTransform() native;
+
+  /// @domName SVGSVGElement.createSVGTransformFromMatrix; @docsEditable true
+  Transform createSVGTransformFromMatrix(Matrix matrix) native;
+
+  /// @domName SVGSVGElement.deselectAll; @docsEditable true
+  void deselectAll() native;
+
+  /// @domName SVGSVGElement.forceRedraw; @docsEditable true
+  void forceRedraw() native;
+
+  /// @domName SVGSVGElement.getCurrentTime; @docsEditable true
+  num getCurrentTime() native;
+
+  /// @domName SVGSVGElement.getElementById; @docsEditable true
+  Element getElementById(String elementId) native;
+
+  /// @domName SVGSVGElement.getEnclosureList; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
+  List<Node> getEnclosureList(Rect rect, SvgElement referenceElement) native;
+
+  /// @domName SVGSVGElement.getIntersectionList; @docsEditable true
+  @Returns('_NodeList') @Creates('_NodeList')
+  List<Node> getIntersectionList(Rect rect, SvgElement referenceElement) native;
+
+  /// @domName SVGSVGElement.pauseAnimations; @docsEditable true
+  void pauseAnimations() native;
+
+  /// @domName SVGSVGElement.setCurrentTime; @docsEditable true
+  void setCurrentTime(num seconds) native;
+
+  /// @domName SVGSVGElement.suspendRedraw; @docsEditable true
+  int suspendRedraw(int maxWaitMilliseconds) native;
+
+  /// @domName SVGSVGElement.unpauseAnimations; @docsEditable true
+  void unpauseAnimations() native;
+
+  /// @domName SVGSVGElement.unsuspendRedraw; @docsEditable true
+  void unsuspendRedraw(int suspendHandleId) native;
+
+  /// @domName SVGSVGElement.unsuspendRedrawAll; @docsEditable true
+  void unsuspendRedrawAll() native;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
+
+  // From SVGFitToViewBox
+
+  /// @domName SVGFitToViewBox.preserveAspectRatio; @docsEditable true
+  final AnimatedPreserveAspectRatio preserveAspectRatio;
+
+  /// @domName SVGFitToViewBox.viewBox; @docsEditable true
+  final AnimatedRect viewBox;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGLocatable
 
-  /** @domName SVGLocatable.farthestViewportElement */
-  final SVGElement farthestViewportElement;
+  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  final SvgElement farthestViewportElement;
 
-  /** @domName SVGLocatable.nearestViewportElement */
-  final SVGElement nearestViewportElement;
+  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  final SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native;
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox() native;
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native;
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM() native;
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native;
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM() native;
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native;
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 
-  // From SVGTransformable
+  // From SVGZoomAndPan
 
-  /** @domName SVGTransformable.transform */
-  final SVGAnimatedTransformList transform;
+  /// @domName SVGZoomAndPan.zoomAndPan; @docsEditable true
+  int zoomAndPan;
+
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGSymbolElement
-class SVGSymbolElement extends SVGElement implements SVGLangSpace, SVGFitToViewBox, SVGExternalResourcesRequired, SVGStylable native "*SVGSymbolElement" {
+/// @domName SVGSwitchElement; @docsEditable true
+class SwitchElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGSwitchElement" {
+
+  factory SwitchElement() => _SvgElementFactoryProvider.createSvgElement_tag("switch");
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
-
-  // From SVGFitToViewBox
-
-  /** @domName SVGFitToViewBox.preserveAspectRatio */
-  final SVGAnimatedPreserveAspectRatio preserveAspectRatio;
-
-  /** @domName SVGFitToViewBox.viewBox */
-  final SVGAnimatedRect viewBox;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
+  // From SVGLocatable
+
+  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  final SvgElement farthestViewportElement;
+
+  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  final SvgElement nearestViewportElement;
+
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox() native;
+
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM() native;
+
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM() native;
+
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element) native;
+
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
+
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
+
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
+
+  /// @domName SVGTests.hasExtension; @docsEditable true
+  bool hasExtension(String extension) native;
+
+  // From SVGTransformable
+
+  /// @domName SVGTransformable.transform; @docsEditable true
+  final AnimatedTransformList 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
+// BSD-style license that can be found in the LICENSE file.
+
+
+/// @domName SVGSymbolElement; @docsEditable true
+class SymbolElement extends SvgElement implements FitToViewBox, ExternalResourcesRequired, Stylable, LangSpace native "*SVGSymbolElement" {
+
+  factory SymbolElement() => _SvgElementFactoryProvider.createSvgElement_tag("symbol");
+
+  // From SVGExternalResourcesRequired
+
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
+
+  // From SVGFitToViewBox
+
+  /// @domName SVGFitToViewBox.preserveAspectRatio; @docsEditable true
+  final AnimatedPreserveAspectRatio preserveAspectRatio;
+
+  /// @domName SVGFitToViewBox.viewBox; @docsEditable true
+  final AnimatedRect viewBox;
+
+  // From SVGLangSpace
+
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
+  String xmllang;
+
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
+  String xmlspace;
+
+  // From SVGStylable
+
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5276,21 +5384,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTRefElement
-class SVGTRefElement extends SVGTextPositioningElement implements SVGURIReference native "*SVGTRefElement" {
+/// @domName SVGTRefElement; @docsEditable true
+class TRefElement extends TextPositioningElement implements UriReference native "*SVGTRefElement" {
+
+  factory TRefElement() => _SvgElementFactoryProvider.createSvgElement_tag("tref");
 
   // From SVGURIReference
 
-  /** @domName SVGURIReference.href */
-  final SVGAnimatedString href;
+  /// @domName SVGURIReference.href; @docsEditable true
+  final AnimatedString href;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGTSpanElement
-class SVGTSpanElement extends SVGTextPositioningElement native "*SVGTSpanElement" {
+/// @domName SVGTSpanElement; @docsEditable true
+class TSpanElement extends TextPositioningElement native "*SVGTSpanElement" {
+
+  factory TSpanElement() => _SvgElementFactoryProvider.createSvgElement_tag("tspan");
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -5298,15 +5410,15 @@
 
 
 /// @domName SVGTests
-abstract class SVGTests {
+abstract class Tests {
 
-  SVGStringList requiredExtensions;
+  StringList requiredExtensions;
 
-  SVGStringList requiredFeatures;
+  StringList requiredFeatures;
 
-  SVGStringList systemLanguage;
+  StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension);
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5314,8 +5426,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTextContentElement
-class SVGTextContentElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGExternalResourcesRequired native "*SVGTextContentElement" {
+/// @domName SVGTextContentElement; @docsEditable true
+class TextContentElement extends SvgElement implements Tests, Stylable, ExternalResourcesRequired, LangSpace native "*SVGTextContentElement" {
 
   static const int LENGTHADJUST_SPACING = 1;
 
@@ -5323,75 +5435,75 @@
 
   static const int LENGTHADJUST_UNKNOWN = 0;
 
-  /** @domName SVGTextContentElement.lengthAdjust */
-  final SVGAnimatedEnumeration lengthAdjust;
+  /// @domName SVGTextContentElement.lengthAdjust; @docsEditable true
+  final AnimatedEnumeration lengthAdjust;
 
-  /** @domName SVGTextContentElement.textLength */
-  final SVGAnimatedLength textLength;
+  /// @domName SVGTextContentElement.textLength; @docsEditable true
+  final AnimatedLength textLength;
 
-  /** @domName SVGTextContentElement.getCharNumAtPosition */
-  int getCharNumAtPosition(SVGPoint point) native;
+  /// @domName SVGTextContentElement.getCharNumAtPosition; @docsEditable true
+  int getCharNumAtPosition(Point point) native;
 
-  /** @domName SVGTextContentElement.getComputedTextLength */
+  /// @domName SVGTextContentElement.getComputedTextLength; @docsEditable true
   num getComputedTextLength() native;
 
-  /** @domName SVGTextContentElement.getEndPositionOfChar */
-  SVGPoint getEndPositionOfChar(int offset) native;
+  /// @domName SVGTextContentElement.getEndPositionOfChar; @docsEditable true
+  Point getEndPositionOfChar(int offset) native;
 
-  /** @domName SVGTextContentElement.getExtentOfChar */
-  SVGRect getExtentOfChar(int offset) native;
+  /// @domName SVGTextContentElement.getExtentOfChar; @docsEditable true
+  Rect getExtentOfChar(int offset) native;
 
-  /** @domName SVGTextContentElement.getNumberOfChars */
+  /// @domName SVGTextContentElement.getNumberOfChars; @docsEditable true
   int getNumberOfChars() native;
 
-  /** @domName SVGTextContentElement.getRotationOfChar */
+  /// @domName SVGTextContentElement.getRotationOfChar; @docsEditable true
   num getRotationOfChar(int offset) native;
 
-  /** @domName SVGTextContentElement.getStartPositionOfChar */
-  SVGPoint getStartPositionOfChar(int offset) native;
+  /// @domName SVGTextContentElement.getStartPositionOfChar; @docsEditable true
+  Point getStartPositionOfChar(int offset) native;
 
-  /** @domName SVGTextContentElement.getSubStringLength */
+  /// @domName SVGTextContentElement.getSubStringLength; @docsEditable true
   num getSubStringLength(int offset, int length) native;
 
-  /** @domName SVGTextContentElement.selectSubString */
+  /// @domName SVGTextContentElement.selectSubString; @docsEditable true
   void selectSubString(int offset, int length) native;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5399,41 +5511,43 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTextElement
-class SVGTextElement extends SVGTextPositioningElement implements SVGTransformable native "*SVGTextElement" {
+/// @domName SVGTextElement; @docsEditable true
+class TextElement extends TextPositioningElement implements Transformable native "*SVGTextElement" {
+
+  factory TextElement() => _SvgElementFactoryProvider.createSvgElement_tag("text");
 
   // From SVGLocatable
 
-  /** @domName SVGLocatable.farthestViewportElement */
-  final SVGElement farthestViewportElement;
+  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  final SvgElement farthestViewportElement;
 
-  /** @domName SVGLocatable.nearestViewportElement */
-  final SVGElement nearestViewportElement;
+  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  final SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native;
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox() native;
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native;
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM() native;
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native;
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM() native;
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native;
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGTransformable
 
-  /** @domName SVGTransformable.transform */
-  final SVGAnimatedTransformList transform;
+  /// @domName SVGTransformable.transform; @docsEditable true
+  final AnimatedTransformList 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
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTextPathElement
-class SVGTextPathElement extends SVGTextContentElement implements SVGURIReference native "*SVGTextPathElement" {
+/// @domName SVGTextPathElement; @docsEditable true
+class TextPathElement extends TextContentElement implements UriReference native "*SVGTextPathElement" {
 
   static const int TEXTPATH_METHODTYPE_ALIGN = 1;
 
@@ -5447,68 +5561,70 @@
 
   static const int TEXTPATH_SPACINGTYPE_UNKNOWN = 0;
 
-  /** @domName SVGTextPathElement.method */
-  final SVGAnimatedEnumeration method;
+  /// @domName SVGTextPathElement.method; @docsEditable true
+  final AnimatedEnumeration method;
 
-  /** @domName SVGTextPathElement.spacing */
-  final SVGAnimatedEnumeration spacing;
+  /// @domName SVGTextPathElement.spacing; @docsEditable true
+  final AnimatedEnumeration spacing;
 
-  /** @domName SVGTextPathElement.startOffset */
-  final SVGAnimatedLength startOffset;
+  /// @domName SVGTextPathElement.startOffset; @docsEditable true
+  final AnimatedLength startOffset;
 
   // From SVGURIReference
 
-  /** @domName SVGURIReference.href */
-  final SVGAnimatedString href;
+  /// @domName SVGURIReference.href; @docsEditable true
+  final AnimatedString href;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGTextPositioningElement
-class SVGTextPositioningElement extends SVGTextContentElement native "*SVGTextPositioningElement" {
+/// @domName SVGTextPositioningElement; @docsEditable true
+class TextPositioningElement extends TextContentElement native "*SVGTextPositioningElement" {
 
-  /** @domName SVGTextPositioningElement.dx */
-  final SVGAnimatedLengthList dx;
+  /// @domName SVGTextPositioningElement.dx; @docsEditable true
+  final AnimatedLengthList dx;
 
-  /** @domName SVGTextPositioningElement.dy */
-  final SVGAnimatedLengthList dy;
+  /// @domName SVGTextPositioningElement.dy; @docsEditable true
+  final AnimatedLengthList dy;
 
-  /** @domName SVGTextPositioningElement.rotate */
-  final SVGAnimatedNumberList rotate;
+  /// @domName SVGTextPositioningElement.rotate; @docsEditable true
+  final AnimatedNumberList rotate;
 
-  /** @domName SVGTextPositioningElement.x */
-  final SVGAnimatedLengthList x;
+  /// @domName SVGTextPositioningElement.x; @docsEditable true
+  final AnimatedLengthList x;
 
-  /** @domName SVGTextPositioningElement.y */
-  final SVGAnimatedLengthList y;
+  /// @domName SVGTextPositioningElement.y; @docsEditable true
+  final AnimatedLengthList 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
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTitleElement
-class SVGTitleElement extends SVGElement implements SVGLangSpace, SVGStylable native "*SVGTitleElement" {
+/// @domName SVGTitleElement; @docsEditable true
+class TitleElement extends SvgElement implements Stylable, LangSpace native "*SVGTitleElement" {
+
+  factory TitleElement() => _SvgElementFactoryProvider.createSvgElement_tag("title");
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5516,8 +5632,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTransform
-class SVGTransform native "*SVGTransform" {
+/// @domName SVGTransform; @docsEditable true
+class Transform native "*SVGTransform" {
 
   static const int SVG_TRANSFORM_MATRIX = 1;
 
@@ -5533,31 +5649,31 @@
 
   static const int SVG_TRANSFORM_UNKNOWN = 0;
 
-  /** @domName SVGTransform.angle */
+  /// @domName SVGTransform.angle; @docsEditable true
   final num angle;
 
-  /** @domName SVGTransform.matrix */
-  final SVGMatrix matrix;
+  /// @domName SVGTransform.matrix; @docsEditable true
+  final Matrix matrix;
 
-  /** @domName SVGTransform.type */
+  /// @domName SVGTransform.type; @docsEditable true
   final int type;
 
-  /** @domName SVGTransform.setMatrix */
-  void setMatrix(SVGMatrix matrix) native;
+  /// @domName SVGTransform.setMatrix; @docsEditable true
+  void setMatrix(Matrix matrix) native;
 
-  /** @domName SVGTransform.setRotate */
+  /// @domName SVGTransform.setRotate; @docsEditable true
   void setRotate(num angle, num cx, num cy) native;
 
-  /** @domName SVGTransform.setScale */
+  /// @domName SVGTransform.setScale; @docsEditable true
   void setScale(num sx, num sy) native;
 
-  /** @domName SVGTransform.setSkewX */
+  /// @domName SVGTransform.setSkewX; @docsEditable true
   void setSkewX(num angle) native;
 
-  /** @domName SVGTransform.setSkewY */
+  /// @domName SVGTransform.setSkewY; @docsEditable true
   void setSkewY(num angle) native;
 
-  /** @domName SVGTransform.setTranslate */
+  /// @domName SVGTransform.setTranslate; @docsEditable true
   void setTranslate(num tx, num ty) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5565,79 +5681,81 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGTransformList
-class SVGTransformList implements JavaScriptIndexingBehavior, List<SVGTransform> native "*SVGTransformList" {
+/// @domName SVGTransformList; @docsEditable true
+class TransformList implements List<Transform>, JavaScriptIndexingBehavior native "*SVGTransformList" {
 
-  /** @domName SVGTransformList.numberOfItems */
+  /// @domName SVGTransformList.numberOfItems; @docsEditable true
   final int numberOfItems;
 
-  SVGTransform operator[](int index) => JS("SVGTransform", "#[#]", this, index);
+  Transform operator[](int index) => JS("Transform", "#[#]", this, index);
 
-  void operator[]=(int index, SVGTransform value) {
+  void operator[]=(int index, Transform value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
-  // -- start List<SVGTransform> mixins.
-  // SVGTransform is the element type.
+  // -- start List<Transform> mixins.
+  // Transform is the element type.
 
-  // From Iterable<SVGTransform>:
+  // From Iterable<Transform>:
 
-  Iterator<SVGTransform> iterator() {
+  Iterator<Transform> iterator() {
     // Note: NodeLists are not fixed size. And most probably length shouldn't
     // be cached in both iterator _and_ forEach method. For now caching it
     // for consistency.
-    return new FixedSizeListIterator<SVGTransform>(this);
+    return new FixedSizeListIterator<Transform>(this);
   }
 
-  // From Collection<SVGTransform>:
+  // From Collection<Transform>:
 
-  void add(SVGTransform value) {
+  void add(Transform value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addLast(SVGTransform value) {
+  void addLast(Transform value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addAll(Collection<SVGTransform> collection) {
+  void addAll(Collection<Transform> collection) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  bool contains(SVGTransform element) => _Collections.contains(this, element);
+  bool contains(Transform element) => _Collections.contains(this, element);
 
-  void forEach(void f(SVGTransform element)) => _Collections.forEach(this, f);
+  void forEach(void f(Transform element)) => _Collections.forEach(this, f);
 
-  Collection map(f(SVGTransform element)) => _Collections.map(this, [], f);
+  Collection map(f(Transform element)) => _Collections.map(this, [], f);
 
-  Collection<SVGTransform> filter(bool f(SVGTransform element)) =>
-     _Collections.filter(this, <SVGTransform>[], f);
+  Collection<Transform> filter(bool f(Transform element)) =>
+     _Collections.filter(this, <Transform>[], f);
 
-  bool every(bool f(SVGTransform element)) => _Collections.every(this, f);
+  bool every(bool f(Transform element)) => _Collections.every(this, f);
 
-  bool some(bool f(SVGTransform element)) => _Collections.some(this, f);
+  bool some(bool f(Transform element)) => _Collections.some(this, f);
 
   bool get isEmpty => this.length == 0;
 
-  // From List<SVGTransform>:
+  // From List<Transform>:
 
-  void sort([Comparator<SVGTransform> compare = Comparable.compare]) {
+  void sort([Comparator<Transform> compare = Comparable.compare]) {
     throw new UnsupportedError("Cannot sort immutable List.");
   }
 
-  int indexOf(SVGTransform element, [int start = 0]) =>
+  int indexOf(Transform element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
-  int lastIndexOf(SVGTransform element, [int start]) {
+  int lastIndexOf(Transform element, [int start]) {
     if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGTransform get last => this[length - 1];
+  Transform get first => this[0];
 
-  SVGTransform removeLast() {
+  Transform get last => this[length - 1];
+
+  Transform removeLast() {
     throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
-  void setRange(int start, int rangeLength, List<SVGTransform> from, [int startFrom]) {
+  void setRange(int start, int rangeLength, List<Transform> from, [int startFrom]) {
     throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
@@ -5645,41 +5763,41 @@
     throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
-  void insertRange(int start, int rangeLength, [SVGTransform initialValue]) {
+  void insertRange(int start, int rangeLength, [Transform initialValue]) {
     throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
-  List<SVGTransform> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGTransform>[]);
+  List<Transform> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Transform>[]);
 
-  // -- end List<SVGTransform> mixins.
+  // -- end List<Transform> mixins.
 
-  /** @domName SVGTransformList.appendItem */
-  SVGTransform appendItem(SVGTransform item) native;
+  /// @domName SVGTransformList.appendItem; @docsEditable true
+  Transform appendItem(Transform item) native;
 
-  /** @domName SVGTransformList.clear */
+  /// @domName SVGTransformList.clear; @docsEditable true
   void clear() native;
 
-  /** @domName SVGTransformList.consolidate */
-  SVGTransform consolidate() native;
+  /// @domName SVGTransformList.consolidate; @docsEditable true
+  Transform consolidate() native;
 
-  /** @domName SVGTransformList.createSVGTransformFromMatrix */
-  SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix) native;
+  /// @domName SVGTransformList.createSVGTransformFromMatrix; @docsEditable true
+  Transform createSVGTransformFromMatrix(Matrix matrix) native;
 
-  /** @domName SVGTransformList.getItem */
-  SVGTransform getItem(int index) native;
+  /// @domName SVGTransformList.getItem; @docsEditable true
+  Transform getItem(int index) native;
 
-  /** @domName SVGTransformList.initialize */
-  SVGTransform initialize(SVGTransform item) native;
+  /// @domName SVGTransformList.initialize; @docsEditable true
+  Transform initialize(Transform item) native;
 
-  /** @domName SVGTransformList.insertItemBefore */
-  SVGTransform insertItemBefore(SVGTransform item, int index) native;
+  /// @domName SVGTransformList.insertItemBefore; @docsEditable true
+  Transform insertItemBefore(Transform item, int index) native;
 
-  /** @domName SVGTransformList.removeItem */
-  SVGTransform removeItem(int index) native;
+  /// @domName SVGTransformList.removeItem; @docsEditable true
+  Transform removeItem(int index) native;
 
-  /** @domName SVGTransformList.replaceItem */
-  SVGTransform replaceItem(SVGTransform item, int index) native;
+  /// @domName SVGTransformList.replaceItem; @docsEditable true
+  Transform replaceItem(Transform item, int index) native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -5687,45 +5805,35 @@
 
 
 /// @domName SVGTransformable
-abstract class SVGTransformable implements SVGLocatable {
+abstract class Transformable implements Locatable {
 
-  SVGAnimatedTransformList transform;
+  AnimatedTransformList transform;
 
   // From SVGLocatable
 
-  SVGElement farthestViewportElement;
+  SvgElement farthestViewportElement;
 
-  SVGElement nearestViewportElement;
+  SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox();
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox();
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM();
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM();
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM();
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM();
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element);
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element);
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGURIReference
-abstract class SVGURIReference {
-
-  SVGAnimatedString href;
-}
-// Copyright (c) 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.
-
-
-/// @domName SVGUnitTypes
-class SVGUnitTypes native "*SVGUnitTypes" {
+/// @domName SVGUnitTypes; @docsEditable true
+class UnitTypes native "*SVGUnitTypes" {
 
   static const int SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2;
 
@@ -5738,130 +5846,146 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGUseElement
-class SVGUseElement extends SVGElement implements SVGLangSpace, SVGTests, SVGStylable, SVGURIReference, SVGExternalResourcesRequired, SVGTransformable native "*SVGUseElement" {
+/// @domName SVGURIReference
+abstract class UriReference {
 
-  /** @domName SVGUseElement.animatedInstanceRoot */
-  final SVGElementInstance animatedInstanceRoot;
+  AnimatedString href;
+}
+// Copyright (c) 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.
 
-  /** @domName SVGUseElement.height */
-  final SVGAnimatedLength height;
 
-  /** @domName SVGUseElement.instanceRoot */
-  final SVGElementInstance instanceRoot;
+/// @domName SVGUseElement; @docsEditable true
+class UseElement extends SvgElement implements Transformable, Tests, UriReference, Stylable, ExternalResourcesRequired, LangSpace native "*SVGUseElement" {
 
-  /** @domName SVGUseElement.width */
-  final SVGAnimatedLength width;
+  factory UseElement() => _SvgElementFactoryProvider.createSvgElement_tag("use");
 
-  /** @domName SVGUseElement.x */
-  final SVGAnimatedLength x;
+  /// @domName SVGUseElement.animatedInstanceRoot; @docsEditable true
+  final ElementInstance animatedInstanceRoot;
 
-  /** @domName SVGUseElement.y */
-  final SVGAnimatedLength y;
+  /// @domName SVGUseElement.height; @docsEditable true
+  final AnimatedLength height;
+
+  /// @domName SVGUseElement.instanceRoot; @docsEditable true
+  final ElementInstance instanceRoot;
+
+  /// @domName SVGUseElement.width; @docsEditable true
+  final AnimatedLength width;
+
+  /// @domName SVGUseElement.x; @docsEditable true
+  final AnimatedLength x;
+
+  /// @domName SVGUseElement.y; @docsEditable true
+  final AnimatedLength y;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGLangSpace
 
-  /** @domName SVGLangSpace.xmllang */
+  /// @domName SVGLangSpace.xmllang; @docsEditable true
   String xmllang;
 
-  /** @domName SVGLangSpace.xmlspace */
+  /// @domName SVGLangSpace.xmlspace; @docsEditable true
   String xmlspace;
 
   // From SVGLocatable
 
-  /** @domName SVGLocatable.farthestViewportElement */
-  final SVGElement farthestViewportElement;
+  /// @domName SVGLocatable.farthestViewportElement; @docsEditable true
+  final SvgElement farthestViewportElement;
 
-  /** @domName SVGLocatable.nearestViewportElement */
-  final SVGElement nearestViewportElement;
+  /// @domName SVGLocatable.nearestViewportElement; @docsEditable true
+  final SvgElement nearestViewportElement;
 
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native;
+  /// @domName SVGLocatable.getBBox; @docsEditable true
+  Rect getBBox() native;
 
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native;
+  /// @domName SVGLocatable.getCTM; @docsEditable true
+  Matrix getCTM() native;
 
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native;
+  /// @domName SVGLocatable.getScreenCTM; @docsEditable true
+  Matrix getScreenCTM() native;
 
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native;
+  /// @domName SVGLocatable.getTransformToElement; @docsEditable true
+  Matrix getTransformToElement(SvgElement element) native;
 
   // From SVGStylable
 
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+  /// @domName SVGStylable.className; @docsEditable true
+  AnimatedString get $dom_svgClassName => JS("AnimatedString", "#.className", this);
 
   // Use implementation from Element.
   // final CSSStyleDeclaration style;
 
-  /** @domName SVGStylable.getPresentationAttribute */
+  /// @domName SVGStylable.getPresentationAttribute; @docsEditable true
   CSSValue getPresentationAttribute(String name) native;
 
   // From SVGTests
 
-  /** @domName SVGTests.requiredExtensions */
-  final SVGStringList requiredExtensions;
+  /// @domName SVGTests.requiredExtensions; @docsEditable true
+  final StringList requiredExtensions;
 
-  /** @domName SVGTests.requiredFeatures */
-  final SVGStringList requiredFeatures;
+  /// @domName SVGTests.requiredFeatures; @docsEditable true
+  final StringList requiredFeatures;
 
-  /** @domName SVGTests.systemLanguage */
-  final SVGStringList systemLanguage;
+  /// @domName SVGTests.systemLanguage; @docsEditable true
+  final StringList systemLanguage;
 
-  /** @domName SVGTests.hasExtension */
+  /// @domName SVGTests.hasExtension; @docsEditable true
   bool hasExtension(String extension) native;
 
   // From SVGTransformable
 
-  /** @domName SVGTransformable.transform */
-  final SVGAnimatedTransformList transform;
+  /// @domName SVGTransformable.transform; @docsEditable true
+  final AnimatedTransformList transform;
 
   // From SVGURIReference
 
-  /** @domName SVGURIReference.href */
-  final SVGAnimatedString href;
+  /// @domName SVGURIReference.href; @docsEditable true
+  final AnimatedString href;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGVKernElement
-class SVGVKernElement extends SVGElement native "*SVGVKernElement" {
+/// @domName SVGVKernElement; @docsEditable true
+class VKernElement extends SvgElement native "*SVGVKernElement" {
+
+  factory VKernElement() => _SvgElementFactoryProvider.createSvgElement_tag("vkern");
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGViewElement
-class SVGViewElement extends SVGElement implements SVGFitToViewBox, SVGZoomAndPan, SVGExternalResourcesRequired native "*SVGViewElement" {
+/// @domName SVGViewElement; @docsEditable true
+class ViewElement extends SvgElement implements FitToViewBox, ExternalResourcesRequired, ZoomAndPan native "*SVGViewElement" {
 
-  /** @domName SVGViewElement.viewTarget */
-  final SVGStringList viewTarget;
+  factory ViewElement() => _SvgElementFactoryProvider.createSvgElement_tag("view");
+
+  /// @domName SVGViewElement.viewTarget; @docsEditable true
+  final StringList viewTarget;
 
   // From SVGExternalResourcesRequired
 
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  final SVGAnimatedBoolean externalResourcesRequired;
+  /// @domName SVGExternalResourcesRequired.externalResourcesRequired; @docsEditable true
+  final AnimatedBoolean externalResourcesRequired;
 
   // From SVGFitToViewBox
 
-  /** @domName SVGFitToViewBox.preserveAspectRatio */
-  final SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+  /// @domName SVGFitToViewBox.preserveAspectRatio; @docsEditable true
+  final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  /** @domName SVGFitToViewBox.viewBox */
-  final SVGAnimatedRect viewBox;
+  /// @domName SVGFitToViewBox.viewBox; @docsEditable true
+  final AnimatedRect viewBox;
 
   // From SVGZoomAndPan
 
-  /** @domName SVGZoomAndPan.zoomAndPan */
+  /// @domName SVGZoomAndPan.zoomAndPan; @docsEditable true
   int zoomAndPan;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5869,34 +5993,34 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGViewSpec
-class SVGViewSpec native "*SVGViewSpec" {
+/// @domName SVGViewSpec; @docsEditable true
+class ViewSpec native "*SVGViewSpec" {
 
-  /** @domName SVGViewSpec.preserveAspectRatio */
-  final SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+  /// @domName SVGViewSpec.preserveAspectRatio; @docsEditable true
+  final AnimatedPreserveAspectRatio preserveAspectRatio;
 
-  /** @domName SVGViewSpec.preserveAspectRatioString */
+  /// @domName SVGViewSpec.preserveAspectRatioString; @docsEditable true
   final String preserveAspectRatioString;
 
-  /** @domName SVGViewSpec.transform */
-  final SVGTransformList transform;
+  /// @domName SVGViewSpec.transform; @docsEditable true
+  final TransformList transform;
 
-  /** @domName SVGViewSpec.transformString */
+  /// @domName SVGViewSpec.transformString; @docsEditable true
   final String transformString;
 
-  /** @domName SVGViewSpec.viewBox */
-  final SVGAnimatedRect viewBox;
+  /// @domName SVGViewSpec.viewBox; @docsEditable true
+  final AnimatedRect viewBox;
 
-  /** @domName SVGViewSpec.viewBoxString */
+  /// @domName SVGViewSpec.viewBoxString; @docsEditable true
   final String viewBoxString;
 
-  /** @domName SVGViewSpec.viewTarget */
-  final SVGElement viewTarget;
+  /// @domName SVGViewSpec.viewTarget; @docsEditable true
+  final SvgElement viewTarget;
 
-  /** @domName SVGViewSpec.viewTargetString */
+  /// @domName SVGViewSpec.viewTargetString; @docsEditable true
   final String viewTargetString;
 
-  /** @domName SVGViewSpec.zoomAndPan */
+  /// @domName SVGViewSpec.zoomAndPan; @docsEditable true
   int zoomAndPan;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5905,7 +6029,7 @@
 
 
 /// @domName SVGZoomAndPan
-abstract class SVGZoomAndPan {
+abstract class ZoomAndPan {
 
   static const int SVG_ZOOMANDPAN_DISABLE = 1;
 
@@ -5920,102 +6044,104 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-/// @domName SVGZoomEvent
-class SVGZoomEvent extends UIEvent native "*SVGZoomEvent" {
+/// @domName SVGZoomEvent; @docsEditable true
+class ZoomEvent extends UIEvent native "*SVGZoomEvent" {
 
-  /** @domName SVGZoomEvent.newScale */
+  /// @domName SVGZoomEvent.newScale; @docsEditable true
   final num newScale;
 
-  /** @domName SVGZoomEvent.newTranslate */
-  final SVGPoint newTranslate;
+  /// @domName SVGZoomEvent.newTranslate; @docsEditable true
+  final Point newTranslate;
 
-  /** @domName SVGZoomEvent.previousScale */
+  /// @domName SVGZoomEvent.previousScale; @docsEditable true
   final num previousScale;
 
-  /** @domName SVGZoomEvent.previousTranslate */
-  final SVGPoint previousTranslate;
+  /// @domName SVGZoomEvent.previousTranslate; @docsEditable true
+  final Point previousTranslate;
 
-  /** @domName SVGZoomEvent.zoomRectScreen */
-  final SVGRect zoomRectScreen;
+  /// @domName SVGZoomEvent.zoomRectScreen; @docsEditable true
+  final Rect zoomRectScreen;
 }
 // Copyright (c) 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.
 
 
-/// @domName SVGElementInstanceList
-class _SVGElementInstanceList implements JavaScriptIndexingBehavior, List<SVGElementInstance> native "*SVGElementInstanceList" {
+/// @domName SVGElementInstanceList; @docsEditable true
+class _ElementInstanceList implements JavaScriptIndexingBehavior, List<ElementInstance> native "*SVGElementInstanceList" {
 
-  /** @domName SVGElementInstanceList.length */
+  /// @domName SVGElementInstanceList.length; @docsEditable true
   final int length;
 
-  SVGElementInstance operator[](int index) => JS("SVGElementInstance", "#[#]", this, index);
+  ElementInstance operator[](int index) => JS("ElementInstance", "#[#]", this, index);
 
-  void operator[]=(int index, SVGElementInstance value) {
+  void operator[]=(int index, ElementInstance value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
-  // -- start List<SVGElementInstance> mixins.
-  // SVGElementInstance is the element type.
+  // -- start List<ElementInstance> mixins.
+  // ElementInstance is the element type.
 
-  // From Iterable<SVGElementInstance>:
+  // From Iterable<ElementInstance>:
 
-  Iterator<SVGElementInstance> iterator() {
+  Iterator<ElementInstance> iterator() {
     // Note: NodeLists are not fixed size. And most probably length shouldn't
     // be cached in both iterator _and_ forEach method. For now caching it
     // for consistency.
-    return new FixedSizeListIterator<SVGElementInstance>(this);
+    return new FixedSizeListIterator<ElementInstance>(this);
   }
 
-  // From Collection<SVGElementInstance>:
+  // From Collection<ElementInstance>:
 
-  void add(SVGElementInstance value) {
+  void add(ElementInstance value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addLast(SVGElementInstance value) {
+  void addLast(ElementInstance value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addAll(Collection<SVGElementInstance> collection) {
+  void addAll(Collection<ElementInstance> collection) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  bool contains(SVGElementInstance element) => _Collections.contains(this, element);
+  bool contains(ElementInstance element) => _Collections.contains(this, element);
 
-  void forEach(void f(SVGElementInstance element)) => _Collections.forEach(this, f);
+  void forEach(void f(ElementInstance element)) => _Collections.forEach(this, f);
 
-  Collection map(f(SVGElementInstance element)) => _Collections.map(this, [], f);
+  Collection map(f(ElementInstance element)) => _Collections.map(this, [], f);
 
-  Collection<SVGElementInstance> filter(bool f(SVGElementInstance element)) =>
-     _Collections.filter(this, <SVGElementInstance>[], f);
+  Collection<ElementInstance> filter(bool f(ElementInstance element)) =>
+     _Collections.filter(this, <ElementInstance>[], f);
 
-  bool every(bool f(SVGElementInstance element)) => _Collections.every(this, f);
+  bool every(bool f(ElementInstance element)) => _Collections.every(this, f);
 
-  bool some(bool f(SVGElementInstance element)) => _Collections.some(this, f);
+  bool some(bool f(ElementInstance element)) => _Collections.some(this, f);
 
   bool get isEmpty => this.length == 0;
 
-  // From List<SVGElementInstance>:
+  // From List<ElementInstance>:
 
-  void sort([Comparator<SVGElementInstance> compare = Comparable.compare]) {
+  void sort([Comparator<ElementInstance> compare = Comparable.compare]) {
     throw new UnsupportedError("Cannot sort immutable List.");
   }
 
-  int indexOf(SVGElementInstance element, [int start = 0]) =>
+  int indexOf(ElementInstance element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
-  int lastIndexOf(SVGElementInstance element, [int start]) {
+  int lastIndexOf(ElementInstance element, [int start]) {
     if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGElementInstance get last => this[length - 1];
+  ElementInstance get first => this[0];
 
-  SVGElementInstance removeLast() {
+  ElementInstance get last => this[length - 1];
+
+  ElementInstance removeLast() {
     throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
-  void setRange(int start, int rangeLength, List<SVGElementInstance> from, [int startFrom]) {
+  void setRange(int start, int rangeLength, List<ElementInstance> from, [int startFrom]) {
     throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
@@ -6023,15 +6149,15 @@
     throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
-  void insertRange(int start, int rangeLength, [SVGElementInstance initialValue]) {
+  void insertRange(int start, int rangeLength, [ElementInstance initialValue]) {
     throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
-  List<SVGElementInstance> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGElementInstance>[]);
+  List<ElementInstance> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <ElementInstance>[]);
 
-  // -- end List<SVGElementInstance> mixins.
+  // -- end List<ElementInstance> mixins.
 
-  /** @domName SVGElementInstanceList.item */
-  SVGElementInstance item(int index) native;
+  /// @domName SVGElementInstanceList.item; @docsEditable true
+  ElementInstance item(int index) native;
 }
diff --git a/sdk/lib/svg/dartium/svg_dartium.dart b/sdk/lib/svg/dartium/svg_dartium.dart
index f372945..9a60401 100644
--- a/sdk/lib/svg/dartium/svg_dartium.dart
+++ b/sdk/lib/svg/dartium/svg_dartium.dart
@@ -16,20 +16,20 @@
 
 final _START_TAG_REGEXP = new RegExp('<(\\w+)');
 
-class _SVGElementFactoryProvider {
-  static SVGElement createSVGElement_tag(String tag) {
+class _SvgElementFactoryProvider {
+  static SvgElement createSvgElement_tag(String tag) {
     final Element temp =
       document.$dom_createElementNS("http://www.w3.org/2000/svg", tag);
     return temp;
   }
 
-  static SVGElement createSVGElement_svg(String svg) {
+  static SvgElement createSvgElement_svg(String svg) {
     Element parentTag;
     final match = _START_TAG_REGEXP.firstMatch(svg);
     if (match != null && match.group(1).toLowerCase() == 'svg') {
       parentTag = new Element.tag('div');
     } else {
-      parentTag = new SVGSVGElement();
+      parentTag = new SvgSvgElement();
     }
 
     parentTag.innerHTML = svg;
@@ -41,9 +41,9 @@
   }
 }
 
-class _SVGSVGElementFactoryProvider {
-  static SVGSVGElement createSVGSVGElement() {
-    final el = new SVGElement.tag("svg");
+class _SvgSvgElementFactoryProvider {
+  static SvgSvgElement createSvgSvgElement() {
+    final el = new SvgElement.tag("svg");
     // The SVG spec requires the version attribute to match the spec version
     el.attributes['version'] = "1.1";
     return el;
@@ -57,16 +57,18 @@
 
 
 /// @domName SVGAElement
-class SVGAElement extends SVGElement implements SVGLangSpace, SVGTests, SVGStylable, SVGURIReference, SVGExternalResourcesRequired, SVGTransformable {
-  SVGAElement.internal(): super.internal();
+class AElement extends SvgElement implements Transformable, Tests, UriReference, Stylable, ExternalResourcesRequired, LangSpace {
+
+  factory AElement() => _SvgElementFactoryProvider.createSvgElement_tag("a");
+  AElement.internal(): super.internal();
 
 
   /** @domName SVGAElement.target */
-  SVGAnimatedString get target native "SVGAElement_target_Getter";
+  AnimatedString get target native "SVGAElement_target_Getter";
 
 
   /** @domName SVGAElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGAElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGAElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGAElement.xmllang */
@@ -86,31 +88,31 @@
 
 
   /** @domName SVGAElement.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGAElement_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGAElement_farthestViewportElement_Getter";
 
 
   /** @domName SVGAElement.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGAElement_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGAElement_nearestViewportElement_Getter";
 
 
   /** @domName SVGAElement.getBBox */
-  SVGRect getBBox() native "SVGAElement_getBBox_Callback";
+  Rect getBBox() native "SVGAElement_getBBox_Callback";
 
 
   /** @domName SVGAElement.getCTM */
-  SVGMatrix getCTM() native "SVGAElement_getCTM_Callback";
+  Matrix getCTM() native "SVGAElement_getCTM_Callback";
 
 
   /** @domName SVGAElement.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGAElement_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGAElement_getScreenCTM_Callback";
 
 
   /** @domName SVGAElement.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGAElement_getTransformToElement_Callback";
+  Matrix getTransformToElement(SvgElement element) native "SVGAElement_getTransformToElement_Callback";
 
 
   /** @domName SVGAElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGAElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGAElement_className_Getter";
 
 
   /** @domName SVGAElement.style */
@@ -122,15 +124,15 @@
 
 
   /** @domName SVGAElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGAElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGAElement_requiredExtensions_Getter";
 
 
   /** @domName SVGAElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGAElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGAElement_requiredFeatures_Getter";
 
 
   /** @domName SVGAElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGAElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGAElement_systemLanguage_Getter";
 
 
   /** @domName SVGAElement.hasExtension */
@@ -138,11 +140,11 @@
 
 
   /** @domName SVGAElement.transform */
-  SVGAnimatedTransformList get transform native "SVGAElement_transform_Getter";
+  AnimatedTransformList get transform native "SVGAElement_transform_Getter";
 
 
   /** @domName SVGAElement.href */
-  SVGAnimatedString get href native "SVGAElement_href_Getter";
+  AnimatedString get href native "SVGAElement_href_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -153,8 +155,8 @@
 
 
 /// @domName SVGAltGlyphDefElement
-class SVGAltGlyphDefElement extends SVGElement {
-  SVGAltGlyphDefElement.internal(): super.internal();
+class AltGlyphDefElement extends SvgElement {
+  AltGlyphDefElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -165,8 +167,8 @@
 
 
 /// @domName SVGAltGlyphElement
-class SVGAltGlyphElement extends SVGTextPositioningElement implements SVGURIReference {
-  SVGAltGlyphElement.internal(): super.internal();
+class AltGlyphElement extends TextPositioningElement implements UriReference {
+  AltGlyphElement.internal(): super.internal();
 
 
   /** @domName SVGAltGlyphElement.format */
@@ -186,7 +188,7 @@
 
 
   /** @domName SVGAltGlyphElement.href */
-  SVGAnimatedString get href native "SVGAltGlyphElement_href_Getter";
+  AnimatedString get href native "SVGAltGlyphElement_href_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -197,8 +199,8 @@
 
 
 /// @domName SVGAltGlyphItemElement
-class SVGAltGlyphItemElement extends SVGElement {
-  SVGAltGlyphItemElement.internal(): super.internal();
+class AltGlyphItemElement extends SvgElement {
+  AltGlyphItemElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -209,8 +211,8 @@
 
 
 /// @domName SVGAngle
-class SVGAngle extends NativeFieldWrapperClass1 {
-  SVGAngle.internal();
+class Angle extends NativeFieldWrapperClass1 {
+  Angle.internal();
 
   static const int SVG_ANGLETYPE_DEG = 2;
 
@@ -267,8 +269,10 @@
 
 
 /// @domName SVGAnimateColorElement
-class SVGAnimateColorElement extends SVGAnimationElement {
-  SVGAnimateColorElement.internal(): super.internal();
+class AnimateColorElement extends AnimationElement {
+
+  factory AnimateColorElement() => _SvgElementFactoryProvider.createSvgElement_tag("animateColor");
+  AnimateColorElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -279,8 +283,10 @@
 
 
 /// @domName SVGAnimateElement
-class SVGAnimateElement extends SVGAnimationElement {
-  SVGAnimateElement.internal(): super.internal();
+class AnimateElement extends AnimationElement {
+
+  factory AnimateElement() => _SvgElementFactoryProvider.createSvgElement_tag("animate");
+  AnimateElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -291,8 +297,10 @@
 
 
 /// @domName SVGAnimateMotionElement
-class SVGAnimateMotionElement extends SVGAnimationElement {
-  SVGAnimateMotionElement.internal(): super.internal();
+class AnimateMotionElement extends AnimationElement {
+
+  factory AnimateMotionElement() => _SvgElementFactoryProvider.createSvgElement_tag("animateMotion");
+  AnimateMotionElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -303,8 +311,10 @@
 
 
 /// @domName SVGAnimateTransformElement
-class SVGAnimateTransformElement extends SVGAnimationElement {
-  SVGAnimateTransformElement.internal(): super.internal();
+class AnimateTransformElement extends AnimationElement {
+
+  factory AnimateTransformElement() => _SvgElementFactoryProvider.createSvgElement_tag("animateTransform");
+  AnimateTransformElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -315,16 +325,16 @@
 
 
 /// @domName SVGAnimatedAngle
-class SVGAnimatedAngle extends NativeFieldWrapperClass1 {
-  SVGAnimatedAngle.internal();
+class AnimatedAngle extends NativeFieldWrapperClass1 {
+  AnimatedAngle.internal();
 
 
   /** @domName SVGAnimatedAngle.animVal */
-  SVGAngle get animVal native "SVGAnimatedAngle_animVal_Getter";
+  Angle get animVal native "SVGAnimatedAngle_animVal_Getter";
 
 
   /** @domName SVGAnimatedAngle.baseVal */
-  SVGAngle get baseVal native "SVGAnimatedAngle_baseVal_Getter";
+  Angle get baseVal native "SVGAnimatedAngle_baseVal_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -335,8 +345,8 @@
 
 
 /// @domName SVGAnimatedBoolean
-class SVGAnimatedBoolean extends NativeFieldWrapperClass1 {
-  SVGAnimatedBoolean.internal();
+class AnimatedBoolean extends NativeFieldWrapperClass1 {
+  AnimatedBoolean.internal();
 
 
   /** @domName SVGAnimatedBoolean.animVal */
@@ -359,8 +369,8 @@
 
 
 /// @domName SVGAnimatedEnumeration
-class SVGAnimatedEnumeration extends NativeFieldWrapperClass1 {
-  SVGAnimatedEnumeration.internal();
+class AnimatedEnumeration extends NativeFieldWrapperClass1 {
+  AnimatedEnumeration.internal();
 
 
   /** @domName SVGAnimatedEnumeration.animVal */
@@ -383,8 +393,8 @@
 
 
 /// @domName SVGAnimatedInteger
-class SVGAnimatedInteger extends NativeFieldWrapperClass1 {
-  SVGAnimatedInteger.internal();
+class AnimatedInteger extends NativeFieldWrapperClass1 {
+  AnimatedInteger.internal();
 
 
   /** @domName SVGAnimatedInteger.animVal */
@@ -407,16 +417,16 @@
 
 
 /// @domName SVGAnimatedLength
-class SVGAnimatedLength extends NativeFieldWrapperClass1 {
-  SVGAnimatedLength.internal();
+class AnimatedLength extends NativeFieldWrapperClass1 {
+  AnimatedLength.internal();
 
 
   /** @domName SVGAnimatedLength.animVal */
-  SVGLength get animVal native "SVGAnimatedLength_animVal_Getter";
+  Length get animVal native "SVGAnimatedLength_animVal_Getter";
 
 
   /** @domName SVGAnimatedLength.baseVal */
-  SVGLength get baseVal native "SVGAnimatedLength_baseVal_Getter";
+  Length get baseVal native "SVGAnimatedLength_baseVal_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -427,84 +437,86 @@
 
 
 /// @domName SVGAnimatedLengthList
-class SVGAnimatedLengthList extends NativeFieldWrapperClass1 implements List<SVGAnimatedLength> {
-  SVGAnimatedLengthList.internal();
+class AnimatedLengthList extends NativeFieldWrapperClass1 implements List<AnimatedLength> {
+  AnimatedLengthList.internal();
 
 
   /** @domName SVGAnimatedLengthList.animVal */
-  SVGLengthList get animVal native "SVGAnimatedLengthList_animVal_Getter";
+  LengthList get animVal native "SVGAnimatedLengthList_animVal_Getter";
 
 
   /** @domName SVGAnimatedLengthList.baseVal */
-  SVGLengthList get baseVal native "SVGAnimatedLengthList_baseVal_Getter";
+  LengthList get baseVal native "SVGAnimatedLengthList_baseVal_Getter";
 
-  SVGAnimatedLength operator[](int index) native "SVGAnimatedLengthList_item_Callback";
+  AnimatedLength operator[](int index) native "SVGAnimatedLengthList_item_Callback";
 
-  void operator[]=(int index, SVGAnimatedLength value) {
+  void operator[]=(int index, AnimatedLength value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
-  // -- start List<SVGAnimatedLength> mixins.
-  // SVGAnimatedLength is the element type.
+  // -- start List<AnimatedLength> mixins.
+  // AnimatedLength is the element type.
 
-  // From Iterable<SVGAnimatedLength>:
+  // From Iterable<AnimatedLength>:
 
-  Iterator<SVGAnimatedLength> iterator() {
+  Iterator<AnimatedLength> iterator() {
     // Note: NodeLists are not fixed size. And most probably length shouldn't
     // be cached in both iterator _and_ forEach method. For now caching it
     // for consistency.
-    return new FixedSizeListIterator<SVGAnimatedLength>(this);
+    return new FixedSizeListIterator<AnimatedLength>(this);
   }
 
-  // From Collection<SVGAnimatedLength>:
+  // From Collection<AnimatedLength>:
 
-  void add(SVGAnimatedLength value) {
+  void add(AnimatedLength value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addLast(SVGAnimatedLength value) {
+  void addLast(AnimatedLength value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addAll(Collection<SVGAnimatedLength> collection) {
+  void addAll(Collection<AnimatedLength> collection) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  bool contains(SVGAnimatedLength element) => _Collections.contains(this, element);
+  bool contains(AnimatedLength element) => _Collections.contains(this, element);
 
-  void forEach(void f(SVGAnimatedLength element)) => _Collections.forEach(this, f);
+  void forEach(void f(AnimatedLength element)) => _Collections.forEach(this, f);
 
-  Collection map(f(SVGAnimatedLength element)) => _Collections.map(this, [], f);
+  Collection map(f(AnimatedLength element)) => _Collections.map(this, [], f);
 
-  Collection<SVGAnimatedLength> filter(bool f(SVGAnimatedLength element)) =>
-     _Collections.filter(this, <SVGAnimatedLength>[], f);
+  Collection<AnimatedLength> filter(bool f(AnimatedLength element)) =>
+     _Collections.filter(this, <AnimatedLength>[], f);
 
-  bool every(bool f(SVGAnimatedLength element)) => _Collections.every(this, f);
+  bool every(bool f(AnimatedLength element)) => _Collections.every(this, f);
 
-  bool some(bool f(SVGAnimatedLength element)) => _Collections.some(this, f);
+  bool some(bool f(AnimatedLength element)) => _Collections.some(this, f);
 
   bool get isEmpty => this.length == 0;
 
-  // From List<SVGAnimatedLength>:
+  // From List<AnimatedLength>:
 
-  void sort([Comparator<SVGAnimatedLength> compare = Comparable.compare]) {
+  void sort([Comparator<AnimatedLength> compare = Comparable.compare]) {
     throw new UnsupportedError("Cannot sort immutable List.");
   }
 
-  int indexOf(SVGAnimatedLength element, [int start = 0]) =>
+  int indexOf(AnimatedLength element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
-  int lastIndexOf(SVGAnimatedLength element, [int start]) {
+  int lastIndexOf(AnimatedLength element, [int start]) {
     if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGAnimatedLength get last => this[length - 1];
+  AnimatedLength get first => this[0];
 
-  SVGAnimatedLength removeLast() {
+  AnimatedLength get last => this[length - 1];
+
+  AnimatedLength removeLast() {
     throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
-  void setRange(int start, int rangeLength, List<SVGAnimatedLength> from, [int startFrom]) {
+  void setRange(int start, int rangeLength, List<AnimatedLength> from, [int startFrom]) {
     throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
@@ -512,14 +524,14 @@
     throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
-  void insertRange(int start, int rangeLength, [SVGAnimatedLength initialValue]) {
+  void insertRange(int start, int rangeLength, [AnimatedLength initialValue]) {
     throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
-  List<SVGAnimatedLength> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGAnimatedLength>[]);
+  List<AnimatedLength> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <AnimatedLength>[]);
 
-  // -- end List<SVGAnimatedLength> mixins.
+  // -- end List<AnimatedLength> mixins.
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -530,8 +542,8 @@
 
 
 /// @domName SVGAnimatedNumber
-class SVGAnimatedNumber extends NativeFieldWrapperClass1 {
-  SVGAnimatedNumber.internal();
+class AnimatedNumber extends NativeFieldWrapperClass1 {
+  AnimatedNumber.internal();
 
 
   /** @domName SVGAnimatedNumber.animVal */
@@ -554,84 +566,86 @@
 
 
 /// @domName SVGAnimatedNumberList
-class SVGAnimatedNumberList extends NativeFieldWrapperClass1 implements List<SVGAnimatedNumber> {
-  SVGAnimatedNumberList.internal();
+class AnimatedNumberList extends NativeFieldWrapperClass1 implements List<AnimatedNumber> {
+  AnimatedNumberList.internal();
 
 
   /** @domName SVGAnimatedNumberList.animVal */
-  SVGNumberList get animVal native "SVGAnimatedNumberList_animVal_Getter";
+  NumberList get animVal native "SVGAnimatedNumberList_animVal_Getter";
 
 
   /** @domName SVGAnimatedNumberList.baseVal */
-  SVGNumberList get baseVal native "SVGAnimatedNumberList_baseVal_Getter";
+  NumberList get baseVal native "SVGAnimatedNumberList_baseVal_Getter";
 
-  SVGAnimatedNumber operator[](int index) native "SVGAnimatedNumberList_item_Callback";
+  AnimatedNumber operator[](int index) native "SVGAnimatedNumberList_item_Callback";
 
-  void operator[]=(int index, SVGAnimatedNumber value) {
+  void operator[]=(int index, AnimatedNumber value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
-  // -- start List<SVGAnimatedNumber> mixins.
-  // SVGAnimatedNumber is the element type.
+  // -- start List<AnimatedNumber> mixins.
+  // AnimatedNumber is the element type.
 
-  // From Iterable<SVGAnimatedNumber>:
+  // From Iterable<AnimatedNumber>:
 
-  Iterator<SVGAnimatedNumber> iterator() {
+  Iterator<AnimatedNumber> iterator() {
     // Note: NodeLists are not fixed size. And most probably length shouldn't
     // be cached in both iterator _and_ forEach method. For now caching it
     // for consistency.
-    return new FixedSizeListIterator<SVGAnimatedNumber>(this);
+    return new FixedSizeListIterator<AnimatedNumber>(this);
   }
 
-  // From Collection<SVGAnimatedNumber>:
+  // From Collection<AnimatedNumber>:
 
-  void add(SVGAnimatedNumber value) {
+  void add(AnimatedNumber value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addLast(SVGAnimatedNumber value) {
+  void addLast(AnimatedNumber value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addAll(Collection<SVGAnimatedNumber> collection) {
+  void addAll(Collection<AnimatedNumber> collection) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  bool contains(SVGAnimatedNumber element) => _Collections.contains(this, element);
+  bool contains(AnimatedNumber element) => _Collections.contains(this, element);
 
-  void forEach(void f(SVGAnimatedNumber element)) => _Collections.forEach(this, f);
+  void forEach(void f(AnimatedNumber element)) => _Collections.forEach(this, f);
 
-  Collection map(f(SVGAnimatedNumber element)) => _Collections.map(this, [], f);
+  Collection map(f(AnimatedNumber element)) => _Collections.map(this, [], f);
 
-  Collection<SVGAnimatedNumber> filter(bool f(SVGAnimatedNumber element)) =>
-     _Collections.filter(this, <SVGAnimatedNumber>[], f);
+  Collection<AnimatedNumber> filter(bool f(AnimatedNumber element)) =>
+     _Collections.filter(this, <AnimatedNumber>[], f);
 
-  bool every(bool f(SVGAnimatedNumber element)) => _Collections.every(this, f);
+  bool every(bool f(AnimatedNumber element)) => _Collections.every(this, f);
 
-  bool some(bool f(SVGAnimatedNumber element)) => _Collections.some(this, f);
+  bool some(bool f(AnimatedNumber element)) => _Collections.some(this, f);
 
   bool get isEmpty => this.length == 0;
 
-  // From List<SVGAnimatedNumber>:
+  // From List<AnimatedNumber>:
 
-  void sort([Comparator<SVGAnimatedNumber> compare = Comparable.compare]) {
+  void sort([Comparator<AnimatedNumber> compare = Comparable.compare]) {
     throw new UnsupportedError("Cannot sort immutable List.");
   }
 
-  int indexOf(SVGAnimatedNumber element, [int start = 0]) =>
+  int indexOf(AnimatedNumber element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
-  int lastIndexOf(SVGAnimatedNumber element, [int start]) {
+  int lastIndexOf(AnimatedNumber element, [int start]) {
     if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGAnimatedNumber get last => this[length - 1];
+  AnimatedNumber get first => this[0];
 
-  SVGAnimatedNumber removeLast() {
+  AnimatedNumber get last => this[length - 1];
+
+  AnimatedNumber removeLast() {
     throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
-  void setRange(int start, int rangeLength, List<SVGAnimatedNumber> from, [int startFrom]) {
+  void setRange(int start, int rangeLength, List<AnimatedNumber> from, [int startFrom]) {
     throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
@@ -639,14 +653,14 @@
     throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
-  void insertRange(int start, int rangeLength, [SVGAnimatedNumber initialValue]) {
+  void insertRange(int start, int rangeLength, [AnimatedNumber initialValue]) {
     throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
-  List<SVGAnimatedNumber> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGAnimatedNumber>[]);
+  List<AnimatedNumber> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <AnimatedNumber>[]);
 
-  // -- end List<SVGAnimatedNumber> mixins.
+  // -- end List<AnimatedNumber> mixins.
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -657,16 +671,16 @@
 
 
 /// @domName SVGAnimatedPreserveAspectRatio
-class SVGAnimatedPreserveAspectRatio extends NativeFieldWrapperClass1 {
-  SVGAnimatedPreserveAspectRatio.internal();
+class AnimatedPreserveAspectRatio extends NativeFieldWrapperClass1 {
+  AnimatedPreserveAspectRatio.internal();
 
 
   /** @domName SVGAnimatedPreserveAspectRatio.animVal */
-  SVGPreserveAspectRatio get animVal native "SVGAnimatedPreserveAspectRatio_animVal_Getter";
+  PreserveAspectRatio get animVal native "SVGAnimatedPreserveAspectRatio_animVal_Getter";
 
 
   /** @domName SVGAnimatedPreserveAspectRatio.baseVal */
-  SVGPreserveAspectRatio get baseVal native "SVGAnimatedPreserveAspectRatio_baseVal_Getter";
+  PreserveAspectRatio get baseVal native "SVGAnimatedPreserveAspectRatio_baseVal_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -677,16 +691,16 @@
 
 
 /// @domName SVGAnimatedRect
-class SVGAnimatedRect extends NativeFieldWrapperClass1 {
-  SVGAnimatedRect.internal();
+class AnimatedRect extends NativeFieldWrapperClass1 {
+  AnimatedRect.internal();
 
 
   /** @domName SVGAnimatedRect.animVal */
-  SVGRect get animVal native "SVGAnimatedRect_animVal_Getter";
+  Rect get animVal native "SVGAnimatedRect_animVal_Getter";
 
 
   /** @domName SVGAnimatedRect.baseVal */
-  SVGRect get baseVal native "SVGAnimatedRect_baseVal_Getter";
+  Rect get baseVal native "SVGAnimatedRect_baseVal_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -697,8 +711,8 @@
 
 
 /// @domName SVGAnimatedString
-class SVGAnimatedString extends NativeFieldWrapperClass1 {
-  SVGAnimatedString.internal();
+class AnimatedString extends NativeFieldWrapperClass1 {
+  AnimatedString.internal();
 
 
   /** @domName SVGAnimatedString.animVal */
@@ -721,84 +735,86 @@
 
 
 /// @domName SVGAnimatedTransformList
-class SVGAnimatedTransformList extends NativeFieldWrapperClass1 implements List<SVGAnimateTransformElement> {
-  SVGAnimatedTransformList.internal();
+class AnimatedTransformList extends NativeFieldWrapperClass1 implements List<AnimateTransformElement> {
+  AnimatedTransformList.internal();
 
 
   /** @domName SVGAnimatedTransformList.animVal */
-  SVGTransformList get animVal native "SVGAnimatedTransformList_animVal_Getter";
+  TransformList get animVal native "SVGAnimatedTransformList_animVal_Getter";
 
 
   /** @domName SVGAnimatedTransformList.baseVal */
-  SVGTransformList get baseVal native "SVGAnimatedTransformList_baseVal_Getter";
+  TransformList get baseVal native "SVGAnimatedTransformList_baseVal_Getter";
 
-  SVGAnimateTransformElement operator[](int index) native "SVGAnimatedTransformList_item_Callback";
+  AnimateTransformElement operator[](int index) native "SVGAnimatedTransformList_item_Callback";
 
-  void operator[]=(int index, SVGAnimateTransformElement value) {
+  void operator[]=(int index, AnimateTransformElement value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
-  // -- start List<SVGAnimateTransformElement> mixins.
-  // SVGAnimateTransformElement is the element type.
+  // -- start List<AnimateTransformElement> mixins.
+  // AnimateTransformElement is the element type.
 
-  // From Iterable<SVGAnimateTransformElement>:
+  // From Iterable<AnimateTransformElement>:
 
-  Iterator<SVGAnimateTransformElement> iterator() {
+  Iterator<AnimateTransformElement> iterator() {
     // Note: NodeLists are not fixed size. And most probably length shouldn't
     // be cached in both iterator _and_ forEach method. For now caching it
     // for consistency.
-    return new FixedSizeListIterator<SVGAnimateTransformElement>(this);
+    return new FixedSizeListIterator<AnimateTransformElement>(this);
   }
 
-  // From Collection<SVGAnimateTransformElement>:
+  // From Collection<AnimateTransformElement>:
 
-  void add(SVGAnimateTransformElement value) {
+  void add(AnimateTransformElement value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addLast(SVGAnimateTransformElement value) {
+  void addLast(AnimateTransformElement value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addAll(Collection<SVGAnimateTransformElement> collection) {
+  void addAll(Collection<AnimateTransformElement> collection) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  bool contains(SVGAnimateTransformElement element) => _Collections.contains(this, element);
+  bool contains(AnimateTransformElement element) => _Collections.contains(this, element);
 
-  void forEach(void f(SVGAnimateTransformElement element)) => _Collections.forEach(this, f);
+  void forEach(void f(AnimateTransformElement element)) => _Collections.forEach(this, f);
 
-  Collection map(f(SVGAnimateTransformElement element)) => _Collections.map(this, [], f);
+  Collection map(f(AnimateTransformElement element)) => _Collections.map(this, [], f);
 
-  Collection<SVGAnimateTransformElement> filter(bool f(SVGAnimateTransformElement element)) =>
-     _Collections.filter(this, <SVGAnimateTransformElement>[], f);
+  Collection<AnimateTransformElement> filter(bool f(AnimateTransformElement element)) =>
+     _Collections.filter(this, <AnimateTransformElement>[], f);
 
-  bool every(bool f(SVGAnimateTransformElement element)) => _Collections.every(this, f);
+  bool every(bool f(AnimateTransformElement element)) => _Collections.every(this, f);
 
-  bool some(bool f(SVGAnimateTransformElement element)) => _Collections.some(this, f);
+  bool some(bool f(AnimateTransformElement element)) => _Collections.some(this, f);
 
   bool get isEmpty => this.length == 0;
 
-  // From List<SVGAnimateTransformElement>:
+  // From List<AnimateTransformElement>:
 
-  void sort([Comparator<SVGAnimateTransformElement> compare = Comparable.compare]) {
+  void sort([Comparator<AnimateTransformElement> compare = Comparable.compare]) {
     throw new UnsupportedError("Cannot sort immutable List.");
   }
 
-  int indexOf(SVGAnimateTransformElement element, [int start = 0]) =>
+  int indexOf(AnimateTransformElement element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
-  int lastIndexOf(SVGAnimateTransformElement element, [int start]) {
+  int lastIndexOf(AnimateTransformElement element, [int start]) {
     if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGAnimateTransformElement get last => this[length - 1];
+  AnimateTransformElement get first => this[0];
 
-  SVGAnimateTransformElement removeLast() {
+  AnimateTransformElement get last => this[length - 1];
+
+  AnimateTransformElement removeLast() {
     throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
-  void setRange(int start, int rangeLength, List<SVGAnimateTransformElement> from, [int startFrom]) {
+  void setRange(int start, int rangeLength, List<AnimateTransformElement> from, [int startFrom]) {
     throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
@@ -806,14 +822,14 @@
     throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
-  void insertRange(int start, int rangeLength, [SVGAnimateTransformElement initialValue]) {
+  void insertRange(int start, int rangeLength, [AnimateTransformElement initialValue]) {
     throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
-  List<SVGAnimateTransformElement> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGAnimateTransformElement>[]);
+  List<AnimateTransformElement> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <AnimateTransformElement>[]);
 
-  // -- end List<SVGAnimateTransformElement> mixins.
+  // -- end List<AnimateTransformElement> mixins.
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -824,12 +840,14 @@
 
 
 /// @domName SVGAnimationElement
-class SVGAnimationElement extends SVGElement implements ElementTimeControl, SVGTests, SVGExternalResourcesRequired {
-  SVGAnimationElement.internal(): super.internal();
+class AnimationElement extends SvgElement implements Tests, ElementTimeControl, ExternalResourcesRequired {
+
+  factory AnimationElement() => _SvgElementFactoryProvider.createSvgElement_tag("animation");
+  AnimationElement.internal(): super.internal();
 
 
   /** @domName SVGAnimationElement.targetElement */
-  SVGElement get targetElement native "SVGAnimationElement_targetElement_Getter";
+  SvgElement get targetElement native "SVGAnimationElement_targetElement_Getter";
 
 
   /** @domName SVGAnimationElement.getCurrentTime */
@@ -861,19 +879,19 @@
 
 
   /** @domName SVGAnimationElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGAnimationElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGAnimationElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGAnimationElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGAnimationElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGAnimationElement_requiredExtensions_Getter";
 
 
   /** @domName SVGAnimationElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGAnimationElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGAnimationElement_requiredFeatures_Getter";
 
 
   /** @domName SVGAnimationElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGAnimationElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGAnimationElement_systemLanguage_Getter";
 
 
   /** @domName SVGAnimationElement.hasExtension */
@@ -888,24 +906,26 @@
 
 
 /// @domName SVGCircleElement
-class SVGCircleElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
-  SVGCircleElement.internal(): super.internal();
+class CircleElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
+
+  factory CircleElement() => _SvgElementFactoryProvider.createSvgElement_tag("circle");
+  CircleElement.internal(): super.internal();
 
 
   /** @domName SVGCircleElement.cx */
-  SVGAnimatedLength get cx native "SVGCircleElement_cx_Getter";
+  AnimatedLength get cx native "SVGCircleElement_cx_Getter";
 
 
   /** @domName SVGCircleElement.cy */
-  SVGAnimatedLength get cy native "SVGCircleElement_cy_Getter";
+  AnimatedLength get cy native "SVGCircleElement_cy_Getter";
 
 
   /** @domName SVGCircleElement.r */
-  SVGAnimatedLength get r native "SVGCircleElement_r_Getter";
+  AnimatedLength get r native "SVGCircleElement_r_Getter";
 
 
   /** @domName SVGCircleElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGCircleElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGCircleElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGCircleElement.xmllang */
@@ -925,31 +945,31 @@
 
 
   /** @domName SVGCircleElement.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGCircleElement_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGCircleElement_farthestViewportElement_Getter";
 
 
   /** @domName SVGCircleElement.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGCircleElement_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGCircleElement_nearestViewportElement_Getter";
 
 
   /** @domName SVGCircleElement.getBBox */
-  SVGRect getBBox() native "SVGCircleElement_getBBox_Callback";
+  Rect getBBox() native "SVGCircleElement_getBBox_Callback";
 
 
   /** @domName SVGCircleElement.getCTM */
-  SVGMatrix getCTM() native "SVGCircleElement_getCTM_Callback";
+  Matrix getCTM() native "SVGCircleElement_getCTM_Callback";
 
 
   /** @domName SVGCircleElement.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGCircleElement_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGCircleElement_getScreenCTM_Callback";
 
 
   /** @domName SVGCircleElement.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGCircleElement_getTransformToElement_Callback";
+  Matrix getTransformToElement(SvgElement element) native "SVGCircleElement_getTransformToElement_Callback";
 
 
   /** @domName SVGCircleElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGCircleElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGCircleElement_className_Getter";
 
 
   /** @domName SVGCircleElement.style */
@@ -961,15 +981,15 @@
 
 
   /** @domName SVGCircleElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGCircleElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGCircleElement_requiredExtensions_Getter";
 
 
   /** @domName SVGCircleElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGCircleElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGCircleElement_requiredFeatures_Getter";
 
 
   /** @domName SVGCircleElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGCircleElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGCircleElement_systemLanguage_Getter";
 
 
   /** @domName SVGCircleElement.hasExtension */
@@ -977,7 +997,7 @@
 
 
   /** @domName SVGCircleElement.transform */
-  SVGAnimatedTransformList get transform native "SVGCircleElement_transform_Getter";
+  AnimatedTransformList get transform native "SVGCircleElement_transform_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -988,16 +1008,18 @@
 
 
 /// @domName SVGClipPathElement
-class SVGClipPathElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
-  SVGClipPathElement.internal(): super.internal();
+class ClipPathElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
+
+  factory ClipPathElement() => _SvgElementFactoryProvider.createSvgElement_tag("clipPath");
+  ClipPathElement.internal(): super.internal();
 
 
   /** @domName SVGClipPathElement.clipPathUnits */
-  SVGAnimatedEnumeration get clipPathUnits native "SVGClipPathElement_clipPathUnits_Getter";
+  AnimatedEnumeration get clipPathUnits native "SVGClipPathElement_clipPathUnits_Getter";
 
 
   /** @domName SVGClipPathElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGClipPathElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGClipPathElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGClipPathElement.xmllang */
@@ -1017,31 +1039,31 @@
 
 
   /** @domName SVGClipPathElement.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGClipPathElement_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGClipPathElement_farthestViewportElement_Getter";
 
 
   /** @domName SVGClipPathElement.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGClipPathElement_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGClipPathElement_nearestViewportElement_Getter";
 
 
   /** @domName SVGClipPathElement.getBBox */
-  SVGRect getBBox() native "SVGClipPathElement_getBBox_Callback";
+  Rect getBBox() native "SVGClipPathElement_getBBox_Callback";
 
 
   /** @domName SVGClipPathElement.getCTM */
-  SVGMatrix getCTM() native "SVGClipPathElement_getCTM_Callback";
+  Matrix getCTM() native "SVGClipPathElement_getCTM_Callback";
 
 
   /** @domName SVGClipPathElement.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGClipPathElement_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGClipPathElement_getScreenCTM_Callback";
 
 
   /** @domName SVGClipPathElement.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGClipPathElement_getTransformToElement_Callback";
+  Matrix getTransformToElement(SvgElement element) native "SVGClipPathElement_getTransformToElement_Callback";
 
 
   /** @domName SVGClipPathElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGClipPathElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGClipPathElement_className_Getter";
 
 
   /** @domName SVGClipPathElement.style */
@@ -1053,15 +1075,15 @@
 
 
   /** @domName SVGClipPathElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGClipPathElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGClipPathElement_requiredExtensions_Getter";
 
 
   /** @domName SVGClipPathElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGClipPathElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGClipPathElement_requiredFeatures_Getter";
 
 
   /** @domName SVGClipPathElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGClipPathElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGClipPathElement_systemLanguage_Getter";
 
 
   /** @domName SVGClipPathElement.hasExtension */
@@ -1069,7 +1091,7 @@
 
 
   /** @domName SVGClipPathElement.transform */
-  SVGAnimatedTransformList get transform native "SVGClipPathElement_transform_Getter";
+  AnimatedTransformList get transform native "SVGClipPathElement_transform_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1080,8 +1102,8 @@
 
 
 /// @domName SVGColor
-class SVGColor extends CSSValue {
-  SVGColor.internal(): super.internal();
+class Color extends CSSValue {
+  Color.internal(): super.internal();
 
   static const int SVG_COLORTYPE_CURRENTCOLOR = 3;
 
@@ -1120,8 +1142,8 @@
 
 
 /// @domName SVGComponentTransferFunctionElement
-class SVGComponentTransferFunctionElement extends SVGElement {
-  SVGComponentTransferFunctionElement.internal(): super.internal();
+class ComponentTransferFunctionElement extends SvgElement {
+  ComponentTransferFunctionElement.internal(): super.internal();
 
   static const int SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3;
 
@@ -1137,31 +1159,31 @@
 
 
   /** @domName SVGComponentTransferFunctionElement.amplitude */
-  SVGAnimatedNumber get amplitude native "SVGComponentTransferFunctionElement_amplitude_Getter";
+  AnimatedNumber get amplitude native "SVGComponentTransferFunctionElement_amplitude_Getter";
 
 
   /** @domName SVGComponentTransferFunctionElement.exponent */
-  SVGAnimatedNumber get exponent native "SVGComponentTransferFunctionElement_exponent_Getter";
+  AnimatedNumber get exponent native "SVGComponentTransferFunctionElement_exponent_Getter";
 
 
   /** @domName SVGComponentTransferFunctionElement.intercept */
-  SVGAnimatedNumber get intercept native "SVGComponentTransferFunctionElement_intercept_Getter";
+  AnimatedNumber get intercept native "SVGComponentTransferFunctionElement_intercept_Getter";
 
 
   /** @domName SVGComponentTransferFunctionElement.offset */
-  SVGAnimatedNumber get offset native "SVGComponentTransferFunctionElement_offset_Getter";
+  AnimatedNumber get offset native "SVGComponentTransferFunctionElement_offset_Getter";
 
 
   /** @domName SVGComponentTransferFunctionElement.slope */
-  SVGAnimatedNumber get slope native "SVGComponentTransferFunctionElement_slope_Getter";
+  AnimatedNumber get slope native "SVGComponentTransferFunctionElement_slope_Getter";
 
 
   /** @domName SVGComponentTransferFunctionElement.tableValues */
-  SVGAnimatedNumberList get tableValues native "SVGComponentTransferFunctionElement_tableValues_Getter";
+  AnimatedNumberList get tableValues native "SVGComponentTransferFunctionElement_tableValues_Getter";
 
 
   /** @domName SVGComponentTransferFunctionElement.type */
-  SVGAnimatedEnumeration get type native "SVGComponentTransferFunctionElement_type_Getter";
+  AnimatedEnumeration get type native "SVGComponentTransferFunctionElement_type_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1172,32 +1194,34 @@
 
 
 /// @domName SVGCursorElement
-class SVGCursorElement extends SVGElement implements SVGURIReference, SVGTests, SVGExternalResourcesRequired {
-  SVGCursorElement.internal(): super.internal();
+class CursorElement extends SvgElement implements UriReference, Tests, ExternalResourcesRequired {
+
+  factory CursorElement() => _SvgElementFactoryProvider.createSvgElement_tag("cursor");
+  CursorElement.internal(): super.internal();
 
 
   /** @domName SVGCursorElement.x */
-  SVGAnimatedLength get x native "SVGCursorElement_x_Getter";
+  AnimatedLength get x native "SVGCursorElement_x_Getter";
 
 
   /** @domName SVGCursorElement.y */
-  SVGAnimatedLength get y native "SVGCursorElement_y_Getter";
+  AnimatedLength get y native "SVGCursorElement_y_Getter";
 
 
   /** @domName SVGCursorElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGCursorElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGCursorElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGCursorElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGCursorElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGCursorElement_requiredExtensions_Getter";
 
 
   /** @domName SVGCursorElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGCursorElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGCursorElement_requiredFeatures_Getter";
 
 
   /** @domName SVGCursorElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGCursorElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGCursorElement_systemLanguage_Getter";
 
 
   /** @domName SVGCursorElement.hasExtension */
@@ -1205,7 +1229,7 @@
 
 
   /** @domName SVGCursorElement.href */
-  SVGAnimatedString get href native "SVGCursorElement_href_Getter";
+  AnimatedString get href native "SVGCursorElement_href_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1216,12 +1240,14 @@
 
 
 /// @domName SVGDefsElement
-class SVGDefsElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
-  SVGDefsElement.internal(): super.internal();
+class DefsElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
+
+  factory DefsElement() => _SvgElementFactoryProvider.createSvgElement_tag("defs");
+  DefsElement.internal(): super.internal();
 
 
   /** @domName SVGDefsElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGDefsElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGDefsElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGDefsElement.xmllang */
@@ -1241,31 +1267,31 @@
 
 
   /** @domName SVGDefsElement.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGDefsElement_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGDefsElement_farthestViewportElement_Getter";
 
 
   /** @domName SVGDefsElement.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGDefsElement_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGDefsElement_nearestViewportElement_Getter";
 
 
   /** @domName SVGDefsElement.getBBox */
-  SVGRect getBBox() native "SVGDefsElement_getBBox_Callback";
+  Rect getBBox() native "SVGDefsElement_getBBox_Callback";
 
 
   /** @domName SVGDefsElement.getCTM */
-  SVGMatrix getCTM() native "SVGDefsElement_getCTM_Callback";
+  Matrix getCTM() native "SVGDefsElement_getCTM_Callback";
 
 
   /** @domName SVGDefsElement.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGDefsElement_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGDefsElement_getScreenCTM_Callback";
 
 
   /** @domName SVGDefsElement.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGDefsElement_getTransformToElement_Callback";
+  Matrix getTransformToElement(SvgElement element) native "SVGDefsElement_getTransformToElement_Callback";
 
 
   /** @domName SVGDefsElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGDefsElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGDefsElement_className_Getter";
 
 
   /** @domName SVGDefsElement.style */
@@ -1277,15 +1303,15 @@
 
 
   /** @domName SVGDefsElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGDefsElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGDefsElement_requiredExtensions_Getter";
 
 
   /** @domName SVGDefsElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGDefsElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGDefsElement_requiredFeatures_Getter";
 
 
   /** @domName SVGDefsElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGDefsElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGDefsElement_systemLanguage_Getter";
 
 
   /** @domName SVGDefsElement.hasExtension */
@@ -1293,7 +1319,7 @@
 
 
   /** @domName SVGDefsElement.transform */
-  SVGAnimatedTransformList get transform native "SVGDefsElement_transform_Getter";
+  AnimatedTransformList get transform native "SVGDefsElement_transform_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1304,8 +1330,10 @@
 
 
 /// @domName SVGDescElement
-class SVGDescElement extends SVGElement implements SVGLangSpace, SVGStylable {
-  SVGDescElement.internal(): super.internal();
+class DescElement extends SvgElement implements Stylable, LangSpace {
+
+  factory DescElement() => _SvgElementFactoryProvider.createSvgElement_tag("desc");
+  DescElement.internal(): super.internal();
 
 
   /** @domName SVGDescElement.xmllang */
@@ -1325,7 +1353,7 @@
 
 
   /** @domName SVGDescElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGDescElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGDescElement_className_Getter";
 
 
   /** @domName SVGDescElement.style */
@@ -1343,175 +1371,50 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGDocument
-class SVGDocument extends Document {
-  SVGDocument.internal(): super.internal();
-
-
-  /** @domName SVGDocument.rootElement */
-  SVGSVGElement get rootElement native "SVGDocument_rootElement_Getter";
-
-
-  /** @domName SVGDocument.createEvent */
-  Event $dom_createEvent(String eventType) native "SVGDocument_createEvent_Callback";
-
-}
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-
-class _AttributeClassSet extends CssClassSet {
-  final Element _element;
-
-  _AttributeClassSet(this._element);
-
-  Set<String> readClasses() {
-    var classname = _element.attributes['class'];
-
-    Set<String> s = new Set<String>();
-    if (classname == null) {
-      return s;
-    }
-    for (String name in classname.split(' ')) {
-      String trimmed = name.trim();
-      if (!trimmed.isEmpty) {
-        s.add(trimmed);
-      }
-    }
-    return s;
-  }
-
-  void writeClasses(Set s) {
-    List list = new List.from(s);
-    _element.attributes['class'] = Strings.join(list, ' ');
-  }
-}
-
-class SVGElement extends Element {
-  factory SVGElement.tag(String tag) =>
-      _SVGElementFactoryProvider.createSVGElement_tag(tag);
-  factory SVGElement.svg(String svg) =>
-      _SVGElementFactoryProvider.createSVGElement_svg(svg);
-
-  _AttributeClassSet _cssClassSet;
-  CssClassSet get classes {
-    if (_cssClassSet == null) {
-      _cssClassSet = new _AttributeClassSet(this);
-    }
-    return _cssClassSet;
-  }
-
-  List<Element> get elements => new FilteredElementList(this);
-
-  void set elements(Collection<Element> value) {
-    final elements = this.elements;
-    elements.clear();
-    elements.addAll(value);
-  }
-
-  String get outerHTML {
-    final container = new Element.tag("div");
-    final SVGElement cloned = this.clone(true);
-    container.elements.add(cloned);
-    return container.innerHTML;
-  }
-
-  String get innerHTML {
-    final container = new Element.tag("div");
-    final SVGElement cloned = this.clone(true);
-    container.elements.addAll(cloned.elements);
-    return container.innerHTML;
-  }
-
-  void set innerHTML(String svg) {
-    final container = new Element.tag("div");
-    // Wrap the SVG string in <svg> so that SVGElements are created, rather than
-    // HTMLElements.
-    container.innerHTML = '<svg version="1.1">$svg</svg>';
-    this.elements = container.elements[0].elements;
-  }
-
-  SVGElement.internal(): super.internal();
-
-
-  /** @domName SVGElement.id */
-  String get id native "SVGElement_id_Getter";
-
-
-  /** @domName SVGElement.id */
-  void set id(String value) native "SVGElement_id_Setter";
-
-
-  /** @domName SVGElement.ownerSVGElement */
-  SVGSVGElement get ownerSVGElement native "SVGElement_ownerSVGElement_Getter";
-
-
-  /** @domName SVGElement.viewportElement */
-  SVGElement get viewportElement native "SVGElement_viewportElement_Getter";
-
-
-  /** @domName SVGElement.xmlbase */
-  String get xmlbase native "SVGElement_xmlbase_Getter";
-
-
-  /** @domName SVGElement.xmlbase */
-  void set xmlbase(String value) native "SVGElement_xmlbase_Setter";
-
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-
 /// @domName SVGElementInstance
-class SVGElementInstance extends EventTarget {
-  SVGElementInstance.internal(): super.internal();
+class ElementInstance extends EventTarget {
+  ElementInstance.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  SVGElementInstanceEvents get on =>
-    new SVGElementInstanceEvents(this);
+  /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
+  ElementInstanceEvents get on =>
+    new ElementInstanceEvents(this);
 
 
   /** @domName SVGElementInstance.childNodes */
-  List<SVGElementInstance> get childNodes native "SVGElementInstance_childNodes_Getter";
+  List<ElementInstance> get childNodes native "SVGElementInstance_childNodes_Getter";
 
 
   /** @domName SVGElementInstance.correspondingElement */
-  SVGElement get correspondingElement native "SVGElementInstance_correspondingElement_Getter";
+  SvgElement get correspondingElement native "SVGElementInstance_correspondingElement_Getter";
 
 
   /** @domName SVGElementInstance.correspondingUseElement */
-  SVGUseElement get correspondingUseElement native "SVGElementInstance_correspondingUseElement_Getter";
+  UseElement get correspondingUseElement native "SVGElementInstance_correspondingUseElement_Getter";
 
 
   /** @domName SVGElementInstance.firstChild */
-  SVGElementInstance get firstChild native "SVGElementInstance_firstChild_Getter";
+  ElementInstance get firstChild native "SVGElementInstance_firstChild_Getter";
 
 
   /** @domName SVGElementInstance.lastChild */
-  SVGElementInstance get lastChild native "SVGElementInstance_lastChild_Getter";
+  ElementInstance get lastChild native "SVGElementInstance_lastChild_Getter";
 
 
   /** @domName SVGElementInstance.nextSibling */
-  SVGElementInstance get nextSibling native "SVGElementInstance_nextSibling_Getter";
+  ElementInstance get nextSibling native "SVGElementInstance_nextSibling_Getter";
 
 
   /** @domName SVGElementInstance.parentNode */
-  SVGElementInstance get parentNode native "SVGElementInstance_parentNode_Getter";
+  ElementInstance get parentNode native "SVGElementInstance_parentNode_Getter";
 
 
   /** @domName SVGElementInstance.previousSibling */
-  SVGElementInstance get previousSibling native "SVGElementInstance_previousSibling_Getter";
+  ElementInstance get previousSibling native "SVGElementInstance_previousSibling_Getter";
 
 }
 
-class SVGElementInstanceEvents extends Events {
-  SVGElementInstanceEvents(EventTarget _ptr) : super(_ptr);
+class ElementInstanceEvents extends Events {
+  ElementInstanceEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get abort => this['abort'];
 
@@ -1601,28 +1504,30 @@
 
 
 /// @domName SVGEllipseElement
-class SVGEllipseElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
-  SVGEllipseElement.internal(): super.internal();
+class EllipseElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
+
+  factory EllipseElement() => _SvgElementFactoryProvider.createSvgElement_tag("ellipse");
+  EllipseElement.internal(): super.internal();
 
 
   /** @domName SVGEllipseElement.cx */
-  SVGAnimatedLength get cx native "SVGEllipseElement_cx_Getter";
+  AnimatedLength get cx native "SVGEllipseElement_cx_Getter";
 
 
   /** @domName SVGEllipseElement.cy */
-  SVGAnimatedLength get cy native "SVGEllipseElement_cy_Getter";
+  AnimatedLength get cy native "SVGEllipseElement_cy_Getter";
 
 
   /** @domName SVGEllipseElement.rx */
-  SVGAnimatedLength get rx native "SVGEllipseElement_rx_Getter";
+  AnimatedLength get rx native "SVGEllipseElement_rx_Getter";
 
 
   /** @domName SVGEllipseElement.ry */
-  SVGAnimatedLength get ry native "SVGEllipseElement_ry_Getter";
+  AnimatedLength get ry native "SVGEllipseElement_ry_Getter";
 
 
   /** @domName SVGEllipseElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGEllipseElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGEllipseElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGEllipseElement.xmllang */
@@ -1642,31 +1547,31 @@
 
 
   /** @domName SVGEllipseElement.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGEllipseElement_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGEllipseElement_farthestViewportElement_Getter";
 
 
   /** @domName SVGEllipseElement.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGEllipseElement_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGEllipseElement_nearestViewportElement_Getter";
 
 
   /** @domName SVGEllipseElement.getBBox */
-  SVGRect getBBox() native "SVGEllipseElement_getBBox_Callback";
+  Rect getBBox() native "SVGEllipseElement_getBBox_Callback";
 
 
   /** @domName SVGEllipseElement.getCTM */
-  SVGMatrix getCTM() native "SVGEllipseElement_getCTM_Callback";
+  Matrix getCTM() native "SVGEllipseElement_getCTM_Callback";
 
 
   /** @domName SVGEllipseElement.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGEllipseElement_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGEllipseElement_getScreenCTM_Callback";
 
 
   /** @domName SVGEllipseElement.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGEllipseElement_getTransformToElement_Callback";
+  Matrix getTransformToElement(SvgElement element) native "SVGEllipseElement_getTransformToElement_Callback";
 
 
   /** @domName SVGEllipseElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGEllipseElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGEllipseElement_className_Getter";
 
 
   /** @domName SVGEllipseElement.style */
@@ -1678,15 +1583,15 @@
 
 
   /** @domName SVGEllipseElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGEllipseElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGEllipseElement_requiredExtensions_Getter";
 
 
   /** @domName SVGEllipseElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGEllipseElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGEllipseElement_requiredFeatures_Getter";
 
 
   /** @domName SVGEllipseElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGEllipseElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGEllipseElement_systemLanguage_Getter";
 
 
   /** @domName SVGEllipseElement.hasExtension */
@@ -1694,7 +1599,7 @@
 
 
   /** @domName SVGEllipseElement.transform */
-  SVGAnimatedTransformList get transform native "SVGEllipseElement_transform_Getter";
+  AnimatedTransformList get transform native "SVGEllipseElement_transform_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1705,8 +1610,8 @@
 
 
 /// @domName SVGException
-class SVGException extends NativeFieldWrapperClass1 {
-  SVGException.internal();
+class Exception extends NativeFieldWrapperClass1 {
+  Exception.internal();
 
   static const int SVG_INVALID_VALUE_ERR = 1;
 
@@ -1739,12 +1644,12 @@
 
 
 /// @domName SVGExternalResourcesRequired
-class SVGExternalResourcesRequired extends NativeFieldWrapperClass1 {
-  SVGExternalResourcesRequired.internal();
+class ExternalResourcesRequired extends NativeFieldWrapperClass1 {
+  ExternalResourcesRequired.internal();
 
 
   /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGExternalResourcesRequired_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGExternalResourcesRequired_externalResourcesRequired_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1755,8 +1660,8 @@
 
 
 /// @domName SVGFEBlendElement
-class SVGFEBlendElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
-  SVGFEBlendElement.internal(): super.internal();
+class FEBlendElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+  FEBlendElement.internal(): super.internal();
 
   static const int SVG_FEBLEND_MODE_DARKEN = 4;
 
@@ -1772,39 +1677,39 @@
 
 
   /** @domName SVGFEBlendElement.in1 */
-  SVGAnimatedString get in1 native "SVGFEBlendElement_in1_Getter";
+  AnimatedString get in1 native "SVGFEBlendElement_in1_Getter";
 
 
   /** @domName SVGFEBlendElement.in2 */
-  SVGAnimatedString get in2 native "SVGFEBlendElement_in2_Getter";
+  AnimatedString get in2 native "SVGFEBlendElement_in2_Getter";
 
 
   /** @domName SVGFEBlendElement.mode */
-  SVGAnimatedEnumeration get mode native "SVGFEBlendElement_mode_Getter";
+  AnimatedEnumeration get mode native "SVGFEBlendElement_mode_Getter";
 
 
   /** @domName SVGFEBlendElement.height */
-  SVGAnimatedLength get height native "SVGFEBlendElement_height_Getter";
+  AnimatedLength get height native "SVGFEBlendElement_height_Getter";
 
 
   /** @domName SVGFEBlendElement.result */
-  SVGAnimatedString get result native "SVGFEBlendElement_result_Getter";
+  AnimatedString get result native "SVGFEBlendElement_result_Getter";
 
 
   /** @domName SVGFEBlendElement.width */
-  SVGAnimatedLength get width native "SVGFEBlendElement_width_Getter";
+  AnimatedLength get width native "SVGFEBlendElement_width_Getter";
 
 
   /** @domName SVGFEBlendElement.x */
-  SVGAnimatedLength get x native "SVGFEBlendElement_x_Getter";
+  AnimatedLength get x native "SVGFEBlendElement_x_Getter";
 
 
   /** @domName SVGFEBlendElement.y */
-  SVGAnimatedLength get y native "SVGFEBlendElement_y_Getter";
+  AnimatedLength get y native "SVGFEBlendElement_y_Getter";
 
 
   /** @domName SVGFEBlendElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFEBlendElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFEBlendElement_className_Getter";
 
 
   /** @domName SVGFEBlendElement.style */
@@ -1823,8 +1728,8 @@
 
 
 /// @domName SVGFEColorMatrixElement
-class SVGFEColorMatrixElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
-  SVGFEColorMatrixElement.internal(): super.internal();
+class FEColorMatrixElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+  FEColorMatrixElement.internal(): super.internal();
 
   static const int SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3;
 
@@ -1838,39 +1743,39 @@
 
 
   /** @domName SVGFEColorMatrixElement.in1 */
-  SVGAnimatedString get in1 native "SVGFEColorMatrixElement_in1_Getter";
+  AnimatedString get in1 native "SVGFEColorMatrixElement_in1_Getter";
 
 
   /** @domName SVGFEColorMatrixElement.type */
-  SVGAnimatedEnumeration get type native "SVGFEColorMatrixElement_type_Getter";
+  AnimatedEnumeration get type native "SVGFEColorMatrixElement_type_Getter";
 
 
   /** @domName SVGFEColorMatrixElement.values */
-  SVGAnimatedNumberList get values native "SVGFEColorMatrixElement_values_Getter";
+  AnimatedNumberList get values native "SVGFEColorMatrixElement_values_Getter";
 
 
   /** @domName SVGFEColorMatrixElement.height */
-  SVGAnimatedLength get height native "SVGFEColorMatrixElement_height_Getter";
+  AnimatedLength get height native "SVGFEColorMatrixElement_height_Getter";
 
 
   /** @domName SVGFEColorMatrixElement.result */
-  SVGAnimatedString get result native "SVGFEColorMatrixElement_result_Getter";
+  AnimatedString get result native "SVGFEColorMatrixElement_result_Getter";
 
 
   /** @domName SVGFEColorMatrixElement.width */
-  SVGAnimatedLength get width native "SVGFEColorMatrixElement_width_Getter";
+  AnimatedLength get width native "SVGFEColorMatrixElement_width_Getter";
 
 
   /** @domName SVGFEColorMatrixElement.x */
-  SVGAnimatedLength get x native "SVGFEColorMatrixElement_x_Getter";
+  AnimatedLength get x native "SVGFEColorMatrixElement_x_Getter";
 
 
   /** @domName SVGFEColorMatrixElement.y */
-  SVGAnimatedLength get y native "SVGFEColorMatrixElement_y_Getter";
+  AnimatedLength get y native "SVGFEColorMatrixElement_y_Getter";
 
 
   /** @domName SVGFEColorMatrixElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFEColorMatrixElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFEColorMatrixElement_className_Getter";
 
 
   /** @domName SVGFEColorMatrixElement.style */
@@ -1889,36 +1794,36 @@
 
 
 /// @domName SVGFEComponentTransferElement
-class SVGFEComponentTransferElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
-  SVGFEComponentTransferElement.internal(): super.internal();
+class FEComponentTransferElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+  FEComponentTransferElement.internal(): super.internal();
 
 
   /** @domName SVGFEComponentTransferElement.in1 */
-  SVGAnimatedString get in1 native "SVGFEComponentTransferElement_in1_Getter";
+  AnimatedString get in1 native "SVGFEComponentTransferElement_in1_Getter";
 
 
   /** @domName SVGFEComponentTransferElement.height */
-  SVGAnimatedLength get height native "SVGFEComponentTransferElement_height_Getter";
+  AnimatedLength get height native "SVGFEComponentTransferElement_height_Getter";
 
 
   /** @domName SVGFEComponentTransferElement.result */
-  SVGAnimatedString get result native "SVGFEComponentTransferElement_result_Getter";
+  AnimatedString get result native "SVGFEComponentTransferElement_result_Getter";
 
 
   /** @domName SVGFEComponentTransferElement.width */
-  SVGAnimatedLength get width native "SVGFEComponentTransferElement_width_Getter";
+  AnimatedLength get width native "SVGFEComponentTransferElement_width_Getter";
 
 
   /** @domName SVGFEComponentTransferElement.x */
-  SVGAnimatedLength get x native "SVGFEComponentTransferElement_x_Getter";
+  AnimatedLength get x native "SVGFEComponentTransferElement_x_Getter";
 
 
   /** @domName SVGFEComponentTransferElement.y */
-  SVGAnimatedLength get y native "SVGFEComponentTransferElement_y_Getter";
+  AnimatedLength get y native "SVGFEComponentTransferElement_y_Getter";
 
 
   /** @domName SVGFEComponentTransferElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFEComponentTransferElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFEComponentTransferElement_className_Getter";
 
 
   /** @domName SVGFEComponentTransferElement.style */
@@ -1937,8 +1842,8 @@
 
 
 /// @domName SVGFECompositeElement
-class SVGFECompositeElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
-  SVGFECompositeElement.internal(): super.internal();
+class FECompositeElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+  FECompositeElement.internal(): super.internal();
 
   static const int SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6;
 
@@ -1956,55 +1861,55 @@
 
 
   /** @domName SVGFECompositeElement.in1 */
-  SVGAnimatedString get in1 native "SVGFECompositeElement_in1_Getter";
+  AnimatedString get in1 native "SVGFECompositeElement_in1_Getter";
 
 
   /** @domName SVGFECompositeElement.in2 */
-  SVGAnimatedString get in2 native "SVGFECompositeElement_in2_Getter";
+  AnimatedString get in2 native "SVGFECompositeElement_in2_Getter";
 
 
   /** @domName SVGFECompositeElement.k1 */
-  SVGAnimatedNumber get k1 native "SVGFECompositeElement_k1_Getter";
+  AnimatedNumber get k1 native "SVGFECompositeElement_k1_Getter";
 
 
   /** @domName SVGFECompositeElement.k2 */
-  SVGAnimatedNumber get k2 native "SVGFECompositeElement_k2_Getter";
+  AnimatedNumber get k2 native "SVGFECompositeElement_k2_Getter";
 
 
   /** @domName SVGFECompositeElement.k3 */
-  SVGAnimatedNumber get k3 native "SVGFECompositeElement_k3_Getter";
+  AnimatedNumber get k3 native "SVGFECompositeElement_k3_Getter";
 
 
   /** @domName SVGFECompositeElement.k4 */
-  SVGAnimatedNumber get k4 native "SVGFECompositeElement_k4_Getter";
+  AnimatedNumber get k4 native "SVGFECompositeElement_k4_Getter";
 
 
   /** @domName SVGFECompositeElement.operator */
-  SVGAnimatedEnumeration get operator native "SVGFECompositeElement_operator_Getter";
+  AnimatedEnumeration get operator native "SVGFECompositeElement_operator_Getter";
 
 
   /** @domName SVGFECompositeElement.height */
-  SVGAnimatedLength get height native "SVGFECompositeElement_height_Getter";
+  AnimatedLength get height native "SVGFECompositeElement_height_Getter";
 
 
   /** @domName SVGFECompositeElement.result */
-  SVGAnimatedString get result native "SVGFECompositeElement_result_Getter";
+  AnimatedString get result native "SVGFECompositeElement_result_Getter";
 
 
   /** @domName SVGFECompositeElement.width */
-  SVGAnimatedLength get width native "SVGFECompositeElement_width_Getter";
+  AnimatedLength get width native "SVGFECompositeElement_width_Getter";
 
 
   /** @domName SVGFECompositeElement.x */
-  SVGAnimatedLength get x native "SVGFECompositeElement_x_Getter";
+  AnimatedLength get x native "SVGFECompositeElement_x_Getter";
 
 
   /** @domName SVGFECompositeElement.y */
-  SVGAnimatedLength get y native "SVGFECompositeElement_y_Getter";
+  AnimatedLength get y native "SVGFECompositeElement_y_Getter";
 
 
   /** @domName SVGFECompositeElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFECompositeElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFECompositeElement_className_Getter";
 
 
   /** @domName SVGFECompositeElement.style */
@@ -2023,8 +1928,8 @@
 
 
 /// @domName SVGFEConvolveMatrixElement
-class SVGFEConvolveMatrixElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
-  SVGFEConvolveMatrixElement.internal(): super.internal();
+class FEConvolveMatrixElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+  FEConvolveMatrixElement.internal(): super.internal();
 
   static const int SVG_EDGEMODE_DUPLICATE = 1;
 
@@ -2036,75 +1941,75 @@
 
 
   /** @domName SVGFEConvolveMatrixElement.bias */
-  SVGAnimatedNumber get bias native "SVGFEConvolveMatrixElement_bias_Getter";
+  AnimatedNumber get bias native "SVGFEConvolveMatrixElement_bias_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.divisor */
-  SVGAnimatedNumber get divisor native "SVGFEConvolveMatrixElement_divisor_Getter";
+  AnimatedNumber get divisor native "SVGFEConvolveMatrixElement_divisor_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.edgeMode */
-  SVGAnimatedEnumeration get edgeMode native "SVGFEConvolveMatrixElement_edgeMode_Getter";
+  AnimatedEnumeration get edgeMode native "SVGFEConvolveMatrixElement_edgeMode_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.in1 */
-  SVGAnimatedString get in1 native "SVGFEConvolveMatrixElement_in1_Getter";
+  AnimatedString get in1 native "SVGFEConvolveMatrixElement_in1_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.kernelMatrix */
-  SVGAnimatedNumberList get kernelMatrix native "SVGFEConvolveMatrixElement_kernelMatrix_Getter";
+  AnimatedNumberList get kernelMatrix native "SVGFEConvolveMatrixElement_kernelMatrix_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthX */
-  SVGAnimatedNumber get kernelUnitLengthX native "SVGFEConvolveMatrixElement_kernelUnitLengthX_Getter";
+  AnimatedNumber get kernelUnitLengthX native "SVGFEConvolveMatrixElement_kernelUnitLengthX_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthY */
-  SVGAnimatedNumber get kernelUnitLengthY native "SVGFEConvolveMatrixElement_kernelUnitLengthY_Getter";
+  AnimatedNumber get kernelUnitLengthY native "SVGFEConvolveMatrixElement_kernelUnitLengthY_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.orderX */
-  SVGAnimatedInteger get orderX native "SVGFEConvolveMatrixElement_orderX_Getter";
+  AnimatedInteger get orderX native "SVGFEConvolveMatrixElement_orderX_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.orderY */
-  SVGAnimatedInteger get orderY native "SVGFEConvolveMatrixElement_orderY_Getter";
+  AnimatedInteger get orderY native "SVGFEConvolveMatrixElement_orderY_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.preserveAlpha */
-  SVGAnimatedBoolean get preserveAlpha native "SVGFEConvolveMatrixElement_preserveAlpha_Getter";
+  AnimatedBoolean get preserveAlpha native "SVGFEConvolveMatrixElement_preserveAlpha_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.targetX */
-  SVGAnimatedInteger get targetX native "SVGFEConvolveMatrixElement_targetX_Getter";
+  AnimatedInteger get targetX native "SVGFEConvolveMatrixElement_targetX_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.targetY */
-  SVGAnimatedInteger get targetY native "SVGFEConvolveMatrixElement_targetY_Getter";
+  AnimatedInteger get targetY native "SVGFEConvolveMatrixElement_targetY_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.height */
-  SVGAnimatedLength get height native "SVGFEConvolveMatrixElement_height_Getter";
+  AnimatedLength get height native "SVGFEConvolveMatrixElement_height_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.result */
-  SVGAnimatedString get result native "SVGFEConvolveMatrixElement_result_Getter";
+  AnimatedString get result native "SVGFEConvolveMatrixElement_result_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.width */
-  SVGAnimatedLength get width native "SVGFEConvolveMatrixElement_width_Getter";
+  AnimatedLength get width native "SVGFEConvolveMatrixElement_width_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.x */
-  SVGAnimatedLength get x native "SVGFEConvolveMatrixElement_x_Getter";
+  AnimatedLength get x native "SVGFEConvolveMatrixElement_x_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.y */
-  SVGAnimatedLength get y native "SVGFEConvolveMatrixElement_y_Getter";
+  AnimatedLength get y native "SVGFEConvolveMatrixElement_y_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFEConvolveMatrixElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFEConvolveMatrixElement_className_Getter";
 
 
   /** @domName SVGFEConvolveMatrixElement.style */
@@ -2123,52 +2028,52 @@
 
 
 /// @domName SVGFEDiffuseLightingElement
-class SVGFEDiffuseLightingElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
-  SVGFEDiffuseLightingElement.internal(): super.internal();
+class FEDiffuseLightingElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+  FEDiffuseLightingElement.internal(): super.internal();
 
 
   /** @domName SVGFEDiffuseLightingElement.diffuseConstant */
-  SVGAnimatedNumber get diffuseConstant native "SVGFEDiffuseLightingElement_diffuseConstant_Getter";
+  AnimatedNumber get diffuseConstant native "SVGFEDiffuseLightingElement_diffuseConstant_Getter";
 
 
   /** @domName SVGFEDiffuseLightingElement.in1 */
-  SVGAnimatedString get in1 native "SVGFEDiffuseLightingElement_in1_Getter";
+  AnimatedString get in1 native "SVGFEDiffuseLightingElement_in1_Getter";
 
 
   /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthX */
-  SVGAnimatedNumber get kernelUnitLengthX native "SVGFEDiffuseLightingElement_kernelUnitLengthX_Getter";
+  AnimatedNumber get kernelUnitLengthX native "SVGFEDiffuseLightingElement_kernelUnitLengthX_Getter";
 
 
   /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthY */
-  SVGAnimatedNumber get kernelUnitLengthY native "SVGFEDiffuseLightingElement_kernelUnitLengthY_Getter";
+  AnimatedNumber get kernelUnitLengthY native "SVGFEDiffuseLightingElement_kernelUnitLengthY_Getter";
 
 
   /** @domName SVGFEDiffuseLightingElement.surfaceScale */
-  SVGAnimatedNumber get surfaceScale native "SVGFEDiffuseLightingElement_surfaceScale_Getter";
+  AnimatedNumber get surfaceScale native "SVGFEDiffuseLightingElement_surfaceScale_Getter";
 
 
   /** @domName SVGFEDiffuseLightingElement.height */
-  SVGAnimatedLength get height native "SVGFEDiffuseLightingElement_height_Getter";
+  AnimatedLength get height native "SVGFEDiffuseLightingElement_height_Getter";
 
 
   /** @domName SVGFEDiffuseLightingElement.result */
-  SVGAnimatedString get result native "SVGFEDiffuseLightingElement_result_Getter";
+  AnimatedString get result native "SVGFEDiffuseLightingElement_result_Getter";
 
 
   /** @domName SVGFEDiffuseLightingElement.width */
-  SVGAnimatedLength get width native "SVGFEDiffuseLightingElement_width_Getter";
+  AnimatedLength get width native "SVGFEDiffuseLightingElement_width_Getter";
 
 
   /** @domName SVGFEDiffuseLightingElement.x */
-  SVGAnimatedLength get x native "SVGFEDiffuseLightingElement_x_Getter";
+  AnimatedLength get x native "SVGFEDiffuseLightingElement_x_Getter";
 
 
   /** @domName SVGFEDiffuseLightingElement.y */
-  SVGAnimatedLength get y native "SVGFEDiffuseLightingElement_y_Getter";
+  AnimatedLength get y native "SVGFEDiffuseLightingElement_y_Getter";
 
 
   /** @domName SVGFEDiffuseLightingElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFEDiffuseLightingElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFEDiffuseLightingElement_className_Getter";
 
 
   /** @domName SVGFEDiffuseLightingElement.style */
@@ -2187,8 +2092,8 @@
 
 
 /// @domName SVGFEDisplacementMapElement
-class SVGFEDisplacementMapElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
-  SVGFEDisplacementMapElement.internal(): super.internal();
+class FEDisplacementMapElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+  FEDisplacementMapElement.internal(): super.internal();
 
   static const int SVG_CHANNEL_A = 4;
 
@@ -2202,47 +2107,47 @@
 
 
   /** @domName SVGFEDisplacementMapElement.in1 */
-  SVGAnimatedString get in1 native "SVGFEDisplacementMapElement_in1_Getter";
+  AnimatedString get in1 native "SVGFEDisplacementMapElement_in1_Getter";
 
 
   /** @domName SVGFEDisplacementMapElement.in2 */
-  SVGAnimatedString get in2 native "SVGFEDisplacementMapElement_in2_Getter";
+  AnimatedString get in2 native "SVGFEDisplacementMapElement_in2_Getter";
 
 
   /** @domName SVGFEDisplacementMapElement.scale */
-  SVGAnimatedNumber get scale native "SVGFEDisplacementMapElement_scale_Getter";
+  AnimatedNumber get scale native "SVGFEDisplacementMapElement_scale_Getter";
 
 
   /** @domName SVGFEDisplacementMapElement.xChannelSelector */
-  SVGAnimatedEnumeration get xChannelSelector native "SVGFEDisplacementMapElement_xChannelSelector_Getter";
+  AnimatedEnumeration get xChannelSelector native "SVGFEDisplacementMapElement_xChannelSelector_Getter";
 
 
   /** @domName SVGFEDisplacementMapElement.yChannelSelector */
-  SVGAnimatedEnumeration get yChannelSelector native "SVGFEDisplacementMapElement_yChannelSelector_Getter";
+  AnimatedEnumeration get yChannelSelector native "SVGFEDisplacementMapElement_yChannelSelector_Getter";
 
 
   /** @domName SVGFEDisplacementMapElement.height */
-  SVGAnimatedLength get height native "SVGFEDisplacementMapElement_height_Getter";
+  AnimatedLength get height native "SVGFEDisplacementMapElement_height_Getter";
 
 
   /** @domName SVGFEDisplacementMapElement.result */
-  SVGAnimatedString get result native "SVGFEDisplacementMapElement_result_Getter";
+  AnimatedString get result native "SVGFEDisplacementMapElement_result_Getter";
 
 
   /** @domName SVGFEDisplacementMapElement.width */
-  SVGAnimatedLength get width native "SVGFEDisplacementMapElement_width_Getter";
+  AnimatedLength get width native "SVGFEDisplacementMapElement_width_Getter";
 
 
   /** @domName SVGFEDisplacementMapElement.x */
-  SVGAnimatedLength get x native "SVGFEDisplacementMapElement_x_Getter";
+  AnimatedLength get x native "SVGFEDisplacementMapElement_x_Getter";
 
 
   /** @domName SVGFEDisplacementMapElement.y */
-  SVGAnimatedLength get y native "SVGFEDisplacementMapElement_y_Getter";
+  AnimatedLength get y native "SVGFEDisplacementMapElement_y_Getter";
 
 
   /** @domName SVGFEDisplacementMapElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFEDisplacementMapElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFEDisplacementMapElement_className_Getter";
 
 
   /** @domName SVGFEDisplacementMapElement.style */
@@ -2261,16 +2166,16 @@
 
 
 /// @domName SVGFEDistantLightElement
-class SVGFEDistantLightElement extends SVGElement {
-  SVGFEDistantLightElement.internal(): super.internal();
+class FEDistantLightElement extends SvgElement {
+  FEDistantLightElement.internal(): super.internal();
 
 
   /** @domName SVGFEDistantLightElement.azimuth */
-  SVGAnimatedNumber get azimuth native "SVGFEDistantLightElement_azimuth_Getter";
+  AnimatedNumber get azimuth native "SVGFEDistantLightElement_azimuth_Getter";
 
 
   /** @domName SVGFEDistantLightElement.elevation */
-  SVGAnimatedNumber get elevation native "SVGFEDistantLightElement_elevation_Getter";
+  AnimatedNumber get elevation native "SVGFEDistantLightElement_elevation_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2281,28 +2186,28 @@
 
 
 /// @domName SVGFEDropShadowElement
-class SVGFEDropShadowElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
-  SVGFEDropShadowElement.internal(): super.internal();
+class FEDropShadowElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+  FEDropShadowElement.internal(): super.internal();
 
 
   /** @domName SVGFEDropShadowElement.dx */
-  SVGAnimatedNumber get dx native "SVGFEDropShadowElement_dx_Getter";
+  AnimatedNumber get dx native "SVGFEDropShadowElement_dx_Getter";
 
 
   /** @domName SVGFEDropShadowElement.dy */
-  SVGAnimatedNumber get dy native "SVGFEDropShadowElement_dy_Getter";
+  AnimatedNumber get dy native "SVGFEDropShadowElement_dy_Getter";
 
 
   /** @domName SVGFEDropShadowElement.in1 */
-  SVGAnimatedString get in1 native "SVGFEDropShadowElement_in1_Getter";
+  AnimatedString get in1 native "SVGFEDropShadowElement_in1_Getter";
 
 
   /** @domName SVGFEDropShadowElement.stdDeviationX */
-  SVGAnimatedNumber get stdDeviationX native "SVGFEDropShadowElement_stdDeviationX_Getter";
+  AnimatedNumber get stdDeviationX native "SVGFEDropShadowElement_stdDeviationX_Getter";
 
 
   /** @domName SVGFEDropShadowElement.stdDeviationY */
-  SVGAnimatedNumber get stdDeviationY native "SVGFEDropShadowElement_stdDeviationY_Getter";
+  AnimatedNumber get stdDeviationY native "SVGFEDropShadowElement_stdDeviationY_Getter";
 
 
   /** @domName SVGFEDropShadowElement.setStdDeviation */
@@ -2310,27 +2215,27 @@
 
 
   /** @domName SVGFEDropShadowElement.height */
-  SVGAnimatedLength get height native "SVGFEDropShadowElement_height_Getter";
+  AnimatedLength get height native "SVGFEDropShadowElement_height_Getter";
 
 
   /** @domName SVGFEDropShadowElement.result */
-  SVGAnimatedString get result native "SVGFEDropShadowElement_result_Getter";
+  AnimatedString get result native "SVGFEDropShadowElement_result_Getter";
 
 
   /** @domName SVGFEDropShadowElement.width */
-  SVGAnimatedLength get width native "SVGFEDropShadowElement_width_Getter";
+  AnimatedLength get width native "SVGFEDropShadowElement_width_Getter";
 
 
   /** @domName SVGFEDropShadowElement.x */
-  SVGAnimatedLength get x native "SVGFEDropShadowElement_x_Getter";
+  AnimatedLength get x native "SVGFEDropShadowElement_x_Getter";
 
 
   /** @domName SVGFEDropShadowElement.y */
-  SVGAnimatedLength get y native "SVGFEDropShadowElement_y_Getter";
+  AnimatedLength get y native "SVGFEDropShadowElement_y_Getter";
 
 
   /** @domName SVGFEDropShadowElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFEDropShadowElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFEDropShadowElement_className_Getter";
 
 
   /** @domName SVGFEDropShadowElement.style */
@@ -2349,32 +2254,32 @@
 
 
 /// @domName SVGFEFloodElement
-class SVGFEFloodElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
-  SVGFEFloodElement.internal(): super.internal();
+class FEFloodElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+  FEFloodElement.internal(): super.internal();
 
 
   /** @domName SVGFEFloodElement.height */
-  SVGAnimatedLength get height native "SVGFEFloodElement_height_Getter";
+  AnimatedLength get height native "SVGFEFloodElement_height_Getter";
 
 
   /** @domName SVGFEFloodElement.result */
-  SVGAnimatedString get result native "SVGFEFloodElement_result_Getter";
+  AnimatedString get result native "SVGFEFloodElement_result_Getter";
 
 
   /** @domName SVGFEFloodElement.width */
-  SVGAnimatedLength get width native "SVGFEFloodElement_width_Getter";
+  AnimatedLength get width native "SVGFEFloodElement_width_Getter";
 
 
   /** @domName SVGFEFloodElement.x */
-  SVGAnimatedLength get x native "SVGFEFloodElement_x_Getter";
+  AnimatedLength get x native "SVGFEFloodElement_x_Getter";
 
 
   /** @domName SVGFEFloodElement.y */
-  SVGAnimatedLength get y native "SVGFEFloodElement_y_Getter";
+  AnimatedLength get y native "SVGFEFloodElement_y_Getter";
 
 
   /** @domName SVGFEFloodElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFEFloodElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFEFloodElement_className_Getter";
 
 
   /** @domName SVGFEFloodElement.style */
@@ -2393,8 +2298,8 @@
 
 
 /// @domName SVGFEFuncAElement
-class SVGFEFuncAElement extends SVGComponentTransferFunctionElement {
-  SVGFEFuncAElement.internal(): super.internal();
+class FEFuncAElement extends ComponentTransferFunctionElement {
+  FEFuncAElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2405,8 +2310,8 @@
 
 
 /// @domName SVGFEFuncBElement
-class SVGFEFuncBElement extends SVGComponentTransferFunctionElement {
-  SVGFEFuncBElement.internal(): super.internal();
+class FEFuncBElement extends ComponentTransferFunctionElement {
+  FEFuncBElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2417,8 +2322,8 @@
 
 
 /// @domName SVGFEFuncGElement
-class SVGFEFuncGElement extends SVGComponentTransferFunctionElement {
-  SVGFEFuncGElement.internal(): super.internal();
+class FEFuncGElement extends ComponentTransferFunctionElement {
+  FEFuncGElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2429,8 +2334,8 @@
 
 
 /// @domName SVGFEFuncRElement
-class SVGFEFuncRElement extends SVGComponentTransferFunctionElement {
-  SVGFEFuncRElement.internal(): super.internal();
+class FEFuncRElement extends ComponentTransferFunctionElement {
+  FEFuncRElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2441,20 +2346,20 @@
 
 
 /// @domName SVGFEGaussianBlurElement
-class SVGFEGaussianBlurElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
-  SVGFEGaussianBlurElement.internal(): super.internal();
+class FEGaussianBlurElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+  FEGaussianBlurElement.internal(): super.internal();
 
 
   /** @domName SVGFEGaussianBlurElement.in1 */
-  SVGAnimatedString get in1 native "SVGFEGaussianBlurElement_in1_Getter";
+  AnimatedString get in1 native "SVGFEGaussianBlurElement_in1_Getter";
 
 
   /** @domName SVGFEGaussianBlurElement.stdDeviationX */
-  SVGAnimatedNumber get stdDeviationX native "SVGFEGaussianBlurElement_stdDeviationX_Getter";
+  AnimatedNumber get stdDeviationX native "SVGFEGaussianBlurElement_stdDeviationX_Getter";
 
 
   /** @domName SVGFEGaussianBlurElement.stdDeviationY */
-  SVGAnimatedNumber get stdDeviationY native "SVGFEGaussianBlurElement_stdDeviationY_Getter";
+  AnimatedNumber get stdDeviationY native "SVGFEGaussianBlurElement_stdDeviationY_Getter";
 
 
   /** @domName SVGFEGaussianBlurElement.setStdDeviation */
@@ -2462,27 +2367,27 @@
 
 
   /** @domName SVGFEGaussianBlurElement.height */
-  SVGAnimatedLength get height native "SVGFEGaussianBlurElement_height_Getter";
+  AnimatedLength get height native "SVGFEGaussianBlurElement_height_Getter";
 
 
   /** @domName SVGFEGaussianBlurElement.result */
-  SVGAnimatedString get result native "SVGFEGaussianBlurElement_result_Getter";
+  AnimatedString get result native "SVGFEGaussianBlurElement_result_Getter";
 
 
   /** @domName SVGFEGaussianBlurElement.width */
-  SVGAnimatedLength get width native "SVGFEGaussianBlurElement_width_Getter";
+  AnimatedLength get width native "SVGFEGaussianBlurElement_width_Getter";
 
 
   /** @domName SVGFEGaussianBlurElement.x */
-  SVGAnimatedLength get x native "SVGFEGaussianBlurElement_x_Getter";
+  AnimatedLength get x native "SVGFEGaussianBlurElement_x_Getter";
 
 
   /** @domName SVGFEGaussianBlurElement.y */
-  SVGAnimatedLength get y native "SVGFEGaussianBlurElement_y_Getter";
+  AnimatedLength get y native "SVGFEGaussianBlurElement_y_Getter";
 
 
   /** @domName SVGFEGaussianBlurElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFEGaussianBlurElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFEGaussianBlurElement_className_Getter";
 
 
   /** @domName SVGFEGaussianBlurElement.style */
@@ -2501,36 +2406,36 @@
 
 
 /// @domName SVGFEImageElement
-class SVGFEImageElement extends SVGElement implements SVGURIReference, SVGLangSpace, SVGFilterPrimitiveStandardAttributes, SVGExternalResourcesRequired {
-  SVGFEImageElement.internal(): super.internal();
+class FEImageElement extends SvgElement implements FilterPrimitiveStandardAttributes, UriReference, ExternalResourcesRequired, LangSpace {
+  FEImageElement.internal(): super.internal();
 
 
   /** @domName SVGFEImageElement.preserveAspectRatio */
-  SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGFEImageElement_preserveAspectRatio_Getter";
+  AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGFEImageElement_preserveAspectRatio_Getter";
 
 
   /** @domName SVGFEImageElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGFEImageElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGFEImageElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGFEImageElement.height */
-  SVGAnimatedLength get height native "SVGFEImageElement_height_Getter";
+  AnimatedLength get height native "SVGFEImageElement_height_Getter";
 
 
   /** @domName SVGFEImageElement.result */
-  SVGAnimatedString get result native "SVGFEImageElement_result_Getter";
+  AnimatedString get result native "SVGFEImageElement_result_Getter";
 
 
   /** @domName SVGFEImageElement.width */
-  SVGAnimatedLength get width native "SVGFEImageElement_width_Getter";
+  AnimatedLength get width native "SVGFEImageElement_width_Getter";
 
 
   /** @domName SVGFEImageElement.x */
-  SVGAnimatedLength get x native "SVGFEImageElement_x_Getter";
+  AnimatedLength get x native "SVGFEImageElement_x_Getter";
 
 
   /** @domName SVGFEImageElement.y */
-  SVGAnimatedLength get y native "SVGFEImageElement_y_Getter";
+  AnimatedLength get y native "SVGFEImageElement_y_Getter";
 
 
   /** @domName SVGFEImageElement.xmllang */
@@ -2550,7 +2455,7 @@
 
 
   /** @domName SVGFEImageElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFEImageElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFEImageElement_className_Getter";
 
 
   /** @domName SVGFEImageElement.style */
@@ -2562,7 +2467,7 @@
 
 
   /** @domName SVGFEImageElement.href */
-  SVGAnimatedString get href native "SVGFEImageElement_href_Getter";
+  AnimatedString get href native "SVGFEImageElement_href_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2573,32 +2478,32 @@
 
 
 /// @domName SVGFEMergeElement
-class SVGFEMergeElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
-  SVGFEMergeElement.internal(): super.internal();
+class FEMergeElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+  FEMergeElement.internal(): super.internal();
 
 
   /** @domName SVGFEMergeElement.height */
-  SVGAnimatedLength get height native "SVGFEMergeElement_height_Getter";
+  AnimatedLength get height native "SVGFEMergeElement_height_Getter";
 
 
   /** @domName SVGFEMergeElement.result */
-  SVGAnimatedString get result native "SVGFEMergeElement_result_Getter";
+  AnimatedString get result native "SVGFEMergeElement_result_Getter";
 
 
   /** @domName SVGFEMergeElement.width */
-  SVGAnimatedLength get width native "SVGFEMergeElement_width_Getter";
+  AnimatedLength get width native "SVGFEMergeElement_width_Getter";
 
 
   /** @domName SVGFEMergeElement.x */
-  SVGAnimatedLength get x native "SVGFEMergeElement_x_Getter";
+  AnimatedLength get x native "SVGFEMergeElement_x_Getter";
 
 
   /** @domName SVGFEMergeElement.y */
-  SVGAnimatedLength get y native "SVGFEMergeElement_y_Getter";
+  AnimatedLength get y native "SVGFEMergeElement_y_Getter";
 
 
   /** @domName SVGFEMergeElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFEMergeElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFEMergeElement_className_Getter";
 
 
   /** @domName SVGFEMergeElement.style */
@@ -2617,12 +2522,12 @@
 
 
 /// @domName SVGFEMergeNodeElement
-class SVGFEMergeNodeElement extends SVGElement {
-  SVGFEMergeNodeElement.internal(): super.internal();
+class FEMergeNodeElement extends SvgElement {
+  FEMergeNodeElement.internal(): super.internal();
 
 
   /** @domName SVGFEMergeNodeElement.in1 */
-  SVGAnimatedString get in1 native "SVGFEMergeNodeElement_in1_Getter";
+  AnimatedString get in1 native "SVGFEMergeNodeElement_in1_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2633,8 +2538,8 @@
 
 
 /// @domName SVGFEMorphologyElement
-class SVGFEMorphologyElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
-  SVGFEMorphologyElement.internal(): super.internal();
+class FEMorphologyElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+  FEMorphologyElement.internal(): super.internal();
 
   static const int SVG_MORPHOLOGY_OPERATOR_DILATE = 2;
 
@@ -2644,19 +2549,19 @@
 
 
   /** @domName SVGFEMorphologyElement.in1 */
-  SVGAnimatedString get in1 native "SVGFEMorphologyElement_in1_Getter";
+  AnimatedString get in1 native "SVGFEMorphologyElement_in1_Getter";
 
 
   /** @domName SVGFEMorphologyElement.operator */
-  SVGAnimatedEnumeration get operator native "SVGFEMorphologyElement_operator_Getter";
+  AnimatedEnumeration get operator native "SVGFEMorphologyElement_operator_Getter";
 
 
   /** @domName SVGFEMorphologyElement.radiusX */
-  SVGAnimatedNumber get radiusX native "SVGFEMorphologyElement_radiusX_Getter";
+  AnimatedNumber get radiusX native "SVGFEMorphologyElement_radiusX_Getter";
 
 
   /** @domName SVGFEMorphologyElement.radiusY */
-  SVGAnimatedNumber get radiusY native "SVGFEMorphologyElement_radiusY_Getter";
+  AnimatedNumber get radiusY native "SVGFEMorphologyElement_radiusY_Getter";
 
 
   /** @domName SVGFEMorphologyElement.setRadius */
@@ -2664,27 +2569,27 @@
 
 
   /** @domName SVGFEMorphologyElement.height */
-  SVGAnimatedLength get height native "SVGFEMorphologyElement_height_Getter";
+  AnimatedLength get height native "SVGFEMorphologyElement_height_Getter";
 
 
   /** @domName SVGFEMorphologyElement.result */
-  SVGAnimatedString get result native "SVGFEMorphologyElement_result_Getter";
+  AnimatedString get result native "SVGFEMorphologyElement_result_Getter";
 
 
   /** @domName SVGFEMorphologyElement.width */
-  SVGAnimatedLength get width native "SVGFEMorphologyElement_width_Getter";
+  AnimatedLength get width native "SVGFEMorphologyElement_width_Getter";
 
 
   /** @domName SVGFEMorphologyElement.x */
-  SVGAnimatedLength get x native "SVGFEMorphologyElement_x_Getter";
+  AnimatedLength get x native "SVGFEMorphologyElement_x_Getter";
 
 
   /** @domName SVGFEMorphologyElement.y */
-  SVGAnimatedLength get y native "SVGFEMorphologyElement_y_Getter";
+  AnimatedLength get y native "SVGFEMorphologyElement_y_Getter";
 
 
   /** @domName SVGFEMorphologyElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFEMorphologyElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFEMorphologyElement_className_Getter";
 
 
   /** @domName SVGFEMorphologyElement.style */
@@ -2703,44 +2608,44 @@
 
 
 /// @domName SVGFEOffsetElement
-class SVGFEOffsetElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
-  SVGFEOffsetElement.internal(): super.internal();
+class FEOffsetElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+  FEOffsetElement.internal(): super.internal();
 
 
   /** @domName SVGFEOffsetElement.dx */
-  SVGAnimatedNumber get dx native "SVGFEOffsetElement_dx_Getter";
+  AnimatedNumber get dx native "SVGFEOffsetElement_dx_Getter";
 
 
   /** @domName SVGFEOffsetElement.dy */
-  SVGAnimatedNumber get dy native "SVGFEOffsetElement_dy_Getter";
+  AnimatedNumber get dy native "SVGFEOffsetElement_dy_Getter";
 
 
   /** @domName SVGFEOffsetElement.in1 */
-  SVGAnimatedString get in1 native "SVGFEOffsetElement_in1_Getter";
+  AnimatedString get in1 native "SVGFEOffsetElement_in1_Getter";
 
 
   /** @domName SVGFEOffsetElement.height */
-  SVGAnimatedLength get height native "SVGFEOffsetElement_height_Getter";
+  AnimatedLength get height native "SVGFEOffsetElement_height_Getter";
 
 
   /** @domName SVGFEOffsetElement.result */
-  SVGAnimatedString get result native "SVGFEOffsetElement_result_Getter";
+  AnimatedString get result native "SVGFEOffsetElement_result_Getter";
 
 
   /** @domName SVGFEOffsetElement.width */
-  SVGAnimatedLength get width native "SVGFEOffsetElement_width_Getter";
+  AnimatedLength get width native "SVGFEOffsetElement_width_Getter";
 
 
   /** @domName SVGFEOffsetElement.x */
-  SVGAnimatedLength get x native "SVGFEOffsetElement_x_Getter";
+  AnimatedLength get x native "SVGFEOffsetElement_x_Getter";
 
 
   /** @domName SVGFEOffsetElement.y */
-  SVGAnimatedLength get y native "SVGFEOffsetElement_y_Getter";
+  AnimatedLength get y native "SVGFEOffsetElement_y_Getter";
 
 
   /** @domName SVGFEOffsetElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFEOffsetElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFEOffsetElement_className_Getter";
 
 
   /** @domName SVGFEOffsetElement.style */
@@ -2759,20 +2664,20 @@
 
 
 /// @domName SVGFEPointLightElement
-class SVGFEPointLightElement extends SVGElement {
-  SVGFEPointLightElement.internal(): super.internal();
+class FEPointLightElement extends SvgElement {
+  FEPointLightElement.internal(): super.internal();
 
 
   /** @domName SVGFEPointLightElement.x */
-  SVGAnimatedNumber get x native "SVGFEPointLightElement_x_Getter";
+  AnimatedNumber get x native "SVGFEPointLightElement_x_Getter";
 
 
   /** @domName SVGFEPointLightElement.y */
-  SVGAnimatedNumber get y native "SVGFEPointLightElement_y_Getter";
+  AnimatedNumber get y native "SVGFEPointLightElement_y_Getter";
 
 
   /** @domName SVGFEPointLightElement.z */
-  SVGAnimatedNumber get z native "SVGFEPointLightElement_z_Getter";
+  AnimatedNumber get z native "SVGFEPointLightElement_z_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2783,48 +2688,48 @@
 
 
 /// @domName SVGFESpecularLightingElement
-class SVGFESpecularLightingElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
-  SVGFESpecularLightingElement.internal(): super.internal();
+class FESpecularLightingElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+  FESpecularLightingElement.internal(): super.internal();
 
 
   /** @domName SVGFESpecularLightingElement.in1 */
-  SVGAnimatedString get in1 native "SVGFESpecularLightingElement_in1_Getter";
+  AnimatedString get in1 native "SVGFESpecularLightingElement_in1_Getter";
 
 
   /** @domName SVGFESpecularLightingElement.specularConstant */
-  SVGAnimatedNumber get specularConstant native "SVGFESpecularLightingElement_specularConstant_Getter";
+  AnimatedNumber get specularConstant native "SVGFESpecularLightingElement_specularConstant_Getter";
 
 
   /** @domName SVGFESpecularLightingElement.specularExponent */
-  SVGAnimatedNumber get specularExponent native "SVGFESpecularLightingElement_specularExponent_Getter";
+  AnimatedNumber get specularExponent native "SVGFESpecularLightingElement_specularExponent_Getter";
 
 
   /** @domName SVGFESpecularLightingElement.surfaceScale */
-  SVGAnimatedNumber get surfaceScale native "SVGFESpecularLightingElement_surfaceScale_Getter";
+  AnimatedNumber get surfaceScale native "SVGFESpecularLightingElement_surfaceScale_Getter";
 
 
   /** @domName SVGFESpecularLightingElement.height */
-  SVGAnimatedLength get height native "SVGFESpecularLightingElement_height_Getter";
+  AnimatedLength get height native "SVGFESpecularLightingElement_height_Getter";
 
 
   /** @domName SVGFESpecularLightingElement.result */
-  SVGAnimatedString get result native "SVGFESpecularLightingElement_result_Getter";
+  AnimatedString get result native "SVGFESpecularLightingElement_result_Getter";
 
 
   /** @domName SVGFESpecularLightingElement.width */
-  SVGAnimatedLength get width native "SVGFESpecularLightingElement_width_Getter";
+  AnimatedLength get width native "SVGFESpecularLightingElement_width_Getter";
 
 
   /** @domName SVGFESpecularLightingElement.x */
-  SVGAnimatedLength get x native "SVGFESpecularLightingElement_x_Getter";
+  AnimatedLength get x native "SVGFESpecularLightingElement_x_Getter";
 
 
   /** @domName SVGFESpecularLightingElement.y */
-  SVGAnimatedLength get y native "SVGFESpecularLightingElement_y_Getter";
+  AnimatedLength get y native "SVGFESpecularLightingElement_y_Getter";
 
 
   /** @domName SVGFESpecularLightingElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFESpecularLightingElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFESpecularLightingElement_className_Getter";
 
 
   /** @domName SVGFESpecularLightingElement.style */
@@ -2843,40 +2748,40 @@
 
 
 /// @domName SVGFESpotLightElement
-class SVGFESpotLightElement extends SVGElement {
-  SVGFESpotLightElement.internal(): super.internal();
+class FESpotLightElement extends SvgElement {
+  FESpotLightElement.internal(): super.internal();
 
 
   /** @domName SVGFESpotLightElement.limitingConeAngle */
-  SVGAnimatedNumber get limitingConeAngle native "SVGFESpotLightElement_limitingConeAngle_Getter";
+  AnimatedNumber get limitingConeAngle native "SVGFESpotLightElement_limitingConeAngle_Getter";
 
 
   /** @domName SVGFESpotLightElement.pointsAtX */
-  SVGAnimatedNumber get pointsAtX native "SVGFESpotLightElement_pointsAtX_Getter";
+  AnimatedNumber get pointsAtX native "SVGFESpotLightElement_pointsAtX_Getter";
 
 
   /** @domName SVGFESpotLightElement.pointsAtY */
-  SVGAnimatedNumber get pointsAtY native "SVGFESpotLightElement_pointsAtY_Getter";
+  AnimatedNumber get pointsAtY native "SVGFESpotLightElement_pointsAtY_Getter";
 
 
   /** @domName SVGFESpotLightElement.pointsAtZ */
-  SVGAnimatedNumber get pointsAtZ native "SVGFESpotLightElement_pointsAtZ_Getter";
+  AnimatedNumber get pointsAtZ native "SVGFESpotLightElement_pointsAtZ_Getter";
 
 
   /** @domName SVGFESpotLightElement.specularExponent */
-  SVGAnimatedNumber get specularExponent native "SVGFESpotLightElement_specularExponent_Getter";
+  AnimatedNumber get specularExponent native "SVGFESpotLightElement_specularExponent_Getter";
 
 
   /** @domName SVGFESpotLightElement.x */
-  SVGAnimatedNumber get x native "SVGFESpotLightElement_x_Getter";
+  AnimatedNumber get x native "SVGFESpotLightElement_x_Getter";
 
 
   /** @domName SVGFESpotLightElement.y */
-  SVGAnimatedNumber get y native "SVGFESpotLightElement_y_Getter";
+  AnimatedNumber get y native "SVGFESpotLightElement_y_Getter";
 
 
   /** @domName SVGFESpotLightElement.z */
-  SVGAnimatedNumber get z native "SVGFESpotLightElement_z_Getter";
+  AnimatedNumber get z native "SVGFESpotLightElement_z_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2887,36 +2792,36 @@
 
 
 /// @domName SVGFETileElement
-class SVGFETileElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
-  SVGFETileElement.internal(): super.internal();
+class FETileElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+  FETileElement.internal(): super.internal();
 
 
   /** @domName SVGFETileElement.in1 */
-  SVGAnimatedString get in1 native "SVGFETileElement_in1_Getter";
+  AnimatedString get in1 native "SVGFETileElement_in1_Getter";
 
 
   /** @domName SVGFETileElement.height */
-  SVGAnimatedLength get height native "SVGFETileElement_height_Getter";
+  AnimatedLength get height native "SVGFETileElement_height_Getter";
 
 
   /** @domName SVGFETileElement.result */
-  SVGAnimatedString get result native "SVGFETileElement_result_Getter";
+  AnimatedString get result native "SVGFETileElement_result_Getter";
 
 
   /** @domName SVGFETileElement.width */
-  SVGAnimatedLength get width native "SVGFETileElement_width_Getter";
+  AnimatedLength get width native "SVGFETileElement_width_Getter";
 
 
   /** @domName SVGFETileElement.x */
-  SVGAnimatedLength get x native "SVGFETileElement_x_Getter";
+  AnimatedLength get x native "SVGFETileElement_x_Getter";
 
 
   /** @domName SVGFETileElement.y */
-  SVGAnimatedLength get y native "SVGFETileElement_y_Getter";
+  AnimatedLength get y native "SVGFETileElement_y_Getter";
 
 
   /** @domName SVGFETileElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFETileElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFETileElement_className_Getter";
 
 
   /** @domName SVGFETileElement.style */
@@ -2935,8 +2840,8 @@
 
 
 /// @domName SVGFETurbulenceElement
-class SVGFETurbulenceElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
-  SVGFETurbulenceElement.internal(): super.internal();
+class FETurbulenceElement extends SvgElement implements FilterPrimitiveStandardAttributes {
+  FETurbulenceElement.internal(): super.internal();
 
   static const int SVG_STITCHTYPE_NOSTITCH = 2;
 
@@ -2952,51 +2857,51 @@
 
 
   /** @domName SVGFETurbulenceElement.baseFrequencyX */
-  SVGAnimatedNumber get baseFrequencyX native "SVGFETurbulenceElement_baseFrequencyX_Getter";
+  AnimatedNumber get baseFrequencyX native "SVGFETurbulenceElement_baseFrequencyX_Getter";
 
 
   /** @domName SVGFETurbulenceElement.baseFrequencyY */
-  SVGAnimatedNumber get baseFrequencyY native "SVGFETurbulenceElement_baseFrequencyY_Getter";
+  AnimatedNumber get baseFrequencyY native "SVGFETurbulenceElement_baseFrequencyY_Getter";
 
 
   /** @domName SVGFETurbulenceElement.numOctaves */
-  SVGAnimatedInteger get numOctaves native "SVGFETurbulenceElement_numOctaves_Getter";
+  AnimatedInteger get numOctaves native "SVGFETurbulenceElement_numOctaves_Getter";
 
 
   /** @domName SVGFETurbulenceElement.seed */
-  SVGAnimatedNumber get seed native "SVGFETurbulenceElement_seed_Getter";
+  AnimatedNumber get seed native "SVGFETurbulenceElement_seed_Getter";
 
 
   /** @domName SVGFETurbulenceElement.stitchTiles */
-  SVGAnimatedEnumeration get stitchTiles native "SVGFETurbulenceElement_stitchTiles_Getter";
+  AnimatedEnumeration get stitchTiles native "SVGFETurbulenceElement_stitchTiles_Getter";
 
 
   /** @domName SVGFETurbulenceElement.type */
-  SVGAnimatedEnumeration get type native "SVGFETurbulenceElement_type_Getter";
+  AnimatedEnumeration get type native "SVGFETurbulenceElement_type_Getter";
 
 
   /** @domName SVGFETurbulenceElement.height */
-  SVGAnimatedLength get height native "SVGFETurbulenceElement_height_Getter";
+  AnimatedLength get height native "SVGFETurbulenceElement_height_Getter";
 
 
   /** @domName SVGFETurbulenceElement.result */
-  SVGAnimatedString get result native "SVGFETurbulenceElement_result_Getter";
+  AnimatedString get result native "SVGFETurbulenceElement_result_Getter";
 
 
   /** @domName SVGFETurbulenceElement.width */
-  SVGAnimatedLength get width native "SVGFETurbulenceElement_width_Getter";
+  AnimatedLength get width native "SVGFETurbulenceElement_width_Getter";
 
 
   /** @domName SVGFETurbulenceElement.x */
-  SVGAnimatedLength get x native "SVGFETurbulenceElement_x_Getter";
+  AnimatedLength get x native "SVGFETurbulenceElement_x_Getter";
 
 
   /** @domName SVGFETurbulenceElement.y */
-  SVGAnimatedLength get y native "SVGFETurbulenceElement_y_Getter";
+  AnimatedLength get y native "SVGFETurbulenceElement_y_Getter";
 
 
   /** @domName SVGFETurbulenceElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFETurbulenceElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFETurbulenceElement_className_Getter";
 
 
   /** @domName SVGFETurbulenceElement.style */
@@ -3015,40 +2920,42 @@
 
 
 /// @domName SVGFilterElement
-class SVGFilterElement extends SVGElement implements SVGURIReference, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable {
-  SVGFilterElement.internal(): super.internal();
+class FilterElement extends SvgElement implements UriReference, ExternalResourcesRequired, Stylable, LangSpace {
+
+  factory FilterElement() => _SvgElementFactoryProvider.createSvgElement_tag("filter");
+  FilterElement.internal(): super.internal();
 
 
   /** @domName SVGFilterElement.filterResX */
-  SVGAnimatedInteger get filterResX native "SVGFilterElement_filterResX_Getter";
+  AnimatedInteger get filterResX native "SVGFilterElement_filterResX_Getter";
 
 
   /** @domName SVGFilterElement.filterResY */
-  SVGAnimatedInteger get filterResY native "SVGFilterElement_filterResY_Getter";
+  AnimatedInteger get filterResY native "SVGFilterElement_filterResY_Getter";
 
 
   /** @domName SVGFilterElement.filterUnits */
-  SVGAnimatedEnumeration get filterUnits native "SVGFilterElement_filterUnits_Getter";
+  AnimatedEnumeration get filterUnits native "SVGFilterElement_filterUnits_Getter";
 
 
   /** @domName SVGFilterElement.height */
-  SVGAnimatedLength get height native "SVGFilterElement_height_Getter";
+  AnimatedLength get height native "SVGFilterElement_height_Getter";
 
 
   /** @domName SVGFilterElement.primitiveUnits */
-  SVGAnimatedEnumeration get primitiveUnits native "SVGFilterElement_primitiveUnits_Getter";
+  AnimatedEnumeration get primitiveUnits native "SVGFilterElement_primitiveUnits_Getter";
 
 
   /** @domName SVGFilterElement.width */
-  SVGAnimatedLength get width native "SVGFilterElement_width_Getter";
+  AnimatedLength get width native "SVGFilterElement_width_Getter";
 
 
   /** @domName SVGFilterElement.x */
-  SVGAnimatedLength get x native "SVGFilterElement_x_Getter";
+  AnimatedLength get x native "SVGFilterElement_x_Getter";
 
 
   /** @domName SVGFilterElement.y */
-  SVGAnimatedLength get y native "SVGFilterElement_y_Getter";
+  AnimatedLength get y native "SVGFilterElement_y_Getter";
 
 
   /** @domName SVGFilterElement.setFilterRes */
@@ -3056,7 +2963,7 @@
 
 
   /** @domName SVGFilterElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGFilterElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGFilterElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGFilterElement.xmllang */
@@ -3076,7 +2983,7 @@
 
 
   /** @domName SVGFilterElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFilterElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFilterElement_className_Getter";
 
 
   /** @domName SVGFilterElement.style */
@@ -3088,7 +2995,7 @@
 
 
   /** @domName SVGFilterElement.href */
-  SVGAnimatedString get href native "SVGFilterElement_href_Getter";
+  AnimatedString get href native "SVGFilterElement_href_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3099,32 +3006,32 @@
 
 
 /// @domName SVGFilterPrimitiveStandardAttributes
-class SVGFilterPrimitiveStandardAttributes extends NativeFieldWrapperClass1 implements SVGStylable {
-  SVGFilterPrimitiveStandardAttributes.internal();
+class FilterPrimitiveStandardAttributes extends NativeFieldWrapperClass1 implements Stylable {
+  FilterPrimitiveStandardAttributes.internal();
 
 
   /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  SVGAnimatedLength get height native "SVGFilterPrimitiveStandardAttributes_height_Getter";
+  AnimatedLength get height native "SVGFilterPrimitiveStandardAttributes_height_Getter";
 
 
   /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  SVGAnimatedString get result native "SVGFilterPrimitiveStandardAttributes_result_Getter";
+  AnimatedString get result native "SVGFilterPrimitiveStandardAttributes_result_Getter";
 
 
   /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  SVGAnimatedLength get width native "SVGFilterPrimitiveStandardAttributes_width_Getter";
+  AnimatedLength get width native "SVGFilterPrimitiveStandardAttributes_width_Getter";
 
 
   /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  SVGAnimatedLength get x native "SVGFilterPrimitiveStandardAttributes_x_Getter";
+  AnimatedLength get x native "SVGFilterPrimitiveStandardAttributes_x_Getter";
 
 
   /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  SVGAnimatedLength get y native "SVGFilterPrimitiveStandardAttributes_y_Getter";
+  AnimatedLength get y native "SVGFilterPrimitiveStandardAttributes_y_Getter";
 
 
   /** @domName SVGFilterPrimitiveStandardAttributes.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGFilterPrimitiveStandardAttributes_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGFilterPrimitiveStandardAttributes_className_Getter";
 
 
   /** @domName SVGFilterPrimitiveStandardAttributes.style */
@@ -3143,16 +3050,16 @@
 
 
 /// @domName SVGFitToViewBox
-class SVGFitToViewBox extends NativeFieldWrapperClass1 {
-  SVGFitToViewBox.internal();
+class FitToViewBox extends NativeFieldWrapperClass1 {
+  FitToViewBox.internal();
 
 
   /** @domName SVGFitToViewBox.preserveAspectRatio */
-  SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGFitToViewBox_preserveAspectRatio_Getter";
+  AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGFitToViewBox_preserveAspectRatio_Getter";
 
 
   /** @domName SVGFitToViewBox.viewBox */
-  SVGAnimatedRect get viewBox native "SVGFitToViewBox_viewBox_Getter";
+  AnimatedRect get viewBox native "SVGFitToViewBox_viewBox_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3163,8 +3070,10 @@
 
 
 /// @domName SVGFontElement
-class SVGFontElement extends SVGElement {
-  SVGFontElement.internal(): super.internal();
+class FontElement extends SvgElement {
+
+  factory FontElement() => _SvgElementFactoryProvider.createSvgElement_tag("font");
+  FontElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3175,8 +3084,10 @@
 
 
 /// @domName SVGFontFaceElement
-class SVGFontFaceElement extends SVGElement {
-  SVGFontFaceElement.internal(): super.internal();
+class FontFaceElement extends SvgElement {
+
+  factory FontFaceElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face");
+  FontFaceElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3187,8 +3098,10 @@
 
 
 /// @domName SVGFontFaceFormatElement
-class SVGFontFaceFormatElement extends SVGElement {
-  SVGFontFaceFormatElement.internal(): super.internal();
+class FontFaceFormatElement extends SvgElement {
+
+  factory FontFaceFormatElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face-format");
+  FontFaceFormatElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3199,8 +3112,10 @@
 
 
 /// @domName SVGFontFaceNameElement
-class SVGFontFaceNameElement extends SVGElement {
-  SVGFontFaceNameElement.internal(): super.internal();
+class FontFaceNameElement extends SvgElement {
+
+  factory FontFaceNameElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face-name");
+  FontFaceNameElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3211,8 +3126,10 @@
 
 
 /// @domName SVGFontFaceSrcElement
-class SVGFontFaceSrcElement extends SVGElement {
-  SVGFontFaceSrcElement.internal(): super.internal();
+class FontFaceSrcElement extends SvgElement {
+
+  factory FontFaceSrcElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face-src");
+  FontFaceSrcElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3223,8 +3140,10 @@
 
 
 /// @domName SVGFontFaceUriElement
-class SVGFontFaceUriElement extends SVGElement {
-  SVGFontFaceUriElement.internal(): super.internal();
+class FontFaceUriElement extends SvgElement {
+
+  factory FontFaceUriElement() => _SvgElementFactoryProvider.createSvgElement_tag("font-face-uri");
+  FontFaceUriElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3235,28 +3154,30 @@
 
 
 /// @domName SVGForeignObjectElement
-class SVGForeignObjectElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
-  SVGForeignObjectElement.internal(): super.internal();
+class ForeignObjectElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
+
+  factory ForeignObjectElement() => _SvgElementFactoryProvider.createSvgElement_tag("foreignObject");
+  ForeignObjectElement.internal(): super.internal();
 
 
   /** @domName SVGForeignObjectElement.height */
-  SVGAnimatedLength get height native "SVGForeignObjectElement_height_Getter";
+  AnimatedLength get height native "SVGForeignObjectElement_height_Getter";
 
 
   /** @domName SVGForeignObjectElement.width */
-  SVGAnimatedLength get width native "SVGForeignObjectElement_width_Getter";
+  AnimatedLength get width native "SVGForeignObjectElement_width_Getter";
 
 
   /** @domName SVGForeignObjectElement.x */
-  SVGAnimatedLength get x native "SVGForeignObjectElement_x_Getter";
+  AnimatedLength get x native "SVGForeignObjectElement_x_Getter";
 
 
   /** @domName SVGForeignObjectElement.y */
-  SVGAnimatedLength get y native "SVGForeignObjectElement_y_Getter";
+  AnimatedLength get y native "SVGForeignObjectElement_y_Getter";
 
 
   /** @domName SVGForeignObjectElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGForeignObjectElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGForeignObjectElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGForeignObjectElement.xmllang */
@@ -3276,31 +3197,31 @@
 
 
   /** @domName SVGForeignObjectElement.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGForeignObjectElement_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGForeignObjectElement_farthestViewportElement_Getter";
 
 
   /** @domName SVGForeignObjectElement.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGForeignObjectElement_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGForeignObjectElement_nearestViewportElement_Getter";
 
 
   /** @domName SVGForeignObjectElement.getBBox */
-  SVGRect getBBox() native "SVGForeignObjectElement_getBBox_Callback";
+  Rect getBBox() native "SVGForeignObjectElement_getBBox_Callback";
 
 
   /** @domName SVGForeignObjectElement.getCTM */
-  SVGMatrix getCTM() native "SVGForeignObjectElement_getCTM_Callback";
+  Matrix getCTM() native "SVGForeignObjectElement_getCTM_Callback";
 
 
   /** @domName SVGForeignObjectElement.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGForeignObjectElement_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGForeignObjectElement_getScreenCTM_Callback";
 
 
   /** @domName SVGForeignObjectElement.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGForeignObjectElement_getTransformToElement_Callback";
+  Matrix getTransformToElement(SvgElement element) native "SVGForeignObjectElement_getTransformToElement_Callback";
 
 
   /** @domName SVGForeignObjectElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGForeignObjectElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGForeignObjectElement_className_Getter";
 
 
   /** @domName SVGForeignObjectElement.style */
@@ -3312,15 +3233,15 @@
 
 
   /** @domName SVGForeignObjectElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGForeignObjectElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGForeignObjectElement_requiredExtensions_Getter";
 
 
   /** @domName SVGForeignObjectElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGForeignObjectElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGForeignObjectElement_requiredFeatures_Getter";
 
 
   /** @domName SVGForeignObjectElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGForeignObjectElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGForeignObjectElement_systemLanguage_Getter";
 
 
   /** @domName SVGForeignObjectElement.hasExtension */
@@ -3328,7 +3249,7 @@
 
 
   /** @domName SVGForeignObjectElement.transform */
-  SVGAnimatedTransformList get transform native "SVGForeignObjectElement_transform_Getter";
+  AnimatedTransformList get transform native "SVGForeignObjectElement_transform_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3339,12 +3260,14 @@
 
 
 /// @domName SVGGElement
-class SVGGElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
-  SVGGElement.internal(): super.internal();
+class GElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
+
+  factory GElement() => _SvgElementFactoryProvider.createSvgElement_tag("g");
+  GElement.internal(): super.internal();
 
 
   /** @domName SVGGElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGGElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGGElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGGElement.xmllang */
@@ -3364,31 +3287,31 @@
 
 
   /** @domName SVGGElement.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGGElement_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGGElement_farthestViewportElement_Getter";
 
 
   /** @domName SVGGElement.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGGElement_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGGElement_nearestViewportElement_Getter";
 
 
   /** @domName SVGGElement.getBBox */
-  SVGRect getBBox() native "SVGGElement_getBBox_Callback";
+  Rect getBBox() native "SVGGElement_getBBox_Callback";
 
 
   /** @domName SVGGElement.getCTM */
-  SVGMatrix getCTM() native "SVGGElement_getCTM_Callback";
+  Matrix getCTM() native "SVGGElement_getCTM_Callback";
 
 
   /** @domName SVGGElement.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGGElement_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGGElement_getScreenCTM_Callback";
 
 
   /** @domName SVGGElement.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGGElement_getTransformToElement_Callback";
+  Matrix getTransformToElement(SvgElement element) native "SVGGElement_getTransformToElement_Callback";
 
 
   /** @domName SVGGElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGGElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGGElement_className_Getter";
 
 
   /** @domName SVGGElement.style */
@@ -3400,15 +3323,15 @@
 
 
   /** @domName SVGGElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGGElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGGElement_requiredExtensions_Getter";
 
 
   /** @domName SVGGElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGGElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGGElement_requiredFeatures_Getter";
 
 
   /** @domName SVGGElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGGElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGGElement_systemLanguage_Getter";
 
 
   /** @domName SVGGElement.hasExtension */
@@ -3416,7 +3339,7 @@
 
 
   /** @domName SVGGElement.transform */
-  SVGAnimatedTransformList get transform native "SVGGElement_transform_Getter";
+  AnimatedTransformList get transform native "SVGGElement_transform_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3427,8 +3350,10 @@
 
 
 /// @domName SVGGlyphElement
-class SVGGlyphElement extends SVGElement {
-  SVGGlyphElement.internal(): super.internal();
+class GlyphElement extends SvgElement {
+
+  factory GlyphElement() => _SvgElementFactoryProvider.createSvgElement_tag("glyph");
+  GlyphElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3439,8 +3364,8 @@
 
 
 /// @domName SVGGlyphRefElement
-class SVGGlyphRefElement extends SVGElement implements SVGURIReference, SVGStylable {
-  SVGGlyphRefElement.internal(): super.internal();
+class GlyphRefElement extends SvgElement implements UriReference, Stylable {
+  GlyphRefElement.internal(): super.internal();
 
 
   /** @domName SVGGlyphRefElement.dx */
@@ -3492,7 +3417,7 @@
 
 
   /** @domName SVGGlyphRefElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGGlyphRefElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGGlyphRefElement_className_Getter";
 
 
   /** @domName SVGGlyphRefElement.style */
@@ -3504,7 +3429,7 @@
 
 
   /** @domName SVGGlyphRefElement.href */
-  SVGAnimatedString get href native "SVGGlyphRefElement_href_Getter";
+  AnimatedString get href native "SVGGlyphRefElement_href_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3515,8 +3440,8 @@
 
 
 /// @domName SVGGradientElement
-class SVGGradientElement extends SVGElement implements SVGURIReference, SVGExternalResourcesRequired, SVGStylable {
-  SVGGradientElement.internal(): super.internal();
+class GradientElement extends SvgElement implements UriReference, ExternalResourcesRequired, Stylable {
+  GradientElement.internal(): super.internal();
 
   static const int SVG_SPREADMETHOD_PAD = 1;
 
@@ -3528,23 +3453,23 @@
 
 
   /** @domName SVGGradientElement.gradientTransform */
-  SVGAnimatedTransformList get gradientTransform native "SVGGradientElement_gradientTransform_Getter";
+  AnimatedTransformList get gradientTransform native "SVGGradientElement_gradientTransform_Getter";
 
 
   /** @domName SVGGradientElement.gradientUnits */
-  SVGAnimatedEnumeration get gradientUnits native "SVGGradientElement_gradientUnits_Getter";
+  AnimatedEnumeration get gradientUnits native "SVGGradientElement_gradientUnits_Getter";
 
 
   /** @domName SVGGradientElement.spreadMethod */
-  SVGAnimatedEnumeration get spreadMethod native "SVGGradientElement_spreadMethod_Getter";
+  AnimatedEnumeration get spreadMethod native "SVGGradientElement_spreadMethod_Getter";
 
 
   /** @domName SVGGradientElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGGradientElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGGradientElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGGradientElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGGradientElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGGradientElement_className_Getter";
 
 
   /** @domName SVGGradientElement.style */
@@ -3556,7 +3481,7 @@
 
 
   /** @domName SVGGradientElement.href */
-  SVGAnimatedString get href native "SVGGradientElement_href_Getter";
+  AnimatedString get href native "SVGGradientElement_href_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3567,8 +3492,10 @@
 
 
 /// @domName SVGHKernElement
-class SVGHKernElement extends SVGElement {
-  SVGHKernElement.internal(): super.internal();
+class HKernElement extends SvgElement {
+
+  factory HKernElement() => _SvgElementFactoryProvider.createSvgElement_tag("hkern");
+  HKernElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3579,32 +3506,34 @@
 
 
 /// @domName SVGImageElement
-class SVGImageElement extends SVGElement implements SVGLangSpace, SVGTests, SVGStylable, SVGURIReference, SVGExternalResourcesRequired, SVGTransformable {
-  SVGImageElement.internal(): super.internal();
+class ImageElement extends SvgElement implements Transformable, Tests, UriReference, Stylable, ExternalResourcesRequired, LangSpace {
+
+  factory ImageElement() => _SvgElementFactoryProvider.createSvgElement_tag("image");
+  ImageElement.internal(): super.internal();
 
 
   /** @domName SVGImageElement.height */
-  SVGAnimatedLength get height native "SVGImageElement_height_Getter";
+  AnimatedLength get height native "SVGImageElement_height_Getter";
 
 
   /** @domName SVGImageElement.preserveAspectRatio */
-  SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGImageElement_preserveAspectRatio_Getter";
+  AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGImageElement_preserveAspectRatio_Getter";
 
 
   /** @domName SVGImageElement.width */
-  SVGAnimatedLength get width native "SVGImageElement_width_Getter";
+  AnimatedLength get width native "SVGImageElement_width_Getter";
 
 
   /** @domName SVGImageElement.x */
-  SVGAnimatedLength get x native "SVGImageElement_x_Getter";
+  AnimatedLength get x native "SVGImageElement_x_Getter";
 
 
   /** @domName SVGImageElement.y */
-  SVGAnimatedLength get y native "SVGImageElement_y_Getter";
+  AnimatedLength get y native "SVGImageElement_y_Getter";
 
 
   /** @domName SVGImageElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGImageElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGImageElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGImageElement.xmllang */
@@ -3624,31 +3553,31 @@
 
 
   /** @domName SVGImageElement.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGImageElement_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGImageElement_farthestViewportElement_Getter";
 
 
   /** @domName SVGImageElement.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGImageElement_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGImageElement_nearestViewportElement_Getter";
 
 
   /** @domName SVGImageElement.getBBox */
-  SVGRect getBBox() native "SVGImageElement_getBBox_Callback";
+  Rect getBBox() native "SVGImageElement_getBBox_Callback";
 
 
   /** @domName SVGImageElement.getCTM */
-  SVGMatrix getCTM() native "SVGImageElement_getCTM_Callback";
+  Matrix getCTM() native "SVGImageElement_getCTM_Callback";
 
 
   /** @domName SVGImageElement.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGImageElement_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGImageElement_getScreenCTM_Callback";
 
 
   /** @domName SVGImageElement.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGImageElement_getTransformToElement_Callback";
+  Matrix getTransformToElement(SvgElement element) native "SVGImageElement_getTransformToElement_Callback";
 
 
   /** @domName SVGImageElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGImageElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGImageElement_className_Getter";
 
 
   /** @domName SVGImageElement.style */
@@ -3660,15 +3589,15 @@
 
 
   /** @domName SVGImageElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGImageElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGImageElement_requiredExtensions_Getter";
 
 
   /** @domName SVGImageElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGImageElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGImageElement_requiredFeatures_Getter";
 
 
   /** @domName SVGImageElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGImageElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGImageElement_systemLanguage_Getter";
 
 
   /** @domName SVGImageElement.hasExtension */
@@ -3676,11 +3605,11 @@
 
 
   /** @domName SVGImageElement.transform */
-  SVGAnimatedTransformList get transform native "SVGImageElement_transform_Getter";
+  AnimatedTransformList get transform native "SVGImageElement_transform_Getter";
 
 
   /** @domName SVGImageElement.href */
-  SVGAnimatedString get href native "SVGImageElement_href_Getter";
+  AnimatedString get href native "SVGImageElement_href_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3691,8 +3620,8 @@
 
 
 /// @domName SVGLangSpace
-class SVGLangSpace extends NativeFieldWrapperClass1 {
-  SVGLangSpace.internal();
+class LangSpace extends NativeFieldWrapperClass1 {
+  LangSpace.internal();
 
 
   /** @domName SVGLangSpace.xmllang */
@@ -3719,8 +3648,8 @@
 
 
 /// @domName SVGLength
-class SVGLength extends NativeFieldWrapperClass1 {
-  SVGLength.internal();
+class Length extends NativeFieldWrapperClass1 {
+  Length.internal();
 
   static const int SVG_LENGTHTYPE_CM = 6;
 
@@ -3789,80 +3718,82 @@
 
 
 /// @domName SVGLengthList
-class SVGLengthList extends NativeFieldWrapperClass1 implements List<SVGLength> {
-  SVGLengthList.internal();
+class LengthList extends NativeFieldWrapperClass1 implements List<Length> {
+  LengthList.internal();
 
 
   /** @domName SVGLengthList.numberOfItems */
   int get numberOfItems native "SVGLengthList_numberOfItems_Getter";
 
-  SVGLength operator[](int index) native "SVGLengthList_item_Callback";
+  Length operator[](int index) native "SVGLengthList_item_Callback";
 
-  void operator[]=(int index, SVGLength value) {
+  void operator[]=(int index, Length value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
-  // -- start List<SVGLength> mixins.
-  // SVGLength is the element type.
+  // -- start List<Length> mixins.
+  // Length is the element type.
 
-  // From Iterable<SVGLength>:
+  // From Iterable<Length>:
 
-  Iterator<SVGLength> iterator() {
+  Iterator<Length> iterator() {
     // Note: NodeLists are not fixed size. And most probably length shouldn't
     // be cached in both iterator _and_ forEach method. For now caching it
     // for consistency.
-    return new FixedSizeListIterator<SVGLength>(this);
+    return new FixedSizeListIterator<Length>(this);
   }
 
-  // From Collection<SVGLength>:
+  // From Collection<Length>:
 
-  void add(SVGLength value) {
+  void add(Length value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addLast(SVGLength value) {
+  void addLast(Length value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addAll(Collection<SVGLength> collection) {
+  void addAll(Collection<Length> collection) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  bool contains(SVGLength element) => _Collections.contains(this, element);
+  bool contains(Length element) => _Collections.contains(this, element);
 
-  void forEach(void f(SVGLength element)) => _Collections.forEach(this, f);
+  void forEach(void f(Length element)) => _Collections.forEach(this, f);
 
-  Collection map(f(SVGLength element)) => _Collections.map(this, [], f);
+  Collection map(f(Length element)) => _Collections.map(this, [], f);
 
-  Collection<SVGLength> filter(bool f(SVGLength element)) =>
-     _Collections.filter(this, <SVGLength>[], f);
+  Collection<Length> filter(bool f(Length element)) =>
+     _Collections.filter(this, <Length>[], f);
 
-  bool every(bool f(SVGLength element)) => _Collections.every(this, f);
+  bool every(bool f(Length element)) => _Collections.every(this, f);
 
-  bool some(bool f(SVGLength element)) => _Collections.some(this, f);
+  bool some(bool f(Length element)) => _Collections.some(this, f);
 
   bool get isEmpty => this.length == 0;
 
-  // From List<SVGLength>:
+  // From List<Length>:
 
-  void sort([Comparator<SVGLength> compare = Comparable.compare]) {
+  void sort([Comparator<Length> compare = Comparable.compare]) {
     throw new UnsupportedError("Cannot sort immutable List.");
   }
 
-  int indexOf(SVGLength element, [int start = 0]) =>
+  int indexOf(Length element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
-  int lastIndexOf(SVGLength element, [int start]) {
+  int lastIndexOf(Length element, [int start]) {
     if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGLength get last => this[length - 1];
+  Length get first => this[0];
 
-  SVGLength removeLast() {
+  Length get last => this[length - 1];
+
+  Length removeLast() {
     throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
-  void setRange(int start, int rangeLength, List<SVGLength> from, [int startFrom]) {
+  void setRange(int start, int rangeLength, List<Length> from, [int startFrom]) {
     throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
@@ -3870,18 +3801,18 @@
     throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
-  void insertRange(int start, int rangeLength, [SVGLength initialValue]) {
+  void insertRange(int start, int rangeLength, [Length initialValue]) {
     throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
-  List<SVGLength> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGLength>[]);
+  List<Length> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Length>[]);
 
-  // -- end List<SVGLength> mixins.
+  // -- end List<Length> mixins.
 
 
   /** @domName SVGLengthList.appendItem */
-  SVGLength appendItem(SVGLength item) native "SVGLengthList_appendItem_Callback";
+  Length appendItem(Length item) native "SVGLengthList_appendItem_Callback";
 
 
   /** @domName SVGLengthList.clear */
@@ -3889,23 +3820,23 @@
 
 
   /** @domName SVGLengthList.getItem */
-  SVGLength getItem(int index) native "SVGLengthList_getItem_Callback";
+  Length getItem(int index) native "SVGLengthList_getItem_Callback";
 
 
   /** @domName SVGLengthList.initialize */
-  SVGLength initialize(SVGLength item) native "SVGLengthList_initialize_Callback";
+  Length initialize(Length item) native "SVGLengthList_initialize_Callback";
 
 
   /** @domName SVGLengthList.insertItemBefore */
-  SVGLength insertItemBefore(SVGLength item, int index) native "SVGLengthList_insertItemBefore_Callback";
+  Length insertItemBefore(Length item, int index) native "SVGLengthList_insertItemBefore_Callback";
 
 
   /** @domName SVGLengthList.removeItem */
-  SVGLength removeItem(int index) native "SVGLengthList_removeItem_Callback";
+  Length removeItem(int index) native "SVGLengthList_removeItem_Callback";
 
 
   /** @domName SVGLengthList.replaceItem */
-  SVGLength replaceItem(SVGLength item, int index) native "SVGLengthList_replaceItem_Callback";
+  Length replaceItem(Length item, int index) native "SVGLengthList_replaceItem_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3916,28 +3847,30 @@
 
 
 /// @domName SVGLineElement
-class SVGLineElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
-  SVGLineElement.internal(): super.internal();
+class LineElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
+
+  factory LineElement() => _SvgElementFactoryProvider.createSvgElement_tag("line");
+  LineElement.internal(): super.internal();
 
 
   /** @domName SVGLineElement.x1 */
-  SVGAnimatedLength get x1 native "SVGLineElement_x1_Getter";
+  AnimatedLength get x1 native "SVGLineElement_x1_Getter";
 
 
   /** @domName SVGLineElement.x2 */
-  SVGAnimatedLength get x2 native "SVGLineElement_x2_Getter";
+  AnimatedLength get x2 native "SVGLineElement_x2_Getter";
 
 
   /** @domName SVGLineElement.y1 */
-  SVGAnimatedLength get y1 native "SVGLineElement_y1_Getter";
+  AnimatedLength get y1 native "SVGLineElement_y1_Getter";
 
 
   /** @domName SVGLineElement.y2 */
-  SVGAnimatedLength get y2 native "SVGLineElement_y2_Getter";
+  AnimatedLength get y2 native "SVGLineElement_y2_Getter";
 
 
   /** @domName SVGLineElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGLineElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGLineElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGLineElement.xmllang */
@@ -3957,31 +3890,31 @@
 
 
   /** @domName SVGLineElement.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGLineElement_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGLineElement_farthestViewportElement_Getter";
 
 
   /** @domName SVGLineElement.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGLineElement_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGLineElement_nearestViewportElement_Getter";
 
 
   /** @domName SVGLineElement.getBBox */
-  SVGRect getBBox() native "SVGLineElement_getBBox_Callback";
+  Rect getBBox() native "SVGLineElement_getBBox_Callback";
 
 
   /** @domName SVGLineElement.getCTM */
-  SVGMatrix getCTM() native "SVGLineElement_getCTM_Callback";
+  Matrix getCTM() native "SVGLineElement_getCTM_Callback";
 
 
   /** @domName SVGLineElement.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGLineElement_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGLineElement_getScreenCTM_Callback";
 
 
   /** @domName SVGLineElement.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGLineElement_getTransformToElement_Callback";
+  Matrix getTransformToElement(SvgElement element) native "SVGLineElement_getTransformToElement_Callback";
 
 
   /** @domName SVGLineElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGLineElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGLineElement_className_Getter";
 
 
   /** @domName SVGLineElement.style */
@@ -3993,15 +3926,15 @@
 
 
   /** @domName SVGLineElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGLineElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGLineElement_requiredExtensions_Getter";
 
 
   /** @domName SVGLineElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGLineElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGLineElement_requiredFeatures_Getter";
 
 
   /** @domName SVGLineElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGLineElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGLineElement_systemLanguage_Getter";
 
 
   /** @domName SVGLineElement.hasExtension */
@@ -4009,7 +3942,7 @@
 
 
   /** @domName SVGLineElement.transform */
-  SVGAnimatedTransformList get transform native "SVGLineElement_transform_Getter";
+  AnimatedTransformList get transform native "SVGLineElement_transform_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4020,24 +3953,26 @@
 
 
 /// @domName SVGLinearGradientElement
-class SVGLinearGradientElement extends SVGGradientElement {
-  SVGLinearGradientElement.internal(): super.internal();
+class LinearGradientElement extends GradientElement {
+
+  factory LinearGradientElement() => _SvgElementFactoryProvider.createSvgElement_tag("linearGradient");
+  LinearGradientElement.internal(): super.internal();
 
 
   /** @domName SVGLinearGradientElement.x1 */
-  SVGAnimatedLength get x1 native "SVGLinearGradientElement_x1_Getter";
+  AnimatedLength get x1 native "SVGLinearGradientElement_x1_Getter";
 
 
   /** @domName SVGLinearGradientElement.x2 */
-  SVGAnimatedLength get x2 native "SVGLinearGradientElement_x2_Getter";
+  AnimatedLength get x2 native "SVGLinearGradientElement_x2_Getter";
 
 
   /** @domName SVGLinearGradientElement.y1 */
-  SVGAnimatedLength get y1 native "SVGLinearGradientElement_y1_Getter";
+  AnimatedLength get y1 native "SVGLinearGradientElement_y1_Getter";
 
 
   /** @domName SVGLinearGradientElement.y2 */
-  SVGAnimatedLength get y2 native "SVGLinearGradientElement_y2_Getter";
+  AnimatedLength get y2 native "SVGLinearGradientElement_y2_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4048,32 +3983,32 @@
 
 
 /// @domName SVGLocatable
-class SVGLocatable extends NativeFieldWrapperClass1 {
-  SVGLocatable.internal();
+class Locatable extends NativeFieldWrapperClass1 {
+  Locatable.internal();
 
 
   /** @domName SVGLocatable.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGLocatable_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGLocatable_farthestViewportElement_Getter";
 
 
   /** @domName SVGLocatable.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGLocatable_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGLocatable_nearestViewportElement_Getter";
 
 
   /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox() native "SVGLocatable_getBBox_Callback";
+  Rect getBBox() native "SVGLocatable_getBBox_Callback";
 
 
   /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM() native "SVGLocatable_getCTM_Callback";
+  Matrix getCTM() native "SVGLocatable_getCTM_Callback";
 
 
   /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGLocatable_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGLocatable_getScreenCTM_Callback";
 
 
   /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGLocatable_getTransformToElement_Callback";
+  Matrix getTransformToElement(SvgElement element) native "SVGLocatable_getTransformToElement_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4084,16 +4019,18 @@
 
 
 /// @domName SVGMPathElement
-class SVGMPathElement extends SVGElement implements SVGURIReference, SVGExternalResourcesRequired {
-  SVGMPathElement.internal(): super.internal();
+class MPathElement extends SvgElement implements UriReference, ExternalResourcesRequired {
+
+  factory MPathElement() => _SvgElementFactoryProvider.createSvgElement_tag("mpath");
+  MPathElement.internal(): super.internal();
 
 
   /** @domName SVGMPathElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGMPathElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGMPathElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGMPathElement.href */
-  SVGAnimatedString get href native "SVGMPathElement_href_Getter";
+  AnimatedString get href native "SVGMPathElement_href_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4104,8 +4041,10 @@
 
 
 /// @domName SVGMarkerElement
-class SVGMarkerElement extends SVGElement implements SVGLangSpace, SVGFitToViewBox, SVGExternalResourcesRequired, SVGStylable {
-  SVGMarkerElement.internal(): super.internal();
+class MarkerElement extends SvgElement implements FitToViewBox, ExternalResourcesRequired, Stylable, LangSpace {
+
+  factory MarkerElement() => _SvgElementFactoryProvider.createSvgElement_tag("marker");
+  MarkerElement.internal(): super.internal();
 
   static const int SVG_MARKERUNITS_STROKEWIDTH = 2;
 
@@ -4121,35 +4060,35 @@
 
 
   /** @domName SVGMarkerElement.markerHeight */
-  SVGAnimatedLength get markerHeight native "SVGMarkerElement_markerHeight_Getter";
+  AnimatedLength get markerHeight native "SVGMarkerElement_markerHeight_Getter";
 
 
   /** @domName SVGMarkerElement.markerUnits */
-  SVGAnimatedEnumeration get markerUnits native "SVGMarkerElement_markerUnits_Getter";
+  AnimatedEnumeration get markerUnits native "SVGMarkerElement_markerUnits_Getter";
 
 
   /** @domName SVGMarkerElement.markerWidth */
-  SVGAnimatedLength get markerWidth native "SVGMarkerElement_markerWidth_Getter";
+  AnimatedLength get markerWidth native "SVGMarkerElement_markerWidth_Getter";
 
 
   /** @domName SVGMarkerElement.orientAngle */
-  SVGAnimatedAngle get orientAngle native "SVGMarkerElement_orientAngle_Getter";
+  AnimatedAngle get orientAngle native "SVGMarkerElement_orientAngle_Getter";
 
 
   /** @domName SVGMarkerElement.orientType */
-  SVGAnimatedEnumeration get orientType native "SVGMarkerElement_orientType_Getter";
+  AnimatedEnumeration get orientType native "SVGMarkerElement_orientType_Getter";
 
 
   /** @domName SVGMarkerElement.refX */
-  SVGAnimatedLength get refX native "SVGMarkerElement_refX_Getter";
+  AnimatedLength get refX native "SVGMarkerElement_refX_Getter";
 
 
   /** @domName SVGMarkerElement.refY */
-  SVGAnimatedLength get refY native "SVGMarkerElement_refY_Getter";
+  AnimatedLength get refY native "SVGMarkerElement_refY_Getter";
 
 
   /** @domName SVGMarkerElement.setOrientToAngle */
-  void setOrientToAngle(SVGAngle angle) native "SVGMarkerElement_setOrientToAngle_Callback";
+  void setOrientToAngle(Angle angle) native "SVGMarkerElement_setOrientToAngle_Callback";
 
 
   /** @domName SVGMarkerElement.setOrientToAuto */
@@ -4157,15 +4096,15 @@
 
 
   /** @domName SVGMarkerElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGMarkerElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGMarkerElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGMarkerElement.preserveAspectRatio */
-  SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGMarkerElement_preserveAspectRatio_Getter";
+  AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGMarkerElement_preserveAspectRatio_Getter";
 
 
   /** @domName SVGMarkerElement.viewBox */
-  SVGAnimatedRect get viewBox native "SVGMarkerElement_viewBox_Getter";
+  AnimatedRect get viewBox native "SVGMarkerElement_viewBox_Getter";
 
 
   /** @domName SVGMarkerElement.xmllang */
@@ -4185,7 +4124,7 @@
 
 
   /** @domName SVGMarkerElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGMarkerElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGMarkerElement_className_Getter";
 
 
   /** @domName SVGMarkerElement.style */
@@ -4204,36 +4143,38 @@
 
 
 /// @domName SVGMaskElement
-class SVGMaskElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGExternalResourcesRequired {
-  SVGMaskElement.internal(): super.internal();
+class MaskElement extends SvgElement implements Tests, Stylable, ExternalResourcesRequired, LangSpace {
+
+  factory MaskElement() => _SvgElementFactoryProvider.createSvgElement_tag("mask");
+  MaskElement.internal(): super.internal();
 
 
   /** @domName SVGMaskElement.height */
-  SVGAnimatedLength get height native "SVGMaskElement_height_Getter";
+  AnimatedLength get height native "SVGMaskElement_height_Getter";
 
 
   /** @domName SVGMaskElement.maskContentUnits */
-  SVGAnimatedEnumeration get maskContentUnits native "SVGMaskElement_maskContentUnits_Getter";
+  AnimatedEnumeration get maskContentUnits native "SVGMaskElement_maskContentUnits_Getter";
 
 
   /** @domName SVGMaskElement.maskUnits */
-  SVGAnimatedEnumeration get maskUnits native "SVGMaskElement_maskUnits_Getter";
+  AnimatedEnumeration get maskUnits native "SVGMaskElement_maskUnits_Getter";
 
 
   /** @domName SVGMaskElement.width */
-  SVGAnimatedLength get width native "SVGMaskElement_width_Getter";
+  AnimatedLength get width native "SVGMaskElement_width_Getter";
 
 
   /** @domName SVGMaskElement.x */
-  SVGAnimatedLength get x native "SVGMaskElement_x_Getter";
+  AnimatedLength get x native "SVGMaskElement_x_Getter";
 
 
   /** @domName SVGMaskElement.y */
-  SVGAnimatedLength get y native "SVGMaskElement_y_Getter";
+  AnimatedLength get y native "SVGMaskElement_y_Getter";
 
 
   /** @domName SVGMaskElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGMaskElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGMaskElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGMaskElement.xmllang */
@@ -4253,7 +4194,7 @@
 
 
   /** @domName SVGMaskElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGMaskElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGMaskElement_className_Getter";
 
 
   /** @domName SVGMaskElement.style */
@@ -4265,15 +4206,15 @@
 
 
   /** @domName SVGMaskElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGMaskElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGMaskElement_requiredExtensions_Getter";
 
 
   /** @domName SVGMaskElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGMaskElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGMaskElement_requiredFeatures_Getter";
 
 
   /** @domName SVGMaskElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGMaskElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGMaskElement_systemLanguage_Getter";
 
 
   /** @domName SVGMaskElement.hasExtension */
@@ -4288,8 +4229,8 @@
 
 
 /// @domName SVGMatrix
-class SVGMatrix extends NativeFieldWrapperClass1 {
-  SVGMatrix.internal();
+class Matrix extends NativeFieldWrapperClass1 {
+  Matrix.internal();
 
 
   /** @domName SVGMatrix.a */
@@ -4341,47 +4282,47 @@
 
 
   /** @domName SVGMatrix.flipX */
-  SVGMatrix flipX() native "SVGMatrix_flipX_Callback";
+  Matrix flipX() native "SVGMatrix_flipX_Callback";
 
 
   /** @domName SVGMatrix.flipY */
-  SVGMatrix flipY() native "SVGMatrix_flipY_Callback";
+  Matrix flipY() native "SVGMatrix_flipY_Callback";
 
 
   /** @domName SVGMatrix.inverse */
-  SVGMatrix inverse() native "SVGMatrix_inverse_Callback";
+  Matrix inverse() native "SVGMatrix_inverse_Callback";
 
 
   /** @domName SVGMatrix.multiply */
-  SVGMatrix multiply(SVGMatrix secondMatrix) native "SVGMatrix_multiply_Callback";
+  Matrix multiply(Matrix secondMatrix) native "SVGMatrix_multiply_Callback";
 
 
   /** @domName SVGMatrix.rotate */
-  SVGMatrix rotate(num angle) native "SVGMatrix_rotate_Callback";
+  Matrix rotate(num angle) native "SVGMatrix_rotate_Callback";
 
 
   /** @domName SVGMatrix.rotateFromVector */
-  SVGMatrix rotateFromVector(num x, num y) native "SVGMatrix_rotateFromVector_Callback";
+  Matrix rotateFromVector(num x, num y) native "SVGMatrix_rotateFromVector_Callback";
 
 
   /** @domName SVGMatrix.scale */
-  SVGMatrix scale(num scaleFactor) native "SVGMatrix_scale_Callback";
+  Matrix scale(num scaleFactor) native "SVGMatrix_scale_Callback";
 
 
   /** @domName SVGMatrix.scaleNonUniform */
-  SVGMatrix scaleNonUniform(num scaleFactorX, num scaleFactorY) native "SVGMatrix_scaleNonUniform_Callback";
+  Matrix scaleNonUniform(num scaleFactorX, num scaleFactorY) native "SVGMatrix_scaleNonUniform_Callback";
 
 
   /** @domName SVGMatrix.skewX */
-  SVGMatrix skewX(num angle) native "SVGMatrix_skewX_Callback";
+  Matrix skewX(num angle) native "SVGMatrix_skewX_Callback";
 
 
   /** @domName SVGMatrix.skewY */
-  SVGMatrix skewY(num angle) native "SVGMatrix_skewY_Callback";
+  Matrix skewY(num angle) native "SVGMatrix_skewY_Callback";
 
 
   /** @domName SVGMatrix.translate */
-  SVGMatrix translate(num x, num y) native "SVGMatrix_translate_Callback";
+  Matrix translate(num x, num y) native "SVGMatrix_translate_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4392,8 +4333,8 @@
 
 
 /// @domName SVGMetadataElement
-class SVGMetadataElement extends SVGElement {
-  SVGMetadataElement.internal(): super.internal();
+class MetadataElement extends SvgElement {
+  MetadataElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4404,8 +4345,8 @@
 
 
 /// @domName SVGMissingGlyphElement
-class SVGMissingGlyphElement extends SVGElement {
-  SVGMissingGlyphElement.internal(): super.internal();
+class MissingGlyphElement extends SvgElement {
+  MissingGlyphElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4416,8 +4357,8 @@
 
 
 /// @domName SVGNumber
-class SVGNumber extends NativeFieldWrapperClass1 {
-  SVGNumber.internal();
+class Number extends NativeFieldWrapperClass1 {
+  Number.internal();
 
 
   /** @domName SVGNumber.value */
@@ -4436,80 +4377,82 @@
 
 
 /// @domName SVGNumberList
-class SVGNumberList extends NativeFieldWrapperClass1 implements List<SVGNumber> {
-  SVGNumberList.internal();
+class NumberList extends NativeFieldWrapperClass1 implements List<Number> {
+  NumberList.internal();
 
 
   /** @domName SVGNumberList.numberOfItems */
   int get numberOfItems native "SVGNumberList_numberOfItems_Getter";
 
-  SVGNumber operator[](int index) native "SVGNumberList_item_Callback";
+  Number operator[](int index) native "SVGNumberList_item_Callback";
 
-  void operator[]=(int index, SVGNumber value) {
+  void operator[]=(int index, Number value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
-  // -- start List<SVGNumber> mixins.
-  // SVGNumber is the element type.
+  // -- start List<Number> mixins.
+  // Number is the element type.
 
-  // From Iterable<SVGNumber>:
+  // From Iterable<Number>:
 
-  Iterator<SVGNumber> iterator() {
+  Iterator<Number> iterator() {
     // Note: NodeLists are not fixed size. And most probably length shouldn't
     // be cached in both iterator _and_ forEach method. For now caching it
     // for consistency.
-    return new FixedSizeListIterator<SVGNumber>(this);
+    return new FixedSizeListIterator<Number>(this);
   }
 
-  // From Collection<SVGNumber>:
+  // From Collection<Number>:
 
-  void add(SVGNumber value) {
+  void add(Number value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addLast(SVGNumber value) {
+  void addLast(Number value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addAll(Collection<SVGNumber> collection) {
+  void addAll(Collection<Number> collection) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  bool contains(SVGNumber element) => _Collections.contains(this, element);
+  bool contains(Number element) => _Collections.contains(this, element);
 
-  void forEach(void f(SVGNumber element)) => _Collections.forEach(this, f);
+  void forEach(void f(Number element)) => _Collections.forEach(this, f);
 
-  Collection map(f(SVGNumber element)) => _Collections.map(this, [], f);
+  Collection map(f(Number element)) => _Collections.map(this, [], f);
 
-  Collection<SVGNumber> filter(bool f(SVGNumber element)) =>
-     _Collections.filter(this, <SVGNumber>[], f);
+  Collection<Number> filter(bool f(Number element)) =>
+     _Collections.filter(this, <Number>[], f);
 
-  bool every(bool f(SVGNumber element)) => _Collections.every(this, f);
+  bool every(bool f(Number element)) => _Collections.every(this, f);
 
-  bool some(bool f(SVGNumber element)) => _Collections.some(this, f);
+  bool some(bool f(Number element)) => _Collections.some(this, f);
 
   bool get isEmpty => this.length == 0;
 
-  // From List<SVGNumber>:
+  // From List<Number>:
 
-  void sort([Comparator<SVGNumber> compare = Comparable.compare]) {
+  void sort([Comparator<Number> compare = Comparable.compare]) {
     throw new UnsupportedError("Cannot sort immutable List.");
   }
 
-  int indexOf(SVGNumber element, [int start = 0]) =>
+  int indexOf(Number element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
-  int lastIndexOf(SVGNumber element, [int start]) {
+  int lastIndexOf(Number element, [int start]) {
     if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGNumber get last => this[length - 1];
+  Number get first => this[0];
 
-  SVGNumber removeLast() {
+  Number get last => this[length - 1];
+
+  Number removeLast() {
     throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
-  void setRange(int start, int rangeLength, List<SVGNumber> from, [int startFrom]) {
+  void setRange(int start, int rangeLength, List<Number> from, [int startFrom]) {
     throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
@@ -4517,18 +4460,18 @@
     throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
-  void insertRange(int start, int rangeLength, [SVGNumber initialValue]) {
+  void insertRange(int start, int rangeLength, [Number initialValue]) {
     throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
-  List<SVGNumber> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGNumber>[]);
+  List<Number> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Number>[]);
 
-  // -- end List<SVGNumber> mixins.
+  // -- end List<Number> mixins.
 
 
   /** @domName SVGNumberList.appendItem */
-  SVGNumber appendItem(SVGNumber item) native "SVGNumberList_appendItem_Callback";
+  Number appendItem(Number item) native "SVGNumberList_appendItem_Callback";
 
 
   /** @domName SVGNumberList.clear */
@@ -4536,23 +4479,23 @@
 
 
   /** @domName SVGNumberList.getItem */
-  SVGNumber getItem(int index) native "SVGNumberList_getItem_Callback";
+  Number getItem(int index) native "SVGNumberList_getItem_Callback";
 
 
   /** @domName SVGNumberList.initialize */
-  SVGNumber initialize(SVGNumber item) native "SVGNumberList_initialize_Callback";
+  Number initialize(Number item) native "SVGNumberList_initialize_Callback";
 
 
   /** @domName SVGNumberList.insertItemBefore */
-  SVGNumber insertItemBefore(SVGNumber item, int index) native "SVGNumberList_insertItemBefore_Callback";
+  Number insertItemBefore(Number item, int index) native "SVGNumberList_insertItemBefore_Callback";
 
 
   /** @domName SVGNumberList.removeItem */
-  SVGNumber removeItem(int index) native "SVGNumberList_removeItem_Callback";
+  Number removeItem(int index) native "SVGNumberList_removeItem_Callback";
 
 
   /** @domName SVGNumberList.replaceItem */
-  SVGNumber replaceItem(SVGNumber item, int index) native "SVGNumberList_replaceItem_Callback";
+  Number replaceItem(Number item, int index) native "SVGNumberList_replaceItem_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4563,8 +4506,8 @@
 
 
 /// @domName SVGPaint
-class SVGPaint extends SVGColor {
-  SVGPaint.internal(): super.internal();
+class Paint extends Color {
+  Paint.internal(): super.internal();
 
   static const int SVG_PAINTTYPE_CURRENTCOLOR = 102;
 
@@ -4611,104 +4554,106 @@
 
 
 /// @domName SVGPathElement
-class SVGPathElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
-  SVGPathElement.internal(): super.internal();
+class PathElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
+
+  factory PathElement() => _SvgElementFactoryProvider.createSvgElement_tag("path");
+  PathElement.internal(): super.internal();
 
 
   /** @domName SVGPathElement.animatedNormalizedPathSegList */
-  SVGPathSegList get animatedNormalizedPathSegList native "SVGPathElement_animatedNormalizedPathSegList_Getter";
+  PathSegList get animatedNormalizedPathSegList native "SVGPathElement_animatedNormalizedPathSegList_Getter";
 
 
   /** @domName SVGPathElement.animatedPathSegList */
-  SVGPathSegList get animatedPathSegList native "SVGPathElement_animatedPathSegList_Getter";
+  PathSegList get animatedPathSegList native "SVGPathElement_animatedPathSegList_Getter";
 
 
   /** @domName SVGPathElement.normalizedPathSegList */
-  SVGPathSegList get normalizedPathSegList native "SVGPathElement_normalizedPathSegList_Getter";
+  PathSegList get normalizedPathSegList native "SVGPathElement_normalizedPathSegList_Getter";
 
 
   /** @domName SVGPathElement.pathLength */
-  SVGAnimatedNumber get pathLength native "SVGPathElement_pathLength_Getter";
+  AnimatedNumber get pathLength native "SVGPathElement_pathLength_Getter";
 
 
   /** @domName SVGPathElement.pathSegList */
-  SVGPathSegList get pathSegList native "SVGPathElement_pathSegList_Getter";
+  PathSegList get pathSegList native "SVGPathElement_pathSegList_Getter";
 
 
   /** @domName SVGPathElement.createSVGPathSegArcAbs */
-  SVGPathSegArcAbs createSVGPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native "SVGPathElement_createSVGPathSegArcAbs_Callback";
+  PathSegArcAbs createSVGPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native "SVGPathElement_createSVGPathSegArcAbs_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegArcRel */
-  SVGPathSegArcRel createSVGPathSegArcRel(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native "SVGPathElement_createSVGPathSegArcRel_Callback";
+  PathSegArcRel createSVGPathSegArcRel(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native "SVGPathElement_createSVGPathSegArcRel_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegClosePath */
-  SVGPathSegClosePath createSVGPathSegClosePath() native "SVGPathElement_createSVGPathSegClosePath_Callback";
+  PathSegClosePath createSVGPathSegClosePath() native "SVGPathElement_createSVGPathSegClosePath_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegCurvetoCubicAbs */
-  SVGPathSegCurvetoCubicAbs createSVGPathSegCurvetoCubicAbs(num x, num y, num x1, num y1, num x2, num y2) native "SVGPathElement_createSVGPathSegCurvetoCubicAbs_Callback";
+  PathSegCurvetoCubicAbs createSVGPathSegCurvetoCubicAbs(num x, num y, num x1, num y1, num x2, num y2) native "SVGPathElement_createSVGPathSegCurvetoCubicAbs_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegCurvetoCubicRel */
-  SVGPathSegCurvetoCubicRel createSVGPathSegCurvetoCubicRel(num x, num y, num x1, num y1, num x2, num y2) native "SVGPathElement_createSVGPathSegCurvetoCubicRel_Callback";
+  PathSegCurvetoCubicRel createSVGPathSegCurvetoCubicRel(num x, num y, num x1, num y1, num x2, num y2) native "SVGPathElement_createSVGPathSegCurvetoCubicRel_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs */
-  SVGPathSegCurvetoCubicSmoothAbs createSVGPathSegCurvetoCubicSmoothAbs(num x, num y, num x2, num y2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothAbs_Callback";
+  PathSegCurvetoCubicSmoothAbs createSVGPathSegCurvetoCubicSmoothAbs(num x, num y, num x2, num y2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothAbs_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothRel */
-  SVGPathSegCurvetoCubicSmoothRel createSVGPathSegCurvetoCubicSmoothRel(num x, num y, num x2, num y2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothRel_Callback";
+  PathSegCurvetoCubicSmoothRel createSVGPathSegCurvetoCubicSmoothRel(num x, num y, num x2, num y2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothRel_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticAbs */
-  SVGPathSegCurvetoQuadraticAbs createSVGPathSegCurvetoQuadraticAbs(num x, num y, num x1, num y1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticAbs_Callback";
+  PathSegCurvetoQuadraticAbs createSVGPathSegCurvetoQuadraticAbs(num x, num y, num x1, num y1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticAbs_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticRel */
-  SVGPathSegCurvetoQuadraticRel createSVGPathSegCurvetoQuadraticRel(num x, num y, num x1, num y1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticRel_Callback";
+  PathSegCurvetoQuadraticRel createSVGPathSegCurvetoQuadraticRel(num x, num y, num x1, num y1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticRel_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs */
-  SVGPathSegCurvetoQuadraticSmoothAbs createSVGPathSegCurvetoQuadraticSmoothAbs(num x, num y) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothAbs_Callback";
+  PathSegCurvetoQuadraticSmoothAbs createSVGPathSegCurvetoQuadraticSmoothAbs(num x, num y) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothAbs_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel */
-  SVGPathSegCurvetoQuadraticSmoothRel createSVGPathSegCurvetoQuadraticSmoothRel(num x, num y) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothRel_Callback";
+  PathSegCurvetoQuadraticSmoothRel createSVGPathSegCurvetoQuadraticSmoothRel(num x, num y) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothRel_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegLinetoAbs */
-  SVGPathSegLinetoAbs createSVGPathSegLinetoAbs(num x, num y) native "SVGPathElement_createSVGPathSegLinetoAbs_Callback";
+  PathSegLinetoAbs createSVGPathSegLinetoAbs(num x, num y) native "SVGPathElement_createSVGPathSegLinetoAbs_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegLinetoHorizontalAbs */
-  SVGPathSegLinetoHorizontalAbs createSVGPathSegLinetoHorizontalAbs(num x) native "SVGPathElement_createSVGPathSegLinetoHorizontalAbs_Callback";
+  PathSegLinetoHorizontalAbs createSVGPathSegLinetoHorizontalAbs(num x) native "SVGPathElement_createSVGPathSegLinetoHorizontalAbs_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegLinetoHorizontalRel */
-  SVGPathSegLinetoHorizontalRel createSVGPathSegLinetoHorizontalRel(num x) native "SVGPathElement_createSVGPathSegLinetoHorizontalRel_Callback";
+  PathSegLinetoHorizontalRel createSVGPathSegLinetoHorizontalRel(num x) native "SVGPathElement_createSVGPathSegLinetoHorizontalRel_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegLinetoRel */
-  SVGPathSegLinetoRel createSVGPathSegLinetoRel(num x, num y) native "SVGPathElement_createSVGPathSegLinetoRel_Callback";
+  PathSegLinetoRel createSVGPathSegLinetoRel(num x, num y) native "SVGPathElement_createSVGPathSegLinetoRel_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegLinetoVerticalAbs */
-  SVGPathSegLinetoVerticalAbs createSVGPathSegLinetoVerticalAbs(num y) native "SVGPathElement_createSVGPathSegLinetoVerticalAbs_Callback";
+  PathSegLinetoVerticalAbs createSVGPathSegLinetoVerticalAbs(num y) native "SVGPathElement_createSVGPathSegLinetoVerticalAbs_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegLinetoVerticalRel */
-  SVGPathSegLinetoVerticalRel createSVGPathSegLinetoVerticalRel(num y) native "SVGPathElement_createSVGPathSegLinetoVerticalRel_Callback";
+  PathSegLinetoVerticalRel createSVGPathSegLinetoVerticalRel(num y) native "SVGPathElement_createSVGPathSegLinetoVerticalRel_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegMovetoAbs */
-  SVGPathSegMovetoAbs createSVGPathSegMovetoAbs(num x, num y) native "SVGPathElement_createSVGPathSegMovetoAbs_Callback";
+  PathSegMovetoAbs createSVGPathSegMovetoAbs(num x, num y) native "SVGPathElement_createSVGPathSegMovetoAbs_Callback";
 
 
   /** @domName SVGPathElement.createSVGPathSegMovetoRel */
-  SVGPathSegMovetoRel createSVGPathSegMovetoRel(num x, num y) native "SVGPathElement_createSVGPathSegMovetoRel_Callback";
+  PathSegMovetoRel createSVGPathSegMovetoRel(num x, num y) native "SVGPathElement_createSVGPathSegMovetoRel_Callback";
 
 
   /** @domName SVGPathElement.getPathSegAtLength */
@@ -4716,7 +4661,7 @@
 
 
   /** @domName SVGPathElement.getPointAtLength */
-  SVGPoint getPointAtLength(num distance) native "SVGPathElement_getPointAtLength_Callback";
+  Point getPointAtLength(num distance) native "SVGPathElement_getPointAtLength_Callback";
 
 
   /** @domName SVGPathElement.getTotalLength */
@@ -4724,7 +4669,7 @@
 
 
   /** @domName SVGPathElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGPathElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGPathElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGPathElement.xmllang */
@@ -4744,31 +4689,31 @@
 
 
   /** @domName SVGPathElement.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGPathElement_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGPathElement_farthestViewportElement_Getter";
 
 
   /** @domName SVGPathElement.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGPathElement_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGPathElement_nearestViewportElement_Getter";
 
 
   /** @domName SVGPathElement.getBBox */
-  SVGRect getBBox() native "SVGPathElement_getBBox_Callback";
+  Rect getBBox() native "SVGPathElement_getBBox_Callback";
 
 
   /** @domName SVGPathElement.getCTM */
-  SVGMatrix getCTM() native "SVGPathElement_getCTM_Callback";
+  Matrix getCTM() native "SVGPathElement_getCTM_Callback";
 
 
   /** @domName SVGPathElement.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGPathElement_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGPathElement_getScreenCTM_Callback";
 
 
   /** @domName SVGPathElement.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGPathElement_getTransformToElement_Callback";
+  Matrix getTransformToElement(SvgElement element) native "SVGPathElement_getTransformToElement_Callback";
 
 
   /** @domName SVGPathElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGPathElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGPathElement_className_Getter";
 
 
   /** @domName SVGPathElement.style */
@@ -4780,15 +4725,15 @@
 
 
   /** @domName SVGPathElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGPathElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGPathElement_requiredExtensions_Getter";
 
 
   /** @domName SVGPathElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGPathElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGPathElement_requiredFeatures_Getter";
 
 
   /** @domName SVGPathElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGPathElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGPathElement_systemLanguage_Getter";
 
 
   /** @domName SVGPathElement.hasExtension */
@@ -4796,7 +4741,7 @@
 
 
   /** @domName SVGPathElement.transform */
-  SVGAnimatedTransformList get transform native "SVGPathElement_transform_Getter";
+  AnimatedTransformList get transform native "SVGPathElement_transform_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -4807,8 +4752,8 @@
 
 
 /// @domName SVGPathSeg
-class SVGPathSeg extends NativeFieldWrapperClass1 {
-  SVGPathSeg.internal();
+class PathSeg extends NativeFieldWrapperClass1 {
+  PathSeg.internal();
 
   static const int PATHSEG_ARC_ABS = 10;
 
@@ -4867,8 +4812,8 @@
 
 
 /// @domName SVGPathSegArcAbs
-class SVGPathSegArcAbs extends SVGPathSeg {
-  SVGPathSegArcAbs.internal(): super.internal();
+class PathSegArcAbs extends PathSeg {
+  PathSegArcAbs.internal(): super.internal();
 
 
   /** @domName SVGPathSegArcAbs.angle */
@@ -4935,8 +4880,8 @@
 
 
 /// @domName SVGPathSegArcRel
-class SVGPathSegArcRel extends SVGPathSeg {
-  SVGPathSegArcRel.internal(): super.internal();
+class PathSegArcRel extends PathSeg {
+  PathSegArcRel.internal(): super.internal();
 
 
   /** @domName SVGPathSegArcRel.angle */
@@ -5003,8 +4948,8 @@
 
 
 /// @domName SVGPathSegClosePath
-class SVGPathSegClosePath extends SVGPathSeg {
-  SVGPathSegClosePath.internal(): super.internal();
+class PathSegClosePath extends PathSeg {
+  PathSegClosePath.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5015,8 +4960,8 @@
 
 
 /// @domName SVGPathSegCurvetoCubicAbs
-class SVGPathSegCurvetoCubicAbs extends SVGPathSeg {
-  SVGPathSegCurvetoCubicAbs.internal(): super.internal();
+class PathSegCurvetoCubicAbs extends PathSeg {
+  PathSegCurvetoCubicAbs.internal(): super.internal();
 
 
   /** @domName SVGPathSegCurvetoCubicAbs.x */
@@ -5075,8 +5020,8 @@
 
 
 /// @domName SVGPathSegCurvetoCubicRel
-class SVGPathSegCurvetoCubicRel extends SVGPathSeg {
-  SVGPathSegCurvetoCubicRel.internal(): super.internal();
+class PathSegCurvetoCubicRel extends PathSeg {
+  PathSegCurvetoCubicRel.internal(): super.internal();
 
 
   /** @domName SVGPathSegCurvetoCubicRel.x */
@@ -5135,8 +5080,8 @@
 
 
 /// @domName SVGPathSegCurvetoCubicSmoothAbs
-class SVGPathSegCurvetoCubicSmoothAbs extends SVGPathSeg {
-  SVGPathSegCurvetoCubicSmoothAbs.internal(): super.internal();
+class PathSegCurvetoCubicSmoothAbs extends PathSeg {
+  PathSegCurvetoCubicSmoothAbs.internal(): super.internal();
 
 
   /** @domName SVGPathSegCurvetoCubicSmoothAbs.x */
@@ -5179,8 +5124,8 @@
 
 
 /// @domName SVGPathSegCurvetoCubicSmoothRel
-class SVGPathSegCurvetoCubicSmoothRel extends SVGPathSeg {
-  SVGPathSegCurvetoCubicSmoothRel.internal(): super.internal();
+class PathSegCurvetoCubicSmoothRel extends PathSeg {
+  PathSegCurvetoCubicSmoothRel.internal(): super.internal();
 
 
   /** @domName SVGPathSegCurvetoCubicSmoothRel.x */
@@ -5223,8 +5168,8 @@
 
 
 /// @domName SVGPathSegCurvetoQuadraticAbs
-class SVGPathSegCurvetoQuadraticAbs extends SVGPathSeg {
-  SVGPathSegCurvetoQuadraticAbs.internal(): super.internal();
+class PathSegCurvetoQuadraticAbs extends PathSeg {
+  PathSegCurvetoQuadraticAbs.internal(): super.internal();
 
 
   /** @domName SVGPathSegCurvetoQuadraticAbs.x */
@@ -5267,8 +5212,8 @@
 
 
 /// @domName SVGPathSegCurvetoQuadraticRel
-class SVGPathSegCurvetoQuadraticRel extends SVGPathSeg {
-  SVGPathSegCurvetoQuadraticRel.internal(): super.internal();
+class PathSegCurvetoQuadraticRel extends PathSeg {
+  PathSegCurvetoQuadraticRel.internal(): super.internal();
 
 
   /** @domName SVGPathSegCurvetoQuadraticRel.x */
@@ -5311,8 +5256,8 @@
 
 
 /// @domName SVGPathSegCurvetoQuadraticSmoothAbs
-class SVGPathSegCurvetoQuadraticSmoothAbs extends SVGPathSeg {
-  SVGPathSegCurvetoQuadraticSmoothAbs.internal(): super.internal();
+class PathSegCurvetoQuadraticSmoothAbs extends PathSeg {
+  PathSegCurvetoQuadraticSmoothAbs.internal(): super.internal();
 
 
   /** @domName SVGPathSegCurvetoQuadraticSmoothAbs.x */
@@ -5339,8 +5284,8 @@
 
 
 /// @domName SVGPathSegCurvetoQuadraticSmoothRel
-class SVGPathSegCurvetoQuadraticSmoothRel extends SVGPathSeg {
-  SVGPathSegCurvetoQuadraticSmoothRel.internal(): super.internal();
+class PathSegCurvetoQuadraticSmoothRel extends PathSeg {
+  PathSegCurvetoQuadraticSmoothRel.internal(): super.internal();
 
 
   /** @domName SVGPathSegCurvetoQuadraticSmoothRel.x */
@@ -5367,8 +5312,8 @@
 
 
 /// @domName SVGPathSegLinetoAbs
-class SVGPathSegLinetoAbs extends SVGPathSeg {
-  SVGPathSegLinetoAbs.internal(): super.internal();
+class PathSegLinetoAbs extends PathSeg {
+  PathSegLinetoAbs.internal(): super.internal();
 
 
   /** @domName SVGPathSegLinetoAbs.x */
@@ -5395,8 +5340,8 @@
 
 
 /// @domName SVGPathSegLinetoHorizontalAbs
-class SVGPathSegLinetoHorizontalAbs extends SVGPathSeg {
-  SVGPathSegLinetoHorizontalAbs.internal(): super.internal();
+class PathSegLinetoHorizontalAbs extends PathSeg {
+  PathSegLinetoHorizontalAbs.internal(): super.internal();
 
 
   /** @domName SVGPathSegLinetoHorizontalAbs.x */
@@ -5415,8 +5360,8 @@
 
 
 /// @domName SVGPathSegLinetoHorizontalRel
-class SVGPathSegLinetoHorizontalRel extends SVGPathSeg {
-  SVGPathSegLinetoHorizontalRel.internal(): super.internal();
+class PathSegLinetoHorizontalRel extends PathSeg {
+  PathSegLinetoHorizontalRel.internal(): super.internal();
 
 
   /** @domName SVGPathSegLinetoHorizontalRel.x */
@@ -5435,8 +5380,8 @@
 
 
 /// @domName SVGPathSegLinetoRel
-class SVGPathSegLinetoRel extends SVGPathSeg {
-  SVGPathSegLinetoRel.internal(): super.internal();
+class PathSegLinetoRel extends PathSeg {
+  PathSegLinetoRel.internal(): super.internal();
 
 
   /** @domName SVGPathSegLinetoRel.x */
@@ -5463,8 +5408,8 @@
 
 
 /// @domName SVGPathSegLinetoVerticalAbs
-class SVGPathSegLinetoVerticalAbs extends SVGPathSeg {
-  SVGPathSegLinetoVerticalAbs.internal(): super.internal();
+class PathSegLinetoVerticalAbs extends PathSeg {
+  PathSegLinetoVerticalAbs.internal(): super.internal();
 
 
   /** @domName SVGPathSegLinetoVerticalAbs.y */
@@ -5483,8 +5428,8 @@
 
 
 /// @domName SVGPathSegLinetoVerticalRel
-class SVGPathSegLinetoVerticalRel extends SVGPathSeg {
-  SVGPathSegLinetoVerticalRel.internal(): super.internal();
+class PathSegLinetoVerticalRel extends PathSeg {
+  PathSegLinetoVerticalRel.internal(): super.internal();
 
 
   /** @domName SVGPathSegLinetoVerticalRel.y */
@@ -5503,80 +5448,82 @@
 
 
 /// @domName SVGPathSegList
-class SVGPathSegList extends NativeFieldWrapperClass1 implements List<SVGPathSeg> {
-  SVGPathSegList.internal();
+class PathSegList extends NativeFieldWrapperClass1 implements List<PathSeg> {
+  PathSegList.internal();
 
 
   /** @domName SVGPathSegList.numberOfItems */
   int get numberOfItems native "SVGPathSegList_numberOfItems_Getter";
 
-  SVGPathSeg operator[](int index) native "SVGPathSegList_item_Callback";
+  PathSeg operator[](int index) native "SVGPathSegList_item_Callback";
 
-  void operator[]=(int index, SVGPathSeg value) {
+  void operator[]=(int index, PathSeg value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
-  // -- start List<SVGPathSeg> mixins.
-  // SVGPathSeg is the element type.
+  // -- start List<PathSeg> mixins.
+  // PathSeg is the element type.
 
-  // From Iterable<SVGPathSeg>:
+  // From Iterable<PathSeg>:
 
-  Iterator<SVGPathSeg> iterator() {
+  Iterator<PathSeg> iterator() {
     // Note: NodeLists are not fixed size. And most probably length shouldn't
     // be cached in both iterator _and_ forEach method. For now caching it
     // for consistency.
-    return new FixedSizeListIterator<SVGPathSeg>(this);
+    return new FixedSizeListIterator<PathSeg>(this);
   }
 
-  // From Collection<SVGPathSeg>:
+  // From Collection<PathSeg>:
 
-  void add(SVGPathSeg value) {
+  void add(PathSeg value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addLast(SVGPathSeg value) {
+  void addLast(PathSeg value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addAll(Collection<SVGPathSeg> collection) {
+  void addAll(Collection<PathSeg> collection) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  bool contains(SVGPathSeg element) => _Collections.contains(this, element);
+  bool contains(PathSeg element) => _Collections.contains(this, element);
 
-  void forEach(void f(SVGPathSeg element)) => _Collections.forEach(this, f);
+  void forEach(void f(PathSeg element)) => _Collections.forEach(this, f);
 
-  Collection map(f(SVGPathSeg element)) => _Collections.map(this, [], f);
+  Collection map(f(PathSeg element)) => _Collections.map(this, [], f);
 
-  Collection<SVGPathSeg> filter(bool f(SVGPathSeg element)) =>
-     _Collections.filter(this, <SVGPathSeg>[], f);
+  Collection<PathSeg> filter(bool f(PathSeg element)) =>
+     _Collections.filter(this, <PathSeg>[], f);
 
-  bool every(bool f(SVGPathSeg element)) => _Collections.every(this, f);
+  bool every(bool f(PathSeg element)) => _Collections.every(this, f);
 
-  bool some(bool f(SVGPathSeg element)) => _Collections.some(this, f);
+  bool some(bool f(PathSeg element)) => _Collections.some(this, f);
 
   bool get isEmpty => this.length == 0;
 
-  // From List<SVGPathSeg>:
+  // From List<PathSeg>:
 
-  void sort([Comparator<SVGPathSeg> compare = Comparable.compare]) {
+  void sort([Comparator<PathSeg> compare = Comparable.compare]) {
     throw new UnsupportedError("Cannot sort immutable List.");
   }
 
-  int indexOf(SVGPathSeg element, [int start = 0]) =>
+  int indexOf(PathSeg element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
-  int lastIndexOf(SVGPathSeg element, [int start]) {
+  int lastIndexOf(PathSeg element, [int start]) {
     if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGPathSeg get last => this[length - 1];
+  PathSeg get first => this[0];
 
-  SVGPathSeg removeLast() {
+  PathSeg get last => this[length - 1];
+
+  PathSeg removeLast() {
     throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
-  void setRange(int start, int rangeLength, List<SVGPathSeg> from, [int startFrom]) {
+  void setRange(int start, int rangeLength, List<PathSeg> from, [int startFrom]) {
     throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
@@ -5584,18 +5531,18 @@
     throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
-  void insertRange(int start, int rangeLength, [SVGPathSeg initialValue]) {
+  void insertRange(int start, int rangeLength, [PathSeg initialValue]) {
     throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
-  List<SVGPathSeg> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGPathSeg>[]);
+  List<PathSeg> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <PathSeg>[]);
 
-  // -- end List<SVGPathSeg> mixins.
+  // -- end List<PathSeg> mixins.
 
 
   /** @domName SVGPathSegList.appendItem */
-  SVGPathSeg appendItem(SVGPathSeg newItem) native "SVGPathSegList_appendItem_Callback";
+  PathSeg appendItem(PathSeg newItem) native "SVGPathSegList_appendItem_Callback";
 
 
   /** @domName SVGPathSegList.clear */
@@ -5603,23 +5550,23 @@
 
 
   /** @domName SVGPathSegList.getItem */
-  SVGPathSeg getItem(int index) native "SVGPathSegList_getItem_Callback";
+  PathSeg getItem(int index) native "SVGPathSegList_getItem_Callback";
 
 
   /** @domName SVGPathSegList.initialize */
-  SVGPathSeg initialize(SVGPathSeg newItem) native "SVGPathSegList_initialize_Callback";
+  PathSeg initialize(PathSeg newItem) native "SVGPathSegList_initialize_Callback";
 
 
   /** @domName SVGPathSegList.insertItemBefore */
-  SVGPathSeg insertItemBefore(SVGPathSeg newItem, int index) native "SVGPathSegList_insertItemBefore_Callback";
+  PathSeg insertItemBefore(PathSeg newItem, int index) native "SVGPathSegList_insertItemBefore_Callback";
 
 
   /** @domName SVGPathSegList.removeItem */
-  SVGPathSeg removeItem(int index) native "SVGPathSegList_removeItem_Callback";
+  PathSeg removeItem(int index) native "SVGPathSegList_removeItem_Callback";
 
 
   /** @domName SVGPathSegList.replaceItem */
-  SVGPathSeg replaceItem(SVGPathSeg newItem, int index) native "SVGPathSegList_replaceItem_Callback";
+  PathSeg replaceItem(PathSeg newItem, int index) native "SVGPathSegList_replaceItem_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5630,8 +5577,8 @@
 
 
 /// @domName SVGPathSegMovetoAbs
-class SVGPathSegMovetoAbs extends SVGPathSeg {
-  SVGPathSegMovetoAbs.internal(): super.internal();
+class PathSegMovetoAbs extends PathSeg {
+  PathSegMovetoAbs.internal(): super.internal();
 
 
   /** @domName SVGPathSegMovetoAbs.x */
@@ -5658,8 +5605,8 @@
 
 
 /// @domName SVGPathSegMovetoRel
-class SVGPathSegMovetoRel extends SVGPathSeg {
-  SVGPathSegMovetoRel.internal(): super.internal();
+class PathSegMovetoRel extends PathSeg {
+  PathSegMovetoRel.internal(): super.internal();
 
 
   /** @domName SVGPathSegMovetoRel.x */
@@ -5686,48 +5633,50 @@
 
 
 /// @domName SVGPatternElement
-class SVGPatternElement extends SVGElement implements SVGLangSpace, SVGTests, SVGStylable, SVGURIReference, SVGFitToViewBox, SVGExternalResourcesRequired {
-  SVGPatternElement.internal(): super.internal();
+class PatternElement extends SvgElement implements FitToViewBox, Tests, UriReference, Stylable, ExternalResourcesRequired, LangSpace {
+
+  factory PatternElement() => _SvgElementFactoryProvider.createSvgElement_tag("pattern");
+  PatternElement.internal(): super.internal();
 
 
   /** @domName SVGPatternElement.height */
-  SVGAnimatedLength get height native "SVGPatternElement_height_Getter";
+  AnimatedLength get height native "SVGPatternElement_height_Getter";
 
 
   /** @domName SVGPatternElement.patternContentUnits */
-  SVGAnimatedEnumeration get patternContentUnits native "SVGPatternElement_patternContentUnits_Getter";
+  AnimatedEnumeration get patternContentUnits native "SVGPatternElement_patternContentUnits_Getter";
 
 
   /** @domName SVGPatternElement.patternTransform */
-  SVGAnimatedTransformList get patternTransform native "SVGPatternElement_patternTransform_Getter";
+  AnimatedTransformList get patternTransform native "SVGPatternElement_patternTransform_Getter";
 
 
   /** @domName SVGPatternElement.patternUnits */
-  SVGAnimatedEnumeration get patternUnits native "SVGPatternElement_patternUnits_Getter";
+  AnimatedEnumeration get patternUnits native "SVGPatternElement_patternUnits_Getter";
 
 
   /** @domName SVGPatternElement.width */
-  SVGAnimatedLength get width native "SVGPatternElement_width_Getter";
+  AnimatedLength get width native "SVGPatternElement_width_Getter";
 
 
   /** @domName SVGPatternElement.x */
-  SVGAnimatedLength get x native "SVGPatternElement_x_Getter";
+  AnimatedLength get x native "SVGPatternElement_x_Getter";
 
 
   /** @domName SVGPatternElement.y */
-  SVGAnimatedLength get y native "SVGPatternElement_y_Getter";
+  AnimatedLength get y native "SVGPatternElement_y_Getter";
 
 
   /** @domName SVGPatternElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGPatternElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGPatternElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGPatternElement.preserveAspectRatio */
-  SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGPatternElement_preserveAspectRatio_Getter";
+  AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGPatternElement_preserveAspectRatio_Getter";
 
 
   /** @domName SVGPatternElement.viewBox */
-  SVGAnimatedRect get viewBox native "SVGPatternElement_viewBox_Getter";
+  AnimatedRect get viewBox native "SVGPatternElement_viewBox_Getter";
 
 
   /** @domName SVGPatternElement.xmllang */
@@ -5747,7 +5696,7 @@
 
 
   /** @domName SVGPatternElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGPatternElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGPatternElement_className_Getter";
 
 
   /** @domName SVGPatternElement.style */
@@ -5759,15 +5708,15 @@
 
 
   /** @domName SVGPatternElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGPatternElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGPatternElement_requiredExtensions_Getter";
 
 
   /** @domName SVGPatternElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGPatternElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGPatternElement_requiredFeatures_Getter";
 
 
   /** @domName SVGPatternElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGPatternElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGPatternElement_systemLanguage_Getter";
 
 
   /** @domName SVGPatternElement.hasExtension */
@@ -5775,7 +5724,7 @@
 
 
   /** @domName SVGPatternElement.href */
-  SVGAnimatedString get href native "SVGPatternElement_href_Getter";
+  AnimatedString get href native "SVGPatternElement_href_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5785,9 +5734,9 @@
 // WARNING: Do not edit - generated code.
 
 
-/// @domName SVGPoint
-class SVGPoint extends NativeFieldWrapperClass1 {
-  SVGPoint.internal();
+class Point extends NativeFieldWrapperClass1 {
+  factory Point(num x, num y) => _PointFactoryProvider.createPoint(x, y);
+  Point.internal();
 
 
   /** @domName SVGPoint.x */
@@ -5807,7 +5756,7 @@
 
 
   /** @domName SVGPoint.matrixTransform */
-  SVGPoint matrixTransform(SVGMatrix matrix) native "SVGPoint_matrixTransform_Callback";
+  Point matrixTransform(Matrix matrix) native "SVGPoint_matrixTransform_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5818,8 +5767,8 @@
 
 
 /// @domName SVGPointList
-class SVGPointList extends NativeFieldWrapperClass1 {
-  SVGPointList.internal();
+class PointList extends NativeFieldWrapperClass1 {
+  PointList.internal();
 
 
   /** @domName SVGPointList.numberOfItems */
@@ -5827,7 +5776,7 @@
 
 
   /** @domName SVGPointList.appendItem */
-  SVGPoint appendItem(SVGPoint item) native "SVGPointList_appendItem_Callback";
+  Point appendItem(Point item) native "SVGPointList_appendItem_Callback";
 
 
   /** @domName SVGPointList.clear */
@@ -5835,23 +5784,23 @@
 
 
   /** @domName SVGPointList.getItem */
-  SVGPoint getItem(int index) native "SVGPointList_getItem_Callback";
+  Point getItem(int index) native "SVGPointList_getItem_Callback";
 
 
   /** @domName SVGPointList.initialize */
-  SVGPoint initialize(SVGPoint item) native "SVGPointList_initialize_Callback";
+  Point initialize(Point item) native "SVGPointList_initialize_Callback";
 
 
   /** @domName SVGPointList.insertItemBefore */
-  SVGPoint insertItemBefore(SVGPoint item, int index) native "SVGPointList_insertItemBefore_Callback";
+  Point insertItemBefore(Point item, int index) native "SVGPointList_insertItemBefore_Callback";
 
 
   /** @domName SVGPointList.removeItem */
-  SVGPoint removeItem(int index) native "SVGPointList_removeItem_Callback";
+  Point removeItem(int index) native "SVGPointList_removeItem_Callback";
 
 
   /** @domName SVGPointList.replaceItem */
-  SVGPoint replaceItem(SVGPoint item, int index) native "SVGPointList_replaceItem_Callback";
+  Point replaceItem(Point item, int index) native "SVGPointList_replaceItem_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5862,20 +5811,22 @@
 
 
 /// @domName SVGPolygonElement
-class SVGPolygonElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
-  SVGPolygonElement.internal(): super.internal();
+class PolygonElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
+
+  factory PolygonElement() => _SvgElementFactoryProvider.createSvgElement_tag("polygon");
+  PolygonElement.internal(): super.internal();
 
 
   /** @domName SVGPolygonElement.animatedPoints */
-  SVGPointList get animatedPoints native "SVGPolygonElement_animatedPoints_Getter";
+  PointList get animatedPoints native "SVGPolygonElement_animatedPoints_Getter";
 
 
   /** @domName SVGPolygonElement.points */
-  SVGPointList get points native "SVGPolygonElement_points_Getter";
+  PointList get points native "SVGPolygonElement_points_Getter";
 
 
   /** @domName SVGPolygonElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGPolygonElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGPolygonElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGPolygonElement.xmllang */
@@ -5895,31 +5846,31 @@
 
 
   /** @domName SVGPolygonElement.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGPolygonElement_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGPolygonElement_farthestViewportElement_Getter";
 
 
   /** @domName SVGPolygonElement.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGPolygonElement_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGPolygonElement_nearestViewportElement_Getter";
 
 
   /** @domName SVGPolygonElement.getBBox */
-  SVGRect getBBox() native "SVGPolygonElement_getBBox_Callback";
+  Rect getBBox() native "SVGPolygonElement_getBBox_Callback";
 
 
   /** @domName SVGPolygonElement.getCTM */
-  SVGMatrix getCTM() native "SVGPolygonElement_getCTM_Callback";
+  Matrix getCTM() native "SVGPolygonElement_getCTM_Callback";
 
 
   /** @domName SVGPolygonElement.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGPolygonElement_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGPolygonElement_getScreenCTM_Callback";
 
 
   /** @domName SVGPolygonElement.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGPolygonElement_getTransformToElement_Callback";
+  Matrix getTransformToElement(SvgElement element) native "SVGPolygonElement_getTransformToElement_Callback";
 
 
   /** @domName SVGPolygonElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGPolygonElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGPolygonElement_className_Getter";
 
 
   /** @domName SVGPolygonElement.style */
@@ -5931,15 +5882,15 @@
 
 
   /** @domName SVGPolygonElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGPolygonElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGPolygonElement_requiredExtensions_Getter";
 
 
   /** @domName SVGPolygonElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGPolygonElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGPolygonElement_requiredFeatures_Getter";
 
 
   /** @domName SVGPolygonElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGPolygonElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGPolygonElement_systemLanguage_Getter";
 
 
   /** @domName SVGPolygonElement.hasExtension */
@@ -5947,7 +5898,7 @@
 
 
   /** @domName SVGPolygonElement.transform */
-  SVGAnimatedTransformList get transform native "SVGPolygonElement_transform_Getter";
+  AnimatedTransformList get transform native "SVGPolygonElement_transform_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5958,20 +5909,22 @@
 
 
 /// @domName SVGPolylineElement
-class SVGPolylineElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
-  SVGPolylineElement.internal(): super.internal();
+class PolylineElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
+
+  factory PolylineElement() => _SvgElementFactoryProvider.createSvgElement_tag("polyline");
+  PolylineElement.internal(): super.internal();
 
 
   /** @domName SVGPolylineElement.animatedPoints */
-  SVGPointList get animatedPoints native "SVGPolylineElement_animatedPoints_Getter";
+  PointList get animatedPoints native "SVGPolylineElement_animatedPoints_Getter";
 
 
   /** @domName SVGPolylineElement.points */
-  SVGPointList get points native "SVGPolylineElement_points_Getter";
+  PointList get points native "SVGPolylineElement_points_Getter";
 
 
   /** @domName SVGPolylineElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGPolylineElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGPolylineElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGPolylineElement.xmllang */
@@ -5991,31 +5944,31 @@
 
 
   /** @domName SVGPolylineElement.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGPolylineElement_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGPolylineElement_farthestViewportElement_Getter";
 
 
   /** @domName SVGPolylineElement.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGPolylineElement_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGPolylineElement_nearestViewportElement_Getter";
 
 
   /** @domName SVGPolylineElement.getBBox */
-  SVGRect getBBox() native "SVGPolylineElement_getBBox_Callback";
+  Rect getBBox() native "SVGPolylineElement_getBBox_Callback";
 
 
   /** @domName SVGPolylineElement.getCTM */
-  SVGMatrix getCTM() native "SVGPolylineElement_getCTM_Callback";
+  Matrix getCTM() native "SVGPolylineElement_getCTM_Callback";
 
 
   /** @domName SVGPolylineElement.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGPolylineElement_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGPolylineElement_getScreenCTM_Callback";
 
 
   /** @domName SVGPolylineElement.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGPolylineElement_getTransformToElement_Callback";
+  Matrix getTransformToElement(SvgElement element) native "SVGPolylineElement_getTransformToElement_Callback";
 
 
   /** @domName SVGPolylineElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGPolylineElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGPolylineElement_className_Getter";
 
 
   /** @domName SVGPolylineElement.style */
@@ -6027,15 +5980,15 @@
 
 
   /** @domName SVGPolylineElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGPolylineElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGPolylineElement_requiredExtensions_Getter";
 
 
   /** @domName SVGPolylineElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGPolylineElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGPolylineElement_requiredFeatures_Getter";
 
 
   /** @domName SVGPolylineElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGPolylineElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGPolylineElement_systemLanguage_Getter";
 
 
   /** @domName SVGPolylineElement.hasExtension */
@@ -6043,7 +5996,7 @@
 
 
   /** @domName SVGPolylineElement.transform */
-  SVGAnimatedTransformList get transform native "SVGPolylineElement_transform_Getter";
+  AnimatedTransformList get transform native "SVGPolylineElement_transform_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6054,8 +6007,8 @@
 
 
 /// @domName SVGPreserveAspectRatio
-class SVGPreserveAspectRatio extends NativeFieldWrapperClass1 {
-  SVGPreserveAspectRatio.internal();
+class PreserveAspectRatio extends NativeFieldWrapperClass1 {
+  PreserveAspectRatio.internal();
 
   static const int SVG_MEETORSLICE_MEET = 1;
 
@@ -6110,32 +6063,34 @@
 
 
 /// @domName SVGRadialGradientElement
-class SVGRadialGradientElement extends SVGGradientElement {
-  SVGRadialGradientElement.internal(): super.internal();
+class RadialGradientElement extends GradientElement {
+
+  factory RadialGradientElement() => _SvgElementFactoryProvider.createSvgElement_tag("radialGradient");
+  RadialGradientElement.internal(): super.internal();
 
 
   /** @domName SVGRadialGradientElement.cx */
-  SVGAnimatedLength get cx native "SVGRadialGradientElement_cx_Getter";
+  AnimatedLength get cx native "SVGRadialGradientElement_cx_Getter";
 
 
   /** @domName SVGRadialGradientElement.cy */
-  SVGAnimatedLength get cy native "SVGRadialGradientElement_cy_Getter";
+  AnimatedLength get cy native "SVGRadialGradientElement_cy_Getter";
 
 
   /** @domName SVGRadialGradientElement.fr */
-  SVGAnimatedLength get fr native "SVGRadialGradientElement_fr_Getter";
+  AnimatedLength get fr native "SVGRadialGradientElement_fr_Getter";
 
 
   /** @domName SVGRadialGradientElement.fx */
-  SVGAnimatedLength get fx native "SVGRadialGradientElement_fx_Getter";
+  AnimatedLength get fx native "SVGRadialGradientElement_fx_Getter";
 
 
   /** @domName SVGRadialGradientElement.fy */
-  SVGAnimatedLength get fy native "SVGRadialGradientElement_fy_Getter";
+  AnimatedLength get fy native "SVGRadialGradientElement_fy_Getter";
 
 
   /** @domName SVGRadialGradientElement.r */
-  SVGAnimatedLength get r native "SVGRadialGradientElement_r_Getter";
+  AnimatedLength get r native "SVGRadialGradientElement_r_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6146,8 +6101,8 @@
 
 
 /// @domName SVGRect
-class SVGRect extends NativeFieldWrapperClass1 {
-  SVGRect.internal();
+class Rect extends NativeFieldWrapperClass1 {
+  Rect.internal();
 
 
   /** @domName SVGRect.height */
@@ -6190,36 +6145,38 @@
 
 
 /// @domName SVGRectElement
-class SVGRectElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
-  SVGRectElement.internal(): super.internal();
+class RectElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
+
+  factory RectElement() => _SvgElementFactoryProvider.createSvgElement_tag("rect");
+  RectElement.internal(): super.internal();
 
 
   /** @domName SVGRectElement.height */
-  SVGAnimatedLength get height native "SVGRectElement_height_Getter";
+  AnimatedLength get height native "SVGRectElement_height_Getter";
 
 
   /** @domName SVGRectElement.rx */
-  SVGAnimatedLength get rx native "SVGRectElement_rx_Getter";
+  AnimatedLength get rx native "SVGRectElement_rx_Getter";
 
 
   /** @domName SVGRectElement.ry */
-  SVGAnimatedLength get ry native "SVGRectElement_ry_Getter";
+  AnimatedLength get ry native "SVGRectElement_ry_Getter";
 
 
   /** @domName SVGRectElement.width */
-  SVGAnimatedLength get width native "SVGRectElement_width_Getter";
+  AnimatedLength get width native "SVGRectElement_width_Getter";
 
 
   /** @domName SVGRectElement.x */
-  SVGAnimatedLength get x native "SVGRectElement_x_Getter";
+  AnimatedLength get x native "SVGRectElement_x_Getter";
 
 
   /** @domName SVGRectElement.y */
-  SVGAnimatedLength get y native "SVGRectElement_y_Getter";
+  AnimatedLength get y native "SVGRectElement_y_Getter";
 
 
   /** @domName SVGRectElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGRectElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGRectElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGRectElement.xmllang */
@@ -6239,31 +6196,31 @@
 
 
   /** @domName SVGRectElement.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGRectElement_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGRectElement_farthestViewportElement_Getter";
 
 
   /** @domName SVGRectElement.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGRectElement_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGRectElement_nearestViewportElement_Getter";
 
 
   /** @domName SVGRectElement.getBBox */
-  SVGRect getBBox() native "SVGRectElement_getBBox_Callback";
+  Rect getBBox() native "SVGRectElement_getBBox_Callback";
 
 
   /** @domName SVGRectElement.getCTM */
-  SVGMatrix getCTM() native "SVGRectElement_getCTM_Callback";
+  Matrix getCTM() native "SVGRectElement_getCTM_Callback";
 
 
   /** @domName SVGRectElement.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGRectElement_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGRectElement_getScreenCTM_Callback";
 
 
   /** @domName SVGRectElement.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGRectElement_getTransformToElement_Callback";
+  Matrix getTransformToElement(SvgElement element) native "SVGRectElement_getTransformToElement_Callback";
 
 
   /** @domName SVGRectElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGRectElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGRectElement_className_Getter";
 
 
   /** @domName SVGRectElement.style */
@@ -6275,15 +6232,15 @@
 
 
   /** @domName SVGRectElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGRectElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGRectElement_requiredExtensions_Getter";
 
 
   /** @domName SVGRectElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGRectElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGRectElement_requiredFeatures_Getter";
 
 
   /** @domName SVGRectElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGRectElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGRectElement_systemLanguage_Getter";
 
 
   /** @domName SVGRectElement.hasExtension */
@@ -6291,7 +6248,7 @@
 
 
   /** @domName SVGRectElement.transform */
-  SVGAnimatedTransformList get transform native "SVGRectElement_transform_Getter";
+  AnimatedTransformList get transform native "SVGRectElement_transform_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6302,8 +6259,8 @@
 
 
 /// @domName SVGRenderingIntent
-class SVGRenderingIntent extends NativeFieldWrapperClass1 {
-  SVGRenderingIntent.internal();
+class RenderingIntent extends NativeFieldWrapperClass1 {
+  RenderingIntent.internal();
 
   static const int RENDERING_INTENT_ABSOLUTE_COLORIMETRIC = 5;
 
@@ -6322,275 +6279,14 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-
-class SVGSVGElement extends SVGElement implements SVGZoomAndPan, SVGLocatable, SVGLangSpace, SVGTests, SVGStylable, SVGFitToViewBox, SVGExternalResourcesRequired {
-  factory SVGSVGElement() => _SVGSVGElementFactoryProvider.createSVGSVGElement();
-
-  SVGSVGElement.internal(): super.internal();
-
-
-  /** @domName SVGSVGElement.contentScriptType */
-  String get contentScriptType native "SVGSVGElement_contentScriptType_Getter";
-
-
-  /** @domName SVGSVGElement.contentScriptType */
-  void set contentScriptType(String value) native "SVGSVGElement_contentScriptType_Setter";
-
-
-  /** @domName SVGSVGElement.contentStyleType */
-  String get contentStyleType native "SVGSVGElement_contentStyleType_Getter";
-
-
-  /** @domName SVGSVGElement.contentStyleType */
-  void set contentStyleType(String value) native "SVGSVGElement_contentStyleType_Setter";
-
-
-  /** @domName SVGSVGElement.currentScale */
-  num get currentScale native "SVGSVGElement_currentScale_Getter";
-
-
-  /** @domName SVGSVGElement.currentScale */
-  void set currentScale(num value) native "SVGSVGElement_currentScale_Setter";
-
-
-  /** @domName SVGSVGElement.currentTranslate */
-  SVGPoint get currentTranslate native "SVGSVGElement_currentTranslate_Getter";
-
-
-  /** @domName SVGSVGElement.currentView */
-  SVGViewSpec get currentView native "SVGSVGElement_currentView_Getter";
-
-
-  /** @domName SVGSVGElement.height */
-  SVGAnimatedLength get height native "SVGSVGElement_height_Getter";
-
-
-  /** @domName SVGSVGElement.pixelUnitToMillimeterX */
-  num get pixelUnitToMillimeterX native "SVGSVGElement_pixelUnitToMillimeterX_Getter";
-
-
-  /** @domName SVGSVGElement.pixelUnitToMillimeterY */
-  num get pixelUnitToMillimeterY native "SVGSVGElement_pixelUnitToMillimeterY_Getter";
-
-
-  /** @domName SVGSVGElement.screenPixelToMillimeterX */
-  num get screenPixelToMillimeterX native "SVGSVGElement_screenPixelToMillimeterX_Getter";
-
-
-  /** @domName SVGSVGElement.screenPixelToMillimeterY */
-  num get screenPixelToMillimeterY native "SVGSVGElement_screenPixelToMillimeterY_Getter";
-
-
-  /** @domName SVGSVGElement.useCurrentView */
-  bool get useCurrentView native "SVGSVGElement_useCurrentView_Getter";
-
-
-  /** @domName SVGSVGElement.viewport */
-  SVGRect get viewport native "SVGSVGElement_viewport_Getter";
-
-
-  /** @domName SVGSVGElement.width */
-  SVGAnimatedLength get width native "SVGSVGElement_width_Getter";
-
-
-  /** @domName SVGSVGElement.x */
-  SVGAnimatedLength get x native "SVGSVGElement_x_Getter";
-
-
-  /** @domName SVGSVGElement.y */
-  SVGAnimatedLength get y native "SVGSVGElement_y_Getter";
-
-
-  /** @domName SVGSVGElement.animationsPaused */
-  bool animationsPaused() native "SVGSVGElement_animationsPaused_Callback";
-
-
-  /** @domName SVGSVGElement.checkEnclosure */
-  bool checkEnclosure(SVGElement element, SVGRect rect) native "SVGSVGElement_checkEnclosure_Callback";
-
-
-  /** @domName SVGSVGElement.checkIntersection */
-  bool checkIntersection(SVGElement element, SVGRect rect) native "SVGSVGElement_checkIntersection_Callback";
-
-
-  /** @domName SVGSVGElement.createSVGAngle */
-  SVGAngle createSVGAngle() native "SVGSVGElement_createSVGAngle_Callback";
-
-
-  /** @domName SVGSVGElement.createSVGLength */
-  SVGLength createSVGLength() native "SVGSVGElement_createSVGLength_Callback";
-
-
-  /** @domName SVGSVGElement.createSVGMatrix */
-  SVGMatrix createSVGMatrix() native "SVGSVGElement_createSVGMatrix_Callback";
-
-
-  /** @domName SVGSVGElement.createSVGNumber */
-  SVGNumber createSVGNumber() native "SVGSVGElement_createSVGNumber_Callback";
-
-
-  /** @domName SVGSVGElement.createSVGPoint */
-  SVGPoint createSVGPoint() native "SVGSVGElement_createSVGPoint_Callback";
-
-
-  /** @domName SVGSVGElement.createSVGRect */
-  SVGRect createSVGRect() native "SVGSVGElement_createSVGRect_Callback";
-
-
-  /** @domName SVGSVGElement.createSVGTransform */
-  SVGTransform createSVGTransform() native "SVGSVGElement_createSVGTransform_Callback";
-
-
-  /** @domName SVGSVGElement.createSVGTransformFromMatrix */
-  SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix) native "SVGSVGElement_createSVGTransformFromMatrix_Callback";
-
-
-  /** @domName SVGSVGElement.deselectAll */
-  void deselectAll() native "SVGSVGElement_deselectAll_Callback";
-
-
-  /** @domName SVGSVGElement.forceRedraw */
-  void forceRedraw() native "SVGSVGElement_forceRedraw_Callback";
-
-
-  /** @domName SVGSVGElement.getCurrentTime */
-  num getCurrentTime() native "SVGSVGElement_getCurrentTime_Callback";
-
-
-  /** @domName SVGSVGElement.getElementById */
-  Element getElementById(String elementId) native "SVGSVGElement_getElementById_Callback";
-
-
-  /** @domName SVGSVGElement.getEnclosureList */
-  List<Node> getEnclosureList(SVGRect rect, SVGElement referenceElement) native "SVGSVGElement_getEnclosureList_Callback";
-
-
-  /** @domName SVGSVGElement.getIntersectionList */
-  List<Node> getIntersectionList(SVGRect rect, SVGElement referenceElement) native "SVGSVGElement_getIntersectionList_Callback";
-
-
-  /** @domName SVGSVGElement.pauseAnimations */
-  void pauseAnimations() native "SVGSVGElement_pauseAnimations_Callback";
-
-
-  /** @domName SVGSVGElement.setCurrentTime */
-  void setCurrentTime(num seconds) native "SVGSVGElement_setCurrentTime_Callback";
-
-
-  /** @domName SVGSVGElement.suspendRedraw */
-  int suspendRedraw(int maxWaitMilliseconds) native "SVGSVGElement_suspendRedraw_Callback";
-
-
-  /** @domName SVGSVGElement.unpauseAnimations */
-  void unpauseAnimations() native "SVGSVGElement_unpauseAnimations_Callback";
-
-
-  /** @domName SVGSVGElement.unsuspendRedraw */
-  void unsuspendRedraw(int suspendHandleId) native "SVGSVGElement_unsuspendRedraw_Callback";
-
-
-  /** @domName SVGSVGElement.unsuspendRedrawAll */
-  void unsuspendRedrawAll() native "SVGSVGElement_unsuspendRedrawAll_Callback";
-
-
-  /** @domName SVGSVGElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGSVGElement_externalResourcesRequired_Getter";
-
-
-  /** @domName SVGSVGElement.preserveAspectRatio */
-  SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGSVGElement_preserveAspectRatio_Getter";
-
-
-  /** @domName SVGSVGElement.viewBox */
-  SVGAnimatedRect get viewBox native "SVGSVGElement_viewBox_Getter";
-
-
-  /** @domName SVGSVGElement.xmllang */
-  String get xmllang native "SVGSVGElement_xmllang_Getter";
-
-
-  /** @domName SVGSVGElement.xmllang */
-  void set xmllang(String value) native "SVGSVGElement_xmllang_Setter";
-
-
-  /** @domName SVGSVGElement.xmlspace */
-  String get xmlspace native "SVGSVGElement_xmlspace_Getter";
-
-
-  /** @domName SVGSVGElement.xmlspace */
-  void set xmlspace(String value) native "SVGSVGElement_xmlspace_Setter";
-
-
-  /** @domName SVGSVGElement.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGSVGElement_farthestViewportElement_Getter";
-
-
-  /** @domName SVGSVGElement.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGSVGElement_nearestViewportElement_Getter";
-
-
-  /** @domName SVGSVGElement.getBBox */
-  SVGRect getBBox() native "SVGSVGElement_getBBox_Callback";
-
-
-  /** @domName SVGSVGElement.getCTM */
-  SVGMatrix getCTM() native "SVGSVGElement_getCTM_Callback";
-
-
-  /** @domName SVGSVGElement.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGSVGElement_getScreenCTM_Callback";
-
-
-  /** @domName SVGSVGElement.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGSVGElement_getTransformToElement_Callback";
-
-
-  /** @domName SVGSVGElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGSVGElement_className_Getter";
-
-
-  /** @domName SVGSVGElement.style */
-  CSSStyleDeclaration get style native "SVGSVGElement_style_Getter";
-
-
-  /** @domName SVGSVGElement.getPresentationAttribute */
-  CSSValue getPresentationAttribute(String name) native "SVGSVGElement_getPresentationAttribute_Callback";
-
-
-  /** @domName SVGSVGElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGSVGElement_requiredExtensions_Getter";
-
-
-  /** @domName SVGSVGElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGSVGElement_requiredFeatures_Getter";
-
-
-  /** @domName SVGSVGElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGSVGElement_systemLanguage_Getter";
-
-
-  /** @domName SVGSVGElement.hasExtension */
-  bool hasExtension(String extension) native "SVGSVGElement_hasExtension_Callback";
-
-
-  /** @domName SVGSVGElement.zoomAndPan */
-  int get zoomAndPan native "SVGSVGElement_zoomAndPan_Getter";
-
-
-  /** @domName SVGSVGElement.zoomAndPan */
-  void set zoomAndPan(int value) native "SVGSVGElement_zoomAndPan_Setter";
-
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
 // WARNING: Do not edit - generated code.
 
 
 /// @domName SVGScriptElement
-class SVGScriptElement extends SVGElement implements SVGURIReference, SVGExternalResourcesRequired {
-  SVGScriptElement.internal(): super.internal();
+class ScriptElement extends SvgElement implements UriReference, ExternalResourcesRequired {
+
+  factory ScriptElement() => _SvgElementFactoryProvider.createSvgElement_tag("script");
+  ScriptElement.internal(): super.internal();
 
 
   /** @domName SVGScriptElement.type */
@@ -6602,11 +6298,11 @@
 
 
   /** @domName SVGScriptElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGScriptElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGScriptElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGScriptElement.href */
-  SVGAnimatedString get href native "SVGScriptElement_href_Getter";
+  AnimatedString get href native "SVGScriptElement_href_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6617,8 +6313,10 @@
 
 
 /// @domName SVGSetElement
-class SVGSetElement extends SVGAnimationElement {
-  SVGSetElement.internal(): super.internal();
+class SetElement extends AnimationElement {
+
+  factory SetElement() => _SvgElementFactoryProvider.createSvgElement_tag("set");
+  SetElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6629,16 +6327,18 @@
 
 
 /// @domName SVGStopElement
-class SVGStopElement extends SVGElement implements SVGStylable {
-  SVGStopElement.internal(): super.internal();
+class StopElement extends SvgElement implements Stylable {
+
+  factory StopElement() => _SvgElementFactoryProvider.createSvgElement_tag("stop");
+  StopElement.internal(): super.internal();
 
 
   /** @domName SVGStopElement.offset */
-  SVGAnimatedNumber get offset native "SVGStopElement_offset_Getter";
+  AnimatedNumber get offset native "SVGStopElement_offset_Getter";
 
 
   /** @domName SVGStopElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGStopElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGStopElement_className_Getter";
 
 
   /** @domName SVGStopElement.style */
@@ -6657,8 +6357,8 @@
 
 
 /// @domName SVGStringList
-class SVGStringList extends NativeFieldWrapperClass1 implements List<String> {
-  SVGStringList.internal();
+class StringList extends NativeFieldWrapperClass1 implements List<String> {
+  StringList.internal();
 
 
   /** @domName SVGStringList.numberOfItems */
@@ -6724,6 +6424,8 @@
     return _Lists.lastIndexOf(this, element, start);
   }
 
+  String get first => this[0];
+
   String get last => this[length - 1];
 
   String removeLast() {
@@ -6784,12 +6486,12 @@
 
 
 /// @domName SVGStylable
-class SVGStylable extends NativeFieldWrapperClass1 {
-  SVGStylable.internal();
+class Stylable extends NativeFieldWrapperClass1 {
+  Stylable.internal();
 
 
   /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGStylable_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGStylable_className_Getter";
 
 
   /** @domName SVGStylable.style */
@@ -6808,8 +6510,10 @@
 
 
 /// @domName SVGStyleElement
-class SVGStyleElement extends SVGElement implements SVGLangSpace {
-  SVGStyleElement.internal(): super.internal();
+class StyleElement extends SvgElement implements LangSpace {
+
+  factory StyleElement() => _SvgElementFactoryProvider.createSvgElement_tag("style");
+  StyleElement.internal(): super.internal();
 
 
   /** @domName SVGStyleElement.disabled */
@@ -6867,13 +6571,409 @@
 // WARNING: Do not edit - generated code.
 
 
+/// @domName SVGDocument
+class SvgDocument extends Document {
+  SvgDocument.internal(): super.internal();
+
+
+  /** @domName SVGDocument.rootElement */
+  SvgSvgElement get rootElement native "SVGDocument_rootElement_Getter";
+
+
+  /** @domName SVGDocument.createEvent */
+  Event $dom_createEvent(String eventType) native "SVGDocument_createEvent_Callback";
+
+}
+// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+
+class _AttributeClassSet extends CssClassSet {
+  final Element _element;
+
+  _AttributeClassSet(this._element);
+
+  Set<String> readClasses() {
+    var classname = _element.attributes['class'];
+
+    Set<String> s = new Set<String>();
+    if (classname == null) {
+      return s;
+    }
+    for (String name in classname.split(' ')) {
+      String trimmed = name.trim();
+      if (!trimmed.isEmpty) {
+        s.add(trimmed);
+      }
+    }
+    return s;
+  }
+
+  void writeClasses(Set s) {
+    List list = new List.from(s);
+    _element.attributes['class'] = Strings.join(list, ' ');
+  }
+}
+
+class SvgElement extends Element {
+  factory SvgElement.tag(String tag) =>
+      _SvgElementFactoryProvider.createSvgElement_tag(tag);
+  factory SvgElement.svg(String svg) =>
+      _SvgElementFactoryProvider.createSvgElement_svg(svg);
+
+  _AttributeClassSet _cssClassSet;
+  CssClassSet get classes {
+    if (_cssClassSet == null) {
+      _cssClassSet = new _AttributeClassSet(this);
+    }
+    return _cssClassSet;
+  }
+
+  List<Element> get elements => new FilteredElementList(this);
+
+  void set elements(Collection<Element> value) {
+    final elements = this.elements;
+    elements.clear();
+    elements.addAll(value);
+  }
+
+  List<Element> get children => new FilteredElementList(this);
+
+  void set children(Collection<Element> value) {
+    final children = this.children;
+    children.clear();
+    children.addAll(value);
+  }
+
+  String get outerHTML {
+    final container = new Element.tag("div");
+    final SvgElement cloned = this.clone(true);
+    container.children.add(cloned);
+    return container.innerHTML;
+  }
+
+  String get innerHTML {
+    final container = new Element.tag("div");
+    final SvgElement cloned = this.clone(true);
+    container.children.addAll(cloned.children);
+    return container.innerHTML;
+  }
+
+  void set innerHTML(String svg) {
+    final container = new Element.tag("div");
+    // Wrap the SVG string in <svg> so that SvgElements are created, rather than
+    // HTMLElements.
+    container.innerHTML = '<svg version="1.1">$svg</svg>';
+    this.children = container.children[0].children;
+  }
+
+  SvgElement.internal(): super.internal();
+
+
+  /** @domName SVGElement.id */
+  String get id native "SVGElement_id_Getter";
+
+
+  /** @domName SVGElement.id */
+  void set id(String value) native "SVGElement_id_Setter";
+
+
+  /** @domName SVGElement.ownerSVGElement */
+  SvgSvgElement get ownerSVGElement native "SVGElement_ownerSVGElement_Getter";
+
+
+  /** @domName SVGElement.viewportElement */
+  SvgElement get viewportElement native "SVGElement_viewportElement_Getter";
+
+
+  /** @domName SVGElement.xmlbase */
+  String get xmlbase native "SVGElement_xmlbase_Getter";
+
+
+  /** @domName SVGElement.xmlbase */
+  void set xmlbase(String value) native "SVGElement_xmlbase_Setter";
+
+}
+// Copyright (c) 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.
+
+
+class SvgSvgElement extends SvgElement implements FitToViewBox, Tests, Stylable, Locatable, ExternalResourcesRequired, ZoomAndPan, LangSpace {
+  factory SvgSvgElement() => _SvgSvgElementFactoryProvider.createSvgSvgElement();
+
+  SvgSvgElement.internal(): super.internal();
+
+
+  /** @domName SVGSVGElement.contentScriptType */
+  String get contentScriptType native "SVGSVGElement_contentScriptType_Getter";
+
+
+  /** @domName SVGSVGElement.contentScriptType */
+  void set contentScriptType(String value) native "SVGSVGElement_contentScriptType_Setter";
+
+
+  /** @domName SVGSVGElement.contentStyleType */
+  String get contentStyleType native "SVGSVGElement_contentStyleType_Getter";
+
+
+  /** @domName SVGSVGElement.contentStyleType */
+  void set contentStyleType(String value) native "SVGSVGElement_contentStyleType_Setter";
+
+
+  /** @domName SVGSVGElement.currentScale */
+  num get currentScale native "SVGSVGElement_currentScale_Getter";
+
+
+  /** @domName SVGSVGElement.currentScale */
+  void set currentScale(num value) native "SVGSVGElement_currentScale_Setter";
+
+
+  /** @domName SVGSVGElement.currentTranslate */
+  Point get currentTranslate native "SVGSVGElement_currentTranslate_Getter";
+
+
+  /** @domName SVGSVGElement.currentView */
+  ViewSpec get currentView native "SVGSVGElement_currentView_Getter";
+
+
+  /** @domName SVGSVGElement.height */
+  AnimatedLength get height native "SVGSVGElement_height_Getter";
+
+
+  /** @domName SVGSVGElement.pixelUnitToMillimeterX */
+  num get pixelUnitToMillimeterX native "SVGSVGElement_pixelUnitToMillimeterX_Getter";
+
+
+  /** @domName SVGSVGElement.pixelUnitToMillimeterY */
+  num get pixelUnitToMillimeterY native "SVGSVGElement_pixelUnitToMillimeterY_Getter";
+
+
+  /** @domName SVGSVGElement.screenPixelToMillimeterX */
+  num get screenPixelToMillimeterX native "SVGSVGElement_screenPixelToMillimeterX_Getter";
+
+
+  /** @domName SVGSVGElement.screenPixelToMillimeterY */
+  num get screenPixelToMillimeterY native "SVGSVGElement_screenPixelToMillimeterY_Getter";
+
+
+  /** @domName SVGSVGElement.useCurrentView */
+  bool get useCurrentView native "SVGSVGElement_useCurrentView_Getter";
+
+
+  /** @domName SVGSVGElement.viewport */
+  Rect get viewport native "SVGSVGElement_viewport_Getter";
+
+
+  /** @domName SVGSVGElement.width */
+  AnimatedLength get width native "SVGSVGElement_width_Getter";
+
+
+  /** @domName SVGSVGElement.x */
+  AnimatedLength get x native "SVGSVGElement_x_Getter";
+
+
+  /** @domName SVGSVGElement.y */
+  AnimatedLength get y native "SVGSVGElement_y_Getter";
+
+
+  /** @domName SVGSVGElement.animationsPaused */
+  bool animationsPaused() native "SVGSVGElement_animationsPaused_Callback";
+
+
+  /** @domName SVGSVGElement.checkEnclosure */
+  bool checkEnclosure(SvgElement element, Rect rect) native "SVGSVGElement_checkEnclosure_Callback";
+
+
+  /** @domName SVGSVGElement.checkIntersection */
+  bool checkIntersection(SvgElement element, Rect rect) native "SVGSVGElement_checkIntersection_Callback";
+
+
+  /** @domName SVGSVGElement.createSVGAngle */
+  Angle createSVGAngle() native "SVGSVGElement_createSVGAngle_Callback";
+
+
+  /** @domName SVGSVGElement.createSVGLength */
+  Length createSVGLength() native "SVGSVGElement_createSVGLength_Callback";
+
+
+  /** @domName SVGSVGElement.createSVGMatrix */
+  Matrix createSVGMatrix() native "SVGSVGElement_createSVGMatrix_Callback";
+
+
+  /** @domName SVGSVGElement.createSVGNumber */
+  Number createSVGNumber() native "SVGSVGElement_createSVGNumber_Callback";
+
+
+  /** @domName SVGSVGElement.createSVGPoint */
+  Point createSVGPoint() native "SVGSVGElement_createSVGPoint_Callback";
+
+
+  /** @domName SVGSVGElement.createSVGRect */
+  Rect createSVGRect() native "SVGSVGElement_createSVGRect_Callback";
+
+
+  /** @domName SVGSVGElement.createSVGTransform */
+  Transform createSVGTransform() native "SVGSVGElement_createSVGTransform_Callback";
+
+
+  /** @domName SVGSVGElement.createSVGTransformFromMatrix */
+  Transform createSVGTransformFromMatrix(Matrix matrix) native "SVGSVGElement_createSVGTransformFromMatrix_Callback";
+
+
+  /** @domName SVGSVGElement.deselectAll */
+  void deselectAll() native "SVGSVGElement_deselectAll_Callback";
+
+
+  /** @domName SVGSVGElement.forceRedraw */
+  void forceRedraw() native "SVGSVGElement_forceRedraw_Callback";
+
+
+  /** @domName SVGSVGElement.getCurrentTime */
+  num getCurrentTime() native "SVGSVGElement_getCurrentTime_Callback";
+
+
+  /** @domName SVGSVGElement.getElementById */
+  Element getElementById(String elementId) native "SVGSVGElement_getElementById_Callback";
+
+
+  /** @domName SVGSVGElement.getEnclosureList */
+  List<Node> getEnclosureList(Rect rect, SvgElement referenceElement) native "SVGSVGElement_getEnclosureList_Callback";
+
+
+  /** @domName SVGSVGElement.getIntersectionList */
+  List<Node> getIntersectionList(Rect rect, SvgElement referenceElement) native "SVGSVGElement_getIntersectionList_Callback";
+
+
+  /** @domName SVGSVGElement.pauseAnimations */
+  void pauseAnimations() native "SVGSVGElement_pauseAnimations_Callback";
+
+
+  /** @domName SVGSVGElement.setCurrentTime */
+  void setCurrentTime(num seconds) native "SVGSVGElement_setCurrentTime_Callback";
+
+
+  /** @domName SVGSVGElement.suspendRedraw */
+  int suspendRedraw(int maxWaitMilliseconds) native "SVGSVGElement_suspendRedraw_Callback";
+
+
+  /** @domName SVGSVGElement.unpauseAnimations */
+  void unpauseAnimations() native "SVGSVGElement_unpauseAnimations_Callback";
+
+
+  /** @domName SVGSVGElement.unsuspendRedraw */
+  void unsuspendRedraw(int suspendHandleId) native "SVGSVGElement_unsuspendRedraw_Callback";
+
+
+  /** @domName SVGSVGElement.unsuspendRedrawAll */
+  void unsuspendRedrawAll() native "SVGSVGElement_unsuspendRedrawAll_Callback";
+
+
+  /** @domName SVGSVGElement.externalResourcesRequired */
+  AnimatedBoolean get externalResourcesRequired native "SVGSVGElement_externalResourcesRequired_Getter";
+
+
+  /** @domName SVGSVGElement.preserveAspectRatio */
+  AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGSVGElement_preserveAspectRatio_Getter";
+
+
+  /** @domName SVGSVGElement.viewBox */
+  AnimatedRect get viewBox native "SVGSVGElement_viewBox_Getter";
+
+
+  /** @domName SVGSVGElement.xmllang */
+  String get xmllang native "SVGSVGElement_xmllang_Getter";
+
+
+  /** @domName SVGSVGElement.xmllang */
+  void set xmllang(String value) native "SVGSVGElement_xmllang_Setter";
+
+
+  /** @domName SVGSVGElement.xmlspace */
+  String get xmlspace native "SVGSVGElement_xmlspace_Getter";
+
+
+  /** @domName SVGSVGElement.xmlspace */
+  void set xmlspace(String value) native "SVGSVGElement_xmlspace_Setter";
+
+
+  /** @domName SVGSVGElement.farthestViewportElement */
+  SvgElement get farthestViewportElement native "SVGSVGElement_farthestViewportElement_Getter";
+
+
+  /** @domName SVGSVGElement.nearestViewportElement */
+  SvgElement get nearestViewportElement native "SVGSVGElement_nearestViewportElement_Getter";
+
+
+  /** @domName SVGSVGElement.getBBox */
+  Rect getBBox() native "SVGSVGElement_getBBox_Callback";
+
+
+  /** @domName SVGSVGElement.getCTM */
+  Matrix getCTM() native "SVGSVGElement_getCTM_Callback";
+
+
+  /** @domName SVGSVGElement.getScreenCTM */
+  Matrix getScreenCTM() native "SVGSVGElement_getScreenCTM_Callback";
+
+
+  /** @domName SVGSVGElement.getTransformToElement */
+  Matrix getTransformToElement(SvgElement element) native "SVGSVGElement_getTransformToElement_Callback";
+
+
+  /** @domName SVGSVGElement.className */
+  AnimatedString get $dom_svgClassName native "SVGSVGElement_className_Getter";
+
+
+  /** @domName SVGSVGElement.style */
+  CSSStyleDeclaration get style native "SVGSVGElement_style_Getter";
+
+
+  /** @domName SVGSVGElement.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native "SVGSVGElement_getPresentationAttribute_Callback";
+
+
+  /** @domName SVGSVGElement.requiredExtensions */
+  StringList get requiredExtensions native "SVGSVGElement_requiredExtensions_Getter";
+
+
+  /** @domName SVGSVGElement.requiredFeatures */
+  StringList get requiredFeatures native "SVGSVGElement_requiredFeatures_Getter";
+
+
+  /** @domName SVGSVGElement.systemLanguage */
+  StringList get systemLanguage native "SVGSVGElement_systemLanguage_Getter";
+
+
+  /** @domName SVGSVGElement.hasExtension */
+  bool hasExtension(String extension) native "SVGSVGElement_hasExtension_Callback";
+
+
+  /** @domName SVGSVGElement.zoomAndPan */
+  int get zoomAndPan native "SVGSVGElement_zoomAndPan_Getter";
+
+
+  /** @domName SVGSVGElement.zoomAndPan */
+  void set zoomAndPan(int value) native "SVGSVGElement_zoomAndPan_Setter";
+
+}
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
 /// @domName SVGSwitchElement
-class SVGSwitchElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
-  SVGSwitchElement.internal(): super.internal();
+class SwitchElement extends SvgElement implements Transformable, Tests, Stylable, ExternalResourcesRequired, LangSpace {
+
+  factory SwitchElement() => _SvgElementFactoryProvider.createSvgElement_tag("switch");
+  SwitchElement.internal(): super.internal();
 
 
   /** @domName SVGSwitchElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGSwitchElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGSwitchElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGSwitchElement.xmllang */
@@ -6893,31 +6993,31 @@
 
 
   /** @domName SVGSwitchElement.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGSwitchElement_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGSwitchElement_farthestViewportElement_Getter";
 
 
   /** @domName SVGSwitchElement.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGSwitchElement_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGSwitchElement_nearestViewportElement_Getter";
 
 
   /** @domName SVGSwitchElement.getBBox */
-  SVGRect getBBox() native "SVGSwitchElement_getBBox_Callback";
+  Rect getBBox() native "SVGSwitchElement_getBBox_Callback";
 
 
   /** @domName SVGSwitchElement.getCTM */
-  SVGMatrix getCTM() native "SVGSwitchElement_getCTM_Callback";
+  Matrix getCTM() native "SVGSwitchElement_getCTM_Callback";
 
 
   /** @domName SVGSwitchElement.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGSwitchElement_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGSwitchElement_getScreenCTM_Callback";
 
 
   /** @domName SVGSwitchElement.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGSwitchElement_getTransformToElement_Callback";
+  Matrix getTransformToElement(SvgElement element) native "SVGSwitchElement_getTransformToElement_Callback";
 
 
   /** @domName SVGSwitchElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGSwitchElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGSwitchElement_className_Getter";
 
 
   /** @domName SVGSwitchElement.style */
@@ -6929,15 +7029,15 @@
 
 
   /** @domName SVGSwitchElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGSwitchElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGSwitchElement_requiredExtensions_Getter";
 
 
   /** @domName SVGSwitchElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGSwitchElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGSwitchElement_requiredFeatures_Getter";
 
 
   /** @domName SVGSwitchElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGSwitchElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGSwitchElement_systemLanguage_Getter";
 
 
   /** @domName SVGSwitchElement.hasExtension */
@@ -6945,7 +7045,7 @@
 
 
   /** @domName SVGSwitchElement.transform */
-  SVGAnimatedTransformList get transform native "SVGSwitchElement_transform_Getter";
+  AnimatedTransformList get transform native "SVGSwitchElement_transform_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6956,20 +7056,22 @@
 
 
 /// @domName SVGSymbolElement
-class SVGSymbolElement extends SVGElement implements SVGLangSpace, SVGFitToViewBox, SVGExternalResourcesRequired, SVGStylable {
-  SVGSymbolElement.internal(): super.internal();
+class SymbolElement extends SvgElement implements FitToViewBox, ExternalResourcesRequired, Stylable, LangSpace {
+
+  factory SymbolElement() => _SvgElementFactoryProvider.createSvgElement_tag("symbol");
+  SymbolElement.internal(): super.internal();
 
 
   /** @domName SVGSymbolElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGSymbolElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGSymbolElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGSymbolElement.preserveAspectRatio */
-  SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGSymbolElement_preserveAspectRatio_Getter";
+  AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGSymbolElement_preserveAspectRatio_Getter";
 
 
   /** @domName SVGSymbolElement.viewBox */
-  SVGAnimatedRect get viewBox native "SVGSymbolElement_viewBox_Getter";
+  AnimatedRect get viewBox native "SVGSymbolElement_viewBox_Getter";
 
 
   /** @domName SVGSymbolElement.xmllang */
@@ -6989,7 +7091,7 @@
 
 
   /** @domName SVGSymbolElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGSymbolElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGSymbolElement_className_Getter";
 
 
   /** @domName SVGSymbolElement.style */
@@ -7008,12 +7110,14 @@
 
 
 /// @domName SVGTRefElement
-class SVGTRefElement extends SVGTextPositioningElement implements SVGURIReference {
-  SVGTRefElement.internal(): super.internal();
+class TRefElement extends TextPositioningElement implements UriReference {
+
+  factory TRefElement() => _SvgElementFactoryProvider.createSvgElement_tag("tref");
+  TRefElement.internal(): super.internal();
 
 
   /** @domName SVGTRefElement.href */
-  SVGAnimatedString get href native "SVGTRefElement_href_Getter";
+  AnimatedString get href native "SVGTRefElement_href_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7024,8 +7128,10 @@
 
 
 /// @domName SVGTSpanElement
-class SVGTSpanElement extends SVGTextPositioningElement {
-  SVGTSpanElement.internal(): super.internal();
+class TSpanElement extends TextPositioningElement {
+
+  factory TSpanElement() => _SvgElementFactoryProvider.createSvgElement_tag("tspan");
+  TSpanElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7036,20 +7142,20 @@
 
 
 /// @domName SVGTests
-class SVGTests extends NativeFieldWrapperClass1 {
-  SVGTests.internal();
+class Tests extends NativeFieldWrapperClass1 {
+  Tests.internal();
 
 
   /** @domName SVGTests.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGTests_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGTests_requiredExtensions_Getter";
 
 
   /** @domName SVGTests.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGTests_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGTests_requiredFeatures_Getter";
 
 
   /** @domName SVGTests.systemLanguage */
-  SVGStringList get systemLanguage native "SVGTests_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGTests_systemLanguage_Getter";
 
 
   /** @domName SVGTests.hasExtension */
@@ -7064,8 +7170,8 @@
 
 
 /// @domName SVGTextContentElement
-class SVGTextContentElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGExternalResourcesRequired {
-  SVGTextContentElement.internal(): super.internal();
+class TextContentElement extends SvgElement implements Tests, Stylable, ExternalResourcesRequired, LangSpace {
+  TextContentElement.internal(): super.internal();
 
   static const int LENGTHADJUST_SPACING = 1;
 
@@ -7075,15 +7181,15 @@
 
 
   /** @domName SVGTextContentElement.lengthAdjust */
-  SVGAnimatedEnumeration get lengthAdjust native "SVGTextContentElement_lengthAdjust_Getter";
+  AnimatedEnumeration get lengthAdjust native "SVGTextContentElement_lengthAdjust_Getter";
 
 
   /** @domName SVGTextContentElement.textLength */
-  SVGAnimatedLength get textLength native "SVGTextContentElement_textLength_Getter";
+  AnimatedLength get textLength native "SVGTextContentElement_textLength_Getter";
 
 
   /** @domName SVGTextContentElement.getCharNumAtPosition */
-  int getCharNumAtPosition(SVGPoint point) native "SVGTextContentElement_getCharNumAtPosition_Callback";
+  int getCharNumAtPosition(Point point) native "SVGTextContentElement_getCharNumAtPosition_Callback";
 
 
   /** @domName SVGTextContentElement.getComputedTextLength */
@@ -7091,11 +7197,11 @@
 
 
   /** @domName SVGTextContentElement.getEndPositionOfChar */
-  SVGPoint getEndPositionOfChar(int offset) native "SVGTextContentElement_getEndPositionOfChar_Callback";
+  Point getEndPositionOfChar(int offset) native "SVGTextContentElement_getEndPositionOfChar_Callback";
 
 
   /** @domName SVGTextContentElement.getExtentOfChar */
-  SVGRect getExtentOfChar(int offset) native "SVGTextContentElement_getExtentOfChar_Callback";
+  Rect getExtentOfChar(int offset) native "SVGTextContentElement_getExtentOfChar_Callback";
 
 
   /** @domName SVGTextContentElement.getNumberOfChars */
@@ -7107,7 +7213,7 @@
 
 
   /** @domName SVGTextContentElement.getStartPositionOfChar */
-  SVGPoint getStartPositionOfChar(int offset) native "SVGTextContentElement_getStartPositionOfChar_Callback";
+  Point getStartPositionOfChar(int offset) native "SVGTextContentElement_getStartPositionOfChar_Callback";
 
 
   /** @domName SVGTextContentElement.getSubStringLength */
@@ -7119,7 +7225,7 @@
 
 
   /** @domName SVGTextContentElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGTextContentElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGTextContentElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGTextContentElement.xmllang */
@@ -7139,7 +7245,7 @@
 
 
   /** @domName SVGTextContentElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGTextContentElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGTextContentElement_className_Getter";
 
 
   /** @domName SVGTextContentElement.style */
@@ -7151,15 +7257,15 @@
 
 
   /** @domName SVGTextContentElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGTextContentElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGTextContentElement_requiredExtensions_Getter";
 
 
   /** @domName SVGTextContentElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGTextContentElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGTextContentElement_requiredFeatures_Getter";
 
 
   /** @domName SVGTextContentElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGTextContentElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGTextContentElement_systemLanguage_Getter";
 
 
   /** @domName SVGTextContentElement.hasExtension */
@@ -7174,36 +7280,38 @@
 
 
 /// @domName SVGTextElement
-class SVGTextElement extends SVGTextPositioningElement implements SVGTransformable {
-  SVGTextElement.internal(): super.internal();
+class TextElement extends TextPositioningElement implements Transformable {
+
+  factory TextElement() => _SvgElementFactoryProvider.createSvgElement_tag("text");
+  TextElement.internal(): super.internal();
 
 
   /** @domName SVGTextElement.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGTextElement_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGTextElement_farthestViewportElement_Getter";
 
 
   /** @domName SVGTextElement.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGTextElement_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGTextElement_nearestViewportElement_Getter";
 
 
   /** @domName SVGTextElement.getBBox */
-  SVGRect getBBox() native "SVGTextElement_getBBox_Callback";
+  Rect getBBox() native "SVGTextElement_getBBox_Callback";
 
 
   /** @domName SVGTextElement.getCTM */
-  SVGMatrix getCTM() native "SVGTextElement_getCTM_Callback";
+  Matrix getCTM() native "SVGTextElement_getCTM_Callback";
 
 
   /** @domName SVGTextElement.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGTextElement_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGTextElement_getScreenCTM_Callback";
 
 
   /** @domName SVGTextElement.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGTextElement_getTransformToElement_Callback";
+  Matrix getTransformToElement(SvgElement element) native "SVGTextElement_getTransformToElement_Callback";
 
 
   /** @domName SVGTextElement.transform */
-  SVGAnimatedTransformList get transform native "SVGTextElement_transform_Getter";
+  AnimatedTransformList get transform native "SVGTextElement_transform_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7214,8 +7322,8 @@
 
 
 /// @domName SVGTextPathElement
-class SVGTextPathElement extends SVGTextContentElement implements SVGURIReference {
-  SVGTextPathElement.internal(): super.internal();
+class TextPathElement extends TextContentElement implements UriReference {
+  TextPathElement.internal(): super.internal();
 
   static const int TEXTPATH_METHODTYPE_ALIGN = 1;
 
@@ -7231,19 +7339,19 @@
 
 
   /** @domName SVGTextPathElement.method */
-  SVGAnimatedEnumeration get method native "SVGTextPathElement_method_Getter";
+  AnimatedEnumeration get method native "SVGTextPathElement_method_Getter";
 
 
   /** @domName SVGTextPathElement.spacing */
-  SVGAnimatedEnumeration get spacing native "SVGTextPathElement_spacing_Getter";
+  AnimatedEnumeration get spacing native "SVGTextPathElement_spacing_Getter";
 
 
   /** @domName SVGTextPathElement.startOffset */
-  SVGAnimatedLength get startOffset native "SVGTextPathElement_startOffset_Getter";
+  AnimatedLength get startOffset native "SVGTextPathElement_startOffset_Getter";
 
 
   /** @domName SVGTextPathElement.href */
-  SVGAnimatedString get href native "SVGTextPathElement_href_Getter";
+  AnimatedString get href native "SVGTextPathElement_href_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7254,28 +7362,28 @@
 
 
 /// @domName SVGTextPositioningElement
-class SVGTextPositioningElement extends SVGTextContentElement {
-  SVGTextPositioningElement.internal(): super.internal();
+class TextPositioningElement extends TextContentElement {
+  TextPositioningElement.internal(): super.internal();
 
 
   /** @domName SVGTextPositioningElement.dx */
-  SVGAnimatedLengthList get dx native "SVGTextPositioningElement_dx_Getter";
+  AnimatedLengthList get dx native "SVGTextPositioningElement_dx_Getter";
 
 
   /** @domName SVGTextPositioningElement.dy */
-  SVGAnimatedLengthList get dy native "SVGTextPositioningElement_dy_Getter";
+  AnimatedLengthList get dy native "SVGTextPositioningElement_dy_Getter";
 
 
   /** @domName SVGTextPositioningElement.rotate */
-  SVGAnimatedNumberList get rotate native "SVGTextPositioningElement_rotate_Getter";
+  AnimatedNumberList get rotate native "SVGTextPositioningElement_rotate_Getter";
 
 
   /** @domName SVGTextPositioningElement.x */
-  SVGAnimatedLengthList get x native "SVGTextPositioningElement_x_Getter";
+  AnimatedLengthList get x native "SVGTextPositioningElement_x_Getter";
 
 
   /** @domName SVGTextPositioningElement.y */
-  SVGAnimatedLengthList get y native "SVGTextPositioningElement_y_Getter";
+  AnimatedLengthList get y native "SVGTextPositioningElement_y_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7286,8 +7394,10 @@
 
 
 /// @domName SVGTitleElement
-class SVGTitleElement extends SVGElement implements SVGLangSpace, SVGStylable {
-  SVGTitleElement.internal(): super.internal();
+class TitleElement extends SvgElement implements Stylable, LangSpace {
+
+  factory TitleElement() => _SvgElementFactoryProvider.createSvgElement_tag("title");
+  TitleElement.internal(): super.internal();
 
 
   /** @domName SVGTitleElement.xmllang */
@@ -7307,7 +7417,7 @@
 
 
   /** @domName SVGTitleElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGTitleElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGTitleElement_className_Getter";
 
 
   /** @domName SVGTitleElement.style */
@@ -7326,8 +7436,8 @@
 
 
 /// @domName SVGTransform
-class SVGTransform extends NativeFieldWrapperClass1 {
-  SVGTransform.internal();
+class Transform extends NativeFieldWrapperClass1 {
+  Transform.internal();
 
   static const int SVG_TRANSFORM_MATRIX = 1;
 
@@ -7349,7 +7459,7 @@
 
 
   /** @domName SVGTransform.matrix */
-  SVGMatrix get matrix native "SVGTransform_matrix_Getter";
+  Matrix get matrix native "SVGTransform_matrix_Getter";
 
 
   /** @domName SVGTransform.type */
@@ -7357,7 +7467,7 @@
 
 
   /** @domName SVGTransform.setMatrix */
-  void setMatrix(SVGMatrix matrix) native "SVGTransform_setMatrix_Callback";
+  void setMatrix(Matrix matrix) native "SVGTransform_setMatrix_Callback";
 
 
   /** @domName SVGTransform.setRotate */
@@ -7388,80 +7498,82 @@
 
 
 /// @domName SVGTransformList
-class SVGTransformList extends NativeFieldWrapperClass1 implements List<SVGTransform> {
-  SVGTransformList.internal();
+class TransformList extends NativeFieldWrapperClass1 implements List<Transform> {
+  TransformList.internal();
 
 
   /** @domName SVGTransformList.numberOfItems */
   int get numberOfItems native "SVGTransformList_numberOfItems_Getter";
 
-  SVGTransform operator[](int index) native "SVGTransformList_item_Callback";
+  Transform operator[](int index) native "SVGTransformList_item_Callback";
 
-  void operator[]=(int index, SVGTransform value) {
+  void operator[]=(int index, Transform value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
-  // -- start List<SVGTransform> mixins.
-  // SVGTransform is the element type.
+  // -- start List<Transform> mixins.
+  // Transform is the element type.
 
-  // From Iterable<SVGTransform>:
+  // From Iterable<Transform>:
 
-  Iterator<SVGTransform> iterator() {
+  Iterator<Transform> iterator() {
     // Note: NodeLists are not fixed size. And most probably length shouldn't
     // be cached in both iterator _and_ forEach method. For now caching it
     // for consistency.
-    return new FixedSizeListIterator<SVGTransform>(this);
+    return new FixedSizeListIterator<Transform>(this);
   }
 
-  // From Collection<SVGTransform>:
+  // From Collection<Transform>:
 
-  void add(SVGTransform value) {
+  void add(Transform value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addLast(SVGTransform value) {
+  void addLast(Transform value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addAll(Collection<SVGTransform> collection) {
+  void addAll(Collection<Transform> collection) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  bool contains(SVGTransform element) => _Collections.contains(this, element);
+  bool contains(Transform element) => _Collections.contains(this, element);
 
-  void forEach(void f(SVGTransform element)) => _Collections.forEach(this, f);
+  void forEach(void f(Transform element)) => _Collections.forEach(this, f);
 
-  Collection map(f(SVGTransform element)) => _Collections.map(this, [], f);
+  Collection map(f(Transform element)) => _Collections.map(this, [], f);
 
-  Collection<SVGTransform> filter(bool f(SVGTransform element)) =>
-     _Collections.filter(this, <SVGTransform>[], f);
+  Collection<Transform> filter(bool f(Transform element)) =>
+     _Collections.filter(this, <Transform>[], f);
 
-  bool every(bool f(SVGTransform element)) => _Collections.every(this, f);
+  bool every(bool f(Transform element)) => _Collections.every(this, f);
 
-  bool some(bool f(SVGTransform element)) => _Collections.some(this, f);
+  bool some(bool f(Transform element)) => _Collections.some(this, f);
 
   bool get isEmpty => this.length == 0;
 
-  // From List<SVGTransform>:
+  // From List<Transform>:
 
-  void sort([Comparator<SVGTransform> compare = Comparable.compare]) {
+  void sort([Comparator<Transform> compare = Comparable.compare]) {
     throw new UnsupportedError("Cannot sort immutable List.");
   }
 
-  int indexOf(SVGTransform element, [int start = 0]) =>
+  int indexOf(Transform element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
-  int lastIndexOf(SVGTransform element, [int start]) {
+  int lastIndexOf(Transform element, [int start]) {
     if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGTransform get last => this[length - 1];
+  Transform get first => this[0];
 
-  SVGTransform removeLast() {
+  Transform get last => this[length - 1];
+
+  Transform removeLast() {
     throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
-  void setRange(int start, int rangeLength, List<SVGTransform> from, [int startFrom]) {
+  void setRange(int start, int rangeLength, List<Transform> from, [int startFrom]) {
     throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
@@ -7469,18 +7581,18 @@
     throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
-  void insertRange(int start, int rangeLength, [SVGTransform initialValue]) {
+  void insertRange(int start, int rangeLength, [Transform initialValue]) {
     throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
-  List<SVGTransform> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGTransform>[]);
+  List<Transform> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Transform>[]);
 
-  // -- end List<SVGTransform> mixins.
+  // -- end List<Transform> mixins.
 
 
   /** @domName SVGTransformList.appendItem */
-  SVGTransform appendItem(SVGTransform item) native "SVGTransformList_appendItem_Callback";
+  Transform appendItem(Transform item) native "SVGTransformList_appendItem_Callback";
 
 
   /** @domName SVGTransformList.clear */
@@ -7488,31 +7600,31 @@
 
 
   /** @domName SVGTransformList.consolidate */
-  SVGTransform consolidate() native "SVGTransformList_consolidate_Callback";
+  Transform consolidate() native "SVGTransformList_consolidate_Callback";
 
 
   /** @domName SVGTransformList.createSVGTransformFromMatrix */
-  SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix) native "SVGTransformList_createSVGTransformFromMatrix_Callback";
+  Transform createSVGTransformFromMatrix(Matrix matrix) native "SVGTransformList_createSVGTransformFromMatrix_Callback";
 
 
   /** @domName SVGTransformList.getItem */
-  SVGTransform getItem(int index) native "SVGTransformList_getItem_Callback";
+  Transform getItem(int index) native "SVGTransformList_getItem_Callback";
 
 
   /** @domName SVGTransformList.initialize */
-  SVGTransform initialize(SVGTransform item) native "SVGTransformList_initialize_Callback";
+  Transform initialize(Transform item) native "SVGTransformList_initialize_Callback";
 
 
   /** @domName SVGTransformList.insertItemBefore */
-  SVGTransform insertItemBefore(SVGTransform item, int index) native "SVGTransformList_insertItemBefore_Callback";
+  Transform insertItemBefore(Transform item, int index) native "SVGTransformList_insertItemBefore_Callback";
 
 
   /** @domName SVGTransformList.removeItem */
-  SVGTransform removeItem(int index) native "SVGTransformList_removeItem_Callback";
+  Transform removeItem(int index) native "SVGTransformList_removeItem_Callback";
 
 
   /** @domName SVGTransformList.replaceItem */
-  SVGTransform replaceItem(SVGTransform item, int index) native "SVGTransformList_replaceItem_Callback";
+  Transform replaceItem(Transform item, int index) native "SVGTransformList_replaceItem_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7523,52 +7635,36 @@
 
 
 /// @domName SVGTransformable
-class SVGTransformable extends NativeFieldWrapperClass1 implements SVGLocatable {
-  SVGTransformable.internal();
+class Transformable extends NativeFieldWrapperClass1 implements Locatable {
+  Transformable.internal();
 
 
   /** @domName SVGTransformable.transform */
-  SVGAnimatedTransformList get transform native "SVGTransformable_transform_Getter";
+  AnimatedTransformList get transform native "SVGTransformable_transform_Getter";
 
 
   /** @domName SVGTransformable.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGTransformable_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGTransformable_farthestViewportElement_Getter";
 
 
   /** @domName SVGTransformable.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGTransformable_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGTransformable_nearestViewportElement_Getter";
 
 
   /** @domName SVGTransformable.getBBox */
-  SVGRect getBBox() native "SVGTransformable_getBBox_Callback";
+  Rect getBBox() native "SVGTransformable_getBBox_Callback";
 
 
   /** @domName SVGTransformable.getCTM */
-  SVGMatrix getCTM() native "SVGTransformable_getCTM_Callback";
+  Matrix getCTM() native "SVGTransformable_getCTM_Callback";
 
 
   /** @domName SVGTransformable.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGTransformable_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGTransformable_getScreenCTM_Callback";
 
 
   /** @domName SVGTransformable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGTransformable_getTransformToElement_Callback";
-
-}
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName SVGURIReference
-class SVGURIReference extends NativeFieldWrapperClass1 {
-  SVGURIReference.internal();
-
-
-  /** @domName SVGURIReference.href */
-  SVGAnimatedString get href native "SVGURIReference_href_Getter";
+  Matrix getTransformToElement(SvgElement element) native "SVGTransformable_getTransformToElement_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7579,8 +7675,8 @@
 
 
 /// @domName SVGUnitTypes
-class SVGUnitTypes extends NativeFieldWrapperClass1 {
-  SVGUnitTypes.internal();
+class UnitTypes extends NativeFieldWrapperClass1 {
+  UnitTypes.internal();
 
   static const int SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2;
 
@@ -7596,37 +7692,55 @@
 // WARNING: Do not edit - generated code.
 
 
+/// @domName SVGURIReference
+class UriReference extends NativeFieldWrapperClass1 {
+  UriReference.internal();
+
+
+  /** @domName SVGURIReference.href */
+  AnimatedString get href native "SVGURIReference_href_Getter";
+
+}
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// WARNING: Do not edit - generated code.
+
+
 /// @domName SVGUseElement
-class SVGUseElement extends SVGElement implements SVGLangSpace, SVGTests, SVGStylable, SVGURIReference, SVGExternalResourcesRequired, SVGTransformable {
-  SVGUseElement.internal(): super.internal();
+class UseElement extends SvgElement implements Transformable, Tests, UriReference, Stylable, ExternalResourcesRequired, LangSpace {
+
+  factory UseElement() => _SvgElementFactoryProvider.createSvgElement_tag("use");
+  UseElement.internal(): super.internal();
 
 
   /** @domName SVGUseElement.animatedInstanceRoot */
-  SVGElementInstance get animatedInstanceRoot native "SVGUseElement_animatedInstanceRoot_Getter";
+  ElementInstance get animatedInstanceRoot native "SVGUseElement_animatedInstanceRoot_Getter";
 
 
   /** @domName SVGUseElement.height */
-  SVGAnimatedLength get height native "SVGUseElement_height_Getter";
+  AnimatedLength get height native "SVGUseElement_height_Getter";
 
 
   /** @domName SVGUseElement.instanceRoot */
-  SVGElementInstance get instanceRoot native "SVGUseElement_instanceRoot_Getter";
+  ElementInstance get instanceRoot native "SVGUseElement_instanceRoot_Getter";
 
 
   /** @domName SVGUseElement.width */
-  SVGAnimatedLength get width native "SVGUseElement_width_Getter";
+  AnimatedLength get width native "SVGUseElement_width_Getter";
 
 
   /** @domName SVGUseElement.x */
-  SVGAnimatedLength get x native "SVGUseElement_x_Getter";
+  AnimatedLength get x native "SVGUseElement_x_Getter";
 
 
   /** @domName SVGUseElement.y */
-  SVGAnimatedLength get y native "SVGUseElement_y_Getter";
+  AnimatedLength get y native "SVGUseElement_y_Getter";
 
 
   /** @domName SVGUseElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGUseElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGUseElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGUseElement.xmllang */
@@ -7646,31 +7760,31 @@
 
 
   /** @domName SVGUseElement.farthestViewportElement */
-  SVGElement get farthestViewportElement native "SVGUseElement_farthestViewportElement_Getter";
+  SvgElement get farthestViewportElement native "SVGUseElement_farthestViewportElement_Getter";
 
 
   /** @domName SVGUseElement.nearestViewportElement */
-  SVGElement get nearestViewportElement native "SVGUseElement_nearestViewportElement_Getter";
+  SvgElement get nearestViewportElement native "SVGUseElement_nearestViewportElement_Getter";
 
 
   /** @domName SVGUseElement.getBBox */
-  SVGRect getBBox() native "SVGUseElement_getBBox_Callback";
+  Rect getBBox() native "SVGUseElement_getBBox_Callback";
 
 
   /** @domName SVGUseElement.getCTM */
-  SVGMatrix getCTM() native "SVGUseElement_getCTM_Callback";
+  Matrix getCTM() native "SVGUseElement_getCTM_Callback";
 
 
   /** @domName SVGUseElement.getScreenCTM */
-  SVGMatrix getScreenCTM() native "SVGUseElement_getScreenCTM_Callback";
+  Matrix getScreenCTM() native "SVGUseElement_getScreenCTM_Callback";
 
 
   /** @domName SVGUseElement.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGUseElement_getTransformToElement_Callback";
+  Matrix getTransformToElement(SvgElement element) native "SVGUseElement_getTransformToElement_Callback";
 
 
   /** @domName SVGUseElement.className */
-  SVGAnimatedString get $dom_svgClassName native "SVGUseElement_className_Getter";
+  AnimatedString get $dom_svgClassName native "SVGUseElement_className_Getter";
 
 
   /** @domName SVGUseElement.style */
@@ -7682,15 +7796,15 @@
 
 
   /** @domName SVGUseElement.requiredExtensions */
-  SVGStringList get requiredExtensions native "SVGUseElement_requiredExtensions_Getter";
+  StringList get requiredExtensions native "SVGUseElement_requiredExtensions_Getter";
 
 
   /** @domName SVGUseElement.requiredFeatures */
-  SVGStringList get requiredFeatures native "SVGUseElement_requiredFeatures_Getter";
+  StringList get requiredFeatures native "SVGUseElement_requiredFeatures_Getter";
 
 
   /** @domName SVGUseElement.systemLanguage */
-  SVGStringList get systemLanguage native "SVGUseElement_systemLanguage_Getter";
+  StringList get systemLanguage native "SVGUseElement_systemLanguage_Getter";
 
 
   /** @domName SVGUseElement.hasExtension */
@@ -7698,11 +7812,11 @@
 
 
   /** @domName SVGUseElement.transform */
-  SVGAnimatedTransformList get transform native "SVGUseElement_transform_Getter";
+  AnimatedTransformList get transform native "SVGUseElement_transform_Getter";
 
 
   /** @domName SVGUseElement.href */
-  SVGAnimatedString get href native "SVGUseElement_href_Getter";
+  AnimatedString get href native "SVGUseElement_href_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7713,8 +7827,10 @@
 
 
 /// @domName SVGVKernElement
-class SVGVKernElement extends SVGElement {
-  SVGVKernElement.internal(): super.internal();
+class VKernElement extends SvgElement {
+
+  factory VKernElement() => _SvgElementFactoryProvider.createSvgElement_tag("vkern");
+  VKernElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7725,24 +7841,26 @@
 
 
 /// @domName SVGViewElement
-class SVGViewElement extends SVGElement implements SVGFitToViewBox, SVGZoomAndPan, SVGExternalResourcesRequired {
-  SVGViewElement.internal(): super.internal();
+class ViewElement extends SvgElement implements FitToViewBox, ExternalResourcesRequired, ZoomAndPan {
+
+  factory ViewElement() => _SvgElementFactoryProvider.createSvgElement_tag("view");
+  ViewElement.internal(): super.internal();
 
 
   /** @domName SVGViewElement.viewTarget */
-  SVGStringList get viewTarget native "SVGViewElement_viewTarget_Getter";
+  StringList get viewTarget native "SVGViewElement_viewTarget_Getter";
 
 
   /** @domName SVGViewElement.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGViewElement_externalResourcesRequired_Getter";
+  AnimatedBoolean get externalResourcesRequired native "SVGViewElement_externalResourcesRequired_Getter";
 
 
   /** @domName SVGViewElement.preserveAspectRatio */
-  SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGViewElement_preserveAspectRatio_Getter";
+  AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGViewElement_preserveAspectRatio_Getter";
 
 
   /** @domName SVGViewElement.viewBox */
-  SVGAnimatedRect get viewBox native "SVGViewElement_viewBox_Getter";
+  AnimatedRect get viewBox native "SVGViewElement_viewBox_Getter";
 
 
   /** @domName SVGViewElement.zoomAndPan */
@@ -7761,12 +7879,12 @@
 
 
 /// @domName SVGViewSpec
-class SVGViewSpec extends NativeFieldWrapperClass1 {
-  SVGViewSpec.internal();
+class ViewSpec extends NativeFieldWrapperClass1 {
+  ViewSpec.internal();
 
 
   /** @domName SVGViewSpec.preserveAspectRatio */
-  SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGViewSpec_preserveAspectRatio_Getter";
+  AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGViewSpec_preserveAspectRatio_Getter";
 
 
   /** @domName SVGViewSpec.preserveAspectRatioString */
@@ -7774,7 +7892,7 @@
 
 
   /** @domName SVGViewSpec.transform */
-  SVGTransformList get transform native "SVGViewSpec_transform_Getter";
+  TransformList get transform native "SVGViewSpec_transform_Getter";
 
 
   /** @domName SVGViewSpec.transformString */
@@ -7782,7 +7900,7 @@
 
 
   /** @domName SVGViewSpec.viewBox */
-  SVGAnimatedRect get viewBox native "SVGViewSpec_viewBox_Getter";
+  AnimatedRect get viewBox native "SVGViewSpec_viewBox_Getter";
 
 
   /** @domName SVGViewSpec.viewBoxString */
@@ -7790,7 +7908,7 @@
 
 
   /** @domName SVGViewSpec.viewTarget */
-  SVGElement get viewTarget native "SVGViewSpec_viewTarget_Getter";
+  SvgElement get viewTarget native "SVGViewSpec_viewTarget_Getter";
 
 
   /** @domName SVGViewSpec.viewTargetString */
@@ -7813,8 +7931,8 @@
 
 
 /// @domName SVGZoomAndPan
-class SVGZoomAndPan extends NativeFieldWrapperClass1 {
-  SVGZoomAndPan.internal();
+class ZoomAndPan extends NativeFieldWrapperClass1 {
+  ZoomAndPan.internal();
 
   static const int SVG_ZOOMANDPAN_DISABLE = 1;
 
@@ -7839,8 +7957,8 @@
 
 
 /// @domName SVGZoomEvent
-class SVGZoomEvent extends UIEvent {
-  SVGZoomEvent.internal(): super.internal();
+class ZoomEvent extends UIEvent {
+  ZoomEvent.internal(): super.internal();
 
 
   /** @domName SVGZoomEvent.newScale */
@@ -7848,7 +7966,7 @@
 
 
   /** @domName SVGZoomEvent.newTranslate */
-  SVGPoint get newTranslate native "SVGZoomEvent_newTranslate_Getter";
+  Point get newTranslate native "SVGZoomEvent_newTranslate_Getter";
 
 
   /** @domName SVGZoomEvent.previousScale */
@@ -7856,11 +7974,11 @@
 
 
   /** @domName SVGZoomEvent.previousTranslate */
-  SVGPoint get previousTranslate native "SVGZoomEvent_previousTranslate_Getter";
+  Point get previousTranslate native "SVGZoomEvent_previousTranslate_Getter";
 
 
   /** @domName SVGZoomEvent.zoomRectScreen */
-  SVGRect get zoomRectScreen native "SVGZoomEvent_zoomRectScreen_Getter";
+  Rect get zoomRectScreen native "SVGZoomEvent_zoomRectScreen_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7871,80 +7989,82 @@
 
 
 /// @domName SVGElementInstanceList
-class _SVGElementInstanceList extends NativeFieldWrapperClass1 implements List<SVGElementInstance> {
-  _SVGElementInstanceList.internal();
+class _ElementInstanceList extends NativeFieldWrapperClass1 implements List<ElementInstance> {
+  _ElementInstanceList.internal();
 
 
   /** @domName SVGElementInstanceList.length */
   int get length native "SVGElementInstanceList_length_Getter";
 
-  SVGElementInstance operator[](int index) native "SVGElementInstanceList_item_Callback";
+  ElementInstance operator[](int index) native "SVGElementInstanceList_item_Callback";
 
-  void operator[]=(int index, SVGElementInstance value) {
+  void operator[]=(int index, ElementInstance value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
   }
-  // -- start List<SVGElementInstance> mixins.
-  // SVGElementInstance is the element type.
+  // -- start List<ElementInstance> mixins.
+  // ElementInstance is the element type.
 
-  // From Iterable<SVGElementInstance>:
+  // From Iterable<ElementInstance>:
 
-  Iterator<SVGElementInstance> iterator() {
+  Iterator<ElementInstance> iterator() {
     // Note: NodeLists are not fixed size. And most probably length shouldn't
     // be cached in both iterator _and_ forEach method. For now caching it
     // for consistency.
-    return new FixedSizeListIterator<SVGElementInstance>(this);
+    return new FixedSizeListIterator<ElementInstance>(this);
   }
 
-  // From Collection<SVGElementInstance>:
+  // From Collection<ElementInstance>:
 
-  void add(SVGElementInstance value) {
+  void add(ElementInstance value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addLast(SVGElementInstance value) {
+  void addLast(ElementInstance value) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  void addAll(Collection<SVGElementInstance> collection) {
+  void addAll(Collection<ElementInstance> collection) {
     throw new UnsupportedError("Cannot add to immutable List.");
   }
 
-  bool contains(SVGElementInstance element) => _Collections.contains(this, element);
+  bool contains(ElementInstance element) => _Collections.contains(this, element);
 
-  void forEach(void f(SVGElementInstance element)) => _Collections.forEach(this, f);
+  void forEach(void f(ElementInstance element)) => _Collections.forEach(this, f);
 
-  Collection map(f(SVGElementInstance element)) => _Collections.map(this, [], f);
+  Collection map(f(ElementInstance element)) => _Collections.map(this, [], f);
 
-  Collection<SVGElementInstance> filter(bool f(SVGElementInstance element)) =>
-     _Collections.filter(this, <SVGElementInstance>[], f);
+  Collection<ElementInstance> filter(bool f(ElementInstance element)) =>
+     _Collections.filter(this, <ElementInstance>[], f);
 
-  bool every(bool f(SVGElementInstance element)) => _Collections.every(this, f);
+  bool every(bool f(ElementInstance element)) => _Collections.every(this, f);
 
-  bool some(bool f(SVGElementInstance element)) => _Collections.some(this, f);
+  bool some(bool f(ElementInstance element)) => _Collections.some(this, f);
 
   bool get isEmpty => this.length == 0;
 
-  // From List<SVGElementInstance>:
+  // From List<ElementInstance>:
 
-  void sort([Comparator<SVGElementInstance> compare = Comparable.compare]) {
+  void sort([Comparator<ElementInstance> compare = Comparable.compare]) {
     throw new UnsupportedError("Cannot sort immutable List.");
   }
 
-  int indexOf(SVGElementInstance element, [int start = 0]) =>
+  int indexOf(ElementInstance element, [int start = 0]) =>
       _Lists.indexOf(this, element, start, this.length);
 
-  int lastIndexOf(SVGElementInstance element, [int start]) {
+  int lastIndexOf(ElementInstance element, [int start]) {
     if (start == null) start = length - 1;
     return _Lists.lastIndexOf(this, element, start);
   }
 
-  SVGElementInstance get last => this[length - 1];
+  ElementInstance get first => this[0];
 
-  SVGElementInstance removeLast() {
+  ElementInstance get last => this[length - 1];
+
+  ElementInstance removeLast() {
     throw new UnsupportedError("Cannot removeLast on immutable List.");
   }
 
-  void setRange(int start, int rangeLength, List<SVGElementInstance> from, [int startFrom]) {
+  void setRange(int start, int rangeLength, List<ElementInstance> from, [int startFrom]) {
     throw new UnsupportedError("Cannot setRange on immutable List.");
   }
 
@@ -7952,17 +8072,17 @@
     throw new UnsupportedError("Cannot removeRange on immutable List.");
   }
 
-  void insertRange(int start, int rangeLength, [SVGElementInstance initialValue]) {
+  void insertRange(int start, int rangeLength, [ElementInstance initialValue]) {
     throw new UnsupportedError("Cannot insertRange on immutable List.");
   }
 
-  List<SVGElementInstance> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGElementInstance>[]);
+  List<ElementInstance> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <ElementInstance>[]);
 
-  // -- end List<SVGElementInstance> mixins.
+  // -- end List<ElementInstance> mixins.
 
 
   /** @domName SVGElementInstanceList.item */
-  SVGElementInstance item(int index) native "SVGElementInstanceList_item_Callback";
+  ElementInstance item(int index) native "SVGElementInstanceList_item_Callback";
 
 }
diff --git a/sdk/lib/utf/utf16.dart b/sdk/lib/utf/utf16.dart
index d1bd012..e37c603 100644
--- a/sdk/lib/utf/utf16.dart
+++ b/sdk/lib/utf/utf16.dart
@@ -62,15 +62,8 @@
   Utf16BytesToCodeUnitsDecoder decoder = new Utf16BytesToCodeUnitsDecoder(bytes,
       offset, length, replacementCodepoint);
   List<int> codeunits = decoder.decodeRest();
-  // TODO is16BitCodeUnit() is used to work around a bug with dart2js
-  // (http://code.google.com/p/dart/issues/detail?id=1357). Consider
-  // removing after this issue is resolved.
-  if (_is16BitCodeUnit()) {
-    return new String.fromCharCodes(codeunits);
-  } else {
-    return new String.fromCharCodes(
-        _utf16CodeUnitsToCodepoints(codeunits, 0, null, replacementCodepoint));
-  }
+  return new String.fromCharCodes(
+      _utf16CodeUnitsToCodepoints(codeunits, 0, null, replacementCodepoint));
 }
 
 /**
@@ -85,15 +78,8 @@
     int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
   List<int> codeunits = (new Utf16beBytesToCodeUnitsDecoder(bytes, offset,
       length, stripBom, replacementCodepoint)).decodeRest();
-  // TODO is16BitCodeUnit() is used to work around a bug with dart2js
-  // (http://code.google.com/p/dart/issues/detail?id=1357). Consider
-  // removing after this issue is resolved.
-  if (_is16BitCodeUnit()) {
-    return new String.fromCharCodes(codeunits);
-  } else {
-    return new String.fromCharCodes(
-        _utf16CodeUnitsToCodepoints(codeunits, 0, null, replacementCodepoint));
-  }
+  return new String.fromCharCodes(
+      _utf16CodeUnitsToCodepoints(codeunits, 0, null, replacementCodepoint));
 }
 
 /**
@@ -108,15 +94,8 @@
     int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
   List<int> codeunits = (new Utf16leBytesToCodeUnitsDecoder(bytes, offset,
       length, stripBom, replacementCodepoint)).decodeRest();
-  // TODO is16BitCodeUnit() is used to work around a bug with dart2js
-  // (http://code.google.com/p/dart/issues/detail?id=1357). Consider
-  // removing after this issue is resolved.
-  if (_is16BitCodeUnit()) {
-    return new String.fromCharCodes(codeunits);
-  } else {
-    return new String.fromCharCodes(
-        _utf16CodeUnitsToCodepoints(codeunits, 0, null, replacementCodepoint));
-  }
+  return new String.fromCharCodes(
+      _utf16CodeUnitsToCodepoints(codeunits, 0, null, replacementCodepoint));
 }
 
 /**
@@ -198,14 +177,7 @@
 }
 
 List<int> _stringToUtf16CodeUnits(String str) {
-  // TODO is16BitCodeUnit() is used to work around a bug with dart2js
-  // (http://code.google.com/p/dart/issues/detail?id=1357). Consider
-  // removing after this issue is resolved.
-  if (_is16BitCodeUnit()) {
-    return str.charCodes;
-  } else {
-    return _codepointsToUtf16CodeUnits(str.charCodes);
-  }
+  return _codepointsToUtf16CodeUnits(str.charCodes);
 }
 
 typedef _ListRangeIterator _CodeUnitsProvider();
@@ -304,7 +276,7 @@
     utf16EncodedBytesIterator.skip(2 * count);
   }
 
-  abstract int decode();
+  int decode();
 }
 
 /**
diff --git a/sdk/lib/utf/utf32.dart b/sdk/lib/utf/utf32.dart
index 9cbfd7a..8472b52 100644
--- a/sdk/lib/utf/utf32.dart
+++ b/sdk/lib/utf/utf32.dart
@@ -261,7 +261,7 @@
     utf32EncodedBytesIterator.skip(4 * count);
   }
 
-  abstract int decode();
+  int decode();
 }
 
 /**
diff --git a/sdk/lib/utf/utf_core.dart b/sdk/lib/utf/utf_core.dart
index a1cedce..8b1751d 100644
--- a/sdk/lib/utf/utf_core.dart
+++ b/sdk/lib/utf/utf_core.dart
@@ -8,8 +8,7 @@
  */
 List<int> stringToCodepoints(String str) {
   // Note: str.charCodes gives us 16-bit code units on all Dart implementations.
-  // So we need to convert. The same is not true of "new String.fromCharCodes",
-  // which accepts code points on the VM but not dart2js (dartbug.com/1357).
+  // So we need to convert.
   return _utf16CodeUnitsToCodepoints(str.charCodes);
 }
 
@@ -17,31 +16,7 @@
  * Generate a string from the provided Unicode codepoints.
  */
 String codepointsToString(List<int> codepoints) {
-  // TODO _is16BitCodeUnit() is used to work around a bug with dart2js
-  // (http://code.google.com/p/dart/issues/detail?id=1357). Consider
-  // removing after this issue is resolved.
-  if (_is16BitCodeUnit()) {
-    return new String.fromCharCodes(
-        _codepointsToUtf16CodeUnits(codepoints));
-  } else {
-    return new String.fromCharCodes(codepoints);
-  }
-}
-
-/*
- * Test for presence of bug related to the use of UTF-16 code units for
- * Dart compiled to JS.
- */
-bool _test16BitCodeUnit = null;
-// TODO _is16BitCodeUnit() is used to work around a bug with dart2js
-// (http://code.google.com/p/dart/issues/detail?id=1357). Consider
-// removing after this issue is resolved.
-bool _is16BitCodeUnit() {
-  if (_test16BitCodeUnit == null) {
-    _test16BitCodeUnit = (new String.fromCharCodes([0x1D11E])) ==
-        (new String.fromCharCodes([0xD11E]));
-  }
-  return _test16BitCodeUnit;
+  return new String.fromCharCodes(codepoints);
 }
 
 /**
diff --git a/tests/co19/co19-compiler.status b/tests/co19/co19-compiler.status
index b88fcc3..ea0e63a 100644
--- a/tests/co19/co19-compiler.status
+++ b/tests/co19/co19-compiler.status
@@ -21,7 +21,10 @@
 Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
 Language/06_Functions/1_Function_Declaration_A02_t03: Fail # TODO(analyzer-team): Please triage this failure.
 Language/06_Functions/1_Function_Declaration_A03_t03: Fail # TODO(analyzer-team): Please triage this failure.
+Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t10: Fail # TODO(analyzer-team): Please triage this failure.
 Language/06_Functions/2_Formal_Parameters_A02_t01: Fail # TODO(analyzer-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A02_t01: Fail # TODO(analyzer-team): Please triage this failure.
+Language/07_Classes/6_Constructors/2_Factories_A02_t02: Fail # TODO(analyzer-team): Please triage this failure.
 Language/07_Classes/6_Constructors/2_Factories_A05_t02: Fail # TODO(analyzer-team): Please triage this failure.
 Language/07_Classes/6_Constructors/2_Factories_A05_t04: Fail # TODO(analyzer-team): Please triage this failure.
 Language/08_Interfaces/5_Superinterfaces_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
@@ -30,49 +33,14 @@
 Language/11_Expressions/01_Constants_A03_t01: Fail # TODO(analyzer-team): Please triage this failure.
 Language/11_Expressions/01_Constants_A05_t01: Fail # TODO(analyzer-team): Please triage this failure.
 Language/11_Expressions/01_Constants_A14_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t06: Fail # TODO(analyzer-team): Please triage this failure.
+Language/11_Expressions/01_Constants_A20_t03: Fail # TODO(analyzer-team): Please triage this failure.
 Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t07: Fail # TODO(analyzer-team): Please triage this failure.
 Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t13: Fail # TODO(analyzer-team): Please triage this failure.
 Language/11_Expressions/08_Throw_A05_t01: Fail # TODO(analyzer-team): Please triage this failure.
 Language/11_Expressions/11_Instance_Creation/1_New_A02_t07: Fail # TODO(analyzer-team): Please triage this failure.
 Language/11_Expressions/11_Instance_Creation/1_New_A06_t06: Fail # TODO(analyzer-team): Please triage this failure.
 Language/11_Expressions/11_Instance_Creation/2_Const_A10_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/11_Instance_Creation_A02_t01: Fail # TODO(analyzer-team): Please triage this failure.
 Language/11_Expressions/18_Assignment_A05_t05: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/19_Conditional_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/19_Conditional_A01_t15: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/21_Bitwise_Expressions_A01_t16: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/21_Bitwise_Expressions_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/22_Equality_A01_t23: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/22_Equality_A01_t24: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/23_Relational_Expressions_A01_t22: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/23_Relational_Expressions_A01_t23: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/24_Shift_A01_t13: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/24_Shift_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/25_Additive_Expressions_A01_t11: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/25_Additive_Expressions_A01_t12: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/25_Additive_Expressions_A01_t13: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/25_Additive_Expressions_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/26_Multiplicative_Expressions_A01_t14: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/26_Multiplicative_Expressions_A01_t15: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/26_Multiplicative_Expressions_A01_t16: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/26_Multiplicative_Expressions_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A01_t04: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A01_t18: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A01_t19: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A01_t20: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A01_t21: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A01_t22: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/28_Postfix_Expressions_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/28_Postfix_Expressions_A01_t05: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/29_Assignable_Expressions_A01_t08: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/29_Assignable_Expressions_A01_t09: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/30_Identifier_Reference_A05_t04: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/30_Identifier_Reference_A06_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/11_Expressions/30_Identifier_Reference_A07_t01: Fail # TODO(analyzer-team): Please triage this failure.
 Language/11_Expressions/30_Identifier_Reference_A13_t01: Fail # TODO(analyzer-team): Please triage this failure.
 Language/11_Expressions/31_Type_Test_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
 Language/11_Expressions/31_Type_Test_A01_t04: Fail # TODO(analyzer-team): Please triage this failure.
@@ -90,38 +58,52 @@
 Language/12_Statements/06_For_A01_t11: Fail # TODO(analyzer-team): Please triage this failure.
 Language/12_Statements/09_Switch_A02_t03: Fail # TODO(analyzer-team): Please triage this failure.
 Language/12_Statements/09_Switch_A06_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A01_t51: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A01_t52: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t03: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t05: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t12: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t13: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t15: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t18: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t19: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t24: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t06: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t22: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t26: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t42: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t46: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t62: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t66: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A05_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Exports_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Exports_A01_t03: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Exports_A01_t17: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Exports_A03_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Exports_A03_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Exports_A04_t01: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Exports_A04_t02: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Exports_A04_t04: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Exports_A04_t05: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t29: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A05_t01: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A05_t01: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t21: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t22: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t23: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/5_URIs_A01_t01: Fail # TODO(analyzer-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/5_URIs_A01_t21: Fail # TODO(analyzer-team): Please triage this failure.
+
+# co19 issue 319
+Language/13_Libraries_and_Scripts/1_Imports_A01_t51: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A01_t52: Fail, OK
+Language/13_Libraries_and_Scripts/2_Exports_A01_t02: Fail, OK
+Language/13_Libraries_and_Scripts/2_Exports_A01_t03: Fail, OK
+
+# co19 issue 320
+Language/13_Libraries_and_Scripts/1_Imports_A02_t03: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A02_t05: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A02_t12: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A02_t13: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A02_t15: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A02_t18: Fail, OK
+Language/13_Libraries_and_Scripts/1_Imports_A02_t19: Fail, OK
+
+# issue 6822
+Language/13_Libraries_and_Scripts/1_Imports_A02_t24: Fail
+
+# issue 6823
+Language/13_Libraries_and_Scripts/1_Imports_A03_t06: Fail
+Language/13_Libraries_and_Scripts/1_Imports_A03_t26: Fail
+Language/13_Libraries_and_Scripts/1_Imports_A03_t46: Fail
+Language/13_Libraries_and_Scripts/1_Imports_A03_t66: Fail
+
+# co19 issue 324
+Language/13_Libraries_and_Scripts/2_Exports_A03_t01: Fail, OK
+Language/13_Libraries_and_Scripts/2_Exports_A03_t02: Fail, OK
+
+# issue 6824
+Language/13_Libraries_and_Scripts/2_Exports_A04_t02: Fail
+Language/13_Libraries_and_Scripts/2_Exports_A04_t05: Fail
+
+# issue 6825
+Language/13_Libraries_and_Scripts/2_Exports_A01_t17: Fail
+
+# wait for answer from Gilad
 Language/13_Libraries_and_Scripts/2_Exports_A04_t06: Fail # TODO(analyzer-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/4_Scripts_A01_t16: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Queue/Queue.from_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
-LibTest/core/Set/Set.from_A01_t02: Fail # TODO(analyzer-team): Please triage this failure.
 
 Language/03_Overview/2_Privacy_A01_t08: pass # http://dartbug.com/5179
 Language/03_Overview/2_Privacy_A01_t11: pass # http://dartbug.com/5179
@@ -160,216 +142,13 @@
 Language/11_Expressions/30_Identifier_Reference_A05_t06: pass # http://dartbug.com/5179
 Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t01: pass # http://dartbug.com/5179
 
-Language/07_Classes/3_Setters_A04_t03: Fail, OK # getter and method with the same name
-Language/07_Classes/3_Setters_A04_t06: Fail OK # getter and method with the same name
-
-# co19 issue 217
-Language/07_Classes/07_Classes_A07_t03: Fail, OK
-Language/07_Classes/07_Classes_A07_t06: Fail, OK
-
 # co19 issue 298
-Language/03_Overview/1_Scoping_A03_t02: Fail, OK
-Language/03_Overview/2_Privacy_A01_t01: Fail, OK
-Language/03_Overview/2_Privacy_A01_t02: Fail, OK
-Language/03_Overview/2_Privacy_A01_t06: Fail, OK
 Language/03_Overview/2_Privacy_A01_t07: Fail, OK
-Language/03_Overview/2_Privacy_A01_t12: Fail, OK
-Language/03_Overview/2_Privacy_A01_t16: Fail, OK
-Language/07_Classes/07_Classes_A02_t01: Fail, OK
-Language/07_Classes/07_Classes_A03_t01: Fail, OK
-Language/07_Classes/07_Classes_A02_t34: Fail, OK
-Language/07_Classes/07_Classes_A03_t04: Fail, OK
-Language/07_Classes/07_Classes_A03_t10: Fail, OK
-Language/07_Classes/07_Classes_A07_t10: Fail, OK
-Language/07_Classes/1_Instance_Methods_A05_t02: Fail, OK
-Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A02_t04: Fail, OK
-Language/08_Interfaces/5_Superinterfaces/1_Inheritance_and_Overriding_A01_t01: Fail, OK
-Language/08_Interfaces/5_Superinterfaces/1_Inheritance_and_Overriding_A02_t05: Fail, OK
-Language/11_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A01_t01: Fail, OK
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t07: Fail, OK
-Language/11_Expressions/16_Getter_Lookup_A02_t04: Fail, OK
-Language/11_Expressions/18_Assignment_A04_t05: Fail, OK
-Language/11_Expressions/23_Relational_Expressions_A01_t01: Fail, OK
-Language/11_Expressions/24_Shift_A01_t01: Fail, OK
-Language/11_Expressions/30_Identifier_Reference_A12_t01: Fail, OK
-Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A01_t01: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A02_t02: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A02_t01: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A02_t04: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A02_t06: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A02_t11: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A02_t14: Fail, OK
 Language/13_Libraries_and_Scripts/1_Imports_A02_t16: Fail, OK
 Language/13_Libraries_and_Scripts/1_Imports_A02_t17: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A02_t20: Fail, OK
-Language/13_Libraries_and_Scripts/3_Parts_A02_t04: Fail, OK
-
-
-# co19 issue 218
-Language/10_Expressions/28_Identifier_Reference_A08_t38: Fail, OK
-
-# co19 issue 270
-Language/13_Libraries_and_Scripts/3_Includes_A01_t14: Fail, OK
-Language/13_Libraries_and_Scripts/3_Includes_A02_t03: Fail, OK
-Language/13_Libraries_and_Scripts/3_Includes_A02_t04: Fail, OK
-Language/13_Libraries_and_Scripts/4_Scripts_A01_t16: Fail, OK
-
-# co19 issue 303
-Language/05_Variables/05_Variables_A07_t09: Fail, OK
-Language/05_Variables/05_Variables_A08_t03: Fail, OK
-Language/05_Variables/05_Variables_A12_t06: Fail, OK
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t01: Fail, OK
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t02: Fail, OK
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t03: Fail, OK
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t04: Fail, OK
-Language/07_Classes/6_Constructors/1_Generative_Constructors_A18_t03: Fail, OK
-Language/07_Classes/6_Constructors/2_Factories_A01_t01: Fail, OK
-Language/07_Classes/6_Constructors/2_Factories_A06_t01: Fail, OK
-Language/07_Classes/6_Constructors/2_Factories_A06_t02: Fail, OK
-Language/07_Classes/6_Constructors/2_Factories_A06_t03: Fail, OK
-Language/07_Classes/6_Constructors/2_Factories_A06_t04: Fail, OK
-Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A01_t06: Fail, OK
-Language/09_Generics/09_Generics_A03_t01: Fail, OK
-Language/09_Generics/09_Generics_A04_t06: Fail, OK
-Language/11_Expressions/04_Booleans/1_Boolean_Conversion_A01_t02: Fail, OK
-Language/11_Expressions/04_Booleans/1_Boolean_Conversion_A01_t01: Fail, OK
-Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t01: Fail, OK
-Language/11_Expressions/05_Strings_A18_t02: Fail, OK
-Language/11_Expressions/05_Strings_A18_t03: Fail, OK
-Language/11_Expressions/05_Strings_A18_t04: Fail, OK
-Language/11_Expressions/05_Strings_A18_t06: Fail, OK
-Language/11_Expressions/05_Strings_A18_t07: Fail, OK
-Language/11_Expressions/05_Strings_A18_t05: Fail, OK
-Language/11_Expressions/05_Strings_A18_t08: Fail, OK
-Language/11_Expressions/05_Strings_A18_t09: Fail, OK
-Language/11_Expressions/06_Lists_A09_t01: Fail, OK
-Language/11_Expressions/06_Lists_A09_t02: Fail, OK
-Language/11_Expressions/06_Lists_A09_t03: Fail, OK
-Language/11_Expressions/06_Lists_A09_t04: Fail, OK
-Language/11_Expressions/06_Lists_A09_t05: Fail, OK
-Language/11_Expressions/07_Maps_A10_t02: Fail, OK
-Language/11_Expressions/07_Maps_A10_t03: Fail, OK
-Language/11_Expressions/07_Maps_A10_t05: Fail, OK
-Language/11_Expressions/07_Maps_A10_t04: Fail, OK
-Language/11_Expressions/09_Function_Expressions_A03_t03: Fail, OK
-Language/11_Expressions/09_Function_Expressions_A03_t04: Fail, OK
-Language/11_Expressions/09_Function_Expressions_A04_t03: Fail, OK
-Language/11_Expressions/09_Function_Expressions_A04_t04: Fail, OK
-Language/11_Expressions/09_Function_Expressions_A05_t02: Fail, OK
-Language/11_Expressions/09_Function_Expressions_A05_t03: Fail, OK
-Language/11_Expressions/09_Function_Expressions_A05_t04: Fail, OK
-Language/11_Expressions/09_Function_Expressions_A05_t05: Fail, OK
-Language/11_Expressions/09_Function_Expressions_A06_t02: Fail, OK
-Language/11_Expressions/09_Function_Expressions_A06_t03: Fail, OK
-Language/11_Expressions/09_Function_Expressions_A06_t04: Fail, OK
-Language/11_Expressions/09_Function_Expressions_A06_t05: Fail, OK
-Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A02_t01: Fail, OK
-Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A03_t01: Fail, OK
-Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A05_t01: Fail, OK
-Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A05_t02: Fail, OK
-Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A05_t03: Fail, OK
-Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A05_t04: Fail, OK
-Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A08_t01: Fail, OK
-Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A08_t02: Fail, OK
-Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A08_t04: Fail, OK
-Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A08_t03: Fail, OK
-Language/11_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t02: Fail, OK
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A06_t02: Fail, OK
-Language/11_Expressions/18_Assignment_A02_t01: Fail, OK
-Language/11_Expressions/18_Assignment_A03_t01: Fail, OK
-Language/11_Expressions/18_Assignment_A04_t06: Fail, OK
-Language/11_Expressions/18_Assignment_A04_t07: Fail, OK
-Language/11_Expressions/18_Assignment_A06_t01: Fail, OK
-Language/11_Expressions/19_Conditional_A02_t03: Fail, OK
-Language/11_Expressions/19_Conditional_A02_t04: Fail, OK
-Language/11_Expressions/20_Logical_Boolean_Expressions_A03_t01: Fail, OK
-Language/11_Expressions/22_Equality_A10_t02: Fail, OK
-Language/11_Expressions/27_Unary_Expressions_A02_t03: Fail, OK
-Language/11_Expressions/30_Identifier_Reference_A03_t01: Fail, OK
-Language/11_Expressions/30_Identifier_Reference_A10_t02: Fail, OK
-Language/12_Statements/03_Variable_Declaration_A01_t01: Fail, OK
-Language/12_Statements/03_Variable_Declaration_A01_t02: Fail, OK
-Language/12_Statements/05_If_A05_t01: Fail, OK
-Language/12_Statements/05_If_A05_t02: Fail, OK
-Language/12_Statements/06_For/1_For_Loop_A01_t07: Fail, OK
-Language/12_Statements/06_For/1_For_Loop_A01_t08: Fail, OK
-Language/12_Statements/07_While_A02_t02: Fail, OK
-Language/12_Statements/07_While_A03_t01: Fail, OK
-Language/12_Statements/07_While_A03_t02: Fail, OK
-Language/12_Statements/07_While_A03_t03: Fail, OK
-Language/12_Statements/08_Do_A02_t03: Fail, OK
-Language/12_Statements/15_Assert_A02_t01: Fail, OK
-Language/12_Statements/15_Assert_A03_t01: Fail, OK
-Language/12_Statements/15_Assert_A03_t02: Fail, OK
-Language/12_Statements/15_Assert_A03_t04: Fail, OK
-Language/12_Statements/15_Assert_A03_t03: Fail, OK
-Language/12_Statements/15_Assert_A03_t05: Fail, OK
-Language/12_Statements/15_Assert_A03_t08: Fail, OK
-Language/12_Statements/15_Assert_A03_t06: Fail, OK
-Language/12_Statements/15_Assert_A03_t09: Fail, OK
-Language/13_Libraries_and_Scripts/4_Scripts_A01_t17: Fail, OK
-Language/13_Libraries_and_Scripts/4_Scripts_A03_t01: Fail, OK
-Language/13_Libraries_and_Scripts/4_Scripts_A03_t02: Fail, OK
-Language/14_Types/1_Static_Types_A02_t09: Fail, OK
-Language/14_Types/2_Dynamic_Type_System_A01_t01: Fail, OK
-Language/14_Types/4_Interface_Types_A08_t03: Fail, OK
-Language/14_Types/8_Parameterized_Types_A02_t01: Fail, OK
-LibTest/core/AssertionError/column_A01_t02: Fail, OK
-LibTest/core/AssertionError/failedAssertion_A01_t01: Fail, OK
-LibTest/core/AssertionError/line_A01_t02: Fail, OK
-LibTest/core/AssertionError/toString_A01_t01: Fail, OK
-LibTest/core/AssertionError/url_A01_t01: Fail, OK
-LibTest/core/double/ceil_A01_t01: Fail, OK
-LibTest/core/double/ceil_A01_t03: Fail, OK
-LibTest/core/double/ceil_A01_t06: Fail, OK
-LibTest/core/double/floor_A01_t01: Fail, OK
-LibTest/core/double/floor_A01_t03: Fail, OK
-LibTest/core/double/floor_A01_t06: Fail, OK
-LibTest/core/double/operator_remainder_A01_t01: Fail, OK
-LibTest/core/double/round_A01_t05: Fail, OK
-LibTest/core/double/toDouble_A01_t03: Fail, OK
-LibTest/core/double/toInt_A01_t05: Fail, OK
-LibTest/core/double/truncate_A01_t05: Fail, OK
-LibTest/core/Future/chain_A02_t05: Fail, OK
-LibTest/core/Future/transform_A02_t04: Fail, OK
-LibTest/core/int/operator_addition_A01_t01: Fail, OK
-LibTest/core/int/operator_division_A01_t01: Fail, OK
-LibTest/core/int/operator_GE_A01_t01: Fail, OK
-LibTest/core/int/operator_GT_A01_t01: Fail, OK
-LibTest/core/int/operator_LE_A01_t01: Fail, OK
-LibTest/core/int/operator_LT_A01_t01: Fail, OK
-LibTest/core/int/operator_remainder_A01_t02: Fail, OK
-LibTest/core/int/operator_subtraction_A01_t01: Fail, OK
-LibTest/core/int/remainder_A01_t02: Fail, OK
-LibTest/core/int/toDouble_A01_t01: Fail, OK
-LibTest/core/List/addAll_A04_t01: Fail, OK
-LibTest/core/List/every_A01_t01: Fail, OK
-LibTest/core/List/forEach_A01_t02: Fail, OK
-LibTest/core/List/getRange_A06_t01: Fail, OK
-LibTest/core/List/indexOf_A06_t01: Fail, OK
-LibTest/core/List/insertRange_A08_t01: Fail, OK
-LibTest/core/List/length_A07_t01: Fail, OK
-LibTest/core/List/List.from_A03_t02: Fail, OK
-LibTest/core/List/List_A04_t01: Fail, OK
-LibTest/core/List/operator_subscript_A03_t01: Fail, OK
-LibTest/core/List/operator_subscripted_assignment_A03_t01: Fail, OK
-LibTest/core/List/setRange_A05_t01: Fail, OK
-LibTest/core/TypeError/dstName_A01_t01: Fail, OK
-LibTest/core/TypeError/column_A01_t01: Fail, OK
-LibTest/core/TypeError/failedAssertion_A01_t01: Fail, OK
-LibTest/core/TypeError/dstType_A01_t01: Fail, OK
-LibTest/core/TypeError/line_A01_t01: Fail, OK
-LibTest/core/TypeError/srcType_A01_t01: Fail, OK
-LibTest/core/TypeError/toString_A01_t01: Fail, OK
-LibTest/core/TypeError/url_A01_t01: Fail, OK
 
 Language/07_Classes/6_Constructors/2_Factories_A03_t01: Fail, OK # co19 issue 307
 
-LibTest/core/RegExp/RegExp_A01_t04: Fail, OK # co19 issue 314
-LibTest/core/String/contains_A01_t01: Fail, OK # co19 issue 314
-LibTest/core/String/contains_A01_t03: Fail, OK # co19 issue 314
-
-Language/10_Expressions/30_Type_Cast_A01_t04: Fail, OK # the expected error is not specified
 Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t03: Fail, OK # contains syntax error
 Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t04: Fail, OK # contains syntax error
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t02: Fail, OK # deprecated parameter syntax
@@ -382,10 +161,6 @@
 Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t02: Fail, OK # co19 issue 195
 Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t01: Fail, OK # co19 issue 195
 
-# Rename "BadNumberFormatException" to "FormatException"
-# TODO(rnystrom): These can be enabled when
-# http://code.google.com/p/co19/issues/detail?id=167 is fixed.
-
 Language/03_Overview/1_Scoping_A02_t28: Fail # language change 1031
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A15_t07: Fail # Issue 3323
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t01: Fail # Issue 2477
@@ -395,21 +170,10 @@
 Language/11_Expressions/01_Constants_A16_t02: Fail # Issue 1473
 Language/11_Expressions/01_Constants_A16_t03: Fail # Issue 1473
 Language/11_Expressions/01_Constants_A17_t03: Fail # Issue 1473
-Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t05: Fail # language change 3368
 Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: Fail # Issue 3524
-Language/11_Expressions/19_Conditional_A01_t12: Fail # language change 3368
-Language/11_Expressions/19_Conditional_A01_t13: Fail # language change 3368
-Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t12: Fail # language change 3368
-Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t13: Fail # language change 3368
-Language/11_Expressions/21_Bitwise_Expressions_A01_t14: Fail # language change 3368
-Language/11_Expressions/21_Bitwise_Expressions_A01_t15: Fail # language change 3368
 Language/11_Expressions/22_Equality_A01_t19: Fail # language change 3368
 Language/11_Expressions/22_Equality_A01_t20: Fail # language change 3368
 Language/11_Expressions/22_Equality_A02_t03: Fail, OK # co19 issue 169
-Language/11_Expressions/23_Relational_Expressions_A01_t20: Fail # language change 3368
-Language/11_Expressions/23_Relational_Expressions_A01_t21: Fail # language change 3368
-Language/11_Expressions/24_Shift_A01_t11: Fail # language change 3368
-Language/11_Expressions/24_Shift_A01_t12: Fail # language change 3368
 
 # The following tests use hashCode() (function) instead of hashCode (getter).
 # co19 issue 273
@@ -417,13 +181,6 @@
 LibTest/core/String/hashCode_A01_t01: Pass, OK
 LibTest/core/int/hashCode_A01_t01: Pass, OK
 
-LibTest/core/List/iterator_next_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/Queue/removeFirst_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/Queue/last_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/Queue/removeLast_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/Queue/first_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/Queue/iterator_next_A02_t01: Fail, OK # co19 issue 288
-
 Language/06_Functions/3_Type_of_a_Function_A01_t01: Fail, OK
 Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t07: Fail, OK
 Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A03_t02: Fail, OK
@@ -439,23 +196,14 @@
 Language/11_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A02_t02: Fail, OK
 Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t03: Fail, OK
 Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: Fail, OK
-Language/11_Expressions/21_Bitwise_Expressions_A01_t15: Fail, OK
-Language/11_Expressions/19_Conditional_A01_t13: Fail, OK
-Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t12: Fail, OK
-Language/11_Expressions/21_Bitwise_Expressions_A01_t14: Fail, OK
-Language/11_Expressions/23_Relational_Expressions_A01_t21: Fail, OK
 Language/11_Expressions/22_Equality_A01_t19: Fail, OK
 Language/11_Expressions/01_Constants_A17_t03: Fail, OK
 Language/11_Expressions/05_Strings/1_String_Interpolation_A04_t02: Fail, OK
 Language/11_Expressions/05_Strings/1_String_Interpolation_A03_t02: Fail, OK
-Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t05: Fail, OK
-Language/11_Expressions/24_Shift_A01_t11: Fail, OK
-Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t13: Fail, OK
 Language/11_Expressions/22_Equality_A01_t20: Fail, OK
 Language/11_Expressions/30_Identifier_Reference_A04_t07: Fail, OK
 Language/11_Expressions/30_Identifier_Reference_A04_t05: Fail, OK
 Language/11_Expressions/01_Constants_A16_t02: Fail, OK
-Language/11_Expressions/23_Relational_Expressions_A01_t20: Fail, OK
 Language/11_Expressions/30_Identifier_Reference_A05_t06: Fail, OK
 Language/11_Expressions/01_Constants_A15_t16: Fail, OK
 Language/11_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t04: Fail, OK
@@ -464,10 +212,8 @@
 Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A03_t01: Fail, OK
 Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A02_t01: Fail, OK
 Language/11_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t05: Fail, OK
-Language/11_Expressions/19_Conditional_A01_t12: Fail, OK
 Language/11_Expressions/01_Constants_A16_t03: Fail, OK
 Language/11_Expressions/01_Constants_A16_t01: Fail, OK
-Language/11_Expressions/24_Shift_A01_t12: Fail, OK
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t02: Fail, OK
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: Fail, OK
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t01: Fail, OK
@@ -476,27 +222,5 @@
 Language/03_Overview/2_Privacy_A01_t18: Fail, OK
 Language/03_Overview/2_Privacy_A01_t08: Fail, OK
 
-LibTest/core/List/getRange_A04_t01: Fail, OK # co19 issue 290
-LibTest/core/List/insertRange_A06_t01: Fail, OK # co19 issue 290
-LibTest/core/List/last_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/length_A05_t01: Fail, OK # co19 issue 290
-LibTest/core/List/List_A01_t01: Fail, OK # co19 issue 290
-LibTest/core/List/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/operator_subscripted_assignment_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/removeLast_A01_t02: Fail, OK # co19 issue 290
-LibTest/core/List/removeRange_A05_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A02_t02: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A03_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A03_t02: Fail, OK # co19 issue 290
-LibTest/core/Match/group_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/Match/groups_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/Match/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/charCodeAt_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/contains_A01_t02: Fail, OK # co19 issue 290
-LibTest/core/String/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/substring_A02_t01: Fail, OK # co19 issue 290
-
-
 [ $runtime == drt && ($compiler == none || $compiler == frog) ]
 *: Skip
diff --git a/tests/co19/co19-dart2dart.status b/tests/co19/co19-dart2dart.status
index 8d33d10..1614758 100644
--- a/tests/co19/co19-dart2dart.status
+++ b/tests/co19/co19-dart2dart.status
@@ -3,11 +3,6 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dart2dart ]
-# Factory redirection:
-Language/07_Classes/07_Classes_A03_t01: Fail, Pass # http://dartbug.com/6634 Passes in conservative renaming mode.
-Language/11_Expressions/11_Instance_Creation/1_New_A12_t02: Fail, Pass # http://dartbug.com/6634 Passes in conservative renaming mode.
-Language/11_Expressions/11_Instance_Creation/1_New_A12_t01: Fail, Pass # http://dartbug.com/6634 Passes in conservative renaming mode.
-
 # Calling unresolved class constructor:
 Language/03_Overview/2_Privacy_A01_t19: Fail
 Language/03_Overview/2_Privacy_A01_t20: Fail
@@ -16,10 +11,6 @@
 Language/11_Expressions/11_Instance_Creation/1_New_A06_t05: Fail
 Language/11_Expressions/11_Instance_Creation/1_New_A06_t06: Fail
 
-# Renaming type from platform library:
-Language/09_Generics/09_Generics_A02_t01: Fail # http://dartbug.com/6633
-Language/14_Types/4_Interface_Types_A10_t03: Fail # http://dartbug.com/6633
-
 Language/03_Overview/1_Scoping_A01_t39: Fail # http://dartbug.com/5519
 Language/03_Overview/1_Scoping_A01_t40: Fail # http://dartbug.com/5519
 Language/03_Overview/1_Scoping_A01_t41: Fail # http://dartbug.com/5519
@@ -28,7 +19,6 @@
 Language/03_Overview/1_Scoping_A02_t07: Fail # inherited from dart2js
 Language/03_Overview/1_Scoping_A02_t12: Fail # inherited from dart2js
 Language/03_Overview/2_Privacy_A01_t06: Fail # New import syntax
-Language/03_Overview/2_Privacy_A01_t14: Fail # inherited from dart2js
 Language/05_Variables/05_Variables_A01_t04: Fail # http://dartbug.com/5519
 Language/05_Variables/05_Variables_A01_t05: Fail # http://dartbug.com/5519
 Language/05_Variables/05_Variables_A01_t08: Fail # http://dartbug.com/5519
@@ -80,7 +70,6 @@
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t06: Fail # http://dartbug.com/5519
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t07: Fail # http://dartbug.com/5519
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t10: Fail # http://dartbug.com/5519
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t11: Fail # http://dartbug.com/5519
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t14: Fail # http://dartbug.com/5519
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t15: Fail # http://dartbug.com/5519
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A02_t01: Fail # http://dartbug.com/5519
@@ -96,7 +85,6 @@
 Language/06_Functions/2_Formal_Parameters_A03_t05: Fail # http://dartbug.com/5519
 Language/06_Functions/2_Formal_Parameters_A03_t06: Fail # http://dartbug.com/5519
 Language/06_Functions/4_External_Functions_A01_t01: Fail # inherited from VM
-Language/07_Classes/6_Constructors/2_Factories_A01_t05: Fail # Inherited from dartjs
 Language/07_Classes/07_Classes_A02_t02: Fail # http://dartbug.com/5519
 Language/07_Classes/07_Classes_A02_t04: Fail # http://dartbug.com/5519
 Language/07_Classes/07_Classes_A02_t11: Fail # http://dartbug.com/5519
@@ -104,13 +92,13 @@
 Language/07_Classes/07_Classes_A03_t07: Fail # inherited from dart2js
 Language/07_Classes/07_Classes_A03_t08: Fail # inherited from dart2js
 Language/07_Classes/07_Classes_A03_t09: Fail # inherited from dart2js
+Language/07_Classes/07_Classes_A03_t10: Fail # http://dartbug.com/6687
 Language/07_Classes/07_Classes_A04_t19: Fail # inherited from dart2js
 Language/07_Classes/07_Classes_A04_t21: Fail # inherited from dart2js
 Language/07_Classes/07_Classes_A04_t22: Fail # inherited from dart2js
 Language/07_Classes/07_Classes_A04_t24: Fail # inherited from dart2js
 Language/07_Classes/07_Classes_A04_t25: Fail # inherited from dart2js
 Language/07_Classes/10_Superinterfaces_A04_t01: Fail # http://dartbug.com/5519
-Language/07_Classes/1_Instance_Methods/2_Operators_A02_t01: Fail # inherited from VM
 Language/07_Classes/1_Instance_Methods/2_Operators_A03_t01: Fail # inherited from dart2js
 Language/07_Classes/1_Instance_Methods/2_Operators_A03_t02: Fail # inherited from dart2js
 Language/07_Classes/1_Instance_Methods/2_Operators_A04_t02: Fail # inherited from dart2js
@@ -136,10 +124,11 @@
 Language/07_Classes/1_Instance_Methods/2_Operators_A07_t02: Fail # http://dartbug.com/5519
 Language/07_Classes/1_Instance_Methods/2_Operators_A07_t03: Fail # inherited from dart2js
 Language/07_Classes/1_Instance_Methods/2_Operators_A07_t04: Fail # http://dartbug.com/5519
-Language/07_Classes/1_Instance_Methods_A02_t01: Fail # http://dartbug.com/5519
 Language/07_Classes/1_Instance_Methods_A02_t02: Fail # http://dartbug.com/5519
 Language/07_Classes/1_Instance_Methods_A02_t05: Fail # http://dartbug.com/5519
 Language/07_Classes/1_Instance_Methods_A06_t01: Fail # Inherited from dart2js
+Language/07_Classes/1_Instance_Methods_A06_t02: Fail # Inherited from dart2js
+Language/07_Classes/1_Instance_Methods_A07_t01: Fail # Inherited from dart2js
 Language/07_Classes/2_Getters_A01_t03: Fail # inherited from VM
 Language/07_Classes/2_Getters_A01_t04: Fail # http://dartbug.com/5519
 Language/07_Classes/2_Getters_A01_t05: Fail # inherited from VM
@@ -160,7 +149,6 @@
 Language/07_Classes/3_Setters_A04_t05: Fail # inherited from VM
 Language/07_Classes/3_Setters_A04_t06: Fail # inherited from VM
 Language/07_Classes/3_Setters_A04_t07: Fail # inherited from VM
-Language/07_Classes/3_Setters_A04_t08: Fail # inherited from VM
 Language/07_Classes/4_Abstract_Instance_Members_A04_t01: Fail # http://dartbug.com/5519
 Language/07_Classes/4_Abstract_Instance_Members_A04_t05: Fail # inherited from VM
 Language/07_Classes/4_Abstract_Instance_Members_A04_t06: Fail # inherited from VM
@@ -169,6 +157,7 @@
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A15_t07: Fail # inherited from VM
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A16_t07: Fail # http://dartbug.com/6242
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A21_t01: Fail # http://dartbug.com/5519
+Language/07_Classes/6_Constructors/2_Factories_A01_t05: Fail # Inherited from dartjs
 Language/07_Classes/6_Constructors/2_Factories_A05_t01: Fail # Inherited from dart2js
 Language/07_Classes/6_Constructors/2_Factories_A05_t02: Fail # Inherited from dart2js
 Language/07_Classes/6_Constructors/2_Factories_A05_t03: Fail # Inherited from dart2js
@@ -185,6 +174,11 @@
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t02: Fail # inherited from VM
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: Fail # inherited from VM
 Language/07_Classes/6_Constructors_A01_t01: Fail # inherited from VM
+Language/07_Classes/6_Constructors_A01_t02: Fail # Inherited from dart2js
+Language/07_Classes/6_Constructors_A01_t03: Fail # Inherited from dart2js
+Language/07_Classes/6_Constructors_A01_t04: Fail # Inherited from dart2js
+Language/07_Classes/6_Constructors_A01_t05: Fail # Inherited from dart2js
+Language/07_Classes/6_Constructors_A01_t06: Fail # Inherited from dart2js
 Language/07_Classes/6_Constructors_A02_t01: Fail # http://dartbug.com/5519
 Language/11_Expressions/01_Constants_A03_t01: Fail # Inherited from dart2js
 Language/11_Expressions/01_Constants_A03_t02: Fail # http://dartbug.com/5519
@@ -211,6 +205,7 @@
 Language/11_Expressions/01_Constants_A13_t05: Fail # http://dartbug.com/5519
 Language/11_Expressions/01_Constants_A14_t01: Fail # inherited from VM
 Language/11_Expressions/01_Constants_A14_t01: Fail # inherited from dart2js
+Language/11_Expressions/01_Constants_A14_t02: Fail # http://dartbug.com/5810
 Language/11_Expressions/01_Constants_A15_t06: Fail # http://dartbug.com/5519
 Language/11_Expressions/01_Constants_A15_t07: Fail # http://dartbug.com/5519
 Language/11_Expressions/01_Constants_A15_t08: Fail # http://dartbug.com/5519
@@ -235,13 +230,13 @@
 Language/11_Expressions/01_Constants_A17_t02: Fail # http://dartbug.com/5519
 Language/11_Expressions/01_Constants_A17_t03: Crash # inherited from VM
 Language/11_Expressions/01_Constants_A17_t03: Fail # http://dartbug.com/5519
+Language/11_Expressions/01_Constants_A19_t02: Fail # http://dartbug.com/5810
+Language/11_Expressions/01_Constants_A19_t03: Fail # http://dartbug.com/5810
 Language/11_Expressions/01_Constants_A19_t04: Fail # http://dartbug.com/5519
-Language/11_Expressions/01_Constants_A20_t01: Fail # http://dartbug.com/5810
 Language/11_Expressions/01_Constants_A20_t02: Fail # http://dartbug.com/5810
+Language/11_Expressions/01_Constants_A20_t03: Fail # http://dartbug.com/5810
 Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t06: Fail # Inherited from dart2js
 Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t09: Fail, OK # co19 issue 210
-Language/11_Expressions/05_Strings/1_String_Interpolation_A03_t02: Fail # inherited from VM
-Language/11_Expressions/05_Strings/1_String_Interpolation_A04_t02: Fail # inherited from VM
 Language/11_Expressions/05_Strings_A02_t01: Skip # co19 issue 90.
 Language/11_Expressions/05_Strings_A02_t46: Fail # inherited from VM
 Language/11_Expressions/05_Strings_A02_t48: Fail # inherited from VM
@@ -259,15 +254,16 @@
 Language/11_Expressions/11_Instance_Creation/1_New_A02_t05: Fail # inherited from dart2js
 Language/11_Expressions/11_Instance_Creation/1_New_A02_t06: Fail # inherited from dart2js
 Language/11_Expressions/11_Instance_Creation/1_New_A02_t07: Fail # inherited from dart2js
+Language/11_Expressions/11_Instance_Creation/1_New_A03_t01: Fail # http://dartbug.com/6895
+Language/11_Expressions/11_Instance_Creation/1_New_A03_t02: Fail # http://dartbug.com/6895
+Language/11_Expressions/11_Instance_Creation/1_New_A04_t01: Fail # http://dartbug.com/6895
+Language/11_Expressions/11_Instance_Creation/1_New_A04_t02: Fail # http://dartbug.com/6895
 Language/11_Expressions/11_Instance_Creation/1_New_A09_t09: Fail # inherited from VM
-Language/11_Expressions/11_Instance_Creation/1_New_A13_t04: Fail # Inherited from VM
-Language/11_Expressions/11_Instance_Creation/1_New_A14_t01: Fail # Inherited from dart2js
 Language/11_Expressions/11_Instance_Creation/2_Const_A01_t02: Fail # http://dartbug.com/5519
 Language/11_Expressions/11_Instance_Creation/2_Const_A06_t01: Fail # http://dartbug.com/5519
 Language/11_Expressions/11_Instance_Creation/2_Const_A06_t02: Fail # http://dartbug.com/5519
 Language/11_Expressions/11_Instance_Creation/2_Const_A10_t01: Fail # inherited from VM
 Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A04_t01: Fail # http://dartbug.com/5519
-Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A03_t01: Fail # inherited from VM
 Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t01: Fail # inherited from VM
 Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t02: Fail # inherited from VM
 Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t02: Fail # inherited from VM
@@ -275,19 +271,10 @@
 Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t03: Fail # inherited from VM
 Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t04: Fail # http://dartbug.com/5519
 Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t06: Fail # inherited from VM
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t02: Fail # inherited from VM
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t03: Fail # inherited from VM
 Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t08: Fail # inherited from VM
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A05_t01: Fail # inherited from VM
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A06_t02: Fail # inherited from VM
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: Fail # co19 issue 251 or issue 5732
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A03_t02: Fail # co19 issue 251 or issue 5732
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A03_t03: Fail # co19 issue 251 or issue 5732
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A07_t01: Fail # co19 issue 251 or issue 5732
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A08_t02: Fail # co19 issue 251 or issue 5732
 Language/11_Expressions/17_Getter_Invocation_A02_t01: Fail # inherited from VM
 Language/11_Expressions/18_Assignment_A05_t02: Fail # inherited from VM
-Language/11_Expressions/18_Assignment_A05_t04: Fail # inherited from VM
+Language/11_Expressions/18_Assignment_A05_t04: Fail, Pass, OK # Fails in minified, depends on method names.
 Language/11_Expressions/18_Assignment_A05_t05: Fail # inherited from VM
 Language/11_Expressions/19_Conditional_A01_t14: Fail # Inherited from dart2js
 Language/11_Expressions/19_Conditional_A01_t15: Fail # Inherited from dart2js
@@ -330,7 +317,6 @@
 Language/11_Expressions/30_Identifier_Reference_A02_t01: Fail # Pseudo keyword "abstract".
 Language/11_Expressions/30_Identifier_Reference_A04_t09: Fail # Inherited from dart2js
 Language/11_Expressions/30_Identifier_Reference_A05_t01: Fail # Inherited from dart2js
-Language/11_Expressions/30_Identifier_Reference_A05_t04: Fail # Inherited from dart2js
 Language/11_Expressions/30_Identifier_Reference_A05_t12: Fail # Inherited from dart2js
 Language/11_Expressions/30_Identifier_Reference_A06_t01: Fail # Inherited from VM (error returning class name).
 Language/11_Expressions/30_Identifier_Reference_A06_t02: Fail # Inherited from VM (error returning typedef).
@@ -372,47 +358,51 @@
 Language/12_Statements/12_Labels_A03_t04: Fail # Inherited from dart2js
 Language/12_Statements/14_Continue_A02_t12: Fail # Inherited from dart2js
 Language/12_Statements/14_Continue_A02_t13: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/1_Imports_A02_t01: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/1_Imports_A02_t02: Fail # Inherited from dart2js
+Language/13_Libraries_and_Scripts/1_Imports_A02_t14: Fail # Inherited from dart2js
 Language/13_Libraries_and_Scripts/1_Imports_A02_t16: Fail # Inherited from dart2js
 Language/13_Libraries_and_Scripts/1_Imports_A02_t17: Fail # Inherited from dart2js
 Language/13_Libraries_and_Scripts/1_Imports_A02_t18: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/1_Imports_A02_t19: Fail # Inherited from VM (does not throw NSME).
 Language/13_Libraries_and_Scripts/1_Imports_A02_t28: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/1_Imports_A03_t02: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/1_Imports_A03_t22: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/1_Imports_A03_t42: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/1_Imports_A03_t62: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/2_Exports_A01_t07: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/2_Exports_A01_t15: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/2_Exports_A01_t16: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/2_Exports_A04_t04: Fail # Inherited from dart2js
+Language/13_Libraries_and_Scripts/1_Imports_A03_t31: Fail # Inherited from dart2js
+Language/13_Libraries_and_Scripts/1_Imports_A05_t01: Fail # Inherited from dart2js
 Language/13_Libraries_and_Scripts/2_Exports_A04_t05: Fail # Inherited from dart2js
 Language/13_Libraries_and_Scripts/2_Exports_A04_t06: Fail # Inherited from dart2js
 Language/13_Libraries_and_Scripts/3_Parts_A03_t02: Fail # Inherited from dart2js
-Language/13_Libraries_and_Scripts/4_Scripts_A01_t16: Fail # Inherited from dart2js
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t21: Fail # Inherited from dart2js
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t22: Fail # Inherited from dart2js
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t23: Fail # Inherited from dart2js
 Language/13_Libraries_and_Scripts/4_Scripts_A03_t01: Fail # http://dartbug.com/5519
 Language/13_Libraries_and_Scripts/4_Scripts_A03_t03: Fail # http://dartbug.com/5519
+Language/13_Libraries_and_Scripts/5_URIs_A01_t01: Fail # Inherited from dart2js
+Language/13_Libraries_and_Scripts/5_URIs_A01_t04: Fail # Inherited from dart2js
+Language/13_Libraries_and_Scripts/5_URIs_A01_t05: Fail # Inherited from dart2js
+Language/13_Libraries_and_Scripts/5_URIs_A01_t11: Fail # Inherited from dart2js
+Language/13_Libraries_and_Scripts/5_URIs_A01_t14: Fail # Inherited from dart2js
+Language/13_Libraries_and_Scripts/5_URIs_A01_t15: Fail # Inherited from dart2js
+Language/13_Libraries_and_Scripts/5_URIs_A01_t21: Fail # Inherited from dart2js
+Language/13_Libraries_and_Scripts/5_URIs_A01_t24: Fail # Inherited from dart2js
+Language/13_Libraries_and_Scripts/5_URIs_A01_t25: Fail # Inherited from dart2js
 Language/14_Types/2_Dynamic_Type_System_A02_t01: Fail # inherited from VM
 Language/14_Types/3_Type_Declarations/1_Typedef_A06_t01: Fail # http://dartbug.com/5519
 Language/14_Types/3_Type_Declarations/1_Typedef_A06_t02: Fail # http://dartbug.com/5519
 Language/14_Types/3_Type_Declarations/1_Typedef_A06_t03: Fail # http://dartbug.com/5519
 Language/14_Types/3_Type_Declarations/1_Typedef_A06_t04: Fail # http://dartbug.com/5519
+Language/14_Types/3_Type_Declarations/1_Typedef_A06_t05: Fail # Inherited from dart2js
 Language/14_Types/3_Type_Declarations/1_Typedef_A07_t01: Fail, Pass # inherited from dart2js: fails in minify, self-reference typedef check not performed
 Language/14_Types/3_Type_Declarations/1_Typedef_A07_t02: Fail, Pass # inherited from dart2js: fails in minify, self-reference typedef check not performed
 Language/14_Types/3_Type_Declarations/1_Typedef_A07_t03: Fail, Pass # inherited from dart2js: fails in minify, self-reference typedef check not performed
-Language/14_Types/5_Function_Types_A01_t05: Fail # inherited from dart2js
-Language/14_Types/5_Function_Types_A02_t01: Fail # inherited from VM
+Language/14_Types/3_Type_Declarations/1_Typedef_A07_t04: Fail # Inherited from dart2js
+Language/14_Types/5_Function_Types_A01_t03: Fail # Inherited from dart2js
+Language/14_Types/5_Function_Types_A06_t01: Fail # Inherited from dart2js
 Language/15_Reference/1_Lexical_Rules/1_Reserved_Words_A40_t04: Fail # inherited from dart2js
 Language/15_Reference/1_Lexical_Rules_A02_t06: Fail # inherited from dart2js
 LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A03_t01: Fail # Inherited from dart2js
 LibTest/core/Date/Date.fromString_A03_t01: Fail, OK # Issue co19 - 121
 LibTest/core/Date/toString_A02_t01: Fail, OK # inherited from VM
 LibTest/core/Date/year_A01_t01: Fail, OK # inherited from VM
-LibTest/core/EmptyQueueException/EmptyQueueException_A01_t01: Fail, OK # co19 issue 288
-LibTest/core/EmptyQueueException/toString_A01_t01: Fail, OK # co19 issue 288
+LibTest/core/Future/chain_A03_t01: Fail, OK # co19 issue 328
+LibTest/core/Future/transform_A03_t01: Fail, OK # co19 issue 328
 LibTest/core/LinkedHashMap/LinkedHashMap_class_A01_t01: Fail, OK # co19 issue 293
-LibTest/core/List/iterator_next_A02_t01: Fail, OK # co19 issue 288
 LibTest/core/Map/getKeys_A01_t01: Fail, OK # co19 issue 293
 LibTest/core/Map/getKeys_A01_t02: Fail, OK # co19 issue 293
 LibTest/core/Map/getValues_A01_t01: Fail, OK # co19 issue 293
@@ -420,22 +410,13 @@
 LibTest/core/Map/getValues_A01_t02: Fail, OK # co19 issue 293
 LibTest/core/Match/operator_subscript_A01_t01: Fail # inherited from VM
 LibTest/core/Match/operator_subscript_A01_t01: Fail, OK # co19 issue 294
-LibTest/core/NoMoreElementsException/NoMoreElementsException_A01_t01: Fail, OK # co19 issue 288
-LibTest/core/NoMoreElementsException/toString_A01_t01: Fail, OK # co19 issue 288
-LibTest/core/NoSuchMethodError/NoSuchMethodError_A01_t01: Fail, OK # co19 issue 300
-LibTest/core/NoSuchMethodError/toString_A01_t01: Fail, OK # co19 issue 300
-LibTest/core/Queue/Queue.from_A01_t02: Fail # Inherited from dart2js
-LibTest/core/Queue/first_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/Queue/first_A02_t01: Fail, OK # co19 issue 291
-LibTest/core/Queue/iterator_next_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/Queue/last_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/Queue/last_A02_t01: Fail, OK # co19 issue 291
-LibTest/core/Queue/removeFirst_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/Queue/removeLast_A02_t01: Fail, OK # co19 issue 288
 LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A02_t01: Fail # inherited from VM
 LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A02_t01: Fail, OK # co19 issue 294
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A01_t01: Fail # Inherited from dart2js
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A02_t01: Fail # Inherited from dart2js
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: Fail # inherited from VM
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A04_t01: Fail # inherited from VM
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A06_t01: Fail # Inherited from dart2js
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A06_t02: Fail
 LibTest/core/RegExp/Pattern_semantics/firstMatch_DecimalEscape_A01_t02: Fail # inherited from VM
 LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: Fail # inherited from VM
@@ -444,22 +425,8 @@
 LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A03_t01: Fail # inherited from VM
 LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A03_t01: Fail, OK # co19 issue 294
 LibTest/core/RegExp/firstMatch_A01_t01: Fail, OK # co19 issue 294
-LibTest/core/Set/Set.from_A01_t02: Fail # Inherited from dart2js
-LibTest/core/Stopwatch/Stopwatch_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/elapsedInMs_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/elapsedInUs_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/elapsed_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/elapsed_A01_t02: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/elapsed_A01_t03: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/frequency_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/start_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/start_A01_t02: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/start_A01_t03: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/stop_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/String/String_class_A02_t01: Fail, OK # co19 issue 284
-LibTest/core/String/charCodeAt_A01_t01: Fail, OK # co19 issue 284
-LibTest/core/String/charCodes_A01_t01: Fail, OK # co19 issue 284
 LibTest/core/String/contains_A01_t02: Fail # inherited from VM
+LibTest/core/double/parse_A02_t01: Fail # Inherited from VM.
 LibTest/core/double/toRadixString_A01_t01: Fail # inherited from VM
 LibTest/core/int/operator_left_shift_A01_t02: Fail, OK # co19 issue 129
 LibTest/core/int/toRadixString_A01_t01: Fail # inherited from VM
@@ -468,7 +435,6 @@
 LibTest/isolate/SendPort/send_A02_t03: Fail, OK # co19 issue 293
 LibTest/isolate/SendPort/send_A02_t04: Fail, OK # co19 issue 293
 LibTest/isolate/isolate_api/port_A01_t01: Skip # Times out.
-
 LibTest/isolate/isolate_api/spawnUri_A01_t01: Fail, OK # Problems with the test: encoded file name
 LibTest/isolate/isolate_api/spawnUri_A01_t02: Fail, OK # Problems with the test: encoded file name
 LibTest/isolate/isolate_api/spawnUri_A01_t03: Fail, OK # Problems with the test: encoded file name
@@ -476,45 +442,12 @@
 LibTest/isolate/isolate_api/spawnUri_A01_t05: Fail, OK # Problems with the test: encoded file name
 LibTest/math/Random/nextDouble_A01_t01: Fail # Inherited from VM.
 LibTest/math/exp_A01_t01: Fail # Issue co19 - 44
-LibTest/math/parseDouble_A02_t01: Fail # Inherited from VM.
 LibTest/math/pow_A01_t01: Fail # Inherited from VM.
 LibTest/math/pow_A11_t01: Fail # Inherited from VM.
 LibTest/math/pow_A13_t01: Fail # Inherited from VM.
 LibTest/math/sin_A01_t01: Fail # Inherited from VM.
 LibTest/math/tan_A01_t01: Fail # Issue co19 - 44
 
-Language/07_Classes/07_Classes_A01_t20: Fail # http://dartbug.com/6687
-Language/07_Classes/07_Classes_A02_t34: Fail # http://dartbug.com/6687
-Language/07_Classes/07_Classes_A03_t10: Fail # http://dartbug.com/6687
-
-LibTest/core/RegExp/RegExp_A01_t04: Fail, OK # co19 issue 314
-LibTest/core/String/contains_A01_t01: Fail, OK # co19 issue 314
-LibTest/core/String/contains_A01_t03: Fail, OK # co19 issue 314
-
-LibTest/core/NotImplementedException/NotImplementedException_A01_t01: Fail, OK # co19 issue 315
-LibTest/core/NotImplementedException/toString_A01_t01: Fail, OK # co19 issue 315
-
-LibTest/core/IndexOutOfRangeException/IndexOutOfRangeException_A01_t01: Fail, OK # co19 issue 290
-LibTest/core/IndexOutOfRangeException/toString_A01_t01: Fail, OK # co19 issue 290
-LibTest/core/List/getRange_A04_t01: Fail, OK # co19 issue 290
-LibTest/core/List/insertRange_A06_t01: Fail, OK # co19 issue 290
-LibTest/core/List/last_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/length_A05_t01: Fail, OK # co19 issue 290
-LibTest/core/List/List_A01_t01: Fail, OK # co19 issue 290
-LibTest/core/List/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/operator_subscripted_assignment_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/removeLast_A01_t02: Fail, OK # co19 issue 290
-LibTest/core/List/removeRange_A05_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A02_t02: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A03_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A03_t02: Fail, OK # co19 issue 290
-LibTest/core/Match/group_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/Match/groups_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/Match/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/charCodeAt_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/substring_A02_t01: Fail, OK # co19 issue 290
 
 [ $compiler == dart2dart && $system == windows ]
 LibTest/core/double/operator_remainder_A01_t04: Fail # Result is NaN
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 3675613..b878b65 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -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.
 
-
 # Crashes first, please. Then untriaged bugs. There is a section below
 # for co19 bugs.
 [ $compiler == dart2js ]
@@ -35,6 +34,8 @@
 Language/06_Functions/06_Functions_A01_t22: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/07_Classes_A03_t07: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/1_Instance_Methods_A06_t01: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/1_Instance_Methods_A06_t02: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/1_Instance_Methods_A07_t01: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/6_Constructors/2_Factories_A05_t01: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/6_Constructors/2_Factories_A05_t02: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/6_Constructors/2_Factories_A05_t03: Fail # TODO(ahe): Please triage this failure.
@@ -42,10 +43,16 @@
 Language/07_Classes/6_Constructors/2_Factories_A07_t01: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t01: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t03: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors_A01_t02: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors_A01_t03: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors_A01_t04: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors_A01_t05: Fail # TODO(ahe): Please triage this failure.
+Language/07_Classes/6_Constructors_A01_t06: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A02_t03: Fail # TODO(ahe): Please triage this failure.
 Language/09_Generics/09_Generics_A05_t01: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/01_Constants_A05_t01: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/01_Constants_A13_t06: Fail # TODO(ahe): Please triage this failure.
+Language/11_Expressions/01_Constants_A20_t03: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t06: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/08_Throw_A01_t01: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/08_Throw_A05_t01: Fail # TODO(ahe): Please triage this failure.
@@ -64,6 +71,7 @@
 Language/11_Expressions/19_Conditional_A01_t14: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/19_Conditional_A01_t15: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t14: Fail # TODO(ahe): Please triage this failure.
+Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t15: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/21_Bitwise_Expressions_A01_t16: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/21_Bitwise_Expressions_A01_t17: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/22_Equality_A01_t23: Fail # TODO(ahe): Please triage this failure.
@@ -82,9 +90,7 @@
 Language/11_Expressions/27_Unary_Expressions_A01_t22: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/30_Identifier_Reference_A04_t09: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/30_Identifier_Reference_A05_t01: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/30_Identifier_Reference_A05_t04: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/30_Identifier_Reference_A05_t12: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/30_Identifier_Reference_A06_t02: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/31_Type_Test_A01_t02: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/31_Type_Test_A01_t04: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/31_Type_Test_A04_t01: Fail # TODO(ahe): Please triage this failure.
@@ -117,36 +123,68 @@
 Language/12_Statements/12_Labels_A03_t04: Fail # TODO(ahe): Please triage this failure.
 Language/12_Statements/14_Continue_A02_t12: Fail # TODO(ahe): Please triage this failure.
 Language/12_Statements/14_Continue_A02_t13: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t01: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t02: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t14: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/1_Imports_A02_t16: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/1_Imports_A02_t17: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/1_Imports_A02_t18: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/1_Imports_A02_t19: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/1_Imports_A02_t27: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/1_Imports_A02_t28: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t02: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t22: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t42: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t62: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Exports_A01_t07: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Exports_A01_t15: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Exports_A01_t16: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Exports_A04_t04: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t31: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t51: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A05_t01: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A04_t05: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A04_t06: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/3_Parts_A03_t02: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/4_Scripts_A01_t16: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t21: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t22: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t23: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/5_URIs_A01_t01: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/5_URIs_A01_t04: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/5_URIs_A01_t05: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/5_URIs_A01_t11: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/5_URIs_A01_t14: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/5_URIs_A01_t15: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/5_URIs_A01_t21: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/5_URIs_A01_t24: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/5_URIs_A01_t25: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/3_Type_Declarations/1_Typedef_A07_t05: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/3_Type_Declarations/1_Typedef_A07_t06: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/3_Type_Declarations/1_Typedef_A07_t07: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A01_t04: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A01_t10: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A02_t02: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A02_t03: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A02_t04: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A02_t05: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A02_t06: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A02_t07: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A02_t08: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A02_t09: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A02_t10: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A03_t01: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A03_t02: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A03_t03: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A03_t04: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A03_t06: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A03_t07: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A03_t08: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A03_t09: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A03_t10: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A03_t11: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A03_t12: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A03_t13: Fail # TODO(ahe): Please triage this failure.
+Language/14_Types/5_Function_Types_A06_t01: Fail # TODO(ahe): Please triage this failure.
 Language/15_Reference/1_Lexical_Rules/1_Reserved_Words_A40_t04: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/Queue/Queue.from_A01_t02: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/Set/Set.from_A01_t02: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/String/replaceAll_A02_t01: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/String/replaceFirst_A02_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A01_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A02_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A06_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/double/INFINITY_A01_t04: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/double/NEGATIVE_INFINITY_A01_t04: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/double/parse_A01_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/isolate/ReceivePort/receive_A01_t02: Fail # TODO(ahe): Please triage this failure.
 LibTest/math/Random/nextDouble_A01_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/math/exp_A01_t01: Fail # TODO(ahe): Please triage this failure.
-LibTest/math/parseDouble_A01_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/math/pow_A01_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/math/pow_A11_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/math/pow_A13_t01: Fail # TODO(ahe): Please triage this failure.
@@ -157,24 +195,10 @@
 Language/07_Classes/6_Constructors/2_Factories_A01_t05: Fail
 
 
-LibTest/core/List/iterator_next_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/Queue/iterator_next_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/Queue/first_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/Queue/removeLast_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/Queue/last_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/Queue/removeFirst_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/NoMoreElementsException/NoMoreElementsException_A01_t01: Fail, OK # co19 issue 288
-LibTest/core/NoMoreElementsException/toString_A01_t01: Fail, OK # co19 issue 288
-LibTest/core/EmptyQueueException/EmptyQueueException_A01_t01: Fail, OK # co19 issue 288
-LibTest/core/EmptyQueueException/toString_A01_t01: Fail, OK # co19 issue 288
-
 [ $compiler == dart2js && $unchecked ]
 LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A03_t01: Fail # TODO(ahe): Please triage this failure.
 
 [ $compiler == dart2js && $runtime == jsshell ]
-Language/06_Functions/3_Type_of_a_Function_A01_t01: Fail # TODO(ahe): Triage these tests.
-Language/07_Classes/8_Static_Variables_A02_t01: Fail # TODO(ahe): Triage these tests.
-LibTest/core/Map/putIfAbsent_A01_t08: Fail # TODO(ahe): Triage these tests.
 LibTest/core/double/round_A01_t01: Fail # TODO(ahe): Triage these tests.
 LibTest/core/double/toStringAsExponential_A01_t07: Fail # TODO(ahe): Triage these tests.
 LibTest/core/double/toStringAsFixed_A01_t05: Fail # TODO(ahe): Triage these tests.
@@ -193,12 +217,13 @@
 Language/07_Classes/6_Constructors/2_Factories_A06_t04: Fail # TODO(ahe): Please triage this failure.
 Language/09_Generics/09_Generics_A03_t01: Fail # TODO(ahe): Please triage this failure.
 Language/09_Generics/09_Generics_A04_t06: Fail # TODO(ahe): Please triage this failure.
-Language/09_Generics/09_Generics_A05_t02: Fail # TODO(ahe): Please triage this failure.
+Language/11_Expressions/03_Numbers_A05_t02: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/06_Lists_A09_t01: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/06_Lists_A09_t04: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/06_Lists_A09_t05: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/07_Maps_A10_t04: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/07_Maps_A10_t05: Fail # TODO(ahe): Please triage this failure.
+Language/11_Expressions/07_Maps_A11_t01: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/09_Function_Expressions_A03_t03: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/09_Function_Expressions_A04_t03: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/09_Function_Expressions_A05_t02: Fail # TODO(ahe): Please triage this failure.
@@ -209,15 +234,20 @@
 Language/11_Expressions/11_Instance_Creation/1_New_A11_t01: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/11_Instance_Creation/2_Const_A09_t02: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/11_Instance_Creation/2_Const_A09_t03: Fail # TODO(ahe): Please triage this failure.
+Language/11_Expressions/11_Instance_Creation_A05_t01: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/11_Instance_Creation_A05_t02: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t04: Fail # TODO(ahe): Please triage this failure.
+Language/11_Expressions/19_Conditional_A04_t03: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/20_Logical_Boolean_Expressions_A03_t01: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/27_Unary_Expressions_A02_t03: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/32_Type_Cast_A05_t03: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/32_Type_Cast_A05_t05: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/05_If_A02_t01: Fail # TODO(ahe): Please triage this failure.
 Language/12_Statements/06_For/1_For_Loop_A01_t08: Fail # TODO(ahe): Please triage this failure.
 Language/12_Statements/09_Switch_A05_t01: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t06: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t26: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t46: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t66: Fail # TODO(ahe): Please triage this failure.
 Language/14_Types/4_Interface_Types_A08_t03: Fail # TODO(ahe): Please triage this failure.
 Language/14_Types/8_Parameterized_Types_A02_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/AssertionError/column_A01_t02: Fail # TODO(ahe): Please triage this failure.
@@ -227,9 +257,9 @@
 LibTest/core/List/operator_subscript_A03_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/List/operator_subscripted_assignment_A03_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/Map/putIfAbsent_A01_t04: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/Map/putIfAbsent_A01_t07: Fail # TODO(ahe): Please triage this failure.
-LibTest/core/Map/putIfAbsent_A01_t08: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/Queue/iterator_hasNext_A01_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/String/contains_A01_t01: Fail # TODO(ahe): Please triage this failure.
+LibTest/core/String/contains_A01_t03: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/TypeError/column_A01_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/TypeError/dstName_A01_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/TypeError/dstType_A01_t01: Fail # TODO(ahe): Please triage this failure.
@@ -247,12 +277,6 @@
 Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A06_t01: Fail # Checked mode failure for noSuchMethod type.
 Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A06_t02: Fail # Checked mode failure for noSuchMethod type.
 
-# These tests return an object from a void function.
-Language/14_Types/7_Type_Void_A04_t02: Fail, OK
-Language/14_Types/7_Type_Void_A04_t03: Fail, OK
-Language/14_Types/7_Type_Void_A04_t04: Fail, OK
-Language/14_Types/7_Type_Void_A04_t05: Fail, OK
-
 Language/11_Expressions/11_Instance_Creation/1_New_A12_t02: Fail # http://dartbug.com/3970
 
 
@@ -273,21 +297,6 @@
 # These tests need to be updated for new optional parameter syntax and semantics, co19 issue 258:
 Language/07_Classes/1_Instance_Methods_A02_t05: Fail, OK
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A13_t01: Fail, OK
-Language/14_Types/5_Function_Types_A01_t21: Fail, OK
-
-LibTest/core/String/charCodes_A01_t01: Fail, OK # co19 issue 289
-
-LibTest/core/Stopwatch/Stopwatch_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/elapsed_A01_t03: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/elapsed_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/elapsed_A01_t02: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/elapsedInUs_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/elapsedInMs_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/start_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/start_A01_t02: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/start_A01_t03: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/stop_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/frequency_A01_t01: Fail, OK # co19 issue 297
 
 LibTest/isolate/SendPort/send_A02_t02: Fail, OK # co19 issue 293
 LibTest/isolate/SendPort/send_A02_t03: Fail, OK # co19 issue 293
@@ -313,8 +322,6 @@
 LibTest/core/double/operator_remainder_A01_t04: Fail
 
 [ $compiler == dart2js ]
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t10: Fail # TODO(ahe): Enforce optional parameter semantics.
-Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t11: Fail # TODO(ahe): Enforce optional parameter semantics.
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t03: Fail # TODO(ahe): Enforce optional parameter semantics.
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t01: Fail # http://dartbug.com/5026
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t04: Fail # TODO(ahe): Enforce optional parameter semantics.
@@ -332,19 +339,6 @@
 Language/11_Expressions/22_Equality_A02_t03: Fail # Compile-time error: unexpected token 'equals'
 Language/11_Expressions/05_Strings_A20_t01: Fail # Runtime error: Expect.identical(expected: <abyr, abyr
 LibTest/isolate/isolate_api/spawnUri_A02_t01: Fail # Runtime error: Expect.throws() fails
-Language/11_Expressions/05_Strings/1_String_Interpolation_A03_t02: Fail # Runtime error: TypeError: Cannot call method '$call$0' of undefined
-Language/11_Expressions/05_Strings/1_String_Interpolation_A04_t02: Fail # Runtime error: TypeError: Cannot call method '$call$0' of undefined
-Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A08_t01: Fail # Runtime error: TypeError: Cannot call method '$call$0' of undefined
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t02: Fail # Runtime error: TypeError: Cannot call method '$call$0' of undefined
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t03: Fail # Runtime error: TypeError: Cannot call method '$call$0' of undefined
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A05_t01: Fail # Runtime error: TypeError: Cannot call method '$call$0' of undefined
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A06_t02: Fail # Runtime error: TypeError: Cannot call method '$call$0' of undefined
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A03_t02: Fail # Runtime error: TypeError: Cannot call method '$call$0' of undefined
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A03_t03: Fail # Runtime error: TypeError: Cannot call method '$call$0' of undefined
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A07_t01: Fail # Runtime error: TypeError: Cannot call method '$call$0' of undefined
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A08_t02: Fail # Runtime error: TypeError: Cannot call method '$call$0' of undefined
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: Fail # Runtime error: TypeError: Cannot call method '$call$2' of undefined
-Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A03_t01: Fail # Runtime error: TypeError: Object 1 has no method '$call$0'
 LibTest/isolate/isolate_api/spawnUri_A01_t01: Fail # Runtime error: UnsupportedError: Currently spawnUri is not supported without web workers.
 LibTest/isolate/isolate_api/spawnUri_A01_t02: Fail # Runtime error: UnsupportedError: Currently spawnUri is not supported without web workers.
 LibTest/isolate/isolate_api/spawnUri_A01_t03: Fail # Runtime error: UnsupportedError: Currently spawnUri is not supported without web workers.
@@ -390,9 +384,6 @@
 
 Language/11_Expressions/22_Equality_A01_t01: Fail, OK # Function declaration takes precedence over function expression.
 Language/11_Expressions/28_Postfix_Expressions_A01_t01: Fail, OK # A map literal cannot start an expression statement.
-LibTest/core/String/String_class_A02_t01: Pass, Fail, OK # issue 6418 compiler cancelled: Unhandled non-BMP character: U+10000
-LibTest/core/String/charCodeAt_A01_t01: Fail, OK # compiler cancelled: Unhandled non-BMP character: U+10000
-LibTest/core/String/charCodes_A01_t01: Fail, OK # compiler cancelled: Unhandled non-BMP character: U+10000
 
 Language/06_Functions/1_Function_Declaration_A02_t03: Fail, OK # co19 issue 210
 Language/06_Functions/1_Function_Declaration_A03_t03: Fail, OK # co19 issue 210
@@ -410,36 +401,10 @@
 
 LibTest/core/int/hashCode_A01_t01: Fail, OK # co19 issue 308
 
-LibTest/core/NoSuchMethodError/NoSuchMethodError_A01_t01: Fail, OK # co19 issue 300
-LibTest/core/NoSuchMethodError/toString_A01_t01: Fail, OK # co19 issue 300
-
-LibTest/core/String/contains_A01_t01: Fail, OK # co19 issue 314
-LibTest/core/String/contains_A01_t03: Fail, OK # co19 issue 314
-
-LibTest/core/NotImplementedException/NotImplementedException_A01_t01: Fail, OK # co19 issue 315
-LibTest/core/NotImplementedException/toString_A01_t01: Fail, OK # co19 issue 315
-
-LibTest/core/IndexOutOfRangeException/IndexOutOfRangeException_A01_t01: Fail, OK # co19 issue 290
-LibTest/core/IndexOutOfRangeException/toString_A01_t01: Fail, OK # co19 issue 290
-LibTest/core/List/getRange_A04_t01: Fail, OK # co19 issue 290
-LibTest/core/List/insertRange_A06_t01: Fail, OK # co19 issue 290
-LibTest/core/List/last_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/length_A05_t01: Fail, OK # co19 issue 290
-LibTest/core/List/List_A01_t01: Fail, OK # co19 issue 290
-LibTest/core/List/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/operator_subscripted_assignment_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/removeLast_A01_t02: Fail, OK # co19 issue 290
-LibTest/core/List/removeRange_A05_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A02_t02: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A03_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A03_t02: Fail, OK # co19 issue 290
-LibTest/core/Match/group_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/Match/groups_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/Match/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/charCodeAt_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/substring_A02_t01: Fail, OK # co19 issue 290
+Language/03_Overview/2_Privacy_A01_t11: Pass, OK # co19 issue 316
+Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A03_t01: Pass, OK # co19 issue 316
+LibTest/core/Future/chain_A03_t01: Fail, OK # co19 issue 328
+LibTest/core/Future/transform_A03_t01: Fail, OK # co19 issue 328
 
 [ $compiler == dart2js && $jscl ]
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A04_t01: Fail, Pass # issue 3333
@@ -475,7 +440,6 @@
 LibTest/core/int/toDouble_A01_t01: Fail, OK # Requires big int.
 LibTest/core/int/toRadixString_A01_t01: Fail, OK # Bad test: uses Expect.fail, Expect.throws, assumes case of result, and uses unsupported radixes.
 LibTest/core/String/contains_A01_t02: Fail, OK # co19 issue 105.
-Language/07_Classes/1_Instance_Methods/2_Operators_A02_t01: Fail, OK # Expects negative result from bit-operation.
 
 
 [ $compiler == dart2js && $system == macos ]
@@ -495,12 +459,9 @@
 Language/03_Overview/1_Scoping_A02_t07: Fail # duplicate definition of f(var f){f();}
 Language/03_Overview/1_Scoping_A02_t12: Fail # duplicate definition of x=42
 Language/03_Overview/2_Privacy_A01_t06: Fail # cannot resolve type _inaccessibleFuncType
-Language/03_Overview/2_Privacy_A01_t11: Fail # internal error: super property read not implemented
-Language/03_Overview/2_Privacy_A01_t14: Fail # duplicate definition of _(var _)=> _
 
 Language/11_Expressions/01_Constants_A12_t01: Fail # internal error: CompileTimeConstantEvaluator not implemented
 Language/11_Expressions/22_Equality_A05_t01: Fail # != cannot be called on super
-Language/11_Expressions/27_Unary_Expressions_A01_t01: Fail # ! cannot be called on super
 Language/11_Expressions/27_Unary_Expressions_A01_t10: Fail # cannot deal with super in complex assignments
 Language/11_Expressions/30_Identifier_Reference_A02_t01: Fail # Pseudo keyword "abstract".
 
@@ -572,7 +533,6 @@
 Language/07_Classes/1_Instance_Methods/2_Operators_A07_t02: Fail # Checks that a compile-time error is produced if a user-defined operator [] specifies an optional named parameter in addition to the required one.
 Language/07_Classes/1_Instance_Methods/2_Operators_A07_t03: Fail # Checks that a compile-time error is produced if a user-defined operator []= specifies one optional named parameter.
 Language/07_Classes/1_Instance_Methods/2_Operators_A07_t04: Fail # Checks that a compile-time error is produced if a user-defined operator []= specifies one optional named parameter in addition to the two required ones
-Language/07_Classes/1_Instance_Methods_A02_t01: Fail # Checks that a compile-time error is produced if m1 has fewer named parameters than m2 (2 vs 3) and neither have any required parameters.
 Language/07_Classes/1_Instance_Methods_A02_t02: Fail # Checks that a compile-time error is produced if m1 has fewer named parameters than m2 (1 vs. 0) and neither have any required parameters.
 Language/07_Classes/1_Instance_Methods_A02_t05: Fail # Checks that a compile-time error is produced if m1 has almost the same set of named  parameters as m2 except for one of them having a different name.
 Language/07_Classes/2_Getters_A01_t03: Fail # Checks that a compile-time error is produced if empty formal parameter list is present.
@@ -615,9 +575,6 @@
 Language/11_Expressions/23_Relational_Expressions_A01_t13: Fail # Checks that a relational expression cannot be the operand of another relational expression.
 Language/11_Expressions/30_Identifier_Reference_A07_t01: Fail # Checks that it is a compile-time error when a built-in identifier "abstract" is used as a type annotation of a local variable.
 Language/12_Statements/03_Variable_Declaration_A04_t01: Fail # Checks that if the variable declaration is prefixed with the const modifier, then variable must be initialized to a constant expression.
-Language/14_Types/3_Type_Declarations/1_Typedef_A07_t01: Fail # Checks that self-referencing typedef is not allowed (return value type annotation has the same name as a type alias).
-Language/14_Types/3_Type_Declarations/1_Typedef_A07_t02: Fail # Checks that self-referencing typedef is not allowed (positional formal parameter type annotation has the same name as a type alias).
-Language/14_Types/3_Type_Declarations/1_Typedef_A07_t03: Fail # Checks that self-referencing typedef is not allowed (optional formal parameter type annotation has the same name as a type alias).
 Language/15_Reference/1_Lexical_Rules_A02_t06: Fail # Checks that Unicode whitespaces other than WHITESPACE are not permitted in the source code. Checks symbol U+00a0.
 
 
@@ -631,8 +588,6 @@
 
 Language/14_Types/2_Dynamic_Type_System_A02_t01: Fail # http://dartbug.com/5029
 
-Language/03_Overview/03_Overview_A01_t01: Fail # http://dartbug.com/3903
-
 Language/07_Classes/3_Setters_A04_t01: Fail # http://dartbug.com/5023
 Language/07_Classes/3_Setters_A04_t02: Fail # http://dartbug.com/5023
 Language/07_Classes/3_Setters_A04_t03: Fail # http://dartbug.com/5023
@@ -640,7 +595,6 @@
 Language/07_Classes/3_Setters_A04_t05: Fail # http://dartbug.com/5023
 Language/07_Classes/3_Setters_A04_t06: Fail # http://dartbug.com/5023
 Language/07_Classes/3_Setters_A04_t07: Fail # http://dartbug.com/5023
-Language/07_Classes/3_Setters_A04_t08: Fail # http://dartbug.com/5023
 
 Language/14_Types/3_Type_Declarations/1_Typedef_A02_t01: Fail # http://dartbug.com/5022
 Language/14_Types/3_Type_Declarations/1_Typedef_A02_t02: Fail # http://dartbug.com/5022
@@ -657,26 +611,12 @@
 Language/14_Types/5_Function_Types_A01_t08: Fail # http://dartbug.com/5022
 Language/14_Types/5_Function_Types_A01_t09: Fail # http://dartbug.com/5022
 Language/14_Types/5_Function_Types_A01_t11: Fail # http://dartbug.com/5022
-Language/14_Types/5_Function_Types_A01_t12: Fail # http://dartbug.com/5022
-Language/14_Types/5_Function_Types_A01_t13: Fail # http://dartbug.com/5022
-Language/14_Types/5_Function_Types_A01_t14: Fail # http://dartbug.com/5022
-Language/14_Types/5_Function_Types_A01_t15: Fail # http://dartbug.com/5022
-Language/14_Types/5_Function_Types_A01_t16: Fail # http://dartbug.com/5022
-Language/14_Types/5_Function_Types_A01_t17: Fail # http://dartbug.com/5022
-Language/14_Types/5_Function_Types_A01_t18: Fail # http://dartbug.com/5022
-Language/14_Types/5_Function_Types_A01_t19: Fail # http://dartbug.com/5022
-Language/14_Types/5_Function_Types_A01_t20: Fail # http://dartbug.com/5022
-Language/14_Types/5_Function_Types_A01_t21: Fail # http://dartbug.com/5022
-Language/14_Types/5_Function_Types_A01_t22: Fail # http://dartbug.com/5022
-Language/14_Types/5_Function_Types_A01_t23: Fail # http://dartbug.com/5022
 
 Language/13_Libraries_and_Scripts/4_Scripts_A03_t01: Fail # http://dartbug.com/5683
 Language/13_Libraries_and_Scripts/4_Scripts_A03_t03: Fail # http://dartbug.com/5683
 
 Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t02: Fail # http://dartbug.com/5713
 
-Language/07_Classes/07_Classes_A01_t20: Fail # http://dartbug.com/6687
-Language/07_Classes/07_Classes_A02_t34: Fail # http://dartbug.com/6687
 Language/07_Classes/07_Classes_A03_t10: Fail # http://dartbug.com/6687
 
 
@@ -686,7 +626,6 @@
 [ $compiler == dart2js ]
 Language/14_Types/5_Function_Types_A02_t01: Fail # Expect.isTrue(false) fails.
 
-Language/14_Types/4_Interface_Types_A05_t03: Fail # http://dartbug.com/5020
 Language/14_Types/4_Interface_Types_A08_t06: Fail # http://dartbug.com/5020
 Language/14_Types/4_Interface_Types_A10_t01: Fail # http://dartbug.com/5020
 Language/14_Types/4_Interface_Types_A10_t02: Fail # http://dartbug.com/5020
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index 068e299..60702b9 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -2,33 +2,10 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-# These tests either wrongly expect a compile-time error or wrongly reject a type error in production mode, co19 issue 282:
-[ $compiler == none && $runtime == vm ]
-Language/13_Libraries_and_Scripts/1_Imports_A03_t05: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t08: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t25: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t28: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t45: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t48: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t65: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t68: Fail, OK
-[ $compiler == none && $runtime == vm && $unchecked ]
-Language/13_Libraries_and_Scripts/1_Imports_A03_t02: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t22: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t42: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t62: Fail, OK
-[ $compiler == none && $runtime == vm && $checked ]
-Language/13_Libraries_and_Scripts/1_Imports_A03_t06: Fail, OK
-Language/13_Libraries_and_Scripts/1_Imports_A03_t66: Fail, OK
-
-
 [ $compiler == none && $runtime == vm ]
 Language/13_Libraries_and_Scripts/1_Imports_A02_t21: Crash # TODO(vm-team): Please triage this crash.
 Language/13_Libraries_and_Scripts/1_Imports_A02_t22: Crash # TODO(vm-team): Please triage this crash.
 
-Language/11_Expressions/30_Identifier_Reference_A05_t04: Fail, OK # co19 issue 302
-
-
 Language/05_Variables/05_Variables_A05_t04: Fail # TODO(vm-team): Please triage this failure.
 Language/05_Variables/05_Variables_A05_t11: Fail # TODO(vm-team): Please triage this failure.
 Language/05_Variables/05_Variables_A05_t13: Fail # TODO(vm-team): Please triage this failure.
@@ -36,14 +13,12 @@
 Language/05_Variables/05_Variables_A05_t15: Fail # TODO(vm-team): Please triage this failure.
 Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t05: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/07_Classes_A07_t03: Fail, OK # co19 issue 306
-Language/07_Classes/07_Classes_A07_t06: Fail, OK # co19 issue 306
+Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t10: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/2_Getters_A01_t03: Fail # Expects compile-time error when getter has empty parameter list.
 Language/07_Classes/2_Getters_A01_t05: Fail # Expects compile-time error when getter has empty parameter list.
-Language/07_Classes/3_Setters_A04_t03: Fail, OK # Syntax error, issue 304
-Language/07_Classes/3_Setters_A04_t06: Fail, OK # Syntax error, issue 304
-Language/07_Classes/3_Setters_A04_t07: Fail, OK # test error, issue 305
-Language/07_Classes/3_Setters_A04_t08: Fail, OK # test error, issue 305
+Language/07_Classes/3_Setters_A04_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/07_Classes/3_Setters_A04_t04: Fail # TODO(vm-team): Please triage this failure.
+Language/07_Classes/3_Setters_A04_t05: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/4_Abstract_Instance_Members_A03_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/4_Abstract_Instance_Members_A03_t03: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/4_Abstract_Instance_Members_A03_t04: Fail # TODO(vm-team): Please triage this failure.
@@ -63,6 +38,8 @@
 Language/11_Expressions/01_Constants_A05_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/01_Constants_A06_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/01_Constants_A14_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Expressions/01_Constants_A20_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Expressions/01_Constants_A20_t03: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t04: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t05: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t06: Fail # TODO(vm-team): Please triage this failure.
@@ -72,12 +49,10 @@
 Language/11_Expressions/11_Instance_Creation/1_New_A02_t05: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/11_Instance_Creation/1_New_A09_t09: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/11_Instance_Creation/2_Const_A10_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A03_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t08: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/17_Getter_Invocation_A02_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/18_Assignment_A05_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Expressions/18_Assignment_A05_t04: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/18_Assignment_A05_t05: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/19_Conditional_A01_t10: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/19_Conditional_A01_t11: Fail # TODO(vm-team): Please triage this failure.
@@ -90,6 +65,7 @@
 Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t12: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t13: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t14: Fail # TODO(vm-team): Please triage this failure.
+Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t15: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/21_Bitwise_Expressions_A01_t12: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/21_Bitwise_Expressions_A01_t13: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/21_Bitwise_Expressions_A01_t14: Fail # TODO(vm-team): Please triage this failure.
@@ -147,11 +123,6 @@
 Language/11_Expressions/30_Identifier_Reference_A08_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/31_Type_Test_A01_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/31_Type_Test_A01_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Expressions/31_Type_Test_A05_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Expressions/31_Type_Test_A05_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Expressions/31_Type_Test_A05_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Expressions/32_Type_Cast_A04_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Expressions/32_Type_Cast_A04_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/12_Statements/04_Local_Function_Declaration_A02_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/12_Statements/06_For_A01_t11: Fail # TODO(vm-team): Please triage this failure.
 Language/12_Statements/09_Switch_A01_t02: Fail # TODO(vm-team): Please triage this failure.
@@ -163,28 +134,25 @@
 Language/12_Statements/09_Switch_A06_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/12_Statements/10_Try_A11_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/12_Statements/12_Labels_A01_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A03_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/13_Libraries_and_Scripts_A05_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t01: Fail, OK # co 19 issue 313
-Language/13_Libraries_and_Scripts/1_Imports_A02_t02: Fail, OK # co 19 issue 313
-Language/13_Libraries_and_Scripts/1_Imports_A02_t16: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t17: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t18: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A02_t19: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/2_Exports_A01_t15: Fail, OK # co19 issue 311.
-Language/13_Libraries_and_Scripts/2_Exports_A01_t16: Fail, OK # co19 issue 312.
+Language/13_Libraries_and_Scripts/1_Imports_A02_t29: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A05_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A04_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A04_t03: Fail # TODO(vm-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A04_t05: Fail # TODO(vm-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A04_t06: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/4_Scripts_A01_t16: Fail # TODO(vm-team): Please triage this failure.
-Language/14_Types/5_Function_Types_A02_t01: Fail # TODO(vm-team): Please triage this failure.
-LibTest/core/Queue/Queue.from_A01_t02: Fail # TODO(vm-team): Please triage this failure.
-LibTest/core/Set/Set.from_A01_t02: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t20: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/5_URIs_A01_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/5_URIs_A01_t11: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/5_URIs_A01_t21: Fail # TODO(vm-team): Please triage this failure.
+Language/14_Types/5_Function_Types_A06_t01: Fail # TODO(vm-team): Please triage this failure.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A01_t01: Fail # TODO(vm-team): Please triage this failure.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A02_t01: Fail # TODO(vm-team): Please triage this failure.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A06_t01: Fail # TODO(vm-team): Please triage this failure.
+LibTest/core/double/parse_A02_t01: Fail # TODO(vm-team): Please triage this failure.
 LibTest/isolate/isolate_api/spawnUri_A01_t03: Fail # TODO(vm-team): Please triage this failure.
 LibTest/isolate/isolate_api/spawnUri_A01_t04: Fail # TODO(vm-team): Please triage this failure.
 LibTest/math/Random/nextDouble_A01_t01: Fail # TODO(vm-team): Please triage this failure.
-LibTest/math/parseDouble_A02_t01: Fail # TODO(vm-team): Please triage this failure.
 LibTest/math/pow_A01_t01: Fail # TODO(vm-team): Please triage this failure.
 LibTest/math/pow_A11_t01: Fail # TODO(vm-team): Please triage this failure.
 LibTest/math/pow_A13_t01: Fail # TODO(vm-team): Please triage this failure.
@@ -192,49 +160,25 @@
 
 LibTest/isolate/isolate_api/port_A01_t01: Skip # Times out.
 
-LibTest/core/String/String_class_A02_t01: Fail, OK # co19 issue 284
-LibTest/core/String/charCodeAt_A01_t01: Fail, OK # co19 issue 284
-LibTest/core/String/charCodes_A01_t01: Fail, OK # co19 issue 284
-
 Language/06_Functions/1_Function_Declaration_A02_t03: Fail # issue 6058
 Language/06_Functions/1_Function_Declaration_A03_t03: Fail # issue 6058
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t01: Fail # issue 6085
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t02: Fail # issue 6085
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A03_t03: Fail # issue 6085
 
-LibTest/core/EmptyQueueException/EmptyQueueException_A01_t01: Fail, OK # co19 issue 288
-LibTest/core/EmptyQueueException/toString_A01_t01: Fail, OK # co19 issue 288
-LibTest/core/List/iterator_next_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/NoMoreElementsException/NoMoreElementsException_A01_t01: Fail, OK # co19 issue 288
-LibTest/core/NoMoreElementsException/toString_A01_t01: Fail, OK # co19 issue 288
-LibTest/core/Queue/iterator_next_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/Queue/removeFirst_A02_t01: Fail, OK # co19 issue 288
-LibTest/core/Queue/removeLast_A02_t01: Fail, OK # co19 issue 288
-
-LibTest/core/NoSuchMethodError/NoSuchMethodError_A01_t01: Fail, OK # co19 issue 300
-LibTest/core/NoSuchMethodError/toString_A01_t01: Fail, OK # co19 issue 300
 
 [ $compiler == none && $runtime == vm && $checked ]
-Language/12_Statements/05_If_A02_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/12_Statements/09_Switch_A05_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/14_Types/7_Type_Void_A04_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/14_Types/7_Type_Void_A04_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/14_Types/7_Type_Void_A04_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/14_Types/7_Type_Void_A04_t05: Fail # TODO(vm-team): Please triage this failure.
-LibTest/core/Map/putIfAbsent_A01_t07: Fail # TODO(vm-team): Please triage this failure.
-LibTest/core/Map/putIfAbsent_A01_t08: Fail # TODO(vm-team): Please triage this failure.
-
-Language/14_Types/7_Type_Void_A04_t02: Fail, OK # co19 issue 158
-Language/14_Types/7_Type_Void_A04_t03: Fail, OK # co19 issue 158
-Language/14_Types/7_Type_Void_A04_t04: Fail, OK # co19 issue 158
-Language/14_Types/7_Type_Void_A04_t05: Fail, OK # co19 issue 158
+Language/14_Types/5_Function_Types_A03_t12: Fail # TODO(vm-team): Please triage this failure.
 
 Language/11_Expressions/11_Instance_Creation_A05_t02: Fail # co19 issue 234
 
 [ $compiler == none && $runtime == vm && $unchecked ]
-Language/14_Types/2_Dynamic_Type_System_A02_t01: Fail # TODO(vm-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/1_Imports_A03_t31: Fail # TODO(vm-team): Please triage this failure.
 LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A03_t01: Fail # TODO(vm-team): Please triage this failure.
 
+Language/11_Expressions/11_Instance_Creation/2_Const_A03_t01: Fail, OK # co19 issue 282
+Language/11_Expressions/11_Instance_Creation/2_Const_A03_t02: Fail, OK # co19 issue 282
 
 [ $compiler == none && $runtime == vm ]
 # Not properly reporting exception in initializer expressions
@@ -270,7 +214,6 @@
 Language/11_Expressions/07_Maps_A01_t01: Skip # co19 issue 91: map literals illegal at statement beginning.
 
 Language/11_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A05_t01: Fail # issue 1604.
-Language/11_Expressions/27_Unary_Expressions_A01_t01: Fail # issue 1288 (unary super operator call)
 
 LibTest/core/List/every_A03_t01: Skip # Promise removed (co19 issue #79)
 LibTest/core/List/filter_A03_t01: Skip # Promise removed (co19 issue #79)
@@ -286,31 +229,8 @@
 # New failures
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A06_t02: Fail
 
-LibTest/core/NotImplementedException/NotImplementedException_A01_t01: Fail, OK # co19 issue 315
-LibTest/core/NotImplementedException/toString_A01_t01: Fail, OK # co19 issue 315
-
-LibTest/core/IndexOutOfRangeException/IndexOutOfRangeException_A01_t01: Fail, OK # co19 issue 290
-LibTest/core/IndexOutOfRangeException/toString_A01_t01: Fail, OK # co19 issue 290
-LibTest/core/List/getRange_A04_t01: Fail, OK # co19 issue 290
-LibTest/core/List/insertRange_A06_t01: Fail, OK # co19 issue 290
-LibTest/core/List/last_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/length_A05_t01: Fail, OK # co19 issue 290
-LibTest/core/List/List_A01_t01: Fail, OK # co19 issue 290
-LibTest/core/List/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/operator_subscripted_assignment_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/removeLast_A01_t02: Fail, OK # co19 issue 290
-LibTest/core/List/removeRange_A05_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A02_t02: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A03_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A03_t02: Fail, OK # co19 issue 290
-LibTest/core/Match/group_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/Match/groups_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/Match/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/charCodeAt_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/substring_A02_t01: Fail, OK # co19 issue 290
-
+LibTest/core/Future/chain_A03_t01: Fail, OK # co19 issue 328
+LibTest/core/Future/transform_A03_t01: Fail, OK # co19 issue 328
 
 [ $compiler == none && $runtime == vm ]
 LibTest/core/Date/Date.fromString_A03_t01: Fail # Issue co19 - 121
@@ -367,32 +287,14 @@
 LibTest/core/Map/getValues_A01_t02: Fail, OK # co19 issue 293
 LibTest/core/Map/getValues_A01_t01: Fail, OK # co19 issue 293
 
-LibTest/core/Stopwatch/Stopwatch_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/elapsed_A01_t03: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/elapsed_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/elapsed_A01_t02: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/elapsedInUs_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/elapsedInMs_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/start_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/start_A01_t02: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/start_A01_t03: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/stop_A01_t01: Fail, OK # co19 issue 297
-LibTest/core/Stopwatch/frequency_A01_t01: Fail, OK # co19 issue 297
-
 LibTest/core/Match/operator_subscript_A01_t01: Fail, OK # co19 issue 294
 LibTest/core/RegExp/firstMatch_A01_t01: Fail, OK # co19 issue 294
 LibTest/core/RegExp/Pattern_semantics/firstMatch_Atom_A02_t01: Fail, OK # co19 issue 294
 LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A03_t01: Fail, OK # co19 issue 294
 
-LibTest/core/Queue/first_A02_t01: Fail, OK # co19 issue 291
-LibTest/core/Queue/last_A02_t01: Fail, OK # co19 issue 291
-
 Language/11_Expressions/07_Maps_A07_t03: Fail, OK # co19 issue 287
 Language/11_Expressions/07_Maps_A04_t02: Fail, OK # co19 issue 287
 
-LibTest/core/RegExp/RegExp_A01_t04: Fail, OK # co19 issue 314
-LibTest/core/String/contains_A01_t01: Fail, OK # co19 issue 314
-
 LibTest/core/Map/getValues_A01_t02: Fail, OK # co19 issue 287
 
 [ $compiler == none && $runtime == vm ]
@@ -408,13 +310,7 @@
 [ $compiler == none && $runtime == vm ]
 Language/07_Classes/07_Classes_A02_t29: Fail
 Language/07_Classes/07_Classes_A02_t31: Fail
-Language/11_Expressions/05_Strings/1_String_Interpolation_A03_t02: Fail
-Language/11_Expressions/05_Strings/1_String_Interpolation_A04_t02: Fail
 Language/11_Expressions/05_Strings_A20_t01: Fail
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t02: Fail # Issue 1604, exception should be NoSuchMethodException instead of ObjectNotClosureException
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t03: Fail # Issue 1604, exception should be NoSuchMethodException instead of ObjectNotClosureException
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A05_t01: Fail # Issue 1604, exception should be NoSuchMethodException instead of ObjectNotClosureException
-Language/11_Expressions/15_Method_Invocation/3_Static_Invocation_A06_t02: Fail # Issue 1604, exception should be NoSuchMethodException instead of ObjectNotClosureException
 LibTest/isolate/ReceivePort/receive_A01_t02: Fail
 LibTest/isolate/isolate_api/spawnUri_A01_t03: Crash
 LibTest/isolate/isolate_api/spawnUri_A01_t04: Crash
@@ -425,18 +321,6 @@
 Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A05_t03: Fail
 
 
-# function 'func' not found in super class, getter 'func' should be invoked first.
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t04: Fail # co19 issue 251 or issue 5732
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A03_t02: Fail # co19 issue 251 or issue 5732
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A03_t03: Fail # co19 issue 251 or issue 5732
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A07_t01: Fail # co19 issue 251 or issue 5732
-Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A08_t02: Fail # co19 issue 251 or issue 5732
-
-
-# invalid operator overloading
-Language/07_Classes/1_Instance_Methods/2_Operators_A02_t01: Fail
-
-
 # parameter name or type expected
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A15_t07: Fail
 
diff --git a/tests/compiler/dart2js/array_static_intercept_test.dart b/tests/compiler/dart2js/array_static_intercept_test.dart
index d75efea..a5b343a 100644
--- a/tests/compiler/dart2js/array_static_intercept_test.dart
+++ b/tests/compiler/dart2js/array_static_intercept_test.dart
@@ -15,6 +15,6 @@
 main() {
   String generated = compile(TEST_ONE, entry: 'foo');
   Expect.isTrue(generated.contains(r'.add$1('));
-  Expect.isTrue(generated.contains(r'.removeLast('));
+  Expect.isTrue(generated.contains(r'.removeLast$0('));
   Expect.isTrue(generated.contains(r'.get$length('));
 }
diff --git a/tests/compiler/dart2js/builtin_interceptor_test.dart b/tests/compiler/dart2js/builtin_interceptor_test.dart
index f5a9b2f..90cdfcc 100644
--- a/tests/compiler/dart2js/builtin_interceptor_test.dart
+++ b/tests/compiler/dart2js/builtin_interceptor_test.dart
@@ -6,10 +6,12 @@
 
 const String TEST_ONE = r"""
 foo(String a) {
+  // Make sure the string class is registered.
+  var c = 'foo';
   // index into the parameter and move into a loop to make sure we'll get a
   // type guard.
   for (int i = 0; i < 1; i++) {
-    print(a[0]);
+    print(a[0] + c);
   }
   return a.length;
 }
@@ -35,7 +37,7 @@
 
 main() {
   String generated = compile(TEST_ONE, entry: 'foo');
-  Expect.isTrue(generated.contains("return a.length;"));
+  Expect.isTrue(generated.contains("a.length"));
 
   generated = compile(TEST_TWO, entry: 'foo');
   Expect.isTrue(generated.contains("return 3;"));
@@ -44,5 +46,6 @@
   Expect.isTrue(generated.contains("return 3;"));
 
   generated = compile(TEST_FOUR, entry: 'foo');
-  Expect.isTrue(generated.contains("push(2);"));
+  // TODO(6829): Re-enable this test.
+  // Expect.isTrue(generated.contains("push(2);"));
 }
diff --git a/tests/compiler/dart2js/class_codegen_test.dart b/tests/compiler/dart2js/class_codegen_test.dart
index 6f751c7..51b2d07 100644
--- a/tests/compiler/dart2js/class_codegen_test.dart
+++ b/tests/compiler/dart2js/class_codegen_test.dart
@@ -64,14 +64,14 @@
 
 twoClasses() {
   String generated = compileAll(TEST_ONE);
-  Expect.isTrue(generated.contains('\$.A = {"": [],\n "super": "Object"'));
-  Expect.isTrue(generated.contains('\$.B = {"": [],\n "super": "Object"'));
+  Expect.isTrue(generated.contains('\$.A = {\n "super": "Object"'));
+  Expect.isTrue(generated.contains('\$.B = {\n "super": "Object"'));
 }
 
 subClass() {
   checkOutput(String generated) {
-    Expect.isTrue(generated.contains('\$.A = {"": [],\n "super": "Object"'));
-    Expect.isTrue(generated.contains('\$.B = {"": [],\n "super": "A"'));
+    Expect.isTrue(generated.contains('\$.A = {\n "super": "Object"'));
+    Expect.isTrue(generated.contains('\$.B = {\n "super": "A"'));
   }
 
   checkOutput(compileAll(TEST_TWO));
diff --git a/tests/compiler/dart2js/constant_folding_test.dart b/tests/compiler/dart2js/constant_folding_test.dart
index f803b25..482b8da 100644
--- a/tests/compiler/dart2js/constant_folding_test.dart
+++ b/tests/compiler/dart2js/constant_folding_test.dart
@@ -46,6 +46,6 @@
   regexp = new RegExp(r'4 === c');
   Expect.isTrue(regexp.hasMatch(generated));
 
-  regexp = new RegExp("'foo' === d");
+  regexp = new RegExp('"foo" === d');
   Expect.isTrue(regexp.hasMatch(generated));
 }
diff --git a/tests/compiler/dart2js/dart_backend_test.dart b/tests/compiler/dart2js/dart_backend_test.dart
index 026e015..b6824c6 100644
--- a/tests/compiler/dart2js/dart_backend_test.dart
+++ b/tests/compiler/dart2js/dart_backend_test.dart
@@ -692,6 +692,22 @@
       continuation: (String result) { Expect.equals(expectedResult, result); });
 }
 
+testUnresolvedNamedConstructor() {
+  var src = '''
+class A {
+  A() {}
+}
+
+main() {
+  new A();
+  new A.named();
+}
+''';
+  var expectedResult = "class A{A(){}}main(){new A();new p_Unresolved();}";
+  testDart2Dart(src,
+      continuation: (String result) { Expect.equals(expectedResult, result); });
+}
+
 main() {
   testSimpleFileUnparse();
   testTopLevelField();
@@ -722,4 +738,5 @@
   testDeclarationTypePlaceholders();
   testPlatformLibraryMemberNamesAreFixed();
   testConflictsWithCoreLib();
+  testUnresolvedNamedConstructor();
 }
diff --git a/tests/compiler/dart2js/mock_compiler.dart b/tests/compiler/dart2js/mock_compiler.dart
index 0d327af..42b0300 100644
--- a/tests/compiler/dart2js/mock_compiler.dart
+++ b/tests/compiler/dart2js/mock_compiler.dart
@@ -48,13 +48,13 @@
   assertHelper(a){}''';
 
 const String DEFAULT_INTERCEPTORSLIB = r'''
-  add$1(receiver, value) {}
-  get$length(receiver) {}
-  filter(receiver, predicate) {}
-  removeLast(receiver) {}
-  iterator(receiver) {}
-  next(receiver) {}
-  hasNext(receiver) {}''';
+  class JSArray {
+    var length;
+  }
+  class JSString {
+    var length;
+  }
+  getInterceptor(x) {}''';
 
 const String DEFAULT_CORELIB = r'''
   print(var obj) {}
diff --git a/tests/compiler/dart2js/no_constructor_body_test.dart b/tests/compiler/dart2js/no_constructor_body_test.dart
index ea1a6b2..2193286 100644
--- a/tests/compiler/dart2js/no_constructor_body_test.dart
+++ b/tests/compiler/dart2js/no_constructor_body_test.dart
@@ -18,5 +18,5 @@
 main() {
   String generated = compileAll(TEST);
   Expect.isTrue(
-      generated.contains('\$.A = {"": [],\n "super": "Object"\n}'));
+      generated.contains('\$.A = {\n "super": "Object"\n}'));
 }
diff --git a/tests/compiler/dart2js/no_duplicate_constructor_body_test.dart b/tests/compiler/dart2js/no_duplicate_constructor_body_test.dart
index 8e4eae6..67fa8fc 100644
--- a/tests/compiler/dart2js/no_duplicate_constructor_body_test.dart
+++ b/tests/compiler/dart2js/no_duplicate_constructor_body_test.dart
@@ -16,7 +16,7 @@
 
 main() {
   String generated = compileAll(CODE);
-  RegExp regexp = new RegExp(r'\$.A = {"":');
+  RegExp regexp = new RegExp(r'\$.A = {\n "super"');
   Iterator<Match> matches = regexp.allMatches(generated).iterator();
   checkNumberOfMatches(matches, 1);
 }
diff --git a/tests/compiler/dart2js/resolver_test.dart b/tests/compiler/dart2js/resolver_test.dart
index 42ae534..95e5b47 100644
--- a/tests/compiler/dart2js/resolver_test.dart
+++ b/tests/compiler/dart2js/resolver_test.dart
@@ -85,9 +85,9 @@
     visitor.visit(definition.type);
     InterfaceType type = visitor.mapping.getType(definition.type);
     Expect.equals(definition.type.typeArguments.length(),
-                  length(type.arguments));
+                  length(type.typeArguments));
     int index = 0;
-    Link<DartType> arguments = type.arguments;
+    Link<DartType> arguments = type.typeArguments;
     while (!arguments.isEmpty) {
       Expect.equals(true, index < expectedElements.length);
       Expect.equals(expectedElements[index], arguments.head.element);
diff --git a/tests/compiler/dart2js/type_substitution_test.dart b/tests/compiler/dart2js/type_substitution_test.dart
new file mode 100644
index 0000000..8c841cc
--- /dev/null
+++ b/tests/compiler/dart2js/type_substitution_test.dart
@@ -0,0 +1,183 @@
+// Copyright (c) 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.
+
+library type_substitution_test;
+
+import "../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/util/util.dart";
+import "compiler_helper.dart";
+import "parser_helper.dart";
+import "dart:uri";
+
+DartType getElementType(compiler, String name) {
+  var element = findElement(compiler, name);
+  Expect.isNotNull(element);
+  if (identical(element.kind, ElementKind.CLASS)) {
+    element.ensureResolved(compiler);
+  }
+  return element.computeType(compiler);
+}
+
+DartType getType(compiler, String name) {
+  var clazz = findElement(compiler, "Class");
+  clazz.ensureResolved(compiler);
+  var element = clazz.buildScope().lookup(buildSourceString(name));
+  Expect.isNotNull(element);
+  Expect.equals(element.kind, ElementKind.FUNCTION);
+  FunctionSignature signature = element.computeSignature(compiler);
+
+  // Function signatures are used to be to provide void types (only occuring as
+  // as return types) and (inlined) function types (only occuring as method
+  // parameter types).
+  //
+  // Only a single type is used from each signature. That is, it is not the
+  // intention to check the whole signatures against eachother.
+  if (signature.requiredParameterCount == 0) {
+    // If parameters is empty, use return type.
+    return signature.returnType;
+  } else {
+    // Otherwise use the first argument type.
+    return signature.requiredParameters.head.computeType(compiler);
+  }
+}
+
+int length(Link link) {
+  int count = 0;
+  while (!link.isEmpty) {
+    count++;
+    link = link.tail;
+  }
+  return count;
+}
+
+/**
+ * Test that substitution of [parameters] by [arguments] in the type found
+ * through [name1] is the same as the type found through [name2].
+ */
+bool test(compiler, arguments, parameters,
+          String name1, String name2) {
+  DartType type1 = getType(compiler, name1);
+  DartType type2 = getType(compiler, name2);
+  DartType subst = type1.subst(arguments, parameters);
+  print('$type1.subst($arguments,$parameters)=$subst');
+  Expect.equals(type2, subst,
+      "$type1.subst($arguments,$parameters)=$subst != $type2");
+}
+
+
+void main() {
+  var uri = new Uri.fromComponents(scheme: 'source');
+  var compiler = compilerFor(
+      r"""
+      typedef void Typedef1<X,Y>(X x1, Y y2);
+      typedef void Typedef2<Z>(Z z1);
+
+      class Class<T,S> {
+        void void1() {}
+        void void2() {}
+        void dynamic1(dynamic a) {}
+        void dynamic2(dynamic b) {}
+        void int1(int a) {}
+        void int2(int a) {}
+        void String1(String a) {}
+        void String2(String a) {}
+        void ListInt1(List<int> a) {}
+        void ListInt2(List<int> b) {}
+        void ListT1(List<T> a) {}
+        void ListT2(List<int> b) {}
+        void ListS1(List<S> a) {}
+        void ListS2(List<String> b) {}
+        void ListListT1(List<List<T>> a) {}
+        void ListListT2(List<List<int>> b) {}
+        void ListRaw1(List a) {}
+        void ListRaw2(List b) {}
+        void ListDynamic1(List<dynamic> a) {}
+        void ListDynamic2(List<dynamic> b) {}
+        void MapIntString1(Map<T,S> a) {}
+        void MapIntString2(Map<int,String> b) {}
+        void MapTString1(Map<T,String> a) {}
+        void MapTString2(Map<int,String> b) {}
+        void MapDynamicString1(Map<dynamic,String> a) {}
+        void MapDynamicString2(Map<dynamic,String> b) {}
+        void TypeVarT1(T t1) {}
+        void TypeVarT2(int t2) {}
+        void TypeVarS1(S s1) {}
+        void TypeVarS2(String s2) {}
+        void Function1a(int a(String s1)) {}
+        void Function2a(int b(String s2)) {}
+        void Function1b(void a(T t1, S s1)) {}
+        void Function2b(void b(int t2, String s2)) {}
+        void Function1c(void a(dynamic t1, dynamic s1)) {}
+        void Function2c(void b(dynamic t2, dynamic s2)) {}
+        void Typedef1a(Typedef1<T,S> a) {}
+        void Typedef2a(Typedef1<int,String> b) {}
+        void Typedef1b(Typedef1<dynamic,dynamic> a) {}
+        void Typedef2b(Typedef1<dynamic,dynamic> b) {}
+        void Typedef1c(Typedef1 a) {}
+        void Typedef2c(Typedef1 b) {}
+        void Typedef1d(Typedef2<T> a) {}
+        void Typedef2d(Typedef2<int> b) {}
+        void Typedef1e(Typedef2<S> a) {}
+        void Typedef2e(Typedef2<String> b) {}
+      }
+
+      void main() {}
+      """,
+      uri);
+  compiler.runCompiler(uri);
+
+  DartType Class_T_S = getElementType(compiler, "Class");
+  Expect.isNotNull(Class_T_S);
+  Expect.identical(Class_T_S.kind, TypeKind.INTERFACE);
+  Expect.equals(2, length(Class_T_S.typeArguments));
+
+  DartType T = Class_T_S.typeArguments.head;
+  Expect.isNotNull(T);
+  Expect.identical(T.kind, TypeKind.TYPE_VARIABLE);
+
+  DartType S = Class_T_S.typeArguments.tail.head;
+  Expect.isNotNull(S);
+  Expect.identical(S.kind, TypeKind.TYPE_VARIABLE);
+
+  DartType intType = getType(compiler, "int1");
+  Expect.isNotNull(intType);
+  Expect.identical(intType.kind, TypeKind.INTERFACE);
+
+  DartType StringType = getType(compiler, "String1");
+  Expect.isNotNull(StringType);
+  Expect.identical(StringType.kind, TypeKind.INTERFACE);
+
+  var parameters = new Link<DartType>.fromList(<DartType>[T, S]);
+  var arguments = new Link<DartType>.fromList(<DartType>[intType, StringType]);
+
+  // TODO(johnniwinther): Create types directly from strings to improve test
+  // readability.
+
+  test(compiler, arguments, parameters, "void1", "void2");
+  test(compiler, arguments, parameters, "dynamic1", "dynamic2");
+  test(compiler, arguments, parameters, "int1", "int2");
+  test(compiler, arguments, parameters, "String1", "String2");
+  test(compiler, arguments, parameters, "ListInt1", "ListInt2");
+  test(compiler, arguments, parameters, "ListT1", "ListT2");
+  test(compiler, arguments, parameters, "ListS1", "ListS2");
+  test(compiler, arguments, parameters, "ListListT1", "ListListT2");
+  test(compiler, arguments, parameters, "ListRaw1", "ListRaw2");
+  test(compiler, arguments, parameters, "ListDynamic1", "ListDynamic2");
+  test(compiler, arguments, parameters, "MapIntString1", "MapIntString2");
+  test(compiler, arguments, parameters, "MapTString1", "MapTString2");
+  test(compiler, arguments, parameters,
+    "MapDynamicString1", "MapDynamicString2");
+  test(compiler, arguments, parameters, "TypeVarT1", "TypeVarT2");
+  test(compiler, arguments, parameters, "TypeVarS1", "TypeVarS2");
+  test(compiler, arguments, parameters, "Function1a", "Function2a");
+  test(compiler, arguments, parameters, "Function1b", "Function2b");
+  test(compiler, arguments, parameters, "Function1c", "Function2c");
+  test(compiler, arguments, parameters, "Typedef1a", "Typedef2a");
+  test(compiler, arguments, parameters, "Typedef1b", "Typedef2b");
+  test(compiler, arguments, parameters, "Typedef1c", "Typedef2c");
+  test(compiler, arguments, parameters, "Typedef1d", "Typedef2d");
+  test(compiler, arguments, parameters, "Typedef1e", "Typedef2e");
+}
diff --git a/tests/compiler/dart2js/value_range_test.dart b/tests/compiler/dart2js/value_range_test.dart
index 3a78bdc..177eae5 100644
--- a/tests/compiler/dart2js/value_range_test.dart
+++ b/tests/compiler/dart2js/value_range_test.dart
@@ -64,7 +64,7 @@
   return a.removeLast();
 }
 """,
-KEPT,
+REMOVED, // TODO(6829): Put it back to KEPT
 
 """
 main() {
@@ -211,8 +211,7 @@
   class Object {}
   class Type {}
   class Function {}
-  interface List default ListImplementation { List([length]);}
-  class ListImplementation { factory List([length]) => null; }
+  class List { List([length]); }
   abstract class Map {}
   class Closure {}
   class Null {}
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/compiler/dart2js_extra/dart2js_extra.status
index 4743a49..9e569d2 100644
--- a/tests/compiler/dart2js_extra/dart2js_extra.status
+++ b/tests/compiler/dart2js_extra/dart2js_extra.status
@@ -7,7 +7,6 @@
 statements_test: Fail
 typed_locals_test: Fail
 no_such_method_test: Fail # Wrong InvocationMirror.memberName.
-break_test: Fail # Complex control flow TODO(ngeoffray): investigating
 
 [ $compiler == dart2js && $checked ]
 parameter_bailout_test: Fail, OK
diff --git a/tests/compiler/dart2js_extra/first_class_types_hashcode_test.dart b/tests/compiler/dart2js_extra/first_class_types_hashcode_test.dart
new file mode 100644
index 0000000..26b5c13
--- /dev/null
+++ b/tests/compiler/dart2js_extra/first_class_types_hashcode_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 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.
+
+// Check that Type instances work with maps. This behavior is not required by
+// the specification.
+
+class A {}
+
+class B<T> {}
+
+main() {
+  Map<Type, String> map = new Map<Type, String>();
+  Type a = new A().runtimeType;
+  Type b1 = new B<int>().runtimeType;
+  Type b2 = new B<String>().runtimeType;
+  map[a] = 'A';
+  map[b1] = 'B<int>';
+  map[b2] = 'B<String>';
+  Expect.equals('A', map[new A().runtimeType]);
+  Expect.equals('B<int>', map[new B<int>().runtimeType]);
+  Expect.equals('B<String>', map[new B<String>().runtimeType]);
+}
diff --git a/tests/compiler/dart2js_extra/hash_code_test.dart b/tests/compiler/dart2js_extra/hash_code_test.dart
index 5db341b..869c60b 100644
--- a/tests/compiler/dart2js_extra/hash_code_test.dart
+++ b/tests/compiler/dart2js_extra/hash_code_test.dart
@@ -2,10 +2,80 @@
 // 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.
 
-// dart2js specific test to make sure String.hashCode behaves as
+// dart2js specific test to make sure hashCode on intercepted types behaves as
 // intended.
 
+
+class Hasher {
+  confuse(x) => [1, 'x', true, null, x].last;
+  hash(x) => confuse(x).hashCode;
+}
+
+// Hashing via [hash] should be forced to use the general interceptor, but the
+// local x.hashCode calls might be optimized.
+var hash = new Hasher().hash;
+
+check(value1, value2) {
+  var h1 = hash(value1);
+  var h2 = hash(value2);
+
+  Expect.isTrue(h1 is int);
+  Expect.isTrue(h2 is int);
+  Expect.isFalse(h1 == h2);
+
+  // We expect that the hash function is reasonable quality - there are some
+  // difference in the low bits.
+  Expect.isFalse((h1 & 0xf) == (h2 & 0xf));
+
+  // Quality check - the values should be SMIs for efficient arithmetic.
+  Expect.equals((h1 & 0x1fffffff), h1);
+  Expect.equals((h2 & 0x1fffffff), h2);
+}
+
+bools() {
+  check(true, false);
+
+  Expect.equals(true.hashCode, hash(true));   // First can be optimized.
+  Expect.equals(false.hashCode, hash(false));
+}
+
+ints() {
+  var i1 = 100;
+  var i2 = 101;
+  check(i1, i2);
+  Expect.equals(i1.hashCode, hash(i1));
+  Expect.equals(i2.hashCode, hash(i2));
+}
+
+lists() {
+  var list1 = [];
+  var list2 = [];
+  check(list1, list2);
+
+  Expect.equals(list1.hashCode, hash(list1));
+  Expect.equals(list2.hashCode, hash(list2));
+}
+
+strings() {
+  var str1 = 'a';
+  var str2 = 'b';
+  var str3 = 'c';
+  check(str1, str2);
+  check(str1, str3);
+  check(str2, str3);
+
+  Expect.equals(str1.hashCode, hash(str1));
+  Expect.equals(str2.hashCode, hash(str2));
+  Expect.equals(str3.hashCode, hash(str3));
+
+  Expect.equals(0xA2E9442, 'a'.hashCode);
+  Expect.equals(0x0DB819B, 'b'.hashCode);
+  Expect.equals(0xEBA5D59, 'c'.hashCode);
+}
+
 main() {
-  Expect.equals(67633152, 'a'.hashCode);
-  Expect.equals(37224448, 'b'.hashCode);
+  bools();
+  ints();
+  lists();
+  strings();
 }
diff --git a/tests/compiler/dart2js_foreign/dart2js_foreign.status b/tests/compiler/dart2js_foreign/dart2js_foreign.status
index 1b70a56..d383e88 100644
--- a/tests/compiler/dart2js_foreign/dart2js_foreign.status
+++ b/tests/compiler/dart2js_foreign/dart2js_foreign.status
@@ -32,8 +32,6 @@
 native_method_rename2_test: Fail # TODO(ahe): Convert to metadata syntax.
 native_method_rename3_test: Fail # TODO(ahe): Convert to metadata syntax.
 native_method_with_keyword_name_test: Fail # TODO(ahe): Convert to metadata syntax.
-native_missing_method1_test: Fail # TODO(ahe): Convert to metadata syntax.
-native_missing_method2_test: Fail # TODO(ahe): Convert to metadata syntax.
 native_named_constructors2_test: Fail # TODO(ahe): Convert to metadata syntax.
 native_named_constructors3_test: Fail # TODO(ahe): Convert to metadata syntax.
 native_no_such_method_exception2_test: Fail # TODO(ahe): Convert to metadata syntax.
diff --git a/tests/compiler/dart2js_native/dart2js_native.status b/tests/compiler/dart2js_native/dart2js_native.status
index bbe5431..94108e9 100644
--- a/tests/compiler/dart2js_native/dart2js_native.status
+++ b/tests/compiler/dart2js_native/dart2js_native.status
@@ -4,3 +4,6 @@
 
 [ $compiler == dartc || $browser ]
 *: Skip
+
+[ $compiler == dart2js ]
+native_null_closure_frog_test: Fail
diff --git a/tests/corelib/core_runtime_types_test.dart b/tests/corelib/core_runtime_types_test.dart
index e3d94ce..c40b781 100644
--- a/tests/corelib/core_runtime_types_test.dart
+++ b/tests/corelib/core_runtime_types_test.dart
@@ -47,7 +47,6 @@
   static assertTypeError(void f()) {
     Expect.throws(f, (exception) => (exception is TypeError) ||
                                     (exception is NoSuchMethodError) ||
-                                    (exception is NullPointerException) ||
                                     (exception is ArgumentError));
   }
 
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 356cedf..f48942d 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -2,18 +2,22 @@
 # 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.
 
+reg_exp_unicode_2_test: Fail # Bug 6592
+
 [ $compiler == none ]
-unicode_test: Fail        # Bug 5163868
+unicode_test: Fail        # Bug 6706
 *dartc_test: Skip
 compare_to2_test: Fail    # Bug 4018
 null_test: Fail           # Bug 5511
-null_nosuchmethod_test: Fail # Bug 5518
 apply_test: Fail # Bug 5670
 apply2_test: Fail # Bug 5670
 
 [ $runtime == ff || $runtime == ie9 || $runtime == jsshell ]
 unicode_test: Fail
 
+[ $compiler == dart2js && ($runtime == chrome || $runtime == drt || $runtime == d8 || $runtime == safari) ]
+string_trim_unicode_test: Fail  # V8 bug 2408
+
 [ $runtime == opera ]
 core_runtime_types_test: Fail
 date_time7_test: Fail
@@ -25,6 +29,9 @@
 [ $runtime == safari && ($system == linux || $system == windows) ]
 *: Skip
 
+[ $runtime == vm ]
+string_trim_unicode_test: Fail  # Bug 6569
+
 [ $arch == simarm ]
 *: Skip
 
@@ -34,6 +41,7 @@
 [ $compiler == dart2js ]
 math_parse_double_test: Fail # Expect.equals(expected: <78187493520>, actual: <0>)
 math_test: Fail # issue 3333
+surrogate_pair_toUpper_test: Fail # Issue 6707
 
 # Bad test, assumes RegExp.allMatches returns a Collection.
 reg_exp_all_matches_test: Fail, OK # NoSuchMethodError : method not found: 'forEach'
@@ -44,8 +52,6 @@
 compare_to2_test: Fail, OK    # Requires bigint support.
 string_base_vm_test: Fail, OK # VM specific test.
 
-null_nosuchmethod_test: Fail # Bug 5513
-
 [ $compiler == dart2js && $runtime == none ]
 *: Fail, Pass # TODO(ahe): Triage these tests.
 
@@ -61,7 +67,6 @@
 apply_test: Fail # inherited from VM
 apply2_test: Fail # inherited from VM
 compare_to2_test: Fail # inherited from VM
-null_nosuchmethod_test: Fail # inherited from VM
 null_test: Fail # inherited from VM
 unicode_test: Fail # inherited from VM
 
diff --git a/tests/corelib/expando_test.dart b/tests/corelib/expando_test.dart
index 318c630..c6b65d8 100644
--- a/tests/corelib/expando_test.dart
+++ b/tests/corelib/expando_test.dart
@@ -62,7 +62,7 @@
   static testIllegal() {
     Expando<int> expando = new Expando<int>();
     Expect.throws(() => expando[null], (exception)
-                  => exception is NullPointerException);
+                  => exception is ArgumentError);
     Expect.throws(() => expando['string'], (exception)
                   => exception is ArgumentError);
     Expect.throws(() => expando['string'], (exception)
diff --git a/tests/corelib/future_test.dart b/tests/corelib/future_test.dart
index 9ed1db5..1916ddd 100644
--- a/tests/corelib/future_test.dart
+++ b/tests/corelib/future_test.dart
@@ -565,6 +565,92 @@
   Expect.equals("transformed value", transformedFuture.value);
 }
 
+// Tests for branching exceptions
+
+testExceptionTravelsAlongBothBranches() {
+  var results = <int>[];
+
+  var completer = new Completer();
+  var branch1 = completer.future.transform((_) => null);
+  var branch2 = completer.future.transform((_) => null);
+
+  branch1.handleException((e) {
+    results.add(1);
+    return true;
+  });
+
+  branch2.handleException((e) {
+    results.add(2);
+    return true;
+  });
+
+  completer.completeException("error");
+  Expect.setEquals([1, 2], results);
+}
+
+testExceptionTravelsAlongBothBranchesAfterComplete() {
+  var results = <int>[];
+
+  var completer = new Completer();
+  completer.completeException("error");
+
+  var branch1 = completer.future.transform((_) => null);
+  var branch2 = completer.future.transform((_) => null);
+
+  branch1.handleException((e) {
+    results.add(1);
+    return true;
+  });
+
+  branch2.handleException((e) {
+    results.add(2);
+    return true;
+  });
+
+  Expect.setEquals([1, 2], results);
+}
+
+testExceptionIsHandledInBaseAndBranch() {
+  var results = <String>[];
+
+  var completer = new Completer();
+  var branch = completer.future.transform((_) => null);
+
+  completer.future.handleException((e) {
+    results.add("base");
+    return true;
+  });
+
+  branch.handleException((e) {
+    results.add("branch");
+    return true;
+  });
+
+  completer.completeException("error");
+  Expect.setEquals(["base", "branch"], results);
+}
+
+testExceptionIsHandledInBaseAndBranchAfterComplete() {
+  var results = <String>[];
+
+  var completer = new Completer();
+  completer.completeException("error");
+
+  var branch = completer.future.transform((_) => null);
+
+  completer.future.handleException((e) {
+    results.add("base");
+    return true;
+  });
+
+  branch.handleException((e) {
+    results.add("branch");
+    return true;
+  });
+
+  Expect.setEquals(["base", "branch"], results);
+}
+
 main() {
   testImmediate();
   testNeverComplete();
@@ -605,4 +691,8 @@
   testTransformExceptionThrows();
   testTransformExceptionReturns();
   testTransformExceptionReturnsAFuture();
+  testExceptionTravelsAlongBothBranches();
+  testExceptionTravelsAlongBothBranchesAfterComplete();
+  testExceptionIsHandledInBaseAndBranch();
+  testExceptionIsHandledInBaseAndBranchAfterComplete();
 }
diff --git a/tests/corelib/list_first_test.dart b/tests/corelib/list_first_test.dart
new file mode 100644
index 0000000..cdd718b
--- /dev/null
+++ b/tests/corelib/list_first_test.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 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.
+
+void test(List list) {
+  if (list.isEmpty) {
+    Expect.throws(() => list.first, (e) => e is RangeError);
+  } else {
+    Expect.equals(list[0], list.first);
+  }
+}
+
+main() {
+  test([1, 2, 3]);
+  test(const ["foo", "bar"]);
+  test([]);
+  test(const []);
+}
diff --git a/tests/corelib/null_nosuchmethod_test.dart b/tests/corelib/null_nosuchmethod_test.dart
index 2d6514c..7ae7540 100644
--- a/tests/corelib/null_nosuchmethod_test.dart
+++ b/tests/corelib/null_nosuchmethod_test.dart
@@ -8,15 +8,15 @@
   var x;
   // Non-existing method calls noSuchMethod.
   Expect.throws(() => x.foo(),
-                (e) => e is NullPointerException);
+                (e) => e is NoSuchMethodError);
 
   // Calling noSuchMethod directly.
   Expect.throws(() => x.noSuchMethod("foo", []),
-                (e) => e is NullPointerException);
+                (e) => e is NoSuchMethodError);
 
   // Closurizing noSuchMethod and calling it.
   var nsm = x.noSuchMethod;
   Expect.notEquals(null, nsm);
   Expect.throws(() => nsm("foo", []),
-                (e) => e is NullPointerException);
+                (e) => e is NoSuchMethodError);
 }
diff --git a/tests/corelib/reg_exp4_test.dart b/tests/corelib/reg_exp4_test.dart
index 41d8f50..bef3397 100644
--- a/tests/corelib/reg_exp4_test.dart
+++ b/tests/corelib/reg_exp4_test.dart
@@ -6,42 +6,42 @@
 main() {
   try {
     RegExp ex = new RegExp(null);
-    Expect.fail("Expected: NullPointerException got: no exception");
-  } on Exception catch (ex) {
-    if (!(ex is NullPointerException)) {
-      Expect.fail("Expected: NullPointerException got: ${ex}");
+    Expect.fail("Expected: ArgumentError got: no exception");
+  } catch (ex) {
+    if (!(ex is ArgumentError)) {
+      Expect.fail("Expected: ArgumentError got: ${ex}");
     }
   }
   try {
     new RegExp(r"^\w+$").hasMatch(null);
-    Expect.fail("Expected: NullPointerException got: no exception");
-  } on Exception catch (ex) {
-    if (!(ex is NullPointerException)) {
-      Expect.fail("Expected: NullPointerException got: ${ex}");
+    Expect.fail("Expected: ArgumentError got: no exception");
+  } catch (ex) {
+    if (!(ex is ArgumentError)) {
+      Expect.fail("Expected: ArgumentError got: ${ex}");
     }
   }
   try {
     new RegExp(r"^\w+$").firstMatch(null);
-    Expect.fail("Expected: NullPointerException got: no exception");
-  } on Exception catch (ex) {
-    if (!(ex is NullPointerException)) {
-      Expect.fail("Expected: NullPointerException got: ${ex}");
+    Expect.fail("Expected: ArgumentError got: no exception");
+  } catch (ex) {
+    if (!(ex is ArgumentError)) {
+      Expect.fail("Expected: ArgumentError got: ${ex}");
     }
   }
   try {
     new RegExp(r"^\w+$").allMatches(null);
-    Expect.fail("Expected: NullPointerException got: no exception");
-  } on Exception catch (ex) {
-    if (!(ex is NullPointerException)) {
-      Expect.fail("Expected: NullPointerException got: ${ex}");
+    Expect.fail("Expected: ArgumentError got: no exception");
+  } catch (ex) {
+    if (!(ex is ArgumentError)) {
+      Expect.fail("Expected: ArgumentError got: ${ex}");
     }
   }
   try {
     new RegExp(r"^\w+$").stringMatch(null);
-    Expect.fail("Expected: NullPointerException got: no exception");
-  } on Exception catch (ex) {
-    if (!(ex is NullPointerException)) {
-      Expect.fail("Expected: NullPointerException got: ${ex}");
+    Expect.fail("Expected: ArgumentError got: no exception");
+  } catch (ex) {
+    if (!(ex is ArgumentError)) {
+      Expect.fail("Expected: ArgumentError got: ${ex}");
     }
   }
 }
diff --git a/tests/corelib/reg_exp5_test.dart b/tests/corelib/reg_exp5_test.dart
index 17217a8..56002ca 100644
--- a/tests/corelib/reg_exp5_test.dart
+++ b/tests/corelib/reg_exp5_test.dart
@@ -7,9 +7,9 @@
   String str = "";
   try {
     RegExp ex = new RegExp(str);
-  } on Exception catch (e) {
-    if (!(e is NullPointerException)) {
-      Expect.fail("Expected: NullPointerException got: ${e}");
+  } catch (e) {
+    if (!(e is ArgumentError)) {
+      Expect.fail("Expected: ArgumentError got: ${e}");
     }
   }
   Expect.isFalse(new RegExp(r"^\w+$").hasMatch(str));
diff --git a/tests/corelib/safe_to_string_test.dart b/tests/corelib/safe_to_string_test.dart
index 70d6624..dd80be1 100644
--- a/tests/corelib/safe_to_string_test.dart
+++ b/tests/corelib/safe_to_string_test.dart
@@ -3,19 +3,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 main() {
-  Expect.stringEquals('1', NoSuchMethodError.safeToString(1));
-  Expect.stringEquals('0.5', NoSuchMethodError.safeToString(0.5));
-  Expect.stringEquals('"1"', NoSuchMethodError.safeToString("1"));
-  Expect.stringEquals('"\'"', NoSuchMethodError.safeToString("'"));
-  Expect.stringEquals('"\'\'"', NoSuchMethodError.safeToString("''"));
-  Expect.stringEquals(r'"\""', NoSuchMethodError.safeToString('"'));
-  Expect.stringEquals(r'"\"\""', NoSuchMethodError.safeToString('""'));
+  Expect.stringEquals('1', Error.safeToString(1));
+  Expect.stringEquals('0.5', Error.safeToString(0.5));
+  Expect.stringEquals('"1"', Error.safeToString("1"));
+  Expect.stringEquals('"\'"', Error.safeToString("'"));
+  Expect.stringEquals('"\'\'"', Error.safeToString("''"));
+  Expect.stringEquals(r'"\""', Error.safeToString('"'));
+  Expect.stringEquals(r'"\"\""', Error.safeToString('""'));
 
-  Expect.stringEquals(r'"\\\"\n\r"', NoSuchMethodError.safeToString('\\"\n\r'));
+  Expect.stringEquals(r'"\\\"\n\r"', Error.safeToString('\\"\n\r'));
 
-  Expect.stringEquals('null', NoSuchMethodError.safeToString(null));
-  Expect.stringEquals('true', NoSuchMethodError.safeToString(true));
-  Expect.stringEquals('false', NoSuchMethodError.safeToString(false));
+  Expect.stringEquals('null', Error.safeToString(null));
+  Expect.stringEquals('true', Error.safeToString(true));
+  Expect.stringEquals('false', Error.safeToString(false));
   Expect.stringEquals("Instance of 'Object'",
-                      NoSuchMethodError.safeToString(new Object()));
+                      Error.safeToString(new Object()));
 }
diff --git a/tests/corelib/string_from_list_test.dart b/tests/corelib/string_from_list_test.dart
index acd0f5c..ec43592 100644
--- a/tests/corelib/string_from_list_test.dart
+++ b/tests/corelib/string_from_list_test.dart
@@ -9,11 +9,16 @@
     Expect.equals("", new String.fromCharCodes(const []));
     Expect.equals("AB", new String.fromCharCodes([65, 66]));
     Expect.equals("AB", new String.fromCharCodes(const [65, 66]));
+    Expect.equals("Ærø", new String.fromCharCodes(const [0xc6, 0x72, 0xf8]));
+    Expect.equals("\u{1234}", new String.fromCharCodes([0x1234]));
+    Expect.equals("\u{12345}*", new String.fromCharCodes([0x12345, 42]));
     Expect.equals("", new String.fromCharCodes(new List()));
-    var a = new List();
-    a.add(65);
-    a.add(66);
-    Expect.equals("AB", new String.fromCharCodes(a));
+    {
+      var a = new List();
+      a.add(65);
+      a.add(66);
+      Expect.equals("AB", new String.fromCharCodes(a));
+    }
   }
 }
 
diff --git a/tests/corelib/string_test.dart b/tests/corelib/string_test.dart
index a5ba35b..1518181 100644
--- a/tests/corelib/string_test.dart
+++ b/tests/corelib/string_test.dart
@@ -193,6 +193,8 @@
     Expect.equals(5, "strstr".lastIndexOf("r", 5));
     Expect.equals(2, "strstr".lastIndexOf("r", 4));
     Expect.equals(2, "strstr".lastIndexOf("r", 3));
+    Expect.equals(5, "strstr".lastIndexOf("r"));
+    Expect.equals(5, "strstr".lastIndexOf("r"), null);
 
     String str = "hello";
     for (int i = 0; i < 10; i++) {
diff --git a/tests/html/cssstyledeclaration_test.dart b/tests/html/cssstyledeclaration_test.dart
index 3822e07..1383561 100644
--- a/tests/html/cssstyledeclaration_test.dart
+++ b/tests/html/cssstyledeclaration_test.dart
@@ -49,7 +49,7 @@
   test('CSS property empty getters and setters', () {
     var style = createTestStyle();
     expect(style.border, equals(""));
-    
+
     style.border = "1px solid blue";
     style.border = "";
     expect(style.border, equals(""));
@@ -70,7 +70,7 @@
   test('Browser prefixes', () {
     var element = new DivElement();
     element.style.transform = 'translateX(10px)';
-    document.body.elements.add(element);
+    document.body.children.add(element);
 
     element.getComputedStyle('').then(expectAsync1(
       (CSSStyleDeclaration style) {
@@ -84,7 +84,7 @@
   // IE9 requires an extra poke for some properties to get applied.
   test('IE9 Invalidation', () {
     var element = new DivElement();
-    document.body.elements.add(element);
+    document.body.children.add(element);
 
     // Need to wait one tick after the element has been added to the page.
     window.setTimeout(expectAsync0(() {
diff --git a/tests/html/documentfragment_test.dart b/tests/html/documentfragment_test.dart
index 71b92c4..cd47c38 100644
--- a/tests/html/documentfragment_test.dart
+++ b/tests/html/documentfragment_test.dart
@@ -60,23 +60,23 @@
   group('constructors', () {
     test('0-argument makes an empty fragment', () {
       final fragment = new DocumentFragment();
-      expect(fragment.elements, equals([]));
+      expect(fragment.children, equals([]));
     });
 
     test('.html parses input as HTML', () {
       final fragment = new DocumentFragment.html('<a>foo</a>');
-      expect(fragment.elements[0], isAnchorElement);
+      expect(fragment.children[0], isAnchorElement);
     });
 
     // test('.svg parses input as SVG', () {
     //   final fragment = new DocumentFragment.svg('<a>foo</a>');
-    //   expect(fragment.elements[0] is SVGAElement, isTrue);
+    //   expect(fragment.children[0] is SVGAElement, isTrue);
     // });
 
     // TODO(nweiz): enable this once XML is ported.
     // test('.xml parses input as XML', () {
     //   final fragment = new DocumentFragment.xml('<a>foo</a>');
-    //   expect(fragment.elements[0] is XMLElement, isTrue);
+    //   expect(fragment.children[0] is XMLElement, isTrue);
     // });
   });
 
@@ -104,13 +104,13 @@
     expectUnsupported(() => emptyFragment.webkitRegionOverflow = "foo");
   });
 
-  group('elements', () {
+  group('children', () {
     var fragment;
-    var elements;
+    var children;
 
     init() {
       fragment = new DocumentFragment();
-      elements = fragment.elements;
+      children = fragment.children;
       fragment.nodes.addAll(
         [new Text("1"), new Element.tag("A"), new Element.tag("B"),
          new Text("2"), new Element.tag("I"), new Text("3"),
@@ -118,66 +118,66 @@
     };
 
     test('is initially empty', () {
-      elements = new DocumentFragment().elements;
-      expect(elements, equals([]));
-      expect(elements.isEmpty, isTrue);
+      children = new DocumentFragment().children;
+      expect(children, equals([]));
+      expect(children.isEmpty, isTrue);
     });
 
     test('filters out non-element nodes', () {
       init();
       expect(_nodeStrings(fragment.nodes),
           orderedEquals(["1", "A", "B", "2", "I", "3", "U"]));
-      expect(_nodeStrings(elements),
+      expect(_nodeStrings(children),
           orderedEquals(["A", "B", "I", "U"]));
     });
 
-    test('only indexes elements, not other nodes', () {
+    test('only indexes children, not other nodes', () {
       init();
-      elements[1] = new Element.tag("BR");
+      children[1] = new Element.tag("BR");
       expect(_nodeStrings(fragment.nodes),
           orderedEquals(["1", "A", "BR", "2", "I", "3", "U"]));
-      expect(_nodeStrings(elements),
+      expect(_nodeStrings(children),
           orderedEquals(["A", "BR", "I", "U"]));
     });
 
-    test('adds to both elements and nodes', () {
+    test('adds to both children and nodes', () {
       init();
-      elements.add(new Element.tag("UL"));
+      children.add(new Element.tag("UL"));
       expect(_nodeStrings(fragment.nodes),
           orderedEquals(["1", "A", "B", "2", "I", "3", "U", "UL"]));
-      expect(_nodeStrings(elements),
+      expect(_nodeStrings(children),
           orderedEquals(["A", "B", "I", "U", "UL"]));
     });
 
-    test('removes only elements, from both elements and nodes', () {
+    test('removes only children, from both children and nodes', () {
       init();
-      expect(elements.removeLast().tagName, equals('U'));
+      expect(children.removeLast().tagName, equals('U'));
       expect(_nodeStrings(fragment.nodes),
           orderedEquals(["1", "A", "B", "2", "I", "3"]));
-      expect(_nodeStrings(elements),
+      expect(_nodeStrings(children),
           orderedEquals(["A", "B", "I"]));
 
-      expect(elements.removeLast().tagName, "I");
-      expect(_nodeStrings(fragment.nodes), 
+      expect(children.removeLast().tagName, "I");
+      expect(_nodeStrings(fragment.nodes),
           equals(["1", "A", "B", "2", "3"]));
-      expect(_nodeStrings(elements), equals(["A", "B"]));
+      expect(_nodeStrings(children), equals(["A", "B"]));
     });
 
     test('accessors are wrapped', () {
       init();
-      expect(elements[0].tagName, "A");
-      expect(_nodeStrings(elements.filter((e) => e.tagName == "I")), ["I"]);
-      expect(elements.every((e) => e is Element), isTrue);
-      expect(elements.some((e) => e.tagName == "U"), isTrue);
-      expect(elements.isEmpty, isFalse);
-      expect(elements.length, 4);
-      expect(elements[2].tagName, "I");
-      expect(elements.last.tagName, "U");
+      expect(children[0].tagName, "A");
+      expect(_nodeStrings(children.filter((e) => e.tagName == "I")), ["I"]);
+      expect(children.every((e) => e is Element), isTrue);
+      expect(children.some((e) => e.tagName == "U"), isTrue);
+      expect(children.isEmpty, isFalse);
+      expect(children.length, 4);
+      expect(children[2].tagName, "I");
+      expect(children.last.tagName, "U");
     });
 
-    test('setting elements overwrites nodes as well', () {
+    test('setting children overwrites nodes as well', () {
       init();
-      fragment.elements = [new Element.tag("DIV"), new Element.tag("HEAD")];
+      fragment.children = [new Element.tag("DIV"), new Element.tag("HEAD")];
       expect(_nodeStrings(fragment.nodes), equals(["DIV", "HEAD"]));
     });
   });
diff --git a/tests/html/element_add_test.dart b/tests/html/element_add_test.dart
index 4156ca5..ef911fdd 100644
--- a/tests/html/element_add_test.dart
+++ b/tests/html/element_add_test.dart
@@ -22,22 +22,22 @@
     test('htmlelement', () {
       var el = new DivElement();
       el.addHtml('<span></span>');
-      expect(el.elements.length, equals(1));
-      var span = el.elements[0];
+      expect(el.children.length, equals(1));
+      var span = el.children[0];
       expect(span, isSpanElement);
 
       el.addHtml('<div></div>');
-      expect(el.elements.length, equals(2));
+      expect(el.children.length, equals(2));
       // Validate that the first item is still first.
-      expect(el.elements[0], equals(span));
-      expect(el.elements[1], isDivElement);
+      expect(el.children[0], equals(span));
+      expect(el.children[1], isDivElement);
     });
 
     test('documentFragment', () {
       var fragment = new DocumentFragment();
       fragment.addHtml('<span>something</span>');
-      expect(fragment.elements.length, equals(1));
-      expect(fragment.elements[0], isSpanElement);
+      expect(fragment.children.length, equals(1));
+      expect(fragment.children[0], isSpanElement);
     });
   });
 
@@ -45,8 +45,8 @@
     test('htmlelement', () {
       var el = new DivElement();
       el.addText('foo');
-      // No elements were created.
-      expect(el.elements.length, equals(0));
+      // No children were created.
+      expect(el.children.length, equals(0));
       // One text node was added.
       expect(el.nodes.length, equals(1));
     });
@@ -54,8 +54,8 @@
     test('documentFragment', () {
       var fragment = new DocumentFragment();
       fragment.addText('foo');
-      // No elements were created.
-      expect(fragment.elements.length, equals(0));
+      // No children were created.
+      expect(fragment.children.length, equals(0));
       // One text node was added.
       expect(fragment.nodes.length, equals(1));
     });
@@ -66,48 +66,48 @@
       var parent = new DivElement();
       var child = new DivElement();
       var newChild = new SpanElement();
-      parent.elements.add(child);
+      parent.children.add(child);
 
       child.insertAdjacentElement('beforebegin', newChild);
 
-      expect(parent.elements.length, 2);
-      expect(parent.elements[0], isSpanElement);
+      expect(parent.children.length, 2);
+      expect(parent.children[0], isSpanElement);
     });
 
     test('afterend', () {
       var parent = new DivElement();
       var child = new DivElement();
       var newChild = new SpanElement();
-      parent.elements.add(child);
+      parent.children.add(child);
 
       child.insertAdjacentElement('afterend', newChild);
 
-      expect(parent.elements.length, 2);
-      expect(parent.elements[1], isSpanElement);
+      expect(parent.children.length, 2);
+      expect(parent.children[1], isSpanElement);
     });
 
     test('afterbegin', () {
       var parent = new DivElement();
       var child = new DivElement();
       var newChild = new SpanElement();
-      parent.elements.add(child);
+      parent.children.add(child);
 
       parent.insertAdjacentElement('afterbegin', newChild);
 
-      expect(parent.elements.length, 2);
-      expect(parent.elements[0], isSpanElement);
+      expect(parent.children.length, 2);
+      expect(parent.children[0], isSpanElement);
     });
 
     test('beforeend', () {
       var parent = new DivElement();
       var child = new DivElement();
       var newChild = new SpanElement();
-      parent.elements.add(child);
+      parent.children.add(child);
 
       parent.insertAdjacentElement('beforeend', newChild);
 
-      expect(parent.elements.length, 2);
-      expect(parent.elements[1], isSpanElement);
+      expect(parent.children.length, 2);
+      expect(parent.children[1], isSpanElement);
     });
   });
 
@@ -115,45 +115,45 @@
     test('beforebegin', () {
       var parent = new DivElement();
       var child = new DivElement();
-      parent.elements.add(child);
+      parent.children.add(child);
 
       child.insertAdjacentHTML('beforebegin', '<span></span>');
 
-      expect(parent.elements.length, 2);
-      expect(parent.elements[0], isSpanElement);
+      expect(parent.children.length, 2);
+      expect(parent.children[0], isSpanElement);
     });
 
     test('afterend', () {
       var parent = new DivElement();
       var child = new DivElement();
-      parent.elements.add(child);
+      parent.children.add(child);
 
       child.insertAdjacentHTML('afterend', '<span></span>');
 
-      expect(parent.elements.length, 2);
-      expect(parent.elements[1], isSpanElement);
+      expect(parent.children.length, 2);
+      expect(parent.children[1], isSpanElement);
     });
 
     test('afterbegin', () {
       var parent = new DivElement();
       var child = new DivElement();
-      parent.elements.add(child);
+      parent.children.add(child);
 
       parent.insertAdjacentHTML('afterbegin', '<span></span>');
 
-      expect(parent.elements.length, 2);
-      expect(parent.elements[0], isSpanElement);
+      expect(parent.children.length, 2);
+      expect(parent.children[0], isSpanElement);
     });
 
     test('beforeend', () {
       var parent = new DivElement();
       var child = new DivElement();
-      parent.elements.add(child);
+      parent.children.add(child);
 
       parent.insertAdjacentHTML('beforeend', '<span></span>');
 
-      expect(parent.elements.length, 2);
-      expect(parent.elements[1], isSpanElement);
+      expect(parent.children.length, 2);
+      expect(parent.children[1], isSpanElement);
     });
   });
 
@@ -161,7 +161,7 @@
     test('beforebegin', () {
       var parent = new DivElement();
       var child = new DivElement();
-      parent.elements.add(child);
+      parent.children.add(child);
 
       child.insertAdjacentText('beforebegin', 'test');
 
@@ -172,7 +172,7 @@
     test('afterend', () {
       var parent = new DivElement();
       var child = new DivElement();
-      parent.elements.add(child);
+      parent.children.add(child);
 
       child.insertAdjacentText('afterend', 'test');
 
@@ -183,7 +183,7 @@
     test('afterbegin', () {
       var parent = new DivElement();
       var child = new DivElement();
-      parent.elements.add(child);
+      parent.children.add(child);
 
       parent.insertAdjacentText('afterbegin', 'test');
 
@@ -194,7 +194,7 @@
     test('beforeend', () {
       var parent = new DivElement();
       var child = new DivElement();
-      parent.elements.add(child);
+      parent.children.add(child);
 
       parent.insertAdjacentText('beforeend', 'test');
 
diff --git a/tests/html/element_test.dart b/tests/html/element_test.dart
index a3e6acd..2a5d460 100644
--- a/tests/html/element_test.dart
+++ b/tests/html/element_test.dart
@@ -6,7 +6,7 @@
 import '../../pkg/unittest/lib/unittest.dart';
 import '../../pkg/unittest/lib/html_individual_config.dart';
 import 'dart:html';
-import 'dart:svg';
+import 'dart:svg' as svg;
 
 expectLargeRect(ClientRect rect) {
   expect(rect.top, 0);
@@ -90,8 +90,8 @@
     final element = new Element.tag("div");
     element.style.width = '200px';
     element.style.height = '200px';
-    container.elements.add(element);
-    document.body.elements.add(container);
+    container.children.add(element);
+    document.body.children.add(container);
 
     expect(element.clientWidth, greaterThan(100));
     expect(element.clientHeight, greaterThan(100));
@@ -149,7 +149,7 @@
         '<thead><tr><td>foo</td></tr></thead>', 'foo',
         (element) => element is TableSectionElement));
   });
-    
+
   group('constructors', () {
     test('error', () {
       expect(() => new Element.html('<br/><br/>'), throwsArgumentError);
@@ -283,7 +283,7 @@
     //     '<someunknown>foo</someunknown>', 'foo',
     //     (element) => element is UnknownElement));
   });
-  
+
   group('eventListening', () {
     test('eventListeners', () {
       final element = new Element.tag('div');
@@ -466,47 +466,47 @@
       });
   });
 
-  group('elements', () {
+  group('children', () {
     test('is a subset of nodes', () {
       var el = new Element.html("<div>Foo<br/><img/></div>");
       expect(el.nodes.length, 3);
-      expect(el.elements.length, 2);
-      expect(el.nodes[1], el.elements[0]);
-      expect(el.nodes[2], el.elements[1]);
+      expect(el.children.length, 2);
+      expect(el.nodes[1], el.children[0]);
+      expect(el.nodes[2], el.children[1]);
     });
 
     test('changes when an element is added to nodes', () {
       var el = new Element.html("<div>Foo<br/><img/></div>");
       el.nodes.add(new Element.tag('hr'));
-      expect(el.elements.length, 3);
-      expect(el.elements[2], isHRElement);
-      expect(el.nodes[3], el.elements[2]);
+      expect(el.children.length, 3);
+      expect(el.children[2], isHRElement);
+      expect(el.nodes[3], el.children[2]);
     });
 
     test('changes nodes when an element is added', () {
       var el = new Element.html("<div>Foo<br/><img/></div>");
-      el.elements.add(new Element.tag('hr'));
+      el.children.add(new Element.tag('hr'));
       expect(el.nodes.length, 4);
       expect(el.nodes[3], isHRElement);
-      expect(el.elements[2], el.nodes[3]);
+      expect(el.children[2], el.nodes[3]);
     });
 
     test('last', () {
       var el = makeElementWithChildren();
-      expect(el.elements.last, isInputElement);
+      expect(el.children.last, isInputElement);
     });
 
     test('forEach', () {
       var els = [];
       var el = makeElementWithChildren();
-      el.elements.forEach((n) => els.add(n));
+      el.children.forEach((n) => els.add(n));
       expect(els[0], isBRElement);
       expect(els[1], isImageElement);
       expect(els[2], isInputElement);
     });
 
     test('filter', () {
-      var filtered = makeElementWithChildren().elements.
+      var filtered = makeElementWithChildren().children.
         filter((n) => n is ImageElement);
       expect(1, filtered.length);
       expect(filtered[0], isImageElement);
@@ -515,57 +515,57 @@
 
     test('every', () {
       var el = makeElementWithChildren();
-      expect(el.elements.every((n) => n is Element), isTrue);
-      expect(el.elements.every((n) => n is InputElement), isFalse);
+      expect(el.children.every((n) => n is Element), isTrue);
+      expect(el.children.every((n) => n is InputElement), isFalse);
     });
 
     test('some', () {
       var el = makeElementWithChildren();
-      expect(el.elements.some((n) => n is InputElement), isTrue);
-      expect(el.elements.some((n) => n is SVGElement), isFalse);
+      expect(el.children.some((n) => n is InputElement), isTrue);
+      expect(el.children.some((n) => n is svg.SvgElement), isFalse);
     });
 
     test('isEmpty', () {
-      expect(makeElement().elements.isEmpty, isTrue);
-      expect(makeElementWithChildren().elements.isEmpty, isFalse);
+      expect(makeElement().children.isEmpty, isTrue);
+      expect(makeElementWithChildren().children.isEmpty, isFalse);
     });
 
     test('length', () {
-      expect(makeElement().elements.length, 0);
-      expect(makeElementWithChildren().elements.length, 3);
+      expect(makeElement().children.length, 0);
+      expect(makeElementWithChildren().children.length, 3);
     });
 
     test('[]', () {
       var el = makeElementWithChildren();
-      expect(el.elements[0], isBRElement);
-      expect(el.elements[1], isImageElement);
-      expect(el.elements[2], isInputElement);
+      expect(el.children[0], isBRElement);
+      expect(el.children[1], isImageElement);
+      expect(el.children[2], isInputElement);
     });
 
     test('[]=', () {
       var el = makeElementWithChildren();
-      el.elements[1] = new Element.tag('hr');
-      expect(el.elements[0], isBRElement);
-      expect(el.elements[1], isHRElement);
-      expect(el.elements[2], isInputElement);
+      el.children[1] = new Element.tag('hr');
+      expect(el.children[0], isBRElement);
+      expect(el.children[1], isHRElement);
+      expect(el.children[2], isInputElement);
     });
 
     test('add', () {
       var el = makeElement();
-      el.elements.add(new Element.tag('hr'));
-      expect(el.elements.last, isHRElement);
+      el.children.add(new Element.tag('hr'));
+      expect(el.children.last, isHRElement);
     });
 
     test('addLast', () {
       var el = makeElement();
-      el.elements.addLast(new Element.tag('hr'));
-      expect(el.elements.last, isHRElement);
+      el.children.addLast(new Element.tag('hr'));
+      expect(el.children.last, isHRElement);
     });
 
     test('iterator', () {
       var els = [];
       var el = makeElementWithChildren();
-      for (var subel in el.elements) {
+      for (var subel in el.children) {
         els.add(subel);
       }
       expect(els[0], isBRElement);
@@ -575,36 +575,36 @@
 
     test('addAll', () {
       var el = makeElementWithChildren();
-      el.elements.addAll([
+      el.children.addAll([
         new Element.tag('span'),
         new Element.tag('a'),
         new Element.tag('h1')
       ]);
-      expect(el.elements[0], isBRElement);
-      expect(el.elements[1], isImageElement);
-      expect(el.elements[2], isInputElement);
-      expect(el.elements[3], isSpanElement);
-      expect(el.elements[4], isAnchorElement);
-      expect(el.elements[5], isHeadingElement);
+      expect(el.children[0], isBRElement);
+      expect(el.children[1], isImageElement);
+      expect(el.children[2], isInputElement);
+      expect(el.children[3], isSpanElement);
+      expect(el.children[4], isAnchorElement);
+      expect(el.children[5], isHeadingElement);
     });
 
     test('clear', () {
       var el = makeElementWithChildren();
-      el.elements.clear();
-      expect(el.elements, equals([]));
+      el.children.clear();
+      expect(el.children, equals([]));
     });
 
     test('removeLast', () {
       var el = makeElementWithChildren();
-      expect(el.elements.removeLast(), isInputElement);
-      expect(el.elements.length, 2);
-      expect(el.elements.removeLast(), isImageElement);
-      expect(el.elements.length, 1);
+      expect(el.children.removeLast(), isInputElement);
+      expect(el.children.length, 2);
+      expect(el.children.removeLast(), isImageElement);
+      expect(el.children.length, 1);
     });
 
     test('getRange', () {
       var el = makeElementWithChildren();
-      expect(el.elements.getRange(1, 1), isElementList);
+      expect(el.children.getRange(1, 1), isElementList);
     });
   });
 
@@ -664,7 +664,7 @@
     test('some', () {
       var el = getQueryAll();
       expect(el.some((n) => n is SpanElement), isTrue);
-      expect(el.some((n) => n is SVGElement), isFalse);
+      expect(el.some((n) => n is svg.SvgElement), isFalse);
     });
 
     test('isEmpty', () {
@@ -725,7 +725,7 @@
   });
 
   group('_ElementList', () {
-    List<Element> makeElList() => makeElementWithChildren().elements;
+    List<Element> makeElList() => makeElementWithChildren().children;
 
     test('filter', () {
       var filtered = makeElList().filter((n) => n is ImageElement);
diff --git a/tests/html/hidden_dom_1_test.dart b/tests/html/hidden_dom_1_test.dart
index 318bf4b..b2a51bd 100644
--- a/tests/html/hidden_dom_1_test.dart
+++ b/tests/html/hidden_dom_1_test.dart
@@ -10,7 +10,7 @@
   useHtmlConfiguration();
 
   test('test1', () {
-    document.body.elements.add(new Element.html(r'''
+    document.body.children.add(new Element.html(r'''
 <div id='div1'>
 Hello World!
 </div>'''));
diff --git a/tests/html/hidden_dom_2_test.dart b/tests/html/hidden_dom_2_test.dart
index a2cb124..1c1bad5 100644
--- a/tests/html/hidden_dom_2_test.dart
+++ b/tests/html/hidden_dom_2_test.dart
@@ -10,7 +10,7 @@
   useHtmlConfiguration();
 
   test('test1', () {
-    document.body.elements.add(new Element.html(r'''
+    document.body.children.add(new Element.html(r'''
 <div id='div1'>
 Hello World!
 </div>'''));
diff --git a/tests/html/html.status b/tests/html/html.status
index f49b807..49e137f 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -77,8 +77,6 @@
 inner_frame_test: Skip
 isolates_test: Skip
 js_interop_2_test: Fail
-js_interop_3_test: Fail
-js_interop_4_test: Fail
 localstorage_test: Fail
 measurement_test: Fail, Pass
 messageevent_test: Fail
@@ -137,8 +135,6 @@
 indexeddb_3_test: Fail
 indexeddb_4_test: Fail
 js_interop_2_test: Fail
-js_interop_3_test: Fail
-js_interop_4_test: Fail
 messageevent_test: Fail
 mutationobserver_test: Fail
 postmessage_structured_test: Skip   # BUG(5685): times out.
@@ -183,11 +179,13 @@
 datalistelement_test: Pass,Fail
 document_test: Fail
 dom_constructors_test: Fail
+element_test/additionalConstructors: Fail
 element_test/attributes: Fail, Crash
+element_test/constructors: Fail
 element_test/elements: Crash
 element_test/eventListening: Fail
 element_test/_ElementList: Fail, Crash
-element_test/queryAll: Crash
+element_test/queryAll: Fail, Crash
 element_add_test: Fail
 element_constructor_1_test: Fail
 element_webkit_test: Fail
@@ -199,10 +197,11 @@
 serialized_script_value_test: Fail
 svgelement2_test: Fail
 svgelement_test/constructors: Crash
+svgelement_test/css: Crash
 svgelement_test/additionalConstructors: Fail
 svgelement_test/elementget: Fail
 svgelement_test/elementset: Fail
-svgelement_test/innerHTML: Crash
+svgelement_test/innerHTML: Crash, Fail
 svgelement_test/outerHTML: Fail
 svgelement_test/svg: Fail
 url_test: Fail
diff --git a/tests/html/htmlcollection_test.dart b/tests/html/htmlcollection_test.dart
index 32a31d9..ad993ff 100644
--- a/tests/html/htmlcollection_test.dart
+++ b/tests/html/htmlcollection_test.dart
@@ -38,7 +38,7 @@
     Element root = insertTestDiv();
 
     List<Element> eachChecked =
-        document.query('#allChecked').elements;
+        document.query('#allChecked').children;
 
     expect(eachChecked, isList);
 
@@ -48,13 +48,13 @@
     Element root = insertTestDiv();
 
     List<Element> eachChecked =
-        document.query('#allChecked').elements;
+        document.query('#allChecked').children;
 
     List<Element> someChecked =
-        document.query('#someChecked').elements;
+        document.query('#someChecked').children;
 
     List<Element> noneChecked =
-        document.query('#noneChecked').elements;
+        document.query('#noneChecked').children;
 
     expect(eachChecked.length, 4);
     expect(someChecked.length, 4);
@@ -73,13 +73,13 @@
     Element root = insertTestDiv();
 
     List<Element> eachChecked =
-        document.query('#allChecked').elements;
+        document.query('#allChecked').children;
 
     List<Element> someChecked =
-        document.query('#someChecked').elements;
+        document.query('#someChecked').children;
 
     List<Element> noneChecked =
-        document.query('#noneChecked').elements;
+        document.query('#noneChecked').children;
 
     expect(eachChecked.length, 4);
     expect(someChecked.length, 4);
@@ -98,13 +98,13 @@
     Element root = insertTestDiv();
 
     List<Element> eachChecked =
-        document.query('#allChecked').elements;
+        document.query('#allChecked').children;
 
     List<Element> someChecked =
-        document.query('#someChecked').elements;
+        document.query('#someChecked').children;
 
     List<Element> noneChecked =
-        document.query('#noneChecked').elements;
+        document.query('#noneChecked').children;
 
     expect(eachChecked.length, 4);
     expect(someChecked.length, 4);
@@ -123,10 +123,10 @@
     Element root = insertTestDiv();
 
     List<Element> someChecked =
-        document.query('#someChecked').elements;
+        document.query('#someChecked').children;
 
     List<Element> emptyDiv =
-        document.query('#emptyDiv').elements;
+        document.query('#emptyDiv').children;
 
     expect(someChecked.length, 4);
     expect(emptyDiv.length, 0);
@@ -149,13 +149,13 @@
     Element root = insertTestDiv();
 
     List<Element> eachChecked =
-        document.query('#allChecked').elements;
+        document.query('#allChecked').children;
 
     List<Element> someChecked =
-        document.query('#someChecked').elements;
+        document.query('#someChecked').children;
 
     List<Element> noneChecked =
-        document.query('#noneChecked').elements;
+        document.query('#noneChecked').children;
 
     expect(eachChecked.length, 4);
     expect(someChecked.length, 4);
@@ -183,13 +183,13 @@
     Element root = insertTestDiv();
 
     List<Element> eachChecked =
-        document.query('#allChecked').elements;
+        document.query('#allChecked').children;
 
     List<Element> someChecked =
-        document.query('#someChecked').elements;
+        document.query('#someChecked').children;
 
     List<Element> noneChecked =
-        document.query('#noneChecked').elements;
+        document.query('#noneChecked').children;
 
     expect(eachChecked.length, 4);
     expect(someChecked.length, 4);
@@ -208,7 +208,7 @@
     Element root = insertTestDiv();
 
     List<Element> someChecked =
-        document.query('#someChecked').elements;
+        document.query('#someChecked').children;
 
     expect(someChecked.length, 4);
 
@@ -220,10 +220,10 @@
     Element root = insertTestDiv();
 
     List<Element> someChecked =
-        document.query('#someChecked').elements;
+        document.query('#someChecked').children;
 
     List<Element> noneChecked =
-        document.query('#noneChecked').elements;
+        document.query('#noneChecked').children;
 
     expect(someChecked.length, 4);
     expect(noneChecked.length, 4);
@@ -249,10 +249,10 @@
     Element root = insertTestDiv();
 
     List<Element> someChecked =
-        document.query('#someChecked').elements;
+        document.query('#someChecked').children;
 
     List<Element> noneChecked =
-        document.query('#noneChecked').elements;
+        document.query('#noneChecked').children;
 
     expect(someChecked.length, 4);
     expect(noneChecked.length, 4);
diff --git a/tests/html/indexeddb_1_test.dart b/tests/html/indexeddb_1_test.dart
index d55494c..8eda6c4 100644
--- a/tests/html/indexeddb_1_test.dart
+++ b/tests/html/indexeddb_1_test.dart
@@ -15,7 +15,7 @@
 
   fail(e) {
     guardAsync(() {
-      throw const Exception('IndexedDB failure');
+      throw new Exception('IndexedDB failure');
     });
   }
 
@@ -91,7 +91,7 @@
 
   fail(e) {
     guardAsync(() {
-      throw const Exception('IndexedDB failure');
+      throw new Exception('IndexedDB failure');
     });
   }
 
diff --git a/tests/html/indexeddb_2_test.dart b/tests/html/indexeddb_2_test.dart
index 0054f0e..be3c3c1 100644
--- a/tests/html/indexeddb_2_test.dart
+++ b/tests/html/indexeddb_2_test.dart
@@ -19,7 +19,7 @@
 
   fail(e) {
     guardAsync(() {
-      throw const Exception('IndexedDB failure');
+      throw new Exception('IndexedDB failure');
     });
   }
 
diff --git a/tests/html/node_test.dart b/tests/html/node_test.dart
index 7197a42..01ac3c3 100644
--- a/tests/html/node_test.dart
+++ b/tests/html/node_test.dart
@@ -6,7 +6,7 @@
 import '../../pkg/unittest/lib/unittest.dart';
 import '../../pkg/unittest/lib/html_individual_config.dart';
 import 'dart:html';
-import 'dart:svg';
+import 'dart:svg' as svg;
 
 Node makeNode() => new Element.tag('div');
 Node makeNodeWithChildren() =>
@@ -95,7 +95,7 @@
     test('some', () {
       var node = makeNodeWithChildren();
       expect(node.nodes.some((n) => n is Comment), isTrue);
-      expect(node.nodes.some((n) => n is SVGElement), isFalse);
+      expect(node.nodes.some((n) => n is svg.SvgElement), isFalse);
     });
 
     test('isEmpty', () {
diff --git a/tests/html/selectelement_test.dart b/tests/html/selectelement_test.dart
index 9de1d68..300e29e 100644
--- a/tests/html/selectelement_test.dart
+++ b/tests/html/selectelement_test.dart
@@ -21,7 +21,7 @@
       new OptionElement('data', 'two', false, true),
       new OptionElement(),
     ];
-    element.elements.addAll(options);
+    element.children.addAll(options);
     expect(element.selectedOptions.length, 1);
     expect(element.selectedOptions[0], equals(options[4]));
   });
@@ -37,7 +37,7 @@
       new OptionElement('data', 'two', false, true),
       new OptionElement(),
     ];
-    element.elements.addAll(options);
+    element.children.addAll(options);
     expect(element.selectedOptions.length, 2);
     expect(element.selectedOptions[0], equals(options[2]));
     expect(element.selectedOptions[1], equals(options[4]));
@@ -51,7 +51,7 @@
       new OptionElement('data', 'two', false, true),
       new OptionElement(),
     ];
-    element.elements.addAll(options);
+    element.children.addAll(options);
     // Use last to make sure that the list was correctly wrapped.
     expect(element.options.last, equals(options[3]));
   });
diff --git a/tests/html/shadow_dom_layout_test.dart b/tests/html/shadow_dom_layout_test.dart
index a316a2c..ec809ca 100644
--- a/tests/html/shadow_dom_layout_test.dart
+++ b/tests/html/shadow_dom_layout_test.dart
@@ -11,7 +11,7 @@
 // ordered blue, red, green down the page.
 main() {
   var div = new DivElement();
-  document.body.elements.add(div);
+  document.body.children.add(div);
 
   // build some DOM elements
   var bluebox = _colorBox('blue', 40, 20);
diff --git a/tests/html/svg_1_test.dart b/tests/html/svg_1_test.dart
index 997a361..a6bfc44 100644
--- a/tests/html/svg_1_test.dart
+++ b/tests/html/svg_1_test.dart
@@ -2,14 +2,14 @@
 import '../../pkg/unittest/lib/unittest.dart';
 import '../../pkg/unittest/lib/html_config.dart';
 import 'dart:html';
-import 'dart:svg';
+import 'dart:svg' as svg;
 
 // Test that SVG is present in dart:html API
 
 main() {
   useHtmlConfiguration();
 
-  var isSVGElement = predicate((x) => x is SVGElement, 'is a SVGElement');
+  var isSvgElement = predicate((x) => x is svg.SvgElement, 'is a SvgElement');
 
   test('simpleRect', () {
       var div = new Element.tag('div');
@@ -24,7 +24,7 @@
     var e = document.query('#svg1');
     expect(e, isNotNull);
 
-    SVGRectElement r = document.query('#rect1');
+    svg.RectElement r = document.query('#rect1');
     expect(r.x.baseVal.value, 10);
     expect(r.y.baseVal.value, 20);
     expect(r.height.baseVal.value, 40);
@@ -34,13 +34,13 @@
 
   test('trailing newline', () {
     // Ensures that we handle SVG with trailing newlines.
-    var logo = new SVGElement.svg("""
+    var logo = new svg.SvgElement.svg("""
       <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
         <path/>
       </svg>
       """);
 
-  expect(logo, isSVGElement);
+  expect(logo, isSvgElement);
 
   });
 }
diff --git a/tests/html/svg_2_test.dart b/tests/html/svg_2_test.dart
index 11500d3..2b12818 100644
--- a/tests/html/svg_2_test.dart
+++ b/tests/html/svg_2_test.dart
@@ -2,7 +2,7 @@
 import '../../pkg/unittest/lib/unittest.dart';
 import '../../pkg/unittest/lib/html_config.dart';
 import 'dart:html';
-import 'dart:svg';
+import 'dart:svg' as svg;
 
 // Test that SVG elements explicitly implement the IDL interfaces (is-checks
 // only, see SVGTest3 for behavioural tests).
@@ -23,43 +23,44 @@
   useHtmlConfiguration();
 
   var isElement = predicate((x) => x is Element, 'is an Element');
-  var isSVGElement = predicate((x) => x is SVGElement, 'is a SVGElement');
-  var isSVGSVGElement =
-      predicate((x) => x is SVGSVGElement, 'is a SVGSVGElement');
+  var isSvgElement = predicate((x) => x is svg.SvgElement, 'is a SvgElement');
+  var isSvgSvgElement =
+      predicate((x) => x is svg.SvgSvgElement, 'is a SvgSvgElement');
   var isNode = predicate((x) => x is Node, 'is a Node');
-  var isSVGTests = predicate((x) => x is SVGTests, 'is a SVGTests');
-  var isSVGLangSpace = predicate((x) => x is SVGLangSpace, 'is a SVGLangSpace');
-  var isSVGExternalResourcesRequired =
-      predicate((x) => x is SVGExternalResourcesRequired,
-          'is a SVGExternalResourcesRequired');
-  var isSVGStylable = predicate((x) => x is SVGStylable, 'is a SVGStylable');
-  var isSVGTransformable =
-      predicate((x) => x is SVGTransformable, 'is a SVGTransformable');
-  var isSVGLocatable = predicate((x) => x is SVGLocatable, 'is a SVGLocatable');
-  var isSVGNumber = predicate((x) => x is SVGNumber, 'is a SVGNumber');
-  var isSVGRect = predicate((x) => x is SVGRect, 'is a SVGRect');
+  var isSvgTests = predicate((x) => x is svg.Tests, 'is a svg.Tests');
+  var isSvgLangSpace = predicate((x) => x is svg.LangSpace, 'is a svg.LangSpace');
+  var isSvgExternalResourcesRequired =
+      predicate((x) => x is svg.ExternalResourcesRequired,
+          'is a svg.ExternalResourcesRequired');
+  var isSvgStylable = predicate((x) => x is svg.Stylable, 'is a svg.Stylable');
+  var isSvgTransformable =
+      predicate((x) => x is svg.Transformable, 'is a svg.Transformable');
+  var isSvgLocatable =
+      predicate((x) => x is svg.Locatable, 'is a svg.Locatable');
+  var isSvgNumber = predicate((x) => x is svg.Number, 'is a svg.Number');
+  var isSvgRect = predicate((x) => x is svg.Rect, 'is a svg.Rect');
 
   test('rect_isChecks', () {
       var div = insertTestDiv();
       var r = document.query('#rect1');
 
       // Direct inheritance chain
-      expect(r, isSVGElement);
+      expect(r, isSvgElement);
       expect(r, isElement);
       expect(r, isNode);
 
       // Other implemented interfaces.
-      expect(r, isSVGTests);
-      expect(r, isSVGLangSpace);
-      expect(r, isSVGExternalResourcesRequired);
-      expect(r, isSVGStylable);
-      expect(r, isSVGTransformable);
-      expect(r, isSVGLocatable);
+      expect(r, isSvgTests);
+      expect(r, isSvgLangSpace);
+      expect(r, isSvgExternalResourcesRequired);
+      expect(r, isSvgStylable);
+      expect(r, isSvgTransformable);
+      expect(r, isSvgLocatable);
 
       // Interfaces not implemented.
-      expect(r, isNot(isSVGNumber));
-      expect(r, isNot(isSVGRect));
-      expect(r, isNot(isSVGSVGElement));
+      expect(r, isNot(isSvgNumber));
+      expect(r, isNot(isSvgRect));
+      expect(r, isNot(isSvgSvgElement));
 
       div.remove();
     });
diff --git a/tests/html/svg_3_test.dart b/tests/html/svg_3_test.dart
index b5762d2..d5a4e4f 100644
--- a/tests/html/svg_3_test.dart
+++ b/tests/html/svg_3_test.dart
@@ -2,7 +2,7 @@
 import '../../pkg/unittest/lib/unittest.dart';
 import '../../pkg/unittest/lib/html_config.dart';
 import 'dart:html';
-import 'dart:svg';
+import 'dart:svg' as svg;
 
 // Test that SVG elements have the operations advertised through all the IDL
 // interfaces.  This is a 'duck typing' test, and does not explicitly use 'is'
@@ -12,15 +12,15 @@
 
   var isString = predicate((x) => x is String, 'is a String');
   var isStringList = predicate((x) => x is List<String>, 'is a List<String>');
-  var isSVGMatrix = predicate((x) => x is SVGMatrix, 'is a SVGMatrix');
-  var isSVGAnimatedBoolean =
-      predicate((x) => x is SVGAnimatedBoolean, 'is an SVGAnimatedBoolean');
-  var isSVGAnimatedString =
-      predicate((x) => x is SVGAnimatedString, 'is an SVGAnimatedString');
-  var isSVGRect = predicate((x) => x is SVGRect, 'is a SVGRect');
-  var isSVGAnimatedTransformList =
-      predicate((x) => x is SVGAnimatedTransformList,
-          'is an SVGAnimatedTransformList');
+  var isSvgMatrix = predicate((x) => x is svg.Matrix, 'is a svg.Matrix');
+  var isSvgAnimatedBoolean =
+      predicate((x) => x is svg.AnimatedBoolean, 'is an svg.AnimatedBoolean');
+  var isSvgAnimatedString =
+      predicate((x) => x is svg.AnimatedString, 'is an svg.AnimatedString');
+  var isSvgRect = predicate((x) => x is svg.Rect, 'is a svg.Rect');
+  var isSvgAnimatedTransformList =
+      predicate((x) => x is svg.AnimatedTransformList,
+          'is an svg.AnimatedTransformList');
   var isCSSStyleDeclaration =
       predicate((x) => x is CSSStyleDeclaration, 'is a CSSStyleDeclaration');
   var isCSSValue = predicate((x) => x is CSSValue, 'is a CSSValue');
@@ -39,9 +39,9 @@
   useHtmlConfiguration();
 
   /**
-   * Verifies that [e] supports the operations on the SVGTests interface.
+   * Verifies that [e] supports the operations on the svg.Tests interface.
    */
-  checkSVGTests(e) {
+  checkSvgTests(e) {
     // Just check that the operations seem to exist.
     var rx = e.requiredExtensions;
     expect(rx, isStringList);
@@ -55,9 +55,9 @@
   }
 
   /**
-   * Verifies that [e] supports the operations on the SVGLangSpace interface.
+   * Verifies that [e] supports the operations on the svg.LangSpace interface.
    */
-  checkSVGLangSpace(e) {
+  checkSvgLangSpace(e) {
     // Just check that the attribtes seem to exist.
     var lang = e.xmllang;
     e.xmllang = lang;
@@ -71,21 +71,21 @@
 
   /**
    * Verifies that [e] supports the operations on the
-   * SVGExternalResourcesRequired interface.
+   * svg.ExternalResourcesRequired interface.
    */
-  checkSVGExternalResourcesRequired(e) {
+  checkSvgExternalResourcesRequired(e) {
     var b = e.externalResourcesRequired;
-    expect(b, isSVGAnimatedBoolean);
+    expect(b, isSvgAnimatedBoolean);
     expect(b.baseVal, isFalse);
     expect(b.animVal, isFalse);
   }
 
   /**
-   * Verifies that [e] supports the operations on the SVGStylable interface.
+   * Verifies that [e] supports the operations on the svg.Stylable interface.
    */
-  checkSVGStylable(e) {
+  checkSvgStylable(e) {
     var className = e.$dom_svgClassName;
-    expect(className, isSVGAnimatedString);
+    expect(className, isSvgAnimatedString);
 
     var s = e.style;
     expect(s, isCSSStyleDeclaration);
@@ -95,33 +95,33 @@
   }
 
   /**
-   * Verifies that [e] supports the operations on the SVGLocatable interface.
+   * Verifies that [e] supports the operations on the svg.Locatable interface.
    */
-  checkSVGLocatable(e) {
+  checkSvgLocatable(e) {
     var v1 = e.farthestViewportElement;
     var v2 = e.nearestViewportElement;
     expect(v1, same(v2));
 
     var bbox = e.getBBox();
-    expect(bbox, isSVGRect);
+    expect(bbox, isSvgRect);
 
     var ctm = e.getCTM();
-    expect(ctm, isSVGMatrix);
+    expect(ctm, isSvgMatrix);
 
     var sctm = e.getScreenCTM();
-    expect(sctm, isSVGMatrix);
+    expect(sctm, isSvgMatrix);
 
     var xf2e = e.getTransformToElement(e);
-    expect(xf2e, isSVGMatrix);
+    expect(xf2e, isSvgMatrix);
   }
 
   /**
-   * Verifies that [e] supports the operations on the SVGTransformable
+   * Verifies that [e] supports the operations on the svg.Transformable
    * interface.
    */
-  checkSVGTransformable(e) {
+  checkSvgTransformable(e) {
     var trans = e.transform;
-    expect(trans, isSVGAnimatedTransformList);
+    expect(trans, isSvgAnimatedTransformList);
   }
 
   testRect(name, checker) {
@@ -133,12 +133,12 @@
       });
   }
 
-  testRect('rect_SVGTests', checkSVGTests);
-  testRect('rect_SVGLangSpace', checkSVGLangSpace);
-  testRect('rect_SVGExternalResourcesRequired',
-           checkSVGExternalResourcesRequired);
-  testRect('rect_SVGStylable', checkSVGStylable);
-  testRect('rect_SVGLocatable', checkSVGLocatable);
-  testRect('rect_SVGTransformable', checkSVGTransformable);
+  testRect('rect_SvgTests', checkSvgTests);
+  testRect('rect_SvgLangSpace', checkSvgLangSpace);
+  testRect('rect_SvgExternalResourcesRequired',
+           checkSvgExternalResourcesRequired);
+  testRect('rect_SvgStylable', checkSvgStylable);
+  testRect('rect_SvgLocatable', checkSvgLocatable);
+  testRect('rect_SvgTransformable', checkSvgTransformable);
 
 }
diff --git a/tests/html/svgelement_test.dart b/tests/html/svgelement_test.dart
index 6787d3c..e41c35614 100644
--- a/tests/html/svgelement_test.dart
+++ b/tests/html/svgelement_test.dart
@@ -2,17 +2,17 @@
 // 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 SVGElementTest;
+library SvgElementTest;
 import '../../pkg/unittest/lib/unittest.dart';
 import '../../pkg/unittest/lib/html_individual_config.dart';
 import 'dart:html';
-import 'dart:svg';
+import 'dart:svg' as svg;
 
 main() {
   useHtmlIndividualConfiguration();
 
-  var isSVGSVGElement =
-      predicate((x) => x is SVGSVGElement, 'is a SVGSVGElement');
+  var isSvgSvgElement =
+      predicate((x) => x is svg.SvgSvgElement, 'is a SvgSvgElement');
 
   Collection<String> _nodeStrings(Collection<Node> input) {
     final out = new List<String>();
@@ -29,131 +29,131 @@
 
   testConstructor(String tagName, Function isExpectedClass) {
     test(tagName, () {
-      expect(isExpectedClass(new SVGElement.tag(tagName)), isTrue);
+      expect(isExpectedClass(new svg.SvgElement.tag(tagName)), isTrue);
       expect(isExpectedClass(
-          new SVGElement.svg('<$tagName></$tagName>')), isTrue);
+          new svg.SvgElement.svg('<$tagName></$tagName>')), isTrue);
     });
   }
   group('additionalConstructors', () {
     group('svg', () {
       test('valid', () {
-        final svg = """
+        final svgContent = """
 <svg version="1.1">
   <circle></circle>
   <path></path>
 </svg>""";
-        final el = new SVGElement.svg(svg);
-        expect(el, isSVGSVGElement);
+        final el = new svg.SvgElement.svg(svgContent);
+        expect(el, isSvgSvgElement);
         expect(el.innerHTML, "<circle></circle><path></path>");
-        expect(el.outerHTML, svg);
+        expect(el.outerHTML, svgContent);
       });
 
       test('has no parent', () =>
-        expect(new SVGElement.svg('<circle/>').parent, isNull)
+        expect(new svg.SvgElement.svg('<circle/>').parent, isNull)
       );
 
       test('empty', () {
-        expect(() => new SVGElement.svg(""), throwsArgumentError);
+        expect(() => new svg.SvgElement.svg(""), throwsArgumentError);
       });
 
       test('too many elements', () {
-        expect(() => new SVGElement.svg("<circle></circle><path></path>"),
+        expect(() => new svg.SvgElement.svg("<circle></circle><path></path>"),
             throwsArgumentError);
       });
     });
-    testConstructor('altGlyphDef', (e) => e is SVGAltGlyphDefElement);
-    testConstructor('altGlyph', (e) => e is SVGAltGlyphElement);
-    testConstructor('animateColor', (e) => e is SVGAnimateColorElement);
-    testConstructor('animate', (e) => e is SVGAnimateElement);
+    testConstructor('altGlyphDef', (e) => e is svg.AltGlyphDefElement);
+    testConstructor('altGlyph', (e) => e is svg.AltGlyphElement);
+    testConstructor('animateColor', (e) => e is svg.AnimateColorElement);
+    testConstructor('animate', (e) => e is svg.AnimateElement);
     // WebKit doesn't recognize animateMotion
-    // testConstructor('animateMotion', (e) => e is SVGAnimateMotionElement);
-    testConstructor('animateTransform', (e) => e is SVGAnimateTransformElement);
-    testConstructor('cursor', (e) => e is SVGCursorElement);
-    testConstructor('feBlend', (e) => e is SVGFEBlendElement);
-    testConstructor('feColorMatrix', (e) => e is SVGFEColorMatrixElement);
+    // testConstructor('animateMotion', (e) => e is svg.AnimateMotionElement);
+    testConstructor('animateTransform', (e) => e is svg.AnimateTransformElement);
+    testConstructor('cursor', (e) => e is svg.CursorElement);
+    testConstructor('feBlend', (e) => e is svg.FEBlendElement);
+    testConstructor('feColorMatrix', (e) => e is svg.FEColorMatrixElement);
     testConstructor('feComponentTransfer',
-        (e) => e is SVGFEComponentTransferElement);
-    testConstructor('feConvolveMatrix', (e) => e is SVGFEConvolveMatrixElement);
+        (e) => e is svg.FEComponentTransferElement);
+    testConstructor('feConvolveMatrix', (e) => e is svg.FEConvolveMatrixElement);
     testConstructor('feDiffuseLighting',
-        (e) => e is SVGFEDiffuseLightingElement);
+        (e) => e is svg.FEDiffuseLightingElement);
     testConstructor('feDisplacementMap',
-        (e) => e is SVGFEDisplacementMapElement);
-    testConstructor('feDistantLight', (e) => e is SVGFEDistantLightElement);
-    testConstructor('feDropShadow', (e) => e is SVGFEDropShadowElement);
-    testConstructor('feFlood', (e) => e is SVGFEFloodElement);
-    testConstructor('feFuncA', (e) => e is SVGFEFuncAElement);
-    testConstructor('feFuncB', (e) => e is SVGFEFuncBElement);
-    testConstructor('feFuncG', (e) => e is SVGFEFuncGElement);
-    testConstructor('feFuncR', (e) => e is SVGFEFuncRElement);
-    testConstructor('feGaussianBlur', (e) => e is SVGFEGaussianBlurElement);
-    testConstructor('feImage', (e) => e is SVGFEImageElement);
-    testConstructor('feMerge', (e) => e is SVGFEMergeElement);
-    testConstructor('feMergeNode', (e) => e is SVGFEMergeNodeElement);
-    testConstructor('feOffset', (e) => e is SVGFEOffsetElement);
-    testConstructor('fePointLight', (e) => e is SVGFEPointLightElement);
+        (e) => e is svg.FEDisplacementMapElement);
+    testConstructor('feDistantLight', (e) => e is svg.FEDistantLightElement);
+    testConstructor('feDropShadow', (e) => e is svg.FEDropShadowElement);
+    testConstructor('feFlood', (e) => e is svg.FEFloodElement);
+    testConstructor('feFuncA', (e) => e is svg.FEFuncAElement);
+    testConstructor('feFuncB', (e) => e is svg.FEFuncBElement);
+    testConstructor('feFuncG', (e) => e is svg.FEFuncGElement);
+    testConstructor('feFuncR', (e) => e is svg.FEFuncRElement);
+    testConstructor('feGaussianBlur', (e) => e is svg.FEGaussianBlurElement);
+    testConstructor('feImage', (e) => e is svg.FEImageElement);
+    testConstructor('feMerge', (e) => e is svg.FEMergeElement);
+    testConstructor('feMergeNode', (e) => e is svg.FEMergeNodeElement);
+    testConstructor('feOffset', (e) => e is svg.FEOffsetElement);
+    testConstructor('fePointLight', (e) => e is svg.FEPointLightElement);
     testConstructor('feSpecularLighting',
-        (e) => e is SVGFESpecularLightingElement);
-    testConstructor('feSpotLight', (e) => e is SVGFESpotLightElement);
-    testConstructor('feTile', (e) => e is SVGFETileElement);
-    testConstructor('feTurbulence', (e) => e is SVGFETurbulenceElement);
-    testConstructor('filter', (e) => e is SVGFilterElement);
-    testConstructor('font', (e) => e is SVGFontElement);
-    testConstructor('font-face', (e) => e is SVGFontFaceElement);
-    testConstructor('font-face-format', (e) => e is SVGFontFaceFormatElement);
-    testConstructor('font-face-name', (e) => e is SVGFontFaceNameElement);
-    testConstructor('font-face-src', (e) => e is SVGFontFaceSrcElement);
-    testConstructor('font-face-uri', (e) => e is SVGFontFaceUriElement);
-    testConstructor('foreignObject', (e) => e is SVGForeignObjectElement);
-    testConstructor('glyph', (e) => e is SVGGlyphElement);
-    testConstructor('glyphRef', (e) => e is SVGGlyphRefElement);
-    testConstructor('metadata', (e) => e is SVGMetadataElement);
-    testConstructor('missing-glyph', (e) => e is SVGMissingGlyphElement);
-    testConstructor('set', (e) => e is SVGSetElement);
-    testConstructor('tref', (e) => e is SVGTRefElement);
-    testConstructor('vkern', (e) => e is SVGVKernElement);
+        (e) => e is svg.FESpecularLightingElement);
+    testConstructor('feSpotLight', (e) => e is svg.FESpotLightElement);
+    testConstructor('feTile', (e) => e is svg.FETileElement);
+    testConstructor('feTurbulence', (e) => e is svg.FETurbulenceElement);
+    testConstructor('filter', (e) => e is svg.FilterElement);
+    testConstructor('font', (e) => e is svg.FontElement);
+    testConstructor('font-face', (e) => e is svg.FontFaceElement);
+    testConstructor('font-face-format', (e) => e is svg.FontFaceFormatElement);
+    testConstructor('font-face-name', (e) => e is svg.FontFaceNameElement);
+    testConstructor('font-face-src', (e) => e is svg.FontFaceSrcElement);
+    testConstructor('font-face-uri', (e) => e is svg.FontFaceUriElement);
+    testConstructor('foreignObject', (e) => e is svg.ForeignObjectElement);
+    testConstructor('glyph', (e) => e is svg.GlyphElement);
+    testConstructor('glyphRef', (e) => e is svg.GlyphRefElement);
+    testConstructor('metadata', (e) => e is svg.MetadataElement);
+    testConstructor('missing-glyph', (e) => e is svg.MissingGlyphElement);
+    testConstructor('set', (e) => e is svg.SetElement);
+    testConstructor('tref', (e) => e is svg.TRefElement);
+    testConstructor('vkern', (e) => e is svg.VKernElement);
   });
 
   group('constructors', () {
-    testConstructor('a', (e) => e is SVGAElement);
-    testConstructor('circle', (e) => e is SVGCircleElement);
-    testConstructor('clipPath', (e) => e is SVGClipPathElement);
-    testConstructor('defs', (e) => e is SVGDefsElement);
-    testConstructor('desc', (e) => e is SVGDescElement);
-    testConstructor('ellipse', (e) => e is SVGEllipseElement);
-    testConstructor('g', (e) => e is SVGGElement);
+    testConstructor('a', (e) => e is svg.AElement);
+    testConstructor('circle', (e) => e is svg.CircleElement);
+    testConstructor('clipPath', (e) => e is svg.ClipPathElement);
+    testConstructor('defs', (e) => e is svg.DefsElement);
+    testConstructor('desc', (e) => e is svg.DescElement);
+    testConstructor('ellipse', (e) => e is svg.EllipseElement);
+    testConstructor('g', (e) => e is svg.GElement);
     // WebKit doesn't recognize hkern
-    // testConstructor('hkern', (e) => e is SVGHKernElement);
-    testConstructor('image', (e) => e is SVGImageElement);
-    testConstructor('line', (e) => e is SVGLineElement);
-    testConstructor('linearGradient', (e) => e is SVGLinearGradientElement);
+    // testConstructor('hkern', (e) => e is svg.HKernElement);
+    testConstructor('image', (e) => e is svg.ImageElement);
+    testConstructor('line', (e) => e is svg.LineElement);
+    testConstructor('linearGradient', (e) => e is svg.LinearGradientElement);
     // WebKit doesn't recognize mpath
-    // testConstructor('mpath', (e) => e is SVGMPathElement);
-    testConstructor('marker', (e) => e is SVGMarkerElement);
-    testConstructor('mask', (e) => e is SVGMaskElement);
-    testConstructor('path', (e) => e is SVGPathElement);
-    testConstructor('pattern', (e) => e is SVGPatternElement);
-    testConstructor('polygon', (e) => e is SVGPolygonElement);
-    testConstructor('polyline', (e) => e is SVGPolylineElement);
-    testConstructor('radialGradient', (e) => e is SVGRadialGradientElement);
-    testConstructor('rect', (e) => e is SVGRectElement);
-    testConstructor('script', (e) => e is SVGScriptElement);
-    testConstructor('stop', (e) => e is SVGStopElement);
-    testConstructor('style', (e) => e is SVGStyleElement);
-    testConstructor('switch', (e) => e is SVGSwitchElement);
-    testConstructor('symbol', (e) => e is SVGSymbolElement);
-    testConstructor('tspan', (e) => e is SVGTSpanElement);
-    testConstructor('text', (e) => e is SVGTextElement);
-    testConstructor('textPath', (e) => e is SVGTextPathElement);
-    testConstructor('title', (e) => e is SVGTitleElement);
-    testConstructor('use', (e) => e is SVGUseElement);
-    testConstructor('view', (e) => e is SVGViewElement);
+    // testConstructor('mpath', (e) => e is svg.MPathElement);
+    testConstructor('marker', (e) => e is svg.MarkerElement);
+    testConstructor('mask', (e) => e is svg.MaskElement);
+    testConstructor('path', (e) => e is svg.PathElement);
+    testConstructor('pattern', (e) => e is svg.PatternElement);
+    testConstructor('polygon', (e) => e is svg.PolygonElement);
+    testConstructor('polyline', (e) => e is svg.PolylineElement);
+    testConstructor('radialGradient', (e) => e is svg.RadialGradientElement);
+    testConstructor('rect', (e) => e is svg.RectElement);
+    testConstructor('script', (e) => e is svg.ScriptElement);
+    testConstructor('stop', (e) => e is svg.StopElement);
+    testConstructor('style', (e) => e is svg.StyleElement);
+    testConstructor('switch', (e) => e is svg.SwitchElement);
+    testConstructor('symbol', (e) => e is svg.SymbolElement);
+    testConstructor('tspan', (e) => e is svg.TSpanElement);
+    testConstructor('text', (e) => e is svg.TextElement);
+    testConstructor('textPath', (e) => e is svg.TextPathElement);
+    testConstructor('title', (e) => e is svg.TitleElement);
+    testConstructor('use', (e) => e is svg.UseElement);
+    testConstructor('view', (e) => e is svg.ViewElement);
   });
 
   group('outerHTML', () {
     test('outerHTML', () {
-      final el = new SVGSVGElement();
-      el.elements.add(new SVGElement.tag("circle"));
-      el.elements.add(new SVGElement.tag("path"));
+      final el = new svg.SvgSvgElement();
+      el.children.add(new svg.CircleElement());
+      el.children.add(new svg.PathElement());
       expect(el.outerHTML,
           '<svg version="1.1"><circle></circle><path></path></svg>');
     });
@@ -161,44 +161,44 @@
 
   group('innerHTML', () {
     test('get', () {
-      final el = new SVGSVGElement();
-      el.elements.add(new SVGElement.tag("circle"));
-      el.elements.add(new SVGElement.tag("path"));
+      final el = new svg.SvgSvgElement();
+      el.children.add(new svg.CircleElement());
+      el.children.add(new svg.PathElement());
       expect(el.innerHTML, '<circle></circle><path></path>');
     });
 
     test('set', () {
-      final el = new SVGSVGElement();
-      el.elements.add(new SVGElement.tag("circle"));
-      el.elements.add(new SVGElement.tag("path"));
+      final el = new svg.SvgSvgElement();
+      el.children.add(new svg.CircleElement());
+      el.children.add(new svg.PathElement());
       el.innerHTML = '<rect></rect><a></a>';
-      expect(_nodeStrings(el.elements), ["rect", "a"]);
+      expect(_nodeStrings(el.children), ["rect", "a"]);
     });
   });
 
   group('elementget', () {
     test('get', () {
-      final el = new SVGElement.svg("""
+      final el = new svg.SvgElement.svg("""
 <svg version="1.1">
   <circle></circle>
   <path></path>
   text
 </svg>""");
-      expect(_nodeStrings(el.elements), ["circle", "path"]);
+      expect(_nodeStrings(el.children), ["circle", "path"]);
     });
   });
 
   group('elementset', () {
     test('set', () {
-      final el = new SVGSVGElement();
-      el.elements = [new SVGElement.tag("circle"), new SVGElement.tag("path")];
+      final el = new svg.SvgSvgElement();
+      el.children = [new svg.SvgElement.tag("circle"), new svg.SvgElement.tag("path")];
       expect(el.innerHTML, '<circle></circle><path></path>');
     });
   });
 
   group('css', () {
     test('classes', () {
-      var el = new SVGElement.tag("circle");
+      var el = new svg.CircleElement();
       var classes = el.classes;
       expect(el.classes.length, 0);
       classes.toggle('foo');
diff --git a/tests/html/xmldocument_test.dart b/tests/html/xmldocument_test.dart
index 5667812..53c3bc4 100644
--- a/tests/html/xmldocument_test.dart
+++ b/tests/html/xmldocument_test.dart
@@ -19,8 +19,8 @@
     test('with a well-formed document', () {
       final doc = makeDocument();
       expect(doc, isXMLDocument);
-      expect(doc.elements[0].tagName, 'foo');
-      expect(doc.elements[1].tagName, 'bar');
+      expect(doc.children[0].tagName, 'foo');
+      expect(doc.children[1].tagName, 'bar');
     });
 
     // TODO(nweiz): re-enable this when Document#query matches the root-level
@@ -33,20 +33,20 @@
 
     test('with a PARSERERROR tag', () {
       final doc = new XMLDocument.xml("<xml><parsererror /></xml>");
-      expect(doc.elements[0].tagName, 'parsererror');
+      expect(doc.children[0].tagName, 'parsererror');
     });
   });
 
   // FilteredElementList is tested more thoroughly in DocumentFragmentTests.
-  group('elements', () {
+  group('children', () {
     test('filters out non-element nodes', () {
       final doc = new XMLDocument.xml("<xml>1<a/><b/>2<c/>3<d/></xml>");
-      expect(doc.elements.map((e) => e.tagName), ["a", "b", "c", "d"]);
+      expect(doc.children.map((e) => e.tagName), ["a", "b", "c", "d"]);
     });
 
     test('overwrites nodes when set', () {
       final doc = new XMLDocument.xml("<xml>1<a/><b/>2<c/>3<d/></xml>");
-      doc.elements = [new XMLElement.tag('x'), new XMLElement.tag('y')];
+      doc.children = [new XMLElement.tag('x'), new XMLElement.tag('y')];
       expect(doc.outerHTML, "<xml><x></x><y></y></xml>");
     });
   });
diff --git a/tests/html/xmlelement_test.dart b/tests/html/xmlelement_test.dart
index 0831518..1436b18 100644
--- a/tests/html/xmlelement_test.dart
+++ b/tests/html/xmlelement_test.dart
@@ -17,7 +17,7 @@
   makeElementWithParent() {
     final parent = new XMLElement.xml(
         "<parent><before/><xml><foo/><bar/></xml><after/></parent>");
-    return parent.elements[1];
+    return parent.children[1];
   }
 
   group('constructors', () {
@@ -25,8 +25,8 @@
       test('with a well-formed document', () {
         final el = makeElement();
         expect(el, isXMLElement);
-        expect(el.elements[0].tagName, 'foo');
-        expect(el.elements[1].tagName, 'bar');
+        expect(el.children[0].tagName, 'foo');
+        expect(el.children[1].tagName, 'bar');
       });
 
       test('with too many nodes', () {
@@ -39,7 +39,7 @@
 
       test('with a PARSERERROR tag', () {
         final el = new XMLElement.xml("<xml><parsererror /></xml>");
-        expect('parsererror', el.elements[0].tagName, 'parsererror');
+        expect('parsererror', el.children[0].tagName, 'parsererror');
       });
 
       test('has no parent', () =>
@@ -54,15 +54,15 @@
   });
 
   // FilteredElementList is tested more thoroughly in DocumentFragmentTests.
-  group('elements', () {
+  group('children', () {
     test('filters out non-element nodes', () {
       final el = new XMLElement.xml("<xml>1<a/><b/>2<c/>3<d/></xml>");
-      expect(el.elements.map((e) => e.tagName), ["a", "b", "c", "d"]);
+      expect(el.children.map((e) => e.tagName), ["a", "b", "c", "d"]);
     });
 
     test('overwrites nodes when set', () {
       final el = new XMLElement.xml("<xml>1<a/><b/>2<c/>3<d/></xml>");
-      el.elements = [new XMLElement.tag('x'), new XMLElement.tag('y')];
+      el.children = [new XMLElement.tag('x'), new XMLElement.tag('y')];
       expect(el.outerHTML, "<xml><x></x><y></y></xml>");
     });
   });
@@ -450,7 +450,7 @@
       final newEl = new XMLElement.tag("b");
       expect(el.insertAdjacentElement("beforeBegin", newEl), newEl);
       expect(el.innerHTML, "<foo></foo><bar></bar>");
-      expect(el.parent.innerHTML, 
+      expect(el.parent.innerHTML,
           "<before></before><b></b><xml><foo></foo><bar></bar>"
           "</xml><after></after>");
     });
@@ -460,7 +460,7 @@
       final newEl = new XMLElement.tag("b");
       expect(el.insertAdjacentElement("afterEnd", newEl), newEl);
       expect(el.innerHTML, "<foo></foo><bar></bar>");
-      expect(el.parent.innerHTML, 
+      expect(el.parent.innerHTML,
           "<before></before><xml><foo></foo><bar></bar></xml><b>"
           "</b><after></after>");
     });
@@ -497,7 +497,7 @@
       final el = makeElementWithParent();
       el.insertAdjacentText("beforeBegin", "foo");
       expect(el.innerHTML, "<foo></foo><bar></bar>");
-      expect(el.parent.innerHTML, 
+      expect(el.parent.innerHTML,
           "<before></before>foo<xml><foo></foo><bar></bar></xml>"
           "<after></after>");
     });
@@ -506,7 +506,7 @@
       final el = makeElementWithParent();
       el.insertAdjacentText("afterEnd", "foo");
       expect(el.innerHTML, "<foo></foo><bar></bar>");
-      expect(el.parent.innerHTML, 
+      expect(el.parent.innerHTML,
           "<before></before><xml><foo></foo><bar></bar></xml>foo"
           "<after></after>");
     });
diff --git a/tests/isolate/unresolved_ports_negative_test.dart b/tests/isolate/unresolved_ports_negative_test.dart
index 518884b..3007645 100644
--- a/tests/isolate/unresolved_ports_negative_test.dart
+++ b/tests/isolate/unresolved_ports_negative_test.dart
@@ -2,46 +2,12 @@
 // 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.
 
-// negative test to ensure that API_unresolvedPortsTest works.
-library unresolved_ports;
+// negative test to ensure that unresolved_ports works.
+library unresolved_ports_negative;
 import 'dart:isolate';
 import '../../pkg/unittest/lib/unittest.dart';
-
-bethIsolate() {
-  port.receive(expectAsync2((msg, reply) => msg[1].send(
-        '${msg[0]}\nBeth says: Tim are you coming? And Bob?', reply)));
-}
-
-timIsolate() {
-  SendPort bob = spawnFunction(bobIsolate);
-  port.receive(expectAsync2((msg, reply) => bob.send(
-        '$msg\nTim says: Can you tell "main" that we are all coming?', reply)));
-}
-
-bobIsolate() {
-  port.receive(expectAsync2((msg, reply) => reply.send(
-        '$msg\nBob says: we are all coming!')));
-}
+import 'unresolved_ports_test.dart' as positive_test;
 
 main() {
-  test('Message chain with unresolved ports', () {
-    ReceivePort port = new ReceivePort();
-    port.receive(expectAsync2((msg, _) {
-      expect(msg, equals('main says: Beth, find out if Tim is coming.'
-        + '\nBeth says: Tim are you coming? And Bob?'
-        + '\nTim says: Can you tell "main" that we are all coming?'
-        + '\nBob says: we are NOT coming!')); // should be 'all', not 'NOT'
-      port.close();
-    }));
-
-    SendPort tim = spawnFunction(timIsolate);
-    SendPort beth = spawnFunction(bethIsolate);
-
-    beth.send(
-        // because tim is created asynchronously, here we are sending an
-        // unresolved port:
-        ['main says: Beth, find out if Tim is coming.', tim],
-        port.toSendPort());
-  });
+  positive_test.baseTest(failForNegativeTest: true);
 }
-
diff --git a/tests/isolate/unresolved_ports_test.dart b/tests/isolate/unresolved_ports_test.dart
index 06f5d58..1072000 100644
--- a/tests/isolate/unresolved_ports_test.dart
+++ b/tests/isolate/unresolved_ports_test.dart
@@ -15,6 +15,8 @@
 //    by giving 'beth' a send-port to 'tim'.
 
 bethIsolate() {
+  // TODO(sigmund): use expectAsync2 when it is OK to use it within an isolate
+  // (issue #6856)
   port.receive((msg, reply) => msg[1].send(
         '${msg[0]}\nBeth says: Tim are you coming? And Bob?', reply));
 }
@@ -30,7 +32,7 @@
         '$msg\nBob says: we are all coming!'));
 }
 
-main() {
+baseTest({bool failForNegativeTest: false}) {
   test('Message chain with unresolved ports', () {
     ReceivePort port = new ReceivePort();
     port.receive(expectAsync2((msg, _) {
@@ -38,6 +40,7 @@
         '\nBeth says: Tim are you coming? And Bob?'
         '\nTim says: Can you tell "main" that we are all coming?'
         '\nBob says: we are all coming!'));
+      expect(failForNegativeTest, isFalse);
       port.close();
     }));
 
@@ -51,3 +54,5 @@
         port.toSendPort());
   });
 }
+
+main() => baseTest();
diff --git a/tests/language/abstract_factory_constructor_test.dart b/tests/language/abstract_factory_constructor_test.dart
index 0fc35de..d2e3a6f 100644
--- a/tests/language/abstract_factory_constructor_test.dart
+++ b/tests/language/abstract_factory_constructor_test.dart
@@ -13,12 +13,12 @@
 
 class A1 {
   A1() {}
-  abstract method();
+  method();  // Abstract.
   factory A1.make() { return new B(); }
 }
 
 class A2 {
-  abstract method();
+  method();  // Abstract.
   A2.make() {}
 }
 
diff --git a/tests/language/abstract_getter_test.dart b/tests/language/abstract_getter_test.dart
index 9e6e2c7..a745e35 100644
--- a/tests/language/abstract_getter_test.dart
+++ b/tests/language/abstract_getter_test.dart
@@ -5,7 +5,7 @@
 // Test to ensure that an abstract getter is not mistaken for a field.
 
 class Foo {
-  abstract get i;
+  get i;  // Abstract.
 }
 
 class Bar {
diff --git a/tests/language/abstract_syntax_test.dart b/tests/language/abstract_syntax_test.dart
index 4e653bf..b3f0a20 100644
--- a/tests/language/abstract_syntax_test.dart
+++ b/tests/language/abstract_syntax_test.dart
@@ -8,13 +8,11 @@
 }
 
 class A {
-  abstract foo();
-  abstract static bar(); /// 01: compile-time error
-  static abstract baz(); /// 02: compile-time error
+  /* abstract */ foo();
+  /* abstract */ static bar(); /// 01: compile-time error
 }
 
 class B extends A {
   foo() => 42;
   bar() => 87;
-  baz() => 99;
 }
diff --git a/tests/language/allocate_large_object.dart b/tests/language/allocate_large_object_test.dart
similarity index 100%
rename from tests/language/allocate_large_object.dart
rename to tests/language/allocate_large_object_test.dart
diff --git a/tests/language/arithmetic2_test.dart b/tests/language/arithmetic2_test.dart
index 64fc0c9..b0715e0 100644
--- a/tests/language/arithmetic2_test.dart
+++ b/tests/language/arithmetic2_test.dart
@@ -26,8 +26,6 @@
     return true;
   } on ArgumentError catch (e) {
     return true;
-  } on NullPointerException catch (e) {
-    return true;
   } on TypeError catch (e) {
     // In type checked mode.
     return true;
diff --git a/tests/language/bad_constructor_test.dart b/tests/language/bad_constructor_test.dart
index f4245af..3228017 100644
--- a/tests/language/bad_constructor_test.dart
+++ b/tests/language/bad_constructor_test.dart
@@ -10,12 +10,6 @@
   // Factory may not be static.
   static factory A() { return null; }  /// 01: compile-time error
 
-  // Constructor may not be abstract.
-  abstract A();  /// 02: compile-time error
-
-  // Factory may not be abstract
-  abstract factory A() { return null; }  /// 03: compile-time error
-
   // Named constructor may not conflict with names of methods and fields.
   var m;
   A.m() { m = 0; }  /// 04: compile-time error
diff --git a/tests/language/bailout2_test.dart b/tests/language/bailout2_test.dart
new file mode 100644
index 0000000..085c1d8
--- /dev/null
+++ b/tests/language/bailout2_test.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 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.
+
+var a;
+
+main() {
+  // Write a loop to force a bailout method on [A.foo].
+  for (int i = 0; i < 10; i++) {
+    if (a != null) new A().foo([]);
+    Expect.equals(42, new A().foo(new A()));
+  }
+}
+
+class A {
+  // In dart2js, the optimized version of foo tries to optimize the
+  // uses of a.length (which is used two times here: for the index,
+  // and for the bounds check), and that optmization used to crash
+  // the compiler.
+  foo(a) => a[a.length];
+
+  int get length => 42;
+  operator[] (index) => 42;
+}
diff --git a/tests/language/bailout3_test.dart b/tests/language/bailout3_test.dart
new file mode 100644
index 0000000..16cc121
--- /dev/null
+++ b/tests/language/bailout3_test.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 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.
+
+// Test that the return type of a method is being registered for both
+// its bailout and optimized version in dart2js.
+
+var a;
+
+bar() {
+  if (a[0] == 0) {
+    // Force bailout version.
+    bar();
+    // Avoid inlining.
+    throw 0;
+  }
+  for (int i = 0; i < 10; i++) {
+    a[0] = 42;
+  }
+  // This return should say that bar can return an array or unknown.
+  return a;
+}
+
+foo() {
+  if (a[0] == 0) {
+    // Avoid inlining.
+    throw 0;
+  }
+  var a = bar();
+  // This check used to fail because dart2js was assuming [a] was an
+  // array.
+  Expect.equals(1, a.length);
+}
+
+main() {
+  a = new Map();
+  bar();
+  foo();
+}
diff --git a/tests/language/bailout4_test.dart b/tests/language/bailout4_test.dart
new file mode 100644
index 0000000..52e9713
--- /dev/null
+++ b/tests/language/bailout4_test.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 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.
+
+// Test that dart2s computes the right bailout environment in presence
+// of nested loops.
+
+class A {
+  operator[] (index) => 42;
+}
+
+var a = new A();
+var b = new List(4);
+int count = 0;
+
+main() {
+  // Make the method recursive to make sure it gets an optimized
+  // version.
+  if (b[0] != null) main();
+
+  for (int i = 0; i < 2; i++) {
+    for (int j = 0; j < 2; j++) {
+      for (int k = 0; k < 2; k++) {
+        Expect.equals(42, a[i + j + k]);
+        count++;
+      }
+    }
+  }
+  Expect.equals(8, count);
+}
diff --git a/tests/language/call_through_null_getter_test.dart b/tests/language/call_through_null_getter_test.dart
index 0502496..24edb03 100644
--- a/tests/language/call_through_null_getter_test.dart
+++ b/tests/language/call_through_null_getter_test.dart
@@ -19,57 +19,39 @@
 
   static void testTopLevel() {
     topLevel = null;
-    expectThrowsNullPointerException(() { topLevel(); });
-    expectThrowsNullPointerException(() { (topLevel)(); });
-    expectThrowsNullPointerException(() { TOP_LEVEL_NULL(); });
-    expectThrowsNullPointerException(() { (TOP_LEVEL_NULL)(); });
+    expectThrowsNoSuchMethodError(() { topLevel(); });
+    expectThrowsNoSuchMethodError(() { (topLevel)(); });
+    expectThrowsNoSuchMethodError(() { TOP_LEVEL_NULL(); });
+    expectThrowsNoSuchMethodError(() { (TOP_LEVEL_NULL)(); });
   }
 
   static void testField() {
     A a = new A();
 
     a.field = null;
-    expectThrowsNullPointerException(() { a.field(); });
-    expectThrowsNullPointerException(() { (a.field)(); });
+    expectThrowsNoSuchMethodError(() { a.field(); });
+    expectThrowsNoSuchMethodError(() { (a.field)(); });
   }
 
   static void testGetter() {
     A a = new A();
 
     a.field = null;
-    expectThrowsNullPointerException(() { a.getter(); });
-    expectThrowsNullPointerException(() { (a.getter)(); });
+    expectThrowsNoSuchMethodError(() { a.getter(); });
+    expectThrowsNoSuchMethodError(() { (a.getter)(); });
   }
 
   static void testMethod() {
     A a = new A();
 
     a.field = null;
-    expectThrowsNullPointerException(() { a.method()(); });
+    expectThrowsNoSuchMethodError(() { a.method()(); });
   }
 
-  static void expectThrowsNullPointerException(fn) {
-    var exception = catchException(fn);
-    if (exception is! NullPointerException) {
-      Expect.fail("Wrong exception.  Expected: NullPointerException"
-          " got: ${exception}");
-    }
+  static void expectThrowsNoSuchMethodError(fn) {
+    Expect.throws(fn, (e) => e is NoSuchMethodError,
+                  "Should throw NoSuchMethodError");
   }
-
-  static catchException(fn) {
-    bool caught = false;
-    var result = null;
-    try {
-      fn();
-      Expect.equals(true, false);  // Shouldn't reach this.
-    } catch (e) {
-      caught = true;
-      result = e;
-    }
-    Expect.equals(true, caught);
-    return result;
-  }
-
 }
 
 
diff --git a/tests/language/closure3_test.dart b/tests/language/closure3_test.dart
index 8123228..c01bfc1 100644
--- a/tests/language/closure3_test.dart
+++ b/tests/language/closure3_test.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// Test that a NullPointerException is thrown even when an expression
+// Test that a NoSuchMethodError is thrown even when an expression
 // seems to be free of side-effects.
 
 test(x, y) {
@@ -10,11 +10,5 @@
 }
 
 main() {
-  try {
-    test(null, 2);
-    Expect.fail('Expected NullPointerException');
-  } on NullPointerException catch (ex) {
-    return;
-  }
-  Expect.fail('Expected NullPointerException');
+  Expect.throws(() { test(null, 2); }, (e) => e is NoSuchMethodError);
 }
diff --git "a/tests/standalone/io/\303\246\303\270\303\245.dart" b/tests/language/compile_time_constant_q_test.dart
similarity index 71%
copy from "tests/standalone/io/\303\246\303\270\303\245.dart"
copy to tests/language/compile_time_constant_q_test.dart
index d03e720..3b38e3c 100644
--- "a/tests/standalone/io/\303\246\303\270\303\245.dart"
+++ b/tests/language/compile_time_constant_q_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:io';
-
+const double x = 14.0;
 main() {
-  Expect.equals('æøå', new File('æøå.dat').readAsStringSync());
+  print(x);
 }
diff --git a/tests/language/deopt_smi_op.dart b/tests/language/deopt_smi_op_test.dart
similarity index 100%
rename from tests/language/deopt_smi_op.dart
rename to tests/language/deopt_smi_op_test.dart
diff --git "a/tests/standalone/io/\303\246\303\270\303\245.dart" b/tests/language/do_while3_test.dart
similarity index 63%
copy from "tests/standalone/io/\303\246\303\270\303\245.dart"
copy to tests/language/do_while3_test.dart
index d03e720..615ebd1 100644
--- "a/tests/standalone/io/\303\246\303\270\303\245.dart"
+++ b/tests/language/do_while3_test.dart
@@ -2,8 +2,12 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:io';
+// Test that a condition is only evaluated once in a loop.
 
 main() {
-  Expect.equals('æøå', new File('æøå.dat').readAsStringSync());
+  int c = 0;
+  do {
+    c++;
+  } while (c++ < 2);
+  Expect.equals(4, c);
 }
diff --git a/tests/language/double_int_to_string_test.dart b/tests/language/double_int_to_string_test.dart
new file mode 100644
index 0000000..96dbe0e
--- /dev/null
+++ b/tests/language/double_int_to_string_test.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 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.
+// Test basic integer operations.
+
+main() {
+  Expect.equals("0.0", (0.0).toString());
+  Expect.equals("9.0", (9.0).toString());
+  Expect.equals("90.0", (90.0).toString());
+  Expect.equals("111111111111111110000.0",
+                (111111111111111111111.0).toString());
+  Expect.equals("-9.0", (-9.0).toString());
+  Expect.equals("-90.0", (-90.0).toString());
+  Expect.equals("-111111111111111110000.0",
+                (-111111111111111111111.0).toString());
+  Expect.equals("1000.0", (1000.0).toString());
+  Expect.equals("1000000000000000100.0", (1000000000000000128.0).toString());
+}
diff --git a/tests/language/double_to_string.dart b/tests/language/double_to_string_test.dart
similarity index 82%
rename from tests/language/double_to_string.dart
rename to tests/language/double_to_string_test.dart
index 6e852a1..ce30f50 100644
--- a/tests/language/double_to_string.dart
+++ b/tests/language/double_to_string_test.dart
@@ -7,15 +7,10 @@
   Expect.equals("NaN", (double.NAN).toString());
   Expect.equals("Infinity", (1/0).toString());
   Expect.equals("-Infinity", (-1/0).toString());
-  Expect.equals("0.0", (0.0).toString());
-  Expect.equals("9.0", (9.0).toString());
-  Expect.equals("90.0", (90.0).toString());
   Expect.equals("90.12", (90.12).toString());
   Expect.equals("0.1", (0.1).toString());
   Expect.equals("0.01", (0.01).toString());
   Expect.equals("0.0123", (0.0123).toString());
-  Expect.equals("111111111111111110000.0",
-                (111111111111111111111.0).toString());
   Expect.equals("1.1111111111111111e+21",
                 (1111111111111111111111.0).toString());
   Expect.equals("1.1111111111111111e+22",
@@ -30,14 +25,10 @@
   Expect.equals("1.23e-8", (0.0000000123).toString());
 
   Expect.equals("-0.0", (-0.0).toString());
-  Expect.equals("-9.0", (-9.0).toString());
-  Expect.equals("-90.0", (-90.0).toString());
   Expect.equals("-90.12", (-90.12).toString());
   Expect.equals("-0.1", (-0.1).toString());
   Expect.equals("-0.01", (-0.01).toString());
   Expect.equals("-0.0123", (-0.0123).toString());
-  Expect.equals("-111111111111111110000.0",
-                (-111111111111111111111.0).toString());
   Expect.equals("-1.1111111111111111e+21",
                 (-1111111111111111111111.0).toString());
   Expect.equals("-1.1111111111111111e+22",
@@ -51,9 +42,7 @@
   Expect.equals("-1.2e-8", (-0.000000012).toString());
   Expect.equals("-1.23e-8", (-0.0000000123).toString());
 
-  Expect.equals("1000.0", (1000.0).toString());
   Expect.equals("0.00001", (0.00001).toString());
-  Expect.equals("1000000000000000100.0", (1000000000000000128.0).toString());
   Expect.equals("1e+21", (1000000000000000012800.0).toString());
   Expect.equals("-1e+21", (-1000000000000000012800.0).toString());
   Expect.equals("1e-7", (0.0000001).toString());
diff --git a/tests/language/exception_in_increment.dart b/tests/language/exception_in_increment_test.dart
similarity index 100%
rename from tests/language/exception_in_increment.dart
rename to tests/language/exception_in_increment_test.dart
diff --git a/tests/language/exception_test.dart b/tests/language/exception_test.dart
index c08a872..0876c5c 100644
--- a/tests/language/exception_test.dart
+++ b/tests/language/exception_test.dart
@@ -21,11 +21,11 @@
 
     bool correctCatch = false;
     try {
-      // This throws NullPointerException.
+      // This throws NullThrownError
       throw null;
     } on String catch (s) {
       correctCatch = false;
-    } on NullPointerException catch (e) {
+    } on NullThrownError catch (e) {
       correctCatch = true;
     } catch (x) {
       correctCatch = false;
diff --git a/tests/language/external_test.dart b/tests/language/external_test.dart
index 8e1b879..324629a 100644
--- a/tests/language/external_test.dart
+++ b/tests/language/external_test.dart
@@ -14,7 +14,6 @@
   external f12() => 1;  /// 12: compile-time error
   external static f13();  /// 13: runtime error
   static external f14();  /// 14: compile-time error
-  external abstract f15();  /// 15: compile-time error
   int external f16();  /// 16: compile-time error
 
   external Foo.n20();  /// 20: runtime error
diff --git a/tests/language/factory_redirection2_test.dart b/tests/language/factory_redirection2_test.dart
new file mode 100644
index 0000000..b4592d8
--- /dev/null
+++ b/tests/language/factory_redirection2_test.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 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.
+
+// Test that it is a compile-time error to have a redirection in a
+// non-factory constructor.
+
+class Foo {
+  Foo()
+  = Bar /// 01: compile-time error
+  ;
+}
+
+class Bar extends Foo {
+  factory Bar() => null;
+}
+
+main() {
+  Expect.isTrue(new Foo() is Foo);
+  Expect.isFalse(new Foo() is Bar);
+}
diff --git a/tests/language/first_class_types_constants_test.dart b/tests/language/first_class_types_constants_test.dart
new file mode 100644
index 0000000..6a4c4d4
--- /dev/null
+++ b/tests/language/first_class_types_constants_test.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 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.
+
+class C<T> {
+  final T t;
+  const C(this.t);
+}
+
+typedef int Fun(bool, String);
+
+const c0 = C;
+const c1 = const C(C);
+const c2 = Fun;
+const c3 = const C(Fun);
+
+main() {
+  Expect.identical(C, C);
+  Expect.identical(C, c0);
+  Expect.identical(c1, c1);
+  Expect.notEquals(c0, c1);
+  Expect.notEquals(c1, c2);
+  Expect.identical(c1.t, c0);
+  Expect.notEquals(C, Fun);
+  Expect.identical(Fun, Fun);
+  Expect.identical(Fun, c2);
+  Expect.identical(c3.t, c2);
+}
diff --git a/tests/language/first_class_types_literals_test.dart b/tests/language/first_class_types_literals_test.dart
index df8d6d6..31724b6 100644
--- a/tests/language/first_class_types_literals_test.dart
+++ b/tests/language/first_class_types_literals_test.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-class C<T> {}
+class C<T, U, V> {}
 
 class D {}
 
@@ -23,6 +23,9 @@
 
   // Test that types from runtimeType and literals agree.
   Expect.equals(int, 1.runtimeType);
+  Expect.equals(String, 'hest'.runtimeType);
+  Expect.equals(double, (0.5).runtimeType);
+  Expect.equals(bool, true.runtimeType);
   Expect.equals(C, new C().runtimeType);
   Expect.equals(D, new D().runtimeType);
 
diff --git a/tests/language/first_class_types_test.dart b/tests/language/first_class_types_test.dart
index 419dbbb..95090d6 100644
--- a/tests/language/first_class_types_test.dart
+++ b/tests/language/first_class_types_test.dart
@@ -24,12 +24,19 @@
   var i = 1;
   var s = 'string';
   var d = 3.14;
+  var b = true;
   sameType(2, i);
   sameType('hest', s);
   sameType(1.2, d);
+  sameType(false, b);
 
   var l = [1, 2, 3];
   var m = {'a': 1, 'b': 2};
   sameType([], l);
   sameType({}, m);
+
+  // Test parameterized lists.
+  sameType(new List<int>(), new List<int>());
+  differentType(new List<int>(), new List<num>());
+  differentType(new List<int>(), new List());
 }
diff --git a/tests/language/get_set_syntax_test.dart b/tests/language/get_set_syntax_test.dart
index 4f9d80c..2882f45 100644
--- a/tests/language/get_set_syntax_test.dart
+++ b/tests/language/get_set_syntax_test.dart
@@ -23,8 +23,6 @@
 class C1 {
   List get;
   List get a;
-  abstract List get a2;
-  abstract List get a3 => null;  /// 08: compile-time error
   List get b, c;      /// 09: compile-time error
 
   List set;
@@ -35,8 +33,6 @@
 class C2 {
   List<int> get;
   List<int> get a;
-  abstract List<int> get a2;
-  abstract List<int> get a3 => null;  /// 08: compile-time error
   List<int> get b, c; /// 13: compile-time error
 
   List<int> set;
diff --git a/tests/language/implicit_this_test.dart b/tests/language/implicit_this_test.dart
index 4d776e2..3ae0ea8 100644
--- a/tests/language/implicit_this_test.dart
+++ b/tests/language/implicit_this_test.dart
@@ -17,7 +17,7 @@
 // This class is implicitly abstract as it declares an abstract getter
 // method.
 class SubAbstract2 extends Abstract {
-  abstract get x;
+  get x;  // Abstract.
 }
 
 // This class does not implement "x" either, but it is not marked
diff --git a/tests/language/inline_add_constants_to_initial_env.dart b/tests/language/inline_add_constants_to_initial_env_test.dart
similarity index 100%
rename from tests/language/inline_add_constants_to_initial_env.dart
rename to tests/language/inline_add_constants_to_initial_env_test.dart
diff --git a/tests/language/inline_closure_with_constant_arguments.dart b/tests/language/inline_closure_with_constant_arguments_test.dart
similarity index 100%
rename from tests/language/inline_closure_with_constant_arguments.dart
rename to tests/language/inline_closure_with_constant_arguments_test.dart
diff --git a/tests/language/interface_test.dart b/tests/language/interface_test.dart
index 9104354..b36fbc7 100644
--- a/tests/language/interface_test.dart
+++ b/tests/language/interface_test.dart
@@ -30,9 +30,9 @@
   int foo() { return 1; }
 
   // intentionally unimplemented methods
-  abstract beta();
-  abstract String beta1();
-  abstract String beta2(double d);
+  beta();  // Abstract.
+  String beta1();  // Abstract.
+  String beta2(double d);  // Abstract.
 }
 
 main() {
diff --git a/tests/language/language.status b/tests/language/language.status
index ee3775a..5c4c267 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -16,10 +16,12 @@
 # 3) Update the language/src directory with the updated test.
 
 [ $compiler == none ]
+library_juxtaposition_test: Fail # Issue 6877
 part_test: Fail
 part2_test: Fail
 gc_test: Pass, Fail # Issue 1487
 pseudo_kw_illegal_test/14: Fail  # Issue 356
+first_class_types_constants_test: Fail # Issue 6282
 
 # These bugs refer currently ongoing language discussions.
 constructor5_test: Fail           # (Discussion ongoing)
@@ -48,8 +50,6 @@
 
 compile_time_constant10_test/none: Fail # issue 5214
 
-call_through_null_getter_test: Fail # issue 6124
-
 invocation_mirror_test: Fail # issue 3326, 3622.
 no_such_method_test: Fail # issue 3326, 3622.
 
@@ -82,6 +82,8 @@
 compile_time_constant_checked3_test/06: Fail, OK
 
 [ $compiler == dartc ]
+library_juxtaposition_test: Fail # Issue 6881
+new_expression_type_args_test/0*: Fail # Wrongly reports compile-time error.
 redirecting_factory_infinite_steps_test/01: Fail # http://dartbug.com/6560
 implicit_this_test/none: Fail # should not warn about allocating SubAbstract2
 metadata_test: Fail
@@ -89,7 +91,6 @@
 bad_override_test/02: Fail, OK # issue 6578, warning expected on "static" modifier
 const_locals_test: Fail
 const_nested_test: Fail
-get_set_syntax_test/none: Fail # does not accept getter/setter with no method body
 application_negative_test: Fail # Runtime only test, rewrite as multitest
 assign_instance_method_negative_test: Fail # Runtime only test, rewrite as multitest
 body_less_constructor_wrong_arg_negative_test: Fail # Runtime only test, rewrite as multitest
@@ -138,7 +139,6 @@
 factory5_test/00: Fail # issue 3079
 field_method4_negative_test: Fail  # Runtime only test, rewrite as multitest
 
-first_class_types_literals_test: Fail # issue 6283
 getter_no_setter_test/01: Fail # Fails to detect compile-time error.
 getter_no_setter2_test/01: Fail # Fails to detect compile-time error.
 instance_call_wrong_argument_count_negative_test: Fail # Runtime only test, rewrite as multitest
@@ -191,8 +191,6 @@
 bad_constructor_test/05: Fail, OK
 
 # test issue 5529
-abstract_factory_constructor_test/none: Fail, OK
-abstract_syntax_test/none: Fail, OK
 interface_test/none: Fail, OK
 
 # test issue 6338
@@ -336,6 +334,12 @@
 typed_message_test: Fail, OK
 
 
+# test issue 6818
+type_variable_identifier_expression_negative_test: Fail, OK
+
+# test issue 6866
+abstract_factory_constructor_test/00: Fail, OK
+
 
 #
 # Add new dartc annotations above in alphabetical order
@@ -381,13 +385,13 @@
 *: Skip
 
 [ $compiler == dart2dart ]
-const_factory_redirection_test: Fail # TRIAGE
-redirecting_factory_infinite_steps_test/01: Fail, Pass # TRIAGE: fails in minified mode. http://dartbug.com/6603
+factory_redirection2_test/01: Fail # Inherited from dart2js.
+const_factory_redirection_test: Fail # http://dartbug.com/6894
 
-many_overridden_no_such_method_test: Fail, Pass # TRIAGE: fails in minified mode
-overridden_no_such_method_test: Fail, Pass # TRIAGE: fails in minified mode
+many_overridden_no_such_method_test: Fail, Pass, OK # Fails in minified mode, test depends on method names.
+overridden_no_such_method_test: Fail, Pass, OK # Fails in minified mode, test depends on method names.
+
 # Calling unresolved class constructor:
-# call_constructor_on_unresolvable_class_test/07: Fail
 call_nonexistent_constructor_test: Fail
 
 bad_override_test/01: Fail
@@ -396,8 +400,7 @@
 illegal_invocation_test/04: Fail, OK # Class literals are expressions now.
 illegal_invocation_test/05: Fail, OK # Type variables are expressions now.
 
-# Renaming type from platform library:
-dynamic_test: Fail
+first_class_types_constants_test: Fail # Issue 6282
 
 # Missing compile-time error when modifying final local variables
 final_variable_assignment_test/01: Fail
@@ -554,7 +557,9 @@
 
 named_parameters_aggregated_test/05: Fail # Compile-time error reported instead of static type warning.
 
-new_expression_type_args_test/02: Fail # Test does not conform with spec.
+type_variable_bounds_test/07: Fail # Wrongly reports compile-time error.
+new_expression_type_args_test/00: Fail # Wrongly reports compile-time error.
+new_expression_type_args_test/01: Fail # Wrongly reports compile-time error.
 
 get_set_syntax_test/00: Fail # Fixed by https://chromiumcodereview.appspot.com/10915111
 get_set_syntax_test/01: Fail # Fixed by https://chromiumcodereview.appspot.com/10915111
@@ -589,8 +594,6 @@
 
 type_error_test: Fail, OK # VM bug: http://dartbug.com/5280
 
-call_through_null_getter_test: Fail # issue 6130
-
 # This is a VM error when the compiled code is run.
 invocation_mirror_test: Fail # issue 3326, 3622.
 invocation_mirror_indirect_test: Fail # issue 3326, 3622.
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 224e0e6..ceece29 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -42,13 +42,6 @@
 type_variable_bounds2_test/03: Fail
 type_variable_bounds2_test/05: Fail
 type_variable_bounds2_test/06: Pass # For the wrong reasons.
-type_variable_scope_test/00: Fail
-type_variable_scope_test/01: Fail
-type_variable_scope_test/02: Fail
-type_variable_scope_test/03: Fail
-type_variable_scope_test/04: Fail
-type_variable_scope_test/05: Fail
-type_variable_scope2_test: Fail
 assign_top_method_negative_test: Pass # For the wrong reasons.
 f_bounded_quantification_test/01: Fail
 f_bounded_quantification_test/02: Fail
@@ -59,16 +52,11 @@
 factory1_test/00: Fail
 factory1_test/01: Fail
 
-type_parameter_test/01: Fail # Issue 4932
-type_parameter_test/02: Fail # Issue 4932
-type_parameter_test/03: Fail # Issue 4932
-type_parameter_test/04: Fail # Issue 4932
-
 super_call4_test: Fail # Badly generated noSuchMethod call.
 
 [ $compiler == dart2js && $unchecked ]
 assertion_test: Fail
-new_expression_type_args_test/02: Fail # Test does not conform with spec.
+type_variable_bounds_test/07: Fail # Wrongly reports compile-time error.
 factory_redirection_test/08: Fail
 factory_redirection_test/09: Fail
 factory_redirection_test/10: Fail
@@ -94,6 +82,11 @@
 compile_time_constant_checked3_test/06: Fail, OK
 
 [ $compiler == dart2js ]
+factory_redirection2_test/01: Fail # http://dartbug.com/6791
+new_expression_type_args_test/00: Fail # Wrongly reports compile-time error.
+new_expression_type_args_test/01: Fail # Wrongly reports compile-time error.
+double_int_to_string_test: Fail # Issue 1533 (double/integer distinction)
+mint_arithmetic_test: Fail # Issue 1533 (big integer arithmetic).
 arithmetic_test: Fail # http://dartbug.com/6627
 factory_redirection_test/01: Fail
 factory_redirection_test/02: Crash
@@ -151,7 +144,6 @@
 const_var_test: Fail # Map literals take 2 type arguments.
 map_literal3_test: Fail # Map literals take 2 type arguments.
 ct_const_test: Fail # We don't take the generic type into account yet.
-char_escape_test: Fail # Unhandled non-BMP character: U+10000
 default_factory_library_test: Fail # lib is not a type
 dynamic_test: Fail # cannot resolve type F1
 constructor_redirect2_test/03: Fail # redirecting ctor with initializing formal
@@ -168,7 +160,6 @@
 function_type_parameter2_test: Fail # Internal Error: expected optional parameters
 function_type_parameter_test: Fail # Internal Error: expected optional parameters
 generic_instanceof_test: Fail # cannot resolve type T
-generic_instanceof2_test: Fail # fails an instance of test at run time
 generic_instanceof3_test: Fail # cannot handle generics.
 generic_test: Fail # cannot resolve type T
 get_set_syntax_test/00: Fail # Fixed by https://chromiumcodereview.appspot.com/10915111
@@ -379,3 +370,6 @@
 string_interpolate_npe_test: Fail
 closure_call_wrong_argument_count_negative_test: Skip
 label_test: Skip
+
+[ $compiler == dart2js && $host_checked ]
+factory_redirection2_test/01: Crash # http://dartbug.com/6791
diff --git "a/tests/standalone/io/\303\246\303\270\303\245.dart" b/tests/language/library_juxtaposition_lib.dart
similarity index 68%
copy from "tests/standalone/io/\303\246\303\270\303\245.dart"
copy to tests/language/library_juxtaposition_lib.dart
index d03e720..93f6691 100644
--- "a/tests/standalone/io/\303\246\303\270\303\245.dart"
+++ b/tests/language/library_juxtaposition_lib.dart
@@ -2,8 +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.
 
-import 'dart:io';
+library lib;
 
-main() {
-  Expect.equals('æøå', new File('æøå.dat').readAsStringSync());
-}
+part "library_" "juxtaposition_" "part.dart";
diff --git "a/tests/standalone/io/\303\246\303\270\303\245.dart" b/tests/language/library_juxtaposition_part.dart
similarity index 67%
copy from "tests/standalone/io/\303\246\303\270\303\245.dart"
copy to tests/language/library_juxtaposition_part.dart
index d03e720..2b14942 100644
--- "a/tests/standalone/io/\303\246\303\270\303\245.dart"
+++ b/tests/language/library_juxtaposition_part.dart
@@ -2,8 +2,4 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:io';
-
-main() {
-  Expect.equals('æøå', new File('æøå.dat').readAsStringSync());
-}
+const c = 47;
diff --git "a/tests/standalone/io/\303\246\303\270\303\245.dart" b/tests/language/library_juxtaposition_test.dart
similarity index 71%
rename from "tests/standalone/io/\303\246\303\270\303\245.dart"
rename to tests/language/library_juxtaposition_test.dart
index d03e720..ee1e7b4 100644
--- "a/tests/standalone/io/\303\246\303\270\303\245.dart"
+++ b/tests/language/library_juxtaposition_test.dart
@@ -2,8 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:io';
+import "library_" "juxtaposition_" "lib.dart";
 
 main() {
-  Expect.equals('æøå', new File('æøå.dat').readAsStringSync());
+  Expect.equals(c, 47);
 }
diff --git a/tests/language/method_invocation_test.dart b/tests/language/method_invocation_test.dart
index 22e5282..44c9da2 100644
--- a/tests/language/method_invocation_test.dart
+++ b/tests/language/method_invocation_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // Testing method invocation.
-// Currently testing only NullPointerException.
+// Currently testing only NoSuchMethodError.
 
 class A {
   A() {}
@@ -20,7 +20,7 @@
     bool exceptionCaught = false;
     try {
       a.foo();
-    } on NullPointerException catch (e) {
+    } on NoSuchMethodError catch (e) {
       exceptionCaught = true;
     }
     Expect.equals(true, exceptionCaught);
diff --git a/tests/language/mint_arithmetic.dart b/tests/language/mint_arithmetic_test.dart
similarity index 97%
rename from tests/language/mint_arithmetic.dart
rename to tests/language/mint_arithmetic_test.dart
index f45d07c..0e05d92 100644
--- a/tests/language/mint_arithmetic.dart
+++ b/tests/language/mint_arithmetic_test.dart
@@ -71,7 +71,6 @@
 test_mint_double_op() {
   for (var i=0; i<10000; i++) test_func(4294967295, 1);
   Expect.equals(2.0, test_func(4294967295, 1));
-  Expect.equals(4294967296.0, test_func(4294967295, 1));
 }
 
 main() {
diff --git a/tests/language/mint_compares.dart b/tests/language/mint_compares_test.dart
similarity index 100%
rename from tests/language/mint_compares.dart
rename to tests/language/mint_compares_test.dart
diff --git a/tests/language/new_expression_type_args_test.dart b/tests/language/new_expression_type_args_test.dart
index 4f1a11b..c454c17 100644
--- a/tests/language/new_expression_type_args_test.dart
+++ b/tests/language/new_expression_type_args_test.dart
@@ -1,16 +1,16 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// Copyright (c) 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.
 
 // Tests showing errors using type-arguments in new expressions:
 class A<T> {
-  // Can't intantiate type parameter (within static or instance method).
-  m1() => new T();         /// 00: compile-time error
-  static m2() => new T();  /// 01: compile-time error
+  // Can't instantiate type parameter (within static or instance method).
+  m1() => new T();         /// 00: static type warning, runtime error
+  static m2() => new T();  /// 01: static type warning, runtime error
 
   // OK when used within instance method, but not in static method.
   m3() => new A<T>();
-  static m4() => new A<T>(); /// 02: compile-time error
+  static m4() => new A<T>(); /// 02: static type warning, dynamic type error
 }
 
 main() {
diff --git a/tests/language/null_access_error_test.dart b/tests/language/null_access_error_test.dart
new file mode 100644
index 0000000..f36a9f3
--- /dev/null
+++ b/tests/language/null_access_error_test.dart
@@ -0,0 +1,49 @@
+// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class NullAccessTest {
+
+  static void testNullVariable() {
+    int variable;
+    bool exceptionCaught = false;
+    bool wrongExceptionCaught = false;
+    try {
+      variable++;
+    } on NoSuchMethodError catch (ex) {
+      exceptionCaught = true;
+    } catch (ex) {
+      wrongExceptionCaught = true;
+    }
+    Expect.isTrue(exceptionCaught);
+    Expect.isFalse(wrongExceptionCaught);
+  }
+
+  static int helperFunction(int parameter) {
+    return parameter++;
+  }
+
+  static void testNullFunctionCall() {
+    int variable;
+    bool exceptionCaught = false;
+    bool wrongExceptionCaught = false;
+    try {
+      variable = helperFunction(variable);
+    } on NoSuchMethodError catch (ex) {
+      exceptionCaught = true;
+    } catch (ex) {
+      wrongExceptionCaught = true;
+    }
+    Expect.isTrue(exceptionCaught);
+    Expect.isFalse(wrongExceptionCaught);
+  }
+
+  static void testMain() {
+    testNullVariable();
+    testNullFunctionCall();
+  }
+}
+
+main() {
+  NullAccessTest.testMain();
+}
diff --git a/tests/language/null_pointer_exception_test.dart b/tests/language/null_pointer_exception_test.dart
deleted file mode 100644
index 0872cea..0000000
--- a/tests/language/null_pointer_exception_test.dart
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-class NullPointerExceptionTest {
-
-  static void testNullPointerExceptionVariable() {
-    int variable;
-    bool exceptionCaught = false;
-    bool wrongExceptionCaught = false;
-    try {
-      variable++;
-    } on NullPointerException catch (ex) {
-      exceptionCaught = true;
-    } on Exception catch (ex) {
-      wrongExceptionCaught = true;
-    }
-    Expect.equals(true, exceptionCaught);
-    Expect.equals(true, !wrongExceptionCaught);
-  }
-
-  static int helperFunction(int parameter) {
-    return parameter++;
-  }
-
-  static void testNullPointerExceptionFunctionCall() {
-    int variable;
-    bool exceptionCaught = false;
-    bool wrongExceptionCaught = false;
-    try {
-      variable = helperFunction(variable);
-    } on NullPointerException catch (ex) {
-      exceptionCaught = true;
-    } on Exception catch (ex) {
-      wrongExceptionCaught = true;
-    }
-    Expect.equals(true, exceptionCaught);
-    Expect.equals(true, !wrongExceptionCaught);
-  }
-
-  static void testMain() {
-    testNullPointerExceptionVariable();
-    testNullPointerExceptionFunctionCall();
-  }
-}
-
-main() {
-  NullPointerExceptionTest.testMain();
-}
diff --git a/tests/language/optimize_redundant_array_load.dart b/tests/language/optimize_redundant_array_load_test.dart
similarity index 100%
rename from tests/language/optimize_redundant_array_load.dart
rename to tests/language/optimize_redundant_array_load_test.dart
diff --git a/tests/language/optimized_constant_array_string_access.dart b/tests/language/optimized_constant_array_string_access_test.dart
similarity index 100%
rename from tests/language/optimized_constant_array_string_access.dart
rename to tests/language/optimized_constant_array_string_access_test.dart
diff --git a/tests/language/optimized_hoisting_checked_mode_assert.dart b/tests/language/optimized_hoisting_checked_mode_assert_test.dart
similarity index 100%
rename from tests/language/optimized_hoisting_checked_mode_assert.dart
rename to tests/language/optimized_hoisting_checked_mode_assert_test.dart
diff --git a/tests/language/optimized_lists.dart b/tests/language/optimized_lists_test.dart
similarity index 96%
rename from tests/language/optimized_lists.dart
rename to tests/language/optimized_lists_test.dart
index 399b744..cc3b862 100644
--- a/tests/language/optimized_lists.dart
+++ b/tests/language/optimized_lists_test.dart
@@ -25,5 +25,5 @@
   Expect.equals(2, c[1]);
   // Test elimination of array length computation.
   var v = c[n];
-  Expet equals(v, c[n]);
+  Expect.equals(v, c[n]);
 }
diff --git a/tests/language/optimized_string_charat_test.dart b/tests/language/optimized_string_charat_test.dart
new file mode 100644
index 0000000..b11c672
--- /dev/null
+++ b/tests/language/optimized_string_charat_test.dart
@@ -0,0 +1,65 @@
+// Copyright (c) 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.
+
+// Test optimized [] on strings.
+
+var a = "abc";
+var b = "øbc";
+var c = new String.fromCharCodes([123, 456, 789]);
+
+test_charat(s, i) {
+  return s[i];
+}
+
+test_const_str(i) {
+  return "abc"[i];
+}
+
+
+test_const_index(s) {
+  return s[0];
+}
+
+test_const_index2(s) {
+  return s[3];
+}
+
+main() {
+  Expect.equals("a", test_charat(a, 0));
+  for (var i=0; i<10000; i++) test_charat(a, 0);
+  Expect.equals("a", test_charat(a, 0));
+  Expect.equals("b", test_charat(a, 1));
+  Expect.equals("c", test_charat(a, 2));
+  Expect.throws(() => test_charat(a, 3));
+
+  Expect.equals("a", test_const_str(0));
+  for (var i=0; i<10000; i++) test_const_str(0);
+  Expect.equals("a", test_const_str(0));
+  Expect.equals("b", test_const_str(1));
+  Expect.equals("c", test_const_str(2));
+  Expect.throws(() => test_const_str(3));
+
+  Expect.equals("a", test_const_index(a));
+  for (var i=0; i<10000; i++) test_const_index(a);
+  Expect.equals("a", test_const_index(a));
+  Expect.equals("ø", test_const_index(b));
+  Expect.equals(new String.fromCharCodes([123]), test_const_index(c));
+  Expect.throws(() => test_const_index2(a));
+
+  Expect.equals("ø", test_charat(b, 0));
+  for (var i=0; i<10000; i++) test_charat(b, 0);
+  Expect.equals("ø", test_charat(b, 0));
+  Expect.equals("b", test_charat(b, 1));
+  Expect.equals("c", test_charat(b, 2));
+  Expect.throws(() => test_charat(b, 3));
+
+  Expect.equals(new String.fromCharCodes([123]), test_charat(c, 0));
+  for (var i=0; i<10000; i++) test_charat(c, 0);
+  Expect.equals(new String.fromCharCodes([123]), test_charat(c, 0));
+  Expect.equals(new String.fromCharCodes([456]), test_charat(c, 1));
+  Expect.equals(new String.fromCharCodes([789]), test_charat(c, 2));
+  Expect.throws(() => test_charat(c, 3));
+
+
+}
diff --git a/tests/language/optimized_string_charcodeat.dart b/tests/language/optimized_string_charcodeat_test.dart
similarity index 100%
rename from tests/language/optimized_string_charcodeat.dart
rename to tests/language/optimized_string_charcodeat_test.dart
diff --git a/tests/language/property_field_override_test.dart b/tests/language/property_field_override_test.dart
index 7ce82bd..50f64cb9 100644
--- a/tests/language/property_field_override_test.dart
+++ b/tests/language/property_field_override_test.dart
@@ -4,7 +4,7 @@
 
 // Test overriding a getter property with a field.
 class A {
-  abstract int get v;
+  int get v;  // Abstract.
 
   int a() {
     return v - 1;
diff --git a/tests/language/string_interpolate_npe_test.dart b/tests/language/string_interpolate_null_test.dart
similarity index 84%
rename from tests/language/string_interpolate_npe_test.dart
rename to tests/language/string_interpolate_null_test.dart
index 0baa32a..c8aff4a 100644
--- a/tests/language/string_interpolate_npe_test.dart
+++ b/tests/language/string_interpolate_null_test.dart
@@ -15,8 +15,8 @@
   a = null;
   try {
     s = "Hello Mr. ${a.name}";
-  } on NullPointerException catch (e) {
+  } on NoSuchMethodError catch (e) {
     return;
   }
-  Expect.fail("NullPointerException not thrown");
+  Expect.fail("NoSuchMethodError not thrown");
 }
diff --git a/tests/language/type_error_test.dart b/tests/language/type_error_test.dart
index 18d72ce..60784dc 100644
--- a/tests/language/type_error_test.dart
+++ b/tests/language/type_error_test.dart
@@ -151,7 +151,7 @@
   try {
     print(o);
   } on TypeError catch (e) {
-    print('unexpected type error: ${NoSuchMethodError.safeToString(e)}');
+    print('unexpected type error: ${Error.safeToString(e)}');
     throw; // Unexpected type error.
   } on CastError catch (e) {
     print(e); // This might provoke an error.
diff --git a/tests/language/type_variable_bounds_test.dart b/tests/language/type_variable_bounds_test.dart
index fd97593..a357b8c 100644
--- a/tests/language/type_variable_bounds_test.dart
+++ b/tests/language/type_variable_bounds_test.dart
@@ -60,7 +60,7 @@
   new Box<String>().makeFoo();
 
   // Fisk does not exist.
-  new Box<Fisk>(); /// 07: compile-time error
+  new Box<Fisk>(); /// 07: static type warning, dynamic type error
 
   // Too many type arguments.
   new Box<Object, Object>(); /// 08: compile-time error
diff --git a/tests/language/type_variable_shadows_class.dart b/tests/language/type_variable_shadows_class.dart
deleted file mode 100644
index 1d0538a..0000000
--- a/tests/language/type_variable_shadows_class.dart
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 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.
-
-// A reference to a class that is shadowed by a type variable should still work
-// in a static context.
-
-class T {
-  String toString() => "Class T";
-  static String staticToString() => "Class T (static)";
-}
-
-class A<T> {
-  static method() {
-    var foo = new T();
-    Expect.equals("Class T", foo.toString());
-  }
-  instMethod() {
-    var foo = T.staticToString();
-    Expect.equals("Class T (static)", foo);
-  }
-}
-
-main() {
-  A.method();
-  new A<String>().instMethod();
-}
diff --git a/tests/language/typed_selector_test.dart b/tests/language/typed_selector_test.dart
index 5431d36..8624528 100644
--- a/tests/language/typed_selector_test.dart
+++ b/tests/language/typed_selector_test.dart
@@ -12,7 +12,7 @@
 }
 
 abstract class B {
-  abstract get document;
+  get document;  // Abstract.
 }
 
 class C extends A implements B {
diff --git a/tests/lib/crypto/hmac_md5_test.dart b/tests/lib/crypto/hmac_md5_test.dart
index 24753bf..f47c710 100644
--- a/tests/lib/crypto/hmac_md5_test.dart
+++ b/tests/lib/crypto/hmac_md5_test.dart
@@ -71,7 +71,7 @@
                     0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
                     0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa ] ];
 
-var hmac_md5_macs =
+var hmac_md5_string_macs =
     const [ '9294727a3638bb1c13f48ef8158bfc9d',
             '750c783e6ab0b503eaa86e310a5db738',
             '56be34521d144c88dbb8c733f0e8b3f6',
@@ -80,13 +80,34 @@
             '6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd',
             '6f630fad67cda0ee1fb1f562db3aa53e' ];
 
-void testStandardVectors(inputs, keys, macs) {
+var hmac_md5_macs =
+    const [ const [0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c, 0x13, 0xf4,
+                   0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d],
+            const [0x75, 0x0c, 0x78, 0x3e, 0x6a, 0xb0, 0xb5, 0x03, 0xea, 0xa8,
+                   0x6e, 0x31, 0x0a, 0x5d, 0xb7, 0x38],
+            const [0x56, 0xbe, 0x34, 0x52, 0x1d, 0x14, 0x4c, 0x88, 0xdb, 0xb8,
+                   0xc7, 0x33, 0xf0, 0xe8, 0xb3, 0xf6],
+            const [0x69, 0x7e, 0xaf, 0x0a, 0xca, 0x3a, 0x3a, 0xea, 0x3a, 0x75,
+                   0x16, 0x47, 0x46, 0xff, 0xaa, 0x79],
+            const [0x56, 0x46, 0x1e, 0xf2, 0x34, 0x2e, 0xdc, 0x00, 0xf9, 0xba,
+                   0xb9, 0x95, 0x69, 0x0e, 0xfd, 0x4c],
+            const [0x6b, 0x1a, 0xb7, 0xfe, 0x4b, 0xd7, 0xbf, 0x8f, 0x0b, 0x62,
+                   0xe6, 0xce, 0x61, 0xb9, 0xd0, 0xcd],
+            const [0x6f, 0x63, 0x0f, 0xad, 0x67, 0xcd, 0xa0, 0xee, 0x1f, 0xb1,
+                   0xf5, 0x62, 0xdb, 0x3a, 0xa5, 0x3e]];
+
+void testStandardVectors(inputs, keys, string_macs, macs) {
   for (var i = 0; i < inputs.length; i++) {
-    var d = new HMAC(new MD5(), keys[i]).update(inputs[i]).digest();
-    Expect.isTrue(CryptoUtils.bytesToHex(d).startsWith(macs[i]), '$i');
+    var h = new HMAC(new MD5(), keys[i]);
+    var d = h.update(inputs[i]).digest();
+    Expect.isTrue(CryptoUtils.bytesToHex(d).startsWith(string_macs[i]), '$i');
+    Expect.isTrue(h.verify(macs[i]));
+    Expect.isFalse(h.verify(macs[(i+1)%macs.length]));
+    Expect.throws(() => h.verify([]));
   }
 }
 
 void main() {
-  testStandardVectors(hmac_md5_inputs, hmac_md5_keys, hmac_md5_macs);
+  testStandardVectors(hmac_md5_inputs, hmac_md5_keys,
+                      hmac_md5_string_macs, hmac_md5_macs);
 }
diff --git a/tests/standalone/io/directory_non_ascii_sync_test.dart b/tests/standalone/io/directory_non_ascii_sync_test.dart
index bbcf4c7..3932731 100644
--- a/tests/standalone/io/directory_non_ascii_sync_test.dart
+++ b/tests/standalone/io/directory_non_ascii_sync_test.dart
@@ -5,18 +5,20 @@
 import 'dart:io';
 
 main() {
-  Directory scriptDir = new File(new Options().script).directorySync();
-  var d = new Directory("${scriptDir.path}/æøå");
+  Directory tempDir = new Directory('').createTempSync();
+  var nonAsciiDir = new Directory("${tempDir.path}/æøå");
   // On MacOS you get the decomposed utf8 form of file and directory
   // names from the system. Therefore, we have to check for both here.
   var precomposed = 'æøå';
   var decomposed = new String.fromCharCodes([47, 230, 248, 97, 778]);
-  Expect.isTrue(d.existsSync());
-  d.createSync();
-  var temp = new Directory('').createTempSync();
-  var temp2 = new Directory("${temp.path}/æøå").createTempSync();
-  Expect.isTrue(temp2.path.contains(precomposed) ||
-                temp2.path.contains(decomposed));
-  temp2.deleteSync();
-  temp.deleteSync(recursive: true);
+  Expect.isFalse(nonAsciiDir.existsSync());
+  nonAsciiDir.createSync();
+  Expect.isTrue(nonAsciiDir.existsSync());
+  var temp = new Directory("${tempDir.path}/æøå").createTempSync();
+  Expect.isTrue(temp.path.contains(precomposed) ||
+                temp.path.contains(decomposed));
+  temp.deleteSync();
+  tempDir.deleteSync(recursive: true);
+  Expect.isFalse(nonAsciiDir.existsSync());
+  Expect.isFalse(temp.existsSync());
 }
diff --git a/tests/standalone/io/directory_non_ascii_test.dart b/tests/standalone/io/directory_non_ascii_test.dart
index c29e9ce..2745086 100644
--- a/tests/standalone/io/directory_non_ascii_test.dart
+++ b/tests/standalone/io/directory_non_ascii_test.dart
@@ -7,22 +7,28 @@
 
 main() {
   var port = new ReceivePort();
-  Directory scriptDir = new File(new Options().script).directorySync();
-  var d = new Directory("${scriptDir.path}/æøå");
+
   // On MacOS you get the decomposed utf8 form of file and directory
   // names from the system. Therefore, we have to check for both here.
   var precomposed = 'æøå';
   var decomposed = new String.fromCharCodes([47, 230, 248, 97, 778]);
-  d.exists().then((e) {
-    Expect.isTrue(e);
-    d.create().then((_) {
-      new Directory('').createTemp().then((temp) {
-        new Directory("${temp.path}/æøå").createTemp().then((temp2) {
-          Expect.isTrue(temp2.path.contains(precomposed) ||
-                        temp2.path.contains(decomposed));
-          temp2.delete().then((_) {
-            temp.delete(recursive: true).then((_) {
-              port.close();
+
+  new Directory('').createTemp().then((tempDir) {
+    var nonAsciiDir = new Directory("${tempDir.path}/æøå");
+    nonAsciiDir.exists().then((e) {
+      Expect.isFalse(e);
+      nonAsciiDir.create().then((_) {
+        nonAsciiDir.exists().then((e) {
+          Expect.isTrue(e);
+          new Directory("${tempDir.path}/æøå").createTemp().then((temp) {
+            Expect.isTrue(temp.path.contains(precomposed) ||
+                          temp.path.contains(decomposed));
+            temp.delete().then((_) {
+              tempDir.delete(recursive: true).then((_) {
+                Expect.isFalse(temp.existsSync());
+                Expect.isFalse(nonAsciiDir.existsSync());
+                port.close();
+              });
             });
           });
         });
diff --git a/tests/standalone/io/file_non_ascii_sync_test.dart b/tests/standalone/io/file_non_ascii_sync_test.dart
index 3a10b93..19bf7aa 100644
--- a/tests/standalone/io/file_non_ascii_sync_test.dart
+++ b/tests/standalone/io/file_non_ascii_sync_test.dart
@@ -5,21 +5,26 @@
 import 'dart:io';
 
 main() {
-  Directory scriptDir = new File(new Options().script).directorySync();
-  var f = new File("${scriptDir.path}/æøå/æøå.dat");
+  Directory tempDir = new Directory('').createTempSync();
+  Directory nonAsciiDir = new Directory('${tempDir.path}/æøå');
+  nonAsciiDir.createSync();
+  Expect.isTrue(nonAsciiDir.existsSync());
+  File nonAsciiFile = new File('${nonAsciiDir.path}/æøå.txt');
+  nonAsciiFile.writeAsStringSync('æøå');
+  Expect.isTrue(nonAsciiFile.existsSync());
   // On MacOS you get the decomposed utf8 form of file and directory
   // names from the system. Therefore, we have to check for both here.
   var precomposed = 'æøå';
   var decomposed = new String.fromCharCodes([47, 230, 248, 97, 778]);
-  Expect.isTrue(f.existsSync());
-  f.createSync();
-  var path = f.directorySync().path;
-  Expect.isTrue(f.directorySync().path.endsWith(precomposed) ||
-                f.directorySync().path.endsWith(decomposed));
-  Expect.equals(6, f.lengthSync());
-  f.lastModifiedSync();
-  Expect.isTrue(f.fullPathSync().endsWith('${precomposed}.dat') ||
-                f.fullPathSync().endsWith('${decomposed}.dat'));
   // The contents of the file is precomposed utf8.
-  Expect.equals(precomposed, f.readAsStringSync());
+  Expect.equals(precomposed, nonAsciiFile.readAsStringSync());
+  nonAsciiFile.createSync();
+  var path = nonAsciiFile.directorySync().path;
+  Expect.isTrue(path.endsWith(precomposed) || path.endsWith(decomposed));
+  Expect.equals(6, nonAsciiFile.lengthSync());
+  nonAsciiFile.lastModifiedSync();
+  path = nonAsciiFile.fullPathSync();
+  Expect.isTrue(path.endsWith('${precomposed}.txt') ||
+                path.endsWith('${decomposed}.txt'));
+  tempDir.deleteSync(recursive: true);
 }
diff --git a/tests/standalone/io/file_non_ascii_test.dart b/tests/standalone/io/file_non_ascii_test.dart
index d082080..da136e6 100644
--- a/tests/standalone/io/file_non_ascii_test.dart
+++ b/tests/standalone/io/file_non_ascii_test.dart
@@ -6,28 +6,42 @@
 import 'dart:isolate';
 
 main() {
-  var port = new ReceivePort();
-  Directory scriptDir = new File(new Options().script).directorySync();
-  var f = new File("${scriptDir.path}/æøå/æøå.dat");
+  ReceivePort port = new ReceivePort();
+
   // On MacOS you get the decomposed utf8 form of file and directory
   // names from the system. Therefore, we have to check for both here.
   var precomposed = 'æøå';
   var decomposed = new String.fromCharCodes([47, 230, 248, 97, 778]);
-  f.exists().then((e) {
-    Expect.isTrue(e);
-    f.create().then((_) {
-      f.directory().then((d) {
-        Expect.isTrue(d.path.endsWith(precomposed) ||
-                      d.path.endsWith(decomposed));
-        f.length().then((l) {
-          Expect.equals(6, l);
-          f.lastModified().then((_) {
-            f.fullPath().then((p) {
-              Expect.isTrue(p.endsWith('${precomposed}.dat') ||
-                            p.endsWith('${decomposed}.dat'));
-              f.readAsString().then((contents) {
+
+  new Directory('').createTemp().then((tempDir) {
+      Directory nonAsciiDir = new Directory('${tempDir.path}/æøå');
+      nonAsciiDir.create().then((nonAsciiDir) {
+        nonAsciiDir.exists().then((result) {
+          Expect.isTrue(result);
+          File nonAsciiFile = new File('${nonAsciiDir.path}/æøå.txt');
+          nonAsciiFile.writeAsString('æøå').then((_) {
+            nonAsciiFile.exists().then((result) {
+              Expect.isTrue(result);
+              nonAsciiFile.readAsString().then((contents) {
+                // The contents of the file is precomposed utf8.
                 Expect.equals(precomposed, contents);
-                port.close();
+                nonAsciiFile.create().then((_) {
+                  nonAsciiFile.directory().then((d) {
+                  Expect.isTrue(d.path.endsWith(precomposed) ||
+                                d.path.endsWith(decomposed));
+                  nonAsciiFile.length().then((length) {
+                    Expect.equals(6, length);
+                    nonAsciiFile.lastModified().then((_) {
+                      nonAsciiFile.fullPath().then((path) {
+                        Expect.isTrue(path.endsWith('${precomposed}.txt') ||
+                                      path.endsWith('${decomposed}.txt'));
+                        tempDir.delete(recursive: true).then((_) {
+                          port.close();
+                        });
+                      });
+                    });
+                  });
+                });
               });
             });
           });
diff --git a/tests/standalone/io/file_write_as_test.dart b/tests/standalone/io/file_write_as_test.dart
new file mode 100644
index 0000000..5212b79
--- /dev/null
+++ b/tests/standalone/io/file_write_as_test.dart
@@ -0,0 +1,79 @@
+// Copyright (c) 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.
+
+import 'dart:io';
+import 'dart:isolate';
+
+testWriteAsBytesSync(dir) {
+  var f = new File('${dir.path}/bytes_sync.txt');
+  var data = [50,50,50];
+  f.writeAsBytesSync(data);
+  Expect.listEquals(data, f.readAsBytesSync());
+  f.writeAsBytesSync(data, FileMode.APPEND);
+  var expected = [50, 50, 50, 50, 50, 50];
+  Expect.listEquals(expected, f.readAsBytesSync());
+}
+
+testWriteAsStringSync(dir) {
+  var f = new File('${dir.path}/string_sync.txt');
+  var data = 'asdf';
+  f.writeAsStringSync(data);
+  Expect.equals(data, f.readAsStringSync());
+  f.writeAsStringSync(data, FileMode.APPEND);
+  Expect.equals('$data$data', f.readAsStringSync());
+}
+
+Future testWriteAsBytes(dir) {
+  var completer = new Completer();
+  var f = new File('${dir.path}/bytes.txt');
+  var data = [50,50,50];
+  f.writeAsBytes(data).then((file){
+    Expect.equals(f, file);
+    f.readAsBytes().then((bytes) {
+      Expect.listEquals(data, bytes);
+      f.writeAsBytes(data, FileMode.APPEND).then((file) {
+        Expect.equals(f, file);
+        f.readAsBytes().then((bytes) {
+          var expected = [50, 50, 50, 50, 50, 50];
+          Expect.listEquals(expected, bytes);
+          completer.complete(true);
+        });
+      });
+    });
+  });
+  return completer.future;
+}
+
+Future testWriteAsString(dir) {
+  var completer = new Completer();
+  var f = new File('${dir.path}/strings.txt');
+  var data = 'asdf';
+  f.writeAsString(data).then((file){
+    Expect.equals(f, file);
+    f.readAsString().then((str) {
+      Expect.equals(data, str);
+      f.writeAsString(data, FileMode.APPEND).then((file) {
+        Expect.equals(f, file);
+        f.readAsString().then((str) {
+          Expect.equals('$data$data', str);
+          completer.complete(true);
+        });
+      });
+    });
+  });
+  return completer.future;
+}
+
+main() {
+  var port = new ReceivePort();
+  var tempDir = new Directory('').createTempSync();
+  testWriteAsBytesSync(tempDir);
+  testWriteAsStringSync(tempDir);
+  testWriteAsBytes(tempDir).chain((_) {
+    return testWriteAsString(tempDir);
+  }).then((_) {
+    tempDir.deleteSync(recursive: true);
+    port.close();
+  });
+}
diff --git a/tests/standalone/io/http_advanced_test.dart b/tests/standalone/io/http_advanced_test.dart
index bca0def..165af0b 100644
--- a/tests/standalone/io/http_advanced_test.dart
+++ b/tests/standalone/io/http_advanced_test.dart
@@ -287,9 +287,12 @@
     };
     conn.onResponse = (HttpClientResponse response) {
       Expect.equals(HttpStatus.OK, response.statusCode);
-      httpClient.shutdown();
-      testServerMain.shutdown();
-      completer.complete(true);
+      response.inputStream.onData = response.inputStream.read;
+      response.inputStream.onClosed = () {
+        httpClient.shutdown();
+        testServerMain.shutdown();
+        completer.complete(true);
+      };
     };
   });
   testServerMain.start();
@@ -309,12 +312,15 @@
                     response.headers["expires"][0]);
       Expect.equals(new Date.utc(1999, Date.JUN, 11, 18, 46, 53, 0),
                     response.headers.expires);
-      responses++;
-      if (responses == 2) {
-        httpClient.shutdown();
-        testServerMain.shutdown();
-        completer.complete(true);
-      }
+      response.inputStream.onData = response.inputStream.read;
+      response.inputStream.onClosed = () {
+        responses++;
+        if (responses == 2) {
+          httpClient.shutdown();
+          testServerMain.shutdown();
+          completer.complete(true);
+        }
+      };
     }
 
     HttpClientConnection conn1 = httpClient.get("127.0.0.1", port, "/expires1");
@@ -346,12 +352,15 @@
       Expect.equals("html", response.headers.contentType.subType);
       Expect.equals("utf-8",
                     response.headers.contentType.parameters["charset"]);
-      responses++;
-      if (responses == 2) {
-        httpClient.shutdown();
-        testServerMain.shutdown();
-        completer.complete(true);
-      }
+      response.inputStream.onData = response.inputStream.read;
+      response.inputStream.onClosed = () {
+        responses++;
+        if (responses == 2) {
+          httpClient.shutdown();
+          testServerMain.shutdown();
+          completer.complete(true);
+        }
+      };
     }
 
     HttpClientConnection conn1 =
@@ -415,10 +424,13 @@
         request.cookies.add(response.cookies[1]);
         request.outputStream.close();
       };
-      conn2.onResponse = (HttpClientResponse ignored) {
-        httpClient.shutdown();
-        testServerMain.shutdown();
-        completer.complete(true);
+      conn2.onResponse = (HttpClientResponse response) {
+        response.inputStream.onData = response.inputStream.read;
+        response.inputStream.onClosed = () {
+          httpClient.shutdown();
+          testServerMain.shutdown();
+          completer.complete(true);
+        };
       };
     };
   });
@@ -439,9 +451,12 @@
     };
     conn.onResponse = (HttpClientResponse response) {
       Expect.equals(HttpStatus.OK, response.statusCode);
-      httpClient.shutdown();
-      testServerMain.shutdown();
-      completer.complete(true);
+      response.inputStream.onData = response.inputStream.read;
+      response.inputStream.onClosed = () {
+        httpClient.shutdown();
+        testServerMain.shutdown();
+        completer.complete(true);
+      };
     };
   });
   testServerMain.start();
diff --git a/tests/standalone/io/http_auth_test.dart b/tests/standalone/io/http_auth_test.dart
index 7347b5d..07705de 100644
--- a/tests/standalone/io/http_auth_test.dart
+++ b/tests/standalone/io/http_auth_test.dart
@@ -80,8 +80,11 @@
           new Uri.fromString(
               "http://username:password@127.0.0.1:${server.port}/"));
   conn.onResponse = (HttpClientResponse response) {
-    server.shutdown();
-    client.shutdown();
+    response.inputStream.onData = response.inputStream.read;
+    response.inputStream.onClosed = () {
+      server.shutdown();
+      client.shutdown();
+    };
   };
 }
 
@@ -94,7 +97,8 @@
     HttpClientConnection conn = client.getUrl(url);
     conn.onResponse = (HttpClientResponse response) {
       Expect.equals(HttpStatus.UNAUTHORIZED, response.statusCode);
-      completer.complete(null);
+      response.inputStream.onData = response.inputStream.read;
+      response.inputStream.onClosed = () => completer.complete(null);
     };
     return completer.future;
   }
@@ -123,7 +127,8 @@
     HttpClientConnection conn = client.getUrl(url);
     conn.onResponse = (HttpClientResponse response) {
       Expect.equals(HttpStatus.OK, response.statusCode);
-      completer.complete(null);
+      response.inputStream.onData = response.inputStream.read;
+      response.inputStream.onClosed = () => completer.complete(null);
     };
     return completer.future;
   }
@@ -175,7 +180,8 @@
     HttpClientConnection conn = client.getUrl(url);
     conn.onResponse = (HttpClientResponse response) {
       Expect.equals(HttpStatus.OK, response.statusCode);
-      completer.complete(null);
+      response.inputStream.onData = response.inputStream.read;
+      response.inputStream.onClosed = () => completer.complete(null);
     };
     return completer.future;
   }
diff --git a/tests/standalone/io/http_connection_close_test.dart b/tests/standalone/io/http_connection_close_test.dart
index ac6cedd..c46dd41 100644
--- a/tests/standalone/io/http_connection_close_test.dart
+++ b/tests/standalone/io/http_connection_close_test.dart
@@ -5,6 +5,7 @@
 
 #import("dart:isolate");
 #import("dart:io");
+#import("dart:uri");
 
 void testHttp10Close(bool closeRequest) {
   HttpServer server = new HttpServer();
@@ -41,9 +42,41 @@
   };
 }
 
+void testStreamResponse() {
+  var server = new HttpServer();
+  server.listen("127.0.0.1", 0, backlog: 5);
+  server.defaultRequestHandler = (var request, var response) {
+    new Timer.repeating(10, (x) {
+      Date now = new Date.now();
+      try {
+        response.outputStream.writeString(
+            'data:${now.millisecondsSinceEpoch}\n\n');
+      } catch (e) {
+        x.cancel();
+        server.close();
+      }
+    });
+  };
+
+  var client = new HttpClient();
+  var connection =
+      client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}"));
+  connection.onResponse = (resp) {
+    int bytes = 0;
+    resp.inputStream.onData = () {
+      bytes += resp.inputStream.read().length;
+      if (bytes > 100) {
+        client.shutdown(force: true);
+      }
+    };
+  };
+  connection.onError = (e) => Expect.isTrue(e is HttpException);
+}
+
 main() {
   testHttp10Close(false);
   testHttp10Close(true);
   testHttp11Close(false);
   testHttp11Close(true);
+  testStreamResponse();
 }
diff --git a/tests/standalone/io/http_connection_header_test.dart b/tests/standalone/io/http_connection_header_test.dart
index 617854a..ead2067 100644
--- a/tests/standalone/io/http_connection_header_test.dart
+++ b/tests/standalone/io/http_connection_header_test.dart
@@ -64,11 +64,13 @@
       Expect.isFalse(response.persistentConnection);
       checkExpectedConnectionHeaders(response.headers,
                                      response.persistentConnection);
-      count++;
-      if (count == totalConnections) {
-        client.shutdown();
-        server.close();
-      }
+      response.inputStream.onClosed = () {
+        count++;
+        if (count == totalConnections) {
+          client.shutdown();
+          server.close();
+        }
+      };
     };
   }
 }
diff --git a/tests/standalone/io/http_content_length_test.dart b/tests/standalone/io/http_content_length_test.dart
index 917b014..47ef941 100644
--- a/tests/standalone/io/http_content_length_test.dart
+++ b/tests/standalone/io/http_content_length_test.dart
@@ -38,10 +38,13 @@
       Expect.equals("0", response.headers.value('content-length'));
       Expect.equals(0, response.contentLength);
       count++;
-      if (count == totalConnections) {
-        client.shutdown();
-        server.close();
-      }
+      response.inputStream.onData = response.inputStream.read;
+      response.inputStream.onClosed = () {
+        if (count == totalConnections) {
+          client.shutdown();
+          server.close();
+        }
+      };
     };
   }
 }
@@ -82,10 +85,13 @@
       Expect.equals("2", response.headers.value('content-length'));
       Expect.equals(2, response.contentLength);
       count++;
-      if (count == totalConnections) {
-        client.shutdown();
-        server.close();
-      }
+      response.inputStream.onData = response.inputStream.read;
+      response.inputStream.onClosed = () {
+        if (count == totalConnections) {
+          client.shutdown();
+          server.close();
+        }
+      };
     };
   }
 }
diff --git a/tests/standalone/io/http_redirect_test.dart b/tests/standalone/io/http_redirect_test.dart
index 668225e..4ea9fe0 100644
--- a/tests/standalone/io/http_redirect_test.dart
+++ b/tests/standalone/io/http_redirect_test.dart
@@ -91,7 +91,7 @@
      client.getUrl(new Uri.fromString("http://127.0.0.1:${server.port}/1"));
   conn.followRedirects = false;
   conn.onResponse = (HttpClientResponse response) {
-    response.inputStream.onData = () => response.inputStream.read();
+    response.inputStream.onData = response.inputStream.read;
     response.inputStream.onClosed = () {
       redirectCount++;
       if (redirectCount < 10) {
diff --git a/tests/standalone/io/http_server_early_client_close_test.dart b/tests/standalone/io/http_server_early_client_close_test.dart
index 66a2b06..5d23fc4 100644
--- a/tests/standalone/io/http_server_early_client_close_test.dart
+++ b/tests/standalone/io/http_server_early_client_close_test.dart
@@ -63,17 +63,18 @@
   // The empty packet is valid.
 
   // Close while sending header
-  add("G", "Connection closed before full header was received");
-  add("GET /", "Connection closed before full header was received");
-  add("GET / HTTP/1.1", "Connection closed before full header was received");
-  add("GET / HTTP/1.1\r\n", "Connection closed before full header was received");
+  String message = "Connection closed before full request header was received";
+  add("G", message);
+  add("GET /", message);
+  add("GET / HTTP/1.1", message);
+  add("GET / HTTP/1.1\r\n", message);
 
   // Close while sending content
   add("GET / HTTP/1.1\r\nContent-Length: 100\r\n\r\n",
-      "Connection closed before full body was received",
+      "Connection closed before full request body was received",
       expectRequest: true);
   add("GET / HTTP/1.1\r\nContent-Length: 100\r\n\r\n1",
-      "Connection closed before full body was received",
+      "Connection closed before full request body was received",
       expectRequest: true);
 
 
diff --git a/tests/standalone/io/http_server_handler_test.dart b/tests/standalone/io/http_server_handler_test.dart
index e44a6cf..62d77ed 100644
--- a/tests/standalone/io/http_server_handler_test.dart
+++ b/tests/standalone/io/http_server_handler_test.dart
@@ -101,7 +101,7 @@
       conn.onResponse = (HttpClientResponse response) {
         Expect.equals(HttpStatus.NOT_FOUND, response.statusCode);
         Expect.equals("Non Trouvé", response.reasonPhrase);
-        done();
+        response.inputStream.onClosed = done;
       };
       conn.onError = error;
     };
diff --git a/tests/standalone/io/http_session_test.dart b/tests/standalone/io/http_session_test.dart
index 2b7f81c..1538c2c 100644
--- a/tests/standalone/io/http_session_test.dart
+++ b/tests/standalone/io/http_session_test.dart
@@ -30,8 +30,11 @@
     request.outputStream.close();
   };
   conn.onResponse = (response) {
-    client.shutdown();
-    c.complete(getSessionId(response.cookies));
+    response.inputStream.onData = response.inputStream.read;
+    response.inputStream.onClosed = () {
+      client.shutdown();
+      c.complete(getSessionId(response.cookies));
+    };
   };
   return c.future;
 }
diff --git a/tests/standalone/io/http_shutdown_test.dart b/tests/standalone/io/http_shutdown_test.dart
index 0a65ea8..1d19e96 100644
--- a/tests/standalone/io/http_shutdown_test.dart
+++ b/tests/standalone/io/http_shutdown_test.dart
@@ -22,11 +22,13 @@
       request.outputStream.close();
     };
     conn.onResponse = (HttpClientResponse response) {
-      count++;
-      if (count == totalConnections) {
-        client.shutdown();
-        server.close();
-      }
+      response.inputStream.onClosed = () {
+        count++;
+        if (count == totalConnections) {
+          client.shutdown();
+          server.close();
+        }
+      };
     };
   }
 }
@@ -51,11 +53,14 @@
       request.outputStream.close();
     };
     conn.onResponse = (HttpClientResponse response) {
-      count++;
-      if (count == totalConnections) {
-        client.shutdown();
-        server.close();
-      }
+      response.inputStream.onData = response.inputStream.read;
+      response.inputStream.onClosed = () {
+        count++;
+        if (count == totalConnections) {
+          client.shutdown();
+          server.close();
+        }
+      };
     };
   }
 }
@@ -85,16 +90,81 @@
       request.outputStream.close();
     };
     conn.onResponse = (HttpClientResponse response) {
-      count++;
-      if (count == totalConnections) {
-        client.shutdown();
-        server.close();
-      }
+      response.inputStream.onData = response.inputStream.read;
+      response.inputStream.onClosed = () {
+        count++;
+        if (count == totalConnections) {
+          client.shutdown();
+          server.close();
+        }
+      };
     };
   }
 }
 
 
+void test4() {
+  var server = new HttpServer();
+  server.listen("127.0.0.1", 0);
+  server.defaultRequestHandler = (var request, var response) {
+    request.inputStream.onClosed = () {
+      new Timer.repeating(100, (timer) {
+        if (server.connectionsInfo().total == 0) {
+          server.close();
+          timer.cancel();
+        }
+      });
+      response.outputStream.close();
+    };
+  };
+
+  var client= new HttpClient();
+  var conn = client.get("127.0.0.1", server.port, "/");
+  conn.onResponse = (var response) {
+    response.inputStream.onData = response.inputStream.read;
+    response.inputStream.onClosed = () {
+      client.shutdown();
+    };
+  };
+}
+
+
+void test5(int totalConnections) {
+  var server = new HttpServer();
+  server.listen("127.0.0.1", 0, backlog: totalConnections);
+  server.defaultRequestHandler = (var request, var response) {
+    request.inputStream.onClosed = () {
+      response.outputStream.close();
+    };
+  };
+  server.onError = (e) => { };
+
+  // Create a number of client requests and keep then active. Then
+  // close the client and wait for the server to lose all active
+  // connections.
+  var client= new HttpClient();
+  for (int i = 0; i < totalConnections; i++) {
+    var conn = client.post("127.0.0.1", server.port, "/");
+    conn.onRequest = (req) { req.outputStream.write([0]); };
+    conn.onError = (e) => Expect.isTrue(e is HttpException);
+  }
+  bool clientClosed = false;
+  new Timer.repeating(100, (timer) {
+    if (!clientClosed) {
+      if (server.connectionsInfo().total == totalConnections) {
+        clientClosed = true;
+        client.shutdown(force: true);
+      }
+    } else {
+      if (server.connectionsInfo().total == 0) {
+        server.close();
+        timer.cancel();
+      }
+    }
+  });
+}
+
+
 void main() {
   test1(1);
   test1(10);
@@ -102,4 +172,7 @@
   test2(10);
   test3(1);
   test3(10);
+  test4();
+  test5(1);
+  test5(10);
 }
diff --git a/tests/standalone/io/pkcert/README b/tests/standalone/io/pkcert/README
new file mode 100644
index 0000000..32c8246
--- /dev/null
+++ b/tests/standalone/io/pkcert/README
@@ -0,0 +1,15 @@
+This is a certificate database used by Dart for testing purposes.
+
+It is created as a certificate database by NSS (Network Security Services),
+a library from Mozilla, using the certutil tool.  It uses a cert9.db file,
+rather than a cert8.db file, so the database directory must be specified with
+"sql:" in front of the directory path, or the environment variable
+NSS_DEFAULT_DB_TYPE must be set to "sql".
+
+The password for the key database is "dartdart".
+
+The database contains a root certificate from Equifax, used to verify the
+client https connection to www.google.dk.  It contains a self-signed
+certificate for a local certificate authority myauthority_cert, and a
+server certificate for localhost called localhost_cert, signed by
+myauthority_cert.
diff --git a/tests/standalone/io/pkcert/cert9.db b/tests/standalone/io/pkcert/cert9.db
index d7ce362..1c4913b 100644
--- a/tests/standalone/io/pkcert/cert9.db
+++ b/tests/standalone/io/pkcert/cert9.db
Binary files differ
diff --git a/tests/standalone/io/pkcert/key4.db b/tests/standalone/io/pkcert/key4.db
index 614a210..6610e75 100644
--- a/tests/standalone/io/pkcert/key4.db
+++ b/tests/standalone/io/pkcert/key4.db
Binary files differ
diff --git a/tests/standalone/io/process_non_ascii_test.dart b/tests/standalone/io/process_non_ascii_test.dart
index 5ea4e3c..e7b31e3 100644
--- a/tests/standalone/io/process_non_ascii_test.dart
+++ b/tests/standalone/io/process_non_ascii_test.dart
@@ -3,15 +3,31 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:io';
+import 'dart:isolate';
 
 main() {
-  var scriptDir = new File(new Options().script).directorySync();
+  var port = new ReceivePort();
   var executable = new File(new Options().executable).fullPathSync();
+  var tempDir = new Directory('').createTempSync();
+  var nonAsciiDir = new Directory('${tempDir.path}/æøå');
+  nonAsciiDir.createSync();
+  var nonAsciiFile = new File('${nonAsciiDir.path}/æøå.dart');
+  nonAsciiFile.writeAsStringSync(
+"""
+import 'dart:io';
+
+main() {
+  Expect.equals('æøå', new File('æøå.txt').readAsStringSync());
+}
+""");
+  var nonAsciiTxtFile = new File('${nonAsciiDir.path}/æøå.txt');
+  nonAsciiTxtFile.writeAsStringSync('æøå');
   var options = new ProcessOptions();
-  options.workingDirectory = "${scriptDir.path}/æøå";
-  var script = "${scriptDir.path}/æøå.dart";
-  print(options.workingDirectory);
+  options.workingDirectory = nonAsciiDir.path;
+  var script = nonAsciiFile.name;
   Process.run(executable, [script], options).then((result) {
     Expect.equals(0, result.exitCode);
+    tempDir.deleteSync(recursive: true);
+    port.close();
   });
 }
diff --git a/tests/standalone/io/secure_server_stream_test.dart b/tests/standalone/io/secure_server_stream_test.dart
new file mode 100644
index 0000000..82271ce
--- /dev/null
+++ b/tests/standalone/io/secure_server_stream_test.dart
@@ -0,0 +1,98 @@
+// Copyright (c) 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.
+
+import "dart:io";
+
+const SERVER_ADDRESS = "127.0.0.1";
+const HOST_NAME = "localhost";
+
+class SecureTestServer {
+  void onConnection(Socket connection) {
+    numConnections++;
+    var input = connection.inputStream;
+    String received = "";
+    input.onData = () {
+      received = received.concat(new String.fromCharCodes(input.read()));
+    };
+    input.onClosed = () {
+      Expect.isTrue(received.contains("Hello from client "));
+      String name = received.substring(received.indexOf("client ") + 7);
+      connection.outputStream.write("Welcome, client $name".charCodes);
+      connection.outputStream.close();
+    };
+  }
+
+  void errorHandlerServer(Exception e) {
+    Expect.fail("Server socket error $e");
+  }
+
+  int start() {
+    server = new SecureServerSocket(SERVER_ADDRESS, 0, 10, "CN=$HOST_NAME");
+    Expect.isNotNull(server);
+    server.onConnection = onConnection;
+    server.onError = errorHandlerServer;
+    return server.port;
+  }
+
+  void stop() {
+    server.close();
+  }
+
+  int numConnections = 0;
+  SecureServerSocket server;
+}
+
+class SecureTestClient {
+  SecureTestClient(int this.port, String this.name) {
+    socket = new SecureSocket(HOST_NAME, port);
+    numRequests++;
+    socket.outputStream.write("Hello from client $name".charCodes);
+    socket.outputStream.close();
+    socket.inputStream.onData = () {
+      reply = reply.concat(new String.fromCharCodes(socket.inputStream.read()));
+    };
+    socket.inputStream.onClosed = this.done;
+    reply = "";
+  }
+
+  void done() {
+    Expect.equals("Welcome, client $name", reply);
+    numReplies++;
+    if (numReplies == CLIENT_NAMES.length) {
+      Expect.equals(numRequests, numReplies);
+      EndTest();
+    }
+  }
+
+  static int numRequests = 0;
+  static int numReplies = 0;
+
+  int port;
+  String name;
+  SecureSocket socket;
+  String reply;
+}
+
+Function EndTest;
+
+const CLIENT_NAMES = const ['able', 'baker', 'camera', 'donut', 'echo'];
+
+void main() {
+  Path scriptDir = new Path.fromNative(new Options().script).directoryPath;
+  Path certificateDatabase = scriptDir.append('pkcert');
+  SecureSocket.setCertificateDatabase(certificateDatabase.toNativePath(),
+                                   'dartdart');
+
+  var server = new SecureTestServer();
+  int port = server.start();
+
+  EndTest = () {
+    Expect.equals(CLIENT_NAMES.length, server.numConnections);
+    server.stop();
+  };
+
+  for (var x in CLIENT_NAMES) {
+    new SecureTestClient(port, x);
+  }
+}
diff --git a/tests/standalone/io/secure_server_test.dart b/tests/standalone/io/secure_server_test.dart
new file mode 100644
index 0000000..f2fc280
--- /dev/null
+++ b/tests/standalone/io/secure_server_test.dart
@@ -0,0 +1,115 @@
+// Copyright (c) 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.
+
+import "dart:io";
+
+const SERVER_ADDRESS = "127.0.0.1";
+const HOST_NAME = "localhost";
+
+void WriteAndClose(Socket socket, String message) {
+  var data = message.charCodes;
+  int written = 0;
+  void write() {
+    written += socket.writeList(data, written, data.length - written);
+    if (written < data.length) {
+      socket.onWrite = write;
+    } else {
+      socket.close(true);
+    }
+  }
+  write();
+}
+
+class SecureTestServer {
+  void onConnection(Socket connection) {
+    connection.onConnect = () {
+      numConnections++;
+    };
+    String received = "";
+    connection.onData = () {
+      received = received.concat(new String.fromCharCodes(connection.read()));
+    };
+    connection.onClosed = () {
+      Expect.isTrue(received.contains("Hello from client "));
+      String name = received.substring(received.indexOf("client ") + 7);
+      WriteAndClose(connection, "Welcome, client $name");
+    };
+  }
+
+  void errorHandlerServer(Exception e) {
+    Expect.fail("Server socket error $e");
+  }
+
+  int start() {
+    server = new SecureServerSocket(SERVER_ADDRESS, 0, 10, "CN=$HOST_NAME");
+    Expect.isNotNull(server);
+    server.onConnection = onConnection;
+    server.onError = errorHandlerServer;
+    return server.port;
+  }
+
+  void stop() {
+    server.close();
+  }
+
+  int numConnections = 0;
+  SecureServerSocket server;
+}
+
+class SecureTestClient {
+  SecureTestClient(int this.port, String this.name) {
+    socket = new SecureSocket(HOST_NAME, port);
+    socket.onConnect = this.onConnect;
+    socket.onData = () {
+      reply = reply.concat(new String.fromCharCodes(socket.read()));
+    };
+    socket.onClosed = done;
+    reply = "";
+  }
+
+  void onConnect() {
+    numRequests++;
+    WriteAndClose(socket, "Hello from client $name");
+  }
+
+  void done() {
+    Expect.equals("Welcome, client $name", reply);
+    numReplies++;
+    if (numReplies == CLIENT_NAMES.length) {
+      Expect.equals(numRequests, numReplies);
+      EndTest();
+    }
+  }
+
+  static int numRequests = 0;
+  static int numReplies = 0;
+
+  int port;
+  String name;
+  SecureSocket socket;
+  String reply;
+}
+
+Function EndTest;
+
+const CLIENT_NAMES = const ['able', 'baker', 'camera', 'donut', 'echo'];
+
+void main() {
+  Path scriptDir = new Path.fromNative(new Options().script).directoryPath;
+  Path certificateDatabase = scriptDir.append('pkcert');
+  SecureSocket.setCertificateDatabase(certificateDatabase.toNativePath(),
+                                   'dartdart');
+
+  var server = new SecureTestServer();
+  int port = server.start();
+
+  EndTest = () {
+    Expect.equals(CLIENT_NAMES.length, server.numConnections);
+    server.stop();
+  };
+
+  for (var x in CLIENT_NAMES) {
+    new SecureTestClient(port, x);
+  }
+}
diff --git a/tests/standalone/io/tls_socket_test.dart b/tests/standalone/io/secure_socket_test.dart
similarity index 61%
rename from tests/standalone/io/tls_socket_test.dart
rename to tests/standalone/io/secure_socket_test.dart
index 061d93f..36386f0 100644
--- a/tests/standalone/io/tls_socket_test.dart
+++ b/tests/standalone/io/secure_socket_test.dart
@@ -11,40 +11,50 @@
 #import("dart:isolate");
 #import("dart:io");
 
+void WriteAndClose(Socket socket, String message) {
+  var data = message.charCodes;
+  int written = 0;
+  void write() {
+    written += socket.writeList(data, written, data.length - written);
+    if (written < data.length) {
+      socket.onWrite = write;
+    } else {
+      socket.close(true);
+    }
+  }
+  write();
+}
+
 void main() {
   var testPkcertDatabase =
       new Path.fromNative(new Options().script).directoryPath.append('pkcert/');
-  TlsSocket.setCertificateDatabase(testPkcertDatabase.toNativePath());
-  // TODO(3593): Use a Dart HTTPS server for this test using TLS server sockets.
+  SecureSocket.setCertificateDatabase(testPkcertDatabase.toNativePath());
+  // TODO(3593): Use a Dart HTTPS server for this test.
   // When we use a Dart HTTPS server, allow --short_socket_write. The flag
   // causes fragmentation of the client hello message, which doesn't seem to
   // work with www.google.dk.
-  var tls = new TlsSocket("www.google.dk", 443);
+  var secure = new SecureSocket("www.google.dk", 443);
   List<String> chunks = <String>[];
-  tls.onConnect = () {
-    var request_bytes =
-      "GET / HTTP/1.0\r\nHost: www.google.dk\r\n\r\n".charCodes;
-    tls.writeList(request_bytes, 0, 20);
-    tls.writeList(request_bytes, 20, request_bytes.length - 20);
+  secure.onConnect = () {
+    WriteAndClose(secure, "GET / HTTP/1.0\r\nHost: www.google.dk\r\n\r\n");
   };
   var useReadList;  // Mutually recursive onData callbacks.
   void useRead() {
-    var data = tls.read();
+    var data = secure.read();
     var received = new String.fromCharCodes(data);
     chunks.add(received);
-    tls.onData = useReadList;
+    secure.onData = useReadList;
   }
   useReadList = () {
     var buffer = new List(2000);
-    int len = tls.readList(buffer, 0, 2000);
+    int len = secure.readList(buffer, 0, 2000);
     var received = new String.fromCharCodes(buffer.getRange(0, len));
     chunks.add(received);
-    tls.onData = useRead;
+    secure.onData = useRead;
   };
-  tls.onData = useRead;
-  tls.onClosed = () {
+  secure.onData = useRead;
+  secure.onClosed = () {
     String fullPage = Strings.concatAll(chunks);
     Expect.isTrue(fullPage.contains('</body></html>'));
-    tls.close();
   };
 }
diff --git a/tests/standalone/io/secure_stream_test.dart b/tests/standalone/io/secure_stream_test.dart
new file mode 100644
index 0000000..54969f2
--- /dev/null
+++ b/tests/standalone/io/secure_stream_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 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.
+//
+// VMOptions=
+// VMOptions=--short_socket_read
+// The --short_socket_write option does not work with external server
+// www.google.dk.  Add this to the test when we have secure server sockets.
+// See TODO below.
+
+#import("dart:isolate");
+#import("dart:io");
+
+void main() {
+  var testPkcertDatabase =
+      new Path.fromNative(new Options().script).directoryPath.append('pkcert/');
+  SecureSocket.setCertificateDatabase(testPkcertDatabase.toNativePath());
+  // TODO(3593): Use a Dart HTTPS server for this test.
+  // When we use a Dart HTTPS server, allow --short_socket_write. The flag
+  // causes fragmentation of the client hello message, which doesn't seem to
+  // work with www.google.dk.
+  var secure = new SecureSocket("www.google.dk", 443);
+  List<String> chunks = <String>[];
+  var input = secure.inputStream;
+  var output = secure.outputStream;
+
+  output.write("GET / HTTP/1.0\r\nHost: www.google.dk\r\n\r\n".charCodes);
+  output.close();
+  input.onData = () {
+    chunks.add(new String.fromCharCodes(input.read()));
+  };
+  input.onClosed = () {
+    String fullPage = Strings.concatAll(chunks);
+    Expect.isTrue(fullPage.contains('</body></html>'));
+  };
+}
diff --git a/tests/standalone/io/string_stream_test.dart b/tests/standalone/io/string_stream_test.dart
index f335291..d1369dc 100644
--- a/tests/standalone/io/string_stream_test.dart
+++ b/tests/standalone/io/string_stream_test.dart
@@ -29,8 +29,8 @@
     Expect.equals(new String.fromCharCodes([0xffff]), s[5]);
 
     // Surrogate pair for U+1D11E.
-    Expect.equals(new String.fromCharCodes([0xd834]), s[6]);
-    Expect.equals(new String.fromCharCodes([0xdd1e]), s[7]);
+    Expect.equals(new String.fromCharCodes([0xd834, 0xdd1e]),
+                  s.substring(6, 8));
   }
   stream.onData = stringData;
 }
diff --git a/tests/standalone/io/test_runner_exit_code_script.dart b/tests/standalone/io/test_runner_exit_code_script.dart
index f137022..37fbc8e 100644
--- a/tests/standalone/io/test_runner_exit_code_script.dart
+++ b/tests/standalone/io/test_runner_exit_code_script.dart
@@ -14,6 +14,9 @@
   var startTime = new Date.now();
   var progress =
     new ProgressIndicator.fromName(progressType, startTime, false);
+  if (progressType == 'buildbot') {
+    BuildbotProgressIndicator.stepName = 'myStepName';
+  }
   // Build a dummy test case.
   var configuration = new TestOptionsParser().parse(['--timeout', '2'])[0];
   var dummyCommand = new Command("noop", []);
diff --git a/tests/standalone/io/testing_server.dart b/tests/standalone/io/testing_server.dart
index 62b2404..59a0c9e 100644
--- a/tests/standalone/io/testing_server.dart
+++ b/tests/standalone/io/testing_server.dart
@@ -8,7 +8,7 @@
   static const INIT = 0;
   static const SHUTDOWN = -1;
 
-  abstract void onConnection(Socket connection);
+  void onConnection(Socket connection);  // Abstract.
 
   void errorHandlerServer(Exception e) {
     Expect.fail("Server socket error $e");
@@ -38,7 +38,7 @@
     initialize();
   }
 
-  abstract void run();
+  void run();  // Abstract.
 
   void initialize() {
     _receivePort.receive((var message, SendPort replyTo) {
diff --git "a/tests/standalone/io/\303\246\303\270\303\245/\303\246\303\270\303\245.dat" "b/tests/standalone/io/\303\246\303\270\303\245/\303\246\303\270\303\245.dat"
deleted file mode 100644
index 5a9c6c8..0000000
--- "a/tests/standalone/io/\303\246\303\270\303\245/\303\246\303\270\303\245.dat"
+++ /dev/null
@@ -1 +0,0 @@
-æøå
\ No newline at end of file
diff --git a/tests/standalone/package/package1_test.dart b/tests/standalone/package/package1_test.dart
index f449868..b331d1c 100644
--- a/tests/standalone/package/package1_test.dart
+++ b/tests/standalone/package/package1_test.dart
@@ -2,5 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// PackageRoot=none
+
 #library('package1_test.dart');
 #import('package:package1.dart');
diff --git a/tests/standalone/package/package_isolate_test.dart b/tests/standalone/package/package_isolate_test.dart
index 96e304f..7f4bc61 100644
--- a/tests/standalone/package/package_isolate_test.dart
+++ b/tests/standalone/package/package_isolate_test.dart
@@ -2,6 +2,8 @@
 // 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.
 
+// PackageRoot=tests/standalone/package/packages/
+
 library package_isolate_test;
 import 'package:shared.dart' as shared;
 import 'dart:isolate';
diff --git a/tests/standalone/package/package_test.dart b/tests/standalone/package/package_test.dart
index b304f6d..e55181a 100644
--- a/tests/standalone/package/package_test.dart
+++ b/tests/standalone/package/package_test.dart
@@ -2,6 +2,8 @@
 // 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.
 
+// PackageRoot=none
+
 #library('package_test');
 
 #import('package:lib1.dart');
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 0f9c960..d888b07 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -6,7 +6,8 @@
 
 package/invalid_uri_test: Fail, OK # Fails intentionally
 
-io/tls_socket_test: Pass, Timeout # Issue 6730.
+io/secure_socket_test: Pass, Timeout # Issue 6730.
+io/secure_stream_test: Pass, Timeout # Issue 6730.
 
 [ $runtime == vm && $checked ]
 # These tests have type errors on purpose.
@@ -41,6 +42,7 @@
 
 [ $runtime == vm && $system == windows ]
 io/file_system_links_test: Skip  # No links on Windows.
+io/secure_server_stream_test: Pass, Crash, Timeout  # Issue 6893
 
 [ $compiler == none && $runtime == drt ]
 io/*: Skip # Don't run tests using dart:io in the browser
diff --git a/tests/utils/uri_test.dart b/tests/utils/uri_test.dart
index 7acc5cf..66820dc 100644
--- a/tests/utils/uri_test.dart
+++ b/tests/utils/uri_test.dart
@@ -187,10 +187,11 @@
       "origin for non-http/https uri should fail");
 
   // URI encode tests
-  // Note: dart2js won't handle '\ud800\udc00' and frog
-  // won't handle '\u{10000}'. So we cons this up synthetically...
+  // Create a string with code point 0x10000 encoded as a surrogate pair.
   var s = decodeUtf8([0xf0, 0x90, 0x80, 0x80]);
 
+  Expect.stringEquals("\u{10000}", s);
+
   testEncodeDecode("\uFFFE", "%EF%BF%BE");
   testEncodeDecode("\uFFFF", "%EF%BF%BF");
   testEncodeDecode("\uFFFE", "%EF%BF%BE");
diff --git a/tests/utils/utf8_test.dart b/tests/utils/utf8_test.dart
index 541f101..b92d5aaa 100644
--- a/tests/utils/utf8_test.dart
+++ b/tests/utils/utf8_test.dart
@@ -7,8 +7,6 @@
 
 String decode(List<int> bytes) => decodeUtf8(bytes);
 
-bool isRunningOnJavaScript() => identical(1, 1.0);
-
 main() {
   // Google favorite: "Îñţérñåţîöñåļîžåţîờñ".
   String string = decode([0xc3, 0x8e, 0xc3, 0xb1, 0xc5, 0xa3, 0xc3, 0xa9, 0x72,
@@ -37,14 +35,12 @@
                    0xb2, 0xe0, 0xa5, 0x88]);
   Expect.stringEquals("िसवा अणामालै", string);
 
-  if (!isRunningOnJavaScript()) {
-    // DESERET CAPITAL LETTER BEE, unicode 0x10412(0xD801+0xDC12)
-    // UTF-8: F0 90 90 92
-    string = decode([0xf0, 0x90, 0x90, 0x92]);
-    Expect.stringEquals("𐐒", string);
-  } else {
-    print('Skipping non-BMP character test');
-  }
+  // DESERET CAPITAL LETTER BEE, unicode 0x10412(0xD801+0xDC12)
+  // UTF-8: F0 90 90 92
+  string = decode([0xf0, 0x90, 0x90, 0x92]);
+  Expect.equals(string.length, 2);
+  Expect.equals("𐐒".length, 2);
+  Expect.stringEquals("𐐒", string);
 
   // TODO(ahe): Add tests of bad input.
 }
diff --git a/tests/utils/utils.status b/tests/utils/utils.status
index 1ddd3b0..2ce46b6 100644
--- a/tests/utils/utils.status
+++ b/tests/utils/utils.status
@@ -8,7 +8,6 @@
 [ $compiler == dart2js ]
 dummy_compiler_test: Slow, Pass
 recursive_import_test: Slow, Pass
-utf8_test: Fail # issue 6418
 
 [ $compiler == none && $runtime == drt ]
 dummy_compiler_test: Fail # http://dartbug.com/2264
@@ -23,12 +22,6 @@
 [ $system == macos || $system == windows ]
 *_layout_test: Skip
 
-[ $compiler == dartc ]
-# dart2js issue 6323
-dummy_compiler_test: Fail, OK
-recursive_import_test: Fail, OK
-
-
 [ $compiler == dart2dart ]
 # Skip until we stabilize language tests.
 *: Skip
diff --git a/tools/VERSION b/tools/VERSION
index 1889699..9937b3b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,4 @@
 MAJOR 0
 MINOR 2
-BUILD 4
-PATCH 2
+BUILD 5
+PATCH 0
diff --git a/tools/bots/pub.py b/tools/bots/pub.py
index e101783..29e49ae 100755
--- a/tools/bots/pub.py
+++ b/tools/bots/pub.py
@@ -41,6 +41,12 @@
     print 'Generating API Docs: %s' % (' '.join(args))
     bot.RunProcess(args)
 
+  with bot.BuildStep('Build package-root'):
+    args = [sys.executable, './tools/build.py', '--mode=' + build_info.mode,
+            'packages']
+    print 'Building package-root: %s' % (' '.join(args))
+    bot.RunProcess(args)
+
   bot.RunTest('pub', build_info, ['pub', 'pkg'])
 
 
diff --git a/tools/create_sdk.py b/tools/create_sdk.py
index a3235e8..5793e3e 100755
--- a/tools/create_sdk.py
+++ b/tools/create_sdk.py
@@ -112,14 +112,12 @@
     CopyShellScript(os.path.join(home, 'sdk', 'bin', executable),
                     os.path.join(sdk_root, 'bin'))
 
-  if utils.GuessOS() != 'win32':
-    # TODO(ahe): Enable for Windows as well.
-    subprocess.call([os.path.join(build_dir, 'gen_snapshot'),
-                     '--script_snapshot=%s' %
-                     os.path.join(sdk_root, 'lib', '_internal', 'compiler',
-                                  'implementation', 'dart2js.dart.snapshot'),
-                     os.path.join(sdk_root, 'lib', '_internal', 'compiler',
-                                  'implementation', 'dart2js.dart')])
+  subprocess.call([os.path.join(build_dir, 'gen_snapshot'),
+                   '--script_snapshot=%s' %
+                   os.path.join(sdk_root, 'lib', '_internal', 'compiler',
+                                'implementation', 'dart2js.dart.snapshot'),
+                   os.path.join(sdk_root, 'lib', '_internal', 'compiler',
+                                'implementation', 'dart2js.dart')])
 
 
 
@@ -263,6 +261,23 @@
          "var pathTo7zip = '7zip/7za.exe';"),
       ])
 
+  # Copy in cURL on all operating systems, since we need the certificates file
+  # even outside Windows. Leave out the EXE on non-Windows systems, though.
+  curl_ignore_patterns = ignore_patterns('.svn') if utils.GuessOS() == 'win32' \
+      else ignore_patterns('.svn', '*.exe')
+  copytree(join(HOME, 'third_party', 'curl'),
+           join(join(UTIL, 'pub'), 'curl'),
+           ignore=curl_ignore_patterns)
+
+  ReplaceInFiles([
+      join(UTIL, 'pub', 'curl_client.dart'),
+    ], [
+      ("var pathToCurl = '../../third_party/curl/curl.exe';",
+       "var pathToCurl = 'curl/curl.exe';"),
+      ("var pathToCertificates = '../../third_party/curl/ca-certificates.crt';",
+       "var pathToCertificates = 'curl/ca-certificates.crt';"),
+    ])
+
   version = utils.GetVersion()
 
   # Copy dart2js/dartdoc/pub.
diff --git a/tools/gyp/configurations_make.gypi b/tools/gyp/configurations_make.gypi
index 6900999..b4679b5 100644
--- a/tools/gyp/configurations_make.gypi
+++ b/tools/gyp/configurations_make.gypi
@@ -29,10 +29,6 @@
           '-fvisibility-inlines-hidden',
           '-fno-omit-frame-pointer',
         ],
-        'ldflags': [
-          '-rdynamic',
-          '-Wl,-rpath,<(PRODUCT_DIR)/lib.target',
-        ],
       },
 
       'Dart_ia32_Base': {
@@ -57,9 +53,6 @@
           '-mfloat-abi=softfp',
           '-fno-strict-overflow',
         ],
-        'ldflags': [
-          '-Wl,-rpath=<(arm_cross_libc)/usr/lib',
-        ],
       },
 
       'Dart_Debug': {
diff --git a/tools/make_links.py b/tools/make_links.py
new file mode 100644
index 0000000..3f54004
--- /dev/null
+++ b/tools/make_links.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python
+# Copyright (c) 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.
+
+
+'''Tool for creating symlinks from SOURCES to TARGET.
+
+For each SOURCE in SOURCES create a link from SOURCE to TARGET.  If a
+SOURCE ends with .../lib, the lib suffix is ignored when determining
+the name of the target link.
+
+Usage:
+  python tools/make_links.py TARGET SOURCES...
+'''
+
+import os
+import subprocess
+import sys
+import utils
+
+
+def make_link(source, target):
+  # TODO(ahe): Remove this code when the build bots are green again.
+  bug_cleanup = os.path.join(target, 'lib')
+  if os.path.islink(bug_cleanup):
+    print 'Removing %s' % bug_cleanup
+    sys.stdout.flush()
+    os.unlink(bug_cleanup)
+  # End of temporary code.
+
+  if os.path.islink(target):
+    print 'Removing %s' % target
+    sys.stdout.flush()
+    os.unlink(target)
+
+  if os.path.isdir(target):
+    print 'Removing %s' % target
+    sys.stdout.flush()
+    os.rmdir(target)
+
+  print 'Creating link from %s to %s' % (source, target)
+  sys.stdout.flush()
+
+  if utils.GuessOS() == 'win32':
+    return subprocess.call(['mklink', '/j', target, source], shell=True)
+  else:
+    return subprocess.call(['ln', '-s', source, target])
+
+
+def main(argv):
+  target = os.path.relpath(argv[1])
+  for source in argv[2:]:
+    # Assume the source directory is named ".../TARGET_NAME/lib".
+    (name, lib) = os.path.split(source)
+    if lib != 'lib':
+      name = source
+    # Remove any addtional path components preceding TARGET_NAME.
+    (path, name) = os.path.split(name)
+    if utils.GuessOS() == 'win32':
+      source = os.path.relpath(source)
+    else:
+      source = os.path.relpath(source, start=target)
+    exit_code = make_link(source, os.path.join(target, name))
+    if exit_code != 0:
+      return exit_code
+  return 0
+
+
+if __name__ == '__main__':
+  sys.exit(main(sys.argv))
diff --git a/tools/revert.py b/tools/revert.py
index 33d014c..ce3eff0 100755
--- a/tools/revert.py
+++ b/tools/revert.py
@@ -177,14 +177,10 @@
   revisions = parse_args()
   git_user = runs_git()
   if has_new_code(git_user):
-    if git_user:
-      maybe_fail('Your tree has local modifications! Move to a clean tree and '
-          'try running this script again.')
-    else:
-      maybe_fail('WARNING: This checkout has local modifications!! This could '
-           'result in a CL that is not just a revert and/or you could lose your'
-           ' local changes! Are you **SURE** you want to continue? ',
-         user_input=True)
+    maybe_fail('WARNING: This checkout has local modifications!! This could '
+         'result in a CL that is not just a revert and/or you could lose your'
+         ' local changes! Are you **SURE** you want to continue? ',
+       user_input=True)
   if git_user:
     run_cmd(['git', 'cl', 'rebase'])
   run_cmd(['gclient', 'sync'])
diff --git a/tools/testing/dart/test_options.dart b/tools/testing/dart/test_options.dart
index 0b1ee54..8a3a2a6 100644
--- a/tools/testing/dart/test_options.dart
+++ b/tools/testing/dart/test_options.dart
@@ -156,7 +156,7 @@
               'Step name for use by -pbuildbot',
               ['--step_name'],
               [],
-              'string'),
+              null),
           new _TestOptionSpecification(
               'report',
               'Print a summary report of the number of tests, by expectation',
@@ -227,12 +227,6 @@
               false,
               'bool'),
           new _TestOptionSpecification(
-              'additional-compiler-flags',
-              'Additional flags to control test compilation',
-              ['--additional-compiler-flags'],
-              [],
-              ''),
-          new _TestOptionSpecification(
               'dart',
               'Path to dart executable',
               ['--dart'],
@@ -263,6 +257,12 @@
               false,
               'bool'),
           new _TestOptionSpecification(
+              'build_directory',
+              'The name of the build directory, where products are placed.',
+              ['--build-directory'],
+              [],
+              ''),
+          new _TestOptionSpecification(
               'noBatch',
               'Do not run browser tests in batch mode',
               ['-n', '--nobatch'],
diff --git a/tools/testing/dart/test_progress.dart b/tools/testing/dart/test_progress.dart
index 68ee945..33e0765 100644
--- a/tools/testing/dart/test_progress.dart
+++ b/tools/testing/dart/test_progress.dart
@@ -407,7 +407,7 @@
   }
 
   void _printFailureSummary() {
-    if (!_failureSummary.isEmpty) {
+    if (!_failureSummary.isEmpty && stepName != null) {
       print('@@@STEP_FAILURE@@@');
       print('@@@BUILD_STEP $stepName failures@@@');
     }
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index 84fd882..4ce2287 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -105,11 +105,7 @@
   /**
    * The output directory for this suite's configuration.
    */
-  String get buildDir {
-    var mode = (configuration['mode'] == 'debug') ? 'Debug' : 'Release';
-    var arch = configuration['arch'].toUpperCase();
-    return "${TestUtils.outputDir(configuration)}$mode$arch";
-  }
+  String get buildDir => TestUtils.buildDir(configuration);
 
   /**
    * The path to the compiler for this suite's configuration. Returns `null` if
@@ -619,7 +615,8 @@
 
     Set<String> expectations = testExpectations.expectations(testName);
     if (info.hasCompileError &&
-        TestUtils.isBrowserRuntime(configuration['runtime'])) {
+        TestUtils.isBrowserRuntime(configuration['runtime']) &&
+        configuration['report']) {
       SummaryReport.addCompileErrorSkipTest();
       return;
     }
@@ -711,12 +708,6 @@
 
     case 'dart2dart':
       var compilerArguments = new List.from(args);
-      var additionalFlags =
-          configuration['additional-compiler-flags'].split(' ');
-      for (final flag in additionalFlags) {
-        if (flag.isEmpty) continue;
-        compilerArguments.add(flag);
-      }
       compilerArguments.add('--output-type=dart');
       String tempDir = createOutputDirectory(info.filePath, '');
       compilerArguments.add('--out=$tempDir/out.dart');
@@ -888,7 +879,7 @@
       if (compiler != 'none') {
         commands.add(_compileCommand(
             dartWrapperFilename, compiledDartWrapperFilename,
-            compiler, tempDir, vmOptions));
+            compiler, tempDir, vmOptions, optionsFromFile));
 
         // some tests require compiling multiple input scripts.
         List<String> otherScripts = optionsFromFile['otherScripts'];
@@ -899,7 +890,7 @@
           Path fromPath = filePath.directoryPath.join(namePath);
           commands.add(_compileCommand(
               fromPath.toNativePath(), '$tempDir/$baseName.js',
-              compiler, tempDir, vmOptions));
+              compiler, tempDir, vmOptions, optionsFromFile));
         }
       }
 
@@ -931,6 +922,13 @@
               dumpRenderTreeFilename,
               '--no-timeout'
           ];
+          if (compiler == 'none') {
+            String packageRoot =
+                packageRootArgument(optionsFromFile['packageRoot']);
+            if (packageRoot != null) {
+              args.add(packageRoot);
+            }
+          }
           if (runtime == 'drt' &&
               (compiler == 'none' || compiler == 'dart2dart')) {
             var dartFlags = ['--ignore-unrecognized-flags'];
@@ -981,12 +979,17 @@
 
   /** Helper to create a compilation command for a single input file. */
   Command _compileCommand(String inputFile, String outputFile,
-      String compiler, String dir, var vmOptions) {
+      String compiler, String dir, vmOptions, optionsFromFile) {
     String executable = compilerPath;
     List<String> args = TestUtils.standardOptions(configuration);
     switch (compiler) {
       case 'dart2js':
       case 'dart2dart':
+        String packageRoot =
+          packageRootArgument(optionsFromFile['packageRoot']);
+        if (packageRoot != null) {
+          args.add(packageRoot);
+        }
         if (compiler == 'dart2dart') args.add('--out=$outputFile');
         args.add('--out=$outputFile');
         args.add(inputFile);
@@ -1096,6 +1099,11 @@
 
   List<String> commonArgumentsFromFile(Path filePath, Map optionsFromFile) {
     List args = TestUtils.standardOptions(configuration);
+
+    String packageRoot = packageRootArgument(optionsFromFile['packageRoot']);
+    if (packageRoot != null) {
+      args.add(packageRoot);
+    }
     args.addAll(additionalOptions(filePath));
     if (configuration['compiler'] == 'dartc') {
       args.add('--error_format');
@@ -1123,6 +1131,15 @@
     return args;
   }
 
+  String packageRootArgument(String packageRootFromFile) {
+    if (packageRootFromFile == "none") return null;
+    String packageRoot = packageRootFromFile;
+    if (packageRootFromFile == null) {
+      packageRoot = "$buildDir/packages/";
+    }
+    return "--package-root=$packageRoot";
+  }
+
   /**
    * Special options for individual tests are currently specified in various
    * ways: with comments directly in test files, by using certain imports, or by
@@ -1183,6 +1200,7 @@
     RegExp testOptionsRegExp = new RegExp(r"// VMOptions=(.*)");
     RegExp dartOptionsRegExp = new RegExp(r"// DartOptions=(.*)");
     RegExp otherScriptsRegExp = new RegExp(r"// OtherScripts=(.*)");
+    RegExp packageRootRegExp = new RegExp(r"// PackageRoot=(.*)");
     RegExp multiTestRegExp = new RegExp(r"/// [0-9][0-9]:(.*)");
     RegExp multiHtmlTestRegExp =
         new RegExp(r"useHtmlIndividualConfiguration()");
@@ -1217,6 +1235,7 @@
     // Find the options in the file.
     List<List> result = new List<List>();
     List<String> dartOptions;
+    String packageRoot;
     bool hasCompileError = contents.contains("@compile-error");
     bool hasRuntimeError = contents.contains("@runtime-error");
     bool isStaticClean = false;
@@ -1236,6 +1255,15 @@
       dartOptions = match[1].split(' ').filter((e) => e != '');
     }
 
+    matches = packageRootRegExp.allMatches(contents);
+    for (var match in matches) {
+      if (packageRoot != null) {
+        throw new Exception(
+            'More than one "// PackageRoot=" line in test $filePath');
+      }
+      packageRoot = match[1];
+    }
+
     matches = staticCleanRegExp.allMatches(contents);
     for (var match in matches) {
       if (isStaticClean) {
@@ -1284,6 +1312,7 @@
 
     return { "vmOptions": result,
              "dartOptions": dartOptions,
+             "packageRoot": packageRoot,
              "hasCompileError": hasCompileError,
              "hasRuntimeError": hasRuntimeError,
              "isStaticClean" : isStaticClean,
@@ -1474,6 +1503,9 @@
    * [base] directory if that [relativePath] does not already exist.
    */
   static Directory mkdirRecursive(Path base, Path relativePath) {
+    if (relativePath.isAbsolute) {
+      base = new Path('/');
+    }
     Directory dir = new Directory.fromPath(base);
     Expect.isTrue(dir.existsSync(),
                   "Expected ${dir} to already exist");
@@ -1516,19 +1548,6 @@
     }
   }
 
-  static String outputDir(Map configuration) {
-    var result = '';
-    var system = configuration['system'];
-    if (system == 'linux') {
-      result = 'out/';
-    } else if (system == 'macos') {
-      result = 'xcodebuild/';
-    } else if (system == 'windows') {
-      result = 'build/';
-    }
-    return result;
-  }
-
   static Path dartDir() {
     File scriptFile = new File(testScriptPath);
     Path scriptPath = new Path.fromNative(scriptFile.fullPathSync());
@@ -1552,9 +1571,8 @@
         args.add("--allow-mock-compilation");
       }
     }
-    // TODO(riocw): Unify our minification calling convention between dart2js
-    // and dart2dart.
-    if (compiler == "dart2js" && configuration["minified"]) {
+    if ((compiler == "dart2js" || compiler == "dart2dart") &&
+        configuration["minified"]) {
       args.add("--minify");
     }
     return args;
@@ -1579,6 +1597,23 @@
   static bool isJsCommandLineRuntime(String runtime) =>
       const ['d8', 'jsshell'].contains(runtime);
 
+  static String buildDir(Map configuration) {
+    if (configuration['build_directory'] != '') {
+      return configuration['build_directory'];
+    }
+    var outputDir = '';
+    var system = configuration['system'];
+    if (system == 'linux') {
+      outputDir = 'out/';
+    } else if (system == 'macos') {
+      outputDir = 'xcodebuild/';
+    } else if (system == 'windows') {
+      outputDir = 'build/';
+    }
+    var mode = (configuration['mode'] == 'debug') ? 'Debug' : 'Release';
+    var arch = configuration['arch'].toUpperCase();
+    return "$outputDir$mode$arch";
+  }
 }
 
 class SummaryReport {
diff --git a/tools/testing/drt-trampoline.py b/tools/testing/drt-trampoline.py
index fc27a7d..ac5b23d69 100644
--- a/tools/testing/drt-trampoline.py
+++ b/tools/testing/drt-trampoline.py
@@ -8,40 +8,70 @@
 #
 # Expected invocation: python drt-trampoline.py <path to DRT> <DRT command line>
 
+import optparse
 import os
 import signal
 import subprocess
 import sys
 
-DART_FLAGS_PREFIX = '--dart-flags='
-OUT_EXPECTATION_PREFIX = '--out-expectation='
+def parse_options(argv):
+  parser = optparse.OptionParser()
+  parser.add_option('--dart-flags',
+                    metavar='FLAGS',
+                    dest='dart_flags')
+  parser.add_option('--out-expectation',
+                    metavar='FILE',
+                    dest='out_expected_file')
+  parser.add_option('--package-root',
+                    metavar='DIRECTORY',
+                    dest='dart_package_root')
+  parser.add_option('--no-timeout',
+                    action='store_true')
+  return parser.parse_args(args=argv)
+
 
 def main(argv):
   drt_path = argv[1]
-  command_line = argv[2:]
+  (options, arguments) = parse_options(argv[2:])
 
   cmd = [drt_path]
 
   env = None
   test_file = None
-  out_expected_file = None
+  dart_flags = options.dart_flags
+  out_expected_file = options.out_expected_file
+  dart_package_root = options.dart_package_root
   is_png = False
 
-  # parse arguments, filtering out flags, and selecting the input test file
-  for arg in command_line:
-    if arg.startswith(DART_FLAGS_PREFIX):
+  if dart_flags:
+    if not env:
       env = dict(os.environ.items())
-      env['DART_FLAGS'] = arg[len(DART_FLAGS_PREFIX):]
-    elif arg.startswith(OUT_EXPECTATION_PREFIX):
-      out_expected_file = arg[len(OUT_EXPECTATION_PREFIX):]
-      if out_expected_file.endswith('.png'):
-        cmd.append('--notree')
-        is_png = True
-      elif not out_expected_file.endswith('.txt'):
-        raise Exception(
-            'Bad file expectation (%s), ' % out_expected_file
-            + 'please specify either a .txt or a .png file')
-    elif '.html' in arg:
+    env['DART_FLAGS'] = dart_flags
+
+  if dart_package_root:
+    if not env:
+      env = dict(os.environ.items())
+    absolute_path = os.path.abspath(dart_package_root)
+    absolute_path = absolute_path.replace(os.path.sep, '/')
+    if not absolute_path.startswith('/'):
+      # Happens on Windows for C:\packages
+      absolute_path = '/%s' % absolute_path
+    env['DART_PACKAGE_ROOT'] = 'file://%s' % absolute_path
+
+  if out_expected_file:
+    if out_expected_file.endswith('.png'):
+      cmd.append('--notree')
+      is_png = True
+    elif not out_expected_file.endswith('.txt'):
+      raise Exception(
+        'Bad file expectation (%s) please specify either a .txt or a .png file'
+        % out_expected_file)
+
+  if options.no_timeout:
+    cmd.append('--no-timeout')
+
+  for arg in arguments:
+    if '.html' in arg:
       test_file = arg
     else:
       cmd.append(arg)
diff --git a/tools/utils/vim/syntax/dart.vim b/tools/utils/vim/syntax/dart.vim
index f954ebd..669db58 100644
--- a/tools/utils/vim/syntax/dart.vim
+++ b/tools/utils/vim/syntax/dart.vim
@@ -34,7 +34,7 @@
 syn keyword dartStatement      return
 syn keyword dartStorageClass   static abstract
 syn keyword dartExceptions     throw try catch finally
-syn keyword dartExceptions     Error FormatException Exception ExpectException FutureAlreadyCompleteException FutureNotCompleteException ArgumentError IllegalJSRegExpException IntegerDivisionByZeroException NoSuchMethodError NullPointerException OutOfMemoryError RangeError StackOverflowException StateError UnimplementedError UnsupportedError
+syn keyword dartExceptions     Error FormatException Exception ExpectException FutureAlreadyCompleteException FutureNotCompleteException ArgumentError IllegalJSRegExpException IntegerDivisionByZeroException NoSuchMethodError NullThrownError OutOfMemoryError RangeError StackOverflowException StateError UnimplementedError UnsupportedError
 syn keyword dartExceptions_DEPRECATED     BadNumberFormatException
 syn keyword dartAssert         assert
 syn keyword dartClassDecl      extends implements interface
diff --git a/utils/apidoc/apidoc.gyp b/utils/apidoc/apidoc.gyp
index abd2961..c029b94 100644
--- a/utils/apidoc/apidoc.gyp
+++ b/utils/apidoc/apidoc.gyp
@@ -45,6 +45,7 @@
             '--mode=static',
             '--exclude-lib=dartdoc',
             '--exclude-lib=http',
+            '--exclude-lib=oauth2',
             '--exclude-lib=webdriver',
             '--include-lib=matcher',
             '--include-lib=mock',
diff --git a/pkg/http/lib/src/curl_client.dart b/utils/pub/curl_client.dart
similarity index 70%
rename from pkg/http/lib/src/curl_client.dart
rename to utils/pub/curl_client.dart
index 079d1c3..20a1027 100644
--- a/pkg/http/lib/src/curl_client.dart
+++ b/utils/pub/curl_client.dart
@@ -6,32 +6,36 @@
 
 import 'dart:io';
 
-import 'base_client.dart';
-import 'base_request.dart';
-import 'streamed_response.dart';
+import '../../pkg/http/lib/http.dart' as http;
+import 'io.dart';
 import 'utils.dart';
 
-/// A drop-in replacement for [Client] that uses the `curl` command-line utility
-/// rather than [dart:io] to make requests. This class will only exist
+/// A drop-in replacement for [http.Client] that uses the `curl` command-line
+/// utility rather than [dart:io] to make requests. This class will only exist
 /// temporarily until [dart:io] natively supports requests over HTTPS.
-class CurlClient extends BaseClient {
-  /// The path to the `curl` executable to run. By default, this will look up
-  /// `curl` on the system path.
+class CurlClient extends http.BaseClient {
+  /// The path to the `curl` executable to run.
+  ///
+  /// By default on Unix-like operating systems, this will look up `curl` on the
+  /// system path. On Windows, it will use the bundled `curl.exe`.
   final String executable;
 
   /// Creates a new [CurlClient] with [executable] as the path to the `curl`
-  /// executable. By default, this will look up `curl` on the system path.
+  /// executable.
+  ///
+  /// By default on Unix-like operating systems, this will look up `curl` on the
+  /// system path. On Windows, it will use the bundled `curl.exe`.
   CurlClient([String executable])
-    : executable = executable == null ? "curl" : executable;
+    : executable = executable == null ? _defaultExecutable : executable;
 
   /// Sends a request via `curl` and returns the response.
-  Future<StreamedResponse> send(BaseRequest request) {
+  Future<http.StreamedResponse> send(http.BaseRequest request) {
     var requestStream = request.finalize();
     return withTempDir((tempDir) {
       var headerFile = new Path(tempDir).append("curl-headers").toNativePath();
       var arguments = _argumentsForRequest(request, headerFile);
       var process;
-      return Process.start("curl", arguments).chain((process_) {
+      return Process.start(executable, arguments).chain((process_) {
         process = process_;
         if (requestStream.closed) {
           process.stdin.close();
@@ -48,8 +52,16 @@
   /// Returns the list of arguments to `curl` necessary for performing
   /// [request]. [headerFile] is the path to the file where the response headers
   /// should be stored.
-  List<String> _argumentsForRequest(BaseRequest request, String headerFile) {
-    var arguments = ["--dump-header", headerFile];
+  List<String> _argumentsForRequest(
+      http.BaseRequest request, String headerFile) {
+    // Note: This line of code gets munged by create_sdk.py to be the correct
+    // relative path to the certificate file in the SDK.
+    var pathToCertificates = "../../third_party/curl/ca-certificates.crt";
+
+    var arguments = [
+      "--dump-header", headerFile,
+      "--cacert", relativeToPub(pathToCertificates)
+    ];
     if (request.method == 'HEAD') {
       arguments.add("--head");
     } else {
@@ -72,7 +84,7 @@
       'accept': '',
       'user-agent': ''
     };
-    mapAddAll(headers, request.headers);
+    request.headers.forEach((name, value) => headers[name] = value);
     if (request.contentLength < 0) {
       headers['content-length'] = '';
       headers['transfer-encoding'] = 'chunked';
@@ -106,7 +118,7 @@
             .transform((stderrBytes) {
         var message = new String.fromCharCodes(stderrBytes);
         if (exitCode == 47) {
-          throw new RedirectLimitExceededException(message);
+          throw new RedirectLimitExceededException([]);
         } else {
           throw new HttpException(message);
         }
@@ -148,9 +160,9 @@
     return completer.future;
   }
 
-  /// Returns a [StreamedResponse] from the response data printed by the `curl`
-  /// [process]. [lines] are the headers that `curl` wrote to a file.
-  StreamedResponse _buildResponse(Process process, List<String> lines) {
+  /// Returns a [http.StreamedResponse] from the response data printed by the
+  /// `curl` [process]. [lines] are the headers that `curl` wrote to a file.
+  http.StreamedResponse _buildResponse(Process process, List<String> lines) {
     // When curl follows redirects, it prints the redirect headers as well as
     // the headers of the final request. Each block is separated by a blank
     // line. We just care about the last block. There is one trailing empty
@@ -162,7 +174,7 @@
     var status = int.parse(statusParts[1]);
     var isRedirect = status >= 300 && status < 400;
     var reasonPhrase =
-        Strings.join(" ", statusParts.getRange(2, statusParts.length - 2));
+        Strings.join(statusParts.getRange(2, statusParts.length - 2), " ");
     var headers = <String>{};
     for (var line in lines) {
       if (line.isEmpty) continue;
@@ -179,9 +191,20 @@
       contentLength = int.parse(headers['content-length']);
     }
 
-    return new StreamedResponse(responseStream, status, contentLength,
+    return new http.StreamedResponse(responseStream, status, contentLength,
         headers: headers,
         isRedirect: isRedirect,
         reasonPhrase: reasonPhrase);
   }
+
+  /// The default executable to use for running curl. On Windows, this is the
+  /// path to the bundled `curl.exe`; elsewhere, this is just "curl", and we
+  /// assume it to be installed and on the user's PATH.
+  static String get _defaultExecutable {
+    if (Platform.operatingSystem != 'windows') return 'curl';
+    // Note: This line of code gets munged by create_sdk.py to be the correct
+    // relative path to curl in the SDK.
+    var pathToCurl = "../../third_party/curl/curl.exe";
+    return relativeToPub(pathToCurl);
+  }
 }
diff --git a/utils/pub/io.dart b/utils/pub/io.dart
index 793c7263..ed5dee6 100644
--- a/utils/pub/io.dart
+++ b/utils/pub/io.dart
@@ -365,6 +365,13 @@
       .toNativePath();
 }
 
+/// Resolves [path] relative to the location of pub.dart.
+String relativeToPub(String path) {
+  var scriptPath = new File(new Options().script).fullPathSync();
+  var scriptDir = new Path.fromNative(scriptPath).directoryPath;
+  return scriptDir.append(path).canonicalize().toNativePath();
+}
+
 // TODO(nweiz): make this configurable
 /**
  * The amount of time in milliseconds to allow HTTP requests before assuming
@@ -535,6 +542,19 @@
   return completer.future;
 }
 
+/// Creates a temporary directory and passes its path to [fn]. Once the [Future]
+/// returned by [fn] completes, the temporary directory and all its contents
+/// will be deleted.
+Future withTempDir(Future fn(String path)) {
+  var tempDir;
+  var future = new Directory('').createTemp().chain((dir) {
+    tempDir = dir;
+    return fn(tempDir.path);
+  });
+  future.onComplete((_) => tempDir.delete(recursive: true));
+  return future;
+}
+
 /// Tests whether or not the git command-line app is available for use.
 Future<bool> get isGitInstalled {
   if (_isGitInstalledCache != null) {
@@ -633,14 +653,10 @@
   // read from stdin instead of a file. Consider resurrecting that version if
   // we can figure out why it fails.
 
-  // Find 7zip.
-  var scriptPath = new File(new Options().script).fullPathSync();
-  var scriptDir = new Path.fromNative(scriptPath).directoryPath;
-
   // Note: This line of code gets munged by create_sdk.py to be the correct
   // relative path to 7zip in the SDK.
   var pathTo7zip = '../../third_party/7zip/7za.exe';
-  var command = scriptDir.append(pathTo7zip).canonicalize().toNativePath();
+  var command = relativeToPub(pathTo7zip);
 
   var tempDir;
 
@@ -674,8 +690,7 @@
     if (tarFile == null) throw 'The gzip file did not contain a tar file.';
 
     // Untar the archive into the destination directory.
-    return runProcess(command, ['x', '-o"$destination"', tarFile],
-        workingDir: tempDir);
+    return runProcess(command, ['x', tarFile], workingDir: destination);
   }).chain((result) {
     if (result.exitCode != 0) {
       throw 'Could not un-tar (exit code ${result.exitCode}). Error:\n'
diff --git a/utils/pub/utils.dart b/utils/pub/utils.dart
index 21275f8..4097885 100644
--- a/utils/pub/utils.dart
+++ b/utils/pub/utils.dart
@@ -129,3 +129,24 @@
   new Timer(milliSeconds, completer.complete);
   return completer.future;
 }
+
+/// Configures [future] so that its result (success or exception) is passed on
+/// to [completer].
+void chainToCompleter(Future future, Completer completer) {
+  future.handleException((e) {
+    completer.completeException(e);
+    return true;
+  });
+  future.then(completer.complete);
+}
+
+/// Like [String.split], but only splits on the first occurrence of the pattern.
+/// This will always return an array of two elements or fewer.
+List<String> split1(String toSplit, String pattern) {
+  if (toSplit.isEmpty) return <String>[];
+
+  var index = toSplit.indexOf(pattern);
+  if (index == -1) return [toSplit];
+  return [toSplit.substring(0, index),
+    toSplit.substring(index + pattern.length)];
+}
diff --git a/pkg/http/test/curl_client_test.dart b/utils/tests/pub/curl_client_test.dart
similarity index 82%
rename from pkg/http/test/curl_client_test.dart
rename to utils/tests/pub/curl_client_test.dart
index d94ad38..98432e0 100644
--- a/pkg/http/test/curl_client_test.dart
+++ b/utils/tests/pub/curl_client_test.dart
@@ -8,24 +8,25 @@
 import 'dart:isolate';
 import 'dart:uri';
 
-import '../../unittest/lib/unittest.dart';
-import '../lib/http.dart' as http;
-import '../lib/src/utils.dart';
-import 'utils.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
+import '../../../pkg/http/lib/http.dart' as http;
+import '../../../pkg/http/test/utils.dart';
+import '../../pub/curl_client.dart';
+import '../../pub/io.dart';
 
 void main() {
   setUp(startServer);
   tearDown(stopServer);
 
   test('head', () {
-    expect(new http.CurlClient().head(serverUrl).transform((response) {
+    expect(new CurlClient().head(serverUrl).transform((response) {
       expect(response.statusCode, equals(200));
       expect(response.body, equals(''));
     }), completes);
   });
 
   test('get', () {
-    expect(new http.CurlClient().get(serverUrl, headers: {
+    expect(new CurlClient().get(serverUrl, headers: {
       'X-Random-Header': 'Value',
       'X-Other-Header': 'Other Value'
     }).transform((response) {
@@ -42,7 +43,7 @@
   });
 
   test('post', () {
-    expect(new http.CurlClient().post(serverUrl, headers: {
+    expect(new CurlClient().post(serverUrl, headers: {
       'X-Random-Header': 'Value',
       'X-Other-Header': 'Other Value'
     }, fields: {
@@ -67,7 +68,7 @@
   });
 
   test('post without fields', () {
-    expect(new http.CurlClient().post(serverUrl, headers: {
+    expect(new CurlClient().post(serverUrl, headers: {
       'X-Random-Header': 'Value',
       'X-Other-Header': 'Other Value',
       'Content-Type': 'text/plain'
@@ -86,7 +87,7 @@
   });
 
   test('put', () {
-    expect(new http.CurlClient().put(serverUrl, headers: {
+    expect(new CurlClient().put(serverUrl, headers: {
       'X-Random-Header': 'Value',
       'X-Other-Header': 'Other Value'
     }, fields: {
@@ -111,7 +112,7 @@
   });
 
   test('put without fields', () {
-    expect(new http.CurlClient().put(serverUrl, headers: {
+    expect(new CurlClient().put(serverUrl, headers: {
       'X-Random-Header': 'Value',
       'X-Other-Header': 'Other Value',
       'Content-Type': 'text/plain'
@@ -130,7 +131,7 @@
   });
 
   test('delete', () {
-    expect(new http.CurlClient().delete(serverUrl, headers: {
+    expect(new CurlClient().delete(serverUrl, headers: {
       'X-Random-Header': 'Value',
       'X-Other-Header': 'Other Value'
     }).transform((response) {
@@ -147,7 +148,7 @@
   });
 
   test('read', () {
-    expect(new http.CurlClient().read(serverUrl, headers: {
+    expect(new CurlClient().read(serverUrl, headers: {
       'X-Random-Header': 'Value',
       'X-Other-Header': 'Other Value'
     }), completion(parse(equals({
@@ -161,12 +162,12 @@
   });
 
   test('read throws an error for a 4** status code', () {
-    expect(new http.CurlClient().read(serverUrl.resolve('/error')),
+    expect(new CurlClient().read(serverUrl.resolve('/error')),
         throwsHttpException);
   });
 
   test('readBytes', () {
-    var future = new http.CurlClient().readBytes(serverUrl, headers: {
+    var future = new CurlClient().readBytes(serverUrl, headers: {
       'X-Random-Header': 'Value',
       'X-Other-Header': 'Other Value'
     }).transform((bytes) => new String.fromCharCodes(bytes));
@@ -182,12 +183,12 @@
   });
 
   test('readBytes throws an error for a 4** status code', () {
-    expect(new http.CurlClient().readBytes(serverUrl.resolve('/error')),
+    expect(new CurlClient().readBytes(serverUrl.resolve('/error')),
         throwsHttpException);
   });
 
   test('#send a StreamedRequest', () {
-    var client = new http.CurlClient();
+    var client = new CurlClient();
     var request = new http.StreamedRequest("POST", serverUrl);
     request.headers[HttpHeaders.CONTENT_TYPE] =
       'application/json; charset=utf-8';
@@ -214,7 +215,7 @@
 
   test('with one redirect', () {
     var url = serverUrl.resolve('/redirect');
-    expect(new http.CurlClient().get(url).transform((response) {
+    expect(new CurlClient().get(url).transform((response) {
       expect(response.statusCode, equals(200));
       expect(response.body, parse(equals({
         'method': 'GET',
@@ -225,36 +226,36 @@
   });
 
   test('with too many redirects', () {
-    expect(new http.CurlClient().get(serverUrl.resolve('/loop?1')),
+    expect(new CurlClient().get(serverUrl.resolve('/loop?1')),
         throwsRedirectLimitExceededException);
   });
 
   test('with a generic failure', () {
-    expect(new http.CurlClient().get('url fail'),
+    expect(new CurlClient().get('url fail'),
         throwsHttpException);
   });
 
   test('with one redirect via HEAD', () {
     var url = serverUrl.resolve('/redirect');
-    expect(new http.CurlClient().head(url).transform((response) {
+    expect(new CurlClient().head(url).transform((response) {
       expect(response.statusCode, equals(200));
     }), completes);
   });
 
   test('with too many redirects via HEAD', () {
-    expect(new http.CurlClient().head(serverUrl.resolve('/loop?1')),
+    expect(new CurlClient().head(serverUrl.resolve('/loop?1')),
         throwsRedirectLimitExceededException);
   });
 
   test('with a generic failure via HEAD', () {
-    expect(new http.CurlClient().head('url fail'),
+    expect(new CurlClient().head('url fail'),
         throwsHttpException);
   });
 
   test('without following redirects', () {
     var request = new http.Request('GET', serverUrl.resolve('/redirect'));
     request.followRedirects = false;
-    expect(new http.CurlClient().send(request).chain(http.Response.fromStream)
+    expect(new CurlClient().send(request).chain(http.Response.fromStream)
         .transform((response) {
       expect(response.statusCode, equals(302));
       expect(response.isRedirect, true);
diff --git a/utils/tests/string_encoding/unicode_test.dart b/utils/tests/string_encoding/unicode_test.dart
index 3fb23a6..054ff45 100755
--- a/utils/tests/string_encoding/unicode_test.dart
+++ b/utils/tests/string_encoding/unicode_test.dart
@@ -24,24 +24,24 @@
 
   void registerTests(TestSuite suite) {
     register("testCodepointsToString", testCodepointsToString, suite);
-    register("testStringToCodepoints", testStringToCodepoints, suite);
-    register("testEmptyCodepointsToString", testEmptyCodepointsToString, suite);
-    register("testEmptyStringToCodepoints", testEmptyStringToCodepoints, suite);
+    register("testStringCharCodes", testStringCharCodes, suite);
+    register("testEmptyStringFromCharCodes", testEmptyStringFromCharCodes, suite);
+    register("testEmptyStringCharCodes", testEmptyStringCharCodes, suite);
   }
 
-  void testStringToCodepoints() {
-    Expect.listEquals(testCodepoints, stringToCodepoints(testPhrase));
+  void testStringCharCodes() {
+    Expect.listEquals(testCodepoints, testPhrase.charCodes());
   }
 
   void testCodepointsToString() {
-    Expect.stringEquals(testPhrase, codepointsToString(testCodepoints));
+    Expect.stringEquals(testPhrase, new String.fromCharCodes(testCodepoints));
   }
 
-  void testEmptyCodepointsToString() {
-    Expect.stringEquals("", codepointsToString(<int>[]));
+  void testEmptyStringFromCharCodes() {
+    Expect.stringEquals("", new String.fromCharCodes(<int>[]));
   }
 
-  void testEmptyStringToCodepoints() {
-    Expect.listEquals([], stringToCodepoints(""));
+  void testEmptyStringCharCodes() {
+    Expect.listEquals([], "".charCodes());
   }
 }