diff --git a/lib/command.js b/lib/command.js
index e21742ad0..27bdb3e67 100644
--- a/lib/command.js
+++ b/lib/command.js
@@ -1761,13 +1761,14 @@ Expecting one of '${allowedValues.join("', '")}'`);
     if (flag.startsWith('--') && this._showSuggestionAfterError) {
       // Looping to pick up the global options too
       let candidateFlags = [];
-      for (const command of this._getCommandAndAncestors()) {
+      let command = this;
+      do {
         const moreFlags = command.createHelp().visibleOptions(command)
           .filter(option => option.long)
           .map(option => option.long);
         candidateFlags = candidateFlags.concat(moreFlags);
-        if (command._enablePositionalOptions) break;
-      }
+        command = command.parent;
+      } while (command && !command._enablePositionalOptions);
       suggestion = suggestSimilar(flag, candidateFlags);
     }
 
diff --git a/lib/help.js b/lib/help.js
index 7f1c2c354..560801bd3 100644
--- a/lib/help.js
+++ b/lib/help.js
@@ -101,10 +101,10 @@ class Help {
     if (!this.showGlobalOptions) return [];
 
     const globalOptions = [];
-    cmd._getCommandAndAncestors().slice(1).forEach((ancestorCmd) => {
+    for (let ancestorCmd = cmd.parent; ancestorCmd; ancestorCmd = ancestorCmd.parent) {
       const visibleOptions = ancestorCmd.options.filter((option) => !option.hidden);
       globalOptions.push(...visibleOptions);
-    });
+    }
     if (this.sortOptions) {
       globalOptions.sort(this.compareOptions);
     }
@@ -241,9 +241,9 @@ class Help {
       cmdName = cmdName + '|' + cmd._aliases[0];
     }
     let ancestorCmdNames = '';
-    cmd._getCommandAndAncestors().slice(1).forEach((ancestorCmd) => {
+    for (let ancestorCmd = cmd.parent; ancestorCmd; ancestorCmd = ancestorCmd.parent) {
       ancestorCmdNames = ancestorCmd.name() + ' ' + ancestorCmdNames;
-    });
+    }
     return ancestorCmdNames + cmdName + ' ' + cmd.usage();
   }