Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageAppliance.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageAppliance.cpp	(revision 75919)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageAppliance.cpp	(revision 75920)
@@ -917,5 +917,5 @@
                         case VirtualSystemDescriptionType_CloudOCIVCN:
                         case VirtualSystemDescriptionType_CloudOCIPublicIP:
-                        case VirtualSystemDescriptionType_CloudOCIProfilePath:
+                        case VirtualSystemDescriptionType_CloudOCIProfileName:
                         case VirtualSystemDescriptionType_CloudOCISubnet:
                         case VirtualSystemDescriptionType_CloudOCIKeepObject:
@@ -1028,5 +1028,21 @@
     { "--eulafile",             'E', RTGETOPT_REQ_STRING },
     { "--options",              'O', RTGETOPT_REQ_STRING },
+    { "--cloud",                'C', RTGETOPT_REQ_UINT32 },
+    { "--cloudshape",           'S', RTGETOPT_REQ_STRING },
+    { "--clouddomain",          'D', RTGETOPT_REQ_STRING },
+    { "--clouddisksize",        'R', RTGETOPT_REQ_STRING },
+    { "--cloudbucket",          'B', RTGETOPT_REQ_STRING },
+    { "--cloudocivcn",          'Q', RTGETOPT_REQ_STRING },
+    { "--cloudpublicip",        'A', RTGETOPT_REQ_STRING },
+    { "--cloudprofile",         'F', RTGETOPT_REQ_STRING },
+    { "--cloudocisubnet",       'T', RTGETOPT_REQ_STRING },
+    { "--cloudkeepobject",      'K', RTGETOPT_REQ_STRING },
+    { "--cloudlaunchinstance",  'L', RTGETOPT_REQ_STRING },
 };
+
+enum
+{
+    NOT_SET, LOCAL, CLOUD
+} exportType;
 
 RTEXITCODE handleExportAppliance(HandlerArg *a)
@@ -1037,4 +1053,6 @@
     Utf8Str strOvfFormat("ovf-1.0"); // the default export version
     bool fManifest = false; // the default
+    bool fCloud = false; // the default
+    exportType = NOT_SET;
     bool fExportISOImages = false; // the default
     com::SafeArray<ExportOptions_T> options;
@@ -1091,9 +1109,17 @@
 
                 case 's':   // --vsys
+                    if (fCloud == false && exportType == NOT_SET)
+                        exportType = LOCAL;
+
+                    if (exportType != LOCAL)
+                        return errorSyntax(USAGE_EXPORTAPPLIANCE,
+                                           "Option \"%s\" can't be used together with \"--cloud\" argument.",
+                                           GetState.pDef->pszLong);
+
                     ulCurVsys = ValueUnion.u32;
                     break;
 
                 case 'V':   // --vmname
-                    if (ulCurVsys == (uint32_t)-1)
+                    if (exportType == NOT_SET || ulCurVsys == (uint32_t)-1)
                         return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
                     mapArgsMapsPerVsys[ulCurVsys]["vmname"] = ValueUnion.psz;
@@ -1101,5 +1127,5 @@
 
                 case 'p':   // --product
-                    if (ulCurVsys == (uint32_t)-1)
+                    if (exportType != LOCAL)
                         return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
                     mapArgsMapsPerVsys[ulCurVsys]["product"] = ValueUnion.psz;
@@ -1107,5 +1133,5 @@
 
                 case 'P':   // --producturl
-                    if (ulCurVsys == (uint32_t)-1)
+                    if (exportType != LOCAL)
                         return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
                     mapArgsMapsPerVsys[ulCurVsys]["producturl"] = ValueUnion.psz;
@@ -1113,5 +1139,5 @@
 
                 case 'n':   // --vendor
-                    if (ulCurVsys == (uint32_t)-1)
+                    if (exportType != LOCAL)
                         return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
                     mapArgsMapsPerVsys[ulCurVsys]["vendor"] = ValueUnion.psz;
@@ -1119,5 +1145,5 @@
 
                 case 'N':   // --vendorurl
-                    if (ulCurVsys == (uint32_t)-1)
+                    if (exportType != LOCAL)
                         return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
                     mapArgsMapsPerVsys[ulCurVsys]["vendorurl"] = ValueUnion.psz;
@@ -1125,5 +1151,5 @@
 
                 case 'v':   // --version
