Index: trunk/src/VBox/Frontends/VBoxManage/VBoxManage.cpp
===================================================================
--- trunk/src/VBox/Frontends/VBoxManage/VBoxManage.cpp	(revision 94208)
+++ trunk/src/VBox/Frontends/VBoxManage/VBoxManage.cpp	(revision 94209)
@@ -235,5 +235,5 @@
 #endif
 #ifdef VBOX_WITH_GUEST_CONTROL
-    { "guestcontrol",       USAGE_GUESTCONTROL,     VBMG_CMD_TODO, handleGuestControl,         0 },
+    { "guestcontrol",       USAGE_S_NEWCMD, HELP_CMD_GUESTCONTROL, handleGuestControl,         0 },
 #endif
     { "metrics",            USAGE_METRICS,          VBMG_CMD_TODO, handleMetrics,              0 },
Index: trunk/src/VBox/Frontends/VBoxManage/VBoxManage.h
===================================================================
--- trunk/src/VBox/Frontends/VBoxManage/VBoxManage.h	(revision 94208)
+++ trunk/src/VBox/Frontends/VBoxManage/VBoxManage.h	(revision 94209)
@@ -115,7 +115,4 @@
     USAGE_I_DUMPHDINFO,
     USAGE_STORAGEATTACH,
-#ifdef VBOX_WITH_GUEST_CONTROL
-    USAGE_GUESTCONTROL,
-#endif  /* VBOX_WITH_GUEST_CONTROL defined */
     USAGE_I_DEBUGLOG,
     USAGE_I_SETHDPARENTUUID,
@@ -135,23 +132,4 @@
 
 
-#ifdef VBOX_WITH_GUEST_CONTROL
-# define HELP_SCOPE_GSTCTRL_RUN             RT_BIT(0)
-# define HELP_SCOPE_GSTCTRL_START           RT_BIT(1)
-# define HELP_SCOPE_GSTCTRL_COPYFROM        RT_BIT(2)
-# define HELP_SCOPE_GSTCTRL_COPYTO          RT_BIT(3)
-# define HELP_SCOPE_GSTCTRL_MKDIR           RT_BIT(4)
-# define HELP_SCOPE_GSTCTRL_RMDIR           RT_BIT(5)
-# define HELP_SCOPE_GSTCTRL_RM              RT_BIT(6)
-# define HELP_SCOPE_GSTCTRL_MV              RT_BIT(7)
-# define HELP_SCOPE_GSTCTRL_MKTEMP          RT_BIT(8)
-# define HELP_SCOPE_GSTCTRL_LIST            RT_BIT(9)
-# define HELP_SCOPE_GSTCTRL_CLOSEPROCESS    RT_BIT(10)
-# define HELP_SCOPE_GSTCTRL_CLOSESESSION    RT_BIT(11)
-# define HELP_SCOPE_GSTCTRL_STAT            RT_BIT(12)
-# define HELP_SCOPE_GSTCTRL_UPDATEGA        RT_BIT(13)
-# define HELP_SCOPE_GSTCTRL_WATCH           RT_BIT(14)
-# define HELP_SCOPE_GSTCTRL_WAITRUNLEVEL    RT_BIT(15)
-#endif
-
 /** command handler argument */
 struct HandlerArg
@@ -251,7 +229,4 @@
 /* VBoxManageDebugVM.cpp */
 RTEXITCODE handleDebugVM(HandlerArg *a);
-
-/* VBoxManageGuestCtrl.cpp */
-extern void usageGuestControl(PRTSTREAM pStrm, const char *pcszSep1, const char *pcszSep2, uint64_t fSubcommandScope);
 
 #ifndef VBOX_ONLY_DOCS
Index: trunk/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp
===================================================================
--- trunk/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp	(revision 94208)
+++ trunk/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp	(revision 94209)
@@ -220,143 +220,4 @@
 
 DECLARE_TRANSLATION_CONTEXT(GuestCtrl);
