Index: trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h	(revision 51987)
+++ trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h	(revision 51988)
@@ -96,4 +96,5 @@
 template<> bool canConvert<KMachineState>();
 template<> bool canConvert<KSessionState>();
+template<> bool canConvert<KParavirtProvider>();
 template<> bool canConvert<KDeviceType>();
 template<> bool canConvert<KClipboardMode>();
@@ -173,4 +174,5 @@
 template<> QString toString(const KMachineState &state);
 template<> QString toString(const KSessionState &state);
+template<> QString toString(const KParavirtProvider &type);
 template<> QString toString(const KDeviceType &type);
 template<> QString toString(const KClipboardMode &mode);
Index: trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendCOM.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendCOM.cpp	(revision 51987)
+++ trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendCOM.cpp	(revision 51988)
@@ -33,4 +33,5 @@
 template<> bool canConvert<KMachineState>() { return true; }
 template<> bool canConvert<KSessionState>() { return true; }
+template<> bool canConvert<KParavirtProvider>() { return true; }
 template<> bool canConvert<KDeviceType>() { return true; }
 template<> bool canConvert<KClipboardMode>() { return true; }
@@ -172,4 +173,19 @@
 }
 
+/* QString <= KParavirtProvider: */
+template<> QString toString(const KParavirtProvider &type)
+{
+    switch (type)
+    {
+        case KParavirtProvider_None:    return QApplication::translate("VBoxGlobal", "None", "ParavirtProvider");
+        case KParavirtProvider_Default: return QApplication::translate("VBoxGlobal", "Default", "ParavirtProvider");
+        case KParavirtProvider_Legacy:  return QApplication::translate("VBoxGlobal", "Legacy", "ParavirtProvider");
+        case KParavirtProvider_Minimal: return QApplication::translate("VBoxGlobal", "Minimal", "ParavirtProvider");
+        case KParavirtProvider_HyperV:  return QApplication::translate("VBoxGlobal", "Hyper-V", "ParavirtProvider");
+        default: AssertMsgFailed(("No text for %d", type)); break;
+    }
+    return QString();
+}
+
 /* QString <= KDeviceType: */
 template<> QString toString(const KDeviceType &type)
Index: trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 51987)
+++ trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 51988)
@@ -1212,4 +1212,9 @@
             iRowCount += 2; /* VT-x/AMD-V items. */
 
+        /* Paravirtualization Interface: */
+        const QString strParavirtProvider = gpConverter->toString(aMachine.GetParavirtProvider());
+
+        iRowCount += 1; /* Paravirtualization Interface. */
+
         QString item = QString (sSectionItemTpl2).arg (tr ("Base Memory", "details report"),
                                                        tr ("<nobr>%1 MB</nobr>", "details report"))
@@ -1232,4 +1237,6 @@
                 item += QString (sSectionItemTpl2).arg (tr ("VT-x/AMD-V", "details report"), virt)
                      +  QString (sSectionItemTpl2).arg (tr ("Nested Paging", "details report"), nested);
+
+        item += QString(sSectionItemTpl2).arg(tr("Paravirtualization Interface", "details report"), strParavirtProvider);
 
         report += sectionTpl
Index: trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp	(revision 51987)
+++ trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp	(revision 51988)
@@ -342,4 +342,12 @@
             if (machine().GetCPUProperty(KCPUPropertyType_PAE))
                 acceleration << QApplication::translate("UIGDetails", "PAE/NX", "details (system)");
