diff --git a/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.java b/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.java
index 37dad0a..83b6631 100644
--- a/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.java
+++ b/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.java
@@ -116,7 +116,7 @@
 
   @Override
   public DartDeclaration<?> getNode() {
-    return (DartClass) super.getNode();
+    return (DartDeclaration<?>) super.getNode();
   }
 
   @Override
diff --git a/sdk/lib/_internal/dartdoc/test/dartdoc_search_test.dart b/sdk/lib/_internal/dartdoc/test/dartdoc_search_test.dart
index 7731a2b..9374c06 100644
--- a/sdk/lib/_internal/dartdoc/test/dartdoc_search_test.dart
+++ b/sdk/lib/_internal/dartdoc/test/dartdoc_search_test.dart
@@ -1,53 +1,53 @@
-// Copyright (c) 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 dartdoc_search_test;
-
-// TODO(rnystrom): Use "package:" URL (#4968).
-import '../../../../../pkg/expect/lib/expect.dart';
-import '../lib/src/dartdoc/nav.dart';
-import '../lib/src/client/search.dart';
-
-const String URL = 'dummy-url';
-
-testTopLevelVsMembers() {
-	var search = new SearchText('timer');
-	var match = obtainMatch(search, 'timer');
-	// Matching a top-level field 'timer';
-	var topLevelResult = new Result(match, FIELD, URL);
-	// Matching a member field 'timer' in 'Foo';
-	var memberResult = new Result(match, FIELD, URL, type: 'Foo');
-	Expect.equals(-1, resultComparator(topLevelResult, memberResult),
-		"Top level fields should be preferred to member fields");
-}
-
-testTopLevelFullVsPrefix() {
-	var search = new SearchText('cancel');
-	var fullMatch = obtainMatch(search, 'cancel');
-	var prefixMatch = obtainMatch(search, 'cancelable');
-	// Matching a top-level method 'cancel';
-	var fullResult = new Result(fullMatch, METHOD, URL);
-	// Matching a top-level method 'cancelable';
-	var prefixResult = new Result(prefixMatch, METHOD, URL);
-	Expect.equals(-1, resultComparator(fullResult, prefixResult),
-		"Full matches should be preferred to prefix matches");
-}
-
-testMemberFullVsPrefix() {
-	var search = new SearchText('cancel');
-	var fullMatch = obtainMatch(search, 'cancel');
-	var prefixMatch = obtainMatch(search, 'cancelable');
-	// Matching a member method 'cancel' in 'Isolate';
-	var fullResult = new Result(fullMatch, METHOD, URL, type: 'Isolate');
-	// Matching a member field 'cancelable' in 'Event';
-	var prefixResult = new Result(prefixMatch, FIELD, URL, type: 'Event');
-	Expect.equals(-1, resultComparator(fullResult, prefixResult),
-		"Full matches should be preferred to prefix matches");
-}
-
-void main() {
-	testTopLevelVsMembers();
-	testTopLevelFullVsPrefix();
-	testMemberFullVsPrefix();
-}
+// Copyright (c) 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 dartdoc_search_test;
+
+// TODO(rnystrom): Use "package:" URL (#4968).
+import '../../../../../pkg/expect/lib/expect.dart';
+import '../lib/src/dartdoc/nav.dart';
+import '../lib/src/client/search.dart';
+
+const String URL = 'dummy-url';
+
+testTopLevelVsMembers() {
+	var search = new SearchText('timer');
+	var match = obtainMatch(search, 'timer');
+	// Matching a top-level field 'timer';
+	var topLevelResult = new Result(match, FIELD, URL);
+	// Matching a member field 'timer' in 'Foo';
+	var memberResult = new Result(match, FIELD, URL, type: 'Foo');
+	Expect.equals(-1, resultComparator(topLevelResult, memberResult),
+		"Top level fields should be preferred to member fields");
+}
+
+testTopLevelFullVsPrefix() {
+	var search = new SearchText('cancel');
+	var fullMatch = obtainMatch(search, 'cancel');
+	var prefixMatch = obtainMatch(search, 'cancelable');
+	// Matching a top-level method 'cancel';
+	var fullResult = new Result(fullMatch, METHOD, URL);
+	// Matching a top-level method 'cancelable';
+	var prefixResult = new Result(prefixMatch, METHOD, URL);
+	Expect.equals(-1, resultComparator(fullResult, prefixResult),
+		"Full matches should be preferred to prefix matches");
+}
+
+testMemberFullVsPrefix() {
+	var search = new SearchText('cancel');
+	var fullMatch = obtainMatch(search, 'cancel');
+	var prefixMatch = obtainMatch(search, 'cancelable');
+	// Matching a member method 'cancel' in 'Isolate';
+	var fullResult = new Result(fullMatch, METHOD, URL, type: 'Isolate');
+	// Matching a member field 'cancelable' in 'Event';
+	var prefixResult = new Result(prefixMatch, FIELD, URL, type: 'Event');
+	Expect.equals(-1, resultComparator(fullResult, prefixResult),
+		"Full matches should be preferred to prefix matches");
+}
+
+void main() {
+	testTopLevelVsMembers();
+	testTopLevelFullVsPrefix();
+	testMemberFullVsPrefix();
+}
diff --git a/tests/compiler/dart2js_extra/this_redirecting_constructor_test.dart b/tests/compiler/dart2js_extra/this_redirecting_constructor_test.dart
index 068d62f..101aa1c 100644
--- a/tests/compiler/dart2js_extra/this_redirecting_constructor_test.dart
+++ b/tests/compiler/dart2js_extra/this_redirecting_constructor_test.dart
@@ -1,21 +1,21 @@
-// 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.
-
-import "package:expect/expect.dart";
-
-// Confirm that redirecting named constructors are properly resolved.
-//
-// Note that this test may become invalid due to http://dartbug.com/5940.
-
-class C {
-  var x;
-  C() { x = 1; }
-  C.C() { x = 2; }
-  C.redirecting(): this.C();
-}
-
-main() {
-  var c = new C.redirecting();
-  Expect.equals(c.x, 2);
-}
+// 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.
+
+import "package:expect/expect.dart";
+
+// Confirm that redirecting named constructors are properly resolved.
+//
+// Note that this test may become invalid due to http://dartbug.com/5940.
+
+class C {
+  var x;
+  C() { x = 1; }
+  C.C() { x = 2; }
+  C.redirecting(): this.C();
+}
+
+main() {
+  var c = new C.redirecting();
+  Expect.equals(c.x, 2);
+}
diff --git a/tools/VERSION b/tools/VERSION
index 824f40a..f7dcd55 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,4 @@
 MAJOR 0
 MINOR 4
 BUILD 7
-PATCH 1
+PATCH 3
