Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp	(revision 23732)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp	(revision 23733)
@@ -344,11 +344,19 @@
 
     BOOL hwVirtExEnabled;
-    machine->COMGETTER(HWVirtExEnabled)(&hwVirtExEnabled);
+    machine->GetHWVirtExProperty(HWVirtExPropertyType_Enabled, &hwVirtExEnabled);
     if (details == VMINFO_MACHINEREADABLE)
         RTPrintf("hwvirtex=\"%s\"\n", hwVirtExEnabled ? "on" : "off");
     else
         RTPrintf("Hardw. virt.ext: %s\n", hwVirtExEnabled ? "on" : "off");
+
+    BOOL hwVirtExExclusive;
+    machine->GetHWVirtExProperty(HWVirtExPropertyType_Exclusive, &hwVirtExExclusive);
+    if (details == VMINFO_MACHINEREADABLE)
+        RTPrintf("hwvirtexexcl=\"%s\"\n", hwVirtExExclusive ? "on" : "off");
+    else
+        RTPrintf("Hardw. virt.ext exclusive: %s\n", hwVirtExExclusive ? "on" : "off");
+
     BOOL HWVirtExNestedPagingEnabled;
-    machine->COMGETTER(HWVirtExNestedPagingEnabled)(&HWVirtExNestedPagingEnabled);
+    machine->GetHWVirtExProperty(HWVirtExPropertyType_NestedPagingEnabled, &HWVirtExNestedPagingEnabled);
     if (details == VMINFO_MACHINEREADABLE)
         RTPrintf("nestedpaging=\"%s\"\n", HWVirtExNestedPagingEnabled ? "on" : "off");
@@ -357,5 +365,5 @@
 
     BOOL HWVirtExVPIDEnabled;
-    machine->COMGETTER(HWVirtExVPIDEnabled)(&HWVirtExVPIDEnabled);
+    machine->GetHWVirtExProperty(HWVirtExPropertyType_VPIDEnabled, &HWVirtExVPIDEnabled);
     if (details == VMINFO_MACHINEREADABLE)
         RTPrintf("vtxvpid=\"%s\"\n", HWVirtExVPIDEnabled ? "on" : "off");
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp	(revision 23732)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp	(revision 23733)
@@ -66,4 +66,5 @@
     MODIFYVMPAE,
     MODIFYVMHWVIRTEX,
+    MODIFYVMHWVIRTEXEXCLUSIVE,
     MODIFYVMNESTEDPAGING,
     MODIFYVMVTXVPID,
@@ -137,4 +138,5 @@
     { "--pae",                     MODIFYVMPAE,                     RTGETOPT_REQ_STRING },
     { "--hwvirtex",                MODIFYVMHWVIRTEX,                RTGETOPT_REQ_STRING },
+    { "--hwvirtexexcl",            MODIFYVMHWVIRTEXEXCLUSIVE,       RTGETOPT_REQ_STRING },
     { "--nestedpaging",            MODIFYVMNESTEDPAGING,            RTGETOPT_REQ_STRING },
     { "--vtxvpid",                 MODIFYVMVTXVPID,                 RTGETOPT_REQ_STRING },
@@ -384,9 +386,9 @@
                     if (!strcmp(pValueUnion.psz, "on"))
                     {
-                        CHECK_ERROR (machine, COMSETTER(HWVirtExEnabled)(TRUE));
+                        CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_Enabled, TRUE));
                     }
                     else if (!strcmp(pValueUnion.psz, "off"))
                     {
-                        CHECK_ERROR (machine, COMSETTER(HWVirtExEnabled)(FALSE));
+                        CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_Enabled, FALSE));
                     }
                     else
@@ -399,4 +401,25 @@
             }
 