-                    if (ulCurVsys == (uint32_t)-1)
+                    if (exportType != LOCAL)
                         return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
                     mapArgsMapsPerVsys[ulCurVsys]["version"] = ValueUnion.psz;
@@ -1131,5 +1157,5 @@
 
                 case 'd':   // --description
-                    if (ulCurVsys == (uint32_t)-1)
+                    if (exportType != LOCAL)
                         return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
                     mapArgsMapsPerVsys[ulCurVsys]["description"] = ValueUnion.psz;
@@ -1137,5 +1163,5 @@
 
                 case 'e':   // --eula
-                    if (ulCurVsys == (uint32_t)-1)
+                    if (exportType != LOCAL)
                         return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
                     mapArgsMapsPerVsys[ulCurVsys]["eula"] = ValueUnion.psz;
@@ -1143,5 +1169,5 @@
 
                 case 'E':   // --eulafile
-                    if (ulCurVsys == (uint32_t)-1)
+                    if (exportType != LOCAL)
                         return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
                     mapArgsMapsPerVsys[ulCurVsys]["eulafile"] = ValueUnion.psz;
@@ -1151,4 +1177,91 @@
                     if (RT_FAILURE(parseExportOptions(ValueUnion.psz, &options)))
                         return errorArgument("Invalid export options '%s'\n", ValueUnion.psz);
+                    break;
+
+                    /*--cloud and --vsys are orthogonal, only one must be presented*/
+                case 'C':   // --cloud
+                    if (fCloud == false && exportType == NOT_SET)
+                    {
+                        fCloud = true;
+                        exportType = CLOUD;
+                    }
+
+                    if (exportType != CLOUD)
+                        return errorSyntax(USAGE_EXPORTAPPLIANCE,
+                                           "Option \"%s\" can't be used together with \"--vsys\" argument.",
+                                           GetState.pDef->pszLong);
+
+                    ulCurVsys = ValueUnion.u32;
+                    break;
+
+                    /* Cloud export settings */
+                case 'S':   // --cloudshape
+                    if (exportType != CLOUD)
+                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
+                                           GetState.pDef->pszLong);
+                    mapArgsMapsPerVsys[ulCurVsys]["cloudshape"] = ValueUnion.psz;
+                    break;
+
+                case 'D':   // --clouddomain
+                    if (exportType != CLOUD)
+                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
+                                           GetState.pDef->pszLong);
+                    mapArgsMapsPerVsys[ulCurVsys]["clouddomain"] = ValueUnion.psz;
+                    break;
+
+                case 'R':   // --clouddisksize
+                    if (exportType != CLOUD)
+                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
+                                           GetState.pDef->pszLong);
+                    mapArgsMapsPerVsys[ulCurVsys]["clouddisksize"] = ValueUnion.psz;
+                    break;
+
+                case 'B':   // --cloudbucket
+                    if (exportType != CLOUD)
+                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
+                                           GetState.pDef->pszLong);
+                    mapArgsMapsPerVsys[ulCurVsys]["cloudbucket"] = ValueUnion.psz;
+                    break;
+
+                case 'Q':   // --cloudocivcn
+                    if (exportType != CLOUD)
+                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
+                                           GetState.pDef->pszLong);
+                    mapArgsMapsPerVsys[ulCurVsys]["cloudocivcn"] = ValueUnion.psz;
+                    break;
+
+                case 'A':   // --cloudpublicip
+                    if (exportType != CLOUD)
+                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
+                                           GetState.pDef->pszLong);
+                    mapArgsMapsPerVsys[ulCurVsys]["cloudpublicip"] = ValueUnion.psz;
+                    break;
+
+                case 'F':   // --cloudprofile
+                    if (exportType != CLOUD)
+                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
+                                           GetState.pDef->pszLong);
+                    mapArgsMapsPerVsys[ulCurVsys]["cloudprofile"] = ValueUnion.psz;
+                    break;
+
+                case 'T':   // --cloudocisubnet
+                    if (exportType != CLOUD)
+                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
+                                           GetState.pDef->pszLong);
+                    mapArgsMapsPerVsys[ulCurVsys]["cloudocisubnet"] = ValueUnion.psz;
+                    break;
+
+                case 'K':   // --cloudkeepobject
+                    if (exportType != CLOUD)
+                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
+                                           GetState.pDef->pszLong);
+                    mapArgsMapsPerVsys[ulCurVsys]["cloudkeepobject"] = ValueUnion.psz;
+                    break;
+
+                case 'L':   // --cloudlaunchinstance
+                    if (exportType != CLOUD)
+                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
+                                           GetState.pDef->pszLong);
+                    mapArgsMapsPerVsys[ulCurVsys]["cloudlaunchinstance"] = ValueUnion.psz;
                     break;
 
