Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp	(revision 37542)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp	(revision 37543)
@@ -336,4 +336,5 @@
                      "                            [--snapshot <uuid>|<name>]\n"
                      "                            [--mode machine|machineandchilds|all]\n"
+                     "                            [--options keepallmacs|keepnatmacs]\n"
                      "                            [--name <name>]\n"
                      "                            [--basefolder <basefolder>]\n"
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp	(revision 37542)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp	(revision 37543)
@@ -273,4 +273,5 @@
     { "--name",           'n', RTGETOPT_REQ_STRING },
     { "--mode",           'm', RTGETOPT_REQ_STRING },
+    { "--options",        'o', RTGETOPT_REQ_STRING },
     { "--register",       'r', RTGETOPT_REQ_NOTHING },
     { "--basefolder",     'p', RTGETOPT_REQ_STRING },
@@ -292,14 +293,46 @@
 }
 
+static int parseCloneOptions(const char *psz, com::SafeArray<CloneOptions_T> *options)
+{
+    int rc = VINF_SUCCESS;
+    while (psz && *psz && RT_SUCCESS(rc))
+    {
+        size_t len;
+        const char *pszComma = strchr(psz, ',');
+        if (pszComma)
+            len = pszComma - psz;
+        else
+            len = strlen(psz);
+        if (len > 0)
+        {
+            if (!RTStrNICmp(psz, "KeepAllMACs", len))
+                options->push_back(CloneOptions_KeepAllMACs);
+            else if (!RTStrNICmp(psz, "KeepNATMACs", len))
+                options->push_back(CloneOptions_KeepNATMACs);
+//            else if (!RTStrNICmp(psz, "Link", len))
+//                *options.push_back(CloneOptions_Link)
+            else
+                rc = VERR_PARSE_ERROR;
+        }
+        if (pszComma)
+            psz += len + 1;
+        else
+            psz += len;
+    }
+
+    return rc;
+}
+
 int handleCloneVM(HandlerArg *a)
 {
-    HRESULT     rc;
-    const char *pszSrcName       = NULL;
-    const char *pszSnapshotName  = NULL;
-    CloneMode_T mode             = CloneMode_MachineState;
-    const char *pszTrgName       = NULL;
-    const char *pszTrgBaseFolder = NULL;
-    bool        fRegister        = false;
-    RTUUID      trgUuid;
+    HRESULT                        rc;
+    const char                    *pszSrcName       = NULL;
+    const char                    *pszSnapshotName  = NULL;
+    CloneMode_T                    mode             = CloneMode_MachineState;
+    com::SafeArray<CloneOptions_T> options;
+    const char                    *pszTrgName       = NULL;
+    const char                    *pszTrgBaseFolder = NULL;
+    bool                           fRegister        = false;
+    RTUUID                         trgUuid;
 
     int c;
@@ -320,4 +353,9 @@
                 if (RT_FAILURE(parseCloneMode(ValueUnion.psz, &mode)))
                     return errorArgument("Invalid clone mode '%s'\n", ValueUnion.psz);
+                break;
+
+            case 'o':   // --options
+                if (RT_FAILURE(parseCloneOptions(ValueUnion.psz, &options)))
+                    return errorArgument("Invalid clone options '%s'\n", ValueUnion.psz);
                 break;
 
@@ -392,8 +430,4 @@
                                                  trgMachine.asOutParam()),
                     RTEXITCODE_FAILURE);
-
-    /* Clone options */
-    com::SafeArray<CloneOptions_T> options;
-    options.push_back(CloneOptions_KeepNATMACs);
 
     /* Start the cloning */
