Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManage.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManage.cpp	(revision 10692)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManage.cpp	(revision 10693)
@@ -336,4 +336,5 @@
                  "                            [-pae on|off]\n"
                  "                            [-hwvirtex on|off|default]\n"
+                 "                            [-nestedpaging on|off]\n"
                  "                            [-monitorcount <number>]\n"
                  "                            [-bioslogofadein on|off]\n"
@@ -982,4 +983,10 @@
             RTPrintf("Hardw. virt.ext: %s\n", hwVirtExEnabled == TSBool_True ? "on" : "off");
     }
+    BOOL HWVirtExNestedPagingEnabled;
+    machine->COMGETTER(HWVirtExNestedPagingEnabled)(&HWVirtExNestedPagingEnabled);
+    if (details == VMINFO_MACHINEREADABLE)
+        RTPrintf("nestedpaging=\"%s\"\n", HWVirtExNestedPagingEnabled ? "on" : "off");
+    else
+        RTPrintf("Nested Paging:   %s\n", HWVirtExNestedPagingEnabled ? "on" : "off");
 
     MachineState_T machineState;
@@ -3749,4 +3756,5 @@
     char *acpi = NULL;
     char *hwvirtex = NULL;
+    char *nestedpaging = NULL;
     char *pae = NULL;
     char *ioapic = NULL;
@@ -3874,4 +3882,11 @@
             hwvirtex = argv[i];
         }
+        else if (strcmp(argv[i], "-nestedpaging") == 0)
+        {
+            if (argc <= i + 1)
+                return errorArgument("Missing argument to '%s'", argv[i]);
+            i++;
+            nestedpaging = argv[i];
+        }
         else if (strcmp(argv[i], "-pae") == 0)
         {
@@ -4496,4 +4511,21 @@
             {
                 errorArgument("Invalid -hwvirtex argument '%s'", hwvirtex);
+                rc = E_FAIL;
+                break;
+            }
+        }
+        if (nestedpaging)
+        {
+            if (strcmp(nestedpaging, "on") == 0)
+            {
+                CHECK_ERROR(machine, COMSETTER(HWVirtExNestedPagingEnabled)(true));
+            }
+            else if (strcmp(nestedpaging, "off") == 0)
+            {
+                CHECK_ERROR(machine, COMSETTER(HWVirtExNestedPagingEnabled)(false));
+            }
+            else
+            {
+                errorArgument("Invalid -nestedpaging argument '%s'", ioapic);
                 rc = E_FAIL;
                 break;
Index: /trunk/src/VBox/Main/ConsoleImpl2.cpp
===================================================================
--- /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 10692)
+++ /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 10693)
@@ -174,4 +174,9 @@
     }
 #endif
+
+    /* Nested paging (VT-x/AMD-V) */
+    BOOL fEnableNestedPaging = false;
+    hrc = pMachine->COMGETTER(HWVirtExNestedPagingEnabled)(&fEnableNestedPaging);   H();
+    rc = CFGMR3InsertInteger(pRoot, "EnableNestedPaging", fEnableNestedPaging);     RC_CHECK();
 
     /* Physical Address Extension (PAE) */
Index: /trunk/src/VBox/Main/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/MachineImpl.cpp	(revision 10692)
+++ /trunk/src/VBox/Main/MachineImpl.cpp	(revision 10693)
@@ -189,4 +189,5 @@
     mMonitorCount = 1;
     mHWVirtExEnabled = TSBool_False;
+    mHWVirtExNestedPagingEnabled = true;
     mPAEEnabled = false;
 
@@ -216,4 +217,5 @@
         mMonitorCount != that.mMonitorCount ||
         mHWVirtExEnabled != that.mHWVirtExEnabled ||
+        mHWVirtExNestedPagingEnabled != that.mHWVirtExNestedPagingEnabled ||
         mPAEEnabled != that.mPAEEnabled ||
         mClipboardMode != that.mClipboardMode)
@@ -1116,4 +1118,38 @@
     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(PAEEnabled)(BOOL *enabled)