@@ -1213,5 +1326,6 @@
         if (strOutputFile.startsWith("S3://", RTCString::CaseInsensitive) ||
             strOutputFile.startsWith("SunCloud://", RTCString::CaseInsensitive) ||
-            strOutputFile.startsWith("webdav://", RTCString::CaseInsensitive))
+            strOutputFile.startsWith("webdav://", RTCString::CaseInsensitive) ||
+            strOutputFile.startsWith("OCI://", RTCString::CaseInsensitive))
             pszAbsFilePath = RTStrDup(strOutputFile.c_str());
         else
@@ -1227,4 +1341,5 @@
             ComPtr<IVirtualSystemDescription> pVSD;
             CHECK_ERROR_BREAK(pMachine, ExportTo(pAppliance, Bstr(pszAbsFilePath).raw(), pVSD.asOutParam()));
+
             // Add additional info to the virtual system description if the user wants so
             ArgsMap *pmapArgs = NULL;
@@ -1240,7 +1355,11 @@
                 {
                     if (itD->first == "vmname")
+                    {
+                        //remove default value if user has specified new name (default value is set in the ExportTo())
+                        pVSD->RemoveDescriptionByType(VirtualSystemDescriptionType_Name);
                         pVSD->AddDescription(VirtualSystemDescriptionType_Name,
                                              Bstr(itD->second).raw(),
                                              Bstr(itD->second).raw());
+                    }
                     else if (itD->first == "product")
                         pVSD->AddDescription(VirtualSystemDescriptionType_Product,
@@ -1292,4 +1411,45 @@
                         }
                     }
+                    /* add cloud export settings */
+                    else if (itD->first == "cloudshape")
+                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCIInstanceShape,
+                                             Bstr(itD->second).raw(),
+                                             Bstr(itD->second).raw());
+                    else if (itD->first == "clouddomain")
+                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCIDomain,
+                                             Bstr(itD->second).raw(),
+                                             Bstr(itD->second).raw());
+                    else if (itD->first == "clouddisksize")
+                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCIBootDiskSize,
+                                             Bstr(itD->second).raw(),
+                                             Bstr(itD->second).raw());
+                    else if (itD->first == "cloudbucket")
+                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCIBucket,
+                                             Bstr(itD->second).raw(),
+                                             Bstr(itD->second).raw());
+                    else if (itD->first == "cloudocivcn")
+                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCIVCN,
+                                             Bstr(itD->second).raw(),
+                                             Bstr(itD->second).raw());
+                    else if (itD->first == "cloudpublicip")
+                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCIPublicIP,
+                                             Bstr(itD->second).raw(),
+                                             Bstr(itD->second).raw());
+                    else if (itD->first == "cloudprofile")
+                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCIProfileName,
+                                             Bstr(itD->second).raw(),
+                                             Bstr(itD->second).raw());
+                    else if (itD->first == "cloudocisubnet")
+                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCISubnet,
+                                             Bstr(itD->second).raw(),
+                                             Bstr(itD->second).raw());
+                    else if (itD->first == "cloudkeepobject")
+                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCIKeepObject,
+                                             Bstr(itD->second).raw(),
+                                             Bstr(itD->second).raw());
+                    else if (itD->first == "cloudlaunchinstance")
+                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCILaunchInstance,
+                                             Bstr(itD->second).raw(),
+                                             Bstr(itD->second).raw());
                 }
             }
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp	(revision 75919)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp	(revision 75920)
@@ -774,4 +774,16 @@
                      "                                    [--eula <license text>]\n"
                      "                                    [--eulafile <filename>]\n"
