Index: /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.cpp	(revision 75226)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.cpp	(revision 75227)
@@ -26,4 +26,8 @@
 # include <QGridLayout>
 # include <QHeaderView>
+# include <QJsonArray>
+# include <QJsonDocument>
+# include <QJsonObject>
+# include <QJsonValue>
 # include <QLabel>
 # include <QLineEdit>
@@ -46,4 +50,5 @@
 
 /* COM includes: */
+# include "CCloudClient.h"
 # include "CCloudProvider.h"
 
@@ -288,4 +293,200 @@
 }
 
+void UIWizardExportAppPage2::populateCloudClientParameters()
+{
+    /* Forget current parameters: */
+    m_cloudClientParameters.clear();
+
+    /* Return if no profile chosen: */
+    if (m_comCloudProfile.isNull())
+        return;
+
+    /* Create Cloud Client: */
+    CCloudClient comCloudClient = m_comCloudProfile.CreateCloudClient();
+    /* Show error message if necessary: */
+    if (!m_comCloudProfile.isOk())
+        msgCenter().cannotCreateCloudClient(m_comCloudProfile);
+    else
+    {
+        /* Read Cloud Client parameters for Export VM operation: */
+        const QString strJSON = comCloudClient.GetExportParameters();
+        /* Show error message if necessary: */
+        if (!comCloudClient.isOk())
+            msgCenter().cannotAcquireCloudClientParameter(comCloudClient);
+        else
+        {
+            /* Create JSON document and parse it: */
+            const QJsonDocument document = QJsonDocument::fromJson(strJSON.toUtf8());
+            if (!document.isEmpty())
+                m_cloudClientParameters = parseJsonDocument(document);
+        }
+    }
+}
+
+/* static */
+AbstractVSDParameterList UIWizardExportAppPage2::parseJsonDocument(const QJsonDocument &document)
+{
+    /* Prepare parameters: */
+    AbstractVSDParameterList parameters;
+
+    /* Convert document to object, make sure it isn't empty: */
+    QJsonObject documentObject = document.object();
+    AssertMsgReturn(!documentObject.isEmpty(), ("Document object is empty!"), parameters);
+
+    /* Iterate through document object values: */
+    foreach (const QString &strElementName, documentObject.keys())
+    {
+        //printf("Element name: \"%s\"\n", strElementName.toUtf8().constData());
+
+        /* Prepare parameter: */
+        AbstractVSDParameter parameter;
+
+        /* Assign name: */
+        parameter.name = strElementName;
+
+        /* Acquire element, make sure it's an object: */
+        const QJsonValue element = documentObject.value(strElementName);
+        AssertMsg(element.isObject(), ("Element '%s' has wrong structure!", strElementName.toUtf8().constData()));
+        if (!element.isObject())
+            continue;
+
+        /* Convert element to object, make sure it isn't empty: */
+        const QJsonObject elementObject = element.toObject();
+        AssertMsg(!elementObject.isEmpty(), ("Element '%s' object has wrong structure!", strElementName.toUtf8().constData()));
+        if (elementObject.isEmpty())
+            continue;
+
+        /* Iterate through element object values: */
+        foreach (const QString &strFieldName, elementObject.keys())
+        {
+            //printf(" Field name: \"%s\"\n", strFieldName.toUtf8().constData());
+
+            /* Acquire field: */
+            const QJsonValue field = elementObject.value(strFieldName);
+
+            /* Parse known fields: */
+            if (strFieldName == "type")
+                parameter.type = (KVirtualSystemDescriptionType)(int)parseJsonFieldDouble(strFieldName, field);
+            else
+            if (strFieldName == "bool")
+            {
+                AbstractVSDParameterBool get;
+                get.value = parseJsonFieldBool(strFieldName, field);
+                parameter.get = QVariant::fromValue(get);
+                parameter.kind = ParameterKind_Bool;
+            }
+            else
+            if (strFieldName == "min")
+            {
+                AbstractVSDParameterDouble get = parameter.get.value<AbstractVSDParameterDouble>();
+                get.minimum = parseJsonFieldDouble(strFieldName, field);
+                parameter.get = QVariant::fromValue(get);
+                parameter.kind = ParameterKind_Double;
+            }
+            else
+            if (strFieldName == "max")
+            {
+                AbstractVSDParameterDouble get = parameter.get.value<AbstractVSDParameterDouble>();
+                get.maximum = parseJsonFieldDouble(strFieldName, field);
+                parameter.get = QVariant::fromValue(get);
+                parameter.kind = ParameterKind_Double;
+            }
+            else
+            if (strFieldName == "unit")
+            {
+                AbstractVSDParameterDouble get = parameter.get.value<AbstractVSDParameterDouble>();
+                get.unit = parseJsonFieldString(strFieldName, field);
+                parameter.get = QVariant::fromValue(get);
+                parameter.kind = ParameterKind_Double;
+            }
+            else
+            if (strFieldName == "items")
+            {
+                AbstractVSDParameterArray get;
+                get.values = parseJsonFieldArray(strFieldName, field);
+                parameter.get = QVariant::fromValue(get);
+                parameter.kind = ParameterKind_Array;
+            }
+        }
+
+        /* Append parameter: */
+        parameters << parameter;
+    }
+
+    /* Return parameters: */
+    return parameters;
+}
+
+/* static */
+bool UIWizardExportAppPage2::parseJsonFieldBool(const QString &strFieldName, const QJsonValue &field)
+{
+    /* Make sure field is bool: */
+    Q_UNUSED(strFieldName);
+    AssertMsgReturn(field.isBool(), ("Field '%s' has wrong structure!", strFieldName.toUtf8().constData()), false);
+    const bool fFieldValue = field.toBool();
+    //printf("  Field value: \"%s\"\n", fFieldValue ? "true" : "false");
+
+    return fFieldValue;
+}
+
+/* static */
+double UIWizardExportAppPage2::parseJsonFieldDouble(const QString &strFieldName, const QJsonValue &field)
+{
+    /* Make sure field is double: */
+    Q_UNUSED(strFieldName);
+    AssertMsgReturn(field.isDouble(), ("Field '%s' has wrong structure!", strFieldName.toUtf8().constData()), 0);
+    const double dFieldValue = field.toDouble();
+    //printf("  Field value: \"%f\"\n", dFieldValue);
+
+    return dFieldValue;
+}
+
+/* static */
+QString UIWizardExportAppPage2::parseJsonFieldString(const QString &strFieldName, const QJsonValue &field)
+{
+    /* Make sure field is string: */
+    Q_UNUSED(strFieldName);
+    AssertMsgReturn(field.isString(), ("Field '%s' has wrong structure!", strFieldName.toUtf8().constData()), QString());
+    const QString strFieldValue = field.toString();
+    //printf("  Field value: \"%s\"\n", strFieldValue.toUtf8().constData());
+
+    return strFieldValue;
+}
+
+/* static */
+QIStringPairList UIWizardExportAppPage2::parseJsonFieldArray(const QString &strFieldName, const QJsonValue &field)
+{
+    /* Make sure field is array: */
+    Q_UNUSED(strFieldName);
+    AssertMsgReturn(field.isArray(), ("Field '%s' has wrong structure!", strFieldName.toUtf8().constData()), QIStringPairList());
+    const QJsonArray fieldValueArray = field.toArray();
+    QIStringPairList fieldValueStringPairList;
+    /* Parse array: */
+    for (int i = 0; i < fieldValueArray.count(); ++i)
+    {
+        /* Parse current array value: */
+        const QJsonValue value = fieldValueArray[i];
+        /* If value is of string type, we just take it: */
+        if (value.isString())
+            fieldValueStringPairList << qMakePair(fieldValueArray[i].toString(), QString());
+        /* If value is of object type, we take object key/value pairs: */
+        else if (value.isObject())
+        {
+            const QJsonObject valueObject = value.toObject();
+            foreach (const QString &strKey, valueObject.keys())
+                fieldValueStringPairList << qMakePair(strKey, valueObject.value(strKey).toString());
+        }
+    }
+    //QStringList test;
+    //foreach (const QIStringPair &pair, fieldValueStringPairList)
+    //    if (pair.second.isNull())
+    //        test << QString("{%1}").arg(pair.first);
+    //    else
+    //        test << QString("{%1 : %2}").arg(pair.first, pair.second);
+    //printf("  Field value: \"%s\"\n", test.join(", ").toUtf8().constData());
+
+    return fieldValueStringPairList;
+}
+
 void UIWizardExportAppPage2::updatePageAppearance()
 {
@@ -518,4 +719,9 @@
 {
     return m_comCloudProfile;
+}
+
+AbstractVSDParameterList UIWizardExportAppPage2::cloudClientParameters() const
+{
+    return m_cloudClientParameters;
 }
 
@@ -796,4 +1002,6 @@
             this, &UIWizardExportAppPageBasic2::sltHandleAccountButtonClick);
 
