diff --git a/lib/compiler/implementation/compiler.dart b/lib/compiler/implementation/compiler.dart
index fe032d9..c15a3ed 100644
--- a/lib/compiler/implementation/compiler.dart
+++ b/lib/compiler/implementation/compiler.dart
@@ -435,13 +435,16 @@
 
   // TODO(karlklose,floitsch): move this to the javascript backend.
   /** Enable the 'JS' helper for a library if needed. */
-  void maybeEnableJSHelper(library) {
+  void maybeEnableJSHelper(LibraryElement library) {
     String libraryName = library.uri.toString();
     if (library.entryCompilationUnit.script.name.contains(
             'dart/tests/compiler/dart2js_native')
         || libraryName == 'dart:isolate'
         || libraryName == 'dart:math'
         || libraryName == 'dart:html') {
+      if (libraryName == 'dart:html') {
+        importHelperLibrary(library);
+      }
       library.addToScope(findHelper(const SourceString('JS')), this);
       Element jsIndexingBehaviorInterface =
           findHelper(const SourceString('JavaScriptIndexingBehavior'));
diff --git a/lib/html/dart2js/html_dart2js.dart b/lib/html/dart2js/html_dart2js.dart
index e5cdd97..1901457 100644
--- a/lib/html/dart2js/html_dart2js.dart
+++ b/lib/html/dart2js/html_dart2js.dart
@@ -655,9 +655,21 @@
   // instead of noteOn.
   void start(num when, [num grainOffset, num grainDuration]) {
     if (JS('bool', '!!#.start', this)) {
-      JS('void', '#.start(#, #, #)', this, when, grainOffset, grainDuration);
+      if (?grainDuration) {
+        JS('void', '#.start(#, #, #)', this, when, grainOffset, grainDuration);
+      } else if (?grainOffset) {
+        JS('void', '#.start(#, #)', this, when, grainOffset);
+      } else {
+        JS('void', '#.start(#)', this, when);
+      }
     } else {
-      JS('void', '#.noteOn(#, #, #)', this, when, grainOffset, grainDuration);
+      if (?grainDuration) {
+        JS('void', '#.noteOn(#, #, #)', this, when, grainOffset, grainDuration);
+      } else if (?grainOffset) {
+        JS('void', '#.noteOn(#, #)', this, when, grainOffset);
+      } else {
+        JS('void', '#.noteOn(#)', this, when);
+      }
     }
   }
 
diff --git a/lib/html/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate b/lib/html/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate
index 7860541..c12866a 100644
--- a/lib/html/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate
+++ b/lib/html/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate
@@ -8,9 +8,21 @@
   // instead of noteOn.
   void start(num when, [num grainOffset, num grainDuration]) {
     if (JS('bool', '!!#.start', this)) {
-      JS('void', '#.start(#, #, #)', this, when, grainOffset, grainDuration);
+      if (?grainDuration) {
+        JS('void', '#.start(#, #, #)', this, when, grainOffset, grainDuration);
+      } else if (?grainOffset) {
+        JS('void', '#.start(#, #)', this, when, grainOffset);
+      } else {
+        JS('void', '#.start(#)', this, when);
+      }
     } else {
-      JS('void', '#.noteOn(#, #, #)', this, when, grainOffset, grainDuration);
+      if (?grainDuration) {
+        JS('void', '#.noteOn(#, #, #)', this, when, grainOffset, grainDuration);
+      } else if (?grainOffset) {
+        JS('void', '#.noteOn(#, #)', this, when, grainOffset);
+      } else {
+        JS('void', '#.noteOn(#)', this, when);
+      }
     }
   }
 
diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
index 895e2f1..683e724 100644
--- a/runtime/lib/mirrors_impl.dart
+++ b/runtime/lib/mirrors_impl.dart
@@ -339,7 +339,8 @@
 
   TypeMirror resolve(MirrorSystem mirrors) {
     if (libraryName == null) {
-      if (typeName == 'Dynamic') {
+      // TODO(turnidge): Remove support for 'Dynamic'.
+      if ((typeName == 'dynamic') || (typeName == 'Dynamic')) {
         return mirrors.dynamicType;
       } else if (typeName == 'void') {
         return mirrors.voidType;
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index aace6ca..c94fe02c 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -632,19 +632,19 @@
     if (super_type.IsBeingFinalized()) {
       // This type references itself via its type arguments. This is legal, but
       // we must avoid endless recursion. We therefore map the innermost
-      // super type to Dynamic.
+      // super type to dynamic.
       // Note that a direct self-reference via the super class chain is illegal
       // and reported as an error earlier.
       // Such legal self-references occur with F-bounded quantification.
       // Example 1: class Derived extends Base<Derived>.
       // The type 'Derived' forms a cycle by pointing to itself via its
       // flattened type argument vector: Derived[Base[Derived[Base[...]]]]
-      // We break the cycle as follows: Derived[Base[Derived[Dynamic]]]
+      // We break the cycle as follows: Derived[Base[Derived[dynamic]]]
       // Example 2: class Derived extends Base<Middle<Derived>> results in
-      // Derived[Base[Middle[Derived[Dynamic]]]]
+      // Derived[Base[Middle[Derived[dynamic]]]]
       // Example 3: class Derived<T> extends Base<Derived<T>> results in
-      // Derived[Base[Derived[Dynamic]], T].
-      ASSERT(super_type_args.IsNull());  // Same as a vector of Dynamic.
+      // Derived[Base[Derived[dynamic]], T].
+      ASSERT(super_type_args.IsNull());  // Same as a vector of dynamic.
     } else {
       super_type ^= FinalizeType(cls, super_type, finalization);
       cls.set_super_type(super_type);
@@ -754,7 +754,7 @@
                       "type '%s' has malformed type argument",
                       type_name.ToCString());
         }
-        // In production mode, malformed type arguments are mapped to Dynamic.
+        // 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) {
           const Error& error = Error::Handle(type_argument.malformed_error());
@@ -925,7 +925,7 @@
   // interface.
   ResolveType(cls, type, kCanonicalize);
   type = FinalizeType(cls, type, kCanonicalize);
-  // In production mode, a malformed result type is mapped to Dynamic.
+  // In production mode, a malformed result type is mapped to dynamic.
   if (!FLAG_enable_type_checks && type.IsMalformed()) {
     type = Type::DynamicType();
   }
@@ -936,7 +936,7 @@
     type = function.ParameterTypeAt(i);
     ResolveType(cls, type, kCanonicalize);
     type = FinalizeType(cls, type, kCanonicalize);
-    // In production mode, a malformed parameter type is mapped to Dynamic.
+    // In production mode, a malformed parameter type is mapped to dynamic.
     if (!FLAG_enable_type_checks && type.IsMalformed()) {
       type = Type::DynamicType();
     }
@@ -1384,7 +1384,7 @@
                   String::Handle(interface_class.Name()).ToCString());
     }
     // Verify that unless cls belongs to core lib, it cannot extend or implement
-    // any of bool, num, int, double, String, Function, Dynamic.
+    // any of bool, num, int, double, String, Function, dynamic.
     // The exception is signature classes, which are compiler generated and
     // represent a function type, therefore implementing the Function interface.
     if (!cls_belongs_to_core_lib) {
diff --git a/runtime/vm/class_finalizer.h b/runtime/vm/class_finalizer.h
index e3cecbd..8ed32db 100644
--- a/runtime/vm/class_finalizer.h
+++ b/runtime/vm/class_finalizer.h
@@ -29,7 +29,7 @@
  public:
   // Modes for type resolution and finalization. The ordering is relevant.
   enum FinalizationKind {
-    kIgnore,                   // Type is ignored and replaced by Dynamic.
+    kIgnore,                   // Type is ignored and replaced by dynamic.
     kDoNotResolve,             // Type resolution is postponed.
     kTryResolve,               // Type resolution is attempted.
     kFinalize,                 // Type resolution and type finalization are
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 0b8cdd4..ef99695 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -2661,7 +2661,7 @@
     const Class& cls = Class::Cast(obj);
     const Array& func_array = Array::Handle(cls.functions());
 
-    // Some special types like 'Dynamic' have a null functions list.
+    // Some special types like 'dynamic' have a null functions list.
     if (!func_array.IsNull()) {
       for (intptr_t i = 0; i < func_array.Length(); ++i) {
         func ^= func_array.At(i);
@@ -2916,7 +2916,7 @@
 
   if (func.kind() == RawFunction::kConstructor) {
     // Special case the return type for constructors.  Inside the vm
-    // we mark them as returning Dynamic, but for the purposes of
+    // we mark them as returning dynamic, but for the purposes of
     // reflection, they return the type of the class being
     // constructed.
     return Api::NewHandle(isolate, func.Owner());
@@ -3001,9 +3001,9 @@
     const Class& cls = Class::Cast(obj);
     const Array& field_array = Array::Handle(cls.fields());
 
-    // Some special types like 'Dynamic' have a null fields list.
+    // Some special types like 'dynamic' have a null fields list.
     //
-    // TODO(turnidge): Fix 'Dynamic' so that it does not have a null
+    // TODO(turnidge): Fix 'dynamic' so that it does not have a null
     // fields list.  This will have to wait until the empty array is
     // allocated in the vm isolate.
     if (!field_array.IsNull()) {
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 80ac1cd..6997b753 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -4675,7 +4675,7 @@
   if (FLAG_enable_type_checks) {
     EXPECT_STREQ("int", cls_name_cstr);
   } else {
-    EXPECT_STREQ("Dynamic", cls_name_cstr);
+    EXPECT_STREQ("dynamic", cls_name_cstr);
   }
 }
 
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index 8b584bc..92250f2 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -541,7 +541,7 @@
 
 
 // Returns true if the type check can be skipped, for example, if the
-// destination type is Dynamic or if the compile type of the value is a subtype
+// destination type is dynamic or if the compile type of the value is a subtype
 // of the destination type.
 bool EffectGraphVisitor::CanSkipTypeCheck(intptr_t token_pos,
                                           Value* value,
@@ -556,7 +556,7 @@
     return false;
   }
 
-  // Any type is more specific than the Dynamic type and than the Object type.
+  // Any type is more specific than the dynamic type and than the Object type.
   if (dst_type.IsDynamicType() || dst_type.IsObjectType()) {
     return true;
   }
@@ -829,7 +829,7 @@
     const Class& cls = Class::Handle(literal_value.clazz());
     ConstantInstr* result = NULL;
     if (cls.IsNullClass()) {
-      // A null object is only an instance of Object and Dynamic, which has
+      // A null object is only an instance of Object and dynamic, which has
       // already been checked above (if the type is instantiated). So we can
       // return false here if the instance is null (and if the type is
       // instantiated).
diff --git a/runtime/vm/flow_graph_compiler_ia32.cc b/runtime/vm/flow_graph_compiler_ia32.cc
index b5ce752..1dd972f 100644
--- a/runtime/vm/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/flow_graph_compiler_ia32.cc
@@ -133,7 +133,7 @@
       type_arguments.IsRaw(type_arguments.Length());
   if (is_raw_type) {
     const Register kClassIdReg = ECX;
-    // Dynamic type argument, check only classes.
+    // dynamic type argument, check only classes.
     // List is a very common case.
     __ LoadClassId(kClassIdReg, kInstanceReg);
     if (!type_class.is_interface()) {
@@ -146,7 +146,7 @@
     return GenerateSubtype1TestCacheLookup(
         token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
   }
-  // If one type argument only, check if type argument is Object or Dynamic.
+  // If one type argument only, check if type argument is Object or dynamic.
   if (type_arguments.Length() == 1) {
     const AbstractType& tp_argument = AbstractType::ZoneHandle(
         type_arguments.TypeAt(0));
@@ -307,7 +307,7 @@
     // Load instantiator (or null) and instantiator type arguments on stack.
     __ movl(EDX, Address(ESP, 0));  // Get instantiator type arguments.
     // EDX: instantiator type arguments.
-    // Check if type argument is Dynamic.
+    // Check if type argument is dynamic.
     __ cmpl(EDX, raw_null);
     __ j(EQUAL, is_instance_lbl);
     // Can handle only type arguments that are instances of TypeArguments.
@@ -453,13 +453,13 @@
   // If type is instantiated and non-parameterized, we can inline code
   // checking whether the tested instance is a Smi.
   if (type.IsInstantiated()) {
-    // A null object is only an instance of Object and Dynamic, which has
+    // A null object is only an instance of Object and dynamic, which has
     // already been checked above (if the type is instantiated). So we can
     // return false here if the instance is null (and if the type is
     // instantiated).
     // We can only inline this null check if the type is instantiated at compile
     // time, since an uninstantiated type at compile time could be Object or
-    // Dynamic at run time.
+    // dynamic at run time.
     __ cmpl(EAX, raw_null);
     __ j(EQUAL, &is_not_instance);
   }
diff --git a/runtime/vm/flow_graph_compiler_x64.cc b/runtime/vm/flow_graph_compiler_x64.cc
index 0c9e1aa..849a405 100644
--- a/runtime/vm/flow_graph_compiler_x64.cc
+++ b/runtime/vm/flow_graph_compiler_x64.cc
@@ -133,7 +133,7 @@
       type_arguments.IsRaw(type_arguments.Length());
   if (is_raw_type) {
     const Register kClassIdReg = R10;
-    // Dynamic type argument, check only classes.
+    // dynamic type argument, check only classes.
     // List is a very common case.
     __ LoadClassId(kClassIdReg, kInstanceReg);
     if (!type_class.is_interface()) {
@@ -146,7 +146,7 @@
     return GenerateSubtype1TestCacheLookup(
         token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
   }
-  // If one type argument only, check if type argument is Object or Dynamic.
+  // If one type argument only, check if type argument is Object or dynamic.
   if (type_arguments.Length() == 1) {
     const AbstractType& tp_argument = AbstractType::ZoneHandle(
         type_arguments.TypeAt(0));
@@ -307,7 +307,7 @@
     // Load instantiator (or null) and instantiator type arguments on stack.
     __ movq(RDX, Address(RSP, 0));  // Get instantiator type arguments.
     // RDX: instantiator type arguments.
-    // Check if type argument is Dynamic.
+    // Check if type argument is dynamic.
     __ cmpq(RDX, raw_null);
     __ j(EQUAL, is_instance_lbl);
     // Can handle only type arguments that are instances of TypeArguments.
@@ -453,13 +453,13 @@
   // If type is instantiated and non-parameterized, we can inline code
   // checking whether the tested instance is a Smi.
   if (type.IsInstantiated()) {
-    // A null object is only an instance of Object and Dynamic, which has
+    // A null object is only an instance of Object and dynamic, which has
     // already been checked above (if the type is instantiated). So we can
     // return false here if the instance is null (and if the type is
     // instantiated).
     // We can only inline this null check if the type is instantiated at compile
     // time, since an uninstantiated type at compile time could be Object or
-    // Dynamic at run time.
+    // dynamic at run time.
     __ cmpq(RAX, raw_null);
     __ j(EQUAL, &is_not_instance);
   }
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index cfc1e5d..904cf2a 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -377,7 +377,7 @@
     return true;
   }
 
-  // The Null type is only a subtype of Object and of Dynamic.
+  // The Null type is only a subtype of Object and of dynamic.
   // Functions that do not explicitly return a value, implicitly return null,
   // except generative constructors, which return the object being constructed.
   // It is therefore acceptable for void functions to return null.
@@ -965,14 +965,14 @@
 RawAbstractType* ClosureCallInstr::CompileType() const {
   // Because of function subtyping rules, the declared return type of a closure
   // call cannot be relied upon for compile type analysis. For example, a
-  // function returning Dynamic can be assigned to a closure variable declared
+  // function returning dynamic can be assigned to a closure variable declared
   // to return int and may actually return a double at run-time.
   return Type::DynamicType();
 }
 
 
 RawAbstractType* InstanceCallInstr::CompileType() const {
-  // TODO(regis): Return a more specific type than Dynamic for recognized
+  // TODO(regis): Return a more specific type than dynamic for recognized
   // combinations of receiver type and method name.
   return Type::DynamicType();
 }
@@ -1125,7 +1125,7 @@
 
 RawAbstractType* LoadFieldInstr::CompileType() const {
   // Type may be null if the field is a VM field, e.g. context parent.
-  // Keep it as null for debug purposes and do not return Dynamic in production
+  // Keep it as null for debug purposes and do not return dynamic in production
   // mode, since misuse of the type would remain undetected.
   if (type().IsNull()) {
     return AbstractType::null();
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index 3930c7c..0e9d611 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -1207,7 +1207,7 @@
   // 'instantiator_reg' is the instantiator AbstractTypeArguments object
   // (or null).
   // If the instantiator is null and if the type argument vector
-  // instantiated from null becomes a vector of Dynamic, then use null as
+  // instantiated from null becomes a vector of dynamic, then use null as
   // the type arguments.
   Label type_arguments_instantiated;
   const intptr_t len = type_arguments().Length();
@@ -1270,7 +1270,7 @@
   // instantiator_reg is the instantiator type argument vector, i.e. an
   // AbstractTypeArguments object (or null).
   // If the instantiator is null and if the type argument vector
-  // instantiated from null becomes a vector of Dynamic, then use null as
+  // instantiated from null becomes a vector of dynamic, then use null as
   // the type arguments.
   Label type_arguments_instantiated;
   const intptr_t len = type_arguments().Length();
@@ -1326,7 +1326,7 @@
 
   // instantiator_reg is the instantiator AbstractTypeArguments object
   // (or null).  If the instantiator is null and if the type argument vector
-  // instantiated from null becomes a vector of Dynamic, then use null as
+  // instantiated from null becomes a vector of dynamic, then use null as
   // the type arguments and do not pass the instantiator.
   Label done;
   const intptr_t len = type_arguments().Length();
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index c373780..fe61e98 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -1161,7 +1161,7 @@
   // 'instantiator_reg' is the instantiator AbstractTypeArguments object
   // (or null).
   // If the instantiator is null and if the type argument vector
-  // instantiated from null becomes a vector of Dynamic, then use null as
+  // instantiated from null becomes a vector of dynamic, then use null as
   // the type arguments.
   Label type_arguments_instantiated;
   const intptr_t len = type_arguments().Length();
@@ -1222,7 +1222,7 @@
   // instantiator_reg is the instantiator type argument vector, i.e. an
   // AbstractTypeArguments object (or null).
   // If the instantiator is null and if the type argument vector
-  // instantiated from null becomes a vector of Dynamic, then use null as
+  // instantiated from null becomes a vector of dynamic, then use null as
   // the type arguments.
   Label type_arguments_instantiated;
   const intptr_t len = type_arguments().Length();
@@ -1276,7 +1276,7 @@
 
   // instantiator_reg is the instantiator AbstractTypeArguments object
   // (or null).  If the instantiator is null and if the type argument vector
-  // instantiated from null becomes a vector of Dynamic, then use null as
+  // instantiated from null becomes a vector of dynamic, then use null as
   // the type arguments and do not pass the instantiator.
   Label done;
   const intptr_t len = type_arguments().Length();
diff --git a/runtime/vm/intrinsifier_ia32.cc b/runtime/vm/intrinsifier_ia32.cc
index 2c2e8d3..7760a93 100644
--- a/runtime/vm/intrinsifier_ia32.cc
+++ b/runtime/vm/intrinsifier_ia32.cc
@@ -208,7 +208,7 @@
     // EBX: Type arguments of array.
     __ cmpl(EBX, raw_null);
     __ j(EQUAL, &checked_ok, Assembler::kNearJump);
-    // Check if it's Dynamic.
+    // Check if it's dynamic.
     // For now handle only TypeArguments and bail out if InstantiatedTypeArgs.
     __ CompareClassId(EBX, kTypeArgumentsCid, EAX);
     __ j(NOT_EQUAL, &fall_through, Assembler::kNearJump);
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index e7bf8b4..df2b538 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -339,7 +339,7 @@
 static void AddFunctionsFromClass(const Class& cls,
                                   GrowableArray<const Function*>* functions) {
   const Array& class_functions = Array::Handle(cls.functions());
-  // Class 'Dynamic' is allocated/initialized in a special way, leaving
+  // Class 'dynamic' is allocated/initialized in a special way, leaving
   // the functions field NULL instead of empty.
   const int func_len = class_functions.IsNull() ? 0 : class_functions.Length();
   for (int j = 0; j < func_len; j++) {
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index bf300c7..9c2d491 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -882,7 +882,7 @@
   type = Type::NewNonParameterizedType(cls);
   object_store->set_void_type(type);
 
-  // The class 'Dynamic' is registered in the class dictionary because its name
+  // The class 'dynamic' is registered in the class dictionary because its name
   // is a built-in identifier, rather than a reserved keyword. Its name is not
   // heap allocated, because the class resides in the VM isolate.
   // The corresponding type, the "unknown type", is stored in the object store.
@@ -2010,7 +2010,7 @@
     Error* malformed_error) const {
   ASSERT(!IsVoidClass());
   // Check for DynamicType.
-  // Each occurrence of DynamicType in type T is interpreted as the Dynamic
+  // Each occurrence of DynamicType in type T is interpreted as the dynamic
   // type, a supertype of all types.
   if (other.IsDynamicClass()) {
     return true;
@@ -2588,7 +2588,7 @@
     ASSERT(!type.IsNull());
     if (!type.HasResolvedTypeClass()) {
       if (raw_instantiated && type.IsTypeParameter()) {
-        // An uninstantiated type parameter is equivalent to Dynamic.
+        // An uninstantiated type parameter is equivalent to dynamic.
         continue;
       }
       ASSERT((!raw_instantiated && type.IsTypeParameter()) ||
@@ -8045,12 +8045,12 @@
     if (other.IsVoidType()) {
       return true;
     }
-    // Otherwise, null is only an instance of Object and of Dynamic.
+    // Otherwise, null is only an instance of Object and of dynamic.
     // It is not necessary to fully instantiate the other type for this test.
     Class& other_class = Class::Handle();
     if (other.IsTypeParameter()) {
       if (other_instantiator.IsNull()) {
-        return true;  // Other type is uninstantiated, i.e. Dynamic.
+        return true;  // Other type is uninstantiated, i.e. dynamic.
       }
       const TypeParameter& other_type_param = TypeParameter::Cast(other);
       const AbstractType& instantiated_other = AbstractType::Handle(
@@ -8091,7 +8091,7 @@
   // allocation of a new AbstractType by inlining the code.
   if (other.IsTypeParameter()) {
     if (other_instantiator.IsNull()) {
-      // An uninstantiated type parameter is equivalent to Dynamic.
+      // An uninstantiated type parameter is equivalent to dynamic.
       return true;
     }
     const TypeParameter& other_type_param = TypeParameter::Cast(other);
@@ -8321,12 +8321,12 @@
     if (num_type_params > num_args) {
       first_type_param_index = 0;
       if (!IsFinalized() || IsBeingFinalized() || IsMalformed()) {
-        // Most probably a malformed type. Do not fill up with "Dynamic",
+        // Most probably a malformed type. Do not fill up with "dynamic",
         // but use actual vector.
         num_type_params = num_args;
       } else {
         ASSERT(num_args == 0);  // Type is raw.
-        // No need to fill up with "Dynamic".
+        // No need to fill up with "dynamic".
         num_type_params = 0;
       }
     } else {
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 8413fc6..5bfa0e0 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -387,7 +387,7 @@
 
   static RawClass* class_class_;  // Class of the Class vm object.
   static RawClass* null_class_;  // Class of the null object.
-  static RawClass* dynamic_class_;  // Class of the 'Dynamic' type.
+  static RawClass* dynamic_class_;  // Class of the 'dynamic' type.
   static RawClass* void_class_;  // Class of the 'void' type.
   static RawClass* unresolved_class_class_;  // Class of UnresolvedClass.
   // Class of the TypeArguments vm object.
@@ -575,7 +575,7 @@
   // Check if this class represents the class of null.
   bool IsNullClass() const { return id() == kNullCid; }
 
-  // Check if this class represents the 'Dynamic' class.
+  // Check if this class represents the 'dynamic' class.
   bool IsDynamicClass() const { return id() == kDynamicCid; }
 
   // Check if this class represents the 'void' class.
@@ -846,12 +846,12 @@
   // Do not canonicalize InstantiatedTypeArguments or NULL objects
   virtual RawAbstractTypeArguments* Canonicalize() const { return this->raw(); }
 
-  // The name of this type argument vector, e.g. "<T, Dynamic, List<T>, Smi>".
+  // The name of this type argument vector, e.g. "<T, dynamic, List<T>, Smi>".
   virtual RawString* Name() const {
     return SubvectorName(0, Length(), kInternalName);
   }
 
-  // The name of this type argument vector, e.g. "<T, Dynamic, List<T>, int>".
+  // The name of this type argument vector, e.g. "<T, dynamic, List<T>, int>".
   // Names of internal classes are mapped to their public interfaces.
   virtual RawString* UserVisibleName() const {
     return SubvectorName(0, Length(), kUserVisibleName);
@@ -917,7 +917,7 @@
                 Error* malformed_error) const;
 
   // Return the internal or public name of a subvector of this type argument
-  // vector, e.g. "<T, Dynamic, List<T>, int>".
+  // vector, e.g. "<T, dynamic, List<T>, int>".
   RawString* SubvectorName(intptr_t from_index,
                            intptr_t len,
                            NameVisibility name_visibility) const;
@@ -3089,7 +3089,7 @@
   // type.
   RawString* ClassName() const;
 
-  // Check if this type represents the 'Dynamic' type.
+  // Check if this type represents the 'dynamic' type.
   bool IsDynamicType() const {
     return HasResolvedTypeClass() && (type_class() == Object::dynamic_class());
   }
@@ -3218,7 +3218,7 @@
   // The type of the literal 'null'.
   static RawType* NullType();
 
-  // The 'Dynamic' type.
+  // The 'dynamic' type.
   static RawType* DynamicType();
 
   // The 'void' type.
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 7ca4b02..4208eec 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -31,6 +31,8 @@
 DEFINE_FLAG(bool, silent_warnings, false, "Silence warnings.");
 DEFINE_FLAG(bool, warn_legacy_map_literal, false,
             "Warning on legacy map literal syntax (single type argument)");
+DEFINE_FLAG(bool, warn_legacy_dynamic, false,
+            "Warning on legacy type Dynamic)");
 
 static void CheckedModeHandler(bool value) {
   FLAG_enable_asserts = value;
@@ -1014,7 +1016,7 @@
   } else if (CurrentToken() == Token::kVAR) {
     ConsumeToken();
     var_seen = true;
-    // The parameter type is the 'Dynamic' type.
+    // The parameter type is the 'dynamic' type.
     parameter.type = &Type::ZoneHandle(Type::DynamicType());
   }
   if (CurrentToken() == Token::kTHIS) {
@@ -2872,7 +2874,7 @@
     }
     ConsumeToken();
     member.has_var = true;
-    // The member type is the 'Dynamic' type.
+    // The member type is the 'dynamic' type.
     member.type = &Type::ZoneHandle(Type::DynamicType());
   } else if (CurrentToken() == Token::kFACTORY) {
     ConsumeToken();
@@ -2996,7 +2998,7 @@
       ErrorMsg("'(' expected");
     }
     // The grammar allows a return type, so member.type is not always NULL here.
-    // If no return type is specified, the return type of the setter is Dynamic.
+    // If no return type is specified, the return type of the setter is dynamic.
     if (member.type == NULL) {
       member.type = &Type::ZoneHandle(Type::DynamicType());
     }
@@ -3673,7 +3675,7 @@
       if (malformed_error->IsNull() && type.IsMalformed()) {
         *malformed_error = type.malformed_error();
       }
-      // Map a malformed type argument to Dynamic, so that malformed types with
+      // 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);
@@ -5163,7 +5165,7 @@
   bool have_type = false;
   if (CurrentToken() == Token::kCONST) {
     ConsumeToken();
-    have_type = true;  // Type is Dynamic.
+    have_type = true;  // Type is dynamic.
   }
   if (IsIdentifier()) {  // Type or variable name.
     Token::Kind follower = LookaheadToken(1);
@@ -6078,7 +6080,7 @@
       exception_param.var = ExpectIdentifier("identifier expected");
       if (CurrentToken() == Token::kCOMMA) {
         ConsumeToken();
-        // TODO(hausner): Make implicit type be StackTrace, not Dynamic.
+        // TODO(hausner): Make implicit type be StackTrace, not dynamic.
         stack_trace_param.type =
             &AbstractType::ZoneHandle(Type::DynamicType());
         stack_trace_param.token_pos = TokenPos();
@@ -6587,7 +6589,9 @@
     ErrorMsg("%s", msg);
   }
   String* ident = CurrentLiteral();
-  if (ident->Equals("Dynamic")) {
+  // TODO(hausner): Remove check for 'Dynamic' once support for upper-case
+  // type dynamic is gone.
+  if (ident->Equals("Dynamic") || ident->Equals("dynamic")) {
     ErrorMsg("%s", msg);
   }
   ConsumeToken();
@@ -8372,6 +8376,16 @@
     SkipQualIdent();
   } else {
     ParseQualIdent(&type_name);
+    // TODO(hausner): Remove this once support for legacy type 'Dynamic'
+    // is removed.
+    if ((type_name.lib_prefix == NULL) && type_name.ident->Equals("Dynamic")) {
+      if (FLAG_warn_legacy_dynamic) {
+        Warning(type_name.ident_pos,
+                "legacy type 'Dynamic' found; auto-converting to 'dynamic'");
+      }
+      // Replace with lower-case 'dynamic'.
+      *type_name.ident ^= Symbols::Dynamic();
+    }
     // An identifier cannot be resolved in a local scope when top level parsing.
     if (!is_top_level_ &&
         (type_name.lib_prefix == NULL) &&
@@ -8400,7 +8414,7 @@
   }
   AbstractType& type = AbstractType::Handle(
       Type::New(type_class, type_arguments, type_name.ident_pos));
-  // In production mode, malformed type arguments are mapped to Dynamic.
+  // 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 && !malformed_error.IsNull()) {
     Type& parameterized_type = Type::Handle();
@@ -8451,7 +8465,7 @@
 
   AbstractType& element_type = Type::ZoneHandle(Type::DynamicType());
   // If no type argument vector is provided, leave it as null, which is
-  // equivalent to using Dynamic as the type argument for the element type.
+  // equivalent to using dynamic as the type argument for the element type.
   if (!type_arguments.IsNull()) {
     ASSERT(type_arguments.Length() > 0);
     // List literals take a single type argument.
@@ -8621,7 +8635,7 @@
   AbstractTypeArguments& map_type_arguments =
       AbstractTypeArguments::ZoneHandle(type_arguments.raw());
   // If no type argument vector is provided, leave it as null, which is
-  // equivalent to using Dynamic as the type argument for the value type.
+  // equivalent to using dynamic as the type argument for the value type.
   if (!map_type_arguments.IsNull()) {
     ASSERT(map_type_arguments.Length() > 0);
     // Map literals take two type arguments.
@@ -8658,7 +8672,7 @@
   ASSERT(map_type_arguments.IsNull() || (map_type_arguments.Length() == 2));
   map_type_arguments ^= map_type_arguments.Canonicalize();
 
-  // The kv_pair array is temporary and of element type Dynamic. It is passed
+  // The kv_pair array is temporary and of element type dynamic. It is passed
   // to the factory to initialize a properly typed map.
   ArrayNode* kv_pairs =
       new ArrayNode(TokenPos(), Type::ZoneHandle(Type::ListInterface()));
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 89f3c7b..070da5a 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -117,7 +117,7 @@
 #undef DEFINE_OBJECT_KIND
 
   // The following entries do not describe a predefined class, but instead
-  // are class indexes for pre-allocated instance (Null, Dynamic and Void).
+  // are class indexes for pre-allocated instance (Null, dynamic and Void).
   kNullCid,
   kDynamicCid,
   kVoidCid,
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index b08deef..85dab77 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -61,7 +61,7 @@
   V(Source, "source")                                                          \
   V(Class, "Class")                                                            \
   V(Null, "Null")                                                              \
-  V(Dynamic, "Dynamic")                                                        \
+  V(Dynamic, "dynamic")                                                        \
   V(Void, "void")                                                              \
   V(UnresolvedClass, "UnresolvedClass")                                        \
   V(Type, "_Type")                                                             \
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index 9042a0a..2b70819 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -163,10 +163,10 @@
 Language/10_Expressions/27_Assignable_Expressions_A01_t06: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/27_Assignable_Expressions_A01_t08: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/27_Assignable_Expressions_A01_t09: Fail # TODO(vm-team): Please triage this failure.
+Language/10_Expressions/28_Identifier_Reference_A06_t13: Fail, OK # co19 issue 257
 Language/10_Expressions/28_Identifier_Reference_A04_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/28_Identifier_Reference_A04_t03: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/28_Identifier_Reference_A04_t06: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/28_Identifier_Reference_A06_t16: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/28_Identifier_Reference_A07_t04: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/29_Type_Test_A01_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/29_Type_Test_A01_t04: Fail # TODO(vm-team): Please triage this failure.
@@ -233,7 +233,6 @@
 Language/07_Classes/07_Classes_A03_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/09_Function_Expressions_A03_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/09_Function_Expressions_A04_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/10_Expressions/09_Function_Expressions_A05_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/10_Expressions/11_Instance_Creation/1_New_A13_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Imports_A03_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.
diff --git a/tests/corelib/null_test.dart b/tests/corelib/null_test.dart
index 83e82f9..7879ac5 100644
--- a/tests/corelib/null_test.dart
+++ b/tests/corelib/null_test.dart
@@ -8,7 +8,7 @@
   var x;
 
   Expect.isTrue(x is Object);
-  Expect.isTrue(x is Dynamic);
+  Expect.isTrue(x is dynamic);
   Expect.isTrue(x is! String);
   Expect.isTrue(x is! int);
 
diff --git a/tests/language/black_listed_test.dart b/tests/language/black_listed_test.dart
index c14baa7..9e83b0e 100644
--- a/tests/language/black_listed_test.dart
+++ b/tests/language/black_listed_test.dart
@@ -42,9 +42,9 @@
   MyFunctionInterface();                                    /// 12: continued
 }                                                           /// 12: continued
 
-// Dynamic.
-class MyDynamic implements Dynamic {}                      /// 13: compile-time error
-interface MyDynamicInterface extends Dynamic default F {   /// 14: compile-time error
+// dynamic.
+class MyDynamic implements dynamic {}                      /// 13: compile-time error
+interface MyDynamicInterface extends dynamic default F {   /// 14: compile-time error
   MyDynamicInterface();                                    /// 14: continued
 }                                                          /// 14: continued
 
diff --git a/tests/language/cast2_test.dart b/tests/language/cast2_test.dart
index 1ddf873..397ac45 100644
--- a/tests/language/cast2_test.dart
+++ b/tests/language/cast2_test.dart
@@ -17,7 +17,7 @@
   Object oc = new C();
   Object od = new D();
 
-  (oc as Dynamic).bar;  /// 01: runtime error
+  (oc as dynamic).bar;  /// 01: runtime error
 }
 
 
diff --git a/tests/language/cast_test.dart b/tests/language/cast_test.dart
index b73d3c6..6b8eaba 100644
--- a/tests/language/cast_test.dart
+++ b/tests/language/cast_test.dart
@@ -42,12 +42,12 @@
   (on as Object).toString();
   (oc as Object).toString();
   (od as Object).toString();
-  (on as Dynamic).toString();
-  (on as Dynamic).foo;  /// 07: runtime error
-  (oc as Dynamic).foo;
-  (od as Dynamic).foo;
-  (oc as Dynamic).bar;  /// 08: runtime error
-  (od as Dynamic).bar;
+  (on as dynamic).toString();
+  (on as dynamic).foo;  /// 07: runtime error
+  (oc as dynamic).foo;
+  (od as dynamic).foo;
+  (oc as dynamic).bar;  /// 08: runtime error
+  (od as dynamic).bar;
   C c = oc as C;
   c = od as C;
   c = oc;
@@ -57,13 +57,13 @@
 
   (ol as List)[0];
   (ol as List<int>)[0];
-  (ol as Dynamic)[0];
+  (ol as dynamic)[0];
   (ol as String).length;  /// 12: runtime error
   int x = (ol as List<int>)[0];
   (ol as List<int>)[0] = (oi as int);
 
   (os as String).length;
-  (os as Dynamic).length;
+  (os as dynamic).length;
   (oi as String).length;  /// 13: runtime error
   (os as List).length;  /// 14: runtime error
 
diff --git a/tests/language/closure_type_test.dart b/tests/language/closure_type_test.dart
index a3e53e1..13b2ed9 100644
--- a/tests/language/closure_type_test.dart
+++ b/tests/language/closure_type_test.dart
@@ -27,7 +27,7 @@
   try {
     // Because of function subtyping rules, the static return type of a closure
     // call cannot be relied upon for static type analysis. For example, a
-    // function returning Dynamic (function 'root') can be assigned to a closure
+    // function returning dynamic (function 'root') can be assigned to a closure
     // variable declared to return int (closure 'func') and may actually return
     // a double at run-time.
     // Therefore, eliminating the run-time type check would be wrong.
diff --git a/tests/language/dynamic_test.dart b/tests/language/dynamic_test.dart
index 924ccbd..eb7160a 100644
--- a/tests/language/dynamic_test.dart
+++ b/tests/language/dynamic_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.
 //
-// Dart test program testing the use of 'Dynamic' in generic types.
+// Dart test program testing the use of 'dynamic' in generic types.
 // @static-clean
 
 interface Iface<K,V> {
@@ -11,39 +11,39 @@
 class M1<K, V> implements Iface<K, V> {
 }
 
-class M2<K> implements Iface<K, Dynamic> {
+class M2<K> implements Iface<K, dynamic> {
 }
 
-class M3 implements Iface<String, Dynamic> {
+class M3 implements Iface<String, dynamic> {
 }
 
-typedef Dynamic F1<T>(Dynamic x, T y);
+typedef dynamic F1<T>(dynamic x, T y);
 
 class HasFieldDynamic {
-  HasFieldDynamic() : Dynamic = "Dynamic" { }
-  var Dynamic;  // Field named Dynamic is allowed.
+  HasFieldDynamic() : dynamic = "dynamic" { }
+  var dynamic;  // Field named dynamic is allowed.
 }
 
 class HasMethodDynamic {
-  Dynamic() => "Dynamic";  // Method named Dynamic is allowed.
+  dynamic() => "dynamic";  // Method named dynamic is allowed.
 }
 
 main() {
-  M1<Dynamic, Dynamic> m1 = new M1<Dynamic, Dynamic>();
-  Expect.isTrue(m1 is Iface<Dynamic, num>);
-  Expect.isTrue(m1 is Iface<String, Dynamic>);
+  M1<dynamic, dynamic> m1 = new M1<dynamic, dynamic>();
+  Expect.isTrue(m1 is Iface<dynamic, num>);
+  Expect.isTrue(m1 is Iface<String, dynamic>);
   Expect.isTrue(m1 is Iface<String, num>);
   Expect.isTrue(m1 is Iface<num, String>);
 
-  M2<Dynamic> m2 = new M2<Dynamic>();
-  Expect.isTrue(m2 is Iface<Dynamic, num>);
-  Expect.isTrue(m2 is Iface<String, Dynamic>);
+  M2<dynamic> m2 = new M2<dynamic>();
+  Expect.isTrue(m2 is Iface<dynamic, num>);
+  Expect.isTrue(m2 is Iface<String, dynamic>);
   Expect.isTrue(m2 is Iface<String, num>);
   Expect.isTrue(m2 is Iface<num, String>);
 
   M3 m3 = new M3();
-  Expect.isTrue(m3 is Iface<Dynamic, num>);
-  Expect.isTrue(m3 is Iface<String, Dynamic>);
+  Expect.isTrue(m3 is Iface<dynamic, num>);
+  Expect.isTrue(m3 is Iface<String, dynamic>);
   Expect.isTrue(m3 is Iface<String, num>);
   Expect.isTrue(m3 is !Iface<num, String>);
 
@@ -51,13 +51,13 @@
   Expect.isTrue(f1 is F1<int>);
 
   HasFieldDynamic has_field = new HasFieldDynamic();
-  Expect.equals("Dynamic", has_field.Dynamic);
+  Expect.equals("dynamic", has_field.dynamic);
 
   HasMethodDynamic has_method = new HasMethodDynamic();
-  Expect.equals("Dynamic", has_method.Dynamic());
+  Expect.equals("dynamic", has_method.dynamic());
 
   {
-    int Dynamic = 0;  // Local variable named Dynamic is allowed.
-    Expect.equals(0, Dynamic);
+    int dynamic = 0;  // Local variable named dynamic is allowed.
+    Expect.equals(0, dynamic);
   }
 }
diff --git a/tests/language/factory2_negative_test.dart b/tests/language/factory2_negative_test.dart
index 7183ccb..c63a1ca 100644
--- a/tests/language/factory2_negative_test.dart
+++ b/tests/language/factory2_negative_test.dart
@@ -15,5 +15,5 @@
 }
 
 main() {
-  var a = new Link.create();  // Equivalent to new Link<Dynamic>.create().
+  var a = new Link.create();  // Equivalent to new Link<dynamic>.create().
 }
diff --git a/tests/language/factory_redirection_test.dart b/tests/language/factory_redirection_test.dart
index eb8b59c..8491bdd 100644
--- a/tests/language/factory_redirection_test.dart
+++ b/tests/language/factory_redirection_test.dart
@@ -13,7 +13,7 @@
 
   factory A.test01() = T;  /// 01: runtime error
 
-  factory A.test02() = Dynamic;  /// 02: runtime error
+  factory A.test02() = dynamic;  /// 02: runtime error
 
   factory A.test03() = Undefined;  /// 03: runtime error
 
diff --git a/tests/language/generic_instanceof2_test.dart b/tests/language/generic_instanceof2_test.dart
index bb67688..bb4d45f 100644
--- a/tests/language/generic_instanceof2_test.dart
+++ b/tests/language/generic_instanceof2_test.dart
@@ -38,7 +38,7 @@
   var foo_raw = new Foo();
   Expect.isTrue(foo_raw is Foo<int, num>);
   Expect.isTrue(foo_raw is Foo<int, String>);
-  // foo_raw.FooString() returns a Foo<Dynamic, String>
+  // foo_raw.FooString() returns a Foo<dynamic, String>
   Expect.isTrue(foo_raw.FooString() is !Foo<int, num>);
   Expect.isTrue(foo_raw.FooString() is Foo<int, String>);
 
@@ -52,7 +52,7 @@
   var moo_raw = new Moo();
   Expect.isTrue(moo_raw is Moo<int, num>);
   Expect.isTrue(moo_raw is Moo<int, String>);
-  // moo_raw.MooString() returns a Moo<Dynamic, String>
+  // moo_raw.MooString() returns a Moo<dynamic, String>
   Expect.isTrue(moo_raw.MooString() is !Moo<int, num>);
   Expect.isTrue(moo_raw.MooString() is Moo<int, String>);
 }
diff --git a/tests/language/generic_test.dart b/tests/language/generic_test.dart
index 59cba41..6b4236e 100644
--- a/tests/language/generic_test.dart
+++ b/tests/language/generic_test.dart
@@ -47,7 +47,7 @@
     D d = new D();
     Expect.equals(true, d.caa_.b_ is B<AA>);
     Expect.equals(true, d.caa_.b_.isT(const AA()));
-    C c = new C(const AA());  // c is of raw type C, T in C<T> is Dynamic.
+    C c = new C(const AA());  // c is of raw type C, T in C<T> is dynamic.
     Expect.equals(true, c.b_ is B);
     Expect.equals(true, c.b_ is B<AA>);
     Expect.equals(true, c.b_.isT(const AA()));
diff --git a/tests/language/generics2_test.dart b/tests/language/generics2_test.dart
index 943b68e..0a28a2f 100644
--- a/tests/language/generics2_test.dart
+++ b/tests/language/generics2_test.dart
@@ -7,7 +7,7 @@
 
 class A<E> { }
 
-class Pair<P, Q> extends A /* i.e. extends A<Dynamic> */ {
+class Pair<P, Q> extends A /* i.e. extends A<dynamic> */ {
   final P fst;
   final Q snd;
   Pair(this.fst, this.snd);
diff --git a/tests/language/import_core_prefix_test.dart b/tests/language/import_core_prefix_test.dart
index d22bbad..782fdf1 100644
--- a/tests/language/import_core_prefix_test.dart
+++ b/tests/language/import_core_prefix_test.dart
@@ -11,5 +11,5 @@
   mycore.bool boolval = false;
   mycore.int variable = 10;
   mycore.num value = 10;
-  mycore.Dynamic d = null;
+  mycore.dynamic d = null;
 }
diff --git a/tests/language/instanceof3_test.dart b/tests/language/instanceof3_test.dart
index e69eb65..4921a181 100644
--- a/tests/language/instanceof3_test.dart
+++ b/tests/language/instanceof3_test.dart
@@ -65,7 +65,7 @@
     bool got_type_error = false;
     var x = new List();
     try {
-      Expect.isTrue(x is List<UndeclaredType>);  // x is a List<Dynamic>.
+      Expect.isTrue(x is List<UndeclaredType>);  // x is a List<dynamic>.
     } on TypeError catch (error) {
       got_type_error = true;
     }
diff --git a/tests/language/language.status b/tests/language/language.status
index 3f2bad9..4768cab 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -87,6 +87,8 @@
 compile_time_constant_checked3_test/06: Fail, OK
 
 [ $compiler == dartc ]
+black_listed_test/13: Fail # Illegal use of 'dynamic'
+black_listed_test/14: Fail # Illegal use of 'dynamic'
 implicit_this_test/none: Fail # should not warn about allocating SubAbstract2
 metadata_test: Fail
 get_set_syntax_test/none: Fail # does not accept getter/setter with no method body
diff --git a/tests/language/prefix16_test.dart b/tests/language/prefix16_test.dart
index 15cea97..b32b82a 100644
--- a/tests/language/prefix16_test.dart
+++ b/tests/language/prefix16_test.dart
@@ -37,7 +37,7 @@
   {
     bool got_type_error = false;
     try {
-      // In production mode, malformed myFunc is mapped to (Dynamic) => Dynamic.
+      // In production mode, malformed myFunc is mapped to (dynamic) => dynamic.
       Expect.isTrue(((int x) => x) is myFunc);
     } on TypeError catch (error) {
       got_type_error = true;
diff --git a/tests/language/pseudo_kw_illegal_test.dart b/tests/language/pseudo_kw_illegal_test.dart
index 13c042c..5a113a3 100644
--- a/tests/language/pseudo_kw_illegal_test.dart
+++ b/tests/language/pseudo_kw_illegal_test.dart
@@ -6,7 +6,7 @@
 // Pseudo keywords are not allowed to be used as class names.
 class abstract { }    /// 01: compile-time error
 class assert { }      /// 02: compile-time error
-class Dynamic { }     /// 04: compile-time error
+class dynamic { }     /// 04: compile-time error
 class factory { }     /// 05: compile-time error
 class get { }         /// 06: compile-time error
 class implements { }  /// 07: compile-time error
diff --git a/tests/language/pseudo_kw_test.dart b/tests/language/pseudo_kw_test.dart
index 2b764cd..2c9614d 100644
--- a/tests/language/pseudo_kw_test.dart
+++ b/tests/language/pseudo_kw_test.dart
@@ -13,7 +13,7 @@
     var abstract = 0;
     var as = 0;
     var call = 0;
-    var Dynamic = 0;
+    var dynamic = 0;
     var factory = 0;
     var get = 0;
     var implements = 0;
diff --git a/tests/language/setter3_test.dart b/tests/language/setter3_test.dart
index e21ca8c..3253a6e 100644
--- a/tests/language/setter3_test.dart
+++ b/tests/language/setter3_test.dart
@@ -9,7 +9,7 @@
 class A {
   set foo(x) {}
   void set bar(x) {}
-  Dynamic set baz(x) {} /// 01: static type warning
+  dynamic set baz(x) {} /// 01: static type warning
   bool set bob(x) {} /// 02: static type warning
 }
 
diff --git a/tests/language/type_cast_vm_test.dart b/tests/language/type_cast_vm_test.dart
index d95742a..22e3437 100644
--- a/tests/language/type_cast_vm_test.dart
+++ b/tests/language/type_cast_vm_test.dart
@@ -132,7 +132,7 @@
     } on TypeError catch (error) {
       result = 1;
       Expect.equals("int", error.dstType);
-      Expect.equals("() => Dynamic", error.srcType);
+      Expect.equals("() => dynamic", error.srcType);
       Expect.equals("type cast", error.dstName);
       int pos = error.url.lastIndexOf("/", error.url.length);
       if (pos == -1) {
diff --git a/tests/language/type_vm_test.dart b/tests/language/type_vm_test.dart
index d98a181..7b525a1 100644
--- a/tests/language/type_vm_test.dart
+++ b/tests/language/type_vm_test.dart
@@ -124,7 +124,7 @@
     } on TypeError catch (error) {
       result = 1;
       Expect.equals("int", error.dstType);
-      Expect.equals("() => Dynamic", error.srcType);
+      Expect.equals("() => dynamic", error.srcType);
       Expect.equals("i", error.dstName);
       int pos = error.url.lastIndexOf("/", error.url.length);
       if (pos == -1) {
diff --git a/tools/VERSION b/tools/VERSION
index 53e2662..83c6875 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,4 @@
 MAJOR 0
 MINOR 1
-BUILD 4
-PATCH 1
+BUILD 5
+PATCH 0
diff --git a/utils/compiler/buildbot.py b/utils/compiler/buildbot.py
index cee9ce3..a66d6b0 100644
--- a/utils/compiler/buildbot.py
+++ b/utils/compiler/buildbot.py
@@ -296,7 +296,7 @@
 
   return 0
 
-def _DeleteFirefoxProfiles(directory):
+def _DeleteTempWebdriverProfiles(directory):
   """Find all the firefox profiles in a particular directory and delete them."""
   for f in os.listdir(directory):
     item = os.path.join(directory, f)
@@ -324,12 +324,12 @@
   if system == 'win7':
     shutil.rmtree('C:\\Users\\chrome-bot\\AppData\\Local\\Temp',
         ignore_errors=True)
-  elif browser == 'ff':
+  elif browser == 'ff' or 'opera':
     # Note: the buildbots run as root, so we can do this without requiring a
     # password. The command won't actually work on regular machines without
     # root permissions.
-    _DeleteFirefoxProfiles('/tmp')
-    _DeleteFirefoxProfiles('/var/tmp')
+    _DeleteTempWebdriverProfiles('/tmp')
+    _DeleteTempWebdriverProfiles('/var/tmp')
 
 def ClobberBuilder(mode):
   """ Clobber the builder before we do the build.