-
-void usageGuestControl(PRTSTREAM pStrm, const char *pcszSep1, const char *pcszSep2, uint64_t fSubcommandScope)
-{
-    const uint64_t fAnonSubCmds = HELP_SCOPE_GSTCTRL_CLOSESESSION
-                                | HELP_SCOPE_GSTCTRL_LIST
-                                | HELP_SCOPE_GSTCTRL_CLOSEPROCESS
-                                | HELP_SCOPE_GSTCTRL_CLOSESESSION
-                                | HELP_SCOPE_GSTCTRL_UPDATEGA
-                                | HELP_SCOPE_GSTCTRL_WATCH
-                                | HELP_SCOPE_GSTCTRL_WAITRUNLEVEL;
-
-    /*                0         1         2         3         4         5         6         7         8XXXXXXXXXX */
-    /*                0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 */
-    if (~fAnonSubCmds & fSubcommandScope)
-        RTStrmPrintf(pStrm,
-                             "%s guestcontrol %s    <uuid|vmname> [--verbose|-v] [--quiet|-q]\n"
-                     "                              [--user[name] <name>] [--domain <domain>]\n"
-                     "                              [--passwordfile <file> | --password <password>]\n%s",
-                     pcszSep1, pcszSep2, (fSubcommandScope & RTMSGREFENTRYSTR_SCOPE_MASK) == RTMSGREFENTRYSTR_SCOPE_GLOBAL ? "\n" : "");
-    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_RUN)
-        RTStrmPrintf(pStrm,
-                     "                              run [common-options]\n"
-                     "                              [--exe <path to executable>] [--timeout <msec>]\n"
-                     "                              [-E|--putenv <NAME>[=<VALUE>]] [--unquoted-args]\n"
-                     "                              [--ignore-operhaned-processes] [--profile]\n"
-                     "                              [--no-wait-stdout|--wait-stdout]\n"
-                     "                              [--no-wait-stderr|--wait-stderr]\n"
-                     "                              [--dos2unix] [--unix2dos]\n"
-                     "                              -- <program/arg0> [argument1] ... [argumentN]]\n"
-                     "\n");
-    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_START)
-        RTStrmPrintf(pStrm,
-                     "                              start [common-options]\n"
-                     "                              [--exe <path to executable>] [--timeout <msec>]\n"
-                     "                              [-E|--putenv <NAME>[=<VALUE>]] [--unquoted-args]\n"
-                     "                              [--ignore-operhaned-processes] [--profile]\n"
-                     "                              -- <program/arg0> [argument1] ... [argumentN]]\n"
-                     "\n");
-    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_COPYFROM)
-        RTStrmPrintf(pStrm,
-                     "                              copyfrom [common-options]\n"
-                     "                              [-L|--dereference] [-R|--recursive]\n"
-                     "                              <guest-src0> [guest-src1 [...]] <host-dst>\n"
-                     "\n"
-                     "                              copyfrom [common-options]\n"
-                     "                              [-L|--dereference] [-R|--recursive]\n"
-                     "                              [-t|--target-directory <host-dst-dir>]\n"
-                     "                              <guest-src0> [guest-src1 [...]]\n"
-                     "\n");
-    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_COPYTO)
-        RTStrmPrintf(pStrm,
-                     "                              copyto [common-options]\n"
-                     "                              [-L|--dereference] [-R|--recursive]\n"
-                     "                              <host-src0> [host-src1 [...]] <guest-dst>\n"
-                     "\n"
-                     "                              copyto [common-options]\n"
-                     "                              [-L|--dereference] [-R|--recursive]\n"
-                     "                              [-t|--target-directory <guest-dst>]\n"
-                     "                              <host-src0> [host-src1 [...]]\n"
-                     "\n");
-    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_MKDIR)
-        RTStrmPrintf(pStrm,
-                     "                              mkdir|createdir[ectory] [common-options]\n"
-                     "                              [--parents] [--mode <mode>]\n"
-                     "                              <guest directory> [...]\n"
-                     "\n");
-    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_RMDIR)
-        RTStrmPrintf(pStrm,
-                     "                              rmdir|removedir[ectory] [common-options]\n"
-                     "                              [-R|--recursive]\n"
-                     "                              <guest directory> [...]\n"
-                     "\n");
-    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_RM)
-        RTStrmPrintf(pStrm,
-                     "                              removefile|rm [common-options] [-f|--force]\n"
-                     "                              <guest file> [...]\n"
-                     "\n");
-    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_MV)
-        RTStrmPrintf(pStrm,
-                     "                              mv|move|ren[ame] [common-options]\n"
-                     "                              <source> [source1 [...]] <dest>\n"
-                     "\n");
-    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_MKTEMP)
-        RTStrmPrintf(pStrm,
-                     "                              mktemp|createtemp[orary] [common-options]\n"
-                     "                              [--secure] [--mode <mode>] [--tmpdir <directory>]\n"
-                     "                              <template>\n"
-                     "\n");
-    if (fSubcommandScope & HELP_SCOPE_GSTCTRL_STAT)
-        RTStrmPrintf(pStrm,
-                     "                              stat [common-options]\n"
-                     "                              <file> [...]\n"
-                     "\n");
-
-    /*
-     * Command not requiring authentication.
-     */
-    if (fAnonSubCmds & fSubcommandScope)
-    {
-        /*                0         1         2         3         4         5         6         7         8XXXXXXXXXX */
-        /*                0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 */
-        RTStrmPrintf(pStrm,
-                     "%s guestcontrol %s    <uuid|vmname> [--verbose|-v] [--quiet|-q]\n%s",
-                     pcszSep1, pcszSep2, (fSubcommandScope & RTMSGREFENTRYSTR_SCOPE_MASK) == RTMSGREFENTRYSTR_SCOPE_GLOBAL ? "\n" : "");
-        if (fSubcommandScope & HELP_SCOPE_GSTCTRL_LIST)
-            RTStrmPrintf(pStrm,
-                         "                              list <all|sessions|processes|files> [common-opts]\n"
-                         "\n");
-        if (fSubcommandScope & HELP_SCOPE_GSTCTRL_CLOSEPROCESS)
-            RTStrmPrintf(pStrm,
-                         "                              closeprocess [common-options]\n"
-                         "                              <   --session-id <ID>\n"
-                         "                                | --session-name <name or pattern>\n"
-                         "                              <PID1> [PID1 [...]]\n"
-                         "\n");
-        if (fSubcommandScope & HELP_SCOPE_GSTCTRL_CLOSESESSION)
-            RTStrmPrintf(pStrm,
-                         "                              closesession [common-options]\n"
-                         "                              <  --all | --session-id <ID>\n"
-                         "                                | --session-name <name or pattern> >\n"
-                         "\n");
-        if (fSubcommandScope & HELP_SCOPE_GSTCTRL_UPDATEGA)
-            RTStrmPrintf(pStrm,
-                         "                              updatega|updateguestadditions|updateadditions\n"
-                         "                              [--source <guest additions .ISO>]\n"
-                         "                              [--wait-start] [common-options]\n"
-                         "                              [-- [<argument1>] ... [<argumentN>]]\n"
-                         "\n");
-        if (fSubcommandScope & HELP_SCOPE_GSTCTRL_WATCH)
-            RTStrmPrintf(pStrm,
-                         "                              watch [--timeout <msec>] [common-options]\n"
-                         "\n");
-        if (fSubcommandScope & HELP_SCOPE_GSTCTRL_WAITRUNLEVEL)
-            RTStrmPrintf(pStrm,
-                         "                              waitrunlevel [--timeout <msec>] [common-options]\n"
-                         "                              <system|userland|desktop>\n"
-                         "\n");
-    }
-}
 
 #ifndef VBOX_ONLY_DOCS
