diff --git a/pkg/analysis_server/test/analysis/notification_navigation_test.dart b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
index be4cdbe..f334a64 100644
--- a/pkg/analysis_server/test/analysis/notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
@@ -642,6 +642,92 @@
     assertNoRegion('fff);', 3);
   }
 
+  Future<void> test_functionReference_className_staticMethod() async {
+    addTestFile('''
+class A {
+  static void foo<T>() {}
+}
+void f() {
+  A.foo<A>;
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('foo<A>', 'foo<T>');
+    assertHasRegionTarget('A>', 'A {');
+  }
+
+  Future<void> test_functionReference_function() async {
+    addTestFile('''
+class A {}
+void foo<T>() {}
+void f() {
+  foo<A>;
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('foo<A>', 'foo<T>');
+    assertHasRegionTarget('A>', 'A {');
+  }
+
+  Future<void> test_functionReference_importPrefix_function() async {
+    newFile(join(testFolder, 'a.dart'), content: r'''
+void foo<T>() {}
+''');
+    addTestFile('''
+import 'a.dart' as prefix;
+class A {}
+void f() {
+  prefix.foo<A>;
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('prefix.', 'prefix;');
+    assertHasRegion('foo<A>');
+    assertHasRegionTarget('A>', 'A {');
+  }
+
+  Future<void> test_functionReference_instance_method() async {
+    addTestFile('''
+class A {
+  void foo<T>() {}
+}
+void f(A a) {
+  a.foo<A>;
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('foo<A>', 'foo<T>');
+    assertHasRegionTarget('A>', 'A {');
+  }
+
+  Future<void> test_functionReference_method() async {
+    addTestFile('''
+class A {
+  void foo<T>() {}
+  void f() {
+    foo<A>;
+  }
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('foo<A>', 'foo<T>');
+    assertHasRegionTarget('A>', 'A {');
+  }
+
+  Future<void> test_functionReference_staticMethod() async {
+    addTestFile('''
+class A {
+  static void foo<T>() {}
+  void f() {
+    foo<A>;
+  }
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('foo<A>', 'foo<T>');
+    assertHasRegionTarget('A>', 'A {');
+  }
+
   Future<void> test_identifier_resolved() async {
     addTestFile('''
 class AAA {}
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index 140a1a7..1d20779 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -741,7 +741,7 @@
       recordRelationOffset(
           element, IndexRelationKind.IS_REFERENCED_BY, offset, 0, true);
     }
-    super.visitRedirectingConstructorInvocation(node);
+    node.argumentList.accept(this);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart b/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
index 4066201..caf21ee 100644
--- a/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
@@ -227,6 +227,9 @@
       // This isn't a constructor reference.
       return node;
     }
+    if (node.parent is AssignmentExpression) {
+      return node;
+    }
     var prefix = node.prefix;
     var element = nameScope.lookup(prefix.name).getter;
     if (element is ClassElement) {
diff --git a/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart
index 2344d90..1f2aaf5 100644
--- a/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart
@@ -72,6 +72,12 @@
 
     receiverType = _resolveTypeParameter(receiverType, ifLegacy: true);
 
+    if (name == 'new') {
+      _needsGetterError = true;
+      _needsSetterError = true;
+      return _toResult();
+    }
+
     if (_typeSystem.isDynamicBounded(receiverType)) {
       _lookupInterfaceType(
         _typeProvider.objectType,
diff --git a/pkg/analyzer/test/src/dart/analysis/index_test.dart b/pkg/analyzer/test/src/dart/analysis/index_test.dart
index c61fa44..b6d1f58 100644
--- a/pkg/analyzer/test/src/dart/analysis/index_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/index_test.dart
@@ -659,43 +659,6 @@
     // No exception, even though a.dart is a part of b.dart part.
   }
 
-  test_isReferencedBy_ConstructorElement() async {
-    await _indexTestUnit('''
-/// [new A.foo] 1
-/// [A.foo] 2
-/// [new A] 3
-class A implements B {
-  A() {}
-  A.foo() {}
-}
-class B extends A {
-  B() : super(); // 4
-  B.foo() : super.foo(); // 5
-  factory B.bar() = A.foo; // 6
-}
-main() {
-  new A(); // 7
-  new A.foo(); // 8
-}
-''');
-    var constA = findElement.unnamedConstructor('A');
-    var constA_foo = findElement.constructor('foo', of: 'A');
-    // A()
-    assertThat(constA)
-      ..hasRelationCount(3)
-      ..isReferencedAt('] 3', true, length: 0)
-      ..isReferencedAt('(); // 4', true, length: 0)
-      ..isReferencedAt('(); // 7', true, length: 0);
-    // A.foo()
-    assertThat(constA_foo)
-      ..hasRelationCount(5)
-      ..isReferencedAt('.foo] 1', true, length: 4)
-      ..isReferencedAt('.foo] 2', true, length: 4)
-      ..isReferencedAt('.foo(); // 5', true, length: 4)
-      ..isReferencedAt('.foo; // 6', true, length: 4)
-      ..isReferencedAt('.foo(); // 8', true, length: 4);
-  }
-
   test_isReferencedBy_ConstructorElement_classTypeAlias() async {
     await _indexTestUnit('''
 class M {}
@@ -735,6 +698,33 @@
     // No additional validation, but it should not fail with stack overflow.
   }
 
+  test_isReferencedBy_ConstructorElement_named() async {
+    await _indexTestUnit('''
+/// [new A.foo] 1
+class A {
+  A.foo() {}
+  A.bar() : this.foo(); // 2
+}
+class B extends A {
+  B() : super.foo(); // 3
+  factory B.bar() = A.foo; // 4
+}
+void f() {
+  A.foo(); // 5
+  A.foo; // 6
+}
+''');
+    var element = findElement.constructor('foo');
+    assertThat(element)
+      ..hasRelationCount(6)
+      ..isReferencedAt('.foo] 1', true, length: 4)
+      ..isReferencedAt('.foo(); // 2', true, length: 4)
+      ..isReferencedAt('.foo(); // 3', true, length: 4)
+      ..isReferencedAt('.foo; // 4', true, length: 4)
+      ..isReferencedAt('.foo(); // 5', true, length: 4)
+      ..isReferencedAt('.foo; // 6', true, length: 4);
+  }
+
   test_isReferencedBy_ConstructorElement_namedOnlyWithDot() async {
     await _indexTestUnit('''
 class A {
@@ -766,16 +756,77 @@
     assertThat(constA_bar).isReferencedAt('.bar(); // 1', true, length: 4);
   }
 
-  test_isReferencedBy_ConstructorElement_synthetic() async {
+  test_isReferencedBy_ConstructorElement_unnamed_declared() async {
     await _indexTestUnit('''
-class A {}
-main() {
-  new A(); // 1
+/// [new A] 1
+class A {
+  A() {}
+}
+class B extends A {
+  B() : super(); // 2
+  factory B.bar() = A; // 3
+}
+void f() {
+  A(); // 4
+  A.new; // 5
 }
 ''');
-    var constA = findElement.unnamedConstructor('A');
-    // A()
-    assertThat(constA)..isReferencedAt('(); // 1', true, length: 0);
+    var element = findElement.unnamedConstructor('A');
+    assertThat(element)
+      ..hasRelationCount(5)
+      ..isReferencedAt('] 1', true, length: 0)
+      ..isReferencedAt('(); // 2', true, length: 0)
+      ..isReferencedAt('; // 3', true, length: 0)
+      ..isReferencedAt('(); // 4', true, length: 0)
+      ..isReferencedAt('.new; // 5', true, length: 4);
+  }
+
+  test_isReferencedBy_ConstructorElement_unnamed_declared_new() async {
+    await _indexTestUnit('''
+/// [new A] 1
+class A {
+  A.new() {}
+}
+class B extends A {
+  B() : super(); // 2
+  factory B.bar() = A; // 3
+}
+void f() {
+  A(); // 4
+  A.new; // 5
+}
+''');
+    var element = findElement.unnamedConstructor('A');
+    assertThat(element)
+      ..hasRelationCount(5)
+      ..isReferencedAt('] 1', true, length: 0)
+      ..isReferencedAt('(); // 2', true, length: 0)
+      ..isReferencedAt('; // 3', true, length: 0)
+      ..isReferencedAt('(); // 4', true, length: 0)
+      ..isReferencedAt('.new; // 5', true, length: 4);
+  }
+
+  test_isReferencedBy_ConstructorElement_unnamed_synthetic() async {
+    await _indexTestUnit('''
+/// [new A] 1
+class A {}
+class B extends A {
+  B() : super(); // 2
+  factory B.bar() = A; // 3
+}
+void f() {
+  A(); // 4
+  A.new; // 5
+}
+''');
+    var element = findElement.unnamedConstructor('A');
+    assertThat(element)
+      ..hasRelationCount(5)
+      ..isReferencedAt('] 1', true, length: 0)
+      ..isReferencedAt('(); // 2', true, length: 0)
+      ..isReferencedAt('; // 3', true, length: 0)
+      ..isReferencedAt('(); // 4', true, length: 0)
+      ..isReferencedAt('.new; // 5', true, length: 4);
   }
 
   test_isReferencedBy_DynamicElement() async {
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index dab758b..774cbf2 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -342,29 +342,80 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ConstructorElement_default() async {
+  test_searchReferences_ConstructorElement_named() async {
+    await resolveTestCode('''
+class A {
+  A.named() {}
+}
+
+void main() {
+  A.named();
+  A.named;
+}
+''');
+    var element = findElement.constructor('named');
+    var main = findElement.function('main');
+    var expected = [
+      _expectIdQ(main, SearchResultKind.REFERENCE, '.named();',
+          length: '.named'.length),
+      _expectIdQ(main, SearchResultKind.REFERENCE, '.named;',
+          length: '.named'.length),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
+  test_searchReferences_ConstructorElement_named_viaTypeAlias() async {
+    await resolveTestCode('''
+class A<T> {
+  A.named();
+}
+
+typedef B = A<int>;
+
+void f() {
+  B.named(); // ref
+  B.named;
+}
+''');
+
+    var element = findElement.constructor('named');
+    var f = findElement.topFunction('f');
+    await _verifyReferences(element, [
+      _expectIdQ(f, SearchResultKind.REFERENCE, '.named(); // ref',
+          length: '.named'.length),
+      _expectIdQ(f, SearchResultKind.REFERENCE, '.named;',
+          length: '.named'.length),
+    ]);
+  }
+
+  test_searchReferences_ConstructorElement_unnamed() async {
     await resolveTestCode('''
 class A {
   A() {}
 }
-main() {
-  new A();
+
+void main() {
+  A();
+  A.new;
 }
 ''');
     var element = findElement.unnamedConstructor('A');
     var main = findElement.function('main');
     var expected = [
-      _expectIdQ(main, SearchResultKind.REFERENCE, '();', length: 0)
+      _expectIdQ(main, SearchResultKind.REFERENCE, '();', length: 0),
+      _expectIdQ(main, SearchResultKind.REFERENCE, '.new;',
+          length: '.new'.length),
     ];
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ConstructorElement_default_otherFile() async {
+  test_searchReferences_ConstructorElement_unnamed_otherFile() async {
     String other = convertPath('$testPackageLibPath/other.dart');
     String otherCode = '''
 import 'test.dart';
-main() {
-  new A(); // in other
+
+void f() {
+  A(); // in other
 }
 ''';
     newFile(other, content: otherCode);
@@ -388,57 +439,21 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ConstructorElement_named() async {
+  test_searchReferences_ConstructorElement_unnamed_synthetic() async {
     await resolveTestCode('''
-class A {
-  A.named() {}
-}
-main() {
-  new A.named();
-}
-''');
-    var element = findElement.constructor('named');
-    var main = findElement.function('main');
-    var expected = [
-      _expectIdQ(main, SearchResultKind.REFERENCE, '.named();',
-          length: '.named'.length)
-    ];
-    await _verifyReferences(element, expected);
-  }
+class A {}
 
-  test_searchReferences_ConstructorElement_named_viaTypeAlias() async {
-    await resolveTestCode('''
-class A<T> {
-  A.named();
-}
-
-typedef B = A<int>;
-
-void f() {
-  B.named(); // ref
-}
-''');
-
-    var element = findElement.constructor('named');
-    var f = findElement.topFunction('f');
-    await _verifyReferences(element, [
-      _expectIdQ(f, SearchResultKind.REFERENCE, '.named(); // ref',
-          length: '.named'.length),
-    ]);
-  }
-
-  test_searchReferences_ConstructorElement_synthetic() async {
-    await resolveTestCode('''
-class A {
-}
-main() {
-  new A();
+void main() {
+  A();
+  A.new;
 }
 ''');
     var element = findElement.unnamedConstructor('A');
     var main = findElement.function('main');
     var expected = [
-      _expectIdQ(main, SearchResultKind.REFERENCE, '();', length: 0)
+      _expectIdQ(main, SearchResultKind.REFERENCE, '();', length: 0),
+      _expectIdQ(main, SearchResultKind.REFERENCE, '.new;',
+          length: '.new'.length),
     ];
     await _verifyReferences(element, expected);
   }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
index 193e74a..cb85d4f 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
@@ -441,4 +441,88 @@
 int f() => A.x;
 ''');
   }
+
+  test_new_cascade() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C? c) {
+  c..new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 27, 3),
+    ]);
+  }
+
+  test_new_dynamic() async {
+    await assertErrorsInCode('''
+f(dynamic d) {
+  d.new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 19, 3),
+    ]);
+  }
+
+  test_new_expression() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C? c1, C c2) {
+  (c1 ?? c2).new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 42, 3),
+    ]);
+  }
+
+  test_new_nullAware() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C? c) {
+  c?.new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 27, 3),
+    ]);
+  }
+
+  test_new_prefixedIdentifier() async {
+    await assertErrorsInCode('''
+class C {}
+
+abstract class D {
+  C get c;
+}
+
+f(D d) {
+  d.c.new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 60, 3),
+    ]);
+  }
+
+  test_new_simpleIdentifier() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C c) {
+  c.new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 25, 3),
+    ]);
+  }
+
+  test_new_typeVariable() async {
+    await assertErrorsInCode('''
+f<T>(T t) {
+  t.new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 16, 3),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart
index 87cafbf..e9c6092 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart
@@ -25,6 +25,18 @@
     ]);
   }
 
+  test_new() async {
+    newFile('$testPackageLibPath/lib.dart', content: '');
+    await assertErrorsInCode(r'''
+import 'lib.dart' as p;
+void f() {
+  p.new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_PREFIXED_NAME, 39, 3),
+    ]);
+  }
+
   test_setterContext() async {
     newFile('$testPackageLibPath/lib.dart');
     await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
index 65ba939..d1674c6 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
@@ -143,6 +143,74 @@
 @reflectiveTest
 class UndefinedSetterWithNullSafetyTest extends PubPackageResolutionTest
     with UndefinedSetterTestCases {
+  test_new_cascade() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C? c) {
+  c..new = 1;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 27, 3),
+    ]);
+  }
+
+  test_new_dynamic() async {
+    await assertErrorsInCode('''
+f(dynamic d) {
+  d.new = 1;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 19, 3),
+    ]);
+  }
+
+  test_new_instance() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C c) {
+  c.new = 1;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 25, 3),
+    ]);
+  }
+
+  test_new_interfaceType() async {
+    await assertErrorsInCode('''
+class C {}
+
+f() {
+  C.new = 1;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 22, 3),
+    ]);
+  }
+
+  test_new_nullAware() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C? c) {
+  c?.new = 1;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 27, 3),
+    ]);
+  }
+
+  test_new_typeVariable() async {
+    await assertErrorsInCode('''
+f<T>(T t) {
+  t.new = 1;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 16, 3),
+    ]);
+  }
+
   test_set_abstract_field_valid() async {
     await assertNoErrorsInCode('''
 abstract class A {
diff --git a/runtime/tests/vm/dart/isolates/dart_api_create_lightweight_isolate_test.dart b/runtime/tests/vm/dart/isolates/dart_api_create_lightweight_isolate_test.dart
index 2fa4962..f4005be 100644
--- a/runtime/tests/vm/dart/isolates/dart_api_create_lightweight_isolate_test.dart
+++ b/runtime/tests/vm/dart/isolates/dart_api_create_lightweight_isolate_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // SharedObjects=ffi_test_functions
-// VMOptions=
+// VMOptions=--no-enable-isolate-groups
 // VMOptions=--enable-isolate-groups --disable-heap-verification
 
 import 'dart:async';
diff --git a/runtime/tests/vm/dart_2/isolates/dart_api_create_lightweight_isolate_test.dart b/runtime/tests/vm/dart_2/isolates/dart_api_create_lightweight_isolate_test.dart
index c14ce31..0a2fd1c 100644
--- a/runtime/tests/vm/dart_2/isolates/dart_api_create_lightweight_isolate_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/dart_api_create_lightweight_isolate_test.dart
@@ -5,7 +5,7 @@
 // @dart = 2.9
 
 // SharedObjects=ffi_test_functions
-// VMOptions=
+// VMOptions=--no-enable-isolate-groups
 // VMOptions=--enable-isolate-groups --disable-heap-verification
 
 import 'dart:async';
diff --git a/runtime/vm/flag_list.h b/runtime/vm/flag_list.h
index 1e3544d..b5f86e7 100644
--- a/runtime/vm/flag_list.h
+++ b/runtime/vm/flag_list.h
@@ -196,8 +196,7 @@
   P(retain_code_objects, bool, true,                                           \
     "Serialize all code objects even if not otherwise "                        \
     "needed in the precompiled runtime.")                                      \
-  P(enable_isolate_groups, bool, false,                                        \
-    "Enable isolate group support in AOT.")                                    \
+  P(enable_isolate_groups, bool, true, "Enable isolate group support.")        \
   P(show_invisible_frames, bool, false,                                        \
     "Show invisible frames in stack traces.")                                  \
   D(trace_cha, bool, false, "Trace CHA operations")                            \
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 50660b9..e11e430 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -33,6 +33,7 @@
 import 'dart:web_gl' show RenderingContext, RenderingContext2;
 import 'dart:web_sql';
 import 'dart:_foreign_helper' show JS, JS_INTERCEPTOR_CONSTANT;
+import 'dart:js_util' as js_util;
 // 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.
diff --git a/tests/lib/isolate/static_function_test.dart b/tests/lib/isolate/static_function_test.dart
index e1ece06..0708dc3 100644
--- a/tests/lib/isolate/static_function_test.dart
+++ b/tests/lib/isolate/static_function_test.dart
@@ -9,6 +9,7 @@
 
 library static_function_test;
 
+import 'dart:io';
 import 'dart:isolate';
 import 'static_function_lib.dart' as lib;
 import 'package:async_helper/async_helper.dart';
@@ -115,6 +116,9 @@
 }
 
 void main([args, port]) {
+  final bool isolateGroupsEnabled =
+      Platform.executableArguments.contains('--enable-isolate-groups');
+
   asyncStart();
   // Sanity check.
   spawnTest("function", function, "TOP");
@@ -134,16 +138,31 @@
   spawnTest("lib._class._function", lib.privateClassFunction, "_LIB");
   spawnTest("lib._class._function", lib.privateClassAndFunction, "_LIBPRIVATE");
 
-  // Negative tests
-  functionFailTest("static closure", staticClosure);
-  functionFailTest("dynamic closure", dynamicClosure);
-  functionFailTest("named dynamic closure", namedDynamicClosure);
-  functionFailTest("instance closure", new C().instanceClosure);
-  functionFailTest(
-      "initializer closure", new C().constructorInitializerClosure);
-  functionFailTest("constructor closure", new C().constructorBodyClosure);
-  functionFailTest(
-      "named constructor closure", new C().namedConstructorBodyClosure);
-  functionFailTest("instance method", new C().instanceMethod);
+  if (isolateGroupsEnabled) {
+    spawnTest("static closure", staticClosure, "WHAT?");
+    spawnTest("dynamic closure", dynamicClosure, "WHAT??");
+    spawnTest("named dynamic closure", namedDynamicClosure, "WHAT FOO??");
+    spawnTest("instance closure", new C().instanceClosure, "C WHAT?");
+    spawnTest(
+        "initializer closure", new C().constructorInitializerClosure, "Init?");
+    spawnTest(
+        "constructor closure", new C().constructorBodyClosure, "bodyClosure?");
+    spawnTest("named constructor closure", new C().namedConstructorBodyClosure,
+        "namedBodyClosure?");
+    spawnTest("instance method", new C().instanceMethod, "INSTANCE WHAT?");
+  } else {
+    // Negative tests
+    functionFailTest("static closure", staticClosure);
+    functionFailTest("dynamic closure", dynamicClosure);
+    functionFailTest("named dynamic closure", namedDynamicClosure);
+    functionFailTest("instance closure", new C().instanceClosure);
+    functionFailTest(
+        "initializer closure", new C().constructorInitializerClosure);
+    functionFailTest("constructor closure", new C().constructorBodyClosure);
+    functionFailTest(
+        "named constructor closure", new C().namedConstructorBodyClosure);
+    functionFailTest("instance method", new C().instanceMethod);
+  }
+
   asyncEnd();
 }
diff --git a/tests/lib_2/isolate/static_function_test.dart b/tests/lib_2/isolate/static_function_test.dart
index 17f18e5..23a18fe 100644
--- a/tests/lib_2/isolate/static_function_test.dart
+++ b/tests/lib_2/isolate/static_function_test.dart
@@ -11,6 +11,7 @@
 
 library static_function_test;
 
+import 'dart:io';
 import 'dart:isolate';
 import 'static_function_lib.dart' as lib;
 import 'package:async_helper/async_helper.dart';
@@ -117,6 +118,9 @@
 }
 
 void main([args, port]) {
+  final bool isolateGroupsEnabled =
+      Platform.executableArguments.contains('--enable-isolate-groups');
+
   asyncStart();
   // Sanity check.
   spawnTest("function", function, "TOP");
@@ -136,16 +140,31 @@
   spawnTest("lib._class._function", lib.privateClassFunction, "_LIB");
   spawnTest("lib._class._function", lib.privateClassAndFunction, "_LIBPRIVATE");
 
-  // Negative tests
-  functionFailTest("static closure", staticClosure);
-  functionFailTest("dynamic closure", dynamicClosure);
-  functionFailTest("named dynamic closure", namedDynamicClosure);
-  functionFailTest("instance closure", new C().instanceClosure);
-  functionFailTest(
-      "initializer closure", new C().constructorInitializerClosure);
-  functionFailTest("constructor closure", new C().constructorBodyClosure);
-  functionFailTest(
-      "named constructor closure", new C().namedConstructorBodyClosure);
-  functionFailTest("instance method", new C().instanceMethod);
+  if (isolateGroupsEnabled) {
+    spawnTest("static closure", staticClosure, "WHAT?");
+    spawnTest("dynamic closure", dynamicClosure, "WHAT??");
+    spawnTest("named dynamic closure", namedDynamicClosure, "WHAT FOO??");
+    spawnTest("instance closure", new C().instanceClosure, "C WHAT?");
+    spawnTest(
+        "initializer closure", new C().constructorInitializerClosure, "Init?");
+    spawnTest(
+        "constructor closure", new C().constructorBodyClosure, "bodyClosure?");
+    spawnTest("named constructor closure", new C().namedConstructorBodyClosure,
+        "namedBodyClosure?");
+    spawnTest("instance method", new C().instanceMethod, "INSTANCE WHAT?");
+  } else {
+    // Negative tests
+    functionFailTest("static closure", staticClosure);
+    functionFailTest("dynamic closure", dynamicClosure);
+    functionFailTest("named dynamic closure", namedDynamicClosure);
+    functionFailTest("instance closure", new C().instanceClosure);
+    functionFailTest(
+        "initializer closure", new C().constructorInitializerClosure);
+    functionFailTest("constructor closure", new C().constructorBodyClosure);
+    functionFailTest(
+        "named constructor closure", new C().namedConstructorBodyClosure);
+    functionFailTest("instance method", new C().instanceMethod);
+  }
+
   asyncEnd();
 }
diff --git a/tools/VERSION b/tools/VERSION
index 4a2ce87..5394c86 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 80
+PRERELEASE 81
 PRERELEASE_PATCH 0
\ No newline at end of file
