diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index aa86706..5b0bb2f 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -107,6 +107,9 @@
 
   const Dart_Port destination_port_id = port.Id();
   const bool can_send_any_object = isolate->origin_id() == port.origin_id();
+  // We have to check whether the reciever has the same isolate group (e.g.
+  // native message handlers such as an IOService handler does not but does
+  // share the same origin port).
   const bool same_group =
       FLAG_enable_isolate_groups && PortMap::IsReceiverInThisIsolateGroup(
                                         destination_port_id, isolate->group());
@@ -840,7 +843,7 @@
   return result;
 }
 
-DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 0, 11) {
+DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 0, 10) {
   GET_NON_NULL_NATIVE_ARGUMENT(SendPort, port, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(String, script_uri, arguments->NativeArgAt(1));
   GET_NON_NULL_NATIVE_ARGUMENT(Instance, closure, arguments->NativeArgAt(2));
@@ -850,8 +853,7 @@
   GET_NATIVE_ARGUMENT(SendPort, onExit, arguments->NativeArgAt(6));
   GET_NATIVE_ARGUMENT(SendPort, onError, arguments->NativeArgAt(7));
   GET_NATIVE_ARGUMENT(String, packageConfig, arguments->NativeArgAt(8));
-  GET_NATIVE_ARGUMENT(Bool, newIsolateGroup, arguments->NativeArgAt(9));
-  GET_NATIVE_ARGUMENT(String, debugName, arguments->NativeArgAt(10));
+  GET_NATIVE_ARGUMENT(String, debugName, arguments->NativeArgAt(9));
 
   if (closure.IsClosure()) {
     Function& func = Function::Handle();
@@ -868,15 +870,14 @@
       bool fatal_errors = fatalErrors.IsNull() ? true : fatalErrors.value();
       Dart_Port on_exit_port = onExit.IsNull() ? ILLEGAL_PORT : onExit.Id();
       Dart_Port on_error_port = onError.IsNull() ? ILLEGAL_PORT : onError.Id();
-      const bool in_new_isolate_group = newIsolateGroup.value();
 
       // We first try to serialize the message.  In case the message is not
       // serializable this will throw an exception.
       SerializedObjectBuffer message_buffer;
       message_buffer.set_message(WriteMessage(
           /* can_send_any_object */ true,
-          /* same_group */ FLAG_enable_isolate_groups && !in_new_isolate_group,
-          message, ILLEGAL_PORT, Message::kNormalPriority));
+          /* same_group */ FLAG_enable_isolate_groups, message, ILLEGAL_PORT,
+          Message::kNormalPriority));
 
       const char* utf8_package_config =
           packageConfig.IsNull() ? NULL : String2UTF8(packageConfig);
@@ -886,8 +887,7 @@
       std::unique_ptr<IsolateSpawnState> state(new IsolateSpawnState(
           port.Id(), isolate->origin_id(), String2UTF8(script_uri), func,
           &message_buffer, utf8_package_config, paused.value(), fatal_errors,
-          on_exit_port, on_error_port, utf8_debug_name,
-          in_new_isolate_group ? nullptr : isolate->group()));
+          on_exit_port, on_error_port, utf8_debug_name, isolate->group()));
 
       // Since this is a call to Isolate.spawn, copy the parent isolate's code.
       state->isolate_flags()->copy_parent_code = true;
diff --git a/runtime/tests/vm/dart/isolates/fibonacci_call_ig_test.dart b/runtime/tests/vm/dart/isolates/fibonacci_call_ig_test.dart
deleted file mode 100644
index 946cbf9..0000000
--- a/runtime/tests/vm/dart/isolates/fibonacci_call_ig_test.dart
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2020, 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.
-
-// VMOptions=--enable-isolate-groups --disable-heap-verification
-
-import 'dart:isolate';
-
-import 'package:expect/expect.dart';
-
-import 'internal.dart';
-import 'test_utils.dart';
-
-main(args) async {
-  // We don't run this test in our artificial hot reload mode, because it would
-  // create too many threads during the reload (one per isolate), which can
-  // cause this test or other concurrently executing tests to Crash due to
-  // unability of `pthread_create` to create a new thread.
-  if (isArtificialReloadMode) return;
-
-  final rp = ReceivePort();
-  final int n = 18;
-  await spawnInDetachedGroup(fibonacciRecursive, [rp.sendPort, n]);
-  Expect.equals(4181, await rp.first);
-}
diff --git a/runtime/tests/vm/dart/isolates/internal.dart b/runtime/tests/vm/dart/isolates/internal.dart
index 0d63ccc..ec854b0 100644
--- a/runtime/tests/vm/dart/isolates/internal.dart
+++ b/runtime/tests/vm/dart/isolates/internal.dart
@@ -7,78 +7,6 @@
 import 'dart:async';
 import 'dart:_internal' as dart_internal;
 
