diff --git a/manifest_xml.py b/manifest_xml.py
index 02f09db..8718dc5 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -376,7 +376,7 @@
     if os.path.exists(mp.gitdir) and mp.use_worktree:
       mp.use_git_worktrees = True
 
-    self._Unload()
+    self.Unload()
 
   def Override(self, name, load_local_manifests=True):
     """Use a different manifest, just for the current instantiation.
@@ -399,7 +399,7 @@
     try:
       self._load_local_manifests = load_local_manifests
       self.manifestFile = path
-      self._Unload()
+      self.Unload()
       self._Load()
     finally:
       self.manifestFile = old
@@ -970,7 +970,13 @@
       groups = self.GetDefaultGroupsStr()
     return groups
 
-  def _Unload(self):
+  def Unload(self):
+    """Unload the manifest.
+
+    If the manifest files have been changed since Load() was called, this will
+    cause the new/updated manifest to be used.
+
+    """
     self._loaded = False
     self._projects = {}
     self._paths = {}
@@ -984,6 +990,11 @@
     self.branch = None
     self._manifest_server = None
 
+  def Load(self):
+    """Read the manifest into memory."""
+    # Do not expose internal arguments.
+    self._Load()
+
   def _Load(self, initial_client=None, submanifest_depth=0):
     if submanifest_depth > MAX_SUBMANIFEST_DEPTH:
       raise ManifestParseError('maximum submanifest depth %d exceeded.' %
@@ -1030,7 +1041,7 @@
       except ManifestParseError as e:
         # There was a problem parsing, unload ourselves in case they catch
         # this error and try again later, we will show the correct error
-        self._Unload()
+        self.Unload()
         raise e
 
       if self.IsMirror:
diff --git a/project.py b/project.py
index a60a858..b8d834a 100644
--- a/project.py
+++ b/project.py
@@ -3491,6 +3491,8 @@
     """
     assert _kwargs_only == (), 'Sync only accepts keyword arguments.'
 
+    groups = groups or 'default'
+    platform = platform or 'auto'
     git_event_log = git_event_log or EventLog()
     if outer_manifest and self.manifest.is_submanifest:
       # In a multi-manifest checkout, use the outer manifest unless we are told
@@ -3783,19 +3785,18 @@
         )
 
     # Lastly, clone the superproject(s).
-    if outer_manifest and not self.manifest.is_submanifest:
-      for m in self.manifest.all_manifests:
-        sync_result = Superproject(
-            m, m.repodir, git_event_log, quiet=not verbose).Sync()
-        if not sync_result.success:
-          print(f'warning: git update of superproject for {m.path_prefix} failed, '
-                'repo sync will not '
-                'use superproject to fetch source; while this error is not fatal, '
-                'and you can continue to run repo sync, please run repo init with '
-                'the --no-use-superproject option to stop seeing this warning',
-                file=sys.stderr)
-          if sync_result.fatal and use_superproject is not None:
-            return False
+    if self.manifest.manifestProject.use_superproject:
+      sync_result = Superproject(
+          self.manifest, self.manifest.repodir, git_event_log, quiet=not verbose).Sync()
+      if not sync_result.success:
+        print('warning: git update of superproject for '
+              f'{self.manifest.path_prefix} failed, repo sync will not use '
+              'superproject to fetch source; while this error is not fatal, '
+              'and you can continue to run repo sync, please run repo init '
+              'with the --no-use-superproject option to stop seeing this '
+              'warning', file=sys.stderr)
+        if sync_result.fatal and use_superproject is not None:
+          return False
 
     return True
 
diff --git a/subcmds/sync.py b/subcmds/sync.py
index c165515..baee6b2 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -694,10 +694,10 @@
       load_local_manifests: Whether to load local manifests.
     """
     if manifest_name:
-      # Override calls _Unload already
+      # Override calls Unload already
       self.manifest.Override(manifest_name, load_local_manifests=load_local_manifests)
     else:
-      self.manifest._Unload()
+      self.manifest.Unload()
 
   def UpdateProjectList(self, opt):
     new_project_paths = []