+    /* Register classes: */
+    qRegisterMetaType<AbstractVSDParameterList>();
     /* Register fields: */
     registerField("format", this, "format");
@@ -806,4 +1014,5 @@
     registerField("profileName", this, "profileName");
     registerField("profile", this, "profile");
+    registerField("cloudClientParameters", this, "cloudClientParameters");
 }
 
@@ -948,5 +1157,5 @@
                           || field("format").toString() == "ovf-1.0"
                           || field("format").toString() == "ovf-2.0";
-        const bool fCSP =    isFormatCloudOne();
+        const bool fCSP =    field("isFormatCloudOne").toBool();
 
         const QString &strFile = field("path").toString().toLower();
@@ -959,4 +1168,22 @@
     }
 
+    return fResult;
+}
+
+bool UIWizardExportAppPageBasic2::validatePage()
+{
+    /* Initial result: */
+    bool fResult = true;
+
+    /* For cloud formats we need to: */
+    if (field("isFormatCloudOne").toBool())
+    {
+        /* Populate cloud client parameters: */
+        populateCloudClientParameters();
+        /* Which is required to continue to the next page: */
+        fResult = !field("cloudClientParameters").value<AbstractVSDParameterList>().isEmpty();
+    }
+
+    /* Return result: */
     return fResult;
 }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.h	(revision 75226)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.h	(revision 75227)
