Index: trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 88597)
+++ trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 88598)
@@ -910,5 +910,5 @@
 	src/wizards/newvd/UIWizardNewVD.h \
 	src/wizards/newvd/UIWizardNewVDPageFileType.h \
-	src/wizards/newvd/UIWizardNewVDPageBasic2.h \
+	src/wizards/newvd/UIWizardNewVDPageVariant.h \
 	src/wizards/newvd/UIWizardNewVDPageBasic3.h \
 	src/wizards/newvd/UIWizardNewVDPageExpert.h
@@ -1448,5 +1448,5 @@
 	src/wizards/newvd/UIWizardNewVD.cpp \
 	src/wizards/newvd/UIWizardNewVDPageFileType.cpp \
-	src/wizards/newvd/UIWizardNewVDPageBasic2.cpp \
+	src/wizards/newvd/UIWizardNewVDPageVariant.cpp \
 	src/wizards/newvd/UIWizardNewVDPageBasic3.cpp \
 	src/wizards/newvd/UIWizardNewVDPageExpert.cpp
Index: trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVD.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVD.cpp	(revision 88597)
+++ trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVD.cpp	(revision 88598)
@@ -23,5 +23,5 @@
 #include "UIWizardNewVD.h"
 #include "UIWizardNewVDPageFileType.h"
-#include "UIWizardNewVDPageBasic2.h"
+#include "UIWizardNewVDPageVariant.h"
 #include "UIWizardNewVDPageBasic3.h"
 #include "UIWizardNewVDPageExpert.h"