+            switch (machine().GetParavirtProvider())
+            {
+                case KParavirtProvider_Default: acceleration << QApplication::translate("UIGDetails", "Default Paravirtualization", "details (system)"); break;
+                case KParavirtProvider_Legacy:  acceleration << QApplication::translate("UIGDetails", "Legacy Paravirtualization", "details (system)"); break;
+                case KParavirtProvider_Minimal: acceleration << QApplication::translate("UIGDetails", "Minimal Paravirtualization", "details (system)"); break;
+                case KParavirtProvider_HyperV:  acceleration << QApplication::translate("UIGDetails", "Hyper-V Paravirtualization", "details (system)"); break;
+                default: break;
+            }
             if (!acceleration.isEmpty())
                 m_text << UITextTableLine(QApplication::translate("UIGDetails", "Acceleration", "details (system)"),
Index: trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.cpp	(revision 51987)
+++ trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.cpp	(revision 51988)
@@ -129,4 +129,5 @@
 
     /* Load acceleration data: */
+    systemData.m_paravirtProvider = m_machine.GetParavirtProvider();
     systemData.m_fEnabledHwVirtEx = m_machine.GetHWVirtExProperty(KHWVirtExPropertyType_Enabled);
     systemData.m_fEnabledNestedPaging = m_machine.GetHWVirtExProperty(KHWVirtExPropertyType_NestedPaging);
@@ -179,4 +180,6 @@
 
     /* Load acceleration data to page: */
+    int iParavirtProviderPosition = m_pComboParavirtProvider->findData(systemData.m_paravirtProvider);
+    m_pComboParavirtProvider->setCurrentIndex(iParavirtProviderPosition == -1 ? 0 : iParavirtProviderPosition);
     m_pCheckBoxVirtualization->setChecked(systemData.m_fEnabledHwVirtEx);
     m_pCheckBoxNestedPaging->setChecked(systemData.m_fEnabledNestedPaging);
@@ -222,4 +225,5 @@
 
     /* Gather acceleration data: */
+    systemData.m_paravirtProvider = (KParavirtProvider)m_pComboParavirtProvider->itemData(m_pComboParavirtProvider->currentIndex()).toInt();
     systemData.m_fEnabledHwVirtEx = m_pCheckBoxVirtualization->checkState() == Qt::Checked || m_pSliderCPUCount->value() > 1;
     systemData.m_fEnabledNestedPaging = m_pCheckBoxNestedPaging->isChecked();
@@ -271,4 +275,5 @@
 
             /* Acceleration tab: */
+            m_machine.SetParavirtProvider(systemData.m_paravirtProvider);
             m_machine.SetHWVirtExProperty(KHWVirtExPropertyType_Enabled, systemData.m_fEnabledHwVirtEx);
             m_machine.SetHWVirtExProperty(KHWVirtExPropertyType_NestedPaging, systemData.m_fEnabledNestedPaging);
@@ -417,7 +422,8 @@
     setTabOrder(m_pEditorCPUCount, m_pSliderCPUExecCap);
     setTabOrder(m_pSliderCPUExecCap, m_pEditorCPUExecCap);
-    setTabOrder(m_pEditorCPUExecCap, m_pCheckBoxPAE);
+    setTabOrder(m_pEditorCPUExecCap, m_pComboParavirtProvider);
 
     /* Configure navigation for 'acceleration' tab: */
+    setTabOrder(m_pComboParavirtProvider, m_pCheckBoxPAE);
     setTabOrder(m_pCheckBoxPAE, m_pCheckBoxVirtualization);
     setTabOrder(m_pCheckBoxVirtualization, m_pCheckBoxNestedPaging);
@@ -445,6 +451,7 @@
 
     /* Retranslate combo-boxes: */
-    retranslateComboPointingChipsetType();
+    retranslateComboChipsetType();
     retranslateComboPointingHIDType();
+    retranslateComboParavirtProvider();
 }
 
@@ -490,4 +497,5 @@
     /* Acceleration tab: */
     m_pTabWidgetSystem->setTabEnabled(2, systemData.m_fSupportedHwVirtEx);
+    m_pComboParavirtProvider->setEnabled(isMachineOffline());
     m_pLabelVirtualization->setEnabled(isMachineOffline());
     m_pCheckBoxVirtualization->setEnabled(isMachineOffline());
@@ -581,4 +589,5 @@
     prepareTabMotherboard();
     prepareTabProcessor();
+    prepareTabAcceleration();
 
     /* Prepare validation: */
@@ -704,4 +713,14 @@
 }
 
+void UIMachineSettingsSystem::prepareTabAcceleration()
+{
+    /* Populate 'paravirt provider' combo: */
+    m_pComboParavirtProvider->addItem(gpConverter->toString(KParavirtProvider_None), QVariant(KParavirtProvider_None));
+    m_pComboParavirtProvider->addItem(gpConverter->toString(KParavirtProvider_Default), QVariant(KParavirtProvider_Default));
+    m_pComboParavirtProvider->addItem(gpConverter->toString(KParavirtProvider_Legacy), QVariant(KParavirtProvider_Legacy));
+    m_pComboParavirtProvider->addItem(gpConverter->toString(KParavirtProvider_Minimal), QVariant(KParavirtProvider_Minimal));
+    m_pComboParavirtProvider->addItem(gpConverter->toString(KParavirtProvider_HyperV), QVariant(KParavirtProvider_HyperV));
+}
+
 void UIMachineSettingsSystem::prepareValidation()
 {
@@ -756,7 +775,7 @@
 }
 