@@ -23,4 +23,5 @@
 
 /* GUI includes: */
+#include "UIApplianceEditorWidget.h"
 #include "UIWizardPage.h"
 
@@ -86,4 +87,17 @@
     /** Populates account properties. */
     void populateAccountProperties();
+    /** Populates cloud client parameters. */
+    void populateCloudClientParameters();
+
+    /** Parses JSON @a document. */
+    static AbstractVSDParameterList parseJsonDocument(const QJsonDocument &document);
+    /** Parses JSON bool @a field. */
+    static bool parseJsonFieldBool(const QString &strFieldName, const QJsonValue &field);
+    /** Parses JSON double @a field. */
+    static double parseJsonFieldDouble(const QString &strFieldName, const QJsonValue &field);
+    /** Parses JSON string @a field. */
+    static QString parseJsonFieldString(const QString &strFieldName, const QJsonValue &field);
+    /** Parses JSON array @a field. */
+    static QIStringPairList parseJsonFieldArray(const QString &strFieldName, const QJsonValue &field);
 
     /** Updates page appearance. */
@@ -147,11 +161,15 @@
     /** Returns Cloud Profile object. */
     CCloudProfile profile() const;
+    /** Returns Cloud Client parameters. */
+    AbstractVSDParameterList cloudClientParameters() const;
 
     /** Holds the Cloud Provider Manager reference. */
-    CCloudProviderManager  m_comCloudProviderManager;
+    CCloudProviderManager     m_comCloudProviderManager;
     /** Holds the Cloud Provider object reference. */
-    CCloudProvider         m_comCloudProvider;
+    CCloudProvider            m_comCloudProvider;
     /** Holds the Cloud Profile object reference. */
-    CCloudProfile          m_comCloudProfile;
+    CCloudProfile             m_comCloudProfile;
+    /** Holds the cloud client parameters. */
+    AbstractVSDParameterList  m_cloudClientParameters;
 
     /** Holds the default appliance name. */
@@ -219,4 +237,5 @@
     Q_PROPERTY(QString profileName READ profileName);
     Q_PROPERTY(CCloudProfile profile READ profile);
+    Q_PROPERTY(AbstractVSDParameterList cloudClientParameters READ cloudClientParameters);
 
 public:
@@ -242,4 +261,7 @@
     virtual bool isComplete() const /* override */;
 
+    /** Performs page validation. */
+    virtual bool validatePage() /* override */;
+
     /** Updates page appearance. */
     virtual void updatePageAppearance() /* override */;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic3.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic3.cpp	(revision 75226)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic3.cpp	(revision 75227)
@@ -21,8 +21,4 @@
 
 /* Qt includes: */