@@ -4478,6 +4514,7 @@
     {
         /* default value in case the node is not there */
-        mHWData->mHWVirtExEnabled = TSBool_Default;
-        mHWData->mPAEEnabled      = false;
+        mHWData->mHWVirtExEnabled             = TSBool_Default;
+        mHWData->mHWVirtExNestedPagingEnabled = true;
+        mHWData->mPAEEnabled                  = false;
 
         Key cpuNode = aNode.findKey ("CPU");
@@ -4495,4 +4532,11 @@
                     mHWData->mHWVirtExEnabled = TSBool_Default;
             }
+            /* HardwareVirtExNestedPaging (optional, default is true) */
+            Key HWVirtExNestedPagingNode = cpuNode.findKey ("HardwareVirtExNestedPaging");
+            if (!HWVirtExNestedPagingNode.isNull())
+            {
+                mHWData->mHWVirtExNestedPagingEnabled = HWVirtExNestedPagingNode.value <bool> ("enabled");
+            }
+
             /* PAE (optional, default is false) */
             Key PAENode = cpuNode.findKey ("PAE");
@@ -5861,4 +5905,8 @@
         hwVirtExNode.setStringValue ("enabled", value);
 
+        /* Nested paging (optional, default is true) */
+        Key HWVirtExNestedPagingNode = cpuNode.createKey ("HardwareVirtExNestedPaging");
+        HWVirtExNestedPagingNode.setValue <bool> ("enabled", !!mHWData->mHWVirtExNestedPagingEnabled);
+        
         /* PAE (optional, default is false) */
         Key PAENode = cpuNode.createKey ("PAE");
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 10692)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 10693)
@@ -2511,5 +2511,5 @@
   <interface
      name="IMachine" extends="$unknown"
-     uuid="d6181581-e7c7-418a-b3b6-2da10b11a763"
+     uuid="9966d6d7-8bed-4f18-8553-2486f32957b3"
      wsmap="managed"
      >
@@ -2734,4 +2734,12 @@
     </attribute>
 
+    <attribute name="HWVirtExNestedPagingEnabled" type="boolean" default="true">
+      <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="PAEEnabled" type="boolean" default="false">
       <desc>
Index: /trunk/src/VBox/Main/include/MachineImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineImpl.h	(revision 10692)
+++ /trunk/src/VBox/Main/include/MachineImpl.h	(revision 10693)
@@ -240,4 +240,5 @@
         ULONG          mMonitorCount;
         TSBool_T       mHWVirtExEnabled;
+        BOOL           mHWVirtExNestedPagingEnabled;
         BOOL           mPAEEnabled;
 
@@ -469,4 +470,6 @@
     STDMETHOD(COMGETTER(HWVirtExEnabled))(TSBool_T *enabled);
     STDMETHOD(COMSETTER(HWVirtExEnabled))(TSBool_T enabled);
+    STDMETHOD(COMGETTER(HWVirtExNestedPagingEnabled))(BOOL *enabled);
+    STDMETHOD(COMSETTER(HWVirtExNestedPagingEnabled))(BOOL enabled);
     STDMETHOD(COMGETTER(PAEEnabled))(BOOL *enabled);
     STDMETHOD(COMSETTER(PAEEnabled))(BOOL enabled);
Index: /trunk/src/VBox/Main/xml/VirtualBox-settings-common.xsd
===================================================================
--- /trunk/src/VBox/Main/xml/VirtualBox-settings-common.xsd	(revision 10692)
+++ /trunk/src/VBox/Main/xml/VirtualBox-settings-common.xsd	(revision 10693)
@@ -413,4 +413,8 @@
 </xsd:complexType>
 
+<xsd:complexType name="THWVirtExNestedPagingType">
+  <xsd:attribute name="enabled" type="xsd:boolean" default="true"/>
+</xsd:complexType>
+
 <xsd:complexType name="TPAEType">
   <xsd:attribute name="enabled" type="xsd:boolean" default="false"/>
@@ -420,4 +424,5 @@
   <xsd:sequence>
     <xsd:element name="HardwareVirtEx" type="THWVirtExType" minOccurs="0"/>
+    <xsd:element name="HardwareVirtExNestedPaging" type="THWVirtExNestedPagingType" minOccurs="0"/>
     <xsd:element name="PAE" type="TPAEType" minOccurs="0"/>
   </xsd:sequence>
