diff --git a/lib/compiler/implementation/closure.dart b/lib/compiler/implementation/closure.dart
index 6e11253..be78e41 100644
--- a/lib/compiler/implementation/closure.dart
+++ b/lib/compiler/implementation/closure.dart
@@ -312,9 +312,12 @@
       // We still need to visit the right-hand sides of the init-assignments.
       // For SendSets don't visit the left again. Otherwise it would be marked
       // as mutated.
-      if (definition is SendSet) {
-        SendSet assignment = definition;
-        visit(assignment.argumentsNode);
+      if (definition is Send) {
+        Send assignment = definition;
+        Node arguments = assignment.argumentsNode;
+        if (arguments != null) {
+          visit(arguments);
+        }
       } else {
         visit(definition);
       }
diff --git a/lib/compiler/implementation/scanner/class_element_parser.dart b/lib/compiler/implementation/scanner/class_element_parser.dart
index b2a4b03..cd1ae54 100644
--- a/lib/compiler/implementation/scanner/class_element_parser.dart
+++ b/lib/compiler/implementation/scanner/class_element_parser.dart
@@ -99,6 +99,10 @@
       bool isUnary = operator.token.next.next.stringValue === ')';
       return Elements.constructOperatorName(operator.source, isUnary);
     } else {
+      if (receiver == null) {
+        listener.cancel('library prefix in named factory constructor not '
+                        'implemented', node: send.receiver);
+      }
       return Elements.constructConstructorName(receiver.source,
                                                selector.source);
     }
diff --git a/lib/compiler/implementation/scanner/listener.dart b/lib/compiler/implementation/scanner/listener.dart
index 424d17f..a989ef4 100644
--- a/lib/compiler/implementation/scanner/listener.dart
+++ b/lib/compiler/implementation/scanner/listener.dart
@@ -1663,11 +1663,17 @@
                         Token endToken) {
     Statement body = popNode();
     NodeList formals = popNode();
-    NodeList typeParameters = popNode(); // TODO(karlklose): don't throw away.
-    Node name = popNode();
+    // TODO(karlklose): don't throw type parameters away.
+    NodeList typeParameters;
+    Node name;
     if (periodBeforeName !== null) {
+      name = popNode();
+      typeParameters = popNode();
       // A library prefix was handled in [handleQualified].
       name = new Send(popNode(), name);
+    } else {
+      typeParameters = popNode();
+      name = popNode();
     }
     // TODO(ahe): Move this parsing to the parser.
     int modifierCount = 0;
diff --git a/lib/compiler/implementation/scanner/parser.dart b/lib/compiler/implementation/scanner/parser.dart
index a276ebe..54ebdd5 100644
--- a/lib/compiler/implementation/scanner/parser.dart
+++ b/lib/compiler/implementation/scanner/parser.dart
@@ -2135,6 +2135,7 @@
   Token parseAssertStatement(Token token) {
     Token assertKeyword = token;
     token = expect('assert', token);
+    expect('(', token);
     token = parseArguments(token);
     listener.handleAssertStatement(assertKeyword, token);
     return expectSemicolon(token);
diff --git a/lib/compiler/implementation/tree/unparser.dart b/lib/compiler/implementation/tree/unparser.dart
index 8eda637..a99854a 100644
--- a/lib/compiler/implementation/tree/unparser.dart
+++ b/lib/compiler/implementation/tree/unparser.dart
@@ -270,7 +270,8 @@
     if (!node.isPrefix && !node.isIndex) visit(node.selector);
     if (spacesNeeded) sb.add(' ');
     // Also add a space for sequences like x + +1 and y - -y.
-    if (opString === '-' || opString === '+') {
+    // TODO(ahe): remove case for '+' when we drop the support for it.
+    if (node.argumentsNode != null && (opString === '-' || opString === '+')) {
       Token beginToken = node.argumentsNode.getBeginToken();
       if (beginToken !== null && beginToken.stringValue === opString) {
         sb.add(' ');
diff --git a/runtime/lib/mirrors.cc b/runtime/lib/mirrors.cc
index 6502549..179264b 100644
--- a/runtime/lib/mirrors.cc
+++ b/runtime/lib/mirrors.cc
@@ -1022,27 +1022,32 @@
 
 void NATIVE_ENTRY_FUNCTION(Mirrors_makeLocalMirrorSystem)(
     Dart_NativeArguments args) {
+  Dart_EnterScope();
   Dart_Handle mirrors = CreateMirrorSystem();
   if (Dart_IsError(mirrors)) {
     Dart_PropagateError(mirrors);
   }
   Dart_SetReturnValue(args, mirrors);
+  Dart_ExitScope();
 }
 
 
 void NATIVE_ENTRY_FUNCTION(Mirrors_makeLocalInstanceMirror)(
     Dart_NativeArguments args) {
+  Dart_EnterScope();
   Dart_Handle reflectee = Dart_GetNativeArgument(args, 0);
   Dart_Handle mirror = CreateInstanceMirror(reflectee);
   if (Dart_IsError(mirror)) {
     Dart_PropagateError(mirror);
   }
   Dart_SetReturnValue(args, mirror);
+  Dart_ExitScope();
 }
 
 
 void NATIVE_ENTRY_FUNCTION(LocalObjectMirrorImpl_invoke)(
     Dart_NativeArguments args) {
+  Dart_EnterScope();
   Dart_Handle mirror = Dart_GetNativeArgument(args, 0);
   Dart_Handle member = Dart_GetNativeArgument(args, 1);
   // The wrapped arguments are either simple values or instance mirrors.
@@ -1067,11 +1072,13 @@
     Dart_PropagateError(wrapped_result);
   }
   Dart_SetReturnValue(args, wrapped_result);
+  Dart_ExitScope();
 }
 
 
 void NATIVE_ENTRY_FUNCTION(LocalObjectMirrorImpl_getField)(
     Dart_NativeArguments args) {
+  Dart_EnterScope();
   Dart_Handle mirror = Dart_GetNativeArgument(args, 0);
   Dart_Handle fieldName = Dart_GetNativeArgument(args, 1);
 
@@ -1088,11 +1095,13 @@
     Dart_PropagateError(wrapped_result);
   }
   Dart_SetReturnValue(args, wrapped_result);
+  Dart_ExitScope();
 }
 
 
 void NATIVE_ENTRY_FUNCTION(LocalObjectMirrorImpl_setField)(
     Dart_NativeArguments args) {
+  Dart_EnterScope();
   Dart_Handle mirror = Dart_GetNativeArgument(args, 0);
   Dart_Handle fieldName = Dart_GetNativeArgument(args, 1);
   // The wrapped argument is either a simple value or instance mirror.
@@ -1115,11 +1124,13 @@
     Dart_PropagateError(wrapped_result);
   }
   Dart_SetReturnValue(args, wrapped_result);
+  Dart_ExitScope();
 }
 
 
 void NATIVE_ENTRY_FUNCTION(LocalClosureMirrorImpl_apply)(
     Dart_NativeArguments args) {
+  Dart_EnterScope();
   Dart_Handle mirror = Dart_GetNativeArgument(args, 0);
   // The wrapped arguments are either simple values or instance mirrors.
   Dart_Handle wrapped_invoke_args = Dart_GetNativeArgument(args, 1);
@@ -1143,11 +1154,13 @@
     Dart_PropagateError(wrapped_result);
   }
   Dart_SetReturnValue(args, wrapped_result);
+  Dart_ExitScope();
 }
 
 
 void NATIVE_ENTRY_FUNCTION(LocalClassMirrorImpl_invokeConstructor)(
     Dart_NativeArguments args) {
+  Dart_EnterScope();
   Dart_Handle klass_mirror = Dart_GetNativeArgument(args, 0);
   Dart_Handle constructor_name = Dart_GetNativeArgument(args, 1);
   // The wrapped arguments are either simple values or instance mirrors.
@@ -1174,6 +1187,7 @@
     Dart_PropagateError(wrapped_result);
   }
   Dart_SetReturnValue(args, wrapped_result);
+  Dart_ExitScope();
 }
 
 