-void UIMachineSettingsSystem::retranslateComboPointingChipsetType()
-{
-    /* For each the element in KPointingHIDType enum: */
+void UIMachineSettingsSystem::retranslateComboChipsetType()
+{
+    /* For each the element in KChipsetType enum: */
     for (int iIndex = (int)KChipsetType_Null; iIndex < (int)KChipsetType_Max; ++iIndex)
     {
@@ -783,4 +802,19 @@
         if (iCorrespondingIndex != -1)
             m_pComboPointingHIDType->setItemText(iCorrespondingIndex, gpConverter->toString(type));
+    }
+}
+
+void UIMachineSettingsSystem::retranslateComboParavirtProvider()
+{
+    /* For each the element in KParavirtProvider enum: */
+    for (int iIndex = (int)KParavirtProvider_None; iIndex < (int)KParavirtProvider_Max; ++iIndex)
+    {
+        /* Cast to the corresponding type: */
+        KParavirtProvider type = (KParavirtProvider)iIndex;
+        /* Look for the corresponding item: */
+        int iCorrespondingIndex = m_pComboParavirtProvider->findData((int)type);
+        /* Re-translate if corresponding item was found: */
+        if (iCorrespondingIndex != -1)
+            m_pComboParavirtProvider->setItemText(iCorrespondingIndex, gpConverter->toString(type));
     }
 }
Index: trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.h	(revision 51987)
+++ trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.h	(revision 51988)
@@ -63,4 +63,5 @@
         , m_fEnabledPAE(false)
         /* Acceleration data: */
+        , m_paravirtProvider(KParavirtProvider_None)
         , m_fEnabledHwVirtEx(false)
         , m_fEnabledNestedPaging(false)
@@ -86,4 +87,5 @@
                (m_fEnabledPAE == other.m_fEnabledPAE) &&
                 /* Acceleration data: */
+               (m_paravirtProvider == other.m_paravirtProvider) &&
                (m_fEnabledHwVirtEx == other.m_fEnabledHwVirtEx) &&
                (m_fEnabledNestedPaging == other.m_fEnabledNestedPaging);
@@ -111,4 +113,5 @@
     bool m_fEnabledPAE;
     /* Variables: Acceleration data: */
+    KParavirtProvider m_paravirtProvider;
     bool m_fEnabledHwVirtEx;
     bool m_fEnabledNestedPaging;
@@ -185,4 +188,5 @@
     void prepareTabMotherboard();
     void prepareTabProcessor();
+    void prepareTabAcceleration();
     void prepareValidation();
 
@@ -191,6 +195,7 @@
 
     /* Helpers: Translation stuff: */
-    void retranslateComboPointingChipsetType();
+    void retranslateComboChipsetType();
     void retranslateComboPointingHIDType();
+    void retranslateComboParavirtProvider();
 
     /* Helper: Boot-table stuff: */
Index: trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.ui
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.ui	(revision 51987)
+++ trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.ui	(revision 51988)
@@ -546,11 +546,57 @@
       <layout class="QGridLayout">
        <item row="0" column="0">
+        <widget class="QLabel" name="m_pLabelParavirtType">
+         <property name="text">
+          <string>&amp;Paravirtualization Interface:</string>
+         </property>
+         <property name="alignment">
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         </property>
+         <property name="buddy">
+          <cstring>m_pComboParavirtProvider</cstring>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <layout class="QHBoxLayout">
+         <item>
+          <widget class="QComboBox" name="m_pComboParavirtProvider">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="whatsThis">
+            <string>Selects the paravirtualization guest interface provider to be used by this virtual machine.</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <spacer name="m_pSpacerHorizontal7">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>0</width>
+             <height>0</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </item>
+       <item row="1" column="0">
         <widget class="QLabel" name="m_pLabelVirtualization">
          <property name="text">
           <string>Hardware Virtualization:</string>
          </property>
-        </widget>
-       </item>
-       <item row="0" column="1">
+         <property name="alignment">
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1">
         <widget class="QCheckBox" name="m_pCheckBoxVirtualization">
          <property name="sizePolicy">
@@ -568,5 +614,5 @@
         </widget>
        </item>
-       <item row="1" column="1">
+       <item row="2" column="1">
         <widget class="QCheckBox" name="m_pCheckBoxNestedPaging">
          <property name="sizePolicy">
@@ -584,5 +630,5 @@
         </widget>
        </item>
-       <item row="2" column="0" colspan="2">
+       <item row="3" column="0" colspan="2">
         <spacer name="m_pSpacerVertical4">
          <property name="orientation">