@@ -992,5 +853,5 @@
     }
     else
-        rcExit = errorSyntaxEx(USAGE_GUESTCONTROL, pCtx->pCmdDef->fSubcommandScope, GuestCtrl::tr("No user name specified!"));
+        rcExit = errorSyntax(GuestCtrl::tr("No user name specified!"));
 
     pCtx->fPostOptionParsingInited = rcExit == RTEXITCODE_SUCCESS;
@@ -1280,9 +1141,7 @@
  * @param   argv        The argument vector for this command.
  * @param   fRunCmd     Set if it's 'run' clear if 'start'.
- * @param   fHelp       The help flag for the command.
  */
-static RTEXITCODE gctlHandleRunCommon(PGCTLCMDCTX pCtx, int argc, char **argv, bool fRunCmd, uint32_t fHelp)
-{
-    RT_NOREF(fHelp);
+static RTEXITCODE gctlHandleRunCommon(PGCTLCMDCTX pCtx, int argc, char **argv, bool fRunCmd)
+{
     AssertPtrReturn(pCtx, RTEXITCODE_FAILURE);
 
@@ -1359,6 +1218,5 @@
                     if (   ValueUnion.psz[0] == '\0'
                         || ValueUnion.psz[0] == '=')
-                        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_RUN,
-                                             GuestCtrl::tr("Invalid argument variable[=value]: '%s'"), ValueUnion.psz);
+                        return errorSyntax(GuestCtrl::tr("Invalid argument variable[=value]: '%s'"), ValueUnion.psz);
                     aEnv.push_back(Bstr(ValueUnion.psz).raw());
                     break;
@@ -1429,5 +1287,5 @@
 
                 default:
-                    return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_RUN, ch, &ValueUnion);
+                    return errorGetOpt(ch, &ValueUnion);
 
             } /* switch */
@@ -1436,5 +1294,5 @@
         /* Must have something to execute. */
         if (!pszImage || !*pszImage)
