Index: /trunk/include/VBox/settings.h
===================================================================
--- /trunk/include/VBox/settings.h	(revision 23726)
+++ /trunk/include/VBox/settings.h	(revision 23727)
@@ -399,4 +399,5 @@
 
     bool                fHardwareVirt,
+                        fHardwareVirtExclusive,
                         fNestedPaging,
                         fVPID,
Index: /trunk/src/VBox/Main/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/MachineImpl.cpp	(revision 23726)
+++ /trunk/src/VBox/Main/MachineImpl.cpp	(revision 23727)
@@ -185,4 +185,5 @@
     mHWVirtExNestedPagingEnabled = false;
     mHWVirtExVPIDEnabled = false;
+    mHWVirtExExclusive = true;
     mPAEEnabled = false;
     mPropertyServiceActive = false;
@@ -222,4 +223,5 @@
         mHWVirtExNestedPagingEnabled != that.mHWVirtExNestedPagingEnabled ||
         mHWVirtExVPIDEnabled != that.mHWVirtExVPIDEnabled ||
+        mHWVirtExExclusive != that.mHWVirtExExclusive ||
         mPAEEnabled != that.mPAEEnabled ||
         mCPUCount != that.mCPUCount ||
@@ -1391,4 +1393,71 @@
     mHWData->mHWVirtExVPIDEnabled = enable;
 
+    return S_OK;
+}
+
+STDMETHODIMP Machine::GetHWVirtExProperty(HWVirtExPropertyType_T property, BOOL *aVal)
+{
+    if (!aVal)
+        return E_POINTER;
+
+    AutoCaller autoCaller(this);
+    CheckComRCReturnRC(autoCaller.rc());
+
+    switch(property)
+    {
+    case HWVirtExPropertyType_Enabled:
+        *aVal = mHWData->mHWVirtExEnabled;
+        break;
+
+    case HWVirtExPropertyType_Exclusive:
+        *aVal = mHWData->mHWVirtExExclusive;
+        break;
+
+    case HWVirtExPropertyType_VPIDEnabled:
+        *aVal = mHWData->mHWVirtExVPIDEnabled;
+        break;
+
+    case HWVirtExPropertyType_NestedPagingEnabled:
+        *aVal = mHWData->mHWVirtExNestedPagingEnabled;
+        break;
+
+    default:
+        return E_INVALIDARG;
+    }
+    return S_OK;
+}
+
+STDMETHODIMP Machine::SetHWVirtExProperty(HWVirtExPropertyType_T property, BOOL aVal)
+{
+    AutoCaller autoCaller(this);
+    CheckComRCReturnRC(autoCaller.rc());
+
+    AutoWriteLock alock(this);
+
+    switch(property)
+    {
+    case HWVirtExPropertyType_Enabled:
+        mHWData.backup();
+        mHWData->mHWVirtExEnabled = aVal;
+        break;
+
+    case HWVirtExPropertyType_Exclusive:
+        mHWData.backup();
+        mHWData->mHWVirtExExclusive = aVal;
+        break;
+
+    case HWVirtExPropertyType_VPIDEnabled:
+        mHWData.backup();
+        mHWData->mHWVirtExVPIDEnabled = aVal;
+        break;
+
+    case HWVirtExPropertyType_NestedPagingEnabled:
+        mHWData.backup();
+        mHWData->mHWVirtExNestedPagingEnabled = aVal;
+        break;
+
+    default:
+        return E_INVALIDARG;
+    }
     return S_OK;
 }
@@ -5195,4 +5264,5 @@
 
         mHWData->mHWVirtExEnabled             = data.fHardwareVirt;
+        mHWData->mHWVirtExExclusive           = data.fHardwareVirtExclusive;
         mHWData->mHWVirtExNestedPagingEnabled = data.fNestedPaging;
         mHWData->mHWVirtExVPIDEnabled         = data.fVPID;
@@ -6141,8 +6211,9 @@
 
         // CPU