-# include <QJsonArray>
-# include <QJsonDocument>
-# include <QJsonObject>
-# include <QJsonValue>
 # include <QVBoxLayout>
 
@@ -37,6 +33,4 @@
 /* COM includes: */
 # include "CAppliance.h"
-# include "CCloudClient.h"
-# include "CCloudProfile.h"
 # include "CMachine.h"
 
@@ -50,201 +44,4 @@
 UIWizardExportAppPage3::UIWizardExportAppPage3()
 {
-}
-
-void UIWizardExportAppPage3::populateCloudClientParameters()
-{
-    /* Forget current parameters: */
-    m_listCloudClientParameters.clear();
-
-    /* Make sure Cloud Profile is not null: */
-    CCloudProfile comCloudProfile = fieldImp("profile").value<CCloudProfile>();
-    if (comCloudProfile.isNull())
-        return;
-
-    /* Create Cloud Client: */
-    CCloudClient comCloudClient = comCloudProfile.CreateCloudClient();
-    /* Show error message if necessary: */
-    if (!comCloudProfile.isOk())
-        msgCenter().cannotCreateCloudClient(comCloudProfile);
-    else
-    {
-        /* Read Cloud Client parameters for Export VM operation: */
-        const QString strJSON = comCloudClient.GetExportParameters();
-        /* Show error message if necessary: */
-        if (!comCloudClient.isOk())
-            msgCenter().cannotAcquireCloudClientParameter(comCloudClient);
-        else
-        {
-            /* Create JSON document and parse it: */
-            const QJsonDocument document = QJsonDocument::fromJson(strJSON.toUtf8());
-            if (!document.isEmpty())
-                m_listCloudClientParameters = parseJsonDocument(document);
-        }
-    }
-}
-
-/* static */
-AbstractVSDParameterList UIWizardExportAppPage3::parseJsonDocument(const QJsonDocument &document)
-{
-    /* Prepare parameters: */
-    AbstractVSDParameterList parameters;
-
-    /* Convert document to object, make sure it isn't empty: */
-    QJsonObject documentObject = document.object();
-    AssertMsgReturn(!documentObject.isEmpty(), ("Document object is empty!"), parameters);
-
-    /* Iterate through document object values: */
-    foreach (const QString &strElementName, documentObject.keys())
-    {
-        //printf("Element name: \"%s\"\n", strElementName.toUtf8().constData());
-
-        /* Prepare parameter: */
-        AbstractVSDParameter parameter;
-
-        /* Assign name: */
-        parameter.name = strElementName;
-
-        /* Acquire element, make sure it's an object: */
-        const QJsonValue element = documentObject.value(strElementName);
-        AssertMsg(element.isObject(), ("Element '%s' has wrong structure!", strElementName.toUtf8().constData()));
-        if (!element.isObject())
-            continue;
-
-        /* Convert element to object, make sure it isn't empty: */
-        const QJsonObject elementObject = element.toObject();
-        AssertMsg(!elementObject.isEmpty(), ("Element '%s' object has wrong structure!", strElementName.toUtf8().constData()));
-        if (elementObject.isEmpty())
-            continue;
-
-        /* Iterate through element object values: */
-        foreach (const QString &strFieldName, elementObject.keys())
-        {
-            //printf(" Field name: \"%s\"\n", strFieldName.toUtf8().constData());
-
-            /* Acquire field: */
-            const QJsonValue field = elementObject.value(strFieldName);
-
-            /* Parse known fields: */
-            if (strFieldName == "type")
-                parameter.type = (KVirtualSystemDescriptionType)(int)parseJsonFieldDouble(strFieldName, field);
-            else
-            if (strFieldName == "bool")
-            {
-                AbstractVSDParameterBool get;
-                get.value = parseJsonFieldBool(strFieldName, field);
-                parameter.get = QVariant::fromValue(get);
-                parameter.kind = ParameterKind_Bool;
-            }
-            else
-            if (strFieldName == "min")
-            {
-                AbstractVSDParameterDouble get = parameter.get.value<AbstractVSDParameterDouble>();
-                get.minimum = parseJsonFieldDouble(strFieldName, field);
-                parameter.get = QVariant::fromValue(get);
-                parameter.kind = ParameterKind_Double;
-            }
-            else
-            if (strFieldName == "max")
-            {
-                AbstractVSDParameterDouble get = parameter.get.value<AbstractVSDParameterDouble>();
-                get.maximum = parseJsonFieldDouble(strFieldName, field);
-                parameter.get = QVariant::fromValue(get);
-                parameter.kind = ParameterKind_Double;
-            }
-            else
-            if (strFieldName == "unit")
-            {
-                AbstractVSDParameterDouble get = parameter.get.value<AbstractVSDParameterDouble>();
-                get.unit = parseJsonFieldString(strFieldName, field);
-                parameter.get = QVariant::fromValue(get);
-                parameter.kind = ParameterKind_Double;
-            }
-            else
-            if (strFieldName == "items")
-            {
-                AbstractVSDParameterArray get;
-                get.values = parseJsonFieldArray(strFieldName, field);
-                parameter.get = QVariant::fromValue(get);
-                parameter.kind = ParameterKind_Array;
-            }
-        }
-
-        /* Append parameter: */
-        parameters << parameter;
-    }
-
-    /* Return parameters: */
-    return parameters;
-}
-
-/* static */
-bool UIWizardExportAppPage3::parseJsonFieldBool(const QString &strFieldName, const QJsonValue &field)
-{
-    /* Make sure field is bool: */
-    Q_UNUSED(strFieldName);
-    AssertMsgReturn(field.isBool(), ("Field '%s' has wrong structure!", strFieldName.toUtf8().constData()), false);
-    const bool fFieldValue = field.toBool();
-    //printf("  Field value: \"%s\"\n", fFieldValue ? "true" : "false");
-
-    return fFieldValue;
-}
-
-/* static */
-double UIWizardExportAppPage3::parseJsonFieldDouble(const QString &strFieldName, const QJsonValue &field)
-{
-    /* Make sure field is double: */
-    Q_UNUSED(strFieldName);
-    AssertMsgReturn(field.isDouble(), ("Field '%s' has wrong structure!", strFieldName.toUtf8().constData()), 0);
-    const double dFieldValue = field.toDouble();
-    //printf("  Field value: \"%f\"\n", dFieldValue);
-
-    return dFieldValue;
-}
-
-/* static */
-QString UIWizardExportAppPage3::parseJsonFieldString(const QString &strFieldName, const QJsonValue &field)
-{
-    /* Make sure field is string: */
-    Q_UNUSED(strFieldName);
-    AssertMsgReturn(field.isString(), ("Field '%s' has wrong structure!", strFieldName.toUtf8().constData()), QString());
-    const QString strFieldValue = field.toString();
-    //printf("  Field value: \"%s\"\n", strFieldValue.toUtf8().constData());
-
-    return strFieldValue;
-}
-
-/* static */
-QIStringPairList UIWizardExportAppPage3::parseJsonFieldArray(const QString &strFieldName, const QJsonValue &field)
-{
-    /* Make sure field is array: */
-    Q_UNUSED(strFieldName);
-    AssertMsgReturn(field.isArray(), ("Field '%s' has wrong structure!", strFieldName.toUtf8().constData()), QIStringPairList());
-    const QJsonArray fieldValueArray = field.toArray();
-    QIStringPairList fieldValueStringPairList;
-    /* Parse array: */
-    for (int i = 0; i < fieldValueArray.count(); ++i)
-    {
-        /* Parse current array value: */
-        const QJsonValue value = fieldValueArray[i];
-        /* If value is of string type, we just take it: */
-        if (value.isString())
-            fieldValueStringPairList << qMakePair(fieldValueArray[i].toString(), QString());
-        /* If value is of object type, we take object key/value pairs: */
-        else if (value.isObject())
-        {
-            const QJsonObject valueObject = value.toObject();
-            foreach (const QString &strKey, valueObject.keys())
-                fieldValueStringPairList << qMakePair(strKey, valueObject.value(strKey).toString());
-        }
-    }
-    //QStringList test;
-    //foreach (const QIStringPair &pair, fieldValueStringPairList)
-    //    if (pair.second.isNull())
-    //        test << QString("{%1}").arg(pair.first);
-    //    else
-    //        test << QString("{%1 : %2}").arg(pair.first, pair.second);
-    //printf("  Field value: \"%s\"\n", test.join(", ").toUtf8().constData());
-
-    return fieldValueStringPairList;
 }
 