-            return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_RUN, GuestCtrl::tr("No executable specified!"));
+            return errorSyntax(GuestCtrl::tr("No executable specified!"));
 
         /*
@@ -1714,5 +1572,5 @@
 static DECLCALLBACK(RTEXITCODE) gctlHandleRun(PGCTLCMDCTX pCtx, int argc, char **argv)
 {
-    return gctlHandleRunCommon(pCtx, argc, argv, true /*fRunCmd*/, HELP_SCOPE_GSTCTRL_RUN);
+    return gctlHandleRunCommon(pCtx, argc, argv, true /*fRunCmd*/);
 }
 
@@ -1720,5 +1578,5 @@
 static DECLCALLBACK(RTEXITCODE) gctlHandleStart(PGCTLCMDCTX pCtx, int argc, char **argv)
 {
-    return gctlHandleRunCommon(pCtx, argc, argv, false /*fRunCmd*/, HELP_SCOPE_GSTCTRL_START);
+    return gctlHandleRunCommon(pCtx, argc, argv, false /*fRunCmd*/);
 }
 
@@ -1751,5 +1609,4 @@
     bool fFollow = false;
     bool fRecursive = false;
-    uint64_t uUsage = fHostToGuest ? HELP_SCOPE_GSTCTRL_COPYTO : HELP_SCOPE_GSTCTRL_COPYFROM;
 
     int vrc = VINF_SUCCESS;
@@ -1778,5 +1635,5 @@
 
             default:
-                return errorGetOptEx(USAGE_GUESTCONTROL, uUsage, ch, &ValueUnion);
+                return errorGetOpt(ch, &ValueUnion);
         }
     }
@@ -1786,5 +1643,5 @@
 
     if (!cSources)
-        return errorSyntaxEx(USAGE_GUESTCONTROL, uUsage, GuestCtrl::tr("No sources specified!"));
+        return errorSyntax(GuestCtrl::tr("No sources specified!"));
 
     /* Unless a --target-directory is given, the last argument is the destination, so
@@ -1794,5 +1651,5 @@
 
     if (pszDst == NULL)
-        return errorSyntaxEx(USAGE_GUESTCONTROL, uUsage, GuestCtrl::tr("No destination specified!"));
+        return errorSyntax(GuestCtrl::tr("No destination specified!"));
 
     char szAbsDst[RTPATH_MAX];
@@ -2072,10 +1929,10 @@
 
             default:
-                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MKDIR, ch, &ValueUnion);
+                return errorGetOpt(ch, &ValueUnion);
         }
     }
 
     if (!cDirsCreated)
-        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MKDIR, GuestCtrl::tr("No directory to create specified!"));
+        return errorSyntax(GuestCtrl::tr("No directory to create specified!"));
     return rcExit;
 }
@@ -2200,10 +2057,10 @@
 
             default:
-                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_RMDIR, ch, &ValueUnion);
+                return errorGetOpt(ch, &ValueUnion);
         }
     }
 
     if (!cDirRemoved)
-        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_RMDIR, GuestCtrl::tr("No directory to remove specified!"));
+        return errorSyntax(GuestCtrl::tr("No directory to remove specified!"));
     return rcExit;
 }
@@ -2277,10 +2134,10 @@
 
             default:
-                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_RM, ch, &ValueUnion);
+                return errorGetOpt(ch, &ValueUnion);
         }
     }
 
     if (!cFilesDeleted && !fForce)
-        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_RM, GuestCtrl::tr("No file to remove specified!"));
+        return errorSyntax(GuestCtrl::tr("No file to remove specified!"));
     return rcExit;
 }
@@ -2330,5 +2187,5 @@
 
                 default:
-                    return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MV, ch, &ValueUnion);
+                    return errorGetOpt(ch, &ValueUnion);
             }
         }
@@ -2344,9 +2201,7 @@
     size_t cSources = vecSources.size();
     if (!cSources)
-        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MV,
-                             GuestCtrl::tr("No source(s) to move specified!"));
+        return errorSyntax(GuestCtrl::tr("No source(s) to move specified!"));
     if (cSources < 2)
-        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MV,
-                             GuestCtrl::tr("No destination specified!"));
+        return errorSyntax(GuestCtrl::tr("No destination specified!"));
 
     RTEXITCODE rcExit = gctlCtxPostOptionParsingInit(pCtx);
@@ -2502,20 +2357,17 @@
                     strTemplate = ValueUnion.psz;
                 else
-                    return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MKTEMP,
-                                         GuestCtrl::tr("More than one template specified!\n"));
+                    return errorSyntax(GuestCtrl::tr("More than one template specified!\n"));
                 break;
 
             default:
-                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MKTEMP, ch, &ValueUnion);
+                return errorGetOpt(ch, &ValueUnion);
         }
     }
 
     if (strTemplate.isEmpty())
-        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MKTEMP,
-                             GuestCtrl::tr("No template specified!"));
+        return errorSyntax(GuestCtrl::tr("No template specified!"));
 
     if (!fDirectory)
-        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_MKTEMP,
-                             GuestCtrl::tr("Creating temporary files is currently not supported!"));
+        return errorSyntax(GuestCtrl::tr("Creating temporary files is currently not supported!"));
 
     RTEXITCODE rcExit = gctlCtxPostOptionParsingInit(pCtx);
@@ -2594,14 +2446,13 @@
             case 'c': /* Format */
             case 't': /* Terse */
