Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.cpp	(revision 82354)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.cpp	(revision 82355)
@@ -195,5 +195,5 @@
 KChipsetType UIMachineSettingsSystem::chipsetType() const
 {
-    return (KChipsetType)m_pComboChipsetType->itemData(m_pComboChipsetType->currentIndex()).toInt();
+    return m_pComboChipsetType->currentData().value<KChipsetType>();
 }
 
@@ -267,4 +267,5 @@
     /* We are doing that *now* because these combos have
      * dynamical content which depends on cashed value: */
+    repopulateComboChipsetType();
     repopulateComboPointingHIDType();
     repopulateComboParavirtProviderType();
@@ -314,8 +315,9 @@
     newSystemData.m_iMemorySize = m_pBaseMemoryEditor->value();
     newSystemData.m_bootItems = m_pBootOrderEditor->value();
-    newSystemData.m_chipsetType = (KChipsetType)m_pComboChipsetType->itemData(m_pComboChipsetType->currentIndex()).toInt();
+    newSystemData.m_chipsetType = m_pComboChipsetType->currentData().value<KChipsetType>();
     newSystemData.m_pointingHIDType = m_pComboPointingHIDType->currentData().value<KPointingHIDType>();
-    newSystemData.m_fEnabledIoApic = m_pCheckBoxApic->isChecked() || m_pSliderCPUCount->value() > 1 ||
-                                  (KChipsetType)m_pComboChipsetType->itemData(m_pComboChipsetType->currentIndex()).toInt() == KChipsetType_ICH9;
+    newSystemData.m_fEnabledIoApic =    m_pCheckBoxApic->isChecked()
+                                     || m_pSliderCPUCount->value() > 1
+                                     || m_pComboChipsetType->currentData().value<KChipsetType>() == KChipsetType_ICH9;
     newSystemData.m_fEnabledEFI = m_pCheckBoxEFI->isChecked();
     newSystemData.m_fEnabledUTC = m_pCheckBoxUseUTC->isChecked();
@@ -390,5 +392,5 @@
 
         /* Chipset type vs IO-APIC test: */
-        if ((KChipsetType)m_pComboChipsetType->itemData(m_pComboChipsetType->currentIndex()).toInt() == KChipsetType_ICH9 && !m_pCheckBoxApic->isChecked())
+        if (m_pComboChipsetType->currentData().value<KChipsetType>() == KChipsetType_ICH9 && !m_pCheckBoxApic->isChecked())
         {
             message.second << tr(
@@ -740,6 +742,5 @@
         {
             /* Configure combo-box: */
-            m_pComboChipsetType->addItem(gpConverter->toString(KChipsetType_PIIX3), QVariant(KChipsetType_PIIX3));
-            m_pComboChipsetType->addItem(gpConverter->toString(KChipsetType_ICH9), QVariant(KChipsetType_ICH9));
+            m_pComboChipsetType->setSizeAdjustPolicy(QComboBox::AdjustToContents);
         }
 
@@ -835,5 +836,5 @@
     /* Configure 'Motherboard' connections: */
     connect(m_pComboChipsetType, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
-        this, &UIMachineSettingsSystem::revalidate);
+            this, &UIMachineSettingsSystem::revalidate);
     connect(m_pComboPointingHIDType, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
             this, &UIMachineSettingsSystem::revalidate);
@@ -864,4 +865,26 @@
 }
 
+void UIMachineSettingsSystem::repopulateComboChipsetType()
+{
+    /* Chipset Type combo-box created in the .ui file. */
+    AssertPtrReturnVoid(m_pComboChipsetType);
+    {
+        /* Clear combo first of all: */
+        m_pComboChipsetType->clear();
+
+        /* Load currently supported chipset types: */
+        CSystemProperties comProperties = uiCommon().virtualBox().GetSystemProperties();
+        QVector<KChipsetType> chipsetTypes = comProperties.GetSupportedChipsetTypes();
+        /* Take into account currently cached value: */
+        const KChipsetType enmCachedValue = m_pCache->base().m_chipsetType;
+        if (!chipsetTypes.contains(enmCachedValue))
+            chipsetTypes.prepend(enmCachedValue);
+
+        /* Populate combo finally: */
+        foreach (const KChipsetType &enmType, chipsetTypes)
+            m_pComboChipsetType->addItem(gpConverter->toString(enmType), QVariant::fromValue(enmType));
+    }
+}
+
 void UIMachineSettingsSystem::repopulateComboPointingHIDType()
 {
@@ -910,14 +933,10 @@
 void UIMachineSettingsSystem::retranslateComboChipsetType()
 {
-    /* For each the element in KChipsetType enum: */
-    for (int iIndex = (int)KChipsetType_Null; iIndex < (int)KChipsetType_Max; ++iIndex)
-    {
-        /* Cast to the corresponding type: */
-        const KChipsetType enmType = (KChipsetType)iIndex;
-        /* Look for the corresponding item: */
-        const int iCorrespondingIndex = m_pComboChipsetType->findData((int)enmType);
-        /* Re-translate if corresponding item was found: */
-        if (iCorrespondingIndex != -1)
-            m_pComboChipsetType->setItemText(iCorrespondingIndex, gpConverter->toString(enmType));
+    /* For each the element in m_pComboChipsetType: */
+    for (int iIndex = 0; iIndex < m_pComboChipsetType->count(); ++iIndex)
+    {
+        /* Apply retranslated text: */
+        const KChipsetType enmType = m_pComboChipsetType->currentData().value<KChipsetType>();
+        m_pComboChipsetType->setItemText(iIndex, gpConverter->toString(enmType));
     }
 }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.h	(revision 82354)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.h	(revision 82355)
@@ -128,4 +128,6 @@
     void cleanup();
 
+    /** Repopulates Chipset type combo-box. */
+    void repopulateComboChipsetType();
     /** Repopulates Pointing HID type combo-box. */
     void repopulateComboPointingHIDType();