+            case MODIFYVMHWVIRTEXEXCLUSIVE:
+            {
+                if (pValueUnion.psz)
+                {
+                    if (!strcmp(pValueUnion.psz, "on"))
+                    {
+                        CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_Exclusive, TRUE));
+                    }
+                    else if (!strcmp(pValueUnion.psz, "off"))
+                    {
+                        CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_Exclusive, FALSE));
+                    }
+                    else
+                    {
+                        errorArgument("Invalid --hwvirtex argument '%s'", pValueUnion.psz);
+                        rc = E_FAIL;
+                    }
+                }
+                break;
+            }
+
             case MODIFYVMNESTEDPAGING:
             {
@@ -405,9 +428,9 @@
                     if (!strcmp(pValueUnion.psz, "on"))
                     {
-                        CHECK_ERROR (machine, COMSETTER(HWVirtExNestedPagingEnabled)(true));
+                        CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_NestedPagingEnabled, TRUE));
                     }
                     else if (!strcmp(pValueUnion.psz, "off"))
                     {
-                        CHECK_ERROR (machine, COMSETTER(HWVirtExNestedPagingEnabled)(false));
+                        CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_NestedPagingEnabled, FALSE));
                     }
                     else
@@ -426,9 +449,9 @@
                     if (!strcmp(pValueUnion.psz, "on"))
                     {
-                        CHECK_ERROR (machine, COMSETTER(HWVirtExVPIDEnabled)(true));
+                        CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_VPIDEnabled, TRUE));
                     }
                     else if (!strcmp(pValueUnion.psz, "off"))
                     {
-                        CHECK_ERROR (machine, COMSETTER(HWVirtExVPIDEnabled)(false));
+                        CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_VPIDEnabled, FALSE));
                     }
                     else
Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxGlobal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxGlobal.cpp	(revision 23732)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxGlobal.cpp	(revision 23733)
@@ -1623,10 +1623,10 @@
 
         /* VT-x/AMD-V */
-        QString virt = aMachine.GetHWVirtExEnabled()
+        QString virt = aMachine.GetHWVirtExProperty(KHWVirtExPropertyType_Enabled)
             ? tr ("Enabled", "details report (VT-x/AMD-V)")
             : tr ("Disabled", "details report (VT-x/AMD-V)");
 
         /* Nested Paging */
-        QString nested = aMachine.GetHWVirtExNestedPagingEnabled()
+        QString nested = aMachine.GetHWVirtExProperty(KHWVirtExPropertyType_NestedPagingEnabled)
             ? tr ("Enabled", "details report (Nested Paging)")
             : tr ("Disabled", "details report (Nested Paging)");
Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxSettingsDialogSpecific.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxSettingsDialogSpecific.cpp	(revision 23732)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxSettingsDialogSpecific.cpp	(revision 23733)
@@ -403,5 +403,5 @@
     if (generalPage && systemPage &&
         generalPage->is64BitOSTypeSelected() && !systemPage->isHWVirtExEnabled())
-        mMachine.SetHWVirtExEnabled (true);
+        mMachine.SetHWVirtExProperty(KHWVirtExPropertyType_Enabled, true);
 
 #ifdef VBOX_WITH_VIDEOHWACCEL
Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsSystem.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsSystem.cpp	(revision 23732)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsSystem.cpp	(revision 23733)
@@ -178,10 +178,10 @@
     /* VT-x/AMD-V */
     mCbVirt->setEnabled (fVTxAMDVSupported);
-    mCbVirt->setChecked (aMachine.GetHWVirtExEnabled());
+    mCbVirt->setChecked (aMachine.GetHWVirtExProperty(KHWVirtExPropertyType_Enabled));
 
     /* Nested Paging */
     mCbNestedPaging->setEnabled (fVTxAMDVSupported &&
-                                 aMachine.GetHWVirtExEnabled());
-    mCbNestedPaging->setChecked (aMachine.GetHWVirtExNestedPagingEnabled());
+                                 aMachine.GetHWVirtExProperty(KHWVirtExPropertyType_Enabled));
+    mCbNestedPaging->setChecked (aMachine.GetHWVirtExProperty(KHWVirtExPropertyType_NestedPagingEnabled));
 
     if (mValidator)
@@ -231,9 +231,9 @@
 
     /* VT-x/AMD-V */
-    mMachine.SetHWVirtExEnabled (mCbVirt->checkState() == Qt::Checked ||
-                                 mSlCPU->value() > 1);
+    mMachine.SetHWVirtExProperty(KHWVirtExPropertyType_Enabled,
+                                 mCbVirt->checkState() == Qt::Checked || mSlCPU->value() > 1);
 
     /* Nested Paging */