-                return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_STAT,
-                                     GuestCtrl::tr("Command \"%s\" not implemented yet!"), ValueUnion.psz);
+                return errorSyntax(GuestCtrl::tr("Command \"%s\" not implemented yet!"), ValueUnion.psz);
 
             default:
-                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_STAT, ch, &ValueUnion);
+                return errorGetOpt(ch, &ValueUnion);
         }
     }
 
     if (ch != VINF_GETOPT_NOT_OPTION)
-        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_STAT, GuestCtrl::tr("Nothing to stat!"));
+        return errorSyntax(GuestCtrl::tr("Nothing to stat!"));
 
     RTEXITCODE rcExit = gctlCtxPostOptionParsingInit(pCtx);
@@ -2891,5 +2742,5 @@
 
             default:
-                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_UPDATEGA, ch, &ValueUnion);
+                return errorGetOpt(ch, &ValueUnion);
         }
     }
@@ -3156,11 +3007,10 @@
                 enmRunLevel = gctlGetRunLevelFromStr(ValueUnion.psz);
                 if (enmRunLevel == AdditionsRunLevelType_None)
-                    return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_WAITRUNLEVEL,
-                                         GuestCtrl::tr("Invalid run level specified. Valid values are: system, userland, desktop"));
+                    return errorSyntax(GuestCtrl::tr("Invalid run level specified. Valid values are: system, userland, desktop"));
                 break;
             }
 
             default:
-                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_WAITRUNLEVEL, ch, &ValueUnion);
+                return errorGetOpt(ch, &ValueUnion);
         }
     }
@@ -3171,5 +3021,5 @@
 
     if (enmRunLevel == AdditionsRunLevelType_None)
-        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_WAITRUNLEVEL, GuestCtrl::tr("Missing run level to wait for"));
+        return errorSyntax(GuestCtrl::tr("Missing run level to wait for"));
 
     vrc = gctlWaitForRunLevel(pCtx, enmRunLevel, cMsTimeout);
@@ -3218,16 +3068,15 @@
                     fListAll = true;
                 else
-                    return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_LIST,
-                                         GuestCtrl::tr("Unknown list: '%s'"), ValueUnion.psz);
+                    return errorSyntax(GuestCtrl::tr("Unknown list: '%s'"), ValueUnion.psz);
                 fSeenListArg = true;
                 break;
 
             default:
-                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_UPDATEGA, ch, &ValueUnion);
+                return errorGetOpt(ch, &ValueUnion);
         }
     }
 
     if (!fSeenListArg)
-        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_LIST, GuestCtrl::tr("Missing list name"));
+        return errorSyntax(GuestCtrl::tr("Missing list name"));
     Assert(fListAll || fListSessions);
 
@@ -3404,30 +3253,26 @@
                     }
                     else
-                        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSEPROCESS,
-                                             GuestCtrl::tr("Invalid PID value: 0"));
+                        return errorSyntax(GuestCtrl::tr("Invalid PID value: 0"));
                 }
                 else
-                    return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSEPROCESS,
-                                         GuestCtrl::tr("Error parsing PID value: %Rrc"), rc);
+                    return errorSyntax(GuestCtrl::tr("Error parsing PID value: %Rrc"), rc);
                 break;
             }
 
             default:
-                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSEPROCESS, ch, &ValueUnion);
+                return errorGetOpt(ch, &ValueUnion);
         }
     }
 
     if (vecPID.empty())
-        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSEPROCESS,
-                             GuestCtrl::tr("At least one PID must be specified to kill!"));
+        return errorSyntax(GuestCtrl::tr("At least one PID must be specified to kill!"));
 
     if (   strSessionName.isEmpty()
         && idSession == UINT32_MAX)
