diff --git a/DEPS b/DEPS
index 0ca12c9..8f64f6c 100644
--- a/DEPS
+++ b/DEPS
@@ -46,7 +46,7 @@
   "chrome_rev" : "@19997",
   "clang_rev" : "@28450",
   "cli_util_tag" : "@0.0.1+2",
-  "collection_rev": "@1da9a07f32efa2ba0c391b289e2037391e31da0e",
+  "collection_rev": "@f6135e6350c63eb3f4dd12953b8d4363faff16fc",
   "crypto_rev" : "@2df57a1e26dd88e8d0614207d4b062c73209917d",
   "csslib_tag" : "@0.12.0",
   "dart2js_info_rev" : "@0a221eaf16aec3879c45719de656680ccb80d8a1",
diff --git a/pkg/analysis_server/lib/src/provisional/completion/dart/completion_plugin.dart b/pkg/analysis_server/lib/src/provisional/completion/dart/completion_plugin.dart
index 2b73a30..014c270 100644
--- a/pkg/analysis_server/lib/src/provisional/completion/dart/completion_plugin.dart
+++ b/pkg/analysis_server/lib/src/provisional/completion/dart/completion_plugin.dart
@@ -10,6 +10,7 @@
 import 'package:analysis_server/src/services/completion/dart/arglist_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/combinator_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
+import 'package:analysis_server/src/services/completion/dart/field_formal_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/keyword_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/uri_contributor.dart';
 import 'package:plugin/plugin.dart';
@@ -72,6 +73,8 @@
     registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID,
         () => new CombinatorContributor());
     registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID,
