diff --git a/runtime/dart_isolate.cc b/runtime/dart_isolate.cc
index b649ca834..e181dd55b 100644
--- a/runtime/dart_isolate.cc
+++ b/runtime/dart_isolate.cc
@@ -163,7 +163,7 @@ bool DartIsolate::Initialize(Dart_Isolate dart_isolate, bool is_root_isolate) {
   }
 
   auto* isolate_data = static_cast<std::shared_ptr<DartIsolate>*>(
-      Dart_IsolateGroupData(dart_isolate));
+      Dart_IsolateData(dart_isolate));
   if (isolate_data->get() != this) {
     return false;
   }
@@ -174,7 +174,7 @@ bool DartIsolate::Initialize(Dart_Isolate dart_isolate, bool is_root_isolate) {
   // We are entering a new scope (for the first time since initialization) and
   // we want to restore the current scope to null when we exit out of this
   // method. This balances the implicit Dart_EnterIsolate call made by
-  // Dart_CreateIsolateGroup (which calls the Initialize).
+  // Dart_CreateIsolate (which calls the Initialize).
   Dart_ExitIsolate();
 
   tonic::DartIsolateScope scope(isolate());
@@ -636,8 +636,8 @@ Dart_Isolate DartIsolate::DartCreateAndStartServiceIsolate(
   return service_isolate->isolate();
 }
 
-// |Dart_IsolateGroupCreateCallback|
-Dart_Isolate DartIsolate::DartIsolateGroupCreateCallback(
+// |Dart_IsolateCreateCallback|
+Dart_Isolate DartIsolate::DartIsolateCreateCallback(
     const char* advisory_script_uri,
     const char* advisory_script_entrypoint,
     const char* package_root,
@@ -720,16 +720,14 @@ DartIsolate::CreateDartVMAndEmbedderObjectPair(
   }
 
   // Create the Dart VM isolate and give it the embedder object as the baton.
-  Dart_Isolate isolate = Dart_CreateIsolateGroup(
+  Dart_Isolate isolate = Dart_CreateIsolate(
       advisory_script_uri,         //
       advisory_script_entrypoint,  //
       (*embedder_isolate)->GetIsolateSnapshot()->GetDataMapping(),
       (*embedder_isolate)->GetIsolateSnapshot()->GetInstructionsMapping(),
       (*embedder_isolate)->GetSharedSnapshot()->GetDataMapping(),
       (*embedder_isolate)->GetSharedSnapshot()->GetInstructionsMapping(), flags,
-      embedder_isolate.get(),  // isolate_group_data
-      embedder_isolate.get(),  // isolate_data
-      error);
+      embedder_isolate.get(), error);
 
   if (isolate == nullptr) {
     FML_DLOG(ERROR) << *error;
@@ -772,15 +770,14 @@ DartIsolate::CreateDartVMAndEmbedderObjectPair(
 
 // |Dart_IsolateShutdownCallback|
 void DartIsolate::DartIsolateShutdownCallback(
-    std::shared_ptr<DartIsolate>* isolate_group_data,
-    std::shared_ptr<DartIsolate>* isolate_data) {
-  isolate_group_data->get()->OnShutdownCallback();
+    std::shared_ptr<DartIsolate>* embedder_isolate) {
+  embedder_isolate->get()->OnShutdownCallback();
 }
 
-// |Dart_IsolateGroupCleanupCallback|
-void DartIsolate::DartIsolateGroupCleanupCallback(
-    std::shared_ptr<DartIsolate>* isolate_group_data) {
-  delete isolate_group_data;
+// |Dart_IsolateCleanupCallback|
+void DartIsolate::DartIsolateCleanupCallback(
+    std::shared_ptr<DartIsolate>* embedder_isolate) {
+  delete embedder_isolate;
 }
 
 fml::RefPtr<const DartSnapshot> DartIsolate::GetIsolateSnapshot() const {
diff --git a/runtime/dart_isolate.h b/runtime/dart_isolate.h
index 453810b1b..407852dc2 100644
--- a/runtime/dart_isolate.h
+++ b/runtime/dart_isolate.h
@@ -156,8 +156,8 @@ class DartIsolate : public UIDartState {
 
   void OnShutdownCallback();
 
-  // |Dart_IsolateGroupCreateCallback|
-  static Dart_Isolate DartIsolateGroupCreateCallback(
+  // |Dart_IsolateCreateCallback|
+  static Dart_Isolate DartIsolateCreateCallback(
       const char* advisory_script_uri,
       const char* advisory_script_entrypoint,
       const char* package_root,
@@ -186,12 +186,11 @@ class DartIsolate : public UIDartState {
 
   // |Dart_IsolateShutdownCallback|
   static void DartIsolateShutdownCallback(
-      std::shared_ptr<DartIsolate>* isolate_group_data,
-      std::shared_ptr<DartIsolate>* isolate_data);
+      std::shared_ptr<DartIsolate>* embedder_isolate);
 
-  // |Dart_IsolateGroupCleanupCallback|
-  static void DartIsolateGroupCleanupCallback(
-      std::shared_ptr<DartIsolate>* isolate_group_data);
+  // |Dart_IsolateCleanupCallback|
+  static void DartIsolateCleanupCallback(
+      std::shared_ptr<DartIsolate>* embedder_isolate);
 
   FML_DISALLOW_COPY_AND_ASSIGN(DartIsolate);
 };
diff --git a/runtime/dart_vm.cc b/runtime/dart_vm.cc
index 555d0c9ee..903e74b15 100644
--- a/runtime/dart_vm.cc
+++ b/runtime/dart_vm.cc
@@ -366,13 +366,12 @@ DartVM::DartVM(std::shared_ptr<const DartVMData> vm_data,
     params.vm_snapshot_data = vm_data_->GetVMSnapshot().GetDataMapping();
     params.vm_snapshot_instructions =
         vm_data_->GetVMSnapshot().GetInstructionsMapping();
-    params.create_group = reinterpret_cast<decltype(params.create_group)>(
-        DartIsolate::DartIsolateGroupCreateCallback);
-    params.shutdown_isolate =
-        reinterpret_cast<decltype(params.shutdown_isolate)>(
-            DartIsolate::DartIsolateShutdownCallback);
-    params.cleanup_group = reinterpret_cast<decltype(params.cleanup_group)>(
-        DartIsolate::DartIsolateGroupCleanupCallback);
+    params.create = reinterpret_cast<decltype(params.create)>(
+        DartIsolate::DartIsolateCreateCallback);
+    params.shutdown = reinterpret_cast<decltype(params.shutdown)>(
+        DartIsolate::DartIsolateShutdownCallback);
+    params.cleanup = reinterpret_cast<decltype(params.cleanup)>(
+        DartIsolate::DartIsolateCleanupCallback);
     params.thread_exit = ThreadExitCallback;
     params.get_service_assets = GetVMServiceAssetsArchiveCallback;
     params.entropy_source = dart::bin::GetEntropy;
diff --git a/shell/platform/fuchsia/dart/dart_component_controller.cc b/shell/platform/fuchsia/dart/dart_component_controller.cc
index c8e7cc5ab..1c4f71050 100644
--- a/shell/platform/fuchsia/dart/dart_component_controller.cc
+++ b/shell/platform/fuchsia/dart/dart_component_controller.cc
@@ -324,13 +324,12 @@ bool DartComponentController::CreateIsolate(
   auto state = new std::shared_ptr<tonic::DartState>(new tonic::DartState(
       namespace_fd, [this](Dart_Handle result) { MessageEpilogue(result); }));
 
-  isolate_ = Dart_CreateIsolateGroup(
+  isolate_ = Dart_CreateIsolate(
       url_.c_str(), label_.c_str(), isolate_snapshot_data,
       isolate_snapshot_instructions, shared_snapshot_data,
-      shared_snapshot_instructions, nullptr /* flags */,
-      state /* isolate_group_data */, state /* isolate_data */, &error);
+      shared_snapshot_instructions, nullptr /* flags */, state, &error);
   if (!isolate_) {
-    FX_LOGF(ERROR, LOG_TAG, "Dart_CreateIsolateGroup failed: %s", error);
+    FX_LOGF(ERROR, LOG_TAG, "Dart_CreateIsolate failed: %s", error);
     return false;
   }
 
diff --git a/shell/platform/fuchsia/dart/dart_runner.cc b/shell/platform/fuchsia/dart/dart_runner.cc
index b9ded3ac4..200500d2c 100644
--- a/shell/platform/fuchsia/dart/dart_runner.cc
+++ b/shell/platform/fuchsia/dart/dart_runner.cc
@@ -61,13 +61,13 @@ const char* kDartVMArgs[] = {
     // clang-format on
 };
 
-Dart_Isolate IsolateGroupCreateCallback(const char* uri,
-                                        const char* name,
-                                        const char* package_root,
-                                        const char* package_config,
-                                        Dart_IsolateFlags* flags,
-                                        void* callback_data,
-                                        char** error) {
+Dart_Isolate IsolateCreateCallback(const char* uri,
+                                   const char* name,
+                                   const char* package_root,
+                                   const char* package_config,
+                                   Dart_IsolateFlags* flags,
+                                   void* callback_data,
+                                   char** error) {
   if (std::string(uri) == DART_VM_SERVICE_ISOLATE_NAME) {
 #if defined(DART_PRODUCT)
     *error = strdup("The service isolate is not implemented in product mode");
@@ -81,7 +81,7 @@ Dart_Isolate IsolateGroupCreateCallback(const char* uri,
   return NULL;
 }
 
-void IsolateShutdownCallback(void* isolate_group_data, void* isolate_data) {
+void IsolateShutdownCallback(void* callback_data) {
   // The service isolate (and maybe later the kernel isolate) doesn't have an
   // async loop.
   auto dispatcher = async_get_default_dispatcher();
@@ -92,8 +92,8 @@ void IsolateShutdownCallback(void* isolate_group_data, void* isolate_data) {
   }
 }
 
-void IsolateGroupCleanupCallback(void* isolate_group_data) {
-  delete static_cast<std::shared_ptr<tonic::DartState>*>(isolate_group_data);
+void IsolateCleanupCallback(void* callback_data) {
+  delete static_cast<std::shared_ptr<tonic::DartState>*>(callback_data);
 }
 
 void RunApplication(
@@ -167,9 +167,9 @@ DartRunner::DartRunner() : context_(sys::ComponentContext::Create()) {
   params.vm_snapshot_data = vm_snapshot_data_.address();
   params.vm_snapshot_instructions = vm_snapshot_instructions_.address();
 #endif
-  params.create_group = IsolateGroupCreateCallback;
-  params.shutdown_isolate = IsolateShutdownCallback;
-  params.cleanup_group = IsolateGroupCleanupCallback;
+  params.create = IsolateCreateCallback;
+  params.shutdown = IsolateShutdownCallback;
+  params.cleanup = IsolateCleanupCallback;
   params.entropy_source = EntropySource;
 #if !defined(DART_PRODUCT)
   params.get_service_assets = GetVMServiceAssetsArchiveCallback;
diff --git a/shell/platform/fuchsia/dart/service_isolate.cc b/shell/platform/fuchsia/dart/service_isolate.cc
index 5287d638f..2e6eda265 100644
--- a/shell/platform/fuchsia/dart/service_isolate.cc
+++ b/shell/platform/fuchsia/dart/service_isolate.cc
@@ -123,14 +123,14 @@ Dart_Isolate CreateServiceIsolate(const char* uri,
 #endif
 
   auto state = new std::shared_ptr<tonic::DartState>(new tonic::DartState());
-  Dart_Isolate isolate = Dart_CreateIsolateGroup(
+  Dart_Isolate isolate = Dart_CreateIsolate(
       uri, DART_VM_SERVICE_ISOLATE_NAME, mapped_isolate_snapshot_data.address(),
       mapped_isolate_snapshot_instructions.address(),
       mapped_shared_snapshot_data.address(),
-      mapped_shared_snapshot_instructions.address(), nullptr /* flags */,
-      state /* isolate_group_data */, state /* isolate_data */, error);
+      mapped_shared_snapshot_instructions.address(), nullptr /* flags */, state,
+      error);
   if (!isolate) {
-    FX_LOGF(ERROR, LOG_TAG, "Dart_CreateIsolateGroup failed: %s", *error);
+    FX_LOGF(ERROR, LOG_TAG, "Dart_CreateIsolate failed: %s", *error);
     return nullptr;
   }
 