-    mMachine.SetHWVirtExNestedPagingEnabled (mCbNestedPaging->isChecked());
+    mMachine.SetHWVirtExProperty(KHWVirtExPropertyType_NestedPagingEnabled, mCbNestedPaging->isChecked());
 }
 
Index: /trunk/src/VBox/Main/ApplianceImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/ApplianceImpl.cpp	(revision 23732)
+++ /trunk/src/VBox/Main/ApplianceImpl.cpp	(revision 23733)
@@ -1245,5 +1245,5 @@
             if (tmpCount > 1)
             {
-                rc = pNewMachine->COMSETTER(HWVirtExEnabled)(TRUE);
+                rc = pNewMachine->SetHWVirtExProperty(HWVirtExPropertyType_Enabled, TRUE);
                 if (FAILED(rc)) throw rc;
 
Index: /trunk/src/VBox/Main/ConsoleImpl2.cpp
===================================================================
--- /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 23732)
+++ /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 23733)
@@ -259,5 +259,5 @@
     /* hardware virtualization extensions */
     BOOL fHWVirtExEnabled;
-    hrc = pMachine->COMGETTER(HWVirtExEnabled)(&fHWVirtExEnabled);                  H();
+    hrc = pMachine->GetHWVirtExProperty(HWVirtExPropertyType_Enabled, &fHWVirtExEnabled);                  H();
     if (cCpus > 1) /** @todo SMP: This isn't nice, but things won't work on mac otherwise. */
         fHWVirtExEnabled = TRUE;
@@ -326,13 +326,18 @@
     }
 
+    /* HWVirtEx exclusive mode */
+    BOOL fHWVirtExExclusive = true;
+    hrc = pMachine->GetHWVirtExProperty(HWVirtExPropertyType_Exclusive, &fHWVirtExExclusive);                   H();
+    rc = CFGMR3InsertInteger(pHWVirtExt, "Exclusive", fHWVirtExExclusive);                     RC_CHECK();
+
     /* Nested paging (VT-x/AMD-V) */
     BOOL fEnableNestedPaging = false;
-    hrc = pMachine->COMGETTER(HWVirtExNestedPagingEnabled)(&fEnableNestedPaging);   H();
-    rc = CFGMR3InsertInteger(pRoot, "EnableNestedPaging", fEnableNestedPaging);     RC_CHECK();
+    hrc = pMachine->GetHWVirtExProperty(HWVirtExPropertyType_NestedPagingEnabled, &fEnableNestedPaging);   H();
+    rc = CFGMR3InsertInteger(pHWVirtExt, "EnableNestedPaging", fEnableNestedPaging);     RC_CHECK();
 
     /* VPID (VT-x) */
     BOOL fEnableVPID = false;
-    hrc = pMachine->COMGETTER(HWVirtExVPIDEnabled)(&fEnableVPID);                   H();
-    rc = CFGMR3InsertInteger(pRoot, "EnableVPID", fEnableVPID);                     RC_CHECK();
+    hrc = pMachine->GetHWVirtExProperty(HWVirtExPropertyType_VPIDEnabled, &fEnableVPID);                   H();
+    rc = CFGMR3InsertInteger(pHWVirtExt, "EnableVPID", fEnableVPID);                     RC_CHECK();
 
     /* Physical Address Extension (PAE) */
Index: /trunk/src/VBox/Main/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/MachineImpl.cpp	(revision 23732)
+++ /trunk/src/VBox/Main/MachineImpl.cpp	(revision 23733)
@@ -1297,103 +1297,4 @@
 }
 