+                     "                            [--cloud <number of virtual system>]\n"
+                     "                                    [--vmname <name>]\n"
+                     "                                    [--cloudprofile <cloud profile name>]\n"
+                     "                                    [--cloudshape <shape>]\n"
+                     "                                    [--clouddomain <domain>]\n"
+                     "                                    [--clouddisksize <disk size>]\n"
+                     "                                    [--cloudbucket <bucket name>]\n"
+                     "                                    [--cloudocivcn <OCI vcn id>]\n"
+                     "                                    [--cloudocisubnet <OCI subnet id>]\n"
+                     "                                    [--cloudkeepobject <true/false>]\n"
+                     "                                    [--cloudlaunchinstance <true/false>]\n"
+                     "                                    [--cloudpublicip <true/false>]\n"
                      "\n", SEP);
 
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 75919)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 75920)
@@ -3646,5 +3646,5 @@
     <const name="CloudOCIVCN" value="31" />
     <const name="CloudOCIPublicIP" value="32" />
-    <const name="CloudOCIProfilePath" value="33" />
+    <const name="CloudOCIProfileName" value="33" />
     <const name="CloudOCISubnet" value="34" />
     <const name="CloudOCIKeepObject" value="35" />
@@ -3852,4 +3852,12 @@
     </method>
 
+    <method name="removeDescriptionByType">
+      <desc>Delete all records which are equal to the passed type from the list</desc>
+
+      <param name="type" type="VirtualSystemDescriptionType" dir="in">
+        <desc></desc>
+      </param>
+    </method>
+
     <method name="getValuesByType">
       <desc>This is the same as <link to="#getDescriptionByType" /> except that you can specify which
Index: /trunk/src/VBox/Main/include/ApplianceImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/ApplianceImpl.h	(revision 75919)
+++ /trunk/src/VBox/Main/include/ApplianceImpl.h	(revision 75920)
@@ -320,4 +320,5 @@
                            const com::Utf8Str &aVBoxValue,
                            const com::Utf8Str &aExtraConfigValue);
+    HRESULT removeDescriptionByType(VirtualSystemDescriptionType_T aType);
     void i_removeByType(VirtualSystemDescriptionType_T aType);
 
Index: /trunk/src/VBox/Main/include/ApplianceImplPrivate.h
===================================================================
--- /trunk/src/VBox/Main/include/ApplianceImplPrivate.h	(revision 75919)
+++ /trunk/src/VBox/Main/include/ApplianceImplPrivate.h	(revision 75920)
@@ -54,4 +54,5 @@
       : storageType(VFSType_File) {}
     VFSType_T storageType; /* Which type of storage should be handled */
+    Utf8Str strProvider;   /* cloud provider name in case of export/import to Cloud */
     Utf8Str strPath;       /* File path for the import/export */
     Utf8Str strHostname;   /* Hostname on remote storage locations (could be empty) */
@@ -230,20 +231,4 @@
     /** Number of passwords provided. */
     uint32_t                  m_cPwProvided;
-
-    struct CloudExportData_T {
-        Utf8Str strDisplayMachineName;
-        Utf8Str strProfileFilePath;
-        Utf8Str strProfileName;
-        Utf8Str strInstanceShapeId;
-        Utf8Str strDomainName;
-        Utf8Str strBootDiskSize;
-        Utf8Str strBucketId;
-        Utf8Str strSubnet;
-        bool    fPublicIP;
-        Utf8Str strUserId;
-        Utf8Str strBootImageName;
-    };
-
-    CloudExportData_T m_CloudExportData;
 };
 
Index: /trunk/src/VBox/Main/src-server/ApplianceImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/ApplianceImpl.cpp	(revision 75919)
+++ /trunk/src/VBox/Main/src-server/ApplianceImpl.cpp	(revision 75920)
@@ -1336,4 +1336,5 @@
     {
         locInfo.storageType = VFSType_Cloud;
+        locInfo.strProvider = "OCI";
         strUri = strUri.substr(sizeof("OCI://") - 1);
     }
@@ -1628,4 +1629,18 @@
 }
 
+HRESULT VirtualSystemDescription::removeDescriptionByType(VirtualSystemDescriptionType_T aType)
+{
+    std::vector<VirtualSystemDescriptionEntry>::iterator it = m->maDescriptions.begin();
+    while (it != m->maDescriptions.end())
+    {
+        if (it->type == aType)
+            it = m->maDescriptions.erase(it);
+        else
+            ++it;
+    }
+
+    return S_OK;
+}
+
 /* Private method; delete all records from the list
  * m->llDescriptions that match the given type.
