Index: /trunk/include/VBox/settings.h
===================================================================
--- /trunk/include/VBox/settings.h	(revision 26458)
+++ /trunk/include/VBox/settings.h	(revision 26459)
@@ -565,6 +565,8 @@
                         fPAE;
     uint32_t            cCPUs;
-    bool                fCpuHotPlug;            // requires settings version 1.11 (VirtualBox 3.2)
-    CpuList             llCpus;                 // requires settings version 1.11 (VirtualBox 3.2)
+    bool                fCpuHotPlug;            // requires settings version 1.10 (VirtualBox 3.2)
+    CpuList             llCpus;                 // requires settings version 1.10 (VirtualBox 3.2)
+    bool                fHpetEnabled;           // requires settings version 1.10 (VirtualBox 3.2)
+
     CpuIdLeafsList      llCpuIdLeafs;
 
@@ -578,4 +580,5 @@
                         fAccelerate2DVideo;     // requires settings version 1.8 (VirtualBox 3.1)
     FirmwareType_T      firmwareType;           // requires settings version 1.9 (VirtualBox 3.1)
+
     PointingHidType_T   pointingHidType;        // requires settings version 1.10 (VirtualBox 3.2)
     KeyboardHidType_T   keyboardHidType;        // requires settings version 1.10 (VirtualBox 3.2)
Index: /trunk/src/VBox/Main/ConsoleImpl2.cpp
===================================================================
--- /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 26458)
+++ /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 26459)
@@ -594,6 +594,7 @@
     BOOL fHpetEnabled;
 #ifdef VBOX_WITH_HPET
-    /* Need ability to allow enabling HPET in other profiles too */
-    fHpetEnabled = fExtProfile;
+    hrc = pMachine->COMGETTER(HpetEnabled)(&fHpetEnabled);                          H();
+    /* Always enable HPET in extended profile */
+    fHpetEnabled |= fExtProfile;
 #else
     fHpetEnabled = false;
Index: /trunk/src/VBox/Main/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/MachineImpl.cpp	(revision 26458)
+++ /trunk/src/VBox/Main/MachineImpl.cpp	(revision 26459)
@@ -177,4 +177,5 @@
     mSyntheticCpu = false;
     mPropertyServiceActive = false;
+    mHpetEnabled = false;
 
     /* default boot order: floppy - DVD - HDD */
@@ -189,4 +190,6 @@
 
     mFirmwareType = FirmwareType_BIOS;
+    mKeyboardHidType = KeyboardHidType_PS2Keyboard;
+    mPointingHidType = PointingHidType_PS2Mouse;
 
     for (size_t i = 0; i < RT_ELEMENTS(mCPUAttached); i++)
@@ -1136,4 +1139,36 @@
 
     mHWData->mCPUHotPlugEnabled = enabled;
+
+    return rc;
+}
+
+STDMETHODIMP Machine::COMGETTER(HpetEnabled)(BOOL *enabled)
+{
+    CheckComArgOutPointerValid(enabled);
+
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *enabled = mHWData->mHpetEnabled;
+
+    return S_OK;
+}
+
+STDMETHODIMP Machine::COMSETTER(HpetEnabled)(BOOL enabled)
+{
+    HRESULT rc = S_OK;
+
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    rc = checkStateDependency(MutableStateDep);
+    if (FAILED(rc)) return rc;
+
+    setModified(IsModified_MachineData);
+    mHWData.backup();
+
+    mHWData->mHpetEnabled = enabled;
 
     return rc;
@@ -6259,4 +6294,5 @@
         mHWData->mPointingHidType = data.pointingHidType;
         mHWData->mKeyboardHidType = data.keyboardHidType;
+        mHWData->mHpetEnabled = data.fHpetEnabled;
 
 #ifdef VBOX_WITH_VRDP
@@ -7273,4 +7309,7 @@
         data.pointingHidType = mHWData->mPointingHidType;
         data.keyboardHidType = mHWData->mKeyboardHidType;
+
+        // HPET
+        data.fHpetEnabled = mHWData->mHpetEnabled;
 
         // boot order
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 26458)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 26459)
@@ -4227,5 +4227,5 @@
   <interface
      name="IMachine" extends="$unknown"
-     uuid="91470ab5-8457-48ab-8a3f-a2e68d8ae923"
+     uuid="f2816298-7408-4c44-a117-0ed8ea09b9bc"
      wsmap="managed"
      >
@@ -4478,7 +4478,14 @@
 
     <attribute name="keyboardHidType" type="KeyboardHidType">
-      <desc>Type of keyboard HID used in this VM
+      <desc>Type of keyboard HID used in this VM.
         The default is typically "PS2Keyboard" but can vary depending on the
         requirements of the guest operating system.</desc>
+    </attribute>
+
+    <attribute name="hpetEnabled" type="boolean">
+      <desc>This attribute controls if High Precision Event Timer (HPET) is 
+        enabled in this VM. Use this property if you want to provide guests 
+        with additional time source, or if guest requires HPET to function correctly.
+        Default is false.</desc>
     </attribute>
 
Index: /trunk/src/VBox/Main/include/MachineImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineImpl.h	(revision 26458)
+++ /trunk/src/VBox/Main/include/MachineImpl.h	(revision 26459)
@@ -282,4 +282,5 @@
         BOOL                 mCPUHotPlugEnabled;
         BOOL                 mAccelerate3DEnabled;