@@ -270,10 +67,11 @@
                     if (fieldImp("isFormatCloudOne").toBool())
                     {
-                        /* Populate Cloud Client parameters: */
-                        populateCloudClientParameters();
+                        /* Acquire Cloud Client parameters: */
+                        const AbstractVSDParameterList cloudClientParameters =
+                            fieldImp("cloudClientParameters").value<AbstractVSDParameterList>();
                         /* Pass them as a list of hints to help editor with names/values: */
-                        m_pApplianceWidget->setVsdHints(m_listCloudClientParameters);
+                        m_pApplianceWidget->setVsdHints(cloudClientParameters);
                         /* Add corresponding Cloud Client fields with default values: */
-                        foreach (const AbstractVSDParameter &parameter, m_listCloudClientParameters)
+                        foreach (const AbstractVSDParameter &parameter, cloudClientParameters)
                         {
                             QString strValue;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic3.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic3.h	(revision 75226)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic3.h	(revision 75227)
@@ -43,18 +43,4 @@
     UIWizardExportAppPage3();
 
-    /** Populates cloud client parameters. */
-    void populateCloudClientParameters();
-
-    /** Parses JSON @a document. */
-    static AbstractVSDParameterList parseJsonDocument(const QJsonDocument &document);
-    /** Parses JSON bool @a field. */
-    static bool parseJsonFieldBool(const QString &strFieldName, const QJsonValue &field);
-    /** Parses JSON double @a field. */
-    static double parseJsonFieldDouble(const QString &strFieldName, const QJsonValue &field);
-    /** Parses JSON string @a field. */
-    static QString parseJsonFieldString(const QString &strFieldName, const QJsonValue &field);
-    /** Parses JSON array @a field. */
-    static QIStringPairList parseJsonFieldArray(const QString &strFieldName, const QJsonValue &field);
-
     /** Refreshes appliance settings widget. */
     void refreshApplianceSettingsWidget();
@@ -62,7 +48,4 @@
     /** Returns the appliance widget reference. */
     ExportAppliancePointer applianceWidget() const { return m_pApplianceWidget; }
-
-    /** Holds the cloud client parameters. */
-    AbstractVSDParameterList  m_listCloudClientParameters;
 
     /** Holds the appliance widget reference. */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.cpp	(revision 75226)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.cpp	(revision 75227)
@@ -352,4 +352,6 @@
     /* Populate account properties: */
     populateAccountProperties();
+    /* Populate cloud client parameters: */
+    populateCloudClientParameters();
 
     /* Setup connections: */
@@ -371,4 +373,6 @@
     qRegisterMetaType<ExportAppliancePointer>();
 
+    /* Register classes: */
+    qRegisterMetaType<AbstractVSDParameterList>();
     /* Register fields: */
     registerField("machineNames", this, "machineNames");
@@ -383,4 +387,5 @@
     registerField("profileName", this, "profileName");
     registerField("profile", this, "profile");
+    registerField("cloudClientParameters", this, "cloudClientParameters");
     registerField("applianceWidget", this, "applianceWidget");
 }
@@ -532,9 +537,11 @@
         const QString &strFile = field("path").toString().toLower();
         const QString &strAccount = field("profileName").toString();
+        const AbstractVSDParameterList &parameters = field("cloudClientParameters").value<AbstractVSDParameterList>();
 
         fResult =    (   fOVF
                       && VBoxGlobal::hasAllowedExtension(strFile, OVFFileExts))
                   || (   fCSP
-                      && !strAccount.isNull());
+                      && !strAccount.isNull()
+                      && !parameters.isEmpty());
     }
 
@@ -582,4 +589,5 @@
     populateAccounts();
     populateAccountProperties();
+    populateCloudClientParameters();
     refreshApplianceSettingsWidget();
     emit completeChanged();
@@ -596,4 +604,7 @@
     /* Refresh required settings: */
     populateAccountProperties();
+    populateCloudClientParameters();
+    refreshApplianceSettingsWidget();
+    emit completeChanged();
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.h	(revision 75226)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.h	(revision 75227)
@@ -45,4 +45,5 @@
     Q_PROPERTY(QString profileName READ profileName);
     Q_PROPERTY(CCloudProfile profile READ profile);
+    Q_PROPERTY(AbstractVSDParameterList cloudClientParameters READ cloudClientParameters);
     Q_PROPERTY(ExportAppliancePointer applianceWidget READ applianceWidget);
 