-        data.fHardwareVirt = !!mHWData->mHWVirtExEnabled;
-        data.fNestedPaging = !!mHWData->mHWVirtExNestedPagingEnabled;
-        data.fVPID = !!mHWData->mHWVirtExVPIDEnabled;
-        data.fPAE = !!mHWData->mPAEEnabled;
+        data.fHardwareVirt          = !!mHWData->mHWVirtExEnabled;
+        data.fHardwareVirtExclusive = !!mHWData->mHWVirtExExclusive;
+        data.fNestedPaging          = !!mHWData->mHWVirtExNestedPagingEnabled;
+        data.fVPID                  = !!mHWData->mHWVirtExVPIDEnabled;
+        data.fPAE                   = !!mHWData->mPAEEnabled;
 
         data.cCPUs = mHWData->mCPUCount;
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 23726)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 23727)
@@ -757,4 +757,38 @@
   </enum>
 
+  <enum
+    name="HWVirtExPropertyType"
+    uuid="843794f2-f392-46a7-8ff4-a0857a9b4b32"
+  >
+    <desc>
+      HWVirtEx property type. This enumeration represents possible values of the
+      IMachine get- and setHWVirtExProperty methods.
+    </desc>
+    <const name="Null"                  value="0">
+      <desc>Null value (never used by the API).</desc>
+    </const>
+    <const name="Enabled"             value="1">
+      <desc>
+        HWVirtEx (VT-x/AMD-V) boolean property.
+      </desc>
+    </const>
+    <const name="Exclusive"           value="2">
+      <desc>
+        Exclusive use of the VT extensions boolean property. When enabled VirtualBox assumes it can acquire full and exclusive access
+        to the VT-x or AMD-V feature of the host. To share these with other hypervisors you must disable this property.
+      </desc>
+    </const>
+    <const name="VPIDEnabled"         value="3">
+      <desc>
+        VT-x VPID boolean property.
+      </desc>
+    </const>
+    <const name="NestedPagingEnabled" value="4">
+      <desc>
+        Nested Paging boolean property.
+      </desc>
+    </const>
+  </enum>
+  
   <enum
     name="SessionType"
@@ -5002,4 +5036,46 @@
     </method>
 
+    <method name="getHWVirtExProperty" const="yes">
+      <desc>
+        Returns the HWVirtEx boolean value of the specified property.
+
+        <result name="E_INVALIDARG">
+          Invalid property.
+        </result>
+
+      </desc>
+      <param name="property" type="HWVirtExPropertyType" dir="in">
+        <desc>
+          Property type to query.
+        </desc>
+      </param>
+      <param name="value" type="boolean" dir="return">
+        <desc>
+          Property value.
+        </desc>
+      </param>
+    </method>
+
+    <method name="setHWVirtExProperty">
+      <desc>
+        Sets the HWVirtEx boolean value of the specified property.
+
+        <result name="E_INVALIDARG">
+          Invalid property.
+        </result>
+
+      </desc>
+      <param name="property" type="HWVirtExPropertyType" dir="in">
+        <desc>
+          Property type to query.
+        </desc>
+      </param>
+      <param name="value" type="boolean" dir="in">
+        <desc>
+          Property value.
+        </desc>
+      </param>
+    </method>
+
     <method name="saveSettings">
       <desc>
Index: /trunk/src/VBox/Main/include/MachineImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineImpl.h	(revision 23726)
+++ /trunk/src/VBox/Main/include/MachineImpl.h	(revision 23727)
@@ -286,4 +286,5 @@
         ULONG          mMonitorCount;
         BOOL           mHWVirtExEnabled;
+        BOOL           mHWVirtExExclusive;
         BOOL           mHWVirtExNestedPagingEnabled;
         BOOL           mHWVirtExVPIDEnabled;
@@ -589,4 +590,6 @@
     STDMETHOD(GetExtraData)(IN_BSTR aKey, BSTR *aValue);
     STDMETHOD(SetExtraData)(IN_BSTR aKey, IN_BSTR aValue);