+        BOOL                 mHpetEnabled;
 
         BOOL                 mCPUAttached[SchemaDefs::MaxCPUCount];
@@ -376,4 +377,6 @@
     STDMETHOD(COMGETTER(CPUHotPlugEnabled))(BOOL *enabled);
     STDMETHOD(COMSETTER(CPUHotPlugEnabled))(BOOL enabled);
+    STDMETHOD(COMGETTER(HpetEnabled))(BOOL *enabled);
+    STDMETHOD(COMSETTER(HpetEnabled))(BOOL enabled);
     STDMETHOD(COMGETTER(MemoryBalloonSize))(ULONG *memoryBalloonSize);
     STDMETHOD(COMSETTER(MemoryBalloonSize))(ULONG memoryBalloonSize);
@@ -423,4 +426,10 @@
     STDMETHOD(COMGETTER(RTCUseUTC))(BOOL *aEnabled);
     STDMETHOD(COMSETTER(RTCUseUTC))(BOOL aEnabled);
+    STDMETHOD(COMGETTER(FirmwareType)) (FirmwareType_T *aFirmware);
+    STDMETHOD(COMSETTER(FirmwareType)) (FirmwareType_T  aFirmware);
+    STDMETHOD(COMGETTER(KeyboardHidType)) (KeyboardHidType_T *aKeyboardHidType);
+    STDMETHOD(COMSETTER(KeyboardHidType)) (KeyboardHidType_T  aKeyboardHidType);
+    STDMETHOD(COMGETTER(PointingHidType)) (PointingHidType_T *aPointingHidType);
+    STDMETHOD(COMSETTER(PointingHidType)) (PointingHidType_T  aPointingHidType);
 
     // IMachine methods
@@ -472,11 +481,4 @@
     STDMETHOD(GetStorageControllerByName(IN_BSTR aName, IStorageController **storageController));
     STDMETHOD(GetStorageControllerByInstance(ULONG aInstance, IStorageController **storageController));
-    STDMETHOD(COMGETTER(FirmwareType)) (FirmwareType_T *aFirmware);
-    STDMETHOD(COMSETTER(FirmwareType)) (FirmwareType_T  aFirmware);
-    STDMETHOD(COMGETTER(KeyboardHidType)) (KeyboardHidType_T *aKeyboardHidType);
-    STDMETHOD(COMSETTER(KeyboardHidType)) (KeyboardHidType_T  aKeyboardHidType);
-    STDMETHOD(COMGETTER(PointingHidType)) (PointingHidType_T *aPointingHidType);
-    STDMETHOD(COMSETTER(PointingHidType)) (PointingHidType_T  aPointingHidType);
-
     STDMETHOD(QuerySavedThumbnailSize)(ULONG *aSize, ULONG *aWidth, ULONG *aHeight);
     STDMETHOD(ReadSavedThumbnailToArray)(BOOL aBGR, ULONG *aWidth, ULONG *aHeight, ComSafeArrayOut(BYTE, aData));
Index: /trunk/src/VBox/Main/xml/Settings.cpp
===================================================================
--- /trunk/src/VBox/Main/xml/Settings.cpp	(revision 26458)
+++ /trunk/src/VBox/Main/xml/Settings.cpp	(revision 26459)
@@ -1466,4 +1466,5 @@
           cCPUs(1),
           fCpuHotPlug(false),
+          fHpetEnabled(false),
           ulMemorySizeMB((uint32_t)-1),
           ulVRAMSizeMB(8),
@@ -1509,4 +1510,5 @@
                   && (cCPUs                     == h.cCPUs)
                   && (fCpuHotPlug               == h.fCpuHotPlug)
+                  && (fHpetEnabled              == h.fHpetEnabled)
                   && (llCpus                    == h.llCpus)
                   && (llCpuIdLeafs              == h.llCpuIdLeafs)
@@ -2093,4 +2095,8 @@
             }
         }
+        else if (pelmHwChild->nameEquals("HPET"))
+        {
+            pelmHwChild->getAttributeValue("enabled", hw.fHpetEnabled);
+        }
         else if (pelmHwChild->nameEquals("Boot"))
         {
@@ -2987,4 +2993,11 @@
     }
 
+    if (    (m->sv >= SettingsVersion_v1_10)
+       )
+    {
+         xml::ElementNode *pelmHpet = pelmHardware->createChild("HPET");
+         pelmHpet->setAttribute("enabled", hw.fHpetEnabled);
+    }
+
     xml::ElementNode *pelmBoot = pelmHardware->createChild("Boot");
     for (BootOrderMap::const_iterator it = hw.mapBootOrder.begin();
@@ -3556,4 +3569,5 @@
     }
 
+    // VirtualBox 3.2 adds support for CPU hotplug, RTC timezone control, HID type and HPET
     if (    m->sv < SettingsVersion_v1_10
          && (    fRTCUseUTC
@@ -3561,4 +3575,5 @@
               || hardwareMachine.pointingHidType != PointingHidType_PS2Mouse
               || hardwareMachine.keyboardHidType != KeyboardHidType_PS2Keyboard
+              || hardwareMachine.fHpetEnabled
             )
        )