+        () => new FieldFormalContributor());
+    registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID,
         () => new KeywordContributor());
     registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID,
         () => new UriContributor());
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart
new file mode 100644
index 0000000..f708685
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart
@@ -0,0 +1,89 @@
+// Copyright (c) 2014, 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 services.completion.contributor.dart.field_formal;
+
+import 'dart:async';
+
+import 'package:analysis_server/src/protocol_server.dart'
+    hide Element, ElementKind;
+import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
+import 'package:analyzer/src/generated/ast.dart';
+
+/**
+ * A contributor for calculating invocation / access suggestions
+ * `completion.getSuggestions` request results.
+ */
+class FieldFormalContributor extends DartCompletionContributor {
+  @override
+  Future<List<CompletionSuggestion>> computeSuggestions(
+      DartCompletionRequest request) async {
+    if (request.target.containingNode is! FieldFormalParameter) {
+      return EMPTY_LIST;
+    }
+
+    // Partially resolve the compilation unit
+    CompilationUnit unit = await request.resolveDeclarationsInScope();
+    // Gracefully degrade if the compilation unit could not be resolved
+    // e.g. detached part file or source change
+    if (unit == null) {
+      return EMPTY_LIST;
+    }
+
+    // Recompute the target since resolution may have changed it
+    AstNode node = request.target.containingNode;
+    if (node is! FieldFormalParameter) {
+      return EMPTY_LIST;
+    }
+
+    // If this is a constructor declaration
+    // then compute fields already referenced
+    ConstructorDeclaration constructorDecl =
+        node.getAncestor((p) => p is ConstructorDeclaration);
+    if (constructorDecl == null) {
+      return EMPTY_LIST;
+    }
+
+    // Compute the list of fields already referenced in the constructor
+    List<String> referencedFields = new List<String>();
+    for (FormalParameter param in constructorDecl.parameters.parameters) {
+      if (param is FieldFormalParameter) {
+        SimpleIdentifier fieldId = param.identifier;
+        if (fieldId != null && fieldId != request.target.entity) {
+          String fieldName = fieldId.name;
+          if (fieldName != null && fieldName.length > 0) {
+            referencedFields.add(fieldName);
+          }
+        }
+      }
+    }
+
+    // Add suggestions for fields that are not already referenced
+    ClassDeclaration classDecl =
+        constructorDecl.getAncestor((p) => p is ClassDeclaration);
+    List<CompletionSuggestion> suggestions = <CompletionSuggestion>[];
+    for (ClassMember member in classDecl.members) {
+      if (member is FieldDeclaration && !member.isStatic) {
+        for (VariableDeclaration varDecl in member.fields.variables) {
+          SimpleIdentifier fieldId = varDecl.name;
+          if (fieldId != null) {
+            String fieldName = fieldId.name;
+            if (fieldName != null && fieldName.length > 0) {
+              if (!referencedFields.contains(fieldName)) {
+                CompletionSuggestion suggestion = createSuggestion(
+                    fieldId.bestElement,
+                    relevance: DART_RELEVANCE_LOCAL_FIELD);
+                if (suggestion != null) {
+                  suggestions.add(suggestion);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    return suggestions;
+  }
+}
diff --git a/pkg/analysis_server/lib/src/services/completion/prefixed_element_contributor.dart b/pkg/analysis_server/lib/src/services/completion/prefixed_element_contributor.dart
index 5a52da8..b6fe585 100644
--- a/pkg/analysis_server/lib/src/services/completion/prefixed_element_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/prefixed_element_contributor.dart
@@ -96,73 +96,6 @@
 }
 
 /**
- * A suggestion builder for 'this.' constructor arguments.
- */
-class _FieldFormalSuggestionBuilder implements SuggestionBuilder {
-  final DartCompletionRequest request;
-
-  _FieldFormalSuggestionBuilder(this.request);
-
-  @override
-  bool computeFast(AstNode node) {
-    if (node is FieldFormalParameter) {
-      ConstructorDeclaration constructorDecl =
-          node.getAncestor((p) => p is ConstructorDeclaration);
-      if (constructorDecl != null) {
-        // Compute fields already referenced
-        List<String> referencedFields = new List<String>();
-        for (FormalParameter param in constructorDecl.parameters.parameters) {
-          if (param is FieldFormalParameter) {
-            SimpleIdentifier fieldId = param.identifier;
-            if (fieldId != null && fieldId != request.target.entity) {
-              String fieldName = fieldId.name;
-              if (fieldName != null && fieldName.length > 0) {
-                referencedFields.add(fieldName);
-              }
-            }
-          }
-        }
-
-        // Add suggestions for fields that are not already referenced
-        ClassDeclaration classDecl =
-            constructorDecl.getAncestor((p) => p is ClassDeclaration);
-        for (ClassMember member in classDecl.members) {
-          if (member is FieldDeclaration && !member.isStatic) {
-            for (VariableDeclaration varDecl in member.fields.variables) {
-              SimpleIdentifier fieldId = varDecl.name;
-              if (fieldId != null) {
-                String fieldName = fieldId.name;
-                if (fieldName != null && fieldName.length > 0) {
-                  if (!referencedFields.contains(fieldName)) {
-                    CompletionSuggestion suggestion =
-                        createFieldSuggestion(request.source, member, varDecl);
-                    if (suggestion != null) {
-                      request.addSuggestion(suggestion);
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    } else {
-      // This should never be called with a case not handled above.
-      assert(false);
-    }
-    return true;
-  }
-
-  @override
-  Future<bool> computeFull(AstNode node) {
-    // This should never be called; we should always be able to compute
-    // suggestions and return true in computeFast method.
-    assert(false);
-    return null;
-  }
-}
-
-/**
  * An [AstNode] vistor for determining which suggestion builder
  * should be used to build invocation/access suggestions.
  */
@@ -179,11 +112,6 @@
   }
 
   @override
-  SuggestionBuilder visitFieldFormalParameter(FieldFormalParameter node) {
-    return new _FieldFormalSuggestionBuilder(request);
-  }
-
-  @override
   SuggestionBuilder visitMethodInvocation(MethodInvocation node) {
     return new _ExpressionSuggestionBuilder(request);
   }
diff --git a/pkg/analysis_server/test/services/completion/completion_test_util.dart b/pkg/analysis_server/test/services/completion/completion_test_util.dart
index 29108ca..63180b7 100644
--- a/pkg/analysis_server/test/services/completion/completion_test_util.dart
+++ b/pkg/analysis_server/test/services/completion/completion_test_util.dart
@@ -4418,10 +4418,9 @@
     return computeFull((bool result) {
       expect(request.replacementOffset, completionOffset);
       expect(request.replacementLength, 0);
-      assertSuggestInvocationField('b', null,
-          relevance: DART_RELEVANCE_LOCAL_FIELD);
-      assertSuggestInvocationField('_c', 'X',
-          relevance: DART_RELEVANCE_LOCAL_FIELD);
+      // Contributed by FieldFormalConstructorContributor
+      assertNotSuggested('b');
+      assertNotSuggested('_c');
       assertNotSuggested('sb');
       assertNotSuggested('d');
       assertNotSuggested('_e');
@@ -4458,10 +4457,9 @@
     return computeFull((bool result) {
       expect(request.replacementOffset, completionOffset - 1);
       expect(request.replacementLength, 1);
-      assertSuggestInvocationField('b', null,
-          relevance: DART_RELEVANCE_LOCAL_FIELD);
-      assertSuggestInvocationField('_c', 'X',
-          relevance: DART_RELEVANCE_LOCAL_FIELD);
+      // Contributed by FieldFormalConstructorContributor
+      assertNotSuggested('b');
+      assertNotSuggested('_c');
       assertNotSuggested('d');
       assertNotSuggested('_e');
       assertNotSuggested('f');
@@ -4497,10 +4495,9 @@
     return computeFull((bool result) {
       expect(request.replacementOffset, completionOffset);
       expect(request.replacementLength, 1);
-      assertSuggestInvocationField('b', null,
-          relevance: DART_RELEVANCE_LOCAL_FIELD);
-      assertSuggestInvocationField('_c', 'X',
-          relevance: DART_RELEVANCE_LOCAL_FIELD);
+      // Contributed by FieldFormalConstructorContributor
+      assertNotSuggested('b');
+      assertNotSuggested('_c');
       assertNotSuggested('d');
       assertNotSuggested('_e');
       assertNotSuggested('f');
@@ -4537,8 +4534,8 @@
       expect(request.replacementOffset, completionOffset);
       expect(request.replacementLength, 0);
       assertNotSuggested('b');
-      assertSuggestInvocationField('_c', 'X',
-          relevance: DART_RELEVANCE_LOCAL_FIELD);
+      // Contributed by FieldFormalConstructorContributor
+      assertNotSuggested('_c');
       assertNotSuggested('d');
       assertNotSuggested('_e');
       assertNotSuggested('f');
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
index c08a073..d75024b 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
@@ -160,6 +160,62 @@
     return cs;
   }
 
+  CompletionSuggestion assertSuggestConstructor(String name,
+      {int relevance: DART_RELEVANCE_DEFAULT,
+      String importUri,
+      int elemOffset}) {
+    CompletionSuggestion cs = assertSuggest(name,
+        relevance: relevance, importUri: importUri, elemOffset: elemOffset);
+    protocol.Element element = cs.element;
+    expect(element, isNotNull);
+    expect(element.kind, equals(protocol.ElementKind.CONSTRUCTOR));
+    int index = name.indexOf('.');
+    expect(element.name, index >= 0 ? name.substring(index + 1) : '');
+    return cs;
+  }
+
+  CompletionSuggestion assertSuggestEnum(String completion,
+      {bool isDeprecated: false}) {
+    CompletionSuggestion suggestion =
+        assertSuggest(completion, isDeprecated: isDeprecated);
+    expect(suggestion.isDeprecated, isDeprecated);
+    expect(suggestion.element.kind, protocol.ElementKind.ENUM);
+    return suggestion;
+  }
+
+  CompletionSuggestion assertSuggestEnumConst(String completion,
+      {bool isDeprecated: false}) {
+    CompletionSuggestion suggestion =
+        assertSuggest(completion, isDeprecated: isDeprecated);
+    expect(suggestion.isDeprecated, isDeprecated);
+    expect(suggestion.element.kind, protocol.ElementKind.ENUM_CONSTANT);
+    return suggestion;
+  }
+
+  CompletionSuggestion assertSuggestField(String name, String type,
+      {int relevance: DART_RELEVANCE_DEFAULT,
+      String importUri,
+      CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
+      bool isDeprecated: false}) {
+    CompletionSuggestion cs = assertSuggest(name,
+        csKind: kind,
+        relevance: relevance,
+        importUri: importUri,
+        elemKind: protocol.ElementKind.FIELD,
+        isDeprecated: isDeprecated);
+    // The returnType represents the type of a field
+    expect(cs.returnType, type != null ? type : 'dynamic');
+    protocol.Element element = cs.element;
+    expect(element, isNotNull);
+    expect(element.kind, equals(protocol.ElementKind.FIELD));
+    expect(element.name, equals(name));
+    expect(element.parameters, isNull);
+    // The returnType represents the type of a field
+    expect(element.returnType, type != null ? type : 'dynamic');
+    assertHasNoParameterInfo(cs);
+    return cs;
+  }
+
   CompletionSuggestion assertSuggestFunction(String name, String returnType,
       {CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
       bool deprecated: false,
@@ -214,6 +270,78 @@
     return cs;
   }
 
+  CompletionSuggestion assertSuggestGetter(String name, String returnType,
+      {int relevance: DART_RELEVANCE_DEFAULT,
+      String importUri,
+      CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
+      bool isDeprecated: false}) {
+    CompletionSuggestion cs = assertSuggest(name,
+        csKind: kind,
+        relevance: relevance,
+        importUri: importUri,
+        elemKind: protocol.ElementKind.GETTER,
+        isDeprecated: isDeprecated);
+    expect(cs.returnType, returnType != null ? returnType : 'dynamic');
+    protocol.Element element = cs.element;
+    expect(element, isNotNull);
+    expect(element.kind, equals(protocol.ElementKind.GETTER));
+    expect(element.name, equals(name));
+    expect(element.parameters, isNull);
+    expect(element.returnType,
+        equals(returnType != null ? returnType : 'dynamic'));
+    assertHasNoParameterInfo(cs);
+    return cs;
+  }
+
+  CompletionSuggestion assertSuggestMethod(
+      String name, String declaringType, String returnType,
+      {int relevance: DART_RELEVANCE_DEFAULT,
+      String importUri,
+      CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
+      bool isDeprecated: false}) {
+    CompletionSuggestion cs = assertSuggest(name,
+        csKind: kind,
+        relevance: relevance,
+        importUri: importUri,
+        isDeprecated: isDeprecated);
+    expect(cs.declaringType, equals(declaringType));
+    expect(cs.returnType, returnType != null ? returnType : 'dynamic');
+    protocol.Element element = cs.element;
+    expect(element, isNotNull);
+    expect(element.kind, equals(protocol.ElementKind.METHOD));
+    expect(element.name, equals(name));
+    String param = element.parameters;
+    expect(param, isNotNull);
+    expect(param[0], equals('('));
+    expect(param[param.length - 1], equals(')'));
+    expect(element.returnType, returnType != null ? returnType : 'dynamic');
+    assertHasParameterInfo(cs);
+    return cs;
+  }
+
+  CompletionSuggestion assertSuggestSetter(String name,
+      [int relevance = DART_RELEVANCE_DEFAULT,
+      String importUri,
+      CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
+    CompletionSuggestion cs = assertSuggest(name,
+        csKind: kind,
+        relevance: relevance,
+        importUri: importUri,
+        elemKind: protocol.ElementKind.SETTER);
+    protocol.Element element = cs.element;
+    expect(element, isNotNull);
+    expect(element.kind, equals(protocol.ElementKind.SETTER));
+    expect(element.name, equals(name));
+    // TODO (danrubel) assert setter param
+    //expect(element.parameters, isNull);
+    // TODO (danrubel) it would be better if this was always null
+    if (element.returnType != null) {
+      expect(element.returnType, 'dynamic');
+    }
+    assertHasNoParameterInfo(cs);
+    return cs;
+  }
+
   CompletionSuggestion assertSuggestTopLevelVar(String name, String returnType,
       {int relevance: DART_RELEVANCE_DEFAULT,
       CompletionSuggestionKind kind: CompletionSuggestionKind.INVOCATION,
diff --git a/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart
new file mode 100644
index 0000000..2f39159
--- /dev/null
+++ b/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart
@@ -0,0 +1,167 @@
+// Copyright (c) 2014, 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 test.services.completion.field_formal;
+
+import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/field_formal_contributor.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+import 'package:unittest/unittest.dart';
+
+import '../../../utils.dart';
+import 'completion_contributor_util.dart';
+
+main() {
+  initializeTestEnvironment();
+  defineReflectiveTests(FieldFormalContributorTest);
+}
+
+@reflectiveTest
+class FieldFormalContributorTest extends DartCompletionContributorTest {
+  @override
+  DartCompletionContributor createContributor() {
+    return new FieldFormalContributor();
+  }
+
+  test_ThisExpression_constructor_param() async {
+    // SimpleIdentifier  FieldFormalParameter  FormalParameterList
+    addTestSource('''
+        main() { }
+        class I {X get f => new A();get _g => new A();}
+        class A implements I {
+          A(this.^) {}
+          A.z() {}
+          var b; X _c; static sb;
+          X get d => new A();get _e => new A();
+          // no semicolon between completion point and next statement
+          set s1(I x) {} set _s2(I x) {m(null);}
+          m(X x) {} I _n(X x) {}}
+        class X{}''');
+    await computeSuggestions();
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertSuggestField('b', null, relevance: DART_RELEVANCE_LOCAL_FIELD);
+    assertSuggestField('_c', 'X', relevance: DART_RELEVANCE_LOCAL_FIELD);
+    assertNotSuggested('sb');
+    assertNotSuggested('d');
+    assertNotSuggested('_e');
+    assertNotSuggested('f');
+    assertNotSuggested('_g');
+    assertNotSuggested('m');
+    assertNotSuggested('_n');
+    assertNotSuggested('s1');
+    assertNotSuggested('_s2');
+    assertNotSuggested('z');
+    assertNotSuggested('I');
+    assertNotSuggested('A');
+    assertNotSuggested('X');
+    assertNotSuggested('Object');
+    assertNotSuggested('==');
+  }
+
+  test_ThisExpression_constructor_param2() async {
+    // SimpleIdentifier  FieldFormalParameter  FormalParameterList
+    addTestSource('''
+        main() { }
+        class I {X get f => new A();get _g => new A();}
+        class A implements I {
+          A(this.b^) {}
+          A.z() {}
+          var b; X _c;
+          X get d => new A();get _e => new A();
+          // no semicolon between completion point and next statement
+          set s1(I x) {} set _s2(I x) {m(null);}
+          m(X x) {} I _n(X x) {}}
+        class X{}''');
+    await computeSuggestions();
+    expect(replacementOffset, completionOffset - 1);
+    expect(replacementLength, 1);
+    assertSuggestField('b', null, relevance: DART_RELEVANCE_LOCAL_FIELD);
+    assertSuggestField('_c', 'X', relevance: DART_RELEVANCE_LOCAL_FIELD);
+    assertNotSuggested('d');
+    assertNotSuggested('_e');
+    assertNotSuggested('f');
+    assertNotSuggested('_g');
+    assertNotSuggested('m');
+    assertNotSuggested('_n');
+    assertNotSuggested('s1');
+    assertNotSuggested('_s2');
+    assertNotSuggested('z');
+    assertNotSuggested('I');
+    assertNotSuggested('A');
+    assertNotSuggested('X');
+    assertNotSuggested('Object');
+    assertNotSuggested('==');
+  }
+
+  test_ThisExpression_constructor_param3() async {
+    // SimpleIdentifier  FieldFormalParameter  FormalParameterList
+    addTestSource('''
+        main() { }
+        class I {X get f => new A();get _g => new A();}
+        class A implements I {
+          A(this.^b) {}
+          A.z() {}
+          var b; X _c;
+          X get d => new A();get _e => new A();
+          // no semicolon between completion point and next statement
+          set s1(I x) {} set _s2(I x) {m(null);}
+          m(X x) {} I _n(X x) {}}
+        class X{}''');
+    await computeSuggestions();
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 1);
+    assertSuggestField('b', null, relevance: DART_RELEVANCE_LOCAL_FIELD);
+    assertSuggestField('_c', 'X', relevance: DART_RELEVANCE_LOCAL_FIELD);
+    assertNotSuggested('d');
+    assertNotSuggested('_e');
+    assertNotSuggested('f');
+    assertNotSuggested('_g');
+    assertNotSuggested('m');
+    assertNotSuggested('_n');
+    assertNotSuggested('s1');
+    assertNotSuggested('_s2');
+    assertNotSuggested('z');
+    assertNotSuggested('I');
+    assertNotSuggested('A');
+    assertNotSuggested('X');
+    assertNotSuggested('Object');
+    assertNotSuggested('==');
+  }
+
+  test_ThisExpression_constructor_param4() async {
+    // SimpleIdentifier  FieldFormalParameter  FormalParameterList
+    addTestSource('''
+        main() { }
+        class I {X get f => new A();get _g => new A();}
+        class A implements I {
+          A(this.b, this.^) {}
+          A.z() {}
+          var b; X _c;
+          X get d => new A();get _e => new A();
+          // no semicolon between completion point and next statement
+          set s1(I x) {} set _s2(I x) {m(null);}
+          m(X x) {} I _n(X x) {}}
+        class X{}''');
+    await computeSuggestions();
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertNotSuggested('b');
+    assertSuggestField('_c', 'X', relevance: DART_RELEVANCE_LOCAL_FIELD);
+    assertNotSuggested('d');
+    assertNotSuggested('_e');
+    assertNotSuggested('f');
+    assertNotSuggested('_g');
+    assertNotSuggested('m');
+    assertNotSuggested('_n');
+    assertNotSuggested('s1');
+    assertNotSuggested('_s2');
+    assertNotSuggested('z');
+    assertNotSuggested('I');
+    assertNotSuggested('A');
+    assertNotSuggested('X');
+    assertNotSuggested('Object');
+    assertNotSuggested('==');
+  }
+}
diff --git a/pkg/analysis_server/test/services/completion/dart/test_all.dart b/pkg/analysis_server/test/services/completion/dart/test_all.dart
index 9d8d061..6d5c836 100644
--- a/pkg/analysis_server/test/services/completion/dart/test_all.dart
+++ b/pkg/analysis_server/test/services/completion/dart/test_all.dart
@@ -10,6 +10,7 @@
 import 'combinator_contributor_test.dart' as combinator_test;
 import 'arglist_contributor_test.dart' as arglist_test;
 import 'common_usage_sorter_test.dart' as common_usage_test;
+import 'field_formal_contributor_test.dart' as field_formal_contributor_test;
 import 'inherited_contributor_test.dart' as inherited_contributor_test;
 import 'keyword_contributor_test.dart' as keyword_test;
 import 'uri_contributor_test.dart' as uri_contributor_test;
@@ -21,6 +22,7 @@
     arglist_test.main();
     combinator_test.main();
     common_usage_test.main();
+    field_formal_contributor_test.main();
     inherited_contributor_test.main();
     keyword_test.main();
     uri_contributor_test.main();
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 5891105..241086a 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -164,7 +164,7 @@
 javascript_int_overflow_literal_test/01: Fail # Issue 14651.
 javascript_int_overflow_test: Fail # Issue 14651.
 
-[ $compiler == none && $runtime == drt && $arch == x64 ]
+[ $compiler == none && $runtime == drt ]
 map_literal_oom_test: RuntimeError # Issue 24571
 
 [ $compiler == dartanalyzer || $compiler == dart2analyzer ]
diff --git a/tests/try/try.status b/tests/try/try.status
index d6d7ca7..e256bca 100644
--- a/tests/try/try.status
+++ b/tests/try/try.status
@@ -39,6 +39,9 @@
 [ $compiler == dart2js ]
 poi/*: Skip # Issue 20031
 
+[ $compiler == dart2js && $runtime == none ]
+poi/serialize_test: RuntimeError # Issue 25125
+
 [ $compiler == dart2js ]
 # Compilation is slow, test fails at runtime due to time out, but
 # unpredictably.
diff --git a/tools/VERSION b/tools/VERSION
index 1998c0e..7d5050b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 1
 MINOR 14
 PATCH 0
-PRERELEASE 2
+PRERELEASE 3
 PRERELEASE_PATCH 0
diff --git a/tools/deps/dartium.deps/DEPS b/tools/deps/dartium.deps/DEPS
index fb3f166..e9312f4 100644
--- a/tools/deps/dartium.deps/DEPS
+++ b/tools/deps/dartium.deps/DEPS
@@ -33,7 +33,7 @@
   "args_tag": "@0.13.0",
   "barback_rev" : "@29ee90dbcf77cfd64632fa2797a4c8a4f29a4b51",
   "charcode_tag": "@1.1.0",
-  "collection_rev": "@1da9a07f32efa2ba0c391b289e2037391e31da0e",
+  "collection_rev": "@f6135e6350c63eb3f4dd12953b8d4363faff16fc",
   "crypto_rev" : "@2df57a1e26dd88e8d0614207d4b062c73209917d",
   "csslib_tag" : "@0.12.0",
   "dart2js_info_rev" : "@0a221eaf16aec3879c45719de656680ccb80d8a1",