-        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSEPROCESS, GuestCtrl::tr("No session ID specified!"));
+        return errorSyntax(GuestCtrl::tr("No session ID specified!"));
 
     if (   strSessionName.isNotEmpty()
         && idSession != UINT32_MAX)
-        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSEPROCESS,
-                             GuestCtrl::tr("Either session ID or name (pattern) must be specified"));
+        return errorSyntax(GuestCtrl::tr("Either session ID or name (pattern) must be specified"));
 
     RTEXITCODE rcExit = gctlCtxPostOptionParsingInit(pCtx);
@@ -3573,5 +3418,5 @@
                  *  break; */
             default:
-                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSESESSION, ch, &ValueUnion);
+                return errorGetOpt(ch, &ValueUnion);
         }
     }
@@ -3579,11 +3424,9 @@
     if (   strSessionName.isEmpty()
         && idSession == UINT32_MAX)
-        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSESESSION,
-                             GuestCtrl::tr("No session ID specified!"));
+        return errorSyntax(GuestCtrl::tr("No session ID specified!"));
 
     if (   !strSessionName.isEmpty()
         && idSession != UINT32_MAX)
-        return errorSyntaxEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_CLOSESESSION,
-                             GuestCtrl::tr("Either session ID or name (pattern) must be specified"));
+        return errorSyntax(GuestCtrl::tr("Either session ID or name (pattern) must be specified"));
 
     RTEXITCODE rcExit = gctlCtxPostOptionParsingInit(pCtx);
@@ -3678,5 +3521,5 @@
             case VINF_GETOPT_NOT_OPTION:
             default:
-                return errorGetOptEx(USAGE_GUESTCONTROL, HELP_SCOPE_GSTCTRL_WATCH, ch, &ValueUnion);
+                return errorGetOpt(ch, &ValueUnion);
         }
     }