diff --git a/tests/co19/co19-dart2dart.status b/tests/co19/co19-dart2dart.status
index d9365ce..38b88e3 100644
--- a/tests/co19/co19-dart2dart.status
+++ b/tests/co19/co19-dart2dart.status
@@ -159,7 +159,6 @@
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A09_t01: Fail # http://dartbug.com/5519
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A15_t07: Fail # inherited from VM
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A21_t01: Fail # http://dartbug.com/5519
-Language/07_Classes/6_Constructors/2_Factories_A01_t01: Crash # inherited from dart2js
 Language/07_Classes/6_Constructors/2_Factories_A06_t05: Fail # inherited from VM
 Language/07_Classes/6_Constructors/2_Factories_A06_t06: Fail # inherited from VM
 Language/07_Classes/6_Constructors/2_Factories_A07_t01: Fail # inherited from VM
@@ -563,6 +562,8 @@
 
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A16_t07: Fail # Redirecting constructors can not use initializing formals. This bug was previously masked - compilation failed, but for different, wrong reason.
 
+Language/07_Classes/6_Constructors/2_Factories_A01_t01: Fail, OK # Uses deprecated factory syntax.
+
 [ $compiler == dart2dart && $system == windows ]
 LibTest/core/double/operator_remainder_A01_t04: Fail # Result is NaN
 LibTest/core/double/round_A01_t01: Fail # Result is NaN
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 5750632..bcb41de 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -6,8 +6,6 @@
 # Crashes first, please. Then untriaged bugs. There is a section below
 # for co19 bugs.
 [ $compiler == dart2js ]
-Language/07_Classes/6_Constructors/2_Factories_A01_t01: Crash # http://dartbug.com/5017
-
 Language/03_Overview/1_Scoping_A02_t06: Fail # TODO(ahe): Please triage this failure.
 Language/06_Functions/06_Functions_A01_t22: Fail # TODO(ahe): Please triage this failure.
 Language/07_Classes/07_Classes_A03_t01: Fail # TODO(ahe): Please triage this failure.