-/// Similar to `Isolate.spawn<T>()` but supports `newIsolateGroup`.
-Future<Isolate> internalSpawn<T>(void entryPoint(T message), T message,
-    {SendPort? onExit,
-    SendPort? onError,
-    bool newIsolateGroup = false,
-    String? debugName}) async {
-  final packageConfig = null;
-  final paused = false;
-  final bool errorsAreFatal = true;
-  final readyPort = new RawReceivePort();
-  try {
-    dart_internal.spawnFunction(
-        readyPort.sendPort,
-        Platform.script.toString(),
-        entryPoint,
-        message,
-        paused,
-        errorsAreFatal,
-        onExit,
-        onError,
-        packageConfig,
-        newIsolateGroup,
-        debugName);
-    return await _spawnCommon(readyPort);
-  } catch (e, st) {
-    readyPort.close();
-    return await new Future<Isolate>.error(e, st);
-  }
-}
-
-/// A copy of `dart:isolate`s internal `Isolate._spawnCommon()`.
-Future<Isolate> _spawnCommon(RawReceivePort readyPort) {
-  final completer = new Completer<Isolate>.sync();
-  readyPort.handler = (readyMessage) {
-    readyPort.close();
-    if (readyMessage is List && readyMessage.length == 2) {
-      SendPort controlPort = readyMessage[0];
-      List capabilities = readyMessage[1];
-      completer.complete(new Isolate(controlPort,
-          pauseCapability: capabilities[0],
-          terminateCapability: capabilities[1]));
-    } else if (readyMessage is String) {
-      // We encountered an error while starting the new isolate.
-      completer.completeError(new IsolateSpawnException(
-          'Unable to spawn isolate: ${readyMessage}'));
-    } else {
-      // This shouldn't happen.
-      completer.completeError(new IsolateSpawnException(
-          "Internal error: unexpected format for ready message: "
-          "'${readyMessage}'"));
-    }
-  };
-  return completer.future;
-}
-
-/// Spawns the [staticClosure] in a detached isolate group.
-Future<Isolate> spawnInDetachedGroup<T>(
-    void staticClosure(T message), T message,
-    {SendPort? onExit, SendPort? onError}) {
-  return _IG0([staticClosure, message]);
-}
-
-// This is the isolate group of "main". We spawn another one.
-_IG0(args) => internalSpawn(_IG1, args, newIsolateGroup: true);
-
-// This is an intermediate isolate group. The actual code we run in a new IG and
-// this one will die.
-_IG1(args) => internalSpawn(_IG2, args, newIsolateGroup: true);
-
-// Run the actual code
-_IG2(args) => args[0](args[1]);
-
 extension SendPortSendAndExit on SendPort {
   void sendAndExit(var message) {
     dart_internal.sendAndExit(this, message);
diff --git a/runtime/tests/vm/dart/isolates/sum_recursive_call_ig_test.dart b/runtime/tests/vm/dart/isolates/sum_recursive_call_ig_test.dart
deleted file mode 100644
index 915c102..0000000
--- a/runtime/tests/vm/dart/isolates/sum_recursive_call_ig_test.dart
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2020, 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.
-
-// VMOptions=--enable-isolate-groups --disable-heap-verification
-
-import 'dart:isolate';
-
-import 'package:expect/expect.dart';
-
-import 'internal.dart';
-import 'test_utils.dart';
-
-main(args) async {
-  final rp = ReceivePort();
-  final int count = (isDebugMode || isSimulator) ? 100 : (10 * 1000);
-  await spawnInDetachedGroup(sumRecursive, [rp.sendPort, count]);
-  Expect.equals(count, await rp.first);
-}
diff --git a/runtime/tests/vm/dart/isolates/sum_recursive_tail_call_ig_test.dart b/runtime/tests/vm/dart/isolates/sum_recursive_tail_call_ig_test.dart
deleted file mode 100644
index a3fb967..0000000
--- a/runtime/tests/vm/dart/isolates/sum_recursive_tail_call_ig_test.dart
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2020, 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.
-
-// VMOptions=--enable-isolate-groups --disable-heap-verification
-
-import 'dart:isolate';
-
-import 'package:expect/expect.dart';
-
-import 'internal.dart';
-import 'test_utils.dart';
-
-main(args) async {
-  final rp = ReceivePort();
-  final int count = (isDebugMode || isSimulator) ? 100 : (10 * 1000);
-  await spawnInDetachedGroup(sumRecursiveTailCall, [rp.sendPort, count, 0]);
-  Expect.equals(count, await rp.first);
-}
diff --git a/runtime/tests/vm/dart_2/isolates/fibonacci_call_ig_test.dart b/runtime/tests/vm/dart_2/isolates/fibonacci_call_ig_test.dart
deleted file mode 100644
index 5fcd026..0000000
--- a/runtime/tests/vm/dart_2/isolates/fibonacci_call_ig_test.dart
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2020, 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.
-
-// @dart = 2.9
-
-// VMOptions=--enable-isolate-groups --disable-heap-verification
-
-import 'dart:isolate';
-
-import 'package:expect/expect.dart';
-
-import 'internal.dart';
-import 'test_utils.dart';
-
-main(args) async {
-  // We don't run this test in our artificial hot reload mode, because it would
-  // create too many threads during the reload (one per isolate), which can
-  // cause this test or other concurrently executing tests to Crash due to
-  // unability of `pthread_create` to create a new thread.
-  if (isArtificialReloadMode) return;
-
-  final rp = ReceivePort();
-  final int n = 18;
-  await spawnInDetachedGroup(fibonacciRecursive, [rp.sendPort, n]);
-  Expect.equals(4181, await rp.first);
-}
diff --git a/runtime/tests/vm/dart_2/isolates/internal.dart b/runtime/tests/vm/dart_2/isolates/internal.dart
index 9e9a3e4..1742a43 100644
--- a/runtime/tests/vm/dart_2/isolates/internal.dart
+++ b/runtime/tests/vm/dart_2/isolates/internal.dart
@@ -9,79 +9,6 @@
 import 'dart:async';
 import 'dart:_internal' as dart_internal;
 
-/// Similar to `Isolate.spawn<T>()` but supports `newIsolateGroup`.
-Future<Isolate> internalSpawn<T>(void entryPoint(T message), T message,
-    {SendPort onExit,
-    SendPort onError,
-    bool newIsolateGroup,
-    String debugName}) async {
-  newIsolateGroup ??= false;
-  final packageConfig = null;
-  final paused = false;
-  final bool errorsAreFatal = null;
-  final readyPort = new RawReceivePort();
-  try {
-    dart_internal.spawnFunction(
-        readyPort.sendPort,
-        Platform.script.toString(),
-        entryPoint,
-        message,
-        paused,
-        errorsAreFatal,
-        onExit,
-        onError,
-        packageConfig,
-        newIsolateGroup,
-        debugName);
-    return await _spawnCommon(readyPort);
-  } catch (e, st) {
-    readyPort.close();
-    return await new Future<Isolate>.error(e, st);
-  }
-}
-
-/// A copy of `dart:isolate`s internal `Isolate._spawnCommon()`.
-Future<Isolate> _spawnCommon(RawReceivePort readyPort) {
-  final completer = new Completer<Isolate>.sync();
-  readyPort.handler = (readyMessage) {
-    readyPort.close();
-    if (readyMessage is List && readyMessage.length == 2) {
-      SendPort controlPort = readyMessage[0];
-      List capabilities = readyMessage[1];
-      completer.complete(new Isolate(controlPort,
-          pauseCapability: capabilities[0],
-          terminateCapability: capabilities[1]));
-    } else if (readyMessage is String) {
-      // We encountered an error while starting the new isolate.
-      completer.completeError(new IsolateSpawnException(
-          'Unable to spawn isolate: ${readyMessage}'));
-    } else {
-      // This shouldn't happen.
-      completer.completeError(new IsolateSpawnException(
-          "Internal error: unexpected format for ready message: "
-          "'${readyMessage}'"));
-    }
-  };
-  return completer.future;
-}
-
-/// Spawns the [staticClosure] in a detached isolate group.
-Future<Isolate> spawnInDetachedGroup<T>(
-    void staticClosure(T message), T message,
-    {SendPort onExit, SendPort onError}) async {
-  _IG0([staticClosure, message]);
-}
-
-// This is the isolate group of "main". We spawn another one.
-_IG0(args) => internalSpawn(_IG1, args, newIsolateGroup: true);
-
-// This is an intermediate isolate group. The actual code we run in a new IG and
-// this one will die.
-_IG1(args) => internalSpawn(_IG2, args, newIsolateGroup: true);
-
-// Run the actual code
-_IG2(args) => args[0](args[1]);
-
 extension SendPortSendAndExit on SendPort {
   void sendAndExit(var message) {
     dart_internal.sendAndExit(this, message);
diff --git a/runtime/tests/vm/dart_2/isolates/sum_recursive_call_ig_test.dart b/runtime/tests/vm/dart_2/isolates/sum_recursive_call_ig_test.dart
deleted file mode 100644
index 177709f..0000000
--- a/runtime/tests/vm/dart_2/isolates/sum_recursive_call_ig_test.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2020, 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.
-
-// @dart = 2.9
-
-// VMOptions=--enable-isolate-groups --disable-heap-verification
-
-import 'dart:isolate';
-
-import 'package:expect/expect.dart';
-
-import 'internal.dart';
-import 'test_utils.dart';
-
-main(args) async {
-  final rp = ReceivePort();
-  final int count = (isDebugMode || isSimulator) ? 100 : (10 * 1000);
-  await spawnInDetachedGroup(sumRecursive, [rp.sendPort, count]);
-  Expect.equals(count, await rp.first);
-}
diff --git a/runtime/tests/vm/dart_2/isolates/sum_recursive_tail_call_ig_test.dart b/runtime/tests/vm/dart_2/isolates/sum_recursive_tail_call_ig_test.dart
deleted file mode 100644
index be48915..0000000
--- a/runtime/tests/vm/dart_2/isolates/sum_recursive_tail_call_ig_test.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2020, 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.
-
-// @dart = 2.9
-
-// VMOptions=--enable-isolate-groups --disable-heap-verification
-
-import 'dart:isolate';
-
-import 'package:expect/expect.dart';
-
-import 'internal.dart';
-import 'test_utils.dart';
-
-main(args) async {
-  final rp = ReceivePort();
-  final int count = (isDebugMode || isSimulator) ? 100 : (10 * 1000);
-  await spawnInDetachedGroup(sumRecursiveTailCall, [rp.sendPort, count, 0]);
-  Expect.equals(count, await rp.first);
-}
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index c8f50e2..717040f 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -316,7 +316,7 @@
   V(Int32x4_setFlagZ, 2)                                                       \
   V(Int32x4_setFlagW, 2)                                                       \
   V(Int32x4_select, 3)                                                         \
-  V(Isolate_spawnFunction, 11)                                                 \
+  V(Isolate_spawnFunction, 10)                                                 \
   V(Isolate_spawnUri, 12)                                                      \
   V(Isolate_getPortAndCapabilitiesOfCurrentIsolate, 0)                         \
   V(Isolate_getCurrentRootUriStr, 0)                                           \
diff --git a/sdk/lib/_internal/vm/lib/internal_patch.dart b/sdk/lib/_internal/vm/lib/internal_patch.dart
index 67501fb..e71c95f 100644
--- a/sdk/lib/_internal/vm/lib/internal_patch.dart
+++ b/sdk/lib/_internal/vm/lib/internal_patch.dart
@@ -176,19 +176,6 @@
 void sendAndExit(SendPort sendPort, var message)
     native "SendPortImpl_sendAndExitInternal_";
 
-void spawnFunction(
-    SendPort readyPort,
-    String uri,
-    Function topLevelFunction,
-    var message,
-    bool paused,
-    bool errorsAreFatal,
-    SendPort? onExit,
-    SendPort? onError,
-    String? packageConfig,
-    bool newIsolateGroup,
-    String? debugName) native "Isolate_spawnFunction";
-
 // Collection of functions which should only be used for testing purposes.
 abstract class VMInternalsForTesting {
   // This function can be used by tests to enforce garbage collection.
diff --git a/sdk/lib/_internal/vm/lib/isolate_patch.dart b/sdk/lib/_internal/vm/lib/isolate_patch.dart
index 6d70c2f..519d188 100644
--- a/sdk/lib/_internal/vm/lib/isolate_patch.dart
+++ b/sdk/lib/_internal/vm/lib/isolate_patch.dart
@@ -14,7 +14,6 @@
 
 import "dart:collection" show HashMap;
 import "dart:typed_data" show ByteBuffer, TypedData, Uint8List;
-import "dart:_internal" show spawnFunction;
 
 /// These are the additional parts of this patch library:
 // part "timer_impl.dart";
@@ -360,22 +359,11 @@
       script = await Isolate.resolvePackageUri(script);
     }
 
-    const bool newIsolateGroup = false;
     final RawReceivePort readyPort =
         new RawReceivePort(null, 'Isolate.spawn ready');
     try {
-      spawnFunction(
-          readyPort.sendPort,
-          script.toString(),
-          entryPoint,
-          message,
-          paused,
-          errorsAreFatal,
-          onExit,
-          onError,
-          packageConfig,
-          newIsolateGroup,
-          debugName);
+      _spawnFunction(readyPort.sendPort, script.toString(), entryPoint, message,
+          paused, errorsAreFatal, onExit, onError, packageConfig, debugName);
       return await _spawnCommon(readyPort);
     } catch (e, st) {
       readyPort.close();
@@ -383,6 +371,18 @@
     }
   }
 
+  static void _spawnFunction(
+      SendPort readyPort,
+      String uri,
+      Function topLevelFunction,
+      var message,
+      bool paused,
+      bool errorsAreFatal,
+      SendPort? onExit,
+      SendPort? onError,
+      String? packageConfig,
+      String? debugName) native "Isolate_spawnFunction";
+
   @patch
   static Future<Isolate> spawnUri(Uri uri, List<String> args, var message,
       {bool paused = false,