@@ -3773,46 +3616,46 @@
     static const GCTLCMDDEF s_aCmdDefs[] =
     {
-        { "run",                gctlHandleRun,              HELP_SCOPE_GSTCTRL_RUN,       0 },
-        { "start",              gctlHandleStart,            HELP_SCOPE_GSTCTRL_START,     0 },
-        { "copyfrom",           gctlHandleCopyFrom,         HELP_SCOPE_GSTCTRL_COPYFROM,  0 },
-        { "copyto",             gctlHandleCopyTo,           HELP_SCOPE_GSTCTRL_COPYTO,    0 },
-
-        { "mkdir",              gctrlHandleMkDir,           HELP_SCOPE_GSTCTRL_MKDIR,     0 },
-        { "md",                 gctrlHandleMkDir,           HELP_SCOPE_GSTCTRL_MKDIR,     0 },
-        { "createdirectory",    gctrlHandleMkDir,           HELP_SCOPE_GSTCTRL_MKDIR,     0 },
-        { "createdir",          gctrlHandleMkDir,           HELP_SCOPE_GSTCTRL_MKDIR,     0 },
-
-        { "rmdir",              gctlHandleRmDir,            HELP_SCOPE_GSTCTRL_RMDIR,     0 },
-        { "removedir",          gctlHandleRmDir,            HELP_SCOPE_GSTCTRL_RMDIR,     0 },
-        { "removedirectory",    gctlHandleRmDir,            HELP_SCOPE_GSTCTRL_RMDIR,     0 },
-
-        { "rm",                 gctlHandleRm,               HELP_SCOPE_GSTCTRL_RM,        0 },
-        { "removefile",         gctlHandleRm,               HELP_SCOPE_GSTCTRL_RM,        0 },
-        { "erase",              gctlHandleRm,               HELP_SCOPE_GSTCTRL_RM,        0 },
-        { "del",                gctlHandleRm,               HELP_SCOPE_GSTCTRL_RM,        0 },
-        { "delete",             gctlHandleRm,               HELP_SCOPE_GSTCTRL_RM,        0 },
-
-        { "mv",                 gctlHandleMv,               HELP_SCOPE_GSTCTRL_MV,        0 },
-        { "move",               gctlHandleMv,               HELP_SCOPE_GSTCTRL_MV,        0 },
-        { "ren",                gctlHandleMv,               HELP_SCOPE_GSTCTRL_MV,        0 },
-        { "rename",             gctlHandleMv,               HELP_SCOPE_GSTCTRL_MV,        0 },
-
-        { "mktemp",             gctlHandleMkTemp,           HELP_SCOPE_GSTCTRL_MKTEMP,    0 },
-        { "createtemp",         gctlHandleMkTemp,           HELP_SCOPE_GSTCTRL_MKTEMP,    0 },
-        { "createtemporary",    gctlHandleMkTemp,           HELP_SCOPE_GSTCTRL_MKTEMP,    0 },
-
-        { "stat",               gctlHandleStat,             HELP_SCOPE_GSTCTRL_STAT,      0 },
-
-        { "closeprocess",       gctlHandleCloseProcess,     HELP_SCOPE_GSTCTRL_CLOSEPROCESS, GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER },
-        { "closesession",       gctlHandleCloseSession,     HELP_SCOPE_GSTCTRL_CLOSESESSION, GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER },
-        { "list",               gctlHandleList,             HELP_SCOPE_GSTCTRL_LIST,         GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER },
-        { "watch",              gctlHandleWatch,            HELP_SCOPE_GSTCTRL_WATCH,        GCTLCMDCTX_F_SESSION_ANONYMOUS },
-
-        {"updateguestadditions",gctlHandleUpdateAdditions,  HELP_SCOPE_GSTCTRL_UPDATEGA,     GCTLCMDCTX_F_SESSION_ANONYMOUS },
-        { "updateadditions",    gctlHandleUpdateAdditions,  HELP_SCOPE_GSTCTRL_UPDATEGA,     GCTLCMDCTX_F_SESSION_ANONYMOUS },
-        { "updatega",           gctlHandleUpdateAdditions,  HELP_SCOPE_GSTCTRL_UPDATEGA,     GCTLCMDCTX_F_SESSION_ANONYMOUS },
-
-        { "waitrunlevel",       gctlHandleWaitRunLevel,     HELP_SCOPE_GSTCTRL_WAITRUNLEVEL, GCTLCMDCTX_F_SESSION_ANONYMOUS },
-        { "waitforrunlevel",    gctlHandleWaitRunLevel,     HELP_SCOPE_GSTCTRL_WAITRUNLEVEL, GCTLCMDCTX_F_SESSION_ANONYMOUS },
+        { "run",                gctlHandleRun,              HELP_SCOPE_GUESTCONTROL_RUN,       0 },
+        { "start",              gctlHandleStart,            HELP_SCOPE_GUESTCONTROL_START,     0 },
+        { "copyfrom",           gctlHandleCopyFrom,         HELP_SCOPE_GUESTCONTROL_COPYFROM_HOSTDEST,  0 },
+        { "copyto",             gctlHandleCopyTo,           HELP_SCOPE_GUESTCONTROL_COPYTO_HOSTDEST,    0 },
+
+        { "mkdir",              gctrlHandleMkDir,           HELP_SCOPE_GUESTCONTROL_MKDIR,     0 },
+        { "md",                 gctrlHandleMkDir,           HELP_SCOPE_GUESTCONTROL_MKDIR,     0 },
+        { "createdirectory",    gctrlHandleMkDir,           HELP_SCOPE_GUESTCONTROL_MKDIR,     0 },
+        { "createdir",          gctrlHandleMkDir,           HELP_SCOPE_GUESTCONTROL_MKDIR,     0 },
+
+        { "rmdir",              gctlHandleRmDir,            HELP_SCOPE_GUESTCONTROL_RMDIR,     0 },
+        { "removedir",          gctlHandleRmDir,            HELP_SCOPE_GUESTCONTROL_RMDIR,     0 },
+        { "removedirectory",    gctlHandleRmDir,            HELP_SCOPE_GUESTCONTROL_RMDIR,     0 },
+
+        { "rm",                 gctlHandleRm,               HELP_SCOPE_GUESTCONTROL_RM,        0 },
+        { "removefile",         gctlHandleRm,               HELP_SCOPE_GUESTCONTROL_RM,        0 },
+        { "erase",              gctlHandleRm,               HELP_SCOPE_GUESTCONTROL_RM,        0 },
+        { "del",                gctlHandleRm,               HELP_SCOPE_GUESTCONTROL_RM,        0 },
+        { "delete",             gctlHandleRm,               HELP_SCOPE_GUESTCONTROL_RM,        0 },
+
+        { "mv",                 gctlHandleMv,               HELP_SCOPE_GUESTCONTROL_MV,        0 },
+        { "move",               gctlHandleMv,               HELP_SCOPE_GUESTCONTROL_MV,        0 },
+        { "ren",                gctlHandleMv,               HELP_SCOPE_GUESTCONTROL_MV,        0 },
+        { "rename",             gctlHandleMv,               HELP_SCOPE_GUESTCONTROL_MV,        0 },
+
+        { "mktemp",             gctlHandleMkTemp,           HELP_SCOPE_GUESTCONTROL_MKTEMP,    0 },
+        { "createtemp",         gctlHandleMkTemp,           HELP_SCOPE_GUESTCONTROL_MKTEMP,    0 },
+        { "createtemporary",    gctlHandleMkTemp,           HELP_SCOPE_GUESTCONTROL_MKTEMP,    0 },
+
+        { "stat",               gctlHandleStat,             HELP_SCOPE_GUESTCONTROL_STAT,      0 },
+
+        { "closeprocess",       gctlHandleCloseProcess,     HELP_SCOPE_GUESTCONTROL_CLOSEPROCESS, GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER },
+        { "closesession",       gctlHandleCloseSession,     HELP_SCOPE_GUESTCONTROL_CLOSESESSION, GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER },
+        { "list",               gctlHandleList,             HELP_SCOPE_GUESTCONTROL_LIST,         GCTLCMDCTX_F_SESSION_ANONYMOUS | GCTLCMDCTX_F_NO_SIGNAL_HANDLER },
+        { "watch",              gctlHandleWatch,            HELP_SCOPE_GUESTCONTROL_WATCH,        GCTLCMDCTX_F_SESSION_ANONYMOUS },
+
+        {"updateguestadditions",gctlHandleUpdateAdditions,  HELP_SCOPE_GUESTCONTROL_UPDATEGA,     GCTLCMDCTX_F_SESSION_ANONYMOUS },
+        { "updateadditions",    gctlHandleUpdateAdditions,  HELP_SCOPE_GUESTCONTROL_UPDATEGA,     GCTLCMDCTX_F_SESSION_ANONYMOUS },
+        { "updatega",           gctlHandleUpdateAdditions,  HELP_SCOPE_GUESTCONTROL_UPDATEGA,     GCTLCMDCTX_F_SESSION_ANONYMOUS },
+
+        { "waitrunlevel",       gctlHandleWaitRunLevel,     HELP_SCOPE_GUESTCONTROL_WAITRUNLEVEL, GCTLCMDCTX_F_SESSION_ANONYMOUS },
+        { "waitforrunlevel",    gctlHandleWaitRunLevel,     HELP_SCOPE_GUESTCONTROL_WAITRUNLEVEL, GCTLCMDCTX_F_SESSION_ANONYMOUS },
     };
 