@@ -353,6 +351,8 @@
 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/07_Classes/6_Constructors/2_Factories_A01_t01: Fail, OK # Uses deprecated factory syntax.
+
 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
 Language/06_Functions/2_Formal_Parameters/2_Optional_Formals_A01_t14: Fail, OK # co19 issue 210
diff --git a/tests/compiler/dart2js/unparser_test.dart b/tests/compiler/dart2js/unparser_test.dart
index af53532..bb824b3 100644
--- a/tests/compiler/dart2js/unparser_test.dart
+++ b/tests/compiler/dart2js/unparser_test.dart
@@ -246,6 +246,7 @@
 testClassDeclarations() {
   testUnparseTopLevelWithMetadata('class Foo{}');
   testUnparseTopLevelWithMetadata('abstract class Foo{}');
+  testUnparseTopLevelWithMetadata('class Fisk{operator-(x){}}');
 }
 
 main() {
diff --git a/tests/language/function_type_parameter_test.dart b/tests/language/function_type_parameter_test.dart
index c839a03..3f23daf 100644
--- a/tests/language/function_type_parameter_test.dart
+++ b/tests/language/function_type_parameter_test.dart
@@ -6,6 +6,8 @@
 // default value.
 
 class A {
+  final f;
+  A(int this.f());
 
   static Function func;
 
@@ -22,4 +24,6 @@
   Expect.equals("1234", A.func(1230 + 4));
   A.SetFunc();
   Expect.equals(null, A.func);
+
+  Expect.equals(42, new A(() => 42).f());
 }
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index f17d87c..eed6019 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -86,7 +86,6 @@
 
 getter_declaration_negative_test: Fail # This will be fixed when dart2js reject old getter syntax.
 
-function_type_this_parameter_test: Crash # Issue 4417.
 compile_time_constant8_test: Fail # We don't take the generic type into account yet.
 canonical_const_test: Fail # We don't take the generic type into account yet.
 
diff --git a/tools/VERSION b/tools/VERSION
index 9ff3a0a..194bfe1 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,4 @@
 MAJOR 0
 MINOR 1
-BUILD 5
-PATCH 1
+BUILD 6
+PATCH 0
diff --git a/tools/create_sdk.py b/tools/create_sdk.py
index b8e5e1e..237c696 100755
--- a/tools/create_sdk.py
+++ b/tools/create_sdk.py
@@ -103,12 +103,12 @@
   Copy(src, dest)
 
 
-def CopyDart2Js(build_dir, sdk_root, revision):
-  if revision:
+def CopyDart2Js(build_dir, sdk_root, version):
+  if version:
     ReplaceInFiles([os.path.join(sdk_root, 'pkg', 'compiler',
                                  'implementation', 'compiler.dart')],
                    [(r"BUILD_ID = 'build number could not be determined'",
-                     r"BUILD_ID = '%s'" % revision)])
+                     r"BUILD_ID = '%s'" % version)])
   if utils.GuessOS() == 'win32':
     dart2js = os.path.join(sdk_root, 'bin', 'dart2js.bat')
     Copy(os.path.join(build_dir, 'dart2js.bat'), dart2js)
@@ -318,15 +318,15 @@
          "var pathTo7zip = '7zip/7za.exe';"),
       ])
 
-  revision = utils.GetSVNRevision()
+  version = utils.GetVersion()
 
   # Copy dart2js.
-  CopyDart2Js(build_dir, SDK_tmp, revision)
+  CopyDart2Js(build_dir, SDK_tmp, version)
 
-  # Write the 'revision' file
-  if revision is not None:
-    with open(os.path.join(SDK_tmp, 'revision'), 'w') as f:
-      f.write(revision + '\n')
+  # Write the 'version' file
+  if version is not None:
+    with open(os.path.join(SDK_tmp, 'version'), 'w') as f:
+      f.write(version + '\n')
       f.close()
 
   Copy(join(HOME, 'README.dart-sdk'), join(SDK_tmp, 'README'))
diff --git a/tools/utils.py b/tools/utils.py
index 2ae3821..dee1c8a 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -152,6 +152,14 @@
 def GetBaseDir():
   return BASE_DIR
 
+def GetVersion():
+  dartbin = DartBinary()
+  version_script = VersionScript()
+  p = subprocess.Popen([dartbin, version_script], stdout = subprocess.PIPE,
+      stderr = subprocess.STDOUT, shell=IsWindows())
+  output, not_used = p.communicate()
+  return output.strip()
+
 def GetSVNRevision():
   p = subprocess.Popen(['svn', 'info'], stdout = subprocess.PIPE,
       stderr = subprocess.STDOUT, shell=IsWindows())
@@ -297,6 +305,11 @@
     os.utime(name, None)
 
 
+def VersionScript():
+  tools_dir = os.path.dirname(os.path.realpath(__file__))
+  return os.path.join(tools_dir, 'version.dart')
+
+
 def DartBinary():
   tools_dir = os.path.dirname(os.path.realpath(__file__))
   dart_binary_prefix = os.path.join(tools_dir, 'testing', 'bin')