-STDMETHODIMP Machine::COMGETTER(HWVirtExEnabled)(BOOL *enabled)
-{
-    if (!enabled)
-        return E_POINTER;
-
-    AutoCaller autoCaller(this);
-    CheckComRCReturnRC(autoCaller.rc());
-
-    AutoReadLock alock(this);
-
-    *enabled = mHWData->mHWVirtExEnabled;
-
-    return S_OK;
-}
-
-STDMETHODIMP Machine::COMSETTER(HWVirtExEnabled)(BOOL enable)
-{
-    AutoCaller autoCaller(this);
-    CheckComRCReturnRC(autoCaller.rc());
-
-    AutoWriteLock alock(this);
-
-    HRESULT rc = checkStateDependency(MutableStateDep);
-    CheckComRCReturnRC(rc);
-
-    /** @todo check validity! */
-
-    mHWData.backup();
-    mHWData->mHWVirtExEnabled = enable;
-
-    return S_OK;
-}
-
-STDMETHODIMP Machine::COMGETTER(HWVirtExNestedPagingEnabled)(BOOL *enabled)
-{
-    if (!enabled)
-        return E_POINTER;
-
-    AutoCaller autoCaller(this);
-    CheckComRCReturnRC(autoCaller.rc());
-
-    AutoReadLock alock(this);
-
-    *enabled = mHWData->mHWVirtExNestedPagingEnabled;
-
-    return S_OK;
-}
-
-STDMETHODIMP Machine::COMSETTER(HWVirtExNestedPagingEnabled)(BOOL enable)
-{
-    AutoCaller autoCaller(this);
-    CheckComRCReturnRC(autoCaller.rc());
-
-    AutoWriteLock alock(this);
-
-    HRESULT rc = checkStateDependency(MutableStateDep);
-    CheckComRCReturnRC(rc);
-
-    /** @todo check validity! */
-
-    mHWData.backup();
-    mHWData->mHWVirtExNestedPagingEnabled = enable;
-
-    return S_OK;
-}
-
-STDMETHODIMP Machine::COMGETTER(HWVirtExVPIDEnabled)(BOOL *enabled)
-{
-    if (!enabled)
-        return E_POINTER;
-
-    AutoCaller autoCaller(this);
-    CheckComRCReturnRC(autoCaller.rc());
-
-    AutoReadLock alock(this);
-
-    *enabled = mHWData->mHWVirtExVPIDEnabled;
-
-    return S_OK;
-}
-
-STDMETHODIMP Machine::COMSETTER(HWVirtExVPIDEnabled)(BOOL enable)
-{
-    AutoCaller autoCaller(this);
-    CheckComRCReturnRC(autoCaller.rc());
-
-    AutoWriteLock alock(this);
-
-    HRESULT rc = checkStateDependency(MutableStateDep);
-    CheckComRCReturnRC(rc);
-
-    /** @todo check validity! */
-
-    mHWData.backup();
-    mHWData->mHWVirtExVPIDEnabled = enable;
-
-    return S_OK;
-}
-
 STDMETHODIMP Machine::GetHWVirtExProperty(HWVirtExPropertyType_T property, BOOL *aVal)
 {
@@ -1434,4 +1335,7 @@
 
     AutoWriteLock alock(this);
+
+    HRESULT rc = checkStateDependency(MutableStateDep);
+    CheckComRCReturnRC(rc);
 
     switch(property)
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 23732)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 23733)
@@ -770,5 +770,6 @@
     <const name="Enabled"             value="1">
       <desc>
-        HWVirtEx (VT-x/AMD-V) boolean property.
+        HWVirtEx (VT-x/AMD-V) boolean property. Note that in case such extensions are not available,
+        they will not be used.
       </desc>
     </const>
@@ -781,10 +782,12 @@
     <const name="VPIDEnabled"         value="3">
       <desc>
-        VT-x VPID boolean property.
+        VT-x VPID boolean property. Note that in case this extension is not available,
+        it will not be used.
       </desc>
     </const>
     <const name="NestedPagingEnabled" value="4">
       <desc>
-        Nested Paging boolean property.
+        Nested Paging boolean property. Note that in case this extension is not available,
+        it will not be used.
       </desc>
     </const>
@@ -4042,5 +4045,5 @@
   <interface
      name="IMachine" extends="$unknown"
-     uuid="160b0ccc-c3d6-4c1b-bbe9-39b1a732f833"
+     uuid="ff5155a9-da1e-4225-8829-2f9f105d4db2"
      wsmap="managed"
      >