@@ -127,5 +127,5 @@
         {
             setPage(Page1, new UIWizardNewVDPageFileType);
-            setPage(Page2, new UIWizardNewVDPageBasic2);
+            setPage(Page2, new UIWizardNewVDPageVariant);
             setPage(Page3, new UIWizardNewVDPageBasic3(m_strDefaultName, m_strDefaultPath, m_uDefaultSize));
             break;
Index: trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic2.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic2.cpp	(revision 88597)
+++ 	(revision )
@@ -1,236 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIWizardNewVDPageBasic2 class implementation.
- */
-
-/*
- * Copyright (C) 2006-2020 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-/* Qt includes: */
-#include <QVBoxLayout>
-#include <QButtonGroup>
-#include <QRadioButton>
-#include <QCheckBox>
-
-/* GUI includes: */
-#include "UIWizardNewVDPageBasic2.h"
-#include "UIWizardNewVD.h"
-#include "QIRichTextLabel.h"
-
-/* COM includes: */
-#include "CMediumFormat.h"
-
-UIWizardNewVDPage2::UIWizardNewVDPage2()
-    : m_pFixedCheckBox(0)
-    , m_pSplitBox(0)
-    , m_pDescriptionLabel(0)
-    , m_pDynamicLabel(0)
-    , m_pFixedLabel(0)
-    , m_pSplitLabel(0)
-{
-}
-
-QWidget *UIWizardNewVDPage2::createMediumVariantWidgets(bool fWithLabels)
-{
-    QWidget *pContainerWidget = new QWidget;
-    QVBoxLayout *pMainLayout = new QVBoxLayout(pContainerWidget);
-    if (pMainLayout)
-    {
-        if (fWithLabels)
-        {
-            m_pDescriptionLabel = new QIRichTextLabel;
-            m_pDynamicLabel = new QIRichTextLabel;
-            m_pFixedLabel = new QIRichTextLabel;
-            m_pSplitLabel = new QIRichTextLabel;
-        }
-        QVBoxLayout *pVariantLayout = new QVBoxLayout;
-        if (pVariantLayout)
-        {
-            m_pFixedCheckBox = new QCheckBox;
-            m_pSplitBox = new QCheckBox;
-            pVariantLayout->addWidget(m_pFixedCheckBox);
-            pVariantLayout->addWidget(m_pSplitBox);
-        }
-        if (fWithLabels)
-        {
-            pMainLayout->addWidget(m_pDescriptionLabel);
-            pMainLayout->addWidget(m_pDynamicLabel);
-            pMainLayout->addWidget(m_pFixedLabel);
-            pMainLayout->addWidget(m_pSplitLabel);
-        }
-        pMainLayout->addLayout(pVariantLayout);
-        pMainLayout->addStretch();
-        pMainLayout->setContentsMargins(0, 0, 0, 0);
-    }
-    return pContainerWidget;
-}
-
-qulonglong UIWizardNewVDPage2::mediumVariant() const
-{
-    /* Initial value: */
-    qulonglong uMediumVariant = (qulonglong)KMediumVariant_Max;
-
-    /* Exclusive options: */
-    if (m_pFixedCheckBox && m_pFixedCheckBox->isChecked())
-        uMediumVariant = (qulonglong)KMediumVariant_Fixed;
-    else
-        uMediumVariant = (qulonglong)KMediumVariant_Standard;
-
-    /* Additional options: */
-    if (m_pSplitBox && m_pSplitBox->isChecked())
-        uMediumVariant |= (qulonglong)KMediumVariant_VmdkSplit2G;
-
-    /* Return options: */
-    return uMediumVariant;
-}
-
-void UIWizardNewVDPage2::setMediumVariant(qulonglong uMediumVariant)
-{
-    /* Exclusive options: */
-    if (uMediumVariant & (qulonglong)KMediumVariant_Fixed)
-    {
-        m_pFixedCheckBox->click();
-        m_pFixedCheckBox->setFocus();
-    }
-
-    /* Additional options: */
-    m_pSplitBox->setChecked(uMediumVariant & (qulonglong)KMediumVariant_VmdkSplit2G);
-}
-
-void UIWizardNewVDPage2::retranslateWidgets()
-{
-    if (m_pFixedCheckBox)
-    {
-        m_pFixedCheckBox->setText(UIWizardNewVD::tr("Pre-allocate &Full Size"));
-        m_pFixedCheckBox->setToolTip(UIWizardNewVD::tr("<p>When checked, the virtual disk image will be fully allocated at "
-                                                       "VM creation time, rather than being allocated dynamically at VM run-time.</p>"));
-    }
-
-    if (m_pSplitBox)
-        m_pSplitBox->setText(UIWizardNewVD::tr("&Split Into Files of Less Than 2GB"));
-
-
-    /* Translate rich text labels: */
-    if (m_pDescriptionLabel)
-        m_pDescriptionLabel->setText(UIWizardNewVD::tr("Please choose whether the new virtual hard disk file should grow as it is used "
-                                                       "(dynamically allocated) or if it should be created at its maximum size (fixed size)."));
-    if (m_pDynamicLabel)
-        m_pDynamicLabel->setText(UIWizardNewVD::tr("<p>A <b>dynamically allocated</b> hard disk file will only use space "
-                                                   "on your physical hard disk as it fills up (up to a maximum <b>fixed size</b>), "
-                                                   "although it will not shrink again automatically when space on it is freed.</p>"));
-    if (m_pFixedLabel)
-        m_pFixedLabel->setText(UIWizardNewVD::tr("<p>A <b>fixed size</b> hard disk file may take longer to create on some "
-                                                 "systems but is often faster to use.</p>"));
-    if (m_pSplitLabel)
-        m_pSplitLabel->setText(UIWizardNewVD::tr("<p>You can also choose to <b>split</b> the hard disk file into several files "
-                                                 "of up to two gigabytes each. This is mainly useful if you wish to store the "
-                                                 "virtual machine on removable USB devices or old systems, some of which cannot "
-                                                 "handle very large files."));
-}
-
-void UIWizardNewVDPage2::setWidgetVisibility(CMediumFormat &mediumFormat)
-{
-    ULONG uCapabilities = 0;
-    QVector<KMediumFormatCapabilities> capabilities;
-    capabilities = mediumFormat.GetCapabilities();
-    for (int i = 0; i < capabilities.size(); i++)
-        uCapabilities |= capabilities[i];
-
-    bool fIsCreateDynamicPossible = uCapabilities & KMediumFormatCapabilities_CreateDynamic;
-    bool fIsCreateFixedPossible = uCapabilities & KMediumFormatCapabilities_CreateFixed;
-    bool fIsCreateSplitPossible = uCapabilities & KMediumFormatCapabilities_CreateSplit2G;
-    if (m_pFixedCheckBox)
-    {
-        if (!fIsCreateDynamicPossible)
-        {
-            m_pFixedCheckBox->setChecked(true);
-            m_pFixedCheckBox->setEnabled(false);
-        }
-        if (!fIsCreateFixedPossible)
-        {
-            m_pFixedCheckBox->setChecked(false);
-            m_pFixedCheckBox->setEnabled(false);
-        }
-    }
-    if (m_pDynamicLabel)
-        m_pDynamicLabel->setHidden(!fIsCreateDynamicPossible);
-    if (m_pFixedLabel)
-        m_pFixedLabel->setHidden(!fIsCreateFixedPossible);
-    if (m_pFixedCheckBox)
-        m_pFixedCheckBox->setHidden(!fIsCreateFixedPossible);
-    if (m_pSplitLabel)
-        m_pSplitLabel->setHidden(!fIsCreateSplitPossible);
-    if (m_pSplitBox)
-        m_pSplitBox->setHidden(!fIsCreateSplitPossible);
-}
-
-void UIWizardNewVDPage2::updateMediumVariantWidgetsAfterFormatChange(const CMediumFormat &mediumFormat)
-{
-    /* Enable/disable widgets: */
-    ULONG uCapabilities = 0;
-    QVector<KMediumFormatCapabilities> capabilities;
-    capabilities = mediumFormat.GetCapabilities();
-    for (int i = 0; i < capabilities.size(); i++)
-        uCapabilities |= capabilities[i];
-
-    bool fIsCreateDynamicPossible = uCapabilities & KMediumFormatCapabilities_CreateDynamic;
-    bool fIsCreateFixedPossible = uCapabilities & KMediumFormatCapabilities_CreateFixed;
-    bool fIsCreateSplitPossible = uCapabilities & KMediumFormatCapabilities_CreateSplit2G;
-
-    if (m_pFixedCheckBox)
-    {
-        m_pFixedCheckBox->setEnabled(fIsCreateDynamicPossible || fIsCreateFixedPossible);
-        if (!fIsCreateDynamicPossible)
-            m_pFixedCheckBox->setChecked(true);
-        if (!fIsCreateFixedPossible)
-            m_pFixedCheckBox->setChecked(false);
-    }
-    m_pSplitBox->setEnabled(fIsCreateSplitPossible);
-}
-
-UIWizardNewVDPageBasic2::UIWizardNewVDPageBasic2()
-{
-    /* Create widgets: */
-    QVBoxLayout *pMainLayout = new QVBoxLayout(this);
-    pMainLayout->addWidget(createMediumVariantWidgets(true));
-    pMainLayout->addStretch();
-
-    /* Setup connections: */
-    connect(m_pFixedCheckBox, &QAbstractButton::toggled,
-            this, &UIWizardNewVDPageBasic2::completeChanged);
-    connect(m_pSplitBox, &QCheckBox::stateChanged,
-            this, &UIWizardNewVDPageBasic2::completeChanged);
-
-    /* Register fields: */
-    registerField("mediumVariant", this, "mediumVariant");
-}
-
-void UIWizardNewVDPageBasic2::retranslateUi()
-{
-    retranslateWidgets();
-    /* Translate page: */
-    setTitle(UIWizardNewVD::tr("Storage on physical hard disk"));
-}
-
-void UIWizardNewVDPageBasic2::initializePage()
-{
-    /* Translate page: */
-    retranslateUi();
-    CMediumFormat mediumFormat = field("mediumFormat").value<CMediumFormat>();
-    setWidgetVisibility(mediumFormat);
-}
-
-bool UIWizardNewVDPageBasic2::isComplete() const
-{
-    /* Make sure medium variant is correct: */
-    return mediumVariant() != (qulonglong)KMediumVariant_Max;
-}
Index: trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic2.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic2.h	(revision 88597)
+++ 	(revision )
@@ -1,82 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIWizardNewVDPageBasic2 class declaration.
- */
-
-/*
- * Copyright (C) 2006-2020 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef FEQT_INCLUDED_SRC_wizards_newvd_UIWizardNewVDPageBasic2_h
-#define FEQT_INCLUDED_SRC_wizards_newvd_UIWizardNewVDPageBasic2_h
-#ifndef RT_WITHOUT_PRAGMA_ONCE
-# pragma once
-#endif
-
-/* GUI includes: */
-#include "UIWizardPage.h"
-
-/* Forward declarations: */
-class CMediumFormat;
-class QButtonGroup;
-class QCheckBox;
-class QIRichTextLabel;
-
-
-/* 2nd page of the New Virtual Hard Drive wizard (base part): */
-class SHARED_LIBRARY_STUFF UIWizardNewVDPage2 : public UIWizardPageBase
-{
-protected:
-
-    /** Constructor: */
-    UIWizardNewVDPage2();
-
-    QWidget *createMediumVariantWidgets(bool fWithLabels);
-    qulonglong mediumVariant() const;
-    void setMediumVariant(qulonglong uMediumVariant);
-    void retranslateWidgets();
-    /** Check Medium format capability and decide if certain widgets can be shown. */
-    void setWidgetVisibility(CMediumFormat &mediumFormat);
-    void updateMediumVariantWidgetsAfterFormatChange(const CMediumFormat &mediumFormat);
-    /** @name Widgets
-     * @{ */
-        QCheckBox *m_pFixedCheckBox;
-        QCheckBox *m_pSplitBox;
-    /** @} */
-
-    /** @name Rich text labels. Declared/defined here since the are shared in more than one child class
-     * @{ */
-        QIRichTextLabel *m_pDescriptionLabel;
-        QIRichTextLabel *m_pDynamicLabel;
-        QIRichTextLabel *m_pFixedLabel;
-        QIRichTextLabel *m_pSplitLabel;
-    /** @} */
-};
-
-/* 2nd page of the New Virtual Hard Drive wizard (basic extension): */
-class SHARED_LIBRARY_STUFF UIWizardNewVDPageBasic2 : public UIWizardPage, public UIWizardNewVDPage2
-{
-    Q_OBJECT;
-    Q_PROPERTY(qulonglong mediumVariant READ mediumVariant WRITE setMediumVariant);
-
-public:
-
-    UIWizardNewVDPageBasic2();
-
-private:
-
-    void retranslateUi();
-    void initializePage();
-    bool isComplete() const;
-};
-
-
-#endif /* !FEQT_INCLUDED_SRC_wizards_newvd_UIWizardNewVDPageBasic2_h */
Index: trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageExpert.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageExpert.cpp	(revision 88597)
+++ trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageExpert.cpp	(revision 88598)
@@ -154,5 +154,5 @@
 {
     UIWizardNewVDPageBaseFileType::retranslateWidgets();
-    UIWizardNewVDPage2::retranslateWidgets();
+    UIWizardNewVDPageBaseVariant::retranslateWidgets();
     UIWizardNewVDPage3::retranslateWidgets();
     /* Translate widgets: */
Index: trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageExpert.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageExpert.h	(revision 88597)
+++ trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageExpert.h	(revision 88598)
@@ -24,5 +24,5 @@
 /* GUI includes: */
 #include "UIWizardNewVDPageFileType.h"
-#include "UIWizardNewVDPageBasic2.h"
+#include "UIWizardNewVDPageVariant.h"
 #include "UIWizardNewVDPageBasic3.h"
 
@@ -33,5 +33,5 @@
 class SHARED_LIBRARY_STUFF UIWizardNewVDPageExpert : public UIWizardPage,
                                                      public UIWizardNewVDPageBaseFileType,
-                                                     public UIWizardNewVDPage2,
+                                                     public UIWizardNewVDPageBaseVariant,
                                                      public UIWizardNewVDPage3
 {
Index: trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageVariant.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageVariant.cpp	(revision 88598)
+++ trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageVariant.cpp	(revision 88598)
@@ -0,0 +1,236 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIWizardNewVDPageVariant class implementation.
+ */
+
+/*
+ * Copyright (C) 2006-2020 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+/* Qt includes: */
+#include <QVBoxLayout>
+#include <QButtonGroup>
+#include <QRadioButton>
+#include <QCheckBox>
+
+/* GUI includes: */
+#include "UIWizardNewVDPageVariant.h"
+#include "UIWizardNewVD.h"
+#include "QIRichTextLabel.h"
+
+/* COM includes: */
+#include "CMediumFormat.h"
+
+UIWizardNewVDPageBaseVariant::UIWizardNewVDPageBaseVariant()
+    : m_pFixedCheckBox(0)
+    , m_pSplitBox(0)
+    , m_pDescriptionLabel(0)
+    , m_pDynamicLabel(0)
+    , m_pFixedLabel(0)
+    , m_pSplitLabel(0)
+{
+}
+
+QWidget *UIWizardNewVDPageBaseVariant::createMediumVariantWidgets(bool fWithLabels)
+{
+    QWidget *pContainerWidget = new QWidget;
+    QVBoxLayout *pMainLayout = new QVBoxLayout(pContainerWidget);
+    if (pMainLayout)
+    {
+        if (fWithLabels)
+        {
+            m_pDescriptionLabel = new QIRichTextLabel;
+            m_pDynamicLabel = new QIRichTextLabel;
+            m_pFixedLabel = new QIRichTextLabel;
+            m_pSplitLabel = new QIRichTextLabel;
+        }
+        QVBoxLayout *pVariantLayout = new QVBoxLayout;
+        if (pVariantLayout)
+        {
+            m_pFixedCheckBox = new QCheckBox;
+            m_pSplitBox = new QCheckBox;
+            pVariantLayout->addWidget(m_pFixedCheckBox);
+            pVariantLayout->addWidget(m_pSplitBox);
+        }
+        if (fWithLabels)
+        {
+            pMainLayout->addWidget(m_pDescriptionLabel);
+            pMainLayout->addWidget(m_pDynamicLabel);
+            pMainLayout->addWidget(m_pFixedLabel);
+            pMainLayout->addWidget(m_pSplitLabel);
+        }
+        pMainLayout->addLayout(pVariantLayout);
+        pMainLayout->addStretch();
+        pMainLayout->setContentsMargins(0, 0, 0, 0);
+    }
+    return pContainerWidget;
+}
+
+qulonglong UIWizardNewVDPageBaseVariant::mediumVariant() const
+{
+    /* Initial value: */
+    qulonglong uMediumVariant = (qulonglong)KMediumVariant_Max;
+
+    /* Exclusive options: */
+    if (m_pFixedCheckBox && m_pFixedCheckBox->isChecked())
+        uMediumVariant = (qulonglong)KMediumVariant_Fixed;
+    else
+        uMediumVariant = (qulonglong)KMediumVariant_Standard;
+
+    /* Additional options: */
+    if (m_pSplitBox && m_pSplitBox->isChecked())
+        uMediumVariant |= (qulonglong)KMediumVariant_VmdkSplit2G;
+
+    /* Return options: */
+    return uMediumVariant;
+}
+
+void UIWizardNewVDPageBaseVariant::setMediumVariant(qulonglong uMediumVariant)
+{
+    /* Exclusive options: */
+    if (uMediumVariant & (qulonglong)KMediumVariant_Fixed)
+    {
+        m_pFixedCheckBox->click();
+        m_pFixedCheckBox->setFocus();
+    }
+
+    /* Additional options: */
+    m_pSplitBox->setChecked(uMediumVariant & (qulonglong)KMediumVariant_VmdkSplit2G);
+}
+
+void UIWizardNewVDPageBaseVariant::retranslateWidgets()
+{
+    if (m_pFixedCheckBox)
+    {
+        m_pFixedCheckBox->setText(UIWizardNewVD::tr("Pre-allocate &Full Size"));
+        m_pFixedCheckBox->setToolTip(UIWizardNewVD::tr("<p>When checked, the virtual disk image will be fully allocated at "
+                                                       "VM creation time, rather than being allocated dynamically at VM run-time.</p>"));
+    }
+
+    if (m_pSplitBox)
+        m_pSplitBox->setText(UIWizardNewVD::tr("&Split Into Files of Less Than 2GB"));
+
+
+    /* Translate rich text labels: */
+    if (m_pDescriptionLabel)
+        m_pDescriptionLabel->setText(UIWizardNewVD::tr("Please choose whether the new virtual hard disk file should grow as it is used "
+                                                       "(dynamically allocated) or if it should be created at its maximum size (fixed size)."));
+    if (m_pDynamicLabel)
+        m_pDynamicLabel->setText(UIWizardNewVD::tr("<p>A <b>dynamically allocated</b> hard disk file will only use space "
+                                                   "on your physical hard disk as it fills up (up to a maximum <b>fixed size</b>), "
+                                                   "although it will not shrink again automatically when space on it is freed.</p>"));
+    if (m_pFixedLabel)
+        m_pFixedLabel->setText(UIWizardNewVD::tr("<p>A <b>fixed size</b> hard disk file may take longer to create on some "
+                                                 "systems but is often faster to use.</p>"));
+    if (m_pSplitLabel)
+        m_pSplitLabel->setText(UIWizardNewVD::tr("<p>You can also choose to <b>split</b> the hard disk file into several files "
+                                                 "of up to two gigabytes each. This is mainly useful if you wish to store the "
+                                                 "virtual machine on removable USB devices or old systems, some of which cannot "
+                                                 "handle very large files."));
+}
+
+void UIWizardNewVDPageBaseVariant::setWidgetVisibility(CMediumFormat &mediumFormat)
+{
+    ULONG uCapabilities = 0;
+    QVector<KMediumFormatCapabilities> capabilities;
+    capabilities = mediumFormat.GetCapabilities();
+    for (int i = 0; i < capabilities.size(); i++)
+        uCapabilities |= capabilities[i];
+
+    bool fIsCreateDynamicPossible = uCapabilities & KMediumFormatCapabilities_CreateDynamic;
+    bool fIsCreateFixedPossible = uCapabilities & KMediumFormatCapabilities_CreateFixed;
+    bool fIsCreateSplitPossible = uCapabilities & KMediumFormatCapabilities_CreateSplit2G;
+    if (m_pFixedCheckBox)
+    {
+        if (!fIsCreateDynamicPossible)
+        {
+            m_pFixedCheckBox->setChecked(true);
+            m_pFixedCheckBox->setEnabled(false);
+        }
+        if (!fIsCreateFixedPossible)
+        {
+            m_pFixedCheckBox->setChecked(false);
+            m_pFixedCheckBox->setEnabled(false);
+        }
+    }
+    if (m_pDynamicLabel)
+        m_pDynamicLabel->setHidden(!fIsCreateDynamicPossible);
+    if (m_pFixedLabel)
+        m_pFixedLabel->setHidden(!fIsCreateFixedPossible);
+    if (m_pFixedCheckBox)
+        m_pFixedCheckBox->setHidden(!fIsCreateFixedPossible);
+    if (m_pSplitLabel)
+        m_pSplitLabel->setHidden(!fIsCreateSplitPossible);
+    if (m_pSplitBox)
+        m_pSplitBox->setHidden(!fIsCreateSplitPossible);
+}
+
+void UIWizardNewVDPageBaseVariant::updateMediumVariantWidgetsAfterFormatChange(const CMediumFormat &mediumFormat)
+{
+    /* Enable/disable widgets: */
+    ULONG uCapabilities = 0;
+    QVector<KMediumFormatCapabilities> capabilities;
+    capabilities = mediumFormat.GetCapabilities();
+    for (int i = 0; i < capabilities.size(); i++)
+        uCapabilities |= capabilities[i];
+
+    bool fIsCreateDynamicPossible = uCapabilities & KMediumFormatCapabilities_CreateDynamic;
+    bool fIsCreateFixedPossible = uCapabilities & KMediumFormatCapabilities_CreateFixed;
+    bool fIsCreateSplitPossible = uCapabilities & KMediumFormatCapabilities_CreateSplit2G;
+
+    if (m_pFixedCheckBox)
+    {
+        m_pFixedCheckBox->setEnabled(fIsCreateDynamicPossible || fIsCreateFixedPossible);
+        if (!fIsCreateDynamicPossible)
+            m_pFixedCheckBox->setChecked(true);
+        if (!fIsCreateFixedPossible)
+            m_pFixedCheckBox->setChecked(false);
+    }
+    m_pSplitBox->setEnabled(fIsCreateSplitPossible);
+}
+
+UIWizardNewVDPageVariant::UIWizardNewVDPageVariant()
+{
+    /* Create widgets: */
+    QVBoxLayout *pMainLayout = new QVBoxLayout(this);
+    pMainLayout->addWidget(createMediumVariantWidgets(true));
+    pMainLayout->addStretch();
+
+    /* Setup connections: */
+    connect(m_pFixedCheckBox, &QAbstractButton::toggled,
+            this, &UIWizardNewVDPageVariant::completeChanged);
+    connect(m_pSplitBox, &QCheckBox::stateChanged,
+            this, &UIWizardNewVDPageVariant::completeChanged);
+
+    /* Register fields: */
+    registerField("mediumVariant", this, "mediumVariant");
+}
+
+void UIWizardNewVDPageVariant::retranslateUi()
+{
+    retranslateWidgets();
+    /* Translate page: */
+    setTitle(UIWizardNewVD::tr("Storage on physical hard disk"));
+}
+
+void UIWizardNewVDPageVariant::initializePage()
+{
+    /* Translate page: */
+    retranslateUi();
+    CMediumFormat mediumFormat = field("mediumFormat").value<CMediumFormat>();
+    setWidgetVisibility(mediumFormat);
+}
+
+bool UIWizardNewVDPageVariant::isComplete() const
+{
+    /* Make sure medium variant is correct: */
+    return mediumVariant() != (qulonglong)KMediumVariant_Max;
+}
Index: trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageVariant.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageVariant.h	(revision 88598)
+++ trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageVariant.h	(revision 88598)
@@ -0,0 +1,82 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIWizardNewVDPageVariant class declaration.
+ */
+
+/*
+ * Copyright (C) 2006-2020 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef FEQT_INCLUDED_SRC_wizards_newvd_UIWizardNewVDPageVariant_h
+#define FEQT_INCLUDED_SRC_wizards_newvd_UIWizardNewVDPageVariant_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+/* GUI includes: */
+#include "UIWizardPage.h"
+
+/* Forward declarations: */
+class CMediumFormat;
+class QButtonGroup;
+class QCheckBox;
+class QIRichTextLabel;
+
+
+/* 2nd page of the New Virtual Hard Drive wizard (base part): */
+class SHARED_LIBRARY_STUFF UIWizardNewVDPageBaseVariant : public UIWizardPageBase
+{
+protected:
+
+    /** Constructor: */
+    UIWizardNewVDPageBaseVariant();
+
+    QWidget *createMediumVariantWidgets(bool fWithLabels);
+    qulonglong mediumVariant() const;
+    void setMediumVariant(qulonglong uMediumVariant);
+    void retranslateWidgets();
+    /** Check Medium format capability and decide if certain widgets can be shown. */
+    void setWidgetVisibility(CMediumFormat &mediumFormat);
+    void updateMediumVariantWidgetsAfterFormatChange(const CMediumFormat &mediumFormat);
+    /** @name Widgets
+     * @{ */
+        QCheckBox *m_pFixedCheckBox;
+        QCheckBox *m_pSplitBox;
+    /** @} */
+
+    /** @name Rich text labels. Declared/defined here since the are shared in more than one child class
+     * @{ */
+        QIRichTextLabel *m_pDescriptionLabel;
+        QIRichTextLabel *m_pDynamicLabel;
+        QIRichTextLabel *m_pFixedLabel;
+        QIRichTextLabel *m_pSplitLabel;
+    /** @} */
+};
+
+/* 2nd page of the New Virtual Hard Drive wizard (basic extension): */
+class SHARED_LIBRARY_STUFF UIWizardNewVDPageVariant : public UIWizardPage, public UIWizardNewVDPageBaseVariant
+{
+    Q_OBJECT;
+    Q_PROPERTY(qulonglong mediumVariant READ mediumVariant WRITE setMediumVariant);
+
+public:
+
+    UIWizardNewVDPageVariant();
+
+private:
+
+    void retranslateUi();
+    void initializePage();
+    bool isComplete() const;
+};
+
+
+#endif /* !FEQT_INCLUDED_SRC_wizards_newvd_UIWizardNewVDPageVariant_h */
Index: trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageDisk.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageDisk.cpp	(revision 88597)
+++ trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageDisk.cpp	(revision 88598)
@@ -310,5 +310,5 @@
     UIWizardNewVMPageDiskBase::retranslateWidgets();
     UIWizardNewVDPageBaseFileType::retranslateWidgets();
-    UIWizardNewVDPage2::retranslateWidgets();
+    UIWizardNewVDPageBaseVariant::retranslateWidgets();
     UIWizardNewVDPage3::retranslateWidgets();
 }
Index: trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageDisk.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageDisk.h	(revision 88597)
+++ trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageDisk.h	(revision 88598)
@@ -28,5 +28,5 @@
 #include "UIWizardPage.h"
 #include "UIWizardNewVDPageFileType.h"
-#include "UIWizardNewVDPageBasic2.h"
+#include "UIWizardNewVDPageVariant.h"
 #include "UIWizardNewVDPageBasic3.h"
 #include "UIWizardNewVM.h"
@@ -81,5 +81,5 @@
                                 public UIWizardNewVMPageDiskBase,
                                 public UIWizardNewVDPageBaseFileType,
-                                public UIWizardNewVDPage2,
+                                public UIWizardNewVDPageBaseVariant,
                                 public UIWizardNewVDPage3
 {
Index: trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageExpert.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageExpert.cpp	(revision 88597)
+++ trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageExpert.cpp	(revision 88598)
@@ -159,5 +159,5 @@
     UIWizardNewVMPageDiskBase::retranslateWidgets();
     UIWizardNewVDPageBaseFileType::retranslateWidgets();
-    UIWizardNewVDPage2::retranslateWidgets();
+    UIWizardNewVDPageBaseVariant::retranslateWidgets();
     UIWizardNewVDPage3::retranslateWidgets();
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageExpert.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageExpert.h	(revision 88597)
+++ trunk/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageExpert.h	(revision 88598)
@@ -43,5 +43,5 @@
                                 public UIWizardNewVMPageDiskBase,
                                 public UIWizardNewVDPageBaseFileType,
-                                public UIWizardNewVDPage2,
+                                public UIWizardNewVDPageBaseVariant,
                                 public UIWizardNewVDPage3
 {