+    STDMETHOD(GetHWVirtExProperty)(HWVirtExPropertyType_T property, BOOL *aVal);
+    STDMETHOD(SetHWVirtExProperty)(HWVirtExPropertyType_T property, BOOL aVal);
     STDMETHOD(SaveSettings)();
     STDMETHOD(DiscardSettings)();
Index: /trunk/src/VBox/Main/xml/Settings.cpp
===================================================================
--- /trunk/src/VBox/Main/xml/Settings.cpp	(revision 23726)
+++ /trunk/src/VBox/Main/xml/Settings.cpp	(revision 23727)
@@ -1202,4 +1202,9 @@
         : strVersion("2"),
           fHardwareVirt(true),
+#if defined(RT_OS_DARWIN) || defined(RT_OS_WINDOWS)
+          fHardwareVirtExclusive(false),
+#else
+          fHardwareVirtExclusive(true),
+#endif
           fNestedPaging(false),
           fVPID(false),
@@ -1457,5 +1462,8 @@
             const xml::ElementNode *pelmCPUChild;
             if ((pelmCPUChild = pelmHwChild->findChildElement("HardwareVirtEx")))
+            {
                 pelmCPUChild->getAttributeValue("enabled", hw.fHardwareVirt);
+                pelmCPUChild->getAttributeValue("exclusive", hw.fHardwareVirtExclusive);
+            }
             if ((pelmCPUChild = pelmHwChild->findChildElement("HardwareVirtExNestedPaging")))
                 pelmCPUChild->getAttributeValue("enabled", hw.fNestedPaging);
@@ -2302,6 +2310,8 @@
         pelmHardware->setAttribute("version", hw.strVersion);
 
-    xml::ElementNode *pelmCPU = pelmHardware->createChild("CPU");
-    pelmCPU->createChild("HardwareVirtEx")->setAttribute("enabled", hw.fHardwareVirt);
+    xml::ElementNode *pelmCPU      = pelmHardware->createChild("CPU");
+    xml::ElementNode *pelmHwVirtEx = pelmCPU->createChild("HardwareVirtEx");
+    pelmHwVirtEx->setAttribute("enabled", hw.fHardwareVirt);
+    pelmHwVirtEx->setAttribute("exclusive", hw.fHardwareVirtExclusive);
     if (hw.fNestedPaging)
         pelmCPU->createChild("HardwareVirtExNestedPaging")->setAttribute("enabled", hw.fNestedPaging);
Index: /trunk/src/VBox/Main/xml/VirtualBox-settings-common.xsd
===================================================================
--- /trunk/src/VBox/Main/xml/VirtualBox-settings-common.xsd	(revision 23726)
+++ /trunk/src/VBox/Main/xml/VirtualBox-settings-common.xsd	(revision 23727)
@@ -434,17 +434,18 @@
 
 <xsd:complexType name="THWVirtExType">
-  <xsd:attribute name="enabled" type="TTriStateBoolType" default="default"/>
+  <xsd:attribute name="enabled" type="TTriStateBoolType"/>
+  <xsd:attribute name="exclusive" type="xsd:boolean"/>
 </xsd:complexType>
 
 <xsd:complexType name="THWVirtExNestedPagingType">
-  <xsd:attribute name="enabled" type="xsd:boolean" default="false"/>
+  <xsd:attribute name="enabled" type="xsd:boolean"/>
 </xsd:complexType>
 
 <xsd:complexType name="THWVirtExVPIDType">
-  <xsd:attribute name="enabled" type="xsd:boolean" default="false"/>
+  <xsd:attribute name="enabled" type="xsd:boolean"/>
 </xsd:complexType>
 
 <xsd:complexType name="TPAEType">
-  <xsd:attribute name="enabled" type="xsd:boolean" default="false"/>
+  <xsd:attribute name="enabled" type="xsd:boolean"/>
 </xsd:complexType>
 