@@ -3861,4 +3704,5 @@
                                 CmdCtx.pCmdDef = &s_aCmdDefs[iCmd];
 
+                                setCurrentSubcommand(s_aCmdDefs[iCmd].fSubcommandScope);
                                 rcExit = s_aCmdDefs[iCmd].pfnHandler(&CmdCtx, pArg->argc - GetState.iNext + 1,
                                                                      &pArg->argv[GetState.iNext - 1]);
@@ -3867,16 +3711,16 @@
                                 return rcExit;
                             }
-                        return errorSyntax(USAGE_GUESTCONTROL, GuestCtrl::tr("Unknown sub-command: '%s'"), pszCmd);
+                        return errorSyntax(GuestCtrl::tr("Unknown sub-command: '%s'"), pszCmd);
                     }
                     break;
 
                 default:
-                    return errorGetOpt(USAGE_GUESTCONTROL, ch, &ValueUnion);
+                    return errorGetOpt(ch, &ValueUnion);
             }
         }
         if (CmdCtx.pszVmNameOrUuid)
-            rcExit = errorSyntax(USAGE_GUESTCONTROL, GuestCtrl::tr("Missing sub-command"));
+            rcExit = errorSyntax(GuestCtrl::tr("Missing sub-command"));
         else
-            rcExit = errorSyntax(USAGE_GUESTCONTROL, GuestCtrl::tr("Missing VM name and sub-command"));
+            rcExit = errorSyntax(GuestCtrl::tr("Missing VM name and sub-command"));
     }
     return rcExit;
Index: trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp
===================================================================
--- trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp	(revision 94208)
+++ trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp	(revision 94209)
@@ -639,9 +639,4 @@
                      "\n", SEP);
 
-#ifdef VBOX_WITH_GUEST_CONTROL
-    if (enmCommand == USAGE_GUESTCONTROL || enmCommand == USAGE_S_ALL)
-        usageGuestControl(pStrm, SEP, fSubcommandScope);
-#endif /* VBOX_WITH_GUEST_CONTROL defined */
-
     if (enmCommand == USAGE_METRICS || enmCommand == USAGE_S_ALL)
         RTStrmPrintf(pStrm,