@@ -4270,29 +4273,4 @@
     </attribute>
 
-    <attribute name="HWVirtExEnabled" type="boolean">
-      <desc>
-        This setting determines whether VirtualBox will try to make use of
-        the host CPU's hardware virtualization extensions such as Intel VT-x
-        and AMD-V. Note that in case such extensions are not available,
-        they will not be used.
-      </desc>
-    </attribute>
-
-    <attribute name="HWVirtExNestedPagingEnabled" type="boolean" default="false">
-      <desc>
-        This setting determines whether VirtualBox will try to make use of
-        the nested paging extension of Intel VT-x and AMD-V. Note that in case
-        such extensions are not available, they will not be used.
-      </desc>
-    </attribute>
-
-    <attribute name="HWVirtExVPIDEnabled" type="boolean" default="false">
-      <desc>
-        This setting determines whether VirtualBox will try to make use of
-        the VPID extension of Intel VT-x. Note that in case such extensions are
-        not available, they will not be used.
-      </desc>
-    </attribute>
-
     <attribute name="PAEEnabled" type="boolean" default="false">
       <desc>
Index: /trunk/src/VBox/Main/include/MachineImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineImpl.h	(revision 23732)
+++ /trunk/src/VBox/Main/include/MachineImpl.h	(revision 23733)
@@ -535,10 +535,4 @@
     STDMETHOD(COMSETTER(Accelerate2DVideoEnabled))(BOOL enabled);
     STDMETHOD(COMGETTER(BIOSSettings))(IBIOSSettings **biosSettings);
-    STDMETHOD(COMGETTER(HWVirtExEnabled))(BOOL *enabled);
-    STDMETHOD(COMSETTER(HWVirtExEnabled))(BOOL enabled);
-    STDMETHOD(COMGETTER(HWVirtExNestedPagingEnabled))(BOOL *enabled);
-    STDMETHOD(COMSETTER(HWVirtExNestedPagingEnabled))(BOOL enabled);
-    STDMETHOD(COMGETTER(HWVirtExVPIDEnabled))(BOOL *enabled);
-    STDMETHOD(COMSETTER(HWVirtExVPIDEnabled))(BOOL enabled);
     STDMETHOD(COMGETTER(PAEEnabled))(BOOL *enabled);
     STDMETHOD(COMSETTER(PAEEnabled))(BOOL enabled);
Index: /trunk/src/VBox/VMM/HWACCM.cpp
===================================================================
--- /trunk/src/VBox/VMM/HWACCM.cpp	(revision 23732)
+++ /trunk/src/VBox/VMM/HWACCM.cpp	(revision 23733)
@@ -331,9 +331,9 @@
     PCFGMNODE pHWVirtExt = CFGMR3GetChild(pRoot, "HWVirtExt/");
     /* Nested paging: disabled by default. */
-    rc = CFGMR3QueryBoolDef(pRoot, "EnableNestedPaging", &pVM->hwaccm.s.fAllowNestedPaging, false);
+    rc = CFGMR3QueryBoolDef(pHWVirtExt, "EnableNestedPaging", &pVM->hwaccm.s.fAllowNestedPaging, false);
     AssertRC(rc);
 
     /* VT-x VPID: disabled by default. */
-    rc = CFGMR3QueryBoolDef(pRoot, "EnableVPID", &pVM->hwaccm.s.vmx.fAllowVPID, false);
+    rc = CFGMR3QueryBoolDef(pHWVirtExt, "EnableVPID", &pVM->hwaccm.s.vmx.fAllowVPID, false);
     AssertRC(rc);
 
@@ -387,5 +387,5 @@
      *  Default false for Mac OS X and Windows due to the higher risk of conflicts with other hypervisors.
      */
-    rc = CFGMR3QueryBoolDef(pHWVirtExt, "EnableGlobalInit", &pVM->hwaccm.s.fGlobalInit, 
+    rc = CFGMR3QueryBoolDef(pHWVirtExt, "Exclusive", &pVM->hwaccm.s.fGlobalInit, 
 #if defined(RT_OS_DARWIN) || defined(RT_OS_WINDOWS)
                             false
